Free color tools · No signup · Everything runs in your browser
Benchmark methodology · v1.0.0

Scale Generation Protocol v1.0

The exact inputs, weights, algorithms, measurement rules, precision, and interpretation limits behind the Tailwind Scale Accessibility Benchmark.

Last updated: July 22, 2026

Frozen version contract

Every public result names independent versions so a correction to one layer does not silently redefine another.

LayerVersion IDControls
Protocolscale-generation-protocol-1.0.0Shade labels, anchor, weights, algorithms, gamut, and final rounding
Corpuscps-stratified-seed-corpus-1.0.0Reference, holdout, and control seed identities
Metricsscale-accessibility-metrics-1.0.0Distance, variation, lightness, hue, gamut, and contrast calculations
Runnercolor-pick-tailwind-runner-1.0.0Execution, progress, manifest, and export behavior

Published v1.0 files are immutable. Any material change produces a new filename and changelog entry.

Seed corpus construction

Primary reference corpus

The primary corpus contains 100 CPS colors from 30 chromatic families. Eligible colors have OKLCH lightness from 0.35 through 0.78 and chroma of at least 0.04. Each family contributes three lightness-spread samples; every third family contributes a fourth.

Holdout corpus

Twenty eligible CPS colors not selected for the reference corpus are sampled across hue-sorted candidates. Holdout results test whether aggregate method ordering transfers to a separate set; they do not change primary statistics.

Synthetic controls

Twelve fixed controls cover sRGB primaries and secondaries, vivid orange and violet, two low-chroma colors, and light and dark neutrals. Controls reveal boundary behavior and are excluded from primary findings.

11-step shade contract

Shade 500 preserves the seed. Lighter shades interpolate toward white; darker shades interpolate toward black. Every method receives the same target and weight.

ShadeTargetInterpolation amountSeed contribution
50white94%6%
100white86%14%
200white70%30%
300white50%50%
400white25%75%
500seed0%100%
600black12%88%
700black26%74%
800black43%57%
900black60%40%
950black75%25%

These weights are a Color Pick research fixture. They do not claim to reproduce Tailwind CSS palette-generation internals.

Interpolation algorithms

HSL

Convert the seed from sRGB to HSL. Keep its hue fixed, then linearly reduce saturation toward zero and move HSL lightness toward 1 for white or 0 for black.

Gamma-encoded sRGB

Linearly interpolate the three normalized, gamma-encoded sRGB channels toward 1 for white or 0 for black.

Linear-sRGB

Decode every sRGB channel with the standard transfer function, interpolate in linear light, then encode the result back to sRGB.

OKLCH

Convert the seed to OKLCH. Keep hue fixed, reduce chroma toward zero, and move OKLCH lightness toward 1 for white or 0 for black. Out-of-sRGB candidates follow the versioned gamut rule below.

The four methods intentionally do not share identical intermediate perceptual behavior. That difference is what the benchmark measures.

sRGB gamut mapping

The output target for v1.0 is sRGB. If an OKLCH candidate falls outside sRGB, the engine performs 26 deterministic binary-search iterations over chroma while preserving its intended OKLCH lightness and hue. The greatest in-gamut chroma found becomes the output candidate.

This is a fixed-chroma-reduction implementation inspired by the constant-lightness and constant-hue direction documented in CSS Color 4. It is not presented as a complete implementation of the CSS local-MINDE, EdgeSeeker, or ray-trace algorithms.

HSL and both sRGB methods interpolate between in-gamut sRGB endpoints and therefore do not require this separate mapping step.

Metric definitions

Adjacent perceptual distance

Convert each final 8-bit HEX output to OKLab. Delta E OK equals 100 multiplied by Euclidean distance across L, a, and b. Ten distances are produced for an 11-shade scale.

Step variation

Calculate the population standard deviation of the ten distances and divide it by their arithmetic mean. This coefficient of variation allows scale-to-scale comparison despite different total path lengths. Lower means more even measured spacing, not better overall design.

Lightness order

Read final OKLCH lightness from shade 50 through 950. An increase greater than 0.0005 counts as a monotonicity violation.

Hue drift

Calculate the shortest circular OKLCH hue distance from the seed for final shades with chroma of at least 0.02. Lower-chroma outputs are excluded because hue becomes unstable and visually weak near the neutral axis.

Gamut-mapped shades

Count OKLCH candidates that were initially outside sRGB and required chroma reduction.

Accessibility evidence

Contrast ratios use WCAG 2.x relative luminance for opaque final sRGB values. Every shade is tested against #FFFFFF and #000000. Values are retained at full calculation precision when compared with 3:1, 4.5:1, or 7:1 thresholds; displayed rounding does not alter pass/fail status.

“Action candidates” are restricted to shades 500, 600, and 700 and count pairings with white or black at 4.5:1. This is only normal-text contrast evidence for an explicit pair. It does not inspect component boundaries, focus area, state changes, disabled controls, typography, opacity, icons, or non-color cues.

Aggregation and rankings

  • Mean, median, and maximum step variation are reported per method.
  • A per-seed uniformity win goes to the method with the lowest frozen-precision coefficient of variation for that seed.
  • Holdout method order is compared with reference method order but does not change the published reference ranking.
  • Worst cases are the maximum observed coefficient of variation for each method, not “bad colors.”
  • No weighted overall score, confidence interval, statistical-significance claim, or universal leaderboard is used in v1.0.

Precision and reproducibility

  • Input: opaque six-digit sRGB HEX.
  • Intermediate arithmetic: JavaScript double-precision floating point.
  • Final color: uppercase six-digit 8-bit sRGB HEX.
  • Measurement source: the emitted HEX, not an unrounded intermediate coordinate.
  • Randomness: none.
  • Reference run date: July 22, 2026.
  • Integrity: SHA-256 hashes are published for datasets, protocol, engine, generator, and citation file.

Regression fixtures freeze complete scales for #2563EB, aggregate results for all 100 reference seeds, exact win counts, variation figures, monotonicity, and checksum behavior.

Interpretation and claim boundaries

  • A more uniform Delta E OK progression is not automatically more attractive, usable, accessible, or brand-appropriate.
  • Changing the mix weights can materially change method rankings.
  • OKLCH gamut mapping is a visible cost, not a hidden implementation detail.
  • Contrast evidence does not constitute WCAG certification or a complete accessibility audit.
  • The 100 CPS seeds are a designed reference corpus, not a random sample of every web or brand color.
  • Tailwind is a trademark of Tailwind Labs. Color Pick is independent and not endorsed by Tailwind Labs.
Keep it colorful

Enjoying Color Pick?

Color Pick stays free, private, and account-free. Optional donations help cover hosting, testing, and new color tools.

Donate via SociabuzzOptional. Every tool remains free.