/* innovLia World — le style de la carte, COMMUN aux pages FR et EN.
   ⛔ Aucun texte ici : ce qui se lit est dans la page (FR ou EN).

   ⛔ UN PRODUIT À PART, AUTONOME (user, 2026-09-18) : la page ne charge PLUS le
   socle du site (assets/innovlia.css · innovlia.js) — ni menu de gauche, ni barre
   du haut d'innovlia.fr. Elle porte elle-même son logo, son commutateur FR | EN
   et ses couleurs. Celles-ci sont les valeurs de la CHARTE innovLia (reprises du
   socle le 2026-09-18) : ce sont des couleurs de marque, elles ne se changent pas
   ici sans que la charte change. */
:root{
  color-scheme:dark;
  --bg:#0c1017; --bg2:#161c28; --bg3:#212936; --bd:#39435a; --bdi:#59698d;
  --tx:#f6f8fc; --tx2:#c3ccdc; --ac:#7ea6ff; --ok:#3ddba2; --ko:#ff5a5a;
  --fg:var(--tx); --fg2:var(--tx2);
  /* Le bandeau du contrôle de la donnée signale une ANOMALIE : il prend --ko.
     ⛔ Il portait #ffa967 en dur, c'est-à-dire une couleur de MARQUE (celle que
     portent des couches) réaffectée à un état, ce que la charte interdit. */
  --w-alerte:var(--ko);
  /* La chaîne en amont, sur la carte comme sur son bouton. Elle doit se
     distinguer des couleurs de couche (les quatre teintes de la charte et leurs
     éclaircies), puisqu'elle les traverse toutes : c'est le seul jaune du site (celui des QCM, qui n'apparaît nulle
     part ici) qui reste lisible sur les bandes vertes, bleues, violettes et
     orange. ⚠️ Valeur reprise aussi dans le canevas (dessin en JS). */
  --w-chaine:#ffd166;
  /* Le jaune de la pastille « version alpha » de la barre. MÊME valeur que la
     chaîne, et c'est voulu : un seul jaune dans le produit. Il a son propre nom
     pour que l'un puisse bouger sans l'autre. */
  --w-alpha:#ffd166;
  /* LA PRÉPROD (user, 2026-09-24) : la même pastille passe en ROSE quand la page est
     celle de la préprod (<html data-env="preprod">, posé par DeployWorld.ps1 -Preprod).
     Pas le jaune : on doit voir d'un coup d'œil qu'on n'est PAS sur la prod. Même rose
     que le premier trait suivi — les deux ne se croisent jamais (barre / canevas). */
  --w-preprod:#ff6ec7;
  /* LES TRAITS SUIVIS sur la carte (user, 2026-09-20) : on clique un trait, il
     prend une de ces couleurs et on suit sa course entière au milieu des
     autres. Chacune doit se lire par-dessus les bandes des couches ET ne
     pas se confondre avec le jaune de la chaîne : rose, cyan, blanc sont les
     trois teintes qu'aucune couche ne porte. TROIS suffisent — au-delà, deux
     traits partageraient une couleur et on les lirait comme un seul.
     ⚠️ Valeurs reprises dans le canevas (dessin en JS), comme --w-chaine. */
  --w-trace-1:#ff6ec7; --w-trace-2:#22d3ee; --w-trace-3:#ffffff;
  /* LE BOUTON ▶ DE YOUTUBE (user, 2026-09-25 : « une petite flèche style YouTube ») :
     le bloc a son Short publié. Le rouge de YouTube, pour ce seul bouton : on y lit
     « une vidéo à regarder » avant d'avoir lu un mot. ⛔ Ce n'est ni --ko (une anomalie)
     ni une couleur de couche. ⚠️ Valeur reprise dans le canevas (dessin en JS). */
  --w-yt:#ff0033;
  /* L'AVENIR (user, 2026-09-25 : « une couleur, nouvelle, pour l'avenir, comme ça on
     voit directement ») : ce que le bloc REND POSSIBLE, dans la fiche du téléphone. Le
     cyan : aucune couche ne le porte, et il tranche sur le jaune de l'amont.
     ⚠️ Même valeur que --w-trace-2 (les traits suivis de la carte), qui ne vivent pas
     dans la fiche : le jour où l'avenir passe sur la carte, l'une des deux change. */
  --w-avenir:#22d3ee;
  --sans:"Segoe UI",system-ui,-apple-system,Roboto,Helvetica,Arial,sans-serif;
  --mono:ui-monospace,"Cascadia Mono",Consolas,Menlo,monospace;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;overflow:hidden;background:var(--bg);color:var(--fg);font-family:var(--sans)}
/* La scène occupe TOUTE la fenêtre (plus de barre du site au-dessus). C'est une
   colonne : barre (logo, fil, recherche), frise, carte. Aucune hauteur en dur pour
   ses rangées — le jour où l'une passe à la ligne, tout se réajuste. */
#w-scene{display:flex;flex-direction:column;height:100%;
         min-height:0;overflow:hidden;overscroll-behavior:none}
button,select,input{font:inherit;color:inherit}

.bar{display:flex;align-items:center;gap:14px;padding:8px 14px;background:var(--bg2);
     border-bottom:1px solid var(--bd);position:relative;z-index:40;flex:none;min-height:46px}
/* Le seul <h1> de la page : LU, pas vu. Il reste dans le flux pour les moteurs
   et les lecteurs d'écran, mais il ne prend plus de place dans la barre —
   `display:none` l'aurait retiré des deux, ce qui n'est pas la même chose. */
.ti1{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;
     clip-path:inset(50%);white-space:nowrap;border:0}
.creux{flex:1}
/* LE LOGO, en tête de la barre, devant « innovLia World › couche ». Blanc et
   dégradé sur fond transparent : fait pour le fond sombre. Hauteur fixée, largeur
   déduite — il ne se déforme pas. Il reste sur téléphone, quand le fil disparaît. */
.logo{flex:none;display:flex;align-items:center;line-height:0}
.logo img{height:22px;width:auto;display:block}
/* LA PASTILLE « VERSION ALPHA » (user, 2026-09-20) : la carte est EN TEST, et le
   visiteur doit le savoir avant de juger ce qu'il voit. Elle se tient contre le
   logo, jamais ailleurs : c'est le produit qui est alpha, pas la page. FOND JAUNE
   PLEIN, demandé pour qu'elle se VOIE (user) : c'est la seule tache de couleur de
   la barre, donc l'œil y va. Texte sombre sur le jaune — un jaune pâle porte mal
   du blanc. ⚠️ Elle emprunte --w-alpha, le jaune de la chaîne : les deux ne se
   croisent jamais (l'une est dans la barre, l'autre sur le canevas), mais le jour
   où la pastille descend sur la carte, il lui faut sa propre couleur. Sur
   téléphone, le mot « version » tombe et « alpha » reste : c'est lui qui porte. */
.alpha{flex:none;display:inline-flex;align-items:center;gap:.34em;padding:3px 9px;
       border-radius:6px;background:var(--w-alpha);color:var(--bg);
       font-size:.68rem;font-weight:800;letter-spacing:.07em;
       text-transform:uppercase;line-height:1.35;white-space:nowrap;cursor:default}
.alpha.preprod{background:var(--w-preprod)}
/* LE SÉLECTEUR DE MONDE (user, 2026-09-24) : Informatique, Mathématiques, Physique…
   Un <select> NATIF, habillé comme les autres commandes de la barre ; la flèche est
   dessinée (appearance:none l'efface). Au téléphone il passe en tête de la liste
   (`.m-liste`) : la barre n'a pas la place. */
.monde{flex:none;appearance:none;-webkit-appearance:none;max-width:230px;
       background:var(--bg3) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23c3ccdc' stroke-width='1.6' fill='none'/%3E%3C/svg%3E") no-repeat right 11px center;
       border:1px solid var(--bdi);border-radius:8px;padding:5px 30px 5px 11px;
       font-size:.84rem;font-weight:700;color:var(--fg);cursor:pointer;
       text-overflow:ellipsis;white-space:nowrap}
.monde:hover{border-color:var(--fg)}
.monde:focus-visible{outline:2px solid var(--ac);outline-offset:1px}
.monde option{background:var(--bg2);color:var(--fg);font-weight:600}
@media (max-width:900px){ .m-barre{display:none} }
/* LE COMMUTATEUR FR | EN — celui du site, recopié parce que la page ne charge plus
   le socle. ⚠️ L'ACTIF est un fond plein à texte sombre, pas « un peu plus clair » :
   c'est le CONTRASTE qui dit où l'on est, pas la teinte. Un <span> pour la langue
   lue (un lien vers soi-même est un piège au clavier), un <a> pour l'autre. */
.lang{flex:none;display:inline-flex;align-items:stretch;gap:2px;padding:2px;border-radius:99px;
      background:var(--bg3);border:1px solid var(--bd);white-space:nowrap;min-height:32px}
.lang .lg-l{display:inline-flex;align-items:center;padding:0 10px;border-radius:99px;color:var(--tx2);
            font-size:.76rem;font-weight:700;letter-spacing:.04em;line-height:1;text-decoration:none}
.lang .lg-l.on{background:var(--tx);color:var(--bg);cursor:default}
.lang a.lg-l:hover{color:var(--ac);background:rgba(126,166,255,.14)}
.lang a.lg-l:focus-visible{outline:2px solid var(--ac);outline-offset:-2px}
/* LE ZOOM : deux boutons et le niveau, dans la barre. Le niveau est écrit — un
   « + » grisé sans chiffre ne dit pas OÙ l'on en est. Chasse fixe, sinon la
   largeur saute entre « 100 % » et « 125 % » et la barre tremble. */
.zm{display:flex;align-items:center;gap:2px;flex:none;background:var(--bg3);
    border:1px solid var(--bdi);border-radius:8px;padding:2px}
.zb{width:26px;height:26px;background:none;border:0;border-radius:6px;color:var(--fg);
    font-size:1rem;line-height:1;cursor:pointer}
.zb:hover:not(:disabled){background:var(--bg2)}
.zb:disabled{opacity:.3;cursor:default}
.zn{font-family:var(--mono);font-size:.7rem;color:var(--fg2);width:44px;text-align:center}
.fil{display:flex;align-items:center;gap:6px;font-size:.82rem;color:var(--fg2);min-width:0;
     overflow:hidden;white-space:nowrap}
.fil b{color:var(--fg);font-weight:600}
.fil em{font-style:normal;opacity:.45}
.champ{display:flex;align-items:center;background:var(--bg3);border:1px solid var(--bdi);border-radius:8px;padding:4px 10px}
.champ input{background:none;border:0;outline:none;width:190px;font-size:.84rem}
.champ input::placeholder{color:#67739180}

/* ---- PLEIN ÉCRAN : celui de Bloc Draw et d'Agents Builder, à la lettre ----
   La scène demande le plein écran natif et RETOMBE sur ce mode CSS quand le
   navigateur le refuse (page dans un cadre sans `allow="fullscreen"`) — sans ce
   repli le bouton ne ferait rien du tout. */
.fs{display:flex;align-items:center;gap:6px;flex:none;background:var(--bg3);
    border:1px solid var(--bdi);border-radius:8px;padding:5px 11px;
    font-size:.82rem;cursor:pointer;white-space:nowrap}
.fs:hover{border-color:var(--fg)}
.fs.on{border-color:var(--w-chaine);color:var(--w-chaine)}
body.w-fullscreen{overflow:hidden}
/* ⚠️ `dvh` en second : sur mobile la barre d'adresse rogne le `vh`, et un
   navigateur qui ne connaît pas l'unité garde simplement la ligne d'avant. */
body.w-fullscreen #w-scene{height:100vh !important;height:100dvh !important}
#w-scene:fullscreen{background:var(--bg);width:100vw;height:100vh}
#w-scene:-webkit-full-screen{background:var(--bg);width:100vw;height:100vh}

/* =====================================================================
   UNE SEULE COMMANDE : LA FRISE — ET AUCUN FILTRE

   ⛔ IL N'Y A QU'UNE CARTE. Toutes les couches et tous les composants y sont
   ensemble, et TOUTES les liaisons sont tracées, y compris celles qui
   traversent toute la hauteur de la carte. Découper le monde par niveau
   coupait la moitié des chaînes ; on ne le fait plus.

   ⛔ V / N / A / E N'ONT PLUS D'ORGANE DE NAVIGATION. Une colonne de repères
   a occupé 154 px à gauche pour ne rien faire que la molette ne fasse mieux :
   elle est partie, la carte a récupéré la place. Il reste d'eux le liseré de
   couleur au bord gauche de la carte — de l'information, pas une commande.

   ⛔ ET LA FRISE MONTRE UNE ANNÉE, PAS UNE PLAGE. Une large fenêtre disait
   « vous voyez de 1970 à 1995 » : personne ne cherche cette information. Ce
   qu'on veut savoir, c'est OÙ ON EST — un chiffre, écrit.
   ===================================================================== */
.frise{display:flex;align-items:stretch;gap:8px;padding:6px 10px;background:var(--bg2);
       border-bottom:1px solid var(--bd);position:relative;z-index:35;flex:none;height:46px}
.frise .fl{width:40px;flex:none;background:var(--bg3);border:1px solid var(--bdi);border-radius:8px;
           font-size:1.25rem;line-height:1;cursor:pointer;display:grid;place-items:center;color:var(--fg)}
.frise .fl:hover{border-color:var(--fg);background:var(--bg3)}
.frise .fl:disabled{opacity:.3;cursor:default;border-color:var(--bd)}
.rail{position:relative;flex:1;min-width:0;background:var(--bg);border:1px solid var(--bd);
      border-radius:8px;overflow:hidden;touch-action:none;cursor:pointer}
/* ⛔ La graduation est posée à l'abscisse RÉELLE de son année dans le monde :
   la frise et la carte montrent le même axe, sinon la fenêtre désignerait un
   endroit qui n'est pas celui qu'on voit. */
/* Un trait de graduation ne délimite aucun contrôle : il prend le bord
   DÉCORATIF (--bd), pas celui d'un composant qu'on manipule. */
.gr{position:absolute;top:0;bottom:0;width:1px;background:var(--bd);z-index:1}
.gr span{position:absolute;top:50%;left:5px;transform:translateY(-50%);font-family:var(--mono);
         font-size:.58rem;color:var(--fg2);white-space:nowrap}
/* le curseur d'année : une pastille posée sur l'année du centre de la vue */
/* ⛔ UN APLAT, PAS UN CONTOUR, ET UN SEUL ÉTAT. Le fond était --bg3 sur un rail
   --bg presque aussi sombre : la pastille ne se lisait plus que par son filet
   et se confondait avec les graduations. C'est un JETON qu'on attrape — il doit
   avoir le poids d'un objet posé sur la frise.
   ⛔ Il garde la MÊME couleur qu'on ait choisi un composant ou non. Deux teintes
   demandaient d'apprendre laquelle veut dire quoi, pour une nuance que le
   chiffre affiché dit déjà. Le glissement ne change pas la couleur non plus :
   le curseur qui devient une main suffit à dire qu'on tient l'objet.
   ⚠️ Encre SOMBRE sur l'aplat vif, jamais du blanc — règle de la charte, et
   c'est aussi ce qui donne le meilleur contraste. */
.cur{position:absolute;top:3px;bottom:3px;transform:translateX(-50%);
     display:flex;align-items:center;padding:0 11px;background:var(--ok);
     border:1px solid var(--ok);border-radius:6px;font-family:var(--mono);
     font-size:.7rem;font-weight:700;color:#0c1017;cursor:grab;z-index:3;
     white-space:nowrap;box-shadow:0 1px 6px rgba(0,0,0,.5)}
.cur.tire{cursor:grabbing}
/* ⚠️ LA FRISE EN MODE CHAÎNE : les chevrons prennent la place des graduations,
   dans le MÊME rail et à la même hauteur — c'est la barre qui change de métier,
   pas la page qui grandit. La pointe donne le sens ; l'ordre est chronologique.
   ⚠️ Pas de bordure : `clip-path` taille la boîte APRÈS le tracé du cadre, un
   filet ressortirait coupé sur la pointe.
   ⚠️ L'ascenseur est masqué : sur 44 px de haut il mangeait la moitié du texte.
   La chaîne se pousse à la molette ou au doigt. */
.rail .chaine{display:flex;align-items:stretch;gap:3px;height:100%;overflow-x:auto;
              scrollbar-width:none}
.rail .chaine::-webkit-scrollbar{display:none}
.pc{flex:none;display:flex;align-items:center;gap:7px;background:var(--bg3);border:0;
    color:var(--fg);cursor:pointer;padding:0 13px 0 20px;line-height:1.1;
    clip-path:polygon(0 0, calc(100% - 10px) 0, 100% 50%, calc(100% - 10px) 100%,
                      0 100%, 10px 50%)}
.pc:hover{background:var(--bg2)}
.pc b{font-size:.76rem;font-weight:600;white-space:nowrap}
.pc i{font-family:var(--mono);font-size:.62rem;font-style:normal;color:var(--fg2)}
/* Le bloc ouvert reprend la couleur du jeton d'année dont il prend la place :
   c'est le même « vous êtes ici », il n'y a pas deux codes à apprendre. */
.pc.ici{background:var(--ok);color:#0c1017}
.pc.ici b{font-weight:700}
.pc.ici i{color:#0c1017;opacity:.7}

/* LE CORPS, une rangée : la LISTE (insérée par le script ; sur PC, à gauche — § LA LISTE
   SUR PC) puis le PLAN, une colonne : la frise du temps, puis la carte. La frise est au
   plan, pas à la page : elle règle la carte, la liste n'a pas d'année. */
.corps{flex:1;min-height:0;display:flex}
.plan{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}

.scene{position:relative;flex:1;min-width:0;min-height:0;overflow:hidden}
canvas#carte{display:block;width:100%;height:100%;touch-action:none;cursor:grab}
canvas#carte.tire{cursor:grabbing}

.pip{position:absolute;z-index:20;width:344px;background:rgba(18,24,35,.985);border:1px solid var(--bd);
     border-radius:12px;overflow:hidden;box-shadow:0 20px 50px rgba(0,0,0,.6);pointer-events:none;
     opacity:0;transform:translateY(6px);transition:opacity .13s ease,transform .13s ease}
.pip.on{opacity:1;transform:none}
/* ⛔ LA BULLE NE PORTE QUE DEUX CHOSES (user, 2026-09-12) : le NOM du bloc et sa
   PORTÉE. La miniature, la ligne couche · année, la définition et l'appel
   à cliquer sont partis : la fiche de droite les redit tous, et survoler puis
   ouvrir donnait deux fois le même texte. */
.pip .tx{padding:11px 13px 13px}
.pip .ti{font-weight:700;font-size:1rem;line-height:1.3;margin:0 0 7px}
/* L'année et la couche SITUENT, elles ne titrent pas — mais la ligne se lit d'un
   trait : MÊME taille et même police que le nom (user, 2026-09-12). Ce qui les
   distingue, c'est la graisse et la sourdine, pas la taille. */
.pip .ti .si{font-weight:400;color:var(--fg2)}
.pip .re{font-size:.82rem;line-height:1.5;margin:0;color:var(--fg2);
         border-left:2px solid var(--bd);padding-left:9px}

/* --- LE BANDEAU DU CONTRÔLE ---
   ⛔ Il NOMME, il ne corrige rien. Une donnée réparée en silence au chargement
   partirait en ligne fausse sans que personne l'ait relue — c'est la même loi
   que pour objectifs.json et la banque de QCM. */
.alerte{position:absolute;left:12px;right:12px;top:12px;z-index:25;
        background:color-mix(in srgb, var(--w-alerte) 16%, var(--bg2));
        border:1px solid var(--w-alerte);border-radius:9px;
        padding:11px 38px 11px 13px;font-size:.8rem;line-height:1.5;color:var(--fg);
        max-height:44%;overflow-y:auto}
.alerte[hidden]{display:none}
.alerte b{color:var(--w-alerte)}
.alerte ul{margin:6px 0 0;padding-left:18px}
.alerte li{margin:0 0 3px}
.alerte .x{position:absolute;top:5px;right:9px;background:none;border:0;
           color:var(--w-alerte);font-size:1.3rem;line-height:1;cursor:pointer}

.pan{position:absolute;top:0;right:0;bottom:0;width:min(440px,100%);background:var(--bg2);
     border-left:1px solid var(--bd);z-index:30;overflow-y:auto;padding:18px;
     transform:translateX(102%);transition:transform .22s ease}
.pan.on{transform:none}
.pan .x{position:absolute;top:12px;right:14px;background:none;border:0;color:var(--fg2);
        font-size:1.5rem;line-height:1;cursor:pointer}
/* ⚠️ `:is(.pan,.fiche)` : le panneau de la carte et la fiche de la liste
   (téléphone) portent la MÊME fiche — un seul style pour les deux. */
:is(.pan,.fiche) .cadre{position:relative;aspect-ratio:16/9;border-radius:9px;overflow:hidden;background:#000;margin-bottom:14px}
:is(.pan,.fiche) .cadre iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
/* Le Short rattaché au bloc : le même cadre, en 9:16 et centré. Largeur bornée,
   sinon il ferait près de 800 px de haut dans la colonne. */
:is(.pan,.fiche) .cadre.v{aspect-ratio:9/16;width:min(260px,100%);margin-left:auto;margin-right:auto}
/* L'IMAGE DU BLOC, quand il n'a pas de vidéo (user, 2026-09-25) : UNE SEULE, celle de la
   situation — verticale comme le Short d'où elle vient, centrée, à sa taille.
   ⚠️ `contain`, jamais `cover` : l'image porte le nom du bloc dans son cadre, rogner les
   bords pourrait le couper. */
:is(.pan,.fiche) .imgs{display:grid;grid-template-columns:min(260px,100%);justify-content:center;
                       margin-bottom:14px}
:is(.pan,.fiche) .imgs img{display:block;width:100%;height:auto;aspect-ratio:9/16;
                           object-fit:contain;border-radius:9px;background:#000}
.fiche .imgs{grid-template-columns:min(100%,calc(64vh*9/16))}
:is(.pan,.fiche) p{font-size:.92rem;line-height:1.6;margin:0 0 11px}
:is(.pan,.fiche) h3{font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--fg2);margin:17px 0 8px}

/* ⛔ Le bouton « Remonter toute la chaîne » et son chemin sont partis le
   2026-09-12 : « Repose sur » mène déjà de proche en proche. `--w-chaine` reste,
   c'est la couleur de la chaîne DESSINÉE sur la carte. */
:is(.pan,.fiche) .vide{border:1px dashed var(--bdi);border-radius:9px;padding:14px;color:var(--fg2);
           font-size:.85rem;line-height:1.55}

/* --- CE QUI S'AJOUTE À LA FICHE : les lectures, la playlist, les verticaux ---
   Trois listes, un seul gabarit : une ligne cliquable à bord gauche coloré.
   ⛔ Pas de vignette ici — la fiche en porte déjà une, celle du lecteur ; en
   empiler quatre autres ferait de la colonne un mur d'images de 16:9 où la
   définition du composant ne se lit plus. */
.lst{display:flex;flex-direction:column;gap:6px}
.lg{display:block;width:100%;text-align:left;background:var(--bg3);border:1px solid var(--bdi);
    border-left:3px solid var(--ac);border-radius:8px;padding:9px 11px;font-size:.83rem;
    line-height:1.4;cursor:pointer;color:var(--fg);text-decoration:none}
.lg:hover{border-color:var(--fg);border-left-color:var(--ac)}
.lg.en-cours{border-left-color:var(--w-chaine);color:var(--fg2);cursor:default}
/* UNE LEÇON = DEUX COLONNES : | GPS | texte | (dessin du user, 2026-09-12).
   Le code tient une colonne à lui, de largeur FIXE : les codes s'alignent d'une
   ligne à l'autre et se lisent d'un coup d'œil, quelle que soit la longueur du
   titre — qui, lui, peut passer à la ligne sans déranger la colonne.
   ⚠️ LA DIFFICULTÉ EST UNE COULEUR DE FOND, pas une lettre de plus : ce sont les
   trois couleurs des MINIATURES de la chaîne (A débutant vert · B intermédiaire
   orange · C avancé rouge), que le visiteur a déjà vues sur les vignettes.
   Encre sombre sur le vert et l'orange, blanche sur le rouge : c'est le seul des
   trois où le noir ne tient pas le contraste. */
.lg.lec{display:flex;align-items:stretch;padding:0;overflow:hidden}
.lg.lec .cd{flex:none;display:flex;align-items:center;justify-content:center;width:80px;
            font-family:var(--mono);font-size:.72rem;font-weight:700;letter-spacing:.03em;
            color:#0b0f16;background:var(--bdi)}
.lg.lec .tt{min-width:0;padding:9px 11px}
.lg.lec .cd.dA{background:#22c55e}
.lg.lec .cd.dB{background:#f97316}
.lg.lec .cd.dC{background:#dc2626;color:#fff}
/* ⛔ Plus de gabarit de format court ici : le Short du bloc EST le lecteur du
   haut (`.pan .cadre.v`), la fiche ne le répète plus sous la définition. */

@media (max-width:900px){
  .fil,.champ{display:none}
  .bar{gap:10px;padding:6px 10px}
  .logo img{height:18px}
  .alpha{padding:2px 7px;letter-spacing:.06em}
  .alpha .al-l{display:none}
  /* Le bouton rend son mot et garde son icône — la rangée doit tenir sur une
     ligne, et ⛶ se lit seul. Cible tactile ≥ 44 px. */
  .fs .fs-l{display:none}
  .fs{padding:0;width:44px;height:44px;justify-content:center;font-size:1.05rem}
  .frise{height:40px;padding:5px 7px;gap:6px}
  .frise .fl{width:34px;font-size:1.05rem}
  .pip{width:min(310px,calc(100vw - 24px))}
}

/* =====================================================================
   LA LISTE — LA CARTE SUR TÉLÉPHONE (user, 2026-09-24)
   Couche (accordéon) › blocs par année. Le bouton Carte | Liste de la barre
   bascule (≤ 900 px) ; la liste s'ouvre d'office ≤ 760 px. `body.w-liste` =
   mode liste : le plan (frise + carte), le zoom et le plein écran s'effacent,
   la liste prend leur place sous la barre. Sur PC, la même liste se tient à
   côté de la carte (§ LA LISTE SUR PC, plus bas).
   ⚠️ Cibles tactiles ≥ 44 px partout ; champ de recherche à 16 px (1rem),
   sinon iOS zoome la page au toucher.
   ===================================================================== */
.vue{display:flex;align-items:center;gap:7px;flex:none;background:var(--bg3);
     border:1px solid var(--bdi);border-radius:8px;padding:0 12px;height:44px;
     font-size:.84rem;font-weight:600;cursor:pointer;white-space:nowrap}
.vue svg{width:16px;height:16px;flex:none}
.vue:hover{border-color:var(--fg)}
.vue:focus-visible{outline:2px solid var(--ac);outline-offset:1px}
/* Sur la carte dessinée d'un petit téléphone, la barre porte aussi le zoom et le
   plein écran : le bouton rend son mot et garde son icône, comme ⛶. */
@media (max-width:520px){
  .bar{gap:6px}
  body:not(.w-liste) .vue{width:44px;padding:0;justify-content:center}
  body:not(.w-liste) .vue span{display:none}
  /* ⚠️ Le zoom part : à 360 px, la barre ne tient pas logo, alpha, plein écran,
     zoom, Liste et FR | EN sur une ligne, et c'était FR | EN qui sortait de
     l'écran. La carte s'ouvre à sa taille lisible ; la liste est à un bouton. */
  body:not(.w-liste) .zm{display:none}
}
.liste,.fiche{display:none}
body.w-liste .plan,body.w-liste .zm,body.w-liste .fs{display:none}
body.w-liste .liste{display:block;flex:1;min-width:0;min-height:0;overflow-y:auto;overscroll-behavior:contain;
                    -webkit-overflow-scrolling:touch}
.liste [hidden]{display:none !important}

.lchamp{position:sticky;top:0;z-index:5;padding:10px 12px;background:var(--bg);
        border-bottom:1px solid var(--bd);display:flex;flex-direction:column;gap:8px}
.lchamp .m-liste{width:100%;max-width:none;height:44px;font-size:1rem;border-radius:10px}
.lchamp input{width:100%;height:44px;background:var(--bg3);border:1px solid var(--bdi);
              border-radius:10px;padding:0 14px;font-size:1rem;outline:none}
.lchamp input:focus{border-color:var(--ac)}
.lchamp input::placeholder{color:var(--fg2);opacity:.7}
.lcorps{padding:16px 12px 32px;max-width:720px;margin:0 auto}

/* LA COUCHE : l'accordéon. Liseré à sa couleur (celle de sa bande sur la carte),
   nom, sous-titre, nombre de blocs, chevron. */
.lc{margin:0 0 8px;background:var(--bg2);border:1px solid var(--bd);
    border-left:3px solid var(--c);border-radius:10px;overflow:hidden}
.lc summary{display:flex;align-items:center;gap:10px;min-height:54px;padding:8px 14px;
            cursor:pointer;list-style:none;-webkit-tap-highlight-color:transparent}
.lc summary::-webkit-details-marker{display:none}
/* Le chevron : › fermé, pointe en bas ouvert. */
.lc summary::after{content:"›";flex:none;width:14px;text-align:center;font-size:1.35rem;
                   line-height:1;color:var(--fg2);transition:transform .18s ease}
.lc[open] summary::after{transform:rotate(90deg)}
.lc summary:focus-visible{outline:2px solid var(--ac);outline-offset:-2px}
.lc-n{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.lc-n b{color:var(--c);font-size:.98rem;font-weight:700}
.lc-n i{font-style:normal;font-size:.76rem;color:var(--fg2)}
.lc .nb{flex:none;font-family:var(--mono);font-size:.72rem;color:var(--fg2);
        background:var(--bg3);border-radius:99px;padding:2px 9px}

/* LE BLOC : une ligne qu'on touche. Nom (+ le bouton ▶ de YouTube si son Short est
   publié, le même signe que sur la carte), portée sur deux lignes au plus, année à droite. */
.li{border-top:1px solid var(--bd)}
.it{display:flex;align-items:flex-start;gap:12px;width:100%;min-height:54px;padding:11px 14px;
    background:none;border:0;border-bottom:1px solid var(--bd);text-align:left;cursor:pointer;
    -webkit-tap-highlight-color:transparent}
.it:last-child{border-bottom:0}
.it:active,.it.ici{background:var(--bg3)}
.it:focus-visible{outline:2px solid var(--ac);outline-offset:-2px}
.it-l{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.it-n{display:flex;align-items:center;gap:8px}
.it-n b{font-size:.96rem;font-weight:600}
.it-l i{font-style:normal;font-size:.8rem;line-height:1.45;color:var(--fg2);
        display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.it-a{flex:none;font-family:var(--mono);font-size:.74rem;color:var(--fg2);padding-top:3px}
/* Le bouton ▶ : cartouche rouge aux coins ronds, triangle blanc — celui de YouTube. */
.sh{flex:none;position:relative;width:18px;height:13px;border-radius:4px;background:var(--w-yt)}
.sh::after{content:"";position:absolute;left:7px;top:3.5px;border-left:5.5px solid #fff;
           border-top:3px solid transparent;border-bottom:3px solid transparent}
.lvide{margin:28px 4px;color:var(--fg2);font-size:.9rem;text-align:center}

/* LA FICHE : plein écran, glisse depuis la droite. En-tête collé en haut, avec
   le retour ‹ (et le retour du téléphone fait de même). */
body.w-liste .fiche{display:block}
.fiche{position:fixed;inset:0;z-index:60;background:var(--bg);overflow-y:auto;
       overscroll-behavior:contain;transform:translateX(102%);visibility:hidden;
       transition:transform .22s ease,visibility 0s linear .22s}
.fiche.on{transform:none;visibility:visible;transition:transform .22s ease}
.fi-h{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:4px;
      padding:6px 14px 6px 4px;background:var(--bg2);border-top:3px solid var(--c);
      border-bottom:1px solid var(--bd)}
.fi-x{flex:none;width:44px;height:44px;background:none;border:0;border-radius:8px;
      font-size:2rem;line-height:1;color:var(--fg);cursor:pointer}
.fi-x:focus-visible{outline:2px solid var(--ac)}
.fi-t{min-width:0}
.fiche .fi-s{margin:0;font-size:.76rem;line-height:1.4;color:var(--c)}
.fi-n{margin:0;font-size:1.15rem;line-height:1.25}
.fi-c{padding:14px 16px 36px;max-width:640px;margin:0 auto}
.fiche .fi-r{color:var(--fg2);font-size:.86rem;border-left:2px solid var(--bd);padding-left:10px}
/* Le Short en 9:16 : aussi grand que l'écran le permet, sans dépasser. */
.fiche .cadre.v{width:min(100%,calc(64vh*9/16));width:min(100%,calc(64dvh*9/16))}
/* « REPOSE SUR », puis « REND POSSIBLE » : chacun sa rangée de chevrons, par année —
   jamais mêlés (user, 2026-09-25). « Rend possible » en montre DEUX, qui se partagent
   la largeur (`.court` : un nom trop long finit en « … ») ; le « +N » du titre, toujours
   en vue, déplie le reste et la rangée passe à la ligne (`.tout`). */
.fi-ch{display:flex;gap:3px;height:46px;overflow-x:auto;scrollbar-width:none;
       margin:0 -16px;padding:0 16px}
.fi-ch::-webkit-scrollbar{display:none}
.fi-ch .pc[hidden]{display:none}
.fi-ch.court .pc{flex:0 1 auto;min-width:0}
.fi-ch.court .pc b{min-width:0;overflow:hidden;text-overflow:ellipsis}
.fi-ch.court .pc i{flex:none}
.fi-ch.tout{flex-wrap:wrap;height:auto;overflow:visible}
.fi-ch.tout .pc{height:46px}
/* Le « +N » : au bout du titre, cible tactile de 44 px sans épaissir la ligne. */
.fiche .fi-rt{display:flex;align-items:center;gap:8px}
.fi-plus{margin:-10px 0 -10px auto;min-width:44px;min-height:36px;padding:0 12px;
         background:var(--bg3);border:1px solid var(--bdi);border-radius:99px;color:var(--fg);
         cursor:pointer;font-family:var(--mono);font-size:.8rem;font-weight:700;letter-spacing:0}
.fi-plus:focus-visible{outline:2px solid var(--ac);outline-offset:1px}
/* « Rend possible » dans la couleur de l'avenir : titre, chevrons pleins à encre sombre
   (comme le vert du « vous êtes ici » de la frise), et son « +N ». */
.fiche .fi-rt.avenir{color:var(--w-avenir)}
.fi-ch.avenir .pc{background:var(--w-avenir);color:#0c1017}
.fi-ch.avenir .pc:hover{background:color-mix(in srgb, var(--w-avenir) 78%, #fff)}
.fi-ch.avenir .pc i{color:#0c1017;opacity:.7}
.fi-rt.avenir .fi-plus{border-color:var(--w-avenir);color:var(--w-avenir)}

/* =====================================================================
   LA LISTE SUR PC — À CÔTÉ DE LA CARTE (user, 2026-09-25 : « la navigation
   n'est pas intuitive sur PC, le mobile est au top »)
   La liste du téléphone, en colonne à gauche du plan : toutes les couches sous
   les yeux, un bloc touché → la carte y va et ouvre sa fiche à droite. Elle suit
   la carte en retour : le bloc ouvert y est marqué d'un liseré VERT — le « vous
   êtes ici » de la frise —, sa couche ouverte.
   - Le bouton ☰ tient la TÊTE de la barre, devant le logo (là où l'on cherche le
     bouton d'un volet de gauche) ; `body.w-som` = la liste ouverte.
   - La recherche et le sélecteur de monde restent dans la barre : la recherche
     y filtre la liste en direct. L'en-tête de la liste (fait pour le téléphone)
     est donc masqué ici.
   ⚠️ `not all and (max-width:900px)` : le complément EXACT du téléphone, comme le
   script (MQ_BASCULE). Un `min-width:901px` laisserait un trou à 900,5 px.
   ===================================================================== */
@media not all and (max-width:900px){
  .vue{width:38px;height:34px;padding:0;justify-content:center}
  .vue span{display:none}
  .vue[aria-pressed="true"]{border-color:var(--ac);color:var(--ac)}
  body.w-som .liste{display:block;flex:none;width:clamp(260px,22vw,330px);min-height:0;
                    overflow-y:auto;overscroll-behavior:contain;border-right:1px solid var(--bd);
                    scrollbar-width:thin;scrollbar-color:var(--bd) transparent}
  body.w-som .lchamp{display:none}
  body.w-som .lcorps{padding:10px 10px 24px;max-width:none}
  body.w-som .lc summary{min-height:48px;padding:6px 12px}
  body.w-som .it{min-height:0;padding:9px 12px}
  /* Le bloc choisi : fond teinté de vert et liseré vert — le vert du bloc sur la carte
     (user, 2026-09-25 : « colorier en background le bloc sélectionné »). Une TEINTE ici,
     pas l'aplat de la carte : sur trois lignes de texte, un aplat vif crierait. */
  body.w-som .it.ici{background:color-mix(in srgb, var(--ok) 17%, var(--bg2));
                     box-shadow:inset 3px 0 0 var(--ok)}
  @media (hover:hover){
    body.w-som .lc summary:hover,body.w-som .it:not(.ici):hover{background:var(--bg3)}
  }
  /* LA BARRE SERRÉE (901–1180 px) : avec le bouton de la liste, la rangée ne tenait
     plus et FR | EN sortait de l'écran. Les commandes gardent leur signe et rendent
     leur mot, comme au téléphone ; la recherche et le monde se font plus étroits. */
  @media (max-width:1180px){
    .bar{gap:10px;padding:8px 10px}
    .alpha .al-l{display:none}
    .fs .fs-l{display:none}
    .fs{padding:5px 10px}
    .monde{max-width:160px}
    .champ input{width:120px}
  }
}
