ZEROlobby
22/22 strict⌘Kvisitor
skip to main
210 tokens · 17 categories
skin
——:——:——zcovenant · audit
design tokens· 210 tokens · 17 categories · auto-generated · 92 showcased here

tokens are the contract surface

every primitive consumes them. nothing is hand-coded. the engine writes tokens.css, tokens.js, tokens.android.xml, tokens.ios.swift, tokens.d.ts from one source of truth.

playground · live

seven categories · pick any rung · the cascade renders. space drives padding, fontSize drives reading, radius corners cards, opacity thins overlays, motion times transitions, leading and tracking shape paragraphs. authority is tokens.json; the page only renders.

token playground · live· seven categories · 84 canonical tokens · pick a token · the cascade renders--s-416px
space · padding ladderthree rows wrapped at the active space token
row · 01
row · 02
row · 03
fontSize · reading samplethe scale rung in context

the discipline is the luxury · refuse is a brand verb

radius · corneringcard · chip · button
cardchip
opacity · overlayswatch under glass
motion · transition durationhover the chip · the slide takes 220ms
hover me
cascade · all seven appliedthe system reads as one
eyebrow · tracking normal

the cascade · sized 24px · led normal

chip · radius 4 · opacity 60
trade receipt
category
space
token
--s-4
value
16px
active picks
space 4 · fontSize 24 · radius 4 · opacity 60 · motion step
authority
@zero/tokens · tokens.json · single source · build pipeline parity
01 · spacing14 rungs · 8-point base

8-point grid · with 4px half-rung

8-point cadence covers every major rhythm; --s-1 (4px) is the half-rung for tight inline gaps. anything not on the scale is a violation.

--s-00pxcollapse
--s-14pxhalf-rung · gap inside chips
--s-28pxtight · receipt row
--s-312pxcompact · inline gap
--s-416pxstandard · component padding
--s-520pxloose · plate padding
--s-624pxfold gutter
--s-732pxsection spacing
--s-840pxmajor rhythm
--s-948pxfold separator
--s-1064pxsilent space
--s-1196pxeditorial breath
--s-12128pxcathedral pause
--s-13160pxsilence
02 · type · scale16 sizes · canonical

16 rungs · 10px → 80px

the type scale climbs in non-uniform steps · tight at the bottom for receipts and labels, generous at the top for ceremony. nothing renders at a size outside the scale.

plate · 02 · type scale · 16 rungs
metric
token_set
unit
tokens
window
static
agg
identity
source
packages/tokens/tokens.css
fresh
last build
  • --fontSize-10The quick brown foxmicro labels · footnotes
  • --fontSize-11The quick brown foxeyebrows · uppercase metadata
  • --fontSize-12The quick brown foxcaption · table cell
  • --fontSize-13The quick brown foxtight body
  • --fontSize-14The quick brown foxcompact body
  • --fontSize-15The quick brown foxstandard body
  • --fontSize-16The quick brown foxlede / paragraph
  • --fontSize-18The quick brown foxsubheading
  • --fontSize-20The quick brown foxh3
  • --fontSize-24The quick brown foxh2
  • --fontSize-28The quick brown foxfold heading
  • --fontSize-32The quick brown foxeditorial h1
  • --fontSize-40The quick brown foxhero claim · mobile
  • --fontSize-48The quick brown foxhero claim · tablet
  • --fontSize-64The quick brown foxhero claim · desktop
  • --fontSize-80The quick brown foxcathedral · ceremony
03 · familyfour · canonical

jb mono · zero sans · instrument serif · source serif

--mono

JetBrains Mono

the watching eye refuses
stack: ui-monospace · SF Mono · Menlo · Consolas
every receipt, table, code, terminal · the brand voice
--sans

Inter

the watching eye refuses
stack: -apple-system · system-ui · sans-serif
product chrome, claims, cta
--display

Instrument Serif

the watching eye refuses
stack: Georgia · serif
editorial accent, italics only
--serif

Source Serif 4

the watching eye refuses
stack: Charter · Georgia · serif
long-form body, paper editions
04 · colouratomic + semanticlive skin gallery · deep

atomic anchors and semantic roles

atomic tokens are skin-invariant base hues; semantic tokens (brand-signal, data-signal, success, warn, error, info, ground, figure) are re-bound by every skin contract.

A

atomic · skin-invariant

10 tokens
--ink-0#0a0907page ground
--ink-1#11100ccard surface · base
--ink-2#16140felevated input · plate
--ink-3#1c1a14hover surface
--ink-4#22201apressed · selected
--bone-0#f4ebd5highest figure · ≥ 7:1
--bone-1#e2d7bbprimary text · figure
--bone-2#c4b59fbody · receipts
--bone-3#9d8f73caption · meta
--bone-4#7a6f5dsubtle · stamps
B

semantic · skin-bound

8 roles
--brand-signalwordmark · primary cta · active · amber (ADR-001)
--data-signalinheritance · journal · capital
--successpass · gate · pnl up
--warnhold · review · pnl flat
--errorbreach · refuse · pnl down
--infoinfo · neutral status
--groundskin ground · current
--figureskin figure · current
05 · radius0–2px · sharp · paper

brand discipline · max 2px in product

radii above 2px are reserved for ceremonial moments. pills (full radius) are used only for indicator dots and posture badges.

--radius-00pxsharp · default
--radius-11pxpaper · receipts
--radius-22pxcards · plates
--radius-34pxsoft · chips
--radius-46pxrare · ai surfaces
--radius-58pxrare · ceremony
--radius-612pxrare · halo
--radius-716pxforbidden in product
--radius-fullpillpills · dots · indicators
discipline
radius-3 through radius-6 are present in tokens but their use in getzero.dev product surfaces is restricted. the brand book may use them; the floor must not.
06 · hairlines1px · four opacities

1px-only rule · vary by opacity, not weight

--hair-1subtle rule · ≥ 6% opacity
--hair-2card border · ≥ 10% opacity
--hair-3editorial divider · ≥ 18% opacity
--hair-4strong divider · ≥ 34% opacity
07 · motion7 durations · 7 curveslive motion vocabulary · deep

duration tokens · ease tokens

motion tokens drive every animation in every primitive. see /motion for live demos and curve plots.

A

duration · ms

tokenmsuse
--motion-instant0no animation
--motion-flick120micro · snap
--motion-step220gate state · default
--motion-refuse220refusal animation
--motion-breath1200pulse cycle
--motion-ceremony1800spin · ceremony
--motion-tide4000breath · resting state
B

ease · curve

tokenuse
--motion-easeZerosymmetric default
--motion-easeStepsnappy · gate
--motion-easeFlickfast-out cubic · 80% of timeline
--motion-easeBreathlong-cycle · pulse
--motion-easeTidebreath · resting
--motion-easeCeremonyritual · sigil
--motion-easeRefuseovershoot · refusal
08 · densitythree tiers · runtime-setlayout · density tiers · deep

tight · standard · loose

density tokens are runtime-overridable on the shell. the primitives consume the active tier without re-rendering.

tokenvalueuse
--density-row32pxrow height · standard density
--density-padvar(--s-3)cell padding · standard density
--density-font12pxcell font · standard density
--density-gapvar(--s-3)inter-cell gap · standard density
standardtightloose
09 · clocksruntime-written · 0..1

six clocks · all 0..1 floats

the brand runtime writes clock tokens to :root on every frame. primitives reference them as scalar inputs to their CSS · opacity, glow radius, easing target. one source of time, many surfaces.

tokenrangeuse
--hb0..1heartbeat · 1Hz · runtime-written
--hb-bin0..1binary heartbeat · on/off pulse
--breath0..1long cycle · 4s · drives glow + opacity
--drift0..1slow drift · 60s · ambient
--tide0..1tide cycle · 5min · session breath
--pulse0..1pulse intensity · gate-driven
10 · contentmeasure · width

three measures · readable + maximal

tokenvalueuse
--col1chmono character measure unit
--content-max1280pxmax page width · desktop
--content-text-max720pxlong-form measure · ~80 char
12 · catalog17 categories · live

every category · every value · used / max

the catalog below is the brand book reading itself. it importstokens.json at build time, walks the 17-category ADR-009 budget, and renders every value in its native medium — colors as swatches, spacings as bars, motion as ease curves, opacities as overlays. nothing is paraphrased; nothing can drift.

17 categories · per-category ceiling · ADR-009 · packages/tokens

every value rendered · 229 / 323 of the budget

the brand book reading the brand book. the table below is generated from tokens.json at build time; nothing is paraphrased. when a category goes over budget, the build hard-fails before the page can ship.

2 categories over budget. ci will refuse the build until the budget is raised by ADR or a token is retired.

  1. color59 / 64every named hue · skin-invariant atomic + semantic role bindings · skins remap the role layer per data-skin
    • --ink-0#0a0907ink.0
    • --ink-1#11100cink.1
    • --ink-2#16140fink.2
    • --ink-3#1c1a14ink.3
    • --ink-4#22201aink.4
    • --ink-5#2a2820ink.5
    • --bone-0#f4ebd5bone.0
    • --bone-1#e2d7bbbone.1
    • --bone-2#c4b59fbone.2
    • --bone-3#9d8f73bone.3
    • --bone-4#7a6f5dbone.4
    • --bone-5#3a3526bone.5
    • --bone-6#25221abone.6
    • --amber#d6a64aamber.default
    • --amber-soft#c8a064amber.soft
    • --amber-deep#a07a36amber.deep
    • --amber-muted#8a6a30amber.muted
    • --green#6dbf7egreen.default
    • --green-soft#8fcf9bgreen.soft
    • --green-deep#4a8a59green.deep
    • --red#c25e54red.default
    • --red-text#cf6f64red.text
    • --red-soft#d68a83red.soft
    • --red-deep#9a4641red.deep
    • --blue#4a8fb8blue.default
    • --blue-soft#6da5c9blue.soft
    • --blue-deep#2c5e80blue.deep
    • --magenta#b86a98magenta.default
    • --magenta-soft#c98ab0magenta.soft
    • --magenta-deep#7c4566magenta.deep
    • --acid#e5fe40acid.default
    • --acid-deep#b8c828acid.deep
    • --acid-soft#eefe7aacid.soft
    • --cool#7d9aa8cool.default
    • --cool-soft#9ab2bdcool.soft
    • --cool-deep#54707dcool.deep
    • --warm#c79478warm.default
    • --warm-soft#d6ad95warm.soft
    • --warm-deep#9c6e54warm.deep
    • --semantic-fg#e2d7bbsemantic.fg
    • --semantic-fg-muted#c4b59fsemantic.fg-muted
    • --semantic-fg-subtle#9d8f73semantic.fg-subtle
    • --semantic-fg-on-acid#0a0907semantic.fg-on-acid
    • --semantic-fg-on-amber#0a0907semantic.fg-on-amber
    • --semantic-fg-on-red#ffffffsemantic.fg-on-red
    • --semantic-bg#0a0907semantic.bg
    • --semantic-bg-elevated#11100csemantic.bg-elevated
    • --semantic-bg-overlay#16140fsemantic.bg-overlay
    • --semantic-bg-input#1c1a14semantic.bg-input
    • --semantic-border#2a241dsemantic.border
    • --semantic-border-strong#3a3526semantic.border-strong
    • --semantic-border-focus#e5fe40semantic.border-focus
    • --semantic-accent#e5fe40semantic.accent
    • --semantic-brand-signal#e5fe40semantic.brand-signal
    • --semantic-data-amber#d6a64asemantic.data-amber
    • --semantic-danger#c25e54semantic.danger
    • --semantic-success#6dbf7esemantic.success
    • --semantic-warning#d6a64asemantic.warning
    • --semantic-info#4a8fb8semantic.info
  2. space19 / 244-point base · 0px → 320px · half-rung at 4px (var(--s-1)) is the only legal sub-8 step
    • --s-00px
    • --s-14px
    • --s-28px
    • --s-312px
    • --s-416px
    • --s-520px
    • --s-624px
    • --s-732px
    • --s-840px
    • --s-948px
    • --s-1064px
    • --s-1196px
    • --s-12128px
    • --s-13160px
    • --s-14192px
    • --s-15256px
    • --s-16320px
    • --s-px1px
    • --s-0.52px
  3. type7 / 4four families · jetbrains mono / inter / instrument serif / source serif 4 · self-hosted via next/font/google
    • --monothe watching eye refuses · 0123456789var(--font-mono, 'JetBrains Mono'), ui-monospace, 'SF Mono', Menlo, Consolas, monospace
    • --sansthe watching eye refuses · 0123456789var(--font-sans, Inter), -apple-system, system-ui, sans-serif
    • --displaythe watching eye refuses · 0123456789var(--font-display, 'Instrument Serif'), Georgia, serif
    • --serifthe watching eye refuses · 0123456789var(--font-serif, 'Source Serif 4'), Charter, Georgia, serif
    • --shellthe watching eye refuses · 0123456789var(--font-shell, "Suisse Int'l"), 'Helvetica Neue', Helvetica, Arial, sans-serif
    • --narrativethe watching eye refuses · 0123456789var(--font-narrative, 'Untitled Serif'), Georgia, 'Times New Roman', serif
    • --machinethe watching eye refuses · 0123456789var(--font-machine, 'Berkeley Mono'), 'Input Mono', 'IBM Plex Mono', 'SFMono-Regular', Consolas, monospace
  4. fontSize17 / 2016 rungs · 10 → 80 px · the only legal type sizes anywhere in the system
    • --fontSize-1010pxzero refuses
    • --fontSize-1111pxzero refuses
    • --fontSize-1212pxzero refuses
    • --fontSize-1313pxzero refuses
    • --fontSize-1414pxzero refuses
    • --fontSize-1515pxzero refuses
    • --fontSize-1616pxzero refuses
    • --fontSize-1818pxzero refuses
    • --fontSize-2020pxzero refuses
    • --fontSize-2424pxzero refuses
    • --fontSize-2828pxzero refuses
    • --fontSize-3232pxzero refuses
    • --fontSize-4040pxzero refuses
    • --fontSize-4848pxzero refuses
    • --fontSize-5656pxzero refuses
    • --fontSize-6464pxzero refuses
    • --fontSize-8080pxzero refuses
  5. fontWeight9 / 99 weights · 100 → 900 · primitives use medium / semibold / bold; thin/black are display-only
    • --fontWeight-thin100cycle 247,113,244
    • --fontWeight-extralight200cycle 247,113,244
    • --fontWeight-light300cycle 247,113,244
    • --fontWeight-normal400cycle 247,113,244
    • --fontWeight-medium500cycle 247,113,244
    • --fontWeight-semibold600cycle 247,113,244
    • --fontWeight-bold700cycle 247,113,244
    • --fontWeight-extrabold800cycle 247,113,244
    • --fontWeight-black900cycle 247,113,244
  6. lineHeight9 / 6five rhythms · tight → loose · snug for headings · normal for ui · relaxed for prose · loose for cathedral
    • --lineHeight-tight1.1

      two lines of body so the leading rule is visible · two lines of body so the leading rule is visible

    • --lineHeight-snug1.25

      two lines of body so the leading rule is visible · two lines of body so the leading rule is visible

    • --lineHeight-normal1.45

      two lines of body so the leading rule is visible · two lines of body so the leading rule is visible

    • --lineHeight-relaxed1.6

      two lines of body so the leading rule is visible · two lines of body so the leading rule is visible

    • --lineHeight-loose1.85

      two lines of body so the leading rule is visible · two lines of body so the leading rule is visible

    • --lineHeight-title1.2

      two lines of body so the leading rule is visible · two lines of body so the leading rule is visible

    • --lineHeight-body1.55

      two lines of body so the leading rule is visible · two lines of body so the leading rule is visible

    • --lineHeight-body-dense1.45

      two lines of body so the leading rule is visible · two lines of body so the leading rule is visible

    • --lineHeight-machine1.4

      two lines of body so the leading rule is visible · two lines of body so the leading rule is visible

  7. letterSpacing6 / 6six tracks · tighter / tight / normal / wide / wider / widest · widest reserved for uppercase eyebrows
    • --letterSpacing-tighter-0.02emDECISION REFUSED
    • --letterSpacing-tight-0.01emDECISION REFUSED
    • --letterSpacing-normal0DECISION REFUSED
    • --letterSpacing-wide0.04emDECISION REFUSED
    • --letterSpacing-wider0.08emDECISION REFUSED
    • --letterSpacing-widest0.12emDECISION REFUSED
  8. motion20 / 24durations + ease tokens · the chrome verbs and narrative sequences both subscribe to these
    • --motion-instant0ms
    • --motion-flick120ms
    • --motion-step220ms
    • --motion-refuse220ms
    • --motion-breath1200ms
    • --motion-ceremony1800ms
    • --motion-tide4000ms
    • --motion-fast120ms
    • --motion-base220ms
    • --motion-slow420ms
    • --motion-easeZerocubic-bezier(0.65, 0, 0.45, 1)
    • --motion-easeStepcubic-bezier(0.32, 0.72, 0, 1)
    • --motion-easeFlickcubic-bezier(0.16, 1, 0.3, 1)
    • --motion-easeBreathcubic-bezier(0.65, 0, 0.35, 1)
    • --motion-easeTidecubic-bezier(0.25, 0.1, 0.25, 1)
    • --motion-easeRefusecubic-bezier(0.36, 0, 0.66, -0.56)
    • --motion-easeCeremonycubic-bezier(0.83, 0, 0.17, 1)
    • --motion-easeOutcubic-bezier(0.16, 1, 0.3, 1)
    • --motion-easeIncubic-bezier(0.7, 0, 0.84, 0)
    • --motion-easeInOutcubic-bezier(0.83, 0, 0.17, 1)
  9. radius10 / 120px / 1px / 2px in product · 4–16px reserved for ceremony only · `full` (9999px) for indicator dots only
    • --radius-00
    • --radius-11px
    • --radius-22px
    • --radius-34px
    • --radius-46px
    • --radius-58px
    • --radius-612px
    • --radius-716px
    • --radius-full9999px
    • --radius-default2px
  10. hair4 / 61px-only rule · vary by opacity, not weight · 4 strengths · 1 / 1.5 / 2 / inherit
    • --hair-11px
    • --hair-21.5px
    • --hair-32px
    • --hair-default1px
  11. shadow10 / 125 numeric levels + named glows · drop shadows banned in product chrome (covenant rule 10)
    • --shadow-0none
    • --shadow-10 1px 2px rgba(0,0,0,0.40)
    • --shadow-20 2px 6px rgba(0,0,0,0.35), 0 0 0 1px rgba(255,255,255,0.04)
    • --shadow-30 4px 12px rgba(0,0,0,0.40), 0 0 0 1px rgba(255,255,255,0.06)
    • --shadow-40 8px 24px rgba(0,0,0,0.45), 0 2px 6px rgba(0,0,0,0.35)
    • --shadow-50 16px 40px rgba(0,0,0,0.50), 0 4px 12px rgba(0,0,0,0.40)
    • --shadow-amber-soft0 0 24px rgba(214,166,74,0.20)
    • --shadow-amber-glow0 0 36px rgba(214,166,74,0.35)
    • --shadow-red-soft0 0 18px rgba(194,94,84,0.25)
    • --shadow-inset-1inset 0 1px 0 rgba(255,255,255,0.04)
    • shadows are declared in the token graph but covenant rule 10 forbids their use in product chrome. pulse glows + outline rings are the only legal applications. this row exists for parity with the build budget.
  12. opacity13 / 1413 stops · 0 → 100 · used for hairline strength + glass overlays · never below 5 (illegible)
    • --opacity-00
    • --opacity-50.05
    • --opacity-100.10
    • --opacity-200.20
    • --opacity-300.30
    • --opacity-400.40
    • --opacity-500.50
    • --opacity-600.60
    • --opacity-700.70
    • --opacity-800.80
    • --opacity-900.90
    • --opacity-950.95
    • --opacity-1001
  13. z12 / 1412 stacking layers · below → skipLink · the only legal z-index values
    • --z-below-1
    • --z-base0
    • --z-raised10
    • --z-dropdown1000
    • --z-sticky1100
    • --z-rail1200
    • --z-topbar1300
    • --z-overlay1400
    • --z-modal1500
    • --z-tooltip1600
    • --z-toast1700
    • --z-skipLink10000
  14. breakpoint7 / 8seven viewports · xs → 3xl · responsive contract surface for layout primitives
    • --bp-xs320pxat this width or wider · the layout shifts to the next archetype
    • --bp-sm480pxat this width or wider · the layout shifts to the next archetype
    • --bp-md768pxat this width or wider · the layout shifts to the next archetype
    • --bp-lg1024pxat this width or wider · the layout shifts to the next archetype
    • --bp-xl1280pxat this width or wider · the layout shifts to the next archetype
    • --bp-2xl1536pxat this width or wider · the layout shifts to the next archetype
    • --bp-3xl1920pxat this width or wider · the layout shifts to the next archetype
  15. layout6 / 8six size constants · text measure · rail / topbar / status heights
    • --layout-content-text-max720px
    • --layout-content-wide-max1100px
    • --layout-content-full-max1440px
    • --layout-rail-width240px
    • --layout-topbar-height44px
    • --layout-status-height32px
  16. blur7 / 8seven blur stops · used by glass surfaces + ambient backdrops · 0 → 40px
    • --blur-00
    • --blur-14px
    • --blur-28px
    • --blur-312px
    • --blur-416px
    • --blur-524px
    • --blur-640px
  17. gradient3 / 4three named gradients · amber-fade · ink-fade · topbar-glass · no inline gradients allowed
    • --gradient-amber-fadelinear-gradient(180deg, var(--amber) 0%, transparent 100%)
    • --gradient-ink-fadelinear-gradient(180deg, transparent 0%, var(--ink-0) 100%)
    • --gradient-topbar-glasslinear-gradient(180deg, rgba(10,9,7,0.92) 0%, rgba(10,9,7,0.78) 100%)
  18. material11 / 80Plan v15 · 5-layer material substrate (field · mist · membrane · signal L0-L4 · etching) + brightness budget + per-room climate seeds · per ADR-164
    • --_docPlan v15 ADR-164 · Constitutional Atmosphere material stack · 5 layers (field · mist · membrane · signal · etching) + brightness budget. Tokens consumed by atmospheric primitives (AtmosphericField · MistLayer · MembranePane · SignalEmission · EtchingLayer) shipping Plan v15 cycle 19.
    • --field[object Object]
    • --mist[object Object]
    • --membrane[object Object]
    • --membrane-blur[object Object]
    • --membrane-edge[object Object]
    • --signal[object Object]
    • --etching[object Object]
    • --brightness-budget[object Object]
    • --_climate[object Object]
    • --_tier-expression[object Object]
13 · covenanttokens are the contract

never hand-coded · only tokens

rule
no primitive may hard-code a colour, spacing, motion duration, or radius. every css value resolves through a token. lint blocks literal values in packages/ui.