/* ═══════════════════════════════════════════════════════════════
   🖨️ DEVOIRATI — GÉNÉRATEUR DE FICHES : l'outil ET la feuille

   Deux mondes dans un seul fichier, séparés par @media print :
     · à l'écran  — l'outil de choix, en couleurs, agréable ;
     · sur papier — la feuille seule, en noir et blanc, économe.

   🔴 Pourquoi le papier n'hérite PAS des couleurs de l'écran : une famille
   imprime en noir et blanc. Un aplat violet devient un gris sale qui mange la
   cartouche et rend le texte moins lisible. Filets fins, zéro aplat.
   ═══════════════════════════════════════════════════════════════ */
:root{
  --mp-bg:#f8f9fa; --mp-carte:#fff; --mp-txt:#2c3e50; --mp-doux:#7a8699;
  --mp-trait:#e8ebf0; --mp-indigo:#667eea; --mp-violet:#764ba2;
  --mp-grad:linear-gradient(135deg,#667eea,#764ba2);
  --mp-r:14px; --mp-r-sm:10px;
  --mp-o-sm:0 2px 10px rgba(102,126,234,.10);
  --mp-o-md:0 6px 22px rgba(102,126,234,.16);
}
/* ── LA MOITIÉ SOMBRE DE L'OUTIL ─────────────────────────────────────────
   🔑 L'OUTIL passe au sombre ; la FEUILLE reste du papier. La règle
   « .mp-apercu .fiche » garde son fond blanc et son encre noire, ici comme
   sous l'imprimante : une feuille de devoir n'est pas une interface, et
   l'aperçu doit montrer ce qui sortira vraiment.
   ⛔ Les couleurs d'accent (indigo, violet, rose, ambre) ne bougent pas : elles
   portent la marque et tiennent sur les deux fonds. Seuls le sol, l'encre et
   les traits changent.
   ⚠️ Les deux selecteurs sont necessaires : la requete media sert l'appareil
   sombre, l'estampille sert le choix explicite — l'un ne remplace pas l'autre. */
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --mp-bg:#11161d; --mp-carte:#1a212b; --mp-txt:#e6ebf2; --mp-doux:#9aa7b8;
  --mp-trait:#2b3441;
  --mp-o-sm:0 2px 10px rgba(0,0,0,.45); --mp-o-md:0 6px 22px rgba(0,0,0,.5);
}}
:root[data-theme="dark"]{
  --mp-bg:#11161d; --mp-carte:#1a212b; --mp-txt:#e6ebf2; --mp-doux:#9aa7b8;
  --mp-trait:#2b3441;
  --mp-o-sm:0 2px 10px rgba(0,0,0,.45); --mp-o-md:0 6px 22px rgba(0,0,0,.5);
}

/* La barre d'actions est translucide : elle ne peut pas prendre un jeton
   opaque sans perdre le flou qui la detache du contenu qui defile dessous.
   ⚠️ color-mix() ne suffisait pas — mesure a l'ecran : elle restait le seul
   bloc clair sur fond sombre. On redit donc la couleur, une fois par etat. */
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .mp-actions{background:rgba(26,33,43,.96)}}
:root[data-theme="dark"] .mp-actions{background:rgba(26,33,43,.96)}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
[hidden]{display:none !important}
body{
  /* Cairo ne contient ni ℝ ni ℚ ni ℕ : la pile de secours n'est pas décorative. */
  font-family:'Cairo','Segoe UI',Tahoma,'Segoe UI Symbol','Noto Sans Math','Cambria Math',sans-serif;
  background:var(--mp-bg);color:var(--mp-txt);line-height:1.65;
  -webkit-text-size-adjust:100%;
}

/* ═════════ 1. L'OUTIL (écran) ═════════ */
.mp-tete{background:var(--mp-grad);color:#fff;padding:26px 20px 32px;border-radius:0 0 26px 26px;box-shadow:var(--mp-o-md)}
.mp-tete-in{max-width:1100px;margin:0 auto}
.mp-fil{display:flex;gap:9px;align-items:center;flex-wrap:wrap;font-size:.84rem;opacity:.93;margin-bottom:14px}
.mp-fil a{color:#fff;text-decoration:none;border-bottom:1px solid rgba(255,255,255,.45)}
.mp-fil span{opacity:.6}
.mp-h1{margin:0;font-size:clamp(1.35rem,4vw,2rem);font-weight:800}
.mp-sous{margin:6px 0 0;opacity:.93;font-size:.96rem}

.mp-main{max-width:1100px;margin:0 auto;padding:22px 20px 70px}
/* ── la couleur, à l'ÉCRAN seulement ────────────────────────────────────────
   Quatre teintes de la famille Devoirati (indigo → violet → rose → ambre).
   Elles servent à distinguer les quatre étapes d'un coup d'œil, pas à décorer :
   on doit voir où on en est sans lire les titres. Le papier n'en hérite pas. */
.mp-panneau{
  background:var(--mp-carte);border:1px solid var(--mp-trait);
  border-inline-start:5px solid var(--mp-indigo);
  border-radius:var(--mp-r);padding:18px;margin-bottom:16px;box-shadow:var(--mp-o-sm);
}
.mp-panneau:nth-of-type(1){border-inline-start-color:#667eea}
.mp-panneau:nth-of-type(2){border-inline-start-color:#764ba2}
.mp-panneau:nth-of-type(3){border-inline-start-color:#f093fb}
.mp-panneau:nth-of-type(4){border-inline-start-color:#ffc107}
.mp-panneau:nth-of-type(2) .mp-num{background:linear-gradient(135deg,#764ba2,#9b6bc4)}
.mp-panneau:nth-of-type(3) .mp-num{background:linear-gradient(135deg,#f093fb,#764ba2)}
.mp-panneau:nth-of-type(4) .mp-num{background:linear-gradient(135deg,#ffc107,#f093fb)}
.mp-panneau-tete{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.mp-num{width:27px;height:27px;border-radius:50%;background:var(--mp-grad);color:#fff;display:grid;place-items:center;font-weight:800;font-size:.85rem;flex:none}
.mp-panneau-ttl{font-weight:800;font-size:1.04rem}
.mp-panneau-aide{font-size:.8rem;color:var(--mp-doux);margin-inline-start:auto}

/* les compteurs par paragraphe — le cœur de l'outil */
.mp-axes{display:flex;flex-direction:column;gap:8px}

/* Les CATEGORIES repliables (Prod9 : 44 axes — « la liste est très longue »,
   demande du chef). Un chapitre sans champ `groupe` n'en produit aucune.

   🔴 01/09/2026 — UNE COULEUR PAR RUBRIQUE, et un vrai ACCORDÉON. Le chef :
   « le menu doit être partagé en 4 parties de couleurs différentes :
   équations / inéquations / encadrements / intervalles » puis « menu
   accordéon ». La teinte `--mp-g` est posée par le socle, en boucle sur les
   quatre teintes de la maison ; elle descend jusqu'aux LIGNES de la rubrique,
   sinon la couleur s'arrête au titre et le bloc n'existe pas à l'œil. */
.mp-groupe{border:1.5px solid var(--mp-trait);
  border-inline-start:5px solid var(--mp-g,var(--mp-indigo));
  border-radius:var(--mp-r-sm);background:var(--mp-bg);overflow:hidden}
.mp-groupe-titre{cursor:pointer;font-weight:800;font-size:.95rem;
  padding:10px 14px;display:flex;align-items:center;gap:10px;
  color:var(--mp-fonce);user-select:none;list-style:none;
  background:var(--mp-g-doux,transparent)}
.mp-groupe-titre::-webkit-details-marker{display:none}
.mp-groupe-titre::before{content:'◂';font-size:.8em;color:var(--mp-g,var(--mp-doux));
  transition:transform .16s}
.mp-groupe[open] .mp-groupe-titre::before{transform:rotate(-90deg)}
.mp-groupe-nb{margin-inline-start:auto;font-size:.78rem;font-weight:700;
  color:var(--mp-doux);background:var(--mp-carte);border-radius:999px;
  padding:2px 9px}
/* dès qu'une rubrique porte un choix, son compteur devient « 3/7 » en couleur :
   repliée, elle continue de dire ce qu'on y a pris */
.mp-groupe-actif>.mp-groupe-titre>.mp-groupe-nb{background:var(--mp-g);color:#fff}
.mp-groupe[open]{box-shadow:0 2px 10px rgba(0,0,0,.05)}
.mp-groupe .mp-axe{margin:0 8px 8px;border-radius:var(--mp-r-sm)}
.mp-groupe .mp-axe:first-of-type{margin-top:8px}
.mp-groupe-coche{width:17px;height:17px;
  accent-color:var(--mp-g,var(--mp-indigo));cursor:pointer}
.mp-axe-nb{width:52px;margin-inline-start:auto;padding:4px 6px;text-align:center;
  font-family:inherit;font-weight:700;font-size:.85rem;border:1.5px solid var(--mp-trait);
  border-radius:8px;background:var(--mp-carte);color:var(--mp-txt)}

.mp-axe{
  display:flex;align-items:center;gap:12px;
  background:var(--mp-bg);border:1.5px solid var(--mp-trait);
  border-inline-start:5px solid var(--mp-t,#667eea);
  border-radius:var(--mp-r-sm);padding:9px 13px;
  transition:border-color .16s,background .16s,box-shadow .16s;
}
/* Une teinte par paragraphe, en boucle : neuf lignes grises se confondent,
   neuf lignes teintées se retrouvent d'un coup d'œil quand on redescend. */
.mp-axe:nth-child(5n+1){--mp-t:#667eea;--mp-t-doux:rgba(102,126,234,.10)}
.mp-axe:nth-child(5n+2){--mp-t:#764ba2;--mp-t-doux:rgba(118,75,162,.10)}
.mp-axe:nth-child(5n+3){--mp-t:#f093fb;--mp-t-doux:rgba(240,147,251,.13)}
.mp-axe:nth-child(5n+4){--mp-t:#ffc107;--mp-t-doux:rgba(255,193,7,.15)}
.mp-axe:nth-child(5n+5){--mp-t:#8e6fd8;--mp-t-doux:rgba(142,111,216,.11)}
/* 🔴 …SAUF dans une rubrique colorée : là, les lignes prennent la teinte de
   LEUR rubrique. Cinq couleurs en boucle à l'intérieur d'un bloc bleu
   défont le bloc. ⚠️ Même spécificité que les `nth-child` ci-dessus : c'est
   l'ORDRE qui tranche, cette règle doit rester après elles. */
.mp-groupe .mp-axe{--mp-t:var(--mp-g);--mp-t-doux:var(--mp-g-doux)}
/* Le QCM du chapitre n'est pas une rubrique : il vient APRÈS les quatre, et
   il ne doit pas se lire comme une cinquième. Teinte neutre, exprès. */
.mp-axe-qcm{--mp-t:#8e8e9a;--mp-t-doux:rgba(140,140,155,.12)}
.mp-axe:hover{background:var(--mp-carte)}
.mp-axe.mp-axe-actif{
  background:var(--mp-t-doux);
  border-color:var(--mp-trait);border-inline-start-color:var(--mp-t);
  box-shadow:var(--mp-o-sm);
}
.mp-axe-nom{font-weight:700;font-size:.95rem;flex:1;min-width:0}
.mp-axe-dispo{
  font-size:.74rem;font-weight:800;white-space:nowrap;
  color:var(--mp-t);background:var(--mp-carte);
  border:1px solid var(--mp-trait);border-radius:999px;padding:2px 9px;
}
.mp-axe-actif .mp-axe-dispo{background:var(--mp-carte);border-color:var(--mp-t)}
.mp-axe-actif .mp-compteur{border-color:var(--mp-t)}
.mp-axe-actif .mp-compteur button{color:var(--mp-t)}
.mp-axe-vide{opacity:.45}
.mp-compteur{display:flex;align-items:center;gap:0;flex:none;border:1.5px solid var(--mp-trait);border-radius:999px;overflow:hidden;background:var(--mp-carte)}
.mp-compteur button{
  width:32px;height:32px;border:0;background:none;cursor:pointer;
  font-size:1.15rem;font-weight:800;color:var(--mp-violet);font-family:inherit;line-height:1;
}
.mp-compteur button:hover:not(:disabled){background:rgba(102,126,234,.12)}
.mp-compteur button:disabled{opacity:.3;cursor:default}
.mp-compteur input{
  width:44px;height:32px;border:0;border-inline:1.5px solid var(--mp-trait);
  text-align:center;font-family:inherit;font-weight:800;font-size:.95rem;color:var(--mp-txt);
  background:none;-moz-appearance:textfield;
}
.mp-compteur input::-webkit-outer-spin-button,
.mp-compteur input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}

/* mode algèbre : une case à cocher par type, et un seul nombre pour tous */
.mp-axe-coche{display:flex;align-items:center;gap:10px;flex:1;min-width:0;cursor:pointer}
.mp-axe-coche input{accent-color:var(--mp-t,#667eea);width:17px;height:17px;flex:none;cursor:pointer}
.mp-parType{display:flex;align-items:center;gap:8px;font-size:.86rem;font-weight:700;color:var(--mp-doux);margin-inline-start:auto}
.mp-parType input{
  width:64px;padding:6px 10px;border:1.5px solid var(--mp-trait);border-radius:999px;
  font-family:inherit;font-weight:800;font-size:.95rem;text-align:center;color:var(--mp-violet);
  background:var(--mp-carte);
}
.mp-parType input:focus{outline:0;border-color:var(--mp-indigo)}

.mp-puces{display:flex;gap:7px;flex-wrap:wrap}
.mp-puce{font-family:inherit;font-size:.86rem;font-weight:700;padding:8px 15px;border-radius:999px;cursor:pointer;border:1.5px solid var(--mp-trait);background:var(--mp-bg);color:var(--mp-doux);transition:all .16s}
.mp-puce:hover{border-color:var(--mp-indigo);color:var(--mp-indigo)}
.mp-puce-on{background:var(--mp-grad);border-color:transparent;color:#fff;box-shadow:var(--mp-o-sm)}

.mp-cases{display:flex;gap:9px;flex-wrap:wrap}
.mp-case{display:flex;align-items:center;gap:8px;font-size:.9rem;font-weight:600;cursor:pointer;background:var(--mp-bg);border:1.5px solid var(--mp-trait);border-radius:999px;padding:8px 15px;transition:all .16s}
.mp-case input{accent-color:var(--mp-violet);width:16px;height:16px;cursor:pointer}
/* Une case cochée doit se voir sans lire : le texte seul ne suffit pas quand
   on relit la page en diagonale avant d'imprimer. */
.mp-case:has(input:checked){background:rgba(240,147,251,.14);border-color:#f093fb;color:var(--mp-violet)}
.mp-case:hover{border-color:#f093fb}

.mp-champs{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}
.mp-champ{display:flex;flex-direction:column;gap:4px}
.mp-champ label{font-size:.78rem;font-weight:700;color:var(--mp-doux)}
.mp-champ input{font-family:inherit;font-size:.92rem;color:var(--mp-txt);background:var(--mp-bg);border:1.5px solid var(--mp-trait);border-radius:var(--mp-r-sm);padding:9px 12px}
.mp-champ input:focus{outline:0;border-color:var(--mp-indigo);background:var(--mp-carte)}

/* la barre d'action, toujours sous la main */
.mp-actions{position:sticky;bottom:0;z-index:30;display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:color-mix(in srgb,var(--mp-carte) 96%,transparent);backdrop-filter:blur(8px);border:1px solid var(--mp-trait);border-radius:var(--mp-r);padding:12px 16px;box-shadow:0 -4px 20px rgba(102,126,234,.12)}
.mp-total{font-weight:800;font-size:.95rem}
.mp-total b{color:var(--mp-violet);font-size:1.2rem}
.mp-btn{font-family:inherit;font-size:.95rem;font-weight:800;padding:11px 22px;border-radius:999px;border:0;cursor:pointer;transition:transform .16s,box-shadow .16s}
.mp-btn:disabled{opacity:.45;cursor:not-allowed}
.mp-btn:not(:disabled):hover{transform:translateY(-2px)}
.mp-btn-1{background:var(--mp-grad);color:#fff;box-shadow:var(--mp-o-sm)}
.mp-btn-2{background:var(--mp-carte);color:var(--mp-violet);border:1.5px solid var(--mp-violet)}
.mp-btn-3{background:var(--mp-carte);color:var(--mp-doux);border:1.5px solid var(--mp-trait)}
.mp-msg{font-size:.85rem;font-weight:700;color:var(--mp-doux);margin-inline-start:auto}

/* ═════════ 2. LA FEUILLE (écran : aperçu papier) ═════════ */
/* La feuille est blanche : sans fond teinté autour, elle se fond dans la page
   et on ne voit plus où commence le papier. Le cadre coloré fait « bureau ». */
.mp-apercu:not(:empty){
  margin-top:22px;padding:20px;border-radius:18px;
  background:linear-gradient(135deg,rgba(102,126,234,.13),rgba(240,147,251,.13));
}
.fiche{
  background:#fff;color:#000;max-width:820px;margin:0 auto;
  padding:26px 30px;border:1px solid var(--mp-trait);border-radius:var(--mp-r);
  box-shadow:var(--mp-o-md);
}
.fiche-entete{display:flex;align-items:flex-start;gap:14px;border-bottom:2px solid #333;padding-bottom:10px;margin-bottom:6px}
/* Le code QR de l'en-tête : la feuille imprimée ramène au site.
   14 mm de côté, et pas moins : le motif fait 29 modules plus sa marge, ce
   qui donne 0,4 mm par module — la limite basse de ce que lit un appareil
   photo de téléphone. Plus petit, il ne se scanne plus. */
.fiche-qr{flex:none;width:14mm;height:14mm}
.fiche-qr svg{display:block;width:100%;height:100%}
.fiche-marque{font-weight:800;font-size:1.15rem;letter-spacing:-.3px;flex:none}
.fiche-marque small{display:block;font-size:.62rem;font-weight:600;letter-spacing:.2px;opacity:.75}
.fiche-prof{font-size:.78rem;line-height:1.5;text-align:center;flex:1}
.fiche-prof div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fiche-meta{font-size:.75rem;text-align:left;flex:none;direction:rtl}
.fiche-titre{text-align:center;font-weight:800;font-size:1.1rem;margin:10px 0 4px}
.fiche-ligne-eleve{display:flex;gap:16px;font-size:.78rem;border-bottom:1px solid #999;padding-bottom:8px;margin-bottom:12px}
.fiche-ligne-eleve span{flex:1}

.fiche-exos{display:flex;flex-direction:column;gap:11px}
/* Deux colonnes par défaut — moitié moins de feuilles pour l'algèbre. Chaque
   exercice qui porte une figure ou un tableau reprend la pleine largeur : une
   figure coupée ne se lit plus, un tableau serré non plus. */
.fiche-dense{display:grid;grid-template-columns:1fr 1fr;gap:9px;align-items:start}
.fiche-exo-large{grid-column:1 / -1}
@media (max-width:640px){.fiche-dense{grid-template-columns:1fr}}
/* 🔴 03/09/2026 — « lorsque l'expression est très longue l'affichage devient
   mauvais ». Une formule MathJax ne se coupe pas : elle sortait de sa carte
   et poussait toute la feuille, d'où la bande de débordement. Trois gardes :
   le corps défile chez lui au lieu de pousser ses voisins ; une formule très
   longue est resserrée (`fiche-exo-serre`, posée par le socle après mesure) ;
   et à l'impression, où il n'y a pas de défilement, on la laisse revenir à
   la ligne entre ses termes plutôt que de la couper au bord de la page. */
.fiche-exo-corps{overflow-x:auto;overflow-y:hidden;max-width:100%}
.fiche-exo-serre .fiche-exo-corps{font-size:.86em}
.fiche-exo-corps mjx-container{max-width:100%}
.fiche-exo{border:1px solid #999;border-radius:6px;padding:10px 12px;break-inside:avoid;page-break-inside:avoid}
.fiche-exo-tete{display:flex;align-items:baseline;gap:8px;margin-bottom:5px}
.fiche-exo-num{font-weight:800;font-size:.95rem;white-space:nowrap}
.fiche-exo-ttl{font-weight:700;font-size:.88rem;flex:1}
.fiche-exo-axe{font-size:.68rem;color:#555;white-space:nowrap}
.fiche-exo-corps{font-size:.87rem}
.fiche-consigne{font-weight:700;margin:0 0 5px}
.fiche-question{font-size:.95rem}
/* Les tableaux d'effectifs arrivent du moteur avec leurs propres couleurs.
   À l'écran on les laisse ; sur papier ils redeviennent des filets noirs —
   un aplat violet sur une imprimante familiale, c'est de l'encre pour rien
   et un tableau moins lisible. */
.fiche table{border-collapse:collapse;max-width:100%;margin:4px 0;font-size:.82rem}
.fiche th,.fiche td{border:1px solid #999;padding:3px 8px;text-align:center}
/* La figure flotte : sans cela une petite figure occupe toute une bande et
   la feuille double de longueur pour rien. Économiser le papier commence là. */
.fiche-exo-fig{float:left;margin:0 12px 8px 0;max-width:190px}
.fiche-exo-fig svg,.fiche-exo-fig img{max-width:100%;height:auto}
.fiche-exo::after{content:"";display:block;clear:both}
.fiche-exo ol,.fiche-exo ul{margin:4px 0;padding-inline-start:20px}
.fiche-exo li{margin:2px 0}

/* ── le QCM sur la feuille (21/08/2026) ─────────────────────────────────
   🔴 Ces deux regles vivaient dans composeur.css : les pages de CHAPITRE ne
   le chargent pas, et leurs choix s'imprimaient colles — « أ) (AB)ب) (BC) ».
   Vu en rejouant @media print, pas a l'ecran. Le socle est le bon endroit :
   la feuille est la meme partout. */
.fiche-qcm-choix{display:flex;flex-wrap:wrap;gap:4px 18px;margin:3px 0 2px}
.fiche-qcm-o{white-space:nowrap}
.fiche-qs>li{margin:3px 0}
.fiche-qs,.fiche-cor-qs{margin:2px 0 0;padding-inline-start:22px}

.fiche-corrections{margin-top:16px;padding-top:12px;border-top:2px solid #333}
.fiche-corrections h2{font-size:1.02rem;margin:0 0 10px;text-align:center}
.fiche-cor{border:1px solid #bbb;border-radius:6px;padding:9px 11px;margin-bottom:9px;break-inside:avoid;page-break-inside:avoid;font-size:.85rem}
.fiche-cor-num{font-weight:800;margin-bottom:4px}
/* La figure du corrigé arrive telle quelle depuis la banque, dans son propre
   .geo-figure-wrap : sans ces trois lignes elle occupe toute une bande et le
   corrigé double de longueur — c'est-à-dire une feuille de plus par série. */
.fiche-cor .geo-figure-wrap{float:left;margin:0 12px 6px 0;max-width:175px}
.fiche-cor .geo-figure-wrap svg{max-width:100%;height:auto}
.fiche-cor::after{content:"";display:block;clear:both}
.fiche-cor .fiche-methode{border-inline-start:3px solid #999;padding-inline-start:9px;margin-top:6px;font-size:.82rem;color:#333}
/* Provenance d'un corrigé recopié d'une page du chapitre plutôt que rédigé et
   vérifié ici (tartib). Discret : c'est une garantie, pas une consigne. */
.fiche-cor .fiche-provenance{margin:4px 0 0;font-size:.68rem;color:#8a8a8a;text-align:left;direction:ltr}

.fiche-pied{margin-top:14px;padding-top:8px;border-top:1px solid #999;font-size:.7rem;display:flex;justify-content:space-between;gap:10px}

@media (max-width:640px){
  .mp-main{padding:16px 14px 70px}
  .fiche{padding:18px 16px}
  .mp-axe{flex-wrap:wrap}
  .mp-axe-nom{flex:1 1 100%}
  .fiche-exo-fig{float:none;margin:0 auto 8px;max-width:100%}
}

/* ═════════ 3. L'IMPRESSION ═════════ */
@page{size:A4;margin:12mm 12mm 15mm}
@media print{
  body{background:#fff}
  .mp-tete,.mp-panneau,.mp-actions,.mp-hors-papier{display:none !important}
  .mp-main{max-width:none;padding:0;margin:0}
  /* le cadre « bureau » de l'écran ne doit pas se retrouver sur le papier */
  .mp-apercu,.mp-apercu:not(:empty){margin:0;padding:0;background:none;border-radius:0}
  .fiche{max-width:none;margin:0;padding:0;border:0;border-radius:0;box-shadow:none}
  /* saut de page AVANT le corrigé : l'énoncé et sa correction ne doivent
     jamais se retrouver sur la même feuille sous les yeux de l'élève */
  .fiche-corrections{break-before:page;page-break-before:always;border-top:0;margin-top:0}
  .fiche-exo,.fiche-cor{border-color:#666}

  /* ── le papier gaspillé (30/08/2026) ────────────────────────────────────
     Deux causes, pas une.

     ① La GRILLE des fiches d'entraînement (`fiche-dense`, moteur-pdf.js).
        Une grille impose des RANGÉES : la rangée fait la hauteur du plus
        grand des deux exercices, et le plus court laisse du blanc dessous.
        Pire, dès qu'un seul des deux ne tient plus en bas de page, la
        rangée ENTIÈRE descend — une demi-feuille blanche à chaque fois.
        Des colonnes qui COULENT n'ont pas de rangées : le texte remplit la
        première colonne, puis la seconde, puis la page suivante.
     ② Le `break-inside:avoid` posé sur TOUS les exercices. Un exercice plus
        haut que la place restante saute la page en entier. C'est juste
        quand il porte une figure — une figure coupée ne se lit plus — et
        c'est du papier perdu quand il ne porte que du texte et des
        questions, qui se coupent sans dommage. On ne garde donc `avoid`
        que là où il protège vraiment quelque chose ; ailleurs, orphans et
        widows suffisent à empêcher la ligne solitaire.
     ⛔ Rien ici ne touche `.fiche-corrections{break-before:page}` plus haut :
        l'énoncé et son corrigé restent sur deux feuilles séparées. */
  .fiche-dense{display:block;column-count:2;column-gap:8mm}
  .fiche-dense>.fiche-exo{margin:0 0 9px}
  .fiche-exo-large{column-span:all}
  /* Sur le papier il n'y a pas de defilement : une formule trop large serait
     coupee net au bord de la feuille. On la laisse donc revenir a la ligne
     entre ses termes, et on retire le defilement qui n'a plus de sens. */
  .fiche-exo-corps{overflow:visible}
  .fiche-exo-corps mjx-container{display:inline-block;white-space:normal}
  .fiche-exo-serre .fiche-exo-corps{font-size:.82em}
  /* la flexbox de la colonne unique (devoirs) : en bloc, le `gap` devient
     une marge et la fragmentation redevient celle d'un texte ordinaire */
  .fiche-exos:not(.fiche-dense){display:block}
  .fiche-exos:not(.fiche-dense)>.fiche-exo{margin:0 0 11px}

  .fiche-exo,.fiche-cor{
    break-inside:auto;page-break-inside:auto;orphans:3;widows:3;
  }
  /* ce qui doit rester d'un seul tenant : une figure, un tableau */
  .fiche-exo:has(.fiche-exo-fig),.fiche-exo:has(table),
  .fiche-cor:has(.geo-figure-wrap),.fiche-cor:has(table){
    break-inside:avoid;page-break-inside:avoid;
  }
  /* et le titre ne reste jamais seul en bas d'une page ou d'une colonne */
  .fiche-exo-tete,.fiche-cor-num{break-after:avoid;page-break-after:avoid}
  /* zéro aplat sur le papier, y compris ceux que le moteur pose lui-même */
  .fiche table,.fiche th,.fiche td,.fiche [style*="background"]{
    background:none !important;background-image:none !important;color:#000 !important;
  }
  .fiche th,.fiche td{border:1px solid #000 !important}
  a{text-decoration:none;color:#000}
}
