What it governs
All rendered text. Every value in the underlying scale is chosen for Titan — typography, with color, is one of the two foundations where every value carries a decision. How much of that scale a builder can actually reach is a separate question, answered below.Vocabulary
The terms used on this page are descriptive rather than decided — the naming specification does not cover typography either (see Open issues). Three naming systems coexist, and only one of them is what you type into code:
See TITAN-DIV-04 for how these
three counts came apart, and why nine of the thirteen theme variants below have no reachable
name at all.
The eleven variant names are:
mainHeader · subHeader · base · baseBold · baseItalic · baseSmall ·
baseSmallBold · baseSmallItalic · baseSmallAllCaps · baseSmallAllCapsBold · code
The family
The scale is a role map, not a size ramp
The most common mistake with this scale is readingh1–h6 as “biggest to smallest
heading” and picking by size. Two things break that reading:
h5(12px) andh6(10px) are smaller thanbody1(16px) andbody2(14px). They are not headings in the document-outline sense. They are uppercase micro-labels.- Weight is not monotonic.
h1andh2are regular (400) whileh3is bold (700). The large sizes get their prominence from size; the small ones get it from weight and letter-spacing.
<Typography> prop that actually reaches each row. Where
that column says not reachable, the step exists in the theme but nothing exposes it —
see the warning below the table.
Bold, italic, and all-caps siblings of
body1, body2, subtitle1, subtitle2, and
caption extend the table above to the full 34; six of them — body1-bold,
body1-italic, caption-bold, caption-italic, caption-all-caps,
caption-all-caps-bold — are reachable, as baseBold, baseItalic, baseSmallBold,
baseSmallItalic, baseSmallAllCaps, and baseSmallAllCapsBold respectively.
subtitle1/body1 and subtitle2/body2 are metrically identical — same size,
weight, and line height. They differ only in name. Neither pair matters for what to build
today, since only body1 (as base) is reachable.Choosing a variant
Every row above that says “nothing reachable” is the same gap, restated per use case:
TITAN-DIV-04 already tracks
it as one open question — expose more of the scale, or accept eleven variants as final. Do
not invent a local heading size to fill the gap; that is exactly the local-override
problem TITAN-TYP-05 exists to prevent.
Token reference
Three typography values exist as tokens. The variants themselves do not — they are reached only through<Typography>.
Two values changed when the component was repointed at the token scale (TRI-783): bold
weight moved from 600 to 700, and
mainHeader line height from 32px to 36px. Designs
produced before that change will not match what renders now.Constraints
Accessibility
- Never use a heading-shaped variant to style non-heading text, and never skip heading
levels to get a size. Screen reader users navigate by heading outline; a page whose
outline goes
h1 → h4has two missing levels and no way to tell whether content was skipped. This applies most directly tomainHeader/subHeader, the only two variants that render heading tags by default. - The scale’s
h6step is 10px, below the 12px floor most guidance recommends for sustained reading, and uppercase, which lowers legibility further. Nothing in<Typography>reaches it directly today (see the coverage gap above), but anywhere it does render — a raw<h1>–<h6>from the underlying library, or a component styled directly off the scale, such asEmptyState’ssubTitleper TITAN-DIV-22 — treat it as a one- or two-word label only, never as anything a user must read carefully. - Line heights are tight at the small end of the scale.
h6is 10px on 12.5px (1.25) andh4is 14px on 16px (1.14). WCAG 2.2 Text Spacing (AA) requires content to survive user-applied line spacing of 1.5× without loss — verify that any container using these values can grow. - Text must remain functional at 200% zoom without horizontal scrolling
(Reflow, AA). Fixed-height
containers around
baseare the usual failure. - Contrast is a property of the
text-*token, not the variant. See Accessibility for the measured table — several status text tokens fail AA on light surfaces.
Divergences
- TITAN-DIV-04 — three typography surfaces with
three different counts: 34 variants defined, 13 wired into the theme, 11 exposed on
<Typography>. The 11 are the design vocabulary, and nine of the thirteen theme variants — including every subsection-heading and dense-label step — have no reachable name at all. See Choosing a variant above for what that leaves unbuildable today.
Known issues
Typography: open issues
Divergences, open decisions, and undocumented gaps for Typography.
Related
19 core components consume this foundation — derived from token usage incomponents/core/src/components, not assumed:
Accordion · AddList · Checkbox · Chip · DataGrid · DatePicker · Drawer · Dropzone · EmptyState · Form · FormHelperText · FormInput · Modal · Slider · Tabs · Tile · Toast · Tooltip · Typography
Why it works this way
Small type carries emphasis through weight and case, not size. Below about 14px, size differences stop being legible as hierarchy — 12px and 11px look like the same text rendered badly. So the bottom of the scale switches signal:h5 and h6 are bold,
uppercase, and letter-spaced — reachable today as baseSmallAllCapsBold and
baseSmallAllCaps. That reads as a label at any size, which is what those steps are for.
14px was meant to be the base, not 16px. Titan targets dense, data-heavy internal
product surfaces where a 16px default costs roughly one table row per screen, and the
scale’s body2 step exists for exactly that reason. It is one of the steps
not currently reachable through <Typography>, so the practical
default today is base (body1, 16px) — the prose-context variant this rationale
describes as the exception.
Eleven variants, and no twelfth. Every variant a builder can actually pick is a decision
a reviewer checks. Eleven is small enough to hold in your head, which is the property that
keeps two authors picking the same variant for the same job — for everything the eleven
cover. What they do not cover is a real, tracked gap, not a case for inventing a twelfth.