Skip to content

D. Typography

Role Family Weights Files
Display headings Gilroy 800 Gilroy-ExtraBold.woff2
Light display text Gilroy 300 Gilroy-Light.woff2
Body, labels, controls, IDs and every other weight Outfit 400–700 Outfit-Variable.woff2
One short expressive accent Unbounded 500, 600 Unbounded-Variable.woff2

Gilroy ships only in its two free weights under LICENSES/Gilroy-Free-Font-EULA.txt; Outfit and Unbounded are SIL OFL. See fonts/README.md. The logo wordmark is supplied as vector outlines.

Current example (1A-E02): use only shipped weights; the old Gilroy-600 quick start elsewhere in the documentation is historical. See CR-TYPE-01.

.product-display { font-family: var(--font-display); font-weight: 800; font-synthesis: none; }
.product-heading { font-family: var(--font-sans); font-weight: 600; font-synthesis: none; }
.product-body { font-family: var(--font-sans); font-weight: 400; }

Import tokens/tokens.css. Use var(--font-sans) for body and var(--font-display) for headings. --font-display resolves to Gilroy (use weight 800, or 300 for light display text); --font-sans resolves to Outfit. var(--font-accent) resolves to Unbounded with Outfit as fallback. Use explicit line heights and font-synthesis: none. IDs and code use Outfit with tabular figures, not a separate monospace family. Keep pre text wrapping on narrow screens.

Token / class Size / line Family · weight Tracking Use
text-display 72/76 (mobile 44/48) Gilroy 800 −0.02em public landing hero
text-display-sub 32/38 (mobile 24/30) Outfit 400 0 optional sub-line under a display/heading on public and auth only
text-heading 48/52 (mobile 34/40) Gilroy 800 −0.015em public section heads, auth brand panel
.title-page (brand Subheading) 32/38 (mobile 26/32) Outfit 600 −0.01em one h1 per page
.title-panel (between Body and Subheading) 20/28 Outfit 600 −0.005em card and panel titles
.title-section 16/24 Outfit 600 0 section titles, list-row titles
Stat number / big display number 32/38 (hero stats 48/52) Outfit 600 + tabular-nums −0.01em StatCard, report totals
Date-chip numeral 20/24 Outfit 600 + tabular-nums 0 DateChip
text-body 16/24 Outfit 400 0 body, descriptions, inputs
text-label 14/20 Outfit 500 0 nav items, form labels, meta, dense table cells
Button label 14/20 (large 16/24) Outfit 600 0 desk-button*
.col-header 14/20 Outfit 600, sentence case, text-accent-ink 0 table headers (p.16)
Inline strong / pill emphasis inherit Outfit 700 0 <strong>, pill counts
text-caption 12/16 Outfit 500 0.01em pills, timestamps, helper text
.eyebrow 12/16 Outfit 600 uppercase 0.08em category kicker, text-muted (p.17)
IDs / shelf codes inherit Outfit 500 + tabular-nums 0 text-accent-ink under a title (p.17), text-ink in cells
text-accent 48/56 (mobile 32/40) Unbounded 500 (600 allowed) −0.01em one phrase per layout: landing hero, auth brand panel, the empty-state hero; never in staff chrome

There are 235 occurrences on 227 lines in 126 files, plus .eyebrow, .chip and .status-box in CSS. Migrate, do not alias. IDs and codes move to Outfit with tabular-nums (brand p.17 wants clear IDs in the UI family, not a mono). Secrets, digests and JSON use Outfit with the .code-text utility (font-variant-numeric: tabular-nums slashed-zero; letter-spacing: 0.02em) — owner rule: no monospace family (PLAN §0.4 supersedes this spec). The site lists are in H.6.

Machine-readable type metrics and mobile roles · Native units and host-owned scaling