@font-face{font-family:Poppins;font-style:normal;font-weight:300;font-display:swap;src:url(../fonts/poppins-300.v1.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:Poppins;font-style:normal;font-weight:800;font-display:swap;src:url(../fonts/poppins-800.v1.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}

:root{
  --c-black:#000;
  --c-ink:#0B0203;
  --c-red:#FF1A1A;
  --c-red-deep:#B30000;
  --c-red-ember:#5A0606;
  --c-white:#fff;
  --c-white-dim:rgba(255,255,255,.72);
  --glow-red:0 0 24px rgba(255,26,26,.55),0 0 80px rgba(255,26,26,.25);
  /* Lueur « phosphorescente » : cœur blanc, halo rouge */
  --glow-phos:0 0 6px rgba(255,255,255,.9),0 0 22px rgba(255,120,100,.75),0 0 64px rgba(255,26,26,.55);
  --ease-out:cubic-bezier(.16,1,.3,1);
  --shadow-txt:0 1px 14px rgba(0,0,0,.65);
  color-scheme:dark;
}
*,*::before,*::after{box-sizing:border-box}
html{background:var(--c-black);-webkit-text-size-adjust:100%}
body{margin:0;min-height:100vh;min-height:100svh;background:var(--c-black);color:var(--c-white);font:300 1rem/1.5 Poppins,system-ui,-apple-system,"Segoe UI",sans-serif;overflow-x:hidden;-webkit-font-smoothing:antialiased}
.sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
button,input{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--c-white);outline-offset:3px}

/* ---------- Fond ---------- */
.bg{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:0;background:var(--c-black)}
.bg-neb{position:absolute;inset:-24px;background:#050101 url(../img/nebuleuse-1920.v1.webp) center/cover no-repeat;background-image:image-set(url(../img/nebuleuse-1920.v1.avif) type("image/avif"),url(../img/nebuleuse-1920.v1.webp) type("image/webp"));will-change:transform}
@media (orientation:portrait){.bg-neb{background-image:url(../img/nebuleuse-portrait-1080.v1.webp);background-image:image-set(url(../img/nebuleuse-portrait-1080.v1.avif) type("image/avif"),url(../img/nebuleuse-portrait-1080.v1.webp) type("image/webp"))}}
/* Halo qui suit le curseur et révèle la trame d'hexagones : 100 % transform, aucun repaint du masque */
.halo{--hs:min(64vmin,620px);position:absolute;left:0;top:0;width:var(--hs);height:var(--hs);border-radius:50%;overflow:hidden;mix-blend-mode:screen;background:radial-gradient(closest-side,rgba(255,50,35,.34),rgba(255,26,26,.12) 50%,rgba(255,26,26,0));transform:translate3d(-999px,-999px,0);transition:opacity .8s;will-change:transform}
.hex{position:absolute;left:0;top:0;width:100vw;height:100vh;opacity:.55;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='38.105' height='66'%3E%3Cpath d='M19.05 0 38.1 11v22L19.05 44 0 33V11zM19.05 44v22' fill='none' stroke='%23ffd2c8' stroke-width='.7'/%3E%3C/svg%3E");-webkit-mask-image:radial-gradient(closest-side,#000 25%,transparent);mask-image:radial-gradient(closest-side,#000 25%,transparent);will-change:transform}
[data-state=imminent] .halo{background:radial-gradient(closest-side,rgba(255,60,40,.5),rgba(255,26,26,.18) 50%,rgba(255,26,26,0))}
#fx{position:absolute;inset:0;width:100%;height:100%}
.bg-dim{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 55%,rgba(0,0,0,.1) 30%,rgba(0,0,0,.6) 100%)}
.bg-dim::after{content:"";position:absolute;inset:0;background:#000;opacity:0;transition:opacity .8s}
[data-view=pass] .bg-dim::after{opacity:.3}
[data-view=video] .bg-dim::after{opacity:.62}
[data-view=video] .halo{opacity:0}

/* ---------- Texte phosphorescent : calque de lueur dupliqué, animé en opacité seulement ---------- */
.phos{position:relative}
.phos::after{content:attr(data-text);position:absolute;inset:0;text-shadow:var(--glow-phos);opacity:.32;pointer-events:none}
/* Contour : la lueur est une copie floutée du trait, sinon le text-shadow « remplit » les lettres */
.t-rdd::after{text-shadow:none;-webkit-text-stroke:2.5px #ff9c8c;filter:blur(4px)}

/* ---------- Scène ---------- */
.stage{position:relative;z-index:1;min-height:100vh;min-height:100svh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:clamp(.6rem,1.6vh,1.2rem);padding:max(20px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(40px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));text-align:center}
.head{display:flex;flex-direction:column;align-items:center;gap:clamp(.35rem,1.2vh,.8rem)}
.logo{display:block;width:auto;height:clamp(64px,11vh,130px);margin-bottom:-1vh;filter:drop-shadow(0 0 10px rgba(255,255,255,.35))}
.badge{display:inline-flex;align-items:center;gap:.55em;margin:0;padding:.35em .9em .35em .75em;border:1px solid rgba(255,255,255,.35);border-radius:999px;font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;background:rgba(0,0,0,.35);text-shadow:var(--shadow-txt)}
.badge .dot{position:relative;width:.55em;height:.55em;border-radius:50%;background:var(--c-red);box-shadow:0 0 8px var(--c-red)}
.badge .dot::after{content:"";position:absolute;inset:0;border-radius:50%;background:var(--c-red);animation:ping 1.6s var(--ease-out) infinite}
[data-state=countdown] .badge .dot::after{animation:none}
@keyframes ping{from{transform:scale(1);opacity:.8}to{transform:scale(3.2);opacity:0}}

.title{margin:0;display:flex;flex-direction:column;align-items:center;font-weight:800;line-height:1}
.t-rdd{display:block;font-size:clamp(2rem,min(10vw,7.4vh),5rem);letter-spacing:.03em;color:transparent;-webkit-text-stroke:1.5px var(--c-white)}
.t-promo{display:block;margin-top:.2em;font-weight:300;font-size:clamp(1.05rem,min(5vw,4.4vh),2.6rem);letter-spacing:.34em;padding-left:.34em}
.t-name{display:block;font-size:clamp(2.1rem,min(12.5vw,9vh),7rem);letter-spacing:.015em;text-transform:uppercase}

.view{display:none;flex-direction:column;align-items:center;gap:clamp(.7rem,1.8vh,1.15rem);width:100%}
[data-view=wait] .v-wait,[data-view=pass] .v-pass,[data-view=video] .v-video{display:flex}
.switched .view{animation:viewIn .55s var(--ease-out) both}
@keyframes viewIn{from{opacity:0;transform:translateY(12px)}}

/* ---------- Case du tableau périodique (countdown) ---------- */
.cell{position:relative;display:grid;grid-template-rows:auto 1fr auto auto;width:clamp(230px,min(82vw,33vh),340px);aspect-ratio:1;padding:clamp(.7rem,1.6vh,1rem) clamp(.8rem,1.8vh,1.1rem);border:1.5px solid rgba(255,255,255,.92);border-radius:4px;background:linear-gradient(160deg,rgba(40,4,4,.55),rgba(0,0,0,.55));-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.cell::before{content:"";position:absolute;inset:-1.5px;border-radius:inherit;box-shadow:0 0 0 1px rgba(255,190,180,.5),0 0 22px rgba(255,90,70,.7),0 0 70px rgba(255,26,26,.45),inset 0 0 30px rgba(255,26,26,.25);opacity:.35;animation:cellPulse 6s ease-in-out infinite;pointer-events:none}
[data-state=imminent] .cell::before{animation-duration:2.2s}
[data-state=live] .cell::before{animation-duration:1.4s}
@keyframes cellPulse{50%{opacity:1}}
.cell-top,.cell-bot{display:flex;justify-content:space-between;align-items:baseline;font-size:clamp(.72rem,1.7vh,.9rem);letter-spacing:.08em;color:var(--c-white-dim)}
.cell-z{font-weight:800;font-size:clamp(1rem,2.6vh,1.35rem);color:var(--c-white)}
.cell-sym{align-self:center;font-weight:800;font-size:clamp(3.6rem,min(22vw,12.5vh),7.6rem);line-height:1}
.cell .cd{display:flex;justify-content:center;gap:clamp(.45rem,1.6vh,.9rem);margin:0 0 .5rem}
[data-state=live] .cell .cd{display:none}
.cd-u{display:flex;flex-direction:column;align-items:center;min-width:0}
.cd-n{position:relative;display:block;font-weight:800;font-size:clamp(1.35rem,min(7vw,4.4vh),2.3rem);line-height:1;font-variant-numeric:tabular-nums}
.cd-n .f{position:absolute;inset:0;text-shadow:var(--glow-phos);opacity:0}
.cd-l{margin-top:.3em;font-size:clamp(.55rem,1.25vh,.66rem);letter-spacing:.24em;padding-left:.24em;text-transform:uppercase;color:var(--c-white-dim)}
.cell-live{display:none;margin:0 0 .5rem;font-weight:800;font-size:clamp(.9rem,2.3vh,1.15rem);letter-spacing:.3em;padding-left:.3em;text-transform:uppercase;color:#ffd9d2;text-shadow:var(--glow-red)}
[data-state=live] .cell-live{display:block}

.imminent{display:none;margin:0;font-weight:800;font-size:clamp(.78rem,1.8vh,.95rem);letter-spacing:.32em;padding-left:.32em;text-transform:uppercase;color:#ffd2cc;text-shadow:var(--glow-red)}
[data-state=imminent] .imminent{display:block;animation:blink 1.8s ease-in-out infinite}
@keyframes blink{50%{opacity:.45}}
.live-msg{display:none;margin:0;font-weight:800;font-size:clamp(1.4rem,min(6vw,5.5vh),3.2rem);line-height:1.1}
[data-state=live] .live-msg{display:block;animation:liveIn .9s var(--ease-out) both}
@keyframes liveIn{from{opacity:0;transform:scale(.92)}}

/* Accroche : texte de titre, sans bordure (ne doit pas ressembler à un bouton) */
.pill{margin:0;max-width:30em;font-weight:300;font-size:clamp(1rem,min(4.4vw,2.6vh),1.45rem);line-height:1.35;letter-spacing:.04em;text-shadow:var(--shadow-txt)}
.meta{margin:0;font-size:clamp(.72rem,1.7vh,.9rem);letter-spacing:.06em;color:var(--c-white-dim);text-shadow:var(--shadow-txt)}
.meta strong{font-weight:800;color:var(--c-white)}

/* ---------- Boutons ---------- */
.cta{position:relative;display:inline-flex;align-items:center;gap:.6em;padding:.85em 1.8em;border:1.5px solid var(--c-white);border-radius:999px;background:rgba(0,0,0,.35);color:var(--c-white);font-weight:800;font-size:.8rem;letter-spacing:.2em;text-transform:uppercase;cursor:pointer;transition:transform .25s var(--ease-out),background .25s,color .25s}
.cta::before{content:"";position:absolute;inset:-1.5px;border-radius:inherit;box-shadow:0 0 14px rgba(255,255,255,.55),0 0 40px rgba(255,26,26,.5);opacity:0;transition:opacity .6s}
.cta:hover{transform:translateY(-2px)}
.cta:hover::before{opacity:1}
.cta:active{transform:translateY(0) scale(.98)}
.cta svg{transition:transform .25s var(--ease-out)}
.cta:hover svg{transform:translateX(3px)}
[data-state=live] .cta{background:var(--c-red);border-color:var(--c-red)}
[data-state=live] .cta::before{animation:pulse 1.6s ease-in-out infinite}
@keyframes pulse{50%{opacity:.35}}
.ghost{padding:.5em 1em;border:0;background:none;color:var(--c-white-dim);font-size:.8rem;letter-spacing:.08em;cursor:pointer;text-decoration:underline;text-underline-offset:.3em;text-decoration-color:rgba(255,255,255,.3)}
.ghost:hover{color:var(--c-white)}

/* ---------- Mot de passe : le champ « se charge de lumière » au focus ---------- */
.v-pass h2{margin:0;font-weight:800;font-size:clamp(1rem,2.4vh,1.3rem);letter-spacing:.28em;padding-left:.28em;text-transform:uppercase}
.pw-help{margin:-.25rem 0 0;font-size:.9rem;color:var(--c-white-dim);text-shadow:var(--shadow-txt)}
.pw{display:grid;grid-template-columns:1fr auto;gap:.6rem;width:min(100%,460px);text-align:left}
.pw label{grid-column:1/-1;font-size:.7rem;letter-spacing:.24em;text-transform:uppercase;color:var(--c-white-dim)}
.field{position:relative;border-radius:6px;border:1px solid rgba(255,255,255,.35);background:rgba(0,0,0,.5);overflow:hidden;transition:border-color .6s}
.field::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(255,255,255,.04),rgba(255,140,120,.2) 70%,rgba(255,255,255,.32));transform-origin:0 50%;transform:scaleX(0);opacity:.9;transition:transform 1.2s var(--ease-out),opacity .6s;pointer-events:none}
.field::after{content:"";position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 0 18px rgba(255,190,170,.35);opacity:0;transition:opacity 1.2s var(--ease-out);pointer-events:none}
.field-glow{position:absolute;inset:-1px;border-radius:7px;box-shadow:0 0 0 1px rgba(255,255,255,.85),0 0 18px rgba(255,140,120,.7),0 0 48px rgba(255,26,26,.45);opacity:0;transition:opacity 1.2s var(--ease-out);pointer-events:none}
.pw-wrap{position:relative}
.pw-wrap:focus-within .field-glow{opacity:1}
.pw-wrap:focus-within .field{border-color:rgba(255,255,255,.9)}
.pw-wrap:focus-within .field::before{transform:scaleX(1);opacity:.35}
.pw-wrap:focus-within .field::after{opacity:1}
.field input{position:relative;z-index:1;display:block;width:100%;height:52px;padding:0 1rem;border:0;background:transparent;font-weight:800;font-size:1.05rem;letter-spacing:.2em;outline:0}
.field input::placeholder{color:rgba(255,255,255,.4);font-weight:300;letter-spacing:.1em}
.is-success .field-glow{opacity:1;animation:flashOk .9s var(--ease-out)}
.is-success .field::before{transform:scaleX(1);opacity:.9}
@keyframes flashOk{30%{opacity:1;transform:scale(1.03)}}
.pw .btn{height:54px;padding:0 1.3rem;border:1.5px solid var(--c-white);border-radius:6px;background:rgba(0,0,0,.35);font-weight:800;font-size:.8rem;letter-spacing:.2em;text-transform:uppercase;cursor:pointer;transition:background .2s,color .2s,transform .2s var(--ease-out)}
.pw .btn:hover{background:var(--c-white);color:#000}
.pw .btn:active{transform:scale(.97)}
.pw-err{grid-column:1/-1;min-height:1.5em;margin:0;font-size:.85rem;font-weight:800;color:#ff5a4a;text-shadow:0 1px 8px rgba(0,0,0,.8)}
.is-error .field{border-color:#ff3b2b}
.is-error .field-glow{opacity:1;box-shadow:0 0 0 1px #ff3b2b,0 0 22px rgba(255,40,30,.7);transition:none;animation:errFade 1.4s ease-out both}
@keyframes errFade{from{opacity:1}to{opacity:.45}}

/* ---------- E3 vidéo ---------- */
[data-view=video] .stage{justify-content:flex-start;padding-top:max(16px,env(safe-area-inset-top));gap:clamp(.6rem,1.6vh,1rem)}
[data-view=video] .head{flex-direction:row;flex-wrap:wrap;justify-content:center;gap:.4rem 1rem}
[data-view=video] .logo{height:clamp(60px,9vh,84px);margin:-8px 0}
[data-view=video] .title{flex-direction:row;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:0 .55em}
[data-view=video] .t-rdd,[data-view=video] .t-name{font-size:clamp(1.3rem,3.2vh,1.9rem)}
[data-view=video] .t-rdd{-webkit-text-stroke-width:1px}
[data-view=video] .t-promo{margin:0;font-size:clamp(.85rem,2.2vh,1.1rem);letter-spacing:.24em;padding-left:0}
[data-view=video] .badge{order:3}
[data-view=video][data-state=live] .badge{border-color:var(--c-red);background:var(--c-red);font-weight:800;box-shadow:var(--glow-red)}
[data-view=video][data-state=live] .badge .dot{background:#fff;box-shadow:0 0 8px #fff}
[data-view=video][data-state=live] .badge .dot::after{background:#fff}
.mini-cd{margin:0;font-size:.85rem;letter-spacing:.1em;color:var(--c-white-dim)}
.mini-cd b{font-weight:800;color:var(--c-white);font-variant-numeric:tabular-nums;letter-spacing:.06em}
[data-state=live] .mini-cd{display:none}
.player{position:relative;width:min(100%,1400px,calc((100svh - 200px)*16/9));min-width:min(100%,288px);aspect-ratio:16/9;border-radius:10px;overflow:hidden;background:#000;box-shadow:0 0 0 1px rgba(255,255,255,.14),0 30px 80px rgba(0,0,0,.6),0 0 60px rgba(255,26,26,.15)}
.player iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.player-ph{position:absolute;inset:0;display:grid;place-content:center;gap:.5rem;padding:1rem;background:radial-gradient(circle at 50% 50%,#1a0303,#000 70%);color:var(--c-white-dim);font-size:.85rem}
.player-ph b{font-weight:800;color:var(--c-white);letter-spacing:.2em;text-transform:uppercase}

/* ---------- Intro « charge phosphorescente » ---------- */
.intro .bg-neb{animation:fade 1.6s 1.2s ease-out both}
.intro .halo{animation:fade 1.2s 1.6s both}
.intro .charge{animation:charge 1.2s cubic-bezier(.4,0,.2,1) both;animation-delay:calc(.2s + var(--i,0)*120ms)}
.intro .charge.phos::after,.intro .charge .phos::after{animation:glowCharge 1.9s ease-out both;animation-delay:calc(.2s + var(--i,0)*120ms)}
.intro .rise{animation:rise .7s var(--ease-out) both;animation-delay:calc(1.3s + var(--i,0)*110ms)}
@keyframes fade{from{opacity:0}}
@keyframes charge{from{opacity:.06}}
@keyframes glowCharge{0%{opacity:0}60%{opacity:1}100%{opacity:.32}}
@keyframes rise{from{opacity:0;transform:translateY(12px)}}


@media (max-width:420px){.pw{grid-template-columns:1fr}.pw .btn{width:100%}}
/* Écrans peu hauts : le message d'état remplace la pilule pour éviter le scroll */
@media (max-height:860px){[data-state=imminent] .pill,[data-state=live] .pill{display:none}}
@media (max-height:620px) and (orientation:landscape){.logo{height:52px}.pill{display:none}.cell{width:220px}}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
  .halo{display:none}
  .cd-n .f{display:none}
}

/* ---------- Modes pilotés depuis l'admin (data-access : ouvert | ferme | termine) ---------- */
[data-access=ferme] .cta,[data-access=termine] .cta{display:none}
.end-msg{display:none;margin:0;font-weight:800;font-size:clamp(1.3rem,min(5vw,5vh),2.6rem);line-height:1.15}
.end-sub{display:none;margin:0;color:var(--c-white-dim)}
[data-access=termine] .cell .cd,[data-access=termine] .cell-live,[data-access=termine] .imminent,[data-access=termine] .live-msg,[data-access=termine] .pill{display:none}
[data-access=termine] .end-msg,[data-access=termine] .end-sub{display:block}
.cell-end{display:none;margin:0 0 .5rem;font-weight:800;font-size:clamp(.9rem,2.3vh,1.15rem);letter-spacing:.3em;padding-left:.3em;text-transform:uppercase;color:var(--c-white-dim)}
[data-access=termine] .cell-end{display:block}
.is-sending .btn{opacity:.6;pointer-events:none}
.player-wait{position:absolute;inset:0;display:grid;place-content:center;gap:.5rem;padding:1rem;text-align:center;background:radial-gradient(circle at 50% 50%,#1a0303,#000 70%)}
.player-wait b{font-weight:800;letter-spacing:.2em;text-transform:uppercase}
.player-wait span{color:var(--c-white-dim);font-size:.9rem}
.back{color:var(--c-white-dim);font-size:.8rem;letter-spacing:.08em}
