/* GÉNÉRÉ par tools/build.mjs à partir de src/css/ — ne pas modifier ce fichier. */
/* ===== src/css/00-legacy.css ===== */
/* ---- base (ancien <style> de <head>) ---- */
:root{color-scheme:light;box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}html{scroll-padding-top:env(safe-area-inset-top,0px)}body{margin:0;padding:0;font:14px -apple-system,BlinkMacSystemFont,sans-serif;background:#faf9f5;color:#141413}img{max-width:100%}[hidden]:not([hidden=until-found i]){display:none!important}
/* ---- styles principaux ---- */
  :root{
    --bg:#f5f1e7;
    --surface:#fffdf8;
    --surface-2:#eee7d6;
    --surface-3:#e4dcc6;
    --line:#d8cfb6;
    --line-strong:#c3b795;
    --ink:#211d14;
    --ink-soft:#6b6250;
    --ink-faint:#948a72;
    --accent:#1e4d7b;
    --accent-strong:#123253;
    --accent-soft:#e2ebf3;
    --accent-line:#a9c4dc;
    --on-accent:#fbf9f2;
    --success:#2f6d4c;
    --success-soft:#e2eee3;
    --success-line:#a9cbb0;
    --danger:#a23e2c;
    --danger-soft:#f5e4dd;
    --danger-line:#dcb09e;
    --warning:#8a5a12;
    --warning-soft:#f3e6c8;
    --warning-line:#d9bb7c;
    --backdrop:rgba(33,29,20,.45);
    --shadow-1:0 1px 2px rgba(33,29,20,.06), 0 1px 1px rgba(33,29,20,.04);
    --shadow-2:0 10px 30px rgba(33,29,20,.14), 0 2px 8px rgba(33,29,20,.08);
    --radius-s:5px;
    --radius-m:9px;
    --radius-l:14px;
    --font-display:"Source Serif 4", Georgia, "Times New Roman", serif;
    --font-body:"IBM Plex Sans", -apple-system, "Segoe UI", sans-serif;
    --font-mono:"IBM Plex Mono", "SFMono-Regular", Menlo, Consolas, monospace;
  }
  /* Le mode clair reste le défaut — le vrai TECCO est un examen papier sous
     éclairage de salle. Le mode nuit est un choix explicite du candidat,
     conservé dans ce navigateur; le thème du système n'est jamais suivi
     automatiquement, pour que l'entraînement se fasse par défaut dans les
     mêmes conditions que l'examen. */
  :root[data-theme="dark"]{
    color-scheme:dark;
    --bg:#14130f;
    --surface:#1d1b16;
    --surface-2:#26241d;
    --surface-3:#302d24;
    --line:#3a362b;
    --line-strong:#4c4738;
    --ink:#ece7da;
    --ink-soft:#b4ac98;
    --ink-faint:#8a8270;
    --accent:#84b6df;
    --accent-strong:#abcdea;
    --accent-soft:#1d2b37;
    --accent-line:#38546c;
    --on-accent:#0f141a;
    --success:#7cc195;
    --success-soft:#1a2a20;
    --success-line:#33543f;
    --danger:#e79b87;
    --danger-soft:#33201a;
    --danger-line:#6b3d31;
    --warning:#e0b365;
    --warning-soft:#332a16;
    --warning-line:#5f4d24;
    --backdrop:rgba(0,0,0,.62);
    --shadow-1:0 1px 2px rgba(0,0,0,.45), 0 1px 1px rgba(0,0,0,.3);
    --shadow-2:0 10px 30px rgba(0,0,0,.6), 0 2px 8px rgba(0,0,0,.45);
  }

  *{box-sizing:border-box;}
  body{
    margin:0;
    background:var(--bg);
    color:var(--ink);
    font-family:var(--font-body);
    font-size:15px;
    line-height:1.5;
    -webkit-font-smoothing:antialiased;
  }
  h1,h2,h3,h4{font-family:var(--font-display); font-weight:600; margin:0; text-wrap:balance; color:var(--ink);}
  p{margin:0;}
  button{font-family:inherit;}
  ::selection{ background:var(--accent-soft); }
  :focus-visible{ outline:2px solid var(--accent); outline-offset:2px; }
  a{color:var(--accent);}
  .mono{ font-family:var(--font-mono); font-variant-numeric:tabular-nums; }

  .wrap{ max-width:760px; margin:0 auto; padding:0 20px; }
  .wrap-wide{ max-width:920px; }

  /* ---------- buttons ---------- */
  .btn{
    display:inline-flex; align-items:center; justify-content:center; gap:.5em;
    font-family:var(--font-body); font-weight:600; font-size:14px;
    padding:11px 18px; border-radius:var(--radius-m);
    border:1px solid var(--line-strong); background:var(--surface); color:var(--ink);
    cursor:pointer; transition:transform .12s ease, box-shadow .12s ease, background .12s ease, border-color .12s ease;
    line-height:1.2;
  }
  .btn:hover{ box-shadow:var(--shadow-1); transform:translateY(-1px); }
  .btn:active{ transform:translateY(0); }
  .btn:disabled{ opacity:.4; cursor:not-allowed; transform:none; box-shadow:none; }
  .btn-primary{ background:var(--accent); border-color:var(--accent); color:var(--on-accent); }
  .btn-primary:hover{ background:var(--accent-strong); border-color:var(--accent-strong); }
  .btn-ghost{ background:transparent; }
  .btn-danger-text{ background:transparent; border-color:transparent; color:var(--danger); font-weight:600; padding:6px 8px; }
  .btn-lg{ padding:14px 26px; font-size:15.5px; }
  .btn-block{ width:100%; }

  /* ---------- home ---------- */
  .home{ padding-block:56px 80px; }
  .home-kicker{
    font-family:var(--font-mono); font-size:11.5px; letter-spacing:.11em; text-transform:uppercase;
    color:var(--accent); font-weight:600; display:flex; align-items:center; gap:9px; margin-bottom:14px;
  }
  .home-kicker::before{ content:""; width:7px; height:7px; border-radius:50%; background:var(--accent); display:inline-block; }
  .home h1{ font-size:clamp(28px,5vw,40px); line-height:1.12; margin-bottom:10px; }
  .home-sub{ color:var(--ink-soft); font-size:16px; max-width:56ch; margin-bottom:6px; }
  .home-byline{ color:var(--ink-faint); font-size:12.5px; margin-top:10px; }

  .infobox{
    margin-top:30px; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-l);
    padding:20px 22px; box-shadow:var(--shadow-1);
  }
  .infobox-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:0; }
  .infobox-cell{ padding:6px 18px; border-left:1px solid var(--line); }
  .infobox-cell:first-child{ border-left:none; padding-left:0; }
  .infobox-cell + .infobox-cell{ padding-right:0; }
  .infobox-label{ font-family:var(--font-mono); font-size:10.5px; text-transform:uppercase; letter-spacing:.09em; color:var(--ink-faint); margin-bottom:6px; }
  .infobox-value{ font-family:var(--font-display); font-size:19px; font-weight:600; color:var(--ink); }
  .infobox-note{ font-size:12.5px; color:var(--ink-soft); margin-top:3px; }

  .structure{ margin-top:34px; display:flex; flex-direction:column; gap:10px; }
  .structure-row{
    display:flex; align-items:center; gap:16px; background:var(--surface); border:1px solid var(--line);
    border-radius:var(--radius-m); padding:14px 18px;
  }
  .structure-tag{
    font-family:var(--font-mono); font-weight:600; font-size:12.5px; color:var(--accent); background:var(--accent-soft);
    border:1px solid var(--accent-line); border-radius:6px; padding:4px 9px; white-space:nowrap;
  }
  .structure-title{ font-weight:600; font-size:14.5px; flex:1; min-width:140px; }
  .structure-meta{ font-family:var(--font-mono); font-size:12.5px; color:var(--ink-soft); white-space:nowrap; }

  .rules{ margin-top:34px; }
  .rules h3{ font-size:15px; margin-bottom:12px; }
  .rules ul{ margin:0; padding-left:0; list-style:none; display:flex; flex-direction:column; gap:9px; }
  .rules li{ position:relative; padding-left:20px; font-size:13.8px; color:var(--ink-soft); }
  .rules li::before{ content:"—"; position:absolute; left:0; color:var(--ink-faint); }

  .home-cta{ margin-top:38px; display:flex; align-items:center; gap:16px; flex-wrap:wrap; }
  .home-resetlink{ font-size:12.5px; color:var(--ink-faint); background:none; border:none; cursor:pointer; text-decoration:underline; text-underline-offset:2px; padding:4px; }

  /* ---------- brief / lunch (instruction screens) ---------- */
  .brief{ padding-block:56px 70px; min-height:100vh; display:flex; flex-direction:column; justify-content:center; }
  .brief-eyebrow{ font-family:var(--font-mono); font-size:11.5px; text-transform:uppercase; letter-spacing:.1em; color:var(--accent); margin-bottom:10px; }
  .brief h1{ font-size:clamp(24px,4.4vw,32px); margin-bottom:8px; }
  .brief-sub{ color:var(--ink-soft); font-size:14.5px; margin-bottom:26px; }
  .brief-card{ background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-l); padding:24px 26px; box-shadow:var(--shadow-1); }
  .brief-card h3{ font-size:13px; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-faint); margin-bottom:14px; font-family:var(--font-mono); font-weight:600; }
  .brief-card ul{ margin:0 0 0; padding-left:0; list-style:none; display:flex; flex-direction:column; gap:11px; }
  .brief-card li{ position:relative; padding-left:22px; font-size:14px; color:var(--ink); line-height:1.55; }
  .brief-card li::before{ content:"›"; position:absolute; left:0; top:0; color:var(--accent); font-weight:700; }
  .brief-timerpreview{
    margin-top:20px; display:flex; align-items:center; gap:14px; background:var(--surface-2);
    border:1px solid var(--line); border-radius:var(--radius-m); padding:14px 18px;
  }
  .brief-timerpreview .mono{ font-size:22px; font-weight:600; color:var(--accent); }
  .brief-actions{ margin-top:28px; display:flex; gap:14px; align-items:center; flex-wrap:wrap; }

  .lunch{ text-align:left; }
  .lunch-stats{ display:flex; gap:24px; margin:22px 0 6px; flex-wrap:wrap; }
  .lunch-stat{ }
  .lunch-stat .val{ font-family:var(--font-display); font-size:28px; font-weight:600; }
  .lunch-stat .lab{ font-size:12px; color:var(--ink-faint); text-transform:uppercase; letter-spacing:.06em; margin-top:2px; }
  .autonotice{
    margin-top:18px; background:var(--warning-soft); border:1px solid var(--warning-line); color:var(--warning);
    border-radius:var(--radius-m); padding:12px 16px; font-size:13.5px; font-weight:500;
  }

  /* ---------- exam shell ---------- */
  .examShell{ min-height:100vh; display:flex; flex-direction:column; }
  .examTop{
    position:sticky; top:0; z-index:20; background:var(--bg); border-bottom:1px solid var(--line);
    padding:12px 20px 0;
  }
  .examTop-row1{ display:flex; align-items:baseline; justify-content:space-between; gap:12px; max-width:920px; margin:0 auto; }
  .examTop-title{ font-family:var(--font-display); font-weight:600; font-size:15.5px; }
  .examTop-title small{ display:block; font-family:var(--font-mono); font-weight:400; font-size:10.5px; color:var(--ink-faint); text-transform:uppercase; letter-spacing:.08em; margin-top:2px; }
  .examTop-progress{ font-family:var(--font-mono); font-size:12.5px; color:var(--ink-soft); white-space:nowrap; }
  .examTop-row2{ display:flex; align-items:center; justify-content:space-between; gap:14px; max-width:920px; margin:10px auto 0; flex-wrap:wrap; }
  .timer{ display:flex; align-items:baseline; gap:9px; padding:6px 12px; border-radius:8px; border:1px solid transparent; }
  .timer-label{ font-size:10.5px; text-transform:uppercase; letter-spacing:.07em; color:var(--ink-faint); font-family:var(--font-mono); }
  .timer-value{ font-family:var(--font-mono); font-weight:600; font-size:20px; font-variant-numeric:tabular-nums; color:var(--ink); }
  .timer.is-warning{ background:var(--warning-soft); border-color:var(--warning-line); }
  .timer.is-warning .timer-value{ color:var(--warning); }
  .timer.is-danger{ background:var(--danger-soft); border-color:var(--danger-line); animation:pulse 1.6s ease-in-out infinite; }
  .timer.is-danger .timer-value{ color:var(--danger); }
  @keyframes pulse{ 0%,100%{ opacity:1;} 50%{ opacity:.55;} }
  @media (prefers-reduced-motion:reduce){ .timer.is-danger{ animation:none; } }
  .examTop-actions{ display:flex; gap:9px; }
  .progressbar{ height:3px; background:var(--surface-3); margin-top:12px; }
  .progressbar-fill{ height:100%; background:var(--accent); transition:width .25s ease; }

  .examMain{ flex:1; max-width:760px; width:100%; margin:0 auto; padding:26px 20px 40px; }

  .casecard{
    background:var(--surface-2); border:1px solid var(--line); border-left:4px solid var(--accent);
    border-radius:var(--radius-m); padding:16px 19px; margin-bottom:18px;
  }
  .casecard-tag{ font-family:var(--font-mono); font-size:11px; text-transform:uppercase; letter-spacing:.07em; color:var(--accent); font-weight:600; margin-bottom:8px; }
  .casecard-body{ font-size:13.6px; color:var(--ink); line-height:1.65; white-space:pre-line; }

  .qcard{ background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-l); padding:26px 26px 22px; box-shadow:var(--shadow-1); }
  .qcard-meta{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:14px; }
  .qtag{
    font-family:var(--font-mono); font-size:11px; font-weight:600; color:var(--ink-soft); background:var(--surface-2);
    border:1px solid var(--line); border-radius:6px; padding:3px 9px;
  }
  .qtag-block{ color:var(--accent); background:var(--accent-soft); border-color:var(--accent-line); }
  .flagbtn{
    margin-left:auto; background:none; border:1px solid var(--line); border-radius:6px; padding:5px 10px;
    font-size:12px; font-weight:600; color:var(--ink-soft); cursor:pointer; font-family:var(--font-body);
  }
  .flagbtn.is-flagged{ background:var(--warning-soft); border-color:var(--warning-line); color:var(--warning); }
  .qtext{ font-size:clamp(17px,2.6vw,19px); line-height:1.5; margin-bottom:20px; font-weight:600; }

  .options{ display:flex; flex-direction:column; gap:10px; }
  .option{
    display:flex; align-items:flex-start; gap:13px; text-align:left; width:100%;
    background:var(--surface); border:1.5px solid var(--line); border-radius:var(--radius-m);
    padding:13px 16px; cursor:pointer; font-size:14.5px; line-height:1.5; color:var(--ink);
    transition:border-color .12s ease, background .12s ease;
  }
  .option:hover{ border-color:var(--accent-line); background:var(--accent-soft); }
  .option-letter{
    flex:none; width:24px; height:24px; border-radius:50%; border:1.5px solid var(--line-strong);
    display:flex; align-items:center; justify-content:center; font-family:var(--font-mono); font-weight:600; font-size:12px;
    color:var(--ink-soft); margin-top:1px;
  }
  .option.is-selected{ border-color:var(--accent); background:var(--accent-soft); }
  .option.is-selected .option-letter{ background:var(--accent); border-color:var(--accent); color:var(--on-accent); }
  .option-text{ flex:1; padding-top:1px; }

  .examFoot{
    max-width:760px; margin:0 auto; width:100%; padding:0 20px 34px; display:flex; align-items:center; justify-content:space-between; gap:10px;
  }
  .examFoot-hint{ font-size:11.5px; color:var(--ink-faint); font-family:var(--font-mono); text-align:center; flex:1; }

  /* Rendu volontairement visible (et non un lien discret) : c'est la seule
     issue disponible pendant une section chronométrée, quand la barre de
     navigation complète est masquée — elle doit se voir du premier coup. */
  .resetcorner{ position:fixed; bottom:16px; right:16px; z-index:30; display:flex; gap:8px; }
  .resetcorner button{
    font-family:var(--font-body); font-weight:600; font-size:12.5px; color:var(--ink);
    background:var(--surface); border:1.5px solid var(--line-strong); border-radius:8px;
    padding:9px 14px; cursor:pointer; box-shadow:var(--shadow-1);
  }
  .resetcorner button:hover{ box-shadow:var(--shadow-2); border-color:var(--accent-line); }
  .resetcorner button[data-action="backToPicker"]{ color:var(--accent-strong); }

  /* Ancré au viewport (et non au flux de la page), en haut à droite comme
     une languette suspendue du bord de l'écran — la marge réservée dans
     .tecconav-inner l'empêche de recouvrir le dernier onglet. */
  .themetoggle{
    position:fixed; top:0; right:18px; z-index:45;
    width:38px; height:27px; border-radius:0 0 10px 10px; display:flex; align-items:center; justify-content:center;
    background:var(--surface); border:1px solid var(--line-strong); border-top:none; color:var(--ink);
    font-size:14px; cursor:pointer; box-shadow:var(--shadow-1); opacity:.9;
  }
  .themetoggle:hover{ box-shadow:var(--shadow-2); opacity:1; }

  /* ---------- exam picker (letterhead-style cover screen) ---------- */
  .picker{ padding-block:56px 80px; }
  .picker-letterhead{ border-bottom:2px solid var(--ink); padding-bottom:16px; margin-bottom:28px; }
  .picker-letterhead-line{ font-family:var(--font-mono); font-size:11px; text-transform:uppercase; letter-spacing:.09em; color:var(--ink-soft); line-height:1.7; }
  .picker h1{ font-size:clamp(28px,5vw,40px); line-height:1.12; margin-bottom:10px; }
  .examcards{ margin-top:32px; display:flex; flex-direction:column; gap:16px; }
  .examcard{ background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-l); padding:22px 24px; box-shadow:var(--shadow-1); }
  .examcard-top{ display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:9px; flex-wrap:wrap; }
  .examcard-label{ font-family:var(--font-display); font-weight:600; font-size:19px; }
  .examcard-status{ font-family:var(--font-mono); font-size:10.5px; font-weight:600; text-transform:uppercase; letter-spacing:.04em; padding:4px 10px; border-radius:99px; white-space:nowrap; border:1px solid var(--line-strong); background:var(--surface-2); color:var(--ink-soft); }
  .examcard-status.status-progress{ background:var(--accent-soft); color:var(--accent-strong); border-color:var(--accent-line); }
  .examcard-status.status-done{ background:var(--success-soft); color:var(--success); border-color:var(--success-line); }
  .examcard-meta{ font-size:13px; color:var(--ink-soft); margin-bottom:18px; }

  .backlink{ display:inline-block; background:none; border:none; cursor:pointer; color:var(--ink-faint); font-size:12.5px; font-family:var(--font-body); padding:0; margin-bottom:18px; text-decoration:underline; text-underline-offset:2px; }
  .backlink:hover{ color:var(--accent); }

  /* ---------- navigator overlay ---------- */
  .navoverlay{ position:fixed; inset:0; z-index:50; display:flex; justify-content:flex-end; }
  .navoverlay-backdrop{ position:absolute; inset:0; background:var(--backdrop); }
  .navpanel{
    position:relative; width:min(420px,92vw); height:100%; background:var(--surface); border-left:1px solid var(--line);
    box-shadow:var(--shadow-2); display:flex; flex-direction:column; animation:slideIn .18s ease;
  }
  @keyframes slideIn{ from{ transform:translateX(16px); opacity:.6;} to{ transform:translateX(0); opacity:1;} }
  @media (prefers-reduced-motion:reduce){ .navpanel{ animation:none; } }
  .navpanel-head{ padding:18px 20px 12px; border-bottom:1px solid var(--line); display:flex; align-items:center; justify-content:space-between; }
  .navpanel-head h3{ font-size:16px; }
  .navpanel-close{ background:none; border:none; font-size:20px; cursor:pointer; color:var(--ink-soft); padding:2px 6px; }
  .navpanel-legend{ display:flex; gap:14px; padding:12px 20px; font-size:11.5px; color:var(--ink-soft); border-bottom:1px solid var(--line); flex-wrap:wrap; }
  .navpanel-legend span{ display:inline-flex; align-items:center; gap:5px; }
  .legend-dot{ width:9px; height:9px; border-radius:3px; display:inline-block; border:1.5px solid var(--line-strong); }
  .legend-dot.answered{ background:var(--accent-soft); border-color:var(--accent); }
  .legend-dot.flagged{ background:var(--warning-soft); border-color:var(--warning); }
  .navpanel-body{ flex:1; overflow-y:auto; padding:16px 20px 24px; }
  .navgroup{ margin-bottom:22px; }
  .navgroup h4{ font-family:var(--font-mono); font-size:11px; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-faint); font-weight:600; margin-bottom:10px; }
  .navgrid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(34px,1fr)); gap:6px; }
  .navcell{
    position:relative; aspect-ratio:1; border-radius:6px; border:1.5px solid var(--line); background:var(--surface-2);
    font-family:var(--font-mono); font-size:11.5px; font-weight:600; color:var(--ink-soft); cursor:pointer;
    display:flex; align-items:center; justify-content:center;
  }
  .navcell.is-answered{ background:var(--accent-soft); border-color:var(--accent-line); color:var(--accent-strong); }
  .navcell.is-current{ border-color:var(--accent); border-width:2px; box-shadow:0 0 0 2px var(--accent-soft); }
  .navcell.is-flagged::after{ content:""; position:absolute; top:-3px; right:-3px; width:8px; height:8px; border-radius:50%; background:var(--warning); border:1.5px solid var(--surface); }

  /* ---------- modal ---------- */
  .modal-scene{ position:fixed; inset:0; z-index:60; display:flex; align-items:center; justify-content:center; padding:20px; }
  .modal-backdrop{ position:absolute; inset:0; background:var(--backdrop); }
  .modal{ position:relative; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-l); padding:26px 28px; max-width:440px; width:100%; box-shadow:var(--shadow-2); }
  .modal h3{ font-size:19px; margin-bottom:12px; }
  .modal p{ font-size:14px; color:var(--ink-soft); margin-bottom:10px; line-height:1.55; }
  .modal-warn{ color:var(--warning); font-weight:500; }
  .modal-note{ font-size:12.5px; color:var(--ink-faint); }
  .modal-actions{ display:flex; justify-content:space-between; align-items:center; gap:10px; margin-top:20px; flex-wrap:wrap; }
  .modal-actions-right{ display:flex; gap:10px; flex-wrap:wrap; }

  /* ---------- results ---------- */
  .results{ padding-block:48px 90px; }
  .results-head{ margin-bottom:8px; }
  .results-kicker{ font-family:var(--font-mono); font-size:11.5px; text-transform:uppercase; letter-spacing:.1em; color:var(--accent); margin-bottom:10px; }
  .results h1{ font-size:clamp(26px,4.6vw,34px); }
  .results-sub{ color:var(--ink-soft); font-size:14px; margin-top:8px; }
  .results-topactions{ display:flex; align-items:center; gap:14px; flex-wrap:wrap; margin-top:20px; }
  .results-topactions-hint{ font-size:12px; color:var(--ink-faint); }

  .tiles{ display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin-top:28px; }
  .tile{ background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-m); padding:16px 16px 14px; }
  .tile.tile-hero{ background:var(--accent); border-color:var(--accent); color:var(--on-accent); }
  .tile-val{ font-family:var(--font-display); font-size:28px; font-weight:600; line-height:1; }
  .tile-lab{ font-size:11px; text-transform:uppercase; letter-spacing:.05em; color:var(--ink-faint); margin-top:8px; font-family:var(--font-mono); }
  .tile-hero .tile-lab{ color:var(--on-accent); opacity:.75; }
  .tile-sub{ font-size:11.5px; color:var(--ink-soft); margin-top:3px; }
  .tile-hero .tile-sub{ color:var(--on-accent); opacity:.85; }

  .breakdowns{ margin-top:40px; display:flex; flex-direction:column; gap:30px; }
  .breakdown h3{ font-size:15px; margin-bottom:4px; }
  .breakdown-sub{ font-size:12.5px; color:var(--ink-faint); margin-bottom:14px; }
  .barrow{ display:grid; grid-template-columns:minmax(120px,220px) 1fr auto; align-items:center; gap:12px; padding:7px 0; }
  .barrow-label{ font-size:13px; color:var(--ink); }
  .barrow-track{ height:8px; background:var(--surface-3); border-radius:5px; overflow:hidden; }
  .barrow-fill{ height:100%; background:var(--accent); }
  .barrow-fill.low{ background:var(--danger); }
  .barrow-fill.mid{ background:var(--warning); }
  .barrow-fill.high{ background:var(--success); }
  .barrow-value{ font-family:var(--font-mono); font-size:12px; color:var(--ink-soft); white-space:nowrap; }

  .review{ margin-top:48px; }
  .review-head{ display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-bottom:16px; }
  .review-head h2{ font-size:20px; }
  .chipbar{ display:flex; gap:8px; flex-wrap:wrap; margin-bottom:10px; }
  .chip{
    font-family:var(--font-mono); font-size:12px; font-weight:600; padding:6px 12px; border-radius:99px;
    border:1px solid var(--line); background:var(--surface); color:var(--ink-soft); cursor:pointer;
  }
  .chip.is-active{ background:var(--accent); border-color:var(--accent); color:var(--on-accent); }

  .review-item{ border:1px solid var(--line); border-radius:var(--radius-m); margin-bottom:9px; background:var(--surface); overflow:hidden; }
  .review-item summary{
    list-style:none; cursor:pointer; padding:12px 16px; display:flex; align-items:center; gap:10px;
    font-size:13.5px;
  }
  .review-item summary::-webkit-details-marker{ display:none; }
  .review-item summary::before{ content:"▸"; color:var(--ink-faint); font-size:11px; transition:transform .12s ease; flex:none; }
  .review-item[open] summary::before{ transform:rotate(90deg); }
  .review-badge{ font-family:var(--font-mono); font-size:10.5px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; padding:3px 8px; border-radius:5px; flex:none; }
  .status-correct .review-badge{ background:var(--success-soft); color:var(--success); border:1px solid var(--success-line); }
  .status-wrong .review-badge{ background:var(--danger-soft); color:var(--danger); border:1px solid var(--danger-line); }
  .status-blank .review-badge{ background:var(--surface-3); color:var(--ink-soft); border:1px solid var(--line-strong); }
  .review-num{ font-family:var(--font-mono); font-size:11.5px; color:var(--ink-faint); flex:none; }
  .review-snip{ color:var(--ink-soft); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; min-width:0; }
  .review-flag{ color:var(--warning); flex:none; }
  .review-pace{ font-size:11px; color:var(--ink-faint); flex:none; }
  .pacebox{ margin-top:34px; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-l); padding:20px 22px; }
  .pacebox h3{ font-size:15px; margin-bottom:14px; }
  .pacerow{ display:flex; align-items:baseline; justify-content:space-between; gap:14px; padding:9px 0; border-top:1px solid var(--line); }
  .pacerow:first-of-type{ border-top:none; }
  .pacerow-label{ font-size:13.5px; }
  .pacerow-val{ font-family:var(--font-mono); font-size:13px; color:var(--ink-soft); text-align:right; }
  .pacerow-val strong{ color:var(--ink); }
  .review-body{ padding:0 18px 18px 40px; }
  .review-case{ background:var(--surface-2); border-left:3px solid var(--accent); border-radius:6px; padding:10px 14px; font-size:12.5px; color:var(--ink-soft); margin-bottom:14px; line-height:1.6; }
  .review-qtext{ font-size:14.5px; font-weight:600; margin-bottom:12px; line-height:1.5; }
  .review-options{ list-style:none; margin:0 0 14px; padding:0; display:flex; flex-direction:column; gap:6px; }
  .review-options li{ display:flex; align-items:flex-start; gap:10px; padding:8px 12px; border-radius:7px; border:1px solid var(--line); font-size:13px; }
  .review-options li.is-correct{ background:var(--success-soft); border-color:var(--success-line); }
  .review-options li.is-chosen-wrong{ background:var(--danger-soft); border-color:var(--danger-line); }
  .review-letter{ font-family:var(--font-mono); font-weight:700; flex:none; }
  .review-tag{ margin-left:auto; font-size:10.5px; font-family:var(--font-mono); font-weight:700; color:var(--success); white-space:nowrap; }
  .review-tag-wrong{ color:var(--danger); }
  .review-explain{ font-size:13.2px; color:var(--ink-soft); line-height:1.65; background:var(--surface-2); border-radius:7px; padding:12px 14px; }

  .results-actions{ margin-top:44px; display:flex; gap:14px; align-items:center; flex-wrap:wrap; border-top:1px solid var(--line); padding-top:24px; }

  @media (max-width:640px){
    .infobox-grid{ grid-template-columns:1fr; }
    .infobox-cell{ border-left:none; border-top:1px solid var(--line); padding:12px 0 0; margin-top:12px; }
    .infobox-cell:first-child{ border-top:none; margin-top:0; padding-top:0; }
    .tiles{ grid-template-columns:repeat(2,1fr); }
    .barrow{ grid-template-columns:1fr; row-gap:4px; }
    .barrow-value{ justify-self:start; }
    .examFoot-hint{ display:none; }
    .review-body{ padding-left:16px; }
  }

  /* ---------- hub (module picker) ---------- */
  .hub{ padding-block:64px 90px; }
  .hub-eyebrow{ font-family:var(--font-mono); font-size:11.5px; text-transform:uppercase; letter-spacing:.11em; color:var(--accent); font-weight:600; margin-bottom:14px; display:flex; align-items:center; gap:9px; }
  .hub-eyebrow::before{ content:""; width:7px; height:7px; border-radius:50%; background:var(--accent); display:inline-block; }
  .hub-modules{ display:grid; grid-template-columns:repeat(2,1fr); gap:20px; margin-top:34px; }
  .modulecard{ background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-l); padding:24px 24px 22px; box-shadow:var(--shadow-1); display:flex; flex-direction:column; gap:12px; text-align:left; }
  .modulecard.is-disabled{ opacity:.62; }
  .modulecard-top{ display:flex; align-items:center; justify-content:space-between; gap:10px; }
  .modulecard-title{ font-family:var(--font-display); font-weight:600; font-size:22px; }
  .modulecard-status{ font-family:var(--font-mono); font-size:10.5px; font-weight:600; text-transform:uppercase; letter-spacing:.04em; padding:4px 10px; border-radius:99px; border:1px solid var(--line-strong); background:var(--surface-2); color:var(--ink-soft); white-space:nowrap; }
  .modulecard-desc{ font-size:14px; color:var(--ink-soft); line-height:1.55; flex:1; margin:0; }
  .hub-disclaimer{ margin-top:42px; font-size:12px; color:var(--ink-faint); border-top:1px solid var(--line); padding-top:16px; line-height:1.6; }
  .home-weak{ margin-top:14px; font-size:13.5px; color:var(--ink-soft); }
  .backupbox{ margin-top:34px; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-l); padding:20px 22px; }
  .trendbox{ margin-top:22px; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-l); padding:20px 22px; }
  .trendbox h3{ font-size:15px; margin-bottom:12px; }
  .trendbox svg{ width:100%; height:auto; display:block; }
  .trendnote{ font-size:13px; color:var(--ink-soft); margin-top:10px; }
  .backupbox h3{ font-size:15px; margin-bottom:8px; }
  .backupbox p{ font-size:13px; color:var(--ink-soft); line-height:1.6; margin-bottom:14px; max-width:64ch; }
  /* Champs de cas cliniques : texte enrichi (gras/souligné/surligné) via le
     menu contextuel .fmtmenu — clic droit sur un champ .casefmt pour l'ouvrir. */
  .casefmt{ white-space:pre-wrap; cursor:text; }
  .fmtmenu{ position:fixed; z-index:80; display:none; gap:2px; background:var(--surface); border:1px solid var(--line-strong); border-radius:8px; box-shadow:var(--shadow-2); padding:4px; }
  .fmtmenu.is-open{ display:flex; }
  .fmtmenu button{ width:32px; height:30px; border:none; background:none; border-radius:6px; cursor:pointer; font-size:13px; color:var(--ink); display:flex; align-items:center; justify-content:center; font-family:var(--font-body); }
  .fmtmenu button:hover{ background:var(--accent-soft); }
  .featurecard{ cursor:pointer; transition:transform .12s ease, box-shadow .12s ease; }
  .featurecard:hover{ box-shadow:var(--shadow-2); transform:translateY(-2px); }

  /* ---------- tecco top nav ---------- */
  .tecconav{ position:sticky; top:0; z-index:15; background:var(--bg); border-bottom:1px solid var(--line); }
  /* padding-right réserve la place du bouton mode nuit ancré en haut à
     droite du viewport, pour que les onglets ne passent jamais dessous sur
     un panneau étroit (au-delà de 920px, cette réserve tombe simplement
     dans la marge déjà laissée par max-width, sans effet visible). */
  .tecconav-inner{ max-width:920px; margin:0 auto; padding:0 64px 0 20px; display:flex; align-items:center; gap:18px; }

  /* Bascule persistante entre modules — même esprit que le sélecteur
     TCF/TEF de french-tcf.com : toujours visible, jamais besoin de revenir
     à une page d'accueil pour changer de module. */
  .modswitch{ display:flex; align-items:center; gap:6px; flex:none; padding:10px 0; }
  .modswitch-home{
    width:26px; height:26px; border-radius:50%; display:flex; align-items:center; justify-content:center;
    background:none; border:1px solid var(--line); color:var(--ink-faint); cursor:pointer; font-size:13px; flex:none;
  }
  .modswitch-home:hover{ color:var(--accent); border-color:var(--accent-line); }
  .modswitch-pills{ display:flex; background:var(--surface-2); border:1px solid var(--line); border-radius:99px; padding:2px; }
  .modpill{
    font-family:var(--font-mono); font-weight:600; font-size:11px; letter-spacing:.03em; text-transform:uppercase;
    padding:6px 12px; border-radius:99px; border:none; background:none; color:var(--ink-faint); cursor:pointer; white-space:nowrap;
  }
  .modpill.is-active{ background:var(--surface); color:var(--accent-strong); box-shadow:var(--shadow-1); }
  .teccotabs{ display:flex; gap:2px; flex:1; overflow-x:auto; scrollbar-width:thin; }
  .teccotab{ font-family:var(--font-body); font-weight:600; font-size:13px; color:var(--ink-soft); background:none; border:none; border-bottom:2px solid transparent; padding:14px 12px 12px; cursor:pointer; white-space:nowrap; }
  .teccotab:hover{ color:var(--ink); }
  .teccotab.is-active{ color:var(--accent-strong); border-bottom-color:var(--accent); }

  /* ---------- topic quiz (test par bloc) ---------- */
  .topicsetup{ padding-block:48px 80px; }
  .setuprow{ margin:26px 0; }
  .setuprow h3{ font-size:13px; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-faint); font-family:var(--font-mono); font-weight:600; margin-bottom:12px; }
  .scopegrid{ display:flex; flex-wrap:wrap; gap:8px; }
  .scopechip{ font-family:var(--font-body); font-size:13px; font-weight:500; padding:8px 13px; border-radius:8px; border:1px solid var(--line); background:var(--surface); color:var(--ink); cursor:pointer; }
  .scopechip:hover{ border-color:var(--accent-line); }
  .scopechip.is-active{ background:var(--accent); border-color:var(--accent); color:var(--on-accent); }
  .scopechip .cnt{ color:var(--ink-faint); margin-left:5px; font-family:var(--font-mono); font-size:11.5px; }
  .scopechip.is-active .cnt{ color:var(--on-accent); opacity:.75; }
  .countrow{ display:flex; align-items:center; gap:12px; }
  .countrow input{ width:84px; padding:10px 11px; border-radius:8px; border:1.5px solid var(--line-strong); font-family:var(--font-mono); font-size:15px; background:var(--surface); color:var(--ink); }
  .quizhead{ display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:18px; flex-wrap:wrap; }
  .quizprogress{ font-family:var(--font-mono); font-size:12.5px; color:var(--ink-soft); }
  .option.is-correct{ border-color:var(--success-line); background:var(--success-soft); }
  .option.is-wrong{ border-color:var(--danger-line); background:var(--danger-soft); }
  .option.is-correct .option-letter{ background:var(--success); border-color:var(--success); color:var(--on-accent); }
  .option.is-wrong .option-letter{ background:var(--danger); border-color:var(--danger); color:var(--on-accent); }
  .option[disabled]{ cursor:default; }
  .quiz-explain{ margin-top:16px; background:var(--surface-2); border-radius:9px; padding:14px 16px; font-size:13.5px; color:var(--ink-soft); line-height:1.6; }
  .qfig{ margin:14px 0 0; padding:12px; background:var(--surface); border:1px solid var(--line); border-radius:9px; overflow-x:auto; }
  .qfig svg{ display:block; width:100%; height:auto; min-width:420px; }
  .qfig img{ display:block; max-width:100%; height:auto; margin:0 auto; }
  .qfig figcaption{ margin-top:8px; font-size:10.5px; color:var(--ink-faint); font-family:var(--font-mono); text-align:right; }
  .scopechip[disabled]{ opacity:.45; cursor:not-allowed; }
  .setup-progress{ font-family:var(--font-mono); font-size:11px; color:var(--ink-faint); font-weight:400; text-transform:none; letter-spacing:0; margin-left:6px; }
  .setup-note{ font-size:12.5px; color:var(--warning); margin-top:10px; }
  .starlist{ margin-top:28px; }
  .starblock{ margin-bottom:26px; }
  .starblock h3{ font-size:14px; margin-bottom:10px; padding-bottom:8px; border-bottom:1px solid var(--line); }
  .quiz-foot{ margin-top:20px; display:flex; justify-content:flex-end; }
  .quizresults{ padding-block:48px 80px; }

  /* ---------- diagrams (pharma cheat sheets) ---------- */
  .diagrams{ padding-block:48px 80px; }
  .diagsearch{ width:100%; margin:22px 0 16px; padding:12px 14px; border-radius:9px; border:1.5px solid var(--line-strong); font-family:var(--font-body); font-size:14px; background:var(--surface); color:var(--ink); }
  .chiptabs{ display:flex; gap:8px; margin-bottom:20px; flex-wrap:wrap; }
  .diaggrid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:14px; }
  .diagcard{ text-align:left; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-m); padding:15px 16px; cursor:pointer; display:flex; flex-direction:column; gap:6px; font-family:inherit; }
  .diagcard:hover{ border-color:var(--accent-line); box-shadow:var(--shadow-1); }
  .diagcard-id{ font-family:var(--font-mono); font-size:11px; color:var(--accent); font-weight:600; }
  .diagcard-title{ font-family:var(--font-display); font-weight:600; font-size:15px; }
  .diagcard-desc{ font-size:12px; color:var(--ink-soft); line-height:1.4; }
  .diaglight-panel{ position:relative; background:var(--surface); border-radius:var(--radius-l); max-width:min(1100px,94vw); width:100%; max-height:92vh; display:flex; flex-direction:column; box-shadow:var(--shadow-2); overflow:hidden; }
  .diaglight-head{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:14px 18px; border-bottom:1px solid var(--line); font-size:14px; }
  /* text-align + margin:auto centers the image without flex — a flex
     align-items:center on an overflow:auto container makes the top of a
     tall image permanently unreachable by scroll (a known flexbox quirk);
     block layout keeps the whole image, including its top edge, scrollable. */
  .diaglight-body{ flex:1; overflow:auto; background:var(--surface-2); padding:14px; text-align:center; position:relative; }
  .diaglight-body img{ max-width:100%; height:auto; border-radius:6px; background:#fff; display:inline-block; }
  .qfig{ position:relative; }
  .zoomimg{ cursor:zoom-in; }
  .zoomimg.zoom-active{ cursor:zoom-out; outline:2px solid var(--accent); outline-offset:2px; }
  .zoomhint{ font-family:var(--font-mono); font-size:10.5px; color:var(--ink-faint); margin-top:8px; }
  /* Loupe rectangulaire, position:fixed pour rester ancrée au curseur en
     coordonnées écran — insensible au défilement ou à un cadre redimensionné,
     là où un calcul relatif à un ancêtre pouvait dériver du curseur réel. */
  .zoomlens{
    position:fixed; display:none; pointer-events:none; z-index:70;
    border:3px solid var(--accent); border-radius:10px; box-shadow:var(--shadow-2);
    background-repeat:no-repeat; background-color:#fff;
  }
  .diaglight-nav{ display:flex; align-items:center; justify-content:center; gap:16px; padding:12px; border-top:1px solid var(--line); }

  /* ---------- info / à propos ---------- */
  .infopage{ padding-block:48px 90px; }
  .infosection{ margin-top:38px; }
  .infosection h2{ font-size:18px; margin-bottom:6px; }
  .infosection-sub{ font-size:12.5px; color:var(--ink-faint); margin-bottom:16px; }
  .materials{ display:grid; grid-template-columns:1fr 1fr; gap:20px; margin-top:6px; }
  .materials-col h4{ font-size:13px; margin-bottom:10px; }
  .materials-col ul{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:8px; }
  .materials-col li{ font-size:13.5px; color:var(--ink-soft); padding-left:20px; position:relative; }
  .materials-col.allowed li::before{ content:"✓"; position:absolute; left:0; color:var(--success); font-weight:700; }
  .materials-col.forbidden li::before{ content:"✕"; position:absolute; left:0; color:var(--danger); font-weight:700; }
  .schedule{ margin-top:6px; display:flex; flex-direction:column; }
  .schedule-row{ display:grid; grid-template-columns:130px 1fr; gap:14px; padding:11px 0; border-bottom:1px solid var(--line); font-size:13.5px; }
  .schedule-time{ font-family:var(--font-mono); color:var(--accent); font-weight:600; }
  .samplecard{ background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-m); padding:16px 18px; margin-bottom:12px; }
  .samplecard-q{ font-weight:600; margin-bottom:10px; font-size:14px; }
  .samplecard ul{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:6px; }
  .samplecard li{ font-size:13px; color:var(--ink-soft); padding-left:18px; position:relative; }
  .samplecard li::before{ content:attr(data-letter); position:absolute; left:0; font-family:var(--font-mono); font-weight:700; color:var(--ink-faint); }
  .biblio-toggle{ margin-top:10px; font-size:12.5px; color:var(--accent); background:none; border:none; cursor:pointer; text-decoration:underline; text-underline-offset:2px; padding:0; }
  .biblio-list{ margin:14px 0 0; padding-left:20px; font-size:11.8px; color:var(--ink-soft); line-height:1.85; }
  .infodisclaimer{ margin-top:40px; background:var(--surface-2); border:1px solid var(--line); border-radius:var(--radius-m); padding:14px 18px; font-size:12.5px; color:var(--ink-soft); line-height:1.6; }

  /* ---------- study plan (editable spreadsheet) ---------- */
  /* Un tableur a besoin de largeur, pas de la même colonne de lecture que
     le reste de l'appli — on sort du gabarit .wrap-wide (920px) pour
     utiliser presque toute la largeur du panneau, quitte à rester sur
     .plantablewrap { overflow-x:auto } pour les feuilles à 14 colonnes. */
  .planpage{ padding-block:48px 90px; max-width:1600px; }
  .plan-toolbar{ display:flex; flex-direction:column; gap:12px; margin:22px 0 16px; }
  .plan-tabs{ overflow-x:auto; flex-wrap:nowrap; padding-bottom:2px; }
  .plan-toolbar-actions{ display:flex; gap:8px; flex-wrap:wrap; align-items:center; }
  .plan-toolbar-actions .btn{ font-size:12.5px; padding:8px 12px; }
  .plan-filelabel{ margin:0; }
  .plan-msg{ font-size:12.5px; color:var(--accent-strong); background:var(--accent-soft); border:1px solid var(--accent-line); border-radius:7px; padding:8px 12px; margin-bottom:12px; display:inline-block; }
  .plantablewrap{ overflow-x:auto; border:1px solid var(--line); border-radius:var(--radius-m); background:var(--surface); }
  .plantable{ border-collapse:collapse; width:100%; }
  .plantable th.plancell{ background:var(--surface-2); font-family:var(--font-mono); font-size:11px; text-transform:uppercase; letter-spacing:.03em; color:var(--ink-soft); position:sticky; top:0; z-index:1; }
  .plancell{ border:1px solid var(--line); padding:9px 11px; font-size:12.6px; line-height:1.5; min-width:170px; max-width:320px; white-space:pre-wrap; vertical-align:top; }
  .plancell:focus{ outline:2px solid var(--accent); outline-offset:-2px; background:var(--accent-soft); }
  .casefmt:focus:not(.plancell){ outline:2px solid var(--accent); outline-offset:2px; background:var(--accent-soft); border-radius:7px; }
  .casefmt:empty:not(.plancell)::before{ content:'Cliquez pour écrire…'; color:var(--ink-faint); }
  .plancell-ctl{ min-width:54px; max-width:54px; width:54px; text-align:center; background:var(--surface); border:1px solid var(--line); white-space:nowrap; }
  .rowdel{ background:none; border:none; color:var(--ink-faint); cursor:pointer; font-size:13px; padding:2px; }
  .plancell-colctl{ min-width:170px; max-width:320px; background:var(--surface-2); border:1px solid var(--line); text-align:center; padding:3px 4px; }
  .colctlbtn{ background:none; border:none; color:var(--ink-faint); cursor:pointer; font-size:10.5px; font-family:var(--font-mono); padding:2px 5px; border-radius:4px; }
  .colctlbtn:hover{ color:var(--accent); background:var(--accent-soft); }
  .colctlbtn-del:hover{ color:var(--danger); background:var(--danger-soft); }
  .colctlbtn[disabled]{ opacity:.3; cursor:not-allowed; }
  .colctlbtn[disabled]:hover{ background:none; }
  .rowdel:hover{ color:var(--danger); }
  .planselect{ width:100%; font-family:var(--font-body); font-size:12.3px; padding:6px 7px; border-radius:6px; border:1px solid var(--line-strong); background:var(--surface); color:var(--ink); }

  @media (max-width:640px){
    .hub-modules{ grid-template-columns:1fr; }
    .materials{ grid-template-columns:1fr; }
    .schedule-row{ grid-template-columns:1fr; row-gap:2px; }
    .diaglight-head .zoomhint{ display:none; }
  }

  /* Impression / « Enregistrer en PDF » depuis la page Révision : ne garde
     que le contenu de la liste (cas cliniques ou questions à revoir),
     masque toute la navigation et les contrôles interactifs. */
  @media print{
    body{ background:#fff; color:#141413; }
    .tecconav, .themetoggle, .resetcorner, .home-cta, .chipbar, .diagsearch,
    .home-kicker, .home-sub, .fmtmenu, button, select{ display:none !important; }
    .wrap, .wrap-wide{ max-width:none; }
    .starlist{ margin-top:0; }
    .review-item{ border:1px solid #999; break-inside:avoid; page-break-inside:avoid; margin-bottom:12px; }
    .review-item summary{ cursor:default; }
    .review-item summary::before{ display:none; }
    .starblock{ break-inside:auto; }
    .starblock h3{ break-after:avoid; }
    .casefmt{ color:#141413; background:transparent !important; }
  }



  /* ================= design pass 2026-09-25 ================= */
  :root{ --hero-bg:var(--accent); --on-hero:var(--on-accent); }
  :root[data-theme="dark"]{ --hero-bg:#1f3347; --on-hero:#dfeaf5; }
  @media (max-width:640px){ .today-actions .btn{ flex:1 1 100%; } }
  @media (max-width:640px){ .wrap{ padding-left:16px; padding-right:16px; } }
  /* Barre du haut : plus large, et sur deux rangées au téléphone pour que
     tous les onglets restent accessibles sans masquer le bouton de thème. */
  .tecconav-inner{ max-width:1180px; }
  .teccotab{ padding:14px 10px 12px; }
  @media (max-width:760px){
    .tecconav-inner{ flex-wrap:wrap; row-gap:0; padding:0 56px 0 16px; }
    .teccotabs{ flex:1 1 100%; order:2; margin:0 -56px 0 -16px; padding:0 8px; border-top:1px solid var(--line); }
    .teccotab{ padding:11px 10px 9px; font-size:12.5px; }
    .modswitch{ padding:8px 0; }
  }

  /* ================= Examens blancs — interface StudiUM (Moodle) =================
     Toujours clair, polices système : c'est l'apparence de l'écran le jour J,
     indépendamment du thème choisi dans le reste de l'appli. */
  .sx{
    --sx-bg:#ffffff; --sx-page:#f5f6f7; --sx-ink:#1d2125; --sx-soft:#495057; --sx-faint:#6a737b;
    --sx-line:#dee2e6; --sx-primary:#0f6cbf; --sx-primary-d:#0c589c; --sx-form:#e7f3f5; --sx-form-ink:#001a1e;
    --sx-info:#f8f9fa; --sx-flag:#ca3120; --sx-top:#ffffff; --sx-ans:#8f959e;
    color-scheme:light; min-height:100vh; background:var(--sx-page); color:var(--sx-ink);
    font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size:15px; line-height:1.5;
  }
  .sx *{ font-family:inherit; }
  .sx h1, .sx h2, .sx h3{ font-family:inherit; color:var(--sx-ink); }
  .sx-top{ position:sticky; top:env(safe-area-inset-top,0px); z-index:40; display:flex; align-items:center; gap:14px; height:56px; padding:0 16px; background:var(--sx-top); border-bottom:1px solid var(--sx-line); box-shadow:0 2px 4px rgba(0,0,0,.08); }
  .sx-brand{ font-size:18px; font-weight:400; color:var(--sx-primary); letter-spacing:.01em; }
  .sx-brand b{ font-weight:700; color:var(--sx-ink); }
  .sx-seb{ margin-left:auto; font-size:12px; color:var(--sx-faint); }
  .sx-drawerbtn{ display:none; width:36px; height:36px; border:1px solid var(--sx-line); border-radius:6px; background:var(--sx-bg); color:var(--sx-ink); font-size:16px; cursor:pointer; }
  .sx-layout{ display:grid; grid-template-columns:285px minmax(0,1fr); min-height:calc(100vh - 56px); }
  .sx-layout.sx-nodrawer{ grid-template-columns:minmax(0,1fr); }
  .sx-drawer{ background:var(--sx-bg); border-right:1px solid var(--sx-line); position:sticky; top:56px; height:calc(100vh - 56px); overflow-y:auto; }
  .sx-drawer-h{ display:flex; align-items:center; justify-content:space-between; padding:16px 16px 8px; }
  .sx-drawer-h h2{ font-size:17px; font-weight:700; margin:0; }
  .sx-x{ display:none; background:none; border:none; font-size:18px; cursor:pointer; color:var(--sx-soft); }
  .sx-drawer-b{ padding:0 16px 24px; display:flex; flex-direction:column; gap:14px; }
  .sx-qngroup-t{ font-size:12px; color:var(--sx-faint); margin-bottom:6px; }
  .sx-qn{ display:flex; flex-wrap:wrap; gap:6px; }
  .sx-qnb{ position:relative; width:30px; height:40px; padding:0; border:1px solid #adb5bd; border-radius:4px; background:var(--sx-bg); color:var(--sx-ink); cursor:pointer; display:flex; flex-direction:column; overflow:hidden; }
  .sx-qnn{ flex:1; display:flex; align-items:center; justify-content:center; font-size:12px; }
  .sx-qnl{ height:12px; border-top:1px solid #dee2e6; background:var(--sx-bg); }
  .sx-qnb.is-ans .sx-qnl{ background:var(--sx-ans); border-top-color:var(--sx-ans); }
  .sx-qnb.is-cur{ border:2px solid var(--sx-ink); }
  .sx-qnb.is-cur .sx-qnn{ font-weight:700; }
  .sx-qnb.is-flag::after{ content:""; position:absolute; top:0; right:0; border-style:solid; border-width:0 10px 10px 0; border-color:transparent var(--sx-flag) transparent transparent; }
  .sx-qnb:hover{ border-color:var(--sx-primary); }
  .sx-qnb:focus-visible, .sx-btn:focus-visible, .sx-opt:focus-within, .sx-flag:focus-visible{ outline:3px solid rgba(15,108,191,.5); outline-offset:1px; }
  .sx-linkbtn{ align-self:flex-start; background:none; border:none; padding:0; color:var(--sx-primary); font-size:14px; cursor:pointer; text-decoration:none; }
  .sx-linkbtn:hover{ text-decoration:underline; }
  .sx-util{ display:flex; flex-direction:column; gap:6px; margin-top:18px; padding-top:12px; border-top:1px dashed var(--sx-line); }
  .sx-util button{ background:none; border:none; padding:0; text-align:left; font-size:12px; color:var(--sx-faint); cursor:pointer; }
  .sx-util button:hover{ color:var(--sx-primary); }
  .sx-util-inline{ border:none; flex-direction:row; }
  .sx-main{ padding:24px clamp(16px,3vw,40px) 60px; max-width:1100px; width:100%; }
  .sx-intro{ max-width:860px; margin:0 auto; }
  .sx-crumbs{ font-size:13px; color:var(--sx-faint); margin-bottom:8px; }
  .sx-crumbs span{ margin:0 4px; }
  .sx-titlerow{ display:flex; align-items:flex-start; justify-content:space-between; gap:16px; flex-wrap:wrap; margin-bottom:18px; }
  .sx h1{ font-size:clamp(20px,2.4vw,26px); font-weight:700; margin:0 0 14px; line-height:1.25; text-wrap:balance; }
  .sx-titlerow h1{ margin:0; flex:1; min-width:240px; }
  .sx-h2{ font-size:22px; font-weight:700; margin:0 0 14px; }
  .sx-timer{ border:1px solid var(--sx-line); background:var(--sx-bg); border-radius:6px; padding:6px 12px; font-size:14px; white-space:nowrap; font-variant-numeric:tabular-nums; }
  .sx-timer span{ font-weight:700; margin-left:4px; }
  .sx-timer.is-low{ background:#f8d7da; border-color:#f1aeb5; color:#842029; }
  .sx-que{ display:grid; grid-template-columns:150px minmax(0,1fr); gap:14px; margin-bottom:18px; }
  .sx-info{ background:var(--sx-info); border:1px solid var(--sx-line); border-radius:6px; padding:10px; align-self:start; font-size:12.5px; color:var(--sx-soft); display:flex; flex-direction:column; gap:4px; }
  .sx-no{ font-size:14px; font-weight:400; margin:0 0 2px; color:var(--sx-ink); }
  .sx-no span{ font-size:20px; font-weight:700; margin-left:2px; }
  .sx-flag{ margin-top:6px; background:none; border:none; padding:0; text-align:left; color:var(--sx-primary); font-size:12.5px; cursor:pointer; }
  .sx-flag:hover{ text-decoration:underline; }
  .sx-flagic{ color:#adb5bd; }
  .sx-flag.is-on .sx-flagic, .sx-sumq .sx-flagic{ color:var(--sx-flag); }
  .sx-form{ background:var(--sx-form); color:var(--sx-form-ink); border-radius:6px; padding:16px 18px; }
  .sx-form-desc{ background:var(--sx-bg); border:1px solid var(--sx-line); line-height:1.65; }
  .sx-desc .sx-no{ font-weight:700; }
  .sx-qtext{ font-size:15.5px; margin-bottom:14px; }
  .sx-prompt{ font-size:14px; margin-bottom:6px; }
  .sx-answer{ display:flex; flex-direction:column; gap:2px; }
  .sx-opt{ display:flex; align-items:flex-start; gap:8px; padding:6px 8px; border-radius:4px; cursor:pointer; }
  .sx-opt:hover{ background:rgba(15,108,191,.07); }
  .sx-opt input{ margin:4px 0 0; width:16px; height:16px; accent-color:var(--sx-primary); flex:none; pointer-events:none; }
  .sx-ol{ flex:none; min-width:20px; }
  .sx-ot{ flex:1; }
  .sx-clear{ margin-top:8px; background:none; border:none; padding:0 8px; color:var(--sx-primary); font-size:13.5px; cursor:pointer; }
  .sx-clear:hover{ text-decoration:underline; }
  .sx .qfig{ background:var(--sx-bg); border-color:var(--sx-line); margin:0 0 14px; }
  .sx-pager{ display:flex; justify-content:space-between; gap:10px; margin-top:6px; padding-left:164px; }
  .sx-btn{ font-size:15px; padding:7px 14px; border-radius:6px; border:1px solid var(--sx-line); background:#ced4da; color:var(--sx-ink); cursor:pointer; line-height:1.4; }
  .sx-btn:hover{ background:#bfc6cd; }
  .sx-btn.sx-primary{ background:var(--sx-primary); border-color:var(--sx-primary); color:#fff; }
  .sx-btn.sx-primary:hover{ background:var(--sx-primary-d); }
  .sx-sumwrap{ overflow-x:auto; background:var(--sx-bg); border:1px solid var(--sx-line); border-radius:6px; }
  .sx-sum{ width:100%; border-collapse:collapse; font-size:14px; }
  .sx-sum th, .sx-sum td{ text-align:left; padding:7px 12px; border-bottom:1px solid var(--sx-line); }
  .sx-sum thead th{ font-weight:700; }
  .sx-sumsec th{ background:var(--sx-info); font-size:12.5px; color:var(--sx-soft); font-weight:600; }
  .sx-sum tbody tr:nth-child(even) td{ background:#fbfbfc; }
  .sx-sumq{ background:none; border:none; padding:0; color:var(--sx-primary); cursor:pointer; font-size:14px; }
  .sx-sumq:hover{ text-decoration:underline; }
  .sx-na{ color:var(--sx-faint); }
  .sx-sumact{ display:flex; flex-direction:column; align-items:center; gap:12px; margin-top:20px; text-align:center; }
  .sx-sumnote{ font-size:14px; color:var(--sx-soft); margin:0; }
  .sx-muted{ font-size:13.5px; color:var(--sx-faint); margin:12px 0 0; }
  .sx-introbox{ background:var(--sx-bg); border:1px solid var(--sx-line); border-radius:6px; padding:20px 22px; display:flex; flex-direction:column; gap:16px; align-items:flex-start; }
  .sx-rules{ margin:0; padding-left:20px; display:flex; flex-direction:column; gap:6px; font-size:14.5px; }
  .sx-meta{ display:grid; grid-template-columns:max-content 1fr; gap:6px 18px; margin:0; font-size:14px; }
  .sx-meta dt{ font-weight:700; }
  .sx-meta dd{ margin:0; }
  .sx-alert{ background:#fff3cd; border:1px solid #ffe69c; color:#664d03; border-radius:6px; padding:10px 14px; margin-bottom:14px; font-size:14px; }
  .sx-modal{ position:fixed; inset:0; z-index:80; display:flex; align-items:flex-start; justify-content:center; padding:60px 16px 16px; }
  .sx-modal-bd{ position:absolute; inset:0; background:rgba(0,0,0,.5); }
  .sx-modal-box{ position:relative; background:var(--sx-bg); border-radius:6px; width:min(500px,100%); box-shadow:0 8px 24px rgba(0,0,0,.25); }
  .sx-modal-h{ padding:14px 18px; border-bottom:1px solid var(--sx-line); font-size:19px; font-weight:700; }
  .sx-modal-c{ padding:16px 18px; font-size:14.5px; }
  .sx-modal-c p{ margin:0 0 8px; }
  .sx-modal-f{ padding:12px 18px; border-top:1px solid var(--sx-line); display:flex; justify-content:flex-end; gap:8px; }
  .sx-scrim{ display:none; }
  @media (max-width:900px){
    .sx-layout{ grid-template-columns:minmax(0,1fr); }
    .sx-drawerbtn{ display:inline-block; }
    .sx-drawer{ position:fixed; left:0; top:56px; bottom:0; height:auto; width:min(300px,86vw); z-index:60; transform:translateX(-102%); transition:transform .18s ease; box-shadow:4px 0 16px rgba(0,0,0,.15); }
    .sx-drawer.is-open{ transform:none; }
    .sx-x{ display:block; }
    .sx-scrim{ display:block; position:fixed; inset:56px 0 0 0; background:rgba(0,0,0,.35); z-index:55; }
    .sx-que{ grid-template-columns:minmax(0,1fr); gap:6px; }
    .sx-info{ flex-direction:row; flex-wrap:wrap; align-items:baseline; gap:4px 12px; }
    .sx-flag{ margin:0 0 0 auto; }
    .sx-pager{ padding-left:0; }
    .sx-seb{ display:none; }
  }
  @media (prefers-reduced-motion:reduce){ .sx-drawer{ transition:none; } }
  /* ================= plan hebdomadaire v3 ================= */
  .wp.planpage{ max-width:1500px; }
  .wp-top{ display:flex; align-items:flex-end; justify-content:space-between; gap:12px; flex-wrap:wrap; }
  .wp-top h1{ font-size:clamp(24px,4vw,32px); }
  .wp-stats{ display:flex; gap:8px; flex-wrap:wrap; }
  .wp-pill{ font-family:var(--font-mono); font-size:11.5px; font-weight:600; padding:5px 11px; border-radius:99px; border:1px solid var(--line-strong); background:var(--surface-2); color:var(--ink-soft); white-space:nowrap; }
  .wp-ahead{ background:var(--success-soft); border-color:var(--success-line); color:var(--success); }
  .wp-behind{ background:var(--danger-soft); border-color:var(--danger-line); color:var(--danger); }
  .wp-ontrack{ background:var(--accent-soft); border-color:var(--accent-line); color:var(--accent-strong); }
  .wp-now{ background:var(--accent-soft); border-color:var(--accent-line); color:var(--accent-strong); }
  .wp-weekhead{ background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-l); padding:16px 18px; margin-bottom:14px; box-shadow:var(--shadow-1); }
  .wp-weeknav{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:12px; }
  .wp-weeksel{ width:auto; max-width:min(460px,100%); flex:1; }
  .wp-weektitle h2{ font-size:20px; margin:8px 0 4px; outline:none; border-radius:6px; }
  .wp-weektitle h2:focus, .wp-note:focus{ background:var(--accent-soft); box-shadow:0 0 0 2px var(--accent-line); }
  .wp-note{ font-size:13px; color:var(--ink-soft); min-height:1.4em; outline:none; border-radius:6px; }
  .wp-note:empty::before{ content:attr(data-ph); color:var(--ink-faint); }
  .wp-weekbar{ margin-top:10px; border-radius:3px; overflow:hidden; }
  .wp-weekcount{ font-family:var(--font-mono); font-size:11px; color:var(--ink-faint); margin-top:6px; }
  .wp-grid{ display:grid; grid-template-columns:repeat(7, minmax(0,1fr)); gap:10px; align-items:start; }
  @media (max-width:1180px){ .wp-grid{ grid-template-columns:repeat(4, minmax(0,1fr)); } }
  @media (max-width:820px){ .wp-grid{ grid-template-columns:repeat(2, minmax(0,1fr)); } }
  @media (max-width:520px){ .wp-grid{ grid-template-columns:1fr; } }
  .wp-day{ background:var(--surface-2); border:1px solid var(--line); border-radius:var(--radius-m); padding:8px; min-height:120px; display:flex; flex-direction:column; gap:6px; transition:background .12s ease, border-color .12s ease; }
  .wp-day.is-today{ border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-soft); background:var(--surface); }
  .wp-day.is-over{ background:var(--accent-soft); border-color:var(--accent); border-style:dashed; }
  .wp-day-head{ display:flex; justify-content:space-between; align-items:baseline; font-family:var(--font-mono); font-size:11.5px; font-weight:600; color:var(--ink-soft); text-transform:uppercase; letter-spacing:.03em; padding:2px 2px 4px; }
  .wp-day.is-today .wp-day-head{ color:var(--accent-strong); }
  .wp-count{ font-weight:500; color:var(--ink-faint); }
  .wp-day-list{ display:flex; flex-direction:column; gap:6px; }
  .wp-task{ display:flex; gap:7px; align-items:flex-start; background:var(--surface); border:1px solid var(--line); border-radius:8px; padding:7px 6px 7px 8px; cursor:grab; }
  .wp-task:hover{ border-color:var(--accent-line); }
  .wp-task.is-dragging{ opacity:.45; }
  .wp-task.is-done .wp-task-text{ text-decoration:line-through; color:var(--ink-faint); }
  .wp-task.is-done{ background:var(--surface-2); }
  .wp-task.is-rolled{ border-left:3px solid var(--warning); }
  .wp-check{ margin-top:2px; width:16px; height:16px; accent-color:var(--accent); flex:none; cursor:pointer; }
  .wp-task-body{ flex:1; min-width:0; }
  .wp-task-meta{ display:flex; gap:4px; flex-wrap:wrap; margin-bottom:3px; }
  .wp-slot, .wp-kind, .wp-from{ font-family:var(--font-mono); font-size:9.5px; font-weight:600; padding:1px 5px; border-radius:4px; text-transform:uppercase; letter-spacing:.02em; }
  .wp-slot{ background:var(--surface-3); color:var(--ink-soft); }
  .wp-slot-am{ background:var(--warning-soft); color:var(--warning); }
  .wp-slot-pm{ background:var(--accent-soft); color:var(--accent-strong); }
  .wp-kind{ background:var(--success-soft); color:var(--success); }
  .wp-from{ background:var(--danger-soft); color:var(--danger); }
  .wp-task-text{ font-size:12.6px; line-height:1.4; outline:none; border-radius:4px; overflow-wrap:anywhere; cursor:text; }
  .wp-task-text:focus{ background:var(--accent-soft); box-shadow:0 0 0 2px var(--accent-line); }
  .wp-task-ctl{ display:flex; flex-direction:column; gap:2px; opacity:.35; transition:opacity .12s ease; }
  .wp-task:hover .wp-task-ctl, .wp-task:focus-within .wp-task-ctl{ opacity:1; }
  @media (hover:none){ .wp-task-ctl{ opacity:.8; } }
  .wp-ic{ background:none; border:none; cursor:pointer; color:var(--ink-faint); font-size:12px; padding:1px 4px; border-radius:4px; line-height:1.2; }
  .wp-ic:hover{ color:var(--accent); background:var(--accent-soft); }
  .wp-ic-del:hover{ color:var(--danger); background:var(--danger-soft); }
  .wp-addbtn{ background:none; border:1px dashed var(--line-strong); border-radius:7px; padding:5px; font-size:12px; color:var(--ink-faint); cursor:pointer; font-family:var(--font-body); margin-top:auto; }
  .wp-addbtn:hover{ color:var(--accent); border-color:var(--accent-line); }
  .wp-addform{ display:flex; flex-direction:column; gap:6px; }
  .wp-addinput{ width:100%; padding:7px 8px; border-radius:6px; border:1.5px solid var(--accent-line); font-family:var(--font-body); font-size:12.5px; background:var(--surface); color:var(--ink); }
  .wp-addbtns{ display:flex; gap:6px; }
  .wp-traywrap{ margin-bottom:14px; }
  .wp-traynote{ font-size:12.5px; color:var(--warning); margin-bottom:6px; }
  .wp-tray{ background:var(--warning-soft); border-color:var(--warning-line); min-height:auto; }
  .wp-tray .wp-day-list{ display:grid; grid-template-columns:repeat(auto-fill, minmax(230px,1fr)); }
  .wp-hint{ margin-top:14px; }
  .wp-book{ margin-bottom:28px; }
  .wp-bookhead{ display:flex; justify-content:space-between; align-items:baseline; margin-bottom:6px; }
  .wp-bookhead h3{ font-size:16px; }
  .wp-book .progressbar{ margin-bottom:10px; border-radius:3px; overflow:hidden; }
  .wp-table{ border-collapse:collapse; width:100%; font-size:13px; }
  .wp-table th{ background:var(--surface-2); font-family:var(--font-mono); font-size:10.5px; text-transform:uppercase; letter-spacing:.03em; color:var(--ink-soft); text-align:left; padding:8px 10px; border-bottom:1px solid var(--line); white-space:nowrap; }
  .wp-table td{ padding:8px 10px; border-bottom:1px solid var(--line); vertical-align:top; }
  .wp-table tr.is-full td{ background:var(--success-soft); }
  .wp-table input[type=checkbox]{ width:17px; height:17px; accent-color:var(--success); cursor:pointer; }
  .wp-cc, .wp-na{ text-align:center; }
  .wp-na{ color:var(--ink-faint); }
  .wp-pages{ font-family:var(--font-mono); font-size:11px; color:var(--ink-faint); margin-top:2px; }
  .wp-link{ background:none; border:none; padding:0; color:var(--accent); cursor:pointer; font-family:var(--font-mono); font-size:11.5px; text-decoration:underline; text-underline-offset:2px; white-space:nowrap; }
  .wp-alllist{ display:flex; flex-direction:column; gap:4px; }
  .wp-allrow{ display:grid; grid-template-columns:44px 70px 1fr 120px 60px; gap:10px; align-items:center; text-align:left; background:var(--surface); border:1px solid var(--line); border-radius:8px; padding:8px 12px; cursor:pointer; font-family:var(--font-body); font-size:13px; color:var(--ink); }
  .wp-allrow:hover{ border-color:var(--accent-line); }
  .wp-allrow.is-current{ border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-soft); }
  .wp-allid, .wp-allcount{ font-size:11.5px; color:var(--ink-soft); }
  .wp-alldate{ font-size:12px; color:var(--ink-faint); }
  .wp-alltitle{ min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .wp-allbar{ height:6px; background:var(--surface-3); border-radius:4px; overflow:hidden; display:block; }
  .wp-allbar span{ display:block; height:100%; background:var(--success); }
  .wp-phase{ font-family:var(--font-mono); font-size:9.5px; font-weight:700; padding:1px 5px; border-radius:4px; background:var(--surface-3); color:var(--ink-soft); margin-right:4px; }
  .wp-ph-P1{ background:var(--accent-soft); color:var(--accent-strong); }
  .wp-ph-P2{ background:var(--success-soft); color:var(--success); }
  .wp-ph-KMK{ background:var(--warning-soft); color:var(--warning); }
  .wp-ph-Mock, .wp-ph-Final{ background:var(--danger-soft); color:var(--danger); }
  @media (max-width:640px){ .wp-allrow{ grid-template-columns:40px 1fr 50px; } .wp-alldate, .wp-allbar{ display:none; } }
  .wp-phases{ margin-top:22px; }
  .wp-todaylist{ display:flex; flex-direction:column; gap:6px; margin:10px 0 4px; }
  .wp-todayitem{ display:flex; gap:9px; align-items:flex-start; font-size:14px; padding:8px 10px; border:1px solid var(--line); border-radius:8px; background:var(--surface); cursor:pointer; }
  .wp-todayitem input{ margin-top:3px; width:16px; height:16px; accent-color:var(--accent); flex:none; }
  .wp-todayitem.is-done span:last-child{ text-decoration:line-through; color:var(--ink-faint); }
  .wp-todayitem .wp-slot{ flex:none; margin-top:2px; }
  .wp-movesel{ font-size:10.5px; padding:1px 2px; border-radius:4px; border:1px solid var(--line); background:var(--surface); color:var(--ink-soft); max-width:46px; }
  @media (hover:hover) and (pointer:fine){ .wp-movesel{ display:none; } }
  .todaybox-head .wp-pill{ margin-left:auto; }

  /* ================= questions par chapitre (v28) ================= */
.ch-banner { border-color: var(--accent-line, var(--line)); }
.ch-grid { gap: 8px; }
.ch-chip { text-align: left; }
.ch-chip .ch-code { font-weight: 700; font-variant-numeric: tabular-nums; }
.ch-chip .ch-lu { display:inline-block; margin-right:6px; color: var(--success, #1a7f37); font-weight:700; }
.ch-mock { display:flex; gap:8px; align-items:flex-start; margin-top:12px; font-size:13.5px; line-height:1.45; color: var(--ink); }
.ch-mock input { margin-top:3px; flex:none; }
.ch-mock span { color: var(--ink-faint); }
.wp-practice { display:inline-block; margin-top:6px; padding:3px 9px; border-radius:999px; border:1px solid var(--line); background: var(--surface, transparent); color: var(--accent, inherit); font: inherit; font-size:11.5px; font-weight:600; cursor:pointer; white-space:normal; text-align:left; max-width:100%; }
.wp-practice:hover { background: var(--accent-soft, rgba(0,0,0,.05)); }

/* ================= extensions 2026-09 ================= */
  .kbd{ font-family:var(--font-mono); font-size:10px; font-weight:600; border:1px solid currentColor; border-radius:4px; padding:0 4px; opacity:.6; margin-left:4px; }
  .btn-sm{ padding:6px 10px; font-size:12.5px; }
  .btn-done{ background:var(--success-soft); border-color:var(--success-line); color:var(--success); }
  .navbadge{ display:inline-block; min-width:18px; padding:0 5px; border-radius:99px; background:var(--accent); color:var(--on-accent); font-family:var(--font-mono); font-size:10.5px; line-height:17px; text-align:center; margin-left:3px; }

  /* glossaire */
  .gl{ text-decoration:underline dotted var(--accent-line); text-decoration-thickness:1.5px; text-underline-offset:3px; cursor:help; }
  .glpop{ position:fixed; z-index:90; display:none; max-width:280px; background:var(--surface); border:1px solid var(--line-strong); border-radius:10px; box-shadow:var(--shadow-2); padding:10px 12px; font-size:13px; }
  .glpop-fr{ font-weight:700; font-family:var(--font-display); font-size:15px; display:flex; align-items:center; gap:6px; }
  .glpop-en{ color:var(--accent-strong); font-weight:600; margin-top:2px; }
  .glpop-cat{ font-family:var(--font-mono); font-size:10.5px; color:var(--ink-faint); text-transform:uppercase; letter-spacing:.05em; margin-top:4px; }
  .glpop-say, .fcsay{ background:none; border:1px solid var(--line); border-radius:6px; cursor:pointer; font-size:13px; padding:1px 6px; vertical-align:middle; }
  .glpop-say:hover, .fcsay:hover{ background:var(--accent-soft); }
  .glpop-add{ margin-top:8px; background:none; border:none; padding:0; color:var(--accent); font-size:12px; cursor:pointer; text-decoration:underline; text-underline-offset:2px; font-family:var(--font-body); }
  .glosslist{ display:flex; flex-direction:column; }
  .glossrow{ display:grid; grid-template-columns:1fr 1fr auto; gap:12px; align-items:center; padding:7px 4px; border-bottom:1px solid var(--line); font-size:13.5px; }
  .glossrow-fr{ font-weight:600; }
  .glossrow-en{ color:var(--ink-soft); }

  /* tuteur */
  .tutor{ margin-top:16px; border:1px dashed var(--accent-line); border-radius:10px; padding:12px 14px; background:var(--surface); }
  .tutor-bar{ display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
  .tutor-label{ font-family:var(--font-mono); font-size:11px; font-weight:700; color:var(--accent); text-transform:uppercase; letter-spacing:.06em; margin-right:4px; }
  .tutor-why{ display:inline-flex; gap:4px; align-items:center; font-size:12px; color:var(--ink-soft); }
  .tutor-why .chip{ padding:4px 9px; }
  .tutor-askrow{ display:flex; gap:8px; margin-top:10px; }
  .tutor-input{ flex:1; min-width:0; padding:8px 10px; border-radius:8px; border:1.5px solid var(--line-strong); background:var(--surface); color:var(--ink); font-family:var(--font-body); font-size:13px; }
  .tutor-out{ font-size:13.4px; line-height:1.6; color:var(--ink); }
  .tutor-out:not(:empty){ margin-top:12px; }
  .tutor-out p{ margin:0 0 8px; }
  .tutor-out ul{ margin:0 0 8px; padding-left:20px; }
  .tutor-h{ font-weight:700; color:var(--accent-strong); }
  .tutor-thinking{ color:var(--ink-faint); font-style:italic; }
  .tutor-gen{ background:var(--accent-soft); border:1px solid var(--accent-line); border-radius:8px; padding:10px 12px; display:flex; flex-direction:column; gap:8px; align-items:flex-start; }
  .review-tools{ display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin:0 0 12px; }
  .review-tools .flagbtn{ margin:0; }
  .causerow, .confrow{ display:flex; flex-wrap:wrap; gap:6px; align-items:center; margin-top:14px; font-size:12px; color:var(--ink-soft); }
  .causerow span:first-child, .confrow span:first-child{ font-family:var(--font-mono); font-size:11px; text-transform:uppercase; letter-spacing:.05em; margin-right:4px; }
  .causerow .chip, .confrow .chip{ padding:5px 10px; font-size:11.5px; }
  .confrow{ margin-top:18px; padding-top:14px; border-top:1px dashed var(--line); }
  .confbadge{ font-family:var(--font-mono); font-size:10px; padding:2px 7px; border-radius:99px; border:1px solid var(--line); color:var(--ink-soft); flex:none; }
  .confbadge.is-alert{ background:var(--danger-soft); color:var(--danger); border-color:var(--danger-line); }
  .calib-alert{ margin-top:12px; background:var(--danger-soft); border:1px solid var(--danger-line); color:var(--danger); border-radius:8px; padding:10px 12px; font-size:13px; }
  .qfig-stem{ margin:0 0 18px; }
  .qfig-stem svg{ min-width:0; max-height:360px; }
  .minibanner{ margin-top:22px; display:flex; align-items:center; justify-content:space-between; gap:16px; background:var(--surface); border:1px solid var(--accent-line); border-left:4px solid var(--accent); border-radius:var(--radius-m); padding:14px 18px; flex-wrap:wrap; }
  .minibanner div{ display:flex; flex-direction:column; gap:3px; font-size:13px; color:var(--ink-soft); }
  .minibanner strong{ color:var(--ink); font-size:14.5px; }
  .examcard-mini{ border-style:dashed; }
  .errtable{ border-collapse:collapse; width:100%; font-size:12px; }
  .errtable th, .errtable td{ border:1px solid var(--line); padding:6px 8px; text-align:center; }
  .errtable th:first-child{ text-align:left; font-weight:500; min-width:180px; }
  .errtable td.has{ background:var(--warning-soft); color:var(--warning); font-weight:700; }
  .trend-down{ color:var(--success); } .trend-up{ color:var(--danger); }

  /* accueil */
  .countdown{ margin-top:18px; display:flex; align-items:center; gap:18px; background:var(--hero-bg); color:var(--on-hero); border-radius:var(--radius-l); padding:16px 22px; flex-wrap:wrap; }
  .countdown-num{ font-size:44px; font-weight:700; line-height:1; }
  .countdown-txt{ display:flex; flex-direction:column; gap:2px; flex:1; min-width:200px; }
  .countdown-txt strong{ font-size:16px; }
  .countdown-txt span{ opacity:.85; font-size:13px; }
  .countdown-edit{ font-size:11.5px; display:inline-flex; gap:6px; align-items:center; opacity:.9; margin-top:4px; }
  .countdown-edit input{ font-family:var(--font-mono); font-size:12px; border-radius:6px; border:1px solid var(--line-strong); padding:3px 6px; background:var(--surface); color:var(--ink); }
  .readiness .countdown-edit{ opacity:1; color:var(--ink-soft); margin:0; }
  .readiness .countdown-edit input{ width:64px; }
  .todaybox{ margin-top:18px; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-l); padding:18px 20px; box-shadow:var(--shadow-1); }
  .todaybox-head{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:6px; }
  .todaybox-head h3{ font-size:17px; margin-right:6px; }
  .todaybox p{ font-size:13.4px; color:var(--ink-soft); line-height:1.55; }
  .today-topic{ margin-bottom:12px; }
  .today-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:14px; }
  .today-grid > div{ background:var(--surface-2); border-radius:8px; padding:10px 12px; }
  .today-actions{ display:flex; flex-wrap:wrap; gap:8px; margin-top:14px; }
  .readiness-head{ display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:8px; }
  .readiness-head h3{ margin:0; }
  .rdgroup{ margin-top:16px; }
  .rdgroup h4{ font-family:var(--font-mono); font-size:11px; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-faint); margin-bottom:6px; font-weight:600; }
  .rdrow{ display:grid; grid-template-columns:minmax(140px,2.2fr) 3fr 48px minmax(120px,1.3fr); gap:12px; align-items:center; padding:6px 0; border-bottom:1px solid var(--line); font-size:12.8px; }
  .rdrow-track{ position:relative; height:9px; background:var(--surface-3); border-radius:5px; }
  .rdrow-fill{ height:100%; border-radius:5px; background:var(--ink-faint); }
  .rd-ok .rdrow-fill{ background:var(--success); } .rd-mid .rdrow-fill{ background:var(--warning); } .rd-low .rdrow-fill{ background:var(--danger); }
  .rdrow-target{ position:absolute; top:-4px; bottom:-4px; width:2px; background:var(--ink); }
  .rdrow-status{ font-size:12px; font-weight:600; display:flex; flex-direction:column; }
  .rdrow-status em{ font-style:normal; font-weight:400; font-size:11px; color:var(--ink-faint); }
  .rd-ok .rdrow-status{ color:var(--success); } .rd-mid .rdrow-status{ color:var(--warning); } .rd-low .rdrow-status{ color:var(--danger); } .rd-na .rdrow-status{ color:var(--ink-faint); }

  /* cartes */
  .fcsummary{ display:flex; align-items:center; gap:28px; flex-wrap:wrap; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-l); padding:16px 20px; box-shadow:var(--shadow-1); }
  .fcsummary .tile-val{ font-size:26px; }
  .fcsummary .btn{ margin-left:auto; }
  .fcdecks-legend{ display:flex; gap:14px; font-size:11px; margin:14px 0 8px; flex-wrap:wrap; color:var(--ink-faint); }
  .c-new{ color:#2f7fe0; } .c-learn{ color:var(--danger); } .c-due{ color:var(--success); } .c-young{ color:#7cb35a; } .c-mature{ color:var(--success); }
  .fcdecks{ display:flex; flex-direction:column; gap:8px; }
  .fcdeck{ display:flex; align-items:center; gap:14px; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-m); padding:12px 14px; opacity:.7; }
  .fcdeck.is-on{ opacity:1; border-color:var(--accent-line); }
  .fcdeck-check{ display:flex; align-items:center; gap:8px; cursor:pointer; }
  .fcdeck-icon{ width:30px; height:30px; border-radius:8px; background:var(--accent-soft); display:flex; align-items:center; justify-content:center; font-size:15px; }
  .fcdeck-main{ flex:1; min-width:0; }
  .fcdeck-name{ font-weight:600; font-size:14px; }
  .fcdeck-desc{ font-size:12px; color:var(--ink-faint); }
  .fcdeck-counts{ display:flex; gap:12px; font-size:13px; font-weight:700; }
  .fcsettings{ margin-top:18px; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-m); padding:12px 16px; }
  .fcsettings summary{ cursor:pointer; font-weight:600; font-size:13.5px; }
  .fcsettings-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:14px; margin:14px 0 10px; }
  .fcsettings-grid label{ display:flex; flex-direction:column; gap:5px; font-size:12.5px; color:var(--ink-soft); }
  .fcsettings-grid input[type=number]{ width:90px; padding:7px 9px; border-radius:7px; border:1.5px solid var(--line-strong); background:var(--surface); color:var(--ink); font-family:var(--font-mono); }
  .fccheck{ display:flex !important; flex-direction:row !important; align-items:center; gap:8px; font-size:12.5px; color:var(--ink-soft); }
  .fcstudy-head{ display:flex; justify-content:space-between; align-items:center; gap:12px; margin-bottom:14px; }
  .fcstudy-count{ font-size:12px; color:var(--ink-faint); }
  .fccard{ background:var(--surface); border:1px solid var(--line); border-radius:18px; box-shadow:var(--shadow-2); padding:26px 28px; max-width:720px; margin:0 auto; min-height:300px; display:flex; flex-direction:column; }
  .fccard-meta{ display:flex; gap:6px; flex-wrap:wrap; margin-bottom:18px; }
  .fccard-text{ font-family:var(--font-display); font-size:clamp(22px,4vw,30px); font-weight:600; text-align:center; line-height:1.3; white-space:pre-line; }
  .fccard-text.is-long{ font-family:var(--font-body); font-size:16px; font-weight:500; text-align:left; line-height:1.55; }
  .fccard-sub{ text-align:center; color:var(--ink-faint); font-size:13px; margin-top:8px; }
  .fccard-front{ padding-bottom:18px; }
  .fccard.is-revealed .fccard-front{ border-bottom:1px dashed var(--line-strong); margin-bottom:18px; }
  .fccard-back{ font-size:14.5px; line-height:1.6; }
  .fccard-back .fccard-text{ color:var(--accent-strong); }
  .fccard-back img{ display:block; max-width:100%; margin:8px auto; border-radius:6px; background:#fff; }
  .fc-formula{ font-family:var(--font-mono); font-size:19px; font-weight:600; text-align:center; background:var(--surface-2); border-radius:8px; padding:12px; margin-bottom:10px; color:var(--accent-strong); }
  .fchint{ text-align:center; color:var(--ink-faint); font-size:13px; margin:auto 0 0; }
  .fcheard{ text-align:center; color:var(--ink-soft); font-size:13px; margin-top:8px; }
  .fccard .home-cta{ justify-content:center; margin-top:20px; }
  .fctype{ width:100%; padding:13px 14px; font-size:17px; border-radius:10px; border:1.5px solid var(--line-strong); background:var(--surface); color:var(--ink); font-family:var(--font-body); text-align:center; margin-top:auto; }
  .fcmic{ margin:10px auto 0; display:flex; }
  .fccompare{ display:flex; justify-content:space-between; gap:10px; margin-top:14px; padding:9px 12px; border-radius:8px; font-size:13px; flex-wrap:wrap; }
  .fccompare.ok{ background:var(--success-soft); color:var(--success); } .fccompare.mid{ background:var(--warning-soft); color:var(--warning); } .fccompare.bad{ background:var(--danger-soft); color:var(--danger); }
  .fcgrades{ display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-top:22px; }
  .fcgrade{ display:flex; flex-direction:column; align-items:center; gap:2px; padding:10px 6px; border-radius:10px; border:1.5px solid var(--line); background:var(--surface); cursor:pointer; font-family:var(--font-body); font-weight:600; font-size:13.5px; color:var(--ink); }
  .fcgrade-ivl{ font-family:var(--font-mono); font-size:11px; font-weight:500; color:var(--ink-faint); }
  .fcgrade-again{ border-color:var(--danger-line); } .fcgrade-again:hover{ background:var(--danger-soft); }
  .fcgrade-hard{ border-color:var(--warning-line); } .fcgrade-hard:hover{ background:var(--warning-soft); }
  .fcgrade-good{ border-color:var(--success-line); } .fcgrade-good:hover{ background:var(--success-soft); }
  .fcgrade-easy{ border-color:var(--accent-line); } .fcgrade-easy:hover{ background:var(--accent-soft); }
  .fcgrade.is-suggested{ box-shadow:0 0 0 3px var(--accent-soft); border-width:2px; }
  .fctools{ text-align:center; margin-top:12px; font-size:12px; color:var(--ink-faint); }
  .fcdone{ max-width:560px; margin:30px auto; text-align:center; background:var(--surface); border:1px solid var(--line); border-radius:18px; padding:30px; }
  .fcdone h2{ font-size:24px; margin-bottom:8px; }
  .fcdone .home-cta{ justify-content:center; }
  .fcadd{ margin-bottom:22px; }
  .fcadd-grid{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }
  .fcadd-grid label{ display:flex; flex-direction:column; gap:5px; font-size:12px; color:var(--ink-soft); }
  .fcadd-grid textarea{ padding:9px 11px; border-radius:8px; border:1.5px solid var(--line-strong); background:var(--surface); color:var(--ink); font-family:var(--font-body); font-size:13.5px; resize:vertical; }
  .fcrows{ display:flex; flex-direction:column; border:1px solid var(--line); border-radius:var(--radius-m); background:var(--surface); overflow:hidden; }
  .fcrow{ display:grid; grid-template-columns:1.2fr 1.4fr 150px auto; gap:10px; align-items:center; padding:8px 12px; border-bottom:1px solid var(--line); font-size:12.8px; }
  .fcrow-front{ font-weight:600; }
  .fcrow-back{ color:var(--ink-soft); }
  .fcrow.is-hidden{ opacity:.5; }
  .ch-cumul{ border-color:var(--accent-line); background:var(--accent-soft); }
  .pq-row{ display:grid; grid-template-columns:1fr 1fr 1fr; gap:12px; margin:14px 0 6px; }
  .pq-card{ text-align:left; display:flex; flex-direction:column; gap:4px; padding:14px 16px; border-radius:14px; border:1px solid var(--accent-line); background:var(--accent-soft); color:var(--ink); cursor:pointer; font-family:var(--font-body); }
  .pq-card b{ font-size:16.5px; color:var(--accent-strong); } .pq-card span{ font-size:13.5px; color:var(--ink-soft); }
  @media (max-width:760px){ .pq-row{ grid-template-columns:1fr; } }
  .fccard-rich{ font-size:17px; line-height:1.55; text-align:left; color:var(--ink); max-width:680px; margin:0 auto; }
  .fccard-rich strong{ color:var(--accent-strong); font-size:18.5px; }
  .wk-list{ display:flex; flex-direction:column; gap:10px; }
  .qk > summary, .rp > summary{ cursor:pointer; list-style:none; display:flex; align-items:baseline; justify-content:space-between; gap:10px; }
  .qk-steps{ display:flex; flex-direction:column; gap:10px; margin-top:14px; }
  .qk-step{ display:flex; align-items:center; gap:14px; padding:12px 14px; border:1px solid var(--line); border-radius:14px; background:var(--bg); }
  .qk-step.is-done{ opacity:.6; }
  .qk-n{ width:32px; height:32px; border-radius:50%; background:var(--accent-soft); color:var(--accent-strong); display:flex; align-items:center; justify-content:center; font-weight:700; flex:none; }
  .qk-t{ flex:1; display:flex; flex-direction:column; gap:2px; min-width:0; } .qk-t b{ font-size:16px; } .qk-t span{ font-size:13.5px; color:var(--ink-soft); }
  .rp-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-top:14px; }
  .rp-c{ border:1px solid var(--line); border-radius:14px; padding:12px 14px; background:var(--bg); display:flex; flex-direction:column; gap:3px; }
  .rp-c strong{ font:700 24px/1.1 var(--font-display); } .rp-c span{ font-size:13px; color:var(--ink-soft); }
  @media (max-width:760px){ .rp-grid{ grid-template-columns:1fr; } }
  .wk-row{ display:grid; grid-template-columns:minmax(0,1.4fr) minmax(80px,1fr) 110px auto; gap:12px; align-items:center; }
  .wk-name{ font-weight:600; font-size:15px; }
  .wk-bar{ height:10px; border-radius:99px; background:var(--surface-3); overflow:hidden; }
  .wk-bar span{ display:block; height:100%; border-radius:99px; }
  .wk-pct{ font-size:14px; } .wk-pct small{ color:var(--ink-faint); }
  .wk-note{ margin:12px 0 0; font-size:14px; color:var(--ink-soft); line-height:1.8; }
  .offbox{ margin-top:18px; padding:14px 16px; border:1px solid var(--line); border-radius:14px; background:var(--bg); }
  .offbox h3{ margin:0 0 6px; font-size:17px; } .offbox p{ margin:6px 0; font-size:14.5px; line-height:1.5; }
  @media (max-width:760px){ .wk-row{ grid-template-columns:1fr auto; } .wk-bar{ grid-column:1 / -1; order:3; } }
  .wppart{ position:fixed; inset:0; z-index:95; background:rgba(20,18,12,.5); display:flex; align-items:center; justify-content:center; padding:16px; }
  .wppart .modal{ background:var(--surface); color:var(--ink); border-radius:16px; padding:22px; width:100%; box-shadow:0 12px 40px rgba(0,0,0,.3); max-height:90vh; overflow:auto; }
  .wppart textarea{ font:inherit; border:1px solid var(--line); border-radius:8px; padding:8px; background:var(--bg); color:var(--ink); }
  .fcglobalsearch{ margin:0 0 16px; }
  .fcbulk{ display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px; margin:10px 0 2px; }
  .fcimg{ display:block; max-width:100%; max-height:52vh; margin:12px auto 0; border-radius:10px; border:1px solid var(--line); background:#fff; }
  .fcimgbox{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-top:8px; }
  .fcimgprev{ display:flex; align-items:center; gap:8px; }
  .fcimgprev img{ max-height:90px; max-width:160px; border-radius:8px; border:1px solid var(--line); }
  .fcimgprev .fcimg{ max-height:90px; margin:0; }
  .fcimgbtn{ cursor:pointer; }
  .fccard-note{ margin-top:12px; padding:10px 12px; border-left:3px solid var(--accent); background:var(--surface-2); border-radius:8px; font-size:15px; text-align:left; line-height:1.5; }
  .fcrow-meta{ font-size:10.5px; color:var(--ink-faint); }
  .fcrow-act{ display:flex; gap:2px; flex-wrap:wrap; justify-content:flex-end; }
  .fcsegs{ display:flex; height:14px; border-radius:7px; overflow:hidden; background:var(--surface-3); }
  .fcseg.s-new{ background:#2f7fe0; } .fcseg.s-learn{ background:var(--danger); } .fcseg.s-young{ background:#7cb35a; } .fcseg.s-mature{ background:var(--success); }
  .fcbars{ display:grid; grid-template-columns:repeat(14,1fr); gap:6px; height:130px; align-items:end; }
  .fcbar{ display:flex; flex-direction:column; align-items:center; justify-content:flex-end; height:100%; gap:3px; font-size:9.5px; color:var(--ink-faint); position:relative; }
  .fcbar-fill{ width:100%; background:var(--accent); border-radius:4px 4px 0 0; min-height:2px; }
  .fcbar em{ font-style:normal; position:absolute; top:0; }

  .fcpage, .drills{ padding-block:48px 90px; }
  /* calculs */
  .drill-card{ margin-top:10px; }
  .drill-card .qtext b{ color:var(--accent-strong); }
  .drill-inputs{ display:flex; gap:14px; flex-wrap:wrap; }
  .drill-field{ display:flex; align-items:center; gap:8px; font-size:13px; color:var(--ink-soft); }
  .drill-field input{ width:120px; padding:10px 12px; border-radius:8px; border:1.5px solid var(--line-strong); font-family:var(--font-mono); font-size:16px; background:var(--surface); color:var(--ink); }
  .drill-field em{ font-style:normal; font-family:var(--font-mono); font-size:12px; color:var(--ink-faint); }
  .drill-fb{ margin-top:16px; border-radius:9px; padding:12px 14px; font-size:13.5px; line-height:1.6; }
  .drill-fb.ok{ background:var(--success-soft); border:1px solid var(--success-line); }
  .drill-fb.bad{ background:var(--danger-soft); border:1px solid var(--danger-line); }
  .drill-fb p{ margin-top:6px; color:var(--ink); }
  .formulalist{ display:flex; flex-direction:column; margin-top:10px; }
  .formularow{ display:grid; grid-template-columns:1fr 1.2fr 2fr; gap:12px; padding:8px 0; border-bottom:1px solid var(--line); font-size:12.5px; }
  .formularow span{ color:var(--accent-strong); }
  .formularow em{ font-style:normal; color:var(--ink-soft); }

  /* diagrammes : mode rappel */
  .diaglight-tools{ display:flex; gap:6px; flex-wrap:wrap; align-items:center; flex:1; justify-content:center; }
  .diaglight-tools .chip{ padding:5px 10px; font-size:11px; }
  .occl-wrap{ position:relative; display:inline-block; max-width:100%; }
  .occl-wrap img{ display:block; }
  .occl-grid{ position:absolute; inset:0; display:grid; gap:2px; }
  .occl-tile{ border:none; background:var(--surface-3); border-radius:3px; cursor:pointer; transition:opacity .2s ease; box-shadow:inset 0 0 0 1px var(--line-strong); }
  .occl-tile:hover{ background:var(--accent-soft); }
  .occl-tile.is-open{ opacity:0; }
  .occl-hint{ text-align:center; font-size:12px; color:var(--ink-faint); padding:6px; }

  @media (max-width:640px){
    .rdrow{ grid-template-columns:1fr 60px; }
    .rdrow-track{ grid-column:1 / -1; order:3; }
    .rdrow-status{ grid-column:1 / -1; order:4; flex-direction:row; gap:8px; }
    .fcgrades{ grid-template-columns:repeat(2,1fr); }
    .fcrow{ grid-template-columns:1fr; }
    .fcrow-act{ justify-content:flex-start; }
    .fcadd-grid{ grid-template-columns:1fr; }
    .fcsummary .btn{ margin-left:0; width:100%; }
    .glossrow{ grid-template-columns:1fr; gap:2px; }
    .formularow{ grid-template-columns:1fr; gap:2px; }
    .fccard{ padding:20px 18px; }
    .countdown-num{ font-size:36px; }
  }
  @media print{ .tutor, .causerow, .review-tools, .glpop{ display:none !important; } .gl{ text-decoration:none; } }

  /* ================= pharmacologie : grille + lecteur plein écran ================= */
  .dtabs{ display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin:24px 0 18px; }
  .dtab{ text-align:left; display:flex; flex-direction:column; gap:3px; padding:12px 14px; border-radius:var(--radius-m); border:1.5px solid var(--line); background:var(--surface); cursor:pointer; font-family:var(--font-body); color:var(--ink); }
  .dtab strong{ font-size:14px; }
  .dtab span{ font-size:11.5px; color:var(--ink-faint); }
  .dtab:hover{ border-color:var(--accent-line); }
  .dtab.is-active{ border-color:var(--accent); background:var(--accent-soft); box-shadow:inset 0 -3px 0 var(--accent); }
  .dtoolbar{ display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin-bottom:18px; }
  .dtoolbar .diagsearch{ flex:1; min-width:240px; margin:0; }
  .dtoolbar a.btn{ text-decoration:none; }
  .pgrid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(260px,1fr)); gap:16px; }
  .pgrid-pages{ grid-template-columns:repeat(auto-fill,minmax(190px,1fr)); }
  .pcard{ text-align:left; display:flex; flex-direction:column; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-m); overflow:hidden; cursor:pointer; padding:0; font-family:inherit; color:var(--ink); transition:transform .12s ease, box-shadow .12s ease, border-color .12s ease; }
  .pcard:hover{ transform:translateY(-2px); box-shadow:var(--shadow-2); border-color:var(--accent-line); }
  .pcard-thumb{ display:block; background:#fff; border-bottom:1px solid var(--line); aspect-ratio:3/4; overflow:hidden; }
  .pcard-thumb-wide{ aspect-ratio:4/3; }
  .pcard-thumb img{ width:100%; height:100%; object-fit:cover; object-position:top center; display:block; }
  .pcard-meta{ display:flex; flex-direction:column; gap:4px; padding:10px 12px 12px; }
  .pcard-tag{ font-family:var(--font-mono); font-size:11px; font-weight:600; color:var(--accent); }
  .pcard-title{ font-family:var(--font-display); font-weight:600; font-size:14.5px; line-height:1.3; }
  .pcard-desc{ font-size:12px; color:var(--ink-soft); line-height:1.4; }
  body.viewer-open{ overflow:hidden; }
  .viewer{ position:fixed; inset:0; z-index:70; display:flex; flex-direction:column; background:#2a2823; }
  .viewer-bar{ display:flex; align-items:center; gap:14px; padding:10px 14px; background:var(--surface); border-bottom:1px solid var(--line); flex-wrap:wrap; }
  .viewer-title{ display:flex; align-items:center; gap:10px; flex:1; min-width:200px; font-size:14px; }
  .viewer-title strong{ font-family:var(--font-display); font-size:16px; }
  .viewer-nav, .viewer-zoom{ display:flex; align-items:center; gap:6px; }
  .vbtn{ min-width:36px; height:34px; padding:0 10px; border-radius:8px; border:1px solid var(--line-strong); background:var(--surface); color:var(--ink); font-family:var(--font-body); font-size:16px; font-weight:600; cursor:pointer; }
  .vbtn:hover:not([disabled]){ background:var(--accent-soft); border-color:var(--accent-line); }
  .vbtn[disabled]{ opacity:.35; cursor:not-allowed; }
  .vbtn-txt{ font-size:12.5px; }
  .vbtn.is-active{ background:var(--accent); border-color:var(--accent); color:var(--on-accent); }
  .vcount, .vpct{ font-size:12.5px; color:var(--ink-soft); min-width:58px; text-align:center; }
  .vclose{ font-size:15px; }
  .viewer-recall{ display:flex; gap:8px; align-items:center; flex-wrap:wrap; padding:8px 14px; background:var(--warning-soft); color:var(--warning); font-size:12.5px; border-bottom:1px solid var(--warning-line); }
  .viewer-recall span{ flex:1; }
  .viewer-body{ flex:1; overflow:auto; padding:16px; text-align:center; cursor:default; outline:none; overscroll-behavior:contain; }
  .viewer-body.is-pannable{ cursor:grab; }
  .viewer-body.is-dragging{ cursor:grabbing; user-select:none; }
  .viewer-page{ display:inline-block; position:relative; background:#fff; box-shadow:0 8px 30px rgba(0,0,0,.45); border-radius:4px; vertical-align:top; }
  .viewer-page img{ display:block; max-width:none; height:auto; border-radius:4px; image-rendering:auto; }
  .viewer-hint{ text-align:center; font-family:var(--font-mono); font-size:10.5px; color:#b9b3a3; padding:6px; background:#2a2823; }
  .fc-main{ font-weight:700; font-size:16px; color:var(--accent-strong); }
  @media (max-width:760px){
    .dtabs{ grid-template-columns:repeat(2,1fr); }
    .viewer-bar{ gap:8px; padding:8px; }
    .viewer-title{ min-width:0; flex:1 1 calc(100% - 60px); order:1; font-size:12.5px; }
    .viewer-title strong{ font-size:14px; }
    .vclose{ order:2; }
    .viewer-nav{ order:3; }
    .viewer-zoom{ order:4; flex-wrap:wrap; }
    .vbtn{ height:32px; min-width:32px; padding:0 8px; }
    .viewer-recall{ font-size:11.5px; padding:6px 8px; }
    .viewer-hint{ display:none; }
    .viewer-body{ padding:8px; }
  }
  [hidden]{ display:none !important; }

  .occl-layer{ position:absolute; inset:0; }
  .occl-mask{ position:absolute; border-radius:3px; background:#e8dcc0; box-shadow:inset 0 0 0 1px #c9b68c; padding:0; }
  .occl-mask:hover{ background:#d8e6f3; box-shadow:inset 0 0 0 1.5px var(--accent); }
  .occl-mask.is-open{ opacity:0; }
  .occl-mask.is-open:hover{ opacity:.15; }
  .vbtn.is-active:hover:not([disabled]){ background:var(--accent-strong); border-color:var(--accent-strong); color:var(--on-accent); }
/* ---- v56 ---- */
.v49tip{z-index:2001 !important}.glpop{z-index:2001 !important}.v51-cu{background:transparent !important;font-weight:700;text-decoration:underline;text-decoration-color:#e0443e;text-decoration-thickness:2px;color:inherit}mark.u51-u{background:none;color:inherit;text-decoration:underline;text-decoration-color:#e0443e;text-decoration-thickness:2px;text-underline-offset:3px}.u51-nmid::after{content:none !important}.u51-nmid{text-decoration:none !important}.pdfr-hl i.c-u{background:none !important;border-bottom:2px solid #e0443e;mix-blend-mode:normal}.v51-tipnote{font-size:16px;line-height:1.5;white-space:pre-wrap;max-height:40vh;overflow:auto;margin-bottom:6px}.textLayer span.v56-hit{background:rgba(255,200,0,.55);outline:2px solid #f5a300;border-radius:2px}.v56-ffb{margin:8px 0 4px}.v56-fr{margin:12px 0}.v56-fl{display:block;width:100%;text-align:left;margin:4px 0;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font:inherit;font-size:14px;cursor:pointer}.v56-fl mark,.v56-li mark{background:rgba(255,214,10,.6);color:inherit}.v56-li{cursor:pointer}</style><style id="v57css">@media (pointer:coarse){.selbub button{min-height:40px;min-width:40px}.selbub .v51-c{width:36px !important;height:36px !important}.selbub-row,.selbub .v51-hlrow{gap:10px}.selbub{-webkit-touch-callout:none}}</style><style id="v55css">.iq-ans .iq-img{max-height:260px;width:auto;max-width:100%;display:block;margin:0 auto 8px;object-fit:contain}</style><style id="v54css">.fccard-text{white-space:pre-line}</style><style id="v53css">#app{zoom:var(--v53z,1)}
.v53th{position:fixed;top:30px;right:12px;z-index:95;background:var(--surface,#fff);color:var(--ink,#222);border:1px solid var(--line,#ccc);border-radius:14px;padding:12px 14px;box-shadow:0 10px 30px rgba(0,0,0,.25);font:500 15px var(--font-body,sans-serif);min-width:220px}
.v53th-h{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-faint,#888);margin:4px 0 6px}
.v53th-row{display:flex;gap:6px;align-items:center;margin-bottom:8px}
.v53th button{flex:1;font:600 15px var(--font-body,sans-serif);padding:9px 10px;border-radius:10px;border:1px solid var(--line,#ccc);background:var(--surface-2,#f4f4f4);color:var(--ink,#222);cursor:pointer}
.v53th button.is-on{background:var(--accent,#1e4d7b);border-color:var(--accent,#1e4d7b);color:#fff}
.v53th-v{min-width:56px;text-align:center;font-weight:700}
.v53th-n{margin:2px 0 0;font-size:12px;color:var(--ink-faint,#888)}
.u51-nonly{font-weight:inherit;background:none;border-bottom:1.5px dotted var(--accent,#1e4d7b)}
.u51-nonly.u51-n,.u51.u51-n{text-decoration:none}
.u51-n::after{content:"📝";font-size:.62em;vertical-align:super;margin-left:1px;font-weight:400}
.pdfr-hl .v53-pn{font-size:11px;line-height:1;transform:translate(1px,-60%);z-index:3}
.v53undo{position:fixed;left:50%;transform:translateX(-50%);top:calc(78px + env(safe-area-inset-top));z-index:96;font:600 14px var(--font-body,sans-serif);padding:10px 16px;border-radius:99px;border:0;background:var(--ink,#222);color:var(--bg,#fff);box-shadow:0 6px 18px rgba(0,0,0,.3);cursor:pointer}
.fc-list{font-weight:400;font-size:17px;color:var(--ink);text-align:left}
.fc-list ul.fcb,.fccard ul.fcb{margin:4px 0 0;padding-left:1.15em;line-height:1.65}
.fc-list ul.fcb li{margin:0 0 .5em}
.fc-list ul.fcb li b{color:var(--accent-strong)}
.fcsrc{margin-top:10px;font-size:13px;color:var(--ink-faint);font-weight:400}
.fcwarn{margin-top:10px;padding:8px 10px;border-radius:10px;background:rgba(255,170,0,.14);border-left:3px solid #e0a000;font-size:14.5px;font-weight:400;line-height:1.5;color:var(--ink);text-align:left}
.v53err{margin:8px auto 10px;max-width:900px;background:rgba(255,170,0,.12);border:1px solid rgba(224,160,0,.5);border-radius:12px;padding:8px 12px;font-size:15px;line-height:1.5;color:var(--ink,#222)}
.v53err summary{cursor:pointer;font-weight:700}
.v53err ul{margin:8px 0 2px;padding-left:1.1em}.v53err li{margin-bottom:8px}
.v53err-c{color:var(--ink-soft,#555)}
.v53err-h{font-size:11px;font-weight:700;background:#c0392b;color:#fff;border-radius:6px;padding:1px 6px}
.v53mig{max-height:40vh;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:4px 8px}
.v53mig-r{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:4px 0;border-bottom:1px solid var(--line)}

.fccard .fc-main{font-weight:500;font-size:17px;line-height:1.6;color:var(--ink)}
.fccard .fc-main b,.fccard .fc-main strong{color:var(--accent-strong);font-weight:700}
.fcmn{margin-top:10px;padding:8px 10px;border-radius:10px;background:rgba(30,77,123,.08);border-left:3px solid var(--accent,#1e4d7b);font-size:15px;line-height:1.5;text-align:left;font-weight:400}
.fcwhy{margin-top:10px;font-size:15px;line-height:1.55;text-align:left;font-weight:400;color:var(--ink-soft,#555)}
.v53au{position:fixed;inset:0;z-index:97;background:rgba(20,18,12,.6);display:flex;align-items:center;justify-content:center;padding:14px}
.v53au-c{background:var(--surface,#fff);color:var(--ink,#222);border-radius:18px;max-width:620px;width:100%;padding:18px 20px;box-shadow:0 12px 40px rgba(0,0,0,.35)}
.v53au-top{display:flex;align-items:center;gap:10px}.v53au-top span{flex:1;color:var(--ink-faint);font:600 13px var(--font-mono,monospace)}
.v53au-top button{border:0;background:none;font-size:20px;cursor:pointer;color:var(--ink)}
.v53au-q{font:700 22px/1.4 var(--font-display,serif);margin:16px 0 10px}
.v53au-a{font-size:18px;line-height:1.6;min-height:3em;color:var(--accent-strong)}
.v53au-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px;align-items:center}
.v53au-row button{flex:1;min-width:110px;font:600 16px var(--font-body,sans-serif);padding:12px;border-radius:12px;border:1px solid var(--line);background:var(--surface-2,#f4f4f4);color:var(--ink);cursor:pointer}
.v53au-s{font-size:14px;color:var(--ink-soft)}.v53au-s button{flex:0;min-width:44px;padding:6px 10px}
.v53au-tip{font-size:12.5px;color:var(--ink-faint);margin:12px 0 0;line-height:1.45}

/* ---- v41 ---- */

/* Cas cliniques — examen, style « examen en ligne » (même interface que les examens blancs) */
body.cx-open{ overflow:hidden; }
.cx-ov{ position:fixed; inset:0; z-index:100000; overflow-y:auto; -webkit-overflow-scrolling:touch; background:#f5f6f7; }
.cx-sx{ min-height:100%; font-family:var(--font-body); }
.cx-sx .sx-top{ top:0; }
.cx-sx .sx-drawer{ top:56px; }
.cx-xbtn{ margin-left:auto; padding:4px 11px; font-size:14px; }
.cx-sx .sx-seb + .cx-xbtn{ margin-left:12px; }
.cx-sx .sx-main{ margin:0 auto; }
.cx-sx .sx-nodrawer .sx-main{ max-width:1000px; }
.cx-mono{ font-variant-numeric:tabular-nums; }
/* liste */
.cx-intro{ margin-bottom:16px; }
.cx-tabs{ display:flex; gap:0; margin:4px 0 12px; border-bottom:1px solid var(--sx-line); }
.cx-tab{ background:none; border:none; border-bottom:3px solid transparent; padding:8px 14px; font-size:14px; color:var(--sx-primary); cursor:pointer; margin-bottom:-1px; }
.cx-tab.is-on{ color:var(--sx-ink); border-bottom-color:var(--sx-primary); font-weight:600; }
.cx-list td{ vertical-align:middle; }
.cx-act{ text-align:right; white-space:nowrap; }
.cx-sm{ font-size:13.5px; padding:4px 12px; }
.cx-sm2{ font-size:13px; margin-left:8px; }
.cx-pill{ display:inline-block; font-size:12.5px; padding:2px 8px; border-radius:4px; background:#e9ecef; font-variant-numeric:tabular-nums; }
.cx-pill-ok{ background:#d1e7dd; color:#0f5132; }
.cx-pill-mid{ background:#fff3cd; color:#664d03; }
.cx-pill-cur{ background:#cfe2ff; color:#084298; }
/* chrono */
.cx-timer.is-over{ background:#dc3545; border-color:#dc3545; color:#fff; }
/* description du cas */
.cx-desc{ font-size:14.5px; }
.cx-v{ margin:2px 0 8px; padding-left:20px; }
.cx-v li{ margin:3px 0; line-height:1.55; }
.cx-vh{ margin:14px 0 4px; font-size:14px; font-weight:700; color:var(--sx-ink); }
.cx-imgs{ display:flex; flex-wrap:wrap; gap:12px; margin:12px 0 4px; }
.cx-imgs figure{ margin:0; flex:1 1 240px; max-width:100%; }
.cx-imgs img, .cx-qimg{ width:100%; max-height:340px; object-fit:contain; border:1px solid var(--sx-line); border-radius:4px; background:#111; cursor:zoom-in; display:block; }
.cx-imgs figcaption, .cx-qfig figcaption{ font-size:12px; text-align:center; color:var(--sx-faint); margin-top:3px; }
.cx-qfig{ margin:0 0 14px; max-width:520px; }
.cx-zoomed{ position:fixed !important; inset:0; width:100vw !important; height:100vh !important; max-height:none !important; max-width:none !important; z-index:100010; object-fit:contain; background:rgba(0,0,0,.92) !important; cursor:zoom-out; border-radius:0 !important; border:0 !important; }
.cx-vd summary{ cursor:pointer; color:var(--sx-primary); font-size:14px; padding:2px 0 8px; }
.cx-flag{ color:#664d03; background:#fff3cd; border:1px solid #ffe69c; padding:6px 10px; border-radius:4px; font-size:13px; margin:8px 0 0; }
/* options */
.cx-sx .sx-opt{ align-items:flex-start; }
.cx-sx .sx-opt.is-sel{ background:rgba(15,108,191,.07); }
.cx-sx .sx-opt img{ max-width:280px; width:100%; display:block; margin-bottom:4px; background:#fff; border:1px solid var(--sx-line); border-radius:4px; cursor:zoom-in; }
.cx-sx .sx-opt input:disabled{ opacity:1; }
.cx-sx .sx-opt.is-key{ background:#d1e7dd; }
.cx-sx .sx-opt.is-bad{ background:#f8d7da; }
.cx-tick, .cx-cross{ flex:none; font-weight:700; margin-left:6px; }
.cx-tick{ color:#198754; } .cx-tick-miss{ opacity:.65; } .cx-cross{ color:#dc3545; }
.cx-hint{ font-size:12.5px; color:var(--sx-faint); margin:6px 0 0 8px; }
.cx-sx .sx-qnb.is-part .sx-qnl{ background:repeating-linear-gradient(45deg, var(--sx-ans) 0 3px, #fff 3px 6px); }
/* relecture */
.cx-revsum{ margin-bottom:18px; }
.cx-revsum th{ width:160px; background:var(--sx-info); font-weight:600; vertical-align:top; }
.cx-revsum td .btn, .cx-vid{ margin:2px 6px 2px 0; }
.cx-vid{ display:inline-block; font-size:13.5px; padding:4px 10px; border:1px solid var(--sx-primary); border-radius:6px; color:var(--sx-primary); text-decoration:none; background:#fff; }
.cx-vid:hover{ background:rgba(15,108,191,.08); }
.cx-over{ color:#b02a37; font-weight:600; }
.cx-form-ok{ background:#e9f5ee; } .cx-form-ko{ background:#fbecee; }
.cx-outcome{ margin-top:12px; font-size:14px; font-weight:600; }
.cx-outcome.is-ok{ color:#0f5132; } .cx-outcome.is-ko{ color:#842029; }
.cx-fb{ margin-top:10px; background:#fcefdc; border:1px solid #f7dcb5; border-radius:6px; padding:12px 16px; color:#4d3200; font-size:14.5px; }
.cx-key{ margin:0 0 6px; }
.cx-cat{ color:#7a5a1e; font-weight:400; font-size:13px; }
.cx-ex p{ margin:6px 0; line-height:1.6; }
.cx-pad{ margin:0 0 14px 164px; }
.cx-gap{ flex:1; }
.cx-endbar{ gap:8px; }
.cx-terms{ margin-top:10px; padding:8px 12px; border-radius:6px; background:#fff; border:1px dashed #adb5bd; font-size:13.5px; color:var(--sx-ink); }
.cx-terms ul{ margin:4px 0 0; padding-left:18px; } .cx-terms li{ margin:2px 0; }
.cx-tblw{ overflow-x:auto; margin:8px 0; } .cx-tcap{ font-weight:600; font-size:13px; margin-bottom:4px; }
.cx-tbl{ border-collapse:collapse; font-size:13.5px; background:#fff; } .cx-tbl th, .cx-tbl td{ border:1px solid #d9c49f; padding:4px 8px; text-align:left; vertical-align:top; } .cx-tbl th{ background:#f7e6c8; }
.cx-ul{ margin:4px 0 8px; padding-left:20px; }
@media (max-width:860px){
  .cx-pad{ margin-left:0; }
  .cx-list th:nth-child(3), .cx-list td:nth-child(3){ display:none; }
  .cx-sx .sx-main{ padding:16px 12px 60px; }
}

/* v63 · Fiches : boîte à outils façon Notability / Notes Plus (barre du haut + plateau de styles) */
.ink-wrap{ position:relative; flex:none; z-index:6; background:var(--surface); border-bottom:1px solid var(--line); -webkit-user-select:none; user-select:none; }
.ink-bar{ display:flex; align-items:center; gap:8px; padding:6px 10px; overflow-x:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none; }
.ink-bar::-webkit-scrollbar, .ink-tray::-webkit-scrollbar{ display:none; }
.ink-tools{ display:flex; align-items:center; gap:2px; margin:0 auto; background:var(--surface-2); border:1px solid var(--line); border-radius:15px; padding:3px; flex:none; }
.ink-end{ display:flex; align-items:center; gap:2px; flex:none; }
.ink-b{ position:relative; width:44px; height:42px; border-radius:12px; border:0; background:none; color:var(--ink); cursor:pointer; display:inline-flex; align-items:center; justify-content:center; padding:0; touch-action:manipulation; -webkit-tap-highlight-color:transparent; transition:background-color .15s, transform .1s, color .15s; }
.ink-b svg, .ink-chip svg, .ink-menu button svg, .ink-xp h3 svg{ width:23px; height:23px; fill:none; stroke:currentColor; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; flex:none; }
.ink-b:hover{ background:rgba(127,127,127,.13); }
.ink-b:active{ transform:scale(.93); }
.ink-b.is-on{ background:var(--accent); color:var(--on-accent, #fff); box-shadow:0 2px 8px rgba(0,0,0,.18); }
.ink-b:disabled{ opacity:.3; cursor:default; background:none; transform:none; }
.ink-cb{ position:absolute; left:13px; right:13px; bottom:3px; height:3.5px; border-radius:3px; background:var(--c); box-shadow:0 0 0 .5px rgba(0,0,0,.28); }
.ink-b.is-on .ink-cb{ box-shadow:0 0 0 1.5px rgba(255,255,255,.85); }
.ink-tray{ border-top:1px solid var(--line); background:var(--surface-2); overflow-x:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none; }
.ink-trayin{ display:flex; align-items:center; gap:8px; padding:6px 12px; min-height:48px; width:max-content; margin:0 auto; }
.ink-fav{ position:relative; width:64px; height:38px; border-radius:11px; border:1.5px solid var(--line); background:#fff; cursor:pointer; padding:0 2px; flex:none; touch-action:manipulation; transition:transform .1s; }
.ink-fav:active{ transform:scale(.95); }
.ink-fav svg{ width:100%; height:100%; display:block; pointer-events:none; }
.ink-fav.is-on{ border-color:var(--accent); box-shadow:0 0 0 2px var(--accent); }
.ink-fav .ink-x{ position:absolute; top:-8px; right:-8px; width:22px; height:22px; border-radius:50%; background:#e0443e; color:#fff; font-size:12px; line-height:22px; text-align:center; box-shadow:0 1px 4px rgba(0,0,0,.3); }
.ink-chip{ height:36px; border-radius:11px; border:1px solid var(--line); background:var(--surface); color:var(--ink); font:600 13.5px var(--font-body, -apple-system, sans-serif); padding:0 12px; cursor:pointer; display:inline-flex; align-items:center; gap:6px; flex:none; touch-action:manipulation; white-space:nowrap; }
.ink-chip svg{ width:19px; height:19px; }
.ink-chip.ink-ic{ width:38px; padding:0; justify-content:center; }
.ink-chip.is-on{ background:var(--accent); color:var(--on-accent, #fff); border-color:var(--accent); }
.ink-cur{ width:14px; height:14px; border-radius:50%; background:var(--c); box-shadow:0 0 0 1px rgba(0,0,0,.25); }
.ink-sw{ width:28px; height:28px; border-radius:50%; border:2px solid var(--surface); box-shadow:0 0 0 1px var(--line-strong, #bbb); background:var(--c); cursor:pointer; padding:0; flex:none; position:relative; touch-action:manipulation; }
.ink-sw.is-on{ box-shadow:0 0 0 2.5px var(--accent); transform:scale(1.08); }
.ink-sw-custom{ background:conic-gradient(red, yellow, lime, cyan, blue, magenta, red); overflow:hidden; display:inline-block; }
.ink-sw-custom input{ position:absolute; inset:0; opacity:0; cursor:pointer; width:100%; height:100%; border:0; padding:0; }
.ink-sep{ width:1px; height:26px; background:var(--line); margin:0 2px; flex:none; }
.ink-sz{ width:34px; height:34px; border-radius:9px; border:1px solid transparent; background:none; cursor:pointer; display:inline-flex; align-items:center; justify-content:center; flex:none; touch-action:manipulation; }
.ink-sz i{ display:block; width:var(--s); height:var(--s); border-radius:50%; background:var(--ink); }
.ink-sz.is-on{ border-color:var(--accent); background:var(--accent-soft, rgba(10,91,216,.1)); }
.ink-hint{ font-size:12.5px; color:var(--ink-faint); white-space:nowrap; margin-left:4px; }
.ink-pop{ position:absolute; z-index:20; width:min(340px, calc(100vw - 16px)); max-height:calc(100vh - 160px); overflow:auto; background:var(--surface); color:var(--ink); border:1px solid var(--line); border-radius:18px; box-shadow:0 20px 60px rgba(0,0,0,.3); padding:6px 14px 14px; animation:inkPop .14s ease-out; }
@keyframes inkPop{ from{ opacity:0; transform:translateY(-4px) scale(.98); } to{ opacity:1; transform:none; } }
.ink-pop-h{ font-size:11.5px; font-weight:700; letter-spacing:.05em; text-transform:uppercase; color:var(--ink-faint); margin:12px 0 7px; display:flex; justify-content:space-between; }
.ink-pop-h span{ color:var(--ink); letter-spacing:0; }
.ink-pens{ display:grid; grid-template-columns:repeat(5, 1fr); gap:6px; }
.ink-pen{ border:1.5px solid var(--line); border-radius:11px; background:#fff; padding:3px 2px 3px; cursor:pointer; color:#333; font:600 10.5px var(--font-body, -apple-system, sans-serif); touch-action:manipulation; }
.ink-pen svg{ width:100%; height:28px; display:block; }
.ink-pen.is-on{ border-color:var(--accent); box-shadow:0 0 0 2px var(--accent); }
.ink-grid{ display:grid; grid-template-columns:repeat(7, 1fr); gap:9px; justify-items:center; }
.ink-pop input[type=range]{ width:100%; accent-color:var(--accent); height:28px; margin:0; }
.ink-prev{ height:70px; border-radius:12px; background:#fff; border:1px solid var(--line); margin-top:10px; }
.ink-prev svg{ width:100%; height:100%; display:block; }
.ink-favadd{ width:100%; margin-top:10px; height:40px; border-radius:11px; border:1.5px solid var(--accent); background:none; color:var(--accent); font:700 14px var(--font-body, -apple-system, sans-serif); cursor:pointer; }
.ink-pop-n{ margin:10px 0 0; font-size:12px; line-height:1.4; color:var(--ink-faint); }
.ink-menu{ position:absolute; right:10px; top:52px; z-index:20; width:min(370px, calc(100vw - 20px)); background:var(--surface); border:1px solid var(--line); border-radius:16px; box-shadow:0 18px 50px rgba(0,0,0,.28); padding:12px 14px; display:flex; flex-direction:column; gap:10px; font-size:14px; color:var(--ink); }
.ink-menu label{ display:flex; gap:8px; align-items:flex-start; cursor:pointer; }
.ink-menu button{ text-align:left; background:none; border:1px solid var(--line); border-radius:10px; padding:9px 10px; cursor:pointer; color:var(--ink); font-size:14px; display:flex; align-items:center; gap:8px; }
.ink-menu button svg{ width:18px; height:18px; }
.ink-menu p{ margin:0; font-size:12px; line-height:1.45; color:var(--ink-faint); }
.ink-toast{ position:absolute; left:50%; top:132px; z-index:30; transform:translate(-50%, -6px); background:rgba(28,28,30,.9); color:#fff; font:600 14px var(--font-body, -apple-system, sans-serif); padding:8px 16px; border-radius:99px; pointer-events:none; opacity:0; transition:opacity .2s, transform .2s; }
.ink-toast.is-on{ opacity:1; transform:translate(-50%, 0); }
/* page : calques */
.pdfr .pdfr-bar + .ink-wrap{ position:relative; }
.pdfr.ink-on .pdfr-pages{ touch-action:manipulation; }
.pdfr-ink{ position:absolute; inset:0; width:100%; height:100%; z-index:3; pointer-events:none; overflow:visible; }
.pdfr-ink path, .pdfr-ink ellipse, .pdfr-ink rect{ stroke-linecap:round; stroke-linejoin:round; vector-effect:none; }
.pdfr-ink .ink-p, .pdfr-ink .ink-h, .pdfr-ink .ink-laser, .pdfr-ink ellipse, .pdfr-ink rect{ fill:none; }
.pdfr-ink path.ink-f{ stroke:none; }
.pdfr-ink .ink-h{ opacity:.38; mix-blend-mode:multiply; stroke-linecap:butt; }
.pdfr-ink .ink-sel{ filter:drop-shadow(0 0 6px rgba(10,91,216,.9)); }
.pdfr-ink .ink-selbox{ fill:rgba(10,91,216,.05); stroke:#0a5bd8; stroke-width:12; stroke-dasharray:50 40; }
.pdfr-ink .ink-lasso{ fill:rgba(10,91,216,.06); stroke:#0a5bd8; stroke-width:14; stroke-dasharray:50 40; }
.pdfr-ink .ink-laser{ stroke:#ff2d2d; filter:drop-shadow(0 0 10px #ff2d2d); }
.pdfr-ink .ink-gone{ opacity:0; transition:opacity .8s ease .1s; }
.pdfr-ink .ink-tape path{ stroke-width:6; stroke-opacity:.6; transition:fill-opacity .25s, stroke-opacity .25s; }
.pdfr-ink .ink-tape path:first-child{ fill-opacity:1; filter:drop-shadow(0 3px 4px rgba(0,0,0,.18)); }
.pdfr-ink .ink-tape.is-rv path:first-child{ fill-opacity:.13; stroke-opacity:.9; stroke-dasharray:40 30; filter:none; }
.pdfr-ink .ink-tape.is-rv .ink-tape-st{ fill-opacity:0; }
.ink-txl{ position:absolute; inset:0; z-index:4; pointer-events:none; }
.ink-tx{ position:absolute; line-height:1.3; white-space:pre-wrap; word-wrap:break-word; font-family:var(--font-body, -apple-system, sans-serif); min-height:1.3em; outline:none; border-radius:4px; padding:2px 4px; }
.pdfr[data-ink-tool="text"] .ink-tx{ pointer-events:auto; cursor:text; border:1px dashed rgba(10,91,216,.45); background:rgba(255,255,255,.55); }
.ink-tx.ink-sel{ box-shadow:0 0 0 2px #0a5bd8; }
.ink-note{ position:absolute; pointer-events:auto; background:var(--nc); color:#2b2615; border-radius:4px 4px 14px 4px; box-shadow:0 8px 22px rgba(0,0,0,.2), 0 1px 2px rgba(0,0,0,.15); display:flex; flex-direction:column; min-width:140px; font-family:var(--font-body, -apple-system, sans-serif); }
.ink-note.ink-sel{ outline:2px solid #0a5bd8; outline-offset:2px; }
.ink-note-h{ display:flex; align-items:center; gap:2px; padding:3px 4px 0 6px; cursor:grab; touch-action:none; }
.ink-note-g{ flex:1; font-size:14px; color:rgba(43,38,21,.4); letter-spacing:-1px; }
.ink-note-h button{ width:28px; height:28px; border:0; border-radius:8px; background:none; color:rgba(43,38,21,.65); cursor:pointer; font-size:15px; display:inline-flex; align-items:center; justify-content:center; }
.ink-note-h button:hover{ background:rgba(0,0,0,.07); }
.ink-note-h button[data-nt="col"]::before{ content:""; width:14px; height:14px; border-radius:50%; background:conic-gradient(#fff3a3, #ffd6e7, #cdeefe, #d7f8c8, #ffe0b2, #fff3a3); box-shadow:0 0 0 1px rgba(0,0,0,.25); }
.ink-note-b{ padding:4px 10px 12px; line-height:1.4; outline:none; white-space:pre-wrap; word-wrap:break-word; cursor:text; -webkit-user-select:text; user-select:text; }
.ink-note-b:empty::before{ content:attr(data-ph); color:rgba(43,38,21,.4); }
.ink-note.is-min{ width:40px; height:40px; min-width:0; padding:0; border:0; border-radius:8px 8px 14px 8px; font-size:20px; line-height:40px; text-align:center; cursor:pointer; display:block; touch-action:none; }
.pdfr.ink-on .textLayer{ pointer-events:none; user-select:none; -webkit-user-select:none; }
.pdfr.ink-on .pdfr-page{ cursor:crosshair; -webkit-user-select:none; user-select:none; -webkit-touch-callout:none; }
.pdfr[data-ink-tool="text"] .pdfr-page, .pdfr[data-ink-tool="note"] .pdfr-page{ cursor:text; }
.pdfr[data-ink-tool="lasso"] .pdfr-page, .pdfr[data-ink-tool="tape"] .pdfr-page{ cursor:default; }
.pdfr.ink-finger .pdfr-page{ touch-action:none; }
.pdfr.ink-hidden .pdfr-ink, .pdfr.ink-hidden .ink-txl{ display:none; }
.ink-selmenu{ position:absolute; z-index:6; display:flex; gap:4px; align-items:center; background:var(--surface); border:1px solid var(--line); border-radius:12px; box-shadow:0 6px 18px rgba(0,0,0,.22); padding:4px 6px; white-space:nowrap; }
.ink-selmenu button{ background:none; border:none; font-size:13px; padding:7px 9px; border-radius:7px; cursor:pointer; color:var(--ink); }
.ink-selmenu button:hover{ background:var(--surface-2); }
.ink-selmenu .ink-sw{ width:22px; height:22px; padding:0; background:var(--c); border:2px solid var(--surface); box-shadow:0 0 0 1px var(--line-strong, #bbb); border-radius:50%; }
/* export */
.ink-xp{ position:absolute; inset:0; z-index:40; background:rgba(20,18,12,.45); display:flex; align-items:center; justify-content:center; padding:16px; }
.ink-xp-c{ background:var(--surface); color:var(--ink); border-radius:18px; width:min(420px, 100%); padding:18px 20px; box-shadow:0 20px 60px rgba(0,0,0,.35); display:flex; flex-direction:column; gap:10px; font-size:15px; }
.ink-xp h3{ margin:0; font-size:18px; display:flex; align-items:center; gap:8px; }
.ink-xp-s{ margin:-4px 0 4px; color:var(--ink-faint); font-size:13px; }
.ink-xp label{ display:flex; gap:8px; align-items:center; cursor:pointer; }
.ink-xp-r{ display:flex; flex-wrap:wrap; gap:8px; justify-content:flex-end; margin-top:6px; }
.ink-xp-b{ height:40px; padding:0 16px; border-radius:11px; border:1px solid var(--line); background:var(--surface-2); color:var(--ink); font:600 14px var(--font-body, -apple-system, sans-serif); cursor:pointer; display:inline-flex; align-items:center; text-decoration:none; }
.ink-xp-b.is-pri{ background:var(--accent); border-color:var(--accent); color:var(--on-accent, #fff); }
.ink-xp-m{ margin:0; font-size:14px; }
@media (max-width:820px){ .ink-b{ width:40px; height:40px; } .ink-b svg{ width:21px; height:21px; } .ink-cb{ left:11px; right:11px; } }
@media (max-width:700px){ .ink-hint{ display:none; } .ink-b{ width:36px; height:38px; } .ink-tools{ margin:0; } }

.v49edit,.v51note,.iq{position:fixed;inset:0;z-index:96;background:rgba(20,18,12,.5);display:flex;align-items:center;justify-content:center;padding:12px}
.v49edit .modal,.v51note .modal,.iq .modal{background:var(--surface);color:var(--ink);border-radius:16px;padding:20px;width:100%;box-shadow:0 12px 40px rgba(0,0,0,.3);max-height:92vh;overflow:auto}
.v51note textarea{font:inherit;border:1px solid var(--line);border-radius:8px;padding:8px;background:var(--bg);color:var(--ink)}

.iq-modal{max-width:620px;width:calc(100vw - 24px)}
.iq-h{display:flex;align-items:center;gap:10px;margin-bottom:8px}.iq-h span{font-size:12px;color:var(--ink-faint);margin-left:auto}
.iq-img{display:block;width:100%;max-height:44vh;object-fit:contain;border-radius:12px;background:#000}
.iq-q{font-size:14px;color:var(--ink-soft);margin:8px 0}
.iq-opts{display:flex;flex-direction:column;gap:6px}
.iq-opt{text-align:left;font:500 15px var(--font-body);padding:10px 12px;border-radius:12px;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);cursor:pointer}
.iq-opt b{margin-right:6px;color:var(--ink-faint)}
.iq-opt.is-ok{background:rgba(52,199,89,.18);border-color:var(--success)}.iq-opt.is-bad{background:rgba(255,59,48,.14);border-color:var(--danger)}
.iq-ans{margin:10px 0;padding:10px 12px;border-radius:12px;background:var(--surface-2);font-size:14px}
.iq-cta{margin:4px 0 10px;display:flex;gap:8px;flex-wrap:wrap}
.v52-pre{margin-left:6px}

mark.u51{color:inherit;border-radius:3px;padding:0 1px;cursor:pointer}
mark.u51-y{background:rgba(255,214,10,.55)} mark.u51-g{background:rgba(52,199,89,.38)} mark.u51-s{background:rgba(142,142,147,.33)}
b.u51-bonly{cursor:pointer;font-weight:800}
.u51-n{text-decoration:underline dotted;text-underline-offset:3px}
.u51-n::after{content:"📝";font-size:.7em;vertical-align:super;margin-left:1px}
.v51-c{width:26px;height:26px;padding:0 !important;border-radius:50% !important;border:2px solid var(--line-strong,#bbb) !important}
.v51-cy{background:#ffd60a !important}.v51-cg{background:#34c759 !important}.v51-cs{background:#aeaeb2 !important}
.v51-c.is-on{outline:3px solid var(--accent,#2a6);outline-offset:1px}
.v51-hlrow{display:inline-flex;gap:6px;align-items:center}
.v51-tiprow{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:4px}
.v51-tiprow button{margin-left:0 !important}.v51-tiprow button.is-on{background:var(--accent-soft,#def);border-color:var(--accent,#2a6)}
.v51-tipnote{white-space:pre-wrap;margin-bottom:4px}
.pdfr-hl i.c-g{background:rgba(52,199,89,.42)}.pdfr-hl i.c-s{background:rgba(142,142,147,.42)}
.v51-pn{position:absolute;pointer-events:auto;cursor:pointer;font-size:15px;z-index:3;filter:drop-shadow(0 1px 1px rgba(0,0,0,.3))}
.v51-dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;vertical-align:middle}
.v51-dot.v51-cy{background:#ffd60a}.v51-dot.v51-cg{background:#34c759}.v51-dot.v51-cs{background:#aeaeb2}
.v51-ln{display:block;font-style:normal;font-size:12.5px;color:var(--ink-soft);margin-top:2px}
.v51-tb{display:flex;gap:6px;flex-wrap:wrap;margin:4px 0}
.v51-tb button,.v51-tbimg{font:600 13px var(--font-body);padding:5px 10px;border-radius:8px;border:1px solid var(--line);background:var(--surface-2);color:var(--ink);cursor:pointer}
.v49-ed img.fcimg{max-width:100%;max-height:220px;display:block;margin:6px 0;border-radius:8px}
.v49-ed ul,.v49-ed ol{margin:4px 0 4px 22px;padding:0}
.fccard-back ul,.fccard-back ol{text-align:left;margin:6px 0 6px 22px}
.pdfr.v51-crop .textLayer{pointer-events:none}
.pdfr.v51-crop .pdfr-page{cursor:crosshair;touch-action:none;user-select:none;-webkit-user-select:none}
.v51-cropbox{position:fixed;z-index:99;border:2px dashed #0a84ff;background:rgba(10,132,255,.12);pointer-events:none}

.wp-grid.v50cal{grid-template-columns:repeat(7,minmax(0,1fr)) !important;gap:6px !important;align-items:stretch}
.v50cal .v50-open{grid-column:1/-1;order:99;margin-top:4px}
.v50-tile{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 2px 7px;border-radius:12px;border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;font-family:var(--font-body);min-width:0}
.v50-tile:hover{border-color:var(--accent-line)}
.v50-tile.is-today{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}
.v50-tile.is-sel{background:var(--accent-soft);border-color:var(--accent);border-width:2px}
.v50-tile.is-done .v50-tn{color:var(--success)}
.v50-tw{font:600 11px var(--font-mono);text-transform:uppercase;color:var(--ink-faint)}
.v50-td{font:700 20px/1.1 var(--font-display,serif)}
.v50-tn{font:600 12px var(--font-mono);color:var(--ink-soft)}
.v50-tbar{width:70%;height:4px;border-radius:9px;background:var(--line);overflow:hidden}.v50-tbar i{display:block;height:100%;background:var(--success)}
.v50-tm{font-size:10.5px;color:var(--ink-faint);white-space:nowrap}
@media (max-width:420px){.v50-tm{display:none}.v50-td{font-size:17px}.v50-tile{padding:6px 1px}}
.v50mv{position:absolute;z-index:95;width:250px;padding:8px;border-radius:14px;border:1px solid var(--line-strong);background:var(--surface);box-shadow:0 8px 26px rgba(0,0,0,.22);display:flex;flex-direction:column;gap:4px}
.v50mv-t{font:700 13px var(--font-body);color:var(--ink-soft);padding:2px 6px 4px}
.v50mv button,.v50mv-cal{display:flex;justify-content:space-between;align-items:center;gap:8px;text-align:left;font:600 14px var(--font-body);padding:9px 10px;border-radius:10px;border:1px solid var(--line);background:var(--surface-2);color:var(--ink);cursor:pointer}
.v50mv button span{font-weight:500;font-size:12.5px;color:var(--ink-faint)}
.v50mv-cal input{font:600 13px var(--font-body);border:1px solid var(--line);border-radius:8px;padding:4px 6px;background:var(--surface);color:var(--ink);max-width:135px}
.v50mv .v50mv-x{justify-content:center;background:transparent;color:var(--ink-faint)}
.v50-ready .v50-sts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:6px 0 14px}
@media (max-width:640px){.v50-ready .v50-sts{grid-template-columns:repeat(2,minmax(0,1fr))}}
.v50-st{display:flex;flex-direction:column;gap:2px;padding:12px;border-radius:14px;background:var(--surface-2);border:1px solid var(--line)}
.v50-st b{font:700 26px/1.1 var(--font-display,serif)}.v50-st b small{font-size:14px;color:var(--ink-faint)}
.v50-st span{font-size:13px;color:var(--ink-soft)}.v50-st em{font:500 11.5px var(--font-mono);color:var(--ink-faint);font-style:normal}
.v50-st-main{background:var(--accent-soft);border-color:var(--accent-line)}
.v50-sub{font-size:14px;color:var(--ink-soft);margin:4px 0 8px}
.v50-rows{display:flex;flex-direction:column;gap:8px}
.v50-row{display:grid;grid-template-columns:minmax(0,1fr) 90px 62px auto;gap:10px;align-items:center}
@media (max-width:560px){.v50-row{grid-template-columns:minmax(0,1fr) 56px auto}.v50-rb{display:none}}
.v50-rl b{display:block;font-size:14.5px}.v50-rl span{font-size:12px;color:var(--ink-faint)}
.v50-rb{height:8px;border-radius:9px;background:var(--line);overflow:hidden}.v50-rb span{display:block;height:100%}
.v50-rp{font:700 13px var(--font-mono);color:var(--danger);text-align:right}
.v50-neg,.v50-pace{margin-top:12px;padding:10px 12px;border-radius:12px;background:var(--surface-2);border:1px solid var(--line);font-size:14px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.v50-pt{font:500 13px var(--font-mono);padding:3px 8px;border-radius:99px;background:var(--surface);border:1px solid var(--line)}.v50-pt.is-over{color:var(--danger);border-color:var(--danger)}
.v50-all{margin-top:12px}.v50-all summary{cursor:pointer;font-weight:600}
.v50-tab{width:100%;border-collapse:collapse;font-size:13px;margin-top:8px}.v50-tab th,.v50-tab td{padding:5px 6px;border-bottom:1px solid var(--line);text-align:left}
mark.v50neg{background:transparent;color:var(--danger);font-weight:800;text-decoration:underline;text-underline-offset:3px}
.v50-lunch{margin:16px 0;padding:14px 16px;border-radius:14px;background:var(--accent-soft);border:1px solid var(--accent-line)}
#v50LunchCd{font-size:18px;margin-bottom:6px}
.v50-fc{margin:10px 0 14px;padding:12px 14px;border-radius:14px;border:1px solid var(--line);background:var(--surface)}
.v50-fc-h{display:flex;flex-wrap:wrap;gap:4px 12px;align-items:baseline}.v50-fc-h span{font-size:12.5px;color:var(--ink-faint)}
.v50-fc-bars{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;align-items:end;margin-top:8px}
.v50-fc-col{display:flex;flex-direction:column;align-items:center;gap:3px}
.v50-fc-bar{width:70%;border-radius:5px 5px 0 0;background:var(--accent)}.v50-fc-col.is-over .v50-fc-bar{background:var(--danger)}
.v50-fc-n{font:600 11.5px var(--font-mono)}.v50-fc-d{font-size:11px;color:var(--ink-faint)}
.v50-fc-warn{font-size:12.5px;color:var(--danger);margin:8px 0 0}

.v49-note{margin-top:4px;font-size:13px;color:var(--ink-soft);background:var(--surface-2,#f6f6f4);border-left:3px solid var(--warning,#c80);padding:4px 8px;border-radius:6px;white-space:pre-wrap}
.v48 .v49-roadbtn{align-self:flex-start;margin-left:auto;margin-right:10px;white-space:nowrap}
.v48.v49-min .v48-cols,.v48.v49-min .v48-done,.v48.v49-min .v48-routine{display:none}
.v48.v49-min .v48-miles span:nth-child(n+2){display:none}
.v48.v49-min{padding-bottom:12px}
mark.uhl{background:rgba(255,214,10,.55);color:inherit;border-radius:3px;padding:0 1px;cursor:pointer}
abbr.v49ab{text-decoration:underline dotted;text-underline-offset:3px;text-decoration-color:var(--accent,#2a6);cursor:help}
.v49tip{position:absolute;z-index:90;max-width:min(340px,92vw);font:500 14px/1.4 var(--font-body,sans-serif);padding:8px 11px;border-radius:12px;border:1px solid var(--line,#ccc);background:var(--surface,#fff);color:var(--ink,#222);box-shadow:0 6px 20px rgba(0,0,0,.2)}
.v49tip button{font:600 13px var(--font-body,sans-serif);margin-left:6px;padding:4px 10px;border-radius:99px;border:1px solid var(--line,#ccc);background:var(--surface-2,#f5f5f5);color:var(--ink,#222);cursor:pointer}
.v49-elab{display:block;font-weight:700;margin:10px 0 4px}
.v49-ed{min-height:44px;padding:8px 10px;border:1px solid var(--line-strong,#bbb);border-radius:10px;background:var(--surface,#fff);color:var(--ink,#222);line-height:1.45;outline:none}
.v49-ed-b{min-height:110px}
.v49-ed:focus{border-color:var(--accent,#2a6)}

.v48-top{ display:flex; justify-content:space-between; gap:12px; align-items:flex-start; flex-wrap:wrap; }
.v48-top h2{ margin:0; font-size:21px; } .v48-phase{ color:var(--ink-soft); font-size:14px; margin-top:4px; }
.v48-kpis{ display:flex; gap:10px; } .v48-kpis div{ background:var(--accent-soft); border-radius:12px; padding:8px 14px; text-align:center; min-width:92px; }
.v48-kpis b{ display:block; font:700 20px var(--font-display); color:var(--accent-strong); } .v48-kpis span{ font-size:12px; color:var(--ink-soft); }
.v48-phbar{ height:8px; border-radius:9px; background:var(--surface-2); margin:14px 0 10px; overflow:hidden; } .v48-phbar span{ display:block; height:100%; background:var(--accent); }
.v48-miles{ display:flex; gap:8px; flex-wrap:wrap; margin-bottom:14px; } .v48-miles span{ font-size:13px; border:1px solid var(--line); border-radius:99px; padding:4px 10px; background:var(--bg); } .v48-miles b{ color:var(--accent-strong); }
.v48-cols{ display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:12px; }
@media (max-width:760px){ .v48-cols{ grid-template-columns:1fr; } }
.v48-col{ background:var(--surface-2); border-radius:14px; padding:10px; min-width:0; }
.v48-ch{ display:flex; justify-content:space-between; align-items:baseline; padding:2px 4px 8px; } .v48-ch b{ font-size:15px; } .v48-ch span{ font-size:11.5px; color:var(--ink-faint); }
.v48-card{ background:var(--surface); border:1px solid var(--line); border-radius:12px; padding:10px 12px; margin-bottom:8px; box-shadow:var(--shadow-1); }
.v48-card.is-late{ border-left:4px solid var(--warning); }
.v48-ct{ font-weight:700; font-size:14.5px; margin-bottom:6px; }
.v48-bar{ height:7px; border-radius:9px; background:var(--surface-2); overflow:hidden; } .v48-bar span{ display:block; height:100%; background:var(--success); }
.v48-num{ font-size:12.5px; color:var(--ink-soft); margin-top:4px; } .v48-num b{ color:var(--ink); }
.v48-when{ font-size:12.5px; color:var(--ink-soft); margin-top:4px; } .v48-late{ color:var(--warning); }
.v48-next{ font-size:12.5px; margin-top:6px; padding-top:6px; border-top:1px dashed var(--line); } .v48-next a{ text-decoration:none; font-weight:700; }
.v48-empty{ color:var(--ink-faint); margin:4px; }
.v48-done, .v48-routine{ margin-top:10px; font-size:13px; color:var(--ink-soft); } .v48-routine span{ display:inline-block; margin:2px 8px 2px 0; padding:2px 8px; border-radius:99px; background:var(--surface-2); }
.v48-tabbar{ display:flex; gap:10px; flex-wrap:wrap; align-items:center; margin:14px 0 10px; }
.v48-tabwrap{ overflow-x:auto; border:1px solid var(--line); border-radius:12px; }
.v48-table{ width:100%; border-collapse:collapse; font-size:13.5px; background:var(--surface); }
.v48-table th{ position:sticky; top:0; background:var(--surface-2); text-align:left; padding:8px; font:600 12px var(--font-mono); color:var(--ink-soft); }
.v48-table td{ padding:7px 8px; border-top:1px solid var(--line); vertical-align:top; white-space:nowrap; } .v48-table td.v48-tt{ white-space:normal; min-width:260px; }
.v48-table tr.is-done td{ color:var(--ink-faint); } .v48-table tr.is-done td.v48-tt{ text-decoration:line-through; }

.wp-min{ font:600 11.5px var(--font-mono); color:var(--ink-faint); margin-right:6px; }

.v46-strict{ display:flex; flex-wrap:wrap; gap:6px 14px; align-items:center; margin:12px 0 4px; padding:10px 14px; border:1px solid var(--line); border-radius:12px; background:var(--surface); font-size:14px; }
.v46-strict label{ font-weight:600; display:flex; gap:8px; align-items:center; cursor:pointer; } .v46-strict span{ color:var(--ink-soft); font-size:13px; }

.v45-tgs{ display:flex; gap:6px; flex-wrap:wrap; margin:0 0 12px; align-items:center; }
.v45-tg{ font:600 13px var(--font-body); padding:6px 12px; border-radius:99px; border:1px solid var(--line); background:var(--surface-2); color:var(--ink-soft); cursor:pointer; }
.v45-tg.is-on{ background:var(--ink); color:var(--bg); border-color:var(--ink); }
.v45-sep{ width:10px; }
.v45-lab{ height:44px !important; }
.v43-road .v43-lh{ height:22px; }
.v45-pb{ display:block; height:5px; border-radius:9px; background:var(--surface-2); overflow:hidden; margin:2px 0; max-width:180px; }
.v45-pb > span{ display:block; height:100%; background:var(--success); }
.v43-road .v43-bar{ height:44px; }
.v43-bar i small{ display:block; text-align:center; font:700 10px var(--font-mono); color:inherit; line-height:12px; }
.v43-bar i.on small{ color:var(--accent-strong); } .v43-bar i.is-now small, .v43-bar i.is-done small, .v43-bar i.is-late small{ color:#fff; }
.v45-paces{ margin:12px 0 0; padding:0; list-style:none; font-size:13.5px; line-height:1.5; }
.v45-paces li.is-late{ color:var(--warning); }
.v45-months{ display:grid; grid-template-columns:repeat(auto-fill, minmax(230px, 1fr)); gap:10px; }
.v45-month{ border:1px solid var(--line); border-radius:12px; padding:10px 12px; background:var(--bg); }
.v45-month.is-now{ border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-soft); }
.v45-month h4{ margin:0 0 6px; font-size:15px; } .v45-mn{ text-transform:capitalize; } .v45-month h4 em{ font-style:normal; color:var(--accent); font-size:12.5px; }
.v45-month ul{ margin:0; padding:0; list-style:none; font-size:13.5px; }
.v45-month li{ display:flex; justify-content:space-between; gap:8px; padding:3px 0; border-top:1px dashed var(--line); }
.v45-month li b{ font:600 12px var(--font-mono); color:var(--ink-soft); }
.v45-month li.is-done span{ color:var(--success); } .v45-month li.is-late span{ color:var(--warning); }
.v45-prog{ margin-top:14px; display:grid; gap:8px; }
.v45-pr{ font-size:13px; } .v45-pr b{ display:block; font-size:13.5px; } .v45-pr > span:last-child{ color:var(--ink-soft); font-size:12.5px; }

.v43-auto{ margin:12px 0 0; padding:10px 14px; border-radius:12px; background:var(--accent-soft); color:var(--accent-strong); font-weight:600; font-size:14.5px; }
.v43-road .v43-wrap{ display:flex; gap:10px; align-items:flex-start; }
.v43-labs{ flex:none; width:min(44%, 250px); }
.v43-lh{ height:22px; }
.v43-lab{ height:30px; display:flex; flex-direction:column; justify-content:center; line-height:1.15; overflow:hidden; }
.v43-lab b{ font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.v43-lab span{ font:600 11px var(--font-mono); color:var(--ink-faint); white-space:nowrap; }
.v43-scroll{ flex:1; min-width:0; overflow-x:auto; -webkit-overflow-scrolling:touch; padding-bottom:6px; }
.v43-inner{ position:relative; }
.v43-mrow{ display:flex; height:22px; font:600 11px var(--font-mono); color:var(--ink-soft); text-transform:uppercase; }
.v43-mrow span{ flex:none; border-left:1px solid var(--line); padding-left:3px; overflow:hidden; white-space:nowrap; }
.v43-bar{ display:flex; height:30px; align-items:center; }
.v43-bar i, .v43-leg i{ flex:none; height:14px; display:inline-block; }
.v43-bar i.on, .v43-leg i.on{ background:var(--accent-soft); border:1px solid var(--accent-line, var(--line)); border-radius:3px; box-sizing:border-box; margin:0 .5px; }
.v43-bar i.is-done, .v43-leg i.is-done{ background:var(--success); border-color:var(--success); }
.v43-bar i.is-now, .v43-leg i.is-now{ background:var(--accent); border-color:var(--accent); }
.v43-bar i.is-late, .v43-leg i.is-late{ background:var(--warning); border-color:var(--warning); }
.v43-now{ position:absolute; top:18px; bottom:0; border-left:2px solid var(--danger); border-right:2px solid var(--danger); background:color-mix(in srgb, var(--danger) 8%, transparent); pointer-events:none; }
.v43-now span{ position:absolute; top:-16px; left:50%; transform:translateX(-50%); font:700 10px var(--font-mono); color:var(--danger); }
.v43-leg{ margin:10px 0 0; font-size:12.5px; color:var(--ink-soft); display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.v43-leg i{ width:14px; }
a.wp-go, a.v33-go{ text-decoration:none; }

/* v41 : lecteur de fiches */
html.pdfr-on, html.pdfr-on body{ overflow:hidden; }
.pdfr{ position:fixed; inset:0; z-index:70; background:#4a4d50; display:flex; flex-direction:column; }
.pdfr-bar{ display:flex; align-items:center; gap:6px; padding:8px 10px; padding-top:max(8px, env(safe-area-inset-top)); background:var(--surface); border-bottom:1px solid var(--line); color:var(--ink); }
.pdfr-t{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:15px; font-family:var(--font-body); }
.pdfr-b{ min-width:40px; height:38px; padding:0 10px; border-radius:10px; border:1px solid var(--line); background:var(--surface-2); color:var(--ink); font:600 15px var(--font-body); display:inline-flex; align-items:center; justify-content:center; gap:4px; text-decoration:none; cursor:pointer; flex:none; }
.pdfr-body{ flex:1; position:relative; min-height:0; display:flex; }
.pdfr-scroll{ flex:1; overflow:auto; -webkit-overflow-scrolling:touch; padding:8px 8px calc(30px + env(safe-area-inset-bottom)); }
.pdfr-tip{ color:#eceff1; font:500 13px var(--font-body); text-align:center; margin:2px 0 8px; }
.pdfr-pages{ display:flex; flex-direction:column; align-items:center; gap:10px; min-width:min-content; }
.pdfr-page{ position:relative; background:#fff; box-shadow:0 2px 10px rgba(0,0,0,.35); flex:none; }
.pdfr-page canvas{ position:absolute; left:0; top:0; display:block; }
.pdfr-hl{ position:absolute; inset:0; pointer-events:none; z-index:1; }
.pdfr-hl i{ position:absolute; background:rgba(255,206,0,.45); mix-blend-mode:multiply; border-radius:2px; }
.pdfr-pn{ position:absolute; right:6px; bottom:4px; font:600 10px monospace; color:#9aa; z-index:3; pointer-events:none; }
.pdfr-msg{ color:#eee; padding:30px; text-align:center; font-family:var(--font-body); } .pdfr-msg a{ color:#fff; }
.pdfr-list{ position:absolute; right:0; top:0; bottom:0; width:min(380px, 100%); background:var(--surface); color:var(--ink); border-left:1px solid var(--line); overflow:auto; z-index:5; box-shadow:-6px 0 20px rgba(0,0,0,.25); padding:10px 12px 30px; font-family:var(--font-body); }
.pdfr-lh{ display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; font-size:16px; }
.pdfr-li{ display:flex; gap:6px; align-items:flex-start; padding:9px 0; border-bottom:1px solid var(--line); }
.pdfr-lt{ flex:1; font-size:14.5px; line-height:1.45; background:rgba(255,206,0,.22); border-radius:4px; padding:2px 5px; }
.pdfr-sb{ flex:none; border:1px solid var(--line); background:var(--surface-2); color:var(--ink); border-radius:8px; padding:4px 8px; font:600 12.5px var(--font-body); cursor:pointer; }
.pdfr-empty{ color:var(--ink-soft); font-size:14px; }
/* calque texte pdf.js 3.11 */
.pdfr .textLayer{ position:absolute; text-align:initial; inset:0; overflow:hidden; opacity:1; line-height:1; -webkit-text-size-adjust:none; text-size-adjust:none; forced-color-adjust:none; transform-origin:0 0; z-index:2; }
.pdfr .textLayer span, .pdfr .textLayer br{ color:transparent; position:absolute; white-space:pre; cursor:text; transform-origin:0% 0%; }
.pdfr .textLayer span.markedContent{ top:0; height:0; }
.pdfr .textLayer ::selection{ background:rgba(0,90,255,.3); }
.pdfr .textLayer br::selection{ background:transparent; }
.pdfr .textLayer .endOfContent{ display:block; position:absolute; left:0; top:100%; right:0; bottom:0; z-index:-1; cursor:default; -webkit-user-select:none; user-select:none; }
.pdfr .textLayer .endOfContent.active{ top:0; }
#v41toast{ position:fixed; left:50%; bottom:calc(96px + env(safe-area-inset-bottom)); transform:translateX(-50%); z-index:90; background:var(--ink); color:var(--bg); padding:10px 16px; border-radius:12px; font:600 14px var(--font-body); max-width:90vw; box-shadow:0 6px 20px rgba(0,0,0,.25); }
.v41-hlsum{ margin:18px 0 6px; } .v41-hlfiles{ display:flex; flex-wrap:wrap; gap:8px; margin-top:10px; }
.fcimg{ max-width:100%; } img.fcimg[loading]{ display:block; max-height:46vh; width:auto; object-fit:contain; margin:10px auto 0; border-radius:12px; }

/* ---- v33 ---- */

/* ================= Refonte v33 : plus grand, plus clair ================= */
:root{ --v33-bar-h:62px; --v33-radius:18px; --v33-gap:18px; }
body{ font-size:16px; }
/* Texte ~15 % plus grand partout (l'ancienne mise en page utilisait 11–14 px). */
#app{ zoom:1.15; }
@media (max-width:760px){ #app{ zoom:1.08; } }
.wrap{ max-width:820px; }
.wrap-wide{ max-width:1000px; }

/* Barre du haut */
.tecconav, .modswitch{ display:none !important; }
.v33-bar{ position:sticky; top:0; z-index:40; background:color-mix(in srgb, var(--bg) 88%, transparent); -webkit-backdrop-filter:saturate(1.4) blur(12px); backdrop-filter:saturate(1.4) blur(12px); border-bottom:1px solid var(--line); }
.v33-bar-in{ max-width:1000px; margin:0 auto; height:var(--v33-bar-h); display:flex; align-items:center; gap:16px; padding:0 64px 0 20px; }
.v33-brand{ display:flex; align-items:center; gap:10px; background:none; border:none; cursor:pointer; font-family:var(--font-display); font-weight:700; font-size:19px; color:var(--ink); padding:0; letter-spacing:.02em; }
.v33-logo{ width:32px; height:32px; border-radius:10px; background:linear-gradient(135deg,var(--accent),var(--accent-strong)); color:var(--on-accent); display:flex; align-items:center; justify-content:center; font-size:17px; box-shadow:var(--shadow-1); }
.v33-tabs{ display:flex; gap:4px; flex:1; justify-content:center; }
.v33-tab{ display:flex; align-items:center; gap:8px; background:none; border:none; cursor:pointer; padding:9px 14px; border-radius:12px; font:600 14.5px var(--font-body); color:var(--ink-soft); transition:background .15s, color .15s; }
.v33-tab:hover{ background:var(--surface-2); color:var(--ink); }
.v33-tab.is-active{ background:var(--accent-soft); color:var(--accent-strong); }
.v33-tab-s{ display:none; }
.v33-ic{ width:20px; height:20px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; flex:none; }
.v33-days{ font:700 13px var(--font-mono); color:var(--accent-strong); background:var(--accent-soft); border:1px solid var(--accent-line); padding:6px 10px; border-radius:99px; white-space:nowrap; }
.v33-sub{ border-bottom:1px solid var(--line); background:var(--bg); position:sticky; top:var(--v33-bar-h); z-index:39; }
.v33-sub-in{ max-width:1000px; margin:0 auto; padding:10px 20px; display:flex; gap:8px; overflow-x:auto; scrollbar-width:none; }
.v33-subtab{ white-space:nowrap; background:var(--surface); border:1px solid var(--line); color:var(--ink-soft); font:600 14px var(--font-body); padding:8px 16px; border-radius:99px; cursor:pointer; }
.v33-subtab.is-active{ background:var(--ink); border-color:var(--ink); color:var(--bg); }
.v33-badge{ display:inline-block; min-width:20px; padding:1px 6px; border-radius:99px; background:var(--warning); color:#fff; font-size:11.5px; margin-left:4px; }

/* Téléphone : onglets en bas, comme une appli */
@media (max-width:760px){
  .v33-bar{ -webkit-backdrop-filter:none; backdrop-filter:none; background:var(--bg); }
  .v33-bar-in{ padding:0 60px 0 16px; justify-content:space-between; }
  .v33-tabs{ position:fixed; left:0; right:0; bottom:0; z-index:60; justify-content:space-around; gap:0; background:var(--surface); border-top:1px solid var(--line); padding:6px 4px calc(6px + env(safe-area-inset-bottom,0px)); box-shadow:0 -4px 20px rgba(0,0,0,.06); }
  .v33-tab{ flex-direction:column; gap:3px; padding:6px 4px; font-size:11.5px; flex:1; border-radius:10px; }
  .v33-tab-l{ display:none; } .v33-tab-s{ display:block; }
  .v33-ic{ width:24px; height:24px; }
  .v33-sub-in{ padding:10px 16px; }
  #app{ padding-bottom:84px; }
  #syncbadge{ top:calc(var(--v33-bar-h) * 1.08 + 8px) !important; bottom:auto !important; left:auto !important; right:8px !important; font-size:10.5px !important; padding:4px 8px !important; opacity:.9; }
  .fbx-gear{ display:none !important; }
  .resetcorner{ bottom:86px; }
}

/* Pages */
.v33-page{ padding-block:34px 70px; }
.v33-h1{ font-size:clamp(28px,5vw,40px); line-height:1.1; margin:0 0 8px; }
.v33-lead{ color:var(--ink-soft); font-size:16px; line-height:1.55; margin:0; }
.v33-card{ background:var(--surface); border:1px solid var(--line); border-radius:var(--v33-radius); padding:22px 24px; box-shadow:var(--shadow-1); margin-top:var(--v33-gap); }
.v33-card h2, .v33-card h3{ font-size:21px; margin:0; }
.v33-card-h{ display:flex; align-items:baseline; justify-content:space-between; gap:12px; margin-bottom:14px; }
.v33-count{ font:700 14px var(--font-mono); color:var(--ink-faint); }

/* Accueil */
.v33-hero{ display:flex; align-items:center; gap:28px; background:linear-gradient(135deg, var(--surface) 0%, var(--accent-soft) 140%); border:1px solid var(--line); border-radius:24px; padding:30px 30px; box-shadow:var(--shadow-1); }
.v33-hero-l{ flex:1; min-width:0; }
.v33-date{ font:600 13px var(--font-mono); text-transform:uppercase; letter-spacing:.08em; color:var(--accent); margin-bottom:8px; }
.v33-start{ margin-top:20px; font-size:16.5px; padding:15px 22px; border-radius:14px; text-align:left; line-height:1.35; white-space:normal; max-width:100%; }
.v33-alldone{ margin-top:18px; font-weight:600; color:var(--success); font-size:17px; }
.v33-ring{ --p:0; flex:none; width:150px; height:150px; border-radius:50%; background:conic-gradient(var(--accent) calc(var(--p)*1%), var(--surface-3) 0); display:flex; align-items:center; justify-content:center; }
.v33-ring > div{ width:122px; height:122px; border-radius:50%; background:var(--surface); display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; }
.v33-ring strong{ font:700 36px/1 var(--font-display); color:var(--ink); }
.v33-ring span{ font-size:12px; color:var(--ink-soft); margin-top:4px; line-height:1.25; }
.v33-tasks{ display:flex; flex-direction:column; gap:10px; }
.v33-task{ display:flex; align-items:center; gap:14px; padding:14px 16px; border:1px solid var(--line); border-radius:14px; background:var(--bg); }
.v33-task.is-done{ opacity:.55; }
.v33-task.is-done .v33-task-t{ text-decoration:line-through; }
.v33-task-t{ flex:1; font-size:16px; line-height:1.45; min-width:0; }
.v33-slot{ display:inline-block; font:700 11px var(--font-mono); text-transform:uppercase; letter-spacing:.05em; color:var(--accent); background:var(--accent-soft); padding:2px 7px; border-radius:6px; margin-right:8px; vertical-align:2px; }
.v33-check{ position:relative; width:28px; height:28px; flex:none; cursor:pointer; }
.v33-check input{ position:absolute; opacity:0; inset:0; margin:0; cursor:pointer; }
.v33-check span{ position:absolute; inset:0; border:2px solid var(--line-strong); border-radius:9px; background:var(--surface); transition:all .15s; }
.v33-check input:checked + span{ background:var(--success); border-color:var(--success); }
.v33-check input:checked + span::after{ content:""; position:absolute; left:8px; top:3px; width:7px; height:13px; border:solid #fff; border-width:0 3px 3px 0; transform:rotate(45deg); }
.v33-check input:focus-visible + span{ outline:2px solid var(--accent); outline-offset:2px; }
.v33-go{ flex:none; white-space:nowrap; }
.v33-rolled{ margin-top:14px; background:var(--warning-soft); border:1px solid var(--warning-line); color:var(--warning); font:600 14px var(--font-body); padding:10px 14px; border-radius:12px; cursor:pointer; width:100%; text-align:left; }
.v33-stats{ display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin-top:var(--v33-gap); }
.v33-stat{ text-align:left; background:var(--surface); border:1px solid var(--line); border-radius:16px; padding:16px 16px 14px; cursor:pointer; display:flex; flex-direction:column; gap:4px; font-family:var(--font-body); color:var(--ink); transition:transform .12s, box-shadow .12s; }
.v33-stat:hover{ transform:translateY(-2px); box-shadow:var(--shadow-2); }
.v33-stat strong{ font:700 26px/1.1 var(--font-display); }
.v33-stat span{ font-size:13.5px; color:var(--ink-soft); }
.v33-stat .wp-pill{ align-self:flex-start; margin-top:6px; font-size:11.5px; }
.v33-more{ margin-top:var(--v33-gap); background:var(--surface); border:1px solid var(--line); border-radius:var(--v33-radius); padding:4px 22px; }
.v33-more > summary{ cursor:pointer; padding:16px 0; font-weight:600; font-size:16px; list-style:none; }
.v33-more > summary::before{ content:"▸ "; color:var(--ink-faint); }
.v33-more[open] > summary::before{ content:"▾ "; }
.v33-more[open]{ padding-bottom:22px; }
@media (max-width:760px){
  .v33-hero{ flex-direction:column-reverse; align-items:stretch; padding:22px 18px; gap:18px; }
  .v33-ring{ width:112px; height:112px; align-self:center; } .v33-ring > div{ width:90px; height:90px; } .v33-ring strong{ font-size:28px; }
  .v33-start{ width:100%; }
  .v33-stats{ grid-template-columns:repeat(2,1fr); }
  .v33-task{ flex-wrap:wrap; padding:12px; gap:10px 12px; } .v33-task-t{ flex:1 1 calc(100% - 44px); } .v33-go{ margin-left:40px; }
  .v33-card{ padding:18px 16px; }
}

/* Fiches */
.v33-fgrid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(180px,1fr)); gap:16px; margin-top:6px; }
.v33-fiche{ display:flex; flex-direction:column; text-align:left; background:var(--surface); border:1px solid var(--line); border-radius:16px; overflow:hidden; cursor:pointer; padding:0; font-family:var(--font-body); color:var(--ink); transition:transform .12s, box-shadow .12s; }
.v33-fiche:hover{ transform:translateY(-3px); box-shadow:var(--shadow-2); }
.v33-fiche-th{ display:block; aspect-ratio:3/4; background:#fff; overflow:hidden; border-bottom:1px solid var(--line); }
.v33-fiche-th img{ width:100%; height:100%; object-fit:cover; object-position:top; display:block; }
.v33-fiche-b{ display:flex; flex-direction:column; gap:3px; padding:12px 14px 14px; }
.v33-fiche-code{ font:700 13px var(--font-mono); color:var(--accent); }
.v33-fiche-t{ font-weight:600; font-size:15px; line-height:1.3; }
.v33-fiche-m{ font-size:12.5px; color:var(--ink-faint); }
.v33-fiche.is-done .v33-fiche-m{ color:var(--success); font-weight:600; }
@media (max-width:760px){ .v33-fgrid{ grid-template-columns:repeat(2,1fr); gap:12px; } }
.v33-viewer .v33-viewer-p{ position:relative; background:var(--surface); border-radius:16px; width:min(1100px,86vw); height:78vh; display:flex; flex-direction:column; overflow:hidden; box-shadow:var(--shadow-2); }
.v33-viewer-h{ display:flex; align-items:center; justify-content:space-between; gap:10px; padding:12px 16px; border-bottom:1px solid var(--line); }
.v33-viewer iframe{ flex:1; border:0; width:100%; background:#fff; }
.v33-bk{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:10px 0; border-top:1px solid var(--line); font-size:15px; }


/* Plan : les jours en liste verticale, lisible sur tous les écrans */
.planpage{ max-width:1000px !important; }
.wp-grid{ grid-template-columns:1fr !important; gap:12px; }
.wp-day{ min-height:0 !important; padding:12px 14px !important; background:var(--surface) !important; border-radius:14px !important; }
.wp-day.is-today{ border-color:var(--accent) !important; box-shadow:0 0 0 3px var(--accent-soft); }
.wp-day-head{ font-size:13px !important; }
.wp-task{ padding:10px 12px !important; border-radius:12px !important; background:var(--bg) !important; }
.wp-task-text{ font-size:15px !important; line-height:1.45 !important; }
.wp-check{ width:20px; height:20px; margin-top:2px; }

/* Boutons et contrôles un peu plus généreux */
.btn{ min-height:42px; border-radius:12px; }
#syncbadge{ font-size:11px !important; }
.fbx-gear.is-signed{ display:none !important; }
.btn-sm{ min-height:34px; }
.wp-practice{ font-size:13px !important; }


/* ===== src/css/01-fonts.css ===== */
/* Polices servies avec le site (hors ligne dès la première visite) — @fontsource, licence SIL OFL 1.1.
   Sous-ensembles latin et latin étendu seulement ; unicode-range : le navigateur ne charge que ce qui sert. */
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(../fonts/source-serif-4-latin-ext-500-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(../fonts/source-serif-4-latin-500-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(../fonts/source-serif-4-latin-ext-600-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(../fonts/source-serif-4-latin-600-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(../fonts/source-serif-4-latin-ext-700-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(../fonts/source-serif-4-latin-700-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(../fonts/ibm-plex-sans-latin-ext-400-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(../fonts/ibm-plex-sans-latin-400-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(../fonts/ibm-plex-sans-latin-ext-500-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(../fonts/ibm-plex-sans-latin-500-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(../fonts/ibm-plex-sans-latin-ext-600-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(../fonts/ibm-plex-sans-latin-600-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(../fonts/ibm-plex-sans-latin-ext-700-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(../fonts/ibm-plex-sans-latin-700-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(../fonts/ibm-plex-mono-latin-ext-400-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(../fonts/ibm-plex-mono-latin-400-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(../fonts/ibm-plex-mono-latin-ext-500-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(../fonts/ibm-plex-mono-latin-500-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(../fonts/ibm-plex-mono-latin-ext-600-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(../fonts/ibm-plex-mono-latin-600-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(../fonts/ibm-plex-mono-latin-ext-700-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(../fonts/ibm-plex-mono-latin-700-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

/* ===== src/css/05-boot.css ===== */
/* Écran de chargement (avant le démarrage de js/app.js) */
.boot{min-height:100vh;min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:24px;box-sizing:border-box;background:var(--bg,#f5f1e7);color:var(--ink,#211d14);font-family:var(--font-body,-apple-system,BlinkMacSystemFont,sans-serif)}
.boot-card{text-align:center;max-width:340px}
.boot-card p{margin:10px 0;color:var(--ink-soft,#6b6250);line-height:1.5}
.boot-card button{margin-top:10px;padding:11px 20px;border-radius:10px;border:0;background:var(--accent,#1e4d7b);color:var(--on-accent,#fbf9f2);font:600 15px inherit;cursor:pointer}
.boot-logo{width:56px;height:56px;margin:0 auto 14px;border-radius:14px;display:flex;align-items:center;justify-content:center;background:var(--accent,#1e4d7b);color:var(--on-accent,#fbf9f2);font:700 28px Georgia,serif;animation:boot-pulse 1.4s ease-in-out infinite}
.boot-err{font:12px ui-monospace,Menlo,monospace;word-break:break-word}
@keyframes boot-pulse{50%{opacity:.55}}
@media (prefers-reduced-motion:reduce){.boot-logo{animation:none}}

/* ===== src/css/10-tokens.css ===== */
/* Jetons communs ajoutés en v64 (les couleurs restent dans 00-legacy.css, :root et [data-theme="dark"]).
   Échelle de superposition : à utiliser pour tout nouvel élément flottant. */
:root{
  --z-base:1;
  --z-sticky:30;      /* barres collantes dans une page */
  --z-nav:40;         /* barre d'onglets / barre latérale */
  --z-overlay:90;     /* panneaux plein écran (lecteur, examen) */
  --z-modal:100;      /* fenêtres modales */
  --z-popover:2000;   /* bulles et infobulles (au-dessus des modales) */
  --z-toast:3000;     /* messages brefs */
  --radius-pill:999px;
  --tap:44px;         /* cible tactile minimale (Apple HIG) */
  --ease-out:cubic-bezier(.2,.7,.2,1);
}

/* ===== src/css/20-frame.css ===== */
/* Cadre de l'appli (src/js/49-frame.js) : barre latérale ≥ 1080 px, sinon barre du haut + onglets en bas. */
:root{ --tf-side-w:248px; --tf-top-h:56px; }

/* Les anciens éléments flottants sont intégrés au cadre */
.themetoggle, #syncbadge, .fbx-gear{ display:none !important; }

.tf-ic{ width:20px; height:20px; flex:none; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.tf-sr{ position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
.tf-side button, .tf-top button, .tf-sub button, .tf-tabs button{ -webkit-tap-highlight-color:transparent; font-family:var(--font-body); }
.tf-side button:focus-visible, .tf-top button:focus-visible, .tf-sub button:focus-visible, .tf-tabs button:focus-visible{ outline:2px solid var(--accent); outline-offset:2px; }

.tf-brand{ display:flex; align-items:center; gap:10px; border:0; background:none; padding:4px; cursor:pointer; color:var(--ink); font:700 19px var(--font-display); }
.tf-logo{ width:32px; height:32px; border-radius:9px; display:inline-flex; align-items:center; justify-content:center; background:linear-gradient(160deg, var(--accent), var(--accent-strong)); color:var(--on-accent); font:700 17px var(--font-display); }
.tf-days{ font:600 12px var(--font-mono); color:var(--accent-strong); background:var(--accent-soft); border:1px solid var(--accent-line); border-radius:var(--radius-pill); padding:4px 9px; white-space:nowrap; }
.tf-badge{ display:inline-block; min-width:18px; padding:1px 6px; margin-left:4px; border-radius:var(--radius-pill); background:var(--accent); color:var(--on-accent); font:700 11px/16px var(--font-body); text-align:center; }
.tf-icbtn{ width:38px; height:38px; flex:none; display:inline-flex; align-items:center; justify-content:center; border-radius:10px; border:1px solid var(--line); background:var(--surface); color:var(--ink-soft); cursor:pointer; padding:0; }
.tf-icbtn:hover{ color:var(--ink); background:var(--surface-2); }
.tf-sync{ display:inline-flex; align-items:center; gap:7px; border:0; background:none; padding:6px; border-radius:8px; color:var(--ink-soft); font:500 12.5px var(--font-body); cursor:pointer; min-width:0; }
.tf-sync:hover{ background:var(--surface-2); }
.tf-dot{ width:9px; height:9px; flex:none; border-radius:50%; background:var(--ink-faint); }
.tf-sync[data-k="ok"] .tf-dot{ background:var(--success); }
.tf-sync[data-k="busy"] .tf-dot{ background:var(--warning); animation:tf-pulse 1s ease-in-out infinite; }
.tf-sync[data-k="wait"] .tf-dot{ background:var(--ink-faint); animation:tf-pulse 1.4s ease-in-out infinite; }
.tf-sync[data-k="off"] .tf-dot, .tf-sync[data-k="err"] .tf-dot{ background:var(--danger); }
.tf-sync[data-k="off"], .tf-sync[data-k="err"]{ color:var(--danger); }
@keyframes tf-pulse{ 50%{ opacity:.35; } }

/* ---- Barre latérale (ordinateur, iPad à l'horizontale) ---- */
.tf-side{ display:none; }
@media (min-width:1080px){
  .tf-top, .tf-sub, .tf-tabs{ display:none !important; }
  html.tf-nav #app{ padding-left:var(--tf-side-w); }
  .tf-side{ position:fixed; z-index:var(--z-nav); top:0; bottom:0; left:0; width:var(--tf-side-w); box-sizing:border-box; display:flex; flex-direction:column; gap:3px;
    padding:calc(18px + env(safe-area-inset-top,0px)) 12px calc(12px + env(safe-area-inset-bottom,0px)) calc(12px + env(safe-area-inset-left,0px));
    background:var(--surface); border-right:1px solid var(--line); overflow-y:auto; overscroll-behavior:contain; }
  .tf-side .tf-brand{ margin:0 0 14px 4px; }
  .tf-searchbtn{ display:flex; align-items:center; gap:9px; width:100%; margin-bottom:14px; padding:9px 10px; border-radius:10px; border:1px solid var(--line); background:var(--surface-2); color:var(--ink-faint); font:500 14px var(--font-body); cursor:pointer; text-align:left; }
  .tf-searchbtn span{ flex:1; }
  .tf-searchbtn kbd{ font:600 11px var(--font-mono); color:var(--ink-faint); border:1px solid var(--line-strong); border-radius:5px; padding:1px 5px; background:var(--surface); }
  .tf-searchbtn:hover{ color:var(--ink-soft); border-color:var(--line-strong); }
  .tf-gbtn{ display:flex; align-items:center; gap:11px; width:100%; padding:9px 10px; border:0; border-radius:10px; background:none; color:var(--ink-soft); font:600 15px var(--font-body); cursor:pointer; text-align:left; }
  .tf-gbtn:hover{ background:var(--surface-2); color:var(--ink); }
  .tf-grp.is-on > .tf-gbtn{ color:var(--ink); }
  .tf-grp.is-on.is-single > .tf-gbtn{ background:var(--accent-soft); color:var(--accent-strong); }
  .tf-items{ display:none; flex-direction:column; gap:1px; margin:2px 0 6px; padding-left:31px; }
  .tf-grp.is-on .tf-items{ display:flex; }
  .tf-item{ display:flex; align-items:center; width:100%; padding:7px 10px; border:0; border-radius:8px; background:none; color:var(--ink-soft); font:500 14px var(--font-body); cursor:pointer; text-align:left; }
  .tf-item:hover{ background:var(--surface-2); color:var(--ink); }
  .tf-item.is-on{ background:var(--accent-soft); color:var(--accent-strong); font-weight:600; }
  .tf-side-foot{ margin-top:auto; padding-top:14px; border-top:1px solid var(--line); display:flex; align-items:center; gap:6px; }
  .tf-side-foot .tf-sync{ flex:1; }
  .tf-side-foot .tf-sync-t{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
}

/* ---- Téléphone, iPad à la verticale ---- */
@media (max-width:1079.98px){
  html.tf-nav #app{ padding-bottom:calc(74px + env(safe-area-inset-bottom,0px)); }
  .tf-top{ position:sticky; top:0; z-index:var(--z-nav); background:var(--bg); border-bottom:1px solid var(--line); }
  @supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){
    .tf-top{ background:color-mix(in srgb, var(--bg) 86%, transparent); -webkit-backdrop-filter:saturate(1.4) blur(12px); backdrop-filter:saturate(1.4) blur(12px); }
  }
  .tf-top-in{ max-width:1000px; margin:0 auto; height:var(--tf-top-h); display:flex; align-items:center; gap:8px; padding:0 max(12px, env(safe-area-inset-right,0px)) 0 max(10px, env(safe-area-inset-left,0px)); }
  .tf-top .tf-brand{ padding:2px; }
  .tf-title{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font:700 19px var(--font-display); color:var(--ink); }
  .tf-sync-sm{ padding:10px; }
  .tf-sub{ position:sticky; top:var(--tf-top-h); z-index:calc(var(--z-nav) - 1); background:var(--bg); border-bottom:1px solid var(--line); }
  .tf-sub-in{ max-width:1000px; margin:0 auto; display:flex; gap:8px; overflow-x:auto; padding:9px 12px; scrollbar-width:none; -webkit-overflow-scrolling:touch; }
  .tf-sub-in::-webkit-scrollbar{ display:none; }
  .tf-chip{ flex:none; white-space:nowrap; padding:8px 15px; min-height:38px; border-radius:var(--radius-pill); border:1px solid var(--line); background:var(--surface); color:var(--ink-soft); font:600 14px var(--font-body); cursor:pointer; }
  .tf-chip.is-on{ background:var(--ink); border-color:var(--ink); color:var(--bg); }
  .tf-chip.is-on .tf-badge{ background:var(--bg); color:var(--ink); }
  .tf-tabs{ position:fixed; z-index:var(--z-nav); left:0; right:0; bottom:0; display:flex; justify-content:space-around; background:var(--surface); border-top:1px solid var(--line);
    padding:5px max(4px, env(safe-area-inset-right,0px)) calc(5px + env(safe-area-inset-bottom,0px)) max(4px, env(safe-area-inset-left,0px)); }
  .tf-tab{ flex:1; max-width:140px; min-height:50px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:3px; border:0; border-radius:12px; background:none; color:var(--ink-soft); font:600 11px var(--font-body); cursor:pointer; padding:4px 2px; }
  .tf-tab .tf-ic{ width:24px; height:24px; }
  .tf-tab.is-on{ color:var(--accent-strong); background:var(--accent-soft); }
  /* clavier ouvert (iPhone) : pas de barre d'onglets par-dessus le champ */
  html.tf-kbd .tf-tabs{ display:none; }
}
@media (min-width:600px) and (max-width:1079.98px){
  .tf-tab{ flex-direction:row; gap:8px; font-size:13.5px; }
}
.tf-ts{ display:none; }
@media (max-width:430px){ .tf-tl{ display:none; } .tf-ts{ display:inline; } }
@media (max-width:359px){ .tf-days{ display:none; } }

/* Mode concentration (section d'examen chronométrée) : aucun cadre */
html.tf-focus #app{ padding-left:0; }

/* Le lecteur PDF plein écran passe au-dessus du cadre */
html.pdfr-on .tf-tabs{ display:none; }

@media print{
  .tf-side, .tf-top, .tf-sub, .tf-tabs{ display:none !important; }
  html.tf-nav #app{ padding:0 !important; }
}
@media (prefers-reduced-motion:reduce){ .tf-dot{ animation:none !important; } }

/* ===== src/css/30-selection-popup.css ===== */
/* Bulle de sélection (src/js/40-selection-popup.js) */
.selbub{position:fixed;left:0;top:0;z-index:var(--z-popover);box-sizing:border-box;max-width:min(400px,calc(100vw - 16px));padding:8px;border-radius:16px;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);box-shadow:0 12px 32px rgba(0,0,0,.18),0 2px 8px rgba(0,0,0,.08);font:500 14px/1.3 var(--font-body,-apple-system,sans-serif);opacity:0;transform:translateY(4px) scale(.98);transition:opacity .14s var(--ease-out),transform .14s var(--ease-out);-webkit-user-select:none;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.selbub.is-in{opacity:1;transform:none}
.selbub-row{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.selbub-tools{margin-top:7px;padding-top:7px;border-top:1px solid var(--line)}
.selbub button{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:36px;padding:6px 12px;border-radius:var(--radius-pill);border:1px solid var(--line-strong);background:var(--surface-2);color:var(--ink);font:600 14px/1 var(--font-body,-apple-system,sans-serif);cursor:pointer;-webkit-appearance:none;appearance:none}
.selbub button:hover{background:var(--surface-3)}
.selbub button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.selbub .selbub-main{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.selbub .selbub-main:hover{background:var(--accent-strong);border-color:var(--accent-strong)}
.selbub .selbub-main[aria-pressed="true"]{background:var(--danger);border-color:var(--danger)}
.selbub .selbub-x{margin-left:auto;padding:6px 11px;background:transparent;border-color:transparent;color:var(--ink-soft)}
.selbub .v51-c{width:32px;height:32px;min-height:32px;padding:0}
.selbub .v51-cu{font-weight:700}
.selbub-tr{margin-top:8px;padding:8px 6px 2px;border-top:1px solid var(--line);font-size:15px;line-height:1.45;-webkit-user-select:text;user-select:text;overflow-wrap:anywhere;max-height:40vh;overflow:auto}
.selbub-fr{color:var(--ink-soft)}
.selbub-to{color:var(--accent-strong);font-weight:700}
.selbub-wait{color:var(--ink-faint)}
.selbub-src{display:block;margin-top:3px;font-size:11px;color:var(--ink-faint)}
.selbub .selbub-say2{min-height:28px;padding:2px 8px;vertical-align:middle;margin-left:2px}
.selbub-tr a{color:var(--accent)}
@media (pointer:coarse){
  .selbub{padding:9px}
  .selbub button{min-height:42px;padding:8px 14px;font-size:15px}
  .selbub .v51-c{width:38px;height:38px;min-height:38px}
}
@media (prefers-reduced-motion:reduce){.selbub{transition:none;transform:none}}
/* v65 : calques ignorés le temps de trouver le mot touché (voir spCaret) */
.sp-probe .pdfr-hl, .sp-probe .pdfr-hl *, .sp-probe .pdfr-ink, .sp-probe .pdfr-ink *, .sp-probe .ink-txl, .sp-probe .v51-pn, .sp-probe .v53-pn{ pointer-events:none !important; }

/* ===== src/css/40-lectures.css ===== */
/* Bibliothèque › Lectures (src/js/42-lectures.js) */
.lect-resume{ display:flex; flex-wrap:wrap; align-items:baseline; gap:4px 12px; width:100%; box-sizing:border-box; text-align:left; margin:22px 0 4px; padding:16px 18px; border-radius:16px; border:1px solid var(--accent-line); background:var(--accent-soft); color:var(--accent-strong); font:500 15px var(--font-body); cursor:pointer; }
.lect-resume strong{ font:700 18px var(--font-display); color:var(--ink); }
.lect-resume-k{ width:100%; font:600 11px var(--font-mono); letter-spacing:.08em; text-transform:uppercase; }
.lect-resume:hover{ border-color:var(--accent); }
.lect-h2{ margin:30px 0 12px; font:600 12px var(--font-mono); letter-spacing:.08em; text-transform:uppercase; color:var(--ink-soft); }
.lect-grid{ display:grid; grid-template-columns:repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap:14px; }
.lect-card{ display:flex; gap:14px; padding:12px; border-radius:16px; border:1px solid var(--line); background:var(--surface); min-width:0; }
.lect-cover{ position:relative; flex:none; width:96px; aspect-ratio:3 / 4; padding:0; overflow:hidden; border-radius:8px; border:1px solid var(--line); background:var(--surface-2); cursor:pointer; box-shadow:0 2px 6px rgba(0,0,0,.08); }
@supports not (aspect-ratio:1){ .lect-cover{ height:128px; } }
.lect-cover img{ display:block; width:100%; height:100%; object-fit:cover; }
.lect-cover:focus-visible{ outline:2px solid var(--accent); outline-offset:2px; }
.lect-gen{ display:flex; flex-direction:column; justify-content:flex-end; gap:4px; width:100%; height:100%; box-sizing:border-box; padding:9px 8px; text-align:left; color:#fff; background:var(--lc); background:linear-gradient(165deg, var(--lc) 0%, var(--lc) 55%, rgba(0,0,0,.35) 160%), var(--lc); }
.lect-gen-t{ font:700 12px/1.2 var(--font-display); }
.lect-gen-s{ font:500 9px/1.25 var(--font-body); opacity:.85; }
.lect-bar{ position:absolute; left:0; right:0; bottom:0; height:5px; background:rgba(0,0,0,.28); }
.lect-bar i{ display:block; height:100%; background:var(--success); }
.lect-b{ flex:1; min-width:0; display:flex; flex-direction:column; gap:4px; }
.lect-t{ margin:0; font:700 16.5px/1.25 var(--font-display); color:var(--ink); }
.lect-s{ margin:0; color:var(--ink-soft); font-size:13px; line-height:1.4; }
.lect-m{ margin:2px 0 0; font:500 12px var(--font-mono); color:var(--ink-faint); }
.lect-act{ display:flex; flex-wrap:wrap; align-items:center; gap:6px; margin-top:auto; padding-top:8px; }
.lect-card.is-missing{ border-style:dashed; background:transparent; }
.lect-card.is-missing .lect-cover{ cursor:default; opacity:.55; filter:grayscale(.5); }
.lect-miss{ margin:4px 0 0; font-size:13px; line-height:1.45; color:var(--ink-soft); }
.lect-miss code{ font-size:11.5px; overflow-wrap:anywhere; background:var(--surface-2); padding:1px 4px; border-radius:4px; }
.lect-dl{ display:inline-block; width:80px; height:6px; border-radius:3px; overflow:hidden; background:var(--surface-3); vertical-align:middle; }
.lect-dl i{ display:block; height:100%; background:var(--accent); transition:width .2s; }
.lect-dlt{ font-size:12px; color:var(--ink-soft); }
.lect-foot{ margin-top:30px; color:var(--ink-faint); font-size:12.5px; line-height:1.5; }
@media (max-width:420px){ .lect-cover{ width:78px; } }

/* ===== src/css/45-progress.css ===== */
/* Plan & suivi › Progrès (src/js/44-progress.js) */
.pg-tiles{ margin-top:22px; }
.pg-tiles .v33-stat[disabled]{ cursor:default; opacity:1; }
.pg-card{ margin-top:18px; }
.pg-block{ margin-top:18px; }
.pg-heat{ margin-top:10px; overflow-x:auto; padding-bottom:4px; }
.pg-months, .pg-grid{ display:grid; gap:4px; justify-content:start; }
.pg-months{ margin-bottom:4px; font:500 10.5px var(--font-mono); color:var(--ink-faint); text-transform:capitalize; }
.pg-months span{ white-space:nowrap; }
.pg-grid{ grid-auto-flow:column; grid-template-rows:repeat(7, auto); }
.pg-c{ display:block; aspect-ratio:1; min-width:10px; border-radius:3px; background:var(--surface-3); }
@supports not (aspect-ratio:1){ .pg-c{ height:14px; } }
.pg-c.l1{ background:color-mix(in srgb, var(--accent) 30%, var(--surface-2)); background:var(--accent-line); }
.pg-c.l2{ background:var(--accent); opacity:.55; }
.pg-c.l3{ background:var(--accent); opacity:.8; }
.pg-c.l4{ background:var(--accent-strong); }
.pg-c.is-future{ background:transparent; }
.pg-c.is-today{ outline:2px solid var(--ink); outline-offset:1px; }
.pg-legend{ display:flex; align-items:center; justify-content:flex-start; gap:4px; margin-top:8px; font:500 11px var(--font-mono); color:var(--ink-faint); }
.pg-legend .pg-c{ width:12px; min-width:12px; }

/* ===== src/css/50-search.css ===== */
/* Recherche globale (src/js/43-search.js) */
html.sr-on{ overflow:hidden; }
.sr{ position:fixed; inset:0; z-index:var(--z-modal); display:flex; justify-content:center; align-items:flex-start; padding:max(8vh, calc(12px + env(safe-area-inset-top,0px))) 16px 16px; }
.sr-back{ position:absolute; inset:0; background:var(--backdrop, rgba(0,0,0,.45)); animation:sr-fade .15s ease-out; }
.sr-box{ position:relative; width:100%; max-width:680px; max-height:min(76vh, 760px); display:flex; flex-direction:column; border-radius:18px; border:1px solid var(--line-strong); background:var(--surface); box-shadow:0 24px 60px rgba(0,0,0,.28); overflow:hidden; animation:sr-pop .16s var(--ease-out); }
.sr-head{ display:flex; align-items:center; gap:10px; padding:10px 12px 10px 16px; border-bottom:1px solid var(--line); color:var(--ink-faint); }
.sr-in{ flex:1; min-width:0; border:0; outline:0; background:transparent; color:var(--ink); font:500 18px var(--font-body); padding:8px 0; -webkit-appearance:none; appearance:none; }
.sr-in::-webkit-search-cancel-button{ -webkit-appearance:none; }
.sr-close{ border:1px solid var(--line); background:var(--surface-2); color:var(--ink-soft); border-radius:9px; padding:7px 11px; font:600 13px var(--font-body); cursor:pointer; }
.sr-out{ overflow-y:auto; overscroll-behavior:contain; padding:6px 8px 12px; -webkit-overflow-scrolling:touch; }
.sr-grp h3{ margin:14px 8px 6px; font:600 11px var(--font-mono); letter-spacing:.08em; text-transform:uppercase; color:var(--ink-faint); }
.sr-grp h3 span{ margin-left:6px; color:var(--ink-faint); opacity:.8; }
.sr-row{ display:flex; flex-direction:column; gap:2px; width:100%; text-align:left; padding:9px 10px; border:0; border-radius:10px; background:none; color:var(--ink); cursor:pointer; font:500 15px/1.35 var(--font-body); }
.sr-row:hover, .sr-row.is-sel{ background:var(--accent-soft); }
.sr-row:focus-visible{ outline:2px solid var(--accent); outline-offset:-2px; }
.sr-t{ font-weight:600; overflow-wrap:anywhere; }
.sr-s{ font-size:12.5px; color:var(--ink-soft); }
.sr-snip{ font-size:13.5px; color:var(--ink-soft); line-height:1.45; overflow-wrap:anywhere; }
.sr-row mark{ background:color-mix(in srgb, #ffd60a 55%, transparent); background:rgba(255,214,10,.5); color:inherit; border-radius:3px; padding:0 1px; }
.sr-qd{ display:flex; flex-direction:column; gap:4px; margin-top:6px; font-size:13.5px; }
.sr-opt{ padding:5px 8px; border-radius:7px; background:var(--surface-2); color:var(--ink-soft); }
.sr-opt.is-ok{ background:var(--success-soft); color:var(--success); font-weight:600; }
.sr-exp{ margin-top:4px; color:var(--ink-soft); line-height:1.45; }
.sr-more{ display:block; margin:2px 8px 6px; padding:6px 0; border:0; background:none; color:var(--accent); font:600 13px var(--font-body); cursor:pointer; }
.sr-empty{ padding:22px 14px; color:var(--ink-soft); }
.sr-empty p{ margin:0 0 10px; }
.sr-tips button{ margin:4px 4px 0 0; padding:6px 11px; border-radius:var(--radius-pill); border:1px solid var(--line); background:var(--surface-2); color:var(--ink-soft); font:500 13px var(--font-body); cursor:pointer; }
.sr-load{ margin:12px 10px 0; font-size:12.5px; color:var(--ink-faint); }
@keyframes sr-fade{ from{ opacity:0; } }
@keyframes sr-pop{ from{ opacity:0; transform:translateY(-6px) scale(.985); } }
@media (max-width:640px){
  .sr{ padding:0; }
  .sr-box{ max-width:none; max-height:none; height:100%; border-radius:0; border:0; padding-top:env(safe-area-inset-top,0px); }
  .sr-in{ font-size:17px; }
}
@media (prefers-reduced-motion:reduce){ .sr-back, .sr-box{ animation:none; } }

/* ===== src/css/55-carnet.css ===== */
/* v65 : 📒 Carnet + outils de texte dans la fenêtre des cas */
body.cx-open .selbub, body.cx-open .v49tip, body.cx-open .v51note, body.cx-open #v41toast{ z-index:100010 !important; }
.cn-pin{ margin-top:8px; display:inline-flex; align-items:center; gap:4px; font:600 13px var(--font-body, -apple-system, sans-serif); padding:5px 10px; border-radius:99px; border:1px solid #c8ccd1; background:#fff; color:#1d2125; cursor:pointer; }
.cn-pin.is-on{ background:#fff4cc; border-color:#e0b400; }
.cn .chipbar{ margin:6px 0 18px; }
.cn-sec{ margin:0 0 26px; }
.cn-h2{ font-size:18px; margin:0 0 10px; }
.cn-h3{ font-size:15px; margin:16px 0 6px; color:var(--ink-soft); }
.cn-grp{ border-top:1px solid var(--line); }
.cn-it{ display:flex; gap:10px; align-items:flex-start; justify-content:space-between; padding:9px 0; border-bottom:1px solid var(--line); }
.cn-tx{ flex:1; min-width:0; line-height:1.45; }
.cn-tx .v51-dot{ display:inline-block; vertical-align:middle; margin-right:6px; }
.cn-note{ margin-top:4px; font-size:14px; color:var(--ink-soft); white-space:pre-wrap; }
.cn-act{ display:flex; flex-wrap:wrap; gap:4px; flex:none; }
.cn-empty{ color:var(--ink-soft); }
.cn-pinit{ border:1px solid var(--line); border-radius:12px; margin:0 0 8px; background:var(--surface); }
.cn-pinit > summary{ cursor:pointer; padding:10px 12px; display:flex; gap:10px; align-items:baseline; list-style:none; }
.cn-pinit > summary::-webkit-details-marker{ display:none; }
.cn-src{ font-weight:700; flex:none; }
.cn-snip{ color:var(--ink-soft); min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.cn-pinbody{ padding:0 12px 12px; }
.cn-qt{ font-weight:600; }
.cn-opts{ list-style:none; padding:0; margin:6px 0 10px; }
.cn-opts li{ padding:3px 0; }
.cn-opts li.is-ok{ color:var(--success); font-weight:600; }
.cn-pinbody .cn-act{ margin-top:10px; }
@media (max-width:640px){ .cn-it{ flex-direction:column; } }
.cn-qn{ font:600 12px var(--font-mono, monospace); color:var(--ink-soft); margin-right:4px; }

/* ===== src/css/60-a11y.css ===== */
/* Accessibilité et petites protections (v64) */
:where(button, a, [role="button"], summary, input[type="checkbox"], input[type="radio"], select):focus-visible{ outline:2px solid var(--accent); outline-offset:2px; }
.sto-list{ margin:10px 0 0; padding-left:18px; line-height:1.6; color:var(--ink-soft); }
.sto-list b{ color:var(--ink); }
.sto-ok{ color:var(--success); }
@media (prefers-reduced-motion:reduce){ *, *::before, *::after{ scroll-behavior:auto !important; } }

/* ===== src/css/65-v66.css ===== */
/* v65f (19 oct) — interrupteur de thème visible + bulle d'abréviation */
.tf-themerow{ display:flex; gap:3px; padding:3px; margin:auto 0 10px; border:1px solid var(--line); border-radius:12px; background:var(--surface-2); }
.tf-themerow button{ flex:1; display:inline-flex; align-items:center; justify-content:center; gap:6px; min-height:36px; padding:6px 4px; border:0; border-radius:9px; background:transparent; color:var(--ink-soft); font:600 13px var(--font-body); cursor:pointer; -webkit-tap-highlight-color:transparent; }
.tf-themerow button:hover{ color:var(--ink); }
.tf-themerow button.is-on{ background:var(--surface); color:var(--ink); box-shadow:0 1px 3px rgba(0,0,0,.18), 0 0 0 1px var(--line); }
.tf-themerow button:focus-visible{ outline:2px solid var(--accent); outline-offset:1px; }
.tf-themerow .tf-auto{ display:inline-flex; align-items:center; justify-content:center; width:18px; height:18px; border:2px solid currentColor; border-radius:50%; font:700 10px var(--font-body); line-height:1; }
.tf-thtog svg{ display:block; }

.v66tip{ position:fixed; z-index:2147483000; max-width:min(340px, calc(100vw - 16px)); padding:7px 11px; border-radius:10px; background:#1f2a37; color:#fff; font:500 14px/1.35 var(--font-body, -apple-system, sans-serif); box-shadow:0 8px 24px rgba(0,0,0,.28); pointer-events:none; animation:v66in .12s ease-out; }
.v66tip b{ display:inline-block; margin-right:7px; padding:0 6px; border-radius:6px; background:rgba(255,255,255,.16); font:700 13px var(--font-mono, monospace); letter-spacing:.02em; }
html[data-theme="dark"] .v66tip, .dark .v66tip{ background:#f3efe6; color:#1d1d1f; }
html[data-theme="dark"] .v66tip b, .dark .v66tip b{ background:rgba(0,0,0,.08); }
@keyframes v66in{ from{ opacity:0; transform:translateY(2px); } to{ opacity:1; transform:none; } }
@media (prefers-reduced-motion:reduce){ .v66tip{ animation:none; } }

.tf-themerow + .tf-side-foot{ margin-top:0 !important; }

/* ===== src/css/70-v65u.css ===== */
/* v65 — mise à jour du 20 oct. 2026 (src/js/55-v65u-reader.js) : bulle « Phrase », panneau du bas sur téléphone,
   mot touché surligné (clair en mode Nuit). Couleurs de l'appli inchangées. */
.selbub .selbub-ph{ background:var(--surface-2); }
/* B4 : mot / phrase touché(e) */
::highlight(sp-pick){ background-color:rgba(10,91,216,.22); }
html[data-theme="dark"] ::highlight(sp-pick){ background-color:rgba(255,224,130,.55); color:inherit; }
html[data-theme="dark"] ::selection{ background:rgba(255,224,130,.42); }
html[data-theme="dark"] .pdfr .textLayer ::selection{ background:rgba(255,200,60,.45); }
html[data-theme="dark"] .qtext, html[data-theme="dark"] .review-qtext, html[data-theme="dark"] .sx-qtext, html[data-theme="dark"] .sx-que,
html[data-theme="dark"] .fccard-text, html[data-theme="dark"] .fccard-back, html[data-theme="dark"] .casecard-body{ -webkit-tap-highlight-color:rgba(255,255,255,.14); }
.pdfr-pages, .pdfr-page, .textLayer{ -webkit-tap-highlight-color:transparent; }
/* B3 : téléphone (< 600 px) — panneau fixé en bas, pleine largeur */
.selbub.selbub--sheet{ left:0 !important; right:0; top:auto !important; bottom:0; width:100%; max-width:none; border-radius:18px 18px 0 0;
  border-left:0; border-right:0; border-bottom:0; padding:14px 14px calc(12px + env(safe-area-inset-bottom)); box-shadow:0 -10px 30px rgba(0,0,0,.22);
  transform:translateY(16px); }
.selbub.selbub--sheet.is-in{ transform:none; }
.selbub.selbub--sheet::before{ content:""; display:block; width:38px; height:4px; border-radius:2px; background:var(--line-strong); margin:-6px auto 10px; }
.selbub.selbub--sheet .selbub-row{ gap:8px; }
.selbub.selbub--sheet .selbub-tr{ max-height:32vh; font-size:16px; }
.selbub.selbub--sheet .selbub-to{ font-size:17px; }
@media (prefers-reduced-motion:reduce){ .selbub.selbub--sheet{ transform:none; } }
/* 22 oct. : pendant la lecture d'un PDF, la sélection ne peut plus « fuir » vers la page de l'appli cachée derrière */
html.pdfr-on #app{ -webkit-user-select:none; user-select:none; }
.pdfr .textLayer{ -webkit-user-select:text; user-select:text; -webkit-touch-callout:default; }
.pdfr .textLayer.selecting .endOfContent{ top:0; }
/* 22 oct. : abréviation touchée → sa définition dans la bulle */
.selbub .selbub-ab{ display:block; margin-bottom:4px; color:var(--ink); }
.selbub .selbub-ab b{ color:var(--accent-strong); }
