/* Académie d'Invocation — prototype DARK, entièrement isolé sous .sfedu. */
.sf-education-mode #titleBanner{position:relative;display:grid;min-height:48px;place-items:center;overflow:hidden;border:1px solid rgba(255,229,160,.42);border-radius:16px;background:linear-gradient(90deg,#ead8b5,#fff4d8 50%,#ead8b5);box-shadow:0 12px 40px rgba(0,0,0,.45)}.sf-education-mode #titleBanner .title-banner{visibility:hidden;border:0;box-shadow:none}.sf-education-mode #titleBanner:after{position:absolute;inset:0;display:grid;place-items:center;content:'SOUL FORCE';color:#3b3026;font:800 18px/1 Georgia,serif;letter-spacing:.08em}
.sf-education-mode #tab-forge>:not(.sfedu-page),.sf-education-mode .nav button[data-tab="souls"],.sf-education-mode .nav button[data-tab="trainers"],.sf-education-mode .nav button[data-tab="fusion"],.sf-education-mode .nav button[data-tab="tower"],.sf-education-mode .nav button[data-tab="arena"]{display:none!important}
.sfedu-screen{padding:0 0 calc(var(--sfedu-nav,70px) + 20px + env(safe-area-inset-bottom))!important;background:none!important}.sfedu-page{min-height:calc(100dvh - 132px);padding:12px 10px 14px}.sfedu{position:relative;width:100%;min-height:calc(100dvh - 170px);border:1px solid rgba(255,229,160,.42);border-radius:24px;padding:24px;background:linear-gradient(165deg,rgba(34,19,51,.86),rgba(8,13,29,.94)),var(--sfedu-bg,linear-gradient(165deg,#251434,#101a34)) center top/cover no-repeat;color:#fff8ed;box-shadow:0 16px 44px rgba(0,0,0,.44);font-family:system-ui,sans-serif}
.sfedu h2{display:flex;align-items:center;gap:11px}.sfedu-emblem{width:42px;height:42px;flex:none;object-fit:contain;filter:drop-shadow(0 4px 8px rgba(0,0,0,.42))}
.sfedu h2,.sfedu h3,.sfedu p{margin-top:0}.sfedu h2{padding-right:42px;font-size:24px}.sfedu h3{font-size:18px}.sfedu p{line-height:1.45;color:#e8def1}/* Même chevron dessiné pour le retour, en pastille large (le glyphe texte restait minuscule). */
.sfedu-close{position:absolute;right:14px;top:14px;display:grid;place-items:center;width:72px;height:54px;border:0;border-radius:20px;padding:0;background:linear-gradient(160deg,#ffe08a,#e2a344);font-size:0;box-shadow:0 6px 16px rgba(0,0,0,.28),0 0 0 3px rgba(255,224,138,.32)}
.sfedu-close:before{width:34px;height:26px;background:#4a2f10;clip-path:polygon(100% 0,64% 0,0 50%,64% 100%,100% 100%,36% 50%);content:''}
.sfedu-close:active{transform:scale(.94)}
.sfedu-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:18px 0}.sfedu-stat{padding:12px 6px;border:1px solid rgba(255,255,255,.13);border-radius:14px;background:rgba(255,255,255,.06);text-align:center}.sfedu-stat strong{display:block;color:#ffe5a0;font-size:20px}.sfedu-stat span{display:block;margin-top:3px;color:#cfc4dc;font-size:11px}.sfedu-energy-gauge{height:10px;margin:10px 7px 3px!important;overflow:hidden;border-radius:999px;background:rgba(255,255,255,.14)}.sfedu-energy-gauge i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#63d9ff,#ffe17a);box-shadow:0 0 10px rgba(99,217,255,.55)}
.sfedu-summary{margin:16px 0;padding:11px 13px;border-radius:13px;background:#43346e;border:1px solid rgba(255,255,255,.12);color:#f5e6b5;font-size:13px;font-weight:750;text-align:center}.sfedu-show-all{margin:-4px 0 12px}
.sfedu-actions{display:grid;gap:10px}.sfedu-btn{width:100%;min-height:52px;border:1px solid rgba(255,225,150,.36);border-radius:15px;padding:11px 15px;background:linear-gradient(135deg,#6d3d95,#31549a);color:white;font:800 16px/1.2 system-ui,sans-serif}.sfedu-btn.secondary{background:rgba(255,255,255,.08);color:#fff1c6}.sfedu-btn.quiet{min-height:44px;border-color:transparent;background:transparent;color:#cfc4dc;font-size:13px}.sfedu-btn:disabled{opacity:.45}
.sfedu-step-label{margin:17px 0 8px;color:#f5e6b5;font-size:13px;font-weight:800}.sfedu-stars{grid-template-columns:repeat(5,minmax(0,1fr));gap:6px}.sfedu-stars .sfedu-btn{min-height:46px;padding:8px 2px;border-radius:12px;font-size:13px}.sfedu-primary-actions{margin-top:16px}
.sfedu-voice-toggle{margin:0 0 14px;text-align:left}.sfedu-voice-toggle.on{border-color:rgba(255,226,143,.72);background:linear-gradient(135deg,rgba(104,62,143,.72),rgba(60,83,147,.68));box-shadow:0 0 20px rgba(181,126,255,.18)}
/* ————— Carrousel des matières ————————————————————————————————————————————————————
   Retour propriétaire du 14/08 : « pour l'Académie ce n'est pas beau, peux-tu faire un carrousel
   comme les héros pour choisir les matières ». UNE matière à la fois, en grand, avec exactement la
   chrome du carrousel de héros : les classes .hc-arrow et .hc-dot sont réutilisées telles quelles,
   pas recopiées, pour que les deux écrans ne puissent pas diverger.
   Les six petits bandeaux recadrés ont disparu : le professeur était rogné au cadre, et la page
   n'était qu'une pile de vignettes. Ici l'illustration est carrée, entière, et tient la page.
   L'ÉLÉMENT DE LA SOUL ACTIVE habille la vignette (aura, liseré, particules) : c'est le lien
   visible entre le compagnon de l'enfant et ce qu'il va apprendre. C'est de la décoration posée
   SUR l'illustration — la règle « aucune surface translucide » vise les cadres et les panneaux,
   elle n'interdit pas une lueur. */
.sfedu-carousel{display:grid;gap:0;position:relative;
  /* Bord à bord : on annule le padding de `.sfedu` (24px) et la marge interne, des deux côtés. */
  /* Bord à bord. Le décalage horizontal est posé EN JAVASCRIPT, depuis le padding réellement
     calculé de `.sfedu` — mesuré : 16 px sur téléphone, 20 px sur PC, et jamais la valeur du bloc de
     base. Trois breakpoints se relaient, et toute constante écrite ici dépasse sur au moins un
     profil. Un débordement horizontal ne se voit pas à l'œil sur une capture : seule la barrière
     l'attrape, et elle l'a attrapé deux fois. */
  margin:8px 0 18px}
/* `display:block` et non plus `flex` : la scène héberge des couches en position absolue ET les deux
   flèches, ancrées à `top:50%`. En flex, sa hauteur ne valait plus celle de la figure et les flèches
   tombaient au bas de la vignette. La figure fait 100 % de large, elle n'a besoin d'aucun centrage. */
.sfedu-carousel-stage{position:relative;display:block;
  --sfedu-el:#ffb066;--sfedu-el-glow:rgba(255,176,102,.45);
  /* Une seule source pour la largeur de la carte : les effets qui doivent s'aligner dessus sans
     être dedans (les flammes débordent en haut) la reprennent au lieu de la recopier. */
  /* PLEINE PAGE (retour propriétaire du 2026-08-16 : « j'aimerais que le carrousel soit en pleine
     page »). La vignette est CARRÉE — sur un téléphone portrait sa taille est donc plafonnée par la
     largeur, et aucune valeur de `vh` n'y changera quoi que ce soit. Pour qu'elle remplisse
     réellement l'écran, elle doit toucher les DEUX BORDS : `.sfedu-carousel` annule pour cela le
     padding de la page. D'où 100 % ici, sans clamp. */
  --sfedu-vignette:100%}
/* La vignette fluide recadre les illustrations sans les déformer. Son liseré et sa lueur portent
   la couleur de l'élément — c'est l'effet demandé, lisible d'un coup d'œil sans les particules. */
.sfedu-carousel-figure{position:relative;z-index:1;display:block;overflow:hidden;cursor:pointer;
  /* Les six sources font 1536×1024 (3:2) et gardent le sujet dans les 70 % centraux. Le cadre réel
     varie de 1,10:1 à 2,05:1 : `cover` absorbe cet écart dans la zone de sécurité, sans déformer
     la peinture. Hauteur bornée et non pas `aspect-ratio` : sur un 320 un format source fixe pousserait le bouton d'entrée
     SOUS la barre de navigation, et l'enfant ne le verrait pas sans défiler. */
  /* Budget = viewport - en-tête - carte d'info - pastilles - navigation. Mesuré par la barrière :
     526 px de réserve gardent aussi le bouton visible à 390×844 et dans la colonne PC ; le plancher descend à 156 px sur
     320×568, où l'en-tête est compacté par la media query dédiée. */
  width:var(--sfedu-vignette);height:clamp(156px,min(42dvh,calc(100dvh - 526px)),400px);border-radius:0;
  /* Bord à bord : plus de liseré latéral, la couleur de l'élément passe en haut et en bas seulement,
     sinon on redessinerait le cadre que le propriétaire a demandé de retirer ailleurs. */
  box-shadow:inset 0 3px 0 var(--sfedu-el),inset 0 -3px 0 var(--sfedu-el),0 0 34px var(--sfedu-el-glow)}
.sfedu-carousel-art{display:block;width:100%;height:100%;object-fit:cover;transform-origin:50% 100%;animation:sf-hc-breathe 3.4s ease-in-out infinite}
/* POURTOUR EN PARTICULES : le canvas est un FRÈRE de la figure, jamais dedans — `overflow:hidden`
   couperait la lueur qui doit déborder de quelques pixels. Il se place lui-même (taille, décalage)
   depuis le module, qui connaît seul sa marge extérieure. */
.sfedu-carousel-rim{position:absolute;z-index:2;pointer-events:none}
/* Les flèches sont celles des héros, mais deux fois plus petites. Elles étaient à `bottom:-15px`,
   DÉBORDANT sous la vignette : correct quand la carte était encadrée
   et centrée, il y avait un « dehors » où pendre. En pleine page (16/08) il n'y en a plus — elles se
   retrouvaient à moitié hors écran et sous le voile du détail. Elles reviennent au centre vertical de
   l'image, à 236 px du haut sur un 390, donc largement au-dessus du voile qui commence à 286.
   Jamais sous 44 px : c'est un doigt d'enfant. */
.sfedu-carousel-stage .hc-arrow.hc-prev,.sfedu-carousel-stage .hc-arrow.hc-next{top:50%;bottom:auto;
  width:clamp(46px,12vw,58px);height:clamp(46px,10vw,50px);border-radius:16px;transform:translateY(-50%)}
.sfedu-carousel-stage .hc-arrow.hc-prev:active,.sfedu-carousel-stage .hc-arrow.hc-next:active{transform:translateY(-50%) scale(.94)}
.sfedu-carousel-stage .hc-arrow.hc-prev:before,.sfedu-carousel-stage .hc-arrow.hc-next:before{
  width:clamp(20px,5.5vw,26px);height:clamp(16px,4vw,20px)}
.sfedu-carousel-figure.is-swap .sfedu-carousel-art{animation:sfedu-carousel-in .3s ease,sf-hc-breathe 3.4s ease-in-out .3s infinite}
@keyframes sfedu-carousel-in{from{opacity:0;transform:scale(1.05)}to{opacity:1;transform:none}}
/* Les couches sont exactement à la taille de la figure. Chaque trajectoire entre par un bord et
   sort par un autre avec des positions en pourcentage de cette figure, jamais du viewport. */
.sfedu-carousel-motes,.sfedu-carousel-flammes{position:absolute;z-index:2;inset:0;display:none;overflow:hidden;pointer-events:none}
.sfedu-carousel-motes i,.sfedu-carousel-flammes i{position:absolute;opacity:0;animation-delay:var(--d,0s)!important}

/* FEU — huit langues traversent le portrait du bas vers le haut. Le blend `screen` est abandonné :
   le parent doit rester devant l'image opaque et son contexte d'empilement annulait le mélange. */
.sfedu-carousel[data-element="feu"],.sfedu-carousel-stage[data-element="feu"]{--sfedu-el:#ff9a45;--sfedu-el-glow:rgba(255,154,69,.5)}
.sfedu-carousel-stage[data-element="feu"] .sfedu-carousel-flammes{display:block}
.sfedu-carousel-flammes i{left:calc(var(--i,0)*12.5% - 4%);bottom:-34%;width:18%;height:34%;
  border-radius:52% 48% 46% 54%/74% 70% 30% 26%;filter:drop-shadow(0 0 7px #ff681d);transform-origin:50% 100%;
  clip-path:polygon(50% 0,68% 29%,92% 58%,76% 100%,20% 100%,5% 62%,34% 35%);
  background:radial-gradient(55% 72% at 50% 78%,#fff7c2 0 14%,#ffc83d 30%,#ff681d 58%,rgba(207,31,0,.8) 72%,transparent 74%);
  animation:sfedu-flamme 2.25s ease-in infinite}
.sfedu-carousel-flammes i:nth-child(2n){width:14%;height:28%}.sfedu-carousel-flammes i:nth-child(3n){height:40%}
@keyframes sfedu-flamme{0%{bottom:-40%;opacity:0;transform:scale(.75) skewX(-5deg)}12%{opacity:.88}
  55%{opacity:.76;transform:scale(1.08) skewX(5deg)}100%{bottom:105%;opacity:0;transform:scale(.62) skewX(-4deg)}}

/* EAU — une averse bleue traverse tout le portrait du haut vers le bas. */
.sfedu-carousel[data-element="eau"],.sfedu-carousel-stage[data-element="eau"]{--sfedu-el:#5cc0ff;--sfedu-el-glow:rgba(92,192,255,.5)}
.sfedu-carousel-stage[data-element="eau"] .sfedu-carousel-motes{display:block}
.sfedu-carousel-stage[data-element="eau"] .sfedu-carousel-motes i{left:var(--x);top:-14%;width:4px;height:12%;
  border-radius:3px;background:linear-gradient(180deg,transparent,#c6ebff 42%,#7fd0ff);
  box-shadow:0 0 7px #76caff;animation:sfedu-pluie 1.45s linear infinite}
.sfedu-carousel-stage[data-element="eau"] .sfedu-carousel-motes i:before{position:absolute;left:-7%;top:-65%;width:70%;height:65%;border-radius:inherit;background:inherit;opacity:.8;content:''}
@keyframes sfedu-pluie{0%{top:-16%;opacity:0;transform:rotate(8deg)}10%{opacity:.95}88%{opacity:.8}100%{top:112%;opacity:0;transform:rotate(8deg)}}

/* PIERRE — dix roches réparties par --x dévalent du bord haut au bord bas. */
.sfedu-carousel[data-element="pierre"],.sfedu-carousel-stage[data-element="pierre"]{--sfedu-el:#e0b985;--sfedu-el-glow:rgba(224,185,133,.5)}
.sfedu-carousel-stage[data-element="pierre"] .sfedu-carousel-motes{display:block}
.sfedu-carousel-stage[data-element="pierre"] .sfedu-carousel-motes i{left:var(--x);top:-12%;width:6%;height:5%;box-shadow:0 3px 6px #382714;
  background:linear-gradient(158deg,#d3ac7d,#8a6942);
  clip-path:polygon(20% 0,80% 12%,100% 62%,55% 100%,8% 74%);
  animation:sfedu-eboulement 3.2s linear infinite}
.sfedu-carousel-stage[data-element="pierre"] .sfedu-carousel-motes i:nth-child(3n){width:4%;height:3.5%}
@keyframes sfedu-eboulement{0%{top:-12%;opacity:0;transform:rotate(0)}10%{opacity:1}90%{opacity:.9}
  100%{top:110%;opacity:0;transform:rotate(540deg)}}

/* NATURE — des feuilles ombrées entrent à gauche et ressortent à droite en descendant. */
.sfedu-carousel[data-element="nature"],.sfedu-carousel-stage[data-element="nature"]{--sfedu-el:#79dd83;--sfedu-el-glow:rgba(121,221,131,.5)}
.sfedu-carousel-stage[data-element="nature"] .sfedu-carousel-motes{display:block}
.sfedu-carousel-stage[data-element="nature"] .sfedu-carousel-motes i{left:-10%;top:var(--y);width:5%;height:4%;border-radius:0 70% 0 70%;
  background:linear-gradient(135deg,#d9f06a,#3b9b4c);box-shadow:0 2px 4px #193c1e;
  animation:sfedu-feuille 4.8s ease-in-out infinite}
@keyframes sfedu-feuille{0%{left:-10%;opacity:0;transform:rotate(-25deg)}10%{opacity:.95}
  48%{top:calc(var(--y) + 10%);transform:rotate(150deg)}90%{opacity:.9}100%{left:108%;top:calc(var(--y) + 20%);opacity:0;transform:rotate(330deg)}}

/* FOUDRE — des éclairs jaunes cisaillent le portrait de gauche à droite, sans SVG étiré. */
.sfedu-carousel[data-element="foudre"],.sfedu-carousel-stage[data-element="foudre"]{--sfedu-el:#9db4ff;--sfedu-el-glow:rgba(157,180,255,.55)}
.sfedu-carousel-stage[data-element="foudre"] .sfedu-carousel-motes{display:block}
.sfedu-carousel-stage[data-element="foudre"] .sfedu-carousel-motes i{left:-28%;top:var(--y);width:28%;height:8%;
  background:linear-gradient(90deg,#fffbd0,#ffe357 45%,#fff);filter:drop-shadow(0 0 5px #d9e2ff);
  clip-path:polygon(0 44%,38% 35%,46% 0,58% 68%,100% 55%,100% 72%,62% 82%,52% 100%,43% 59%,0 64%);
  animation:sfedu-courant 1.9s linear infinite}
.sfedu-carousel-stage[data-element="foudre"] .sfedu-carousel-motes i:nth-child(n+7){display:none}
@keyframes sfedu-courant{0%{left:-30%;opacity:0}12%,78%{opacity:.95}100%{left:108%;opacity:0}}

/* VENT — de longs rubans courbes balayent la figure ; le portrait ne pivote plus et ne déborde pas. */
.sfedu-carousel[data-element="vent"],.sfedu-carousel-stage[data-element="vent"]{--sfedu-el:#9fe8e0;--sfedu-el-glow:rgba(159,232,224,.5)}
.sfedu-carousel-stage[data-element="vent"] .sfedu-carousel-motes{display:block}
.sfedu-carousel-stage[data-element="vent"] .sfedu-carousel-motes i{left:-36%;top:var(--y);width:34%;height:8%;
  border-top:3px solid rgba(220,255,250,.9);border-radius:50%;filter:drop-shadow(0 0 4px #6fdccd);
  animation:sfedu-rafale 2.8s ease-in-out infinite}
@keyframes sfedu-rafale{0%{left:-36%;opacity:0;transform:rotate(-5deg)}12%,82%{opacity:.9}
  50%{top:calc(var(--y) - 8%);transform:rotate(5deg)}100%{left:110%;opacity:0;transform:rotate(-3deg)}}
/* Quand le canvas de pourtour est monté, les deux couches CSS s'effacent : elles TRAVERSENT le
   portrait, et leur cohabitation revoilerait les six visages refaits en OTA 199. Sans canvas —
   mouvement réduit ou contexte 2D refusé — elles restent, et le liseré `--sfedu-el` suffit.
   ⚠️ CETTE RÈGLE DOIT RESTER ICI, APRÈS les six blocs `[data-element]` ci-dessus. Sa spécificité est
   ÉGALE à la leur (classe + attribut + classe), donc seul l'ordre source tranche. Placée avant, son
   `display:none` perdait contre le `display:block` des blocs élémentaires, et les deux effets
   tournaient ensemble — vérifié sur capture : les flammes traversaient encore Suzaku pendant que le
   canvas dessinait son pourtour. C'est exactement le piège que ce fichier signale ailleurs. */
.sfedu-carousel-stage[data-rim="on"] .sfedu-carousel-motes,
.sfedu-carousel-stage[data-rim="on"] .sfedu-carousel-flammes{display:none}

/* La carte de la matière : aplat opaque, même grammaire que la fiche du héros. */
/* La matière et son détail sont POSÉS SUR l'image, en bas, plutôt que dans une carte séparée
   dessous : c'est ce qui rend la page « pleine » (retour propriétaire du 16/08). Le voile est un
   dégradé opaque en bas — pas un panneau translucide sur le fond de la page, la charte enfant
   l'interdit ; ici il assombrit UNE IMAGE, ce qui est un fondu, pas un verre. */
.sfedu-carousel-card{--sf-bg-level:1;display:grid;gap:8px;padding:16px var(--sfedu-marge);
  border:0;border-radius:24px;background:var(--sfedu-surface);box-shadow:0 12px 30px rgba(0,0,0,.2)}
.sfedu-carousel-heading{display:flex;align-items:center;gap:8px}
.sfedu-carousel-professor{border:0;background:var(--sfedu-el);color:#241836;font-size:11px}
.sfedu-carousel-title{font-size:20px;font-weight:850;line-height:1.2;letter-spacing:.1px}
.sfedu-carousel-story{margin:0!important;color:var(--sfedu-ink)!important;font-size:14px;line-height:1.4!important}
.sfedu-carousel-progress{display:flex;align-items:baseline;gap:10px;font-size:13px}
.sfedu-carousel-progress-label{color:var(--sfedu-ink-doux);font-weight:700}
.sfedu-carousel-gauge{display:block;height:8px;overflow:hidden;border-radius:999px;background:rgba(255,255,255,.17)}
.sfedu-carousel-gauge[hidden]{display:none}
.sfedu-carousel-gauge i{display:block;width:var(--sfedu-part,0%);height:100%;border-radius:inherit;
  background:linear-gradient(90deg,#ffe08a,#ffb347);transition:width .35s ease}
.sfedu-carousel-go{margin-top:3px}
/* Matière terminée : la progression passe à l'or. Matière pas encore ouverte : tout s'éteint. */
.sfedu-carousel.complete .sfedu-carousel-progress-label{color:var(--sfedu-or)}
.sfedu-carousel.upcoming .sfedu-carousel-figure{filter:grayscale(.75) brightness(.62)}
.sfedu-carousel.upcoming .sfedu-carousel-motes,.sfedu-carousel.upcoming .sfedu-carousel-flammes{display:none!important}
/* Écrans courts (le 320×568 de la gate, ou un téléphone couché) : la Soul et les respirations
   rendent leurs pixels au carrousel, qui doit rester la première chose vue. */
@media (max-height:680px){
  .sfedu-academy-home>h2{margin-bottom:4px;white-space:nowrap;font-size:17px}
  .sfedu-academy-home>h2+p{margin-bottom:2px;font-size:10px;line-height:1.1}
  .sfedu-academy-home>.sfedu-companion{gap:6px;margin:2px 0}
  .sfedu-academy-home>.sfedu-companion .sfedu-soul-portrait{width:42px;height:42px}
  .sfedu-academy-home>.sfedu-companion .sfedu-soul-bubble{padding:6px 8px;border-radius:14px;font-size:10px;line-height:1.2}
  .sfedu-carousel{gap:5px;margin:2px 0 8px}
  .sfedu-carousel-card{gap:5px;padding:9px var(--sfedu-marge) 10px;border-radius:18px}
  .sfedu-carousel-title{font-size:17px}.sfedu-carousel-story{font-size:12px}
  .sfedu-carousel-go{min-height:46px!important;padding-block:8px!important}
}
/* Moins de mouvement : les couches montées en DOM disparaissent aussi, au lieu de rester figées. */
@media (prefers-reduced-motion:reduce){
  .sfedu-carousel-motes,.sfedu-carousel-stage[data-element] .sfedu-carousel-flammes{display:none}
  .sfedu-carousel-figure.is-swap .sfedu-carousel-art{animation:none}
  .sfedu-carousel-art{animation:none}
}

.sfedu-subject-hero{display:block;width:100%;height:190px;margin:2px 0 12px;border-radius:20px;object-fit:cover;object-position:center 18%}
.education-shell .nav .ni-hero{width:26px;height:26px;object-fit:contain;display:block;margin:0 auto}

.sfedu-skills{display:grid;gap:9px;margin:8px 0 18px}.sfedu-skill{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;min-height:68px;border:1px solid rgba(255,255,255,.13);border-radius:15px;padding:11px 12px;background:rgba(255,255,255,.06);color:#fff;text-align:left}.sfedu-skill.active{border-color:rgba(255,226,143,.58);background:rgba(126,81,170,.20)}.sfedu-skill-copy,.sfedu-skill-values{display:grid;gap:4px}.sfedu-skill-copy{min-width:0}.sfedu-skill-copy b{font-size:14px}.sfedu-skill-copy small,.sfedu-skill-values small{color:#bfb3cc;font-size:11px}.sfedu-skill-copy .sfedu-child-line{color:#eee3f5;line-height:1.3}.sfedu-skill-values{flex:0 0 auto;text-align:right}.sfedu-skill-values strong{color:#ffe4a0;font-size:15px}
.sfedu-note{margin-top:14px!important;color:#bfb2cd!important;font-size:12px}.sfedu-progress{height:8px;margin:14px 0 22px;overflow:hidden;border-radius:8px;background:rgba(255,255,255,.12)}.sfedu-progress span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#f4c65d,#ad79ff)}
.sfedu-question{margin:10px 0 22px;padding:26px 12px;border:1px solid rgba(255,229,160,.28);border-radius:18px;background:rgba(255,255,255,.07);text-align:center;color:#fff8dd;font-size:30px;font-weight:900;letter-spacing:.02em}
.sfedu-passage{margin:10px 0;padding:16px 17px;border-left:4px solid #d6aa58;border-radius:12px;background:rgba(255,247,218,.09);color:#fff6dc;font-size:17px;line-height:1.55}.sfedu-choices{display:grid;gap:10px}.sfedu-choices .sfedu-btn{text-align:left}
.sfedu-listen{display:grid;grid-template-columns:1fr auto;align-items:center;gap:5px;margin:10px 0}.sfedu-listen .sfedu-btn.quiet{width:auto;padding-inline:8px;font-size:11px}.sfedu-speech-fallback{grid-column:1/-1;padding:12px;border:1px dashed rgba(121,218,255,.5);border-radius:12px;background:#3f5a8f;color:#dff6ff;text-align:center;font-size:18px;font-weight:800}.sfedu-speech-fallback[hidden]{display:none}
.sfedu-visual{display:flex;align-items:flex-end;justify-content:center;gap:12px;min-height:150px;margin:10px 0;padding:12px;border:1px solid rgba(121,218,255,.28);border-radius:18px;background:radial-gradient(circle at 50% 20%,rgba(82,118,184,.22),rgba(5,10,26,.45))}.sfedu-visual svg{display:block;width:100%;max-width:360px;height:190px}.sfedu-coin{display:grid;place-items:center;width:58px;height:58px;border:3px solid #fff0b4;border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff4ae,#d58b25 70%);color:#43280b;font-size:15px;font-weight:950;box-shadow:0 6px 12px rgba(0,0,0,.28)}.sfedu-coin.c100,.sfedu-coin.c200{width:68px;height:68px;background:radial-gradient(circle at 35% 30%,#eef5ff,#8aa3be 70%)}.sfedu-visual-bars{align-items:flex-end}.sfedu-bar-item{display:grid;grid-template-rows:20px 90px 20px;align-items:end;justify-items:center;min-width:58px}.sfedu-bar-item b{align-self:start;color:#fff4bd}.sfedu-bar{width:36px;border-radius:8px 8px 2px 2px;box-shadow:0 0 14px currentColor}.sfedu-bar-item small{align-self:end;color:#d8d0df}.clock-face{fill:#f7f1df;stroke:#704995;stroke-width:6}.clock-num{fill:#20172c;text-anchor:middle;font:bold 13px system-ui}.clock-hour,.clock-minute{stroke:#291634;stroke-linecap:round}.clock-hour{stroke-width:9}.clock-minute{stroke-width:5}.clock-pin{fill:#ad5a66}.visual-line,.visual-heavy{stroke:#f5df9a;stroke-linecap:round}.visual-line{stroke-width:7}.visual-heavy{stroke-width:9}.scale-pan{fill:#664b86;stroke:#f5df9a;stroke-width:3}.scale-base{fill:#a979d0;stroke:#f5df9a;stroke-width:3}.visual-value{fill:#fff;text-anchor:middle;font:bold 16px system-ui}.shape-polygon,.solid-face{stroke:#fff0b4;stroke-width:5;stroke-linejoin:round;fill-opacity:.8}.solid-hidden{stroke:#fff0b4;stroke-width:3;stroke-dasharray:6 5}.solid-face.side{fill-opacity:.55}.grid-line{stroke:rgba(255,255,255,.16);stroke-width:1}.grid-line.strong{stroke:rgba(255,255,255,.38);stroke-width:2}.visual-caption{fill:#eee4f5;text-anchor:middle;font:bold 13px system-ui}.move-path{stroke:#ffd96e;stroke-width:7;stroke-linecap:round;stroke-dasharray:10 7}.move-start{fill:#5fe0bd;stroke:#fff;stroke-width:2}.move-end{fill:#ffcf68;stroke:#fff;stroke-width:2}
/* Opération posée en colonnes (PASSE L). Les chiffres sont tabulaires et gros — c'est un cahier,
   pas un tableau de bord ; la retenue est en jaune, dans sa case, au-dessus des dizaines. */
.pose-chiffre{fill:#fff;text-anchor:middle;font:950 40px var(--body,system-ui);font-variant-numeric:tabular-nums}
.pose-signe{fill:#ffd96e;text-anchor:middle;font:950 36px var(--body,system-ui)}
.pose-trait{stroke:#fff0b4;stroke-width:5;stroke-linecap:round}
.pose-retenue-case{fill:rgba(255,217,110,.16);stroke:#ffd96e;stroke-width:2}
.pose-retenue{fill:#ffd96e;text-anchor:middle;font:950 20px var(--body,system-ui)}
.pose-question{fill:#79daff;text-anchor:middle;font:950 34px var(--body,system-ui)}
/* CE2 (17/09/2026) : fractions (bande et droite graduée) et axe de symétrie en pointillés. */
.frac-part{fill:rgba(255,255,255,.08);stroke:#fff0b4;stroke-width:4;stroke-linejoin:round}
.frac-part.filled{fill:#f4c65d;fill-opacity:.85}
.frac-line{stroke:#fff0b4;stroke-width:5;stroke-linecap:round}
.frac-tick{stroke:#fff0b4;stroke-width:4;stroke-linecap:round}
.frac-arrow{fill:#79daff;stroke:#fff;stroke-width:2;stroke-linejoin:round}
.sym-axis{stroke:#79daff;stroke-width:4;stroke-dasharray:10 8;stroke-linecap:round}
/* Étape 6 du chantier CE2 (17/09/2026) : le panneau de passage de classe — surface OPAQUE (DA Aube dorée), liseré or. */
.sfedu-passage-classe{background:#3a2c66;border:2px solid #ffd96e;border-radius:18px;padding:14px 16px;margin:10px 0;color:#fff}
.sfedu-passage-classe h3{margin:0 0 6px;color:#ffe08a;font-size:17px}
.sfedu-passage-classe p{margin:0 0 12px;line-height:1.4}
.sfedu label{display:block;margin:0 0 7px;color:#e8dcae;font-size:13px;font-weight:700}.sfedu input{box-sizing:border-box;width:100%;min-height:54px;margin-bottom:12px;border:2px solid rgba(255,229,160,.45);border-radius:14px;padding:8px 14px;background:#3a2c66;color:white;text-align:center;font:800 24px/1 system-ui,sans-serif}.sfedu input:focus{outline:3px solid rgba(173,121,255,.35);border-color:#ffe39a}
.sfedu-feedback{margin:12px 0;padding:13px;border-radius:13px;background:rgba(255,255,255,.08);line-height:1.4}.sfedu-feedback.good{border:1px solid rgba(105,231,169,.55);color:#baf4d4}.sfedu-feedback.retry{border:1px solid rgba(255,190,116,.55);color:#ffe0af}.sfedu-score{margin:18px 0 8px;text-align:center;font-size:54px;font-weight:950;color:#ffe28f}.sfedu-answer-orbs{display:flex;justify-content:center;gap:8px;margin:0 0 18px}.sfedu-answer-orbs span{display:grid;width:34px;height:34px;place-items:center;border:1px solid rgba(255,225,150,.32);border-radius:50%;background:rgba(255,255,255,.06);color:#8e819c;font-size:18px}.sfedu-answer-orbs span.filled{border-color:#ffe38f;background:radial-gradient(circle,#fff3bd,#b978d4);color:#3b2148;box-shadow:0 0 13px rgba(255,222,128,.45)}.sfedu-result{margin-bottom:18px;padding:14px;border-radius:14px;background:rgba(255,255,255,.07)}.sfedu-rewards{display:grid;gap:8px;color:#fff3cf;font-weight:750}
.sfedu-review-details{margin:0 0 18px;border:1px solid rgba(255,225,150,.34);border-radius:14px;background:#43346e}.sfedu-review-details>summary{min-height:52px;padding:16px;color:#fff0bd;font-size:14px;font-weight:850;cursor:pointer}.sfedu-review{display:grid;gap:7px;padding:0 10px 10px}.sfedu-review-row{padding:10px 12px;border-radius:12px;background:rgba(255,255,255,.06);color:#e9e1ef;font-size:13px}.sfedu-review-row.good{border-left:3px solid #69e7a9}.sfedu-review-row.retry{border-left:3px solid #ffbe74}
.sfedu-parent-list{display:grid;gap:8px;margin:8px 0 20px}.sfedu-parent-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 12px;border:1px solid rgba(255,255,255,.12);border-radius:13px;background:rgba(255,255,255,.05)}.sfedu-parent-main{display:grid;gap:3px;min-width:0}.sfedu-parent-main b{font-size:13px}.sfedu-parent-main small{color:#bfb3cc;font-size:11px}.sfedu-parent-tests{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:4px}.sfedu-parent-tests span{padding:4px 7px;border-radius:9px;background:rgba(255,226,143,.13);color:#ffe4a0;font-size:11px;font-weight:800}.sfedu-parent-result{flex:0 0 auto;color:#ffe4a0;font-size:12px;font-weight:800}.sfedu-lexicon{display:grid;gap:8px;margin-bottom:18px}.sfedu-lexicon-row{border:1px solid rgba(255,255,255,.12);border-radius:13px;padding:10px 12px;background:rgba(255,255,255,.05)}.sfedu-lexicon-row summary{cursor:pointer;color:#fff0bd;font-size:12px;font-weight:750;line-height:1.35}.sfedu-lexicon-row p{margin:8px 0 0;font-size:12px}.sfedu-lexicon-answer{margin-top:9px;color:#9ff0c9;font-size:13px;font-weight:850}
.sfedu-evolution-ready{border-color:rgba(105,231,169,.55);background:rgba(50,139,101,.16)}.sfedu-evolution-ready .sfedu-parent-result{color:#9ff0c9}
@media (max-width:420px){.sfedu-screen{padding-bottom:calc(var(--sfedu-nav,70px) + 18px + env(safe-area-inset-bottom))!important}.sfedu-page{padding:8px 6px 22px}.sfedu{padding:20px 16px;border-radius:20px}.sfedu-question{font-size:27px}}
/* ————— Barre du haut ————————————————————————————————————————————————————————————
   Trois zones : identité du héros (fluide, tronquée si besoin), bouton de changement, puis cristaux
   et réglages (fixes). Safe area du haut prise en compte, hauteur contenue pour ne pas surcharger. */
.education-shell .topbar{gap:10px;align-items:center;padding:calc(7px + env(safe-area-inset-top)) 12px 7px;background:var(--sfedu-bar)}.education-shell .hero-chip{flex:1;min-width:0;gap:9px;padding:0}.education-shell .hero-ava{width:36px;height:36px;flex:none;border-radius:10px}.education-shell .hero-chip>div{min-width:0}.education-shell .hero-name{font-size:13.5px;line-height:1.15;letter-spacing:.3px}.education-shell .hero-sub{max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;line-height:1.3;color:var(--sfedu-ink-doux)}.education-shell .wallet{gap:5px}.education-shell .wallet .gem{width:24px;height:24px}.education-shell .wallet .amt{font-size:15px}.education-shell .wallet .rate{display:none}.education-shell .acct-btn{width:34px;height:34px}

/* Tâche 7 — parcours enfant, compagnon Soul et célébration de session. */
.sfedu-companion{display:flex;align-items:center;gap:10px;margin:8px 0 2px}.sfedu-soul-portrait{flex:0 0 auto;width:92px;height:92px;object-fit:contain;filter:drop-shadow(0 8px 10px rgba(0,0,0,.42));transition:transform .32s ease,filter .32s ease}.sfedu-soul-bubble{position:relative;flex:1;margin:0;padding:11px 13px;border:1px solid rgba(255,229,160,.35);border-radius:16px;background:rgba(23,15,42,.88);color:#fff2c9;font-size:13px;font-weight:750;line-height:1.35}.sfedu-soul-bubble:before{position:absolute;left:-7px;top:50%;width:12px;height:12px;border-left:1px solid rgba(255,229,160,.35);border-bottom:1px solid rgba(255,229,160,.35);background:rgba(23,15,42,.88);content:'';transform:translateY(-50%) rotate(45deg)}.sfedu-companion.happy .sfedu-soul-portrait{filter:drop-shadow(0 0 16px rgba(255,225,121,.8));transform:translateY(-3px) scale(1.06)}.sfedu-companion.encouraging .sfedu-soul-portrait{filter:drop-shadow(0 0 14px rgba(120,211,255,.55));transform:rotate(-3deg)}
.sfedu-voice-toggle{width:auto;min-height:44px;margin:0 0 14px auto;padding:8px 13px;border-radius:999px;text-align:center;font-size:12px}.sfedu-summary{display:grid;gap:6px}.sfedu-summary small{color:#e8ddf0}.sfedu-progress-stars{display:flex;justify-content:center;gap:8px}.sfedu-progress-stars i{color:#766b83;font-style:normal;font-size:21px}.sfedu-progress-stars i.filled{color:#ffe27d;filter:drop-shadow(0 0 6px rgba(255,226,125,.55))}
.sfedu-path{position:relative;gap:11px;padding:2px 0 8px}.sfedu-path:before{position:absolute;left:50%;top:18px;bottom:12px;width:3px;border-radius:999px;background:linear-gradient(#f5cf76,rgba(173,121,255,.35));content:'';transform:translateX(-50%)}.sfedu-domain-title{position:relative;z-index:1;justify-self:center;margin:10px 0 0!important;padding:5px 12px;border:1px solid rgba(255,226,143,.28);border-radius:999px;background:#241735;color:#ffe7a8;font-size:12px!important}.sfedu-skill{position:relative;z-index:1;width:calc(100% - 24px);min-height:82px;padding:9px;background:rgba(20,15,39,.94)}.sfedu-skill.left{justify-self:start}.sfedu-skill.right{justify-self:end}.sfedu-skill-vignette{position:relative;display:grid;flex:0 0 58px;width:58px;height:58px;place-items:center;border:2px solid rgba(255,229,160,.34);border-radius:50%;background:linear-gradient(145deg,#49336c,#1d294e)}.sfedu-skill-vignette img{width:50px;height:50px;object-fit:contain}.sfedu-mastered-seal{position:absolute;right:-5px;bottom:-4px;display:grid;width:25px;height:25px;place-items:center;border:2px solid #fff0b0;border-radius:50%;background:#b97927;color:#fff5bd;font-style:normal}.sfedu-skill.mastered{border-color:rgba(255,217,104,.62);box-shadow:0 0 14px rgba(255,210,92,.13)}.sfedu-skill.future{opacity:.76}.sfedu-skill.active{border-color:#ffe28a;box-shadow:0 0 0 1px rgba(255,226,138,.35),0 0 18px rgba(190,123,255,.32);animation:sfedu-current 1.8s ease-in-out infinite}.sfedu-skill-copy{flex:1}.sfedu-skill-values strong{max-width:72px}.sfedu-skill-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.sfedu-stars .sfedu-btn{min-height:56px;font-size:15px}.sfedu-reward-preview{margin:17px 0 8px;padding:13px;border:1px solid rgba(255,225,128,.4);border-radius:14px;background:rgba(76,48,105,.45);color:#fff0b8;text-align:center;font-size:13px;font-weight:800;line-height:1.45}
.sfedu-answer-orbs{margin:5px 0 14px}.sfedu-answer-orbs span{transition:transform .3s ease,box-shadow .3s ease}.sfedu-answer-orbs span.answered{border-color:rgba(198,185,215,.35);background:rgba(255,255,255,.09);color:#a99cb7}.sfedu-answer-orbs span.sparkle{animation:sfedu-sparkle .36s ease-out}.sfedu-question-scene{display:grid;grid-template-columns:minmax(100px,128px) minmax(0,1fr);align-items:center;gap:10px}.sfedu-question-scene .sfedu-companion{display:grid;justify-items:center}.sfedu-question-scene .sfedu-soul-bubble{padding:8px;font-size:11px;text-align:center}.sfedu-question-scene .sfedu-soul-bubble:before{left:50%;top:-7px;transform:translateX(-50%) rotate(135deg)}.sfedu-question-scene .sfedu-question{width:100%;margin:10px 0}.sfedu-feedback.good{animation:sfedu-feedback-in .32s ease-out}.sfedu-streak{margin:12px 0;padding:12px;border:1px solid rgba(255,225,112,.65);border-radius:14px;background:linear-gradient(135deg,rgba(128,73,160,.75),rgba(58,93,158,.75));color:#fff1a8;text-align:center;font-size:17px;font-weight:900;animation:sfedu-feedback-in .36s ease-out}
.sfedu-session-progress{display:flex;align-items:center;justify-content:center}.sfedu-session-progress .sfedu-answer-orbs{margin:5px 0 14px}.sfedu-progress-soul{display:none;width:38px;height:38px;object-fit:contain}
.sfedu-result-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(150px,1fr);align-items:center;gap:10px}.sfedu-result-hero .sfedu-companion{display:grid;justify-items:center}.sfedu-result-hero .sfedu-soul-portrait{width:130px;height:130px}.sfedu-result-hero .sfedu-soul-bubble{text-align:center}.sfedu-result-score .sfedu-score{margin:5px 0;font-size:44px}.sfedu-result-score .sfedu-answer-orbs{gap:5px;flex-wrap:nowrap}.sfedu-result-score .sfedu-answer-orbs span{width:29px;height:29px}.sfedu-chest-moment{display:grid;justify-items:center;margin:8px 0 18px;padding:16px;border:1px solid rgba(255,220,115,.4);border-radius:20px;background:radial-gradient(circle at 50% 25%,rgba(255,220,112,.22),rgba(45,23,67,.78));overflow:hidden}.sfedu-chest-moment h3{margin:8px 0;color:#fff0ae}.sfedu-chest{position:relative;width:142px;height:108px;margin-top:18px;filter:drop-shadow(0 12px 12px rgba(0,0,0,.42))}.sfedu-chest-lid,.sfedu-chest-body{position:absolute;left:5px;right:5px;border:4px solid #ffe5a0;background:linear-gradient(135deg,#7b3da2,#3f5ba4)}.sfedu-chest-lid{top:5px;height:42px;border-radius:42px 42px 9px 9px;transform-origin:12px 42px;transition:transform .36s ease}.sfedu-chest-body{bottom:3px;height:65px;border-radius:8px 8px 18px 18px;box-shadow:inset 0 12px rgba(25,16,51,.28)}.sfedu-chest-body:after{position:absolute;left:50%;top:0;bottom:0;width:16px;background:#e9b955;content:'';transform:translateX(-50%)}.sfedu-chest-jewel{position:absolute;z-index:1;left:50%;top:17px;width:38px;height:38px;object-fit:contain;transform:translateX(-50%)}.sfedu-chest-moment.is-open .sfedu-chest-lid{transform:translate(-8px,-18px) rotate(-13deg)}.sfedu-chest-moment.is-open .sfedu-chest{animation:sfedu-chest-glow .36s ease-out}.sfedu-chest-moment .sfedu-rewards{width:100%;margin-top:4px;text-align:center}.sfedu-fragment-slot{margin-top:4px;border:1px dashed rgba(255,255,255,.24);border-radius:11px;padding:8px;color:#cdbfd8!important;font-size:12px}.sfedu-review-details>summary{display:flex;align-items:center;justify-content:space-between;gap:8px}.sfedu-review-details>summary small{color:#c9bdd5;font-size:11px}

/* Tâche 6 — accueil « Mon héros », agrégateur en lecture seule. */
.sfedu-hero-home{display:grid;gap:12px}.sfedu-hero-home>h2{margin-bottom:0}.sfedu-hero-block{padding:14px;border:0;border-radius:18px;background:var(--sfedu-surface,#4d3b7d)}.sfedu-hero-block h3{margin-bottom:10px;color:#ffe7a4}.sfedu-duo{background:linear-gradient(145deg,#6b4d9e,#46589f)}.sfedu-duo-portraits{display:grid;grid-template-columns:1fr 1fr;align-items:end;gap:10px}.sfedu-duo-member{display:grid;min-width:0;min-height:44px;justify-items:center;margin:0;border:0;background:transparent;color:#fff;font-weight:850}.sfedu-duo-member img{width:100%;height:clamp(240px,58vw,340px);object-fit:contain;filter:drop-shadow(0 8px 12px rgba(0,0,0,.5))}.sfedu-soul-card{border-radius:14px}.sfedu-soul-card:focus-visible{outline:3px solid #ffe28a}.sfedu-duo-form{margin:4px 0 8px!important;text-align:center;font-size:13px;font-weight:800}.sfedu-power-head{display:flex;align-items:end;justify-content:space-between;color:#fff0bd;font-weight:800}.sfedu-power-head strong{color:#ffe083;font-size:36px;line-height:1}.sfedu-power-gauge{height:13px;margin:8px 0 5px;overflow:hidden;border-radius:999px;background:rgba(255,255,255,.12)}.sfedu-power-gauge i{display:block;width:100%;height:100%;background:linear-gradient(90deg,#6bd7ff,#ffe06f,#c078ff)}.sfedu-power-truth{display:block;color:#ddd0e7;font-size:11px}.sfedu-power-sources{display:grid;gap:5px;margin-top:10px;color:#f7edcf;font-size:12px;font-weight:700}.sfedu-form-path{position:relative;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}.sfedu-form-path:before{position:absolute;left:8%;right:8%;top:33px;height:3px;border-radius:4px;background:rgba(255,224,123,.32);content:''}.sfedu-form-step{position:relative;display:grid;justify-items:center;gap:3px}.sfedu-form-step img{width:62px;height:62px;border:2px solid rgba(255,226,135,.32);border-radius:50%;background:#251c42;object-fit:contain}.sfedu-form-step.current img{border-color:#ffe081;box-shadow:0 0 16px rgba(255,222,118,.55);transform:scale(1.08)}.sfedu-form-step.future img{filter:brightness(.28) saturate(.35)}.sfedu-form-step small{font-size:9px;color:#d8cce1}.sfedu-next-form{margin:10px 0 0!important;color:#fff0b9!important;text-align:center;font-size:12px;font-weight:800}.sfedu-exploits{display:grid;gap:7px}.sfedu-exploit{padding:9px 10px;border-radius:11px;background:rgba(255,255,255,.07);font-size:12px;font-weight:750}.sfedu-empty{margin:0!important;font-size:12px}.sfedu-hero-actions{display:grid;grid-template-columns:1fr 1fr;gap:9px}.sfedu-main-choice{min-height:64px}
/* PASSE C2 — « Ma collection » n'avait jamais été reprise pour l'enfant. Mesuré par
   tools/test/child-touch-audit.cjs à 360×800 : 7 cibles sous le plancher de 44 px, et TOUTES
   venaient de l'interface adulte — filtres Élément/Rôle/Rareté (en anglais : common, epic,
   mythic…), sélecteur de tri, et un bouton « 🌀 Maîtrises » qui ouvre un écran que le mode enfant
   masque justement de la navigation. Même famille de défaut que l'Arène atteignable : une porte
   adulte restée ouverte. Le tri par rareté n'a aucun sens pour un CE1 ; le seul geste utile ici est
   « Activer ». Les chiffres de puissance partent aussi : plus aucun nombre de jugement en mode
   enfant, cet écran était le dernier à en montrer. Rien n'est supprimé — le mode adulte
   (educationV1 éteint) garde tout, ce scope n'existe que sous .education-shell. */
.education-shell #tab-souls .v2-toolbar{display:none}
.education-shell #tab-souls .card .masteries{display:none}
.education-shell #tab-souls .card .pwrow{display:none}
.education-shell #tab-souls .card .pick{min-height:48px;font-size:15px;font-weight:850}

/* PASSE E1 — LA CORRECTION RESTE SUR PLACE. La réponse touchée se colore, la bonne se révèle quand
   on s'est trompé, et le verdict s'installe SOUS la question au lieu d'effacer l'écran. Toutes les
   surfaces restent OPAQUES (doctrine DA du 14/08) et aucun texte ne porte de chiffre. Le vert et le
   rouge ne portent jamais l'information seuls : une coche et une croix les doublent (::after), pour
   les enfants qui distinguent mal les couleurs. */
/* ⚠️ Spécificité : la règle générique `.sfedu-exercise-active .sfedu-choices .sfedu-btn` (plus bas
   dans ce fichier) impose le fond violet à poids égal et gagnait par ordre d'apparition — le vert
   ne s'appliquait pas, seule la coche sortait. D'où `.sfedu-btn` ajouté ici : le poids l'emporte,
   quel que soit l'ordre. Défaut vu sur capture, pas par la barrière. */
.sfedu-exercise-active .sfedu-choices .sfedu-btn[disabled]{opacity:1}
.sfedu-exercise-active .sfedu-choices .sfedu-btn.sfedu-choice-good,
.sfedu-exercise-active .sfedu-choices .sfedu-btn.sfedu-choice-right{background:#2f7a4c;color:#fff;font-weight:800}
.sfedu-exercise-active .sfedu-choices .sfedu-btn.sfedu-choice-bad{background:#8d4038;color:#fff;font-weight:800}
.sfedu-exercise-active .sfedu-choices .sfedu-btn.sfedu-choice-good::after{content:' ✓';font-weight:900}
.sfedu-exercise-active .sfedu-choices .sfedu-btn.sfedu-choice-right::after{content:' ✓ la bonne réponse';font-weight:800;font-size:13px}
.sfedu-exercise-active .sfedu-choices .sfedu-btn.sfedu-choice-bad::after{content:' ✗';font-weight:900}
.sfedu-answer-verdict{display:grid;gap:7px;margin-top:10px;padding:11px 12px;border:0;border-radius:16px;background:#3a2c66}
.sfedu-answer-verdict.good{background:#2b4a39}
.sfedu-answer-verdict.retry{background:#3f2f52}
.sfedu-verdict-title{margin:0!important;color:#ffe7a4;font-size:18px;font-weight:850}
.sfedu-answer-verdict .sfedu-feedback{margin:0;font-size:15px;line-height:1.35}
/* Le verdict doit tenir SOUS la question sans repousser le geste suivant hors de l'écran : la
   compagne y reste présente mais compacte (mesuré sur capture 390×844 — le bouton passait derrière
   la barre de navigation). */
.sfedu-answer-verdict .sfedu-companion{gap:8px;margin:0;align-items:center}
.sfedu-answer-verdict .sfedu-companion .sfedu-soul-portrait{width:56px;height:56px}
.sfedu-answer-verdict .sfedu-companion .sfedu-soul-bubble{padding:8px 11px;font-size:14px;line-height:1.25}
.sfedu-answer-verdict .sfedu-streak{margin:0;font-size:14px}
/* À la correction, la compagne parle DANS le verdict : celle du bas ferait double emploi (deux
   portraits, deux bulles sur le même écran — vu sur capture 360×800). Le repère de progression et
   les intitulés restent, eux : ils disent où l'on en est. */
.sfedu-answered .sfedu-exercise-secondary .sfedu-companion{display:none}
/* La barre de navigation est FIXE : `scrollIntoView` l'ignore et laissait le bas du bouton dessous
   (mesuré sur capture 360×800 — une quinzaine de pixels mangés). `scroll-margin-bottom` réserve sa
   hauteur, plus la zone sûre du téléphone. */
.sfedu-next-answer{scroll-margin-bottom:calc(112px + env(safe-area-inset-bottom,0px));
  width:100%;min-height:64px;margin:0;border:0;border-radius:16px;
  background:linear-gradient(135deg,#8a5cf0,#e8a24c);color:#fff;font-size:18px;font-weight:850;
  box-shadow:0 6px 18px rgba(70,40,140,.4);text-align:center}
.sfedu-next-answer:active{transform:scale(.985)}
.sfedu-next-answer:focus-visible{outline:3px solid #ffe28a;outline-offset:2px}

/* PASSE C3 — l'écran Artefacts vide cesse d'être un cul-de-sac : un geste, vers là où on les gagne. */
.education-shell .eq-child-go{
  display:block;width:100%;min-height:64px;margin:4px 0 14px;border:0;border-radius:16px;
  background:linear-gradient(135deg,#8a5cf0,#e8a24c);color:#fff;font-size:17px;font-weight:850;
  box-shadow:0 6px 18px rgba(70,40,140,.4);
}
.education-shell .eq-child-go:active{transform:scale(.985)}
.education-shell .eq-child-go:focus-visible{outline:3px solid #ffe28a;outline-offset:2px}

/* PASSE C1 — LA prochaine chose à faire (P5) : un seul grand geste, aux couleurs de l'Aube dorée. */
.sfedu-continue{padding:0;background:transparent}
.sfedu-continue-cta{display:block;width:100%;min-height:72px;border:0;border-radius:18px;background:linear-gradient(135deg,#8a5cf0,#e8a24c);color:#fff;font-size:18px;font-weight:850;letter-spacing:.01em;box-shadow:0 6px 18px rgba(70,40,140,.45)}
.sfedu-continue-cta:active{transform:scale(.985)}
.sfedu-continue-cta:focus-visible{outline:3px solid #ffe28a;outline-offset:2px}
@keyframes sfedu-feedback-in{0%{opacity:.55;transform:scale(.96)}100%{opacity:1;transform:scale(1)}}@keyframes sfedu-sparkle{45%{transform:scale(1.28) rotate(12deg);box-shadow:0 0 24px #ffe58b}100%{transform:scale(1)}}@keyframes sfedu-current{50%{box-shadow:0 0 0 2px rgba(255,226,138,.5),0 0 25px rgba(190,123,255,.42)}}@keyframes sfedu-chest-glow{50%{filter:drop-shadow(0 0 24px rgba(255,229,133,.9));transform:scale(1.05)}}
@media (prefers-reduced-motion:reduce){.sfedu *,.sfedu *:before,.sfedu *:after{scroll-behavior:auto!important;animation:none!important;transition:none!important}.sfedu-chest-moment.is-open .sfedu-chest-lid{transform:translate(-5px,-12px) rotate(-8deg)}}
@media (max-width:420px){.sfedu-result-hero{grid-template-columns:minmax(0,1fr) minmax(126px,1fr)}.sfedu-result-hero .sfedu-soul-portrait{width:108px;height:108px}.sfedu-result-score .sfedu-score{font-size:37px}.sfedu-result-score .sfedu-answer-orbs{display:grid;grid-template-columns:repeat(3,29px);justify-content:center}.sfedu-question-scene{grid-template-columns:1fr}.sfedu-question-scene .sfedu-companion{grid-template-columns:80px 1fr}.sfedu-question-scene .sfedu-soul-portrait{width:76px;height:76px}.sfedu-question-scene .sfedu-soul-bubble{text-align:left}.sfedu-question-scene .sfedu-soul-bubble:before{left:-7px;top:50%;transform:translateY(-50%) rotate(45deg)}.sfedu-skill{width:calc(100% - 12px);gap:6px}.sfedu-skill-vignette{flex-basis:48px;width:48px;height:48px}.sfedu-skill-vignette img{width:42px;height:42px}.sfedu-skill-values strong{font-size:12px}.sfedu-skill-copy b{font-size:12px}.sfedu-skill-copy .sfedu-child-line{font-size:10px}.sfedu-hero-home{gap:8px;padding:14px}.sfedu-hero-block{padding:10px}.sfedu-duo-member img{height:230px}.sfedu-form-step img{width:50px;height:50px}.sfedu-form-path:before{top:27px}}
@media (max-width:350px){.sfedu-session-progress{position:sticky;z-index:8;top:0;justify-content:flex-start;gap:7px;margin:0 -8px 8px;padding:5px 8px;border:1px solid rgba(255,226,137,.25);border-radius:13px;background:rgba(18,12,35,.96);box-shadow:0 7px 16px rgba(0,0,0,.28)}.sfedu-session-progress .sfedu-progress-soul{display:block}.sfedu-session-progress .sfedu-answer-orbs{flex:1;gap:5px;margin:0}.sfedu-session-progress .sfedu-answer-orbs span{width:27px;height:27px;font-size:14px}.sfedu-result-hero{gap:3px}.sfedu-result-hero .sfedu-soul-portrait{width:86px;height:86px}.sfedu-result-hero .sfedu-soul-bubble{padding:7px;font-size:10px}.sfedu-result-score .sfedu-score{font-size:31px}.sfedu-result-score .sfedu-answer-orbs span{width:23px;height:23px}.sfedu-chest-moment{padding:9px}.sfedu-chest{height:88px;margin:-3px 0 -5px;transform:scale(.74)}.sfedu-chest-moment h3{margin:2px 0;font-size:14px}.sfedu-chest-moment .sfedu-rewards{gap:4px;font-size:11px}.sfedu-fragment-slot{padding:5px}.sfedu-hero-page{padding-top:4px}.sfedu-hero-home{gap:5px;padding:9px}.sfedu-hero-home>h2{font-size:20px}.sfedu-hero-block{padding:7px;border-radius:14px}.sfedu-hero-block h3{margin-bottom:4px;font-size:14px}.sfedu-duo-portraits{gap:4px}.sfedu-duo-member img{height:64px}.sfedu-duo-form{margin:0!important;font-size:11px}.sfedu-power>h3{display:none}.sfedu-power-head strong{font-size:28px}.sfedu-power-gauge{margin:5px 0 3px}.sfedu-power-truth{font-size:10px}.sfedu-power-sources{grid-template-columns:1fr 1fr;gap:2px;margin-top:5px;font-size:10px}.sfedu-power-sources span:last-child{grid-column:1/-1}.sfedu-form-step img{width:42px;height:42px}.sfedu-form-path:before{top:23px}.sfedu-next-form{margin-top:5px!important;font-size:10px}.sfedu-exploits,.sfedu-next-actions{margin-top:2px}.sfedu-exploit{padding:7px;font-size:10px}}

/* TÂCHE 14 — le changement durable du héros est fêté dans le résultat du test. Le panneau est un
   aplat opaque ; les deux PNG transparents sont superposés uniquement pendant la dissolution. */
.sfedu-hero-palier{display:grid;justify-items:center;gap:8px;margin:8px 0 18px;padding:16px;border-radius:20px;background:#5b4384;color:#fff7df;text-align:center;overflow:hidden}
.sfedu-hero-palier-portraits{position:relative;width:min(250px,72vw);height:min(300px,78vw)}
.sfedu-hero-palier-portraits img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 12px 14px #2d204d)}
.sfedu-hero-palier-old{z-index:2;animation:sfedu-hero-old-out 1s .25s ease both}
.sfedu-hero-palier-new{z-index:1;animation:sfedu-hero-new-in 1s .15s ease both}
.sfedu-hero-palier-title{max-width:28ch;font-size:clamp(18px,5vw,24px);line-height:1.25;color:#ffe69a}
.sfedu-hero-palier-line{margin:0!important;max-width:32ch;line-height:1.4}
@keyframes sfedu-hero-old-out{from{opacity:1;filter:drop-shadow(0 12px 14px #2d204d) blur(0)}to{opacity:0;filter:drop-shadow(0 12px 14px #2d204d) blur(8px)}}
@keyframes sfedu-hero-new-in{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.sfedu-hero-palier-old{display:none}.sfedu-hero-palier-new{animation:none;opacity:1;transform:none}}
@media (max-width:350px){.sfedu-hero-palier{padding:10px}.sfedu-hero-palier-portraits{width:150px;height:170px}}

/* Tâche 11 — deux niveaux de fond : décor de l'écran (0), surfaces tactiles (1). */
/* Lumière « Aube dorée » (arbitrage propriétaire du 14/08, planche Icône & Lumière) : le ciel du
   matin au-dessus de l'Académie, du violet doux vers une lueur pêche. Surfaces OPAQUES — le
   propriétaire ne veut aucun cadre en transparence. */
/* Le ciel suit l'heure de l'enfant (sf-sky.js pose la classe sur <html>) ; l'aube reste le repli. */
:root{--sf-sky:linear-gradient(180deg,#453a7d 0%,#7c56a8 45%,#c77fa0 78%,#f0ac82 100%)}
.sf-sky-jour{--sf-sky:linear-gradient(180deg,#2f6ab0 0%,#4f8ec9 45%,#79b4dd 80%,#9ccfe0 100%)}
.sf-sky-soir{--sf-sky:linear-gradient(180deg,#2e2a66 0%,#7c4a8f 45%,#d86f7a 80%,#f2a45c 100%)}
.sf-sky-nuit{--sf-sky:
  radial-gradient(2px 2px at 12% 12%,rgba(255,255,255,.9),transparent 60%),
  radial-gradient(1.6px 1.6px at 68% 6%,rgba(255,236,180,.9),transparent 60%),
  radial-gradient(1.8px 1.8px at 84% 22%,rgba(255,255,255,.75),transparent 60%),
  radial-gradient(1.4px 1.4px at 35% 18%,rgba(190,225,255,.8),transparent 60%),
  radial-gradient(2px 2px at 52% 9%,rgba(255,255,255,.6),transparent 60%),
  radial-gradient(1.5px 1.5px at 22% 30%,rgba(255,255,255,.5),transparent 60%),
  linear-gradient(180deg,#1c2f63 0%,#3b2f7d 50%,#6d3f96 82%,#a75d8e 100%)}
.sf-education-mode #title,.education-shell{--sf-bg-level:0;
  --sfedu-ground:var(--sf-sky);
  --sfedu-surface:#4d3b7d;
  --sfedu-surface-active:linear-gradient(145deg,#8a63c9,#5a6fd1);
  /* Valeurs récurrentes de l'habillage enfant, centralisées ici (refonte du 2026-08-14) : elles
     évitent de réécrire dix fois le même rayon, la même barre ou le même or. */
  --sfedu-bar:#3a2c66;              /* barres système : haut et bas */
  --sfedu-card:#4d3b7d;             /* surface d'une carte, opaque */
  --sfedu-or:#ffd873;               /* accent actif : onglet courant, progression, chiffres */
  --sfedu-ink:#fff8ed;              /* texte principal */
  --sfedu-ink-doux:#d6cae6;         /* texte secondaire */
  --sfedu-rayon:20px;               /* rayon des cartes */
  --sfedu-espace:14px;              /* respiration entre cartes */
  --sfedu-marge:16px;               /* marge intérieure d'une carte */
}
/* Repli sur la racine : le shell doit hériter de la hauteur réelle publiée par
   ResizeObserver, y compris la zone système, au lieu de la masquer avec 70 px. */
:root{--sfedu-nav:70px}
.sf-education-mode #title{background:var(--sfedu-ground)}
.education-shell{background:linear-gradient(180deg,rgba(12,9,28,.30),rgba(12,9,28,.06) 34%,rgba(12,9,28,.16)),var(--sfedu-ground)}
.education-shell #menuBg{display:none}
.sf-education-mode #titleBanner,.sf-education-mode .hero-pick,.education-shell .topbar,.education-shell .nav,.sfedu .sfedu-btn:not(.quiet),.sfedu input,.sfedu .sfedu-skill,.sfedu .sfedu-review-details,.sfedu .sfedu-lexicon-row,.sfedu .sfedu-session-progress{--sf-bg-level:1}

/* Le filet d'accessibilité reste volontairement indépendant de la décoration. */
.sf-education-mode button:focus-visible,.sf-education-mode [tabindex]:focus-visible,.education-shell button:focus-visible,.education-shell input:focus-visible,.education-shell summary:focus-visible{outline:3px solid #ffe28a;outline-offset:3px}

/* Choix du héros et barre haute : portraits détourés, réglage sans cercle, séparation par fond. */
.sf-education-mode #titleBanner,.sf-education-mode .hero-pick,.sf-education-mode .hero-pick .hp-ava{border:0;box-shadow:none}
.sf-education-mode .hero-pick{background:var(--sfedu-surface);border-radius:24px;margin-bottom:16px;box-shadow:0 12px 30px rgba(0,0,0,.2)}
.sf-education-mode .hero-pick .hp-ava{background:transparent;border-radius:0;overflow:visible}
.sf-education-mode .hero-pick .hp-ava img{object-fit:contain}
.sf-education-mode .hero-pick .hp-el{border:0}

/* Carrousel de sélection du héros (retour propriétaire, test OTA 183) : un héros à la fois,
   plein-pied, flèches ‹ › et balayage. Surfaces sans bordure, niveaux de fond 0/1 respectés. */
.sf-education-mode .hero-carousel{display:flex;flex-direction:column;gap:14px;max-width:520px;margin:0 auto;width:100%}
.sf-education-mode .hc-stage{position:relative;display:flex;align-items:center}
.sf-education-mode .hc-figure{flex:1;display:flex;align-items:center;justify-content:center;height:min(44vh,420px);min-width:0}
.sf-education-mode .hc-figure img{height:100%;width:auto;max-width:100%;object-fit:contain;filter:drop-shadow(0 18px 24px rgba(0,0,0,.35))}
/* La respiration : minuscule, ancrée aux pieds, coupée si l'enfant préfère moins de mouvement. */
.sf-education-mode .hc-img{transform-origin:50% 100%;animation:sf-hc-breathe 3.4s ease-in-out infinite}
.sf-education-mode .hc-figure.hc-swap .hc-img{animation:sf-hc-in .28s ease,sf-hc-breathe 3.4s ease-in-out .28s infinite}
@keyframes sf-hc-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.012,1.024) translateY(-3px)}}
@keyframes sf-hc-in{from{opacity:0;transform:translateX(14px)}to{opacity:1;transform:none}}
/* Flèches en pastille dorée (retour propriétaire 14/08 : trop petites et effacées) : l'or de la
   charte sur l'aube, glyphe épais et sombre, assez grosses pour des doigts d'enfant. */
/* Flèches en pastille dorée. Le chevron est DESSINÉ (deux bords tournés à 45°), pas écrit : le
   glyphe « ‹ » d'une police système reste minuscule dans son cadre quelle que soit la taille de
   police, et le propriétaire les voulait vraiment grandes. Le texte du bouton est masqué, le nom
   accessible vient de son aria-label. */
/* Posées EN SURIMPRESSION sur les bords de la scène : élargir les pastilles ne doit pas rogner le
   héros, qui reste la vedette de l'écran. */
.sf-education-mode .hc-arrow{--sf-bg-level:1;position:absolute;top:50%;z-index:2;display:grid;place-items:center;width:84px;height:66px;border:0;border-radius:24px;padding:0;background:linear-gradient(160deg,#ffe08a,#e2a344);font-size:0;box-shadow:0 8px 20px rgba(0,0,0,.30),0 0 0 3px rgba(255,224,138,.35);cursor:pointer}
.sf-education-mode .hc-prev{left:0;transform:translateY(-50%)}
/* Le carrousel des matières touche les deux bords depuis le 16/08 : ses flèches doivent rentrer, ou
   elles se collent au cadre de l'écran. Portée limitée à cette scène — le carrousel des héros
   partage les mêmes classes et garde son placement. */
.sfedu-carousel-stage .hc-prev{left:10px}
.sfedu-carousel-stage .hc-next{right:10px}
.sf-education-mode .hc-next{right:0;transform:translateY(-50%)}
.sf-education-mode .hc-arrow:before{width:40px;height:30px;background:#4a2f10;content:''}
.sf-education-mode .hc-prev:before{clip-path:polygon(100% 0,64% 0,0 50%,64% 100%,100% 100%,36% 50%)}
.sf-education-mode .hc-next:before{clip-path:polygon(0 0,36% 0,100% 50%,36% 100%,0 100%,64% 50%)}
.sf-education-mode .hc-arrow:active{transform:translateY(-50%) scale(.94)}
.sf-education-mode .hc-card{--sf-bg-level:1;background:var(--sfedu-surface);border:0;border-radius:24px;padding:16px 18px;text-align:left;box-shadow:0 12px 30px rgba(0,0,0,.2)}
.sf-education-mode .hc-name{display:flex;align-items:center;gap:8px;font-weight:800;font-size:20px;color:#fff}
.sf-education-mode .hc-name .hp-el{border:0;font-size:11px}
.sf-education-mode .hc-traits{margin-top:2px;font-size:12.5px;font-weight:700;color:#d8cce1}
.sf-education-mode .hc-story{margin:10px 0 8px;font-size:14px;line-height:1.55;color:#f3ecda}
.sf-education-mode .hc-bonus{font-size:12.5px;font-weight:700;color:#ffe5a0}
.sf-education-mode .hc-choose{display:block;width:100%;margin-top:12px;min-height:52px;border:0;border-radius:16px;background:var(--sfedu-surface-active);color:#fff;font-weight:850;font-size:16px;cursor:pointer}
.sf-education-mode .hc-choose:active{transform:scale(.985)}
.sf-education-mode .hc-status{margin-top:6px;font-size:12px;font-weight:700;color:#d8cce1}
.sf-education-mode .hc-choose:disabled{opacity:.55;cursor:default}
/* Le même carrousel dans le modal « changer de héros » : figure réduite pour tenir dans la carte. */
.sf-education-mode #heroModal .hc-figure{height:min(28vh,240px)}
.sf-education-mode #heroModal .hc-story{font-size:13px}
.sf-education-mode .hc-dots{display:flex;justify-content:center;gap:8px}
/* Points de position lisibles eux aussi : l'or de la charte sur une pastille claire. */
.sf-education-mode .hc-dot{--sf-bg-level:1;width:10px;height:10px;border-radius:50%;background:rgba(255,255,255,.42)}
.sf-education-mode .hc-dot.on{background:#ffd873;box-shadow:0 0 0 3px rgba(255,216,115,.3)}
@media (prefers-reduced-motion:reduce){.sf-education-mode .hc-img,.sf-education-mode .hc-figure.hc-swap .hc-img{animation:none}}
/* ————— Barre du bas ——————————————————————————————————————————————————————————————
   Hauteur uniforme, icônes de même gabarit, libellés alignés. L'onglet courant porte l'or de la
   charte et un trait indicateur ; les autres restent lisibles mais en retrait. La safe area est
   ajoutée sous la barre, et la réserve de scroll des écrans en tient compte (--sfedu-nav). */
.education-shell .topbar,.education-shell .nav{border:0;background:var(--sfedu-bar);backdrop-filter:none}
.education-shell .nav{padding:6px 4px calc(6px + env(safe-area-inset-bottom));box-shadow:0 -6px 18px rgba(0,0,0,.28)}
.education-shell .nav button{position:relative;gap:4px;padding:8px 2px 6px;color:rgba(255,255,255,.6);font-size:10px;letter-spacing:.3px}
.education-shell .nav button .ni{display:grid;place-items:center;width:28px;height:28px;font-size:22px;filter:none;line-height:1}
.education-shell .nav button.on{color:var(--sfedu-or)}
.education-shell .nav button.on .ni{transform:translateY(-1px) scale(1.06)}
.education-shell .nav button.on:before{position:absolute;left:50%;top:0;width:26px;height:3px;
  border-radius:0 0 4px 4px;background:var(--sfedu-or);transform:translateX(-50%);content:''}
/* Le ⇄ « changer de héros » était gris et fondu dans la barre : même or que les flèches. */
.education-shell .hero-switch{display:grid;place-items:center;width:30px;height:30px;margin-left:8px;border-radius:50%;background:linear-gradient(160deg,#ffe08a,#e2a344);color:#4a2f10;font-size:15px!important;font-weight:800;opacity:1;box-shadow:0 3px 9px rgba(0,0,0,.28)}
.education-shell .hero-ava,.education-shell .hero-chip .hero-ava{border:0;border-radius:50%;background:transparent;box-shadow:none;overflow:visible}
.education-shell .hero-ava img{object-fit:contain;border-radius:50%}
.education-shell .acct-btn,.education-shell .acct-btn.on{border:0;border-radius:0;background:transparent;box-shadow:none}

/* Page fluide : aucun conteneur encadré, les textes se hiérarchisent par l'espace. */
.sfedu{border:0;border-radius:0;padding:24px 20px;background:transparent;box-shadow:none;text-shadow:0 2px 9px rgba(0,0,0,.38)}
.sfedu *{border:0}
.sfedu p{line-height:1.65}
.sfedu h2{margin-bottom:10px;font-size:22px}
.sfedu h3{margin-top:18px}
.sfedu-stats,.sfedu-skills,.sfedu-parent-list,.sfedu-lexicon{gap:16px}
.sfedu-stat,.sfedu-summary,.sfedu-question,.sfedu-passage,.sfedu-speech-fallback,.sfedu-visual,.sfedu-feedback,.sfedu-result,.sfedu-parent-row,.sfedu-reward-preview,.sfedu-streak,.sfedu-hero-block,.sfedu-exploit,.sfedu-review-row,.sfedu-domain-title,.sfedu-skill-vignette,.sfedu-form-step img,.sfedu-fragment-slot{background:transparent;box-shadow:none}
.sfedu-stat,.sfedu-summary,.sfedu-question,.sfedu-passage,.sfedu-speech-fallback,.sfedu-feedback,.sfedu-result,.sfedu-parent-row,.sfedu-reward-preview,.sfedu-streak,.sfedu-hero-block,.sfedu-review-row,.sfedu-domain-title,.sfedu-fragment-slot{padding-left:0;padding-right:0}
.sfedu-question{padding-block:18px;line-height:1.35;text-shadow:0 2px 10px #000}
.sfedu-passage,.sfedu-feedback,.sfedu-result,.sfedu-reward-preview,.sfedu-streak{line-height:1.6}
.sfedu .sfedu-feedback.good,.sfedu .sfedu-feedback.retry,.sfedu .sfedu-form-step img{border:0}

/* Un seul niveau surélevé, réservé aux actions. */
.sfedu .sfedu-btn:not(.quiet),.sfedu input,.sfedu .sfedu-skill,.sfedu .sfedu-review-details,.sfedu .sfedu-lexicon-row,.sfedu .sfedu-session-progress{background:var(--sfedu-surface);border-radius:20px;box-shadow:0 12px 28px rgba(0,0,0,.2)}
.sfedu .sfedu-btn:not(.quiet){background:var(--sfedu-surface-active)}
.sfedu .sfedu-btn.secondary:not(.quiet),



.sfedu .sfedu-review-details{overflow:hidden}
.sfedu .sfedu-review{gap:14px;padding:0 16px 16px}
.sfedu .sfedu-review-row{line-height:1.55}
.sfedu-path:before{display:none}
/* Une seule largeur pour toute la colonne (retour propriétaire : « des cadres de tailles
   différentes un peu partout »). La bulle de la Soul était restée une boîte sombre translucide, et
   le bouton Voix une petite pilule décalée : tous les panneaux partagent désormais l'aplat de
   surface, la même largeur et le même rayon. */
.sfedu .sfedu-soul-bubble{background:var(--sfedu-surface);border-radius:20px;color:#fff2c9;box-shadow:0 12px 28px rgba(0,0,0,.2)}
.sfedu .sfedu-soul-bubble:before{display:none}
/* Les deux commandes de confort tiennent sur une rangée : elles ne doivent pas peser autant que
   les cartes de matière, qui sont le vrai sujet de la page. */
.sfedu-outils{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:12px 0 4px}
.sfedu .sfedu-outils .sfedu-btn{min-height:46px;margin:0;border-radius:16px;background:var(--sfedu-card);color:var(--sfedu-ink);font-size:13.5px;box-shadow:none}
.sfedu .sfedu-voice-toggle{width:100%;margin:0;border-radius:16px;text-align:center}
.sfedu .sfedu-summary{border-radius:20px}
.sfedu-subject-hero{background:transparent;object-fit:contain;height:210px}

/* Mon héros : sections ouvertes, portraits sans plaques ni anneaux. */
.sfedu-hero-home{gap:16px}
.sfedu-hero-block{padding-block:8px}
.sfedu-duo{margin-bottom:10px;padding-bottom:10px;background:transparent}
.sfedu-duo-member img{object-fit:contain}
.sfedu-form-step img{border-radius:0}
.sfedu-form-step.current img{box-shadow:none;filter:drop-shadow(0 0 12px rgba(255,222,118,.58))}
.sfedu-power-gauge{display:none}
.sfedu-exploit{padding-block:4px;line-height:1.6}

/* Bulle de la Soul : l'exception « fond + filet sombre » est LEVÉE depuis l'aube (14/08) — elle
   posait une boîte presque noire au milieu d'un ciel clair, un des « cadres » signalés par le
   propriétaire. Elle prend l'aplat de surface commun, sans filet ni pointe. */
.sfedu .sfedu-soul-bubble{border:0;background:var(--sfedu-surface);line-height:1.6;text-shadow:none}
.sfedu .sfedu-soul-bubble:before{display:none}

/* Score au remplissage seul et vraie illustration du coffre. */
.sfedu input,.sfedu-answer-orbs span{border:0}
.sfedu-answer-orbs span{background:rgba(255,255,255,.08);box-shadow:none}
.sfedu-answer-orbs span.filled{background:radial-gradient(circle,#fff3bd,#b978d4);box-shadow:0 0 13px rgba(255,222,128,.35)}
.sfedu-chest-moment{padding-inline:0;background:transparent;box-shadow:none;overflow:visible}
.sfedu-chest{display:grid;width:min(260px,72vw);height:auto;margin:0;place-items:center;filter:drop-shadow(0 14px 18px rgba(0,0,0,.42))}
.sfedu-chest img{grid-area:1/1;display:block;width:100%;height:auto;object-fit:contain;transition:opacity .3s ease,transform .3s ease}
.sfedu-chest-open{opacity:0;transform:scale(.94)}
.sfedu-chest-moment.is-open .sfedu-chest-closed{opacity:0;transform:scale(.94)}
.sfedu-chest-moment.is-open .sfedu-chest-open{opacity:1;transform:scale(1)}
.sfedu-fragment-slot{margin-top:8px}
.education-shell .pz-copy,.education-shell .pz-pin,.education-shell .pz-hero,.education-shell .ps-copy{--sf-bg-level:1}

@media (max-width:420px){.sfedu{padding:20px 16px}.sfedu-hero-home{padding:14px}.sfedu-hero-block{padding:6px 0}.sfedu-chest{width:min(230px,70vw)}}
@media (max-width:350px){.sfedu .sfedu-session-progress{border:0;background:rgb(43,29,65)}.sfedu-chest{width:112px;height:auto;margin:0;transform:none}.sfedu-hero-home{gap:5px;padding:9px}.sfedu-hero-block{padding:3px 0}.sfedu-hero-block h3{margin:0 0 4px}}

/* ===================================================================================
   Correction Claude — 2026-08-13, après la chasse aux cadres (TACHE 11)
   -----------------------------------------------------------------------------------
   Conséquence non prévue du retrait des conteneurs : le décor de région (#menuBg,
   MAP_BG du monde courant) était masqué par les cartes opaques. Elles ont disparu, il
   se retrouve à nu derrière le texte — lave rouge sur l'accueil, fond marin sur
   l'Académie. Un décor agité sous du texte sans cadre est illisible, et c'est dur à
   l'œil : exactement le contraire du « plus doux » demandé.
   On calme le décor au lieu de rendre les cadres. Voile presque opaque, sans filtre :
   un blur plein écran coûte cher sur le téléphone d'entrée de gamme qui est la cible.
   =================================================================================== */
.education-shell #menuBg::after{
  background:linear-gradient(180deg,
    rgba(19,12,28,.955) 0%,
    rgba(16,10,24,.975) 55%,
    rgba(12,8,19,.99) 100%);
}
/* Le décor reste perceptible comme une profondeur, pas comme une image. */
.education-shell #menuBg{opacity:.9}

/* La dernière ligne de l'accueil passait sous la barre d'onglets : le conteneur qui
   portait cette marge a été retiré avec son cadre. */
.education-shell .sfedu{padding-bottom:calc(116px + env(safe-area-inset-bottom))}

/* Sur petit écran, les provenances de la puissance restent sur une seule colonne. */
@media (max-width:350px){
  .education-shell .sfedu-power-sources{grid-template-columns:1fr;gap:5px;font-size:11px}
}
/* La prochaine évolution reste visible sans défiler en 320×568 : le titre du duo est seulement
   masqué visuellement à cette largeur, mais reste lu par les lecteurs d’écran. */
@media (max-width:350px){
  .education-shell .sfedu-duo{display:grid;grid-template-columns:1fr 1fr;gap:4px}
  .education-shell .sfedu-duo h3{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
  .education-shell .sfedu-duo-portraits,.education-shell .sfedu-duo-form{grid-column:1/-1}
  .education-shell .sfedu-duo-member img{height:56px}
  .education-shell .sfedu-hero-home{gap:4px}
}

/* ===================================================================================
   Film d'ouverture (sf-intro.js) — cinq plans, pas une vidéo.
   Plein écran, aucun cadre, texte lisible par-dessus l'illustration grâce à un fondu
   sombre en bas plutôt qu'à une plaque : la règle « aucun cadre » vaut aussi ici.
   =================================================================================== */
.sfintro{position:fixed;inset:0;z-index:9999;display:flex;flex-direction:column;
  background:#0c0812;color:#fff8ed;font-family:system-ui,sans-serif;overflow:hidden}
.sfintro-scene{position:absolute;inset:0}
.sfintro-plan{position:absolute;inset:0;opacity:0;transition:opacity .85s ease}
.sfintro-plan.on{opacity:1}
.sfintro-plan img{width:100%;height:100%;object-fit:cover;display:block}
/* Plan en attente d'illustration : un aplat teinté qui porte son numéro. */
.sfintro-attente{display:grid;place-items:center}
.sfintro-numero{font-family:Georgia,serif;font-size:clamp(4rem,18vw,9rem);color:rgba(255,248,237,.22)}
/* Mouvements de caméra : lents, jamais spectaculaires. */
@keyframes sfintro-zi{from{transform:scale(1)}to{transform:scale(1.12)}}
@keyframes sfintro-zo{from{transform:scale(1.12)}to{transform:scale(1)}}
@keyframes sfintro-pl{from{transform:scale(1.12) translateX(2.5%)}to{transform:scale(1.12) translateX(-2.5%)}}
@keyframes sfintro-pr{from{transform:scale(1.12) translateX(-2.5%)}to{transform:scale(1.12) translateX(2.5%)}}
.sfintro-plan.cam-zoom-in img,.sfintro-plan.cam-zoom-in.sfintro-attente{animation:sfintro-zi 6s linear both}
.sfintro-plan.cam-zoom-out img,.sfintro-plan.cam-zoom-out.sfintro-attente{animation:sfintro-zo 6s linear both}
.sfintro-plan.cam-pan-left img,.sfintro-plan.cam-pan-left.sfintro-attente{animation:sfintro-pl 6s linear both}
.sfintro-plan.cam-pan-right img,.sfintro-plan.cam-pan-right.sfintro-attente{animation:sfintro-pr 6s linear both}
/* La phrase du plan : posée sur un fondu, pas dans une boîte. */
.sfintro-texte{position:absolute;left:0;right:0;bottom:0;z-index:1;margin:0;padding:clamp(1.2rem,5vw,2.4rem) clamp(1.2rem,6vw,3rem) calc(clamp(1.2rem,5vw,2.4rem) + env(safe-area-inset-bottom));
  font-size:clamp(1.15rem,4.6vw,1.7rem);line-height:1.5;font-weight:700;text-align:center;
  text-shadow:0 3px 14px rgba(0,0,0,.85);
  background:linear-gradient(180deg,rgba(12,8,18,0),rgba(12,8,18,.88) 45%,rgba(12,8,18,.97))}
.sfintro-passer{position:absolute;top:calc(12px + env(safe-area-inset-top));right:12px;z-index:2;
  min-height:44px;min-width:44px;padding:.55rem 1rem;border:0;border-radius:999px;cursor:pointer;
  background:rgba(255,248,237,.14);color:#fff8ed;font:inherit;font-size:.95rem;font-weight:650}
.sfintro-passer:hover{background:rgba(255,248,237,.24)}
.sfintro *:focus-visible{outline:3px solid #ffd873;outline-offset:3px}
/* Écran final : la phrase seule, et une seule porte. */
.sfintro-final .sfintro-scene{display:grid;place-content:center;gap:clamp(1.6rem,5vw,2.8rem);
  padding:clamp(1.5rem,6vw,3rem);text-align:center}
.sfintro-phrase{margin:0;font-family:Georgia,"Iowan Old Style",serif;
  font-size:clamp(1.5rem,6.5vw,2.6rem);line-height:1.32;color:#ffd873;max-width:22ch;justify-self:center}
.sfintro-entrer{justify-self:center;min-height:56px;padding:.9rem 1.8rem;border:0;border-radius:1rem;
  cursor:pointer;background:linear-gradient(135deg,#7b4fb5,#4a63b5);color:#fff8ed;
  font:inherit;font-size:1.1rem;font-weight:800}
/* Accessibilité : plus aucun mouvement, mêmes textes, mêmes durées. */
@media (prefers-reduced-motion:reduce){
  .sfintro-plan{transition:opacity .3s ease}
  .sfintro-plan img,.sfintro-attente{animation:none!important}
}
.sfintro-sobre .sfintro-plan img,.sfintro-sobre .sfintro-attente{animation:none!important}

/* Matières optionnelles dans l'espace parent — l'allemand n'est pas enseigné partout, c'est
   l'adulte qui décide. Même grammaire que le reste : une surface, jamais un filet. */
.sfedu-parent-options{display:grid;gap:10px;margin:18px 0}
.sfedu-parent-options h3{margin:0}
.sfedu-parent-note{margin:0;color:#cdbfd8;font-size:13px;line-height:1.6}
.sfedu-optional-toggle{justify-self:start}
.sfedu-optional-toggle.on{background:rgba(120,200,140,.22);color:#e8ffe8}

/* ─── COLLECTION DE SOULS : le cadre noir s'en va (retour propriétaire du 2026-08-16) ───────────
   « Les cadres/volets noirs qui entourent les menus alourdissent visuellement l'interface. »
   L'écran de collection est le SEUL écran enfant jamais repris depuis le pivot : `sf-souls-v2-ui.js`
   se dessine sa propre boîte — fond cosmique quasi noir, coins arrondis, champ d'étoiles — et cette
   boîte se posait telle quelle sur le dégradé Aube dorée. D'où l'impression de volet rapporté.
   On ne touche PAS à `sf-souls-v2-ui.js` : l'Arène et le mode adulte gardent leur bestiaire cosmique.
   Ici on dissout seulement le contenant, et on ramène les cartes à la surface opaque de l'Académie
   (`--sfedu-surface`) — jamais de translucide dans un écran enfant. */
.sf-education-mode .sc2{background:transparent;border-radius:0;overflow:visible}
.sf-education-mode .sc2.sc2-cosmic::before{display:none}
.sf-education-mode .sc2 .hd{border-bottom:0;padding:4px 2px 10px}
.sf-education-mode .sc2 .sc2grid{padding:2px 0 18px}
.sf-education-mode .sc2 .card{background:var(--sfedu-surface,#4d3b7d);border-color:rgba(255,229,160,.34);
  box-shadow:0 10px 24px rgba(20,10,40,.28)}
.sf-education-mode .sc2 .card.active{border-color:#ffd98a}
/* La vignette d'une carte gardait un fond sombre propre : elle prend la teinte de l'élément sur la
   surface enfant, sinon chaque carte redevient un petit rectangle noir. */
.sf-education-mode .sc2 .card .art{background:radial-gradient(78% 70% at 50% 36%,
  color-mix(in srgb,var(--el,#7a5adf) 42%,var(--sfedu-surface,#4d3b7d)),var(--sfedu-surface,#4d3b7d) 82%)}
.sf-education-mode .sc2 .card .elrow span{background:rgba(255,255,255,.12);border-color:rgba(255,229,160,.5)}
.sf-education-mode .sc2 .card .masteries{background:rgba(255,255,255,.1);border-color:rgba(255,229,160,.38);color:#fff5e2}
/* Les filtres et la pastille « Active » venaient du shell V2, en verre translucide
   (`--v2-glass:rgba(20,29,53,.52)`) : dans un écran enfant, aucun panneau translucide — c'est la
   charte Aube dorée, et c'est ce qui faisait ressortir des rectangles gris et un bouton presque noir
   sur le dégradé. On redéfinit les jetons DANS la collection seulement : l'Arène et le mode adulte
   gardent leur verre. */
.sf-education-mode .sc2{--v2-glass:#5b4890;--v2-glass-hi:#6b56a5;--v2-glass-brd:rgba(255,229,160,.34)}
.sf-education-mode .sc2 .card .pick.on{background:#6b56a5;color:#ffe9b8;border-color:rgba(255,229,160,.6)}

/* TÂCHE 26 — l'exercice commence par ce que l'enfant doit comprendre. Le bloc est ajouté hors du
   pourtour du carrousel, qui reste la propriété de Claude. Tous les fonds ci-dessous sont opaques. */
.sfedu.sfedu-exercise-active{--sf-bg-level:0;padding:12px;background:#302348;border-radius:0;color:#fff8ed;text-shadow:none;font-family:system-ui,sans-serif}
.education-shell.sfedu-question-open .topbar .wallet .amt,.education-shell.sfedu-question-open .topbar .wallet .rate{display:none}
.sfedu-exercise-active *{font-family:inherit;text-shadow:none}
.sfedu-exercise-active .sfedu-question-primary{--sf-bg-level:1;display:grid;gap:7px;padding:11px;border-radius:18px;background:#4d3b7d}
.sfedu-exercise-active .sfedu-question{margin:0;padding:2px 0;background:transparent;color:#fffaf0;font-size:clamp(27px,7.5vw,34px);font-weight:850;line-height:1.18;letter-spacing:0;text-align:left}
.sfedu-exercise-active .sfedu-passage{margin:0;padding:5px 0;background:transparent;color:#fff8ed;font-size:14px;line-height:1.34}
.sfedu-exercise-active .sfedu-visual{min-height:0;max-height:96px;margin:0;padding:3px;background:#3a2c66;border-radius:14px;overflow:hidden}
.sfedu-exercise-active .sfedu-visual svg{height:90px;max-width:280px}
.sfedu-exercise-active .sfedu-coin{width:46px;height:46px;border:0;font-size:13px}
.sfedu-exercise-active .sfedu-coin.c100,.sfedu-exercise-active .sfedu-coin.c200{width:52px;height:52px}
.sfedu-exercise-active .sfedu-bar-item{grid-template-rows:16px 54px 16px;min-width:48px}
.sfedu-exercise-active .sfedu-bar{height:54px!important}
.sfedu-exercise-active .sfedu-choices{gap:6px}
.sfedu-exercise-active .sfedu-choices .sfedu-btn{--sf-bg-level:1;min-height:48px;margin:0;padding:8px 13px;border:0;border-radius:14px;background:#66509a;color:#fffaf0;box-shadow:none;font-size:15px;line-height:1.22;text-align:left}
.sfedu-exercise-active .sfedu-close{position:static;width:100%;height:44px;min-height:44px;margin:8px 0 0;border-radius:14px;background:#ffd873;box-shadow:none}
.sfedu-exercise-active .sfedu-close:before{width:26px;height:20px}
.sfedu-exercise-active .sfedu-exercise-secondary{display:grid;gap:7px;margin-top:8px}
.sfedu-exercise-active .sfedu-exercise-secondary h2{margin:0;padding:0;font-size:18px;color:#fff8ed}
.sfedu-exercise-active .sfedu-exercise-secondary p{margin:0;color:#e8dff2;font-size:13px}
.sfedu-exercise-active .sfedu-session-progress{--sf-bg-level:1;margin:0;padding:6px;background:#4d3b7d;border-radius:14px;box-shadow:none}
.sfedu-exercise-active .sfedu-answer-orbs{margin:0}
.sfedu-exercise-active .sfedu-answer-orbs span{border:0;background:#f2eafb;color:#4d3b7d;box-shadow:inset 0 0 0 3px #4d3b7d}
.sfedu-exercise-active .sfedu-answer-orbs span.answered{background:#b78bd5;color:#2f2047;box-shadow:none}
.sfedu-exercise-active .sfedu-answer-orbs span.filled{background:#ffd873;color:#3a2c66;box-shadow:none}
.sfedu-exercise-active .sfedu-listen{margin:8px 0 0}
.sfedu-exercise-active .sfedu-listen .sfedu-btn:not(.quiet){min-height:48px;border:0;background:#66509a;box-shadow:none}
.sfedu-exercise-active .sfedu-speech-fallback{background:#3f5a8f;border:0}
.sfedu-exercise-active .sfedu-soul-bubble{background:#4d3b7d;box-shadow:none}
@media (max-width:350px){
  .sfedu.sfedu-exercise-active{padding:7px}
  .sfedu-exercise-active .sfedu-question-primary{gap:5px;padding:8px;border-radius:15px}
  .sfedu-exercise-active .sfedu-question{font-size:27px;line-height:1.14}
  .sfedu-exercise-active .sfedu-passage{font-size:13px;line-height:1.26}
  .sfedu-exercise-active .sfedu-choices{gap:5px}
  .sfedu-exercise-active .sfedu-choices .sfedu-btn{min-height:48px;padding:6px 10px;font-size:14px}
}

/* TÂCHE 28 — doctrine des menus : le portefeuille n'est visible qu'au point d'action. La
   classe `.education-shell` n'existe que pendant le cutover enfant ; le chrome adulte ne bouge pas. */
.education-shell .topbar .wallet{display:none}

/* La page matière n'a qu'un travail : offrir toutes ses leçons au premier regard. Le professeur
   devient un bandeau 3:2 recadré dans sa zone sûre centrale ; la progression qualitative reste
   dessinée sur ce bandeau, puis les leçons occupent une grille tactile compacte. */
.sfedu-subject-page{display:flex;min-height:0;flex-direction:column;padding:10px 12px 6px;text-shadow:none}
.sfedu-subject-page>h2{min-height:30px;margin:0;padding-right:74px;font-size:20px}
.sfedu-subject-page>h2+p{margin:0 0 4px;font-size:12px;line-height:1.2}
.sfedu-subject-page .sfedu-close{right:10px;top:8px;width:58px;height:44px;border-radius:14px;box-shadow:none}
.sfedu-subject-banner{position:relative;flex:none;height:clamp(72px,13dvh,112px);margin:0 0 5px;overflow:hidden;border-radius:14px;background:#4d3b7d}
.sfedu-subject-page .sfedu-subject-hero{width:100%;height:100%;margin:0;border-radius:0;object-fit:cover;object-position:center 24%}
.sfedu-subject-page .sfedu-summary{position:absolute;right:6px;bottom:5px;width:auto;margin:0;padding:3px 7px;background:#3a2c66;border-radius:10px;color:#fff8ed;box-shadow:none;font-size:9px;text-align:center}
.sfedu-subject-page .sfedu-progress-stars{gap:3px}.sfedu-subject-page .sfedu-progress-stars i{font-size:13px}
.sfedu-subject-page .sfedu-summary small{display:block;color:#fff8ed;font-size:8px}
.sfedu-subject-page .sfedu-path{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px;margin:0;padding:0}
.sfedu-subject-page .sfedu-domain-title{display:none}
.sfedu-subject-page .sfedu-skill{justify-content:center;width:100%;min-height:52px;padding:4px 3px;border-radius:12px;background:#4d3b7d;box-shadow:none;text-align:center;text-shadow:none}
.sfedu-subject-page .sfedu-skill-vignette,.sfedu-subject-page .sfedu-skill-copy small{display:none}
.sfedu-subject-page .sfedu-skill-copy{display:block;min-width:0}.sfedu-subject-page .sfedu-skill-copy b{display:block;font-size:clamp(9px,2.7vw,12px);line-height:1.08;overflow-wrap:anywhere}

/* La leçon tient en trois gestes : choisir des étoiles dessinées, voir ce qui sera gagné,
   choisir test ou entraînement. Les boutons secondaires restent des aplats opaques. */
.sfedu-skill-page{text-shadow:none}
.sfedu-skill-page>h2,.sfedu-result-page>h2{padding-right:88px}
.sfedu-skill-page .sfedu-stars .sfedu-btn{font-size:clamp(12px,4vw,18px);letter-spacing:0}
.sfedu-skill-page .sfedu-stars .sfedu-btn.quiet{background:#3f3565;color:#fff4cd;box-shadow:none}
.sfedu-skill-page .sfedu-reward-preview{display:flex;align-items:center;justify-content:center;gap:20px;margin:14px 0 7px;padding:9px;background:#4d3b7d;border-radius:16px;text-shadow:none}
.sfedu-reward-icon{font-size:27px;line-height:1}
.sfedu-skill-page .sfedu-primary-actions{margin-top:9px}
.sfedu-skill-page .sfedu-primary-actions .secondary{background:#4d3b7d;box-shadow:none}

/* Le feedback est un aplat lisible. Son retour garde sa grande cible mais le titre lui réserve
   enfin toute sa largeur, y compris avec les intitulés de leçon les plus longs. */
.sfedu-feedback-page{background:#302348;text-shadow:none}
.sfedu-feedback-page>h2{min-height:54px;padding-right:88px}
.sfedu-feedback-page .sfedu-feedback,.sfedu-feedback-page .sfedu-streak{background:#4d3b7d;text-shadow:none}

/* Le coffre porte seul la quantité gagnée : les cristaux se voient au moment de son ouverture,
   sans score ni compteur typographique. */
.sfedu-result-page{text-shadow:none}
.sfedu-result-page .sfedu-chest-crystals{position:absolute;z-index:2;left:50%;top:2%;width:100%;color:#8ceaff;font-size:clamp(19px,6vw,30px);letter-spacing:.22em;text-align:center;opacity:0;transform:translate(-50%,18px);transition:opacity .3s ease,transform .3s ease;filter:drop-shadow(0 0 8px #8ceaff)}
.sfedu-result-page .sfedu-chest-moment.is-open .sfedu-chest-crystals{opacity:1;transform:translate(-50%,0)}
.sfedu-result-page .sfedu-result-score .sfedu-answer-orbs{margin:0}
@media (prefers-reduced-motion:reduce){.sfedu-result-page .sfedu-chest-crystals{transition:none}}
@media (max-width:350px){
  .sfedu-subject-page{padding:5px 6px 3px}
  .sfedu-subject-page>h2{min-height:25px;font-size:17px}.sfedu-subject-page>h2+p{font-size:10px}
  .sfedu-subject-page .sfedu-close{right:5px;top:4px;width:50px;height:44px;min-height:44px}
  .sfedu-subject-banner{height:62px;margin-bottom:3px}
  .sfedu-subject-page .sfedu-path{gap:3px}
  .sfedu-subject-page .sfedu-skill{min-height:46px;padding:2px}
  .sfedu-subject-page .sfedu-skill-copy b{font-size:8.5px}
  .sfedu-skill-page{padding:7px 8px}
  .sfedu-skill-page>h2{min-height:44px;margin:0;padding-right:62px;font-size:18px;line-height:1.12}
  .sfedu-skill-page>h2+p{display:none}
  .sfedu-skill-page .sfedu-close{right:7px;top:7px;width:52px;height:44px;min-height:44px;border-radius:14px;box-shadow:none}
  .sfedu-skill-page .sfedu-stats{margin:4px 0}.sfedu-skill-page .sfedu-stat{padding:4px}
  .sfedu-skill-page .sfedu-stat strong{font-size:16px}.sfedu-skill-page .sfedu-energy-gauge{margin:4px 5px 2px!important}
  .sfedu-skill-page .sfedu-step-label{margin:7px 0 4px;font-size:12px}
  .sfedu-skill-page .sfedu-stars{gap:3px}.sfedu-skill-page .sfedu-stars .sfedu-btn{min-height:46px;padding:5px 1px;border-radius:12px}
  .sfedu-skill-page .sfedu-reward-preview{gap:18px;margin:7px 0 4px;padding:6px}.sfedu-skill-page .sfedu-reward-icon{font-size:23px}
  .sfedu-skill-page .sfedu-primary-actions{gap:5px;margin-top:5px}.sfedu-skill-page .sfedu-primary-actions .sfedu-btn{min-height:48px;padding:7px 10px;font-size:14px}
}

/* Lecture pédagogique partagée Académie / duel. */
.sf-speech-controls{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:8px 0}
.sfedu .sf-speech-controls button,.sf-speech-controls button{width:auto;min-height:44px;flex:1 1 auto;padding:8px 10px;font-size:13px;border-radius:12px}
.sf-speech-controls [hidden]{display:none!important}
.sf-speech-status{flex-basis:100%;font-size:12px;text-align:center}
.sf-speech-status:empty{display:none}
.sf-speaking{outline:3px solid #ffe18b!important;outline-offset:2px}

.sfintro-audio{position:absolute;z-index:12;top:64px;left:12px;display:flex;flex-wrap:wrap;gap:6px;max-width:calc(100% - 24px)}
.sfintro-audio button{min-height:44px;padding:8px 10px;border-radius:12px;background:#26324c;color:#fff;border:1px solid #75849d;font:inherit;font-size:12px}
