Web design system
Color tokens, typography, dark/light theme remapping, and contrast invariants for the exocomp web surface.
The exocomp web surface renders from the design tokens defined in internal/web/tokens.css and the design authority DESIGN.md.
It represents a single-operator instrument panel engineered for high information density, strict contrast ratios, and low visual fatigue.
Themes
The interface supports two complete color themes:
- Dark (native):
#0A0C0Dvoid backplate. Optimized for OLED monitors and terminal parity. - Light (warm remap):
#F5F2ECvoid backplate. A warm, low-chroma palette styled after physical laboratory notebooks.
The theme toggle cycles through System → Light → Dark. Contrast ratios are measured strictly against the tray surface where tokens sit (#171C1E in dark, #FFFDF9 in light).
Core invariants
ink-600is never applied to text:ink-600(#6B7477in dark,rgba(60,50,38,.28)in light) has a contrast ratio of 3.6:1. It is strictly constrained to decorative structural elements (dots, rules, dividers). Applyingink-600to readable text fails WCAG AA standards and is a review violation.font-variant-numeric: tabular-numsis mandatory for numbers: All digits (timestamps, exit codes, resource counts, byte sizes) must align vertically. CSSfontshorthand declarations must never be placed aftertabular-numson matching selectors, as thefontshorthand resets all variant properties.- Status before detail: The primary dashboard screen must resolve whether the estate is healthy in under ten seconds without scrolling.
- State is colour plus word:
No UI indicator relies solely on color. A red chip must include the textual state
FAILorDOWN. - Truth over reassurance: No animated loading spinners, fake progress bars, or vanity metrics. Timestamps, exit codes, and byte counts are shown plainly.
Palette tokens summary
| Token | Dark role | Light role | Contrast (Dark) |
|---|---|---|---|
--surface-void |
#0A0C0D |
#F5F2EC |
Backplate |
--surface-rail |
#0E1112 |
#EFEBE3 |
Left navigation |
--surface-card |
#121618 |
#FFFDF9 |
Card and tables |
--surface-tray |
#171C1E |
#FFFDF9 |
Raised group tray |
--ink-100 |
#ECEFF0 |
#1D1A16 |
14.6:1 (Headings) |
--ink-200 |
#D6DBDD |
#3A352E |
11.7:1 (Body text) |
--ink-400 |
#A6AFB2 |
#6B655B |
7.5:1 (Secondary) |
--ink-500 |
#8A9296 |
#6B655B |
5.4:1 (Timestamps) |
--ink-600 |
#6B7477 |
rgba(60,50,38,.28) |
3.6:1 (Rules/dots only) |
--signal-ok |
#4FB86B |
#2D8A46 |
7.9:1 (Healthy) |
--signal-wait |
#E3A008 |
#A36B00 |
7.6:1 (Approval/drift) |
--signal-fail |
#F0645A |
#C8372D |
5.4:1 (Failure/error) |