콘텐츠로 이동

title: Material Design 3 token reference applies_to: [material-design, hct, design-tokens, android, web] version: 1.0.0 last_updated: 2026-05 stability: stable


Material Design 3 (Material You)

Google's third-generation Material Design (2021+). Token-first, HCT-based color system, dynamic theming. The reference for Android UIs and many web product systems.

If your product targets Android primarily or aligns with Material aesthetic, build on this. For non-Material products, learn it as comparison.

What changed from Material 2

Aspect Material 2 (2018) Material 3 (2021+)
Color RGB-based palette HCT-based, dynamic from seed
Tokens Limited semantic tokens Full token system (color, type, motion, shape)
Customization Theme provider with overrides Generate full theme from one seed color
Dynamic theming None Yes (Android system color, user wallpaper)
Surface model Elevation overlays Surface + tonal containers
Buttons All-caps text on Filled Mixed-case (modernized)

Color: HCT and tonal palettes

HCT = Hue, Chroma, Tone. Tonal palettes generate 13 stops per hue from one seed:

Tone:  0   5   10  20  30  40  50  60  70  80  90  95  99  100
       └──────────────────── one tonal palette ────────────────────┘
       darkest                                                lightest

Tone is roughly equivalent to OKLCH L, but tuned for Material's perceptual model.

Five tonal palettes (per theme)

Palette Source
Primary The brand seed
Secondary Hue ~rotated; lower chroma
Tertiary Different hue (often complement)
Neutral Slightly chromatic gray, matched to primary's hue
Neutral-variant Slightly more chromatic neutral

Plus error as a fixed red tonal palette.

Token roles (canonical)

Light theme:
  primary               = primary tone 40
  on-primary            = primary tone 100 (white)
  primary-container     = primary tone 90
  on-primary-container  = primary tone 10

  surface               = neutral tone 99
  on-surface            = neutral tone 10
  surface-container     = neutral tone 94
  surface-container-high = neutral tone 92
  surface-container-highest = neutral tone 90
  outline               = neutral-variant tone 50
  outline-variant       = neutral-variant tone 80

  background            = neutral tone 99
  on-background         = neutral tone 10

  inverse-surface       = neutral tone 20
  inverse-on-surface    = neutral tone 95
  inverse-primary       = primary tone 80

  error                 = error tone 40
  on-error              = error tone 100
  error-container       = error tone 90
  on-error-container    = error tone 10

For dark theme: tones flip. primary = primary tone 80, on-primary = primary tone 20, etc.

Why containers?

Material 3's "container" concept is its main innovation. Instead of "primary + on-primary" only, you also have "primary-container + on-primary-container":

  • primary (tone 40 light) — the FAB, the most-emphasized button
  • primary-container (tone 90 light) — secondary surface that uses brand color subtly

This means: the FAB is bold primary; a "Premium" badge can sit on primary-container without competing.

Typography

Material 3's type scale is more refined than Material 2's:

Role Size Weight Line height Letter spacing
Display Large 57px 400 64px -0.25px
Display Medium 45px 400 52px 0
Display Small 36px 400 44px 0
Headline Large 32px 400 40px 0
Headline Medium 28px 400 36px 0
Headline Small 24px 400 32px 0
Title Large 22px 400 28px 0
Title Medium 16px 500 24px 0.15
Title Small 14px 500 20px 0.1
Label Large 14px 500 20px 0.1
Label Medium 12px 500 16px 0.5
Label Small 11px 500 16px 0.5
Body Large 16px 400 24px 0.5
Body Medium 14px 400 20px 0.25
Body Small 12px 400 16px 0.4

Roboto is the default; Material 3 also has Roboto Flex (variable font) and Roboto Serif for serif variants.

For Korean: pair with Pretendard or Noto Sans KR; see i18n/korean-typography.md.

Material 3 dropped uppercase buttons

Material 2's text-transform: uppercase on buttons is gone. Material 3 uses sentence case, which reads cleaner with non-Latin scripts.

Shape (corner radius scale)

Material 3 standardizes corner radius via tokens:

Token Radius
shape-corner-none 0
shape-corner-extra-small 4
shape-corner-small 8
shape-corner-medium 12
shape-corner-large 16
shape-corner-extra-large 28
shape-corner-full 9999 (pill)

Each component has a default shape. Buttons: extra-small (4) for outlined, full for FAB.

Material 3 also introduces shape morphing — components can transition between shapes (e.g., FAB to bottom sheet expanding).

Motion — Easing & Duration

Material 3 standardizes motion via two axes:

Easing

Token Curve Use
motion-easing-linear linear Loading spinners
motion-easing-standard cubic-bezier(0.2, 0, 0, 1) Default — entering/exiting
motion-easing-emphasized cubic-bezier(0.2, 0, 0, 1) Emphasis on primary motion
motion-easing-emphasized-decelerate cubic-bezier(0.05, 0.7, 0.1, 1) Hero arrives
motion-easing-emphasized-accelerate cubic-bezier(0.3, 0, 0.8, 0.15) Hero exits

Duration

Increments of 50ms from 50 to 600:

Token Duration
motion-duration-short1 50ms
motion-duration-short2 100ms
motion-duration-short3 150ms
motion-duration-short4 200ms
motion-duration-medium1 250ms
motion-duration-medium2 300ms
motion-duration-medium3 350ms
motion-duration-medium4 400ms
motion-duration-long1 450ms
motion-duration-long2 500ms
motion-duration-long3 550ms
motion-duration-long4 600ms

Aligns with our duration tiers in motion/principles.md.

Elevation (5 levels)

Level Use
elevation-0 Surface, no shadow
elevation-1 Card, FAB at rest
elevation-2 Top app bar (scrolled), filled buttons elevated
elevation-3 Modal, popover, navigation drawer
elevation-4 Floating menu, picker
elevation-5 Reserved (rarely used)

In dark mode, Material 3 uses surface tint overlays instead of just shadow — surfaces get progressively lighter tones to indicate elevation. This reads better on dark backgrounds.

State layers

Material 3 introduces a "state layer" — a semi-transparent overlay applied to interactive elements on hover/focus/press. Universal across components:

State Layer opacity (on top of base color)
Hover 8%
Focus 12%
Pressed 12%
Dragged 16%
Selected 8%

Layer color matches on-X tokens (e.g., on a primary button, the state layer is on-primary at 8% opacity).

This is the elegant unification — instead of writing per-component hover/focus styles, you apply one system.

Tools and extraction

The Theme Builder is the canonical source. For consuming Material 3 tokens in code, export to: - CSS custom properties - W3C DTCG JSON (compatible with Style Dictionary) - Android XML (for Android apps) - iOS Swift (for iOS apps)

When to use Material 3

  • Android-primary apps: native fit; don't fight the OS.
  • Multi-platform that wants Google-aligned aesthetic: Material 3 is the "modern Google" look.
  • Teams that want one seed → full theme: Material's dynamic theming is the simplest "give me a theme" pipeline.

When NOT to use

  • Brand wants distinctive, non-Material aesthetic: Material's shape + motion patterns are recognizable. Customizing fights the system.
  • Korean consumer market: Material is widely accepted but Korean designs often have a denser, more Toss/Kakao-coded aesthetic.
  • Web with very specific brand: prefer Tailwind v4's flexibility — see tailwind-v4.md.

Cross-reference