Typography
Typefaces, type scale, weights, and line heights — the complete typography system.
Typography brings consistency across experiences and platforms. All type tokens are defined in the Core layer and referenced by component tokens.
Generated from dist/tokens/tokens.yaml.
Typefaces
Three typeface families — sans-serif for UI, serif for editorial content, monospace for code.
Heading Scale
Headings create typographic hierarchy. Each size maps to an HTML element and a utility class.
| Size | Class / Element | Sample |
|---|---|---|
| XXXL | .heading-xxxl / <h1> |
The quick brown fox |
| XXL | .heading-xxl / <h2> |
The quick brown fox |
| XL | .heading-xl / <h3> |
The quick brown fox |
| LG | .heading-lg / <h4> |
The quick brown fox |
| MD | .heading-md / <h5> |
The quick brown fox |
| SM | .heading-sm / <h6> |
The quick brown fox |
Text Scale
Body text sizes for running copy, labels, and captions.
| Size | Class | Sample |
|---|---|---|
| XXXL | .text-xxxl |
Clear schedules, gentle spacing, and readable copy for every screen. |
| XXL | .text-xxl |
Clear schedules, gentle spacing, and readable copy for every screen. |
| XL | .text-xl |
Clear schedules, gentle spacing, and readable copy for every screen. |
| LG | .text-lg |
Clear schedules, gentle spacing, and readable copy for every screen. |
| MD | .text-md |
Clear schedules, gentle spacing, and readable copy for every screen. |
| SM | .text-sm |
Clear schedules, gentle spacing, and readable copy for every screen. |
| XS | .text-xs |
Clear schedules, gentle spacing, and readable copy for every screen. |
Font Sizes
All available size tokens. Each step follows a consistent scale ratio.
| Token | Value | Preview |
|---|---|---|
--font-size-xs |
.75rem | Ag |
--font-size-sm |
.875rem | Ag |
--font-size-md |
1rem | Ag |
--font-size-lg |
1.25rem | Ag |
--font-size-xl |
1.5rem | Ag |
--font-size-xxl |
2rem | Ag |
--font-size-xxxl |
2.5rem | Ag |
Font Weights
Numeric weight tokens available in the system.
| Token | Value | Preview |
|---|---|---|
--font-weight-100 |
100 | The quick brown fox |
--font-weight-200 |
200 | The quick brown fox |
--font-weight-300 |
300 | The quick brown fox |
--font-weight-400 |
400 | The quick brown fox |
--font-weight-500 |
500 | The quick brown fox |
--font-weight-600 |
600 | The quick brown fox |
--font-weight-700 |
700 | The quick brown fox |
--font-weight-800 |
800 | The quick brown fox |
--font-weight-900 |
900 | The quick brown fox |
Line Height
Line height tokens ensure readable vertical rhythm across all text sizes.
| Token | Value | Preview |
|---|---|---|
--line-height-xs |
1rem | Line height demonstration |
--line-height-sm |
1.25rem | Line height demonstration |
--line-height-md |
1.5rem | Line height demonstration |
--line-height-lg |
1.75rem | Line height demonstration |
--line-height-xl |
2rem | Line height demonstration |
--line-height-xxl |
2.75rem | Line height demonstration |
--line-height-xxxl |
3.5rem | Line height demonstration |
Fluid Typography
Large text sizes scale fluidly based on their container width using clamp() with cqi units.
Unlike viewport-based scaling (vw), container-based fluid type works correctly in multi-column layouts, sidebars, and cards — text scales relative to its own container, not the window.
| Token | Min (375px) | Max (1440px) | CSS Output |
|---|---|---|---|
--fluid-font-size-lg |
1.125rem (18px) | 1.25rem (20px) | clamp(1.125rem, 1.08rem + 0.23cqi, 1.25rem) |
--fluid-font-size-xl |
1.25rem (20px) | 1.5rem (24px) | clamp(1.25rem, 1.16rem + 0.45cqi, 1.5rem) |
--fluid-font-size-xxl |
1.5rem (24px) | 2rem (32px) | clamp(1.5rem, 1.32rem + 0.91cqi, 2rem) |
--fluid-font-size-xxxl |
1.75rem (28px) | 2.5rem (40px) | clamp(1.75rem, 1.48rem + 1.36cqi, 2.5rem) |
Line Heights
| Token | Min | Max |
|---|---|---|
--fluid-line-height-lg | 1.5rem | 1.75rem |
--fluid-line-height-xl | 1.75rem | 2rem |
--fluid-line-height-xxl | 2rem | 2.75rem |
--fluid-line-height-xxxl | 2.25rem | 3.5rem |
How it works
- Source: Typography (Liquid) Figma collection with Min/Max modes
- Container range:
320px→1200px(inline-size) - Below 320px container: locks to Min value; above 1200px: locks to Max value
- Between: interpolates linearly via
clamp(min, preferred, max) - Unit:
cqi(container query inline) — scales with container, not viewport
Setup
For fluid tokens to work, an ancestor element must establish a container context:
.content-area {
container-type: inline-size;
}
Usage
.hero-heading {
font-size: var(--fluid-font-size-xxxl);
line-height: var(--fluid-line-height-xxxl);
}
Use fluid tokens for headings and large display text. Body text and UI labels should continue using fixed-size tokens for optical precision at small sizes.
Why container-based?
Viewport-based fluid type (vw) breaks in multi-column layouts — a heading in a narrow sidebar would be the same size as in the main area.
Container-based (cqi) scales text relative to its own content area, so a column at mobile width gets mobile-sized type regardless of the viewport.
Usage Guidelines
Do
Always use font-size tokens from the scale. Custom pixel values break consistency.
Don't
Don't use arbitrary px or rem values that aren't in the token scale.
Do
Keep line lengths between 50 and 80 characters for body text.
Don't
Don't let paragraph widths get too thin or too wide.
Do
Reference --brand-font-base and --brand-font-lead so fonts adapt per brand.
Don't
Never hardcode font-family values like "Inter" or "Arial" directly.