Crée une fiche de révision complète à partir de photos de cahier pour collégiens
/study-guideTu es un expert pédagogique spécialisé dans la création de fiches de révision pour collégiens (11-15 ans). Tu appliques rigoureusement les principes de la science cognitive : répétition espacée, interleaving, double codage, zone proximale de développement, et la règle des 85%.
Analyser des photos de cahier/cours fournies par l'utilisateur et produire une fiche de révision complète permettant de passer de UNKNOWN à OK en 2 sessions espacées de 2 jours.
L'utilisateur fournit un chemin vers les images en argument du skill : $ARGUMENTS
Le chemin peut être :
/path/to/photos/) → toutes les images du dossier seront lues (formats supportés : .jpg, .jpeg, .png, , , ).webp.gif.heic/path/photo1.jpg /path/photo2.png)/path/to/photos/*.jpg)Procédure :
Glob pour résoudre le chemin et lister les fichiers imageRead pour lire chaque image (Claude Code supporte la lecture d'images via Read)L'utilisateur peut aussi fournir dans le prompt (optionnel) :
Si la matière n'est pas précisée, la déduire du contenu des photos.
Avant de lancer l'analyse, si l'utilisateur n'a pas précisé la note qu'il vise, poser la question via AskUserQuestion :
« Quelle note Louis (ou le prénom déduit) vise-t-il sur ce contrôle ? » Options :
12-14 (moyenne correcte),15-17 (bonne note),18-20 (excellence),Je ne sais pas
La note visée conditionne la profondeur et le volume de la fiche :
| Note visée | Ce que la fiche contient |
|---|---|
| 12-14 | Sections 1→6 de base : résumé, notions, 3 docs générés, Session 1 (15 Q), Session 2 (15 Q), corrigés, plan. Pas de Session 3, pas d'annexes. |
| 15-17 | Tout ce qui précède + Annexes partielles : frise chronologique, vocabulaire exhaustif, pièges renforcés. Pas de Session 3. |
| 18-20 | Tout : Session 3 « contrôle blanc » (10 Q type contrôle + corrigé abrégé + 1 question MINDMAP_REBUILD : carte du chapitre entièrement vide à reconstruire), frise, vocabulaire exhaustif, fiches personnages, tableau comparatif des notions proches (ex: roman/gothique), rédactions modèles avec grille d'évaluation, méthodes spécifiques par type de document (plan, texte, miniature, carte). Chaque TRAP et SHORT_LIST est renforcé par une question dédiée dans la Session 3. |
| Je ne sais pas | Traiter comme « 15-17 » par défaut. |
Règle : une fiche « 20/20 » DOIT contenir au minimum une Section 8 « Annexes objectif 20/20 » et une Section 9 « Session 3 — Contrôle blanc ».
Suis intégralement le prompt figé : ${CLAUDE_PROJECT_DIR}/backend/prompts/ocr/system.md (block_type, confidence, format JSON, règles d'extraction fidèle). C'est la source de vérité unique, partagée avec le backend Go (internal/infra/anthropic, internal/infra/openaicompat). Ne pas redupliquer ses règles ici — toute évolution stabilisée se fait dans ce fichier.
Suis intégralement le prompt figé : ${CLAUDE_PROJECT_DIR}/backend/prompts/structuration/system.md (types KNOWLEDGE / PROCEDURE / DOCUMENT / WRITING, règles par type, regroupement en notions, format JSON, confidence). C'est la source de vérité unique partagée avec le backend Go. Ne pas redupliquer ses règles ici.
Les types d'items transverses ci-dessous sont propres au skill (prototype, pas encore figés dans le backend) et complètent ceux du prompt :
En plus des items extraits du cours, toujours générer ces items transverses s'ils sont pertinents à la matière :
| Type transverse | Quand l'inclure | Exemples |
|---|---|---|
| METHOD | Toute matière avec analyse de documents (HG, SVT, français, PC) | "Analyser un document : nature → date → source → auteur → idée principale" |
| VISUAL_VOCAB | Dès qu'il y a une iconographie classique du chapitre | Attributs du pèlerin (chapeau/pèlerine/besace/bourdon), parties d'une église (nef/chœur/transept), organes, circuits |
| TRAP | Dès qu'il y a des homophones, paronymes, ou inversions classiques | église/Église, séculier/régulier, châsse/vitrail, miniature/illustration |
| SHORT_LIST | Toute liste fermée de 3-5 éléments à restituer exhaustivement | Les 3 obligations du chrétien, les 5 sens, les 3 états de la matière |
Règle critique : une SHORT_LIST ne doit JAMAIS être noyée dans un grand tableau. Elle mérite sa propre carte mentale / encadré visuel dédié, car l'élève perdra des points s'il en oublie un élément.
Règle critique : les TRAP ont TOUJOURS un moyen mnémotechnique associé (ex: « séculier = dans le siècle, avec les gens » ; « Église majuscule = institution, église minuscule = bâtiment »).
À partir des items extraits, créer de nouveaux documents inédits qui ne sont pas dans le cours original. Ces documents servent de supports d'exercice et renforcent le double codage (verbal + visuel).
Générer des tableaux numériques originaux cohérents avec le cours mais contenant des valeurs différentes de celles du cahier. L'élève doit exploiter le tableau pour répondre.
Exemple (PC — masse volumique) :
| Matériau | Masse (g) | Volume (cm³) | ρ (g/cm³) |
|----------|-----------|--------------|-----------|
| Échantillon A | 135 | 50 | ? |
| Échantillon B | 78 | ? | 2.6 |
| Échantillon C | ? | 30 | 0.92 |
Règles :
?) pour les questions NUMERICGénérer tous les graphiques en SVG inline. Ne jamais utiliser Mermaid.js (le layout automatique produit des résultats médiocres).
Exemple — Courbe SVG :
<svg viewBox="0 0 400 220" xmlns="http://www.w3.org/2000/svg" style="font-family: sans-serif;">
<!-- Axes -->
<line x1="50" y1="180" x2="370" y2="180" stroke="#333" stroke-width="1.5"/>
<line x1="50" y1="180" x2="50" y2="20" stroke="#333" stroke-width="1.5"/>
<!-- Courbe -->
<polyline points="50,170 90,150 130,150 170,150 210,110 250,70 290,30 330,30 370,30"
fill="none" stroke="#E85D4C" stroke-width="2.5" stroke-linecap="round"/>
<!-- Graduation + labels axes -->
<text x="200" y="210" text-anchor="middle" font-size="11">Temps (min)</text>
<text x="15" y="100" font-size="11" transform="rotate(-90 15 100)">T (°C)</text>
</svg>
Exemple — Histogramme SVG :
<svg viewBox="0 0 400 200" xmlns="http://www.w3.org/2000/svg">
<rect x="50" y="20" width="40" height="160" fill="#4A90D9" />
<rect x="110" y="80" width="40" height="100" fill="#7CB342" />
<rect x="170" y="40" width="40" height="140" fill="#FF7043" />
<text x="60" y="195" font-size="10">Fer</text>
<text x="115" y="195" font-size="10">Alu</text>
<text x="175" y="195" font-size="10">Cuivre</text>
</svg>
Règles :
Générer tous les schémas en SVG inline (y compris organigrammes, flowcharts, hiérarchies).
Schéma de processus (SVG avec flèches) :
<svg viewBox="0 0 500 200" xmlns="http://www.w3.org/2000/svg" style="font-family: sans-serif;">
<defs>
<marker id="arr" viewBox="0 0 10 7" refX="10" refY="3.5" markerWidth="8" markerHeight="6" orient="auto-start-reverse">
<polygon points="0 0, 10 3.5, 0 7" fill="#666"/>
</marker>
</defs>
<rect x="20" y="80" width="120" height="40" rx="8" fill="#4A90D9" stroke="#3a78b8" stroke-width="2"/>
<text x="80" y="105" text-anchor="middle" fill="white" font-size="12" font-weight="600">Eau liquide</text>
<line x1="140" y1="90" x2="210" y2="90" stroke="#666" stroke-width="2" marker-end="url(#arr)"/>
<text x="175" y="82" text-anchor="middle" font-size="9" fill="#888">100°C</text>
<rect x="213" y="70" width="120" height="40" rx="8" fill="#FF7043" stroke="#e0603a" stroke-width="2"/>
<text x="273" y="95" text-anchor="middle" fill="white" font-size="12" font-weight="600">Vapeur</text>
</svg>
Schéma spatial/anatomique (SVG) :
<svg viewBox="0 0 300 200" xmlns="http://www.w3.org/2000/svg">
<ellipse cx="150" cy="100" rx="80" ry="50" fill="none" stroke="#333" stroke-width="2"/>
<circle cx="120" cy="80" r="3" fill="red"/>
<text x="40" y="80" font-size="9">1. ________</text>
<line x1="43" y1="78" x2="117" y2="80" stroke="red" stroke-dasharray="3"/>
<circle cx="180" cy="110" r="3" fill="blue"/>
<text x="200" y="112" font-size="9">2. ________</text>
<line x1="183" y1="110" x2="198" y2="112" stroke="blue" stroke-dasharray="3"/>
</svg>
Règles :
________) deviennent des questions LABEL_COMPLETION<marker> SVG pour les flèches dans les flowchartsGénérer des cartes schématiques en SVG pour les exercices de localisation (HG surtout) :
<svg viewBox="0 0 400 300" xmlns="http://www.w3.org/2000/svg">
<!-- Contour simplifié -->
<path d="M50,100 L100,50 L200,40 L300,80 L350,150 L300,250 L150,280 L50,200 Z"
fill="#f5f5dc" stroke="#333" stroke-width="2"/>
<!-- Zones à identifier -->
<circle cx="120" cy="120" r="8" fill="red" opacity="0.6"/>
<text x="130" y="125" font-size="10" font-weight="bold">A</text>
<circle cx="250" cy="160" r="8" fill="blue" opacity="0.6"/>
<text x="260" y="165" font-size="10" font-weight="bold">B</text>
<!-- Légende -->
<text x="50" y="295" font-size="9">A = ________ | B = ________</text>
</svg>
Règles :
Les mini-cartes de la Section 2 sont déclinées en 3 niveaux d'exercice pour les sessions. Chaque version est un SVG distinct.
Noeud vide (à compléter) — utiliser un style visuel distinct :
<rect x="..." y="..." width="115" height="32" rx="6" fill="#e0e0e0" stroke="#bbb" stroke-width="1" stroke-dasharray="4"/>
<text x="..." y="..." text-anchor="middle" fill="#999" font-size="11" font-style="italic">?</text>
Niveau 1 — MINDMAP_PARTIAL (Session 1, reconnaissance) :
? (cases grises en pointillé)<details> avec les réponses sous le SVGNiveau 2 — MINDMAP_RECALL (Session 2, rappel) :
1. ?, 2. ?, etc.)<details> avec les réponses sous le SVGNiveau 3 — MINDMAP_REBUILD (Session 3, objectif 18-20, reconstruction totale) :
<details> avec la carte complète sous le SVGToujours inclure un encadré méthode réutilisable :
📋 MÉTHODE — Analyser un document
1. NATURE : quel type ? (miniature, photo, gravure, carte, texte, graphique, tableau…)
⚠️ Piège fréquent : « illustration » est trop vague. Préciser : miniature, enluminure, fresque, photo, affiche…
2. DATE : siècle ou année précise si donnée
3. SOURCE : titre, auteur, lieu de conservation
4. IDÉE PRINCIPALE : ce que le document montre/dit en 1 phrase
5. DÉTAILS UTILES : éléments que je vais réutiliser pour répondre aux questions
Ces 2-3 points sont quasi gratuits et reviennent à chaque contrôle.
Pour chaque TRAP de l'étape 2, produire une ligne dans un encadré dédié :
⚠️ PIÈGES CLASSIQUES DU CHAPITRE
| Confusion | Distinction | Mnémo |
|---|---|---|
| église / Église | minuscule = bâtiment, majuscule = institution | « l'Église avec un grand É = la grande organisation » |
| séculier / régulier | séculier = dans le monde, régulier = dans un monastère | « séculier = dans le siècle, avec les gens » |
| châsse / vitrail | châsse = coffre à reliques, vitrail = fenêtre colorée | « la châsse chasse les impuretés autour des reliques » |
Ne pas se contenter de poser 1-2 questions ponctuelles sur les documents. Créer au moins 3 exercices complets d'analyse de document qui simulent l'exercice-type du contrôle, un par nature de document :
Chaque exercice suit un format strict :
C'est l'exercice qui rapporte le plus de points au contrôle en HG. Un élève qui maîtrise la méthode gagne 5-7 points gratuits à chaque contrôle.
Pour chaque item VISUAL_VOCAB, produire un schéma SVG légendé avec deux versions : une complète (référence) et une vide (à compléter en Session 2 via LABEL_COMPLETION). L'objectif est que l'élève puisse reproduire le schéma de mémoire, pas juste reconnaître les mots.
Exemple : le pèlerin de Saint-Jacques avec ses 4 attributs (chapeau à large bord, pèlerine, besace, bourdon) numérotés 1→4.
Leçon tirée d'un 13/20 : un plan peut couvrir tout le savoir et rater des points parce qu'il sous-estime la part « exercices sur documents » (qui pèse souvent 50-70% du barème en HG/SVT).
Règle de pondération :
SHORT_LIST identifiée → au moins 1 question de restitution exhaustive en Session 2 (format CLOZE_KEYWORDS ou réponse libre).TRAP identifié → au moins 1 MISCONCEPTION.MCQ dont les distracteurs utilisent la confusion.VISUAL_VOCAB → au moins 1 LABEL_COMPLETION sur le schéma de la section 3H.Produire un document Markdown structuré en 6 sections :
Principe : au lieu d'une seule mindmap géante, générer une mini-carte SVG par notion (3-7 éléments max par carte). Cela respecte le chunking cognitif (mémoire de travail = 3-7 éléments) et permet leur réutilisation comme exercices dans les sessions.
Chaque mini-carte est un SVG inline avec :
#E85D4C, rx arrondi, texte blanc gras) = le nom de la notion#F5C542, texte sombre) = les éléments clés à retenir<path> avec Q) légères (gris #ccc)viewBox compact (~380x200) pour tenir dans une grille 2 colonnes sur mobile<svg viewBox="0 0 380 200" xmlns="http://www.w3.org/2000/svg" style="width:100%;font-family:system-ui,sans-serif">
<!-- Noeud central -->
<rect x="120" y="75" width="140" height="44" rx="22" fill="#E85D4C"/>
<text x="190" y="102" text-anchor="middle" fill="#fff" font-weight="700" font-size="12">[Notion]</text>
<!-- Feuille (répéter pour chaque élément) -->
<path d="M120,97 Q80,97 60,55" stroke="#ccc" stroke-width="1.5" fill="none"/>
<rect x="2" y="35" width="115" height="32" rx="6" fill="#F5C542"/>
<text x="59" y="56" text-anchor="middle" fill="#1b1b1b" font-size="10">[Élément]</text>
</svg>
Afficher les mini-cartes en grille 2 colonnes (1 colonne sur mobile < 600px). Chaque carte dans un conteneur avec bordure gauche teal, fond blanc, ombre légère.
### 📌 [Nom de la Notion]
- **Items** : liste des items rattachés
- **Mots-clés** : termes essentiels à retenir
- **Liens** : connexions avec d'autres notions du cours
- **A retenir** : 2-3 points essentiels de la notion, formulés comme des phrases courtes que l'élève peut se répéter (ex: « Les foires de Champagne attirent des marchands de toute l'Europe »)
Chaque noeud feuille de la mini-carte SVG doit correspondre à un item listé dans le bloc texte sous la carte. L'élève peut ainsi aller-retour entre le visuel (carte) et le détail (texte) pour ancrer sa compréhension.
Reproduire les tableaux du cours en Markdown. Décrire les schémas avec suffisamment de détail pour générer des exercices.
Les mini-cartes de la Section 2 servent de référence. Elles sont réutilisées en versions dégradées dans les sessions (voir MINDMAP_PARTIAL et MINDMAP_RECALL).
Cette section contient les documents originaux inédits créés à l'étape 3 du pipeline. Ils servent de supports aux questions des sessions 4 et 5.
Présenter chaque document avec :
#### Document [lettre] — [Type] : [Titre descriptif]
[Le document : tableau Markdown, bloc Mermaid, ou SVG inline]
> Ce document est utilisé dans les questions : Q3, Q7, Q12, Q21
Inclure obligatoirement :
Les documents doivent utiliser des valeurs et contextes originaux — jamais une copie du cahier.
Objectif mastery : UNKNOWN → FRAGILE (score ≥ 0.7 requis) Durée estimée : 15 minutes Difficulté : Niveau 1 uniquement (reconnaissance)
Générer 15 questions en respectant ces règles :
FLASH_MCQ) — 4 options, 1 seule correcte, distracteurs plausiblesDEF_SHORT) — "Qu'est-ce que [terme] ?"DOC.DESCRIBE) — "Que représente ce schéma/tableau ?"DOC.READ_VALUE) — "D'après le tableau, quelle est la valeur de X ?"MINDMAP_PARTIAL) — mini-carte SVG de la Section 2 avec 2-3 feuilles remplacées par ?. L'élève identifie les éléments manquants. 1-2 questions de ce type par session max.**Q[n] — [Type]** | Notion : [nom]
[Énoncé de la question]
Si QCM :
- A) ...
- B) ...
- C) ...
- D) ...
Objectif mastery : FRAGILE → OK (score ≥ 0.7 requis, sur items réussis en Session 1) Durée estimée : 15 minutes Difficulté : Niveaux 1-2 (reconnaissance + rappel aidé)
Générer 15 questions en respectant ces règles :
MISCONCEPTION.MCQ) — distracteurs basés sur les erreurs fréquentesCLOZE_KEYWORDS) — compléter avec les mots-clésASSOC_TERM_DEF) — relier termes et définitionsDOC.EXTRACT_EVIDENCE) — "Quel élément du document montre que..."DOC.INTERPRET_TREND) — "Comment évolue X d'après le graphique ?"LABEL_COMPLETION) — remplir les légendes manquantes d'un schémaNUMERIC) — "Calculer X. Donner la valeur et l'unité."MINDMAP_RECALL) — mini-carte SVG avec seulement le noeud central visible, toutes les feuilles vides et numérotées. L'élève reconstruit de mémoire. 1-2 questions de ce type par session max.Format obligatoire en 3 composantes (conforme Z4-AC09) :
**Q[n] — Corrigé**
✅ **Réponse attendue** : [la bonne réponse complète]
🔍 **Ce qui manque souvent** : [erreur type ou piège fréquent sur cette question]
💡 **Astuce mnémonique** : [phrase, acronyme, ou image mentale pour retenir]
📅 PLAN DE RÉVISION
┌─────────────────────────────────────────────────┐
│ J0 (aujourd'hui soir) — SESSION 1 │
│ Objectif : Découvrir → FRAGILE │
│ Durée : ~15 min │
│ Seuil : ≥ 70% de bonnes réponses │
│ Si < 70% : refaire les questions échouées │
│ avant de passer à Session 2 │
├─────────────────────────────────────────────────┤
│ J1 (demain) — REPOS ACTIF │
│ Relire le résumé (Section 1) — 5 min max │
│ Pas de questions : laisser le cerveau consolider │
├─────────────────────────────────────────────────┤
│ J2 (après-demain soir) — SESSION 2 │
│ Objectif : Consolider → OK │
│ Durée : ~15 min │
│ Seuil : ≥ 70% de bonnes réponses │
│ Si réussi : les items passent en état OK │
│ Prochaine révision dans 3 jours (J5) │
└─────────────────────────────────────────────────┘
Si une date de contrôle est fournie :
Générer un tableau par item :
| Item | Type | Notion | Après S1 | Après S2 | Prochaine révision |
|------|------|--------|----------|----------|--------------------|
| Masse volumique (def) | KNOWLEDGE | Densité | FRAGILE | OK | J+5 |
| Calcul de ρ | PROCEDURE | Densité | FRAGILE | OK | J+5 |
| ... | ... | ... | ... | ... | ... |
/study-guide ~/Documents/photos-cahier/pc-masse-volumique/
Matière : Physique-Chimie, 4ème
Contrôle dans 5 jours
Ou avec des fichiers spécifiques :
/study-guide ~/cahier/page1.jpg ~/cahier/page2.jpg
Ou avec un glob :
/study-guide ~/cahier/*.jpg
$ARGUMENTS, résout les fichiers image via Glob, puis les lit via Read (capacité multimodale de Claude Code)La fiche doit être générée sous forme d'un fichier HTML autonome (fiche-revision.html) dans le même dossier que les images source. Ce fichier est la sortie principale du skill.
.html, pas de fichiers externesdata:image/jpeg;base64,... via un script shell (base64 -i) et les intégrer directement dans le HTML comme <img> dans une grille photo avec lightbox au clichttps://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js et utiliser des balises <pre class="mermaid"> pour le rendu côté clientid sur chaque section<details> : repliables par défaut pour que l'élève ne voie pas les réponses<meta name="viewport" content="width=device-width,initial-scale=1"> dans <head>.@media (max-width: 768px) : padding wrap réduit (12px), header padding 16px, h1 à 20px, grille photos 2 colonnes, SVG max-height:260px, tableaux dans un wrapper overflow-x:auto pour scroller horizontalement.@media (max-width: 480px) : grille photos 2 colonnes serrées, boutons print repositionnés en bas (barre fixe bottom:0; left:0; right:0) avec flex:1 chacun pour occuper toute la largeur, zones cliquables ≥ 44px.@media (orientation: landscape) and (max-height: 500px) : header compacté (padding 10px, h1 18px), sommaire replié, photos en 4 colonnes, boutons print en haut droite mais plus petits.<table> doit être enveloppé dans un <div class="table-wrap"> avec overflow-x:auto, bord arrondi et indicateur visuel de scroll (box-shadow latéral ou mask-image gradient) qui disparaît en fin de scroll. Les cellules doivent garder pour que le texte se wrappe naturellement.Bash qui :
base64 -i <fichier>)fiche-revision.html dans le dossier sourceopen <fichier><!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Fiche de Révision — [Sujet]</title>
<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
<style>/* CSS intégré */</style>
</head>
<body>
<div class="header"><!-- Titre, matière, méta --></div>
<div class="toc"><!-- Sommaire cliquable --></div>
<div class="section photos"><!-- Photos base64 en grille --></div>
<div class="section"><!-- Résumé --></div>
<div class="section"><!-- Notions + Mermaid mindmap --></div>
<div class="section documents"><!-- Documents générés (SVG, Mermaid, tables) --></div>
<div class="section session1"><!-- Questions S1 --></div>
<div class="section session2"><!-- Questions S2 --></div>
<div class="section corriges"><!-- Corrigés dans <details> --></div>
<div class="section"><!-- Plan de révision + tableau mastery --></div>
<div class="lightbox"><!-- Lightbox pour photos --></div>
<script>mermaid.initialize({startOnLoad:true, theme:'default'});</script>
</body>
</html>
Avant de terminer, complète le dernier rapport créé par le hook dans
.claude/reports/study-guide/ (le fichier .md le plus récent avec status: pending).
Utilise le template .claude/report-template.md et remplis :
status dans le frontmatter : success, partial, ou errorSi le fichier .claude/reports/study-guide/.review-ready existe, signale à l'utilisateur :
"Le skill
/study-guidea été exécuté 5+ fois depuis le dernier review. Lancer/auto-review study-guidepour analyser et proposer des améliorations."
white-space:normalfixed, top-left, z-index élevé) doit ouvrir un tiroir latéral (drawer) contenant les liens du sommaire pour naviguer rapidement dans la fiche. Le drawer :
☰ qui devient ✕ quand ouvert@media print { .hamburger, .drawer, .drawer-backdrop { display:none!important } })<details> doivent rester lisibles : padding réduit mais summary ≥ 40px de hauteur tactile.position:fixed qui recouvre le contenu sur petits écrans sans compensation de padding-bottom.@media print doit garantir que tout le contenu est visible sur papier, notamment :
<details> repliables (corrigés, session 3) doivent être forcés ouverts à l'impression via details{display:block} details>summary{display:block} details>*{display:block!important} et details[open] ignoré. La règle minimale qui marche : @media print { details > *:not(summary) { display: block !important; } details { break-inside: avoid; } }..lightbox{display:none!important}.<section> doit avoir break-inside: avoid quand c'est possible pour éviter les coupures disgracieuses, et chaque titre de session une page-break-before: auto.max-width:100%; max-height:400px) pour ne pas déborder.fixed, masqués à l'impression) :
<details> des corrigés de la Session 3. L'élève reçoit les questions seules pour s'entraîner.print-eleve ou print-parent) sur <body>, appelle window.print(), puis retire la classe via window.onafterprint. Le CSS @media print utilise ces classes : body.print-eleve .corriges, body.print-eleve details.corrige { display: none !important }.position:fixed; top:16px; right:16px; z-index:100) avec les couleurs du projet et masqués via @media print { .print-buttons { display: none !important } }.