Comparing and morphing palettes
ΔE: how different are two colors, really?
Two HEX values can differ numerically and still look identical — or differ by one digit and flip a brand color. ΔE (CIEDE2000) measures perceived difference: below 1, no human can tell the colors apart; 2–3 is just noticeable side by side; above 10 they read as different colors. Palette diff scores every slot of palette A against palette B so you can see whether a rebrand actually moved, and where.
Morphing: the path between two palettes
Morphing pairs each slot of palette A with palette B and interpolates in OKLCH along the shortest hue path. That matters during migrations: the midpoint frames are the intermediate themes your users would see if you animated a theme switch, and they are also candidate palettes in their own right — a 40% morph often lands on a softer variant worth keeping. Scrub or play the animation, then export the frame that works as tokens.
Because interpolation happens in OKLCH, lightness stays perceptually even during the morph; in RGB the same transition dips through grey. If a slot pair takes a strange route, the two hues are probably more than 180° apart in effect — swap in a closer intermediate from the picker and morph in two steps.
When to diff a palette
Before and after a redesign (did the palette actually change, or just the names?), when merging two products' design systems, when checking a contractor's delivery against the agreed palette, and when auditing whether a dark theme is a real palette or an inverted afterthought. For single colors rather than palettes, the color library lists nearest named neighbours, and pair-level accessibility belongs in the contrast checker.