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
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.
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.
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
The findings that matter
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.
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.
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.
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.)
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
- 01Theme (or lint-ban)
caption/overline/subtitle1/subtitle2so the 95 collision sites stop rendering un-tokenized MUI defaults. - 02Add an
xs-mapped variant so the 84 manual 12px imports have a proper home. - 03Sweep the 355 no-variant
<Typography>usages ontobody/bodySm— decide per case, then remove the deprecatedbody1literal. - 04Tell the Neo owners
h1/h2are dead app-side — candidates for pruning or repurposing in the ramp. - 05When the Morpheus type migration lands, map its tiers to variants first — the side-door counts above are the exact list of call sites that a variant-level migration would miss.