color theoryNovember 5, 202610 min read

UI Color Palettes: What Each Color Can and Cannot Do

Twelve UI color palettes with exact hex codes, tested role by role. Which accents work as both button and link, which gray text fails on a tinted card, and why a pale accent fills but never writes.

By Boone
XLinkedIn
UI Color Palettes: What Each Color Can and Cannot Do

A UI color palette is not a set of nice colors. It is a set of roles, and each color can do some jobs and not others. Here are twelve palettes, each tested on one role that usually goes wrong, with every hex code.

The three roles in a UI palette

The ink writes. It is the color of every line of text, so it has to be dark enough on the surface, like Ink Navy #141238 on Indigo Mist #EEF0FB. You also use it for links when the accent cannot.

The surface holds. It is the page or the card behind everything else. It does not have to be white, and the tint you choose changes how every other color behaves.

The accent taps. It is the one color that says "this does something." That sounds like one job, and the next section shows it is two.

An accent has two jobs

On a button, the label has to read on the accent, and the button has to stand out from the page. In a sentence, the same accent is a link, and a link is text, so it has to be readable on that same page. Both jobs use the same pair of colors, but the second one has a higher bar.

That means an accent can be a good button and a bad link. Sky and Coral sit in exactly that gap. Indigo and Berry pass both.

Indigo

Save

Indigo #4338CA, white label: passes

See more

Indigo as a link on Indigo Mist #EEF0FB: passes

See more

Ink Navy #141238 as the link: passes

Indigo works as the button and as the link. One color, both jobs, nothing to fix.

Berry

Save

Berry #A61E4D, white label: passes

See more

Berry as a link on Berry Milk #FBEAF0: passes

See more

Deep Berry #2A0A18 as the link: passes

Berry does the same: a white label on the button, a readable link on its pale pink surface.

Sky

Save

Sky #248AE4, Harbor Ink label: passes

See more

Sky as a link on Sky Wash #EAF4FC: fails

See more

Harbor Ink #021828 as the link: passes

Sky is a good button and a hard link. Keep it for buttons and set links in Harbor Ink, underlined.

Coral

Save

Coral #E85446, Burnt Clay label: passes

See more

Coral as a link on Coral Milk #FDEEEB: fails

See more

Burnt Clay #290E0A as the link: passes

Coral has the same split. A button people can see, and a link that disappears into Coral Milk.

Keep the accent for buttons

The fix is cheap. Keep Sky and Coral for buttons and set links in the ink, underlined. Here is the same sentence both ways.

Password

••••••••

Forgot your password?

✕ Sky as the link: hard to read

Password

••••••••

Forgot your password?

✓ Harbor Ink as the link: easy to read

Same surface, same sentence. Left: Sky as the link. Right: Harbor Ink as the link.

Gray text on tinted cards

Secondary text is usually your ink at about 65%. On white it is easy to read in all four palettes, and on a pale surface it barely changes. On a real tint it can slip under the line.

So test it on the surface it sits on, not on white. On a strong tint, push the gray to 70% and it recovers.

Red Panda

#121A2E

Sombre Night

#B54302

Red Panda

Due Friday

#636772 on Sugar Milk #FAF7F0: passes

Due Friday

Same 65% mix #656A77 on white: passes

Sugar Milk is almost white, so the gray barely changes. It passes on the card and on white.

Warm Purple

#2E1F14

English Walnut

#812E7D

Warm Purple

Due Friday

#606146 on Oh Pistachio #BCDBA4: fails

Due Friday

At 70%, #59573F: passes

Oh Pistachio is a real tint. The same gray that passes on white slips under the line here, and 70% brings it back.

Mango

#0E2219

Jedi Night

#FAA828

Mango

Due Friday

#5E6C68 on Heart of Ice #F2F5FA: passes

Due Friday

Same 65% mix #626F6A on white: passes

Heart of Ice is a pale cool tint, so the gray holds up.

Viridian

#0E222D

Midnight Dreams

#007F5B

Viridian

Due Friday

#535D71 on Digital Lavender #D3CAEE: fails

Due Friday

At 70%, #495467: passes

Digital Lavender is a strong enough tint to fail the same gray. Push it to 70% and the card reads again.

A pale accent fills, it never writes

A pale accent is a lovely fill and a hopeless text color. On its own page, none of these four can be read as text. Turn the same color into a fill and it works, as long as you choose the right words for it.

Purple Estate

Today

Blue Horizon #72AFCC as text on Sunwashed Paper #F5EDCE: fails

Sat 14

Purple Estate #58287F on Blue Horizon: big type only

Today

Purple Estate on Sunwashed Paper: passes

The pale blue fails as text on the paper. As a fill it takes Purple Estate, which is fine for a big date and not for small type.

Blue Horizon

Today

Blue Horizon #2FA4D7 as text on Desert Cream #F5E9D8: fails

Play

Cocoa Noir #3E2C23 on Blue Horizon: passes

Today

Cocoa Noir on Desert Cream: passes

The brighter blue also fails as text on Desert Cream. As a fill it carries Cocoa Noir easily.

Herb Garden

Today

Herb Garden #BCD9A2 as text on Sun Linen #FEFFD3: fails

7 days

Red Monarch #A82323 on Herb Garden: passes

Today

Red Monarch on Sun Linen: passes

The faintest of the four on its page. Put Red Monarch on the green and the number reads clearly.

Nordic Sky

Today

Nordic Sky #7288AE as text on Manor Cream #EAE0CF: fails

18°

White #FFFFFF on Nordic Sky: big type only

Today

Velvet Indigo #4B5694 on Manor Cream: passes

Nordic Sky only takes white, and only for big type, so numbers yes and small print no. The page text is set in Velvet Indigo.

So check the fill and the words on it, not just the page. If the words on the fill only reach big-type contrast, keep them big.

All twelve palettes in one table

PaletteColorsThe role it tests
IndigoInk Navy #141238, Indigo #4338CA, Indigo Mist #EEF0FBButton and link both pass
BerryDeep Berry #2A0A18, Berry #A61E4D, Berry Milk #FBEAF0Button and link both pass
SkyHarbor Ink #021828, Sky #248AE4, Sky Wash #EAF4FCButton passes, link fails
CoralBurnt Clay #290E0A, Coral #E85446, Coral Milk #FDEEEBButton passes, link fails
Red PandaSombre Night #121A2E, Red Panda #B54302, Sugar Milk #FAF7F0Gray passes on the card
Warm PurpleEnglish Walnut #2E1F14, Warm Purple #812E7D, Oh Pistachio #BCDBA4Gray fails on the card
MangoJedi Night #0E2219, Mango #FAA828, Heart of Ice #F2F5FAGray passes on the card
ViridianMidnight Dreams #0E222D, Viridian #007F5B, Digital Lavender #D3CAEEGray fails on the card
Purple EstateSunwashed Paper #F5EDCE, Blue Horizon #72AFCC, Purple Estate #58287FPale blue fills, big type only
Blue HorizonBlue Horizon #2FA4D7, Desert Cream #F5E9D8, Cocoa Noir #3E2C23Fill passes with Cocoa Noir
Herb GardenRed Monarch #A82323, Sun Linen #FEFFD3, Herb Garden #BCD9A2Fill passes with Red Monarch
Nordic SkyVelvet Indigo #4B5694, Nordic Sky #7288AE, Manor Cream #EAE0CFFill takes white, big type only

The numbers, for the person defending the choice

Every pairing was measured with the WCAG 2 contrast formula against the surface it sits on. This is the only table in the paper with ratios.

PaletteTestRatioResult
IndigoWhite label / button on page / link on page7.90:1 / 6.96:1 / 6.96:1Passes all
BerryWhite label / button on page / link on page7.21:1 / 6.22:1 / 6.22:1Passes all
SkyInk label / button on page / link on page5.01:1 / 3.23:1 / 3.23:1Passes, passes, fails
CoralInk label / button on page / link on page4.98:1 / 3.21:1 / 3.21:1Passes, passes, fails
Red Panda65% gray on the card / on white5.2:1 / 5.4:1Passes both
Warm Purple65% gray on the card / on white / at 70%4.1:1 / 5.0:1 / 4.8:1Fails, passes, passes
Mango65% gray on the card / on white5.0:1 / 5.2:1Passes both
Viridian65% gray on the card / on white / at 70%4.2:1 / 5.1:1 / 4.8:1Fails, passes, passes
Purple EstatePale accent as text / best text on it / ink on page2.05:1 / 4.31:1 / 8.83:1Fails, big type, passes
Blue HorizonPale accent as text / best text on it / ink on page2.36:1 / 4.66:1 / 11.03:1Fails, passes, passes
Herb GardenPale accent as text / best text on it / ink on page1.51:1 / 4.64:1 / 6.98:1Fails, passes, passes
Nordic SkyPale accent as text / white on it / ink on page2.75:1 / 3.59:1 / 5.25:1Fails, big type, passes

How to build your own UI palette

  1. Start with ink and surface. Pick a dark ink and a surface, tinted or white, and check the ink on the surface. Harbor Ink #021828 on Sky Wash #EAF4FC is the easy case.
  2. Pick the accent for the label. Decide whether white or dark text goes on it, and check the label on the accent.
  3. Test the accent as a link. Put it on your surface as text. If it fails, keep it for buttons and set links in the ink.
  4. Test secondary text on every surface. Mix the ink at 65% over each card color. Push to 70% where it slips.
  5. Keep pale colors for fills. Pick the words that go on them before you commit. Our papers on UI color mistakes and accessible color contrast go deeper on the thresholds.

Get the files for each set

Each set is a free color set on Forge, with tap-to-copy codes, swatch files for Figma and Adobe (ASE), CSS variables and design tokens.

Free color set

An accent has two jobs: Indigo, Berry, Sky, Coral

Every hex, plus ASE swatches, CSS variables and design tokens.

Open the set

Free color set

Gray text on tinted cards: Red Panda, Warm Purple, Mango, Viridian

Every hex, plus ASE swatches, CSS variables and design tokens.

Open the set

Free color set

A pale accent fills, it never writes: Purple Estate, Blue Horizon, Herb Garden, Nordic Sky

Every hex, plus ASE swatches, CSS variables and design tokens.

Open the set

FAQ

What colors should a UI color palette have?

At least three roles: an ink for text, an accent for buttons and links, and a surface for the page. Indigo #4338CA with Ink Navy #141238 and Indigo Mist #EEF0FB is a complete example.

The accent only if it passes as text on your surface. Indigo does. Sky #248AE4 does not, so its links go in Harbor Ink #021828, underlined.

What color should secondary text be?

Your ink at about 65%, checked on the surface it sits on. On a strong tint like Oh Pistachio #BCDBA4 it can fail, and pushing it to 70% fixes it.

Why is gray text hard to read on a colored card?

A tinted card is darker than white, so the gap between the gray and the card shrinks. White hides the problem, which is why you test on the real surface.

Can I use a pastel as an accent color?

As a fill, yes. As text, no. Herb Garden #BCD9A2 fails as text on Sun Linen #FEFFD3 and works as a fill with Red Monarch #A82323 on it.

It has to if you use it for both. A button needs to stand out from the page and carry its label. A link is text, so it needs a higher bar on the same page.

Sources

Want a UI palette built for your product, with every role tested on your real screens? Our team designs interfaces that hold up in every state.

Get Started

Get new papers by email

New Brainy papers in your inbox. Confirm once, unsubscribe anytime.

More from Brainy Papers

Keep reading