Foundations. Tuned.
One mood. One mark. Seven principles. Color, typography, spacing, motion — assembled from the same restraint Lumen asks of every consumer.
Color
Three families do the work — obsidian (canvas, neutral near-black at #0D0D0D), neutral (paper + cool grays), accent (Spring Green #00FA8A, the only loud color). Status hues stay polite. v0.12 retires the v0.11 mint undertone; the single-accent discipline is unchanged.
lumen-red10 stopslumen-amber10 stopsTypography
Satoshi does everything. UI, display, numerics, code, editorial — one typeface, one weight ladder, one set of OpenType features. v0.10 retired JetBrains Mono and Source Serif 4; numeric and code moments now ride Satoshi's tabular-nums + slashed-zero feature set. The display ceiling stays at 128 px so brutalist headlines breathe; italic accents stay reserved for one signature word.
- Satoshi+UI · displayBody, headings, marketing display, controls. Weights 300–900 with italic VF. The default everywhere.ITF-FFL · free for commercial use · self-hosted
- Satoshi+numerics + code.lumen-mono / .text-data-* / .text-code-* — Satoshi with calt off, tabular-nums + slashed-zero on. Reads as instrument-panel data without leaving the family.OpenType: tnum · lnum · zero · case · pnum
- Satoshi+editorial.prose-lumen / .text-prose-* — Satoshi at editorial scale with ligatures + proportional figures. Italic accents handle one-word display moments.OpenType: liga · pnum · ss01–ss04 · italic VF
Spacing · 4-point base, 8-point soft
Lumen runs on a 4-point base, 8-point soft grid. Every structural pixel snaps to 4; most snap to 8. Section gaps, control heights, paddings, and gaps between siblings prefer multiples of 8 (8, 16, 24, 32, 40, 48, 64, 80, 96, 128). The 4-step is the standard fine-tune; 6 (--space-1_5) is the documented sub-grid stop for genuine optical work. Decorative pixels (border radius, focus ring, dot indicators) stay free of the grid.
Radius
The radius scale reads as 'modern' against the neutral obsidian canvas. Inputs at 8, cards at 12–16, hero surfaces at 20–28. Pills (radius.full) reserved for nav and primary CTAs. v0.12 keeps the v0.4 ratio intact.
Elevation
Hairline borders do most of the surface separation work. Shadows are multi-layer, reserved for genuine lift — popovers, drawers, modals, toasts. v0.14 R11 retired chromatic-tinted shadows wholesale: every shadow token now resolves to a neutral cream/ink alpha, and primary CTAs ride their green BG fill — not a halo. See ADR 0030.
shadow.xsshadow.smshadow.mdshadow.lgshadow.xlshadow.2xlSurfaces
Canvas, raised, glass, glow. Cards stay flat with a hairline by default; reach for glass when something genuinely floats; reach for glow when something is the brand's voice.
Calm and lit from within.
Surfaces stay flat. Lime carries the energy on its own.
Motion
Decelerate, don't bounce. Hover the play button to fire each duration; click to replay. Standard easing carries 95% of UI motion. The pulse on LiveDot, the marquee on RateTicker, and the radial aurora fade-in are the only signature loops.
Iconography
Single 1.5 px stroke, 24 px grid, rounded ends, no fills. Custom logistics set sits inside the same drawing language.
Voice
The system's typographic idiom. Brutalist hairline frames around statement headlines. Mono uppercase tracked-out labels for system metadata. Italic accents reserved for one signature word per hero.
Stop re-designing.
Controls
Inputs, switches, sliders, and the form scaffolding around them. Every control honours focus visibility and screen-reader semantics.
Display
Identity, presence, status, and the placeholders that stand in while data loads.
Live-data signatures
The three primitives that carry Warp's instrument-panel mood across every surface — Stat, LiveDot, RateTicker. v0.14 R11 retired the spring-green-glow ambient that earlier rounds layered behind these primitives; the 8 pt grid + neutral elevation now do the amplifying, and the green appears only on the LiveDot itself.