Variation

Typography Options

No entries yet

Typography options

Typography pairings are generated per client and presented for approval. Client-facing.

3 options, exactly one marked recommended.

An entry must satisfy TypographyOption

export type TypefaceCut = {
  family: string;                     // multi-cut display faces are SEPARATE families
  weights: number[];                  // only weights the face actually ships
  source: "google" | "adobe" | "self-hosted";
  tracking: string;                   // tokenized letter-spacing, e.g. "var(--tracking-tight)"
};

export type TypographyOption = {
  id: string;
  name: string;
  recommended: boolean;               // exactly one option is true
  reasoning: string;
  uxRationale: string;                // client-facing benefit framing
  display: TypefaceCut;
  body: TypefaceCut;
  scale: Record<"h1" | "h2" | "h3" | "body" | "small", string>;
  deviceAdaptability: string;         // how it holds at xl / lg / md
  audience: "client";
};

Generator

Typography generator

Run this once per client, with the client's inputs pasted in. The shared constraints travel with it automatically when you copy.

Placeholder — replace on remixRecommended

System Stack — native sans, no licence

The blueprint's white-label stack. One family in both the serif and sans slots, no display face. Present so the weight-range and step-down format is visible before a real pairing lands.

Specification

--font-sans
system-ui stack — weights 400, 500, 600, 700 verified
--font-serif
unassigned — inherits --font-sans until a pairing is approved
--font-display
unassigned — masthead only, and optional
Scale (1201px+)
h1 56 · h2 40 · h3 28 · h4 22 · body 16
Step-down xl (<=1200)
h1 48 · h2 36 · h3 26 · h4 20 · body 16
Step-down lg (<=992)
h1 40 · h2 32 · h3 24 · h4 20 · body 16
Step-down md (<=768)
h1 32 · h2 26 · h3 22 · h4 18 · body 16
Tracking tokens
--tracking-tight · --tracking-normal · --tracking-kicker
Loading
None — native stack. No Google, Adobe kit or self-host.

Why it works

A single family with a verified weight range removes the silent-rounding failure entirely, and a fully stepped scale keeps every heading level visually distinct at every width — the hierarchy holds when the layout narrows.

On every device

Type appears instantly, with no flash of the wrong typeface while a page loads, and headings stay clearly ranked from a wide monitor down to a phone.

Why recommended

The only entry in the set, and the correct default until type is chosen: it renders identically on every device with nothing to load and no licence to authorise.

Contrast — computed from token values

  • Body 16px --ink on --paper17.3:1AAA
  • Kicker 12px --muted on --paper6.0:1AA

Notes

  • Every heading level is stepped at every breakpoint. Stepping h1 alone collapses the hierarchy at the narrower size.
  • This page uses font-display: block on purpose — showing the wrong typeface while a client evaluates type is worse than showing nothing.