Typography

One font family everywhere: Inter, a variable font that ships with both libraries — the web package bundles the woff2 files behind its @font-face, the Compose library loads the same family through its theme. On top of it sits the Material 3 type scale: five roles (display, headline, title, body, label) in three sizes each, with size, line height, weight and letter spacing defined per tier in the shared Figma Typescale.

Display

The largest text on screen — hero numbers, splash headings, empty-state statements. Use sparingly; one display element per view is usually enough.

  • The quick brown fox jumps over the lazy dog

    Tier
    display-lg
    Size / line height
    57 / 64 px
    Weight
    Regular 400
    Letter spacing
    -0.25px
    Web
    .dh-display-lg · --font-size-display-lg
    Compose
    MaterialTheme.typography.displayLarge
  • The quick brown fox jumps over the lazy dog

    Tier
    display-md
    Size / line height
    45 / 52 px
    Weight
    Regular 400
    Letter spacing
    0
    Web
    .dh-display-md · --font-size-display-md
    Compose
    MaterialTheme.typography.displayMedium
  • The quick brown fox jumps over the lazy dog

    Tier
    display-sm
    Size / line height
    36 / 44 px
    Weight
    Regular 400
    Letter spacing
    0
    Web
    .dh-display-sm · --font-size-display-sm
    Compose
    MaterialTheme.typography.displaySmall

Headline

High-emphasis headings for short, important text — section openers and prominent titles on larger viewports.

  • The quick brown fox jumps over the lazy dog

    Tier
    headline-lg
    Size / line height
    32 / 40 px
    Weight
    Regular 400
    Letter spacing
    0
    Web
    .dh-headline-lg · --font-size-headline-lg
    Compose
    MaterialTheme.typography.headlineLarge
  • The quick brown fox jumps over the lazy dog

    Tier
    headline-md
    Size / line height
    28 / 36 px
    Weight
    Regular 400
    Letter spacing
    0
    Web
    .dh-headline-md · --font-size-headline-md
    Compose
    MaterialTheme.typography.headlineMedium
  • The quick brown fox jumps over the lazy dog

    Tier
    headline-sm
    Size / line height
    24 / 32 px
    Weight
    Regular 400
    Letter spacing
    0
    Web
    .dh-headline-sm · --font-size-headline-sm
    Compose
    MaterialTheme.typography.headlineSmall

Title

Medium-emphasis headings that divide content — card titles, dialog headers, list section labels.

  • The quick brown fox jumps over the lazy dog

    Tier
    title-lg
    Size / line height
    22 / 28 px
    Weight
    Semibold 600
    Letter spacing
    0
    Web
    .dh-title-lg · --font-size-title-lg
    Compose
    MaterialTheme.typography.titleLarge
  • The quick brown fox jumps over the lazy dog

    Tier
    title-md
    Size / line height
    16 / 24 px
    Weight
    Medium 500
    Letter spacing
    0.15px
    Web
    .dh-title-md · --font-size-title-md
    Compose
    MaterialTheme.typography.titleMedium
  • The quick brown fox jumps over the lazy dog

    Tier
    title-sm
    Size / line height
    14 / 20 px
    Weight
    Medium 500
    Letter spacing
    0.1px
    Web
    .dh-title-sm · --font-size-title-sm
    Compose
    MaterialTheme.typography.titleSmall

Body

Running text. body-md is the default reading size across both platforms; body-lg suits ledes and long-form reading, body-sm captions and fine print.

  • The quick brown fox jumps over the lazy dog

    Tier
    body-lg
    Size / line height
    16 / 24 px
    Weight
    Regular 400
    Letter spacing
    0.5px
    Web
    .dh-body-lg · --font-size-body-lg
    Compose
    MaterialTheme.typography.bodyLarge
  • The quick brown fox jumps over the lazy dog

    Tier
    body-md
    Size / line height
    14 / 20 px
    Weight
    Regular 400
    Letter spacing
    0.25px
    Web
    .dh-body-md · --font-size-body-md
    Compose
    MaterialTheme.typography.bodyMedium
  • The quick brown fox jumps over the lazy dog

    Tier
    body-sm
    Size / line height
    12 / 16 px
    Weight
    Regular 400
    Letter spacing
    0.4px
    Web
    .dh-body-sm · --font-size-body-sm
    Compose
    MaterialTheme.typography.bodySmall

Label

Utility text on components — button captions, input labels, badges, overlines. Medium weight keeps it legible at small sizes.

  • The quick brown fox jumps over the lazy dog

    Tier
    label-lg
    Size / line height
    14 / 20 px
    Weight
    Medium 500
    Letter spacing
    0.1px
    Web
    .dh-label-lg · --font-size-label-lg
    Compose
    MaterialTheme.typography.labelLarge
  • The quick brown fox jumps over the lazy dog

    Tier
    label-md
    Size / line height
    12 / 16 px
    Weight
    Medium 500
    Letter spacing
    0.5px
    Web
    .dh-label-md · --font-size-label-md
    Compose
    MaterialTheme.typography.labelMedium
  • The quick brown fox jumps over the lazy dog

    Tier
    label-sm
    Size / line height
    11 / 16 px
    Weight
    Medium 500
    Letter spacing
    0.5px
    Web
    .dh-label-sm · --font-size-label-sm
    Compose
    MaterialTheme.typography.labelSmall

Custom text scale

A compact utility scale from the original Davidhorn apps, kept alongside the M3 roles for dense product surfaces. Compose exposes it as AppTextStyles, matching the Figma "Primary Font" originals shown here. The web tokens deliberately re-tune xs / normal / large to the M3 rhythm — normal doubles as body-md — so those rows flag the web value.

  • Name
    xs
    Size / line height
    9 / 11 px· Web: 10 / 14
    Web
    --font-size-xs
    Compose
    AppTextStyles.textXs()
  • Name
    small
    Size / line height
    12 / 16 px
    Web
    --font-size-small
    Compose
    AppTextStyles.textSmall()
  • Name
    normal
    Size / line height
    14 / 16 px· Web: 14 / 20
    Web
    --font-size-normal
    Compose
    AppTextStyles.textNormal()
  • Name
    medium
    Size / line height
    16 / 24 px
    Web
    --font-size-medium
    Compose
    AppTextStyles.textMedium()
  • Name
    large
    Size / line height
    20 / 24 px· Web: 18 / 28
    Web
    --font-size-large
    Compose
    AppTextStyles.textLarge()

Using it

Web: the elements layer styles h1h6, p, small, strong and friends automatically, and every tier is available as a dh-<tier> class that re-tiers any element. The full element-to-variable mapping lives in the Svelte typography reference.

Compose: AppTheme installs the scale on MaterialTheme.typography, so components pick their role up from the theme — the same values shown above, including the semibold titleLarge and the Figma tracking on the three tiers Compose's own tokens retune. See the KMP text reference.