
:root{
  --navy:#0f1f3d; --navy-line:#2b3c5e; --gold:#c9a84c; --gold-soft:#e7cf94;
  --ink:#33302a; --paper:#fffdf8; --parchment:#fbf6ea; --parchment-deep:#ece3cf;
  --green:#2e7d52; --green-bg:#eaf5ee; --red:#b03a3a; --red-bg:#fbecec;
  --muted:#7a7460; --shadow:0 18px 50px -28px rgba(15,31,61,.45);
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:'DM Sans',sans-serif;background:var(--parchment);color:var(--ink);line-height:1.6;font-size:16px}
.wrap{max-width:880px;margin:0 auto;padding:22px 18px 60px}
a{color:var(--navy)}

/* Header */
.back{display:inline-block;font-size:.82rem;color:var(--muted);text-decoration:none;font-weight:600;margin-bottom:14px}
.back:hover{color:var(--navy)}
header.hd{text-align:center;margin-bottom:20px}
.eyebrow{font-size:.74rem;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);font-weight:700;margin-bottom:8px}
header.hd h1{font-family:'DM Serif Display',serif;font-weight:400;color:var(--navy);font-size:clamp(1.8rem,6vw,2.6rem);line-height:1.1}
header.hd h1 em{font-style:italic;color:var(--gold)}
header.hd .sub{color:var(--muted);font-size:.95rem;margin-top:8px}

/* Tabs */
.tabs{position:sticky;top:0;z-index:30;display:flex;gap:6px;flex-wrap:wrap;justify-content:center;background:var(--parchment);padding:10px 0 12px;border-bottom:1px solid var(--parchment-deep);margin-bottom:26px}
a.tab{text-decoration:none;display:inline-block}
.tab{font:inherit;font-weight:600;font-size:.85rem;cursor:pointer;border:1.5px solid var(--parchment-deep);background:var(--paper);color:var(--navy);border-radius:999px;padding:9px 16px;transition:all .15s}
.tab:hover{border-color:var(--gold)}
.tab.active{background:var(--navy);color:#fff;border-color:var(--navy)}
.panel{display:none;animation:fade .25s ease}
.panel.active{display:block}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* Course content */
.card{background:var(--paper);border:1px solid var(--parchment-deep);border-radius:16px;padding:22px 24px;box-shadow:var(--shadow);margin-bottom:18px}
.sec-title{font-family:'DM Serif Display',serif;font-weight:400;color:var(--navy);font-size:1.4rem;margin:6px 0 12px;display:flex;align-items:center;gap:10px}
.sec-title .n{flex:0 0 34px;height:34px;border-radius:9px;background:var(--navy);color:var(--gold-soft);display:grid;place-items:center;font-family:'DM Sans';font-weight:700;font-size:1rem}
.card h3{font-size:1.05rem;color:var(--navy);font-weight:700;margin:16px 0 6px}
.card p{margin-bottom:10px}
.card ul{margin:0 0 12px 22px}
.card li{margin-bottom:5px}
.dfn{background:var(--parchment);border-left:4px solid var(--gold);border-radius:0 10px 10px 0;padding:12px 16px;margin:12px 0}
.dfn b{color:var(--navy)}
.ex{background:#f3f7fb;border:1px solid #dbe6f1;border-radius:10px;padding:11px 15px;margin:10px 0;font-size:.95rem}
.ex b{color:var(--navy)}
.tip{background:var(--green-bg);border-left:4px solid var(--green);border-radius:0 10px 10px 0;padding:11px 15px;margin:12px 0;font-size:.95rem}
.warn{background:#fdf3e3;border-left:4px solid var(--gold);border-radius:0 10px 10px 0;padding:11px 15px;margin:12px 0;font-size:.95rem}
.au-prog{display:grid;gap:8px;margin-top:4px}
.au-prog div{background:var(--parchment);border:1px solid var(--parchment-deep);border-radius:8px;padding:9px 14px;font-size:.92rem;font-weight:500;color:var(--navy)}
.num{font-variant-numeric:tabular-nums}
code{background:var(--parchment);border:1px solid var(--parchment-deep);border-radius:5px;padding:1px 6px;font-family:ui-monospace,monospace;color:var(--navy);font-size:.92em}

/* Exercises */
.lvl-head{font-family:'DM Serif Display',serif;font-weight:400;font-size:1.25rem;color:var(--navy);margin:24px 0 10px;display:flex;align-items:center;gap:10px}
.lvl-pill{font-size:.68rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#fff;padding:4px 11px;border-radius:999px}
.pill-f{background:var(--green)} .pill-m{background:var(--gold)} .pill-d{background:var(--red)}
.exo{background:var(--paper);border:1px solid var(--parchment-deep);border-radius:12px;padding:15px 18px;margin-bottom:12px;box-shadow:var(--shadow)}
.exo .q{font-weight:600;color:var(--navy);margin-bottom:6px}
.exo .q .lbl{font-weight:700;color:var(--gold);margin-right:6px}
details.corr{margin-top:10px;border-top:1px dashed var(--parchment-deep);padding-top:8px}
details.corr summary{cursor:pointer;font-size:.85rem;font-weight:700;color:var(--navy);list-style:none;display:inline-flex;align-items:center;gap:6px}
details.corr summary::-webkit-details-marker{display:none}
details.corr summary:before{content:"✓ Voir le corrigé";}
details.corr[open] summary:before{content:"✕ Masquer le corrigé";}
details.corr .body{margin-top:10px;background:var(--green-bg);border-radius:10px;padding:12px 15px;font-size:.94rem}

/* QCM */
.q-progress{height:7px;border-radius:999px;background:var(--parchment-deep);overflow:hidden;margin:12px 0 20px}
.q-progress>span{display:block;height:100%;background:linear-gradient(90deg,var(--gold),var(--gold-soft));width:0;transition:width .35s}
.levels{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
@media(max-width:620px){.levels{grid-template-columns:1fr}.tabs .tab{font-size:.78rem;padding:8px 12px}}
.level-card{text-align:left;cursor:pointer;border:1.5px solid var(--parchment-deep);background:var(--paper);border-radius:14px;padding:18px;transition:all .15s;box-shadow:var(--shadow)}
.level-card:hover{border-color:var(--accent,var(--gold));transform:translateY(-2px)}
.level-card h4{font-family:'DM Serif Display',serif;font-weight:400;font-size:1.25rem;color:var(--navy);margin-bottom:6px}
.level-card p{font-size:.86rem;color:var(--muted);margin-bottom:10px}
.level-card .count{font-size:.78rem;font-weight:700;color:var(--accent,var(--gold))}
.qmeta{font-size:.78rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:700}
.qmeta b{color:var(--navy)}
.qbadge{font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;font-weight:700;padding:5px 11px;border-radius:999px;color:#fff;background:var(--gold)}
.qtext{font-family:'DM Serif Display',serif;color:var(--navy);font-size:1.3rem;line-height:1.3;margin:6px 0 18px}
.opts{display:grid;gap:10px}
.opt{display:flex;align-items:flex-start;gap:12px;text-align:left;font:inherit;color:var(--ink);background:var(--parchment);border:1.5px solid var(--parchment-deep);border-radius:11px;padding:12px 14px;cursor:pointer;width:100%;transition:.13s}
.opt:hover:not(:disabled){border-color:var(--gold);background:#fbf6ea}
.opt .key{flex:0 0 26px;height:26px;border-radius:7px;background:var(--navy);color:#fff;display:grid;place-items:center;font-weight:700;font-size:.85rem}
.opt.correct{border-color:var(--green);background:var(--green-bg)} .opt.correct .key{background:var(--green)}
.opt.wrong{border-color:var(--red);background:var(--red-bg)} .opt.wrong .key{background:var(--red)}
.opt:disabled{cursor:default}
.qfb{margin-top:16px;border-radius:11px;padding:13px 15px;font-size:.93rem;border-left:4px solid var(--gold);background:#faf4e6;display:none}
.qfb.show{display:block} .qfb.ok{border-left-color:var(--green);background:var(--green-bg)} .qfb.no{border-left-color:var(--red);background:var(--red-bg)}
.qfb .verdict{font-weight:700;font-family:'DM Serif Display',serif;font-size:1.02rem;display:block;margin-bottom:2px}
.qfb.ok .verdict{color:var(--green)} .qfb.no .verdict{color:var(--red)}
.qnav{display:flex;justify-content:space-between;align-items:center;margin-top:20px;gap:14px}
.btn{font:inherit;font-weight:700;cursor:pointer;border:none;border-radius:11px;padding:12px 22px;font-size:.92rem;transition:.12s}
.btn-primary{background:var(--navy);color:#fff} .btn-primary:hover{transform:translateY(-2px)} .btn-primary:disabled{opacity:.35;cursor:not-allowed;transform:none}
.btn-ghost{background:transparent;color:var(--navy);border:1.5px solid var(--navy-line)} .btn-ghost:hover{background:var(--navy);color:#fff}
.result{text-align:center}
.ring-wrap{position:relative;width:160px;height:160px;margin:6px auto}
.ring-wrap svg{transform:rotate(-90deg)}
.ring-val{position:absolute;inset:0;display:grid;place-items:center;font-family:'DM Serif Display',serif;color:var(--navy)}
.ring-val .big{font-size:2.4rem;line-height:1} .ring-val .small{font-size:.9rem;color:var(--muted);font-family:'DM Sans'}
.result h3{font-family:'DM Serif Display',serif;color:var(--navy);font-weight:400;font-size:1.5rem;margin-top:8px}
.mention{display:inline-block;margin-top:8px;padding:6px 16px;border-radius:999px;background:var(--navy);color:var(--gold-soft);font-weight:700;font-size:.82rem}

/* Eval */
.eval-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;background:var(--navy);color:#fff;border-radius:14px;padding:16px 20px;margin-bottom:18px}
.eval-bar .meta{font-size:.9rem;color:rgba(255,255,255,.8)}
.eval-bar .meta b{color:#fff}
.timer{font-family:'DM Serif Display',serif;font-size:1.8rem;color:var(--gold-soft);letter-spacing:.03em}
.eval-exo{background:var(--paper);border:1px solid var(--parchment-deep);border-radius:12px;padding:16px 18px;margin-bottom:14px;box-shadow:var(--shadow)}
.eval-exo .head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:8px}
.eval-exo .head h4{font-size:1.05rem;color:var(--navy)}
.eval-exo .pts{font-size:.8rem;font-weight:700;color:var(--gold);white-space:nowrap}
.eval-exo ol{margin:6px 0 0 22px} .eval-exo li{margin-bottom:5px}

footer.ft{text-align:center;margin-top:40px;padding-top:22px;border-top:1px solid var(--parchment-deep);color:var(--muted);font-size:.82rem}
footer.ft b{color:var(--navy)} footer.ft .brand{color:var(--gold);font-weight:700}
footer.ft a{color:var(--navy);text-decoration:none;font-weight:600}

/* fractions, tableaux de numération, droite graduée */
.frac{display:inline-flex;flex-direction:column;text-align:center;vertical-align:middle;margin:0 3px;line-height:1.05;font-weight:600}
.frac .num{padding:0 5px;border-bottom:2px solid currentColor}
.frac .den{padding:0 5px}
.pv{width:100%;border-collapse:collapse;margin:12px 0;font-size:.8rem;text-align:center;overflow:hidden;border-radius:8px}
.pv th,.pv td{border:1px solid var(--parchment-deep);padding:6px 3px}
.pv .cls{background:var(--navy);color:var(--gold-soft);font-size:.62rem;letter-spacing:.06em;text-transform:uppercase;font-weight:700}
.pv th{background:#26365a;color:#fff;font-weight:600;font-size:.68rem}
.pv td{background:var(--paper);font-family:'DM Serif Display',serif;font-size:1.15rem;color:var(--navy)}
.pv td.virg{background:var(--parchment);color:var(--gold);font-weight:700}
.gradwrap{overflow-x:auto;margin:12px 0;padding-bottom:4px}
.gradwrap svg{display:block;min-width:560px}
.rule-tbl{width:100%;border-collapse:collapse;margin:10px 0;font-size:.86rem}
.rule-tbl th,.rule-tbl td{border:1px solid var(--parchment-deep);padding:8px 10px;text-align:center}
.rule-tbl th{background:var(--navy);color:#fff;font-weight:600;font-size:.8rem}
.rule-tbl td:first-child{text-align:left;font-weight:600;color:var(--navy);background:var(--parchment)}
.arrow-r{color:var(--green);font-weight:700}.arrow-l{color:var(--red);font-weight:700}

.go-next{margin-top:30px}
.nxt-row{display:flex;gap:10px;flex-wrap:wrap}
.nxt{flex:1 1 auto;text-align:center;text-decoration:none;font-weight:600;font-size:.9rem;background:var(--paper);border:1.5px solid var(--parchment-deep);color:var(--navy);border-radius:12px;padding:12px 14px;transition:all .15s}
.nxt:hover{border-color:var(--gold);background:var(--parchment)}
@media(max-width:620px){.pv,.rule-tbl{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}}


/* ---- Moteur exercices interactifs (.iex-*, .iblank, .ibtn, .iscore) ---- */
/* --- Moteur exercices interactifs --- */
#exos-root .iscore,#comp-root .iscore{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:space-between}
#iscore-txt{font-size:13.5px;color:var(--muted);flex:1;min-width:200px}
.ibtn{font-family:'DM Sans',sans-serif;font-size:13px;font-weight:600;color:#fff;background:var(--navy);border:1px solid var(--navy);border-radius:6px;padding:8px 16px;cursor:pointer;transition:filter .15s,background .15s}
.ibtn:hover{filter:brightness(1.12)}
.ibtn.ghost{background:transparent;color:var(--navy)}
.ibtn.ghost:hover{background:rgba(0,0,0,.04)}
.iex-head{font-size:14.5px;color:var(--navy);font-weight:500;margin-bottom:10px;line-height:1.5}
.iex-head .lbl{display:inline-block;background:var(--navy);color:#fff;font-size:11px;font-weight:700;padding:2px 9px;border-radius:4px;margin-right:8px;vertical-align:middle}
.iex-item{margin:9px 0;padding-left:2px}
.iq{font-size:14.5px;color:var(--ink,#1c2733);line-height:1.85}
.iblank{font-family:'DM Sans',sans-serif;font-size:14px;color:var(--navy);background:#fff;border:1.5px solid var(--border);border-radius:5px;padding:5px 9px;min-width:120px;outline:none;transition:border-color .15s,box-shadow .15s}
.iblank:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(201,168,76,.18)}
.iblank.itext{display:block;width:100%;margin-top:6px;resize:vertical;line-height:1.6}
.iblank.ok{border-color:#2e7d52;background:#f0f9f3}
.iblank.ko{border-color:#b03a3a;background:#fdf2f2}
.iblank.done{border-color:var(--gold);background:#fffdf5}
.ifb{display:none;font-size:13px;margin-top:5px;line-height:1.55}
.ifb.show{display:block}
.ifb.ok{color:#2e7d52}
.ifb.ko{color:#b03a3a}
.ifb.free{color:var(--muted)}
.iex-foot{margin-top:13px;display:flex;gap:9px;flex-wrap:wrap}
.ctext{font-style:italic;font-size:15px;line-height:2;color:var(--ink,#1c2733);background:var(--light);border-left:3px solid var(--gold);border-radius:0 6px 6px 0;padding:14px 16px}
.csub{font-size:13px;color:var(--muted);margin:-2px 0 6px}
@media(max-width:620px){.iblank{min-width:90px}.iex-head{font-size:14px}.iq{font-size:14px}}

/* ---- viz.js : graphiques & traceur de fonctions ---- */
.viz{margin:18px 0}
.viz svg{max-width:100%;height:auto;display:block;margin:0 auto}
.viz figure{margin:0}
.card .viz:first-child{margin-top:6px}

/* ---- viz.js : flashcards & association ---- */
.vz-h{font-weight:700;margin-bottom:10px;color:var(--navy)}
.vz-cap{text-align:center;font-size:.82rem;color:#6b7280;margin-top:10px}
.vz-fc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(135px,1fr));gap:11px}
.vz-fc{perspective:700px;background:none;border:0;padding:0;cursor:pointer;height:92px;font:inherit;display:block}
.vz-fc-in{position:relative;display:block;width:100%;height:100%;transition:transform .5s;transform-style:preserve-3d}
.vz-fc.flip .vz-fc-in{transform:rotateY(180deg)}
.vz-fc-f,.vz-fc-b{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:8px;border-radius:12px;-webkit-backface-visibility:hidden;backface-visibility:hidden;font-size:.95rem;line-height:1.25}
.vz-fc-f{background:#fff;color:var(--navy);font-weight:600;border:1.6px solid var(--gold)}
.vz-fc-b{background:var(--navy);color:#fff;transform:rotateY(180deg);border:1.6px solid var(--navy)}
.vz-match{display:flex;gap:14px}
.vz-col{flex:1;display:flex;flex-direction:column;gap:8px}
.vz-mi{font:inherit;text-align:left;padding:10px 12px;border:1.5px solid var(--border,#e4e8f0);background:#fff;border-radius:10px;cursor:pointer;color:var(--navy);transition:all .15s;line-height:1.3}
.vz-mi.sel{border-color:var(--navy);background:#eef2fd}
.vz-mi.ok{border-color:#2e7d52;background:#eafaf0;color:#2e7d52;cursor:default;opacity:.8}
.vz-mi.bad{border-color:#b03a3a;background:#fbeaea}
.vz-legend{display:flex;flex-wrap:wrap;gap:8px 16px;justify-content:center;margin-top:10px}
.vz-lg{display:inline-flex;align-items:center;gap:6px;font-size:.84rem;color:var(--navy)}
.vz-lg i{width:14px;height:14px;border-radius:3px;display:inline-block;border:1px solid rgba(0,0,0,.1)}
/* intro SEO repliée (indexable mais discrète) */
.seo-intro{margin-bottom:14px}
details.seo-intro{border:1px solid var(--line,#e7e2d6);border-radius:12px;background:#fff;overflow:hidden}
details.seo-intro>summary{cursor:pointer;list-style:none;padding:9px 14px;font-size:.8rem;font-weight:600;color:var(--muted);user-select:none}
details.seo-intro>summary::-webkit-details-marker{display:none}
details.seo-intro>summary::before{content:"▸";color:var(--gold);margin-right:7px;display:inline-block;transition:transform .15s}
details.seo-intro[open]>summary::before{transform:rotate(90deg)}
details.seo-intro .seo-intro-body{padding:2px 14px 12px;font-size:.86rem;color:var(--muted);line-height:1.6}
/* fallback : anciens <div class="seo-intro"> pas encore convertis */
div.seo-intro{font-size:.86rem;color:var(--muted);line-height:1.6;background:#fff;border:1px solid var(--line,#e7e2d6);border-radius:12px;padding:12px 14px}
