Wavecast Typography — Role Registry
The canonical WDS type system — 30 semantic roles with their fonts, weights and metrics, rendered as live specimens. The same tokens are consumed by the Hub product UI, the document builder render pipeline and inline editors: different application mechanisms, one source of truth.
The two families
CanonicalPoppins carries the headings; Inter carries everything read or set small.
- Poppins — prominent heading treatments where its character carries. Working weights 600 (SemiBold) and 700 (Bold). No italic.
- Inter — reading and small-text roles where screen legibility wins. Working weights 400 / 500 / 600 / 700, plus 400 italic for Blockquote.
- Both load from Google Fonts at runtime on web surfaces; for PDF / Word the render pipeline must embed them.
- Inter 700 isn't yet bound to a named role — it exists as a component-level override (chart-block value labels). A second consumer earns it a role.
Live specimens
30 rolesEvery role at its registry values. Type settings are identical across light and dark — only colour bindings differ, so these specimens stand for both modes.
The registry
CanonicalThe canonical engineering tokens with full specifications. Designer references map to Sketch shared styles.
| Engineering token | Variant | Font | Wt | Size | LH | Kern | Decoration | Designer ref |
|---|---|---|---|---|---|---|---|---|
| text-display-sm | sm | Poppins | 600 | 40 | 48 | 0 | — | Display / sm |
| text-display | base | Poppins | 700 | 52 | 60 | 0 | — | Display / base |
| text-display-lg | lg | Poppins | 700 | 72 | 80 | 0 | — | Display / lg |
| Engineering token | Variant | Font | Wt | Size | LH | Kern | Decoration | Designer ref |
|---|---|---|---|---|---|---|---|---|
| text-headline-sm | sm | Poppins | 600 | 20 | 28 | 0 | — | Headline / sm |
| text-headline | base | Poppins | 600 | 24 | 32 | 0 | — | Headline / base |
| text-headline-md | md | Poppins | 700 | 28 | 36 | 0 | — | Headline / md |
| text-headline-lg | lg | Poppins | 600 | 32 | 40 | 0 | — | Headline / lg |
| Engineering token | Variant | Font | Wt | Size | LH | Kern | Decoration | Designer ref |
|---|---|---|---|---|---|---|---|---|
| text-title-sm | sm | Poppins | 600 | 14 | 20 | 0 | — | Title / sm |
| text-title-xs | xs | Poppins | 600 | 15 | 22 | 0 | — | Title / xs |
| text-title | base | Poppins | 600 | 16 | 24 | 0 | — | Title / base |
| text-title-lg | lg | Poppins | 600 | 18 | 26 | 0 | — | Title / lg |
| Engineering token | Variant | Font | Wt | Size | LH | Kern | Decoration | Designer ref |
|---|---|---|---|---|---|---|---|---|
| text-body-sm | Body / sm | Inter | 400 | 13 | 20 | 0 | — | Body / sm |
| text-body | Body / base | Inter | 400 | 15 | 22 | 0 | — | Body / base |
| text-body-lg | Body / lg | Inter | 400 | 17 | 26 | 0 | — | Body / lg |
| text-subhead | Subhead | Inter | 500 | 16 | 24 | 0 | — | Subhead / base |
| text-lead | Lead | Inter | 400 | 18 | 28 | 0 | — | Lead / base |
| text-blockquote | Blockquote | Inter | 400 | 17 | 26 | 0 | italic | Blockquote / base |
| text-list-item | List Item | Inter | 400 | 15 | 22 | 0 | — | List Item / base |
| Engineering token | Variant | Font | Wt | Size | LH | Kern | Decoration | Designer ref |
|---|---|---|---|---|---|---|---|---|
| text-section-label | Label / Section | Inter | 600 | 12 | 16 | 0.06 | — | Label / Section |
| text-label | Label / base | Inter | 500 | 13 | 18 | 0 | — | Label / base |
| text-label-secondary | Label / Secondary | Inter | 400 | 13 | 18 | 0 | — | Label / Secondary |
| text-utility | Utility | Inter | 500 | 12 | 16 | 0 | — | Utility / base |
| text-meta | Meta | Inter | 400 | 12 | 16 | 0 | — | Meta / base |
| text-footnote | Footnote | Inter | 400 | 11 | 16 | 0 | — | Footnote / base |
| text-button | Button | Inter | 600 | 14 | 20 | 0 | — | Button / base |
| text-callout | Callout | Inter | 500 | 14 | 20 | 0 | — | Callout / base |
| text-callout-lg | Callout / lg | Inter | 500 | 15 | 22 | 0 | — | Callout / lg |
| Engineering token | Variant | Font | Wt | Size | LH | Kern | Decoration | Designer ref |
|---|---|---|---|---|---|---|---|---|
| text-link | Link | Inter | 400 | 15 | 22 | 0 | underline · Link swatch | Link / base |
| text-caption-sm | Caption / sm | Inter | 600 | 10 | 14 | 0.08 | — | Caption / sm |
| text-caption | Caption / base | Inter | 600 | 11 | 16 | 0.06 | — | Caption / base |
- Size / LH are pixels — size is the max end of the fluid range; for PDF / Word use the fixed pixel value.
- Kern is letter-spacing in
em. Convert where needed:pt = em × fontSize(Section label 0.06×12 = +0.72pt · Caption/sm 0.08×10 = +0.8pt · Caption 0.06×11 = +0.66pt). - LM/DM are one token each. Type settings are identical; only the colour binding differs (Text 1 LM #000000 / DM #ffffff, Link #fe2767 in both). The Sketch LM / DM folder split is a designer colour-pairing convenience.
What each role means
Pick the role by what the text is, not by eyeballing a size.
- Display — hero / marketing text. Cover pages, document titles, top-of-page treatments.
- Headline — high-emphasis page-level text; section H1s and prominent block titles.
md(28/700) is reserved for prominent card titles where base (24) is too light and lg (32) too large. - Title — medium-emphasis section / component headings; structural rather than ornamental.
xs(15/600) is for tight side-panel and playlist contexts.
- Body — default reading typography.
- Subhead (16/500) — component sub-headings needing emphasis below the heading hierarchy but heavier than Body. Sits between Body/lg and Title/base.
- Lead — opening paragraph after a heading; sets tone. Apply Text 2 for a muted lead.
- Blockquote — pull quotes, testimonials, customer voice. Italic at 17px. Indent / accent-bar layout is separate from the type role.
- List Item — identical to Body; named separately so list layout properties have a target.
- Label / Section — section labels, usually uppercase with 0.06em tracking. Label / Label Secondary — general and lighter-weight labels.
- Utility — small UI text · Meta — author lines, timestamps · Footnote — disclaimers · Button — button labels · Callout — emphasised small body for highlight panels.
- Link — underlined inline link bound to the Link swatch, for whole-element links. For inline links inside paragraphs, apply the Link colour as a per-character override on the existing role.
- Caption / sm — smallest caption, uppercase 0.08em · Caption — standard caption with 0.06em tracking for small-size legibility.
Applying roles
One token per role, colour-decoupled. The theme class wires the colour; the role defines font, size, weight, line-height only.
/* Role as a CSS class on semantic HTML */ <p class="wds-lead">Opening paragraph after the heading…</p> <h2 class="wds-headline-lg">Section heading</h2> <blockquote class="wds-blockquote">Pulled quote…</blockquote> /* Theme switching — roles re-bind automatically */ .theme--light { --text-1:#000000; --text-2:#71717a; --text-link:#fe2767; } .theme--dark { --text-1:#ffffff; --text-2:#a1a1aa; --text-link:#fe2767; }
- Hub product UI — components bind typography slots to role tokens via CSS custom properties (e.g.
--basic-event-card-title: var(--text-headline)). - Document builder (Notion → PDF / HTML / Word) — render pipeline applies role classes to semantic HTML, consuming the same
wds-typography.cssthe Hub uses. - Inline editors (Froala) — load
wds-typography.css, expose role classes via the paragraph-style dropdown, emit HTML the pipeline consumes.
- Keep the role, swap the colour to the Text 2 swatch — LM #71717a / DM #a1a1aa. Never make a separate "muted" role; role and colour are decoupled by design.
Overrides & out of scope
TrackFirst consumer of a treatment is a documented component override; a second consumer earns a named role.
| Consumer | Derived from | Override |
|---|---|---|
| Branded Docs — chart value labels | Component-level (no role) | Inter 700 / 16px / Accent Rose |
| Card Block / Year — "Feb" label | Bespoke — no role binding | Poppins 58 / 700 · LH 80 · kern −0.028em · mode-paired colour |
| Session Panel — "MORE" link | Body / base | Link swatch colour · no underline ("subtle link") |
- Table header / Table cell — after the core roles bed in. Inline code / Code block — mono stack, lower priority.
- Paragraph trailing-gap spacing matrix — Bruno's
text-spacingem scale exists but isn't paired to roles; vertical rhythm is the consuming surface's responsibility for now. - Page-level PDF / Word concerns — break rules, headers / footers, numbering, margins. Document-spec adjacent, not typography.
Exact mirror of the Notion Typography Role Registry. Ported into the WDS References shell — roles and metrics are not edited here; update the registry, then re-sync.