skip to content

foundations

Color

One accent, five ramps, and a set of semantic roles that re-point when the theme flips.

neutral ramp

19 steps

Warm-shifted graphite. It reaches pure black and pure white at both ends, because the contrast between an absolutely white plane and an absolutely black rule is what the system is built on. Click any swatch to copy its token.

signal hues

one accent, four semantics

Orange is the accent and marks the active thing. Ultramarine is the only color permitted to fight it, and only for category coding. The remaining three report state and nothing else.

orange

blue

green

amber

red

semantic roles

theme-aware

Consumers only ever use these. They re-point when the theme flips, so no component knows which theme is active — toggle the theme in the header and watch both the values and the measured ratios change.

 tokenrolevalueratio · min
--canvaspage background
--surface-1panel fill
--surface-2inset / secondary panel
--text-1primary text
--text-2prose
--text-3labels and captions
--text-mutedhints and dimmed values
--border-1decorative hairline
--border-interactivecontrol edge
--border-3emphasis rule
--accentthe one accent (a fill)
--accent-markthe accent as a thin mark
--okstate: ok
--warnstate: warn
--errorstate: error
--infostate: info

Ratios are measured against --surface-3 at render time, not recorded in a table that can go stale. Not against --surface-1: a role has to hold on the darkest surface it may sit on, and --surface-3 is the hover and selected step. Text roles are held at 4.5:1. Roles that carry meaning without being text are held at 3:1. Surfaces and the decorative hairline show no ratio.

pagecolorthemelighttokenscopy2026srclinknominal