Where the type tokens actually go

Every Neo Font size token, traced from the design system into moderne-ui: which ones real pixels depend on, through which code path, and which are shipped but unreachable. Counts are code sites (grep of components/ pages/ helpers/, tests and stories excluded) — one site may render hundreds of elements.

The three paths from token to pixels

a token only reaches the screen through one of these
Path 1 · The proper route

Typography variant

The theme maps a token to a MUI variant (fontSize.sm → bodySm); components write <Typography variant="bodySm">. Change the token, every consumer follows.

Path 2 · The side door

Direct import

A component imports the token and jams it into sx: fontSize: typography.fontSize.xs. Same value, but it bypasses the theme — invisible to variant-level changes and audits.

Path 3 · Theme default

Component default

The theme assigns a variant to a component class — every DialogTitle renders h4 (20px) without any component asking. 34 dialogs get their size this way.

Token-by-token consumption

Neo Font size ramp · moderne-ui · 2026-07-31
TokenpxTheme slotCode sites (variant + direct)Verdict
Font size/h128h10dead
Font size/h224h20dead
Font size/h324h310 variantlight
Font size/h420h42 + 34 dialogslive
Font size/h518not mapped12 directside door
Font size/h616not mapped8 directside door
Font size/default16body51 variant + 34 directlive
Font size/sm14bodySm88 variant + 74 directworkhorse
Font size/xs12not mapped84 directside door
Font size/xxs10not mapped13 directside door
Font size/caption13not mapped4 directnearly dead

The findings that matter

beyond the table
1

The app's biggest text pathway isn't tokenized at all

355 of 426 <Typography> usages have no variant and fall through to body1 — which the theme hardcodes as a literal '1rem' (marked deprecated), not any Neo token. The most common text in the app bypasses the design system entirely.

2

Name collision on caption

81 usages of variant="caption" render MUI's default caption (0.75rem / 12px) — not Neo's Font size/caption (13px), which has only 4 real consumers. Developers writing variant="caption" almost certainly believe they're on the design system. Same story, smaller: overline (4), subtitle1 (7), subtitle2 (3) — all un-themed MUI defaults.

3

12px is big but homeless

fontSize.xs is the third-most-consumed size (84 sites) yet has no variant — every use is a manual sx import. That's exactly the pattern that produces drift.

4

h1 and h2 are shipped but unreachable

Both sync from Figma, build into the npm package, occupy theme slots — and no code path can ever render them. (In Figma, h2 is now an explicit alias of h3, by decision, 2026-07-31.)

5

The app already agrees with Morpheus about body copy

By code-site count the dominant rendered size is 14px (~162 sites) over 16px (~85 tokenized + 355 hardcoded). Morpheus's 14px body token doesn't fight the app's reality — it matches it. The consolidated Morpheus scale mostly formalizes what's already true.

What this suggests, in order of value

cheap cleanups before / alongside the Morpheus type migration