uiui

A dense console UI kit inspired by the Unifi console. One CSS file, every widget on this page, light and dark.

Home Office
Network
Protect
console
JT
Clients
1 3 4 38
InternetHealthy
Down940 Mbps
Up38 Mbps
11 ms 24 ms 19 ms
WiFi experience96%
Good 31 Fair 5 Poor 2
Threats blocked17
2Mon
4Tue
1Wed
0Thu
6Fri
3Sat
1Sun

Throughput

DownloadUploadPlan limit
1 G500 M000:0006:0012:0018:00now

Core Switch

Online
24-port PoE192.168.1.2 · 4.2.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1 GbE 100 M 10 G Off
Name IPConnected toLinkSignalUsageUptime
Kitchen Display192.168.1.24Loft AP5 GHz128 MB1 h 12 m
Studio Laptop192.168.1.31Studio AP6 GHz6.4 GB3 d
Media Server192.168.1.5Core Switch1 GbE212 GB41 d
Garage Camera192.168.0.44Garage SwitchPoE18 GB12 d
Porch Light192.168.0.71Garden AP2.4 GHz4 MB9 d
Thermostat192.168.0.80Hall AP2.4 GHz11 MB27 d
Backup NAS192.168.1.6Core Switch1 GbE96 GB41 d
Lab Pi192.168.1.140Core Switch1 GbE1.2 GB6 d
Hall Phone192.168.1.52Hall AP5 GHz310 MB14 m
Vacuum192.168.0.90Garden AP2.4 GHz22 MB2 d
1–10 of 38
Client settings applied

Getting started

uiui is a plain-CSS design system inspired by the Unifi console, for dense operations UIs: network dashboards, device managers, admin panels, anything with many rows and a handful of colored numbers. One stylesheet, no build step, every class prefixed ui-.

<link rel="stylesheet" href="uiui.css">
<body class="ui"> … </body>

<!-- icons: lucide sprite, referenced by id -->
<svg class="ui-icon"><use href="lucide-sprite.svg#wifi"/></svg>

Using shadcn/ui or Tailwind instead? uiui.css also defines the shadcn variables (--background, --primary, …) and there is a theme in registry/uiui-theme.json. See skill.md for the agent-facing summary.

Example pages

Full screens assembled from the widgets below. Open one, then copy the shell and swap in your own data.

Color

Four graphite surfaces, one blue, and a small set of semantic colors. Blue is for interaction: links, selection, primary buttons, the active tab. Green means healthy, and nearly everything else is text-2 grey.

--ui-bg#131416 page, sidebars
--ui-surface#1c1e21 cards, selects
--ui-input#25272a text inputs
--ui-raised#282b2f top bar, chips, hover
--ui-border#232526 hairlines
--ui-border-2#34383d outlines
--ui-selected#18212e selected row
--ui-accent#4797ff links, primary, active
--ui-accent-dim#386197 solid segmented tab
--ui-accent-deep#05254d active rail, timeline
--ui-text#dee0e3 body
--ui-text-2#929497 secondary, values
--ui-text-3#6b6e72 placeholders, offline
--ui-green#37be60 healthy, GbE
--ui-lime#b0d322 100 Mbps
--ui-yellow#dfc116 warning, threshold
--ui-orange#e79613 fair, busy
--ui-red#ee6368 error, destructive
--ui-purple#b47cde upload
--ui-cyan#5aa9c9 chart line, 10 GbE
--ui-gray#50565e disconnected port, switch off
--ui-allow#42674f matrix allow
--ui-block#755b5e matrix block
--ui-return#2a4c5b matrix allow-return

Text color utilities

default .ui-muted .ui-dim .ui-bright .ui-accent .ui-green .ui-lime .ui-yellow .ui-orange .ui-red .ui-purple 18.4 Mbps 2.1 Mbps

Typography

Inter (or the system sans), 13px body, 12px secondary, 11px bold section titles. Tabular figures and slashed zeros are on by default so columns of numbers line up and 0 never reads as O.

16px · 600 · page title
Network overview
14px · 600 · card title
Connection details
13px · 400 · body / table
Kitchen Display connected to Loft Access Point on channel 44 at 780 Mbps
12px · 400 · secondary
Last seen 2 minutes ago · 192.168.1.42
11px · 700 · section label
CONNECTION TYPE
11px · 400 · helper
Leave blank to assign automatically.
tabular + slashed zero
0 10 100 1000 · 00:00 · 192.168.0.100
mono
3A:F1:9C:0B:7E:21

Icons

Icons are lucide (ISC license), vendored as one SVG sprite. Use 16px at 1.75 stroke in text, 20px at 1.5 stroke in the icon rail. Icons take currentColor, so color them with the text utilities.

Vocabulary used by the console metaphors

App shell

The frame every screen sits in: a raised top bar with tabs, a 48px icon rail, an optional filter sidebar, the main area, and an optional right-hand detail drawer. Grid areas handle it; drop the sidebar or drawer element and the grid collapses.

Home Office
Network
console
JT
Main content
Do
  • Keep the top bar at 48px and the rail at 48px wide.
  • Center a muted product name in the top bar.
  • One active rail icon, filled with the deep-blue halo.
Don't
  • Put text labels in the rail; use tooltips.
  • Stack two sidebars. Filters live left, details live right.
  • Use a drawer wider than 360px.

Buttons & links

Primary blue for the one action that matters, raised grey for everything else. Destructive actions are red text links, never red fills. Actions in cards are plain links separated by a hairline.

Link rows

Inputs

Inputs sit on a slightly lighter surface than the page, with no visible border until focus. Labels are 11px grey above the control. Search boxes use the raised surface and a leading icon.

sec
Shown only to administrators.
Managed by the DHCP server.

Checkbox · Radio · Switch

Checkboxes fill blue with a white tick. A count in parentheses after the label is the filter-sidebar convention. Switches are a 32×18 pill: blue on, gray off.

Segmented controls & chip groups

Segmented controls choose one of a few modes and never wrap. The default flavor shows the active tab as a raised pill with blue text. The solid flavor fills it with dim blue, used for time ranges. Chip groups are multi-select toggles with an outlined active state.

Sidebar sub-tabs (icon only until selected)

Sliders

A thin track with a white thumb, tick labels underneath. Range filters in the sidebar use two thumbs and show the selected span above.

-60 dBm
-90-75-60-45-30
TX Power · 18 dBm
LowMediumHigh

Form rows

Settings pages put the label on the left in a 240px column and the control on the right. Related controls nest in a stack under one label. Section titles in cards carry an icon on the left and a collapse chevron on the right.

Internet

Name
Connection
Speed
Mbps
download
Mbps
upload
Used to size smart queues.
Advanced

Badges · Dots · Meters

Status is a 6px dot next to the name, never a colored row. Chips are grey by default; the blue chip marks "you" or an active filter. Risk and severity are three- or four-dash meters, colored by level.

Home Office 5 GHz +4 you Online Blocked Pending Guest × Live New
Risk Risk Risk Severity KD GC LP HO Studio Laptop (2)

Count strips and pill stats

1 3 4 38
15 ms 29 ms 7 ms
Download940 Mbps
Upload38 Mbps
Latency11 ms

Data table

31px rows, 13px text, a hairline between rows and nothing else. Headers are bold white; the sorted column is blue with an arrow. Offline rows go text-3 grey. The selected row gets the navy fill and a 2px blue left edge. Numbers are right-aligned in tabular figures.

Name IP Address Connection Network Experience Down Up Uptime
Kitchen Display192.168.1.42Loft AP · 5 GHzDefaultExcellent18.4 Mbps2.1 Mbps3d 4h
Studio Laptop you192.168.1.17Studio AP · 6 GHzDefaultExcellent412 Mbps31.7 Mbps12h 6m
Garage Camera192.168.0.103Garage Switch · Port 4CamerasExcellent0 bps4.8 Mbps21d 2h
Hallway Bulb192.168.0.71Hall AP · 2.4 GHzIoTFair0 bps0 bps9d 11h
Office Printer192.168.1.90Core Switch · Port 12DefaultGood2.2 kbps640 bps40d 1h
Guest Phone192.168.1.208GuestOffline
Rows per page1-6 of 6

Compact table inside a card, with tiny channel headers and heat cells

Access Point36404448149153Clients
Loft AP9
Studio AP6

Filter sidebar

A 260px column of collapsible sections. Each title is 11px bold caps with a chevron; options are checkboxes with counts. Sliders filter ranges, switches flip view options, and the footer holds Clear Filters plus page actions.

Cards & key-values

Cards are the surface color with 8px corners and no border. Inside a drawer they hold a title row and a key-value list: key on the left in body text, value on the right in text-2. Stat cards are the same list with an icon in the key.

Overview

ConnectedLoft AP · 5 GHz
Channel44 (80 MHz)
Signal-52 dBm · Excellent
IP Address192.168.1.42
MAC3A:F1:9C:0B:7E:21
Uptime3d 4h 12m

Devices

View All
Gateway1
Switches3
Access Points4
Clients38

Threats

No threats detected in the last 24 hours.

Speed Test

Download940 Mbps
Upload38 Mbps

Device hero and link line

Core Switch24-port · 192.168.1.2
Fiber ISP

Detail drawer

A 360px right panel: centered title with a close button, a three-icon segmented control for Overview / Stats / Settings, then stacked cards. Destructive actions are red links at the bottom. Quick actions are small icon tiles.

Icon tiles

Rows of small outlined tiles with a count above and a label below. Used for Top Access Points, Top Clients and Top Apps. The selected tile gets a blue ring.

Top Access Points
14Loft AP
9Studio AP
6Hall AP
2Garden AP
Top Apps
Streaming
Backup
Gaming
Chat

Port grid

Two rows of 38px squares, numbered bottom-left, colored by negotiated speed. A lightning glyph marks PoE; a small icon in the corner marks uplink or error. Grey means nothing is plugged in.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1 GbE 100 Mbps 10 GbE Disconnected⚡ PoE
mini variant for table cells

Zone matrix

Source zones down the side, destination zones across the top. Each cell is a muted green (allow), maroon (block) or teal (allow return traffic) tile with a policy count in the corner. Click a cell to edit its policies.

Destination
Source
InternalExternalGuestIoTVPN
InternalAllowAllow2AllowAllowAllow
ExternalReturnReturnReturnBlock
GuestBlock1AllowBlockBlockBlock
IoTBlock3AllowBlockAllowBlock
VPNAllowAllowBlockAllowAllow

Charts & bars

Charts are inline SVG in a .ui-chart wrapper: dotted grid, 10px grey axis text, 1.5px lines. Download is cyan or blue, upload is purple, thresholds are dotted yellow. Bars are 6px tracks. Distribution buckets run red → orange → yellow → green.

DownloadUploadPlan limit
900600300000:0006:0012:0018:00now
Airtime · 5 GHz62%
Own traffic Interference
Storage41 / 128 GB
Connection health
Association100%
Authentication100%
DHCP100%

Signal buckets and gradient scale

1-90
0-85
2-80
3-75
4-70
6-65
9-60
8-55
4-50
1-45
0-40
0-35
035%+
030%
125%
220%
315%
710%
145%
110%
-90-80-70-60-50-40-30

Channel plan

3640444852566064100104108112149153157161
20 MHz
40 MHz
80 MHz
160 MHz
In use Available DFS Not allowed Excluded

Spectrum bands

-30-60-903652100132149

Timeline

A narrow vertical rail for scrubbing history. Ticks on the left, a navy band for the loaded window, and a blue LIVE marker at the top.

Time Machine
LIVE
14:00
13:00
12:00
11:00
10:00
Event log for the selected window goes here.

Event rows

14:02:11 Guest Phoneconnected to Hall AP on 2.4 GHz
13:48:30 Loft APchanged channel 44 → 149 (interference)
13:11:07 Gatewayblocked outbound connection from 192.168.0.71

Diagram nodes

Topology and policy diagrams use solid navy nodes for devices, dashed blue outlines for groups, and thin blue edges with a small label. Routing choices are shown as wide cards.

InternetFiber ISP
WAN1
Gateway192.168.1.1
10 GbE
Switches
Core
Garage
Add device
DirectTraffic leaves via the primary link.Manage
Through VPNRoute selected clients through a tunnel.Set up
FailoverSwitch links when the primary drops.Set up

Settings navigation

A 210px column: search on top, then icon rows for sub-sections, section labels, and a dotted connector between a parent and its child items. The active item is the raised surface with blue text.

Option cards & toggle rows

When a setting is one of a few big choices, list them as option cards in a surface column, and open the selected one in a panel with a blue outline. Feature toggles with descriptions are toggle rows.

Server

Let remote devices connect into this network.

RemoteGatewayLAN

Client

Route this network's traffic through a remote server.

LANGatewayRemote

Site to Site

Join two networks as if they were one.

Server

Name
Protocol
Port
Clients
Smart queues
Prioritise interactive traffic when the link is saturated.
Device fingerprinting
Identify device types from their traffic patterns.
Ad blocking
Block known advertising domains at the DNS level.

Notices · Tooltips · Toast

Notices are quiet surface blocks with an icon, a bold first line, and an optional close. Tooltips are raised, shadowed, and may carry a title with a key-value list. Toasts confirm an action in the same words as the button that caused it.

Changes take effect on next reconnectDevices already connected keep their current settings until they roam or reconnect.
160 MHz needs DFS channelsRadar detection may move this access point off its channel for up to a minute.
Link down.WAN2 has been unreachable for 4 minutes.
Leave empty to pick a channel automatically.
Reconnect this client
Loft AP · 5 GHz
Clients14
Channel44 (80)
Utilization38%
Changes applied
Could not reach Garage Switch

A 400px raised dialog: title row with close, an optional search, content, and a footer with the secondary action on the left and Cancel + primary on the right.

Choose an icon
Display
Laptop
Phone
Camera
Bulb
Printer
TV
Watch
Plug

Glossary

The words this site uses for its parts, so people and agents mean the same thing.

Shell
The fixed frame of a console page: topbar, rail, sidebar, main and drawer (.ui-app).
Rail
The narrow icon-only column on the far left that switches between sections.
Sidebar
The filter or navigation column between the rail and the main area.
Drawer
The detail panel docked on the right that shows the selected item.
Chip
A small rounded status label such as Online or Blocked (.ui-chip).
Meter
Four short bars showing signal quality; level 1 is best, level 4 is worst (.ui-meter).
Segmented control
A row of joined buttons where exactly one is active, used for time ranges and tabs (.ui-seg).
Key-value list
Label on the left, value on the right, one row per fact (.ui-kv).
Port grid
A switch faceplate of numbered squares coloured by link speed (.ui-ports).
Zone matrix
A grid of allow, block and return cells showing traffic rules between zones (.ui-matrix).
Bucket
A short row of coloured boxes, one per day or band, each holding a count (.ui-buckets).

Principles

What makes a screen feel like this system rather than a generic dark dashboard.

Density is the point
  • 31px rows, 13px text, hairlines only. No zebra striping, no card per row.
  • Pack the sidebar with counts in parentheses; that is the scan aid.
  • Values are text-2 grey; only the exception gets a color.
Blue means "you can act here"
  • Links, active tabs, checked boxes, primary buttons, the selected row edge, the sorted header.
  • Never use blue as decoration or as a data color except for download.
Status is small
  • A 6px dot, a chip, or a colored word. Never a tinted row or a giant badge.
  • Green good, yellow ok, orange fair, red bad, grey offline.
Three surfaces, nothing else
  • Page, surface, raised. Depth comes from the step between them, not from shadows or borders.
  • Cards have no border. Inputs have no border until focused.
Labels are quiet, numbers are tabular
  • 11px grey labels, 11px bold section titles, slashed zeros everywhere.
  • Right-align numeric columns and give them units.
Destructive is a link
  • Reconnect / Block / Remove are red text, stacked at the end of a drawer.
  • Confirm in a modal; never in a toast.

For agents

If you are generating a page with this system, read skill.md. The short version: wrap the page in .ui, compose from the classes above, use the lucide sprite for icons, invent device names and use 192.168.0.x / 192.168.1.x addresses, and pick one of the example pages as the starting shell.