Color draft v3.0.0
The palettes the system draws from and the mapped color roles every component paints with, in every mode: the Figma library's colors, as they are.
The color tokens are the Figma library's three color collections, recreated with the same paths (made valid), values and aliases: Colors / Base, the raw palettes; Colors / Palette Switch, the neutral ramp the roles read (ash today); Colors / Mapped, the roles, in a light and a dark mode. Nobody paints with a palette step directly: components alias the mapped roles (global.bg, global.text, global.icon, global.border), so dark mode, and later another neutral palette, change in one place. The Figma library's errors and limitations are kept on purpose, as the starting point the system evolves from; the few colors the design system adds live apart, in tokens/additions/.
Specification
From packages/components/specs/foundations/color.spec.json
Raw file packages/components/specs/foundations/color.spec.json
{
"$schema": "../schema/foundation.schema.json",
"id": "color",
"name": "Color",
"version": "3.0.0",
"status": "draft",
"summary": "The palettes the system draws from and the mapped color roles every component paints with, in every mode: the Figma library's colors, as they are.",
"description": "The color tokens are the Figma library's three color collections, recreated with the same paths (made valid), values and aliases: Colors / Base, the raw palettes; Colors / Palette Switch, the neutral ramp the roles read (ash today); Colors / Mapped, the roles, in a light and a dark mode. Nobody paints with a palette step directly: components alias the mapped roles (global.bg, global.text, global.icon, global.border), so dark mode, and later another neutral palette, change in one place. The Figma library's errors and limitations are kept on purpose, as the starting point the system evolves from; the few colors the design system adds live apart, in tokens/additions/.",
"tags": [
"color",
"modes",
"contrast"
],
"tokens": [
"global.*",
"brand-identity.*",
"ai.bg.*",
"ai.text.*",
"ai.icon.*",
"ai.border.*",
"dataviz.*",
"color.transparent"
],
"rules": [
{
"id": "palettes",
"name": "Palettes",
"text": "Raw palettes are ramps from 25 (lightest) to 950 (darkest): neutral (ash and slate) and brand in a light and a dark variant, the functional hues (error, warning, success, info, severe), AI, extended and branded extended hues, and the brand identity colors. Only other tokens reference them, never a component."
},
{
"id": "palette-switch",
"name": "Palette switch",
"text": "The roles never read a neutral ramp directly: they read light-switch.base.<step> and dark-switch.base.<step>, which point to one neutral palette. Ash is the palette today; slate, the other one, will switch every neutral role at once when the system supports a second palette."
},
{
"id": "roles",
"name": "Roles",
"text": "A mapped color names what a color does, not what it looks like: global.bg (fills and surfaces), global.text, global.icon and global.border, then the context (level, base, accent, subtle, sunken, state…), the color family (neutral, brand, functional.<hue>, extended.<hue>) and the state. Components alias roles, never a palette step. The focus ring color belongs to the Focus ring foundation."
},
{
"id": "levels",
"name": "Surface levels",
"text": "Surfaces are numbered by how far they sit from the page: level 0 is the page, levels 1 and 2 are raised on it (panels, cards, menus, dialogs), level 3 is the highest, and sunken is a plane recessed below the page. Levels 0 to 2 and sunken have hover and active steps for surfaces people interact with. They are built from the neutral steps global.bg.base.neutral.1 to 5.",
"tokens": [
"global.bg.level.*",
"global.bg.base.*"
]
},
{
"id": "levels-light-dark",
"name": "Levels in light and dark mode",
"text": "In light mode the levels alternate between two neutral steps, so each one differs from the level under it and borders separate them. In dark mode they follow the Figma library's dark mapping.",
"tokens": [
"global.bg.level.*"
]
},
{
"id": "emphasis",
"name": "Emphasis and family",
"text": "Fills come by emphasis: accent, a strong fill; subtle, a tinted fill; sunken, a deeper tint. Each emphasis exists for the neutral, brand, functional and extended families, with default, hover and active steps where the Figma library defines them. Every fill has its own text and icon color: on-accent, on-subtle and on-sunken, per family.",
"tokens": [
"global.bg.accent.*",
"global.bg.subtle.*",
"global.bg.sunken.*"
]
},
{
"id": "text",
"name": "Text",
"text": "Text on a surface is on-base: neutral primary for running text and labels, secondary and tertiary for less important text, and one color per brand, functional and extended family. Code has its own colors (keyword, variable, function, class and type, string, number, comment).",
"tokens": [
"global.text.*"
]
},
{
"id": "icons",
"name": "Icons",
"text": "Every icon role aliases the text role of the same context, so an icon and the text next to it always match; they stay separate tokens so they can diverge later.",
"tokens": [
"global.icon.*"
]
},
{
"id": "level-borders",
"name": "Level borders",
"text": "Borders that follow the surface levels come in three families. Edge is the outline around a surface, separating it from what surrounds it (level.edge.level.<n>, level.edge.sunken). On-level is a line painted on a surface: dividers, table rules (level.on-level.<n>). Blend is the color of the surface itself, to detach elements stacked on each other (level.blend.<n>). Edges alone have states, hover and active, shared by every level.",
"tokens": [
"global.border.level.*"
]
},
{
"id": "borders",
"name": "Borders by emphasis",
"text": "Base borders (neutral 1 to 5, brand, functional, extended) outline elements on a surface; accent and subtle borders follow the fills of the same emphasis and family, with their states.",
"tokens": [
"global.border.base.*",
"global.border.accent.*",
"global.border.subtle.*"
]
},
{
"id": "states",
"name": "Disabled and skeleton",
"text": "An inactive component takes the disabled fill, border, text and icon whatever its emphasis and family: disabled is a state, not a variant. Skeleton colors draw placeholders while content loads.",
"tokens": [
"global.bg.state.*",
"global.text.state.*",
"global.icon.state.*",
"global.border.state.*"
]
},
{
"id": "transparency",
"name": "Transparency",
"text": "Fade and overlay are translucent layers from none to blackout: fade lightens what it covers, overlay darkens it (behind a dialog, for instance).",
"tokens": [
"global.bg.transparency.*"
]
},
{
"id": "translucency",
"name": "Composed colors",
"text": "The Figma library composes some colors from a palette step and an opacity of the Effect scale (the subtle neutral fills, the disabled and skeleton colors, transparency, the shadow colors). DTCG cannot compose two tokens, so these are written as the resulting translucent color, and each one names its step and opacity in its description. They tint whatever they sit on: their contrast is measured over each surface."
},
{
"id": "unfinished",
"name": "AI and data visualization",
"text": "The Figma library marks its AI and data visualization roles as unfinished. They are kept as they are, typos (functionnal, subtile) and aliases to colors the Figma library does not contain (kept as their literal value) included, until a component needs them.",
"tokens": [
"ai.bg.*",
"ai.text.*",
"ai.icon.*",
"ai.border.*",
"dataviz.*"
]
},
{
"id": "additions",
"name": "Added by the design system",
"text": "color.transparent is fully transparent: a ghost element aliases it to keep its box without a visible fill or edge. The Figma library has no such color; it lives in tokens/additions/.",
"tokens": [
"color.transparent"
]
},
{
"id": "modes",
"name": "Modes",
"text": "Every role has a value in every mode: light (the default) and dark, the Figma library's two mappings. A mode changes the palette step a role aliases, never the role: a component's color decisions hold in every mode and never mention one."
},
{
"id": "not-alone",
"name": "Never color alone",
"text": "A family color reinforces a meaning the label or the icon already carries. Color is never the only way to tell an error action, a selected item or a state from the rest."
}
],
"specimens": [
{
"id": "neutral",
"name": "Neutral palette",
"display": "palette",
"tokens": [
"neutral.*"
],
"description": "Ash and slate, each in a light and a dark ramp."
},
{
"id": "palette-switch",
"name": "Palette switch",
"display": "palette",
"tokens": [
"light-switch.*",
"dark-switch.*"
],
"description": "The neutral ramp the roles read: ash today."
},
{
"id": "brand",
"name": "Brand palette",
"display": "palette",
"tokens": [
"brand.*"
],
"description": "Brand ramps for light and dark mode, and the brand identity colors."
},
{
"id": "functional",
"name": "Functional palette",
"display": "palette",
"tokens": [
"functional.*"
],
"description": "Hues that carry a status: error, warning, success, info and severe."
},
{
"id": "ai",
"name": "AI palette",
"display": "palette",
"tokens": [
"ai.*"
],
"tier": "raw",
"description": "For features generated or assisted by AI."
},
{
"id": "extended",
"name": "Extended palette",
"display": "palette",
"tokens": [
"extended.*"
],
"description": "Additional hues for categories, illustrations and data."
},
{
"id": "branded-extended",
"name": "Branded extended palette",
"display": "palette",
"tokens": [
"branded-extended.*"
],
"description": "Brand-flavoured additional hues."
},
{
"id": "utility",
"name": "Utility",
"display": "palette",
"tokens": [
"color.transparent"
],
"description": "Added by the design system: fully transparent, for fills and borders that keep their space without showing."
},
{
"id": "level-roles",
"name": "Surface levels",
"display": "color",
"tokens": [
"global.bg.level.*",
"global.bg.base.*"
],
"description": "The levels and the sunken plane with their states, and the neutral steps they are built from."
},
{
"id": "fill-roles",
"name": "Fills",
"display": "color",
"tokens": [
"global.bg.accent.*",
"global.bg.subtle.*",
"global.bg.sunken.*",
"global.bg.state.*",
"global.bg.transparency.*"
],
"description": "Fills by emphasis, family and state; disabled and skeleton; transparency layers."
},
{
"id": "text-roles",
"name": "Text",
"display": "color",
"tokens": [
"global.text.*"
],
"description": "Text on surfaces and on each fill, code colors, disabled and skeleton."
},
{
"id": "icon-roles",
"name": "Icons",
"display": "color",
"tokens": [
"global.icon.*"
],
"description": "Icon colors, each aliasing the text color of its context."
},
{
"id": "border-roles",
"name": "Borders",
"display": "color",
"tokens": [
"global.border.*"
],
"description": "Level borders, borders by emphasis and family, disabled."
},
{
"id": "brand-identity-roles",
"name": "Brand identity",
"display": "color",
"tokens": [
"brand-identity.*"
],
"description": "The brand identity colors as roles."
},
{
"id": "ai-roles",
"name": "AI roles",
"display": "color",
"tokens": [
"ai.bg.*",
"ai.text.*",
"ai.icon.*",
"ai.border.*"
],
"description": "Unfinished in the Figma library: fills, text, icons, borders and gradients for AI features."
},
{
"id": "dataviz-roles",
"name": "Data visualization roles",
"display": "color",
"tokens": [
"dataviz.*"
],
"description": "Unfinished in the Figma library: series colors by family and the structure of charts (axes, grid, track)."
}
],
"contrast": [
{
"id": "text-primary",
"description": "Running text and labels on every surface level and on sunken.",
"foreground": "global.text.on-base.neutral.primary",
"backgrounds": [
"global.bg.level.0.default",
"global.bg.level.1.default",
"global.bg.level.2.default",
"global.bg.level.3.default",
"global.bg.level.sunken.default"
],
"minimum": 4.5,
"refs": [
"wcag:1.4.3"
]
},
{
"id": "text-secondary",
"description": "Secondary text is still text: same minimum.",
"foreground": "global.text.on-base.neutral.secondary",
"backgrounds": [
"global.bg.level.0.default",
"global.bg.level.1.default",
"global.bg.level.2.default",
"global.bg.level.3.default",
"global.bg.level.sunken.default"
],
"minimum": 4.5,
"refs": [
"wcag:1.4.3"
]
},
{
"id": "text-tertiary",
"description": "Tertiary text is still text: same minimum.",
"foreground": "global.text.on-base.neutral.tertiary",
"backgrounds": [
"global.bg.level.0.default",
"global.bg.level.1.default",
"global.bg.level.2.default",
"global.bg.level.3.default",
"global.bg.level.sunken.default"
],
"minimum": 4.5,
"refs": [
"wcag:1.4.3"
]
},
{
"id": "text-brand",
"description": "Brand text on every surface.",
"foreground": "global.text.on-base.brand.default",
"backgrounds": [
"global.bg.level.0.default",
"global.bg.level.1.default",
"global.bg.level.2.default",
"global.bg.level.3.default",
"global.bg.level.sunken.default"
],
"minimum": 4.5,
"refs": [
"wcag:1.4.3"
]
},
{
"id": "text-error",
"description": "Error text on every surface.",
"foreground": "global.text.on-base.functional.error.default",
"backgrounds": [
"global.bg.level.0.default",
"global.bg.level.1.default",
"global.bg.level.2.default",
"global.bg.level.3.default",
"global.bg.level.sunken.default"
],
"minimum": 4.5,
"refs": [
"wcag:1.4.3"
],
"knownIssue": "The Figma library's error colors: the error text and fills fall under 4.5:1 in some states, kept as they are until the palette is redefined"
},
{
"id": "on-accent-neutral",
"description": "Text and icons on the neutral accent fill, in every state.",
"foreground": "global.text.on-accent.neutral.primary",
"backgrounds": [
"global.bg.accent.neutral.default",
"global.bg.accent.neutral.hover",
"global.bg.accent.neutral.active"
],
"minimum": 4.5,
"refs": [
"wcag:1.4.3"
]
},
{
"id": "on-accent-brand",
"description": "Text and icons on the brand accent fill, in every state.",
"foreground": "global.text.on-accent.brand.default",
"backgrounds": [
"global.bg.accent.brand.default",
"global.bg.accent.brand.hover",
"global.bg.accent.brand.active"
],
"minimum": 4.5,
"refs": [
"wcag:1.4.3"
]
},
{
"id": "on-accent-error",
"description": "Text and icons on the error accent fill, in every state.",
"foreground": "global.text.on-accent.functional.error.default",
"backgrounds": [
"global.bg.accent.functional.error.default",
"global.bg.accent.functional.error.hover",
"global.bg.accent.functional.error.active"
],
"minimum": 4.5,
"refs": [
"wcag:1.4.3"
],
"knownIssue": "The Figma library's error colors: the error text and fills fall under 4.5:1 in some states, kept as they are until the palette is redefined"
},
{
"id": "on-subtle-neutral",
"description": "Text and icons on the neutral subtle fill, in every state. The fill is translucent: measured over each surface.",
"foreground": "global.text.on-subtle.neutral.default",
"backgrounds": [
"global.bg.subtle.neutral.default",
"global.bg.subtle.neutral.hover",
"global.bg.subtle.neutral.active"
],
"on": [
"global.bg.level.0.default",
"global.bg.level.1.default",
"global.bg.level.2.default",
"global.bg.level.3.default",
"global.bg.level.sunken.default"
],
"minimum": 4.5,
"refs": [
"wcag:1.4.3"
]
},
{
"id": "on-subtle-brand",
"description": "Text and icons on the brand subtle fill, in every state.",
"foreground": "global.text.on-subtle.brand.default",
"backgrounds": [
"global.bg.subtle.brand.default",
"global.bg.subtle.brand.hover",
"global.bg.subtle.brand.active"
],
"minimum": 4.5,
"refs": [
"wcag:1.4.3"
]
},
{
"id": "on-subtle-error",
"description": "Text and icons on the error subtle fill, in every state.",
"foreground": "global.text.on-subtle.functional.error.default",
"backgrounds": [
"global.bg.subtle.functional.error.default",
"global.bg.subtle.functional.error.hover",
"global.bg.subtle.functional.error.active"
],
"minimum": 4.5,
"refs": [
"wcag:1.4.3"
],
"knownIssue": "The Figma library's error colors: the error text and fills fall under 4.5:1 in some states, kept as they are until the palette is redefined"
},
{
"id": "text-disabled",
"description": "Text of inactive components: measured, no minimum (WCAG 1.4.3 exempts them).",
"foreground": "global.text.state.disabled.default",
"backgrounds": [
"global.bg.level.0.default",
"global.bg.level.1.default",
"global.bg.level.2.default",
"global.bg.level.3.default",
"global.bg.level.sunken.default"
],
"refs": [
"wcag:1.4.3"
]
},
{
"id": "edge-level-0",
"description": "Outline of a level 0 surface against the surface itself: measured, no minimum (never the only edge of a component).",
"foreground": "global.border.level.edge.level.0",
"backgrounds": [
"global.bg.level.0.default"
],
"refs": [
"wcag:1.4.11",
"understanding-ntc-boundaries"
]
},
{
"id": "edge-level-1",
"description": "Outline of a level 1 surface against the surface itself: measured, no minimum (never the only edge of a component).",
"foreground": "global.border.level.edge.level.1",
"backgrounds": [
"global.bg.level.1.default"
],
"refs": [
"wcag:1.4.11",
"understanding-ntc-boundaries"
]
},
{
"id": "edge-level-2",
"description": "Outline of a level 2 surface against the surface itself: measured, no minimum (never the only edge of a component).",
"foreground": "global.border.level.edge.level.2",
"backgrounds": [
"global.bg.level.2.default"
],
"refs": [
"wcag:1.4.11",
"understanding-ntc-boundaries"
]
},
{
"id": "edge-level-3",
"description": "Outline of a level 3 surface against the surface itself: measured, no minimum (never the only edge of a component).",
"foreground": "global.border.level.edge.level.3",
"backgrounds": [
"global.bg.level.3.default"
],
"refs": [
"wcag:1.4.11",
"understanding-ntc-boundaries"
]
},
{
"id": "edge-sunken",
"description": "Outline of the sunken plane against it: measured, no minimum.",
"foreground": "global.border.level.edge.sunken.default",
"backgrounds": [
"global.bg.level.sunken.default"
],
"refs": [
"wcag:1.4.11",
"understanding-ntc-boundaries"
]
},
{
"id": "on-level-0",
"description": "Lines painted on a level 0 surface: measured, no minimum.",
"foreground": "global.border.level.on-level.0",
"backgrounds": [
"global.bg.level.0.default"
],
"refs": [
"wcag:1.4.11",
"understanding-ntc-boundaries"
]
},
{
"id": "on-level-1",
"description": "Lines painted on a level 1 surface: measured, no minimum.",
"foreground": "global.border.level.on-level.1",
"backgrounds": [
"global.bg.level.1.default"
],
"refs": [
"wcag:1.4.11",
"understanding-ntc-boundaries"
]
},
{
"id": "on-level-2",
"description": "Lines painted on a level 2 surface: measured, no minimum.",
"foreground": "global.border.level.on-level.2",
"backgrounds": [
"global.bg.level.2.default"
],
"refs": [
"wcag:1.4.11",
"understanding-ntc-boundaries"
]
},
{
"id": "on-level-3",
"description": "Lines painted on a level 3 surface: measured, no minimum.",
"foreground": "global.border.level.on-level.3",
"backgrounds": [
"global.bg.level.3.default"
],
"refs": [
"wcag:1.4.11",
"understanding-ntc-boundaries"
]
},
{
"id": "edge-hover",
"description": "Edge of an interactive surface under the pointer, on levels 0 to 2: measured, no minimum.",
"foreground": "global.border.level.edge.state.hover",
"backgrounds": [
"global.bg.level.0.default",
"global.bg.level.1.default",
"global.bg.level.2.default"
],
"refs": [
"wcag:1.4.11",
"understanding-ntc-boundaries"
]
},
{
"id": "edge-active",
"description": "Edge of an interactive surface being pressed, on levels 0 to 2: measured, no minimum.",
"foreground": "global.border.level.edge.state.active",
"backgrounds": [
"global.bg.level.0.default",
"global.bg.level.1.default",
"global.bg.level.2.default"
],
"refs": [
"wcag:1.4.11",
"understanding-ntc-boundaries"
]
}
],
"accessibility": {
"guidelines": [
{
"text": "Text contrasts at least 4.5:1 with what it sits on, in every mode, family and enabled state: on-base text on every surface level and on sunken, on-accent and on-subtle text on their fills. The Figma library’s error roles fall short today (error text on some levels, text on the error accent fill, text on the hover and active subtle error fills), tracked as a known issue.",
"refs": [
"wcag:1.4.3"
]
},
{
"text": "Text of an inactive component has no contrast requirement, so the disabled text is free to recede.",
"refs": [
"wcag:1.4.3"
]
},
{
"text": "Contrast is measured against the background people actually see: a translucent fill is composited over each surface it can sit on before measuring.",
"refs": [
"wcag:1.4.3"
]
},
{
"text": "A border needs 3:1 against the surface only when it is what shows the component is there. A control whose text or icon identifies it needs no boundary, so the level borders, under 3:1, are never the only edge of a component without other visible content.",
"refs": [
"wcag:1.4.11",
"understanding-ntc-boundaries"
]
},
{
"text": "Inactive components are exempt from the 3:1 of non-text contrast as well.",
"refs": [
"wcag:1.4.11",
"understanding-ntc-inactive"
]
},
{
"text": "Color is never the only visual means of conveying information: intent, state and selection are also carried by text, an icon or a shape.",
"refs": [
"wcag:1.4.1",
"hig-accessibility-vision"
]
},
{
"text": "In forced colors mode the browser replaces text, background, border and outline colors with system colors: nothing may depend on a token color surviving there.",
"refs": [
"mdn-forced-colors"
],
"platforms": [
"web"
]
},
{
"text": "Every color has a light and a dark value, as Apple asks of custom colors. Apple also asks for an increased-contrast variant of each, which the system does not define yet.",
"refs": [
"hig-color-best-practices"
],
"platforms": [
"ios"
]
},
{
"text": "Android asks for 4.5:1 for text under 18 sp (14 sp bold) and 3:1 above; the system applies 4.5:1 to every text size.",
"refs": [
"android-text-visibility"
],
"platforms": [
"android"
]
}
],
"references": [
{
"id": "understanding-ntc-boundaries",
"title": "Understanding 1.4.11 Non-text Contrast: boundaries",
"url": "https://www.w3.org/WAI/WCAG22/Understanding/non-text-contrast.html#boundaries"
},
{
"id": "understanding-ntc-inactive",
"title": "Understanding 1.4.11 Non-text Contrast: inactive user interface components",
"url": "https://www.w3.org/WAI/WCAG22/Understanding/non-text-contrast.html#inactive-controls"
},
{
"id": "hig-accessibility-vision",
"title": "Apple HIG: Accessibility, vision",
"url": "https://developer.apple.com/design/human-interface-guidelines/accessibility#Vision"
},
{
"id": "hig-color-best-practices",
"title": "Apple HIG: Color, best practices",
"url": "https://developer.apple.com/design/human-interface-guidelines/color#Best-practices"
},
{
"id": "android-text-visibility",
"title": "Android: Make apps more accessible, increase text visibility",
"url": "https://developer.android.com/guide/topics/ui/accessibility/apps#text-visibility"
},
{
"id": "mdn-forced-colors",
"title": "MDN: forced-colors, properties affected by forced colors mode",
"url": "https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/forced-colors#properties_affected_by_forced-color_mode"
}
]
},
"examples": [
{
"id": "button-accent",
"name": "Button, accent neutral",
"component": "button",
"props": {
"emphasis": "accent",
"intent": "neutral",
"label": "Save changes"
}
},
{
"id": "button-accent-brand",
"name": "Button, accent brand",
"component": "button",
"props": {
"emphasis": "accent",
"intent": "brand",
"label": "Continue"
}
},
{
"id": "button-accent-error",
"name": "Button, accent error",
"component": "button",
"props": {
"emphasis": "accent",
"intent": "error",
"label": "Delete"
}
},
{
"id": "button-subtle",
"name": "Button, subtle neutral",
"component": "button",
"props": {
"emphasis": "subtle",
"intent": "neutral",
"label": "Cancel"
}
},
{
"id": "button-subtle-brand",
"name": "Button, subtle brand",
"component": "button",
"props": {
"emphasis": "subtle",
"intent": "brand",
"label": "Save draft"
}
},
{
"id": "button-subtle-error",
"name": "Button, subtle error",
"component": "button",
"props": {
"emphasis": "subtle",
"intent": "error",
"label": "Remove"
}
},
{
"id": "button-ghost",
"name": "Button, ghost neutral",
"component": "button",
"props": {
"emphasis": "ghost",
"intent": "neutral",
"label": "Learn more"
}
},
{
"id": "button-disabled",
"name": "Button, accent brand, disabled",
"component": "button",
"props": {
"emphasis": "accent",
"intent": "brand",
"label": "Unavailable",
"disabled": true
}
}
],
"decisions": [
{
"id": "figma-library-colors",
"date": "2026-10-02",
"version": "3.0.0",
"area": "color",
"status": "active",
"text": "The color tokens are the Figma library's Colors / Base, Colors / Palette Switch (ash) and Colors / Mapped (light and dark), recreated with the same paths made valid, the same values and the same aliases, errors and limitations included. The design system adds only color.transparent and the focus ring color, kept apart in tokens/additions/.",
"rationale": "One vocabulary: the current state mixed the repository's first decisions with tokens partly taken from the Figma library, which made every decision hard to discuss. The Figma library as it is becomes the starting point the system evolves from.",
"tokens": [
"global.*",
"neutral.*",
"light-switch.*",
"dark-switch.*",
"brand.*",
"functional.*",
"extended.*",
"branded-extended.*",
"brand-identity.*",
"ai.*",
"dataviz.*",
"color.*"
],
"supersedes": [
"level-borders",
"surface-levels-light-alternate",
"surface-levels"
]
},
{
"id": "level-borders",
"date": "2026-10-01",
"version": "2.0.0",
"area": "color",
"status": "superseded",
"text": "Borders follow the surface levels in three families: edge (the outline around a surface: light ash 200 on levels 0 and 2, ash 300 on levels 1 and 3 and sunken; dark ash 800, 700, 600, 500 from level 0 to 3, ash 700 on sunken), on-level (lines painted on a surface: light ash 100 on levels 0 and 2, ash 200 on levels 1 and 3; dark ash 600, 500, 400, 300 from level 0 to 3) and blend (the surface color of each level). Edges alone have states, shared by every level: hover light ash 500, dark ash 500; active light ash 900, dark ash 100. color.border.default is removed; color.border.strong stays.",
"tokens": [
"color.border.edge.*",
"color.border.on-level.*",
"color.border.blend.*"
]
},
{
"id": "surface-levels-light-alternate",
"date": "2026-10-01",
"version": "1.0.0",
"area": "color",
"status": "superseded",
"text": "In light mode the surface levels alternate between ash 25 (levels 0 and 2) and ash 50 (levels 1 and 3), and sunken is ash 50. In dark mode they climb toward lighter steps: ash 900, 800, 700 and 600, and sunken is ash 975, a new step darker than 950.",
"tokens": [
"color.surface.*",
"color.neutral.dark.ash.975"
]
},
{
"id": "surface-levels",
"date": "2026-10-01",
"version": "1.0.0",
"area": "color",
"status": "superseded",
"text": "Surfaces are numbered levels: color.surface.level.0 (the page) to color.surface.level.3 (the highest), plus color.surface.sunken, a plane recessed below the page. They replace color.surface.default (now level 0) and color.surface.subtle (now level 1).",
"rationale": "Numbered levels are easier to use for designers and developers than names by meaning, which are often hard to choose between.",
"tokens": [
"color.surface.*"
]
}
],
"changelog": [
{
"version": "3.0.0",
"date": "2026-10-02",
"note": "Decision figma-library-colors. Breaking: every color token path changes. The raw palettes are the Figma library's Colors / Base (color.neutral.light.ash.25 becomes neutral.light.ash.25, color.brand.light.600 becomes brand.light.600, color.ai.* becomes ai.*; brand.identity.* becomes brand.identity-base.*, whose CSS variable would otherwise collide with the mapped brand-identity.*), plus the palette switch light-switch.base.* and dark-switch.base.* (ash). The roles are the Figma library's Colors / Mapped: color.surface.level.<n> becomes global.bg.level.<n>.default, color.surface.sunken global.bg.level.sunken.default, color.background.<emphasis>.<intent>.<state> global.bg.<emphasis>.<family>.<state> (error is functional.error), color.text.default / muted / inverse global.text.on-base.neutral.primary / on-base.neutral.tertiary / on-accent.neutral.primary, color.text.on-<emphasis>.<intent> global.text.on-<emphasis>.<family>.<default|primary>, color.text.disabled global.text.state.disabled.default, color.border.edge.* / on-level.* / blend.* global.border.level.edge.* / on-level.* / blend.*, color.border.strong global.border.base.neutral.4, color.background.disabled and color.border.disabled global.*.state.disabled.default. New roles: icons (global.icon.*), on-base and sunken families, functional and extended hues, code colors, skeleton, transparency, brand identity, and the Figma library’s unfinished AI and data visualization roles. Removed: the repository’s raw ash-alpha steps and dark ash 975 (the Figma library writes its translucent colors as literals, kept as such). Removed: color.background.none and color.border.none (invented); components alias color.transparent, kept as an addition in tokens/additions/. Values: light mode unchanged except the error roles, which follow the Figma library (accent error fill error 500/600/700, error text on tinted fills error 600); dark mode is the Figma library’s dark mapping (levels, fills and borders change). Contrast, lowest over every platform and surface: primary text light 17.99:1, dark 8.46:1; secondary 12.14 / 6.61:1; tertiary 5.74 / 4.77:1; brand text 5.46 / 9.61:1; on accent neutral 8.65 / 8.80:1, brand 5.74 / 7.76:1; on subtle neutral 10.79 / 5.73:1, brand 5.38 / 9.48:1 (4.5:1 required, WCAG 1.4.3). Known failures, kept as the Figma library defines them and tracked as a known issue: error text on the surfaces light 4.26:1, dark 3.73:1; on accent error 4.46:1 in both modes; on subtle error light 3.28:1. Measured without a minimum: disabled text 3.11 / 3.12:1; level edges light 1.34 to 1.37:1, dark 1.09 to 1.24:1; on-level light 1.19 to 1.27:1, dark 1.33 to 4.77:1; edge hover light 3.11:1, dark 1.22:1; edge active light 15.36:1, dark 9.45:1."
},
{
"version": "2.0.0",
"date": "2026-10-01",
"note": "Decision level-borders. Breaking: color.border.default is removed; use color.border.edge.level.<n> for the outline of a level n surface and color.border.on-level.<n> for lines painted on it. New: color.border.edge.level.0-3, edge.sunken, edge.hover, edge.active, color.border.on-level.0-3, color.border.blend.level.0-3. Measured without a minimum (WCAG 1.4.11: these borders never identify a component on their own), against the surface they belong to: edge against its own level light 1.35:1 (levels 0, 2) and 1.38:1 (levels 1, 3, sunken), dark 1.09 to 1.12:1 on the levels and 1.32:1 on sunken; edge against the level it sits on light 1.27 to 1.46:1, dark 1.19 to 1.22:1; on-level light 1.19:1 (levels 0, 2) and 1.27:1 (levels 1, 3), dark 1.33, 1.33, 3.24 and 4.78:1 from level 0 to 3; edge hover light 3.12:1 or more, dark 1.45, 1.33 and 1.22:1 on levels 0 to 2 (level 3 takes no state; a stronger dark hover is still to be reviewed); edge active light 15.37:1 or more, dark 8.47:1 or more. In dark mode the outline of a surface is fainter than the former default border (1.33:1 on the page): surfaces separate by their level color first."
},
{
"version": "1.0.0",
"date": "2026-10-01",
"note": "Decisions surface-levels and surface-levels-light-alternate. Breaking: color.surface.default and color.surface.subtle are removed; use color.surface.level.0 and color.surface.level.1, which keep their values in every mode. New: color.surface.level.2, color.surface.level.3, color.surface.sunken, and the raw step color.neutral.dark.ash.975. Contrast, lowest per pair over every surface level and sunken, every platform: default text light 17.99:1, dark 8.47:1 (level 3); muted text light 5.74:1, dark 4.78:1 (level 3); on subtle neutral, the translucent fill composited over each surface, light 10.80:1, dark 5.74:1 (level 3); the other text pairs do not depend on the surface and are unchanged (4.5:1 required, WCAG 1.4.3). Measured without a minimum: disabled text light 3.12:1, dark 3.13:1; default border light 1.38:1, dark 1.00:1 on level 3; strong border light 1.91:1, dark 1.09:1 on level 3. The dark default and strong borders no longer show against levels 2 and 3: borders that follow the level are still to be decided."
},
{
"version": "0.1.0",
"date": "2026-10-01",
"note": "Initial draft: the palettes and the semantic color roles as they are, specified once (no token changes). Text contrast, lowest per pair over both surfaces, every platform: default text light 17.99:1, dark 10.32:1; muted light 5.74:1, dark 5.83:1; on accent neutral / brand / error light 8.65 / 5.74 / 6.05:1, dark 8.81 / 7.76 / 6.05:1; on subtle neutral / brand / error, the translucent neutral fill measured over each surface, light 10.79 / 5.38 / 4.75:1, dark 6.45 / 9.48 / 7.25:1 (4.5:1 required, WCAG 1.4.3). Measured without a minimum: disabled text light 3.11:1, dark 3.58:1 (inactive components); default border light 1.37:1, dark 1.21:1, strong border light 1.91:1, dark 1.33:1 (borders that do not identify a component, WCAG 1.4.11)."
}
]
}
Rules
What the foundation is, one aspect per rule. The values come from the tokens, shown in every mode where they differ.
| Aspect | Rule | Tokens |
|---|---|---|
| Palettes | Raw palettes are ramps from 25 (lightest) to 950 (darkest): neutral (ash and slate) and brand in a light and a dark variant, the functional hues (error, warning, success, info, severe), AI, extended and branded extended hues, and the brand identity colors. Only other tokens reference them, never a component. | — |
| Palette switch | The roles never read a neutral ramp directly: they read light-switch.base.<step> and dark-switch.base.<step>, which point to one neutral palette. Ash is the palette today; slate, the other one, will switch every neutral role at once when the system supports a second palette. | — |
| Roles | A mapped color names what a color does, not what it looks like: global.bg (fills and surfaces), global.text, global.icon and global.border, then the context (level, base, accent, subtle, sunken, state…), the color family (neutral, brand, functional.<hue>, extended.<hue>) and the state. Components alias roles, never a palette step. The focus ring color belongs to the Focus ring foundation. | — |
| Surface levels | Surfaces are numbered by how far they sit from the page: level 0 is the page, levels 1 and 2 are raised on it (panels, cards, menus, dialogs), level 3 is the highest, and sunken is a plane recessed below the page. Levels 0 to 2 and sunken have hover and active steps for surfaces people interact with. They are built from the neutral steps global.bg.base.neutral.1 to 5. |
global.bg.level.0.default
light
#FDFDFD
dark
#191919
global.bg.level.0.hover
light
#F7F6F6
dark
#212121
global.bg.level.0.active
light
#ECE8E9
dark
#282828
global.bg.level.1.default
light
#F7F6F6
dark
#212121
global.bg.level.1.hover
light
#ECE8E9
dark
#282828
global.bg.level.1.active
light
#DFDBDC
dark
#303030
global.bg.level.2.default
light
#FDFDFD
dark
#282828
global.bg.level.2.hover
light
#F7F6F6
dark
#303030
global.bg.level.2.active
light
#ECE8E9
dark
#363636
global.bg.level.3.default
light
#F7F6F6
dark
#303030
global.bg.level.sunken.default
light
#F7F6F6
dark
#141414
global.bg.level.sunken.hover
light
#ECE8E9
dark
#191919
global.bg.base.neutral.1
light
#FDFDFD
dark
#191919
global.bg.base.neutral.2
light
#F7F6F6
dark
#212121
global.bg.base.neutral.3
light
#ECE8E9
dark
#282828
global.bg.base.neutral.4
light
#DFDBDC
dark
#303030
global.bg.base.neutral.5
light
#D7D3D4
dark
#363636
|
| Levels in light and dark mode | In light mode the levels alternate between two neutral steps, so each one differs from the level under it and borders separate them. In dark mode they follow the Figma library's dark mapping. |
global.bg.level.0.default
light
#FDFDFD
dark
#191919
global.bg.level.0.hover
light
#F7F6F6
dark
#212121
global.bg.level.0.active
light
#ECE8E9
dark
#282828
global.bg.level.1.default
light
#F7F6F6
dark
#212121
global.bg.level.1.hover
light
#ECE8E9
dark
#282828
global.bg.level.1.active
light
#DFDBDC
dark
#303030
global.bg.level.2.default
light
#FDFDFD
dark
#282828
global.bg.level.2.hover
light
#F7F6F6
dark
#303030
global.bg.level.2.active
light
#ECE8E9
dark
#363636
global.bg.level.3.default
light
#F7F6F6
dark
#303030
global.bg.level.sunken.default
light
#F7F6F6
dark
#141414
global.bg.level.sunken.hover
light
#ECE8E9
dark
#191919
|
| Emphasis and family | Fills come by emphasis: accent, a strong fill; subtle, a tinted fill; sunken, a deeper tint. Each emphasis exists for the neutral, brand, functional and extended families, with default, hover and active steps where the Figma library defines them. Every fill has its own text and icon color: on-accent, on-subtle and on-sunken, per family. |
global.bg.accent.neutral.default
light
#201E1F
dark
#E8E3E4
global.bg.accent.neutral.hover
light
#323031
dark
#D2CECF
global.bg.accent.neutral.active
light
#4C4A4A
dark
#B9B7B7
global.bg.accent.brand.default
light
#175DD6
dark
#9EE7FA
global.bg.accent.brand.hover
light
#1148A9
dark
#53D6F2
global.bg.accent.brand.active
light
#0B2A69
dark
#41B9D3
global.bg.accent.functional.success.default
light
#0B7742
dark
#11C772
global.bg.accent.functional.success.hover
light
#075D33
dark
#16AE64
global.bg.accent.functional.success.active
light
#023A1E
dark
#129957
global.bg.accent.functional.warning.default
#FFC61C
global.bg.accent.functional.warning.hover
#DFA700
global.bg.accent.functional.warning.active
#C38401
global.bg.accent.functional.severe.default
#FE8400
global.bg.accent.functional.severe.hover
#DE7B27
global.bg.accent.functional.severe.active
#CC6B0B
global.bg.accent.functional.error.default
#E12A23
global.bg.accent.functional.error.hover
#C01619
global.bg.accent.functional.error.active
#940E11
global.bg.accent.functional.info.default
light
#2B68E0
dark
#94B6F4
global.bg.accent.functional.info.hover
light
#1A4CAD
dark
#709DF1
global.bg.accent.functional.info.active
light
#0C2A68
dark
#5085EA
global.bg.accent.extended.lavender.default
light
#7534A9
dark
#B87BF5
global.bg.accent.extended.lavender.hover
light
#8D3BCD
dark
#CA9EFA
global.bg.accent.extended.lavender.active
light
#3F1A5C
dark
#A653EA
global.bg.accent.extended.lime.default
light
#D7F100
dark
#CAE200
global.bg.accent.extended.lime.hover
light
#E2FC00
dark
#D7F100
global.bg.accent.extended.lime.active
light
#CAE200
dark
#B8CD06
global.bg.accent.extended.coral.default
#FD8C67
global.bg.accent.extended.coral.hover
#FEA78B
global.bg.accent.extended.coral.active
#E75F2E
global.bg.accent.extended.forest.default
light
#0A382D
dark
#68BBA1
global.bg.accent.extended.forest.hover
light
#18614E
dark
#82D3B9
global.bg.accent.extended.forest.active
light
#052A20
dark
#4FA189
global.bg.accent.extended.azure.default
light
#266280
dark
#5BB8E7
global.bg.accent.extended.azure.hover
light
#2C7A9F
dark
#8ACAED
global.bg.accent.extended.azure.active
light
#153443
dark
#379BCA
global.bg.accent.extended.orchid.default
light
#923D78
dark
#F283CD
global.bg.accent.extended.orchid.hover
light
#B74A96
dark
#F5A1D7
global.bg.accent.extended.orchid.active
light
#923D78
dark
#D956B1
global.bg.accent.extended.sand.default
light
#353019
dark
#DFD465
global.bg.accent.extended.sand.hover
light
#68642C
dark
#F2E76F
global.bg.accent.extended.sand.active
light
#272316
dark
#C8BC5A
global.bg.accent.extended.amber.default
#FAC138
global.bg.accent.extended.amber.hover
#FEDC97
global.bg.accent.extended.amber.active
#EEB836
global.bg.accent.extended.purple.default
#8636CA
global.bg.accent.extended.purple.hover
#6B0DAC
global.bg.accent.extended.purple.active
#410B6A
global.bg.accent.extended.yellow.default
#EBF479
global.bg.accent.extended.yellow.hover
#D8DE58
global.bg.accent.extended.yellow.active
#C1C546
global.bg.accent.extended.green.default
#A8EF5A
global.bg.accent.extended.green.hover
#91D643
global.bg.accent.extended.green.active
#7BBA36
global.bg.accent.extended.beige.default
#E9C39E
global.bg.accent.extended.beige.hover
#E2A261
global.bg.accent.extended.beige.active
#C28548
global.bg.subtle.neutral.default
light
#B6B4B41a
dark
#7676761a
global.bg.subtle.neutral.hover
light
#B6B4B426
dark
#7676764d
global.bg.subtle.neutral.active
light
#B6B4B433
dark
#76767680
global.bg.subtle.brand.default
light
#EEF1F7
dark
#09191D
global.bg.subtle.brand.hover
light
#DDE6F5
dark
#0D272E
global.bg.subtle.brand.active
light
#BFD1F1
dark
#10363E
global.bg.subtle.functional.success.default
light
#DBFAE6
dark
#011C16
global.bg.subtle.functional.success.hover
light
#AEF6C9
dark
#022A23
global.bg.subtle.functional.success.active
light
#30F498
dark
#023A1E
global.bg.subtle.functional.warning.default
light
#FFF1C7
dark
#1F1504
global.bg.subtle.functional.warning.hover
light
#FFE495
dark
#2D2107
global.bg.subtle.functional.warning.active
light
#FFD654
dark
#3E2D0C
global.bg.subtle.functional.severe.default
light
#FFEDE2
dark
#271001
global.bg.subtle.functional.severe.hover
light
#FFDFCB
dark
#381A02
global.bg.subtle.functional.severe.active
light
#FFCAA8
dark
#4A2506
global.bg.subtle.functional.error.default
light
#FEECEA
dark
#2B0B08
global.bg.subtle.functional.error.hover
light
#FCCDC6
dark
#3E130F
global.bg.subtle.functional.error.active
light
#FAA79D
dark
#531A16
global.bg.subtle.functional.info.default
light
#EDF1F9
dark
#09162F
global.bg.subtle.functional.info.hover
light
#DEE7F6
dark
#0B204B
global.bg.subtle.functional.info.active
light
#BBCFF3
dark
#0C2A68
global.bg.subtle.extended.lavender.default
light
#F4EBFE
dark
#2D1543
global.bg.subtle.extended.lavender.hover
light
#E6D2FE
dark
#3F1A5C
global.bg.subtle.extended.lavender.active
light
#DABCFD
dark
#1D0E2C
global.bg.subtle.extended.lime.default
light
#F4FECD
dark
#22260E
global.bg.subtle.extended.lime.hover
light
#EAFE8C
dark
#2E340B
global.bg.subtle.extended.lime.active
light
#E2FC00
dark
#657216
global.bg.subtle.extended.coral.default
light
#FFEDE7
dark
#361A12
global.bg.subtle.extended.coral.hover
light
#FFDFD5
dark
#4D2112
global.bg.subtle.extended.coral.active
light
#FEC8B6
dark
#1F1411
global.bg.subtle.extended.forest.default
light
#E6F6F0
dark
#052A20
global.bg.subtle.extended.forest.hover
light
#CBF1E3
dark
#0A382D
global.bg.subtle.extended.forest.active
light
#9EE8CF
dark
#031C15
global.bg.subtle.extended.azure.default
light
#E7F4FB
dark
#14262E
global.bg.subtle.extended.azure.hover
light
#D4EBF8
dark
#153443
global.bg.subtle.extended.azure.active
light
#B5DDF3
dark
#12181B
global.bg.subtle.extended.orchid.default
light
#FDECF6
dark
#33182A
global.bg.subtle.extended.orchid.hover
light
#FBDDEF
dark
#491E3B
global.bg.subtle.extended.orchid.active
light
#F8C4E4
dark
#1D1419
global.bg.subtle.extended.sand.default
light
#FDFBD2
dark
#272316
global.bg.subtle.extended.sand.hover
light
#FBF6AB
dark
#353019
global.bg.subtle.extended.sand.active
light
#F2E76F
dark
#181710
global.bg.subtle.extended.amber.default
light
#FFF5E1
dark
#2A2212
global.bg.subtle.extended.amber.hover
light
#FFEBC4
dark
#3B2D12
global.bg.subtle.extended.amber.active
light
#FEDC97
dark
#1A1611
global.bg.subtle.extended.purple.default
light
#F5F0FA
dark
#1C0E2E
global.bg.subtle.extended.purple.hover
light
#EEE4FB
dark
#310056
global.bg.subtle.extended.purple.active
light
#E2CBFD
dark
#410B6A
global.bg.subtle.extended.yellow.default
light
#F4FE9B
dark
#18180D
global.bg.subtle.extended.yellow.hover
light
#EBF479
dark
#25240F
global.bg.subtle.extended.yellow.active
light
#D8DE58
dark
#323212
global.bg.subtle.extended.green.default
light
#EAF9DE
dark
#101A0B
global.bg.subtle.extended.green.hover
light
#CEFCA4
dark
#152A03
global.bg.subtle.extended.green.active
light
#A8EF5A
dark
#20370B
global.bg.subtle.extended.beige.default
light
#F6ECE2
dark
#1E150C
global.bg.subtle.extended.beige.hover
light
#EFDFCF
dark
#301F10
global.bg.subtle.extended.beige.active
light
#E9C39E
dark
#412A13
global.bg.sunken.brand.default
light
#DDE6F5
dark
#09191D
global.bg.sunken.functional.success.default
light
#AEF6C9
dark
#011C16
global.bg.sunken.functional.warning.default
light
#FFE495
dark
#1F1504
global.bg.sunken.functional.severe.default
light
#FFEDE2
dark
#271001
global.bg.sunken.functional.error.default
light
#FCCDC6
dark
#2B0B08
global.bg.sunken.functional.info.default
light
#DEE7F6
dark
#09162F
global.bg.sunken.extended.lavender.default
light
#E6D2FE
dark
#1D0E2C
global.bg.sunken.extended.lime.default
light
#EAFE8C
dark
#171811
global.bg.sunken.extended.coral.default
light
#FFDFD5
dark
#1F1411
global.bg.sunken.extended.forest.default
light
#CBF1E3
dark
#031C15
global.bg.sunken.extended.azure.default
light
#D4EBF8
dark
#12181B
global.bg.sunken.extended.orchid.default
light
#FBDDEF
dark
#1D1419
global.bg.sunken.extended.sand.default
light
#FBF6AB
dark
#181710
global.bg.sunken.extended.amber.default
light
#FFEBC4
dark
#1A1611
global.bg.sunken.extended.purple.default
light
#EEE4FB
dark
#1C0E2E
global.bg.sunken.extended.purple.hover
light
#E2CBFD
dark
#310056
global.bg.sunken.extended.purple.active
light
#D5AEFF
dark
#410B6A
global.bg.sunken.extended.yellow.default
light
#EBF479
dark
#18180D
global.bg.sunken.extended.yellow.hover
light
#D8DE58
dark
#25240F
global.bg.sunken.extended.yellow.active
light
#C1C546
dark
#323212
global.bg.sunken.extended.green.default
light
#CEFCA4
dark
#101A0B
global.bg.sunken.extended.green.hover
light
#A8EF5A
dark
#152A03
global.bg.sunken.extended.green.active
light
#91D643
dark
#20370B
global.bg.sunken.extended.beige.default
light
#EFDFCF
dark
#1E150C
global.bg.sunken.extended.beige.hover
light
#E9C39E
dark
#301F10
global.bg.sunken.extended.beige.active
light
#E2A261
dark
#412A13
|
| Text | Text on a surface is on-base: neutral primary for running text and labels, secondary and tertiary for less important text, and one color per brand, functional and extended family. Code has its own colors (keyword, variable, function, class and type, string, number, comment). |
global.text.on-base.neutral.primary
light
#0E0D0D
dark
#D2CECF
global.text.on-base.neutral.secondary
light
#323031
dark
#B9B7B7
global.text.on-base.neutral.tertiary
light
#616161
dark
#9D9B9C
global.text.on-base.brand.default
light
#175DD6
dark
#9EE7FA
global.text.on-base.functional.success.default
light
#075D33
dark
#16AE64
global.text.on-base.functional.warning.default
light
#3E2D0C
dark
#644B16
global.text.on-base.functional.severe.default
light
#764016
dark
#CC6B0B
global.text.on-base.functional.error.default
light
#E12A23
dark
#EE5248
global.text.on-base.functional.info.default
light
#2B68E0
dark
#94B6F4
global.text.on-base.extended.lavender.default
light
#7534A9
dark
#B87BF5
global.text.on-base.extended.lime.default
light
#2E340B
dark
#A0B316
global.text.on-base.extended.coral.default
light
#9C4324
dark
#FD8C67
global.text.on-base.extended.forest.default
light
#18614E
dark
#68BBA1
global.text.on-base.extended.azure.default
light
#153443
dark
#5BB8E7
global.text.on-base.extended.orchid.default
light
#923D78
dark
#F283CD
global.text.on-base.extended.sand.default
light
#353019
dark
#ABA04B
global.text.on-base.extended.amber.default
light
#3B2D12
dark
#DDAB35
global.text.on-accent.neutral.primary
light
#FDFDFD
dark
#191919
global.text.on-accent.neutral.secondary
light
#ECE8E9
dark
#282828
global.text.on-accent.neutral.tertiary
light
#D7D3D4
dark
#303030
global.text.on-accent.brand.default
light
#FBFCFD
dark
#09191D
global.text.on-accent.functional.success.default
light
#F8FEFA
dark
#011C16
global.text.on-accent.functional.warning.default
#1F1504
global.text.on-accent.functional.severe.default
#271001
global.text.on-accent.functional.error.default
#FEFBFA
global.text.on-accent.functional.info.default
light
#FBFCFD
dark
#09162F
global.text.on-accent.extended.lavender.default
light
#FDFBFF
dark
#1D0E2C
global.text.on-accent.extended.lime.default
#171811
global.text.on-accent.extended.coral.default
#1F1411
global.text.on-accent.extended.forest.default
light
#FAFDFC
dark
#031C15
global.text.on-accent.extended.azure.default
light
#FAFCFE
dark
#12181B
global.text.on-accent.extended.orchid.default
light
#FEFBFD
dark
#1D1419
global.text.on-accent.extended.sand.default
light
#FEFDEC
dark
#181710
global.text.on-accent.extended.amber.default
#1A1611
global.text.on-accent.extended.purple.default
#FCFCFD
global.text.on-accent.extended.yellow.default
#18180D
global.text.on-accent.extended.green.default
#101A0B
global.text.on-accent.extended.beige.default
#1E150C
global.text.on-subtle.neutral.default
light
#323031
dark
#E3DDDE
global.text.on-subtle.brand.default
light
#1148A9
dark
#9EE7FA
global.text.on-subtle.functional.success.default
light
#075D33
dark
#30F498
global.text.on-subtle.functional.warning.default
light
#644B16
dark
#FFD654
global.text.on-subtle.functional.severe.default
light
#764016
dark
#FFCAA8
global.text.on-subtle.functional.error.default
light
#C01619
dark
#FAA79D
global.text.on-subtle.functional.info.default
light
#1A4CAD
dark
#BBCFF3
global.text.on-subtle.extended.lavender.default
light
#3F1A5C
dark
#CA9EFA
global.text.on-subtle.extended.lime.default
light
#2E340B
dark
#E2FC00
global.text.on-subtle.extended.coral.default
light
#4D2112
dark
#FEA78B
global.text.on-subtle.extended.forest.default
light
#18614E
dark
#82D3B9
global.text.on-subtle.extended.azure.default
light
#153443
dark
#8ACAED
global.text.on-subtle.extended.orchid.default
light
#491E3B
dark
#F5A1D7
global.text.on-subtle.extended.sand.default
light
#68642C
dark
#C8BC5A
global.text.on-subtle.extended.amber.default
light
#3B2D12
dark
#DDAB35
global.text.on-subtle.extended.purple.default
light
#6B0DAC
dark
#E2CBFD
global.text.on-subtle.extended.yellow.default
light
#5B5A21
dark
#D8DE58
global.text.on-subtle.extended.green.default
light
#3F6717
dark
#A8EF5A
global.text.on-subtle.extended.beige.default
light
#67431E
dark
#E9C39E
global.text.on-sunken.brand.default
light
#0B2A69
dark
#53D6F2
global.text.on-sunken.functional.success.default
light
#075D33
dark
#129957
global.text.on-sunken.functional.warning.default
light
#2D2107
dark
#C38401
global.text.on-sunken.functional.severe.default
light
#764016
dark
#CC6B0B
global.text.on-sunken.functional.error.default
light
#C01619
dark
#EE5248
global.text.on-sunken.functional.info.default
light
#0C2A68
dark
#94B6F4
global.text.on-sunken.extended.lavender.default
light
#7534A9
dark
#A653EA
global.text.on-sunken.extended.lime.default
light
#2E340B
dark
#B8CD06
global.text.on-sunken.extended.coral.default
light
#4D2112
dark
#E75F2E
global.text.on-sunken.extended.forest.default
light
#0A382D
dark
#68BBA1
global.text.on-sunken.extended.azure.default
light
#153443
dark
#379BCA
global.text.on-sunken.extended.orchid.default
light
#491E3B
dark
#D956B1
global.text.on-sunken.extended.sand.default
light
#353019
dark
#ABA04B
global.text.on-sunken.extended.amber.default
light
#3B2D12
dark
#DDAB35
global.text.code.keyword
light
#7534A9
dark
#B87BF5
global.text.code.variable
light
#923D78
dark
#F283CD
global.text.code.function
light
#266280
dark
#5BB8E7
global.text.code.class-and-type
light
#7F6426
dark
#EEB836
global.text.code.string
light
#18614E
dark
#68BBA1
global.text.code.number
light
#9C4324
dark
#FD8C67
global.text.code.comment
light
#4C4A4A
dark
#9D9B9C
global.text.code.inserted
light
#075D33
dark
#11C772
global.text.code.deleted
light
#C01619
dark
#FAA79D
global.text.code.changed
light
#764016
dark
#FE8400
global.text.code.invalid
light
#C01619
dark
#FAA79D
global.text.code.link
light
#175DD6
dark
#9EE7FA
global.text.state.skeleton.default
light
#D7D3D4
dark
#282828
global.text.state.disabled.default
light
#8C8C8C
dark
#9D9B9Cb2
|
| Icons | Every icon role aliases the text role of the same context, so an icon and the text next to it always match; they stay separate tokens so they can diverge later. |
global.icon.on-base.neutral.primary
light
#0E0D0D
dark
#D2CECF
global.icon.on-base.neutral.secondary
light
#323031
dark
#B9B7B7
global.icon.on-base.neutral.tertiary
light
#616161
dark
#9D9B9C
global.icon.on-base.brand.default
light
#175DD6
dark
#9EE7FA
global.icon.on-base.functional.success.default
light
#075D33
dark
#16AE64
global.icon.on-base.functional.warning.default
light
#3E2D0C
dark
#644B16
global.icon.on-base.functional.severe.default
light
#764016
dark
#CC6B0B
global.icon.on-base.functional.error.default
light
#E12A23
dark
#EE5248
global.icon.on-base.functional.info.default
light
#2B68E0
dark
#94B6F4
global.icon.on-base.extended.lavender.default
light
#7534A9
dark
#B87BF5
global.icon.on-base.extended.lime.default
light
#2E340B
dark
#A0B316
global.icon.on-base.extended.coral.default
light
#9C4324
dark
#FD8C67
global.icon.on-base.extended.forest.default
light
#18614E
dark
#68BBA1
global.icon.on-base.extended.azure.default
light
#153443
dark
#5BB8E7
global.icon.on-base.extended.orchid.default
light
#923D78
dark
#F283CD
global.icon.on-base.extended.sand.default
light
#353019
dark
#ABA04B
global.icon.on-base.extended.amber.default
light
#3B2D12
dark
#DDAB35
global.icon.on-accent.neutral.primary
light
#FDFDFD
dark
#191919
global.icon.on-accent.neutral.secondary
light
#ECE8E9
dark
#282828
global.icon.on-accent.neutral.tertiary
light
#D7D3D4
dark
#303030
global.icon.on-accent.brand.default
light
#FBFCFD
dark
#09191D
global.icon.on-accent.functional.success.default
light
#F8FEFA
dark
#011C16
global.icon.on-accent.functional.warning.default
#1F1504
global.icon.on-accent.functional.severe.default
#271001
global.icon.on-accent.functional.error.default
#FEFBFA
global.icon.on-accent.functional.info.default
light
#FBFCFD
dark
#09162F
global.icon.on-accent.extended.lavender.default
light
#FDFBFF
dark
#1D0E2C
global.icon.on-accent.extended.lime.default
#171811
global.icon.on-accent.extended.coral.default
#1F1411
global.icon.on-accent.extended.forest.default
light
#FAFDFC
dark
#031C15
global.icon.on-accent.extended.azure.default
light
#FAFCFE
dark
#12181B
global.icon.on-accent.extended.orchid.default
light
#FEFBFD
dark
#1D1419
global.icon.on-accent.extended.sand.default
light
#FEFDEC
dark
#181710
global.icon.on-accent.extended.amber.default
#1A1611
global.icon.on-accent.extended.purple.default
#FCFCFD
global.icon.on-accent.extended.yellow.default
#18180D
global.icon.on-accent.extended.green.default
#101A0B
global.icon.on-accent.extended.beige.default
#1E150C
global.icon.on-subtle.neutral.default
light
#323031
dark
#E3DDDE
global.icon.on-subtle.brand.default
light
#1148A9
dark
#9EE7FA
global.icon.on-subtle.functional.success.default
light
#075D33
dark
#30F498
global.icon.on-subtle.functional.warning.default
light
#3E2D0C
dark
#DFA700
global.icon.on-subtle.functional.severe.default
light
#764016
dark
#FFCAA8
global.icon.on-subtle.functional.error.default
light
#C01619
dark
#FAA79D
global.icon.on-subtle.functional.info.default
light
#1A4CAD
dark
#BBCFF3
global.icon.on-subtle.extended.lavender.default
light
#3F1A5C
dark
#CA9EFA
global.icon.on-subtle.extended.lime.default
light
#2E340B
dark
#E2FC00
global.icon.on-subtle.extended.coral.default
light
#4D2112
dark
#FEA78B
global.icon.on-subtle.extended.forest.default
light
#18614E
dark
#82D3B9
global.icon.on-subtle.extended.azure.default
light
#153443
dark
#8ACAED
global.icon.on-subtle.extended.orchid.default
light
#491E3B
dark
#F5A1D7
global.icon.on-subtle.extended.sand.default
light
#68642C
dark
#C8BC5A
global.icon.on-subtle.extended.amber.default
light
#3B2D12
dark
#DDAB35
global.icon.on-subtle.extended.purple.default
light
#6B0DAC
dark
#E2CBFD
global.icon.on-subtle.extended.yellow.default
light
#5B5A21
dark
#D8DE58
global.icon.on-subtle.extended.green.default
light
#3F6717
dark
#A8EF5A
global.icon.on-subtle.extended.beige.default
light
#67431E
dark
#E9C39E
global.icon.on-sunken.brand.default
light
#0B2A69
dark
#53D6F2
global.icon.on-sunken.functional.success.default
light
#075D33
dark
#129957
global.icon.on-sunken.functional.warning.default
light
#3E2D0C
dark
#C38401
global.icon.on-sunken.functional.severe.default
light
#764016
dark
#CC6B0B
global.icon.on-sunken.functional.error.default
light
#C01619
dark
#EE5248
global.icon.on-sunken.functional.info.default
light
#0C2A68
dark
#94B6F4
global.icon.on-sunken.extended.lavender.default
light
#7534A9
dark
#A653EA
global.icon.on-sunken.extended.lime.default
light
#2E340B
dark
#B8CD06
global.icon.on-sunken.extended.coral.default
light
#4D2112
dark
#E75F2E
global.icon.on-sunken.extended.forest.default
light
#0A382D
dark
#68BBA1
global.icon.on-sunken.extended.azure.default
light
#153443
dark
#379BCA
global.icon.on-sunken.extended.orchid.default
light
#491E3B
dark
#D956B1
global.icon.on-sunken.extended.sand.default
light
#353019
dark
#ABA04B
global.icon.on-sunken.extended.amber.default
light
#3B2D12
dark
#DDAB35
global.icon.state.disabled.default
light
#8C8C8C
dark
#9D9B9Cb2
global.icon.state.skeleton.default
light
#D7D3D4
dark
#282828
|
| Level borders | Borders that follow the surface levels come in three families. Edge is the outline around a surface, separating it from what surrounds it (level.edge.level.<n>, level.edge.sunken). On-level is a line painted on a surface: dividers, table rules (level.on-level.<n>). Blend is the color of the surface itself, to detach elements stacked on each other (level.blend.<n>). Edges alone have states, hover and active, shared by every level. |
global.border.level.edge.sunken.default
light
#D7D3D4
dark
#282828
global.border.level.edge.level.0
light
#DFDBDC
dark
#212121
global.border.level.edge.level.1
light
#D7D3D4
dark
#282828
global.border.level.edge.level.2
light
#DFDBDC
dark
#303030
global.border.level.edge.level.3
light
#D7D3D4
dark
#363636
global.border.level.edge.state.hover
light
#8C8C8C
dark
#363636
global.border.level.edge.state.active
light
#201E1F
dark
#D2CECF
global.border.level.on-level.0
light
#ECE8E9
dark
#303030
global.border.level.on-level.1
light
#DFDBDC
dark
#363636
global.border.level.on-level.2
light
#ECE8E9
dark
#767676
global.border.level.on-level.3
light
#DFDBDC
dark
#9D9B9C
global.border.level.blend.0
light
#FDFDFD
dark
#191919
global.border.level.blend.1
light
#F7F6F6
dark
#212121
global.border.level.blend.2
light
#FDFDFD
dark
#282828
global.border.level.blend.3
light
#F7F6F6
dark
#303030
|
| Borders by emphasis | Base borders (neutral 1 to 5, brand, functional, extended) outline elements on a surface; accent and subtle borders follow the fills of the same emphasis and family, with their states. |
global.border.base.neutral.1
light
#ECE8E9
dark
#212121
global.border.base.neutral.2
light
#DFDBDC
dark
#282828
global.border.base.neutral.3
light
#D7D3D4
dark
#303030
global.border.base.neutral.4
light
#B6B4B4
dark
#363636
global.border.base.neutral.5
light
#8C8C8C
dark
#303030
global.border.base.brand.default
light
#497EDE
dark
#53D6F2
global.border.base.functional.success.default
light
#129957
dark
#16AE64
global.border.base.functional.warning.default
light
#DFA700
dark
#C38401
global.border.base.functional.severe.default
light
#DE7B27
dark
#CC6B0B
global.border.base.functional.error.default
light
#C01619
dark
#E12A23
global.border.base.functional.info.default
light
#5085EA
dark
#709DF1
global.border.base.extended.lavender.default
light
#8D3BCD
dark
#B87BF5
global.border.base.extended.lime.default
light
#B8CD06
dark
#CAE200
global.border.base.extended.coral.default
light
#C35129
dark
#FD8C67
global.border.base.extended.forest.default
light
#318C73
dark
#68BBA1
global.border.base.extended.azure.default
light
#2C7A9F
dark
#5BB8E7
global.border.base.extended.orchid.default
light
#B74A96
dark
#F283CD
global.border.base.extended.sand.default
light
#857B38
dark
#C8BC5A
global.border.base.extended.amber.default
light
#B58D31
dark
#EEB836
global.border.accent.neutral.default
light
#323031
dark
#B9B7B7
global.border.accent.neutral.hover
light
#4C4A4A
dark
#B9B7B7
global.border.accent.neutral.active
light
#616161
dark
#9D9B9C
global.border.accent.brand.default
light
#1148A9
dark
#53D6F2
global.border.accent.brand.hover
light
#0B2A69
dark
#41B9D3
global.border.accent.brand.active
light
#0B204D
dark
#3499AF
global.border.accent.functional.success.default
light
#075D33
dark
#16AE64
global.border.accent.functional.success.hover
light
#023A1E
dark
#129957
global.border.accent.functional.success.active
light
#022A23
dark
#0B7742
global.border.accent.functional.warning.default
#DFA700
global.border.accent.functional.warning.hover
#C38401
global.border.accent.functional.warning.active
#765818
global.border.accent.functional.severe.default
#DE7B27
global.border.accent.functional.severe.hover
#CC6B0B
global.border.accent.functional.severe.active
#894C1A
global.border.accent.functional.error.default
#C01619
global.border.accent.functional.error.hover
#940E11
global.border.accent.functional.error.active
#531A16
global.border.accent.functional.info.default
light
#1A4CAD
dark
#709DF1
global.border.accent.functional.info.hover
light
#0C2A68
dark
#5085EA
global.border.accent.functional.info.active
light
#0B204B
dark
#2B68E0
global.border.accent.extended.lavender.default
light
#8D3BCD
dark
#A653EA
global.border.accent.extended.lime.default
#D7F100
global.border.accent.extended.coral.default
light
#C35129
dark
#E75F2E
global.border.accent.extended.forest.default
light
#18614E
dark
#318C73
global.border.accent.extended.azure.default
light
#266280
dark
#379BCA
global.border.accent.extended.orchid.default
light
#923D78
dark
#D956B1
global.border.accent.extended.sand.default
#ABA04B
global.border.accent.extended.amber.default
light
#EEB836
dark
#DDAB35
global.border.accent.extended.purple.default
#6B0DAC
global.border.accent.extended.purple.hover
#410B6A
global.border.accent.extended.purple.active
#310056
global.border.accent.extended.yellow.default
#D8DE58
global.border.accent.extended.yellow.hover
#C1C546
global.border.accent.extended.yellow.active
#A7A93E
global.border.accent.extended.green.default
#91D643
global.border.accent.extended.green.hover
#7BBA36
global.border.accent.extended.green.active
#659C2A
global.border.accent.extended.beige.default
#E2A261
global.border.accent.extended.beige.hover
#C28548
global.border.accent.extended.beige.active
#A06931
global.border.subtle.neutral.default
light
#DFDBDC
dark
#36363680
global.border.subtle.neutral.hover
light
#D7D3D4
dark
#363636
global.border.subtle.neutral.active
light
#B6B4B4
dark
#767676
global.border.subtle.brand.default
light
#DDE6F5
dark
#0D272E
global.border.subtle.brand.hover
light
#BFD1F1
dark
#10363E
global.border.subtle.brand.active
light
#9BB9EC
dark
#1F606E
global.border.subtle.functional.success.default
light
#AEF6C9
dark
#022A23
global.border.subtle.functional.success.hover
light
#30F498
dark
#023A1E
global.border.subtle.functional.success.active
light
#11C772
dark
#075D33
global.border.subtle.functional.warning.default
light
#FFE495
dark
#2D2107
global.border.subtle.functional.warning.hover
light
#FFD654
dark
#3E2D0C
global.border.subtle.functional.warning.active
light
#FFC61C
dark
#644B16
global.border.subtle.functional.severe.default
light
#FFDFCB
dark
#381A02
global.border.subtle.functional.severe.hover
light
#FFCAA8
dark
#4A2506
global.border.subtle.functional.severe.active
light
#FE8400
dark
#764016
global.border.subtle.functional.error.default
light
#FCCDC6
dark
#3E130F
global.border.subtle.functional.error.hover
light
#FAA79D
dark
#531A16
global.border.subtle.functional.error.active
light
#F88275
dark
#940E11
global.border.subtle.functional.info.default
light
#DEE7F6
dark
#0B204B
global.border.subtle.functional.info.hover
light
#BBCFF3
dark
#0C2A68
global.border.subtle.functional.info.active
light
#94B6F4
dark
#1A4CAD
global.border.subtle.extended.lavender.default
light
#DABCFD
dark
#3F1A5C
global.border.subtle.extended.lime.default
light
#EAFE8C
dark
#2E340B
global.border.subtle.extended.coral.default
light
#FEC8B6
dark
#4D2112
global.border.subtle.extended.forest.default
light
#9EE8CF
dark
#0A382D
global.border.subtle.extended.azure.default
light
#B5DDF3
dark
#153443
global.border.subtle.extended.orchid.default
light
#F8C4E4
dark
#491E3B
global.border.subtle.extended.sand.default
light
#F2E76F
dark
#353019
global.border.subtle.extended.amber.default
light
#FEDC97
dark
#3B2D12
global.border.subtle.extended.purple.default
light
#EEE4FB
dark
#310056
global.border.subtle.extended.purple.hover
light
#E2CBFD
dark
#410B6A
global.border.subtle.extended.purple.active
light
#D5AEFF
dark
#6B0DAC
global.border.subtle.extended.yellow.default
light
#EBF479
dark
#25240F
global.border.subtle.extended.yellow.hover
light
#D8DE58
dark
#323212
global.border.subtle.extended.yellow.active
light
#C1C546
dark
#5B5A21
global.border.subtle.extended.green.default
light
#CEFCA4
dark
#152A03
global.border.subtle.extended.green.hover
light
#A8EF5A
dark
#20370B
global.border.subtle.extended.green.active
light
#91D643
dark
#3F6717
global.border.subtle.extended.beige.default
light
#EFDFCF
dark
#301F10
global.border.subtle.extended.beige.hover
light
#E9C39E
dark
#412A13
global.border.subtle.extended.beige.active
light
#E2A261
dark
#67431E
|
| Disabled and skeleton | An inactive component takes the disabled fill, border, text and icon whatever its emphasis and family: disabled is a state, not a variant. Skeleton colors draw placeholders while content loads. |
global.bg.state.skeleton.default
light
#DFDBDC66
dark
#303030b2
global.bg.state.disabled.default
light
#B6B4B41a
dark
#7676764d
global.text.state.skeleton.default
light
#D7D3D4
dark
#282828
global.text.state.disabled.default
light
#8C8C8C
dark
#9D9B9Cb2
global.icon.state.disabled.default
light
#8C8C8C
dark
#9D9B9Cb2
global.icon.state.skeleton.default
light
#D7D3D4
dark
#282828
global.border.state.disabled.default
light
#B6B4B466
dark
#363636b2
|
| Transparency | Fade and overlay are translucent layers from none to blackout: fade lightens what it covers, overlay darkens it (behind a dialog, for instance). |
global.bg.transparency.fade.none
light
#ECE8E900
dark
#19191900
global.bg.transparency.fade.thin
light
#ECE8E91a
dark
#1919191a
global.bg.transparency.fade.light
light
#ECE8E933
dark
#19191933
global.bg.transparency.fade.default
light
#ECE8E94d
dark
#1919194d
global.bg.transparency.fade.strong
light
#ECE8E980
dark
#19191980
global.bg.transparency.fade.blackout
light
#ECE8E9b2
dark
#191919b2
global.bg.transparency.overlay.none
light
#32303100
dark
#19191900
global.bg.transparency.overlay.thin
light
#3230311a
dark
#1919194d
global.bg.transparency.overlay.light
light
#32303133
dark
#19191980
global.bg.transparency.overlay.default
light
#3230314d
dark
#19191999
global.bg.transparency.overlay.strong
light
#32303180
dark
#191919b2
global.bg.transparency.overlay.blackout
light
#323031b2
dark
#191919cc
|
| Composed colors | The Figma library composes some colors from a palette step and an opacity of the Effect scale (the subtle neutral fills, the disabled and skeleton colors, transparency, the shadow colors). DTCG cannot compose two tokens, so these are written as the resulting translucent color, and each one names its step and opacity in its description. They tint whatever they sit on: their contrast is measured over each surface. | — |
| AI and data visualization | The Figma library marks its AI and data visualization roles as unfinished. They are kept as they are, typos (functionnal, subtile) and aliases to colors the Figma library does not contain (kept as their literal value) included, until a component needs them. |
dataviz.role.brand.bg.accent.brand-1
light
#0B2A69
dark
#9EE7FA
dataviz.role.brand.bg.accent.brand-2
light
#1148A9
dark
#53D6F2
dataviz.role.brand.bg.accent.brand-3
light
#175DD6
dark
#41B9D3
dataviz.role.brand.bg.accent.brand-4
light
#497EDE
dark
#3499AF
dataviz.role.brand.bg.accent.brand-5
light
#749DE5
dark
#297B8C
dataviz.role.brand.bg.subtile.brand-1
light
#749DE5
dark
#53D6F2
dataviz.role.brand.bg.subtile.brand-2
light
#9BB9EC
dark
#41B9D3
dataviz.role.brand.bg.subtile.brand-3
light
#BFD1F1
dark
#3499AF
dataviz.role.brand.bg.subtile.brand-4
light
#DDE6F5
dark
#297B8C
dataviz.role.brand.bg.subtile.brand-5
light
#EEF1F7
dark
#1F606E
dataviz.role.brand.bg.area.brand-1
light
#EEF1F7
dark
#09191D
dataviz.role.brand.bg.area.brand-2
light
#EEF1F7
dark
#09191D
dataviz.role.brand.bg.area.brand-3
light
#EEF1F7
dark
#09191D
dataviz.role.brand.bg.area.brand-4
light
#EEF1F7
dark
#09191D
dataviz.role.brand.bg.area.brand-5
light
#EEF1F7
dark
#09191D
dataviz.role.brand.text.base.brand-1
light
#1148A9
dark
#53D6F2
dataviz.role.brand.text.base.brand-2
light
#1148A9
dark
#53D6F2
dataviz.role.brand.text.base.brand-3
light
#1148A9
dark
#53D6F2
dataviz.role.brand.text.base.brand-4
light
#1148A9
dark
#53D6F2
dataviz.role.brand.text.base.brand-5
light
#1148A9
dark
#53D6F2
dataviz.role.brand.text.on-accent.brand-1
light
#FBFCFD
dark
#09191D
dataviz.role.brand.text.on-accent.brand-2
light
#FBFCFD
dark
#09191D
dataviz.role.brand.text.on-accent.brand-3
light
#FBFCFD
dark
#09191D
dataviz.role.brand.text.on-accent.brand-4
light
#05133A
dark
#E4F7FC
dataviz.role.brand.text.on-accent.brand-5
light
#05133A
dark
#E4F7FC
dataviz.role.brand.text.on-subtile.brand-1
light
#FBFCFD
dark
#09191D
dataviz.role.brand.text.on-subtile.brand-2
light
#FBFCFD
dark
#09191D
dataviz.role.brand.text.on-subtile.brand-3
light
#FBFCFD
dark
#09191D
dataviz.role.brand.text.on-subtile.brand-4
light
#05133A
dark
#E4F7FC
dataviz.role.brand.text.on-subtile.brand-5
light
#05133A
dark
#E4F7FC
dataviz.role.brand.icon.brand-1
light
#FBFCFD
dark
#09191D
dataviz.role.brand.icon.brand-2
light
#FBFCFD
dark
#09191D
dataviz.role.brand.icon.brand-3
light
#FBFCFD
dark
#09191D
dataviz.role.brand.icon.brand-4
light
#05133A
dark
#E4F7FC
dataviz.role.brand.icon.brand-5
light
#05133A
dark
#E4F7FC
dataviz.role.brand.border.base.brand-1
light
#0B2A69
dark
#9EE7FA
dataviz.role.brand.border.base.brand-2
light
#175DD6
dark
#41B9D3
dataviz.role.brand.border.base.brand-3
light
#749DE5
dark
#1F606E
dataviz.role.brand.border.base.brand-4
light
#BFD1F1
dark
#10363E
dataviz.role.brand.border.base.brand-5
light
#BFD1F1
dark
#0D272E
dataviz.role.brand.border.on-accent.brand-1
light
#0B2A69
dark
#9EE7FA
dataviz.role.brand.border.on-accent.brand-2
light
#175DD6
dark
#53D6F2
dataviz.role.brand.border.on-accent.brand-3
light
#497EDE
dark
#41B9D3
dataviz.role.brand.border.on-accent.brand-4
light
#749DE5
dark
#3499AF
dataviz.role.brand.border.on-accent.brand-5
light
#9BB9EC
dark
#297B8C
dataviz.role.brand.border.separator.brand-1
light
#DDE6F5
dark
#9EE7FA
dataviz.role.brand.border.separator.brand-2
light
#175DD6
dark
#53D6F2
dataviz.role.brand.border.separator.brand-3
light
#497EDE
dark
#41B9D3
dataviz.role.brand.border.separator.brand-4
light
#749DE5
dark
#3499AF
dataviz.role.brand.border.separator.brand-5
light
#9BB9EC
dark
#297B8C
dataviz.role.functionnal.bg.accent.error-accent
light
#C01619
dark
#D3392A
dataviz.role.functionnal.bg.accent.success-accent
#1A9759
dataviz.role.functionnal.bg.accent.warning-accent
#FFC61C
dataviz.role.functionnal.bg.subtile.error-subtile
light
#FDF3F2
dark
#2B0B08
dataviz.role.functionnal.bg.subtile.success-subtile
light
#EDFDF3
dark
#011C16
dataviz.role.functionnal.bg.subtile.warning-subtile
light
#FFF1C7
dark
#1F1504
dataviz.role.functionnal.text.on-accent.error-accent
#FEFBFA
dataviz.role.functionnal.text.on-accent.success-accent
light
#F8FEFA
dark
#011C16
dataviz.role.functionnal.text.on-accent.warning-accent
#1F1504
dataviz.role.functionnal.text.on-subtile.error-subtile
light
#C01619
dark
#FAA79D
dataviz.role.functionnal.text.on-subtile.success-subtile
light
#075D33
dark
#30F498
dataviz.role.functionnal.text.on-subtile.warning-subtile
light
#644B16
dark
#FFD654
dataviz.role.functionnal.text.base.error-base
light
#E12A23
dark
#EE5248
dataviz.role.functionnal.text.base.success-base
light
#075D33
dark
#16AE64
dataviz.role.functionnal.text.base.warning-base
light
#3E2D0C
dark
#644B16
dataviz.role.functionnal.icon.on-accent.error-accent
#FEFBFA
dataviz.role.functionnal.icon.on-accent.success-accent
light
#F8FEFA
dark
#011C16
dataviz.role.functionnal.icon.on-accent.warning-accent
#1F1504
dataviz.role.functionnal.icon.on-subtile.error-subtile
light
#C01619
dark
#FAA79D
dataviz.role.functionnal.icon.on-subtile.success-subtile
light
#075D33
dark
#30F498
dataviz.role.functionnal.icon.on-subtile.warning-subtile
light
#644B16
dark
#FFD654
dataviz.role.functionnal.icon.base.error-base
light
#E12A23
dark
#EE5248
dataviz.role.functionnal.icon.base.success-base
light
#075D33
dark
#16AE64
dataviz.role.functionnal.icon.base.warning-base
light
#3E2D0C
dark
#644B16
dataviz.role.functionnal.border.base.error-base
light
#C01619
dark
#E12A23
dataviz.role.functionnal.border.base.success-base
light
#129957
dark
#16AE64
dataviz.role.functionnal.border.base.warning-base
light
#DFA700
dark
#C38401
dataviz.role.functionnal.border.on-accent.error-accent
#C01619
dataviz.role.functionnal.border.on-accent.success-accent
light
#075D33
dark
#16AE64
dataviz.role.functionnal.border.on-accent.warning-accent
#DFA700
dataviz.role.functionnal.border.on-subtile.error-subtile
light
#FCCDC6
dark
#3E130F
dataviz.role.functionnal.border.on-subtile.success-subtile
light
#AEF6C9
dark
#022A23
dataviz.role.functionnal.border.on-subtile.warning-subtile
light
#FFE495
dark
#2D2107
dataviz.role.extended.sand.accent.extended-1
light
#A653EA
dark
#8D3BCD
dataviz.role.extended.sand.accent.extended-2
#CAE200
dataviz.role.extended.sand.accent.extended-3
light
#E75F2E
dark
#C35129
dataviz.role.extended.sand.accent.extended-4
light
#318C73
dark
#1B8E76
dataviz.role.extended.sand.accent.extended-5
#7B85FF
dataviz.role.extended.sand.accent.extended-6
light
#F283CD
dark
#E18FD1
dataviz.role.extended.sand.accent.extended-7
light
#ABA04B
dark
#B38F6B
dataviz.role.extended.sand.accent.extended-8
light
#DDAB35
dark
#F2AB31
dataviz.role.extended.sand.subtile.extended-1
light
#DABCFD
dark
#3F1A5C
dataviz.role.extended.sand.subtile.extended-2
light
#ECF8B7
dark
#22260E
dataviz.role.extended.sand.subtile.extended-3
light
#FEC8B6
dark
#4D2112
dataviz.role.extended.sand.subtile.extended-4
light
#D2F9EC
dark
#052A20
dataviz.role.extended.sand.subtile.extended-5
light
#CFD2F2
dark
#36398A
dataviz.role.extended.sand.subtile.extended-6
light
#F6E7F4
dark
#33182A
dataviz.role.extended.sand.subtile.extended-7
light
#F2E76F
dark
#353019
dataviz.role.extended.sand.subtile.extended-8
light
#FFF5C7
dark
#2A2212
dataviz.role.extended.amber.on-accent.extended-1
#FCFAFE
dataviz.role.extended.amber.on-accent.extended-2
#4D4000
dataviz.role.extended.amber.on-accent.extended-3
#FEFAF6
dataviz.role.extended.amber.on-accent.extended-4
#F6FEFC
dataviz.role.extended.amber.on-accent.extended-5
#F6FBFE
dataviz.role.extended.amber.on-accent.extended-6
#1D1419
dataviz.role.extended.amber.on-accent.extended-7
#181710
dataviz.role.extended.amber.on-accent.extended-8
#1A1611
dataviz.role.extended.amber.on-subtile.extended-1
#7E47A8
dataviz.role.extended.amber.on-subtile.extended-2
#6C6000
dataviz.role.extended.amber.on-subtile.extended-3
#B24125
dataviz.role.extended.amber.on-subtile.extended-4
#14715E
dataviz.role.extended.amber.on-subtile.extended-5
#2A6E94
dataviz.role.extended.amber.on-subtile.extended-6
light
#9D4881
dark
#B7579D
dataviz.role.extended.amber.on-subtile.extended-7
light
#78543D
dark
#241C13
dataviz.role.extended.amber.on-subtile.extended-8
light
#A35A1A
dark
#482006
dataviz.role.extended.icon.on-accent.extended-1
#FCFAFE
dataviz.role.extended.icon.on-accent.extended-2
#4D4000
dataviz.role.extended.icon.on-accent.extended-3
#FEFAF6
dataviz.role.extended.icon.on-accent.extended-4
#F6FEFC
dataviz.role.extended.icon.on-accent.extended-5
#F6FBFE
dataviz.role.extended.icon.on-accent.extended-6
#1D1419
dataviz.role.extended.icon.on-accent.extended-7
#181710
dataviz.role.extended.icon.on-accent.extended-8
#1A1611
dataviz.role.extended.icon.on-subtile.extended-1
#7E47A8
dataviz.role.extended.icon.on-subtile.extended-2
#6C6000
dataviz.role.extended.icon.on-subtile.extended-3
#B24125
dataviz.role.extended.icon.on-subtile.extended-4
#14715E
dataviz.role.extended.icon.on-subtile.extended-5
#2A6E94
dataviz.role.extended.icon.on-subtile.extended-6
light
#9D4881
dark
#B7579D
dataviz.role.extended.icon.on-subtile.extended-7
light
#78543D
dark
#241C13
dataviz.role.extended.icon.on-subtile.extended-8
light
#A35A1A
dark
#482006
dataviz.role.extended.lavender.on-accent.extended-1
light
#8D3BCD
dark
#C290E7
dataviz.role.extended.lavender.on-accent.extended-2
light
#B8CD06
dark
#CAE200
dataviz.role.extended.lavender.on-accent.extended-3
light
#C35129
dark
#EC8C52
dataviz.role.extended.lavender.on-accent.extended-4
light
#18614E
dark
#21AF8F
dataviz.role.extended.lavender.on-accent.extended-5
light
#6C6EF8
dark
#B0B6F3
dataviz.role.extended.lavender.on-accent.extended-6
light
#CF6AB9
dark
#E8AFDF
dataviz.role.extended.lavender.on-accent.extended-7
light
#857B38
dark
#C8BC5A
dataviz.role.extended.lavender.on-accent.extended-8
light
#CC8121
dark
#FAC138
dataviz.role.extended.lavender.on-subtile.extended-1
#B072DA
dataviz.role.extended.lavender.on-subtile.extended-2
#B9CC00
dataviz.role.extended.lavender.on-subtile.extended-3
#E76F35
dataviz.role.extended.lavender.on-subtile.extended-4
#1B8E76
dataviz.role.extended.lavender.on-subtile.extended-5
#7B85FF
dataviz.role.extended.lavender.on-subtile.extended-6
#E18FD1
dataviz.role.extended.lavender.on-subtile.extended-7
#B38F6B
dataviz.role.extended.lavender.on-subtile.extended-8
#F2AB31
dataviz.role.extended.lavender.separator.extended-1
light
#673B89
dark
#482461
dataviz.role.extended.lavender.separator.extended-2
light
#5A4E00
dark
#4D4000
dataviz.role.extended.lavender.separator.extended-3
light
#8D3622
dark
#732D1E
dataviz.role.extended.lavender.separator.extended-4
light
#18614E
dark
#064238
dataviz.role.extended.lavender.separator.extended-5
light
#4445B0
dark
#242653
dataviz.role.extended.lavender.separator.extended-6
light
#9D4881
dark
#683254
dataviz.role.extended.lavender.separator.extended-7
light
#5C3D2D
dark
#3D2C21
dataviz.role.extended.lavender.separator.extended-8
light
#864819
dark
#6E3816
dataviz.role.extended.azure.separator.extended-8
#FFFFFF
dataviz.role.extended.azure.separator.extended-5
#FFFFFF
dataviz.role.extended.azure.separator.extended-4
#FFFFFF
dataviz.role.extended.azure.separator.extended-3
#FFFFFF
dataviz.role.extended.azure.separator.extended-1
#FFFFFF
dataviz.role.extended.azure.separator.extended-7
#FFFFFF
dataviz.role.extended.azure.separator.extended-2
#FFFFFF
dataviz.role.extended.azure.separator.extended-6
#FFFFFF
dataviz.role.extended.azure.on-subtile.extended-8
#FFFFFF
dataviz.role.extended.azure.on-subtile.extended-7
#FFFFFF
dataviz.role.extended.azure.on-subtile.extended-6
#FFFFFF
dataviz.role.extended.azure.on-subtile.extended-5
#FFFFFF
dataviz.role.extended.azure.on-subtile.extended-4
#FFFFFF
dataviz.role.extended.azure.on-subtile.extended-3
#FFFFFF
dataviz.role.extended.azure.on-subtile.extended-2
#FFFFFF
dataviz.role.extended.azure.on-subtile.extended-1
#FFFFFF
dataviz.role.extended.azure.on-accent.extended-8
#FFFFFF
dataviz.role.extended.azure.on-accent.extended-6
#FFFFFF
dataviz.role.extended.azure.on-accent.extended-5
#FFFFFF
dataviz.role.extended.azure.on-accent.extended-1
light
#2C7A9F
dark
#FFFFFF
dataviz.role.extended.azure.on-accent.extended-3
light
#2C7A9F
dark
#FFFFFF
dataviz.role.extended.azure.on-accent.extended-7
light
#2C7A9F
dark
#5BB8E7
dataviz.role.extended.azure.on-accent.extended-2
light
#379BCA
dark
#FFFFFF
dataviz.role.extended.azure.on-accent.extended-4
light
#266280
dark
#FFFFFF
dataviz.role.extended.orchid.separator.extended-8
#FFFFFF
dataviz.role.extended.orchid.separator.extended-5
#FFFFFF
dataviz.role.extended.orchid.separator.extended-4
#FFFFFF
dataviz.role.extended.orchid.separator.extended-3
#FFFFFF
dataviz.role.extended.orchid.separator.extended-1
#FFFFFF
dataviz.role.extended.orchid.separator.extended-7
#FFFFFF
dataviz.role.extended.orchid.separator.extended-2
#FFFFFF
dataviz.role.extended.orchid.separator.extended-6
#FFFFFF
dataviz.role.extended.orchid.on-subtile.extended-8
#FFFFFF
dataviz.role.extended.orchid.on-subtile.extended-7
#FFFFFF
dataviz.role.extended.orchid.on-subtile.extended-6
#FFFFFF
dataviz.role.extended.orchid.on-subtile.extended-5
#FFFFFF
dataviz.role.extended.orchid.on-subtile.extended-4
#FFFFFF
dataviz.role.extended.orchid.on-subtile.extended-3
#FFFFFF
dataviz.role.extended.orchid.on-subtile.extended-2
#FFFFFF
dataviz.role.extended.orchid.on-subtile.extended-1
#FFFFFF
dataviz.role.extended.orchid.on-accent.extended-8
#FFFFFF
dataviz.role.extended.orchid.on-accent.extended-6
#FFFFFF
dataviz.role.extended.orchid.on-accent.extended-5
#FFFFFF
dataviz.role.extended.orchid.on-accent.extended-1
light
#B74A96
dark
#FFFFFF
dataviz.role.extended.orchid.on-accent.extended-3
light
#B74A96
dark
#FFFFFF
dataviz.role.extended.orchid.on-accent.extended-7
light
#B74A96
dark
#F283CD
dataviz.role.extended.orchid.on-accent.extended-2
light
#D956B1
dark
#FFFFFF
dataviz.role.extended.orchid.on-accent.extended-4
light
#923D78
dark
#FFFFFF
dataviz.structural.track.bg.track-primary
light
#ECE8E9
dark
#282828
dataviz.structural.track.border.track-primary
light
#D7D3D4
dark
#303030
dataviz.structural.axis.axis-primary
light
#D8D8D8
dark
#303030
dataviz.structural.axis.axis-secondary
light
#B3B3B3
dark
#303030
dataviz.structural.axis.baseline.baseline-primary
light
#323031
dark
#D2CECF
dataviz.structural.axis.baseline.baseline-secondary
light
#616161
dark
#9D9B9C
dataviz.structural.muted.bg.muted-primary
light
#DFDBDC
dark
#303030
dataviz.structural.muted.border.muted-primary
light
#B6B4B4
dark
#363636
dataviz.structural.pointer.pointer-primary
light
#4C4A4A
dark
#767676
dataviz.structural.grid.grid.grid-primary
#6C6C6C
dataviz.structural.icon.icon-primary
#FFFFFF
dataviz.structural.icon.primary.color
#FFFFFF
dataviz.structural.icon.marker.color
#FFFFFF
dataviz.structural.text.label.color
#FFFFFF
dataviz.structural.text.graduations.color
#FFFFFF
dataviz.structural.text.data.color
#FFFFFF
ai.bg.accent.default
light
#175DD6
dark
#9EE7FA
ai.bg.accent.hover
light
#1148A9
dark
#53D6F2
ai.bg.accent.active
light
#0B2A69
dark
#41B9D3
ai.bg.subtle.default
light
#EEF1F7
dark
#09191D
ai.bg.subtle.hover
light
#DDE6F5
dark
#0D272E
ai.bg.subtle.active
light
#BFD1F1
dark
#10363E
ai.bg.gradient.avatar.start
light
#BFD1F1
dark
#10363E
ai.bg.gradient.avatar.end
light
#749DE5
dark
#3499AF
ai.bg.gradient.skeleton.start
light
#FDFDFD
dark
#191919
ai.bg.gradient.skeleton.end
light
#DDE6F5
dark
#0D272E
ai.bg.gradient.subtle.start
light
#FDFDFD
dark
#191919
ai.bg.gradient.subtle.end
light
#EEF1F7
dark
#0D272E
ai.bg.gradient.loading.start
light
#ECE8E900
dark
#19191900
ai.bg.gradient.loading.end
light
#EEF1F7
dark
#0D272E
ai.text.on-base.default
light
#175DD6
dark
#9EE7FA
ai.text.on-subtle.default
light
#1148A9
dark
#9EE7FA
ai.text.on-accent.default
light
#FBFCFD
dark
#09191D
ai.text.gradient.on-base.start
light
#175DD6
dark
#41B9D3
ai.text.gradient.on-base.end
light
#749DE5
dark
#297B8C
ai.text.gradient.on-accent.start
light
#EEF1F7
dark
#09191D
ai.text.gradient.on-accent.mid
light
#BFD1F1
dark
#297B8C
ai.text.gradient.on-accent.end
light
#05133A
dark
#297B8C
ai.icon.on-base.default
light
#497EDE
dark
#41B9D3
ai.icon.on-subtle.default
light
#497EDE
dark
#41B9D3
ai.icon.on-accent.default
light
#EEF1F7
dark
#0D272E
ai.border.base.default
light
#497EDE
dark
#53D6F2
ai.border.subtle.default
light
#DDE6F5
dark
#0D272E
ai.border.accent.default
light
#1148A9
dark
#53D6F2
ai.border.gradient.avatar.start
light
#749DE5
dark
#3499AF
ai.border.gradient.avatar.end
light
#BFD1F1
dark
#10363E
ai.border.gradient.default.start
light
#FBFCFD
dark
#09191D
ai.border.gradient.default.end
light
#9BB9EC
dark
#1F606E
ai.border.gradient.focus.start
light
#BFD1F1
dark
#0D272E
ai.border.gradient.focus.end
light
#175DD6
dark
#41B9D3
|
| Added by the design system | color.transparent is fully transparent: a ghost element aliases it to keep its box without a visible fill or edge. The Figma library has no such color; it lives in tokens/additions/. |
color.transparent
color(srgb 0 0 0 / 0)
|
| Modes | Every role has a value in every mode: light (the default) and dark, the Figma library's two mappings. A mode changes the palette step a role aliases, never the role: a component's color decisions hold in every mode and never mention one. | — |
| Never color alone | A family color reinforces a meaning the label or the icon already carries. Color is never the only way to tell an error action, a selected item or a state from the rest. | — |
Contrast
Computed from the resolved tokens in every platform and mode, as pnpm validate does; a pair under its minimum fails the check, a pair without minimum is measured only. Translucent colors are composited first: a translucent background over each surface it sits on.
global.text.on-base.neutral.primary on global.bg.level.0.default, global.bg.level.1.default, global.bg.level.2.default, global.bg.level.3.default, global.bg.level.sunken.default
Running text and labels on every surface level and on sunken. Minimum 4.5:1. WCAG 1.4.3 Contrast (Minimum) (AA)
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.0.default |
#0e0d0d on #fdfdfd |
19.07:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.1.default |
#0e0d0d on #f7f6f6 |
17.99:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.2.default |
#0e0d0d on #fdfdfd |
19.07:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.3.default |
#0e0d0d on #f7f6f6 |
17.99:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.sunken.default |
#0e0d0d on #f7f6f6 |
17.99:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.0.default |
#d2cecf on #191919 |
11.27:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.1.default |
#d2cecf on #212121 |
10.32:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.2.default |
#d2cecf on #282828 |
9.45:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.3.default |
#d2cecf on #303030 |
8.46:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.sunken.default |
#d2cecf on #141414 |
11.81:1 passes | Web, Desktop · iOS · Android |
global.text.on-base.neutral.secondary on global.bg.level.0.default, global.bg.level.1.default, global.bg.level.2.default, global.bg.level.3.default, global.bg.level.sunken.default
Secondary text is still text: same minimum. Minimum 4.5:1. WCAG 1.4.3 Contrast (Minimum) (AA)
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.0.default |
#323031 on #fdfdfd |
12.87:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.1.default |
#323031 on #f7f6f6 |
12.14:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.2.default |
#323031 on #fdfdfd |
12.87:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.3.default |
#323031 on #f7f6f6 |
12.14:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.sunken.default |
#323031 on #f7f6f6 |
12.14:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.0.default |
#b9b7b7 on #191919 |
8.80:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.1.default |
#b9b7b7 on #212121 |
8.06:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.2.default |
#b9b7b7 on #282828 |
7.38:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.3.default |
#b9b7b7 on #303030 |
6.61:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.sunken.default |
#b9b7b7 on #141414 |
9.22:1 passes | Web, Desktop · iOS · Android |
global.text.on-base.neutral.tertiary on global.bg.level.0.default, global.bg.level.1.default, global.bg.level.2.default, global.bg.level.3.default, global.bg.level.sunken.default
Tertiary text is still text: same minimum. Minimum 4.5:1. WCAG 1.4.3 Contrast (Minimum) (AA)
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.0.default |
#616161 on #fdfdfd |
6.08:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.1.default |
#616161 on #f7f6f6 |
5.74:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.2.default |
#616161 on #fdfdfd |
6.08:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.3.default |
#616161 on #f7f6f6 |
5.74:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.sunken.default |
#616161 on #f7f6f6 |
5.74:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.0.default |
#9d9b9c on #191919 |
6.36:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.1.default |
#9d9b9c on #212121 |
5.83:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.2.default |
#9d9b9c on #282828 |
5.33:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.3.default |
#9d9b9c on #303030 |
4.77:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.sunken.default |
#9d9b9c on #141414 |
6.67:1 passes | Web, Desktop · iOS · Android |
global.text.on-base.brand.default on global.bg.level.0.default, global.bg.level.1.default, global.bg.level.2.default, global.bg.level.3.default, global.bg.level.sunken.default
Brand text on every surface. Minimum 4.5:1. WCAG 1.4.3 Contrast (Minimum) (AA)
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.0.default |
#175dd6 on #fdfdfd |
5.79:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.1.default |
#175dd6 on #f7f6f6 |
5.46:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.2.default |
#175dd6 on #fdfdfd |
5.79:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.3.default |
#175dd6 on #f7f6f6 |
5.46:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.sunken.default |
#175dd6 on #f7f6f6 |
5.46:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.0.default |
#9ee7fa on #191919 |
12.80:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.1.default |
#9ee7fa on #212121 |
11.72:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.2.default |
#9ee7fa on #282828 |
10.73:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.3.default |
#9ee7fa on #303030 |
9.61:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.sunken.default |
#9ee7fa on #141414 |
13.41:1 passes | Web, Desktop · iOS · Android |
global.text.on-base.functional.error.default on global.bg.level.0.default, global.bg.level.1.default, global.bg.level.2.default, global.bg.level.3.default, global.bg.level.sunken.default
Error text on every surface. Minimum 4.5:1. Known failures, tracked in The Figma library's error colors: the error text and fills fall under 4.5:1 in some states, kept as they are until the palette is redefined. WCAG 1.4.3 Contrast (Minimum) (AA)
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.0.default |
#e12a23 on #fdfdfd |
4.52:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.1.default |
#e12a23 on #f7f6f6 |
4.26:1 fails | Web, Desktop · iOS · Android |
| light | global.bg.level.2.default |
#e12a23 on #fdfdfd |
4.52:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.level.3.default |
#e12a23 on #f7f6f6 |
4.26:1 fails | Web, Desktop · iOS · Android |
| light | global.bg.level.sunken.default |
#e12a23 on #f7f6f6 |
4.26:1 fails | Web, Desktop · iOS · Android |
| dark | global.bg.level.0.default |
#ee5248 on #191919 |
4.97:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.1.default |
#ee5248 on #212121 |
4.55:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.level.2.default |
#ee5248 on #282828 |
4.16:1 fails | Web, Desktop · iOS · Android |
| dark | global.bg.level.3.default |
#ee5248 on #303030 |
3.73:1 fails | Web, Desktop · iOS · Android |
| dark | global.bg.level.sunken.default |
#ee5248 on #141414 |
5.20:1 passes | Web, Desktop · iOS · Android |
global.text.on-accent.neutral.primary on global.bg.accent.neutral.default, global.bg.accent.neutral.hover, global.bg.accent.neutral.active
Text and icons on the neutral accent fill, in every state. Minimum 4.5:1. WCAG 1.4.3 Contrast (Minimum) (AA)
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.accent.neutral.default |
#fdfdfd on #201e1f |
16.29:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.accent.neutral.hover |
#fdfdfd on #323031 |
12.87:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.accent.neutral.active |
#fdfdfd on #4c4a4a |
8.65:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.accent.neutral.default |
#191919 on #e8e3e4 |
13.84:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.accent.neutral.hover |
#191919 on #d2cecf |
11.27:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.accent.neutral.active |
#191919 on #b9b7b7 |
8.80:1 passes | Web, Desktop · iOS · Android |
global.text.on-accent.brand.default on global.bg.accent.brand.default, global.bg.accent.brand.hover, global.bg.accent.brand.active
Text and icons on the brand accent fill, in every state. Minimum 4.5:1. WCAG 1.4.3 Contrast (Minimum) (AA)
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.accent.brand.default |
#fbfcfd on #175dd6 |
5.74:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.accent.brand.hover |
#fbfcfd on #1148a9 |
8.08:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.accent.brand.active |
#fbfcfd on #0b2a69 |
13.16:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.accent.brand.default |
#09191d on #9ee7fa |
13.04:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.accent.brand.hover |
#09191d on #53d6f2 |
10.45:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.accent.brand.active |
#09191d on #41b9d3 |
7.76:1 passes | Web, Desktop · iOS · Android |
global.text.on-accent.functional.error.default on global.bg.accent.functional.error.default, global.bg.accent.functional.error.hover, global.bg.accent.functional.error.active
Text and icons on the error accent fill, in every state. Minimum 4.5:1. Known failures, tracked in The Figma library's error colors: the error text and fills fall under 4.5:1 in some states, kept as they are until the palette is redefined. WCAG 1.4.3 Contrast (Minimum) (AA)
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.accent.functional.error.default |
#fefbfa on #e12a23 |
4.46:1 fails | Web, Desktop · iOS · Android |
| light | global.bg.accent.functional.error.hover |
#fefbfa on #c01619 |
6.05:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.accent.functional.error.active |
#fefbfa on #940e11 |
8.75:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.accent.functional.error.default |
#fefbfa on #e12a23 |
4.46:1 fails | Web, Desktop · iOS · Android |
| dark | global.bg.accent.functional.error.hover |
#fefbfa on #c01619 |
6.05:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.accent.functional.error.active |
#fefbfa on #940e11 |
8.75:1 passes | Web, Desktop · iOS · Android |
global.text.on-subtle.neutral.default on global.bg.subtle.neutral.default, global.bg.subtle.neutral.hover, global.bg.subtle.neutral.active over global.bg.level.0.default, global.bg.level.1.default, global.bg.level.2.default, global.bg.level.3.default, global.bg.level.sunken.default
Text and icons on the neutral subtle fill, in every state. The fill is translucent: measured over each surface. Minimum 4.5:1. WCAG 1.4.3 Contrast (Minimum) (AA)
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.subtle.neutral.defaultover global.bg.level.0.default |
#323031 on #f6f6f6 |
12.09:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.defaultover global.bg.level.1.default |
#323031 on #f1efef |
11.46:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.defaultover global.bg.level.2.default |
#323031 on #f6f6f6 |
12.09:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.defaultover global.bg.level.3.default |
#323031 on #f1efef |
11.46:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.defaultover global.bg.level.sunken.default |
#323031 on #f1efef |
11.46:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.hoverover global.bg.level.0.default |
#323031 on #f2f2f2 |
11.71:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.hoverover global.bg.level.1.default |
#323031 on #edecec |
11.12:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.hoverover global.bg.level.2.default |
#323031 on #f2f2f2 |
11.71:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.hoverover global.bg.level.3.default |
#323031 on #edecec |
11.12:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.hoverover global.bg.level.sunken.default |
#323031 on #edecec |
11.12:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.activeover global.bg.level.0.default |
#323031 on #efeeee |
11.34:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.activeover global.bg.level.1.default |
#323031 on #eae9e9 |
10.79:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.activeover global.bg.level.2.default |
#323031 on #efeeee |
11.34:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.activeover global.bg.level.3.default |
#323031 on #eae9e9 |
10.79:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.neutral.activeover global.bg.level.sunken.default |
#323031 on #eae9e9 |
10.79:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.defaultover global.bg.level.0.default |
#e3ddde on #222222 |
11.82:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.defaultover global.bg.level.1.default |
#e3ddde on #2a2a2a |
10.78:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.defaultover global.bg.level.2.default |
#e3ddde on #303030 |
9.87:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.defaultover global.bg.level.3.default |
#e3ddde on #373737 |
8.88:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.defaultover global.bg.level.sunken.default |
#e3ddde on #1e1e1e |
12.46:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.hoverover global.bg.level.0.default |
#e3ddde on #353535 |
9.16:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.hoverover global.bg.level.1.default |
#e3ddde on #3b3b3b |
8.42:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.hoverover global.bg.level.2.default |
#e3ddde on #3f3f3f |
7.80:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.hoverover global.bg.level.3.default |
#e3ddde on #454545 |
7.15:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.hoverover global.bg.level.sunken.default |
#e3ddde on #313131 |
9.64:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.activeover global.bg.level.0.default |
#e3ddde on #484848 |
6.87:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.activeover global.bg.level.1.default |
#e3ddde on #4c4c4c |
6.45:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.activeover global.bg.level.2.default |
#e3ddde on #4f4f4f |
6.11:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.activeover global.bg.level.3.default |
#e3ddde on #535353 |
5.73:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.neutral.activeover global.bg.level.sunken.default |
#e3ddde on #454545 |
7.15:1 passes | Web, Desktop · iOS · Android |
global.text.on-subtle.brand.default on global.bg.subtle.brand.default, global.bg.subtle.brand.hover, global.bg.subtle.brand.active
Text and icons on the brand subtle fill, in every state. Minimum 4.5:1. WCAG 1.4.3 Contrast (Minimum) (AA)
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.subtle.brand.default |
#1148a9 on #eef1f7 |
7.34:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.brand.hover |
#1148a9 on #dde6f5 |
6.61:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.brand.active |
#1148a9 on #bfd1f1 |
5.38:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.brand.default |
#9ee7fa on #09191d |
13.04:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.brand.hover |
#9ee7fa on #0d272e |
11.31:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.brand.active |
#9ee7fa on #10363e |
9.48:1 passes | Web, Desktop · iOS · Android |
global.text.on-subtle.functional.error.default on global.bg.subtle.functional.error.default, global.bg.subtle.functional.error.hover, global.bg.subtle.functional.error.active
Text and icons on the error subtle fill, in every state. Minimum 4.5:1. Known failures, tracked in The Figma library's error colors: the error text and fills fall under 4.5:1 in some states, kept as they are until the palette is redefined. WCAG 1.4.3 Contrast (Minimum) (AA)
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.subtle.functional.error.default |
#c01619 on #feecea |
5.45:1 passes | Web, Desktop · iOS · Android |
| light | global.bg.subtle.functional.error.hover |
#c01619 on #fccdc6 |
4.35:1 fails | Web, Desktop · iOS · Android |
| light | global.bg.subtle.functional.error.active |
#c01619 on #faa79d |
3.28:1 fails | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.functional.error.default |
#faa79d on #2b0b08 |
9.60:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.functional.error.hover |
#faa79d on #3e130f |
8.49:1 passes | Web, Desktop · iOS · Android |
| dark | global.bg.subtle.functional.error.active |
#faa79d on #531a16 |
7.25:1 passes | Web, Desktop · iOS · Android |
global.text.state.disabled.default on global.bg.level.0.default, global.bg.level.1.default, global.bg.level.2.default, global.bg.level.3.default, global.bg.level.sunken.default
Text of inactive components: measured, no minimum (WCAG 1.4.3 exempts them). Measured, no minimum. WCAG 1.4.3 Contrast (Minimum) (AA)
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.0.default |
#8c8c8c on #fdfdfd |
3.30:1 measured | Web, Desktop · iOS · Android |
| light | global.bg.level.1.default |
#8c8c8c on #f7f6f6 |
3.11:1 measured | Web, Desktop · iOS · Android |
| light | global.bg.level.2.default |
#8c8c8c on #fdfdfd |
3.30:1 measured | Web, Desktop · iOS · Android |
| light | global.bg.level.3.default |
#8c8c8c on #f7f6f6 |
3.11:1 measured | Web, Desktop · iOS · Android |
| light | global.bg.level.sunken.default |
#8c8c8c on #f7f6f6 |
3.11:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.0.default |
#9d9b9cb2 on #191919 |
3.78:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.1.default |
#9d9b9cb2 on #212121 |
3.58:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.2.default |
#9d9b9cb2 on #282828 |
3.38:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.3.default |
#9d9b9cb2 on #303030 |
3.12:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.sunken.default |
#9d9b9cb2 on #141414 |
3.87:1 measured | Web, Desktop · iOS · Android |
global.border.level.edge.level.0 on global.bg.level.0.default
Outline of a level 0 surface against the surface itself: measured, no minimum (never the only edge of a component). Measured, no minimum. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: boundaries
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.0.default |
#dfdbdc on #fdfdfd |
1.34:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.0.default |
#212121 on #191919 |
1.09:1 measured | Web, Desktop · iOS · Android |
global.border.level.edge.level.1 on global.bg.level.1.default
Outline of a level 1 surface against the surface itself: measured, no minimum (never the only edge of a component). Measured, no minimum. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: boundaries
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.1.default |
#d7d3d4 on #f7f6f6 |
1.37:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.1.default |
#282828 on #212121 |
1.09:1 measured | Web, Desktop · iOS · Android |
global.border.level.edge.level.2 on global.bg.level.2.default
Outline of a level 2 surface against the surface itself: measured, no minimum (never the only edge of a component). Measured, no minimum. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: boundaries
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.2.default |
#dfdbdc on #fdfdfd |
1.34:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.2.default |
#303030 on #282828 |
1.11:1 measured | Web, Desktop · iOS · Android |
global.border.level.edge.level.3 on global.bg.level.3.default
Outline of a level 3 surface against the surface itself: measured, no minimum (never the only edge of a component). Measured, no minimum. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: boundaries
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.3.default |
#d7d3d4 on #f7f6f6 |
1.37:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.3.default |
#363636 on #303030 |
1.09:1 measured | Web, Desktop · iOS · Android |
global.border.level.edge.sunken.default on global.bg.level.sunken.default
Outline of the sunken plane against it: measured, no minimum. Measured, no minimum. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: boundaries
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.sunken.default |
#d7d3d4 on #f7f6f6 |
1.37:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.sunken.default |
#282828 on #141414 |
1.24:1 measured | Web, Desktop · iOS · Android |
global.border.level.on-level.0 on global.bg.level.0.default
Lines painted on a level 0 surface: measured, no minimum. Measured, no minimum. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: boundaries
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.0.default |
#ece8e9 on #fdfdfd |
1.19:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.0.default |
#303030 on #191919 |
1.33:1 measured | Web, Desktop · iOS · Android |
global.border.level.on-level.1 on global.bg.level.1.default
Lines painted on a level 1 surface: measured, no minimum. Measured, no minimum. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: boundaries
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.1.default |
#dfdbdc on #f7f6f6 |
1.27:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.1.default |
#363636 on #212121 |
1.33:1 measured | Web, Desktop · iOS · Android |
global.border.level.on-level.2 on global.bg.level.2.default
Lines painted on a level 2 surface: measured, no minimum. Measured, no minimum. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: boundaries
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.2.default |
#ece8e9 on #fdfdfd |
1.19:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.2.default |
#767676 on #282828 |
3.24:1 measured | Web, Desktop · iOS · Android |
global.border.level.on-level.3 on global.bg.level.3.default
Lines painted on a level 3 surface: measured, no minimum. Measured, no minimum. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: boundaries
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.3.default |
#dfdbdc on #f7f6f6 |
1.27:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.3.default |
#9d9b9c on #303030 |
4.77:1 measured | Web, Desktop · iOS · Android |
global.border.level.edge.state.hover on global.bg.level.0.default, global.bg.level.1.default, global.bg.level.2.default
Edge of an interactive surface under the pointer, on levels 0 to 2: measured, no minimum. Measured, no minimum. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: boundaries
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.0.default |
#8c8c8c on #fdfdfd |
3.30:1 measured | Web, Desktop · iOS · Android |
| light | global.bg.level.1.default |
#8c8c8c on #f7f6f6 |
3.11:1 measured | Web, Desktop · iOS · Android |
| light | global.bg.level.2.default |
#8c8c8c on #fdfdfd |
3.30:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.0.default |
#363636 on #191919 |
1.45:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.1.default |
#363636 on #212121 |
1.33:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.2.default |
#363636 on #282828 |
1.22:1 measured | Web, Desktop · iOS · Android |
global.border.level.edge.state.active on global.bg.level.0.default, global.bg.level.1.default, global.bg.level.2.default
Edge of an interactive surface being pressed, on levels 0 to 2: measured, no minimum. Measured, no minimum. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: boundaries
| Mode | Background | Colors | Ratio | Platforms |
|---|---|---|---|---|
| light | global.bg.level.0.default |
#201e1f on #fdfdfd |
16.29:1 measured | Web, Desktop · iOS · Android |
| light | global.bg.level.1.default |
#201e1f on #f7f6f6 |
15.36:1 measured | Web, Desktop · iOS · Android |
| light | global.bg.level.2.default |
#201e1f on #fdfdfd |
16.29:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.0.default |
#d2cecf on #191919 |
11.27:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.1.default |
#d2cecf on #212121 |
10.32:1 measured | Web, Desktop · iOS · Android |
| dark | global.bg.level.2.default |
#d2cecf on #282828 |
9.45:1 measured | Web, Desktop · iOS · Android |
9 pair(s) under the minimum, tracked in The Figma library's error colors: the error text and fills fall under 4.5:1 in some states, kept as they are until the palette is redefined.
Accessibility
Target: WCAG 2.2 level AA. Every statement cites the trusted source it comes from; criteria beyond the target are adopted as extra quality.
Every platform
- Text contrasts at least 4.5:1 with what it sits on, in every mode, family and enabled state: on-base text on every surface level and on sunken, on-accent and on-subtle text on their fills. The Figma library’s error roles fall short today (error text on some levels, text on the error accent fill, text on the hover and active subtle error fills), tracked as a known issue. WCAG 1.4.3 Contrast (Minimum) (AA)
- Text of an inactive component has no contrast requirement, so the disabled text is free to recede. WCAG 1.4.3 Contrast (Minimum) (AA)
- Contrast is measured against the background people actually see: a translucent fill is composited over each surface it can sit on before measuring. WCAG 1.4.3 Contrast (Minimum) (AA)
- A border needs 3:1 against the surface only when it is what shows the component is there. A control whose text or icon identifies it needs no boundary, so the level borders, under 3:1, are never the only edge of a component without other visible content. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: boundaries
- Inactive components are exempt from the 3:1 of non-text contrast as well. WCAG 1.4.11 Non-text Contrast (AA)Understanding 1.4.11 Non-text Contrast: inactive user interface components
- Color is never the only visual means of conveying information: intent, state and selection are also carried by text, an icon or a shape. WCAG 1.4.1 Use of Color (A)Apple HIG: Accessibility, vision
Web
- In forced colors mode the browser replaces text, background, border and outline colors with system colors: nothing may depend on a token color surviving there. MDN: forced-colors, properties affected by forced colors mode
iOS
- Every color has a light and a dark value, as Apple asks of custom colors. Apple also asks for an increased-contrast variant of each, which the system does not define yet. Apple HIG: Color, best practices
Android
- Android asks for 4.5:1 for text under 18 sp (14 sp bold) and 3:1 above; the system applies 4.5:1 to every text size. Android: Make apps more accessible, increase text visibility
WCAG success criteria
| Criterion | Level | Understanding |
|---|---|---|
| 1.4.1 Use of Color | A | Understanding 1.4.1 |
| 1.4.3 Contrast (Minimum) | AA | Understanding 1.4.3 |
| 1.4.11 Non-text Contrast | AA | Understanding 1.4.11 |
References
- Understanding 1.4.11 Non-text Contrast: boundaries W3C WAI Understanding and Techniques for WCAG 2.2 · guidance
- Understanding 1.4.11 Non-text Contrast: inactive user interface components W3C WAI Understanding and Techniques for WCAG 2.2 · guidance
- Apple HIG: Accessibility, vision Apple Human Interface Guidelines and accessibility documentation · platform
- Apple HIG: Color, best practices Apple Human Interface Guidelines and accessibility documentation · platform
- Android: Make apps more accessible, increase text visibility Android accessibility documentation · platform
- MDN: forced-colors, properties affected by forced colors mode MDN Web Docs · reference
Changelog
3.0.02026-10-02 — Decision figma-library-colors. Breaking: every color token path changes. The raw palettes are the Figma library's Colors / Base (color.neutral.light.ash.25 becomes neutral.light.ash.25, color.brand.light.600 becomes brand.light.600, color.ai.* becomes ai.*; brand.identity.* becomes brand.identity-base.*, whose CSS variable would otherwise collide with the mapped brand-identity.*), plus the palette switch light-switch.base.* and dark-switch.base.* (ash). The roles are the Figma library's Colors / Mapped: color.surface.level.<n> becomes global.bg.level.<n>.default, color.surface.sunken global.bg.level.sunken.default, color.background.<emphasis>.<intent>.<state> global.bg.<emphasis>.<family>.<state> (error is functional.error), color.text.default / muted / inverse global.text.on-base.neutral.primary / on-base.neutral.tertiary / on-accent.neutral.primary, color.text.on-<emphasis>.<intent> global.text.on-<emphasis>.<family>.<default|primary>, color.text.disabled global.text.state.disabled.default, color.border.edge.* / on-level.* / blend.* global.border.level.edge.* / on-level.* / blend.*, color.border.strong global.border.base.neutral.4, color.background.disabled and color.border.disabled global.*.state.disabled.default. New roles: icons (global.icon.*), on-base and sunken families, functional and extended hues, code colors, skeleton, transparency, brand identity, and the Figma library’s unfinished AI and data visualization roles. Removed: the repository’s raw ash-alpha steps and dark ash 975 (the Figma library writes its translucent colors as literals, kept as such). Removed: color.background.none and color.border.none (invented); components alias color.transparent, kept as an addition in tokens/additions/. Values: light mode unchanged except the error roles, which follow the Figma library (accent error fill error 500/600/700, error text on tinted fills error 600); dark mode is the Figma library’s dark mapping (levels, fills and borders change). Contrast, lowest over every platform and surface: primary text light 17.99:1, dark 8.46:1; secondary 12.14 / 6.61:1; tertiary 5.74 / 4.77:1; brand text 5.46 / 9.61:1; on accent neutral 8.65 / 8.80:1, brand 5.74 / 7.76:1; on subtle neutral 10.79 / 5.73:1, brand 5.38 / 9.48:1 (4.5:1 required, WCAG 1.4.3). Known failures, kept as the Figma library defines them and tracked as a known issue: error text on the surfaces light 4.26:1, dark 3.73:1; on accent error 4.46:1 in both modes; on subtle error light 3.28:1. Measured without a minimum: disabled text 3.11 / 3.12:1; level edges light 1.34 to 1.37:1, dark 1.09 to 1.24:1; on-level light 1.19 to 1.27:1, dark 1.33 to 4.77:1; edge hover light 3.11:1, dark 1.22:1; edge active light 15.36:1, dark 9.45:1.2.0.02026-10-01 — Decision level-borders. Breaking: color.border.default is removed; use color.border.edge.level.<n> for the outline of a level n surface and color.border.on-level.<n> for lines painted on it. New: color.border.edge.level.0-3, edge.sunken, edge.hover, edge.active, color.border.on-level.0-3, color.border.blend.level.0-3. Measured without a minimum (WCAG 1.4.11: these borders never identify a component on their own), against the surface they belong to: edge against its own level light 1.35:1 (levels 0, 2) and 1.38:1 (levels 1, 3, sunken), dark 1.09 to 1.12:1 on the levels and 1.32:1 on sunken; edge against the level it sits on light 1.27 to 1.46:1, dark 1.19 to 1.22:1; on-level light 1.19:1 (levels 0, 2) and 1.27:1 (levels 1, 3), dark 1.33, 1.33, 3.24 and 4.78:1 from level 0 to 3; edge hover light 3.12:1 or more, dark 1.45, 1.33 and 1.22:1 on levels 0 to 2 (level 3 takes no state; a stronger dark hover is still to be reviewed); edge active light 15.37:1 or more, dark 8.47:1 or more. In dark mode the outline of a surface is fainter than the former default border (1.33:1 on the page): surfaces separate by their level color first.1.0.02026-10-01 — Decisions surface-levels and surface-levels-light-alternate. Breaking: color.surface.default and color.surface.subtle are removed; use color.surface.level.0 and color.surface.level.1, which keep their values in every mode. New: color.surface.level.2, color.surface.level.3, color.surface.sunken, and the raw step color.neutral.dark.ash.975. Contrast, lowest per pair over every surface level and sunken, every platform: default text light 17.99:1, dark 8.47:1 (level 3); muted text light 5.74:1, dark 4.78:1 (level 3); on subtle neutral, the translucent fill composited over each surface, light 10.80:1, dark 5.74:1 (level 3); the other text pairs do not depend on the surface and are unchanged (4.5:1 required, WCAG 1.4.3). Measured without a minimum: disabled text light 3.12:1, dark 3.13:1; default border light 1.38:1, dark 1.00:1 on level 3; strong border light 1.91:1, dark 1.09:1 on level 3. The dark default and strong borders no longer show against levels 2 and 3: borders that follow the level are still to be decided.0.1.02026-10-01 — Initial draft: the palettes and the semantic color roles as they are, specified once (no token changes). Text contrast, lowest per pair over both surfaces, every platform: default text light 17.99:1, dark 10.32:1; muted light 5.74:1, dark 5.83:1; on accent neutral / brand / error light 8.65 / 5.74 / 6.05:1, dark 8.81 / 7.76 / 6.05:1; on subtle neutral / brand / error, the translucent neutral fill measured over each surface, light 10.79 / 5.38 / 4.75:1, dark 6.45 / 9.48 / 7.25:1 (4.5:1 required, WCAG 1.4.3). Measured without a minimum: disabled text light 3.11:1, dark 3.58:1 (inactive components); default border light 1.37:1, dark 1.21:1, strong border light 1.91:1, dark 1.33:1 (borders that do not identify a component, WCAG 1.4.11).