Color

A restrained palette with one primary action color and feature-specific tokens for status and feedback. Every UI value resolves to a token. The default theme is Light + Blue; mode (light · dim · dark · hc) and accent (blue · indigo · teal · violet · amber · slate) compose independently via data-mode and data-accent.

FamilyTokensRole
Action & brand--btn-primary, --btn-primary-hover, --btn-danger, --green, --status-newThe primary blue + feature tints for status pills.
Text--text-primary, --text-secondary, --text-helpThree ink levels — never use opacity to dim text.
Surfaces--body-bg, --card-bg, --nav-bg, --row-hover, --row-selected-bg, --borderLayered backgrounds + the hairline border that carries most of the depth.

Typography

Helvetica Neue across the entire app. No monospace in UI, no display fonts. The type scale is fixed: 12 / 14 / 16 / 18 / 22 / 26 / 32. Any value outside this scale is a bug. Pair every numeric column with font-variant-numeric: tabular-nums for vertical alignment.

RoleSize · weightUse for
Heading 1 — page title32 / 700The h1 on a page header. One per page.
Heading 2 — section22 / 700Major sections inside a page.
Heading 3 — subsection18 / 600Subsections within an h2.
Heading 4 — header titles16 / 600Entity titles in page headers, card titles.
Heading 5 — card titles15 / 600Titles inside cards and side panels.
Body14 / 400Default for almost everything: labels, list rows, dropdown items.
Help / meta12 / 400Only when the row already carries a 14 px primary label.

Spacing

A 4-pixel base scale. Every padding, margin, and gap in the system resolves to a step on this scale — no in-between values. Pick the smallest step that gives the surface room to breathe; densification is a feature, not a fault.

TokenValueUse for
space.14 pxInline icon gap, segmented-control internal gutter.
space.28 pxField row gap, button label gap, dropdown item leading icon.
space.312 pxCompact card padding, dense table row vertical padding.
space.416 pxDefault — most card padding, form field stacks, toolbar gaps.
space.520 pxComfortable card padding, side panel padding.
space.624 pxSection gaps within a page, content-well horizontal padding.
space.832 pxPage padding, between distinct page regions.
space.1248 pxBetween major page sections (hero → body, section → section).
space.1664 pxTop-of-page hero margin, modal-to-edge breathing room.

Layout

A persistent two-shell layout — fixed side navigation, frosted top bar, scrolling content well between them. Every app surface composes inside this shell; no full-bleed pages. Side nav is position:fixed (60 px collapsed or 165 px expanded); top bar is position:fixed (48 px tall, anchored from sidebar's right edge to viewport right).

BreakpointRangeBehavior
Wide≥ 1440 pxSide nav expanded, multi-column dashboards, full-width tables.
Standard1024 – 1440 pxSide nav expanded, single-column body, standard density.
Compact768 – 1024 pxSide nav auto-collapses to icon-only; content keeps standard density.
Below< 768 pxOut of scope — not a supported breakpoint for the work surface.

Elevation & radius

Three shadow levels. Every shadow uses the same color (rgba(9,30,66,...)) at different intensities — never CSS-default black shadows. Hairlines (1 px borders at low opacity) carry most of the depth; shadows just float surfaces above the page. Three radius sizes: sm 6 px (controls, inputs, list rows), md 8 px (cards, dropdowns, modals), lg 12 px (hero surfaces). Pills use 999 px for full half-circle ends.

Motion

Motion is functional, not ornamental. It signals "something happened" or "this is what you just clicked" — never decorates. One curve for everything: cubic-bezier(0.4, 0, 0.2, 1). Four durations: 120 ms (hover affordances), 180 ms (toggles + caret rotation), 250 ms (panel slide-in), 300 ms (sidebar collapse).

Iconography

A unified stroke-based icon set rendered as inline SVG via a single document-level sprite. Icons inherit color through currentColor — never tint them with explicit fill or stroke values in markup. 24×24 viewBox regardless of rendered size. 1.5–2 px stroke with round caps + joins. Four sizes: .sm 12 px, default 16 px, .lg 18 px, .xl 24 px.