Typography, Space, and Material
Font roles
| Token | Value | Use |
|---|---|---|
--ref-font-ui | Inter, "SF Pro Text", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif | Shell, forms, tables |
--ref-font-document | "Source Han Serif SC", "Noto Serif SC", Georgia, serif | Contracts and long-form legal documents |
--ref-font-mono | "SFMono-Regular", "JetBrains Mono", Consolas, monospace | Code, matter IDs, machine identifiers |
Serif type never enters the application shell, forms, or data tables. Money, dates, statistics, and identifiers use tabular numbers.
Type scale
| Token | px | Use |
|---|---|---|
--ref-type-100 | 10 | Non-critical desktop group label |
--ref-type-200 | 11 | Supporting metadata |
--ref-type-300 | 12 | Labels and states |
--ref-type-400 | 13 | Compact table body |
--ref-type-500 | 14 | Default UI body |
--ref-type-600 | 16 | Emphasized body |
--ref-type-700 | 18 | Section heading |
--ref-type-800 | 24 | Page heading |
--ref-type-900 | 28 | Important page heading |
--ref-type-1000 | 36 | Identity heading, rarely used in work pages |
Body uses weight 400 and line-height 1.5. Labels use 500 and 1.4. Headings use 600 and 1.25. Do not use thin 300 weight.
Reference spacing
| Token | px | Token | px |
|---|---|---|---|
--ref-space-0 | 0 | --ref-space-0-5 | 2 |
--ref-space-1 | 4 | --ref-space-1-5 | 6 |
--ref-space-2 | 8 | --ref-space-3 | 12 |
--ref-space-4 | 16 | --ref-space-5 | 20 |
--ref-space-6 | 24 | --ref-space-8 | 32 |
--ref-space-10 | 40 | --ref-space-12 | 48 |
--ref-space-16 | 64 |
Theme and Density never rewrite Reference spacing.
Radius
| Token | px | Use |
|---|---|---|
--ref-radius-none | 0 | Continuous table surface |
--ref-radius-control | 4 | Input, select, tag, checkbox |
--ref-radius-panel | 6 | Button, panel, card |
--ref-radius-overlay | 8 | Dialog, sheet, popover |
--ref-radius-feature | 12 | Rare feature surface |
--ref-radius-full | 9999 | Avatar and circular icon |
Do not scale all components from one global radius or build a default wall of large-radius cards.
Elevation
| Token | Value | Use |
|---|---|---|
--sys-elevation-0 | none | Default work surface |
--sys-elevation-1 | 0 1px 2px rgb(13 20 26 / 5%) | Static lift |
--sys-elevation-2 | 0 4px 12px rgb(13 20 26 / 8%) | Dropdown and popover |
--sys-elevation-3 | 0 8px 24px rgb(13 20 26 / 10%), 0 2px 6px rgb(13 20 26 / 6%) | Dialog |
--sys-elevation-sheet | -12px 0 36px rgb(13 20 26 / 14%), -2px 0 8px rgb(13 20 26 / 7%) | Right sheet |
Colored shadows and glow are prohibited.
Motion and density
Durations are 0ms, 120ms, 180ms, and 240ms. Structural motion becomes instant under prefers-reduced-motion.
Global component tokens
Global component tokens do not vary with density. They define fixed shell, page, and panel dimensions:
| Token | Value | Use |
|---|---|---|
--cmp-shell-padding-inline | 16px | Shell horizontal padding |
--cmp-page-max-width-standard | 100rem | Standard page max width |
--cmp-page-max-width-comfortable | 60rem | Reading page max width |
--cmp-panel-min-width | 15rem | Multi-panel min width |
--cmp-panel-default-width | 20rem | Multi-panel default width |
--cmp-panel-max-width | 30rem | Multi-panel max width |
--cmp-panel-narrow-min-width | 12.5rem | Narrow panel min width |
Density
Density has four levels: dense, compact, comfortable, spacious. dense targets high-density tables and bulk desktop operations; spacious targets touch and accessibility scaling.
| Component semantic | Dense | Compact | Comfortable | Spacious |
|---|---|---|---|---|
--cmp-control-height | 24px | 32px | 40px | 48px |
--cmp-control-font-size | 13px | 14px | 14px | 16px |
--cmp-control-line-height | 16px | 20px | 20px | 24px |
--cmp-table-header-height | 28px | 36px | 44px | 52px |
--cmp-table-row-height | 28px | 36px | 48px | 52px |
--cmp-table-row-height-two-line | 40px | 48px | 60px | 64px |
--cmp-table-cell-padding-x | 6px | 12px | 16px | 20px |
--cmp-table-cell-padding-y | 2px | 6px | 10px | 12px |
--cmp-field-gap | 6px | 12px | 16px | 20px |
--cmp-field-min-width | 144px | 160px | 176px | 192px |
--cmp-section-gap | 8px | 16px | 24px | 32px |
--cmp-workspace-page-padding | 12px | 16px | 20px | 24px |
--cmp-panel-header-height | 36px | 40px | 44px | 48px |
--cmp-panel-header-padding-x | 8px | 12px | 16px | 20px |
--cmp-panel-header-padding-y | 4px | 6px | 8px | 10px |
--cmp-panel-body-padding-x | 8px | 12px | 16px | 20px |
--cmp-panel-body-padding-y | 8px | 12px | 16px | 20px |
--cmp-panel-handle-width | 4px | 4px | 4px | 4px |
--cmp-panel-handle-hit-width | 12px | 12px | 12px | 12px |
--cmp-panel-collapsed-rail-width | 48px | 48px | 48px | 48px |
--cmp-panel-collapse-icon-size | 16px | 16px | 18px | 18px |
Density overrides control, table, field, panel, and workspace semantic dimensions. It does not change font families, brand colors, Reference spacing, or page structure. control-font-size and control-line-height vary with density and are further scaled by the accessibility fontScale axis. Dense interaction targets remain at least 24px; visible line height and touch target are calculated separately.
Button, input, select, table, query toolbar, and panel primitives must consume these Component Tokens directly. Changing only the data-density attribute without changing the rendered geometry is not a conformant density implementation.
Consumption examples
A table primitive reads density-aware Component Tokens directly. Changing the root data-density
updates row height, padding, and typography without maintaining four component class sets:
/* Geometry follows the active Density and never reads Reference spacing. */.data-cell { min-block-size: var(--cmp-table-row-height); padding: var(--cmp-table-cell-padding-y) var(--cmp-table-cell-padding-x); font-size: var(--cmp-control-font-size); line-height: var(--cmp-control-line-height);}Structural motion and elevation use System Tokens. data-reduce-motion=true or the operating-system
preference remaps System duration to instant, so a product component needs no second animation branch:
/* Stable semantic roles control sheet size, elevation, and motion. */.operation-sheet { inline-size: clamp( var(--cmp-panel-min-width), var(--cmp-panel-default-width), var(--cmp-panel-max-width) ); box-shadow: var(--sys-elevation-sheet); transition-duration: var(--sys-duration-structural);}