Color tokens
The Signal Scarlet color design language — primitive OKLCH ramps, per-mode semantic tokens, and contrast-checked accents, all generated from one source.
Signal Scarlet is the color language: a monochrome graphite base lit by a
single high-contrast scarlet accent, with an inverted "bone" light mode. Every
color is a token authored in OKLCH — no component hardcodes a color, and
the whole palette is generated from a single
source (scripts/tokens.mjs)
into both the app CSS and the installable registry, so they can never drift.
The
signal-*token names map to the brand accent 熾火 Signal Scarlet (#EE343B) — the one loud color in an otherwise achromatic system.
The system has three tiers:
- Primitives — OKLCH ramps (
50–950) per hue family. - Semantic — per-mode aliases (
--background,--primary, …) that point at primitive steps. Components only ever use these. - Utilities — every token and ramp step is exposed to Tailwind as
bg-*,text-*,border-*.
Dark is primary. Below, each semantic swatch is split light / dark so you can see how a single token resolves in both modes.
Surfaces & text
The neutral spine of the UI: backgrounds, surfaces, borders and text. These come from two fully achromatic graphite ramps — light bone and dark carbon — and flip between modes for contrast.
light / dark — each token resolves per mode.
--backgroundApp background
--foregroundPrimary text
--cardCard surface
--card-foregroundText on cards
--popoverRaised / floating surface
--surface-2Inset & control surface
--mutedMuted surface
--muted-foregroundSecondary / label text
--borderHairline border
--border-strongEmphasized border
--inputInput border
Primary & focus
The signature accent. --primary is Signal Scarlet (#EE343B) in both
modes — the red is dark enough to read on the light "bone" surface, so no
light-mode swap is needed. The focus --ring shares it, and --signal-spark
(red-on-bone text and hover accents) deepens slightly in light mode for contrast.
--primaryPrimary action — Signal Scarlet (both modes)
--primary-foregroundText on primary
--ringFocus ring
--signal-sparkScarlet accent spark (icons, brackets, rules)
Accents
Status and category colors with shared hues across both modes. Each fill has a
paired foreground token (--magenta-foreground, --success-foreground, …)
chosen for legibility — the ratio shown on each chip is the measured WCAG contrast,
and the build fails if any pair drops below AA (4.5:1).
bg-destructive5.39:1bg-magenta5.08:1bg-cyan11.56:1bg-warning10.41:1bg-success10.26:1bg-info6.63:1bg-special5.20:1bg-destructive-spark/textL 6.54 / D 5.85bg-success-spark/textL 7.05 / D 8.64bg-warning-spark/textL 7.00 / D 8.76bg-info-spark/textL 5.45 / D 5.58bg-cyan-spark/textL 6.64 / D 9.73bg-magenta-spark/textL 6.49 / D 5.76bg-special-spark/textL 6.38 / D 5.88bg-destructive-spark/cardL 7.86 / D 6.42bg-success-spark/cardL 8.47 / D 9.47bg-warning-spark/cardL 8.41 / D 9.60bg-info-spark/cardL 6.55 / D 6.11bg-cyan-spark/cardL 7.98 / D 10.67bg-magenta-spark/cardL 7.79 / D 6.32bg-special-spark/cardL 7.67 / D 6.45bg-signal-spark/bgL 6.47 / D 4.85bg-border-field/surface-2L 4.91 / D 5.15Primitive ramps
Every hue family as a full 50–950 OKLCH ramp. The design's signature values are
pinned at their natural step (e.g. signal-400, magenta-500); the rest of each
scale is generated for hover, active and subtle-background states. Use them
directly when a semantic token isn't enough — e.g. bg-magenta-300 for a faint
wash or border-cyan-700 for a darker edge.
signalmagentacyanwarningsuccessinfospecialdestructivebonecarbonUsage
- Never hardcode a color. Reach for a semantic utility first (
bg-primary,text-muted-foreground,border-border-strong), then a ramp step (bg-success-200) when you need a specific tint. - Pair fills with their foreground. On an accent fill, use the matching
text-*-foregroundtoken so contrast stays correct. - To change the palette, edit
scripts/tokens.mjsand runpnpm gen:tokens— the CSS, the registry, and this page all update together.
Introduction
A themeable React + Tailwind component library — one signal-red cutting across a monochrome graphite HUD, built for dense, high-contrast console interfaces.
Button
Squared technical button with signal, ghost, outline-tech, destructive-hazard, and data variants, plus a built-in loading state.