Typography

Typography

Two type scales — Utility and Display — split the typographic load between functional UI text and expressive surfaces.

The two scales

ScaleUse forSizes
UtilityUI text — body, labels, captions, table cells, button labels4 steps (12/14/16/16-bold)
DisplayExpressive type — sub-headings, section headings, page titles, hero4 steps (20/24/32/42)

The split is structural, not decorative. Utility text uses optimised letter-spacing for screen-readability at small sizes; Display text uses negative letter-spacing for a tighter, more confident heading rhythm. Mixing scales (Utility-3 used as a heading, Display-1 used for a button label) breaks the system's visual hierarchy.

Font stack

The substrate ships Inter as the canonical sans-serif, with a system-stack fallback chain:

'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif

Inter is a modern, open-source workhorse face (SIL OFL 1.1), optimised for UI rendering at small sizes. The system stack fallback ensures the substrate is fully functional even if the Inter binary is not loaded — degradation is graceful.

A tenant theme can substitute any font family at the primitive layer. Common substitutions:

  • IBM Plex Sans (open-source, Carbon's canonical face)
  • Source Sans 3 (Adobe, open-source)
  • Public Sans (USWDS, public domain)
  • A tenant's own brand face

Self-hosting the font binary is the customer's responsibility; the substrate references the family by name.

The scale

Utility

TokenSize / Line / WeightUse for
typography.utility-112 / 16 / 400Caption, label, table cell
typography.utility-214 / 20 / 400Secondary body, helper text
typography.utility-316 / 24 / 400Primary body floor
typography.utility-416 / 24 / 600UI heading, button label

Display

TokenSize / Line / WeightUse for
typography.display-120 / 28 / 500Sub-heading
typography.display-224 / 32 / 500Section heading
typography.display-332 / 40 / 400Page title
typography.display-442 / 50 / 300Hero / landing

Heading hierarchy

HTMLToken
<h1>display-3
<h2>display-2
<h3>display-1
<h4>utility-4
Body <p>utility-3
<small>, helper, captionutility-2

A heading-level skip (h1 → h3 with no h2 between) breaks accessibility — screen readers rely on the hierarchy to navigate. The substrate enforces this in subsequent-milestone audit work.

Brand voice

Voice, register, and vocabulary discipline are governed by the editorial style-guide bundle (mounted at /bundles/editorial-style-guide), not by this theme. The brand theme carries only visual, token, and accessibility data.

Important Information

Design System disclosure

This site provides open-source design tokens, documentation, and self-hostable software published by Woodfine Capital Projects Inc. Information here is for general reference only and does not constitute an offer, warranty, or a guarantee of fitness for any particular purpose. Statements regarding planned, intended, or targeted future features are forward-looking and subject to change without notice; they are not undertaken to be updated except as required by law.