The neutral color palette is used for typography and most backgrounds.
Neutral colors help you structure your content. They set a calm and not distractive environment. They don’t typically have a meaning associated with them, though they can imply things like disabled states of elements.
Our neutral palette is slightly saturated with the hue close to our accent hue
to create more harmonious vibe.
Each color in the notification color palette is selected intentionally to provide meaningful feedback within our experiences.
Notification colors should be used purposefully to communicate and inform users.
Orange indicates a warning or that progress is hindered. Use orange to indicate to indicate a user that an issue can be avoided or needs a corrective action.
Base color tokens listed above just represent a static color value and looking at them doesn't tell you much about possible applications.
Functional tokens allow us to abstract values to attach a meaning to their intended usage.
They allow us to layer references on top of base color tokens to enable more predictable combination and application of colors.
Migration to functional tokens will allow easier implementation of new color-related features like dark mode, custom themes or even simplify future product rebranding.
Functional tokens act as an API on top of our color palettes, in a sense that the tokens can be referenced without worrying about their underlying value.
Apps that stick to the tokens will get all future color and theme updates "for free", which is a win for maintainability going forward.
Avoid referencing color scales by their actual scale name like colorGray100. Instead, use the functional tokens whenever possible. In rare cases, you may need to use explicit scale tokens to define custom functional variables in your application.
We use fairly generic names for the functional color tokens that work as a guide for the application but don't rely on our component inventory, thus can also be used to build your custom components.
Every functional color token follows the same predictable naming convention that helps provide an understanding on how or when the token should be used.
The format of the name is: [property][role][variant][state], where:
​
property is a UI entity the token will be aplied to, such as background or border.
​
role describes the intention behind the token.
​
variant refers to variations of the token, for example how prominent it appears. Prominence scale ranges from minimal to contrast.
​
state is optional and can represent available interaction options such as hover or active.
This gives us final token names like:
Finally, the functional tokens are referenced throughout component styles:
import{ styled }from'@volue/wave-react';
constComponent=styled('div',{
backgroundColor:'$backgroundSuccessStrong',
color:'$foregroundSuccessInverse',
'&:hover':{
backgroundColor:'$backgroundSuccessStrongHover'
}
});
Functional tokens are available for use in all styling APIs that @volue/wave-react offers.
It is recommended to pair default color foregrounds with their default and subtle background counterparts.
These pairings are designed to be legible and meet accessibility guidance (WCAG AA contrast requirements).
However not all colors pair well with each other. For example you shouldn't combine default foregrounds with strong backgrounds as that will result in inaccessible pairings. Instead, use inverse foreground tokens designed to show on strong backgrounds for optimal contrast.
Here are some general color pairings that have been designed and tested for accessible contrast ratios:
Use hover, active and disabled tokens to communicate visual changes related to interaction states:
Color tokens exist in different formats and can be also consumed as CSS custom properties​ or variables.
You can use any styling solution to read those variables.
CSS variables come automatically bundled with @volue/wave core package.
Background color tokens define the background colors used in surfaces of components or UI elements. Do not use these for border colors or foreground colors.
backgroundNeutralMinimal
colorWhite
#ffffff
Minimal neutral background. Used for the background area of your app and UI components like cards, inputs etc.
CSS variable:
var(--color-background-neutral-minimal)
backgroundNeutralSubtle
colorGray0
#f9fafb
Subtle neutral background. Used for the background of your app, e.g. when you create a card-based layout.
CSS variable:
var(--color-background-neutral-subtle)
backgroundNeutralModerate
colorGray5
#f3f5f6
Moderate neutral background. Used for the background area of components that should stand out somewhat against minimal neutral surfaces.
CSS variable:
var(--color-background-neutral-moderate)
backgroundNeutral
colorGray10
#e6ebec
Default neutral background.
CSS variable:
var(--color-background-neutral)
backgroundNeutralBold
colorGray60
#53747b
Bold neutral background.
CSS variable:
var(--color-background-neutral-bold)
backgroundNeutralStrong
colorGray80
#223f44
Strong neutral background.
CSS variable:
var(--color-background-neutral-strong)
backgroundNeutralContrast
colorGray100
#082d35
Contrast neutral background. Used for backgrounds of components that should stand out from the rest of the content, such as app header or tooltips.
Foreground color tokens are used for text content, icons, and other elements rendered on top of a background. Do not use these for border colors or background colors.
Regular foreground colors tokens ensure enough contrast ratio when used on top of default, minimal and subtle background color tokens.
Note that icons have different contrast requirements than text. Since they are graphical objects, they only need to meet a 3:1 color contrast ratio (WCAG 1.4.11​), as opposed to text, which must meet 4.5:1 contrast ratio (WCAG 1.4.3​).
Aa
foregroundNeutral
colorGray100
#082d35
Default neutral foreground. Used for primary, high-contrast text.
CSS variable:
var(--color-foreground-neutral)
Aa
foregroundNeutralModerate
colorGray80
#223f44
Moderate neutral foreground. Used for secondary text.
CSS variable:
var(--color-foreground-neutral-moderate)
Aa
foregroundNeutralSubtle
colorGray60
#53747b
Subtle neutral border. Used for tertiary, low-contrast text.
CSS variable:
var(--color-foreground-neutral-subtle)
Aa
foregroundNeutralMinimal
colorGray30
#9dafb3
Minimal neutral foreground. Used for disabled text.
CSS variable:
var(--color-foreground-neutral-minimal)
Aa
foregroundAccent
colorAccent100
#0c4957
Default accent foreground.
CSS variable:
var(--color-foreground-accent)
Aa
foregroundAccentModerate
colorAccent80
#157084
Moderate accent foreground.
CSS variable:
var(--color-foreground-accent-moderate)
Aa
foregroundAccentSubtle
colorAccent70
#388597
Subtle accent foreground.
CSS variable:
var(--color-foreground-accent-subtle)
Aa
foregroundDanger
colorRed100
#9d0012
Default danger foreground.
CSS variable:
var(--color-foreground-danger)
Aa
foregroundDangerModerate
colorRed90
#b20016
Moderate danger foreground.
CSS variable:
var(--color-foreground-danger-moderate)
Aa
foregroundDangerSubtle
colorRed70
#ff3b3d
Subtle danger foreground.
CSS variable:
var(--color-foreground-danger-subtle)
Aa
foregroundWarning
colorOrange100
#805400
Default warning foreground.
CSS variable:
var(--color-foreground-warning)
Aa
foregroundWarningModerate
colorOrange90
#b17600
Moderate warning foreground.
CSS variable:
var(--color-foreground-warning-moderate)
Aa
foregroundWarningSubtle
colorOrange70
#ffb900
Subtle danger foreground.
CSS variable:
var(--color-foreground-warning-subtle)
Aa
foregroundWarningInverse
colorGray100
#082d35
Inverse warning foreground. Used on strong warning background for optimal contrast.
CSS variable:
var(--color-foreground-warning-inverse)
Aa
foregroundSuccess
colorGreen100
#125426
Default success foreground.
CSS variable:
var(--color-foreground-success)
Aa
foregroundSuccessModerate
colorGreen90
#187233
Moderate success foreground.
CSS variable:
var(--color-foreground-success-moderate)
Aa
foregroundSuccessSubtle
colorGreen70
#1eb84f
Subtle success foreground.
CSS variable:
var(--color-foreground-success-subtle)
Aa
foregroundInfo
colorBlue100
#005766
Default info foreground.
CSS variable:
var(--color-foreground-info)
Aa
foregroundInfoModerate
colorBlue90
#006c80
Moderate info foreground.
CSS variable:
var(--color-foreground-info-moderate)
Aa
foregroundInfoSubtle
colorBlue70
#00a7c2
Subtle info foreground.
CSS variable:
var(--color-foreground-info-subtle)
Aa
foregroundDisabled
colorGray30
#9dafb3
Disabled foreground.
CSS variable:
var(--color-foreground-disabled)
Aa
foregroundDisabledSubtle
colorGray20
#c2cdd0
Subtle disabled foreground.
CSS variable:
var(--color-foreground-disabled-subtle)
Aa
foregroundInverse
colorWhite
#ffffff
Inverse foreground. Used for text on strong backgrounds.
Border color tokens define the color of borders, as seen in toasts, cards, form fields, and more. Do not use these for background colors or foreground colors.
borderNeutralSubtle
colorGray10
#e6ebec
Subtle neutral border.
CSS variable:
var(--color-border-neutral-subtle)
borderNeutralModerate
colorGray20
#c2cdd0
Moderate neutral border.
CSS variable:
var(--color-border-neutral-moderate)
borderNeutral
colorGray30
#9dafb3
Default neutral border.
CSS variable:
var(--color-border-neutral)
borderNeutralBold
colorGray70
#2f565e
Bold neutral border.
CSS variable:
var(--color-border-neutral-bold)
borderNeutralContrast
colorGray100
#082d35
Contrast neutral border.
CSS variable:
var(--color-border-neutral-contrast)
borderAccentModerate
colorAccent20
#c4dbe0
Moderate accent border.
CSS variable:
var(--color-border-accent-moderate)
borderAccent
colorAccent30
#a8cbd3
Default accent border.
CSS variable:
var(--color-border-accent)
borderAccentHover
colorAccent40
#7eb0bc
Default accent border hover state.
CSS variable:
var(--color-border-accent-hover)
borderAccentActive
colorAccent60
#5b9ba9
Default accent border active state.
CSS variable:
var(--color-border-accent-active)
borderAccentBold
colorAccent70
#388597
Bold accent border.
CSS variable:
var(--color-border-accent-bold)
borderAccentStrong
colorAccent90
#11596a
Strong accent border.
CSS variable:
var(--color-border-accent-strong)
borderDanger
colorRed30
#ffbfc1
Default danger border.
CSS variable:
var(--color-border-danger)
borderDangerBold
colorRed80
#df001f
Bold danger border.
CSS variable:
var(--color-border-danger-bold)
borderDangerStrong
colorRed90
#b20016
Strong danger border.
CSS variable:
var(--color-border-danger-strong)
borderWarning
colorOrange40
#ffd787
Default warning border.
CSS variable:
var(--color-border-warning)
borderWarningBold
colorOrange80
#dc9f00
Bold warning border.
CSS variable:
var(--color-border-warning-bold)
borderWarningStrong
colorOrange90
#b17600
Strong warning border.
CSS variable:
var(--color-border-warning-strong)
borderSuccess
colorGreen40
#7dfd95
Default success border.
CSS variable:
var(--color-border-success)
borderSuccessBold
colorGreen80
#1d873c
Bold success border.
CSS variable:
var(--color-border-success-bold)
borderSuccessStrong
colorGreen90
#187233
Strong success border.
CSS variable:
var(--color-border-success-strong)
borderInfo
colorBlue40
#9aecff
Default info border.
CSS variable:
var(--color-border-info)
borderInfoBold
colorBlue80
#008299
Bold info border.
CSS variable:
var(--color-border-info-bold)
borderInfoStrong
colorBlue90
#006c80
Strong info border.
CSS variable:
var(--color-border-info-strong)
borderDisabled
colorGray10
#e6ebec
Disabled border.
CSS variable:
var(--color-border-disabled)
borderDisabledSubtle
colorGray5
#f3f5f6
Subtle disabled border.
CSS variable:
var(--color-border-disabled-subtle)
borderInverse
colorWhite
rgba(255, 255, 255, 0.85)
Inverse border. Used for borders on strong backgrounds.
When a token translates to #000000 (hex) or rgb(0, 0, 0) color value in CSS, it becomes a challenge to apply opacity just to the color value without making the whole component transparent.
While sticking to solid colors is the default, recommended way, in some special cases there might be a need to reduce the opacity of a color. For example, transparent shades adapt easier to different backgrounds, since they keep the contrast between the element and its background more consistent.
That's why for a subset of background color tokens, their RGB channel values are exposed as separate tokens to be combined with an alpha/opacity. You can use them with the rgba color function​ like this:
The colors available in this category have a unique purpose and should be used only only for data visualisation and information highlighting.
Data visualization is the representation of information in pictorial or graphical format, such as charts, graphs, maps, and diagrams.
Data visualisation colors are produced using OKLCH color space​ to ensure that the colors are perceptually similar in lightness and saturation across the palettes.
A perceptually uniform color space in data visualisation matters, because the perceived colors should not be different from the data points reflected in the color values.
For example, imagine a map that uses different colors for geographic areas to reflect the value of a data point, where it's crucial that the user can compare colors between regions to get a sense of the data.
Each color in Waves' color palette has its purpose.
The neutral color palette is used for most backgrounds including the backgrounds of main navigation elements, such as left panels and top headers.
The accent color palette is used for all other interactive elements such as buttons and inputs, including highlights of labels and messages.
The accent color is differentiating the content from the main navigation elements.
The main navigation should use the neutral color palette.
Make sure you're not using the accent color palette on your main navigation.
Using neutral color palette for typography and alternative backgrounds than white, ensure that your content is contrasted correctly.
Correct and accessible contrast between background and content.
Defective contrast between background and content.