Skip to main content

Foreground Tokens

Foreground color tokens define the colors used for text, icons, and other foreground elements across our user interfaces.

Prerequisites

In this section assumes that you are already familiar with the concept of Intents, Attentions, and States explained in the Color Tokens section.

Also, make sure to review the Background Color Tokens section to understand how background colors are constructed, as foreground colors interact closely with background colors.

Before we dive in

Foreground tokens are way complex than the background tokens. The foreground always appears on top of a background and that needs to be taken into account when defining foreground colors.

When selecting the right foreground color tokens for a specific use case, we need to ask ourselves these four (plus one) questions:

  1. Should the intent align with the background intent or differ from it?
  2. Should the foreground have additional or reduced attention compared to the background?
  3. Should the state of the foreground be separate from the background state?
  4. Should the foreground blend with the background or its color should remain prominent?

Each of these aspects has its own set of exceptions and rules due to the complexity of foreground blending, legibility requirements, accessibility standards, and visual hierarchy considerations.

Final question that should guide your decisions:

"Will the user interact with the foreground or the whole background?"

Whole background states include, e.g.:

  • buttons or interactive cards where the user clicks/taps anywhere on the background to trigger an action,
  • input fields where the user focuses on the whole input area to type text.

Foreground only states include, e.g.:

  • links within a paragraph where only the text is clickable,
  • icons that trigger actions when clicked/tapped.

There is never a one-size-fits-all answer to these questions. However, you should start with less and only add complexity as needed:

  1. Start with a simple background with no attention against its surroundings.
  2. Use a neutral foreground color with medium attention on top of it.
  3. Adjust intent, attention, add state of background and/or or intent, attention, add state and blending of the foreground to achieve the desired user experience.
  4. Iterate and test different combinations to find the optimal balance between aesthetics, usability, and accessibility.

Always prioritize legibility and accessibility when making these decisions.

Naming Convention

foreground.<intent>.<attention>.<state>.<blend>

To create foreground color tokens we combine four aspects: intent, attention, state, and blend. Each intent creates a combination with all attention, state, and blend levels, resulting in a complete set of foreground color tokens that can be applied to specific UI components.

Not every application will need all combinations, so choose the ones that best fit your use cases.

Default Foreground Tokens

warning

The following set of tokens represent the default combinations that should cover most use cases in our design system. No values are strictly enforced here, however, we recommend using these as a starting point for your products.

Pick Intent Token:

Intent: neutral, attention: full

Token namelightdark
foreground.neutral.full.default.solidT#000000T#ffffff
foreground.neutral.full.default.lowT#000000e6T#ffffffe6
foreground.neutral.full.default.mediumT#000000b3T#ffffffb3
foreground.neutral.full.default.highT#00000080T#ffffff80
foreground.neutral.full.default.strongT#0000004dT#ffffff4d
foreground.neutral.full.default.fullT#00000000T#ffffff00
foreground.neutral.full.hovered.solidT#4c473fT#e3ddd3
foreground.neutral.full.hovered.lowT#4c473fe6T#e3ddd3e6
foreground.neutral.full.hovered.mediumT#4c473fb3T#e3ddd3b3
foreground.neutral.full.hovered.highT#4c473f80T#e3ddd380
foreground.neutral.full.hovered.strongT#4c473f4dT#e3ddd34d
foreground.neutral.full.hovered.fullT#4c473f00T#e3ddd300
foreground.neutral.full.pressed.solidT#67635aT#c2bdb3
foreground.neutral.full.pressed.lowT#67635ae6T#c2bdb3e6
foreground.neutral.full.pressed.mediumT#67635ab3T#c2bdb3b3
foreground.neutral.full.pressed.highT#67635a80T#c2bdb380
foreground.neutral.full.pressed.strongT#67635a4dT#c2bdb34d
foreground.neutral.full.pressed.fullT#67635a00T#c2bdb300
foreground.neutral.full.selected.solidT#3e3a32T#d3cdc3
foreground.neutral.full.selected.lowT#3e3a32e6T#d3cdc3e6
foreground.neutral.full.selected.mediumT#3e3a32b3T#d3cdc3b3
foreground.neutral.full.selected.highT#3e3a3280T#d3cdc380
foreground.neutral.full.selected.strongT#3e3a324dT#d3cdc34d
foreground.neutral.full.selected.fullT#3e3a3200T#d3cdc300

Intent: neutral, attention: strong

Token namelightdark
foreground.neutral.strong.default.solidT#59554cT#d3cdc3
foreground.neutral.strong.default.lowT#59554ce6T#d3cdc3e6
foreground.neutral.strong.default.mediumT#59554cb3T#d3cdc3b3
foreground.neutral.strong.default.highT#59554c80T#d3cdc380
foreground.neutral.strong.default.strongT#59554c4dT#d3cdc34d
foreground.neutral.strong.default.fullT#59554c00T#d3cdc300
foreground.neutral.strong.hovered.solidT#858076T#b3ada4
foreground.neutral.strong.hovered.lowT#858076e6T#b3ada4e6
foreground.neutral.strong.hovered.mediumT#858076b3T#b3ada4b3
foreground.neutral.strong.hovered.highT#85807680T#b3ada480
foreground.neutral.strong.hovered.strongT#8580764dT#b3ada44d
foreground.neutral.strong.hovered.fullT#85807600T#b3ada400
foreground.neutral.strong.pressed.solidT#a39e94T#948e85
foreground.neutral.strong.pressed.lowT#a39e94e6T#948e85e6
foreground.neutral.strong.pressed.mediumT#a39e94b3T#948e85b3
foreground.neutral.strong.pressed.highT#a39e9480T#948e8580
foreground.neutral.strong.pressed.strongT#a39e944dT#948e854d
foreground.neutral.strong.pressed.fullT#a39e9400T#948e8500
foreground.neutral.strong.selected.solidT#948e85T#a39e94
foreground.neutral.strong.selected.lowT#948e85e6T#a39e94e6
foreground.neutral.strong.selected.mediumT#948e85b3T#a39e94b3
foreground.neutral.strong.selected.highT#948e8580T#a39e9480
foreground.neutral.strong.selected.strongT#948e854dT#a39e944d
foreground.neutral.strong.selected.fullT#948e8500T#a39e9400

Intent: neutral, attention: high

Token namelightdark
foreground.neutral.high.default.solidT#67635aT#948e85
foreground.neutral.high.default.lowT#67635ae6T#948e85e6
foreground.neutral.high.default.mediumT#67635ab3T#948e85b3
foreground.neutral.high.default.highT#67635a80T#948e8580
foreground.neutral.high.default.strongT#67635a4dT#948e854d
foreground.neutral.high.default.fullT#67635a00T#948e8500
foreground.neutral.high.hovered.solidT#858076T#767168
foreground.neutral.high.hovered.lowT#858076e6T#767168e6
foreground.neutral.high.hovered.mediumT#858076b3T#767168b3
foreground.neutral.high.hovered.highT#85807680T#76716880
foreground.neutral.high.hovered.strongT#8580764dT#7671684d
foreground.neutral.high.hovered.fullT#85807600T#76716800
foreground.neutral.high.pressed.solidT#a39e94T#59554c
foreground.neutral.high.pressed.lowT#a39e94e6T#59554ce6
foreground.neutral.high.pressed.mediumT#a39e94b3T#59554cb3
foreground.neutral.high.pressed.highT#a39e9480T#59554c80
foreground.neutral.high.pressed.strongT#a39e944dT#59554c4d
foreground.neutral.high.pressed.fullT#a39e9400T#59554c00
foreground.neutral.high.selected.solidT#948e85T#67635a
foreground.neutral.high.selected.lowT#948e85e6T#67635ae6
foreground.neutral.high.selected.mediumT#948e85b3T#67635ab3
foreground.neutral.high.selected.highT#948e8580T#67635a80
foreground.neutral.high.selected.strongT#948e854dT#67635a4d
foreground.neutral.high.selected.fullT#948e8500T#67635a00

Intent: neutral, attention: medium

Token namelightdark
foreground.neutral.medium.default.solidT#948e85T#67635a
foreground.neutral.medium.default.lowT#948e85e6T#67635ae6
foreground.neutral.medium.default.mediumT#948e85b3T#67635ab3
foreground.neutral.medium.default.highT#948e8580T#67635a80
foreground.neutral.medium.default.strongT#948e854dT#67635a4d
foreground.neutral.medium.default.fullT#948e8500T#67635a00
foreground.neutral.medium.hovered.solidT#767168T#858076
foreground.neutral.medium.hovered.lowT#767168e6T#858076e6
foreground.neutral.medium.hovered.mediumT#767168b3T#858076b3
foreground.neutral.medium.hovered.highT#76716880T#85807680
foreground.neutral.medium.hovered.strongT#7671684dT#8580764d
foreground.neutral.medium.hovered.fullT#76716800T#85807600
foreground.neutral.medium.pressed.solidT#59554cT#a39e94
foreground.neutral.medium.pressed.lowT#59554ce6T#a39e94e6
foreground.neutral.medium.pressed.mediumT#59554cb3T#a39e94b3
foreground.neutral.medium.pressed.highT#59554c80T#a39e9480
foreground.neutral.medium.pressed.strongT#59554c4dT#a39e944d
foreground.neutral.medium.pressed.fullT#59554c00T#a39e9400
foreground.neutral.medium.selected.solidT#67635aT#948e85
foreground.neutral.medium.selected.lowT#67635ae6T#948e85e6
foreground.neutral.medium.selected.mediumT#67635ab3T#948e85b3
foreground.neutral.medium.selected.highT#67635a80T#948e8580
foreground.neutral.medium.selected.strongT#67635a4dT#948e854d
foreground.neutral.medium.selected.fullT#67635a00T#948e8500

Intent: neutral, attention: low

Token namelightdark
foreground.neutral.low.default.solidT#d3cdc3T#59554c
foreground.neutral.low.default.lowT#d3cdc3e6T#59554ce6
foreground.neutral.low.default.mediumT#d3cdc3b3T#59554cb3
foreground.neutral.low.default.highT#d3cdc380T#59554c80
foreground.neutral.low.default.strongT#d3cdc34dT#59554c4d
foreground.neutral.low.default.fullT#d3cdc300T#59554c00
foreground.neutral.low.hovered.solidT#b3ada4T#858076
foreground.neutral.low.hovered.lowT#b3ada4e6T#858076e6
foreground.neutral.low.hovered.mediumT#b3ada4b3T#858076b3
foreground.neutral.low.hovered.highT#b3ada480T#85807680
foreground.neutral.low.hovered.strongT#b3ada44dT#8580764d
foreground.neutral.low.hovered.fullT#b3ada400T#85807600
foreground.neutral.low.pressed.solidT#948e85T#a39e94
foreground.neutral.low.pressed.lowT#948e85e6T#a39e94e6
foreground.neutral.low.pressed.mediumT#948e85b3T#a39e94b3
foreground.neutral.low.pressed.highT#948e8580T#a39e9480
foreground.neutral.low.pressed.strongT#948e854dT#a39e944d
foreground.neutral.low.pressed.fullT#948e8500T#a39e9400
foreground.neutral.low.selected.solidT#a39e94T#948e85
foreground.neutral.low.selected.lowT#a39e94e6T#948e85e6
foreground.neutral.low.selected.mediumT#a39e94b3T#948e85b3
foreground.neutral.low.selected.highT#a39e9480T#948e8580
foreground.neutral.low.selected.strongT#a39e944dT#948e854d
foreground.neutral.low.selected.fullT#a39e9400T#948e8500

Intent: neutral, attention: base

Token namelightdark
foreground.neutral.base.default.solidT#ffffffT#000000
foreground.neutral.base.default.lowT#ffffffe6T#000000e6
foreground.neutral.base.default.mediumT#ffffffb3T#000000b3
foreground.neutral.base.default.highT#ffffff80T#00000080
foreground.neutral.base.default.strongT#ffffff4dT#0000004d
foreground.neutral.base.default.fullT#ffffff00T#00000000
foreground.neutral.base.hovered.solidT#e3ddd3T#4c473f
foreground.neutral.base.hovered.lowT#e3ddd3e6T#4c473fe6
foreground.neutral.base.hovered.mediumT#e3ddd3b3T#4c473fb3
foreground.neutral.base.hovered.highT#e3ddd380T#4c473f80
foreground.neutral.base.hovered.strongT#e3ddd34dT#4c473f4d
foreground.neutral.base.hovered.fullT#e3ddd300T#4c473f00
foreground.neutral.base.pressed.solidT#c2bdb3T#67635a
foreground.neutral.base.pressed.lowT#c2bdb3e6T#67635ae6
foreground.neutral.base.pressed.mediumT#c2bdb3b3T#67635ab3
foreground.neutral.base.pressed.highT#c2bdb380T#67635a80
foreground.neutral.base.pressed.strongT#c2bdb34dT#67635a4d
foreground.neutral.base.pressed.fullT#c2bdb300T#67635a00
foreground.neutral.base.selected.solidT#d3cdc3T#3e3a32
foreground.neutral.base.selected.lowT#d3cdc3e6T#3e3a32e6
foreground.neutral.base.selected.mediumT#d3cdc3b3T#3e3a32b3
foreground.neutral.base.selected.highT#d3cdc380T#3e3a3280
foreground.neutral.base.selected.strongT#d3cdc34dT#3e3a324d
foreground.neutral.base.selected.fullT#d3cdc300T#3e3a3200

Up Next


Border Color Tokens

Border color tokens define the colors used for borders and dividers.

Border Color Tokens ->

Defining Intents

Defining intents allows you to tailor color tokens to better fit your product's unique requirements.

Defining Intents ->