Website profiles · Technology insights · Alternatives

accessiblepalette.com

Use CIELAB and LCh color models to create color systems with consistent lightness and WCAG contrast ratios.

No paid content found
Visit website
Profile views 5 Outbound visits 0 Normal
Accessible Palette Full homepage screenshot

At a glance

Category
Color Tools
Language
English
Paid-content signal
No paid content foundObserved
Registered
2021
Hosting
NetlifyInferred
HTTPS certificate trusted
PassedObserved
Last updated

Website review

This review may include AI-generated content and is not individually verified. Domain, certificate and other facts come from the observed data on this page.

What is Accessible Palette?

Accessible Palette is a browser-based tool for building color systems that stay perceptually consistent in lightness and meet WCAG contrast targets. Instead of picking colors by eye in HSL, you define starting colors in the CIELAB and LCh color models, and the tool generates a numbered scale (50–900) where each step carries a specific lightness value and its corresponding WCAG 2 and WCAG 3 contrast ratios.

What it actually does

The page shows a working example: each swatch is labeled with its L, C and H values plus a hex code, and each step in the ramp is paired with contrast figures. For instance, a step at L 47.6 reports WCAG 2 contrast of 4.8 and WCAG 3 of 73, while a step at L 57.8 reports 3.4 and 61. Because lightness moves in even, predictable increments, you can tell at a glance which steps are safe for body text, which work for large headings or icons, and which belong in backgrounds and borders.

You can set multiple starting colors, adjust the hue range to shift a whole ramp, and add colors as you go.

Who it is for

  • Design system builders who need a repeatable palette rather than one-off swatches.
  • Designers and developers who must document contrast decisions for accessibility reviews.
  • Teams replacing hand-tuned HSL ramps that produce uneven perceived brightness.

Why the color model matters

The page makes its argument directly with the heading "Stop using HSL for color systems!" HSL lightness is a mathematical value, not a perceptual one, so two HSL colors with identical lightness can look very different in brightness. CIELAB and LCh approximate human perception, which is why a scale built there keeps its steps visually even — and why contrast ratios fall into a more useful pattern across the ramp.

A practical next step

Decide your text and background pairs first. Pick the step you intend for body text, check that its WCAG 2 ratio clears 4.5:1, then work outward to hover, border and disabled states. If you want to compare how other tools handle the same problem, Contrast Ratio checks individual color pairs, and WebAIM publishes the underlying contrast guidance.

How can I use Accessible Palette to create a color system with consistent lightness and WCAG contrast?

Use Accessible Palette to build a ramp where every step has a deliberate lightness value, then read the WCAG contrast numbers next to each step to decide which steps can sit together for text and backgrounds.

How the workflow fits together

  1. Set a starting color using L, C and H (CIELAB/LCh) rather than HSL. The page explicitly warns against HSL for color systems because equal HSL lightness steps don't produce equal perceived lightness.
  2. Add more starting colors to create parallel ramps (the page shows red/pink, yellow, green and blue examples).
  3. Use the "Shift color range Hue" control to move a whole ramp's hue while keeping the same lightness structure.
  4. Read the two contrast columns for each step. The page shows WCAG 2 values alongside a second set of numbers (labelled WCAG 3 in the page evidence) so you can see how a step performs under both.

Reading the numbers

The page's example ramps run from a very light step (around L 98) down to a dark step (around L 23.5), with contrast rising as lightness drops. In that example the light steps sit near 1:1 against white, mid steps land around 3.4, and the darkest steps reach roughly 11.7. The practical takeaway: pick your step by the contrast requirement, not by how the color "looks" on screen.

Task Rough contrast target Which end of the ramp
Body text on white 4.5:1 or higher Darker steps
Large text or UI borders 3:1 or higher Mid-to-dark steps
Subtle backgrounds, dividers Low contrast is fine Lightest steps

A concrete scenario

Suppose you're building a design system for a dashboard. You define a green ramp with 10 steps. You use step 700 for primary text on white because it clears 4.5:1, step 300 for a chart fill that only needs to be distinguishable from white, and step 100 for a card background. Because all steps share the same hue and a controlled lightness progression, the UI looks intentional rather than like ten unrelated greens.

Decision criteria

  • If you need guaranteed text contrast, choose steps whose WCAG 2 value is at or above your target (4.5:1 for normal text, 3:1 for large text).
  • If you need a ramp that survives hue changes, keep the L values fixed and only shift H.
  • If a step's contrast is borderline, move one step darker rather than tweaking the hex by hand — that preserves the system's consistency.

Next step

Open the tool, add one starting color, note the L value of each generated step, and mark which steps hit 3:1 and 4.5:1. Those two thresholds become your documented "text" and "UI" tokens. For background reading on why perceptual color spaces matter here, see W3C guidance on contrast, and for a broader palette-building reference you can compare with Coolors.

Why should I stop using HSL for color systems, and how does CIELAB/LCh solve that problem?

HSL is easy to type but bad at predicting how colors actually look. In HSL, a "50% lightness" yellow and a "50% lightness" blue can have wildly different perceived brightness—so a scale generated in HSL often looks uneven, and its contrast ratios jump around unpredictably.

Accessible Palette's page makes this argument directly with a heading: "Stop using HSL for color systems!" and then demonstrates the alternative.

What HSL gets wrong

  • Lightness isn't perceptual. HSL's L is a mathematical coordinate, not a measure of how bright the color appears to the eye. Yellow at L=50% looks much lighter than blue at L=50%.
  • Contrast is unpredictable. Because perceived brightness varies by hue, a set of HSL stops at even intervals won't produce even WCAG contrast steps.
  • Hue drifts. Changing lightness in HSL can shift the apparent hue and saturation, so a "red" ramp may look orange in the middle and muddy at the dark end.

How CIELAB and LCh fix it

CIELAB is designed so that equal numeric steps correspond roughly to equal perceived differences. LCh is the same space expressed as Lightness, Chroma, Hue—a cylindrical form that maps neatly onto how designers think about color ramps.

  • Lightness (L) becomes a genuine perceptual scale, so a 10-step ramp from light to dark feels evenly spaced.
  • Chroma (C) controls vividness independently of lightness, so you can keep saturation consistent across a ramp.
  • Hue (H) stays stable as you move up and down the scale, avoiding the drift HSL introduces.

The practical payoff

The page shows its own ramps—red, yellow, green, blue—with each stop labeled by both CIELAB values and WCAG 2 / WCAG 3 contrast figures. In the red ramp, the stops run from L: 98.2 down to L: 23.55, with WCAG 2 contrast climbing from 1 to 11.7 and WCAG 3 from 0 to 96. Because L is perceptual, that progression is smooth and the contrast numbers rise in a consistent pattern rather than lurching.

That's the core benefit: you can pick a target contrast level and land on a stop that reliably hits it, instead of guessing and testing.

A concrete scenario

Say you're building a design system and need a red that works as body text on white (WCAG 2 contrast ≥ 4.5). In an HSL ramp you'd generate stops, then check each one manually and probably nudge several. In an LCh ramp, the stop at L: 47.6 already sits at WCAG 2 contrast 4.8–4.9—you can read the number off the scale and move on.

Next step

Open the tool, set a starting color, and compare its LCh ramp against an HSL ramp of the same hue. Watch how the contrast column behaves: even steps in LCh, erratic steps in HSL. If you want a broader reference on perceptual color spaces, Wikipedia covers CIELAB's history and limitations, including where it still isn't perfectly uniform.

How do I shift the hue of an entire color range while keeping lightness and contrast ratios intact?

You can do this in Accessible Palette by keeping the L (lightness) column fixed and changing only H (hue), since its color system is built on CIELAB/LCh rather than HSL. The page's own heading "Shift color range Hue" points to exactly this workflow, and its sample swatches confirm the pattern: every step in a range shares the same L value, so contrast ratios stay stable while hue rotates.

The practical method

  1. Pick your starting color and note its L, C and H values.
  2. For each step in the range, hold L constant and change H to the target hue.
  3. Adjust C (chroma) separately if the new hue looks dull or oversaturated — chroma affects vividness, not lightness.
  4. Re-read the WCAG 2 and WCAG 3 values shown next to each swatch to confirm nothing crossed a threshold you care about.

In the example data, the red range runs from L 98.2 down to L 23.55, and the yellow, green and blue ranges repeat those identical L values. That is why the WCAG 2 column reads 1, 1.1, 1.4, 1.8, 2.4, 3.4, 4.8/4.9, 6.3, 8.5, 11.7 across all four hues. Hue rotation alone does not move those numbers.

Where it gets less clean

Chroma is the catch. At the same L, some hues simply cannot reach the same saturation — yellow holds high C at light steps, blue drops off sharply (the blue range falls from C 33.8 to around 41 at mid steps while red sits near 56–59). If you force identical C across hues, you get clipping or muddy results. Decide which matters more:

Priority What to hold constant Trade-off
Predictable contrast L only Some hues look weaker or flatter
Visual consistency L and C Possible out-of-gamut colors
Brand fidelity H and C Contrast ratios shift between steps

A concrete scenario

A design team has a ten-step red scale and needs a matching green scale for a status system. They keep the L values, rotate hue to roughly 140, then nudge C down at the light end where green clips. The 600 step stays near 4.8:1 for body text on white, so their text tokens keep working. A designer using WebAIM's contrast checker can verify the final hex values independently.

Next step

Load your existing palette into Accessible Palette, note the L values of your current range, then generate the new hue at those same L values. Compare the WCAG columns side by side before committing — if a step lands just under 4.5:1, move one step darker rather than tweaking the hue.

What do the WCAG 2 and WCAG 3 numbers next to each color stop mean, and which ones meet AA or AAA?

The two numbers next to each color stop are contrast ratios, not color values. They tell you how that stop would perform if its color were used as text or as a background against a reference color (typically white or black, depending on the tool's setup).

  • WCAG 2 is the contrast ratio under the older WCAG 2.x formula, which uses relative luminance. Ratios run from 1:1 (no contrast) up to 21:1 (black on white).
  • WCAG 3 is the contrast value under the newer APCA-based approach. It uses a different scale (roughly 0–106 in the example data) and accounts for how light or dark text actually appears, so it doesn't map directly onto the 1–21 ratio.

In the example palette, the stops line up so that the same lightness level produces a similar contrast relationship across hues. For instance, stop 500 shows WCAG 2 around 3.4 and WCAG 3 around 61, while stop 900 shows WCAG 2 around 11.7 and WCAG 3 around 96.

Which stops meet AA or AAA

For normal-size text under WCAG 2.x:

  • AA (4.5:1) is met from roughly stop 600 upward (600 shows about 4.8–4.9, 700 about 6.3, 800 about 8.5, 900 about 11.7).
  • AAA (7:1) is met from roughly stop 800 upward (800 about 8.5, 900 about 11.7). Stop 700 at about 6.3 falls short of AAA for normal text.
  • AA for large text (3:1) is met from about stop 500 upward.

For the WCAG 3 column, there is no simple "AA/AAA" label because WCAG 3 is still a draft with its own scoring model. As a practical rule, higher numbers mean better legibility, and the values rise steadily as the stops get darker.

A useful next step: pick the text size you actually need. If you're setting body copy, start at stop 600 or darker for AA and 800 or darker for AAA. If you're setting large headings or non-text UI, stop 500 may be enough. Then check the specific foreground/background pair you'll ship, because a stop's ratio depends on what it sits against.

Can I start from an existing brand color and generate a full accessible palette from it?

Yes. Accessible Palette is built around exactly that workflow: you enter a starting color and it builds an 11-step scale (50–900) where lightness changes in even steps and each step shows its WCAG contrast value.

H3 How the starting-color workflow works The page opens with "Set starting colors," where you define a color using L, C and H values in the CIELAB/LCh model rather than HSL. From that seed, the tool generates a ramp from a very light tint (around L 98) down to a very dark shade (around L 23.5). Each step carries its own contrast figure — for example, in the red ramp shown on the page, step 600 reports roughly 4.8–4.9 for WCAG 2 and 73 for WCAG 3, while step 900 reaches 11.7 and 96.

H3 Why that matters for an existing brand color If your brand color sits at a specific lightness, you can anchor it near the step that matches and let the rest of the scale fill in around it. Because lightness is controlled separately from hue and chroma, the hue stays recognisably "your" color across the whole ramp instead of drifting as HSL tends to do. The page makes this argument directly with its section "Stop using HSL for color systems!"

H3 Practical things to watch

  • Your brand color may not land exactly on a generated step; you may need to nudge its L, C or H slightly, which can mean a small shift from the original brand spec.
  • Contrast values are listed per step, so you still have to decide which step is safe for body text versus large text versus UI borders.
  • Highly saturated brand colors often need chroma reduced at the light and dark ends to stay usable.

H3 A quick decision test Take your brand hex, convert it to LCh, and see which generated step is closest in lightness. If the nearby steps keep a hue you'd accept in a UI, this approach will work for you. If the brand color is very vivid, expect to trade some saturation for a ramp that stays legible at both ends.

For a second opinion on how the resulting steps behave in real interfaces, compare against a general contrast checker such as WebAIM.

Related questions

More questions →
What is Accessible Palette?

Accessible Palette is a browser-based tool for building color systems using the CIELAB and LCh color models instead of HSL. It generates color scales with consistent lightness steps and shows the WCAG contrast ratio for each step, so you can pick colors that meet accessibility targets before you write any CSS. It's useful if you're defining a design system palette and need predictable contrast across light and dark shades.

What problem it solves

HSL is convenient but perceptually uneven: two colors with the same L value can look very different in brightness, and a lightness ramp built in HSL often produces steps that jump in contrast. Accessible Palette works in CIELAB/LCh, where lightness is designed to track human perception more closely, so a ramp from 50 to 900 stays visually even.

The tool's own framing is blunt about this: one of its section headings is "Stop using HSL for color systems!"

How the tool is organized

The interface has three working areas:

  • Set starting colors — you enter colors as L, C, H values in CIELAB or LCh, or add a color and let the tool derive the ramp.
  • Lightness & WCAG Contrast — a numbered scale (50 through 900) where each step shows its L value, hex code, and both WCAG 2 and WCAG 3 contrast numbers.
  • Shift color range Hue — adjust the hue across the ramp.

Reading the contrast output

Each step in the scale reports two contrast figures. From the published example data:

Step WCAG 2 WCAG 3
50 1 0
100 1.1 7
300 1.8 35
500 3.4 61
600 4.8–4.9 73
700 6.3 81
900 11.7 96

The practical takeaway: steps 600 and 700 land near the WCAG 2 thresholds you'd normally care about (4.5:1 for normal text, 3:1 for large text and UI components), while 800 and 900 give you high-contrast options for text on light backgrounds. The WCAG 3 column uses a different scale (roughly 0–100), so don't compare the two columns directly.

What the L, C, H values mean

Each swatch is defined by three numbers:

  • L (lightness) — runs from about 98 at step 50 down to about 23.5 at step 900 in the sample ramps.
  • C (chroma) — saturation-like intensity; it typically peaks in the mid-range and drops at both ends so very light and very dark colors don't look muddy.
  • H (hue) — the color angle, held roughly constant across a ramp (for example, the red ramp stays near H 32–35).

Because L is fixed per step across every hue, a red 500 and a blue 500 share the same lightness — which is what makes multi-hue systems feel balanced.

When to use it

Use Accessible Palette when you need a full tint/shade scale per brand color and want contrast compliance built in from the start. It's less suited to one-off color picking — for a single button color, a contrast checker is faster.

A reasonable workflow: pick your brand hue, generate the ramp, then assign steps to roles (background, surface, border, text) based on the contrast numbers rather than by eye. Verify the final pairings in your actual UI, since contrast depends on the specific foreground/background combination, not the swatch alone.

What are CIELAB and LCh color models in Accessible Palette?

Accessible Palette uses CIELAB and LCh as the underlying color models for building color systems with consistent lightness and WCAG contrast ratios. CIELAB is a perceptually uniform color space where L represents lightness, and a and b represent the two chroma axes (green–red and blue–yellow). LCh is the cylindrical representation of the same space: L for lightness, C for chroma, and H for hue. In Accessible Palette, each color stop is defined by L, C, and H values, and the tool maps those values to hex codes and WCAG 2 / WCAG 3 contrast scores.

CIELAB vs. LCh: the same data, two shapes

CIELAB and LCh describe the same colors; they just use different coordinate systems.

Model Coordinates Best for
CIELAB L (lightness), a (green–red axis), b (blue–yellow axis) Precise numeric work, color difference math
LCh L (lightness), C (chroma/saturation), H (hue angle) Intuitive adjustment of hue and saturation

Because LCh is CIELAB converted to polar coordinates, changing H rotates the hue without touching lightness, and changing C adjusts saturation without shifting hue. That independence is what makes LCh practical for generating a color ramp.

Why Accessible Palette uses these models

The page's section heading "Stop using HSL for color systems!" points to the core problem: HSL's lightness value does not match perceived lightness. Two HSL colors with the same L can look very different in brightness, so a ramp built in HSL produces uneven steps and unpredictable contrast.

CIELAB and LCh are designed to be perceptually uniform, so equal steps in L look like equal steps in brightness. Accessible Palette exploits this by holding L constant across a ramp while varying C and H, which is why the generated stops show a smooth, predictable progression of WCAG contrast values.

Reading the L, C, H values in Accessible Palette

Each swatch in the tool displays its L, C, H coordinates alongside the hex code and contrast scores. For example, from the page's red ramp:

  • L: 98.2 C: 2.4 H: 19.5 → #FFF8F8, WCAG 2: 1, WCAG 3: 0
  • L: 57.8 C: 59.1 H: 35.2 → #E26352, WCAG 2: 3.4, WCAG 3: 61
  • L: 23.55 C: 28.3 H: 33.2 → #5D2822, WCAG 2: 11.7, WCAG 3: 96

Notice that H stays near 33–35 across the entire red ramp. Only L and C change. That is the LCh model at work: hue is held constant so the ramp stays recognizably "red" from the lightest tint to the darkest shade.

The same pattern appears in the yellow ramp (H ≈ 80–96), the green ramp (H ≈ 140–145), and the blue ramp (H ≈ 230–256). Each ramp keeps its hue angle stable while L drops from ~98 to ~23 and C rises then falls.

How L maps to WCAG contrast

The tool pairs each L value with contrast scores, which makes the relationship between perceptual lightness and accessibility measurable. From the page's data:

Stop L WCAG 2 WCAG 3
50 98.2 1 0
100 93.95 1.1 7
200 85.1 1.4 22
300 76.5 1.8 35
400 67.65 2.4 48
500 57.8 3.4 61
600 47.6 4.8–4.9 73
700 40.4 6.3 81
800 32.4 8.5 88–89
900 23.55 11.7 96

Two things stand out. First, WCAG 2 contrast crosses the common 4.5:1 threshold around stop 600 (L ≈ 47.6). Second, WCAG 3 scores rise much faster at the light end — stop 100 already scores 7 — because the WCAG 3 model weights lightness differently. This is why the tool shows both: a palette that passes WCAG 2 at a given stop may score very differently under WCAG 3.

Practical implications for building a palette

  • Hold H constant to keep a ramp on-hue. If you shift H while changing L, the ramp drifts toward a neighboring color.
  • Use L to target contrast. If you need a 4.5:1 text color on white, pick a stop with L around 47–48 or lower.
  • Adjust C to control vividness without affecting contrast, since chroma does not change the L value that drives the contrast score.
  • Don't assume HSL L equals CIELAB L. A color that looks "50% lightness" in HSL may sit at a very different CIELAB L, which is why the tool's contrast predictions differ from what you'd get from an HSL-based generator.

In short, CIELAB gives Accessible Palette a perceptually uniform numeric space, and LCh gives it an intuitive handle (L, C, H) for building ramps where lightness — and therefore contrast — changes in a controlled, predictable way.

Why does Accessible Palette say "Stop using HSL for color systems!"

HSL is a convenient way to describe a color, but it is a poor coordinate system for building a color system. Accessible Palette's warning comes down to one property: HSL is not perceptually uniform. When you move the L slider in HSL, the color does not get uniformly lighter or darker to the human eye, and its hue and saturation appear to shift along the way. That makes it hard to produce a ramp of colors with predictable, evenly spaced contrast — exactly what you need for accessible UI palettes. Accessible Palette instead builds ramps in CIELAB and LCh, which are designed to be perceptually uniform.

The core problem: HSL's "L" is not perceived lightness

In HSL, L is a mathematical lightness value, not a measure of how light a color looks. Two colors with the same HSL L can look very different in brightness, and a single hue at a fixed saturation will not step evenly through perceived lightness as you change L.

A few consequences:

  • Hue drift. As you raise or lower L in HSL, the apparent hue of a color can shift. A "blue" ramp built in HSL may look purple at the dark end and cyan at the light end.
  • Saturation distortion. Perceived saturation changes as L changes, so a ramp that looks evenly saturated in HSL terms does not look evenly saturated to the eye.
  • Uneven contrast steps. Because perceived lightness does not track HSL L linearly, the WCAG contrast ratios between adjacent steps come out irregular — some steps jump, others barely move.

Why this breaks accessible color systems

An accessible color system usually needs a ramp like 50, 100, 200 … 900 where each step is a predictable distance from the next, and where specific steps hit specific contrast targets against a background. If your underlying space is not perceptually uniform, you end up hand-tuning every swatch: nudging hue, correcting saturation, and re-checking contrast ratios one by one. The system stops being systematic.

Accessible Palette's own example ramps show what a uniform space buys you. In its red ramp, the steps are labeled with both CIELAB lightness and WCAG contrast:

Step CIELAB L WCAG 2 contrast Hex
50 98.2 1 #FFF8F8
100 93.95 1.1 #FFE9E6
200 85.1 1.4 #FFC8C0
300 76.5 1.8 #FEA69A
400 67.65 2.4 #FE7F6E
500 57.8 3.4 #E26352
600 47.6 4.8 #B85143
700 40.4 6.3 #9C4438
800 32.4 8.5 #7D372D
900 23.55 11.7 #5D2822

Notice how lightness decreases in even perceptual increments while contrast rises in a controlled way — the 600 step lands at roughly 4.8, near the WCAG AA threshold for normal text. That kind of alignment is what you are trying to engineer, and it is much easier when the color space itself behaves uniformly.

What CIELAB and LCh give you instead

CIELAB (and its cylindrical form, LCh) are based on how humans actually perceive color differences:

  • L* is perceptual lightness, so equal steps in L* look like equal steps in brightness.
  • C* is chroma (colorfulness) and h is hue angle, so you can hold hue steady while adjusting lightness and chroma independently.
  • Because the space is perceptually uniform, a ramp built along L* produces more even contrast spacing, making WCAG targets easier to hit deliberately rather than by trial and error.

Accessible Palette exposes exactly these controls — L, C, and H in CIELAB/LCh — and reports the WCAG 2 and WCAG 3 contrast values for each generated step, so you can see the contrast consequences of your lightness choices as you build.

Practical takeaway

  • Use HSL for quick one-off colors or CSS tweaks where perceptual accuracy does not matter.
  • Do not use HSL to generate a multi-step palette if you care about consistent perceived lightness or predictable WCAG contrast.
  • Build ramps in a perceptually uniform space (CIELAB/LCh) so lightness steps are even and contrast targets are reachable by design.
  • Verify the result against WCAG contrast ratios at the specific steps you will use for text and UI elements.
How Accessible Palette Helps You Meet WCAG Contrast Requirements

Accessible Palette helps with WCAG contrast by building color scales in CIELAB and LCh instead of HSL, then showing the WCAG 2 and WCAG 3 contrast value next to every step of the scale. You pick a starting color, and the tool generates a ramp from 50 to 900 where each step has a defined lightness, so you can see at a glance which steps clear a given contrast threshold against white or black. This is useful if you are defining a design system palette and need text, borders, or backgrounds to pass WCAG checks without testing each color by hand.

What Accessible Palette actually does

The tool's stated purpose is to "create color systems with consistent lightness and contrast" using the CIELAB and LCh color models. Its interface starts with Set starting colors, where each color is defined by three values:

  • L — lightness
  • C — chroma (color intensity)
  • H — hue

You can add multiple starting colors, and the tool expands each into a numbered scale (50, 100, 200 … 900). Alongside each step it prints the hex value plus two contrast readings: WCAG 2 and WCAG 3.

How the contrast values are presented

Each step in a generated scale carries its own contrast number. Using the red starting color from the site's example, the scale reads:

Step Hex WCAG 2 WCAG 3
50 #FFF8F8 1 0
100 #FFE9E6 1.1 7
200 #FFC8C0 1.4 22
300 #FEA69A 1.8 35
400 #FE7F6E 2.4 48
500 #E26352 3.4 61
600 #B85143 4.8 73
700 #9C4438 6.3 81
800 #7D372D 8.5 88
900 #5D2822 11.7 96

Two things are worth noticing here:

  • The WCAG 2 column is the familiar ratio used by WCAG 2.x success criteria (for example, 4.5:1 for normal text). In this scale, step 600 reaches 4.8 and step 700 reaches 6.3 — so those are the steps that clear the common 4.5:1 threshold against white.
  • The WCAG 3 column uses a different scale (0–100), reflecting the newer contrast method rather than the 2.x ratio. Values like 61, 73, and 81 are not ratios and should not be read as such.

The same pattern holds across the other example hues (yellow, green, blue): contrast rises as the step number increases, because lightness decreases.

Why the color model matters for contrast control

The site's heading "Stop using HSL for color systems!" points at the core problem. HSL lightness is not perceptually uniform — two colors with the same HSL lightness can look very different in brightness, so a scale built in HSL does not produce even contrast steps.

CIELAB and LCh are designed to be perceptually uniform. In practice this means:

  • A fixed L value corresponds to roughly the same perceived lightness across different hues.
  • Changing H (hue) while holding L and C keeps the color at a comparable lightness, so contrast stays predictable.
  • You can therefore target a contrast level by choosing a lightness step, rather than guessing and re-testing.

The tool exposes this directly: the Shift color range Hue control lets you rotate hue while the lightness structure of the scale is preserved.

How to use it for a WCAG-compliant palette

  1. Add a starting color by setting its L, C, and H values (or by adding a color and adjusting from there).
  2. Let the tool generate the 50–900 scale. Each step gets a fixed lightness, so the ramp is even.
  3. Read the WCAG 2 column to find which steps meet your target ratio. For normal body text against white, look for steps at or above 4.5; for large text or non-text UI, the lower thresholds apply.
  4. Check the WCAG 3 column if you are working toward the newer standard, remembering it is a 0–100 score, not a ratio.
  5. Adjust hue with the Shift color range Hue control if you need a different color family, then re-read the contrast values — the lightness structure, and therefore the contrast pattern, stays consistent.

What to keep in mind

  • The contrast values shown are for the color against a reference (the example values align with white/light backgrounds). Contrast is always a relationship between two colors, so verify the actual foreground/background pair you ship.
  • WCAG 2 and WCAG 3 numbers are not interchangeable. A "73" in the WCAG 3 column is not "73:1."
  • The tool is a palette builder, not a full accessibility audit. It gives you contrast-aware color steps; you still apply them to real text sizes and UI states.

If your goal is a design system where every step has a known, even contrast relationship, building the scale in CIELAB/LCh and reading the per-step WCAG values is the workflow Accessible Palette is built around.

How to Create a Color System with Consistent Lightness and WCAG Contrast Using Accessible Palette

Accessible Palette builds color scales in the CIELAB and LCh color models instead of HSL, so each step from 50 to 900 keeps a predictable lightness and reports its WCAG 2 and WCAG 3 contrast values. Use it when you need a design-system palette where text and background pairings can be checked against accessibility targets rather than eyeballed. You set one or more starting colors by their L, C, and H values, and the tool generates the full ramp with contrast numbers attached to every step.

What the tool actually produces

The output is a set of numbered stops (50, 100, 200 … 900) for each starting color. Every stop carries three pieces of data:

  • L, C, H — the CIELAB/LCh coordinates used to generate that step
  • Hex value — the color you copy into your design tokens
  • WCAG 2 and WCAG 3 contrast ratios — measured against a reference, so you can see at a glance which steps are usable for text

From the page evidence, a red-family ramp runs like this:

Stop Hex WCAG 2 WCAG 3
50 #FFF8F8 1 0
100 #FFE9E6 1.1 7
200 #FFC8C0 1.4 22
300 #FEA69A 1.8 35
400 #FE7F6E 2.4 48
500 #E26352 3.4 61
600 #B85143 4.8 73
700 #9C4438 6.3 81
800 #7D372D 8.5 88
900 #5D2822 11.7 96

The pattern repeats across the yellow, green, and blue ramps shown on the page: lightness decreases steadily as the stop number rises, and contrast increases with it. That consistency is the point — stop 600 lands near the 4.5:1 threshold in the red, yellow, and green examples, which is the WCAG 2 AA minimum for normal text.

Step-by-step: building a ramp

  1. Set a starting color. Enter its L, C, and H values in the CIELAB/LCh fields. If you already have a brand hex, you'll need its Lab/LCh equivalent first — the tool works in these models, not in RGB or HSL.
  2. Add the color to the system. You can add multiple starting colors to build a multi-hue palette side by side.
  3. Read the generated scale. The tool fills in stops 50 through 900 with hex values and both WCAG columns.
  4. Adjust the hue range if needed. The "Shift color range Hue" control lets you nudge the hue across the ramp, so you can warm or cool the darker stops without breaking the lightness progression.
  5. Pick your pairings. Match a light stop as background against a dark stop as text, and use the WCAG column to confirm the ratio clears your target (4.5:1 for normal text, 3:1 for large text under WCAG 2 AA).

Reading the two WCAG columns

The page shows both WCAG 2 and WCAG 3 numbers for every stop, and they don't move in lockstep. In the red ramp, stop 100 reads 1.1 under WCAG 2 but 7 under WCAG 3; stop 900 reads 11.7 and 96. The two scales use different formulas, so a color that fails one target may pass the other. Decide which standard your project must meet before you select stops, and read the matching column.

A practical rule from the data: if you need WCAG 2 AA for body text, stops 600 and darker are where the red, yellow, and green ramps cross 4.5:1. Blue behaves differently — the excerpt cuts off mid-ramp, so verify the blue column yourself rather than assuming it matches.

Why the tool avoids HSL

The page's own heading is blunt: "Stop using HSL for color systems!" The reason is that HSL lightness is not perceptual lightness. Two HSL colors with the same L value can look very different in brightness, so an HSL-generated ramp produces uneven steps and unpredictable contrast. CIELAB and LCh are designed around human perception, which is why the Accessible Palette ramps hold a steady visual progression and why the contrast numbers climb in an orderly way.

Common snags

  • You have hex, not LCh. Convert first. The tool's inputs are L, C, and H, so a raw hex code won't go straight in.
  • Assuming one stop fits all text sizes. A stop at 4.8:1 passes AA for normal text but you may want more headroom for small or thin type.
  • Treating the two WCAG columns as interchangeable. They aren't — check which one your accessibility requirement references.
  • Forgetting the hue shift affects the whole ramp. Changing hue moves every stop, so re-check your chosen pairings afterward.

When this workflow fits

Use Accessible Palette when you're defining a design-system palette from scratch and accessibility contrast is a hard requirement, or when you need to prove that your color steps are perceptually even. If you only need a handful of one-off accessible color pairs, a contrast checker alone may be faster. If your brand colors are fixed and you can't move them in LCh space, the tool will show you which pairings pass but won't rescue a palette that has no accessible combinations.

Website Overview

Several search or sharing settings need attention. Together they may make snippets, preview images or preferred URLs less consistent across platforms.

Domain and Registration

Transfer-protection status is present, helping reduce the risk of unauthorized domain transfers. The domain has about 5 years of registration history; its current configuration provides more context than age alone. The registrar is Tucows Domains Inc., a widely used domain service provider. The domain uses the common .com extension, which is not an independent safety signal.

DNS and Email

Nameservers are provided by NS1, indicating managed DNS hosting. No CNAME was found; the observed records resolve directly to addresses. No MX record was found. A conventional explicit inbound-mail route is not configured. DNSSEC signatures were not detected, so this additional DNS authenticity protection is not confirmed. The lowest observed DNS TTL is 120 seconds.

TLS and Certificates

The public key uses EC with 256 bits. The server supplied a complete certificate chain. No organization name is present in the certificate; the available fields are consistent with domain validation. The certificate was issued by Let's Encrypt, commonly associated with automated certificate services. The certificate's total validity is about 89 days, consistent with a short renewal cycle.

HTTP and Browser Security

The response lacks these common security headers: CSP, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, clickjacking protection. No X-Powered-By header was found, reducing one common source of backend fingerprinting information. No obvious internal addresses or debug information were found in the headers. The Server header contains the custom value Netlify. No explicit CDN or WAF marker was found in the response headers.

Technology Stack Analysis

The public page identifies SvelteKit, Google Analytics, Netlify without precise versions, leaving fewer clues for version-specific scanning.

Search and Social Sharing

The title has 79 characters and may be truncated in search results. No homepage canonical URL was detected. If duplicate URLs exist, consolidation may be less explicit. No Open Graph metadata was detected, so social previews may depend on platform inference. Twitter Card metadata is configured. A meta description is present, with 107 characters.

Hosting and Email

DNSNS1
HostingNetlify
EmailUnknown
Approximate IP geolocation (inferred; a CDN or proxy may differ from the origin server) United States flagAshburn, Virginia, United States Inferred 18.208.88.157

Registration details

RDAP / WHOIS

RegistrarTucows Domains Inc.
Registered2021-07-30
Expires2027-07-30
Domain statusclient transfer prohibited、client update prohibited
Nameserversdns1.p05.nsone.net、dns2.p05.nsone.net、dns3.p05.nsone.net、dns4.p05.nsone.net
DNSSECunsigned

DNS records

DNS

TypeNameValueTTLPriority
Aaccessiblepalette.com18.208.88.157120—
Aaccessiblepalette.com98.84.224.111120—
NSaccessiblepalette.comdns1.p05.nsone.net3600—
NSaccessiblepalette.comdns2.p05.nsone.net3600—
NSaccessiblepalette.comdns3.p05.nsone.net3600—
NSaccessiblepalette.comdns4.p05.nsone.net3600—

TLS and certificates

TLS / SSL

AssessmentNormal configuration
Supported protocolsTLSv1.2、TLSv1.3
Negotiated protocolTLSv1.3
Certificate subjectaccessiblepalette.com
IssuerLet's Encrypt
Valid until2026-11-21T12:07 · Remaining when checked: 50 days
Verification detailsCertificate trust: Passed · Hostname match: Passed

HTTP response headers

HTTP

HeaderValue
content-typetext/html
cache-controlno-cache
serverNetlify
strict-transport-securitymax-age=31536000

Identified technologies

SvelteKitGoogle AnalyticsNetlify

Pages, Search and Sharing

Meta descriptionUse CIELAB and LCh color models to create color systems with consistent lightness and WCAG contrast ratios.
Canonical URLNot detected
LanguageEnglish (default)
Twitter Cardsummary_large_image

No robots.txt found

No sitemaps found

User reviews (0)

  • No reviews yet.