Foundations
Every token in tokens.css: its light and dark value, its role, and its name before the 2.0.0 token rename. The 105 tokens come from tokens.json in @filipgutica/design-system 1.0.16, so this page always matches the package.
A project sets only the identity inputs. Every other token is core and stays as it is.
Identity inputs
IdentityThe four lines a theme sets on :root: the hue for light and dark, from its file in tokens/themes/, and the two font stacks. Every other token follows from them.
| Token | Light | Dark | Role |
|---|---|---|---|
--color-Formerly --project |
#4b45d1 |
#a5a1ff |
The project hue; --color-accent follows it |
--color-Formerly --project-dark |
#a5a1ff |
Same as light |
The $ prompt on the command plate |
--font-Formerly --font-sans |
"IBM Plex Sans", -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", system-ui, sans-serif |
Same as light |
Prose, h3 and below, application section headings, labels, and controls |
--font- |
"IBM Plex Mono", ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace |
Same as light |
Identity, documentation and product page titles and section headings, navigation rails, metadata, captions, code, identifiers, and keys |
Surfaces, text, and lines
Neutral paper in light and graphite in dark. Contrast, not colour, separates regions.
| Token | Light | Dark | Role |
|---|---|---|---|
--color-Formerly --bg |
#f4f5f6 |
#0d1012 |
Page canvas |
--color-Formerly --surface |
#e9ebed |
#13171a |
Wells: code, screenshots, figures |
--color-Formerly --surface-raised |
#fbfbfc |
#181d21 |
Panels and floating layers |
--color-Formerly --surface-hover |
#e2e5e8 |
#20262b |
Neutral badges, slider and progress tracks, and radio card hover |
--color-Formerly --field |
#e2e5e8 |
color-mix(in srgb, #0d1012 87.5%, black) |
The well: segmented and switch tracks, pressed buttons, selected radio cards, and disabled fields |
--color-Formerly --field-bg |
#fbfbfc |
color-mix(in srgb, #0d1012 87.5%, black) |
Field fill: --color-surface-raised in light, the sunk --color-well well in dark. It stays the same on focus |
--color-Formerly --field-edge |
#d3d8dd |
#262d33 |
Field border at rest: --color-border-subtle in both themes. Focus turns it --color-accent |
--shadow-Formerly --field-shadow |
none |
inset 1.2px 1.2px 3.6px rgb(0 0 0 / 55%), inset -1.2px -1.2px 3.6px rgb(255 255 255 / 5%) |
Fields at rest: none in light, where the white fill and edge carry the shape; --shadow-sink in dark. Disabled fields drop it |
--color-Formerly --control-thumb |
#fbfbfc |
color-mix(in srgb, #181d21 88%, white) |
Secondary buttons and segmented thumbs |
--color-Formerly --nav-current |
color-mix(in srgb, #4b45d1 14%, #fbfbfc) |
color-mix(in srgb, #a5a1ff 20%, transparent) |
Current navigation row and selected tab, with --shadow-nav-current |
--color-Formerly --nav-current-text |
#4b45d1 |
#a5a1ff |
Text on the current row and selected tab: the first of --color-accent, --color-text, black, and white that reaches 4.5:1 on the tinted fill |
--color-Formerly --segmented-current-text |
#4b45d1 |
#a5a1ff |
The selected segmented label: the first of --color-accent, --color-text, black, and white that reaches 4.5:1 on the thumb (3:1 for an icon) |
--color-Formerly --row-hover |
#e2e5e8 |
#20262b |
Hover on navigation rows, tabs, ghost buttons, and listbox options |
--color-Formerly --row-selected |
#fbfbfc |
#181d21 |
Checked option in a select picker |
--color-Formerly --border-subtle |
#d3d8dd |
#262d33 |
Figures and dividers |
--color-Formerly --border |
#6d747b |
#78818a |
Unchecked checkbox and radio edges; the off switch track mixes it into --color-well |
--color-Formerly --text |
#101315 |
#e6e9eb |
Essential labels and instructions |
--color-Formerly --text-muted |
#50575e |
#9aa3ab |
Secondary information and metadata |
--color-Formerly --overlay |
rgb(0 0 0 / 42%) |
rgb(0 0 0 / 62%) |
Backdrop behind dialogs and drawers |
Accent and links
The hue fills the one primary action and marks selection and focus. Links keep their own colour.
| Token | Light | Dark | Role |
|---|---|---|---|
--color-Formerly --accent |
#4b45d1 |
#a5a1ff |
Primary action fill, marks, current items, checked controls; 4.5:1 where it colors text |
--color-Formerly --accent-text |
#f4f5f6 |
#0d1012 |
Primary button label |
--color-Formerly --accent-hover |
#101315 |
#e6e9eb |
Accent hover; no core component reads it |
--color-Formerly --button-hover |
color-mix(in srgb, #4b45d1 85%, #101315) |
color-mix(in srgb, #a5a1ff 85%, #e6e9eb) |
Primary button hover |
--color-Formerly --link |
#0b5f7c |
#67c1df |
Links |
--color-Formerly --focus |
#4b45d1 |
#a5a1ff |
The one focus ring on every role but fields: the accent |
--focus- |
2px |
Same as light |
One ring for every role but fields: buttons, quiet actions, links, tabs, and navigation rows. --color-focus is the accent, at 3:1 or more on every surface. It has no glow and sits over the control's own raise or sink shadow. Pointer hover never draws focus. |
--focus- |
3px |
Same as light |
The gap between a control and its ring |
Status
Only for state, always with a text or icon label. Each has a soft surface for alerts and badges.
| Token | Light | Dark | Role |
|---|---|---|---|
--color-Formerly --success |
#157249 |
#4cc38a |
Success state: icons, and the success alert and badge. Always with a text label |
--color-Formerly --warning |
#86532e |
#e2a54b |
Warning state: icons, and the warning alert and badge. Always with a text label |
--color-Formerly --danger |
#bd342b |
#f0776c |
Errors and destructive actions: invalid field edges, field error text, the danger button label, and error icons |
--color-Formerly --info |
#175cd3 |
#84adff |
Information state: icons, and the info alert and badge |
--color-Formerly --success-soft |
#d9e5e1 |
#172d25 |
Alert text on its tint |
--color-Formerly --warning-soft |
#e7e2de |
#2f281b |
Alert text on its tint |
--color-Formerly --danger-soft |
#efe4e4 |
#312020 |
Alert text on its tint |
--color-Formerly --info-soft |
#d9e3f2 |
#202938 |
Alert text on its tint |
--color- |
black |
#e6e9eb |
What a status label mixes with: black in light, so it keeps its contrast whatever a theme's text, and --color-text in dark |
Code
Source code wells and their restrained syntax colours.
| Token | Light | Dark | Role |
|---|---|---|---|
--color-Formerly --code-bg |
#e9ebed |
#13171a |
Source code well |
--color-Formerly --code-text |
#101315 |
#e6e9eb |
Plain text in source code wells |
--color-Formerly --code-key |
#715b42 |
#d8c2a5 |
Keywords in source code |
--color-Formerly --code-string |
#346347 |
#a8bd9c |
Strings in source code |
--color-Formerly --code-number |
#86532e |
#d5b98c |
Numbers in source code |
--color-Formerly --code-comment |
#626772 |
#a0a6b1 |
Comments in source code |
Type
Sizes in rem, so text follows the reader’s font size. The identity inputs name the families.
| Token | Light | Dark | Role |
|---|---|---|---|
--text- |
0.75rem |
Same as light |
Badges, navigation group labels, and code block headers |
--text- |
0.8125rem |
Same as light |
Secondary text and figure captions |
--text- |
0.875rem |
Same as light |
Controls and dense application content |
--text- |
1rem |
Same as light |
Subheadings (h3 and below) and large controls |
--text- |
1.25rem |
Same as light |
Documentation section heading, in mono |
--text- |
1.5rem |
Same as light |
Largest application title |
--text- |
2.75rem |
Same as light |
Documentation title, in mono |
--text- |
1rem |
Same as light |
Paragraphs and article text, with --leading and --measure |
--text- |
3.5rem |
Same as light |
Product page and tool home title, in mono |
--text- |
2.125rem |
Same as light |
The display title on phones |
--leading- |
1.25 |
Same as light |
Headings, from the tokens.css base |
--leading |
1.6 |
Same as light |
Body and reading text |
--weight- |
400 |
Same as light |
Body text, labels, and rows that are not current |
--weight- |
500 |
Same as light |
The current destination |
--weight- |
600 |
Same as light |
Headings, from the tokens.css base |
--tracking- |
-0.03em |
Same as light |
Headings, from the tokens.css base |
--text- |
0.84375rem |
Same as light |
Inline code, source code, and command plates |
Space
A 4px rhythm: small gaps inside a group, larger gaps between groups.
| Token | Light | Dark | Role |
|---|---|---|---|
--space- |
0.25rem |
Same as light |
The smallest rhythm step: an icon and its label, and inner insets |
--space- |
0.5rem |
Same as light |
Gaps inside a group, such as between controls |
--space- |
0.75rem |
Same as light |
Gaps between related rows and fields |
--space- |
1rem |
Same as light |
Side gutter on phones |
--space- |
1.25rem |
Same as light |
A rhythm step between group and section gaps |
--space- |
1.5rem |
Same as light |
Side gutter |
--space- |
2rem |
Same as light |
Documentation section gap on phones |
--space- |
3rem |
Same as light |
Documentation section gap |
--space- |
4rem |
Same as light |
Product section separation at tablet width |
--space- |
5rem |
Same as light |
A large rhythm step for page regions |
--space- |
6rem |
Same as light |
Product section separation |
Size
Control heights, the reading measure, and page widths.
| Token | Light | Dark | Role |
|---|---|---|---|
--control- |
2rem |
Same as light |
Small control height: compact buttons and inline actions |
--control- |
2.25rem |
Same as light |
Default control height on fine pointers |
--control- |
2.75rem |
Same as light |
Touch controls |
--row |
2.25rem |
Same as light |
Navigation and list rows |
--measure |
68ch |
Same as light |
Bounds reading text |
--page- |
960px |
Same as light |
Documentation frame |
--page- |
1120px |
Same as light |
Product page frame |
--sidebar |
224px |
Same as light |
This page's sidebar |
Shape
One radius per role, from inline code to floating panels.
| Token | Light | Dark | Role |
|---|---|---|---|
--radius-Formerly --radius-sm |
6px |
Same as light |
Places and picked rows: navigation rows, tabs, list rows, breadcrumb links, checkboxes, and keyboard keys |
--radius-Formerly --radius-md |
999px |
Same as light |
Pills that act, or set a value in place with every option shown: buttons other than the labelled contents trigger, quiet actions other than the project-menu trigger, segmented controls, and their thumbs |
--radius-Formerly --radius-lg |
16px |
Same as light |
Containers: wells, plates, panels, radio cards, alerts, and floating layers |
--radius- |
10px |
Same as light |
Typed fields, controls whose label wraps, and one-line controls that are not actions: inputs, selects, textareas, toggle cards, pager links, the project-menu trigger, the labelled contents trigger and its no-JavaScript summary, and the skip link |
--radius- |
999px |
Same as light |
Small state marks: status badges, switch tracks, slider and progress tracks, and score pips |
Elevation
One shadow per depth tier. Pages write no shadow of their own.
| Token | Light | Dark | Role |
|---|---|---|---|
--shadow- |
0 1px 2px rgb(16 24 40 / 12%), 0 0 0 1px rgb(16 24 40 / 6%) |
inset 0 1px 0 rgb(255 255 255 / 7%), 0 1px 2px rgb(0 0 0 / 45%) |
Idle controls: buttons, unselected radio cards, switch knobs, and segmented thumbs |
--shadow- |
0 1px 2px rgb(16 24 40 / 6%), 0 0 0 1px rgb(16 24 40 / 6%) |
0 0 0 1px rgb(255 255 255 / 6%) |
Containers: panels, cards, source code, command plates, and terminal captures |
--shadow- |
inset 1.2px 1.2px 3.6px rgb(130 142 158 / 35%), inset -1.2px -1.2px 3.6px rgb(255 255 255 / 80%) |
inset 1.2px 1.2px 3.6px rgb(0 0 0 / 55%), inset -1.2px -1.2px 3.6px rgb(255 255 255 / 5%) |
Wells: tracks, pressed buttons, selected radio cards, and dark fields |
--shadow-Formerly --shadow-popover |
0 8px 24px rgb(16 16 24 / 12%), 0 0 0 1px #d3d8dd |
0 8px 24px rgb(0 0 0 / 45%), 0 0 0 1px #262d33 |
Menus, popovers, pickers, and dialogs |
--shadow- |
0 1px 3px rgb(130 142 158 / 40%) |
0 1px 2px rgb(0 0 0 / 25%) |
The lift under the current navigation row and the selected tab |
--shadow-Formerly --field-shadow-focus |
inset 0 0 0 2px color-mix(in srgb, #4b45d1 18%, transparent) |
inset 0 0 0 2px color-mix(in srgb, #a5a1ff 18%, transparent) |
A focused field's 2px inset line: the accent at 18%, inside its --color-accent edge |
--shadow-Formerly --field-shadow-focus-invalid |
inset 0 0 0 2px color-mix(in srgb, #bd342b 18%, transparent) |
inset 0 0 0 2px color-mix(in srgb, #f0776c 18%, transparent) |
A focused invalid field's inset line: --color-error at 18%, inside its --color-error edge |
Motion
Short durations for hover and press, a longer one for menus and panels.
| Token | Light | Dark | Role |
|---|---|---|---|
--duration- |
120ms |
Same as light |
Hover and press |
--duration |
180ms |
Same as light |
Menus, panels, and the switch knob |
--ease- |
cubic-bezier(0.2, 0.8, 0.2, 1) |
Same as light |
Animate opacity or transform only where it explains a state change |
Terminal plates
Derived from the hue: the tinted command plate and the neutral terminal capture of the terminal folio identity. A project without plates leaves them unused.
| Token | Light | Dark | Role |
|---|---|---|---|
--color-Formerly --command-bg |
color-mix(in srgb, #4b45d1 25%, #101010) |
color-mix(in srgb, #a5a1ff 16%, black) |
Command plate, tinted with the hue, in both themes |
--color-Formerly --command-border |
transparent |
color-mix(in srgb, #a5a1ff 28%, black) |
Command plate edge; transparent in light |
--color-Formerly --terminal |
#0a0c0e |
Same as light |
Terminal capture plate, in both themes |
--color-Formerly --terminal-text |
#e6e9eb |
Same as light |
Command text |
--color-Formerly --terminal-border |
#2a3036 |
Same as light |
Terminal plate edge |
--color-Formerly --terminal-caption |
#13171a |
Same as light |
Status-line caption under a terminal capture |
--color-Formerly --terminal-caption-text |
#c9d0d6 |
Same as light |
The status-line caption under a terminal capture |
--shadow-Formerly --terminal-shadow-nav-current |
0 1px 2px rgb(0 0 0 / 25%) |
Same as light |
The selected tab's lift in a terminal capture header, which stays dark in both appearances |