Colour

Smart and systematic use of colour can enhance communication, evoke our brand, provide visual continuity, communicate status and feedback, and help people understand information.

Overview

To maintain consistent and engaging digital interfaces across all products and experiences, extended guidance around colour usage is provided. These foundational principles are intended to create visual balance, reinforce brand identity, and support accessibility throughout the UI design.

Colour anatomy

SaltDS’ colours are built on a balanced, neutral colour palette, using subtle greys to create clear content zones. Primary blues are reserved for primary actions, while other colours are applied selectively to support meaning and hierarchy.

Colours can add meaning to an experience, highlight key UI elements, or create associations with similarly coloured components.

10
20
30
40
50
60
70
80
90
100
10
20
30
40
50
60
70
80
90
100
10
20
30
40
50
60
70
80
90
100
10
20
30
40
50
60
70
80
90
100
10
20
30
40
50
60
70
80
90
100
10
20
30
40
50
60
70
80
90
100
10
20
30
40
50
60
70
80
90
100
10
20
30
40
50
60
70
80
90
100

Neutral colours

Neutral colours are used across most backgrounds, text, and UI elements. While typically meaning-agnostic, they can suggest states such as disabled or inactive.

10
20
30
40
50
60
70
80
90
100

Structure

Colours in SaltDS are organised into three distinct tiers.

First is the Global palette, which defines the full range of available colour values. This includes neutrals (greys), a primary colour, three accent colours, and status-based colours for danger, caution, valid, and information. Each colour is unique and referenced only once.

Next is the Foundation layer, where functional meaning is assigned to these global colours. Here, values become tokens such as text-primary, action-01, and success-01 and are used to express interactive, UI, and denotative states etc.

Finally, Component colours apply these foundational tokens to specific UI elements. For example, action-01 becomes button-background-primary when used within the button component.


Tokens

Colour tokens provide a consistent, reusable, and scalable way to apply colour across the design system. Rather than relying on hard-coded values like hex codes, tokens abstract usage from value—enabling easier updates, theme flexibility, and support for features like inline theming or light and dark modes.

Each token has a role and a value. The role defines what the token is used for (e.g. text-secondary), while the value is the actual colour (e.g. a hex code) applied based on the active theme. Token names and roles remain consistent across themes, but the underlying value changes. For example, $text-secondary may map to neutral-70 in a light theme and neutral-30 in a dark theme.

Token names

For quick reference, a token’s role is reflected in its name structure, helping ensure tokens are correctly applied. To do this, SaltDS uses an object-base-modifier structure for its token naming. The first part of the name indicates the object, or component element the colour applies to – such as button, link, or label. The second part (base) specifies a category or property that the token will affect, such as background, weight or top. Lastly, the modifier indicates any additional traits that could be used to differentiate between variants, states or scale such as primary, hover or xl.

Not all tokens include an object, base and modifier but simply use what is needed to describe their usage effectively, for example $text-primary, $padding-01 and $font-weight-rg.

Validation message

Interaction states

There are five interaction states defined with tokens (hover, active, focus, disabled and error). Interaction tokens are signified by the addition of a state name at the end of the token name. For example, the $button-background-primary hover state token is $button-background-primary-hover.

Hover

Hover is a subtle visual change that appears when a mouse cursor moves over an interactive element. Hover states are identified by the suffix “-hover” added to the end of the token name, such as $button-background-primary-hover.

Hover state token values are usually two steps lighter than the base colour on the palette scale. Suitable interactive colours have been selected based on accessibility and clarity, and are indicated by the action token base. These colours are found within the foundation palette.

90
80
70
60
50
40
30

Active

The active state indicates a press or selection interaction – such as a click, tap, or key press—on an interactive element like a button. Active states are identified by appending -active to the token name, for example, $button-background-primary-active. In SaltDS, these values are typically two full steps darker than the base colour on the palette scale. For instance, if the base colour is Primary 60, the active state might use Primary 80 to enhance visibility and reinforce feedback during the interaction.

Focus

The focus state highlights the currently selected element when navigating with a keyboard or assistive technology. In SaltDS, focus is typically shown with a 2px outline, making the element visually distinct and easy to locate. To maintain consistency and clarity, each theme uses a single dedicated token ($focus-01) to control the colour of focus-ring indicator across components.

Focus states are required on all interactive elements and must meet a minimum 3:1 colour contrast ratio for accessibility. To achieve this contrast, a lighter inset border is sometimes applied between the element and the focus-ring, ensuring clear visibility without overwhelming the component’s design.

Validation message

Disabled

A disabled state is used when a user cannot interact with a component due to permissions, dependencies, or pre-requisites. Disabled components are entirely non-interactive – they do not respond to hover or focus and are visually de-emphasised. As they are not intended for active use, they are not subject to WCAG contrast requirements.

Regardless of the component’s base colour, disabled states are always styled using the neutral colour family. Styling varies based on the component’s structure and layering. SaltDS has a dedicated set of disabled colours that can be used on all components to achieve their disabled styled.

Disabled 01 Neutral 30
Disabled 02 Neutral 40
Disabled 03 Neutral 50
Disabled 04 White
Disabled overlay 01 Black tint 30
Disabled overlay 02 Black tint 40
Disabled overlay 03 Black tint 50
Validation message

Feedback colours

The feedback colour palette is used to visually represent key UI states; info, success, warning, and error. It ensures consistency across components that display feedback, such as toasts, alerts. By using this standardised palette, the interface communicates state changes clearly and predictably to users.

60
60
70
60

Expressive colours

The expressive colour palette brings personality and energy to some components. It goes beyond the functional colours to help set tone, mood, and emphasis throughout the interface. These colours can be used to highlight important content, create visual interest, or support brand identity. When used thoughtfully, expressive colours add depth and richness without overwhelming the core UI.

70
60
60
60

Accessibility

Using multiple forms of contrast is essential for creating user-friendly and accessible interfaces. Following accessibility standards and best practices ensures colour choices are effective, inclusive, and easy to interpret across all user needs.

Contrast ratios

Contrast refers to the difference in brightness between two elements, which impacts how easily users can read or distinguish them. The Web Content Accessibility Guidelines (WCAG) define minimum contrast ratios to support legibility: small text (under 24px) must meet at least a 4.5:1 ratio, while large text (24px and above) needs a 3:1 ratio. Visual elements like charts and icons also require a 3:1 ratio.

The SaltDS palette consists of twelve tonal steps – Black, White, and ten incremental shades per hue. The table below shows the minimum step differences needed to meet standard contrast ratios between any two colours.

Black
100 Neutral 100
90 Neutral 90
80 Neutral 80
70 Neutral 70
60 Neutral 60
50 Neutral 50
40 Neutral 40
30 Neutral 30
20 Neutral 20
10 Neutral 10
White