Every type face, size, and weight the site uses — on one page.
Two type faces and one set of named sizes. Every sample below is drawn live from the real settings in public/tokens.css and public/styles.css, so it matches just what the site draws, right down to the size steps and the light and dark switch.
Rendered from the real custom properties. Every specimen's font-family, font-size, and line-height read straight from the token named beside it — never a hand-set pixel value.
Re-resolves live. Flip the theme toggle or resize past 1024px / 640px and the size steps just as the live site does. So this page can never drift from what ships.
One hand-synced caveat. The role/size/usage data behind the type ramp is copied from the --lead-type-* rules in styles.css, not built from them. So if a role changes there, this page needs the same edit.
Carried by every heading (h1–h3) and the form / panel / card titles via --font-display. Vendored locally so the site makes no runtime call to Google Fonts — consistent with the cookieless posture. font-display: swap means headings paint immediately in the Inter fallback, then swap in when the face loads; if the font is blocked they simply stay on Inter.
Uses a face already on your device. Nothing to download. Falls back to the built-in one if Inter is missing
The main face for text and buttons, set by --project-font-sans (= --typography-font-family-sans). Everything that is not a heading. Words, labels, buttons, and the big numbers all use Inter. It falls back to a face already on your device, so text never waits on a download.
Type ramp
Each text role, biggest to smallest, drawn at its real size. The size and family columns name the token, so you can trace any one back to the source. Sizes that change at ≤1024px and
≤640px are noted; resize the window to watch them step.
Three weights carry the whole site. Space Grotesk bends from 500 to 700. Inter uses the weights already on your device.
--project-weight-strong aliases bold and is what most emphasis reaches for.
Each pair shows the weight in Space Grotesk (top)
and Inter (bottom).
Line heights
Vertical rhythm, tight for display down to relaxed for long-form body copy.
1Metric numbers
1.04 – 1.15Headings with their own rule (display, section, panel, form)
1.45Hero subheadline
1.5Base body — --typography-line-height-base. Card titles (h3) inherit this too: no rule of their own overrides it.--typography-line-height-base
1.75Relaxed body copy — --project-type-body-line. Eyebrows inherit this from their .section-heading / .cta-copy wrapper, not from .eyebrow itself.--typography-line-height-extra-relaxed
Where it's defined
public/tokens.css — the primitive ladder (--typography-font-size-*), the sans
stack, the weight tokens, and the semantic aliases (--project-type-eyebrow,
--project-type-metric, --project-type-body-line).
public/styles.css — the @font-face for Space Grotesk, --font-display,
the --lead-type-* role ramp with its ≤64rem / ≤40rem steps, and the
h1–h3 / .eyebrow / .subheadline rules.
src/layouts/BaseLayout.astro — preloads the display woff2 and links the stylesheets in the
document head.