Skip to content

Colours and contrast

Colours are the part of a brand most likely to fail an accessibility check, so the module grades them rather than just storing them.

Two palettes with their swatches, contrast grades, and the accessibility controls

Add Palette creates a named group with a type and a description. Palettes are how you separate the two or three colours that carry the brand from the greys that do the work.

Each palette card carries four icon buttons: add a colour, import colours, edit the palette, and delete it. Swatches inside a palette can be dragged to reorder.

Add Color opens a dialog that does more than take a hex value.

The Add Color dialog with live contrast readouts

Field What it holds
Color Name What people call it
Hex Value The value, with RGB and HSL shown alongside
Token Name The CSS custom property name, such as --color-primary
Usage Notes What the colour is for

The dialog shows contrast against white and against black as you type, each with its WCAG grade, and Light / Dark / Check preview the colour in context.

Every swatch then carries that grade on its card: AAA, AA, or Fail.

Read the grade as a constraint, not a score. A Fail colour is not a bad colour — a pale tint that fails against white is perfectly good as a background. What the grade tells you is that it cannot carry text.

Contrast matrix grades every pair of colours in the brand at once.

The contrast matrix

This is the view that catches the combination nobody tested. Individual swatches passing against white says nothing about your teal on your navy.

The dropdown beside it previews the palette as people with colour vision deficiencies see it.

The colour-vision simulator

Check any palette where two colours carry different meanings — a status green and a status red, a chart series. If they converge in the simulator, the palette is encoding information in a way some readers cannot decode.

Gradients are stored on the brand rather than recreated per design.

The Add gradient dialog with its stops and live CSS

A gradient has a name, a type, an angle, and a list of stops, each with a colour and a position. Add stop adds more, and the CSS value updates live — linear-gradient(90deg, #0E7C86 0%, #0B1F33 100%) — with Copy CSS on the finished card.

Keep the stop count low. Two or three stops read as a considered gradient; six read as a mistake.

Design tokens carries these values into code. Brand controls restricts which of them people may use.