codexier.

Design & UX

Brand Colours That Pass Contrast Checks

By CodexierPublished 6 min read

A brand palette is usually three or four colours picked for a logo and a business card. Put those same colours on a website, and white text on the brand orange fails the contrast check, the light grey body text is unreadable on a phone in sunlight, and the accessibility law for company websites starts to matter. This guide shows how to grow the palette into pairs that pass, so the brand stays recognisable and the site stays legal and readable.

Why many brand colours fail

Contrast is about luminance, not hue. A saturated orange feels strong, but its brightness sits in the middle of the range, which is exactly where neither white nor black text gets far enough away from it. The same applies to the light greys designers like for secondary text. The check the law and the browser tools apply is mechanical, so the answer has to be mechanical too: measure the pairs, not the feeling.

Building tints and shades

For each brand colour, build a scale of roughly ten steps from near-white to near-black, keeping the hue and adjusting lightness. The original brand colour lands somewhere in the middle. The lightest steps become backgrounds; the darkest become text; the original stays for logos, large headings and accents where contrast is not required.

  1. Start from the brand colour and generate steps in a perceptual colour space, so that equal steps look equal; the tools built into Figma and most design-token generators do this.
  2. Adjust saturation slightly at the ends of the scale so the very light and very dark steps still feel like the brand rather than grey.
  3. Name steps by number, not by adjective: brand-100 to brand-900 ages better than 'light' and 'lighter'.
  4. Do the same for a neutral grey scale with a hint of the brand hue, which is what body text and borders will actually use.
  5. Add one semantic set for success, warning and error, built the same way, so status colours pass too.

Text, button and background pairs

With the scales in place, the work is picking pairs and measuring them. A handful of combinations covers nearly every interface need.

UseForegroundBackgroundTarget
Body textNeutral 800 or 900White or neutral 50At least 4.5:1
Secondary textNeutral 600 at the lightestWhiteAt least 4.5:1; lighter greys usually fail
Primary buttonWhiteBrand 700 or darkerAt least 4.5:1 for the label
Secondary buttonBrand 800Brand 100At least 4.5:1
Links in textBrand 700WhiteAt least 4.5:1, and underlined so colour is not the only cue
Focus ring and iconsBrand 600Any backgroundAt least 3:1 against adjacent colours

The exact step numbers depend on your hue; measure each pair with a contrast checker rather than trusting the pattern.

Dark mode variants

Dark mode is not the same palette inverted. Pure white text on pure black glares, saturated brand colours look neon on dark backgrounds, and shadows stop working. The scales you built already contain the answer: use the darkest neutral steps as backgrounds, the lighter neutrals for text, and move brand usage a few steps lighter so the button that was brand-700 on white becomes brand-400 on neutral-900.

Backgrounds

Dark neutral, not black. Layer surfaces by making raised elements slightly lighter instead of adding shadow.

Text

Off-white for body text, a lighter neutral for secondary. Both still need the 4.5:1 check against the dark surface.

Brand accents

Desaturate slightly and lighten. The brand colour that carries a button in light mode is usually too dark to pass in dark mode.

Decide whether you need it

Dark mode doubles the pairs to maintain. Add it when your product is used for long sessions or your users ask for it, not because the template offers it.

Documenting approved combinations

The measurements are worthless if the next designer or developer picks a new pair from the scale without checking. Write the approved pairs into the design system as named tokens: text-on-brand, brand-on-light, link, focus. Code uses the tokens, not the raw colours, so a passing pair cannot quietly become a failing one. Put the contrast ratio next to each pair in the documentation, and add an automated check in the build that fails when a token pair drops below the target. This is the part of a design system and UI kit that saves the most trouble later, and it belongs with the other durable choices covered in web design that ages well.

When you do not need this: a single landing page with dark text on white and one button can be checked by hand in five minutes; you do not need a token system for it. The scale and the documentation pay off when several people ship interface work over years. If your brand colours were chosen before the website existed and nobody has measured them, book a free 15-minute call and we will run the pairs you use today through the checker together.

Frequently asked questions

Do we have to change our brand colour if it fails?

No. Keep it for the logo, large headings and decorative use, where contrast rules are looser or do not apply. Add darker and lighter steps of the same hue for text and buttons. The brand is the hue, not the one exact value.

Is 4.5:1 a legal requirement in Sweden?

For public sector websites, the accessibility law references WCAG, which sets that ratio for normal text. For private companies covered by the accessibility requirements for certain digital services from 2025, the same standard applies. For everyone else it is best practice that also makes the site readable on phones outdoors.

Which tool should we use to check contrast?

Any WCAG contrast checker gives the same ratio, because the formula is fixed. Figma plugins check pairs during design; browser developer tools show the ratio on live pages; a build-time check on tokens catches regressions.

Can colour alone show that something is an error or a link?

No. Colour must be paired with another cue: an underline for links, an icon or text for errors, a border for focus. Colour-blind users and anyone in bright light will otherwise miss the signal even when the contrast passes.

Not sure your palette passes?

Send us the brand colours and a page where they are used. In fifteen minutes we tell you which pairs fail, what steps would fix them and whether a token setup is worth it for you.

Book a free 15-minute call