Compaytence · Design Interne · 13 août 2026

Compaytence
Guide de design

Chaque jeton, composant et règle du système v2, présenté à sa taille d’utilisation. Cliquez sur n’importe quel nuancier pour copier son hexadécimal.

Version
v2 · guide 1.0
Adopté
3 août 2026
Valeurs mesurées
13 août 2026
Implémentation
assets/system.css
Cette page est construite à partir de ce qu’elle documente

La feuille de style intégrée ici est system.css à l’identique, copiée lors de la compilation. Chaque remplissage de nuancier, ratio de contraste et lecture OKLCH est calculé à partir d’une valeur hexadécimale par build.py, afin qu’un libellé ne puisse pas diverger de la couleur au-dessus. Si le système change, relancez la compilation plutôt que de modifier ce fichier.

Provenance
01

Pourquoi le système existe

Non pas pour être beau. Pour qu’il soit impossible qu’il ait été installé.

Un audit en août 2026 a constaté que 13 des 13 valeurs d’accentuation et de texte du système précédent étaient les valeurs par défaut littérales de Tailwind, et que notre propre site produit avait été initialisé avec shadcn ("style": "new-york"). Un concurrent dans un secteur sans rapport partageait 9 de nos 12 dispositifs distinctifs à des valeurs presque identiques, car les deux sites étaient assemblés à partir du même registre.

Chaque valeur doit remonter à une source. Si la seule réponse à « pourquoi ce nombre ? » est « cela semblait juste », c’est une dérive.

Ce test a remplacé l’ancien, « cela aurait-il pu être installé ? », parce que les listes noires se dégradent selon un cycle d’environ douze mois. Le signe révélateur de 2024 était un dégradé violet et Inter. Celui de 2026 est un crème chaud et une sérif d’affichage, qui constituait la porte de sortie du signe révélateur de 2024, adopté assez largement pour devenir le nouveau. La dérivation ne se dégrade pas.

Valeurs par défaut héritées supprimées lors de la refonte v2
Valeurs de palette Tailwind13
Polices maison de Vercel2
Total 15

Source : design-system.md §0, audit d’août 2026.

Le corollaire, et il est contraignant

N’écrivez jamais une interdiction sans remplacement positif. Lorsqu’on lui dit « n’utilisez pas de crème », un modèle ne produit pas de variété, il se déplace vers une autre palette fixe. La négation déplace un attracteur au lieu de le dissoudre. Chaque règle de ce guide nomme le jeton, le nombre ou la police à utiliser à la place.

L’accent
02

Une seule échelle bleue, une seule teinte

Le bleu PAY du logotype est la graine. Tous les autres bleus sont cette même couleur rendue plus claire ou plus foncée.

L’étape 50 est le bleu du logotype lui-même, mesuré à la teinte OKLCH 245.56. Sur l’ensemble des onze étapes, la teinte reste dans une plage de 1.6 degrés. Le chroma raconte une autre histoire : il atteint son maximum à la graine et diminue vers les deux extrémités, car sRGB ne peut pas maintenir la saturation à l’extrémité pâle. L’échelle est une échelle de luminosité dont la teinte est verrouillée, ce qui est la propriété qui compte.

Contraste mesuré par rapport à --paper dans chaque thème. Le vert dépasse 4.5:1, le gris dépasse 3:1, le rouge ne dépasse aucun des deux. Calculé le 13 août 2026.

La règle qui compte plus que toute autre

#33A9FF mesure 2.42:1 sur le fond clair. Sur une surface claire, c’est un remplissage uniquement. Jamais du texte, jamais un filet que vous devez lire. Sur le fond sombre, le même hexadécimal atteint 7.51:1 et peut être utilisé comme texte. Cette asymétrie est toute la raison pour laquelle une échelle existe au lieu d’un seul hexadécimal.

Ce texte est #33A9FF sur papier. À 2.42:1, il ne respecte aucun seuil d’accessibilité.

Ne faites jamais cela

Le même hexadécimal comme remplissage derrière du blanc, et comme graine de toute l’échelle.

C’est sa fonction

Pour cette raison, personne ne choisit jamais une étape à la main. Six jetons de rôle correspondent au bon échelon selon le thème, et le balisage ne nomme que le rôle.

JetonFonctionClairRatio SombreRatio
--mark liens, accentuation étape 70 #0077bd 4.57 étape 30 #81c5ff 10.34
--mark-deep accentuation plus forte étape 80 #005990 7.07 étape 20 #b0daff 13.02
--mark-solid REMPLISSAGE sur clair, texte sur foncé étape 50 #33a9ff 2.42 étape 50 #33a9ff 7.51
--mark-tint surfaces teintées étape 05 #edf6ff 1.04 étape 95 #002e4d 1.36
--fig figures d’affichage, >=24px uniquement étape 60 #0089d9 3.59 étape 40 #5fb7ff 8.83
--fig-inline figures dans le texte courant étape 70 #0077bd 4.57 étape 30 #81c5ff 10.34
Le piège des figures, et la règle qui le désamorce

--fig est à 3.59:1 sur le fond clair, il n’est donc autorisé qu’au-dessus d’environ 24px. En faire la couleur par défaut d’une classe de figures à usage général signifie que chaque chiffre d’index et statistique en ligne échoue silencieusement à AA, ce qui est exactement arrivé une fois. Un système de figures à deux étapes doit utiliser par défaut l’étape sûre et rendre l’étape d’affichage facultative.

N’introduisez jamais une seconde teinte d’accentuation. Le laiton a été essayé pour les figures puis rejeté, avant de survivre inaperçu dans un lavis atmosphérique au chroma 0.086 pendant deux brouillons. Si une couleur est au-dessus d’environ 0.02 de chroma et n’est pas ce bleu, c’est un bug. Deux exceptions existent et doivent toutes deux être rendues auditables plutôt que laissées implicites : les marques de tiers conservent la couleur de leur propriétaire, balisée afin que l’audit place sur liste blanche l’attribut et jamais l’hexadécimal ; et une réplique de produit qui montre à un utilisateur ce qu’il voit réellement à la connexion conserve les propres jetons du produit, vérifiés dans les deux sens.

Le fond
03

Papier chaud, accent froid

Les deux thèmes sont chauds. L’accent est la seule chose froide de la page.

Le bleu se situe à la teinte 245.56, son complément exact est donc 65.56. Les neutres sont dérivés de ce nombre, ce qui signifie qu’une mesure alimente les deux moitiés du système et que la réponse à « pourquoi cette teinte » relève de l’arithmétique plutôt que du goût. Le chroma et la luminosité portent le rôle de chaque neutre.

JetonClairFoncé
--paperle fond
--paper-2teinte de surface, ne porte pas de texte
--washteinte de bande, ne porte pas de texte
--graphitetexte atténué
--ink-softcorps
--inktitres
N’écrivez pas « la teinte est égale à 65.6 » comme contrôle

Mesurés, les douze neutres couvrent de 62.35 à 75.41 degrés. Ce n’est pas une dérive des couleurs. À un chroma de 0.005 à 0.013, sRGB 8 bits ne peut pas représenter la teinte : un pas sur un seul canal déplace la teinte mesurée de 3.5 à 15.8 degrés, de sorte que chaque valeur se situe déjà à un pas de quantification de la cible, et un nouvel encodage à exactement 65.56 renvoie le même hexadécimal ou un hexadécimal adjacent. La forme vérifiable de la règle est chroma égal ou inférieur à 0.013, teinte comprise entre 55 et 90. Les deux conditions sont respectées pour les douze, et les deux sont réfutables.

Faites passer chaque bordure par rgba(var(--rule-c), a). Le jeton n’est pas une couleur, mais un triplet RGB destiné à la composition : 31,27,22 sur clair, 233,230,225 sur foncé, à une opacité de 0.09 à 0.45. Ne codez jamais en dur un gris, ni une ombre noir neutre. La teinte de l’ombre claire est un chaud 44,32,21.

Deux surfaces qui ne portent pas de texte

--paper-2 et --wash sont uniquement des teintes de surface. --graphite, --mark, --risk et --good tombent tous à environ 4.3:1 sur la première et 3.9:1 sur la seconde, ce qui est sous le seuil. Si vous peignez une bande avec l’une ou l’autre, le texte qui s’y trouve passe à --ink-soft ou plus foncé.

Deux rôles sémantiques, et deux seulement

Il n’y a délibérément aucun avertissement ambré. L’ambre se situe près de la teinte 70 et entre en collision avec le fond chaud, ce qui est précisément l’erreur commise par l’accent en laiton retiré. Tout ce qui aurait été un avertissement est soit un risque, soit une simple note d’accentuation.

Trois de ces quatre valeurs dépassent le seuil de 4.5:1 de 0.04 ou moins. Elles n’ont plus aucune marge. Ne les modifiez pas.

Polices
04

Trois polices, rôles fixes

Les rôles ne relèvent pas d’une préférence. Une police qui fait le travail d’une autre est un défaut.

Instrument Serif

Affichage, titres de section, surtitres, folio et tous les chiffres. Jamais pour le corps du texte, jamais pour un libellé d’interface.

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 et son italique

Archivo

Corps du texte, interface, titres de cartes, en-têtes de tableau, boutons. Jamais pour l’affichage, jamais pour les chiffres.

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789

Spline Sans Mono

Chaînes techniques uniquement : code, identifiants, numéros de lot, libellés d’échantillons. Jamais un libellé, un surtitre ou un en-tête courant.

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789

Geist et Geist Mono sont retirées : ce sont les polices maison de Vercel, et porter l’uniforme de la plateforme représentait la moitié du problème. Inter, Roboto, Arial, Poppins, Montserrat, Space Grotesk et toute pile de polices système pour l’affichage sont exclues pour la même raison, à plus grande échelle. Ce sont celles vers lesquelles un générateur se tourne quand personne n’a décidé.

Instrument Serif figure sur cette même liste, et nous l’utilisons malgré tout

C’est l’une des quatre polices les plus souvent signalées comme « police IA », et le crème chaud associé à une sérif d’affichage est le style maison documenté des modèles de pointe en 2026. La défense n’est pas la police, mais le rôle que nous lui attribuons : les chiffres. Une colonne de chiffres tabulaires en sérif, en bleu, est un procédé unique. Un mot en sérif italique glissé dans un titre pour donner du caractère est l’élément attracteur. Gardez le centre de gravité de la sérif sur les nombres.

L’échelle : 1.25 à partir d’une base de 17px

Neuf niveaux, et ils constituent tout le vocabulaire. La typographie se juge par comparaison, donc un ratio lent fonctionne ici. L’espace se juge isolément et utilise un ratio plus rapide.

--t-xs 0.68rem 10.88px libellés, en-têtes de tableau, unités
Compaytence 2,847
--t-sm 0.85rem 13.60px corps de carte, cellules de tableau, puces
Compaytence 2,847
--t-base 1.0625rem 17.00px corps du texte, base de 17px
Compaytence 2,847
--t-md 1.328rem 21.25px chapeau, introduction
Compaytence 2,847
--t-lg 1.66rem 26.56px citation en exergue
Compaytence 2,847
--t-xl 2.075rem 33.20px numéro de section, chiffres de ligne + total
Compaytence 2,847
--t-2xl 2.594rem 41.50px titre de section
Compaytence 2,847
--t-3xl 3.243rem 51.89px chiffre statistique
Compaytence 2,847
--t-4xl 4.05rem 64.80px titre du document
Compaytence 2,847

Italique sérif : un système, ou rien

Une sérif surdimensionnée avec un mot en italique est le héros universel des startups IA, et c’est le seul endroit où cette police d’affichage pourrait passer de signature à fioriture. Ce qui en fait un indice, c’est qu’il s’agit généralement d’un choix par défaut, utilisé une fois, pour donner du caractère, sans aucune raison derrière.

Interdit

Un mot en sérif italique glissé dans un titre parce qu’il y était esthétique. Isolé, inexplicable, décoratif.

Pas un système
Autorisé

Un procédé d’accent traçable à une source explicitement énoncée, appliqué systématiquement sur une surface et porté dans le modèle de contenu comme donnée plutôt que marqué à la main à chaque occurrence.

Un système

Dans les documents, un tel système n'existe pas : quatre rôles italiques autorisés constituent donc tout le vocabulaire, et il n'y en a pas de cinquième : .doc-title em (une ligne de titre entière, jamais un mot isolé), .tag, .note-l et .quote. L'accentuation dans un titre de document vient de la taille, de la graisse, de la couleur ou de la position. Le remplissage dégradé sur le texte est interdit partout, y compris sur un mot d'accent autorisé : l'italique le signale déjà, et le dégradé n'ajoute qu'un indice.

Le surtitre, et ce qui a remplacé le libellé mono

Le surtitre est en Instrument Serif italique, en casse de phrase, graphite, avec un filet de 26px en préfixe. Il porte le type de la section ; le numéro porte sa position. Si un surtitre ne fait que répéter le titre, omettez-le. L’ancien surtitre mono en majuscules espacées est mort et ne doit revenir sous aucune forme.

Un micro-libellé mono retiré devient exactement l’une de deux choses
Calendrier de réserve

.label — Archivo, --t-xs, graisse 600, espacement .09em, majuscules, graphite. Il s'agit du traitement table th promu en classe, et c'est le seul procédé autorisé restant en majuscules espacées. Utilisez-le pour un en-tête de colonne.

Toujours en underwriting

.tag — sérif italique, casse de phrase, graphite, lorsque le texte est une expression plutôt qu'un nom de champ. Utilisez celui-ci en premier.

La signature
05

Les chiffres sont la marque

Un procédé unique. Il ne peut pas être reproduit par reconnaissance de modèle, car personne d’autre ne le fait.

Chaque nombre est composé dans la sérif d'affichage, en bleu, avec font-variant-numeric: tabular-nums lining-nums, aligné à droite dès qu'il se trouve dans une colonne. Dans le texte courant, .fig-inline est légèrement plus grand que l'Archivo environnant afin d'attirer l'œil sans passer en gras.

La même phrase, de deux façons

Sans le traitement : nous avons récupéré 20 millions de dollars sur 450 blocages pour 2,500 entreprises, en travaillant avec 30 prestataires de paiement.

Avec lui : nous avons récupéré $20M sur 450 blocages pour 2,500 entreprises, en travaillant avec 30 prestataires de paiement.

Les chiffres tabulaires rendent une colonne lisible : chaque chiffre occupe la même largeur, de sorte que les nombres s’alignent verticalement quelle que soit leur valeur. L’alignement à droite fait le reste.

20millions USD
Réserves récupérées Cumulé, tous clients. Source : copy/products/, août 2026.
450blocages
Blocages annulés Cumulé. Source : copy/products/, août 2026.
30PSP
Prestataires de paiement Relations de routage actives. Source : copy/products/, août 2026.
Un chiffre sans source est un défaut

Même catégorie qu’un logo manquant. Un nombre dans une carte statistique est une affirmation : il comporte donc une valeur réelle, un dénominateur lorsqu’il existe, une date et sa provenance. Les chiffres ronds sans source — « 10,000+ marchands », « 99.9% de disponibilité », « 3x plus rapide » — sont l’indice de contenu le plus souvent cité. Des chiffres de remplacement peuvent exister dans un scaffold. Ils ne doivent jamais être livrés.

Rythme
06

Tout dérive de 30px

Le corps est en 17px sur une ligne de base de 30px, donc une ligne correspond à une unité.

Chaque valeur d’espacement est une fraction ou un multiple de cette ligne, et chacune est un pixel entier. Un ratio géométrique a été envisagé puis rejeté : 1.25 nécessite quatorze niveaux pour couvrir 4 à 100px et place 24 à côté de 30, ce qui ressemble à un accident, et 1.5 devient fractionnaire au troisième niveau.

Les lignes bleues derrière ce paragraphe sont tracées tous les 30 pixels. Le texte s'y pose parce que --lh-body vaut 1.765, et que 17 × 1.765 vaut 30.005. Une ligne de texte courant correspond exactement à une unité de l'échelle d'espacement, raison pour laquelle l'échelle peut être exprimée en fractions d'une ligne plutôt qu'en un ensemble arbitraire de nombres que quelqu'un a appréciés.

--s1 6 1/5 de ligne de base espacement dans une liste à puces
--s2 12 2/5 de ligne de base du titre au corps d’une carte, remplissage de cellule de tableau
--s3 18 3/5 de ligne de base espacement de grille, marge de paragraphe
--s4 24 4/5 de ligne de base remplissage de carte, marge d’en-tête de section
--s5 30 1 ligne de base marge de note, une ligne de base
--s6 45 1 1/2 ligne de base remplissage de page, marge d’en-tête
--s7 60 2 lignes de base marge de citation en exergue
--s8 90 3 lignes de base entre les sections
La règle qui détermine le niveau à utiliser

L’espace entre les blocs de texte utilise des lignes de base entières : 30, 60, 90. Le remplissage à l’intérieur d’un composant utilise les fractions : de 6 à 24. La proximité porte du sens : faites donc varier les espaces lorsque les regroupements diffèrent. Une seule valeur d’espacement partout est un échec de regroupement.

Matière
07

Géométrie, verre, grain, halos

Une échelle de formes à deux niveaux, une seule épaisseur de trait fin et exactement deux éléments atmosphériques.

Coins : deux niveaux, jamais un troisième

Un contrôle situé un niveau plus serré que son conteneur paraît réfléchi plutôt que défini par défaut. Un seul rayon partout est l’indice de la forme molle, et la correction ne coûte rien.

14px
--r-lg
cartes, tableaux, notes, panneaux
8px
--r-ctl
boutons, champs, bascules
4px
--r-xs
code en ligne uniquement

Les quatre coins, toujours. Les coins elliptiques, chanfreinés, squircle, mis à l'échelle et asymétriques ont chacun été créés puis rejetés, et ils restent rejetés. --r-sm est retiré. N'utilisez jamais une valeur px brute : les deux jetons constituent tout le vocabulaire.

Une seule épaisseur de trait fin

--hair vaut 1px partout, coloré de rgba(var(--rule-c), .09 à .45). Il n'existe pas de seconde épaisseur de bordure dans le système.

Verre

Une carte translucide sur le fond chaud, avec backdrop-filter: blur(16px) saturate(1.25). Conservée plutôt que supprimée, car le grain au-dessus et les halos derrière en font un empilement de matières, non un flou appliqué pour donner du brillant.

Grain, au-dessus de tout

Y compris au-dessus des cartes, à z-index 9. En dessous, chaque carte l’effacerait et les deux s’opposeraient visiblement. Au-dessus, il se comporte comme du grain de film et unifie la surface. Une surface grainée par page plane, et jamais une boîte grainée imbriquée dans une autre.

Exactement deux halos

C’est tout le budget atmosphérique. Ni troisième halo, ni champ d’aurore, ni dégradé maillé, ni orbe lumineux, quel que soit le traitement de bord. « Flou » n’en blanchit pas un.

Grain sur une page à plusieurs bandes

Le grain doit suivre le calque qui peint la teinte, jamais la boîte de section. Dans un système de pont ou de fond perdu, la couleur d’une bande se prolonge au-delà de sa propre section : le grain limité à la section s’arrête donc alors que sa couleur continue, et trace une ligne dure à chaque limite : mesurée à Δ10/255 sur fond clair et Δ22/255 sur le fond sombre. La page se lit alors comme un empilement de dalles plutôt qu’une seule surface.

Conteneurs
08

La carte, et quand ne pas en utiliser une

La carte est le conteneur maison. Ce n’est pas le choix par défaut de la maison.

Une carte dit « comparez-moi à mes semblables. »

Utilisez-en une lorsque les éléments constituent véritablement un ensemble de pairs que le lecteur met en balance : trois offres, trois approches, trois résultats. Tout ce que le lecteur lit dans l’ordre se place directement sur le fond, sans conteneur, sous la forme d’un titre, d’une ligne et d’un filet entre les rangées. Une page où chaque bloc est une grille de cartes se lit comme du bruit, quelle que soit la qualité des cartes. Sur une section de services à quatre parcours, cette application a fait passer la page d’environ 24 surfaces de carte à 9.

Il en va de même pour les visuels de preuve et les citations mises en exergue : une capture d’écran qui possède déjà son propre cadre et son ombre n’a pas besoin d’être entourée d’une carte, et une citation se lit mieux en typographie sur un filet que dans un encadré. Les quatre blocs de la section 07 ci-dessus sont des rangées sans carte, précisément pour cette raison.

Les quatre types de cartes

42%
Carte statistique Centrée sur un chiffre. Le nombre est l’élément principal, affiché en grand au-dessus d’un filet.
Carte de rangée

Libellé à gauche, chiffre à droite. La rangée de registre, encadrée.

64ch
Carte de total
Comporte le double filet2
Filets espacés de 4px4
Total 6
La forme web
Carte de fonctionnalité

Une étiquette, un titre, une ligne de texte et un lien dont la flèche se déplace avec la carte.

Retour en haut

Survolez n’importe quelle carte ci-dessus. Au repos, elle comporte un filet et aucune ombre. L’élévation n’apparaît qu’à l’interaction, et elle arrive en exactement deux couches.

1 · Élévation et halo

La carte s’élève de 3px et acquiert --shadow-lift à partir de rien. Elle devient physiquement plus proche.

2 · Éclat spéculaire

Une légère surbrillance suit le pointeur sur la surface, avec un alpha de .035. Les matériaux coûteux captent la lumière. C’est cette couche qui fait croire au matériau.

Pourquoi .035 et pas davantage

Cette valeur a été livrée à .14 et évoquait un projecteur suivant le curseur plutôt qu’un matériau captant la lumière. Le signe qu’elle est juste : vous la remarquez quand le pointeur bouge et ne parvenez pas vraiment à la désigner lorsqu’il s’arrête. Chaque surface partage un même bloc, donc ce seul nombre règle toute la page. Ne le réglez jamais à nouveau par composant.

Une troisième couche, un filet bleu balayant le bord supérieur, a été construite puis supprimée. Avec l’éclat qui portait déjà l’accent, cela faisait un signal de trop et amenait la carte à s’annoncer plutôt qu’à répondre. Livrer un filet et une ombre diffuse au repos a été abandonné pour la même raison : cela fait fonctionner deux systèmes d’élévation à la fois.

Le double filet

Un registre ne clôt jamais une colonne par une seule ligne. .total-line dessine deux filets espacés de 4px au-dessus d’un total. Cela coûte un pseudo-élément, n’appartient à personne d’autre et signifie quelque chose. Utilisez-le uniquement au-dessus d’un vrai total, jamais comme décoration.

Le reste du catalogue

MesureAvant v2Après
Valeurs par défaut de Tailwind130
Polices de caractères Vercel20
Teintes d’accent21
Niveaux de rayon12
Durées d’apparition12

Source : journal des modifications de design-system.md, 3 août et 12 août 2026.

Les cartes imbriquées sont exclues

Une carte dans une carte est du bruit visuel. Si le contenu d’une carte a besoin d’un cadre, il lui faut un filet ou une bande teintée, pas une seconde carte.

Mouvement
09

Deux intensités, et rien en dessous

Tout ce qui arrive de manière identique est décoratif. Varier selon l’importance donne du sens au mouvement.

ClasseDéplacementDuréeÀ utiliser sur
.rise180.7 Titres de section, tout ce qui ouvre un bloc
.rise-sub100.5 Cartes, grilles, tableaux au sein d’une section
aucun Points, libellés, éléments en ligne, petits contrôles

L’élément principal annonce le bloc ; l’élément suivant se pose dessous. N’ajoutez pas une troisième durée et n’appliquez pas d’apparition à un élément petit. Un élément qui arrive seul sans raison est le même échec que tout ce qui arrive de manière identique.

L’élément principal arrive d’abord
puis l’élément suivant se pose dessous, de 10px en une demi-seconde.

Les deux courbes d’accélération

Une seule paire, et aucun rebond ni effet élastique nulle part. Chaque courbe d’accélération choisie manuellement dans le corpus mesuré est une ease-out, ce que sont ces deux courbes.

--ease
cubic-bezier(.2,.7,.2,1)

Transitions de couleur, d’arrière-plan et de bordure.

--ease-out
cubic-bezier(.16,1,.3,1)

Apparitions, élévation de carte, flèche mobile.

Le survol de carte est une signature, pas une valeur par défaut

La norme du corpus mesuré pour un survol est un changement de couleur : arrière-plan 33.8%, couleur 24.4%, bordure 12.3%, transformation seulement 6.6%. Notre élévation à deux couches est juste sur une carte et incorrecte sur un lien ou une rangée de tableau, qui demandent une couleur à environ 200ms. La transition médiane par site est de 250ms ; --dur-lead à 0.7s et --dur-sub à 0.5s sont donc des valeurs du décile supérieur : adaptées aux apparitions, inadaptées près d’un survol.

Source : motion-canon.md, CSS livré de 1,199 sites, 13 août 2026.

Accessibilité
10

Les deux thèmes, mesurés

4.5:1 pour le texte, 3:1 pour les chiffres d’affichage au-delà d’environ 24px. Chaque valeur ci-dessous a été calculée à partir de l’hex livré, et non copiée depuis une note.

JetonFonctionClairSombreSeuil
--ink titres 16.31 17.74 4.5
--ink-soft corps de texte 7.93 15.38 4.5
--graphite texte atténué, surtitre 4.66 6.12 4.5
--mark liens, accentuation 4.57 10.34 4.5
--fig-inline chiffres dans le texte 4.57 10.34 4.5
--fig chiffres d’affichage >=24px 3.59 8.83 3.0
--mark-solid remplissage uniquement REMPLISSAGE sur fond clair ; texte sur fond sombre 2.42 7.51 4.5
--risk états d’erreur 4.54 4.53 4.5
--good confirmations 4.54 5.16 4.5

Rapports par rapport à --paper dans chaque thème. Luminance relative WCAG 2.1, calculée le 13 août 2026. Les seuils livrés du système sont de 3.59:1 en clair et de 4.53:1 en sombre.

Ne comparez pas le focus au marché

78.6% des sites mesurés écrivent outline:none au moins une fois, et 26.5% le font sans jamais définir :focus-visible. 12.7% n’ont aucun style de focus. Le mouvement réduit est pire : seuls 39.8% des sites comportent la requête, et par plateforme ce chiffre tombe à 14.4% sur Webflow et 2.3% sur Framer, soit deux sites sur 87. Toute surface Compaytence construite sur Framer ou Webflow nécessite cette requête écrite à la main.

Source : motion-canon.md, 13 août 2026.

Le piège de vérification qui invalide un audit entier

Dans un onglet de prévisualisation masqué, getComputedStyle renvoie des valeurs obsolètes pour tout élément au milieu d’une transition, et forcer le reflow n’aide pas. Avant de mesurer le contraste, injectez *,*::before,*::after{transition:none!important}. Sinon, un changement de thème rapporte les couleurs du thème précédent et chaque lecture est erronée.

Preuves
11

Pourquoi cela nous ressemble

Le 13 août 2026, 1,290 systèmes de design livrés ont été mesurés automatiquement à partir du CSS appliqué. Les chiffres ci-dessous sont les résultats obtenus.

2.6%
Papier chaud avec un accent exclusivement froid Parmi les sites du corpus sur une toile chaude comportant un accent chromatique, 77.3% l’associent à un accent chaud. Le nôtre est de l’autre type : un écart de rareté de 37×, et la propriété la plus défendable de ce fond.
0.9%
Sites présentant l’empreinte générée complète Sans générique, tout arrondi de 8 à 16px, ombres et dégradés : 12 sur 1,290, tous des outils de développement ou produits SaaS. L’uniforme du genre n’est pas la norme. C’est l’élément le plus représenté dans les données d’entraînement.
59.5%
Définissent zéro ombre portée 78% indiquent explicitement une règle plate ou uniquement à filet. Stripe, Mercury, Anthropic, Notion, Intercom, Wealthsimple et Retool en livrent tous zéro. Notre carte à filet au repos est la position majoritaire, pas un compromis.
47.4%
Utilisent exactement deux niveaux de rayon Seuls 14.6% arrondissent chaque surface dans la plage de 8 à 16px. 0px est le rayon de carte le plus courant à 21.2%, devant 8 et 16.

Source : styles.refero.design, 1,290 systèmes mesurés à partir du CSS appliqué ; anti-patterns.md §9 et website-builder/references/design-canon.md, 13 août 2026.

Deux autres constats ont affiné le système plutôt que de le confirmer. Le gras est un signe plus révélateur que le rayon : 46.2% de ces sites ne dépassent jamais la graisse 600, et 36.6% énoncent une règle anti-gras. La hiérarchie repose sur la taille, l’espace et la couleur ; un titre en graisse 700 est donc un marqueur plus fiable d’un système non réfléchi que n’importe quel choix de palette. Et l’approche négative n’est pas une règle d’hygiène : environ la moitié du corpus n’en applique aucune, même en affichage. Ajustez l’approche par plage de taille avec une raison explicite, ou ne l’ajustez pas du tout.

La seule règle ajoutée par ces données

Ne laissez jamais un accent chaud sur le papier chaud. Ni dans une illustration, ni dans une série de graphiques, ni dans une teinte de survol, ni dans un lavis atmosphérique. C’est le seul geste qui fait passer une position de 2.6% à une position de 77.3%, et c’est exactement le mode d’échec déjà consigné : le laiton est resté inaperçu dans un lavis à chroma 0.086 pendant deux versions. --risk est l’exception autorisée, limitée aux états d’erreur.

Deux réserves honnêtes, afin que cela serve d’auto-audit et non d’arme

La plupart de ces signes étaient des tendances de design humain de 2022 à 2024, avec des exemples nommés, avant que les générateurs ne deviennent vraiment efficaces. Ce qui a changé, ce n’est pas le vocabulaire, c’est que produire la moyenne ne coûte plus rien. Le vrai diagnostic est « personne n’a décidé », pas « une machine l’a fait » : un humain qui livre le shadcn standard produit exactement le même artefact. Appliquez cette liste à notre propre travail.

Interdictions
12

La liste des interdits

Définitivement exclus. Si l’un d’eux apparaît, c’est une régression, pas une option.

Le système v1 retiré est archivé et ne doit jamais être rendu : aucun canevas crème #fafaf7, aucun Geist, aucun #3b82f6, aucun surtitre mono, aucun orbe lumineux, aucune superposition de grille, aucune barre de navigation sombre.

Processus
13

L’audit, avant de présenter

Six questions. Tout « non » est un défaut, pas une préférence.

Un
Remplacement du logo

Remplacez le logotype par celui d’un concurrent. Faut-il modifier quoi que ce soit d’autre ?

Deux
Provenance

Choisissez au hasard cinq valeurs rendues : une couleur, un rayon, un espacement, une taille, une durée. Chacune peut-elle être rattachée à un jeton ou à une dérivation énoncée sans dire « cela avait l’air juste » ?

Trois
Hiérarchisation

La page montre-t-elle ce qui compte le plus, ou chaque bloc a-t-il le même poids ? Des nombres de mots identiques dans des cartes sœurs signifient que le texte a été rogné pour remplir les cases.

Quatre
Preuve

Chaque chiffre et chaque citation portent-ils une source réelle, une date et une attribution ?

Cinq
Le parcours défavorable

Les états vide, de chargement, d’erreur et 404 existent-ils, et chacun dit-il quelque chose de précis ?

Six
Le défilement

La page tient-elle la route lorsqu’on défile jusqu’en bas à 375px et à 1440px, dans les deux thèmes ? Une page vérifiée uniquement depuis sa première fenêtre d’affichage est vérifiée comme le ferait un générateur.

Si la réalisation est comparée à un site de référence, ajoutez une septième question : placez notre page, la référence et le modèle générique le plus proche côte à côte. Le caractère distinctif n’est visible que dans un alignement.

Emplacement de la version lisible par machine

Cette page est destinée aux humains. La version évaluable, où chaque règle porte un identifiant, une valeur mesurée, un test et une ligne source, est .claude/skills/compaytence/references/design-system-spec.md. C'est ce vers quoi se résout le critique système de la compétence design-loop, et sa §15 est une checklist préconstruite de vingt lignes, prête à être dupliquée dans une exécution.