Checking a Brand Color Pair Against WCAG

Pick any foreground and background pair, see live WCAG 2.1 AA and AAA results for normal text, large text, and UI components, and fix failing pairs in one click.

ZERO UPLOAD · ALL LOCAL
  1. Type a foreground and a background color in any supported format (hex, rgb, hsl, hsv, oklch, or a CSS color name), or click either swatch to open the visual picker.
  2. Read the large ratio on the left and the per-tier badges in the preview: normal text, large text, and UI components each check against their own AA and AAA thresholds.
  3. When a row fails, click Fix text or Fix background to apply the closest color that passes without changing the hue. The button only appears when a passing fix exists.
  4. Use the toggle above the preview to view your exact pair through protanopia, deuteranopia, or tritanopia simulation. Ratios and badges keep reporting the true colors.
  5. Click Swap to flip foreground and background, or Share to copy a link that restores both colors for anyone who opens it.

Worked examples for this use case

A vivid brand blue on a white background, checked before it becomes the primary button color

Before
Foreground #2563eb, background #ffffff
After
The badge shows a clear AA pass for normal text, just short of AAA, giving you a real number to attach to the design decision instead of a guess.

A lighter brand-adjacent blue that looks similar in a logo but fails against white

Before
Foreground #93c5fd, background #ffffff
After
Every tier fails here, including the more forgiving large-text threshold, which is exactly the kind of near-miss a mood board comparison would never catch.
Unrecognized color format
Unrecognized color format

Contrast Ratio

Colorblind Simulation

Button Text Samples

Normal Text (16px)

Body copy at 16 pixels carries most of what your visitors actually read, and it needs 4.5:1 to pass AA.

Large Text (24px Bold)

Large text passes AA at 3:1

Buttons

Continue Cancel

Checking a Brand Color Pair Against WCAG AA Before You Lock It In

A brand color usually gets chosen in a logo file or a mood board long before anyone checks whether it can carry body text or button labels without failing accessibility review. That gap between this is our blue and this blue passes WCAG at 16px is exactly where design systems run into trouble months after launch, when a component built around the brand color turns out to fail a contrast audit.1 Testing a candidate brand pair here, before it gets baked into buttons, links, and headings across a whole product, catches the problem while it's still a five-minute color adjustment rather than a re-brand.

Why a brand color that looks bold can still fail contrast

Saturated brand colors, the kind that make a logo pop on a business card, often sit in a middle brightness range that neither reads as clearly light nor clearly dark. That middle ground is precisely where contrast failures cluster, because a color that's too bright to work well against white and too dark to work well against black ends up compromised against both.

The saturation trap: vivid does not mean high contrast

A vivid blue like #2563eb looks confident and energetic on a white background, and it does clear AA's 4.5:1 threshold for normal text, but it falls short of AAA's stricter 7:1 bar.2 A lighter, equally on-brand blue like #93c5fd can look almost identical in a logo lockup yet fail even the more forgiving large-text threshold against the same white background, because a small shift in lightness moves the ratio far more than it moves the color's apparent brand identity.

That's the trap: two shades of the same brand hue can sit on opposite sides of a pass or fail line while looking, to a design team eyeballing a mood board, like minor variations on the same color. Checking the exact hex value your team plans to ship, rather than judging the palette by eye, is the only way to know for certain which side of that line you landed on.

Keeping the hue while fixing the ratio

When a brand color fails, the instinct to just pick a completely different color is usually the wrong one, since it throws away the brand recognition the color exists to build. What you actually need is the smallest possible nudge that gets the same color over the line, not a replacement that starts the approval process over from scratch.

Auto-Fix solves the narrower problem instead: it searches for the closest lightness adjustment in OKLab space that reaches your target ratio while holding hue and chroma constant,3 so a failing brand blue comes back as a lighter or darker blue, not a color a brand guideline would reject. That's usually the difference between a fix your brand team signs off on in minutes and one that reopens a debate about the whole palette.

Locking in a pair once it passes, and sharing it with your team

Once a brand pair clears the tier you need, whether that's AA for general use or AAA for a long-form reading context,4 the Share button turns your exact foreground and background into a link anyone on your team can open to see the same result. No screenshot, spreadsheet cell, or verbal description of a color has to stand in for the real, checkable value again.

Documenting the decision instead of re-litigating it later

That link is worth attaching directly to the design system documentation or the ticket where the color got approved, since it saves the next person from re-deriving the ratio from scratch or trusting a screenshot that might not reflect the final hex value.5 Anyone who opens it later sees the live, current result rather than a snapshot that could have drifted out of date.

A shared, bookmarkable link that shows the exact pass or fail state removes the ambiguity that usually creeps in between a color being approved in a design file and it actually shipping in production CSS, and it gives future reviewers a live result instead of a static image that could quietly go stale.

When to use this

Use this guide before a brand color moves from a logo file into production CSS, whenever you need to confirm the exact hex pair clears WCAG rather than approving a palette by eye.

Examples

A vivid brand blue on a white background, checked before it becomes the primary button color

Before
Foreground #2563eb, background #ffffff
After
The badge shows a clear AA pass for normal text, just short of AAA, giving you a real number to attach to the design decision instead of a guess.

A lighter brand-adjacent blue that looks similar in a logo but fails against white

Before
Foreground #93c5fd, background #ffffff
After
Every tier fails here, including the more forgiving large-text threshold, which is exactly the kind of near-miss a mood board comparison would never catch.
Sources
  1. 1.

    WebAIM, "Contrast and Color Accessibility," webaim.org, accessed August 2026. https://webaim.org/articles/contrast/

  2. 2.

    W3C, "Understanding Success Criterion 1.4.3: Contrast (Minimum)," w3.org, accessed August 2026. https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html

  3. 3.

    Björn Ottosson, "A Perceptual Color Space for Image Processing," bottosson.github.io, December 2020. https://bottosson.github.io/posts/oklab/

  4. 4.

    W3C, "Web Content Accessibility Guidelines (WCAG) 2.1," w3.org, May 2025. https://www.w3.org/TR/WCAG21/

  5. 5.

    The A11Y Project, "Checklist," a11yproject.com, accessed August 2026. https://www.a11yproject.com/checklist/

FAQ