US-078 — Fiche de jetons & audit de contraste

Lot 0-A · ^^Juliette · 7 palettes botaniques · WCAG 2.1 niveau AA

Ce document n'est pas une maquette d'écran : le sélecteur de thème existe déjà sur les 4 surfaces (US-044 v2). C'est la table de vérité des couleurs — chaque hex ci-dessous est destiné à être recopié tel quel dans shared/src/theme/palettes.ts, KFetPalettes.swift et KFetPalettes.kt.

Travaux : index des maquettes · issue #84 · MR !181 · sources kfet.pdf + kfet_themes.pdf

0Les 6 décisions

Ce qu'il faut retenir si vous n'ouvrez que cette section.
#Décision
1Le problème de contraste n'est pas un problème de thème. 24 des 42 combinaisons « sémantique × palette × fond » échouent en AA — mais l'écart entre la meilleure et la pire palette est de 0,06 point (Alerte : 2,62 → 2,68). Les trois sémantiques ne sont tout simplement pas des couleurs de texte : #d4870a ne passe pas AA même sur blanc (2,89).
2🔴 Le repli proposé dans l'étude — « imposer les badges sur neutral-50 » — ne corrige rien : Alerte sur neutral-50 = 2,77. Toujours KO. Et l'option « un warningOn* par thème » ferait 21 valeurs pour corriger un axe qui varie de 2 %.
3Retenu : 3 encres constantes danger-ink / warning-ink / success-ink. 3 valeurs, zéro par thème, et les 42 combinaisons repassent AA.
4Primaire n'est pas une couleur de texte non plus. Sur Fond, 4 palettes sur 7 échouent (Mangue 2,83 — sous le seuil non-textuel de 3:1). D'où primaryInk, calculé : mix(Primaire, noir, 30 %).
5⚠️ Amendement à la formule de survol de l'étude. mix(primary, black, 12 %) appliqué uniformément casse les 4 palettes à encre sombre (Mangue : 4,69 → 3,71 au survol). Règle corrigée : le survol s'éloigne de primaryContrast.
6« Ylang » n'existe pas — c'est Goyave qui fait foi (§7).
Résultat

Avec les valeurs de cette fiche : 178 contrôles de contraste, 0 échec. Le pire ratio de toute la matrice est 3,40:1 — un contour de champ de saisie, dont le seuil est 3:1.

1Les 7 palettes — jetons thémables

Les 4 colonnes de kfet_themes.pdf sont reprises à l'identique. Les colonnes 5 et 6 sont les livrables de ce lot : primaryContrast (§2) et onDark (§3).
Aa · HIBISCUS
Hibiscus
Collecteur
primary  #b5384e
dark     #3a1218
light    #f8e2e6
bg       #faf3f2
contrast #ffffff
Aa · COROSSOL
Corossol
Marché solidaire
primary  #2f9e6f
dark     #0f2e22
light    #d7f0e4
bg       #eef8f3
contrast #0e291f
Aa · GOYAVE
Goyave
Rôle alterne
primary  #d16a5c
dark     #3a1712
light    #fbe4de
bg       #faf3f0
contrast #371611
Aa · MANGUE
Mangue
Restaurant / Conserverie
primary  #d67e1e
dark     #382709
light    #f9e9cf
bg       #faf6ea
contrast #382709
Aa · VETIVER
Vétiver
Compostage
primary  #77894b
dark     #282c18
light    #ebeed9
bg       #f6f7ee
contrast #16190d
Aa · INDIGO
Indigo
Backoffice / Admin
primary  #3f5f96
dark     #161d31
light    #e1e8f3
bg       #f2f4f9
contrast #ffffff
Aa · BOUGAINVILLIER
Bougainvillier
Rôle alterne
primary  #a53d78
dark     #2f1425
light    #f3e0ec
bg       #f9f2f6
contrast #ffffff
CléThèmeprimarydarklightbgprimaryContrastprimaryInk
HIBISCUSHibiscus#b5384e#3a1218#f8e2e6#faf3f2#ffffff#7f2737
COROSSOLCorossol#2f9e6f#0f2e22#d7f0e4#eef8f3#0e291f#216f4e
GOYAVEGoyave#d16a5c#3a1712#fbe4de#faf3f0#371611#924a40
MANGUEMangue#d67e1e#382709#f9e9cf#faf6ea#382709#965815
VETIVERVétiver#77894b#282c18#ebeed9#f6f7ee#16190d#536034
INDIGOIndigo#3f5f96#161d31#e1e8f3#f2f4f9#ffffff#2c4269
BOUGAINVILLIERBougainvillier#a53d78#2f1425#f3e0ec#f9f2f6#ffffff#742b54

2Livrable 1 — primaryContrast × 7

La couleur du texte et des icônes posés sur Primaire (libellé de CTA, onglet actif plein, pastille d'avatar). Seuil visé : 4,60:1 — 4,5 plus une marge, parce qu'un libellé de bouton est du texte fin en rendu sous-pixel.
ThèmePrimaireblancFoncéClairprimaryContrast retenuratio
Hibiscus#b5384e5.772.844.67#ffffff5.77
Corossol#2f9e6f3.364.352.80#0e291f4.60
Goyave#d16a5c3.544.522.91#3716114.61
Mangue#d67e1e3.064.692.56#382709 (= Foncé)4.69
Vétiver#77894b3.843.733.25#16190d4.63
Indigo#3f5f966.392.625.18#ffffff6.39
Bougainvillier#a53d785.932.844.72#ffffff5.93
Pourquoi 4 palettes sur 7 refusent le blanc

Hibiscus, Indigo et Bougainvillier sont des primaires sombres : le blanc y passe largement (5,77 à 6,39). Corossol, Goyave, Mangue et Vétiver sont des primaires de milieu de gamme — le blanc y plafonne entre 3,06 et 3,84. Ces quatre-là prennent une encre sombre.

Vétiver est le cas limite du jeu : son Foncé #282c18 ne donne que 3,73, et même neutral-900 ne donne que 4,33. Le plafond théorique (noir pur) est 5,46. Son primaryContrast #16190d est donc un olive quasi noir — volontairement plus sombre que son Foncé. Ne pas « corriger » cette valeur vers Foncé en relecture, c'est le seul moyen d'atteindre AA sans toucher au Primaire de la spec.

Goyave prend #371611 plutôt que son Foncé #3a1712 : ce dernier passe (4,52) mais sans aucune marge. Mangue conserve son Foncé tel quel (4,69).

Survol et enfoncement — amendement à la formule de l'étude

L'étude propose primaryHover = mix(primary, black, 12 %) pour les 7 palettes. Assombrir un fond sur lequel repose une encre sombre détruit le contraste. Mesuré :

ThèmeprimaryContrastsurvol « vers noir » (étude)enfoncé « vers noir »survol « vers blanc » (retenu)enfoncé « vers blanc »
Corossol#0e291f#298b62 3.66#257b57 2.99#48aa80 5.41#5db38f 6.13
Goyave#371611#b85d51 3.67#a35348 3.03#d77c70 5.45#db8b80 6.24
Mangue#382709#bc6f1a 3.71#a76217 3.01#db8d39 5.39#df9a50 6.07
Vétiver#16190d#697942 3.74#5d6b3a 3.08#879761 5.62#95a373 6.59
Règle corrigée — une seule phrase, uniforme sur les 4 surfaces

Le survol s'éloigne de primaryContrast. Si primaryContrast est blanc, on mélange vers le noir ; s'il est une encre, on mélange vers le blanc. Aux mêmes taux : 12 % au survol, 22 % à l'enfoncement.

primaryHover = mix(primary, primaryContrast === '#ffffff' ? black : white, 12 %)

Le contraste augmente dans les deux sens (5,39 à 8,87 sur les 14 états mesurés). Visuellement : les palettes sombres foncent au survol, les claires s'éclaircissent — deux conventions également admises, et le seul choix qui tienne l'AA sur les 7.

Valeurs d'état — dérivées, à ne pas saisir à la main

ThèmeprimaryprimaryHoverprimaryPressedsens
Hibiscus#b5384e#9f3145#8d2c3dvers noir
Corossol#2f9e6f#48aa80#5db38fvers blanc
Goyave#d16a5c#d77c70#db8b80vers blanc
Mangue#d67e1e#db8d39#df9a50vers blanc
Vétiver#77894b#879761#95a373vers blanc
Indigo#3f5f96#375484#314a75vers noir
Bougainvillier#a53d78#91366a#81305evers noir

3Livrable 2 — la paire « sur Foncé »

Foncé a deux emplois : fond de sidebar / d'en-tête, et couleur de titre sur fond clair. Les deux sens sont audités.

3.1 — Texte et icônes posés sur Foncé (sidebar, en-tête)

ThèmeFoncéblancClairneutral-50onDarkMutedratio muted
Hibiscus#3a121816.4113.2915.74#c4b8ba8.53
Corossol#0f2e2214.6412.1814.05#b7c0bd7.87
Goyave#3a171216.0213.1615.36#c4b9b88.37
Mangue#38270914.3612.0313.78#c3beb57.76
Vétiver#282c1814.3512.1413.76#bec0ba7.81
Indigo#161d3116.7413.5816.06#b9bbc18.72
Bougainvillier#2f142516.8313.3716.15#c1b8be8.71
Tranché — onDark = #ffffff, pour les 7

Les quatre candidats passent, et très largement (11,3 à 16,8 — tous AAA). Le choix se fait donc sur des critères non métriques, et le blanc pur gagne sur les trois : une seule valeur pour les 7 palettes (aucune ligne de plus dans palettes.ts), aucune dépendance de la sidebar au jeton Clair — qui, lui, sert aux badges et peut bouger — et le meilleur ratio partout.

Clair sur Foncé est explicitement écarté : il donne un blanc légèrement teinté (12,03 à 13,58, parfaitement lisible) mais lie deux jetons dont les rôles n'ont rien à voir. Un ajustement futur d'un Clair pour raison de badge repeindrait la sidebar.

Second niveau — libellés de section, icônes inactives, méta : onDarkMuted = rgba(255,255,255,.70), soit un jeton dérivé, pas une valeur de palette. Pire ratio mesuré : 7,76:1 (Mangue). Les hex composités ci-dessus sont donnés pour iOS/Compose si l'opacité n'est pas praticable.

3.2 — Foncé comme couleur de titre, sur fond clair

Thèmesur Fondsur Clairsur neutral-50sur surface-2
Hibiscus14.9813.2915.7415.03
Corossol13.5012.1814.0513.73
Goyave14.6013.1615.3614.98
Mangue13.2912.0313.7813.51
Vétiver13.2912.1413.7613.45
Indigo15.2213.5816.0615.34
Bougainvillier15.2813.3716.1515.41

Aucune réserve : 12,03 minimum, AAA sur les 28 combinaisons. Foncé est utilisable comme couleur de titre partout, sans condition.

4Livrable 3 — audit AA des 3 sémantiques 🔴

Le point dur du lot. Les 3 sémantiques sont constantes, mais elles se posent sur Fond et Clair, qui varient sur 7 palettes. 42 combinaisons auditées.

4.1 — État des lieux : les valeurs de la spec, telles quelles

ThèmeDanger /FondDanger /ClairAlerte /FondAlerte /ClairSuccès /FondSuccès /Clair
Hibiscus4.964.412.642.344.874.33
Corossol5.014.532.662.404.924.44
Goyave4.964.472.632.374.874.39
Mangue5.034.552.672.424.944.47
Vétiver5.044.602.682.444.954.52
Indigo4.944.412.632.344.854.33
Bougainvillier4.944.322.622.304.854.24
— sur blanc5.44 sur #ffffff2.89 sur #ffffff5.34 sur #ffffff
— sur neutral-505.22 sur #fbfaf92.77 sur #fbfaf95.12 sur #fbfaf9
🔴 24 échecs sur 42 — et le thème n'y est pour rien

Alerte #d4870a échoue sur les 14 combinaisons, de 2,30 (Bougainvillier /Clair) à 2,68 (Vétiver /Fond). L'étude citait le cas Mangue /Clair à 2,0 ; la mesure donne 2,42 — et surtout, Mangue n'est pas le pire cas, c'est Bougainvillier. L'amplitude entre la meilleure et la pire palette est de 0,06 point.

Le même jeton échoue sur blanc pur à 2,89. C'est la démonstration : le problème n'est pas thémé, il préexistait aux 7 palettes. Les fonds thémés n'ont fait que le rendre visible.

Danger et Succès passent sur les 7 Fond (4,85 à 5,04) mais échouent sur 5 et 6 Clair respectivement — entre 4,24 et 4,60. Ce sont des échecs de marge, pas de nature.

🔴 Le repli « imposer les badges sur neutral-50 » proposé par l'étude ne fonctionne pas. Mesuré : Alerte sur neutral-50 = 2,77. Changer de fond ne peut pas sauver un jeton qui échoue déjà sur blanc. Cette option est écartée sur preuve, pas sur préférence.

4.2 — Recommandation : 3 encres constantes

Les deux options de l'étude visaient l'axe « fond ». Or l'axe défaillant est le jeton lui-même, et il ne varie pas par thème. Retenu : chaque sémantique reçoit une encre — sa déclinaison texte — tandis que la valeur de la spec reste la valeur d'aplat et d'icône.

Jetonaplat (spec, inchangé)encre (nouveau)pire /Fondpire /Clair/neutral-50/blanc
Danger#c0392b --kf-danger#992a1f --kf-danger-ink7.046.177.457.76
Alerte#d4870a --kf-warning#7d5006 --kf-warning-ink6.315.526.676.95
Succès#2d7a2d --kf-success#215c21 --kf-success-ink7.286.377.708.02
Réponse à l'arbitrage n°4 du PO

Ni l'une ni l'autre des deux options proposées. Une troisième, moins chère que les deux.

Règle d'emploi, en une ligne : la sémantique en aplat ou en icône garde la valeur de la spec ; la sémantique en texte prend l'encre. --kf-danger ne doit jamais valoir une color de texte.

4.3 — Les deux recettes de badge

La règle établie en US-034 est conservée telle quelle : aplat = état terminal, teinte douce = état transitoire. Chaque recette reçoit ici ses valeurs et son audit.

RecetteEmploifondtextecontourratio texte/fond
Aplat · Dangerétat terminal#c0392b#ffffff (blanc)5.44
Aplat · Alerteétat terminal#d4870a#1f1e1c (neutral-900)5.77
Aplat · Succèsétat terminal#2d7a2d#ffffff (blanc)5.34
Teinte douce · Dangerétat transitoire#f1d3d0 -soft#992a1f -ink#dc928a -soft-border5.53
Teinte douce · Alerteétat transitoire#f6e5c9 -soft#7d5006 -ink#e7bd78 -soft-border5.62
Teinte douce · Succèsétat transitoire#d1e2d1 -soft#215c21 -ink#8cb68c -soft-border5.93
Deux points à connaître avant d'implémenter

1. L'aplat Alerte est le seul badge à texte sombre. Blanc sur #d4870a = 2,89 (KO) ; neutral-900 = 5,77 (OK). C'est une asymétrie assumée — inévitable sur un ambre, et pratiquée partout ailleurs dans l'industrie. Ne pas « harmoniser » en blanc en relecture.

2. Le fond d'un badge doux ne se détache pas de la page — au mieux 1,27:1 sur Fond, quelle que soit la teinte choisie (testé de 12 % à 28 %). C'est arithmétique : un pastel sur un pastel. D'où le contour -soft-border, et surtout : la lisibilité repose sur l'encre du libellé, jamais sur la forme. Pour un badge qui doit être repéré d'un coup d'œil dans une liste — typiquement un balayage DLC — utiliser l'aplat, pas la teinte douce.

4.4 — Spécimens

Mangue · fond de page
Lot 3428 — Tomates
Réception du 08/08 · 14,2 kg
DLC dépassée DLC ≤ 2 j Conforme
Valider Voir le détail
Bougainvillier · fond de page
Lot 3428 — Tomates
Réception du 08/08 · 14,2 kg
DLC dépassée DLC ≤ 2 j Conforme
Valider Voir le détail
Indigo · fond de page
Lot 3428 — Tomates
Réception du 08/08 · 14,2 kg
DLC dépassée DLC ≤ 2 j Conforme
Valider Voir le détail

5Livrable 4 — la rampe neutre

6 valeurs constantes pour les 7 thèmes, plus un 7e jeton de contour ajouté au titre de WCAG 1.4.11. Validées sur les deux extrêmes demandés : Indigo (froid) et Mangue (chaud).
#fbfaf9
#f4f3f1
#e6e4e0
#a3a09a
#65625d
#1f1e1c
JetonhexEmploipire /Fondpire /Clairseuil
--kf-neutral-50#fbfaf9surface-1 — cartes, modales, lignes de tableaun/an/adécor / exempté
--kf-neutral-100#f4f3f1remplissage discret, fond désactivén/an/adécor / exempté
--kf-neutral-200#e6e4e0séparateurs, filets décoratifsn/an/adécor / exempté
--kf-neutral-400#a3a09atexte désactivé, icône inerte — jamais de texte utilen/an/adécor / exempté
--kf-neutral-600#65625dtexte secondaire, libellés, placeholders5.514.824.5:1
--kf-neutral-900#1f1e1ctexte principal15.1213.234.5:1
--kf-neutral-border#7d7a74contour de champ de saisie / composant identifiable (1.4.11)3.883.403.0:1
Pourquoi ces gris ne sont pas neutres

Ils portent une chaleur infime — le rouge dépasse le bleu de 2 à 6 points sur 255, soit une teinte autour de 40° à chroma quasi nul. Assez pour qu'ils ne « meurent » pas sous Mangue ou Goyave, assez peu pour ne pas jaunir sous Indigo. Ils remplacent les neutres verts du backoffice (#e5e8e2, #f1f5f1, #e8f0e8) et sable du terrain (#f4f1ea, #e9e3d7), qui trahissaient l'ancienne charte sous les 7 palettes.

La chaleur réelle du thème n'est pas portée par la rampe mais par les deux exceptions teintées de l'étude, conservées : surface-2 et border (§6).

Trois corrections par rapport aux valeurs de travail

neutral-600 = #65625d, et non un gris moyen classique. La première tentative (#6a6762) échouait sur une seule combinaison : Bougainvillier /Clair à 4,47. Un texte secondaire doit passer partout ; la valeur retenue donne 4,82 au pire.

neutral-400 ne descend jamais en dessous de 3:1 (2,07 à 2,50). C'est voulu : c'est le jeton désactivé, explicitement exempté par WCAG 1.4.3. 🔴 Il ne doit jamais porter de texte utile — en particulier pas un placeholder, qui relève de neutral-600.

neutral-border #7d7a74 est un ajout. Un contour de champ de saisie est un composant identifiable au sens de WCAG 1.4.11 et doit atteindre 3:1 — ce que ni neutral-200 (1,15) ni le --kf-border teinté (1,32 à 1,43) ne font. Ces deux-là restent des filets décoratifs ; dès qu'un contour est le seul moyen de repérer un champ, c'est neutral-border.

6Jetons dérivés — calculés, jamais saisis

Reprise de la doctrine §3.B de l'étude, avec les valeurs mesurées et deux amendements.
JetonFormuleStatut
--kf-primary-hovermix(primary, opposé de primaryContrast, 12 %)⚠️ amendé (§2)
--kf-primary-pressedmix(primary, opposé de primaryContrast, 22 %)⚠️ amendé (§2)
--kf-primary-inkmix(primary, #000, 30 %)nouveau (§7)
--kf-on-dark#ffffffconstant (§3)
--kf-on-dark-mutedrgba(255,255,255,.70)constant (§3)
--kf-focus-ringprimary-ink, 2 px, offset 2 px⚠️ amendé — voir ci-dessous
--kf-surface-2mix(primary, #fff, 6 %)exception teintée, conservée
--kf-bordermix(primary, #e6e4e0, 14 %)⚠️ base recalée sur neutral-200
--kf-disabled-bg / -fgneutral-100 / neutral-400constants
--kf-overlayrgba(0,0,0,.45)constant
L'anneau de focus ne peut pas être « primaire à 40 % »

Un primaire à 40 % d'opacité sur un fond clair tombe entre 1,4 et 1,9:1 — invisible, et sous le seuil de 3:1 exigé pour un indicateur de focus. Retenu : primary-ink à 100 %, 2 px, avec 2 px de décalage, ce qui donne 5,25:1 au pire (Mangue) et reste visible sur Fond, sur neutral-50 comme sur Clair. La version à 40 % peut subsister en halo externe, jamais comme trait porteur.

Thèmesurface-2bordern-900 /surface-2n-600 /surface-2
Hibiscus#fbf3f4#dfcccc15.255.56
Corossol#f3f9f6#ccdad015.625.69
Goyave#fcf6f5#e3d3ce15.585.68
Mangue#fdf7f2#e4d6c515.685.71
Vétiver#f7f8f4#d6d7cb15.625.69
Indigo#f3f5f9#cfd1d615.265.56
Bougainvillier#faf3f7#ddcdd115.255.56

7Contrôle des 4 jetons thémables en usage normal 🔴

Le critère d'acceptation du ticket dit « chaque palette passe le contrôle WCAG AA ». Cette section est ce contrôle — et elle a produit une seconde découverte.
ThèmePrimaire /FondPrimaire /ClairPrimaire /neutral-50primaryInkInk /FondInk /Clair
Hibiscus5.274.675.53#7f27378.537.57
Corossol3.102.803.23#216f4e5.615.07
Goyave3.232.913.40#924a405.845.27
Mangue2.832.562.94#9658155.254.75
Vétiver3.563.253.69#5360346.305.75
Indigo5.805.186.13#2c42699.138.15
Bougainvillier5.394.725.69#742b548.607.53
🔴 Primaire ne peut pas porter « liens » et « chiffres clés »

Le PDF assigne à Primaire : « CTA, liens, onglet actif, chiffres clés ». Trois de ces quatre emplois sont du texte. Mesuré sur Fond : Corossol 3,10 · Goyave 3,23 · Mangue 2,83 · Vétiver 3,56. Quatre palettes sur sept en échec AA, et Mangue passe même sous le seuil non textuel de 3:1.

Correction : primaryInk = mix(primary, noir, 30 %) — une formule unique, donc zéro valeur supplémentaire dans palettes.ts, calculée par le moteur au même titre que le survol. Pire ratio obtenu : 4,75 (Mangue /Clair). Elle sert aux liens, chiffres clés, icônes de couleur de marque sur fond clair, traits de 1–2 px, anneau de focus et séries de graphique. Primaire reste la couleur des surfaces pleines : fonds de boutons, onglet actif plein, pastilles.

Deux règles de composition qui découlent des mesures

Un bouton plein Primaire repose sur neutral-50 ou surface-2, jamais directement sur Fond. Mangue sur son propre Fond donne 2,83 — le bouton n'a pas de limite perceptible. Sur une carte neutral-50 il remonte à 2,94, sur blanc à 3,06. En pratique les deux fronts posent déjà leurs boutons sur des cartes ; il s'agit de ne pas déroger.

Clair sur Fond vaut 1,10 à 1,14. Une surface Clair posée sur la page est invisible sans contour. Ce n'est pas un échec WCAG (c'est de la décoration), mais c'est un piège de mise en page : toute zone Clair autoportante prend un --kf-border.

8Livrable 5 — « Ylang » vs « Goyave »

Incohérence signalée en dernière ligne de kfet_themes.pdf p.3.
Tranché — Goyave fait foi. « Ylang » est une scorie.

Relecture intégrale des deux PDF. « Goyave » apparaît quatre fois : en titre de la fiche 03 / 07 de kfet_themes.pdf p.2, avec son binôme latin Psidium guajava, sa description (« corail-saumon de la chair de goyave ») et ses 4 hex ; puis en ligne 3 du tableau de synthèse de kfet.pdf p.1. « Ylang » apparaît une seule fois, dans la phrase de clôture, sans fiche, sans hex, sans latin, sans description — et dans aucune autre pièce du projet.

La phrase fautive est : « Les affectations “alterne” (Ylang, Bougainvillier) sont libres ». Elle énumère les deux thèmes marqués Rôle alterne, qui sont Goyave (03/07) et Bougainvillier (07/07). Lecture retenue : « Ylang » est un nom de travail resté en place après le renommage de la palette 03 en Goyave. Une palette qui n'a ni fiche ni valeurs ne peut pas être implémentée ; celle qui en a sept lignes le peut.

Conséquence : aucune. La clé GOYAVE annoncée dans le contrat 0-B est la bonne, les 7 clés du ticket sont les bonnes, et il n'y a rien à changer dans le code. Seule la phrase de clôture du PDF est à corriger au prochain export — lire « (Goyave, Bougainvillier) ».

9Récapitulatif exploitable

Tout ce qui précède, sous la forme attendue par shared/src/theme/palettes.ts, KFetPalettes.swift et KFetPalettes.kt. 5 valeurs thémables × 7 palettes, plus 3 blocs constants.
CléprimarydarklightbgprimaryContrast
HIBISCUS#b5384e#3a1218#f8e2e6#faf3f2#ffffff
COROSSOL#2f9e6f#0f2e22#d7f0e4#eef8f3#0e291f
GOYAVE#d16a5c#3a1712#fbe4de#faf3f0#371611
MANGUE#d67e1e#382709#f9e9cf#faf6ea#382709
VETIVER#77894b#282c18#ebeed9#f6f7ee#16190d
INDIGO#3f5f96#161d31#e1e8f3#f2f4f9#ffffff
BOUGAINVILLIER#a53d78#2f1425#f3e0ec#f9f2f6#ffffff
ConstantevaleurConstantevaleur
--kf-danger#c0392b--kf-warning#d4870a
--kf-success#2d7a2d--kf-danger-ink#992a1f
--kf-warning-ink#7d5006--kf-success-ink#215c21
--kf-danger-soft#f1d3d0--kf-warning-soft#f6e5c9
--kf-success-soft#d1e2d1--kf-danger-soft-border#dc928a
--kf-warning-soft-border#e7bd78--kf-success-soft-border#8cb68c
--kf-neutral-50#fbfaf9--kf-neutral-100#f4f3f1
--kf-neutral-200#e6e4e0--kf-neutral-400#a3a09a
--kf-neutral-600#65625d--kf-neutral-900#1f1e1c
--kf-neutral-border#7d7a74
Bilan de l'audit

178 contrôles, 0 échec. Couverture : primaryContrast sur primaire, survol et enfoncement (21) · texte sur Foncé, plein et atténué (14) · Foncé en titre sur Fond et Clair (14) · primaryInk en lien et en marque UI (21) · rampe neutre sur les 14 surfaces thémées (28) · contours de champ (14) · les 3 encres sur Fond, Clair et teinte douce (63) · les 3 aplats (3).

Pire ratio de la matrice : 3,40:1neutral-border sur le Clair de Bougainvillier, seuil applicable 3:1. Pire ratio textuel : 4,60:1primaryContrast de Corossol, seuil 4,5.

Palette la plus contrainte : Bougainvillier, qui détient le pire cas de 12 des 19 familles auditées (son Clair #f3e0ec est le plus sombre des sept). C'est sur Bougainvillier, et non sur Mangue, qu'il faut recetter en priorité. Palette la plus contrainte côté primaire : Vétiver, seul cas où même le noir pur plafonne (5,46).

US-078 · lot 0-A — ^^Juliette, 10/08/2026 · issue #84 · MR !181 · branche design/US-078-jetons-theme
Ratios calculés selon WCAG 2.1, formule de luminance relative sRGB — seuils 4,5:1 (texte), 3:1 (gros texte et composants d'interface, 1.4.11).
Sources : kfet.pdf (2 p.) et kfet_themes.pdf (3 p.), joints à l'issue #84 · cadre technique : étude ^^Tamara, note 3664664495.