Methodology
Every number on this site is computed from a shade's published colour value using standard colour science; this page shows exactly how. The classifications are colour-theory heuristics with fixed thresholds, and every threshold below is printed from the code that applies it.
Where the colour values come from
Each shade in the catalogue carries one published swatch
colour, written as a hex value (#RRGGBB). Everything else is computed from that value in four steps.
- Hex to sRGB. The three hex pairs are the red, green and blue channels, 0–255. Each channel
cis divided by 255 and linearised (IEC 61966-2-1):c ≤ 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055)^2.4. - sRGB to XYZ. The linear channels go through the sRGB matrix for the D65 white point:
X = 0.4124564 R + 0.3575761 G + 0.1804375 B,Y = 0.2126729 R + 0.7151522 G + 0.0721750 B,Z = 0.0193339 R + 0.1191920 G + 0.9503041 B. - XYZ to CIELAB (D65). With the reference white
Xn = 0.95047,Yn = 1,Zn = 1.08883andf(t) = t^(1/3)whent > 216/24389, otherwise(24389/27 · t + 16) / 116:L* = 116 f(Y/Yn) − 16,a* = 500 (f(X/Xn) − f(Y/Yn)),b* = 200 (f(Y/Yn) − f(Z/Zn)). L* is lightness, 0 (black) to 100 (white). - CIELAB to LCh. Chroma
C* = √(a*² + b*²)is how far the colour is from grey; the hue angleh = atan2(b*, a*), in degrees from 0° to under 360°, is its direction: 0° points to magenta-red, 90° to yellow, 180° to green, 270° to blue.
Published values are rounded to two decimals. The undertone, depth, colour family and saturation are read from L*, C* and h with the rules below.
Worked example: Dior 999, hex #BE030E, is sRGB 190, 3, 14; L* 39.66, a* 64.02, b* 48.85; C* 80.53, h 37.34°. That makes it a neutral-toned red in the medium-deep range, vivid.
Undertone
A lipstick's undertone is read from its hue angle: hues on the blue side of
red are cool, true reds are neutral, and hues on the orange side are warm. Ranges written [a, b) include
a and stop just before b.
| Undertone | Hue range | Typical shades |
|---|---|---|
| Cool | h ∈ [290°, 28°) (wraps through 0°) | blue-based reds, pinks, berries and plums |
| Neutral | h ∈ [28°, 38°) | true reds, between blue-based and orange-based |
| Warm | h ∈ [38°, 110°] | orange-based reds, corals, oranges, most nudes and browns |
| Neutral (fallback) | h ∈ (110°, 290°), or C* < 2 | rare greens, blues and near-greys, where a red-family hue does not apply |
More on each: cool undertone, neutral undertone, warm undertone, blue-based red, warm red.
Depth
Depth is read from L* alone. Each band includes its lower edge; the light band also includes its upper edge.
| Depth | L* band |
|---|---|
| Deep | L* < 35 |
| Medium-deep | 35 ≤ L* < 45 |
| Medium | 45 ≤ L* < 58 |
| Light | 58 ≤ L* ≤ 70 |
| Very light | L* > 70 |
Colour family
The colour family comes from hue, chroma and lightness together. The rules run top to bottom and the first one whose conditions all hold wins, so a light blue-red is caught as pink before the red rule is reached.
| Family | Conditions (all must hold) |
|---|---|
| Other | C* < 2 (too grey for a hue angle to mean anything) |
| Nude | C* < 30, L* ≥ 45, h ∈ [15°, 85°] |
| Brown | C* < 38, L* < 45, h ∈ [28°, 85°] (a warm family; deep wines at cooler hues stay red) |
| Mauve | C* < 30, h ∈ [290°, 28°) (wraps through 0°) |
| Pink | C* ≥ 30, L* ≥ 60, h ∈ [15°, 28°) (a light blue-red reads as pink) |
| Coral | C* ≥ 30, L* ≥ 50, h ∈ [28°, 55°) (light warm reds: coral, watermelon, peach) |
| Red | C* ≥ 30, h ∈ [15°, 38°) |
| Orange | C* ≥ 30, h ∈ [38°, 110°] |
| Berry | C* ≥ 30, L* ≤ 48, h ∈ [340°, 15°) (wraps through 0°) |
| Plum | L* ≤ 55, h ∈ [290°, 340°) |
| Pink | L* > 48, h ∈ [290°, 15°) (wraps through 0°) |
| Other | anything not matched above |
Definitions of the families: nude, mauve, berry, plum.
Saturation
Saturation is read from chroma: how strongly coloured the shade is, regardless of hue.
| Saturation | Chroma band |
|---|---|
| Vivid | C* ≥ 38 |
| Muted | 25 ≤ C* < 38 |
| Soft | C* < 25 |
Distance and dupes
The distance between two shades is the CIEDE2000 colour difference, ΔE2000
(Sharma, Wu and Dalal, Color Research and Application, 2005), with the standard weights
kL = kC = kH = 1. It combines the differences in lightness, chroma and hue, weighted to follow how the eye
judges them; lower is closer. A ΔE2000 of about 1 is often treated as the smallest difference visible between two
patches side by side. Distances are printed to one decimal, and each label is taken from the printed value.
| Label | ΔE2000 |
|---|---|
| virtually identical | ΔE ≤ 2.0 |
| near-identical | 2.0 < ΔE ≤ 3.5 |
| very close | 3.5 < ΔE ≤ 5.0 |
| similar | 5.0 < ΔE ≤ 8.0 |
| different: not listed as a match | ΔE > 8.0 |
For every shade the build keeps its 8 nearest shades across the whole catalogue. A close match is one of those from a different brand at ΔE ≤ 5.0; shades from the same brand within the same distance are listed separately. A dupes page is published when a shade has at least 3 close matches. On this site a dupe means the closest colour match only: it says nothing about price, formula, wear or ingredients.
Who it suits
The guidance is colour theory, not a rule about people: anyone can wear any shade. Undertone guidance pairs a shade with the skin undertones it harmonises with.
| Shade | Suits skin undertones |
|---|---|
| Cool-toned shade | cool and neutral |
| Neutral-toned shade | cool, neutral and warm |
| Warm-toned shade | warm and neutral |
Depth guidance is about contrast. Skin-depth hub pages list a shade for the skin depths where its lightness gives a clear, deliberate contrast; medium shades appear on every one.
| Shade | Listed on hubs for |
|---|---|
| Deep shade | medium, tan and deep skin |
| Medium-deep shade | medium, tan and deep skin |
| Medium shade | fair, light, medium, tan and deep skin |
| Light shade | fair, light and medium skin |
| Very light shade | fair, light and medium skin |
A nude must also sit within ±18 L* of the skin depth's representative lightness, because a nude much lighter than the skin reads as concealer and one much deeper reads as a contour line.
| Skin depth | Representative L* |
|---|---|
| Fair skin | 75 |
| Light skin | 65 |
| Medium skin | 55 |
| Tan skin | 45 |
| Deep skin | 32 |
Examples: nude for deep skin, red for fair skin, shades for cool undertones.
Which pages are published
Pages exist only where the data supports them, so no page is a list of one or two shades.
| Shade page | every catalogue shade with a valid hex value |
|---|---|
| Dupes page | at least 3 close matches from other brands |
| Comparison page | pairs drawn from each shade's closest matches, at most 2,500 pages in total |
| Colour family, skin-depth and finish hubs | at least 12 shades qualify |
| Undertone hub | always published |
| Brand page | at least 3 shades in the catalogue |
Limits
- A screen is not skin. A hex value is light from a display whose brightness, calibration and colour profile vary. Lipstick is pigment seen in reflected light, which changes between daylight, indoor bulbs and shade.
- Finish changes how a colour reads. The same hex looks different in each finish, and the colour values do not capture the difference:
- A published swatch value is not the product. Each hex is the shade's published swatch value, not a measurement of the lipstick itself. Formula, batch, the number of layers and the wearer's own lip colour all shift the result; a sheer formula shows the lips through it.
- Boundaries are sharp; colours are not. A shade at a hue of 27° is cool and one at 29° is neutral, though the two look almost the same. Treat a label near a boundary as a lean, not a verdict.
Anchor shades
The thresholds were calibrated against well-known reference shades. Hex values for shades outside the catalogue are approximate and serve only to test the rules; they are not product data. The table shows what the rules compute for each, next to the expected result.
| Shade | Values | Result | Expected |
|---|---|---|---|
| #B61A3A | L* 39.6 C* 64.6 h 21.8° | red, cool | red, cool |
| #E04A2D | L* 52.9 C* 74.6 h 40.4° | coral, warm | red or coral, warm |
| #B07A68 | L* 56.2 C* 26.2 h 44.3° | nude, warm | nude, warm |
| #9E6B62 | L* 50.3 C* 23.4 h 34.7° | nude, neutral | nude, neutral |
| #C2203A | L* 42.5 C* 68.0 h 24.4° | red, cool | red, cool |
| #B97A7A | L* 57.7 C* 26.6 h 22.4° | nude, cool | nude, cool or neutral |
| #BE030E | L* 39.7 C* 80.5 h 37.3° | red, neutral | red, neutral or cool |
Last verified . How we measure.