FairGarden Design

Typography

Serif leads the system. Each of the four families has one job, and a change of family marks a hierarchy step before size does.

Families

TokenRoleFamily
--ds-font-displayHeadings, item heads, kicker, stats, quotesFraunces
--ds-font-textLong-form bodySource Serif 4
--ds-font-uiControls, ledes, subheads, labels, captionsFigtree
--ds-font-monoData, codes, figure numbersIBM Plex Mono

--ds-font-fine sets footnotes and secondary names: Source Serif 4 in light scopes and print, Figtree in dark scopes, since serif below 17 px does not hold on a reversed ground. The mode blocks set it, so components never choose.

All four are open-license (SIL OFL) and self-hosted from Fontsource by @fairgarden-private/design/utils/fonts, with no font CDN: variable Fraunces, Source Serif 4 and Figtree, and IBM Plex Mono at 400, 500 and 700. Never add a fifth family.

Type roles

A component part takes a role by composing it from the shared module, never by setting sizes itself:

button.module.css
.label {
  composes: typeButton from '../../utils/type.module.css';
}
RoleFamily and weightSize (mobile to desktop)
typeDisplay (H1)display 70034 → 49 px
typeH2display 70028 → 34 px
typeItemheaddisplay 70022 → 24 px
typeSubheadUI 60018 → 19 px
typeLeadUI 40020 → 22 px
typeBodytext 40017 → 18 px
typeBodyUiUI 40016 → 17 px
typeButtonUI 700, title case14 → 15 px
typeLabelUI 600, caps13 px
typeEyebrowUI 600, caps13 → 14 px
typeCaptionUI 40014 px
typeDatamono 400, tabular14 px

The module holds more roles for single jobs, among them typeDisplayXl, typeKicker, typeQuote, typeStat, typeFootnote, typeSmall, typeFieldLabel and typeUrl.

Sizes are rem clamps, fluid from 360 px to 1024 px; print remaps them to pt. typeMuted colors text --role-muted and, on dark scopes, steps its weight down by --ds-muted-weight-step, so components stay mode-blind.

Rules

  • Headings are sentence case. Button labels and short field labels are title case, authored in the source.
  • Caps are for wayfinding (eyebrows, navigation, tabs, labels), never for actions.
  • Emphasis is italic, weight or family, never color alone.
  • Body text runs at --ds-measure-reading (66ch), ragged right.

Full specification: DESIGN-SYSTEM.md §3 (typography) and §1.5.5–§1.5.6 (families and type scale); companion guide §H.