Typography
The full type scale — 13 styles from Large Title (64px) down to Caption 2 (11px), each in four weights, set in Inter and mapped 1:1 to the Figma text styles.
How the system works
Every style is a composite token: one class such as text-body-medium sets font size, line height, letter spacing, and weight together, defined in styles/typography.css. You never combine text-sm with font-medium and leading-5 by hand — a single token guarantees the exact metrics the Figma text style specifies.
The naming is text-{family}-{weight} — 13 families × 4 weights (Regular 400, Medium 500, Semibold 600, Bold 700). Color is applied separately with the semantic text tokens, so a typical label reads text-body-medium text-text-secondary: one class for the metrics, one for the color.
Because these classes live in the text-* namespace, they are registered with cx() (our tailwind-merge wrapper) as font-size utilities — otherwise a merge with a color class would silently drop them. If you add or rename a style, mirror it in utils/cx.ts.
Large Title
64px / 80pxHero numerals and marketing-scale headings.
Display 1
56px / 72pxFull-page hero headings.
Display 2
48px / 64pxLarge section heroes.
Display 3
40px / 54pxProminent stats and page heroes.
Display 4
32px / 44pxPage titles; the largest style used inside the app shell.
Title 1
24px / 34pxCard headline figures (step totals, earnings).
Title 2
20px / 26pxSection headings inside pages and panels.
Title 3
18px / 24–26pxSub-section headings, calendar month titles.
Headline
16px / 22pxEmphasized body copy and lead paragraphs.
Body
14px / 20pxThe default UI text: labels, table cells, nav items.
Body 2
13px / 18pxDense contexts: compact tables, secondary descriptions.
Caption 1
12px / 16px · tracking 0.15pxAxis labels, unit suffixes, timestamps.
Caption 2
11px / 15px · tracking 0.2pxThe smallest legible annotations (badges, fine print).