:root{--bg:#14101f;--card:#211a33;--ink:#f4f0ff;--mute:#a79cc4;--acc:#ff5fa2;--acc2:#7c5cff;--ok:#3ddc97;--ko:#ff6b6b;--line:#35294f}
*{box-sizing:border-box}
body{margin:0;background:radial-gradient(1200px 600px at 50% -10%,#2b1f4d,var(--bg));color:var(--ink);font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;min-height:100vh}
main{max-width:640px;margin:0 auto;padding:20px 16px 60px}
main.wide{max-width:1000px}
h1{font-size:2rem;margin:.2em 0;letter-spacing:-.02em}
h1 span{color:var(--acc)}
h2{margin:.2em 0 .5em}
.card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px;margin:14px 0}
.mute{color:var(--mute)}
label{display:block;font-weight:600;margin:10px 0 4px}
input,textarea,select{width:100%;padding:12px;border-radius:10px;border:1px solid var(--line);background:#150f26;color:var(--ink);font:inherit}
input[type=checkbox]{width:auto}
textarea{min-height:90px;resize:vertical}
button,.btn{display:inline-block;padding:12px 18px;border:0;border-radius:12px;background:linear-gradient(135deg,var(--acc),var(--acc2));color:#fff;font:inherit;font-weight:700;cursor:pointer;text-decoration:none}
button.ghost{background:transparent;border:1px solid var(--line);color:var(--ink)}
button.small{padding:6px 10px;font-size:.85rem;border-radius:8px}
button.danger{background:var(--ko)}
button:disabled{opacity:.5;cursor:default}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.big{font-size:1.1rem;padding:16px 22px;width:100%}
.timer{font-size:3.2rem;font-weight:800;text-align:center;font-variant-numeric:tabular-nums}
.timer.low{color:var(--ko)}
.bar{height:8px;background:#150f26;border-radius:6px;overflow:hidden}
.bar i{display:block;height:100%;background:linear-gradient(90deg,var(--acc2),var(--acc));transition:width .25s linear}
.pill{display:inline-block;padding:2px 10px;border-radius:99px;background:#150f26;border:1px solid var(--line);font-size:.8rem}
.ok{color:var(--ok)}.ko{color:var(--ko)}
.code{font:700 1.6rem ui-monospace,monospace;letter-spacing:.12em;text-align:center;padding:12px;border:2px dashed var(--acc);border-radius:12px;user-select:all}
.eq{display:flex;gap:3px;justify-content:center;height:60px;align-items:flex-end;margin:14px 0}
.eq i{width:8px;background:var(--acc);border-radius:3px;animation:eq 1s ease-in-out infinite}
.eq i:nth-child(2n){animation-delay:.2s;background:var(--acc2)}.eq i:nth-child(3n){animation-delay:.4s}
@keyframes eq{0%,100%{height:12px}50%{height:58px}}
.err{background:#3a1520;border:1px solid var(--ko);padding:10px 12px;border-radius:10px;margin:10px 0}
table{width:100%;border-collapse:collapse;font-size:.9rem}
th,td{text-align:left;padding:8px 6px;border-bottom:1px solid var(--line);vertical-align:top}
.tabs{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}
.tabs button:not(.on){background:transparent;border:1px solid var(--line)}
.scroll{overflow-x:auto}
.words{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}
.words input.word{flex:1 1 90px;min-width:80px;max-width:100%;text-align:center;font-size:1.05rem;padding:10px 6px}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}
.chip{display:inline-flex;flex-direction:column;align-items:center;padding:6px 12px;border-radius:10px;border:1px solid var(--line);background:#150f26}
.chip.ok{border-color:var(--ok);color:var(--ok)}
.chip.ko{border-color:var(--ko)}
.chip.ko b{color:var(--ink)}
.chip small{color:var(--ko);font-size:.75rem}
label.party{display:block;padding:10px 12px;margin:6px 0;border:1px solid var(--line);border-radius:12px;cursor:pointer;font-weight:400}
label.party.on{border-color:var(--acc);background:#2b1f4d}
label.party input{width:auto}
.pill.ok{color:var(--ok);border-color:var(--ok)}
ol{padding-left:22px}
/* ---- Gaston le poulpe ---- */
.mascot-wrap{display:flex;align-items:flex-end;gap:8px;margin:6px 0 2px}
.mascot{flex:0 0 150px}
.mascot svg{width:150px;height:auto;display:block}
.bubble{position:relative;flex:1;background:#fff;color:#1b1030;padding:10px 14px;border-radius:16px;font-weight:600;font-size:.95rem;margin-bottom:34px}
.bubble::before{content:"";position:absolute;left:-10px;bottom:14px;border:8px solid transparent;border-right-color:#fff;border-left:0}
.mascot .m-sad,.mascot .m-panic,.mascot .brow-sad{display:none}
.mascot.sad .m-happy,.mascot.panic .m-happy{display:none}
.mascot.sad .m-sad,.mascot.sad .brow-sad{display:block}
.mascot.panic .m-panic{display:block}
.mascot .bob{animation:bob .5s ease-in-out infinite alternate}
.mascot .wheel{animation:spin 1.6s linear infinite}
.mascot.sad .wheel{animation-duration:6s}.mascot.panic .wheel{animation-duration:.5s}.mascot.panic .bob{animation-duration:.12s}
.mascot .fork{animation:wave 1s ease-in-out infinite alternate}
.mascot.panic .fork{animation-duration:.2s}
.mascot .puff{animation:puff 1.2s ease-out infinite}
@keyframes bob{to{transform:translateY(-2.5px)}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes wave{from{transform:rotate(-10deg)}to{transform:rotate(12deg)}}
@keyframes puff{0%{transform:translateY(4px);opacity:.9}100%{transform:translateY(-14px);opacity:0}}
@media (prefers-reduced-motion:reduce){.mascot *{animation:none!important}}
.jokers{margin:10px 0}.jokers button{flex:1;padding:10px 8px;font-size:.9rem}
input.word.revealed{background:#3a2b00;border-color:#ffd166;color:#ffd166;font-weight:700}
.chip.joker{border-color:#ffd166;color:#ffd166}.chip.joker small{color:#ffd166}
@media (max-width:420px){.mascot{flex-basis:110px}.mascot svg{width:110px}}
/* ---- photo d'équipe + finale ---- */
.avatar{width:36px;height:36px;border-radius:50%;object-fit:cover;border:2px solid var(--acc);flex:0 0 auto}
.avatar.big{width:72px;height:72px}
.camera video,.camera img.photo-preview{display:block;width:100%;max-width:320px;aspect-ratio:1;object-fit:cover;border-radius:16px;margin:8px auto;background:#150f26}
.camera .row button{flex:1}
.timer.small{font-size:1.4rem;min-height:1.6em}
button.rec.on{background:var(--ko);animation:pulse 1s ease-in-out infinite}
@keyframes pulse{50%{opacity:.6}}
label.take{display:block;padding:10px 12px;margin:8px 0;border:1px solid var(--line);border-radius:12px;font-weight:400}
label.take.on{border-color:var(--ok);background:#12301f}
label.take input{width:auto}
label.take audio{display:block;width:100%;margin-top:6px}
.lyrics{white-space:pre-line;background:#150f26;border-radius:10px;padding:10px 12px;font-style:italic}

td .avatar{width:28px;height:28px;vertical-align:middle}

input.word.free{background:#0d2a38;border-color:#4cc9f0;color:#4cc9f0;font-weight:700}
.chip.free{border-color:#4cc9f0;color:#4cc9f0}.chip.free small{color:#4cc9f0}
