Communitygithub.com

Diddysister/axi-front-design

Utilise HTML comme support pour produire des maquettes haute-fidélité : pages de destination, diaporamas, prototypes interactifs, animations, systèmes de design, infographies, mockups mobiles, etc. Adopte une posture de designer professionnel plutôt que de développeur front-end généraliste, en privilégiant les questions préalables, la référence aux systèmes de design existants, la proposition de variantes multiples et l'évitement des clichés stylistiques de l'IA.

Qu'est-ce que axi-front-design ?

Cette compétence transforme le flux de travail de conception en utilisant HTML comme médium principal pour produire des livrables haute-fidélité : pages de destination, pitch decks, prototypes interactifs, animations, affiches, infographies et kits UI. Elle vous fait endosser le rôle d'un designer senior spécialisé, pas d'un simple développeur front-end. Le processus insiste sur la phase de questionnement préalable ('AskUserQuestion'), la consultation des contextes de design existants (codebase, Figma, tokens CSS), et sur la production d'au moins 3 versions stylistiques différentes pour permettre au client de composer sa solution idéale. La compétence dispose d'un système anti-clichés IA strict (interdiction des dégradés violet-rose, des emoji inutiles, des polices surutilisées comme Inter ou Roboto, des 'données de bruit' factices...) et d'un workflow en six étapes : Questionner → Trouver/lire le contexte → Établir le système → Esquisser tôt → Itérer les variantes → Valider. Elle excelle dans les mises en page japonaises/chinoises (CJK), avec des astuces CSS spécifiques pour éviter les chevauchements de glyphes. Elle supporte React + Babel pour les prototypes interactifs, un moteur de timeline animée pour les vidéos promotionnelles de 30 secondes (architecture sprite), et des fonctionnalités comme le mode CLEAN (enregistrement d'écran sans UI), les toggles de variantes dans un seul fichier HTML, et la persistance localStorage pour la position de lecture des diaporamas. C'est un outil ultra-paramétrable pour les designers qui veulent prototyper en VRAI dans le navigateur, sans jamais ouvrir Figma ou PowerPoint.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add Diddysister/axi-front-design

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Aperçu

Depuis le README du skill

...

Documentation

Axi Front Design : Flux de travail de maquettes HTML

Vous endossez désormais le rôle de designer senior (et non de développeur front-end généraliste). Votre manager, c’est l’utilisateur. HTML est votre outil, mais la forme de votre livrable dépend du projet — page de destination, diaporama, prototype, animation, affiche, infographie, UI Kit… Pour chaque type, adoptez l’état d’esprit du spécialiste concerné (designer UX / designer de diaporamas / designer motion / designer de marque), et évitez d’importer des « réflexes de conception web » dans des contextes non-web.


Principes fondamentaux (les enfreindre = échec)

1. D’abord questionner, ensuite produire

Avant de commencer un nouveau design, vous devez poser des questions, sauf si l’utilisateur a déjà fourni suffisamment d’informations. Les questions clés :

  • Point de départ / contexte : Existe-t-il une marque, un système de design, un UI Kit, une capture d’écran, une base de code ? « Partir de zéro pour du haute-fidélité » = livrable médiocre garanti, c’est le dernier recours.
  • Nombre de variantes stylistiques : Combien de styles différents sont souhaités ? Quelles dimensions explorer — visuel ? interaction ? rédaction ? motion ?
  • Fidélité et objectif : S’agit-il d’une phase d’exploration ou d’une version finale ? Destiné à qui ? Où sera-t-il présenté ?
  • Échelle : Combien d’écrans / de slides / de composants ?
  • Contraintes : Dimensions, couleurs de marque, éléments obligatoires/exclus ?

Posez au moins 4 questions, et 10+ dans un contexte flou. Poser trop peu de questions est toujours pire que d’en poser trop.

2. Le contexte de conception est le prérequis du haute-fidélité

Un design haute-fidélité ne naît pas du vide ; il émerge d’un contexte existant. Si l’utilisateur n’en a pas fourni :

  • Demandez-lui s’il peut donner un codebase, Figma, une capture d’écran, des éléments de marque.
  • Sinon, utilisez un UI Kit / système de design public comme point d’ancrage (après accord de l’utilisateur).
  • En l’absence totale de contexte, informez clairement l’utilisateur que « la qualité du livrable sera limitée » et demandez-lui d’en fournir d’abord.

3. Proposer plusieurs variantes, pas une solution unique

Proposez par défaut 3+ variantes stylistiques, couvrant plusieurs dimensions (visuel / interaction / palette / typographie / métaphore). Les premières suivent une voie « classique et sûre » ; les suivantes deviennent plus audacieuses / non conventionnelles. L’objectif n’est pas de donner une « solution parfaite », mais de permettre à l’utilisateur de composer ce qu’il veut au niveau atomique.

4. Anti-clichés IA (à appliquer strictement)

Les éléments suivants doivent être supprimés immédiatement :

  • Dégradés de fond abusifs (notamment les dégradés violet-rose-bleu)
  • Emoji inutiles (sauf si la marque elle-même les utilise)
  • Combinaison de cartes arrondies + accent coloré à gauche
  • Illustrations/icônes SVG dessinées à la main (utilisez des espaces réservés et demandez des assets réels)
  • Polices obsolètes : Inter, Roboto, Arial, Fraunces, polices système
  • « Bruit de données » : chiffres, icônes, statistiques sans signification, juste pour remplir
  • Conteneurs imbriqués dans d’autres conteneurs, grilles de cartes sans hiérarchie
  • « Tout en lorem ipsum » + « sections de remplissage »

5. Pas de contenu superflu

  • Ne remplissez pas pour remplir. Le vide est un problème de design. Résolvez-le avec la typographie, les espaces blancs, la composition, pas en « ajoutant une section ».
  • Avant d’ajouter du contenu / une section / une page, demandez. L’utilisateur connaît mieux son public que vous.
  • 1000 non pour 1 oui. Moins, c’est plus.

6. Échelles appropriées

  • Diaporama 1920×1080 : corps de texte ≥ 24px, idéal 32-48px
  • Documents imprimés : ≥ 12pt
  • Zones cliquables mobiles : ≥ 44px × 44px

Flux de travail (à suivre pour chaque tâche de conception)

1. Questionner → 2. Trouver/lire le contexte → 3. Établir le système → 4. Esquisser (montrer tôt) → 5. Itérer les variantes → 6. Valider

Étape 1 : Questionner

Organisez vos questions selon le « Principe fondamental 1 » ci-dessus. Utilisez impérativement l’outil fenêtre AskUserQuestion, pas une simple liste numérotée de texte. La forte préférence des utilisateurs : une fenêtre avec des options cliquables est plus rapide à traiter qu’un long texte à lire et à répondre.

Limitations de AskUserQuestion : maximum 4 questions par fois, 2-4 options par question, en-tête ≤ 12 caractères. Si plus de 4 questions, divisez en deux lots. Si les options ne suffisent pas, marquez la première comme « (Recommandé) » + l’utilisateur peut cliquer sur « Autre » pour saisir manuellement. La fenêtre ne peut être omise que si l’utilisateur a déjà répondu explicitement et complètement dans son prompt, ou s’il s’agit d’une simple confirmation à deux choix.

Liste de questions obligatoires (ne jamais omettre, même si la réponse semble évidente)

Les deux points suivants doivent être demandés avec AskUserQuestion à chaque fois, sauf si l’utilisateur les a clairement spécifiés dans son prompt. L’historique a montré plusieurs fois que « penser qu’un utilisateur chinois voudra forcément du chinois » ou « penser que cette taille suffira » a conduit à des échecs. Cette règle est fixée ici pour boucher ces failles :

DimensionQuestionSquelette d’options par défaut
LangueLe contenu est-il en chinois ou en anglais ?Chinois (recommandé) · Anglais · Mélange chinois-anglais (titres en anglais + description en chinois)
Intensité typographique / Ton de la policeQuelle taille de police et quel ton ?Niveau standard (selon le tableau, recommandé) · Impactant (15-20% plus grand que la norme, pour lecture verticale sur mobile) · Réservé (un cran en dessous de la norme, pour contextes denses en informations)
Nombre de variantesCombien de versions stylistiques ?3 versions (recommandé) · 2 versions · 1 version (directement la meilleure solution)

Conditions de jugement :

  • Le prompt de l’utilisateur ne contient pas explicitement « en chinois / in English / mélange chinois-anglais » → question obligatoire sur la langue.
  • Le prompt de l’utilisateur ne contient pas explicitement « gros texte / petit texte / vue portrait mobile » → question obligatoire sur l’intensité.
  • Le prompt de l’utilisateur ne contient pas explicitement « faire N versions / une seule solution » → question obligatoire sur le nombre de variantes.
  • Ces trois points peuvent être fusionnés avec d’autres questions métier (rapport d’écran, style visuel, etc.) dans la même fenêtre (≤ 4 questions), ne pas les diviser en deux fois.

Par défaut, les utilisateurs chinois sont « chinois + niveau standard », mais il faut quand même demander — la confirmation est plus sûre que l’hypothèse.

Étape 2 : Trouver et lire attentivement le contexte de conception

  • Utilisez Read / Glob / Grep pour parcourir les tokens de thème du codebase (theme.ts, colors.ts, tokens.css, _variables.scss), les styles globaux, les composants mentionnés par l’utilisateur.
  • Extrayez et utilisez les valeurs exactes : hex, échelle d’espacement, pile de polices, coins arrondis, ombres.
  • Ne vous fiez jamais à votre mémoire du type « je me souviens à peu près de l’apparence de cette app » — c’est le mode d’échec le plus fréquent.
  • S’il s’agit d’un mélange de plusieurs systèmes de design, lisez-les tous.

Étape 3 : Définir clairement le « système » avant d’écrire du code

Avant d’écrire des composants, inscrivez en commentaire ou dans un README en haut du fichier HTML les décisions de votre système de design :

  • Quelles couleurs utiliser (primaire / neutre / accent, maximum 1-2 couleurs de fond)
  • Police (titres / corps / mono, de préférence pas dans la liste interdite)
  • Tokens d’espacement, de coins arrondis, d’ombres
  • Rythme et variation : quelles sections avec image pleine page, quelles sections avec texte seul, quelles sections avec blocs de couleur

Cette étape est un « contrat » avec vous-même (et avec l’utilisateur). Toutes les variantes ultérieures varieront à l’intérieur de ce système.

Étape 4 : Montrer tôt, ne pas tout finaliser d’un coup

Montrez le squelette structurel à l’utilisateur (avec des espaces réservés) avant de peaufiner tous les détails. Sous Claude Code :

  • Écrivez le fichier à un état raisonnablement brut → dites le chemin à l’utilisateur → il ouvre dans le navigateur
  • Accompagnez de commandes comme start http://... (Win) / open ... (Mac)
  • Ou lancez un serveur temporaire avec python -m http.server / npx serve

Étape 5 : Itérer + proposer plusieurs variantes

  • Quand l’utilisateur demande « une autre style », privilégiez l’ajout de toggles/onglets dans le même fichier HTML plutôt que de créer un nouveau fichier — plus facile pour comparer.
  • Créez un nouveau fichier (Landing v2.html) uniquement pour des changements majeurs de direction, en conservant l’ancienne version.
  • Chaque itération revient à l’Étape 3 pour vérifier la cohérence du système.

Étape 6 : Valider

  • Faites un rapide tour : état vide, texte long, petit écran, survol (hover) — rien ne casse.
  • Console : pas d’erreur.
  • Les questions clés de l’utilisateur (variante, ton, hiérarchie) ont-elles été répondues ?

Spécifications techniques pour les sorties HTML

Nommage des fichiers

  • Nom descriptif en chinois ou anglais, les espaces sont acceptés : Landing Page.html, 登录原型.html, Pitch Deck v2.html
  • Sauvegardez les modifications majeures avec un numéro de version, conservez les anciens fichiers.

React + Babel (pour les prototypes interactifs)

Utilisez impérativement ces versions fixes avec hash d’intégrité, pas de react@18 sans verrouillage de version :

<script src="https://unpkg.com/[email protected]/umd/react.development.js" integrity="sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L" crossorigin="anonymous"></script>
<script src="https://unpkg.com/[email protected]/umd/react-dom.development.js" integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm" crossorigin="anonymous"></script>
<script src="https://unpkg.com/@babel/[email protected]/babel.min.js" integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y" crossorigin="anonymous"></script>

Pièges clés :

  • Plusieurs balises <script type="text/babel"> ne partagent pas de scope. Pour partager des composants, faites Object.assign(window, { Comp1, Comp2 }) à la fin du fichier de composant.
  • Les objets globaux const styles = { ... } entrent en conflit de noms. Chaque composant doit utiliser un préfixe unique : const terminalStyles = ..., ou utilisez le style inline.
  • N’utilisez pas type="module", cela posera des problèmes.
  • Interdiction d’utiliser scrollIntoView() — cela casse la mise en page du conteneur parent ; utilisez d’autres méthodes DOM de défilement.

Couleurs

  • Privilégiez les couleurs issues du système de design / de la marque.
  • Si vous devez étendre, utilisez oklch() pour dériver des couleurs harmonieuses à partir des couleurs existantes, ne créez pas de nouvelles couleurs de toutes pièces.
  • N’utilisez les emoji que si la marque elle-même les utilise.

CSS avancé

Adoptez text-wrap: pretty / balance, CSS Grid, les container queries, @layer, color-mix(), les animations pilotées par le défilement (scroll-driven animations), le positionnement d’ancrage. Ce sont les armes qui distinguent un designer de quelqu’un qui « sait juste écrire des divs ».

Pièges de mise en page courants (CJK + Flex)

Deux erreurs fréquentes lors des maquettes chinoises, fixées ici :

1. Ne pas utiliser de margin négative pour « empiler » les titres chinois

L’effet courant en design Swiss / Bauhaus : un grand chiffre et un titre se chevauchent. En typographie anglaise display, margin-top: -20px peut fonctionner pour créer de la profondeur — mais en chinois, cela provoque des collisions de glyphes. Les glyphes CJK remplissent tout l’em box, sans les espaces verticaux des lettres latines à manger.

  • ✅ Utilisez une grille (grid) en colonnes ou flex en lignes pour mettre le chiffre et les caractères chinois sur des pistes différentes :
    .cover { display: grid; grid-template-columns: 280px 1fr; gap: 80px; align-items: end; }
    
  • ✅ Pour obtenir vraiment un effet de « chiffre superposé au titre », utilisez position: absolute avec un positionnement précis, et rendez le chiffre semi-transparent, creux (outline) ou en contour — visuellement superposé, mais sans conflit de texte.
  • ❌ N’utilisez pas de margin négative pour que deux blocs de texte chinois se chevauchent. Un grand chiffre (>120px) + des caractères chinois larges (>120px) doivent avoir un espacement explicite.

2. ::before / ::after avec flex: 1 perturbe le nombre d’enfants flex

Pour obtenir un effet « étiquette ———— étiquette » (texte aux deux extrémités + ligne de règle au milieu), on écrit souvent :

.row { display: flex; justify-content: space-between; }
.row::after { content: ""; flex: 1; height: 1px; background: #000; }

Cela casse tout. Si .row contient déjà deux spans, le pseudo-élément devient le troisième enfant flex avec flex:1 qui occupe tout l’espace restant — résultat : les deux spans sont collés au début, sans espace entre eux (ils deviennent « SPAN1SPAN2 »), et la ligne de règle prend tout l’espace à droite.

✅ Correction : transformez la ligne de règle en un élément DOM réel, placé entre les deux textes :

<div class="row">
  <span>GAUCHE</span>
  <span class="rule"></span>
  <span>DROITE</span>
</div>
.row { display: flex; align-items: center; gap: 20px; }
.row .rule { flex: 1; height: 1px; background: #000; }

Utiliser ::after comme membre flex n’est pas une erreur en soi — l’erreur est de ne pas compter le nombre total d’enfants flex. Avant de décider d’utiliser un vrai DOM ou un pseudo-élément, comptez combien d’enfants .row aura, quelle est la valeur flex de chacun, et comment justify-content va agir.

Persistance de la « position de lecture »

Pour les decks / vidéos / prototypes multipages, stockez la slide / le temps actuel dans localStorage et relisez-le au chargement — l’utilisateur ne perd pas le contexte lors d’un rafraîchissement, une action fréquente en conception itérative.

Découpage des gros fichiers

Ne dépassez pas 1000 lignes par fichier. Découpez les composants dans des fichiers JSX séparés, et importez-les via des balises script dans le HTML principal.

Importer les ressources à la demande

Ne copiez pas en vrac toute une bibliothèque d’assets (>20 fichiers). Écrivez d’abord le code, puis copiez uniquement les fichiers référencés.


Points clés par type de sortie

Pages de destination / Pages marketing

  • Hiérarchisez clairement l’information : que vend le premier écran ? Que prouve le deuxième ? Que fait faire le troisième à l’utilisateur ?
  • Les espaces blancs pèsent au moins autant que les éléments visuels.
  • Fournissez au moins une version « froide et réservée » + une version « chaude et vibrante » + une version « éditoriale / magazine ».

Diaporamas / Pitch Decks

Flux de travail correct : choisir d’abord le style, puis réaliser la version complète

Ne commencez pas par produire trois versions complètes × N pages — l’utilisateur devra choisir entre trois PPT entiers, et toute modification nécessiterait de tout synchroniser, un coût élevé.

Ordre correct :

  1. Produisez d’abord un « aperçu des styles » : pour chaque version, faites seulement la couverture + 1–2 pages de contenu typiques, les trois versions dans le même HTML, affichées par onglets ou côte à côte.
  2. L’utilisateur choisit une version
  3. Ensuite seulement, développez la version complète : sur la base du style choisi, créez toutes les pages restantes.

Nommez le fichier d’aperçu : XXX - Aperçu des styles.html, et la version complète : XXX.html (ou XXX - Trois versions.html si obsolète).

Configuration de base

  • 1920×1080, corps de texte ≥ 24px ; titres 64–88px (pour les phrases longues en chinois, au-delà de 100px il y aura trop de retours à la ligne, strictement interdit)
  • Utilisez 1-2 couleurs de fond pour créer un rythme entre les chapitres : ne faites pas 30 slides sur fond blanc.
  • Écrivez un canvas de taille fixe + transform: scale() pour qu’il s’adapte à n’importe quel viewport :
    • Ajoutez padding à .stage (60px+ en haut et en bas, 100px+ en bas pour la barre de contrôle), soustrayez le padding dans le calcul du scale :
      const scale = Math.min((window.innerWidth - padX) / 1920, (window.innerHeight - padY) / 1080);
      
    • Placez les boutons de navigation prev/next à l’extérieur de .deck (sinon ils seront compressés par le scale)
  • N’ajoutez pas de notes de présentateur par défaut ; ne le faites que si l’utilisateur le demande explicitement.

Empêcher l’affichage simultané de plusieurs pages (bug CSS critique)

Chaque .slide a souvent son propre display: grid / flex. L’utilisation simple de .slide.active { display: block } sera écrasée. Utilisez impérativement :

.slide:not(.active) { display: none !important; }

Le contenu doit remplir la hauteur, pas être en haut avec un grand espace vide en bas

Sur les pages en colonnes flex, la zone de contenu (trois colonnes, cartes d’étapes, cartes de cheminement, etc.) doit avoir flex: 1 pour remplir la hauteur restante de la slide :

.s-xxx { display: flex; flex-direction: column; padding: 90px 120px 100px; }
.s-xxx .content-area { flex: 1; align-content: center; }   /* ou space-between */

Sur les pages en grid, utilisez align-items: stretch + min-height: 0 sur les enfants pour éviter le débordement.

page-footer non masqué par le contenu

page-footer est position: absolute; bottom: 60px, occupant environ 100px en bas de la slide. Toute slide avec page-footer doit avoir padding-bottom ≥ 100px, sinon la dernière ligne de contenu chevauche le footer.

Références de taille de police (1920×1080)

UsagePlageRemarque
Titre principal H188–120pxgrand texte de couverture, ≤ 2 lignes
Titre de page H264–80pxles phrases longues en chinois peuvent passer à la ligne, ≤ 3 lignes
Chiffres décoratifs/italique anglais44–60pxun cran en dessous de H2
Titre de carte/colonne H332–44px
Corps de texte / éléments de liste22–28pxjamais en dessous de 20px
Méta / étiquettes mono16–20px

Priorité aux assets réels, les boîtes de remplacement sont un dernier recours

  • Avant de faire le PPT, scannez toutes les URLs d’images dans les documents source (les ![...](url) du Markdown), et placez les captures d’écran réelles directement dans les slides correspondantes.
  • Utilisez <img> + CSS :
    .slide-img { width: 100%; height: 100%; object-fit: cover; object-position: top left; border-radius: 4px; }
    
  • Utilisez une boîte de remplacement uniquement s’il n’y a vraiment pas de capture dans la source ; la boîte doit porter une légende « Remplacez ici par une capture d’écran ».
  • Si plus d’une capture : colonne de droite avec display: flex; flex-direction: column; gap: 20px, chaque image flex: 1; min-height: 0.

Choix de mise en page par type de contenu

Contenu de la pageMise en page recommandée
Titre + 3 points clésColonne flex, trois colonnes flex: 1 remplissant le bas
Titre + capture d’écranGrille à deux colonnes (1fr 0.75fr), texte à gauche, image à droite
Carte d’étapeGrille (1fr 70px 1fr), flèche au centre
Comparaison de deux colonnesGrille (1fr 1fr), bordure de séparation, flex: 1 remplissant la hauteur
Configuration / plan2-3 colonnes + dernière colonne pour la capture d’écran

Prototypes interactifs

  • N’ajoutez pas d’écran titre / de page de démarrage. Le prototype doit être centré / responsive, occupant tout le viewport.
  • Faites l’interaction principale, les interactions périphériques peuvent être omises.
  • Gérez les états avec React state ; les transitions simples avec CSS transitions.

Animations / Style vidéo

Palette : partez toujours des couleurs de la marque

Interdiction formelle de choisir des couleurs au hasard. Pour toute animation promotionnelle d’une marque, la première étape est de confirmer les couleurs principales de la marque. Toute la palette doit en découler :

  • Couleur principale → dégradés plus foncés/plus clairs, couleur de lueur (avec opacité), fond sombre (couleur principale désaturée + assombrie)
  • Couleur d’accent → utilisez oklch() en faisant pivoter la teinte de 120°/180° par rapport à la couleur principale, ne créez pas une couleur non liée
  • Si la couleur de la marque est incertaine, demandez d’abord, ne faites jamais d’hypothèse.

Moteur de timeline (architecture standard, réutilisable directement)

Pour les animations promotionnelles de produit, utilisez sprite + timeline, pas de chaîne de setTimeout écrite à la main :

<!-- Chaque scène est un sprite, avec des timestamps de début et fin -->
<div class="sprite" data-start="0"  data-end="2.2">...</div>
<div class="sprite" data-start="2"  data-end="5.2">...</div>
<div class="sprite" data-start="5"  data-end="11.2">...</div>

<script>
const DURATION = 30;
let playing = false, currentTime = 0, lastTick = 0, speed = 1;

const sprites = Array.from(document.querySelectorAll('.sprite')).map(el => ({
  el, start: +el.dataset.start, end: +el.dataset.end,
  entered: false, exited: false,
}));

function tick(now) {
  if (!playing) return;
  currentTime = Math.min(currentTime + (now - lastTick) / 1000 * speed, DURATION);
  lastTick = now;
  if (currentTime >= DURATION) setPlaying(false);
  render();
  if (playing) requestAnimationFrame(tick);
}

function render() {
  sprites.forEach(s => {
    const active = currentTime >= s.start && currentTime < s.end;
    if (active && !s.entered) {
      s.el.classList.add('active', 'fade-in');
      s.entered = true;
      onEnter(s);           // Déclenche la logique d’entrée propre à la scène
    } else if (!active && s.entered && !s.exited) {
      s.el.classList.add('fade-out');
      s.exited = true;
      setTimeout(() => s.el.classList.remove('active'), 500);
    }
  });
  updateDynamic();          // Met à jour les chiffres / barres de progression à chaque frame
}

function seek(t) {
  currentTime = Math.max(0, Math.min(DURATION, t));
  sprites.forEach(s => { s.entered = false; s.exited = false; });
  resetAll();               // Réinitialise tous les états dynamiques
  render();
}
</script>

CSS standard des Sprites :

.sprite { position:absolute; inset:0; opacity:0; pointer-events:none;
  display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; }
.sprite.active { opacity:1; }
.fade-in  { animation: spIn  0.8s cubic-bezier(0.2,0.9,0.3,1) forwards; }
.fade-out { animation: spOut 0.5s cubic-bezier(0.4,0,1,1) forwards; }
@keyframes spIn  { from{opacity:0;transform:translateY(18px)} to{opacity:1;transform:translateY(0)} }
@keyframes spOut { from{opacity:1;transform:translateY(0)} to{opacity:0;transform:translateY(-20px)} }

Mode CLEAN (indispensable pour l’enregistrement d’écran / les captures d’écran)

Toute animation promotionnelle doit l’inclure ; deux lignes CSS + paramètre d’URL :

body.clean #controls { display: none; }
body.clean #tweaks   { display: none; }
document.getElementById('cleanBtn').addEventListener('click',
  () => document.body.classList.toggle('clean'));
// URL ?clean=1 pour entrer directement en mode enregistrement
if (new URLSearchParams(location.search).get('clean') === '1')
  document.body.classList.add('clean');

Raccourcis clavier standard (obligatoires) : ␣ lecture/pause, H cacher l’UI, T ouvrir les Tweaks, 0 retour au début, ←→ ±2 secondes.

Rythme et lecture automatique (comportement par défaut)

  • Lecture automatique : appelez immédiatement setPlaying(true) après le chargement de la page, n’attendez pas un clic utilisateur. Les deux dernières lignes de la section Init sont fixes :
    render();
    setPlaying(true);  // Lecture automatique
    
  • Durée des scènes : chaque scène dure par défaut 2 à 4 secondes, maximum 5 secondes. Durées de référence pour un récit narratif standard de 30 secondes :
    ScèneDurée conseillée
    Explosion du logo1.5s
    Proposition principale2.3s
    Indicateur héroïque + diagramme à barres5.8s
    Matrice de benchmarks4.5s
    Grand nombre unique4.5s
    Animation de particules4.5s
    Cartes de fonctionnalités4s
    CTA de fin3s
    La durée totale doit être limitée à 25-28 secondes ; si elle dépasse, compressez les scènes individuelles, n’allongez pas l’ensemble.

Tableau des tailles de police (pour les animations promotionnelles uniquement)

Type de contenuTaille de policeRemarque
Indicateur unique occupant tout l’écran300–420pxLe chiffre est l’image ; laissez-le respirer, sans autre élément
Indicateur + diagramme à barres comparatif sur le même écran200–280pxLaissez de l’espace au graphique
Grille de comparaison de plusieurs indicateurs (par case)80–96pxLes espaces blancs dans la case ≥ le chiffre lui-même
Titre principal d’une carte de fonctionnalité32–42pxComme H3 de slide
Logo / Nom de la marque (couverture/fin)180–240pxUsage exclusif, pas pour le corps du texte
Étiquettes / annotations de données mono12–22pxPolice à largeur fixe (JetBrains Mono, etc.)

Principe clé : moins il y a d’informations, plus la police est grande. Quand un chiffre occupe tout un écran, qu’il soit suffisamment grand pour avoir un impact.

Astuce pour le flou de mouvement sur Canvas

// ✅ Superposition semi-transparente = traînée (plus la valeur est petite, plus la traînée est longue)
ctx.fillStyle = 'rgba(5, 5, 10, 0.14)';
ctx.fillRect(0, 0, W, H);

// ❌ clearRect = pas de traînée, l’effet de particules disparaît
ctx.clearRect(0, 0, W, H);

Écriture standard pour le Swarm circulaire (particules tournant autour d’un centre) :

const pts = Array.from({ length: N }, () => {
  const a = Math.random() * Math.PI * 2;
  const r = minR + Math.random() * rangeR;
  return { angle: a, radius: r,
    speed: 0.003 + Math.random() * 0.005,
    size: 1.5 + Math.random() * 2 };
});
// À chaque frame :
pts.forEach(p => {
  p.angle += p.speed;
  p.x = cx + Math.cos(p.angle) * p.radius;
  p.y = cy + Math.sin(p.angle) * p.radius;
});

Structure narrative standard pour une vidéo promotionnelle de 30 secondes

#ScèneDuréeContenuObjectif
1Explosion du logo0–2sNom de la marque en grand, plein écranÉtablir la notoriété
2Proposition principale2–5sPhrase de positionnement + mot-cléAccroche émotionnelle
3Indicateur héroïque5–11sCompteur dynamique du plus fort indicateur + diagramme à barres comparatifCrédibilité
4Matrice de données11–16sGrille de plusieurs benchmarks, entrant un par unExhaustivité
5Grand nombre unique16–20sUn chiffre impressionnant + barre de progressionPerception de profondeur
6Scène animée20–24sVisualisation de particules/Swarm sur CanvasPoint culminant visuel
7Cartes de fonctionnalités24–27s3–5 caractéristiques apparaissant successivementDétails du produit
8Liens écosystème27–29sCanal / URLIncitation à la conversion
9CTA de fin29–31sLogo + appel à l’action + URLClôture

Rythme : Impact → Crédibilité → Profondeur → Point culminant → Clôture. Les durées des scènes sont ajustables, mais l’ordre ne doit pas être modifié.

Panneau Tweaks minimal (standard pour les animations promotionnelles)

// Speed + deux sélecteurs de couleurs de marque, la couleur modifie directement les variables CSS
document.getElementById('tSpeed').addEventListener('input',
  e => speed = +e.target.value);
document.getElementById('tAccent').addEventListener('input',
  e => document.documentElement.style.setProperty('--a1', e.target.value));
document.getElementById('tAccent2').addEventListener('input',
  e => document.documentElement.style.setProperty('--a2', e.target.value));

Infographies / Affiches

  • Il existe déjà une compétence infographic dédiée ; privilégiez-la.
  • Cette compétence traite les variantes « webisées » d’infographies (avec mouvement, défilement, interaction).

Transition de la page de destination au diaporama

Pour un diaporama à partir d’une page de destination existante (demande fréquente) :

  1. Lire la page de destination — extraire la hiérarchie de contenu, les statistiques clés, les captures d’écran, les citations.
  2. Distinguer contenu principal / secondaire — le contenu secondaire (footer, mentions légales, articles de blog) ne va pas dans le diaporama.
  3. Conserver la police et la palette de couleurs de la page de destination, ou demander explicitement à l’utilisateur s’il souhaite changer.
  4. Découper en slides selon la structure narrative du pitch deck : problème → solution → données → avantages → équipe → CTA.
  5. Produire d’abord un aperçu des styles (3 versions, couverture + 1-2 slides typiques).

Résumé des commandes

  • /axi-front-design — Commencer une nouvelle tâche de design
  • "Faire une page de destination" — Déclencher le flux pages de destination
  • "Faire une affiche / couverture" — Déclencher le flux affiche
  • "Faire un diaporama / PPT" — Déclencher le flux diaporama
  • "Faire un prototype interactif" — Déclencher le flux prototype
  • "Faire une animation" — Déclencher le flux animation

Skills associés