One system, every page.
Every swatch and component on this page renders from the same CSS custom properties and classes the rest of the site uses — change a token in v3.css and this guide updates itself. Tokens over hex, always.
Tokens, not hex.
Components never hardcode color. The blue scale carries the brand; each accent ships with a dark ink twin that clears WCAG AA (4.5:1) as text on cream surfaces.
charcoal/ink for text, slate for secondary, line for borders, paper/cloud for surfaces.
Four faces, four jobs.
Each family has one role. Body and mono load as display: optional so the LCP element paints at fallback render — only the display face is allowed to swap in.
h1–h2, hero text, big numbers. display: swap — brand-critical.
Paragraphs, lede, prose. display: optional — keeps LCP at fallback render.
Reserved for the wordmark lockup.
Labels, numerals, eyebrows, version pills.
Heading one
Heading two
Heading three
Lede paragraph — the one-sentence promise under every h1.
Body paragraph. Comfortable measure, generous line-height, slate for secondary text and charcoal for primary.
The working set.
Pills tag and categorize, buttons act, panels contain, eyebrows introduce. Everything below is the real class, not a mockup.
v3-pill v3-pill--{color} — one per card, top-left, always before the title.
Title with an accent.
Eyebrows use blue-ink (not blue-500) so they clear contrast on cream. v3-accent underlines the payoff word in the heading.
Radius and elevation.
Four radii, four shadows. Sections alternate cloud and paper backgrounds; cards sit on either with sh-1 at rest and sh-2 on hover.
Reveal on scroll, eager above the fold.
Every section you've scrolled past on this page faded in through V3Reveal — an IntersectionObserver that adds .is-in once. Above-the-fold content uses the eager prop so first paint is already at full opacity and the LCP element never waits on JavaScript.
<V3Reveal eager> // hero, h1, lede — painted at full opacity, no observer
<V3Reveal> // everything below the fold — fades in on scroll
<V3Reveal delay={i * 60}> // stagger card grids 60ms per item- Tokens over hex — components never hardcode a color.
- Bright accents fill; ink twins write. Text on cream always uses the ink variant.
- Headings never skip a level; cards under an h2 use h3.
- One primary button per view.
- Above-the-fold reveals are eager — LCP never waits on an observer.
- Every page ships with a per-route OG card and passes the audit suite (axe, visual, perf budget).
Source of truth: app/v3.css — this page reads the tokens live.