Foundations

Tokens that render the same on a phone and in a browser.
Two neutral ramps, one accent, three faces, one spring and 414 glyphs. Every value lives in src/style/tokens.ts.
AaWGHT 300 → 800 · ONE HUE · ONE SPRING
Color · Ion spectrum
oklch
chart-1
series order is fixed
chart-8
primary: oklch(.74 .17 var(--hue)) dark primary: oklch(.5 .22 var(--hue)) light colorsFor(palette, scheme).primary → #a298ff
Color · Neutrals
dark / light
background
surface-sunken
card
secondary
surface-raised
foreground
muted-foreground
subtle-foreground
Neutrals carry 1–2% blue chroma. Hairlines are alpha white / alpha ink, never a fixed grey.
Type · Scale
Bricolage Grotesque · Instrument Sans · JetBrains Mono
Charged surfaces
display · 56/56 · 500 · −4%
One API, three native looks
h1 · 44/46.2 · 500 · −3%
Section title sets the room
h2 · 34/37.4 · 500 · −2.5%
Card title, dialog title, stat label
h3 · 26/29.9 · 500 · −2%
Row title, control label, button
label · 13/16.9 · 500 · Instrument
Body. Every visual variation is a boolean prop, named for what it means. Passing the prop turns it on.
body · 15/23.25 · 400
Small. Descriptions, helper text, table cells, toasts.
small · 13/19.5 · 400
Meta · 0x3DA3F5 · 12:04 · ⌘K
eyebrow · 11/11 · 500 · Mono · +10%
<Typography display> · <Typography h3> · <Typography body muted> · <Typography tiny> · <Text numberOfLines> for truncation
Shape · Radius
nested ≤ container
10 · control
12 · tile
16 · card
20 · dialog
22 · sheet
full · pill
shape.web = { control: 10, tile: 12, card: 16, dialog: 20, sheet: 22 }
Depth · Elevation
ambient, no offset
flat
card
heroShadow
raised
glass · blur 20 · saturate 1.6 · the layer's under-fill
the shade tokens: shade · shade-md · shade-lg · ≤ .2 α in light
Motion · Spring
transform + opacity only
Glass surfaces
Spinner keeps spinning under reduced motion; it carries information.
reveal ease-out cubic · 460ms (brisk 260ms) hover cubic-bezier(0.25, 0.1, 0.25, 1) · 150–180ms <Reveal> · <RevealGroup> rise 16px once, then stay
Icon · 414 glyphs
outline · 1.75 stroke
default
primary
success
warning
destructive
muted
16
20
24
32
<Icon search /> · <Icon trash2 destructive /> · <Icon bell primary size={20} /> · one weight, everywhere
Emblem · Swatch
32 · 40 · 48
Rk
.32
accent ramp · L in oklch
.93
<Emblem primary><Icon sparkles /></Emblem> · <Emblem success small> · <Swatch block>