/* Hypervisible, application : base, coquille (barre haute, rail, bandeau, pied), typographie, lumière.
   DA v3 « Noir » (brand/charte.html, dossier/02-DIRECTION-ARTISTIQUE.md) : le noir est la scène, la
   lumière est le contenu, le bleu est ce qui traverse. Jetons : ../assets/tokens.css, seule source des
   couleurs, polices, rayons et ombres ; composants de référence : brand/ui.css. Aucun littéral ici. */
:root {
  --haut: 56px;            /* barre haute */
  --rail: 232px;           /* rail des écrans */
  --pad-contenu: 40px;     /* gouttière du contenu */
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-padding-top: calc(var(--haut) + 16px); background: var(--fond); scrollbar-color: var(--voile-4) var(--fond); }
body {
  margin: 0; min-height: 100vh; background: var(--fond); color: var(--encre);
  font-family: var(--police); font-size: var(--taille-corps); line-height: var(--interligne-corps);
  font-optical-sizing: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility; font-feature-settings: "cv11", "ss01"; caret-color: var(--bleu-texte);
}
img, svg { display: block; max-width: 100%; }
h1, h2, h3, p, ul, ol, figure, fieldset, dl, dd, blockquote { margin: 0; }
h1, h2, h3 { font-weight: var(--graisse-moyenne); }
ul, ol { padding: 0; list-style: none; }
fieldset { border: 0; padding: 0; min-width: 0; }
button, input, select, textarea { font: inherit; color: inherit; }
b, strong { font-weight: var(--graisse-moyenne); }
a { color: var(--bleu-texte); text-decoration: none; text-decoration-thickness: 1px; text-underline-offset: 3px; }
a:hover { text-decoration: underline; }
:focus-visible { outline: none; box-shadow: var(--anneau-focus); border-radius: var(--rayon-2); }
::selection { background: var(--selection); color: var(--encre); }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--voile-3); border-radius: var(--rayon-pilule); border: 2px solid var(--fond); }
::-webkit-scrollbar-thumb:hover { background: var(--voile-4); }
.sr-only { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.saut { position: absolute; left: 16px; top: -60px; z-index: 100; padding: 10px 16px; border-radius: var(--rayon-2); background: var(--bouton-primaire-fond); color: var(--bouton-primaire-encre); font-weight: var(--graisse-moyenne); text-decoration: none; }
.saut:focus { top: 8px; }
.ic { width: 16px; height: 16px; flex: none; fill: none; stroke: currentColor; stroke-width: var(--trait-icone); stroke-linecap: round; stroke-linejoin: round; }
.noscript { padding: 24px; color: var(--encre-2); }

/* ---------- Typographie ---------- */
.titre { font-size: var(--taille-h1); font-weight: var(--graisse-moyenne); line-height: var(--interligne-titre); letter-spacing: var(--approche-heros); color: var(--encre); text-wrap: balance; }
.titre em, em.accent { font-style: normal; color: var(--bleu-clair); }
.ecran-meta { margin-top: 14px; font-size: var(--taille-petit); font-weight: var(--graisse-moyenne); color: var(--encre-2); font-variant-numeric: tabular-nums; }
.phrase { margin-top: 12px; max-width: 62ch; font-size: var(--taille-intro); line-height: 1.5; color: var(--encre-2); text-wrap: pretty; }
.phrase b { color: var(--encre); }
.etiquette { font-size: var(--taille-etiquette); font-weight: var(--graisse-moyenne); line-height: 1.4; color: var(--encre-2); }
.h3 { font-size: var(--taille-h3); font-weight: var(--graisse-moyenne); line-height: 1.3; letter-spacing: var(--approche-h3); color: var(--encre); }
.num { font-variant-numeric: tabular-nums; font-feature-settings: "tnum", "cv11"; }
.mono { font-family: var(--police-mono); font-size: 0.92em; }
.secondaire { font-size: var(--taille-petit); line-height: 1.5; color: var(--encre-2); }
.tertiaire { font-size: var(--taille-etiquette); line-height: 1.5; color: var(--encre-2); }
.aide { font-size: var(--taille-petit); line-height: 1.5; color: var(--encre-2); }

/* ---------- Coquille : haut / rail + contenu / pied ---------- */
.app {
  display: grid; grid-template-columns: var(--rail) minmax(0, 1fr);
  grid-template-rows: var(--haut) auto minmax(0, 1fr) auto;
  grid-template-areas: "haut haut" "rail bandeau" "rail contenu" "rail pied";
  min-height: 100vh;
}

.haut {
  grid-area: haut; position: sticky; top: 0; z-index: 30; display: flex; align-items: center; gap: 16px;
  height: var(--haut); padding: 0 20px; background: var(--barre-haute-fond);
  -webkit-backdrop-filter: blur(16px) saturate(1.4); backdrop-filter: blur(16px) saturate(1.4);
  border-bottom: 1px solid var(--trait);
}
/* Le logotype occupe la largeur du rail : les sélecteurs s'alignent sur le texte du contenu. */
.marque { flex: 0 0 calc(var(--rail) + var(--pad-contenu) - 36px); display: inline-flex; align-items: center; min-width: 0; height: 40px; color: var(--encre); text-decoration: none; border-radius: var(--rayon-2); }
.marque:hover { text-decoration: none; }
.logotype { display: block; height: 26px; width: auto; overflow: visible; }
.haut-sel { display: flex; align-items: center; gap: 8px; min-width: 0; }
.haut-sel label {
  display: inline-flex; align-items: center; min-width: 0; height: var(--bouton-hauteur-compacte);
  border-radius: var(--rayon-2); background: var(--voile-2); border: 1px solid var(--trait); box-shadow: var(--trait-lumiere);
  transition: background var(--duree-rapide) var(--courbe), border-color var(--duree-rapide) var(--courbe);
}
.haut-sel label:hover { background: var(--voile-3); border-color: var(--trait-fort); }
.haut-sel label:focus-within { box-shadow: var(--anneau-focus); }
.sel-marque { padding-left: 4px; }
.logo-zone { display: inline-grid; place-items: center; flex: none; }
.sel-marque .logo { width: 24px; height: 24px; box-shadow: none; }
.sel-marque .logo b { font-size: 9px; }
.haut-sel .sel select { height: 30px; min-height: 0; padding: 0 28px 0 8px; border: 0; background: transparent; box-shadow: none; font-size: var(--taille-petit); font-weight: var(--graisse-moyenne); color: var(--encre); }
/* L'étiquette « Relevé » reste pour les lecteurs d'écran : l'option choisie dit déjà « Relevé 8 · … ». */
.haut-sel .sel-releve .sel select { padding-left: 10px; }
.haut-sel .sel select:hover { border: 0; }
.haut-sel .sel select:focus-visible { box-shadow: none; }
.haut-sel .sel select:disabled { opacity: 1; cursor: default; }
.haut-sel .sel::after { right: 12px; }
.haut-fin { display: flex; align-items: center; gap: 8px; margin-left: auto; }
#moi-email { max-width: 24ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--taille-petit); color: var(--encre-2); }
.badge-demo { cursor: help; }

.rail {
  grid-area: rail; position: sticky; top: var(--haut); align-self: start; display: flex; flex-direction: column;
  height: calc(100vh - var(--haut)); height: calc(100dvh - var(--haut)); padding: 24px 12px 16px;
  border-right: 1px solid var(--trait); overflow-y: auto; scrollbar-width: none;
}
.rail::-webkit-scrollbar { display: none; }
.rail-lab { padding: 0 12px 10px; }
.rail-liste { position: relative; }
.rail-indic { position: absolute; left: 0; top: 0; width: 0; height: 0; border-radius: var(--rayon-2); background: var(--voile-3); box-shadow: var(--trait-lumiere); opacity: 0; pointer-events: none; }
.rail-indic::after { content: ""; position: absolute; left: 12px; right: 12px; bottom: 0; height: 2px; border-radius: var(--rayon-pilule); background: var(--faisceau); }
.rail ul { position: relative; display: grid; gap: 2px; }
.rail li.rail-sep { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--trait); }
.rail a {
  position: relative; display: flex; align-items: center; gap: 12px; height: 38px; padding: 0 12px; border-radius: var(--rayon-2);
  font-size: 14px; font-weight: var(--graisse-moyenne); color: var(--encre-2); text-decoration: none;
  transition: color var(--duree-rapide) var(--courbe), background var(--duree-rapide) var(--courbe);
}
.rail a:hover { color: var(--encre); background: var(--voile-1); text-decoration: none; }
.rail a[aria-current="page"] { color: var(--encre); }
.rail a[aria-current="page"]:hover { background: transparent; }
.rail a:active { transform: translateY(1px); }
.rail-bas { display: grid; gap: 10px; margin-top: auto; padding: 20px 12px 0; }
.rail-surfaces { display: grid; gap: 6px; }
.rail-surfaces li { display: flex; align-items: center; gap: 8px; font-size: var(--taille-petit); color: var(--encre-2); }
.rail-surfaces i { width: 8px; height: 8px; border-radius: 50%; background: var(--c); }
.rail-prochain {
  display: flex; align-items: center; gap: 10px; margin-top: 8px; padding: 10px 12px; border-radius: var(--rayon-3);
  background: var(--voile-2); border: 1px solid var(--trait); box-shadow: var(--trait-lumiere); font-size: var(--taille-etiquette); line-height: 1.35; color: var(--encre-2);
}
.rail-prochain b { display: block; font-size: var(--taille-petit); color: var(--encre); text-wrap: balance; }
.rail-prochain-ico { display: grid; place-items: center; flex: none; width: 28px; height: 28px; border-radius: var(--rayon-2); background: var(--voile-2); color: var(--encre-2); }

.bandeau-encours { grid-area: bandeau; width: 100%; max-width: calc(var(--largeur-page) + 2 * var(--pad-contenu)); padding: 16px var(--pad-contenu) 0; }
.bandeau-encours[hidden] { display: none; }
.bandeau-encours button {
  display: flex; align-items: center; gap: 14px; width: 100%; min-height: 48px; padding: 0 16px; border-radius: var(--rayon-3);
  background: var(--voile-2); border: 1px solid var(--trait); box-shadow: var(--trait-lumiere); font-size: 14px; color: var(--encre-2); text-align: left; cursor: pointer;
  transition: background var(--duree-rapide) var(--courbe), border-color var(--duree-rapide) var(--courbe);
}
.bandeau-encours button:hover { background: var(--voile-3); border-color: var(--trait-fort); }
.bandeau-texte { min-width: 0; }
.bandeau-texte b { color: var(--encre); }
.bandeau-piste { flex: 0 1 160px; }
.bandeau-voir { display: inline-flex; align-items: center; gap: 6px; margin-left: auto; font-weight: var(--graisse-moyenne); color: var(--bleu-texte); white-space: nowrap; }

.contenu { grid-area: contenu; min-width: 0; width: 100%; max-width: calc(var(--largeur-page) + 2 * var(--pad-contenu)); padding: 36px var(--pad-contenu) 64px; overflow-x: clip; }
.contenu:focus { outline: none; box-shadow: none; }

/* ---------- Tête d'écran : titre, halo, faisceau (un seul de chaque par écran) ---------- */
.ecran-tete { position: relative; display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 20px 32px; margin-bottom: 32px; }
.ecran-tete-texte { position: relative; flex: 1 1 520px; min-width: 0; }
.ecran-action { position: relative; flex: none; }
.ecran-lumiere { position: absolute; inset: 0; pointer-events: none; }
.ecran-lumiere .halo { position: absolute; left: calc(-1 * var(--pad-contenu)); top: -170px; width: min(760px, 110%); height: 440px; background: var(--halo); filter: blur(24px); }
/* Le faisceau sort du titre et file vers la droite : il ne passe jamais sur une lettre. */
.ecran-titre-ligne { display: flex; align-items: center; gap: 24px; }
.ecran-titre-ligne .titre { flex: 0 1 auto; min-width: 0; }
.ecran-titre-ligne .faisceau { flex: 1 1 0; min-width: 0; height: 2px; margin-top: 0.08em; border-radius: var(--rayon-pilule); background: var(--faisceau); box-shadow: var(--lueur); }

.section { margin-top: 40px; }
.section-tete { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 6px 16px; margin-bottom: 16px; }
.section-tete h2 { font-size: 22px; line-height: 1.2; letter-spacing: -0.02em; color: var(--encre); }
.section-tete .secondaire { max-width: 64ch; }

.pied {
  grid-area: pied; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 24px;
  width: 100%; max-width: calc(var(--largeur-page) + 2 * var(--pad-contenu)); padding: 20px var(--pad-contenu) 28px;
  border-top: 1px solid var(--trait); font-size: var(--taille-petit); color: var(--encre-2);
}
.pied b { color: var(--encre); }
.pied .num { font-size: var(--taille-petit); }

/* ---------- Film du relevé : boîte de dialogue plein cadre, scène noire ---------- */
.film-dialogue { width: 100vw; max-width: 100vw; height: 100vh; max-height: 100vh; margin: 0; padding: 0; border: 0; background: var(--fond); color: var(--encre); }
.film-dialogue::backdrop { background: var(--fond); }
.film-cadre { position: absolute; inset: 0; display: grid; place-items: center; padding: 24px; }
.film-cadre > .film { width: min(100%, 177.7vh); border-radius: var(--rayon-5); border: 1px solid var(--trait); box-shadow: var(--ombre-cadre); }
.film-fermer {
  position: absolute; right: 16px; top: 16px; z-index: 5; display: grid; place-items: center; width: 40px; height: 40px; padding: 0;
  border: 0; border-radius: 50%; background: var(--voile-2); color: var(--encre); box-shadow: var(--trait-lumiere); cursor: pointer;
  transition: background var(--duree-rapide) var(--courbe);
}
.film-fermer:hover { background: var(--voile-4); }
.film-fermer .ic { width: 18px; height: 18px; }

/* ---------- Lecteur du film vidéo (film-video.js) : cadre 16:9 sur scène noire, barre sobre, grand bouton de lecture ---------- */
.video-cadre {
  position: relative; width: min(100%, calc((100vh - 48px) * 16 / 9)); aspect-ratio: 16 / 9; overflow: hidden;
  border-radius: var(--rayon-5); border: 1px solid var(--trait); background: var(--noir); box-shadow: var(--ombre-cadre);
}
.video-media { display: block; width: 100%; height: 100%; object-fit: contain; background: var(--noir); cursor: pointer; }
.video-grand-lire {
  position: absolute; left: 50%; top: 50%; display: grid; place-items: center; width: 76px; height: 76px; margin: -38px 0 0 -38px; padding: 0;
  border: 0; border-radius: 50%; background: var(--encre); color: var(--encre-inverse); box-shadow: var(--ombre-flottante); cursor: pointer;
  transition: opacity var(--duree-normale) var(--courbe), transform var(--duree-normale) var(--expo);
}
.video-grand-lire:hover { transform: scale(1.06); }
.video-cadre.en-lecture .video-grand-lire { opacity: 0; transform: scale(0.9); pointer-events: none; }
.video-barre {
  position: absolute; left: 12px; right: 12px; bottom: 12px; display: flex; align-items: center; gap: 8px; padding: 6px 8px;
  border-radius: var(--rayon-3); background: var(--voile-video); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
  transition: opacity var(--duree-normale) var(--courbe);
}
.video-bouton { display: grid; place-items: center; flex: none; width: 34px; height: 34px; padding: 0; border: 0; border-radius: var(--rayon-2); background: transparent; color: var(--encre); cursor: pointer; transition: background var(--duree-rapide) var(--courbe); }
.video-bouton:hover { background: var(--voile-3); }
.video-bouton .ic { width: 18px; height: 18px; }
.video-lire .ic { fill: currentColor; }
.video-temps { flex: none; min-width: 84px; font-size: var(--taille-etiquette); color: var(--encre); }
.video-position { flex: 1; min-width: 60px; height: 4px; accent-color: var(--bleu); cursor: pointer; transition: opacity var(--duree-rapide) var(--courbe); }
/* Serveur sans requêtes partielles : la vidéo se charge en entier au premier déplacement, le curseur patiente. */
.video-cadre.video-attente .video-position { opacity: 0.6; cursor: progress; }
@media (hover: hover) {
  .video-cadre.en-lecture:not(:hover):not(:focus-within) .video-barre { opacity: 0; }
}
@media (max-width: 640px) {
  .video-temps { display: none; }
  .video-barre { left: 8px; right: 8px; bottom: 8px; }
}

/* ---------- Écrans intermédiaires ---------- */
@media (max-width: 1100px) {
  :root { --rail: 208px; --pad-contenu: 28px; }
  .haut-fin .haut-nouveau { display: none; }
}

/* ---------- Écran étroit : le rail devient une barre basse, la barre haute passe sur deux lignes ---------- */
@media (max-width: 900px) {
  :root { --pad-contenu: 16px; }
  .app { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto auto minmax(0, 1fr) auto; grid-template-areas: "haut" "bandeau" "contenu" "pied"; }
  .haut { flex-wrap: wrap; height: auto; padding: 8px 16px 10px; gap: 8px 12px; }
  .marque { flex: none; }
  .logotype { height: 24px; }
  .haut-sel { order: 3; width: 100%; margin: 0; overflow-x: auto; scrollbar-width: none; padding: 2px; -webkit-mask-image: linear-gradient(90deg, var(--fond) 88%, transparent); mask-image: linear-gradient(90deg, var(--fond) 88%, transparent); }
  .haut-sel::-webkit-scrollbar { display: none; }
  .haut-sel label, .haut-sel .jeton { flex: none; }
  .haut-sel label { max-width: 72vw; }
  .haut-sel .sel select { max-width: 56vw; }
  #moi-email, .haut-sortir { display: none; }
  .rail {
    grid-area: auto; position: fixed; left: 8px; right: 8px; top: auto; bottom: calc(8px + env(safe-area-inset-bottom)); z-index: 40;
    display: block; height: auto; padding: 4px; overflow: visible; border: 1px solid var(--trait); border-radius: var(--rayon-4);
    background: var(--barre-basse-fond); -webkit-backdrop-filter: blur(16px) saturate(1.4); backdrop-filter: blur(16px) saturate(1.4);
    box-shadow: var(--ombre-flottante), var(--trait-lumiere);
  }
  .rail-lab, .rail-bas { display: none; }
  .rail ul { display: flex; gap: 2px; }
  .rail li { flex: 1 1 0; min-width: 0; }
  .rail li:has(> a[aria-current="page"]) { flex: 0 0 auto; }
  .rail li.rail-sep { margin: 0; padding: 0; border: 0; }
  .rail a { justify-content: center; gap: 6px; height: 44px; padding: 0; }
  .rail a[aria-current="page"] { padding: 0 12px; }
  .rail a .ic { width: 18px; height: 18px; }
  /* Icônes seules ; le nom de l'écran courant s'écrit à côté de son icône. */
  .rail a .rail-nom { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; }
  .rail a[aria-current="page"] .rail-nom { position: static; width: auto; height: auto; overflow: visible; clip: auto; font-size: var(--taille-etiquette); }
  .rail-indic::after { left: 10px; right: 10px; bottom: 4px; }
  .bandeau-encours { padding: 12px var(--pad-contenu) 0; }
  .bandeau-piste { display: none; }
  .contenu { padding: 24px var(--pad-contenu) 112px; }
  .pied { padding: 16px var(--pad-contenu) 100px; }
  .ecran-tete { margin-bottom: 24px; }
  .ecran-lumiere .halo { top: -120px; height: 340px; }
  .ecran-titre-ligne { gap: 16px; }
  .ecran-titre-ligne .faisceau { min-width: 0; }
  .phrase { font-size: var(--taille-corps); }
}
@media (max-width: 360px) {
  .rail a[aria-current="page"] .rail-nom { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0, 0, 0, 0); }
  .rail a[aria-current="page"] { padding: 0; }
  .rail li:has(> a[aria-current="page"]) { flex: 1 1 0; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition: none !important; animation: none !important; }
}
