:root{--bg:#f4f6fb;--card:#fff;--text:#172033;--muted:#667085;--line:#e6e9f0;--accent:#5b5bd6;--accent-dark:#4646b8;--accent-soft:#eeeefe;--cyan:#16a6b6;--ok:#16834c;--bad:#c53b43;--shadow:0 14px 40px rgba(26,32,60,.08)}
*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 10% 0%,#eef0ff 0,transparent 32%),var(--bg);color:var(--text);font:16px/1.5 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}.topbar{height:72px;background:rgba(255,255,255,.94);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 30px;position:sticky;top:0;z-index:10}.brand{display:flex;align-items:center;gap:12px}.brand strong{letter-spacing:.4px}.brand small{display:block;color:var(--muted);font-size:12px}.logo{width:40px;height:40px;border-radius:13px;background:linear-gradient(135deg,#6969e8,#4747b9);color:#fff;display:grid;place-items:center;font-weight:900;box-shadow:0 8px 18px rgba(82,82,200,.25)}.top-actions{display:flex;gap:12px;align-items:center}.container{max-width:1120px;margin:auto;padding:28px 20px 60px}.hero{display:grid;grid-template-columns:1.35fr .65fr;gap:18px;margin-bottom:18px}.card{background:var(--card);border:1px solid var(--line);border-radius:22px;padding:24px;box-shadow:var(--shadow)}.hero-main{min-height:250px;background:linear-gradient(135deg,#fff 0%,#f8f8ff 100%);position:relative;overflow:hidden}.hero-main:after{content:"";position:absolute;width:220px;height:220px;border-radius:50%;right:-80px;top:-80px;background:#e9e9ff}.eyebrow{font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}h1{font-size:36px;line-height:1.08;margin:10px 0}h2{font-size:22px;line-height:1.2;margin:0 0 8px}h3{margin:0 0 5px}.muted{color:var(--muted)}.small{font-size:13px}.btn{border:0;border-radius:12px;padding:12px 18px;font-weight:750;cursor:pointer;background:var(--accent);color:#fff;transition:.15s transform,.15s background}.btn:hover{background:var(--accent-dark);transform:translateY(-1px)}.btn.secondary{background:#eef0f5;color:var(--text)}.btn.secondary:hover{background:#e4e7ef}.ghost{background:transparent;border:1px solid var(--line);padding:8px 12px;border-radius:10px;cursor:pointer}.choice-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:22px}.choice-row .btn{min-width:180px}.stat{font-size:40px;font-weight:900;margin-top:8px}.progress{height:9px;background:#edf0f4;border-radius:20px;overflow:hidden}.progress>span{display:block;height:100%;background:linear-gradient(90deg,var(--accent),#8b8be9);border-radius:20px}.section-head{display:flex;justify-content:space-between;align-items:end;margin:26px 0 12px}.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.subject{min-height:185px;position:relative;overflow:hidden}.subject:after{content:"";position:absolute;right:-35px;bottom:-60px;width:150px;height:150px;border-radius:50%;background:var(--accent-soft)}.subject .icon{font-size:34px;margin-bottom:10px}.subject p{max-width:470px}.path{display:grid;gap:10px}.path-card{display:grid;grid-template-columns:42px 1fr auto;gap:14px;align-items:center;padding:15px 16px;border:1px solid var(--line);border-radius:15px;background:#fff}.path-num{width:34px;height:34px;border-radius:50%;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;font-weight:900}.skill-meta{font-size:12px;color:var(--muted)}.skill-pct{font-weight:850}.tag{display:inline-flex;padding:5px 9px;border-radius:999px;background:var(--accent-soft);color:#4b4bb8;font-size:12px;font-weight:750}.skill-row{margin:14px 0}.skill-head{display:flex;justify-content:space-between;margin-bottom:6px}.question-card{max-width:820px;margin:20px auto}.question{font-size:25px;font-weight:750;margin:24px 0}.answers{display:grid;gap:10px}.answer{padding:15px 16px;border:2px solid var(--line);background:#fff;border-radius:13px;text-align:left;cursor:pointer;font-size:16px}.answer:hover{border-color:#aaaaf0}.answer.selected{border-color:var(--accent);background:var(--accent-soft)}.feedback{margin:18px 0;padding:16px;border-radius:14px;background:#f7f8fb}.status-ok{color:var(--ok)}.status-bad{color:var(--bad)}.nav{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}.notice{border-left:4px solid var(--accent);background:#f5f5ff;padding:13px 16px;border-radius:8px}.empty{padding:30px;text-align:center;color:var(--muted)}footer{text-align:center;color:var(--muted);padding:25px;font-size:12px}@media(max-width:760px){.hero,.grid{grid-template-columns:1fr}.topbar{padding:0 14px}.top-actions span{display:none}.container{padding:20px 14px}.hero-main h1{font-size:30px}.path-card{grid-template-columns:38px 1fr}.path-card .btn{grid-column:2;justify-self:start}}

.level-switch{display:flex;gap:6px;align-items:center;margin:16px 0}.level-btn{border:1px solid var(--line);background:#fff;color:var(--text);padding:7px 12px;border-radius:10px;font-weight:800;cursor:pointer}.level-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)}.diagnostic-info{margin-top:18px;padding:12px 14px;background:#f6f6ff;border:1px solid #e4e4ff;border-radius:12px;display:flex;gap:10px;flex-wrap:wrap;align-items:center}.diagnostic-info span{color:var(--muted);font-size:13px}.diag-top{display:flex;justify-content:space-between;gap:16px;align-items:start;margin-bottom:12px}.timer{min-width:155px;text-align:right;background:#f7f8fb;border:1px solid var(--line);padding:9px 12px;border-radius:12px}.timer strong{font-size:18px;margin-left:5px}.timer small{display:block;color:var(--muted);font-size:11px;margin-top:2px}.last-diagnostic{display:grid;gap:5px;margin-top:18px;padding:13px;background:#f7f8fb;border-radius:12px}.last-diagnostic strong{font-size:24px}.last-diagnostic span:last-child{font-size:12px;color:var(--muted)}@media(max-width:600px){.diag-top{align-items:stretch}.timer{min-width:125px}.timer small{display:none}}

/* V0.4 — parcours pédagogique */
.path-full{display:grid;gap:18px;margin-bottom:36px}.unit{background:var(--card,#fff);border:1px solid var(--line,#e8eaf0);border-radius:20px;padding:20px;box-shadow:0 8px 28px rgba(20,30,55,.06)}.unit.focus{outline:3px solid rgba(92,99,255,.18)}.unit-top{display:grid;grid-template-columns:42px 1fr auto;gap:14px;align-items:start}.unit-title h2{margin:7px 0 5px}.unit-title p{margin:0}.unit-score{display:flex;flex-direction:column;align-items:flex-end}.unit-score strong{font-size:24px}.unit-score span{font-size:12px;color:var(--muted,#707788)}.lessons{display:grid;gap:8px;margin-top:16px}.lesson-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:13px 14px;border-radius:14px;background:#f7f8fb}.lesson-row>div{display:flex;flex-direction:column;gap:3px}.lesson-row span{font-size:12px;color:var(--muted,#707788)}.unit-actions{display:flex;justify-content:space-between;align-items:center;margin-top:14px}.lesson-card{max-width:900px;margin:20px auto}.lesson-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start}.lesson-head h1{margin:12px 0 4px}.lesson-count{font-weight:700;padding:9px 12px;border-radius:999px;background:#f0f2ff}.lesson-body{display:grid;grid-template-columns:1.7fr .8fr;gap:20px;margin-top:20px}.lesson-explain,.lesson-objective{border-radius:16px;padding:20px;background:#f8f9fc}.lesson-explain h2{margin-top:0}.example,.tip{margin-top:16px;padding:14px;border-radius:12px;background:#fff;border:1px solid var(--line,#e8eaf0)}.example p,.tip p{margin-bottom:0}.path-actions{display:flex;gap:8px;align-items:center}.section-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-end}.section-head h1{margin:7px 0}.eyebrow{font-size:12px;text-transform:uppercase;letter-spacing:.08em;font-weight:700}.unit .progress{margin-top:13px}@media(max-width:760px){.unit-top{grid-template-columns:38px 1fr}.unit-score{grid-column:2;align-items:flex-start}.lesson-body{grid-template-columns:1fr}.lesson-row,.unit-actions,.section-head{align-items:flex-start;flex-direction:column}.path-actions{width:100%;flex-wrap:wrap}.path-actions .btn{flex:1}.lesson-head{flex-direction:column}.lesson-count{align-self:flex-start}}


/* V0.7 — suivi, maîtrise et révisions */
.quick-tools{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px;position:relative;z-index:2}.dashboard-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:16px 0}
/* V2.45 — les cartes "Compte"/"Révisions ciblées"/"Rejoindre une classe" ont
   un contenu de hauteur différente au-dessus ET en dessous du bouton principal
   ("Enregistrer mon niveau"/"Ouvrir"/"Rejoindre") : sans un pied de carte de
   hauteur fixe (populé ou vide) et le bouton poussé juste au-dessus de lui,
   ces boutons ne sont jamais à la même hauteur d'une carte à l'autre — captures
   d'écran à l'appui, la première tentative (margin-top:auto sur .level-edit,
   sans pied de carte uniforme) ne suffisait pas. */
.dashboard-grid>.card{display:flex;flex-direction:column}
.dashboard-grid>.card>.btn.full{margin-top:auto}
.dashboard-grid>.card>.card-foot-note{min-height:46px}.dash-stat{display:grid;gap:7px}.dash-stat strong{font-size:34px}.dashboard-grid-main{display:grid;grid-template-columns:1.35fr .65fr;gap:16px}.section-head.compact{margin:0 0 12px}.dash-skill{display:grid;grid-template-columns:1fr auto;gap:14px;align-items:center;padding:13px 0;border-top:1px solid var(--line)}.dash-skill>div:first-child{display:grid;gap:3px}.dash-skill-actions{display:flex;align-items:center;gap:7px}.dash-skill-actions .progress{width:120px}.review-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 0;border-bottom:1px solid var(--line)}.review-item>div{display:grid;gap:2px}.badges{display:grid;gap:8px}.badge{display:flex;gap:9px;align-items:flex-start;padding:9px;border:1px solid var(--line);border-radius:11px;opacity:.45}.badge.earned{opacity:1;background:#f7f7ff;border-color:#dfe0ff}.badge>span{font-weight:900}.badge div{display:grid}.badge small{color:var(--muted);font-size:11px}.prereq-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:15px}.prereq-card{display:grid;gap:9px}.prereq-title{display:flex;justify-content:space-between;gap:10px}.prereq-title h2{margin:7px 0 0}.prereq-title>strong{font-size:24px}.ok-pill{display:inline-flex;width:max-content;padding:6px 9px;border-radius:999px;background:#eef9f3;color:var(--ok);font-size:12px;font-weight:800}.mastery-result{margin:20px 0;padding:18px;border-radius:15px;border:1px solid var(--line)}.mastery-result.passed{background:#eef9f3;border-color:#cbeedc}.mastery-result.retry{background:#fff8ed;border-color:#f0dfbd}.result-ring{width:100px;height:100px;border-radius:50%;display:grid;place-items:center;align-content:center;background:#f1f1ff;margin:20px auto}.result-ring strong{font-size:25px}.result-ring span{font-size:11px;color:var(--muted)}
@media(max-width:820px){.dashboard-grid,.dashboard-grid-main,.prereq-grid{grid-template-columns:1fr}.dash-skill{grid-template-columns:1fr}.dash-skill-actions{flex-wrap:wrap}.dash-skill-actions .progress{width:100%}}
.difficulty-pill{display:inline-block;margin-left:8px;padding:4px 8px;border-radius:999px;background:rgba(99,102,241,.10);font-size:.75rem;font-weight:700}
.prereq-pill{display:inline-block;margin-left:8px;padding:4px 8px;border-radius:999px;background:#e8f8ef;color:#16834c;font-size:.75rem;font-weight:700}
.prereq-summary{border-left-color:#20a36a;background:#eefbf3}

/* V2.37 — révélation puis masquage de la suite à mémoriser */
.memory-reveal{text-align:center;padding:24px 0}
.memory-sequence{display:flex;justify-content:center;gap:12px;margin:20px 0;flex-wrap:wrap}
.memory-chip{display:inline-flex;align-items:center;justify-content:center;min-width:52px;height:52px;padding:0 10px;border-radius:14px;background:#17324d;color:#fff;font-size:1.6rem;font-weight:800;box-shadow:0 8px 20px rgba(23,50,77,.18)}
.memory-timer-bar{height:6px;max-width:320px;margin:14px auto;border-radius:6px;background:#e5ebf2;overflow:hidden}
.memory-timer-bar i{display:block;height:100%;width:100%;background:#2f6fed;transform-origin:left;animation-name:eduMemoryCountdown;animation-timing-function:linear;animation-fill-mode:forwards}
@keyframes eduMemoryCountdown{from{transform:scaleX(1)}to{transform:scaleX(0)}}
/* V2.94 — matériel à observer d'un item du profil cognitif, sorti de l'énoncé
   pour n'être jamais lu à voix haute. Teinte claire, volontairement différente
   des pastilles sombres de la suite à mémoriser : ici, rien n'est à retenir. */
.cognitive-stimulus{display:flex;justify-content:center;align-items:center;gap:10px;margin:6px 0 18px;flex-wrap:wrap}
.cognitive-chip{display:inline-flex;align-items:center;justify-content:center;min-width:46px;height:46px;padding:0 12px;border-radius:12px;background:#edf3ff;color:#17324d;border:1px solid #c9d8f2;font-size:1.4rem;font-weight:800;white-space:nowrap}
@media(prefers-reduced-motion:reduce){.memory-timer-bar i{animation:none;width:0}}
.correction-box{margin-top:12px;padding:12px 14px;border-left:3px solid currentColor;background:rgba(127,127,127,.08);border-radius:8px}
.correction-box p{margin:5px 0 0}
/* V0.9 — remédiation */
.error-list{display:grid;gap:10px}.error-row{display:flex;justify-content:space-between;gap:16px;align-items:center;padding:14px;border:1px solid var(--border,#ddd);border-radius:14px}.error-row .path-actions{display:flex;gap:8px}@media(max-width:700px){.error-row{flex-direction:column;align-items:flex-start}.error-row .path-actions{width:100%}}
.micro-card{max-width:820px;margin:28px auto}.micro-block{background:var(--surface,#f7f8fb);border-radius:14px;padding:18px;margin:18px 0}.micro-block h2{margin-top:0}.correction-box .btn{margin-top:10px}

.remediation-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.remediation-card{display:flex;flex-direction:column;gap:10px}.remediation-card .btn{align-self:flex-start}.mini-example{padding:14px;border-radius:14px;background:var(--panel-2,#f5f7fa);border:1px solid var(--border,#dde3ea)}.mini-example p{margin:6px 0 0}.notice strong{font-weight:750}@media(max-width:760px){.remediation-grid{grid-template-columns:1fr}}

/* ========================= V1.0 UI ========================= */
.role-nav{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.role-btn{border:1px solid rgba(23,50,77,.12);background:#fff;border-radius:12px;padding:9px 11px;font-weight:700;cursor:pointer;color:#32465a}.role-btn.active{background:#17324d;color:#fff}.header-context{display:flex;align-items:center;gap:8px}.mini-select{border:1px solid rgba(23,50,77,.14);border-radius:10px;padding:7px 9px;background:#fff;max-width:180px}.role-hero{display:flex;justify-content:space-between;gap:24px;align-items:flex-end;margin:18px 0 22px}.role-hero h1{margin:.2rem 0 .45rem}.nav-inline{display:flex;gap:8px;flex-wrap:wrap}.subject-grid-v1{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.subject-v1{display:flex;gap:18px;align-items:flex-start}.subject-icon{font-size:2rem;line-height:1}.subject-v1 h2{margin:.05rem 0 .25rem}.subject-v1 .btn{margin-top:13px}.micro-note{font-size:.78rem;color:#667688;margin:.55rem 0 0}.grid.skill-grid-v1{grid-template-columns:repeat(3,minmax(0,1fr))}.skill-card{background:#fff;border:1px solid rgba(23,50,77,.1);border-radius:16px;padding:17px;display:flex;flex-direction:column}.skill-card-top{display:flex;justify-content:space-between;align-items:center;gap:10px}.skill-card h3{margin:.65rem 0 .2rem}.skill-card .path-actions{margin-top:auto;padding-top:12px}.curriculum-group{margin:24px 0}.curriculum-group-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-end;margin-bottom:12px}.curriculum-group-head h2{margin:0}.curriculum-group .path-full{display:block}.curriculum-group .unit{margin-bottom:12px}.diagnostic-summary{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:10px;margin:20px 0}.diagnostic-summary article{border:1px solid rgba(23,50,77,.1);border-radius:14px;padding:12px;display:grid;grid-template-columns:auto 1fr;column-gap:9px;align-items:center}.diagnostic-summary article span{grid-row:1/3;font-size:1.5rem}.diagnostic-summary article strong{font-size:1.2rem}.diagnostic-summary article small{color:#667688}.question-context{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:11px 0}.assignment-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.assignment-card h3{margin:.6rem 0 .3rem}.parent-child-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.profile-row{display:flex;align-items:center;gap:12px}.avatar{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:#edf3f7;color:#17324d;font-weight:800}.parent-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:18px 0}.parent-stats div{background:#f6f8fa;border-radius:12px;padding:11px;text-align:center}.parent-stats strong,.parent-stats span{display:block}.parent-stats span{font-size:.76rem;color:#667688;margin-top:2px}.mini-list>div,.subject-line,.history-row,.need-group,.assignment-line{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid rgba(23,50,77,.08)}.mini-list>div:last-child,.subject-line:last-child,.history-row:last-child,.need-group:last-child,.assignment-line:last-child{border-bottom:0}.parent-detail-grid,.teacher-profile-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}.subject-line{display:grid;grid-template-columns:1fr auto;align-items:center}.subject-line .progress{grid-column:1/-1}.teacher-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:16px}.teacher-kpis .card{display:flex;flex-direction:column;gap:4px}.teacher-kpis strong{font-size:1.8rem}.teacher-grid{display:grid;grid-template-columns:1.7fr 1fr;gap:16px}.teacher-student{padding:14px 0;border-bottom:1px solid rgba(23,50,77,.08)}.teacher-student:last-child{border-bottom:0}.teacher-level{margin-left:auto;font-size:.76rem;font-weight:800;padding:5px 8px;border-radius:999px;background:#f3f6f8}.weak-inline{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}.weak-inline span{font-size:.76rem;background:#f6f8fa;border-radius:999px;padding:5px 8px}.need-group{font-weight:650}.role-hero+*{margin-top:0}.subject-progress-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.subject-progress-card>div:first-child{display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center}.subject-progress-card h3{margin:0;font-size:1rem}.subject-progress-card .subject-icon{font-size:1.35rem}.subject-progress-card .btn{margin-top:10px}.v1-hero .hero-score{min-width:270px}@media(max-width:1100px){.grid.skill-grid-v1{grid-template-columns:repeat(2,minmax(0,1fr))}.subject-progress-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.teacher-grid{grid-template-columns:1fr}.assignment-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:780px){.role-nav{order:3;width:100%;justify-content:center}.header-context{display:none}.subject-grid-v1,.parent-child-grid,.parent-detail-grid,.teacher-profile-grid{grid-template-columns:1fr}.grid.skill-grid-v1{grid-template-columns:1fr}.subject-progress-grid,.teacher-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.assignment-grid{grid-template-columns:1fr}.role-hero,.curriculum-group-head{align-items:flex-start;flex-direction:column}.role-hero{gap:12px}.topbar{flex-wrap:wrap}.top-actions{margin-left:auto}.lesson-body{grid-template-columns:1fr!important}}

/* V1.1 — interactions et ressources visuelles */
.home-btn{background:#17324d!important;color:#fff!important;border-color:#17324d!important;font-weight:800;box-shadow:0 4px 12px rgba(23,50,77,.16)}
.answer:disabled,.num-tile:disabled,.drop-slot:disabled,.digit-slot:disabled{cursor:not-allowed;opacity:.72}
.interactive-card{margin:18px 0;padding:18px;border:1px solid #d9dfea;border-radius:18px;background:linear-gradient(180deg,#fbfcff,#f7f9fc)}
.interactive-head{display:flex;justify-content:space-between;gap:12px;align-items:baseline;margin-bottom:14px}.interactive-head span{font-size:.82rem;color:#667688}.fraction-builder{display:grid;gap:14px}.frac-slots{display:grid;grid-template-columns:150px;justify-items:center;gap:8px;margin:0 auto}.drop-slot{width:150px;min-height:58px;border:2px dashed #8f99aa;background:#fff;border-radius:14px;font-size:1.25rem;font-weight:800;cursor:pointer}.drop-slot.filled{border-style:solid;border-color:#17324d;background:#eef4f8}.frac-bar{width:150px;height:4px;background:#17324d;border-radius:999px}.tile-bank{display:flex;gap:9px;flex-wrap:wrap;justify-content:center}.num-tile{width:46px;height:46px;border:1px solid #cfd6df;background:#fff;border-radius:12px;font-size:1.1rem;font-weight:800;cursor:grab;box-shadow:0 3px 9px rgba(20,30,55,.06)}.interactive-help{font-size:.78rem;color:#667688;text-align:center}.operation-board{width:min(290px,100%);margin:0 auto 16px;padding:16px 20px;border-radius:16px;background:#fff;border:1px solid #dfe4eb;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:1.45rem}.operation-line-top{padding-right:22px;text-align:right}.operation-line-bottom{text-align:right}.operation-rule{height:3px;background:#17324d;border-radius:999px;margin:8px 0}.operation-result{display:flex;justify-content:flex-end;gap:6px}.digit-slot{width:48px;height:52px;border:2px dashed #8f99aa;background:#fff;border-radius:10px;font:inherit;font-weight:800;cursor:pointer}
/* V2.76 — TROISIÈME DÉFAUT, trouvé par le même contrôle, préexistant à ce lot
   (jamais exercé avant que « priorités opératoires » — V2.74 — introduise un
   calcul posé dont le haut n'est pas un nombre pur) : la règle groupée plus
   bas passe TOUTE compétence nommée « .operation-result » en `display:grid`,
   y compris le repli simple ci-dessus, qui ne fournit aucun
   `grid-template-columns` (seule la version « avec retenues » le fait, par
   style inline). Sans colonne définie, une grille place ses enfants un par
   ligne : les deux cases de résultat de « 19 + 4 × 6 » s'empilaient donc
   verticalement au lieu de se tenir côte à côte. Le repli simple n'est jamais
   dans `.operation-board-posed` (seul le calcul AVEC retenues l'est) : ce
   sélecteur lui rend son `display:flex` sans toucher à l'autre cas. */
.operation-board:not(.operation-board-posed) .operation-result{display:flex;justify-content:flex-end}
/* V2.48 — calcul posé complet (retenue/emprunt en plus du résultat). Chaque
   ligne (retenue/haut/bas/résultat) partage la même colonne de signe pour que
   les grilles de chiffres restent alignées entre elles, quelle que soit la
   présence d'un signe sur cette ligne. */
.operation-board-posed{width:min(360px,100%)}
.op-row{display:flex;align-items:center;gap:4px}
.op-row-sign{flex:none;width:1.1em;text-align:center;font-weight:800}
.operation-line-carry,.operation-line-top,.operation-line-bottom,.operation-result{flex:1;display:grid;gap:6px;align-items:center;justify-content:center}
/* V2.76 — SIGNALÉ PAR L'UTILISATEUR : trois défauts dans le même écran.
   1. `.operation-line-top` porte depuis V2.48 un `padding-right:22px` et un
      `text-align:right` pensés pour l'AUTRE rendu de ce même nom — le repli
      simple sans retenue (app.js, branche `!expected`), un texte brut dans
      une ligne, pas une grille de colonnes. Dans le calcul posé AVEC
      retenues, ces deux propriétés s'appliquaient aussi, par simple partage
      de nom de classe, et retiraient 22px à la largeur disponible — SEULE la
      ligne du nombre du haut, donc ses colonnes (et leur séparateur
      pointillé) ne tombaient plus sous celles des quatre autres lignes.
   2. Les colonnes `minmax(32px,1fr)` s'étiraient sur toute la largeur du
      cadre (288px mesurés pour deux colonnes) : l'écart entre deux chiffres
      d'un même nombre devenait énorme. Un chiffre n'a besoin que d'une
      cinquantaine de pixels ; `minmax(32px,56px)` les resserre, et
      `justify-content:center` centre le bloc (désormais plus étroit que les
      288px disponibles) dans chaque ligne — toutes les lignes centrent le
      MÊME total de colonnes, donc elles restent alignées entre elles.
   3. `.digit-slot` (case de résultat) n'avait pas `justify-self:center` —
      seule `.carry-slot` (case de retenue) l'avait. Dans une colonne plus
      large que la case elle-même, une case sans ce réglage se cale par
      défaut à GAUCHE de sa colonne au lieu du centre, désalignée du chiffre
      qu'elle doit recevoir (ajouté ci-dessus, à côté de `.digit-slot`). */
.operation-board-posed .operation-line-top{padding-right:0;text-align:initial}
/* V2.77 — SIGNALÉ PAR L'UTILISATEUR : la ligne pointillée de la ligne de
   retenue (2e ligne en partant du haut) retombait 14px trop à droite.
   Cause : `.carry-slot`/`.digit-slot`/`.carry-slot-spacer` sont des cases à
   taille FIXE (28/48/28px) centrées par `justify-self:center` dans une
   colonne plus large (jusqu'à 56px) — le séparateur `border-left` du V2.50
   est posé sur la case elle-même, donc son bord gauche (où tombe le trait)
   suit la largeur de la case, pas celle de la colonne. `.op-digit`/
   `.op-place-label`, eux, n'ont AUCUNE largeur fixe : ils s'étirent sur
   toute la colonne, et leur bord gauche EST le vrai bord de colonne — d'où
   l'écart, invisible tant qu'aucune case à taille fixe n'était en 2e
   position ou plus. Fix : chaque case à taille fixe est désormais nichée
   dans une cellule `.op-slot-cell` qui, elle, s'étire sur toute la colonne
   (même recette que `.op-digit`) et centre la case par `place-items`, pas
   par `justify-self` — le séparateur, posé sur la cellule, retombe donc
   toujours au même endroit que sur les quatre autres lignes. */
.op-digit,.op-digit-blank,.op-slot-cell,.carry-slot-spacer{display:grid;place-items:center;height:1.3em}
.op-row-carry{min-height:34px;margin-bottom:2px}
.carry-slot{width:28px;height:28px;border:2px dashed #d7b25c;background:#fffaf0;border-radius:8px;font-size:.85rem;font-weight:800;color:#8a5a00;cursor:pointer}
.carry-slot.filled{border-style:solid;border-color:#e7a900}
/* V2.49 — multiplication posée multi-lignes : un produit partiel par chiffre
   du multiplicateur (décalé), un choix de signe pour les combiner, puis
   l'addition finale avec ses propres retenues. */
.operation-board-multi{margin-bottom:10px}
.partial-product-step{margin-top:10px}
.partial-step-label{margin:0 0 4px}
.digit-slot-small{width:38px;height:44px;font-size:.95rem}
.operation-partial-row{margin-top:2px}
.sign-choice-step{margin:14px 0 10px;text-align:center}
.sign-choice-row{display:flex;gap:8px;justify-content:center;margin-top:6px}
.sign-choice{width:44px;height:44px;border:2px solid #cfd6df;background:#fff;border-radius:10px;font-size:1.1rem;font-weight:800;cursor:pointer}
.sign-choice.chosen{border-color:#17324d;background:#17324d;color:#fff}
/* V2.50 — repères de position (u/d/c/m…) et séparateurs entre colonnes,
   comme sur une fiche « addition posée » de classe.
   V2.75 — SIGNALÉ PAR L'UTILISATEUR, capture d'écran à l'appui : les
   étiquettes « D »/« U » se tassaient à gauche, loin au-dessus des chiffres
   qu'elles nomment. `.op-row` est flex ; cette ligne-ci est la SEULE des
   cinq (retenue, haut, bas, résultat, et cette ligne) à ne pas porter
   `flex:1` — sans lui, un enfant flex se réduit à la largeur de son contenu
   (deux lettres), mesuré à 70px, pendant que les quatre autres lignes
   s'étirent sur toute la largeur disponible (288px). Les deux grilles
   partageaient pourtant le même `grid-template-columns` : seule leur
   LARGEUR TOTALE différait, ce qui déplaçait chaque colonne d'étiquette
   loin de sa colonne de chiffres. */
.operation-place-row{flex:1;display:grid;gap:6px;margin-bottom:2px;justify-content:center}
.op-place-label{text-align:center;font-weight:800;color:#b23c3c;font-size:.72rem;text-transform:uppercase}
.operation-place-row>*:not(:first-child),.operation-line-carry>*:not(:first-child),.operation-line-top>*:not(:first-child),.operation-line-bottom>*:not(:first-child),.operation-result>*:not(:first-child){border-left:1px dashed #ccd3dc;padding-left:4px}
/* V2.50 — division posée, une étape (abaisser/quotient/reste) par ligne. */
.division-board{width:min(420px,100%);text-align:left}
.division-problem{font-weight:800;font-size:1.1rem;color:#17324d;margin:0 0 8px}
.division-step{border-top:1px dashed #dfe4eb;padding-top:8px;margin-top:8px}
.division-step:first-child{border-top:0;margin-top:0}
.division-step-label{margin:0 0 6px}
.division-step-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.division-field-label{font-size:.76rem;color:#667688;font-weight:700;margin-left:8px}
.division-field-label:first-child{margin-left:0}
/* V2.51 — Fact Drill : moteur générique de mémorisation par répétition
   (tables de multiplication en premier, réutilisable pour d'autres
   compétences par la suite). */
.fact-drill-card{max-width:520px;margin:20px auto;text-align:center}
.fact-drill-head{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:18px;text-align:left}
.fact-drill-prompt-big{font-size:2.4rem;font-weight:900;margin:18px 0;color:#17324d}
.fact-drill-reveal .memory-timer-bar{max-width:280px;margin:14px auto}
.fact-drill-choices{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;max-width:360px;margin:0 auto}
.fact-drill-choice{padding:16px;border:2px solid var(--line);background:#fff;border-radius:14px;font-size:1.3rem;font-weight:800;cursor:pointer}
.fact-drill-choice:hover{border-color:#8f99aa}
.fact-drill-input-row{display:flex;gap:10px;justify-content:center;align-items:center;margin-top:10px}
.fact-drill-input{width:110px;padding:14px;font-size:1.4rem;text-align:center;border:2px solid var(--line);border-radius:12px}
.fact-drill-cta{text-align:left}
.fact-drill-picker{max-width:640px}
.fact-drill-family-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px;margin:16px 0}
.fact-drill-family-card{display:flex;flex-direction:column;gap:6px;padding:14px;border:2px solid var(--line);background:#fff;border-radius:14px;cursor:pointer;text-align:left}
.fact-drill-family-card:hover{border-color:#8f99aa}
.fact-drill-family-card strong{font-size:1.15rem;color:#17324d}
.fact-drill-family-card span{font-size:.8rem;color:#667688;font-weight:700}
.fact-drill-family-card.mastered{border-color:#3f9d5f;background:#f2fbf5}
.fact-drill-family-card.mastered span{color:#2f7e49}
.fact-drill-recommended{align-self:flex-start;padding:3px 8px;border-radius:999px;background:#fff3e0;color:#a85d00;font-size:.7rem;font-weight:800}
.btn.full{display:block;width:100%;margin-top:6px}
@media(max-width:480px){.fact-drill-choices{grid-template-columns:1fr}.fact-drill-prompt-big{font-size:1.9rem}.fact-drill-family-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr))}}.digit-slot.filled{border-style:solid;border-color:#17324d;background:#eef4f8}.visual-card{margin:16px 0;padding:14px;border-radius:16px;background:#fff;border:1px solid #dfe4eb}.visual-card figcaption{font-size:.82rem;font-weight:800;color:#40536a;margin-bottom:10px}.edu-svg{width:100%;display:block;min-height:120px}.fraction-cell{fill:#eef1f5;stroke:#96a0ad;stroke-width:2}.fraction-cell.filled{fill:#8fb3c9}.svg-label{font-size:12px;fill:#667688}.svg-big{font-size:22px;font-weight:800;fill:#17324d}.op-visual{width:180px;margin:auto;font:700 1.45rem ui-monospace,SFMono-Regular,Menlo,monospace;text-align:right}.op-visual>div{padding:3px 0}.op-line{height:3px;background:#17324d}.op-result{font-size:1.65rem}.timeline-visual{display:grid;gap:8px}.timeline-item{display:grid;grid-template-columns:30px 120px 1fr;gap:10px;align-items:center}.timeline-item>span{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:#17324d;color:#fff;font-weight:800}.timeline-item strong{font-size:.86rem}.timeline-item p{margin:0;font-size:.8rem;color:#667688}.map-svg{min-height:190px}.land-shape{fill:#d9e2e8;stroke:#90a0ad;stroke-width:2}.land-light{fill:#e3e8ec;stroke:#a0abb4;stroke-width:2}.land-dark{fill:#cbd7df;stroke:#8f9ca8;stroke-width:2}.sea{fill:#edf5f8}.map-dot,.pop-hot{fill:#17324d}.map-label{font-size:12px;font-weight:800;fill:#4b5d70}.map-caption{font-size:12px;fill:#526577}.pop-hot{stroke:#fff;stroke-width:3}.city-bg{fill:#f0f4f6;stroke:#c4ced7}.city-center{fill:#cbd9e2}.city-quartier{fill:#dde5ea}.road{stroke:#7f91a1;stroke-width:7;opacity:.8}.visual-pill{display:inline-block;margin-left:7px;padding:4px 8px;border-radius:999px;background:#eef4f8;color:#36566d;font-size:.75rem;font-weight:800}@media(max-width:640px){.interactive-head{flex-direction:column}.operation-board{font-size:1.15rem}.timeline-item{grid-template-columns:28px 1fr}.timeline-item p{grid-column:2}.drop-slot{width:132px}.frac-slots,.frac-bar{width:132px}}

.fraction-preview{margin:12px auto;padding:10px 12px;border-radius:12px;background:#fff;border:1px solid #e1e6ed;max-width:430px}.fraction-preview.empty{font-size:.82rem;color:#667688;text-align:center}.fraction-preview .small{margin-bottom:3px}
.diagram-row{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;align-items:center;margin:12px 0}.diagram-row span{padding:10px 14px;border:1px solid #cfd7df;border-radius:12px;background:#f7f9fb;font-weight:800}.diagram-row span:nth-child(odd){background:#eef4f8}

/* V1.3 — feedback pédagogique détaillé */
.feedback{border:1px solid var(--line);padding:18px;margin:20px 0;background:#fafbfe}.feedback-title{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;font-size:18px}.feedback-level{font-size:11px;padding:4px 8px;border-radius:999px;background:#eef0f6;color:var(--muted);font-weight:800}.feedback-step{display:grid;grid-template-columns:30px 1fr;gap:10px;padding:11px 0;border-top:1px solid rgba(0,0,0,.07)}.feedback-step:first-of-type{border-top:0}.feedback-step>span{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent);font-weight:900}.feedback-step strong{display:block;margin-bottom:3px}.feedback-step p{margin:0}.feedback-reflection{margin-top:12px;padding:12px 14px;border-radius:12px;background:#f1f4fa}.feedback-reflection p{margin:4px 0 0}.feedback-next{margin-top:14px;padding-top:14px;border-top:1px dashed var(--line)}.feedback-next p{margin:4px 0 10px}.ai-locked-notice{margin-top:10px;padding:10px 12px;border-radius:10px;background:#f1f4fa;font-size:13px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}.ai-locked-notice a{white-space:nowrap}.answer:disabled{cursor:not-allowed;opacity:.82}
@media(max-width:600px){.feedback-step{grid-template-columns:26px 1fr}.feedback-step>span{width:26px;height:26px;font-size:12px}}
/* V1.3 — feedback lisible : la couleur signale le statut, le contenu reste neutre et lisible. */
.feedback.status-bad,.feedback.status-ok{color:var(--text)}
.feedback.status-bad .feedback-title strong{color:var(--bad)}
.feedback.status-ok .feedback-title strong{color:var(--ok)}
.feedback-step p{line-height:1.55}

/* V1.4 — diagnostic sécurisé et protocole de passation */
.diagnostic-lock{display:inline-flex;align-items:center;gap:7px;padding:7px 12px;border-radius:999px;background:#fff3cd;border:1px solid #ead28a;color:#765b00;font-size:.82rem;font-weight:850}
.diagnostic-lock-text{font-size:.78rem;color:#765b00;font-weight:750}
.diagnostic-secure-bar{margin:12px 0;padding:10px 13px;border-radius:12px;background:#fff8e5;border:1px solid #ead28a;color:#765b00;font-size:.8rem;font-weight:750;text-align:center}
.diagnostic-rules{max-width:1040px;margin:0 auto}
.diagnostic-rules h1{margin:.35rem 0 0}
.diagnostic-lock-panel{align-self:center;padding:9px 12px;border-radius:12px;background:#f5f7fa;color:#526577;font-size:.82rem;font-weight:800}
.diagnostic-purpose{font-size:1rem;line-height:1.55;margin:18px 0}
.rules-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:18px 0}
.rules-grid article{border:1px solid #dfe5eb;border-radius:16px;padding:16px;background:#fff}
.rules-grid article>span{font-size:1.5rem}
.rules-grid h2{margin:.4rem 0 .35rem;font-size:1.02rem}
.rules-grid p{margin:0;line-height:1.5;color:#526577}
.diagnostic-rules-list{display:grid;gap:6px;padding:15px 17px;border-radius:14px;background:#f6f8fa;border:1px solid #e1e6eb;color:#40536a}
.diagnostic-commitment{margin-top:18px;padding:15px 17px;border-radius:14px;background:#eef4f8;border:1px solid #ccdce5}
.diagnostic-commitment label{display:flex;gap:10px;align-items:flex-start;font-weight:750;cursor:pointer}
.diagnostic-commitment input{margin-top:3px;transform:scale(1.15)}
.diagnostic-start-nav{justify-content:flex-end;margin-top:18px}
#diagnosticStartBtn:disabled{opacity:.5;cursor:not-allowed}
.role-nav.diagnostic-locked{justify-content:center}
@media(max-width:700px){.rules-grid{grid-template-columns:1fr}.diagnostic-lock-panel{width:100%;text-align:center}.diagnostic-rules .diag-top{flex-direction:column}.diagnostic-start-nav{justify-content:stretch}.diagnostic-start-nav .btn{width:100%}}

/* V1.5 — questions reportées dans le diagnostic */
.diagnostic-return-badge{display:inline-block;margin-top:8px;padding:5px 9px;border-radius:999px;background:#fff3d6;color:#7a4f00;font-size:12px;font-weight:800}
.diagnostic-progress-note{margin:8px 0 2px;color:var(--muted);font-size:12px}
.diagnostic-skip-btn{border-style:dashed}

/* V2.0 — CP → Terminale */
.edu-level-select{min-width:150px}.edu2-level-large{border:1px solid var(--line);background:#fff;color:var(--text);padding:8px 12px;border-radius:10px;font-weight:800}.edu2-track-picker{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin:10px 0}.edu2-small-btn{padding:8px 11px}.edu2-specialty-line{margin-top:12px;padding:10px 12px;border-radius:12px;background:#f7f8ff;border:1px solid #e0e2ff;font-size:.84rem}.edu2-subject-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px}.edu2-subject-card{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:start}.edu2-subject-icon{font-size:1.8rem;line-height:1}.edu2-subject-main h3{margin:7px 0 2px}.edu2-subject-main p{font-size:.78rem;color:var(--muted);margin:0 0 10px}.edu2-subject-score{font-size:1.1rem}.edu2-subject-card .path-actions{grid-column:1 / -1}.edu2-methodology{display:grid;grid-template-columns:1.1fr .9fr;gap:15px;margin-top:18px}.edu2-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}.edu2-steps>div{padding:12px;border:1px solid var(--line);border-radius:13px;background:#fafbfe;display:grid;gap:5px}.edu2-steps span{font-size:.8rem;color:var(--muted)}.edu2-source-list{display:grid;gap:7px;margin:12px 0}.edu2-source-list a{padding:9px 10px;border-radius:10px;background:#f6f7fb;color:#3d4bb1;text-decoration:none;font-weight:700}.edu2-curriculum-group{margin-bottom:28px}.edu2-unit{border-color:#dde2ea}.edu2-lesson{max-width:980px}.edu2-lesson-grid{display:grid;grid-template-columns:1.7fr .7fr;gap:18px;margin-top:18px}.edu2-lesson .lesson-objective{display:grid;gap:12px;align-content:start}.edu2-example,.edu2-method,.edu2-tip,.edu2-criteria{margin-top:14px;padding:14px 15px;border-radius:13px;border:1px solid var(--line);background:#fff}.edu2-example p,.edu2-method p,.edu2-tip p{margin:4px 0 0}.edu2-criteria ul{margin:8px 0 0;padding-left:20px}.edu2-side-card{padding:12px;border:1px solid var(--line);border-radius:13px;background:#fff;display:grid;gap:4px}.lesson-progress-title{display:flex;justify-content:space-between;gap:10px;font-size:.8rem;font-weight:800;color:#51657a;margin-top:12px}.edu2-visual{margin:18px 0;padding:14px;border-radius:16px;border:1px solid #dfe5eb;background:#fff}.edu2-visual figcaption{font-size:.8rem;font-weight:800;color:#51657a;margin-bottom:9px}.edu2-svg{width:100%;min-height:150px}.edu2-cell{fill:#edf1f4;stroke:#8e9aa7;stroke-width:2}.edu2-cell.filled{fill:#94b7cb}.edu2-axis{stroke:#778898;stroke-width:5;stroke-linecap:round}.edu2-dot{fill:#17324d}.edu2-dot-light{fill:#c9d7df}.edu2-route{stroke:#17324d;stroke-width:4;fill:none;stroke-linecap:round}.edu2-map{fill:#eef4f8;stroke:#96a4b0;stroke-width:2}.edu2-svg-text{font-size:12px;fill:#4d6074;font-weight:750}.edu2-process{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;align-items:center}.edu2-process span{padding:10px 13px;border-radius:11px;background:#f2f5f7;border:1px solid #d8e0e6;font-weight:800}.edu2-process b{color:#718090}.edu2-diagnostic-question .question{font-size:1.18rem}.edu2-young .question{font-size:1.35rem}.edu2-young .answer{font-size:1.03rem;padding:15px 17px}.edu2-young .diagnostic-purpose,.edu2-young .rules-grid p{font-size:1rem}.edu2-young .btn{min-height:46px}.edu2-young .lesson-explain{font-size:1.03rem}.edu2-young h1{font-size:31px}@media(max-width:980px){.edu2-subject-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.edu2-methodology{grid-template-columns:1fr}.edu2-lesson-grid{grid-template-columns:1fr}}@media(max-width:640px){.edu2-subject-grid{grid-template-columns:1fr}.edu2-steps{grid-template-columns:1fr}.edu2-subject-card{grid-template-columns:auto 1fr}.edu2-subject-score{grid-column:2}.edu2-source-list a{font-size:.85rem}.edu2-track-picker{align-items:stretch}.edu2-track-picker .level-btn,.edu2-small-btn{flex:1}}

/* V2.2 — cohérence UI : tous les niveaux et personnalisation visibles aussi en 6e/5e */
.edu21-legacy-controls{display:grid;gap:14px;margin-bottom:18px}.edu21-legacy-controls .edu21-level-card{margin:0}.edu21-level-card{padding:18px 20px}.edu21-level-groups{display:grid;gap:12px;margin-top:14px}.edu21-level-groups>div{display:grid;gap:7px}.edu21-level-pills{display:flex;gap:7px;flex-wrap:wrap}.edu21-personalization-panel{display:grid;gap:14px}.edu21-personalization-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.edu21-personalization-grid>div{display:grid;gap:8px;padding:12px;border:1px solid var(--line);border-radius:13px;background:#fafbfe}.edu21-inline-difficulty{border:1px solid var(--line);border-radius:10px;padding:9px;background:#fff;font-weight:750}.role-nav{min-width:270px}.role-btn{white-space:nowrap}.role-nav.diagnostic-locked{min-width:auto}.optional-badge{display:inline-flex;padding:3px 7px;border-radius:999px;background:#eef0ff;color:#4b4bb8;font-size:10px;font-weight:850;margin-left:3px}@media(max-width:900px){.edu21-personalization-grid{grid-template-columns:1fr}.role-nav{min-width:0}} 

/* V2.3 — navigation par thématiques : une information utile à la fois. */
.edu23-theme-tabs{display:flex;gap:10px;overflow-x:auto;padding:4px 2px 10px;margin:10px 0 6px;scrollbar-width:thin}.edu23-theme-tab{flex:0 0 auto;min-width:170px;display:grid;grid-template-columns:auto 1fr;column-gap:9px;align-items:center;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:#fff;color:var(--text);cursor:pointer;text-align:left;transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease}.edu23-theme-tab span{grid-row:1/3;font-size:1.45rem;line-height:1}.edu23-theme-tab strong{font-size:.92rem}.edu23-theme-tab small{font-size:.73rem;color:var(--muted);margin-top:2px}.edu23-theme-tab:hover{transform:translateY(-1px);box-shadow:0 6px 16px rgba(20,40,60,.07)}.edu23-theme-tab.active{border-color:#7fa2ba;box-shadow:0 0 0 2px rgba(127,162,186,.14);background:#f7fafc}.edu23-subject-tabs{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 10px;margin:4px 0 12px;scrollbar-width:thin}.edu23-subject-tab{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:9px 12px;border-radius:11px;border:1px solid var(--line);background:#f7f9fb;color:var(--text);cursor:pointer;font-size:.86rem}.edu23-subject-tab span{font-size:1.05rem}.edu23-subject-tab.active{background:#17324d;color:#fff;border-color:#17324d}.edu23-directory{padding:20px;margin-top:18px}.edu23-subject-page{padding:20px;margin-top:10px}.edu23-breadcrumb{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:2px 0 14px;padding:8px 11px;border-radius:10px;background:#f6f8fa;color:#667688;font-size:.78rem}.edu23-breadcrumb strong{color:var(--text)}.edu23-subject-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.edu23-subject-card{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:start;min-width:0}.edu23-subject-card .path-actions{grid-column:1/-1;display:flex;gap:8px;flex-wrap:wrap}.edu23-subject-main h3{margin:.25rem 0 .2rem}.edu23-subject-main p{font-size:.8rem;color:var(--muted);margin:.1rem 0 .55rem}.edu23-subject-score{font-size:1.1rem}.edu23-hero{align-items:stretch}.edu23-compact-assignments{margin-top:16px}.edu23-assignment-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.edu23-assignment-chip{border:1px solid var(--line);display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;text-align:left;cursor:pointer;padding:12px}.edu23-assignment-chip>span:first-child{font-size:1.35rem}.edu23-assignment-chip span:nth-child(2){min-width:0;display:grid;gap:2px}.edu23-assignment-chip strong,.edu23-assignment-chip small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.edu23-assignment-chip small{color:var(--muted)}.edu23-assignment-chip>b{font-size:1.1rem}.edu23-next-card{margin-top:16px}.edu23-next-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.edu23-next-grid .skill-card{min-width:0}.edu23-personal-mini{display:grid;gap:5px;margin:14px 0;padding:12px;border:1px solid var(--line);border-radius:12px;background:#fafbfc}.edu23-personal-mini span{font-size:.8rem;color:#586b7b}.edu23-role-tabs{display:flex;gap:8px;overflow-x:auto;padding:2px 0 12px;margin:6px 0 12px}.edu23-role-tabs button{flex:0 0 auto;border:1px solid var(--line);background:#f7f9fb;color:var(--text);padding:9px 12px;border-radius:10px;font-weight:800}.edu23-role-tabs button.active{background:#17324d;color:#fff;border-color:#17324d}.edu23-adult-theme-list{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0}.edu23-adult-theme-list span{padding:5px 8px;border-radius:999px;background:#f2f5f7;color:#55697b;font-size:.74rem;font-weight:750}.edu23-skill-list{display:grid;gap:12px}.edu23-skill-list .edu21-skill-panel{margin:0}.edu23-path-tip{display:flex;gap:10px;align-items:flex-start;margin-top:16px}.edu23-path-tip span{color:#596d7e;font-size:.88rem}.edu23-hero .level-switch{margin:12px 0}.edu23-hero .hero-main>.edu21-level-card{margin-top:10px}.edu23-hero .hero-main>.edu21-level-card + .edu2-track-picker{margin-top:4px}
@media(max-width:980px){.edu23-subject-grid{grid-template-columns:1fr}.edu23-assignment-strip{grid-template-columns:1fr}.edu23-next-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.edu23-theme-tab{min-width:155px}}
@media(max-width:620px){.edu23-theme-tab{min-width:145px;padding:10px 12px}.edu23-theme-tab strong{font-size:.82rem}.edu23-subject-tab{font-size:.78rem;padding:8px 10px}.edu23-directory,.edu23-subject-page{padding:14px}.edu23-next-grid{grid-template-columns:1fr}.edu23-subject-card{grid-template-columns:auto 1fr}.edu23-subject-score{grid-column:2}.edu23-hero .choice-row{display:grid;grid-template-columns:1fr}.edu23-hero .choice-row .btn{width:100%}}


/* V2.4 — audit UI : lisibilité, retours à la ligne, sélecteurs et groupes professeur */
.edu21-diff-control{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,320px);gap:6px 14px;align-items:center;margin:14px 0;padding:14px 16px;border:1px solid var(--line);border-radius:15px;background:#fff;box-shadow:0 5px 18px rgba(20,30,55,.05)}
.edu21-diff-control>span{font-weight:800;color:var(--text);min-width:0;line-height:1.35}
.edu21-diff-control>select{width:100%;min-width:0;border:1px solid #cfd6df;border-radius:11px;padding:10px 12px;background:#fff;color:var(--text);font:inherit;font-weight:750}
.edu21-diff-control>small{grid-column:1/-1;color:var(--muted);line-height:1.45;display:block}
.edu21-adult-settings{display:grid;grid-template-columns:minmax(0,1fr) minmax(190px,240px);gap:10px 14px;margin:16px 0;padding:14px 16px;border:1px solid var(--line);border-radius:15px;background:#fbfcfd}
.edu21-adult-settings>div:first-child{display:grid;gap:4px;min-width:0}
.edu21-adult-settings>div:first-child strong,.edu21-adult-settings>div:first-child small{display:block}
.edu21-adult-settings>div:first-child small{color:var(--muted);line-height:1.45}
.edu21-adult-settings>select{width:100%;min-width:0;border:1px solid #cfd6df;border-radius:11px;padding:10px 12px;background:#fff;color:var(--text);font:inherit;font-weight:750;align-self:center}
.edu21-cog-adult{grid-column:1/-1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.edu21-cog-adult span{display:block;min-width:0;padding:9px 10px;border-radius:10px;background:#f4f7f9;color:#516372;font-size:.82rem;line-height:1.4}
.edu21-adult-settings>.path-actions{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:8px}
.edu24-level-top{margin-bottom:18px}
.edu24-level-top>.edu21-level-card{margin:0}
.edu24-level-top .edu21-level-card{box-shadow:0 8px 24px rgba(20,30,55,.06);border-radius:18px}
.edu21-level-groups>div{min-width:0}
.edu21-level-groups strong{display:block;line-height:1.35}
.edu21-level-pills{overflow-x:auto;overflow-y:hidden;padding:2px 2px 4px;flex-wrap:nowrap;scrollbar-width:thin}
.edu21-level-pills .level-btn{flex:0 0 auto;white-space:nowrap}
.section-head>div,.role-hero>div,.profile-row>div,.teacher-student>div,.path-actions,.nav-inline{min-width:0}
.profile-row>div:nth-child(2){min-width:0;display:grid;gap:2px}
.profile-row>div:nth-child(2)>strong,.profile-row>div:nth-child(2)>span{overflow-wrap:anywhere}
.btn{white-space:normal;line-height:1.25;text-wrap:pretty}
select,input,textarea{max-width:100%;font:inherit}
.teacher-student{min-width:0}
.teacher-student .profile-row{align-items:flex-start}
.teacher-level{flex:0 0 auto}
.teacher-group-panel{margin-top:16px}
.teacher-group-create{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;margin-top:12px}
.teacher-group-create input{width:100%;min-width:0;border:1px solid #cfd6df;border-radius:11px;padding:11px 12px;background:#fff;color:var(--text)}
.teacher-group-list{display:grid;gap:9px;margin-top:14px}
.teacher-group-card{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;padding:12px 13px;border:1px solid var(--line);border-radius:13px;background:#fff}
.teacher-group-card .group-icon{font-size:1.3rem}
.teacher-group-card strong,.teacher-group-card span{display:block;min-width:0;overflow-wrap:anywhere}
.teacher-group-card small{color:var(--muted)}
.teacher-group-members{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.teacher-group-member{display:inline-flex;align-items:center;gap:5px;padding:4px 4px 4px 10px;border-radius:999px;background:#f4f6f8;font-size:.78rem;color:#344a5d}
.teacher-group-member button{border:0;background:none;color:#7a8794;cursor:pointer;font-size:1rem;line-height:1;padding:2px 6px;border-radius:50%}
.teacher-group-member button:hover{background:#e3e7eb;color:#bd3038}
.teacher-group-add{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.teacher-group-add select{flex:1;min-width:160px;border:1px solid #cfd6df;border-radius:11px;padding:9px 10px;background:#fff;color:var(--text)}
.teacher-group-empty{padding:12px;border-radius:12px;background:#f6f8fa;color:var(--muted);font-size:.86rem}
.teacher-create-confirm{margin-top:10px;padding:9px 11px;border-radius:10px;background:#eef9f3;border:1px solid #cbeedc;color:#17663f;font-size:.84rem}
.edu23-subject-tabs,.edu23-theme-tabs{scroll-behavior:smooth}
@media(max-width:820px){.edu21-diff-control,.edu21-adult-settings{grid-template-columns:1fr}.edu21-cog-adult{grid-template-columns:1fr}.teacher-group-create{grid-template-columns:1fr}.teacher-group-create .btn{width:100%}}
@media(max-width:640px){.edu21-diff-control,.edu21-adult-settings{padding:12px}.edu21-diff-control>select,.edu21-adult-settings>select{font-size:.95rem}.teacher-group-card{grid-template-columns:auto minmax(0,1fr)}.teacher-group-card .btn{grid-column:2;justify-self:start}}
.online-status{display:flex;align-items:center;gap:6px;font-size:.78rem;color:#617080;white-space:nowrap;max-width:280px;overflow:hidden;text-overflow:ellipsis}
.online-dot{width:8px;height:8px;border-radius:50%;background:#2f9e44;display:inline-block;flex:none}.online-dot.local{background:#7b8794}.online-dot.offline{background:#d97706}
@media(max-width:900px){.online-status{display:none}}

.info-box{padding:12px 14px;border:1px solid #d9e0e7;border-radius:12px;background:#f7f9fb;font-size:.9rem;line-height:1.45;margin:10px 0}.edu-modal-card select,.edu-modal-card input{width:100%;box-sizing:border-box;margin-top:6px}.edu-modal-card select{padding:11px;border:1px solid #d5dce3;border-radius:10px;background:white}

/* V2.9 — vitrine publique EDU / parcours d'accès */
:root{--edu-navy:#102a43;--edu-blue:#2f6fed;--edu-sky:#eaf2ff;--edu-ink:#102033;--edu-green:#20a36a}
.top-login,.top-signup{border-radius:11px;padding:9px 14px;font-weight:800;cursor:pointer;font:inherit}.top-login{border:1px solid #d9e1ea;background:#fff;color:var(--edu-navy)}.top-signup{border:1px solid var(--edu-blue);background:var(--edu-blue);color:#fff}.top-login:hover{background:#f5f8fb}.top-signup:hover{filter:brightness(.96)}
.landing-container{max-width:1240px;margin:auto;padding:0 24px 70px}.landing-hero{min-height:650px;display:grid;grid-template-columns:1.02fr .98fr;gap:48px;align-items:center;padding:54px 0 38px}.landing-hero-copy{max-width:650px}.landing-kicker{display:inline-flex;align-items:center;gap:7px;color:#2765c8;font-size:12px;font-weight:900;letter-spacing:.11em;text-transform:uppercase}.landing-kicker:before{content:'';width:7px;height:7px;border-radius:50%;background:#2f6fed}.landing-hero h1{font-size:clamp(48px,6vw,76px);letter-spacing:-.055em;line-height:.99;color:var(--edu-ink);margin:18px 0}.landing-hero h1 span{color:#2f6fed}.landing-lead{font-size:20px;line-height:1.65;color:#56687a;max-width:620px}.landing-actions{display:flex;gap:12px;flex-wrap:wrap;margin:30px 0 18px}.landing-primary{background:#2f6fed;box-shadow:0 12px 24px rgba(47,111,237,.22);padding:14px 20px}.landing-primary:hover{background:#225bc9}.landing-secondary{background:#fff;color:var(--edu-navy);border:1px solid #d8e0e9;padding:13px 20px}.landing-trust{display:flex;gap:16px;flex-wrap:wrap;color:#5c7082;font-size:13px}.landing-trust span{display:inline-flex;align-items:center;gap:5px}.landing-visual{min-height:480px;display:grid;place-items:center;position:relative;border-radius:42px;background:linear-gradient(145deg,#edf5ff 0%,#f9fbff 48%,#e9f8f2 100%);overflow:hidden}.landing-visual:before{content:'';position:absolute;width:520px;height:520px;border:1px solid rgba(47,111,237,.12);border-radius:50%}.edu-orbit{position:absolute;border-radius:50%;border:1px dashed rgba(47,111,237,.22)}.orbit-one{width:430px;height:430px}.orbit-two{width:340px;height:340px}.landing-dashboard{position:relative;width:min(390px,78%);background:#fff;border:1px solid rgba(16,42,67,.09);border-radius:24px;padding:22px;box-shadow:0 30px 70px rgba(34,68,105,.18);transform:rotate(-2deg)}.mini-top{display:flex;align-items:center;gap:8px;color:#30475d}.mini-dot{width:9px;height:9px;border-radius:50%;background:#2f6fed}.mini-pill{margin-left:auto;background:#edf3ff;color:#2765c8;padding:4px 8px;border-radius:999px;font-size:11px;font-weight:900}.mini-welcome{display:grid;gap:5px;margin:26px 0}.mini-welcome small{color:#7a8a99}.mini-welcome strong{font-size:22px}.mini-progress{padding:14px;border-radius:15px;background:#f6f9fc}.mini-progress>div:first-child{display:flex;justify-content:space-between;font-size:13px;font-weight:800}.mini-bar{height:8px;border-radius:9px;background:#e5ebf2;margin-top:9px;overflow:hidden}.mini-bar i{display:block;height:100%;border-radius:9px;background:#2f6fed}.mini-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}.mini-cards>div{padding:13px;border:1px solid #e4e9ef;border-radius:14px;display:grid;gap:3px}.mini-cards span{font-size:20px}.mini-cards strong{font-size:13px}.mini-cards small{font-size:11px;color:#778898}.mini-cta{margin-top:12px;width:100%;padding:12px;border:0;border-radius:12px;background:#102a43;color:#fff;font-weight:800}.landing-section{padding:86px 0;border-top:1px solid #e7edf3}.landing-section-head{max-width:760px;margin-bottom:35px}.landing-section h2{font-size:clamp(32px,4vw,52px);letter-spacing:-.035em;line-height:1.08;color:var(--edu-ink);margin:10px 0 14px}.landing-section-head p,.landing-split p{font-size:18px;color:#607285;line-height:1.65}.landing-feature-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.landing-feature{background:#fff;border:1px solid #e3e9ef;border-radius:22px;padding:25px;min-height:255px;box-shadow:0 12px 30px rgba(25,47,70,.045)}.feature-icon{font-size:30px;margin-bottom:18px}.landing-feature h3{font-size:19px;color:#18334c}.landing-feature p{color:#65788a;line-height:1.55;font-size:15px}.landing-split{display:grid;grid-template-columns:1fr .8fr;gap:80px;align-items:center}.role-points{display:grid;gap:12px;margin-top:25px;color:#43586b}.role-card-stack{display:grid;gap:12px}.role-card{display:flex;gap:15px;align-items:center;padding:19px 20px;border:1px solid #e0e7ee;border-radius:18px;background:#fff;box-shadow:0 12px 25px rgba(24,50,75,.06)}.role-card>span{width:44px;height:44px;border-radius:14px;display:grid;place-items:center;background:#eef4ff;font-size:22px}.role-card strong,.role-card small{display:block}.role-card small{color:#6a7c8c;margin-top:3px}.role-parent{transform:translateX(28px)}.role-teacher{transform:translateX(8px)}.method-steps{display:grid;grid-template-columns:repeat(4,1fr);gap:0}.method-steps>div{padding:24px;border-top:2px solid #dfe7f0}.method-steps b{font-size:12px;color:#2f6fed;letter-spacing:.1em}.method-steps h3{margin:17px 0 6px}.method-steps p{color:#697b8d;line-height:1.55}.landing-cta{display:flex;justify-content:space-between;align-items:center;gap:30px;padding:38px 42px;border-radius:28px;background:linear-gradient(120deg,#102a43,#174d77);color:#fff;box-shadow:0 22px 50px rgba(16,42,67,.18)}.landing-cta .landing-kicker{color:#9fc5ff}.landing-cta .landing-kicker:before{background:#9fc5ff}.landing-cta h2{color:#fff;margin:10px 0}.landing-cta p{color:#c8d7e4;max-width:720px}.landing-cta .landing-primary{background:#fff;color:#174d77;box-shadow:none;white-space:nowrap}.landing-cta .landing-primary:hover{background:#eef5ff}
.edu-modal{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px}.edu-modal-backdrop{position:absolute;inset:0;background:rgba(11,25,40,.52);backdrop-filter:blur(5px)}.edu-modal-card{position:relative;width:min(470px,100%);max-height:min(760px,92vh);overflow:auto;background:#fff;border:1px solid #dfe6ee;border-radius:24px;padding:30px;box-shadow:0 35px 90px rgba(5,20,35,.25)}.edu-modal-card h2{font-size:30px;color:var(--edu-ink);margin:7px 0 10px}.edu-modal-card label{display:block;font-weight:800;color:#344a5d;margin:15px 0}.edu-modal-card input,.edu-modal-card select{border:1px solid #d4dde6;border-radius:11px;padding:12px 13px;background:#fff;color:#162b3d}.modal-close{position:absolute;right:16px;top:14px;width:34px;height:34px;border:0;border-radius:10px;background:#f1f4f7;color:#536678;font-size:23px;cursor:pointer}.auth-error{color:#bd3038;margin:10px 0;font-size:13px}.edu-modal-card .info-box{background:#f5f9ff;border-color:#dce9f8}.full{width:100%;margin-top:8px}
@media(max-width:950px){.landing-hero{grid-template-columns:1fr;padding-top:34px}.landing-hero-copy{max-width:none}.landing-visual{min-height:410px}.landing-feature-grid{grid-template-columns:repeat(2,1fr)}.landing-split{grid-template-columns:1fr;gap:40px}.role-parent{transform:none}.role-teacher{transform:none}.method-steps{grid-template-columns:repeat(2,1fr);gap:18px}.landing-cta{flex-direction:column;align-items:flex-start}}
@media(max-width:640px){.topbar{height:auto;min-height:68px}.brand small{display:none}.top-login,.top-signup{padding:8px 9px;font-size:12px}.landing-container{padding:0 14px 45px}.landing-hero{min-height:auto;padding:35px 0 45px;gap:28px}.landing-hero h1{font-size:45px}.landing-lead{font-size:17px}.landing-actions .btn{width:100%}.landing-trust{display:grid;gap:7px}.landing-visual{min-height:340px;border-radius:28px}.landing-dashboard{width:86%;padding:17px}.landing-section{padding:58px 0}.landing-feature-grid{grid-template-columns:1fr}.landing-feature{min-height:auto}.method-steps{grid-template-columns:1fr}.landing-cta{padding:28px 23px}.landing-cta .landing-primary{width:100%}.edu-modal-card{padding:25px 20px}.landing-section h2{font-size:34px}}

/* EDU V2.10 — IA, confiance et parcours */
.online-account-label{font-size:.82rem;color:var(--muted,#667085);display:inline-flex;align-items:center;gap:.45rem}
.path-controls{margin:18px 0 28px;padding:18px 20px;border:1px solid rgba(31,55,78,.1);border-radius:18px;background:linear-gradient(135deg,#f7fbff,#fff);display:flex;align-items:center;justify-content:space-between;gap:20px}
.path-controls h2{margin:.15rem 0 .25rem}.path-controls p{margin:0}.path-control-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.streak-pill{font-weight:800;padding:9px 13px;border-radius:999px;background:#eef6ff;color:#17324d}
.ai-section{display:grid;grid-template-columns:1.25fr .75fr;gap:32px;align-items:center}.ai-copy h2{max-width:780px}.ai-points{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:20px 0}.ai-points span{padding:10px 12px;border-radius:12px;background:#f5f8fc;font-weight:650}.ai-supervision{margin-top:18px;padding:16px 18px;border-left:4px solid #2d6cdf;background:#f7fbff;border-radius:0 14px 14px 0}.ai-supervision p{margin:.45rem 0 0;color:#5d6978}.ai-visual{min-height:320px;border-radius:28px;padding:28px;background:radial-gradient(circle at 50% 42%,#e8f2ff 0,#f8fbff 38%,#eef4f9 100%);display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 18px 50px rgba(25,50,77,.1)}.ai-chip{align-self:flex-end;font-weight:800;padding:7px 12px;border-radius:999px;background:#17324d;color:white}.ai-ring{width:170px;height:170px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;border:14px solid #b9d4f3;box-shadow:inset 0 0 0 10px #fff;background:#fff}.ai-ring span{font-size:2.3rem;font-weight:900;color:#17324d}.ai-ring small{color:#667085}.ai-flow{display:flex;gap:9px;align-items:center;margin-top:22px;font-size:.85rem;font-weight:700}.trust-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.trust-grid article{padding:24px;border:1px solid rgba(31,55,78,.1);border-radius:18px;background:#fff}.trust-grid article>span{font-size:1.8rem}.trust-grid h3{margin:.5rem 0}.trust-grid p{color:#5d6978}.trust-grid small,.partner-disclaimer{color:#7a8492}.partner-wall{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin:28px 0 10px}.partner-wall span{padding:11px 17px;border-radius:999px;background:#f4f6f8;border:1px solid #e3e7eb;font-weight:800;color:#263746}.partner-disclaimer{text-align:center;font-size:.8rem;margin:0 auto;max-width:900px}
@media(max-width:800px){.path-controls,.ai-section{grid-template-columns:1fr;display:block}.path-control-actions{margin-top:14px}.ai-points,.trust-grid{grid-template-columns:1fr}.ai-visual{margin-top:20px}}
/* V2.16 — aucun contenu éducatif ne doit flasher avant la décision landing/auth. */
.edu-booting #app { visibility: hidden; }
.edu-booting #roleNav,
.edu-booting #headerContext,
.edu-booting #resetBtn { visibility: hidden; }

/* V2.11 — aucun contenu de l'espace élève visible avant authentification */
.edu-preauth #app { visibility: hidden; }
.edu-preauth #roleNav,
.edu-preauth #headerContext,
.edu-preauth #resetBtn { visibility: hidden; }

/* V2.14 — inscription / offres : modal lisible, hiérarchisée et responsive */
.edu-modal{overflow:auto}
.edu-modal-card{width:min(920px,calc(100vw - 32px));max-height:min(900px,calc(100vh - 32px));padding:34px;background:#fff;color:#102033;overflow:auto}
.edu-modal-card *{box-sizing:border-box}
.signup-modal{width:100%;color:#102033}
.signup-head{padding:2px 36px 22px 2px}
.signup-head h2{font-size:clamp(28px,4vw,40px);line-height:1.08;letter-spacing:-.035em;margin:10px 0 9px;color:#102033}
.signup-head p{margin:0;max-width:700px;color:#607285;line-height:1.55;font-size:16px}
.plan-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:4px 0 18px}
.plan-card{position:relative;border:1px solid #dfe7ef;border-radius:20px;padding:22px;background:#fff;min-width:0;box-shadow:0 8px 24px rgba(16,42,67,.05)}
.plan-card.plan-active{border:2px solid #2f6fed;box-shadow:0 16px 34px rgba(47,111,237,.12);background:linear-gradient(180deg,#f7fbff,#fff)}
.plan-card h3{margin:8px 0 0;font-size:22px;color:#102a43}.plan-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.plan-price{font-size:24px;white-space:nowrap;color:#102a43}.plan-price small{font-size:12px;font-weight:600;color:#718194}.plan-card>p{color:#607285;line-height:1.5;min-height:48px;margin:14px 0}.plan-card ul{margin:0 0 18px;padding-left:20px;color:#40566b;line-height:1.7}.plan-card li::marker{color:#2f6fed}.plan-badge{display:inline-flex;align-items:center;border-radius:999px;padding:5px 9px;background:#eaf2ff;color:#245ec4;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.06em}.muted-badge{background:#f1f4f7;color:#728091}.plan-coming{background:#fafbfc}.plan-disabled{display:block;text-align:center;padding:11px;border-radius:11px;background:#eef1f4;color:#7a8794;font-weight:800;font-size:13px}.plan-cta{background:#2f6fed;color:#fff;border:0;min-height:46px;font-weight:900}.plan-cta:hover{background:#225bc9}.signup-reassurance{display:flex;flex-wrap:wrap;gap:10px 20px;padding:15px 17px;border-radius:14px;background:#f5f8fb;color:#506477;font-size:13px;margin:4px 0 12px}.modal-link{display:block;margin:12px auto 0;border:0;background:none;color:#2765c8;font-weight:800;cursor:pointer;padding:8px 10px;font:inherit}.modal-link:hover{text-decoration:underline}.signup-form{max-width:620px;margin:0 auto}.signup-form label{margin:14px 0}.signup-form input,.signup-form select{display:block;width:100%;min-height:48px;font-size:16px;margin-top:7px}.signup-form .info-box{margin:16px 0;padding:14px 16px}.signup-form .plan-cta{margin-top:4px}
@media(max-width:700px){.edu-modal{padding:10px}.edu-modal-card{width:calc(100vw - 20px);max-height:calc(100vh - 20px);padding:25px 18px;border-radius:20px}.plan-grid{grid-template-columns:1fr}.plan-card>p{min-height:0}.signup-head{padding-right:28px}.plan-price{font-size:20px}}

/* EDU V2.18 — identité de marque fondatrice + actions de compte */
:root{--edu-brand:#1769e0;--edu-brand-dark:#123b63;--edu-brand-soft:#eaf3ff;--edu-ink:#102a43;--edu-mint:#20b486;--edu-sun:#f4b740}
.edu-brand{display:inline-flex;align-items:center;gap:11px;text-decoration:none;color:inherit;min-width:0}
.edu-logo-mark{width:42px;height:42px;border-radius:13px;display:grid;place-items:center;background:linear-gradient(145deg,var(--edu-brand),#124bb0);color:#fff;box-shadow:0 8px 20px rgba(23,105,224,.22);font-weight:950;font-size:22px;letter-spacing:-.06em;position:relative;overflow:hidden}
.edu-logo-mark:after{content:"";position:absolute;width:20px;height:20px;border-radius:50%;background:rgba(255,255,255,.18);right:-7px;top:-7px}
.edu-wordmark strong{display:block;font-size:22px;line-height:1;letter-spacing:-.055em;color:var(--edu-ink)}
.edu-wordmark small{display:block;margin-top:4px;font-size:10px;font-weight:750;letter-spacing:.045em;color:#64778a;white-space:nowrap}
.role-hero-account{align-items:flex-start}
.account-hero-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.account-logout{white-space:nowrap}
@media(max-width:640px){.edu-wordmark small{display:none}.edu-logo-mark{width:38px;height:38px;border-radius:12px}.edu-wordmark strong{font-size:20px}.account-hero-actions{width:100%;justify-content:flex-start}.account-hero-actions .btn{width:100%}.role-hero-account{gap:18px}}

/* V2.20 — actions critiques : zone de clic stable, aucun déplacement au survol. */
/* V2.45 — z-index:20/21 dépassait celui du bandeau collant (.topbar, z-index:10) :
   en descendant la page, ce bloc (juste sous le bandeau) passait visuellement
   PAR-DESSUS lui au lieu de rester dessous. 2/3 suffit largement à couvrir le
   besoin d'origine (V2.20 : zone de clic stable au-dessus des éléments
   décoratifs locaux, sans z-index), tout en restant sous le bandeau. */
.account-hero-actions{position:relative;z-index:2;pointer-events:auto}
.account-hero-actions .btn{position:relative;z-index:3;pointer-events:auto;transform:none!important}
.account-hero-actions .btn:hover,.account-hero-actions .btn:focus-visible{transform:none!important}
.account-hero-actions .btn:disabled{cursor:wait;opacity:.7}

/* EDU V2.21 — navigation compte et actions critiques */
.account-tabs{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.account-tab{min-height:40px}
.remember-login{display:flex!important;align-items:center;gap:8px;font-weight:600!important;font-size:13px!important;color:var(--muted)!important;margin:8px 0!important}
.remember-login input{width:auto!important;margin:0}


/* EDU V2.21 — navigation compte et mémorisation sûre */
.account-tabs{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.account-tab{min-height:40px}.remember-login{display:flex!important;align-items:center;gap:8px;font-weight:600!important;font-size:13px!important;color:var(--muted)!important;margin:8px 0!important}.remember-login input{width:auto!important;margin:0}

/* V2.23 — cours enrichis : wrapping robuste, parcours en étapes et lecture aérée */
.lesson-card,.lesson-card *{box-sizing:border-box}
.lesson-card{min-width:0;overflow:hidden}
.lesson-title-wrap,.lesson-title-wrap>*,.lesson-body,.lesson-body>*,.lesson-explain,.lesson-objective{min-width:0}
.lesson-card p,.lesson-card strong,.lesson-card h1,.lesson-card h2,.lesson-card h3,.lesson-card li,.lesson-card small{white-space:normal;overflow-wrap:anywhere;word-break:normal}
.lesson-objective{align-self:start}
.edu23-phases{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin:18px 0 14px}
.edu23-phase{display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center;padding:11px 12px;border:1px solid var(--line,#e5e8ee);border-radius:14px;background:#f7f8fb;min-width:0}
.edu23-phase span{font-size:1.25rem}.edu23-phase strong{font-size:.86rem;overflow-wrap:anywhere}.edu23-phase small{font-weight:800;color:#718092}
.edu23-phase.active{background:#eef3f7;border-color:#b9c9d5;box-shadow:0 5px 14px rgba(20,30,55,.06)}
.edu23-hero{display:flex;justify-content:space-between;gap:18px;align-items:center;margin:12px 0;padding:17px 18px;border-radius:16px;background:linear-gradient(135deg,#f7f9fc,#eef3f7);border:1px solid #dfe5eb}
.edu23-hero h2{margin:5px 0 0;font-size:1.12rem}.edu23-progress{display:grid;text-align:right;min-width:130px}.edu23-progress strong{font-size:1.45rem}.edu23-progress span{font-size:.72rem;color:#667688}
.edu23-block{margin-top:15px;padding:16px;border-radius:14px;border:1px solid var(--line,#e5e8ee);background:#fff}
.edu23-discover{background:#f8fafc}.edu23-kicker{display:block;font-size:.74rem;font-weight:850;letter-spacing:.03em;text-transform:uppercase;color:#526679;margin-bottom:7px}
.edu23-block h2{margin:0 0 8px}.edu23-block h3{margin:0 0 7px}.edu23-block p{line-height:1.65}
.edu23-objective{display:grid;gap:8px;padding:16px;border-radius:15px;background:#f7f9fc;border:1px solid #dfe5eb}
.edu23-objective strong{display:block;line-height:1.55;white-space:normal;overflow-wrap:anywhere}
.edu23-objective p{margin:0;font-size:.8rem;color:#667688;line-height:1.5}
.edu23-method{margin-top:12px;padding:14px;border-radius:14px;background:#fff;border:1px solid var(--line,#e5e8ee)}
.edu23-method>div{display:grid;gap:7px;margin-top:8px}
.edu23-method span{display:block;padding:8px 9px;border-radius:9px;background:#f4f6f8;font-size:.8rem;overflow-wrap:anywhere}
.edu23-method span.current{font-weight:800;background:#e9f0f5}
.edu23-check ul{margin:8px 0 0;padding-left:20px}.edu23-check li{margin:6px 0;line-height:1.45}
.edu23-lesson .visual-card,.edu23-lesson .edu2-visual{max-width:100%;overflow:hidden}
.edu23-lesson svg{max-width:100%;height:auto}
.lesson-nav{flex-wrap:wrap}
@media(max-width:760px){.edu23-phases{grid-template-columns:1fr}.edu23-hero{align-items:flex-start;flex-direction:column}.edu23-progress{text-align:left}.edu23-lesson .lesson-body{grid-template-columns:1fr!important}}
@media(max-width:480px){.edu23-phase{grid-template-columns:auto 1fr}.edu23-phase small{display:none}.edu23-lesson{padding:15px}.edu23-lesson .lesson-head h1{font-size:1.65rem;line-height:1.15}}

/* V2.30 — landing ludique : mascotte, matières manipulables et confiance honnête */
.edu-mascot{width:84px;height:84px;display:block;filter:drop-shadow(0 10px 18px rgba(16,42,67,.22))}
.mascot-hero{position:absolute;top:14px;right:18px;z-index:3}
.mascot-float{animation:eduMascotFloat 3.6s ease-in-out infinite}
.mascot-cta{width:76px;flex:0 0 auto}
.mascot-cta .edu-mascot{width:76px;height:76px}
@keyframes eduMascotFloat{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-9px) rotate(2deg)}}
@media(prefers-reduced-motion:reduce){.mascot-float{animation:none}}
.landing-audience{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}
.landing-audience span{padding:8px 13px;border-radius:999px;background:#eef4ff;color:#1c4fa8;font-weight:800;font-size:12.5px}
.feature-icon{width:52px;height:52px;border-radius:16px;display:grid;place-items:center;font-size:26px!important;margin-bottom:16px}
.feature-icon.fi-1{background:#eaf1ff}
.feature-icon.fi-2{background:#fff2e2}
.feature-icon.fi-3{background:#e8f8ef}
.feature-icon.fi-4{background:#f4edff}
.manip-section{background:linear-gradient(180deg,#fbfcff,#fff)}
.manip-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.manip-card{background:#fff;border:1px solid #e3e9ef;border-radius:22px;padding:22px;box-shadow:0 12px 28px rgba(25,47,70,.05);display:flex;flex-direction:column;gap:14px}
.manip-tag{font-weight:850;color:#18334c;font-size:14.5px}
.manip-card p{margin:0;color:#65788a;font-size:14px;line-height:1.5}
.pose-op{background:#f7f9fc;border-radius:14px;padding:14px;font:800 22px/1.3 ui-monospace,Consolas,monospace;color:#17324d}
.pose-op-small{font-size:20px}
.pose-row{display:flex;justify-content:flex-end;gap:6px}
.pose-cell{width:34px;height:34px;display:grid;place-items:center;border-radius:8px;background:#fff;border:1px solid #dbe3ec}
.pose-sign{width:34px;height:34px;display:grid;place-items:center;color:#2f6fed}
.pose-line{height:2px;background:#17324d;margin:6px 0;border-radius:2px}
.pose-drop{background:#eef4ff;border:1px dashed #9db8e6;color:#8fa5c4}
.pose-drop-active{background:#fff4d8;border:1px dashed #f4b740;color:#a67a10;animation:eduDropPulse 1.8s ease-in-out infinite}
@keyframes eduDropPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}
@media(prefers-reduced-motion:reduce){.pose-drop-active{animation:none}}
.frac-demo{background:#f7f9fc;border-radius:14px;padding:16px;display:grid;gap:12px;justify-items:center}
.frac-box{display:flex;flex-direction:column;align-items:center;font:800 26px/1.2 ui-monospace,Consolas,monospace;color:#17324d}
.frac-num,.frac-den{width:46px;height:40px;display:grid;place-items:center;background:#fff;border:1px solid #dbe3ec;border-radius:8px}
.frac-bar{width:52px;height:3px;background:#17324d;margin:5px 0;border-radius:2px}
.frac-visual{width:100%;height:10px;border-radius:6px;background:#e5ebf2;overflow:hidden}
.frac-visual i{display:block;height:100%;background:#20a36a}
.manip-note{margin-top:18px;color:#7a8a99;font-size:13px;max-width:760px}
.levels-section .level-ribbon{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
.level-ribbon span{padding:9px 14px;border-radius:999px;background:#f4f6f9;border:1px solid #e4e9ef;font-weight:800;color:#40566b;font-size:13px}
.level-ribbon .level-pivot{background:#17324d;color:#fff;border-color:#17324d}
.subject-ribbon{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}
.subject-ribbon span{padding:9px 14px;border-radius:12px;background:#fff;border:1px solid #e4e9ef;font-weight:700;color:#40566b;font-size:13.5px}
.trust-badges{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:24px}
.trust-badges span{padding:10px 16px;border-radius:999px;background:#f4f6f8;border:1px solid #e3e7eb;font-weight:800;color:#263746;font-size:13px}

/* V2.33 — sélecteur de niveau toujours accessible (en-tête + bandeau) */
.header-level-switch{display:flex;align-items:center;gap:6px}
.notice-level-picker{display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.notice-level-picker p{margin:0}
.notice-level-picker select{min-width:160px}
@media(max-width:780px){.notice-level-picker{flex-direction:column;align-items:flex-start}}

/* V2.31 — édition du niveau depuis l'espace élève en ligne */
.level-edit{display:grid;gap:8px;margin:14px 0 4px}
.level-edit label{font-weight:800;color:#344a5d;font-size:13px}
.level-edit select{padding:11px;border:1px solid #d5dce3;border-radius:10px;background:#fff;font:inherit}
.level-msg{min-height:20px;font-size:13px;margin:2px 0 4px}

/* V2.31 — vidéos pédagogiques curées, intégrées dans la leçon */
.edu-videos{display:grid;gap:14px}
.video-embed{margin:0;display:grid;gap:8px}
.video-frame{position:relative;width:100%;padding-top:56.25%;border-radius:14px;overflow:hidden;background:#0b1522}
.video-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.video-embed figcaption{font-size:13px;color:var(--muted,#667085)}
.video-embed figcaption strong{display:block;color:#18334c;font-size:14px;margin-bottom:2px}

/* V2.32 — révisions Brevet/Bac */
.exam-prep-cta{border-left:4px solid #f4b740}
.exam-readiness{display:flex;gap:22px;align-items:center;flex-wrap:wrap}
.exam-readiness-score{display:grid;place-items:center;min-width:110px;height:110px;border-radius:50%;background:#f1f4f7;text-align:center}
.exam-readiness-score strong{font-size:28px;color:#17324d}
.exam-readiness-score span{font-size:11px;color:var(--muted,#667085);max-width:90px}
.exam-readiness-ok .exam-readiness-score{background:#e8f8ef;color:#16834c}
.exam-readiness-mid .exam-readiness-score{background:#fff6e2;color:#8a6300}
.exam-readiness-low .exam-readiness-score{background:#fdeceb;color:#b3261e}
.exam-epreuve-grid,.exam-sheet-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:14px 0 28px}
.exam-epreuve h3,.exam-sheet h3{margin:8px 0 6px}
.exam-sheet ul{margin:8px 0 0;padding-left:20px;line-height:1.55}
.exam-sheet li{margin:6px 0}
@media(max-width:900px){.exam-epreuve-grid,.exam-sheet-grid{grid-template-columns:1fr 1fr}}
@media(max-width:640px){.exam-epreuve-grid,.exam-sheet-grid{grid-template-columns:1fr}.exam-readiness{flex-direction:column;align-items:flex-start}}
.landing-cta{position:relative}
@media(max-width:950px){.manip-grid{grid-template-columns:1fr}.mascot-hero{display:none}}
@media(max-width:640px){.mascot-cta{display:none}}

/* ==========================================================================
   V2.59 — Bibliothèque de visuels pédagogiques (data/visuals.js)

   Une seule feuille de style pour TOUS les visuels : les couleurs viennent des
   variables du thème, donc un changement de charte se propage sans retoucher un
   seul tracé SVG. Les visuels partagent volontairement le même cadre (bordure,
   rayon, légende) pour que l'élève identifie immédiatement « ceci est un
   support pour comprendre », qu'il soit dans un cours ou dans un exercice.

   Contraste : les textes des visuels ne descendent pas sous #4a5a6e sur fond
   clair, et aucune information n'est portée par la couleur SEULE (une part
   remplie est aussi bordée plus épais) — un élève daltonien doit pouvoir lire
   le schéma.
   ========================================================================== */
.edu-visual{margin:18px 0;padding:16px 18px;background:linear-gradient(180deg,#fbfcff,#f6f8fd);border:1px solid #e3e9f4;border-radius:18px}
.edu-visual-title{font-size:13px;font-weight:800;letter-spacing:.02em;color:#3b4b60;margin-bottom:10px;text-transform:none}
.edu-visual-svg{display:block;width:100%;height:auto;overflow:visible}
.edu-visual-caption{margin:10px 0 0;font-size:13px;line-height:1.5;color:#5d6e82}

/* Traits de structure */
.eduv-axis{stroke:#41556c;stroke-width:2.5;fill:none;stroke-linecap:round}
.eduv-arrow{fill:#41556c}
.eduv-tick{stroke:#8698ab;stroke-width:1.6}
.eduv-tick.major{stroke:#41556c;stroke-width:2.4}
.eduv-tick-label{font:600 13px system-ui,sans-serif;fill:#4a5a6e}
.eduv-note{font:600 13px system-ui,sans-serif;fill:#4a5a6e}
.eduv-big{font:800 20px system-ui,sans-serif;fill:#16233a}
.eduv-gridline{stroke:#dde4ee;stroke-width:1}
.eduv-zero{stroke:#c53b43;stroke-width:1.6;stroke-dasharray:4 4}

/* Repères mis en avant */
.eduv-mark-stem{stroke:#5b5bd6;stroke-width:1.8;stroke-dasharray:3 4}
.eduv-mark-dot{fill:#5b5bd6;stroke:#fff;stroke-width:2}
.eduv-mark-box{fill:#eeeefe;stroke:#c9c9f6;stroke-width:1.4}
.eduv-mark-label{font:800 14px system-ui,sans-serif;fill:#3b3bb0}

/* Matériel base 10 */
.eduv-b10{stroke:#3f63a8;stroke-width:1.6}
.eduv-b10.thousand{fill:#c9d8f5}.eduv-b10.hundred{fill:#d8e4f8}
.eduv-b10.ten{fill:#e6eefb}.eduv-b10.unit{fill:#f5b942;stroke:#c98d16}
.eduv-b10-rule{stroke:#8ea9d8;stroke-width:.9}
.eduv-b10-num{font:700 9px system-ui,sans-serif;fill:#2f4d84}
.eduv-b10-label{font:600 12px system-ui,sans-serif;fill:#4a5a6e}

/* Parts (fractions) : la part prise est remplie ET bordée plus épais, pour
   rester lisible sans distinguer les couleurs. */
.eduv-part{fill:#fff;stroke:#5b5bd6;stroke-width:1.8}
.eduv-part.filled{fill:#8b8be9;stroke:#3b3bb0;stroke-width:3}
.eduv-brace{stroke:#8698ab;stroke-width:1.4}

/* Collections, paniers, quadrillage */
.eduv-dot{fill:#5b5bd6}
.eduv-dot.rest{fill:#f5b942;stroke:#c98d16;stroke-width:1.5}
.eduv-grid-frame{fill:#fff;stroke:#c3cfe0;stroke-width:1.6}
.eduv-basket{fill:#fff;stroke:#7d8fa6;stroke-width:1.8;stroke-dasharray:6 4}

/* Figures géométriques */
.eduv-shape{fill:#e9f0fd;stroke:#3f63a8;stroke-width:2.4}
.eduv-height{stroke:#c53b43;stroke-width:2;stroke-dasharray:5 4}
.eduv-rightangle{fill:none;stroke:#c53b43;stroke-width:1.6}
/* Codage des côtés (V2.63) : chevrons = côtés parallèles, petits traits =
   côtés de même longueur. C'est le codage, pas l'allure du dessin, qui permet
   de reconnaître un parallélogramme, un losange ou un trapèze. */
.eduv-codage{fill:none;stroke:#2f7d6a;stroke-width:2.2;stroke-linecap:round}
/* Résultat masqué (V2.63) : au-dessus d'un exercice, le schéma ne doit pas
   écrire la réponse. Le « ? » reste visible pour que l'élève sache où elle
   sera écrite après validation. */
.eduv-big.eduv-hidden-result{fill:#7d8fa6}

/* Frise chronologique */
.eduv-tl-date{font:800 13px system-ui,sans-serif;fill:#3b3bb0}
.eduv-tl-label{font:600 12px system-ui,sans-serif;fill:#41556c}

/* Cartes */
.eduv-land{fill:#eaf3e8;stroke:#5c8f60;stroke-width:2.2}
.eduv-ocean{fill:#e8f2fb;stroke:#b9d4ea;stroke-width:1.4}
.eduv-continent{fill:#e4eddd;stroke:#6b9270;stroke-width:1.8}
.eduv-continent.dim{fill:#f1f3f5;stroke:#c7cfd6}
.eduv-continent-label{font:700 12px system-ui,sans-serif;fill:#41614a}
.eduv-sea-label{font:italic 600 12px system-ui,sans-serif;fill:#5d84a8}
.eduv-parallel{stroke:#9fbdd6;stroke-width:1.2;stroke-dasharray:7 5}
.eduv-river{fill:none;stroke:#3f8fc9;stroke-width:2.4;stroke-linecap:round}
.eduv-river-label{font:italic 600 11px system-ui,sans-serif;fill:#2d6f9e}
.eduv-city{fill:#c53b43;stroke:#fff;stroke-width:1.6}
.eduv-city.highlight{fill:#5b5bd6;stroke:#fff;stroke-width:2.4}
.eduv-city-label{font:600 12px system-ui,sans-serif;fill:#33465c}
.eduv-city-label.highlight{font-weight:850;fill:#3b3bb0}
.eduv-zone{fill:rgba(91,91,214,.16);stroke:#5b5bd6;stroke-width:1.6;stroke-dasharray:5 4}
.eduv-zone-label{font:700 12px system-ui,sans-serif;fill:#3b3bb0}
.eduv-hotspot{fill:rgba(197,59,67,.55);stroke:#a92f37;stroke-width:1.4}
.eduv-compass-n{font:800 13px system-ui,sans-serif;fill:#41556c}

/* Nœuds (cycles, chaînes, balance) */
.eduv-node{fill:#fff;stroke:#5b5bd6;stroke-width:1.9}
.eduv-node-label{font:700 13px system-ui,sans-serif;fill:#2c3a53}
.eduv-cycle-arc{fill:none;stroke:#8b8be9;stroke-width:3;stroke-linecap:round}
.eduv-beam{stroke:#41556c;stroke-width:4;fill:none;stroke-linecap:round}
.eduv-stand{fill:#d7dee9;stroke:#41556c;stroke-width:2}

/* Diagramme en barres */
.eduv-bar{fill:#8b8be9;stroke:#5b5bd6;stroke-width:1.5}
.eduv-bar-value{font:800 13px system-ui,sans-serif;fill:#3b3bb0}
.eduv-plot-line{fill:none;stroke:#5b5bd6;stroke-width:2.4}

/* Grammaire : un groupe = une couleur ET un libellé de rôle écrit dessous. */
.eduv-chunk{stroke-width:2}
.eduv-chunk.subject{fill:#dce9fb;stroke:#3f63a8}
.eduv-chunk.verb{fill:#fde4c8;stroke:#c98d16}
.eduv-chunk.object{fill:#dcf1e4;stroke:#3f8f5f}
.eduv-chunk.circ{fill:#f0e3fb;stroke:#8250b8}
.eduv-chunk.attr{fill:#fbe0e2;stroke:#b4474e}
.eduv-chunk.other{fill:#eef1f5;stroke:#8698ab}
.eduv-chunk-text{font:700 16px system-ui,sans-serif;fill:#1d2b42}
.eduv-chunk-role{font:700 11px system-ui,sans-serif;fill:#5d6e82;text-transform:uppercase;letter-spacing:.05em}

/* Lecture : syllabes en gros caractères, très contrastés (CP-CE1). */
.eduv-syll{fill:#fff6e6;stroke:#e0a83c;stroke-width:2.4}
.eduv-syll-text{font:800 30px system-ui,sans-serif;fill:#8a5a06}

/* Bouton « Écouter la question » (CP → CE2, app.js). Volontairement large et
   séparé des réponses : au CP le doigt est imprécis, et un appui accidentel sur
   une réponse coûterait le point. Il porte l'icône ET le mot « Écouter » — une
   icône seule n'est pas comprise par un enfant qui ne lit pas encore. */
.edu-speak{display:inline-flex;align-items:center;gap:8px;margin:0 0 14px;padding:10px 18px;
  font:800 1rem system-ui,sans-serif;color:#2c3a53;background:#fff6e6;
  border:2px solid #e0a83c;border-radius:999px;cursor:pointer}
.edu-speak:hover{background:#ffeccd}
.edu-speak:active{transform:translateY(1px)}
.edu-speak:focus-visible{outline:3px solid #5b5bd6;outline-offset:2px}
/* V2.71 — même bouton, version leçon : un par bloc (« Je découvre », « Je
   retiens », « À toi »…). Plus discret que celui de l'exercice, car il y en a
   plusieurs sur l'écran et il ne doit pas concurrencer le texte de la leçon ;
   assez grand malgré tout pour un doigt d'enfant (44 px de haut avec le padding).
   Il se place juste sous le titre du bloc, donc sur sa propre ligne. */
.edu-speak-lesson{margin:2px 0 10px;padding:8px 14px;font-size:.9rem}
/* Note réservée aux écrans parent et professeur (V2.69) : elle explique pourquoi
   le bouton ci-dessus n'apparaît pas quand l'appareil n'a pas de voix française.
   Volontairement discrète — c'est une information, pas une erreur. */
.edu-speak-missing{margin:10px 0 0;padding:10px 12px;border-radius:12px;
  font-size:.85rem;line-height:1.45;color:#4a3a12;background:#fff8ea;
  border:1px solid #e6cf9a}

/* Pictogrammes de mots (CP-CE1, type `wordPicture`) : l'image montre L'OBJET
   que désigne le mot de l'énoncé, jamais des lettres — c'est ce qui l'empêche
   de donner la réponse à une question de découpage en syllabes. Les aplats
   restent francs et les contours épais : à 6 ans, un dessin est reconnu par sa
   silhouette avant sa couleur, et l'écran est souvent regardé de loin. */
.eduv-pic-word{font:800 34px system-ui,sans-serif;fill:#16233a}
.eduv-pic-water{fill:#bfe0f5;stroke:#5d9dc9;stroke-width:1.6}
.eduv-pic-light{fill:#fff;stroke:#41556c;stroke-width:2.2}
.eduv-pic-dark{fill:#41556c;stroke:#2c3a53;stroke-width:1.8}
.eduv-pic-line{fill:none;stroke:#41556c;stroke-width:3;stroke-linecap:round}
.eduv-pic-brown{fill:#b5813f;stroke:#7c5424;stroke-width:2}
.eduv-pic-wood{fill:#f0dfc2;stroke:#a97b33;stroke-width:2}
.eduv-pic-blade{fill:#f0dfc2;stroke:#a97b33;stroke-width:2}
.eduv-pic-body{fill:#e9d3a8;stroke:#a97b33;stroke-width:2}
.eduv-pic-fur{fill:#dfe4ea;stroke:#7d8fa6;stroke-width:2}
.eduv-pic-pink{fill:#f6d0d4;stroke:#c98d93;stroke-width:1.4}
.eduv-pic-nose{fill:#d4747c}
.eduv-pic-yellow{fill:#f7d77a;stroke:#c9a02e;stroke-width:2}
.eduv-pic-green{fill:#9fca8b;stroke:#5c8f60;stroke-width:2.2}
.eduv-pic-red{fill:#e0656b;stroke:#a92f37;stroke-width:2}
.eduv-pic-spot{fill:#c08a3e}
.eduv-pic-hair{fill:none;stroke:#7c5424;stroke-width:6;stroke-linecap:round}
.eduv-pic-eye{fill:#1d2b42}
.eduv-pic-shell{fill:none;stroke:#5c8f60;stroke-width:2}
.eduv-pic-choco{fill:#7a4a24;stroke:#4e2d13;stroke-width:2.2}
.eduv-pic-chocoline{fill:none;stroke:#4e2d13;stroke-width:2}
.eduv-pic-foil{fill:#e9edf2;stroke:#9aa7b4;stroke-width:1.8}
.eduv-pic-pip{fill:#1d2b42}
.eduv-pic-bag{fill:#c98f52;stroke:#7c5424;stroke-width:2.2}
.eduv-pic-bag2{fill:#b5813f;stroke:#7c5424;stroke-width:2.2}
.eduv-pic-buckle{fill:#f0dfc2;stroke:#7c5424;stroke-width:2}
.eduv-pic-wing{fill:#c9b4ec;stroke:#7d5cb8;stroke-width:2.2}
.eduv-pic-wingdot{fill:#f7d77a}
.eduv-pic-screen{fill:#cfe3f5}
.eduv-pic-screenline{fill:none;stroke:#7d9fc0;stroke-width:3;stroke-linecap:round}
.eduv-pic-umb{fill:none;stroke:#a92f37;stroke-width:1.6}
.eduv-pic-antenna{fill:none;stroke:#2c3a53;stroke-width:2.4;stroke-linecap:round}

/* Sur petit écran, les visuels restent lisibles : le SVG se met à l'échelle et
   la marge intérieure diminue pour ne pas voler de largeur au dessin. */
@media(max-width:640px){.edu-visual{padding:12px 10px;border-radius:14px}.edu-visual-caption{font-size:12px}}
/* Impression (fiches de révision papier) : pas d'aplat de fond coûteux en
   encre, mais on conserve les traits, qui portent l'information. */
@media print{.edu-visual{background:#fff;border-color:#bbb}}

/* ===================== V2.61 — leçons en blocs (data/lesson_blocks.js) =====
   Une leçon n'est plus un paragraphe : c'est une suite de blocs typés, chacun
   avec un rôle visuel distinct (« Je découvre », « Je retiens », « Exemple
   guidé », « Attention », « À toi »). L'élève doit reconnaître le rôle d'un
   bloc AVANT de le lire : d'où un liseré de couleur par type plutôt qu'une
   simple différence de fond. Les tailles augmentent pour les petites classes
   (.band-cp, .band-ce) et se resserrent au lycée, où les textes sont longs. */
.edu-lb-article{display:grid;gap:0}
.edu-lb-set{display:grid;gap:14px}
.edu-lb-hook{margin:0 0 2px;font-size:1.06rem;font-weight:800;color:#1c3550;line-height:1.45}
.edu-lb-hook:before{content:"❓ "}
.edu-lb{padding:15px 17px;border:1px solid var(--line);border-left:5px solid #c9d3de;border-radius:14px;background:#fff}
.edu-lb .edu-lb-head{margin:0 0 8px;font-size:.82rem;font-weight:900;letter-spacing:.07em;text-transform:uppercase;color:#55697b}
.edu-lb p{margin:0 0 6px;line-height:1.6}
.edu-lb p:last-child{margin-bottom:0}
.edu-lb ul,.edu-lb ol{margin:6px 0 0;padding-left:22px}
.edu-lb li{margin-bottom:6px;line-height:1.55}
.edu-lb li:last-child{margin-bottom:0}
.edu-lb-discover{border-left-color:#2f6fed;background:#f8fbff}
.edu-lb-discover .edu-visual{margin-top:12px}
.edu-lb-rule{border-left-color:#20a36a;background:#f6fcf9}
.edu-lb-rule li{font-weight:700}
.edu-lb-steps{border-left-color:#8250b8;background:#fbf8ff}
.edu-lb-example{font-weight:800;color:#3d2a55}
.edu-lb-steps ol{counter-reset:none}
.edu-lb-do{display:block;font-weight:700}
/* Le « pourquoi » de chaque étape est la valeur ajoutée d'un cours sur un mode
   d'emploi : il est donc visible, mais typographiquement secondaire. */
.edu-lb-why{display:block;margin-top:2px;font-size:.88rem;color:#5d6e82;font-style:italic}
.edu-lb-pitfall{border-left-color:#e0a83c;background:#fffaf0}
.edu-lb-pitfall .edu-lb-head{color:#8a5a06}
.edu-lb-tryit{border-left-color:#16a6b6;background:#f5fdfe}
.edu-lb-question{font-weight:800;font-size:1.03rem}
.edu-lb-hint{font-size:.9rem;color:#4b6b74}
/* Réponse repliée dans un <details> : aucun JavaScript, donc le bloc reste
   utilisable même si un script échoue ou si la page est imprimée. */
.edu-lb-answer{margin-top:8px;border-top:1px dashed #b9dde2;padding-top:8px}
.edu-lb-answer summary{cursor:pointer;font-weight:800;color:#0f7c8a}
.edu-lb-answer p{margin-top:7px}
.edu-lb-vocab{border-left-color:#3f63a8;background:#f8faff}
.edu-lb-vocab dl{display:grid;grid-template-columns:auto 1fr;gap:5px 12px;margin:6px 0 0}
.edu-lb-vocab dt{font-weight:800;color:#25425f}
.edu-lb-vocab dd{margin:0;color:#4a5e72}
.edu-lb-recap{border-left-color:#123b63;background:#f7f9fb}
.edu-lb-recap li:before{content:"✔ ";color:#20a36a;font-weight:900}
.edu-lb-recap ul{list-style:none;padding-left:2px}
/* Adaptation à l'âge : au CP-CE1 on lit encore lentement, avec des caractères
   plus grands et des interlignes plus aérés ; au lycée les blocs se densifient
   pour que la leçon tienne sur un écran. */
.band-cp .edu-lb,.band-ce .edu-lb{font-size:1.07rem;padding:17px 19px}
.band-cp .edu-lb p,.band-ce .edu-lb p{line-height:1.7}
.band-cp .edu-lb-hook,.band-ce .edu-lb-hook{font-size:1.14rem}
.band-cm .edu-lb{font-size:1.02rem}
.band-college .edu-lb{font-size:1rem}
.band-lycee .edu-lb{font-size:.97rem;padding:14px 16px}
.band-lycee .edu-lb-set{gap:12px}
@media(max-width:640px){.edu-lb{padding:13px 13px;border-radius:12px}.edu-lb-vocab dl{grid-template-columns:1fr;gap:2px}.edu-lb-vocab dd{margin-bottom:6px}}
/* Impression : les liserés portent l'information de rôle, on les garde ; les
   aplats de fond sont supprimés, et les réponses repliées sont dépliées. */
@media print{.edu-lb{background:#fff}.edu-lb-answer[open] p{display:block}}

/* ===== Mots expliqués (V2.63) =============================================
   Bandeau discret sous l'énoncé d'un exercice et sous la découverte d'une
   leçon : il définit les mots difficiles de CE texte (data/glossary.js). Il
   doit se lire d'un coup d'œil sans détourner de la question — d'où un fond
   très pâle, une taille réduite et aucune bordure épaisse. */
.edu-gloss{margin:8px 0 12px;padding:9px 12px;border-left:3px solid #9bb6d8;border-radius:8px;background:#f6f9fd;font-size:.93rem}
.edu-gloss-kicker{display:block;font-weight:800;color:#3f63a8;font-size:.82rem;letter-spacing:.02em;margin-bottom:4px}
.edu-gloss dl{margin:0;display:grid;grid-template-columns:auto 1fr;gap:3px 10px}
.edu-gloss dt{font-weight:800;color:#25425f}
.edu-gloss dd{margin:0;color:#4a5e72}
.edu-gloss-item{display:contents}
@media(max-width:640px){.edu-gloss dl{grid-template-columns:1fr;gap:1px}.edu-gloss dd{margin-bottom:5px}}
@media print{.edu-gloss{background:#fff}}

/* V2.67 — phrases à trou. Le mot choisi ou écrit apparaît DANS la phrase : c'est
   ce qui rend possible le geste de relecture (« est-ce que ça se dit ? »), qu'un
   bouton « B. travaillent » posé à côté de la phrase ne permet pas. La phrase est
   donc plus grande que le texte courant, avec un interligne large : le trou doit
   rester lisible même quand une proposition longue vient s'y placer. */
.edu-fill-sentence{margin:0 0 14px;font-size:1.22rem;line-height:2.1;color:#17324d}
.edu-fill-slot{display:inline-block;min-width:7.5em;padding:2px 10px;margin:0 2px;
  text-align:center;font-weight:800;color:#8f99aa;
  border-bottom:3px dashed #8f99aa;background:#fff}
.edu-fill-slot.filled{color:#17324d;border-bottom-style:solid;border-bottom-color:#17324d;background:#eef4f8}
/* Largeur FIXE, jamais calculée sur la réponse attendue : un champ à la taille du
   mot en donnerait la longueur, donc un indice que l'énoncé ne donne pas. */
.edu-fill-input{width:7.5em;padding:4px 10px;margin:0 2px;font:800 1.1rem system-ui,sans-serif;
  color:#17324d;text-align:center;background:#fff;border:0;border-bottom:3px solid #17324d;border-radius:4px 4px 0 0}
.edu-fill-input:focus{outline:3px solid #5b5bd6;outline-offset:2px}
.edu-fill-input:disabled{color:#667688;background:#f2f4f8}
.edu-fill-choices{display:flex;gap:9px;flex-wrap:wrap;margin-bottom:12px}
.edu-fill-chip{padding:10px 16px;font:700 1rem system-ui,sans-serif;color:#17324d;background:#fff;
  border:2px solid #cfd6df;border-radius:999px;cursor:pointer}
.edu-fill-chip:hover{border-color:#5b5bd6}
.edu-fill-chip.picked{color:#fff;background:#17324d;border-color:#17324d}
.edu-fill-chip:focus-visible,.edu-fill-toggle:focus-visible{outline:3px solid #5b5bd6;outline-offset:2px}
.edu-fill-chip:disabled,.edu-fill-toggle:disabled{opacity:.6;cursor:default}
/* La bascule reste discrète : c'est une aide, pas l'action principale. Elle est
   visible à tout moment — un élève bloqué doit pouvoir revenir aux propositions
   plutôt qu'abandonner l'exercice. */
.edu-fill-toggle{padding:8px 14px;font:700 .88rem system-ui,sans-serif;color:#41556c;
  background:#f2f4f8;border:1px solid #cfd6df;border-radius:999px;cursor:pointer}
.edu-fill-toggle:hover{background:#e7ebf3}

/* V2.86 — P13 : choix élève/parent à l'inscription et rattachement par code. */
.account-type{border:0;padding:0;margin:4px 0 6px;display:flex;gap:10px;flex-wrap:wrap}
.account-type legend{font-weight:800;color:#344a5d;margin-bottom:6px}
.edu-modal-card label.account-type-opt{display:inline-flex;align-items:center;gap:7px;margin:0;padding:9px 14px;border:1px solid #d4dde6;border-radius:999px;cursor:pointer}
.parent-link-grid{margin-top:18px}
.invite-code{font:800 1.6rem ui-monospace,Consolas,monospace;letter-spacing:.18em;color:var(--edu-ink);background:#f5f9ff;border:1px dashed #9db8da;border-radius:12px;padding:8px 12px;text-align:center;margin:8px 0}
.parent-link-row{display:flex;justify-content:space-between;align-items:center;gap:8px;margin:4px 0}
/* V2.89 — P13 : demande professeur (recherche dans l'annuaire) et console de modération. */
.school-search{display:flex;gap:8px;align-items:center;margin:8px 0}.school-search input{flex:1}
.school-results{max-height:220px;overflow:auto;margin:4px 0 8px}
.school-option{display:block;padding:7px 9px;border:1px solid #e1e7ee;border-radius:10px;margin:5px 0;cursor:pointer;font-weight:400}
#eduTeacherRequestCard textarea{width:100%;min-height:70px;border:1px solid #d4dde6;border-radius:11px;padding:10px;font:inherit;margin:6px 0}
.moderation-block{margin-top:22px}.moderation-block>h2{margin-bottom:4px}
/* V2.90 — liste des classes du professeur avec leur code. */
.class-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:5px 0}.invite-code.small-code{font-size:.95rem;padding:3px 8px;margin:0;letter-spacing:.12em}
/* V2.92 — prénom/nom séparés, accueil personnalisé, carte « Compléter mon profil ». */
.name-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}.name-row label{margin:15px 0 0}
@media (max-width:420px){.name-row{grid-template-columns:1fr}}
.account-greeting{margin:0 0 4px;font-weight:800;font-size:1.05rem;color:var(--edu-ink)}
.profile-complete{margin:16px 0}.profile-complete .name-row input{width:100%}

/* V2.96 — Lecture facilitée (P9) : l'espacement, pas une police spéciale (voir
   eduApplyReadingComfort dans data/edu_v2_adapter.js pour les sources). Valeurs
   proches des recommandations de la British Dyslexia Association : interligne
   1,5 au moins, lettres et mots nettement espacés, pas d'italique, texte aligné
   à gauche. */
body.edu-lecture-facilitee #app :is(.question,.answer,.edu-lb,.feedback,.edu-gloss,.lesson-objective,.notice,.edu-fill-sentence,p,li){letter-spacing:.12em;word-spacing:.16em;line-height:1.8;text-align:left}
body.edu-lecture-facilitee #app :is(.question,.answer,.edu-fill-sentence){font-size:1.12em}
body.edu-lecture-facilitee #app :is(em,i){font-style:normal}
body.edu-lecture-facilitee #app :is(.pose-row,.pose-cell,.pose-op,.pose-op-small,.pose-sign,.pose-line,.fraction-builder,.fraction-cell,.fraction-preview,svg){letter-spacing:normal;word-spacing:normal}
.edu-reading-control{display:flex;align-items:flex-start;gap:10px;margin:12px 0 0;padding:10px 12px;border:1px solid #dfe7ee;border-radius:12px;background:#fff;cursor:pointer}
.edu-reading-control input{margin-top:4px;width:18px;height:18px}
.edu-reading-control span{display:grid;gap:2px}
.edu-reading-control small{color:#607285}
body.edu-lecture-facilitee #app :is(.edu-lb-head,.eyebrow){text-transform:none;letter-spacing:.08em}

/* V2.97 — conjugueur consultable après la réponse (P12) */
.edu-conjugueur{margin:14px 0 0;border:1px solid #dfe7ee;border-radius:14px;background:#fff;padding:4px 14px}
.edu-conjugueur summary{cursor:pointer;padding:10px 0;font-weight:800;color:#17324d}
.edu-conjugueur summary:focus-visible{outline:3px solid #5b5bd6;outline-offset:2px}
.edu-conj-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin:6px 0 10px}
.edu-conj-temps{padding:10px 12px;border-radius:12px;background:#f6f9fc}
.edu-conj-temps ul{margin:6px 0 0;padding:0;list-style:none}
.edu-conj-temps li{padding:2px 0}

/* V2.98 — texte fixe à côté des cases de saisie numérique (« x = », « cm », « € ») */
.operation-result .num-fixe{display:inline-flex;align-items:center;padding:0 8px;font-weight:800;font-size:1.25rem;color:#17324d;white-space:nowrap}

/* ===== V2.99 — impression (P6) ===============================================
   Jusqu'ici, @media print ne réglait que trois couleurs de fond : imprimer une
   leçon donnait la barre de navigation, les boutons et un écran coupé au milieu
   d'un bloc. Deux cas, deux mécanismes :
   - la leçon (ou tout écran) imprimée telle quelle : on masque ce qui n'a aucun
     sens sur papier (navigation, boutons, tuiles à glisser, lecture à voix haute,
     réglages) et on interdit de couper un bloc entre deux pages ;
   - la fiche d'exercices et le bilan, CONSTRUITS pour le papier dans
     #eduPrintSheet : masqués à l'écran, seuls visibles pendant l'impression
     (classe edu-printing sur <body>). */
.edu-print-sheet{display:none}
@page{margin:14mm}
@media print{
  html,body{background:#fff!important;color:#000!important}
  body{font-size:11pt;line-height:1.45}
  .topbar,#roleNav,#headerContext,#onlineStatus,footer,.nav,.btn,button,select,.edu-speak,.edu-speak-missing,
  .edu-reading-control,.edu21-legacy-controls,.tile-bank,.interactive-help,.lesson-nav,.edu23-phases,.edu-conjugueur,
  .role-hero,.top-actions,.diagnostic-secure-bar,iframe,video{display:none!important}
  *{box-shadow:none!important;text-shadow:none!important;animation:none!important}
  .card,.lesson-card,.section-head{border:none!important;background:#fff!important;padding:0!important;margin:0 0 8mm!important}
  .edu-lb,.edu23-block,.example,.tip,.edu-visual,.edu-gloss,figure,.edu-print-exo,table,li{break-inside:avoid;page-break-inside:avoid}
  h1,h2,h3{break-after:avoid;page-break-after:avoid}
  svg{max-width:100%;height:auto}
  a{color:#000;text-decoration:none}
  .progress,.edu-print-barre{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  body.edu-printing > *:not(#eduPrintSheet){display:none!important}
  body.edu-printing #eduPrintSheet{display:block!important}
}
.edu-print-doc{font-family:system-ui,-apple-system,"Segoe UI",sans-serif;color:#000}
.edu-print-head{border-bottom:2px solid #17324d;padding-bottom:4mm;margin-bottom:6mm}
.edu-print-head h1{font-size:20pt;margin:2mm 0}
.edu-print-head p{margin:1mm 0;color:#333}
.edu-print-marque{letter-spacing:.08em;color:#17324d}
.edu-print-nom{margin-top:5mm!important}
.edu-print-trait{display:inline-block;min-width:60mm;border-bottom:1px solid #000;height:1.1em;vertical-align:baseline}
.edu-print-trait.court{min-width:22mm}
.edu-print-exo{margin:0 0 7mm;padding:0 0 4mm;border-bottom:1px dotted #999}
.edu-print-exo h2{font-size:12.5pt;margin:0 0 3mm}
.edu-print-choix{list-style:none;margin:2mm 0 0;padding:0}
.edu-print-choix li{margin:1.5mm 0}
.edu-print-case{display:inline-block;width:4mm;height:4mm;border:1px solid #000;margin-right:2mm;vertical-align:-0.8mm}
.edu-print-ligne,.edu-print-phrase{margin:3mm 0 0;font-size:12pt}
.edu-print-phrase{font-size:13pt;line-height:1.8}
.edu-print-corrige{break-before:page;page-break-before:always}
.edu-print-reponses{padding-left:6mm}
.edu-print-reponses li{margin:2mm 0}
.edu-print-expl{color:#444;font-size:10pt}
.edu-print-chiffres{display:flex;gap:6mm;margin:0 0 6mm}
.edu-print-chiffres div{flex:1;border:1px solid #17324d;border-radius:3mm;padding:3mm;text-align:center}
.edu-print-chiffres strong{display:block;font-size:20pt}
.edu-print-table{width:100%;border-collapse:collapse}
.edu-print-table td{padding:2mm 1mm;border-bottom:1px solid #ccc}
.edu-print-table td.num{text-align:right;width:18mm;font-weight:700}
.edu-print-barre{display:inline-block;width:70mm;height:3.5mm;border:1px solid #17324d;border-radius:2mm;overflow:hidden;vertical-align:middle}
.edu-print-barre i{display:block;height:100%;background:#17324d}
.edu-print-liste{margin:2mm 0;padding-left:6mm}
.edu-print-mention{margin-top:8mm;padding-top:3mm;border-top:1px solid #999;font-size:9.5pt;color:#444}
.edu-print-exo .edu-visual{max-height:62mm;overflow:hidden}
.edu-print-exo .edu-visual svg{max-height:52mm;width:auto;max-width:100%}
.edu-print-bilan h2{margin:6mm 0 2mm;font-size:13pt}
.edu-print-bilan{margin:0}

/* V3.0 — carte « Révisions du jour » de l'accueil (P8) */
.edu-review-card{margin:14px 0}
.edu-review-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-top:1px solid #e4e9ef}
.edu-review-item>div{display:grid;gap:2px}

/* V3.5 — relecture des brouillons d'exercices (modération, administration) */
.draft-card{max-width:760px}
.draft-card h2{font-size:1.05rem;margin:8px 0}
.draft-choices{margin:6px 0 10px;padding-left:22px}
.draft-choices li{padding:2px 0}
.draft-choices .draft-correct{color:#0b6b3a}

/* V3.8 — cartes réelles (Natural Earth) : mer bleue, terres vertes, pays mis en valeur en orangé.
   Les couleurs suivent une carte scolaire ; aucune n'est choisie pour décorer. Le contraste du pays en couleur
   avec les terres voisines dépasse 3:1 (repère non textuel, WCAG 1.4.11). */
.edu-geomap .edu-visual-svg{max-width:760px;margin-inline:auto;display:block}
.eduv-gsea{fill:#bcdcf1}
.eduv-gframe{fill:none;stroke:#8fb7d6;stroke-width:1.2}
.eduv-gland{fill:#d7e5b4;stroke:#fff;stroke-width:.7;stroke-linejoin:round}
.eduv-gland.hi{fill:#e8923a;stroke:#b4621a;stroke-width:1}
.eduv-gcity{fill:#c53b43;stroke:#fff;stroke-width:1.4}
.eduv-gcity.highlight{fill:#2b5fb4}
.edu-geomap .eduv-continent-label{font:700 11px system-ui,sans-serif;fill:#2f4a33;paint-order:stroke;stroke:#fff;stroke-width:3px;stroke-linejoin:round}
.edu-geomap .eduv-city-label{paint-order:stroke;stroke:#fff;stroke-width:3px;stroke-linejoin:round}
.edu-geomap .eduv-note{fill:#35597a;paint-order:stroke;stroke:#fff;stroke-width:3px}
.edu-geomap .edu-visual-svg{max-height:78vh}
.eduv-pays-label{font:600 9.5px system-ui,sans-serif;fill:#2c3e2f;paint-order:stroke;stroke:#fff;stroke-width:2.4px;stroke-linejoin:round;pointer-events:none}
.eduv-gland.ext{fill:#e6ecd6;stroke:#fff}

/* V3.10 — bibliothèque d'exercices (administration) */
.lib-filtres{display:flex;flex-wrap:wrap;gap:10px 18px;align-items:end;margin:10px 0}
.lib-filtres label{display:grid;gap:3px;font-size:13px}
.lib-list{display:grid;gap:6px;margin:10px 0}
.lib-row{border:1px solid #dfe5ee;border-radius:10px;padding:6px 10px;background:#fff}
.lib-row summary{cursor:pointer;line-height:1.5}
.lib-detail{padding:6px 0 4px;font-size:14px}
.tag-danger{background:#fde7e7;color:#a12626}

/* Énigmes de logique (P11) */
.logic-cta{text-align:left}
.logic-card .logic-enonce{margin:8px 0}
.logic-genre-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;margin:14px 0}
.logic-genre{text-align:left}
.logic-genre-icon{font-size:2rem}
.logic-genre-actions{display:flex;gap:8px;flex-wrap:wrap}
.logic-play{display:flex;flex-direction:column;align-items:center;gap:12px;margin:12px 0}
.logic-board{width:min(100%,420px);height:auto;touch-action:manipulation}
.logic-veh,.logic-tige{cursor:pointer;outline-offset:2px}
.logic-veh:focus-visible rect,.logic-tige:focus-visible rect:first-child{stroke:#111;stroke-width:4}
.logic-pad{display:flex;align-items:center;gap:14px;justify-content:center}
.logic-pad .btn{min-width:56px;min-height:48px;font-size:1.3rem}
.logic-pad-wrap{flex-wrap:wrap}
.logic-pad-wrap .btn{font-size:1rem}
.logic-rives{display:grid;grid-template-columns:1fr auto 1fr;gap:10px;align-items:center;width:100%}
.logic-rive{border:2px solid #cfd6de;border-radius:10px;padding:10px;min-height:90px}
.logic-eau{font-size:1.4rem}
.logic-indices{text-align:left;max-width:560px;line-height:1.7}
.logic-solution{border-collapse:collapse}
.logic-solution th,.logic-solution td{padding:4px 10px;border-bottom:1px solid #d7dce1;text-align:left}
.logic-msg{margin:8px 0}
