Visual acceptance suite

Component catalog

Every reusable primitive belongs here before it is adopted downstream.

Color

Surface and semantic hierarchy.

Canvas--bg-000
Elevation 1--bg-100
Surface 1--bg-200
Surface 2--bg-300
Surface 3--bg-400
Hover--bg-500
Sidebar--bg-sidebar
Toolbar--bg-toolbar
Raised--bg-raised
Accent--accent
Accent soft--accent-soft
Success--success-soft
Warning--warning-soft
Danger--danger-soft

Theme gallery

Each tile is a miniature of the shell, resolving from that theme's own tokens.

A theme owns the ground, the sidebar, the surface ramp, the borders and the text ramp, so a tile previews the whole shell rather than a dot of accent. Every tile carries its own data-hp-theme/data-theme, so it renders from real tokens and cannot go stale. The interactive copy of this gallery -- clicking a tile applies the theme -- lives on the Settings page.

Mode is a separate axis: the tile's own data-theme flips its preview independently of the page's mode. Same theme, both modes:

Typography

Sans interface, optional serif display, monospace evidence.

Section label

Page heading

Section heading

Component heading

Body copy carries explanation without competing with the values around it.

Inline action link

A warmer display voice.

event_id=7d0b2e status=verified

fetch('/api/state')
  .then(response => response.json());
+ spawned: powershell.exe -enc SQBFAFgA...
+ opened: C:\Windows\Temp\stage2.dll
- listening: 127.0.0.1:4444
- process: svchost.exe (pid 2204)
Press Ctrl + K to search.

Buttons

Primary is reserved for the next best action.

Forms

Clear labels, contained focus, concise help.

Visible to members of this project.
⌘ K
Enter a valid hostname.

Status and feedback

Color is semantic and localized.

Selected Healthy Informational Pending Failed Critical Neutral
completed failed timed_out running claimed queued
Hover or tab to a plain span ⓘ
A new version is ready to review.
Configuration validated successfully.
Restart required to activate staged settings.
This action invalidates every active session.
Active compromise detected -- outbound exfiltration in progress.
Settings saved
The update is now active.

Data display

Metrics, tables, progress, cards, and empty states.

Requests
2,418
+8% from yesterday
Healthy services
12/12
All operational
Open alerts
3
1 high priority

Loading placeholders

Render-first: a placeholder is drawn as the shape it will be swapped for -- a data card as a data card, a table batch as table rows -- and the card is laid out at the size and position its data will occupy, so the grid around it is settled before the answer arrives. When the data turns out smaller than the space reserved for it, the card shrinks back to the data instead of keeping an empty box.

One slot, three states

Same column, same width, same origin. Loading holds the reserved footprint; a small result shrinks the card to its data; a large one fills the reservation exactly.

Loading — footprint reserved
Hydrated — small result, card shrank to the data
cowrie · session 8f21c 12 hits
admin / passwordstaged
Hydrated — large result, fills the reservation
cowrie · session 8f21c 12 hits
admin / passwordstaged
root / tooraccepted
oracle / oracleprobed
pi / raspberryprobed
admin / 123456probed

Live: reserve, then fit

The same slot driven by buttons: loading reserves, hydration releases the reservation, and the card settles to whatever the data needs.

Shape-matched placeholder primitives

Each surface ships the ghost of its own anatomy: a KPI value, a table batch (.hp-skel-batch rows vary their width by position so a batch does not read as one solid block), and project-grid tiles.

Events · warming
value arrives when the store does
Incoming batch
Project grid warming
Recent activity
Compact rows keep evidence readable.
TimeEventSourceStatus
12:41:08Configuration savedadmincomplete
12:38:44Session rotatedsystemstaged
12:32:17Health checkgatewayhealthy

Responsive data-table (Xore/theme#24 follow-up)

.data-table--responsive: below 720px width each row becomes a stacked label:value block (label from each cell's data-label attribute) instead of a table too wide for the viewport. Resize the window/preview below 720px to see it engage -- at desktop width it renders as an ordinary table.

TimeSource IPPortCountryDetail
17:19:24 203.0.113.55 445 DE HONEYPOT-SCAN VNC interaction [Attempted Information Leak]
17:19:22 18.119.20.95 8092 US ET CINS Active Threat Intelligence Poor Reputation IP
Storage used
18.4 GB of 50 GB
Organization
Project identity
xore-labs
Member
Administrator
XO
Floating above the page
.card--raised: --bg-raised background, --border-200 border, --shadow-raised elevation -- the same trio .dropdown uses.
◇

No saved views

Save a filtered investigation to make it available here.

Card footer alignment (#24)

Same .card class, deliberately mismatched content lengths (one line, a short list, a long/unbounded list) -- .card__footer stays pinned to the bottom edge of every card regardless, and the grid stretches every card in a row to match the tallest one so the row itself reads as one consistent shape.

Storage used
18.4 GB of 50 GB
Recent members
Organization
Project identity
xore-labs
Member
Administrator
XO
Recent activity
12:41:08
Configuration saved
12:38:44
Session rotated
12:32:17
Health check passed
12:29:51
User logged in
12:24:03
Backup completed
12:19:37
Policy updated
12:11:52
Session rotated
12:04:19
Configuration saved

Floating layers

Menus, dialogs, and explicit destructive confirmation.

Hash details
SHA-256 a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

Edit project

Dialogs are focused, compact, and use the raised surface hierarchy.

Delete this project?

This permanently removes its settings and cannot be undone.

Every member loses access immediately. Export anything you need before continuing.