@font-face{font-family:Fredoka;font-style:normal;font-weight:500 700;font-display:swap;src:url(fonts/fredoka-latin.woff2) format("woff2")}
@font-face{font-family:Inter;font-style:normal;font-weight:400 600;font-display:swap;src:url(fonts/inter-latin.woff2) format("woff2")}
:root{
 --ink:#f7f2ea;--muted:#cdc4d8;--glass:rgba(255,255,255,.07);--glass-2:rgba(255,255,255,.13);--line:rgba(255,255,255,.14);
 --accent:#ff9db0;--accent-2:#ffd59a;--bg1:#1d0f24;--bg2:#4a1d3a;--bg3:#7a2f4f;--danger:#ff6b7a;
 --dev:min(86vw,420px);--radius:22px;
}
body[data-camp=right]{--accent:#9cc0ff;--bg1:#0b1530;--bg2:#1b3566;--bg3:#2f5b9a}
/* Halloween (set by app.js from rules.mjs eventAt): a purple and pumpkin night for both camps. */
body[data-season=halloween],body[data-camp][data-season=halloween]{--accent:#ff9f43;--accent-2:#ffd27a;--bg1:#150a20;--bg2:#3a1747;--bg3:#7a3a1e}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%}
body{background:var(--bg1);color:var(--ink);font:16px/1.45 Inter,system-ui,sans-serif;overflow-x:hidden;overflow-wrap:break-word;transition:background-color .6s;-webkit-tap-highlight-color:transparent}
button,select{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--accent-2);outline-offset:3px}

/* background */
.bg{position:fixed;inset:0;z-index:-1;overflow:hidden;background:radial-gradient(120% 80% at 50% 0%,var(--bg2),var(--bg1) 70%);transition:background .6s}
.blob{position:absolute;border-radius:50%;filter:blur(70px);animation:float 18s ease-in-out infinite alternate}
.b1{width:55vmax;height:55vmax;left:-18vmax;top:-12vmax;background:var(--bg3);opacity:.5}
.b2{width:40vmax;height:40vmax;right:-14vmax;top:28vh;background:var(--accent);opacity:.16;animation-duration:24s}
.b3{width:36vmax;height:36vmax;left:18vw;bottom:-20vmax;background:var(--accent-2);opacity:.11;animation-duration:30s}
@keyframes float{to{transform:translate(4vmax,3vmax) scale(1.08)}}

/* top bar */
.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:12px;
 max-width:1120px;margin:0 auto;padding:max(12px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) 12px max(16px,env(safe-area-inset-left));backdrop-filter:blur(12px)}
/* On a phone the chips wrap: a sticky two-line header would eat the screen. */
@media(max-width:520px){.topbar{position:static}}
.brand{display:flex;align-items:center;gap:10px;font:700 22px/1 Fredoka,sans-serif;letter-spacing:.2px}
.brand small{display:block;font:500 11px/1.2 Inter,sans-serif;color:var(--muted);letter-spacing:0}
.logo{width:30px;height:30px;border-radius:50%;background:conic-gradient(from 200deg,var(--accent),var(--accent-2),var(--accent));box-shadow:0 0 0 3px #ffffff22}
.chips{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.chip{padding:6px 12px;border-radius:99px;background:var(--glass);border:1px solid var(--line);font:600 13px/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:nowrap}
.chip.fm{color:var(--accent-2)}
@media(max-width:420px){.brand small{display:none}.chip{padding:6px 10px;font-size:12px}}
/* A long name (20 W, an emoji) never sets a width: every track and box that shows one may shrink, and the name wraps
   (or is cut, where a line must stay single: board, chat, the Bâton's top bar). */
.toast,.net{overflow-wrap:anywhere}

/* layout */
.app{max-width:1120px;margin:0 auto;padding:4px max(16px,env(safe-area-inset-right)) 28px max(16px,env(safe-area-inset-left));display:grid;grid-template-columns:minmax(0,1fr);gap:22px}
@media(min-width:960px){.app{grid-template-columns:minmax(0,1fr) 370px;align-items:start;padding-top:20px}.panel{position:sticky;top:84px}}

/* device */
.device-wrap{display:flex;flex-direction:column;align-items:center;gap:18px}
.device{width:var(--dev);aspect-ratio:1;border-radius:50%;padding:calc(var(--dev)*.05);position:relative;
 background:radial-gradient(circle at 30% 22%,#ffffff55,transparent 38%),linear-gradient(150deg,var(--accent),var(--bg3) 75%);
 box-shadow:0 34px 70px -24px #000c,inset 0 -10px 24px #0006,inset 0 8px 16px #fff5;transition:background .6s}
.device::after{content:"POLITIGO";position:absolute;left:50%;bottom:calc(var(--dev)*.012);transform:translateX(-50%);
 font:700 calc(var(--dev)*.026) Fredoka,sans-serif;letter-spacing:.3em;color:#ffffffaa}
.bezel{width:100%;height:100%;border-radius:50%;background:#05060a;padding:calc(var(--dev)*.018);box-shadow:inset 0 0 0 2px #000a,0 0 0 3px #ffffff26}
/* The page still scrolls from a swipe on the screen, except during the Pong, which follows the finger. */
#screen{width:100%;height:100%;border-radius:50%;display:block;touch-action:pan-y;cursor:pointer;background:#0d1020}
body.playing #screen{touch-action:none}
@media(min-width:960px){:root{--dev:min(52vw,470px)}}

/* action pad */
.pad{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;width:min(100%,440px)}
/* The fifth button, "Chat", only while the organisation opened a room (app.js chatFlags). */
.pad.five{grid-template-columns:repeat(5,1fr);width:min(100%,480px)}
.pad-btn[hidden]{display:none}
.pad-btn{display:flex;flex-direction:column;align-items:center;gap:7px;background:none;border:0;cursor:pointer;padding:4px 0;font:600 13px/1.2 Inter,sans-serif}
.knob{width:64px;height:64px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(160deg,var(--glass-2),var(--glass));
 border:1px solid var(--line);box-shadow:0 10px 20px -10px #000c,inset 0 1px 0 #fff4;transition:transform .12s,background .2s}
.pad-btn:hover .knob{background:linear-gradient(160deg,#ffffff30,#ffffff14)}
.pad-btn:active .knob{transform:scale(.93)}
.knob svg{width:28px;height:28px;stroke:var(--accent);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.knob{position:relative}
.pad-btn.alert .knob::after{content:"";position:absolute;top:2px;right:2px;width:14px;height:14px;border-radius:50%;background:var(--danger);box-shadow:0 0 0 2px var(--bg1)}
/* Challenges waiting: the dot carries their count. */
.pad-btn.alert[data-count] .knob::after{content:attr(data-count);top:-2px;right:-2px;width:20px;height:20px;font:700 12px/20px Inter,sans-serif;color:#fff;text-align:center}
/* A challenge waits (app.js refresh): the "Jouer" icon gives a short clash wiggle every 4 s, still the rest of the time. */
.pad-btn.clash .knob svg{animation:clash 4s ease-in-out infinite}
/* Five buttons on a 360 px phone: smaller knobs, still well above the 44 px touch target. */
@media(max-width:440px){.pad.five{gap:4px}.pad.five .knob{width:54px;height:54px}.pad.five .knob svg{width:25px;height:25px}.pad.five .pad-btn{font-size:12px}}
@media(max-width:340px){.pad.five .knob{width:48px;height:48px}}
@keyframes clash{0%,85%,100%{transform:none}88%{transform:rotate(-14deg) scale(1.1)}91%{transform:rotate(12deg) scale(1.1)}94%{transform:rotate(-8deg)}97%{transform:rotate(4deg)}}
/* Pinned to the viewport, above sheets and the sign-in screen: always seen, wherever the page is scrolled. */
.toast,.net{position:fixed;left:50%;z-index:40;margin:0;padding:11px 16px;border-radius:16px;border:1px solid var(--line);backdrop-filter:blur(10px);
 font-size:14px;text-align:center;width:min(92vw,440px);transform:translateX(-50%)}
.toast{bottom:max(16px,env(safe-area-inset-bottom));background:#2a1830ee;opacity:0;transform:translate(-50%,6px);transition:opacity .25s,transform .25s;pointer-events:none}
.toast.show{opacity:1;transform:translateX(-50%)}
.net{top:max(10px,env(safe-area-inset-top));z-index:42;background:#5a1f2bee;color:#ffe3e7;font-weight:600}
.net[hidden]{display:none}
/* An announcement from the organiser: stays until it is closed (app.js shows it outside games only). */
.announce-bar{position:fixed;left:50%;top:max(10px,env(safe-area-inset-top));z-index:41;transform:translateX(-50%);width:min(92vw,440px);
 display:flex;gap:10px;align-items:flex-start;padding:12px 12px 12px 16px;border-radius:16px;border:1px solid var(--accent);
 background:#1d2440f2;backdrop-filter:blur(10px);box-shadow:0 8px 30px #0008;font-size:14px}
.announce-bar[hidden]{display:none}
.announce-bar>div{flex:1;min-width:0}
.announce-bar b{color:var(--accent)}
.announce-bar p{margin:4px 0 0;overflow-wrap:anywhere}
.push-ask .btn{padding:8px 14px}
.feed li.announce{color:#d6f5e4}

/* panel */
.panel{display:grid;grid-template-columns:minmax(0,1fr);gap:16px}
.card{background:var(--glass);border:1px solid var(--line);border-radius:var(--radius);padding:18px;backdrop-filter:blur(14px)}
.stat-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.stat-head h2{margin:0;font:600 21px/1.2 Fredoka,sans-serif;min-width:0;overflow-wrap:anywhere}
.lvl{font:700 13px ui-monospace,monospace;color:var(--accent-2);white-space:nowrap}
.detail{margin:4px 0 12px;color:var(--muted);font-size:13px}
.bar{height:8px;border-radius:99px;background:#ffffff1a;overflow:hidden}
.bar>i{display:block;height:100%;width:0;border-radius:inherit;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width .4s}
.xptext{margin:6px 0 0;font:12px ui-monospace,monospace;color:var(--muted)}
.gauges{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px;margin-top:16px}
.gauge span{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);margin-bottom:5px}
.gauge.low .bar>i{background:var(--danger)}
.gauge.flame-gauge{grid-column:1/-1}
.flame-gauge .bar>i{background:linear-gradient(90deg,#ff6a1a,#ffb347 60%,#ffd23f)}
.meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px}
.pill{max-width:100%;overflow-wrap:anywhere;font-size:12px;padding:4px 10px;border-radius:99px;background:#ffffff12;border:1px solid var(--line);color:var(--muted)}
.pill.good{color:#d9ffe6;border-color:#7fd6a066;background:#7fd6a022}
.pill.warn{color:#ffd4d9;border-color:#ff6b7a77;background:#ff6b7a2a}
.section-title{font:600 12px ui-monospace,monospace;letter-spacing:.14em;color:var(--accent-2);margin:0 0 8px;text-transform:uppercase}
.journal{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:minmax(0,1fr);gap:9px;max-height:280px;overflow:auto;font-size:13px}
.journal li{color:var(--muted);overflow-wrap:anywhere}
.journal time{display:block;color:var(--accent-2);font:11px ui-monospace,monospace}

/* sheets */
.sheet{position:fixed;inset:0;z-index:20;display:flex;align-items:flex-end;justify-content:center;background:#05030acc;backdrop-filter:blur(4px)}
.sheet[hidden]{display:none}
html.sheet-open{overflow:hidden;overscroll-behavior:none}
html.sheet-open body{position:fixed;left:0;right:0;overflow:hidden}
.sheet,.sheet-card{overscroll-behavior:contain}
.sheet-card:focus{outline:none}
.sheet-card{width:min(100%,560px);max-height:84vh;max-height:84dvh;overflow:auto;background:linear-gradient(180deg,#ffffff18,#ffffff08),var(--bg1);
 border:1px solid var(--line);border-radius:26px 26px 0 0;padding:6px 18px max(24px,env(safe-area-inset-bottom));animation:up .25s ease-out;box-shadow:0 -20px 50px #000a}
@media(min-width:700px){.sheet{align-items:center;padding:16px}.sheet-card{border-radius:26px}}
@keyframes up{from{transform:translateY(40px);opacity:0}}
.grabber{width:44px;height:5px;border-radius:9px;background:#ffffff33;margin:8px auto 10px}
.sheet-head{display:flex;justify-content:space-between;align-items:center;gap:12px}
.sheet-head>div:first-child{min-width:0}
.sheet-head h2{font:600 23px Fredoka,sans-serif;margin:0;overflow-wrap:anywhere}
.sheet-sub{color:var(--muted);font-size:14px;margin:4px 0 0}
.icon-btn{flex:none;width:44px;height:44px;border-radius:50%;border:1px solid var(--line);background:var(--glass);font-size:20px;cursor:pointer}
.items{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;margin:14px 0 6px}
.item{display:flex;justify-content:space-between;align-items:center;gap:12px;width:100%;text-align:left;padding:14px 16px;border-radius:18px;
 border:1px solid var(--line);background:var(--glass);cursor:pointer;transition:background .15s,transform .1s}
.item:hover:not([aria-disabled=true]){background:var(--glass-2)}
.item:active:not([aria-disabled=true]){transform:scale(.98)}
/* Unavailable rows stay readable (their text says why) and reachable with the keyboard. */
.item[aria-disabled=true]{cursor:not-allowed;background:transparent;border-style:dashed}
.item[aria-disabled=true] b,.item[aria-disabled=true] .price{opacity:.7}
.item b{display:block;font-weight:600}
.item small{display:block;color:var(--muted);font-size:13px;margin-top:2px}
.item.on{border-color:var(--accent);background:#ffffff1c}
.price{flex:none;font:700 13px ui-monospace,monospace;padding:6px 11px;border-radius:99px;background:#ffffff14;color:var(--accent-2);white-space:nowrap}
.block-title{font:600 12px ui-monospace,monospace;letter-spacing:.14em;color:var(--accent-2);margin:22px 0 2px;text-transform:uppercase}
.forms{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px;margin-top:10px}
.form-tile{border-radius:14px;padding:8px;text-align:center;background:var(--glass);border:1px solid var(--line);font-size:12px}
.form-tile canvas{width:64px;height:64px;image-rendering:pixelated;display:block;margin:0 auto 4px}
.form-tile.locked{color:var(--muted);border-style:dashed}
.form-tile.locked canvas{opacity:.5}
.dossier{overflow-wrap:anywhere;padding:12px 14px;border-radius:14px;background:var(--glass);border:1px solid var(--line);margin-top:8px;font-size:13px}
.dossier b{display:block}
.dossier q{display:block;margin:4px 0;color:var(--ink)}
.dossier small{color:var(--muted)}
.field{display:grid;gap:6px;margin-top:10px;font-size:14px;color:var(--muted)}
select{width:100%;min-width:0;padding:12px 14px;border-radius:14px;border:1px solid var(--line);background:#ffffff12}
select option{background:#1d1a2a}
.btn{padding:12px 18px;border-radius:99px;border:1px solid var(--line);background:var(--glass);cursor:pointer;font-weight:600}
.btn.danger{border-color:#ff6b7a88;color:#ffd4d9}
.fine{color:var(--muted);font-size:12px;line-height:1.5}
/* What's new, after an update */
.news-head{font-weight:700;margin:16px 0 4px}
.news{margin:0;padding-left:20px;line-height:1.5}
.news li{margin:6px 0}
.sheet-btns{display:flex;gap:8px;align-items:flex-start}
.fold{border:1px solid var(--line);border-radius:14px;background:var(--glass);padding:0 14px;margin:10px 0}
.fold>summary{cursor:pointer;padding:12px 0;font-weight:700;list-style-position:inside}
.fold[open]>summary{border-bottom:1px solid var(--line);margin-bottom:6px}
.fold>.btn-row,.fold>.news:last-child,.fold>.help-p:last-child{margin-bottom:12px}
.help-p{margin:8px 0;line-height:1.5}
.help-links{flex-wrap:wrap}
/* Duels */
.duel{overflow-wrap:anywhere;padding:12px 14px;border-radius:14px;background:var(--glass);border:1px solid var(--line);margin-top:8px;font-size:13px}
.duel b{display:block;font-size:15px}
.duel small{color:var(--muted)}
.duel .btn-row{margin-top:10px}
.btn.go{border-color:var(--accent);background:#ffffff1c}
.btn:disabled{opacity:.55;cursor:not-allowed}
.fine.warn{color:#ffd4d9}
.item.opp.left small::before{content:"● ";color:#ff9db0}.item.opp.right small::before{content:"● ";color:#9cc0ff}
/* Presence after a name (app.js presenceDot): green with a soft glow online, a still orange dot offline. */
.presence{display:inline-block;width:9px;height:9px;margin-left:7px;border-radius:50%;vertical-align:middle;flex:none}
/* A long name is cut with an ellipsis; its presence dot (and the dot's glow) always stays in sight. */
.nameline,.item b.nameline,.board .who b.nameline{display:flex;align-items:center;min-width:0;overflow:visible;padding-right:7px}
.nameline .nm{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.item>span:first-child{min-width:0}
.presence.on{background:#4ade80;box-shadow:0 0 5px 1px #4ade8099;animation:presence 2.4s ease-in-out infinite}
.presence.off{background:#f59e0b}
@keyframes presence{50%{box-shadow:0 0 10px 3px #4ade80dd}}
.duel-log{max-height:none}
.duel-log li.win{color:#d9ffe6}.duel-log li.loss{color:#ffd4d9}

/* onboarding */
.onboard{position:fixed;inset:0;z-index:30;overflow:auto;overscroll-behavior:contain;display:grid;grid-template-columns:minmax(0,1fr);place-items:center;padding:24px max(16px,env(safe-area-inset-right)) 24px max(16px,env(safe-area-inset-left));background:radial-gradient(110% 80% at 50% 0%,var(--bg2),var(--bg1) 72%)}
.onboard[hidden]{display:none}
.onboard-card{max-width:720px;width:100%;text-align:center}
.kicker{font:600 12px ui-monospace,monospace;letter-spacing:.2em;color:var(--accent-2);text-transform:uppercase}
.onboard h1{font:700 clamp(44px,11vw,76px)/1 Fredoka,sans-serif;margin:10px 0 8px}
.lead{color:var(--muted);font-size:clamp(15px,3.6vw,18px);max-width:520px;margin:0 auto}
.camps{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:26px 0 18px}
@media(max-width:520px){.camps{grid-template-columns:1fr}}
.camp{display:grid;justify-items:center;gap:6px;padding:18px;border-radius:24px;border:2px solid var(--line);background:var(--glass);cursor:pointer;transition:border-color .2s,transform .15s}
.camp:hover{transform:translateY(-2px)}
.camp[data-camp=left][aria-pressed=true]{border-color:#ff9db0;background:#ff9db01f}
.camp[data-camp=right][aria-pressed=true]{border-color:#9cc0ff;background:#9cc0ff1f}
.camp canvas{width:112px;height:112px;image-rendering:pixelated}
.camp b{font:600 19px Fredoka,sans-serif}
.camp small{color:var(--muted)}
.speed{display:grid;gap:6px;max-width:360px;margin:0 auto 20px;text-align:left;color:var(--muted);font-size:14px}
.howto{list-style:none;padding:0;margin:0 auto 22px;max-width:520px;display:grid;gap:8px;text-align:left;font-size:14px;color:var(--muted)}
.howto li{padding:10px 14px;border-radius:14px;background:var(--glass);border:1px solid var(--line)}
.howto b{color:var(--ink)}
.price:empty{display:none}
/* tabs (auth and leaderboard) */
.tabs{display:flex;gap:6px;padding:5px;border-radius:99px;background:var(--glass);border:1px solid var(--line);margin:22px auto 16px;max-width:420px}
.tabs button{flex:1;padding:10px 14px;border-radius:99px;border:0;background:none;cursor:pointer;font-weight:600;color:var(--muted)}
.tabs button[aria-pressed=true]{background:var(--glass-2);color:var(--ink);box-shadow:inset 0 0 0 1px var(--line)}
.tabs.small{margin:0 0 12px;max-width:none}.tabs.small button{padding:7px 8px;font-size:12px}
/* auth forms */
.auth-form{display:grid;gap:12px;max-width:420px;margin:0 auto;text-align:left}
.auth-form[hidden]{display:none}
.auth-form label{display:grid;gap:6px;font-size:14px;color:var(--muted)}
.auth-form label small{color:var(--muted);opacity:.8}
.auth-form input,.inline-form input{width:100%;padding:13px 14px;border-radius:14px;border:1px solid var(--line);background:#ffffff12;font:inherit;color:var(--ink)}
.auth-form input:focus,.inline-form input:focus{outline:2px solid var(--accent);outline-offset:1px}
.auth-form .camps{margin:6px 0 4px}.auth-form .howto{margin:4px 0 6px}
.auth-form .cta{justify-self:center;margin-top:6px}
.form-error{min-height:1.4em;margin:12px 0 4px;color:#ffb3bc;font-weight:600}
.form-error:empty{min-height:0;margin:0}
/* leaderboard */
.chip.rank{cursor:pointer;color:var(--ink);font-family:Inter,system-ui,sans-serif}
.board{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.board .row{border-radius:14px;background:#ffffff0b;border:1px solid transparent}
/* The whole row is a button: a tap opens the player's sheet (app.js renderPlayer). */
.board .row-in{display:grid;grid-template-columns:34px 48px minmax(0,1fr) auto;align-items:center;gap:10px;width:100%;padding:7px 12px 7px 10px;border:0;border-radius:inherit;background:none;text-align:left;cursor:pointer}
.board .row-in:hover{background:#ffffff0a}
.board canvas.mini{width:48px;height:48px;border-radius:12px;background:#ffffff0d;image-rendering:pixelated;display:block}
.board .row.me{border-color:var(--accent);background:#ffffff16}
.board .rank{font:700 13px ui-monospace,monospace;color:var(--accent-2)}
.board .row:nth-child(-n+3) .rank{font-size:15px}
.board .who{min-width:0}.board .who b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.board .who small{display:block;color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.board .row.left .who small::before{content:"● ";color:#ff9db0}.board .row.right .who small::before{content:"● ";color:#9cc0ff}
.board .val{font:700 13px ui-monospace,monospace;white-space:nowrap}
.feed li b{color:var(--ink)}
.feed li.death{color:#ffc7ce}.feed li.evolve,.feed li.legend{color:#ffe6b8}.feed li.duel{color:#d6e4ff}
.btn-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.inline-form{display:flex;flex-wrap:wrap;gap:8px;width:100%}.inline-form input{flex:1 1 180px}
.btn.armed{background:#ff6b7a33}
.cta{padding:15px 32px;border-radius:99px;border:0;cursor:pointer;background:linear-gradient(90deg,var(--accent),var(--accent-2));color:#1a1020;
 font:700 18px Fredoka,sans-serif;box-shadow:0 14px 34px -12px var(--accent);transition:transform .12s}
.cta:active{transform:scale(.97)}
footer{max-width:1120px;margin:0 auto;padding:0 max(16px,env(safe-area-inset-right)) max(80px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left))}
.tips .howto{margin:0 0 12px}
.camp-label{margin:10px 0 0;font-weight:600;color:var(--ink)}
.form-error.inline{margin:8px 0 0;width:100%}
.inline-form .fine{width:100%;margin:0}
/* For the undecided: dice and political test, at sign-up (in place of the camp cards) and in the Dossier sheet */
.camp-extra{justify-content:center;margin:0}
.camp-note{margin:0;text-align:center;font-size:13px;color:var(--ink)}.camp-note:empty{margin-top:-12px}
.auth-form.quizzing>:is(.camps,.camp-extra,.camp-note,.howto,.cta){display:none}
.quiz{text-align:left}.quiz[hidden]{display:none}
#sheet-quiz{margin-top:16px}
.quiz .btn.go.left{border-color:#ff9db0;background:#ff9db01f}.quiz .btn.go.right{border-color:#9cc0ff;background:#9cc0ff1f}
#reg-quiz{padding:16px;border-radius:var(--radius);background:var(--glass);border:1px solid var(--line)}
.fine.quiz-step{margin:0 0 8px;font:600 12px ui-monospace,monospace;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-2)}
.quiz .bar{height:6px}
.quiz-q{font:600 20px/1.3 Fredoka,sans-serif;margin:14px 0 0}
.quiz-q:focus{outline:none}
.quiz .items{margin-top:12px}
.quiz-camp{display:flex;align-items:center;gap:14px;margin:12px 0 4px;padding:12px 14px;border-radius:18px;border:2px solid var(--line);background:var(--glass)}
.quiz-camp.left{border-color:#ff9db0;background:#ff9db01f}.quiz-camp.right{border-color:#9cc0ff;background:#9cc0ff1f}
.quiz-camp canvas{flex:none;width:72px;height:72px;image-rendering:pixelated}
.quiz-camp b{display:block;font:600 19px Fredoka,sans-serif}
.quiz-camp small{display:block;color:var(--muted);font-size:13px}
/* Chat sheet (chat.mjs): full height on a phone, following the visual viewport (--vvh/--vvt) above the keyboard. */
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.sheet.chat{bottom:auto;top:var(--vvt,0px);height:var(--vvh,100dvh)}
.sheet.chat .sheet-card{height:100%;max-height:none;display:flex;flex-direction:column;overflow:hidden;border-radius:0;padding:max(4px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(8px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left))}
.sheet.chat .grabber{display:none}
.sheet.chat .sheet-head h2{font-size:21px}
.sheet.chat .sheet-sub{font-size:12px}
@media(min-width:700px){.sheet.chat{top:0;height:100dvh}.sheet.chat .sheet-card{height:min(780px,92dvh);border-radius:26px;padding:6px 18px 14px}.sheet.chat .grabber{display:block}}
.sheet.chat #sheet-body{flex:1;min-height:0;display:flex;flex-direction:column}
#sheet-body>.chat{flex:1;min-height:0;display:flex;flex-direction:column;gap:8px;position:relative}
.chat-tabs{margin:8px 0 0;flex:none}.chat-tabs button{min-height:40px;font-size:13px;display:flex;align-items:center;justify-content:center;gap:6px}
.chat-count{min-width:20px;height:20px;padding:0 6px;border-radius:99px;background:var(--danger);color:#fff;font:700 11px/20px Inter,sans-serif}
.chat-count[hidden],.chat-tabs button[hidden],.chat-tabs[hidden],.chat-solo[hidden]{display:none}
.chat-solo{margin:8px 0 0;flex:none;font:600 12px ui-monospace,monospace;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-2)}
.chat-wrap{flex:1;min-height:0;position:relative}
.chat-log{position:absolute;inset:0;overflow-y:auto;overscroll-behavior:contain;padding:4px 2px;border-radius:16px;scrollbar-width:thin;scrollbar-color:#ffffff30 transparent}
.chat-log:focus-visible{outline-offset:-3px}
.chat-more{text-align:center;margin:4px 0 8px}.chat-more[hidden]{display:none}
.chat-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.chat-msg{display:flex;align-items:flex-start;gap:2px;max-width:92%}
.chat-msg.mine{align-self:flex-end;flex-direction:row-reverse}
/* overflow clip: stacked combining marks ("zalgo") or a long glyph never paint over the neighbouring messages. */
.chat-bubble{flex:0 1 auto;min-width:0;overflow:hidden;overflow:clip;padding:7px 12px 8px;border-radius:16px 16px 16px 4px;background:var(--glass-2);border:1px solid var(--line);-webkit-touch-callout:none}
.chat-msg.mine .chat-bubble{border-radius:16px 16px 4px 16px;background:color-mix(in srgb,var(--accent) 22%,transparent);border-color:color-mix(in srgb,var(--accent) 45%,transparent)}
@media(pointer:coarse){.chat-bubble{user-select:none;-webkit-user-select:none}}
.chat-meta{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);min-width:0}
.chat-meta .presence{margin-left:0;width:7px;height:7px}
.chat-author{font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:14em}
.chat-author.left{color:#ff9db0}.chat-author.right{color:#9cc0ff}
.chat-meta time{font:11px ui-monospace,monospace;white-space:nowrap}
.chat-text{margin:2px 0 0;white-space:pre-wrap;overflow-wrap:anywhere;font-size:15px;line-height:1.4}
.chat-pic{display:block;margin-top:6px;padding:0;border:0;background:none;cursor:zoom-in;border-radius:12px;overflow:hidden;max-width:240px}
.chat-pic img{display:block;max-width:min(240px,100%);max-height:240px;min-width:60px;min-height:40px;object-fit:contain;background:#ffffff0d}
.chat-pic.broken{display:none}
.chat-more-btn{flex:none;align-self:center;width:32px;height:44px;border:0;border-radius:12px;background:none;color:var(--muted);font-size:18px;cursor:pointer;opacity:.6}
.chat-msg:hover .chat-more-btn,.chat-more-btn:focus-visible,.chat-more-btn[aria-expanded=true]{opacity:1}
.chat-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.chat-msg.mine .chat-actions{justify-content:flex-end}
.chat-actions .btn{padding:10px 14px;min-height:44px;font-size:13px}
.chat-pill{position:absolute;left:50%;bottom:10px;transform:translateX(-50%);padding:10px 16px;min-height:44px;border-radius:99px;border:1px solid var(--accent);background:var(--bg1);color:var(--ink);font-weight:600;font-size:13px;cursor:pointer;box-shadow:0 6px 18px #0009}
.chat-pill[hidden]{display:none}
.chat-form{flex:none;display:flex;flex-direction:column;gap:6px}
.chat-row{display:flex;align-items:flex-end;gap:6px}
.chat-row textarea{flex:1;min-width:0;min-height:44px;max-height:132px;resize:none;overflow-y:auto;padding:11px 14px;border-radius:22px;border:1px solid var(--line);background:#ffffff12;color:var(--ink);font:16px/1.35 Inter,system-ui,sans-serif}
.chat-row textarea:focus{outline:2px solid var(--accent);outline-offset:1px}
.chat-row .icon-btn{display:grid;place-items:center;padding:0}
.chat-row .icon-btn svg{width:22px;height:22px;stroke:var(--accent);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.chat-send{background:color-mix(in srgb,var(--accent) 25%,transparent)}
.icon-btn:disabled{opacity:.45;cursor:not-allowed}
.chat-emoji{max-height:min(220px,32dvh);overflow-y:auto;padding:6px 8px;border-radius:16px;background:#00000040;border:1px solid var(--line)}
.chat-emoji[hidden],.chat-preview[hidden],.chat-viewer[hidden]{display:none}
.chat-emoji-cat{margin:6px 2px 2px;font:600 11px ui-monospace,monospace;letter-spacing:.12em;text-transform:uppercase;color:var(--accent-2)}
.chat-emoji-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(44px,1fr))}
.chat-emoji-grid button{height:44px;border:0;border-radius:12px;background:none;font-size:24px;cursor:pointer}
.chat-emoji-grid button:hover{background:var(--glass-2)}
.chat-emoji{padding:0;display:flex;flex-direction:column;overflow:hidden;max-height:min(300px,42dvh);height:min(300px,42dvh)}
.chat-emoji-tabs{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;padding:4px 6px;border-bottom:1px solid var(--line);flex:none}
.chat-emoji-tabs::-webkit-scrollbar{display:none}
.chat-emoji-tabs button{flex:none;width:40px;height:36px;border:0;border-radius:10px;background:none;font-size:20px;cursor:pointer;display:grid;place-items:center}
.chat-emoji-tabs button[aria-selected=true]{background:var(--glass-2);box-shadow:inset 0 -2px 0 var(--accent)}
.chat-emoji-body{overflow-y:auto;overscroll-behavior:contain;padding:0 8px 6px;min-height:0;flex:1}
.chat-emoji-grid button{display:grid;place-items:center}
.chat-emoji-grid button.wide{grid-column:span 2}
.chat-cemoji{width:1.35em;height:1.35em;vertical-align:-.3em;image-rendering:pixelated}
.chat-cemoji.wide{width:2.7em}
.chat-emoji-grid .chat-cemoji,.chat-emoji-tabs .chat-cemoji{width:28px;height:28px;vertical-align:0}
.chat-emoji-grid .chat-cemoji.wide{width:56px}
.chat-emoji-tabs .chat-cemoji{width:24px;height:24px}
.chat-text.sticker .chat-cemoji{width:3em;height:3em}
.chat-text.sticker .chat-cemoji.wide{width:6em}
.chat-preview{display:flex;align-items:flex-start;gap:8px}
.chat-preview img{max-width:120px;max-height:90px;border-radius:12px;border:1px solid var(--line);object-fit:contain}
.chat-error,.chat-status{margin:0}.chat-status:empty{display:none}
.chat.drop .chat-wrap{outline:2px dashed var(--accent);outline-offset:-2px;border-radius:16px}
.chat-viewer{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:max(16px,env(safe-area-inset-top)) 16px max(16px,env(safe-area-inset-bottom));background:#000000e6}
.chat-viewer img{max-width:100%;max-height:100%;object-fit:contain;border-radius:8px}
.chat-viewer-close{position:absolute;top:max(12px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));background:#000a}
/* ---------- 1.6.0: missions, courrier, objectifs ---------- */
.mission-run{border-color:var(--accent)}
.mission-left{font:600 13px ui-monospace,monospace;color:var(--accent-2)}
.letter q{font-style:italic}
.goals{list-style:none;margin:10px 0 4px;padding:0;display:grid;gap:8px}
.goals li{padding:10px 14px;border-radius:14px;background:var(--glass);border:1px solid var(--line);font-size:13px}
.goals li b{display:block;font-size:14px}.goals li small{display:block;color:var(--muted);margin:2px 0 6px}
.goals li.done{border-color:#7fd6a066;background:#7fd6a018}.goals li.done .bar>i{background:#7fd6a0}
.goals .bar{height:6px}
/* ---------- the Flamme, the wardrobe ---------- */
.flame{margin-top:12px;padding:10px 14px;border-radius:16px;background:var(--glass);border:1px solid var(--line)}
.flame-head{display:flex;justify-content:space-between;font-size:14px;margin-bottom:6px}
.flame .bar>i{background:linear-gradient(90deg,#ff6a1a,#ffd23f)}
.flame .fine{margin:6px 0 0}
.ward-tabs{margin:14px 0 8px}
.ward-bar{align-items:center;margin:0 0 6px}.ward-bar .pill{font-size:13px;color:var(--ink)}
.block-title.ward-title{color:var(--r);margin-top:16px}
.ward-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:8px;margin-top:8px}
.ward-card{position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 4px 8px;border-radius:14px;border:2px solid var(--r);
 background:linear-gradient(180deg,color-mix(in srgb,var(--r) 18%,transparent),#0003);cursor:pointer;text-align:center;min-height:44px}
.ward-card canvas{width:96px;height:96px;image-rendering:pixelated;display:block}
.ward-card .rk{font-size:9.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--r)}
.ward-card .nm{font-size:11.5px;font-weight:700;line-height:1.2;min-height:2.4em;display:flex;align-items:center;justify-content:center;padding:0 2px}
.ward-card .st{font-size:10.5px;color:var(--muted)}
.ward-card.locked{border-style:dashed;background:#0002;cursor:default}.ward-card.locked .nm{color:#8d84a0}
.ward-card.swap{cursor:pointer;border-style:solid}.ward-card.armed{background:#ff6b7a33}
.ward-card.on{box-shadow:0 0 0 2px var(--accent)}.ward-card.on .st{color:var(--accent);font-weight:800}
.ward-card.r-ultra:not(.locked){box-shadow:0 0 14px #ff5ad180}.ward-card.r-mythique{box-shadow:0 0 16px #ff6a1a99}
/* ---------- la Tombola / la Loterie ---------- */
.urn{display:grid;place-items:center;height:220px;margin-top:10px;border-radius:22px;background:radial-gradient(60% 60% at 50% 55%,#ffffff1a,transparent 70%)}
.urn canvas{width:200px;height:200px;image-rendering:pixelated}
.urn-hint{text-align:center;font-style:italic;margin:-4px 0 0;color:#ffd0b0}
.urn-actions .btn{flex:1}
.odds{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;text-align:center;font-size:11px;color:var(--muted);margin-top:8px}
.odds b{display:block;font-size:13px}
.pity{display:grid;gap:6px;margin-top:14px;padding:12px 14px;border-radius:16px;background:var(--glass);border:1px solid var(--line)}
.pity-row{display:flex;justify-content:space-between;gap:8px;font-size:13px}.pity .bar{height:7px}
.reveal{position:relative;overflow:hidden;margin-top:14px;padding:14px;border-radius:22px;text-align:center;border:2px solid var(--r);
 background:radial-gradient(70% 60% at 50% 40%,color-mix(in srgb,var(--r) 35%,transparent),transparent 75%),#0006;box-shadow:0 0 30px color-mix(in srgb,var(--r) 45%,transparent)}
.reveal>*{position:relative}
.reveal canvas{width:176px;height:176px;margin:0 auto;display:block;image-rendering:pixelated}
.reveal h3{margin:6px 0 2px;font:600 20px Fredoka,sans-serif}.reveal h3:focus{outline:none}
.reveal .btn-row{justify-content:center}
.reveal .tag{display:inline-block;padding:1px 8px;border-radius:99px;font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;border:1px solid currentColor;color:var(--r)}
.reveal>.rays{position:absolute;inset:0;background:repeating-conic-gradient(from 0deg at 50% 42%,color-mix(in srgb,var(--r) 22%,transparent) 0 8deg,transparent 8deg 22deg);
 animation:spin 14s linear infinite;mask:radial-gradient(circle at 50% 42%,#000 20%,transparent 62%);-webkit-mask:radial-gradient(circle at 50% 42%,#000 20%,transparent 62%);pointer-events:none}
@keyframes spin{to{transform:rotate(1turn)}}
/* ---------- a player's sheet ---------- */
.stage{display:grid;place-items:center;height:250px;margin-top:12px;border-radius:22px;overflow:hidden;background:radial-gradient(70% 70% at 50% 60%,#ffffff14,transparent 70%),#0003}
.stage canvas{width:240px;height:240px;display:block}
.stage.volcano{background:#140a0e;box-shadow:0 0 24px #ff6a1a55}
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;font-size:14px;margin:14px 0 4px}.kv dt{color:var(--muted)}.kv dd{margin:0;font-weight:600;overflow-wrap:anywhere}
/* ---------- the feed's wardrobe news, the staff's banner ---------- */
.feed li.mythic,.feed li.baton{color:#ffd0b0}.feed li.ultra{color:#ffd1f0}.feed li.transfuge{color:#e6dcff}
.announce-bar.mythic{border-color:#ff6a1a;background:#2a1418f2;box-shadow:0 8px 30px #000a,0 0 18px #ff6a1a55}.announce-bar.mythic b{color:#ffb347}
/* ---------- the legend of the Bâton de feu (legend.mjs): the game dims, the pictures play on top ---------- */
.legend{position:fixed;inset:0;z-index:45;display:grid;place-items:center;background:#000;opacity:0;transition:opacity .6s}
.legend.on{opacity:1}.legend[hidden]{display:none}.legend:focus{outline:none}
.legend-film{position:relative;height:100%;max-height:100dvh;aspect-ratio:1/2;max-width:100vw}
.legend-film[hidden],.legend-final[hidden]{display:none}
.legend-cv{position:absolute;inset:0;width:100%;height:100%;image-rendering:pixelated}
.legend-next{position:absolute;inset:0;width:100%;height:100%;border:0;background:none;cursor:pointer}
.legend-next:focus-visible{outline-offset:-6px}
.legend-cap{position:absolute;left:12px;right:12px;bottom:64px;margin:0;padding:12px 14px;border-radius:14px;background:#000b;text-align:center;font:500 15px/1.45 Fredoka,sans-serif;text-shadow:0 1px 4px #000;opacity:0;transition:opacity .35s;pointer-events:none}
.legend-cap.on{opacity:1}.legend-cap b{color:#ffb347;font-weight:700}
.legend-title{position:absolute;left:0;right:0;top:38%;text-align:center;font:700 24px/1.25 Fredoka,sans-serif;text-shadow:0 0 18px #ff6a1a,0 0 4px #000;opacity:0;transition:opacity .5s;pointer-events:none}
.legend-title.on{opacity:1}
.legend-title small{display:block;font:600 12px ui-monospace,monospace;letter-spacing:.3em;color:#ffb347;margin-bottom:8px}
.legend-hint{position:absolute;left:0;right:0;bottom:22px;text-align:center;font:600 12.5px Inter,sans-serif;color:#ffd0b0;animation:blink 1.6s ease-in-out infinite;pointer-events:none}
@keyframes blink{50%{opacity:.35}}
.legend-count{position:absolute;top:max(20px,env(safe-area-inset-top));left:68px;font:700 11px ui-monospace,monospace;color:#ffffff88;letter-spacing:.1em;pointer-events:none}
.legend-snd{position:absolute;top:max(14px,env(safe-area-inset-top));left:14px;z-index:2;background:#0008;color:#fff}
.legend-skip{position:absolute;top:max(14px,env(safe-area-inset-top));right:14px;font-size:13px;padding:10px 14px;min-height:44px;background:#0008}
.legend-final{position:relative;display:grid;grid-template-columns:minmax(0,1fr);overflow-wrap:anywhere;place-content:center;gap:10px;text-align:center;padding:24px;width:min(100vw,460px);max-height:100dvh;overflow:auto;background:radial-gradient(60% 45% at 50% 42%,#ff6a1a40,transparent 70%)}
.legend-tag{display:inline-block;justify-self:center;padding:2px 10px;border-radius:99px;font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:#ff6a1a;border:1px solid currentColor;box-shadow:0 0 14px #ff6a1a80}
.legend-frame{justify-self:center;border:2px solid #ff6a1a;border-radius:22px;padding:8px;box-shadow:0 0 30px #ff6a1a88,inset 0 0 20px #ff6a1a55;animation:pulse 1.6s ease-in-out infinite}
@keyframes pulse{50%{box-shadow:0 0 46px #ff6a1acc,inset 0 0 26px #ff6a1a88}}
.legend-win{width:220px;height:220px;display:block;image-rendering:pixelated}
.legend-final h2{margin:0;font:700 22px Fredoka,sans-serif}.legend-final p{margin:0;color:var(--muted);font-size:13.5px}
.legend-final .btn-row{justify-content:center}
@media(prefers-reduced-motion:reduce){.reveal>.rays,.legend-hint,.legend-frame{animation:none}}
@media(prefers-reduced-motion:reduce){.blob{animation:none}.sheet-card{animation:none}.presence.on,.pad-btn.clash .knob svg{animation:none}*{transition:none!important}}
/* ---------- the Duel du Bâton (batonduel.mjs): full screen over the game, one phone-wide column ---------- */
.bd{position:fixed;inset:0;z-index:44;display:flex;justify-content:center;background:radial-gradient(120% 60% at 50% 0%,#3a1424,#120a14 70%) #120a14;opacity:0;transition:opacity .4s;
 --ch:#4f86e8;--be:#e0413a;user-select:none;-webkit-user-select:none;touch-action:manipulation}
.bd.on{opacity:1}.bd[hidden]{display:none}.bd:focus{outline:none}
.bd-col{position:relative;display:flex;flex-direction:column;width:min(100vw,480px);height:100dvh;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);overflow:hidden}
.bd .c-ch{color:var(--ch)}.bd .c-be{color:var(--be)}
.bd-tools{position:absolute;top:max(6px,env(safe-area-inset-top));left:50%;transform:translateX(-50%);z-index:6;display:flex;gap:6px}
.bd-tools .icon-btn{width:36px;height:36px;font-size:16px;background:#0008}
.bd-close.armed{width:auto;padding:0 12px;border-radius:99px;font-size:12.5px;background:#ff6b7a44}
.bd-top{display:grid;grid-template-columns:1fr auto 1fr;align-items:end;gap:8px;padding:48px 14px 6px;font:600 13px Inter,sans-serif}
.bd-who{display:flex;flex-direction:column;line-height:1.15;min-width:0}
.bd-who b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bd-who small{font-weight:500;color:var(--muted);font-size:11px}
.bd-who.r{text-align:right;align-items:flex-end}
.bd-dots{display:inline-flex;gap:3px;margin-top:3px}
.bd-dots i{width:9px;height:9px;border-radius:50%;border:1.5px solid currentColor;opacity:.8}
.bd-dots i.on{background:currentColor;opacity:1}
.bd-timer{font:700 20px ui-monospace,monospace;letter-spacing:.04em;text-align:center;line-height:1}
.bd-timer small{display:block;font:600 10px Inter,sans-serif;color:var(--muted);letter-spacing:.12em;margin-top:3px}
.bd-timer.rush{color:#ffb347;animation:blink .5s steps(2) infinite}
.bd-stage{position:relative;flex:none}
.bd-arena{display:block;width:100%;aspect-ratio:128/80;max-height:34dvh;object-fit:contain;image-rendering:pixelated}
.bd-live{position:absolute;top:6px;left:8px;padding:2px 8px;border-radius:99px;background:#0009;font:700 11px ui-monospace,monospace;letter-spacing:.12em;color:#ff6b5a}
.bd-live::before{content:"●";margin-right:5px;animation:blink 1s steps(2) infinite}
.bd-live.replay{color:#ffd0b0}.bd-live.replay::before{content:"▶"}
.bd[data-mode=play] .bd-live{display:none}
.bd-floaters{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.bd-floaters span{position:absolute;bottom:-30px;font-size:24px;line-height:1;animation:bd-rise 2.6s ease-out forwards}
.bd-floaters img{width:26px;height:26px;display:block}
@keyframes bd-rise{0%{transform:translateY(0) scale(.6);opacity:0}12%{opacity:1;transform:translateY(-30px) scale(1.1)}100%{transform:translateY(-250px) scale(1);opacity:0}}
.bd-tug{position:relative;flex:none;height:14px;margin:8px 16px 4px;border-radius:99px;background:linear-gradient(90deg,var(--be),#3a2030 50%,var(--ch))}
.bd-tug::after{content:"";position:absolute;left:50%;top:-3px;bottom:-3px;width:2px;background:#fff6;transform:translateX(-1px)}
.bd-tug b{position:absolute;top:50%;left:50%;width:22px;height:22px;margin:-11px 0 0 -11px;border-radius:50%;background:radial-gradient(circle,#fff3b0,#ffb347 40%,#ff6a1a 70%,#ff6a1a00 72%);filter:drop-shadow(0 0 6px #ff6a1a);transition:left .08s linear}
.bd-tug-l{display:flex;justify-content:space-between;gap:8px;margin:0 16px;font:600 10.5px Inter,sans-serif;color:var(--muted)}
.bd-tug-l span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bd-tug-l span+span{text-align:right}
.bd-play,.bd-watch{flex:1;min-height:0;display:flex;flex-direction:column}
.bd[data-mode=play] .bd-watch,.bd[data-mode=watch] .bd-play{display:none}
.bd-lanes-wrap{position:relative;flex:1;min-height:120px;margin-top:6px;touch-action:none;cursor:pointer}
.bd-lanes{position:absolute;inset:0;width:100%;height:100%}
.bd-judge{position:absolute;left:0;right:0;top:34%;text-align:center;font:700 26px Fredoka,sans-serif;letter-spacing:.06em;opacity:0;pointer-events:none;text-shadow:0 0 12px #000}
.bd-judge.on{animation:bd-pop .45s ease-out}
.bd-judge.p{color:#ffd23f}.bd-judge.g{color:#ffb347}.bd-judge.m{color:#a9a1b4}.bd-judge.x,.bd-judge.e{color:#ff6b5a}
@keyframes bd-pop{0%{opacity:1;transform:scale(1.35)}70%{opacity:1;transform:scale(1)}100%{opacity:0}}
.bd-combo{position:absolute;left:0;right:0;top:46%;text-align:center;font:700 13px ui-monospace,monospace;color:#ffd0b0;opacity:.9;pointer-events:none}
.bd-pads{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:8px 12px max(14px,env(safe-area-inset-bottom))}
.bd-pads button{height:64px;border-radius:16px;border:1px solid var(--line);background:#ffffff0d;cursor:pointer;touch-action:none;font:700 15px Fredoka,sans-serif}
.bd-pads button.hit{background:#ff6a1a55;border-color:#ffb347}
.bd-pads small{display:block;font:500 10px Inter,sans-serif;color:var(--muted)}
@media(pointer:coarse){.bd-pads small{display:none}}
.bd-pick{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin:8px 14px}
.bd-pick .btn{padding:8px;font-size:12.5px;min-height:40px;overflow-wrap:anywhere}
.bd-pick .btn.c-be[aria-pressed=true]{background:#e0413a33;border-color:var(--be)}.bd-pick .btn.c-ch[aria-pressed=true]{background:#4f86e833;border-color:var(--ch)}
.bd-emos{display:flex;gap:6px;margin:0 14px}
.bd-emos button{flex:1;height:48px;border-radius:14px;border:1px solid var(--line);background:#ffffff0d;font-size:22px;cursor:pointer;display:grid;place-items:center;padding:0}
.bd-emos button img{width:28px;height:28px}
.bd-emos button:active{transform:scale(.92)}
.bd-note{font-size:11px;color:var(--muted);text-align:center;margin:6px 14px 0}
.bd-feed{list-style:none;margin:8px 14px 14px;padding:0;display:grid;gap:5px;font-size:12px;flex:1;align-content:start;overflow:hidden}
.bd-feed li{overflow-wrap:anywhere;padding:7px 10px;border-radius:10px;background:#ffffff08}.bd-feed li.hot{background:#ff6a1a1f;color:#ffd0b0}
.bd-ov{overflow-wrap:anywhere;position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;justify-content:center;gap:12px;padding:56px 26px 26px;text-align:center;overflow:auto;
 background:radial-gradient(70% 45% at 50% 40%,#ff6a1a30,transparent 70%),#0b0609ee}
.bd-ov[hidden]{display:none}
.bd-ov h3{margin:0;font:600 22px/1.2 Fredoka,sans-serif}
.bd-ov p{margin:0;color:var(--muted);font-size:13.5px}
.bd-ov .bd-small{font-size:12px;color:#ffd0b0}
.bd-ov .tag{display:inline-block;align-self:center;padding:3px 12px;border-radius:99px;border:1px solid #ff6a1a88;background:#ff6a1a22;color:#ffb347;font:700 11px ui-monospace,monospace;letter-spacing:.12em}
.bd-big{font:700 84px Fredoka,sans-serif;color:#ffb347;text-shadow:0 0 30px #ff6a1a;line-height:1}
.bd-go{font:700 38px Fredoka,sans-serif;color:#ffd23f;text-shadow:0 0 24px #ff6a1a}
.bd-slots{display:grid;gap:8px}.bd-slots .btn{width:100%}
.bd-ov .btn.go{border-color:#ff6a1a;background:#ff6a1a26}
.bd-rules{margin:0;padding:12px 14px;border-radius:14px;background:#ffffff0a;text-align:left;font-size:12.5px;color:var(--muted);list-style:none;display:grid;gap:5px}
.bd-portrait{width:150px;height:150px;align-self:center;image-rendering:pixelated}
.btn.bd-watch-btn{overflow-wrap:anywhere;width:100%;margin:0 0 10px;padding:10px 14px;font-size:13px;border-color:#ff6a1a;background:#ff6a1a1f}
.btn.bd-watch-btn[hidden]{display:none}
#announce-go{flex:none;align-self:center;padding:8px 14px;font-size:13px}#announce-go[hidden]{display:none}
@media(prefers-reduced-motion:reduce){.bd-timer.rush,.bd-live::before{animation:none}.bd-tug b{transition:none}.bd-floaters span,.bd-judge.on{animation-name:bd-fade}}
@keyframes bd-fade{0%,70%{opacity:1}100%{opacity:0}}

/* Timed events: one bar above the game, kept over the sheets; the others under a touch. */
.event-bar{position:fixed;top:0;left:0;right:0;z-index:21;padding:max(6px,env(safe-area-inset-top)) max(10px,env(safe-area-inset-right)) 6px max(10px,env(safe-area-inset-left));background:linear-gradient(100deg,#ffb36b,#ff8fa8);color:#2a1020;box-shadow:0 4px 16px #0006}
.event-main{display:flex;align-items:center;gap:10px;width:100%;max-width:1120px;margin:0 auto;min-height:32px;padding:0;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}
.event-main b{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.event-clock{flex:none;font-size:12px;font-weight:700;font-variant-numeric:tabular-nums}
.event-more{flex:none;font-size:12px;font-weight:700;padding:2px 8px;border-radius:99px;background:#2a102022}
.event-list{list-style:none;max-width:1120px;margin:6px auto 2px;padding:0;display:grid;gap:8px}
.event-list li{display:grid;grid-template-columns:minmax(0,1fr);overflow-wrap:anywhere;gap:1px;padding-top:6px;border-top:1px solid #2a102033}
.event-list small{font-size:12px}
.event-bar{max-height:70vh;max-height:70dvh;overflow-y:auto;overscroll-behavior:contain}   /* six events on a small phone: the list scrolls */
.has-event{padding-top:var(--event-h,46px)}
.has-event .topbar{top:var(--event-h,46px)}
.has-event .sheet{padding-top:var(--event-h,46px)}   /* a low screen: the sheet's top stays below the bar */
.has-event .announce-bar,.has-event .net{top:calc(var(--event-h,46px) + 10px)}
.price.boost{color:#2a1c05;background:var(--accent-2,#ffd59a)}
