/* LFV 3e — core des cartes de district, release 2026 */
:root{--bg:#0d1015;--ink:#141820;--cream:#ede8dc;--muted:rgba(237,232,220,.62);--line:rgba(255,255,255,.09);--acc:#c8a84b;--acc2:#a08050}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--bg);color:var(--cream);font-family:'DM Sans',system-ui,sans-serif}body{overflow-x:hidden}button,a{font:inherit}.page{min-height:100vh;position:relative;z-index:1}.hdr{position:sticky;top:0;z-index:20;background:rgba(13,16,21,.92);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}.hdr-inner{max-width:760px;margin:auto;min-height:56px;display:flex;align-items:center;gap:12px;padding:8px 16px}.hdr-back{border:0;background:transparent;color:var(--muted);cursor:pointer;padding:10px 0}.hdr-title{margin:auto;font-weight:700;letter-spacing:.04em}.hdr-xp,.prog-stats{display:none!important}.scroll{padding:28px 16px 64px}.scroll-inner{max-width:680px;margin:auto}.hero{text-align:center;padding:12px 0 24px}.hero-badge,.prog-lbl,.saisons-lbl{font-size:12px;text-transform:uppercase;letter-spacing:.14em;color:var(--muted)}.hero-title{font-family:'Cormorant Garamond',Georgia,serif;font-size:clamp(42px,10vw,72px);font-weight:500;line-height:.9;margin:10px 0}.hero-title em{display:block;color:var(--acc);font-style:normal}.hero-sub{max-width:560px;margin:15px auto 0;line-height:1.55}.prog-card{background:linear-gradient(145deg,rgba(255,255,255,.055),rgba(255,255,255,.018));border:1px solid var(--line);border-radius:18px;padding:20px;margin:8px 0 26px}.prog-ep{font-family:'Cormorant Garamond',Georgia,serif;font-size:24px;margin:8px 0 14px}.prog-bar-wrap{height:7px;border-radius:8px;background:rgba(255,255,255,.08);overflow:hidden}.prog-bar-fill{height:100%;background:var(--acc);border-radius:8px}.btn-reprendre,.season-btn,.btn-partager{width:100%;margin-top:18px;border:1px solid color-mix(in srgb,var(--acc) 50%, transparent);border-radius:12px;background:rgba(255,255,255,.035);color:var(--cream);min-height:48px;cursor:pointer}.btn-reprendre{background:var(--acc);color:#101216;border-color:transparent;font-weight:800}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:28px}.stat{text-align:center;padding:12px;background:rgba(255,255,255,.025);border:1px solid var(--line);border-radius:12px}.stat-n{display:block;font-family:'Cormorant Garamond',Georgia,serif;color:var(--acc);font-size:28px;font-weight:700}.stat-l{font-size:11px;color:var(--muted);margin-top:2px}.saisons-lbl{margin:0 0 12px}.season-card{display:block;width:100%;text-align:left;background:linear-gradient(145deg,rgba(255,255,255,.05),rgba(255,255,255,.018));border:1px solid var(--line);border-radius:16px;padding:18px;color:inherit;cursor:pointer;transition:transform .18s,border-color .18s}.season-card:hover,.season-card:focus-visible{transform:translateY(-2px);border-color:var(--acc);outline:none}.season-top{display:flex;align-items:center;gap:12px}.season-num{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--acc) 18%, transparent);color:var(--acc);font-weight:800}.season-title{font-family:'Cormorant Garamond',Georgia,serif;font-size:23px;font-weight:700}.season-sub{color:var(--muted);font-size:13px;margin:5px 0 0}.season-progress{margin-top:14px;display:flex;align-items:center;gap:10px}.season-progress-bar{height:5px;flex:1;background:rgba(255,255,255,.08);border-radius:6px;overflow:hidden}.season-progress-fill{height:100%;background:var(--acc)}.season-count{font-size:11px;color:var(--muted)}.btn-partager{display:none}#stars{position:fixed;inset:0;pointer-events:none;background:radial-gradient(circle at 20% 15%,color-mix(in srgb,var(--acc) 10%,transparent),transparent 35%),radial-gradient(circle at 80% 75%,rgba(255,255,255,.025),transparent 35%)}@media(max-width:520px){.stats{gap:6px}.stat{padding:10px 5px}.scroll{padding-left:14px;padding-right:14px}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
/* ── Saison pas encore ouverte ────────────────────────────────────────────
   Elle existe, elle est annoncée, mais sa date n'est pas venue. On l'atténue
   sans la cacher : la promesse fait partie du feuilleton. Le compteur affiche
   la date d'ouverture à la place du décompte d'épisodes. */
.season-card.season-a-venir{opacity:.62;border-style:dashed}
.season-card.season-a-venir:hover,.season-card.season-a-venir:focus-visible{transform:none;border-color:var(--line)}
.season-card.season-a-venir .season-num{background:rgba(255,255,255,.06);color:var(--muted)}
.season-card.season-a-venir .season-count{color:var(--acc);letter-spacing:.04em}

/* ── Visuel d'identité du district ────────────────────────────────────────
   Masqué par défaut, révélé par `onload` seulement. Les six fichiers
   arc_<district>_hero.jpg n'existent pas encore : sans ce masquage, chaque hub
   afficherait l'icône d'image cassée du navigateur. Le jour où l'image arrive,
   elle s'affiche sans qu'on retouche le HTML.
   `aspect-ratio` réserve la place AVANT le chargement : sans lui, le titre
   sauterait vers le bas à l'instant où l'image se pose. */
.hero-visuel{display:none;margin:0 0 20px;border-radius:16px;overflow:hidden;
  border:1px solid var(--line);background:rgba(255,255,255,.02);aspect-ratio:16/10}
.hero-visuel.ok{display:block}
.hero-visuel img{width:100%;height:100%;object-fit:cover;display:block}
@media(max-width:520px){.hero-visuel{margin-bottom:16px;border-radius:13px}}
