Skip to main content
Sundial’s type system is 15 tokens — 5 categories × 3 sizes — defined in tokens/typography.dart as DesignSystemTypography, a ThemeExtension accessed via context.textTheme.
The fonts are Libertinus Serif and Inter. (Some older internal docs mention GoogleSans — that’s stale; the shipped app uses Inter.)

The two typefaces

Weights are set with fontVariations: [FontVariation.weight(n)] rather than fontWeight. That’s what enables the body styles’ signature weight 425 — an in-between weight only a variable font can render.

Full spec

Notable details:
  • Overlines are the only styles with positive (wide) letter spacing — they’re for small uppercase-feel labels.
  • Display styles have a tight 1.0 line height; body styles breathe at 1.5.
  • Sizes are logical pixels; height is a multiplier of fontSize (Flutter semantics).
The samples on this site render in the docs theme’s fonts, not the app’s — refer to the spec table for exact metrics, or run the app to see the real thing.

Category guidance

Color variants

Three static instances:
  • DesignSystemTypography.base — colorless; the styles as pure metrics
  • DesignSystemTypography.light — every style colored parchment 800 (272725) — migrating to contentPrimary when the 1.0 ramps are deleted
  • DesignSystemTypography.dark — every style colored parchment 200 (DDDAD1)
AppTheme installs .light/.dark as the ThemeExtension, so context.textTheme styles arrive pre-colored for the current mode. Override color per-use with copyWith:

Font assets

Declared in pubspec.yaml under fonts::

Material TextTheme bridge

AppTheme also maps these tokens into Flutter’s stock TextTheme so Material widgets and third-party code pick them up: DS display/title/body map to their Material namesakes, and DS overline styles fill Material’s label* slots — all colored contrastStrong. See Material bridge.