Le rapport n’est ni la différence entre deux nombres hexadécimaux ni une moyenne simple du rouge, vert et bleu. WCAG applique une fonction sRGB et des poids de luminance avant de comparer clair et sombre. Ces étapes rendent les limites reproductibles.

Développez et normalisez les trois canaux

#ABC devient #AABBCC. Chaque canal de deux chiffres devient un entier de 0 à 255 puis est divisé par 255, produisant une valeur sRGB codée entre 0 et 1. ContrastCheck accepte seulement trois ou six chiffres opaques : alpha, noms CSS et conversions ne s’introduisent pas silencieusement.

Convertissez le sRGB codé en lumière linéaire

Si un canal normalisé vaut au plus 0.04045, divisez-le par 12.92. Au-dessus, ajoutez 0.055, divisez par 1.055 puis élevez à 2.4. La luminance vaut 0.2126 rouge linéaire plus 0.7152 vert plus 0.0722 bleu. Le vert pèse davantage : des changements numériques égaux n’ont pas le même effet.

Comparez les luminances claire et sombre

L1 est la plus grande luminance et L2 la plus petite. Le rapport vaut (L1 + 0.05) / (L2 + 0.05) : inverser les couleurs ne change pas sa grandeur, comprise entre 1:1 et 21:1. ContrastCheck décide avec la valeur brute et tronque seulement l’affichage à deux décimales, sans afficher 4.50 si le résultat réel reste sous 4.5.