Images & Design
Accessible color palette generator with WCAG contrast
Type or pick a brand color to get tints and shades from 80% white to 60% black, each scored for AA and AAA on a light and a dark background. Paste several hex codes to test every pair, or add the stylesheet or token file you already use.
One per line, separated by commas, or a CSS snippet. Each color is tested as text on every color after it, as in the tool.
Have a stylesheet or token file? Drop it here.
- TXT / CSS
- Up to 50 colors
- WCAG AA or AAA
Tints and shades of #3B6FE0
Each step as text on #FFFFFF and on #14213D. Select a hex code to copy it.
Alpha colors are placed over #FFFFFF first, the tool's default canvas.
- 1.30Fail12.30AAA
- 1.73Fail9.24AAA
- 2.35Fail6.81AA
- 3.273:14.88AA
- 4.63AA3.453:1
- 6.56AA2.43Fail
- 9.47AAA1.69Fail
- 13.58AAA1.18Fail
Closest passing text color for the base
- On #FFFFFFAAas it is, 4.63:1AAA7.00:1
- On #14213DAA4.55:1AAA7.05:1
Your list
Opens the tool with the brand color and both backgrounds (3 colors). You get contrast-report.csv with every pair and role, palette.css and manifest.json. A successful check uses one of your 3 free jobs a day.
AAA 7:1 or more · AA 4.5:1, body text · 3:1 large text and UI parts only · Fail below 3:1
What the full check returns
The tool tests every pair in your list against body text, large text and UI parts. Where a pair fails, it mixes the text color toward black or white in small steps and lists the passing mix closest to your original. Here is a sample run with four colors.
AA: 3 of 6 pairs fail for body text, 3 get a passing suggestion.
AAA: 4 of 6 pairs fail for body text, 3 get a passing suggestion.
Ink
#14213Don Brand blue#3B6FE03.45:1- Body text Fail
- Large text Pass
- UI parts Pass
- Body text Fail
- Large text Fail
- UI parts Pass
Suggested text color
#010103reaches 4.50:1No mix of #14213D toward black or white reaches 7:1 on #3B6FE0. The report lists the pair as failed.
Ink
#14213Don Accent orange#F5A5247.83:1- Body text Pass
- Large text Pass
- UI parts Pass
- Body text Pass
- Large text Pass
- UI parts Pass
Meets AA for body text as it is.
Meets AAA for body text as it is.
Ink
#14213Don Paper#FFFFFF15.97:1- Body text Pass
- Large text Pass
- UI parts Pass
- Body text Pass
- Large text Pass
- UI parts Pass
Meets AA for body text as it is.
Meets AAA for body text as it is.
Brand blue
#3B6FE0on Accent orange#F5A5242.27:1- Body text Fail
- Large text Fail
- UI parts Fail
- Body text Fail
- Large text Fail
- UI parts Fail
Suggested text color
#24448Areaches 4.54:1Suggested text color
#162852reaches 7.05:1Brand blue
#3B6FE0on Paper#FFFFFF4.63:1- Body text Pass
- Large text Pass
- UI parts Pass
- Body text Fail
- Large text Pass
- UI parts Pass
Meets AA for body text as it is.
Suggested text color
#2D55ABreaches 7.00:1Accent orange
#F5A524on Paper#FFFFFF2.04:1- Body text Fail
- Large text Fail
- UI parts Fail
- Body text Fail
- Large text Fail
- UI parts Fail
Suggested text color
#A06C18reaches 4.51:1Suggested text color
#785112reaches 7.04:1
Download: palette.css · contrast-report.csv · manifest.json
From colors to report in three steps
- 1
Add your colors
Paste 2 to 50 hex codes on this page or add a TXT or CSS file. Order matters: each color is tested as text on every color after it.
- 2
Pick the target
WCAG AA (4.5:1 for body text) or AAA (7:1), plus an opaque canvas if a color has alpha.
- 3
Review and download
Check failed pairs and suggestions, then download palette.css, contrast-report.csv and manifest.json.
Checking brand colors against WCAG contrast levels
What you can start from
Start from one brand color, a pasted list or a file. The tint and shade scale at the top of this page runs in your browser and sends nothing. When you start a check from there, the colors go to the tool as a small text file. You can also upload a TXT or CSS file with your brand colors as six- or eight-digit hex values. Up to 50 colors are read in one run. Colors are read as standard web colors (sRGB). If a color has an alpha channel, you confirm an opaque canvas color first, and the transparent color is measured over that canvas. Only solid colors are checked. Gradients and image backgrounds are not sampled.
What the download contains
The package holds palette.css with your colors as CSS variables, contrast-report.csv and manifest.json. The report checks every color pair against three thresholds in separate columns: body text, large text and UI parts. A pair can pass for large text and still fail for body copy. The manifest records the canvas you chose and a fingerprint of your source file, so you can confirm later which file the numbers came from.
Targets, suggestions and your review
You choose WCAG AA or AAA as the contrast target and set the canvas behind alpha colors. Where a pair fails, the report suggests opaque foreground colors that would pass. They are listed for review and never written back into palette.css. Pairs that look very similar are flagged by OKLab distance. That flag is a rough signal. It is not a color-blindness simulation, an APCA score or a WCAG certification, and it does not replace an accessibility review.
Questions before you run it
Can I start from a single brand color?
Yes. Type or pick one hex color at the top of this page. You see eight steps from 80% white to 60% black, each with its contrast on a light and a dark background, and the closest text color that passes AA and AAA. This preview runs in your browser and does not use a free job. For the CSV report, send the color and both backgrounds to the tool.
Do I need an account for the free jobs?
No. The 3 free jobs a day run in a guest session without sign-up. Failed jobs are not counted, and the counter resets at midnight UTC.
Which color formats does it read?
Six-digit and eight-digit hex values (#RRGGBB and #RRGGBBAA) from a TXT or CSS file. Every match in the file is picked up and duplicates are removed, so an existing stylesheet or token file works as it is. Short hex such as #FFF, rgb(), hsl() and named colors are not read. A run needs 2 to 50 unique colors.
How are colors with an alpha channel measured?
A transparent color is first composited over the opaque canvas you confirm before the run, and the foreground color is then composited on top of that. The canvas value is recorded in the manifest so the numbers can be reproduced.
Does it check large text and UI components separately from body text?
Yes. Every pair is reported against the normal text, large text and non-text UI component thresholds in separate columns of contrast-report.csv, so a pair can clear large text and still fail for body copy.
Are the suggested foreground colors written back into my palette?
No. Suggestions are opaque candidates listed for review, and palette.css keeps the colors you supplied.
Can it tell me whether two brand colors look alike to a color-blind viewer?
It flags pairs that sit close together in OKLab distance, which is a rough signal for visually similar colors. That is not a color-vision deficiency simulation, an APCA score or a WCAG certification.