No pixel without
a passport.
3,491 CSS custom properties. Every visual value resolves through the chain — component → semantic → primitive — and components may never touch a raw value. That's why dark mode costs zero component code.
Three layers, one direction
A component asks for meaning. Meaning asks for a value. Only the bottom layer knows what a hex is.
Click any swatch to copy its token
Two families, one law
Inter carries the UI. IBM Plex Mono carries data — IDs, timestamps, code, metrics. Mono is never a label and never a heading.
The interface voice
Headings, labels, paragraphs, buttons, navigation — everything a human reads as language.
the data voice
Run IDs, timestamps, token names, code, metric values — everything a human reads as data.
The 13 OIText variants — live, at true size
A 4px base, nothing in between
Radius — six stops
Brick spacing math
The canvas breathes on a fixed rhythm — no component decides its own margins.
between bricks 24px
between rows 12px
The closed scale
Four heights. Not a suggestion — a closed set.
Two curves for everything
--oi-motion-spring
280ms cubic-bezier(0.34, 1.56, 0.64, 1)
Entrances, hovers, anything that should feel alive — a slight overshoot, never a bounce.
--oi-motion-snap
140ms cubic-bezier(0.4, 0, 0.2, 1)
State changes, toggles, tab switches — instant confidence, no theater.
The modernization vocabulary in one control: inset top highlight → depth, teal glow halo on hover, focus ring for keyboards, scale(0.98) on press.