Design System·TOKENS · A11Y
Design Tokens Generator
Génère palette, typo, espacements et motion en variables CSS et config Tailwind, avec les contrastes WCAG AA vérifiés.
Télécharger SKILL.md
~/.claude/skills/design-tokens-generator/SKILL.mdInstallation en 30 secondes
mkdir -p ~/.claude/skills/design-tokens-generator
curl -o ~/.claude/skills/design-tokens-generator/SKILL.md \
https://xavierguiter.com/claude-skills/design-tokens-generator/SKILL.md
# relance Claude Code, le skill est prêtDesign Tokens Generator
Tu produis un jeu de tokens cohérent, accessible et prêt à coder. On ne juge jamais un contraste à l'œil : on le mesure.
Quand l'utiliser
- Tu lances un nouveau thème ou une nouvelle marque et tu pars d'une ou deux couleurs.
- Tu ajoutes un dark mode à un projet existant.
- Tu veux vérifier que ta palette passe WCAG AA partout.
- Tu veux une seule source de vérité partagée entre Figma, CSS et Tailwind.
Ce que le skill produit
tokens.css** : variables CSS sur:rootet[data-theme="dark"].tailwind.config.ts** :colors,spacing,fontSize,borderRadius,boxShadowqui lisent ces variables.tokens.json** : source au format W3C DTCG, importable dans Figma via un plugin.- Rapport de contraste : liste de chaque paire testée avec son ratio, statut AA et correction proposée si échec.
Méthode
- Récupère les couleurs de marque, l'ambiance voulue et les contraintes (fond noir, texte sur image, etc.).
- Génère une rampe de 12 pas par famille (1 le plus clair, 12 le plus sombre), interpolée en OKLCH pour une luminosité perçue régulière.
- Construis la couche sémantique pour le thème clair, puis reconstruis-la pour le sombre avec les mêmes noms.
- Calcule le ratio WCAG de chaque paire sémantique. Corrige en ajustant la luminosité L en OKLCH, pas la teinte.
- Génère l'échelle typographique fluide, les espacements, les rayons, les ombres et les animations.
- Écris les trois fichiers et le rapport de contraste. Aucun échec ne part sans être signalé.
Couleurs et alias sémantiques
- Familles :
neutral,accent(marque),success,warning,danger. - Alias :
bg,bg-elev,fg,fg-dim,fg-faint,line,line-2,accent,accent-fg,success,warning,danger,card-bg,card-fg. - Nommage : kebab-case, rôle avant variante (
fg-dim, pasdim-text). - Dark mode : fonds entre L 0.14 et 0.22 plutôt qu'un noir pur si tu empiles des surfaces, accents éclaircis de 1 à 2 pas.
Règles de contraste
- Texte normal : 4.5:1 minimum (
fg,fg-dimsurbg,bg-elev,card-bg). - Texte large (24 px, ou 18.66 px gras) : 3:1 minimum.
- Éléments d'interface et bordures porteuses de sens (champs, focus ring) : 3:1 contre le fond adjacent.
fg-faintest réservé au texte décoratif ou désactivé, jamais au contenu utile.accent-fgdoit passer 4.5:1 suraccent(texte des boutons primaires).
Typo, espacement, motion
- Typo fluide :
clamp(min, calc(a + b * 1vw), max)entre 400 et 1440 px de largeur. Pas : xs 12, sm 14, base 16, lg 18, xl 20, 2xl 24, 3xl 30, 4xl 36, 5xl 48, 6xl 60, 7xl 72. - Seuls les pas 2xl et plus varient en fluide. Le corps de texte reste à 16 px.
- Espacements (px) : 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, alias
1à24façon Tailwind. - Rayons : 4, 8, 12, 16,
full. - Durées : 100, 150, 250, 400, 600 ms. Courbes :
standardcubic-bezier(0.16, 1, 0.3, 1),entrancecubic-bezier(0, 0, 0.2, 1),exitcubic-bezier(0.4, 0, 1, 1). - Élévation : 3 niveaux d'ombre max. En sombre, préfère une surface plus claire à une ombre.
Checklist avant livraison
- Chaque famille a ses 12 pas et une progression de luminosité régulière.
- Clair et sombre utilisent exactement les mêmes noms d'alias.
- Toutes les paires texte passent 4.5:1, toutes les paires UI passent 3:1.
- Le rapport de contraste liste chaque paire avec son ratio.
- Tailwind lit les variables CSS, aucune couleur en dur dans la config.
tokens.jsonvalide au format DTCG ($value,$type).- Les animations sont coupées sous
prefers-reduced-motion: reduce.
À éviter
- Inverser la palette claire pour obtenir le dark mode.
- Interpoler en RGB ou HSL : les pas intermédiaires deviennent boueux ou irréguliers.
- Utiliser une couleur fondation directement dans un composant.
- Arrondir un ratio de 4.46:1 à "ça passe".
- Multiplier les pas typographiques "au cas où" : 11 suffisent.
Exemple
:root {
--accent: oklch(0.55 0.18 255); /* sur --bg : 4.8:1 */
--accent-fg: oklch(0.99 0 0);
--fg: oklch(0.21 0.01 255); /* sur --bg : 17.2:1 */
--fg-dim: oklch(0.48 0.01 255); /* sur --bg : 6.3:1 */
--bg: oklch(0.99 0 0);
--text-4xl: clamp(1.875rem, 1.731rem + 0.577vw, 2.25rem); /* 30 à 36 px */
}
[data-theme="dark"] {
--accent: oklch(0.72 0.14 255);
--bg: oklch(0.17 0.01 255);
}Ligne du rapport : fg-dim / card-bg (dark) : 4.0:1, ÉCHEC AA, passer L de 0.58 à 0.64 (5.1:1).
Prompts de démarrage
- "Génère les tokens pour une marque minimaliste chaude, accent terracotta, cartes noires pures."
- "Audite ce tokens.css : liste les échecs de contraste et propose des corrections en OKLCH."
- "Ajoute un dark mode à ces tokens en gardant les mêmes noms d'alias."
- "Crée une échelle typographique fluide de 12 à 72 px et branche-la dans Tailwind."
- "Convertis ces variables CSS en tokens.json au format DTCG pour Figma."
Skill suivant