Design & UI
Créez des interfaces qui semblent intentionnelles et premium, pas génériques comme un template. C'est le levier de qualité le plus important dans le constructeur d'applications. Appliquez-le à l'UI du DOM / des superpositions — pages, chrome, HUD, menus, formulaires. (Pour le canvas de jeu 3D, voir le skill building-games ; ce skill régit l'UI du DOM superposée dessus.)
Lisez references/ pour approfondir (chargé à la demande — ne l'inlinez pas en entier) :
references/refined-ui.md— le système de design complet du produit/chrome/superposition.references/typography.md— échelle typographique, appariement, rythme.references/surfaces.md— élévation, bordures, ombres, superposition.references/animations.md— mouvement, easing, transitions.references/performance.md— garder l'UI fluide (60ips, sans saccades).
1. Design-system-first (à faire avant de styliser quoi que ce soit)
Définissez le système une fois, puis composez à partir de celui-ci. Ne jamais parsemer de valeurs ad-hoc.
- Tokens en CSS (Tailwind v4 est CSS-first). Mettez la palette, les rayons et les polices dans
src/styles.csssous@themeen tant que variables CSS ; consommez-les en tant qu'utilitaires Tailwind. Une seule source de vérité.@import "tailwindcss"; @theme { --color-bg: #0b0b0f; --color-surface: #16161d; --color-fg: #e7e7ea; --color-muted: #a0a0ab; --color-primary: #14b8a6; --color-border: #26262f; --radius: 0.75rem; --font-sans: "Inter", system-ui, sans-serif; } - Utilisez les composants shadcn/ui (primitives Radix + variantes
cva+tailwind-merge) pour les boutons, dialogues, menus déroulants, champs de saisie, etc. Ils sont accessibles et cohérents. Générez-les danssrc/components/ui; stylisez via les tokens, pas via des couleurs hexadécimales en ligne. - Correction de base pour Tailwind v4 — les boutons ont besoin d'un curseur pointeur. Le Preflight de la v4 met
<button>aveccursor: default, ce qui semble cassé. Ajoutez ceci une fois danssrc/styles.csspour que les boutons/rôles cliquables montrent un pointeur :@layer base { button:not(:disabled), [role="button"]:not(:disabled) { cursor: pointer; } } - Interdiction du styling ad-hoc : pas de couleur hexadécimale brute dans le JSX, pas de littéraux
text-white/bg-black, pas de valeurs arbitraires commep-[16px]outext-[13px]. Si vous avez besoin d'une valeur, elle devient un token ou un palier d'échelle.
2. La grille quantifiée (règles simples qui empêchent le « moche »)
- ≤ 3–5 couleurs au total (une primaire + des neutres + au plus une accent). Pas de teintes supplémentaires aléatoires. Ne pas utiliser le violet par défaut sauf si demandé.
- ≤ 2 familles de polices (souvent une seule). Associez une police d'affichage/titre avec une police de corps, ou utilisez-en une seule.
- Hauteur de ligne 1.4–1.6 pour le corps ; plus serrée pour les grands titres.
- Quand vous remplacez une couleur de fond, remplacez aussi la couleur du texte/avant-plan (le contraste doit être maintenu — vérifiez à la fois le mode clair et le mode sombre).
- Mobile-first : concevez d'abord la mise en page ~390px, puis adaptez-la. Pas de débordement horizontal ; les zones tactiles ≥ 44px.
- Échelle d'espacement cohérente (basée sur 4/8). Les espaces blancs généreux sont meilleurs que le bourrage.
- Une seule couleur d'accent, utilisée avec parcimonie pour les actions principales — pas partout.
3. Anti-« AI-slop » (les indices qui rendent le résultat générique — à éviter)
- Pas de remplissage par dégradé blob, pas de grands dégradés hero comme substitut au contenu.
- Pas d'emoji comme icônes — utilisez un vrai jeu d'icônes (
lucide-react). - Pas d'illustrations SVG dessinées à la main / cartes / graphiques — utilisez de vraies bibliothèques (
rechartspour les graphiques) ou de vraies images générées. - Pas d'images de substitution / boîtes grises lorem dans le produit final — générez de vraies images ou utilisez du vrai contenu ; définissez
crossOrigin="anonymous"sur les images du canvas. - Évitez le look des polices trop utilisées (système par défaut uniquement, ou choix de type Comic Sans).
- Chaque élément mérite sa place. Supprimez le bruit décoratif. Établissez un système, puis variez avec intention — pas au hasard.
- Correspondre à l'UI existante lors de l'édition d'une application en place ; n'introduisez pas un deuxième langage visuel.
4. Mise en page et hiérarchie
- Hiérarchie visuelle claire : une action principale par vue ; la taille, le poids et la couleur expriment l'importance. Voir
references/typography.mdetreferences/surfaces.md. - Utilisez une vraie structure de mise en page (grid/flex, largeurs maximales de conteneur), pas de bidouilles de positionnement absolu. Alignez sur une grille cohérente.
- Les états vides, les états de chargement et les états d'erreur font partie du design — ne livrez pas d'états intermédiaires vides/instables.
5. Mouvement (subtil, intentionnel)
- Transitions courtes et fluides (150–250 ms) au survol/appui/entrée ; respectez
prefers-reduced-motion. Détails dansreferences/animations.md. - N'animez jamais la mise en page d'une manière qui cause des saccades ; préférez transform/opacity.
6. Superpositions de jeux (quand ce skill est associé à building-games)
Le canvas de jeu est géré par building-games. Ce skill stylise la superposition DOM : écran de démarrage/« cliquer pour jouer », HUD, score, menus, pause, contrôles mobiles. Gardez la superposition lisible par-dessus le canvas (fond, contraste), et maintenez-la hors du chemin d'entrée du pointer-lock/jeu.
Checklist de finition (avant de déclarer l'UI terminée)
- Tokens définis dans
@theme; pas de couleur hexadécimale / valeurs arbitraires ad-hoc dans le JSX. - ≤ 5 couleurs, ≤ 2 polices, échelle d'espacement cohérente.
- Contraste maintenu ; avant-plan remplacé partout où le fond l'est.
- Mobile (~390px) sans débordement ; zones tactiles ≥ 44px.
- Icônes/images/graphiques réels — aucun des indices anti-« slop ».
- États de chargement/vide/erreur gérés ; mouvement subtil et sécurisé pour la réduction de mouvement.
- Rendu et vérifié visuellement dans un navigateur (voir la vérification dans AGENTS.md), pas seulement un curl.