/* ==========================================================================
   LudoQuest · démonstration (commune imaginaire), le banc d'essai du Passeur.
   Thème NUIT ET OR de l'application (tokens LudoQuest : --nuit, --or, --eau).
   Trois profils : .jeune · .adulte · .senior (grands caractères, contraste).
   ========================================================================== */
:root{
  --nuit:#0B1F2A; --nuit-2:#132B37; --nuit-3:#1B3A4A;
  --ink:#F6F1E7; --ink-2:#CFC6B6; --ink-3:#8FA3AD;
  --or:#E9C177; --or-2:#E5B96A; --or-3:#CE9A3E; --or-clair:#F7D9A0;
  --eau:#8FB0A8; --eau-2:#5E8C88; --ciel:#9CC3E6;
  --brique:#E08469; --sauge:#8CC57A; --rouge:#D7483C; --azur:#2F63C9;
  --creme:#FCF8F1; --parchemin:#F1E4C8; --encre:#2A2016;
  --r:22px; --ease:cubic-bezier(.22,.61,.36,1); --spring:cubic-bezier(.34,1.56,.64,1);
  --f-display:'Fraunces',Georgia,serif; --f-body:'Karla',system-ui,-apple-system,sans-serif; --f-mono:'JetBrains Mono',ui-monospace,monospace;
  --safe-t:env(safe-area-inset-top,0px); --safe-b:env(safe-area-inset-bottom,0px);
  font-size:17px;
}
html.senior{font-size:21px;--ink-2:#EDE6D8;--ink-3:#C9D4D9}
html.jeune{--or:#F4C35C}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:var(--nuit);color:var(--ink);font-family:var(--f-body);overflow:hidden;overscroll-behavior:none}
body{touch-action:manipulation;-webkit-font-smoothing:antialiased;-webkit-user-select:none;user-select:none}
button{font:inherit;color:inherit;cursor:pointer}
input{font:inherit}
[hidden]{display:none!important}

#seine,#fx{position:fixed;inset:0;width:100%;height:100%;display:block}
#seine{z-index:0}
#fx{z-index:40;pointer-events:none}

/* --- Barre du haut ------------------------------------------------------- */
#barre{position:fixed;top:0;left:0;right:0;z-index:30;display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:calc(var(--safe-t) + 10px) 14px 10px;background:linear-gradient(180deg,rgba(11,31,42,.92),rgba(11,31,42,0))}
.barre-profil{font-family:var(--f-mono);font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;color:var(--or);
  border:1px solid rgba(233,193,119,.35);border-radius:100px;padding:5px 10px;white-space:nowrap}
.barre-droite{display:flex;gap:8px}
.rond{width:36px;height:36px;border-radius:50%;border:1px solid rgba(233,193,119,.35);background:rgba(19,43,55,.7);backdrop-filter:blur(8px);
  display:grid;place-items:center;font-size:.95rem}
.rond.coupe{opacity:.45;text-decoration:line-through}
.fragments{display:flex;gap:4px}
.frag{width:12px;height:16px;border-radius:3px;border:1px solid rgba(233,193,119,.4);background:rgba(233,193,119,.06);transition:.6s var(--spring)}
.frag.plein{background:linear-gradient(135deg,var(--or-clair),var(--or-3));border-color:var(--or-clair);box-shadow:0 0 12px rgba(233,193,119,.7);transform:scale(1.15)}
.frag.plein.terni{filter:saturate(.3) brightness(.85)}
.frag.plein.fele{background:linear-gradient(135deg,var(--brique),#8c4a38)}

/* --- Scène --------------------------------------------------------------- */
#scene{position:fixed;inset:0;z-index:10;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}
.ecran{min-height:100%;display:flex;flex-direction:column;padding:calc(var(--safe-t) + 70px) 20px calc(var(--safe-b) + 150px);
  animation:entre .7s var(--ease) backwards}
.ecran.plein{padding:0;min-height:100%;height:100%}
.ecran.centre{justify-content:center}
@keyframes entre{from{opacity:0;transform:translateY(18px) scale(.985);filter:blur(6px)}to{opacity:1;transform:none;filter:none}}
.sort{animation:sort .45s var(--ease) both}
@keyframes sort{to{opacity:0;transform:translateY(-12px) scale(.98);filter:blur(6px)}}

.kicker{font-family:var(--f-mono);font-size:.68rem;letter-spacing:.2em;text-transform:uppercase;color:var(--or-2);margin:0 0 10px}
.titre{font-family:var(--f-display);font-weight:600;font-size:2.15rem;line-height:1.02;letter-spacing:-.02em;margin:0 0 14px;
  font-variation-settings:"opsz" 144}
.titre em{font-style:italic;font-weight:400;color:var(--or-clair)}
.titre.xl{font-size:3rem}
.lead{font-size:1.05rem;line-height:1.5;color:var(--ink-2);margin:0 0 18px}
.petit{font-size:.82rem;color:var(--ink-3);line-height:1.45}
.dore{background:linear-gradient(95deg,#FBE6B6,#E9C177 40%,#CE9A3E);-webkit-background-clip:text;background-clip:text;color:transparent}

/* --- Boutons -------------------------------------------------------------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;border:0;border-radius:100px;padding:16px 26px;font-weight:700;
  font-size:1rem;letter-spacing:.01em;transition:transform .2s var(--ease),box-shadow .3s,opacity .3s;min-height:54px}
.btn:active{transform:scale(.96)}
.btn-or{color:#231A0B;background:linear-gradient(180deg,#F7D9A0,#E5B96A 55%,#CE9A3E);box-shadow:0 12px 40px -12px rgba(233,193,119,.75),inset 0 1px 0 rgba(255,255,255,.6)}
.btn-or.pulse{animation:pulse 2.2s ease-in-out infinite}
@keyframes pulse{0%,100%{box-shadow:0 12px 40px -12px rgba(233,193,119,.75),0 0 0 0 rgba(233,193,119,.45)}50%{box-shadow:0 12px 40px -12px rgba(233,193,119,.75),0 0 0 14px rgba(233,193,119,0)}}
.btn-fantome{background:rgba(246,241,231,.06);border:1px solid rgba(246,241,231,.2);color:var(--ink)}
.btn-lien{background:none;border:0;color:var(--ink-3);font-size:.85rem;text-decoration:underline;text-underline-offset:3px;padding:10px}
.btn[disabled]{opacity:.4;pointer-events:none}
.pied{position:fixed;left:0;right:0;bottom:0;z-index:20;padding:16px 20px calc(var(--safe-b) + 18px);display:flex;flex-direction:column;gap:6px;align-items:center;
  background:linear-gradient(0deg,rgba(11,31,42,.98) 55%,rgba(11,31,42,0))}
.pied .btn{width:100%;max-width:420px}

/* --- Cartes et verre ---------------------------------------------------- */
.verre{background:linear-gradient(160deg,rgba(27,58,74,.72),rgba(11,31,42,.72));border:1px solid rgba(233,193,119,.18);border-radius:var(--r);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);padding:18px}
.profils{display:grid;gap:12px}
.profil{display:grid;grid-template-columns:64px 1fr;gap:14px;align-items:center;text-align:left;padding:16px;border-radius:var(--r);
  background:linear-gradient(160deg,rgba(27,58,74,.8),rgba(11,31,42,.8));border:1px solid rgba(233,193,119,.2);transition:.3s var(--ease)}
.profil:active,.profil.choisi{border-color:var(--or);box-shadow:0 0 0 3px rgba(233,193,119,.25);transform:scale(.99)}
.profil .ico{font-size:2.3rem;width:64px;height:64px;border-radius:18px;display:grid;place-items:center;background:rgba(233,193,119,.1)}
.profil b{font-family:var(--f-display);font-size:1.25rem;display:block;margin-bottom:2px}
.profil span{font-size:.85rem;color:var(--ink-2)}

/* --- Le Passeur ----------------------------------------------------------- */
#passeur{position:fixed;left:12px;right:12px;bottom:calc(var(--safe-b) + 150px);transition:opacity .5s,transform .5s var(--ease);z-index:25;display:flex;gap:10px;align-items:flex-end;pointer-events:none;
  animation:entre .6s var(--spring) both}
/* « haut » : gardé pour compatibilité, la bulle reste en bas et se range seule */
#passeur.range .passeur-bulle{opacity:0;transform:scale(.9) translateX(-20px);pointer-events:none}
.passeur-bulle{transition:opacity .45s,transform .45s var(--ease)}
.passeur-avatar{pointer-events:auto;flex:0 0 58px;width:58px;height:58px;border:0;padding:0;background:none;filter:drop-shadow(0 8px 18px rgba(0,0,0,.5))}
.passeur-avatar.parle svg{animation:parle .5s ease-in-out infinite alternate}
@keyframes parle{to{transform:translateY(-2px) rotate(-3deg)}}
.passeur-bulle{pointer-events:auto;flex:1;background:var(--parchemin);color:var(--encre);border-radius:18px 18px 18px 4px;padding:10px 14px 12px;max-height:26vh!important;
  box-shadow:0 18px 40px -18px rgba(0,0,0,.8);position:relative;max-height:34vh;overflow:auto}
.passeur-bulle::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(120% 80% at 0% 100%,rgba(206,154,62,.18),transparent 60%)}
.passeur-nom{font-family:var(--f-mono);font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:#8A5A12;margin-bottom:3px}
.passeur-texte{font-family:var(--f-display);font-size:1.02rem;line-height:1.38;font-variation-settings:"opsz" 30}
.passeur-texte .curseur{display:inline-block;width:.5ch;animation:clig .8s steps(1) infinite}
@keyframes clig{50%{opacity:0}}

/* --- Toast ---------------------------------------------------------------- */
#toast{position:fixed;left:50%;top:calc(var(--safe-t) + 64px);transform:translateX(-50%);z-index:60;background:rgba(19,43,55,.95);border:1px solid var(--or);
  color:var(--ink);padding:10px 18px;border-radius:100px;font-size:.9rem;box-shadow:0 20px 50px -20px #000;animation:entre .4s var(--spring)}

/* --- Carte du parcours ----------------------------------------------------- */
.riviere{position:relative;margin:6px 0 20px;padding-left:34px}
.riviere::before{content:"";position:absolute;left:14px;top:6px;bottom:6px;width:6px;border-radius:6px;
  background:linear-gradient(180deg,var(--eau),var(--eau-2));box-shadow:0 0 20px rgba(143,176,168,.5)}
.etape{position:relative;padding:10px 0 10px 8px;display:flex;align-items:center;gap:12px;color:var(--ink-3)}
.etape::before{content:"";position:absolute;left:-26px;width:18px;height:18px;border-radius:50%;background:var(--nuit-2);border:2px solid rgba(143,176,168,.6)}
.etape.active{color:var(--ink)}
.etape.active::before{background:var(--or);border-color:var(--or-clair);box-shadow:0 0 0 6px rgba(233,193,119,.2),0 0 22px var(--or)}
.etape b{font-family:var(--f-display);font-weight:500;font-size:1rem}
.etape .num{font-family:var(--f-mono);font-size:.65rem;letter-spacing:.1em;opacity:.7;width:28px}
.etape.verrou{opacity:.5}

/* --- Jauges ------------------------------------------------------------- */
.jauge{height:12px;border-radius:12px;background:rgba(246,241,231,.08);overflow:hidden;border:1px solid rgba(246,241,231,.1)}
.jauge i{display:block;height:100%;width:0;border-radius:inherit;background:linear-gradient(90deg,var(--eau-2),var(--eau),var(--or));transition:width .3s var(--ease)}
.chiffre{font-family:var(--f-display);font-weight:600;font-size:3.6rem;line-height:1;letter-spacing:-.03em}
.chiffre small{font-size:1.2rem;color:var(--ink-3);font-weight:400;margin-left:4px}
.mono{font-family:var(--f-mono);font-size:.72rem;letter-spacing:.06em;color:var(--ink-3)}

/* --- Anecdote (parchemin qui glisse) -------------------------------------- */
.anecdote{position:relative;margin:14px 0;border-radius:16px;padding:16px 16px 16px 58px;background:var(--parchemin);color:var(--encre);
  box-shadow:0 20px 40px -20px rgba(0,0,0,.8);animation:parchemin .9s var(--spring) both;transform-origin:top center}
.anecdote::before{content:attr(data-ico);position:absolute;left:14px;top:14px;font-size:1.7rem}
.anecdote b{font-family:var(--f-display);display:block;font-size:1.05rem;margin-bottom:4px}
.anecdote p{margin:0;font-size:.93rem;line-height:1.5}
.anecdote .source{display:block;margin-top:8px;font-size:.7rem;color:#8A6A3A;font-family:var(--f-mono);letter-spacing:.04em}
@keyframes parchemin{from{opacity:0;transform:rotateX(-70deg) translateY(-10px)}to{opacity:1;transform:none}}

/* --- Plein écran caméra / canevas ---------------------------------------- */
.plein-media{position:fixed;inset:0;z-index:11;background:#000}
.plein-media video,.plein-media canvas{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hud{position:fixed;left:0;right:0;z-index:15;padding:0 18px;pointer-events:none}
.hud.haut{top:calc(var(--safe-t) + 62px)}
.hud.bas{bottom:calc(var(--safe-b) + 110px)}
.hud .verre{pointer-events:auto}
.cadre-visee{position:fixed;inset:18% 8% 30%;z-index:14;pointer-events:none;border-radius:18px}
.cadre-visee::before,.cadre-visee::after{content:"";position:absolute;width:38px;height:38px;border:3px solid var(--or);border-radius:6px}
.cadre-visee::before{left:-3px;top:-3px;border-right:0;border-bottom:0}
.cadre-visee::after{right:-3px;bottom:-3px;border-left:0;border-top:0}

/* --- Boussole ------------------------------------------------------------ */
.rose{position:relative;width:min(78vw,340px);aspect-ratio:1;margin:10px auto 18px}
.rose .disque{position:absolute;inset:0;transition:transform .15s linear}
.rose .cible{position:absolute;left:50%;top:-6px;transform:translateX(-50%);font-size:1.5rem;filter:drop-shadow(0 0 10px var(--or))}
.rose .aiguille{position:absolute;left:50%;top:50%;width:6px;height:46%;margin-left:-3px;margin-top:-46%;border-radius:6px;
  background:linear-gradient(180deg,var(--or-clair),var(--or-3));box-shadow:0 0 18px var(--or);transform-origin:50% 100%}
.rose.alignee .disque{filter:drop-shadow(0 0 30px rgba(233,193,119,.9))}

/* --- Choix / QCM / saisie -------------------------------------------------- */
.choix{display:grid;gap:10px;margin:10px 0}
.choix button{text-align:left;padding:16px 18px;border-radius:16px;border:1px solid rgba(246,241,231,.18);background:rgba(246,241,231,.05);font-size:1.02rem;
  transition:.25s var(--ease)}
.choix button.bon{background:rgba(140,197,122,.18);border-color:var(--sauge)}
.choix button.faux{background:rgba(224,132,105,.18);border-color:var(--brique);animation:secoue .4s}
@keyframes secoue{20%,60%{transform:translateX(-8px)}40%,80%{transform:translateX(8px)}}
.saisie{width:100%;padding:18px;border-radius:16px;border:1px solid rgba(233,193,119,.35);background:rgba(11,31,42,.7);color:var(--ink);font-size:1.3rem;
  font-family:var(--f-display);text-align:center;letter-spacing:.02em;outline:none;-webkit-user-select:text;user-select:text}
.saisie:focus{border-color:var(--or);box-shadow:0 0 0 4px rgba(233,193,119,.2)}
.saisie.faux{border-color:var(--brique);animation:secoue .4s}
.indices{display:flex;gap:6px;align-items:center;justify-content:center;margin-top:10px}
.indice-jeton{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:rgba(233,193,119,.14);border:1px solid rgba(233,193,119,.4);font-size:.8rem}
.indice-jeton.use{opacity:.25}
.verrou-conseil{position:fixed;inset:0;z-index:50;display:grid;place-items:center;text-align:center;padding:30px;
  background:radial-gradient(circle at 50% 40%,rgba(27,58,74,.96),rgba(11,31,42,.98))}
.verrou-conseil .chiffre{font-size:5rem}
.sablier{width:120px;height:120px;border-radius:50%;margin:10px auto;background:conic-gradient(var(--or) var(--p,0%),rgba(246,241,231,.08) 0)}

/* --- Tuiles de rébus ------------------------------------------------------ */
.rebus{display:flex;align-items:center;justify-content:center;gap:12px;margin:18px 0;font-size:3.4rem}
.rebus .plus{font-size:2rem;color:var(--or)}
.rebus .tuile{width:92px;height:92px;border-radius:22px;display:grid;place-items:center;background:var(--parchemin);color:var(--encre);
  box-shadow:0 18px 40px -16px #000;animation:tombe .8s var(--spring) both}
.rebus .tuile:nth-child(3){animation-delay:.25s}
@keyframes tombe{from{transform:translateY(-60px) rotate(-12deg);opacity:0}to{transform:none;opacity:1}}
.lettres{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin:12px 0}
.lettres button{width:48px;height:54px;border-radius:12px;border:1px solid rgba(233,193,119,.35);background:rgba(246,241,231,.06);font-family:var(--f-display);font-size:1.4rem}
.lettres button.pris{opacity:.2;pointer-events:none}
.mot{display:flex;gap:6px;justify-content:center;min-height:58px}
.mot span{width:42px;height:54px;border-bottom:3px solid var(--or);display:grid;place-items:center;font-family:var(--f-display);font-size:1.6rem}

/* --- Puzzle du blason ------------------------------------------------------ */
.blason-zone{position:relative;width:min(70vw,260px);aspect-ratio:260/290;margin:6px auto 16px}
.blason-fond{position:absolute;inset:0;background:url(../assets/blason-belle-rive.svg) center/100% 100% no-repeat;filter:grayscale(1) brightness(.35);opacity:.55}
.blason-case{position:absolute;border:2px dashed rgba(233,193,119,.55);border-radius:8px;transition:.3s}
.blason-case.survol{border-color:var(--or-clair);background:rgba(233,193,119,.18)}
.blason-case.posee{border-color:transparent}
.pieces{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;min-height:110px}
.piece{background:url(../assets/blason-belle-rive.svg) no-repeat;border-radius:10px;box-shadow:0 12px 26px -10px #000,0 0 0 2px rgba(233,193,119,.5);
  touch-action:none;transition:box-shadow .2s,transform .2s;cursor:grab}
.piece.drag{box-shadow:0 26px 40px -10px #000,0 0 0 3px var(--or-clair);transform:scale(1.08);z-index:70;position:fixed;cursor:grabbing}
.piece.posee{box-shadow:none;cursor:default;position:absolute}
.piece.choisie{box-shadow:0 0 0 4px var(--or-clair),0 0 26px var(--or)}

/* --- Loupe ---------------------------------------------------------------- */
.tableau{position:relative;width:100%;border-radius:10px;overflow:hidden;box-shadow:0 0 0 6px #3a2a14,0 0 0 9px var(--or-3),0 30px 60px -20px #000;touch-action:none}
.tableau img{display:block;width:100%;height:auto;filter:saturate(.9)}
.loupe{position:absolute;width:132px;height:132px;border-radius:50%;border:4px solid var(--or);box-shadow:0 0 0 2px #3a2a14,0 18px 40px -8px #000,inset 0 0 30px rgba(0,0,0,.35);
  background-repeat:no-repeat;transform:translate(-50%,-50%);pointer-events:none;transition:border-color .3s}
.loupe::after{content:"";position:absolute;right:-26px;bottom:-26px;width:14px;height:44px;border-radius:8px;background:linear-gradient(#6b4a1e,#3a2a14);transform:rotate(-45deg)}
.loupe.trouve{border-color:var(--sauge);box-shadow:0 0 0 2px #3a2a14,0 0 40px var(--sauge)}

/* --- Fragment ------------------------------------------------------------ */
.fragment-zone{position:relative;width:min(80vw,330px);aspect-ratio:1;margin:0 auto;perspective:900px}
.fragment{position:absolute;inset:8%;background-size:cover;background-position:center;filter:drop-shadow(0 20px 30px rgba(0,0,0,.7));
  animation:frag-arrive 1.6s var(--spring) both}
.fragment.terni{filter:drop-shadow(0 20px 30px rgba(0,0,0,.7)) sepia(.6) saturate(.5) brightness(.9)}
@keyframes frag-arrive{0%{transform:translateY(80vh) rotateZ(40deg) rotateY(80deg) scale(.3);opacity:0}60%{opacity:1}100%{transform:none}}
.fragment-halo{position:absolute;inset:-10%;border-radius:50%;background:radial-gradient(circle,rgba(247,217,160,.55),rgba(233,193,119,0) 65%);animation:halo 3s ease-in-out infinite}
@keyframes halo{50%{transform:scale(1.08);opacity:.75}}
.fissures{position:absolute;inset:8%;pointer-events:none}
.etat{display:inline-block;padding:6px 14px;border-radius:100px;font-family:var(--f-mono);font-size:.7rem;letter-spacing:.14em;text-transform:uppercase;border:1px solid}
.etat.intact{color:var(--or-clair);border-color:var(--or)}
.etat.terni{color:var(--ink-2);border-color:var(--ink-3)}
.etat.fele{color:var(--brique);border-color:var(--brique)}

/* --- Coulisses (diagnostic) ------------------------------------------------ */
.diag{width:100%;border-collapse:collapse;font-size:.85rem}
.diag td{padding:10px 6px;border-bottom:1px solid rgba(246,241,231,.08);vertical-align:top}
.diag td:first-child{font-weight:600;width:38%}
.pastille{display:inline-block;padding:3px 9px;border-radius:100px;font-family:var(--f-mono);font-size:.62rem;letter-spacing:.1em;text-transform:uppercase}
.p-ok{background:rgba(140,197,122,.18);color:var(--sauge)}
.p-partiel{background:rgba(233,193,119,.16);color:var(--or)}
.p-absent,.p-refuse{background:rgba(224,132,105,.16);color:var(--brique)}
.p-na{background:rgba(246,241,231,.06);color:var(--ink-3)}
pre.config{white-space:pre-wrap;font-family:var(--f-mono);font-size:.68rem;line-height:1.5;color:var(--ink-2);background:rgba(0,0,0,.25);border-radius:12px;padding:12px;
  max-height:40vh;overflow:auto;-webkit-user-select:text;user-select:text}
.temps{display:grid;grid-template-columns:1fr auto;gap:4px 12px;font-size:.85rem}
.temps span:nth-child(even){font-family:var(--f-mono);color:var(--or)}

/* --- Divers -------------------------------------------------------------- */
.ligne-eau{position:fixed;left:0;right:0;height:3px;z-index:16;background:linear-gradient(90deg,transparent,var(--or-clair),transparent);box-shadow:0 0 18px var(--or);pointer-events:none}
.poignee{position:fixed;right:18px;z-index:17;width:64px;height:64px;margin-top:-32px;border-radius:50%;background:linear-gradient(180deg,#F7D9A0,#CE9A3E);
  display:grid;place-items:center;color:#231A0B;font-weight:800;box-shadow:0 12px 30px -8px #000;touch-action:none}
.cote{position:fixed;right:92px;z-index:17;margin-top:-14px;font-family:var(--f-mono);font-size:.8rem;color:var(--or-clair);text-shadow:0 2px 8px #000}
.etincelle{position:fixed;z-index:18;width:84px;height:84px;margin:-42px 0 0 -42px;border-radius:50%;pointer-events:auto;
  background:radial-gradient(circle,rgba(247,217,160,.9),rgba(233,193,119,.35) 40%,transparent 70%);animation:scintille 1.2s ease-in-out infinite}
@keyframes scintille{50%{transform:scale(1.25);opacity:.7}}
.vibre{animation:vibre .12s linear 6}
@keyframes vibre{25%{transform:translate(2px,-1px)}50%{transform:translate(-2px,1px)}75%{transform:translate(1px,2px)}}
.titre-final{font-family:var(--f-display);font-style:italic;font-size:1.6rem;color:var(--or-clair);text-align:center;margin:12px 0}
.grille-2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.aide{margin-top:8px;text-align:center}
html.senior .btn{min-height:64px;font-size:1.05rem}
html.senior .passeur-texte{font-size:1.12rem}
html.senior .titre{font-size:2rem}
@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* --- Refus : champ vide, réponse fausse ------------------------------------ */
.saisie.vide{animation:ondule .6s var(--ease);border-color:var(--or-clair);box-shadow:0 0 0 6px rgba(247,217,160,.25),0 0 30px rgba(247,217,160,.5)}
@keyframes ondule{0%,100%{transform:none}20%{transform:scale(1.03) rotate(-1deg)}40%{transform:scale(.98) rotate(1deg)}60%{transform:scale(1.02)}80%{transform:scale(.99)}}
.saisie.faux{border-color:var(--brique);box-shadow:0 0 0 6px rgba(224,132,105,.25),0 0 40px rgba(224,132,105,.6);color:var(--brique-clair)}
.voile-refus{position:fixed;inset:0;z-index:45;pointer-events:none;background:radial-gradient(circle at 50% 45%,rgba(224,132,105,0) 30%,rgba(215,72,60,.55));
  animation:voile .7s ease-out forwards}
@keyframes voile{0%{opacity:0}15%{opacity:1}100%{opacity:0}}
.fissure-ecran{position:fixed;inset:0;z-index:46;pointer-events:none;animation:voile 1.1s ease-out forwards}
.mot-refus{position:fixed;left:50%;top:40%;z-index:47;transform:translate(-50%,-50%);pointer-events:none;font-family:var(--f-display);font-style:italic;font-weight:600;
  font-size:2.6rem;color:var(--brique-clair);text-shadow:0 4px 30px rgba(0,0,0,.6);animation:mot-refus 1s var(--spring) forwards}
@keyframes mot-refus{0%{opacity:0;transform:translate(-50%,-50%) scale(.4) rotate(-8deg)}30%{opacity:1;transform:translate(-50%,-50%) scale(1.1) rotate(3deg)}
  75%{opacity:1;transform:translate(-50%,-50%) scale(1)}100%{opacity:0;transform:translate(-50%,-80%) scale(.95)}}

.grille-etapes{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%;max-width:420px}
.grille-etapes .btn{font-size:.82rem;padding:12px 10px;min-height:48px}

/* ==== Cartes « Le savais-tu ? » ==== */
.savoir-ov{position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:20px;background:rgba(4,12,18,.72);backdrop-filter:blur(6px);animation:fondu .3s both;perspective:1000px}
.savoir-ov.sort{animation:fondu .35s reverse both}
.savoir-carte{width:min(92vw,400px);transform-style:preserve-3d;animation:retourne .9s cubic-bezier(.3,1.3,.5,1) both}
.savoir-face{position:relative;border-radius:24px;padding:26px 22px 20px;text-align:center;background:linear-gradient(160deg,#1f4256,#0B1F2A);
  box-shadow:0 0 0 2px #CE9A3E,0 0 0 7px rgba(206,154,62,.25),0 40px 80px -20px #000;overflow:hidden}
.savoir-face::before{content:'';position:absolute;inset:-50%;background:conic-gradient(from 0deg,transparent,rgba(247,217,160,.18),transparent 30%);animation:tourne 6s linear infinite}
.savoir-face>*{position:relative}
.savoir-ico{font-size:3.6rem;line-height:1;margin-bottom:6px;animation:rebond 1.6s ease-in-out infinite}
.savoir-chiffre{font:800 1.7rem/1.1 var(--f-display);margin:6px 0 10px;background:linear-gradient(#fff4d6,#E9C177);-webkit-background-clip:text;background-clip:text;color:transparent}
.savoir-texte{font-size:1.02rem;line-height:1.5;color:#F6F1E7;margin:8px 0 14px}
.savoir-carnet{color:#8CC57A;font-size:.72rem;margin:0 0 12px}
.savoir-ov.jeune .savoir-face{background:linear-gradient(160deg,#2a4f7a,#123049 60%,#0B1F2A)}
.savoir-ov.jeune .savoir-texte{font-size:1.08rem}
.savoir-ov.senior .savoir-texte{font-size:1.22rem;text-align:left;line-height:1.6}
.savoir-ov .btn{width:100%}
@keyframes retourne{from{transform:rotateY(-100deg) scale(.6);opacity:0}to{transform:none;opacity:1}}
@keyframes tourne{to{transform:rotate(360deg)}}
@keyframes rebond{50%{transform:translateY(-8px) rotate(-6deg)}}
@keyframes fondu{from{opacity:0}}

/* ==== Bouton de suite : il s'annonce, et une flèche y mène s'il est caché ==== */
.btn.appel{animation:appel .9s var(--spring) both,pulse 2.2s ease-in-out .9s infinite}
@keyframes appel{0%{transform:translateY(30px) scale(.8);opacity:0}60%{transform:translateY(-6px) scale(1.04);opacity:1}100%{transform:none}}
#fleche-suite{position:fixed;left:50%;bottom:calc(var(--safe-b) + 18px);transform:translateX(-50%);z-index:80;display:flex;align-items:center;gap:10px;
  border:0;border-radius:100px;padding:12px 20px;font:700 .95rem var(--f-body);color:#231A0B;background:linear-gradient(180deg,#F7D9A0,#CE9A3E);
  box-shadow:0 0 0 4px rgba(11,31,42,.8),0 14px 40px -8px rgba(233,193,119,.9);animation:flotte 1.2s ease-in-out infinite}
#fleche-suite[hidden]{display:none}
#fleche-suite b{font-size:1.3rem}
@keyframes flotte{50%{transform:translateX(-50%) translateY(-7px)}}

/* Démonstration : mention discrète en bas d'écran, badge « commune imaginaire », crédits */
#pied-demo{position:fixed;left:0;right:0;bottom:2px;z-index:95;text-align:center;pointer-events:none;
  font:500 .58rem/1 var(--f-mono);letter-spacing:.12em;text-transform:uppercase;color:rgba(246,241,231,.42)}
.badge-demo{display:inline-block;margin:2px auto 0;padding:5px 12px;border-radius:100px;border:1px solid rgba(233,193,119,.45);
  font:600 .7rem var(--f-mono);letter-spacing:.08em;color:var(--or-clair);background:rgba(11,31,42,.4)}
.credits{margin:8px 0 0;padding-left:18px}
.credits li{margin:4px 0}
/* La bande d'aide (plan B) ne doit pas bloquer le doigt : seuls ses boutons sont touchables. */
.planb{pointer-events:none}
.planb button,.planb a{pointer-events:auto}
