Accessible Color Palettes: How to Build and Test Them for UI

November 5, 2026 | Read Time : 3 mins

A team picks a bright brand palette. It looks great in the pitch deck. Then the product ships. Yellow buttons carry white text. Light gray labels sit on white cards. Error and success states look the same to color-blind users. The palette was pretty, but it was not built to be used. An accessible color palette is chosen and tested for real use from the start. This guide shows how to build one.

What Is an Accessible Color Palette?

An accessible color palette is a set of colors that people with different vision can read and use. Every approved text and background pairing meets contrast rules. Meaning never depends on color alone. The palette also holds up in different themes and on different screens.

It is not a boring palette. Many bold, bright brands have accessible palettes. The difference is that each color has a clear job and a tested pairing.

Why It Matters

About 1 in 12 men and 1 in 200 women have some form of color vision deficiency. Many more people have low vision, tired eyes, or a dim screen in bright sun. A weak palette hurts all of them.

It also saves time. Teams that test colors once, at the palette stage, avoid fixing the same issue on every screen. Strong palettes also support clear visual hierarchy, because contrast tells users what to look at first.

The Numbers to Know

WCAG sets the minimum contrast ratios. Level AA is the usual target.

  • Normal text: at least 4.5 to 1.
  • Large text: at least 3 to 1. Large means about 24 pixels, or about 19 pixels when bold.
  • UI parts and meaningful graphics: at least 3 to 1. This covers input borders, icons, and focus rings.

A few handy reference points on a white background: black gives 21 to 1. A gray of #595959 gives about 7 to 1. A gray of #767676 just passes at 4.54 to 1. A gray of #949494 gives about 3 to 1, so it fails for body text. Always check your exact values with a tool, since small shifts change the result.

Step 1: Start With Your Brand Colors

List your brand colors. Test each one against white and against black. Many brand colors fail as text. Bright yellow, orange, light green, and sky blue are common examples.

A failing brand color does not need to go. Use it for large shapes, backgrounds, and illustrations. Then pick a darker shade of the same hue for small text and thin icons. This keeps the brand look and still passes.

Step 2: Build a Scale for Each Color

Do not pick one blue. Build a scale of tints and shades, often from 50 (very light) to 900 (very dark). Keep the same hue and shift only the lightness.

A scale gives you options. A light step can be a background. A mid step can be a button. A dark step can be text. Because every step is known, you can plan which pairs will pass before you design a single screen. Tools such as Leonardo, Material Theme Builder, and Stark can generate scales with contrast in mind.

Step 3: Give Colors Roles

A palette needs roles, not just swatches. Common roles include:

  • Text: primary, secondary, and disabled.
  • Surface: page background, cards, and raised panels.
  • Primary action: buttons and links.
  • Secondary action: less important controls.
  • Border: dividers and input outlines.
  • Status: success, warning, error, and info.
  • Focus: the keyboard focus ring.

Write down which text role may sit on which surface role, and the ratio for each pair. This table is the heart of an accessible palette. Designers can then pick from approved pairs instead of guessing.

Step 4: Test Every Pair

Test each approved pair with a contrast checker. The WebAIM Contrast Checker is free and quick. Figma plugins such as Stark and Contrast check pairs right on the canvas. Browser dev tools also show ratios and flag failures.

Test more than the default state. Check hover, pressed, disabled, selected, and error states. Check text on tinted surfaces, since a card with a light blue fill changes the result. Check links against the surrounding body text too. Links that differ only by color need 3 to 1 against that text, plus another cue such as an underline.

Step 5: Do Not Rely on Color Alone

Contrast is not enough. People who cannot tell red from green need other cues.

Pair color with something else:

  • Add an icon and a text label to errors and success messages.
  • Underline links.
  • Mark required fields with text, not only a colored star.
  • Use patterns or shapes in charts, not only different hues.

A quick check is to view your design in grayscale. If the meaning survives, you are in good shape. Color-blindness simulators in Figma, Chrome, and Stark help too.

Step 6: Plan for Dark Mode

A light palette does not simply flip into a dark one. Pure white on pure black can glare. Saturated colors that look fine on white can vibrate on dark surfaces.

Build the dark palette as its own set. Use dark gray surfaces instead of pure black. Use off-white text. Use lighter, softer versions of brand colors. Then test every pair again. If you name colors by role, such as “text-primary,” each theme can map the role to its own tested value.

Step 7: Build Palettes for Data

Charts and dashboards need extra care. Many series must look different from each other, and each must stand out from the background.

Choose colors that vary in lightness, not only hue, so they stay distinct in grayscale. Keep a ratio of at least 3 to 1 between a graphic and its background. Add direct labels, patterns, or markers, so users do not need a legend to decode lines. For more guidance, see this article on creating clear and impactful data visualisation dashboards.

Step 8: Put the Palette Into Your System

A palette in a PDF gets ignored. Put it into your design system. Create color tokens with role names, such as “color-text-primary” and “color-surface-raised.” Document the approved pairs and ratios. Build components, such as buttons, inputs, and alerts, so they use only approved pairs in every state.

When the system carries the rules, new screens start from safe choices. A design systems and component library service can help set this up across design and code.

Example: A Simple Accessible Palette Structure

Here is a way to organize a small palette. Values are placeholders, so test your own.

  • Neutral scale: 50 to 900, from near-white to near-black. Use 900 for primary text and 700 for secondary text on light surfaces.
  • Primary scale: A brand blue from 50 to 900. Use a mid-dark step for buttons with white text, and test the pair.
  • Status colors: Green, amber, red, and blue, each with a dark text step, a mid icon step, and a light background step.
  • Focus color: One high-contrast color that works on both light and dark surfaces.
  • Dark theme: A mapped set of the same roles with new tested values.

Each role has a defined pairing, and each pairing has a recorded ratio.

Tools That Help

  • WebAIM Contrast Checker: Fast checks for two colors.
  • Stark and Contrast (plugins): Contrast and color-blindness checks inside design tools.
  • Leonardo: Generates color scales from target contrast ratios.
  • Adobe Color: Explores harmonies and has an accessibility mode.
  • Coolors: Builds palettes quickly, with a contrast checker.
  • Chrome DevTools: Shows contrast ratios on live elements.
  • axe DevTools and Lighthouse: Scan built pages for contrast failures.

Automated tools cannot judge text over photos or check every state, so keep manual checks in the process.

Test With Real People

Tools tell you whether a pair passes. They do not tell you whether people can use the product. Test on different screens, at low brightness, and in bright light. Include users with low vision and color blindness in your sessions. A structured usability testing and feedback loops process helps you catch what the numbers miss.

Common Mistakes to Avoid

  • Picking colors by taste alone. Pretty pairs often fail.
  • Testing only black and white backgrounds. Real UIs use tints and layers.
  • Using brand colors as small text. Many fail contrast.
  • Checking only the default state. Hover, disabled, and error states slip through.
  • Using color as the only signal. Errors and charts become unreadable for some users.
  • Skipping dark mode testing. A pass in light mode can fail in dark.
  • Making palettes too large. Too many colors are hard to test and keep consistent.
  • Leaving the palette out of the system. Teams fall back to guesswork.

Final Thoughts

An accessible palette starts with tested scales, clear roles, and approved pairs. It adds non-color cues, a separate dark theme, and careful chart colors. Then it lives inside your design system, where every component uses it by default. Test with tools and with real users, and keep the rules documented. If you want a team that can build brand-true palettes that also pass accessibility checks, a UI UX design studio in Bangalore can help.

Share

OriginUX Studio

AUTHOR

Team OriginUX

OriginUX Studio is a CoE for User Experience providing UI & UX across Product, Service and Customer Experience Design. We are a cross-disciplinary design team that loves to create great experiences and make meaningful connections for businesses and their users through UI & UX.

Founded in 2016, our larger purpose is to help brands understand what they want to do and where they want to go. To do that we have to make understanding customer experience simple, effortless, and affordable for everyone.

Hire on Demand