:root{
 --blue:#29bff4;
 --orange:#ffad32;
 --bg:#05111e;
 --panel:#0a2035;
 --panel2:#0d2943;
 --line:#294d69;
 --muted:#8eabc0;
 --text:#f5fbff;
 --good:#54d67d;
 --bad:#ff7168;
 --radius:14px;
}

*{box-sizing:border-box}
html,body{margin:0;width:100%;height:100%;overflow:hidden}
body{
 background:radial-gradient(circle at 50% 0,#113e64 0,#071b2e 38%,#030a12 100%);
 color:var(--text);
 font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
}
button,input,select{font:inherit}
button{touch-action:manipulation}
.hide{display:none!important}

.app{
 width:min(1440px,100%);
 height:100dvh;
 margin:auto;
 padding:clamp(6px,1vw,12px);
 display:grid;
 grid-template-rows:auto minmax(0,1fr);
 gap:6px;
}

/* Compact header */
.top{
 min-height:42px;
 display:flex;
 align-items:center;
 justify-content:space-between;
 gap:10px;
}
.brandWrap{display:flex;align-items:baseline;gap:12px;min-width:0}
.logo{font-size:clamp(28px,3.5vw,44px);font-weight:1000;letter-spacing:-.065em;line-height:1}
.brandSub{color:#79a8c5;font-size:8px;font-weight:900;letter-spacing:.16em;white-space:nowrap}
.topRight{margin-left:auto;display:flex;flex-direction:row-reverse;align-items:center;gap:7px;min-width:0}
.actions{display:flex;justify-content:flex-end;gap:5px}
.btn{
 min-height:36px;
 padding:6px 10px;
 border:1px solid var(--line);
 border-radius:9px;
 background:#102d48;
 color:var(--text);
 font-weight:850;
 cursor:pointer;
}
.btn:hover{border-color:#5380a0;background:#153754}
.btn.primary{background:#087fd0;border-color:#1c9ce7;color:#fff}
.langBtn{min-width:42px;border-color:#4b7897;background:#071b2d;color:#aee8ff}

/* Mode selection */
.home{width:min(980px,100%);align-self:center;justify-self:center;text-align:center}
.home h1{margin:0;font-size:clamp(24px,4vw,42px);letter-spacing:-.035em}
.home>p{margin:7px 0 0;color:var(--muted);font-size:13px}
.modes{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:18px}
.mode{
 min-height:142px;
 padding:16px;
 border:1px solid var(--line);
 border-radius:16px;
 background:linear-gradient(145deg,#102d48,#071828);
 color:#fff;
 text-align:left;
 cursor:pointer;
 transition:transform .14s ease,border-color .14s ease;
}
.mode:hover{transform:translateY(-2px);border-color:#5f8baa}
.mode strong{display:block;margin-top:7px;font-size:clamp(18px,2vw,24px)}
.mode small{display:block;margin-top:3px;color:var(--muted);font-size:11px;line-height:1.3}
.icon{height:38px;font-size:33px;line-height:1}
.cross{position:relative;width:58px;height:38px}
.cross span{position:absolute;left:50%;top:50%}
.cross .s{font-size:31px;transform:translate(-62%,-52%) rotate(-28deg)}
.cross .v{font-size:29px;transform:translate(-32%,-47%) rotate(30deg)}
.onlineMode{border-color:rgba(78,184,242,.6);background:linear-gradient(145deg,#0e4c73,#071a2b)}
.aboutProject{margin-top:10px;display:flex;justify-content:flex-end}
.supportLink{align-self:end;padding:6px 9px;border:1px solid rgba(121,168,197,.4);border-radius:8px;color:#b8d2e2;background:rgba(11,45,70,.56);font-size:10px;font-weight:850;text-decoration:none;white-space:nowrap;transition:border-color .15s ease,color .15s ease,background .15s ease}
.supportLink:hover{border-color:#79bddd;color:#eefaff;background:#123c5b}

/* Fixed game viewport */
.stage{
 position:relative;
 min-height:0;
 overflow:hidden;
 border:1px solid #315a76;
 border-radius:18px;
 background:
  linear-gradient(rgba(18,83,124,.08) 1px,transparent 1px),
  linear-gradient(90deg,rgba(18,83,124,.08) 1px,transparent 1px),
  radial-gradient(circle at 50% 30%,#0e4168 0,#081f35 38%,#061523 74%);
 background-size:28px 28px,28px 28px,auto;
 box-shadow:0 14px 34px rgba(0,0,0,.28);
}
.grid{
 width:100%;
 height:100%;
 min-height:0;
 padding:clamp(5px,.8vw,10px);
 display:grid;
 grid-template-columns:150px minmax(0,1fr) 150px;
 gap:8px;
 align-items:center;
}
.center{
 height:100%;
 min-width:0;
 min-height:0;
 display:grid;
 grid-template-rows:auto auto auto minmax(0,1fr);
 justify-items:center;
 align-items:center;
}

/* Players */
.player{
 width:100%;
 padding:12px;
 border:1px solid var(--line);
 border-radius:var(--radius);
 background:rgba(6,24,39,.9);
 box-shadow:0 8px 22px rgba(0,0,0,.2);
 transition:transform .18s ease,box-shadow .18s ease,opacity .18s ease;
 opacity:.72;
}
.player.p1{border-color:rgba(41,191,244,.65)}
.player.p2{border-color:rgba(255,173,50,.65)}
.player.activeTurn{opacity:1;transform:scale(1.035);box-shadow:0 0 0 2px rgba(41,191,244,.24),0 10px 26px rgba(0,0,0,.25)}
.player.p2.activeTurn{box-shadow:0 0 0 2px rgba(255,173,50,.24),0 10px 26px rgba(0,0,0,.25)}
.pnRow{display:flex;align-items:center;justify-content:center;gap:7px}
.pn{max-width:108px;overflow:hidden;text-overflow:ellipsis;padding:5px 8px;border:1px solid currentColor;border-radius:8px;font-size:17px;font-weight:1000;line-height:1;letter-spacing:.015em;white-space:nowrap;transition:transform .18s ease,background .18s ease,color .18s ease,box-shadow .18s ease}
.player.p1 .pn{color:#79ddff;background:rgba(41,191,244,.1);box-shadow:inset 0 0 0 1px rgba(41,191,244,.06)}
.player.p2 .pn{color:#ffc466;background:rgba(255,173,50,.1);box-shadow:inset 0 0 0 1px rgba(255,173,50,.06)}
.player.p1.activeTurn .pn{color:#061522;background:#5bd5ff;box-shadow:0 0 16px rgba(41,191,244,.52);transform:scale(1.05)}
.player.p2.activeTurn .pn{color:#211300;background:#ffc15e;box-shadow:0 0 16px rgba(255,173,50,.52);transform:scale(1.05)}
.pm{text-align:center;color:var(--muted);font-size:9px;min-height:13px;margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.live{margin-top:8px;padding:6px;border:1px solid #24435b;border-radius:8px;background:#071827;text-align:center}
.live b{display:block;font-size:18px;line-height:1}
.live span{display:none}
.scoreline{display:flex;justify-content:space-between;margin-top:8px;color:var(--muted);font-size:9px}
.scoreline b{color:#fff;font-size:13px}
.mobilePlayers{display:none;width:100%;grid-template-columns:1fr 1fr;gap:5px}
.mp{min-width:0;padding:5px 8px;border:1px solid var(--line);border-radius:8px;background:rgba(6,24,39,.9);display:flex;align-items:center;justify-content:space-between;font-size:10px;opacity:.72}
.mp:first-child{border-color:rgba(41,191,244,.65)}
.mp:last-child{border-color:rgba(255,173,50,.65)}
.mp.activeTurn{opacity:1;background:#103855;box-shadow:inset 0 0 0 1px rgba(41,191,244,.28)}
#mpCard2.activeTurn{background:#4a3418;box-shadow:inset 0 0 0 1px rgba(255,173,50,.28)}
.mpLeft{display:flex;align-items:center;gap:6px;min-width:0}.mpLeft>span{min-width:0}.mpLeft>span>span{display:inline-block;max-width:110px;overflow:hidden;text-overflow:ellipsis;padding:2px 6px;border:1px solid transparent;border-radius:6px;font-size:11px;font-weight:1000;white-space:nowrap;vertical-align:bottom}
#mpCard1 .mpLeft>span>span{color:#78ddff;background:rgba(41,191,244,.1);border-color:rgba(41,191,244,.32)}
#mpCard2 .mpLeft>span>span{color:#ffc66d;background:rgba(255,173,50,.1);border-color:rgba(255,173,50,.32)}
#mpCard1.activeTurn .mpLeft>span>span{color:#061522;background:#63d9ff;box-shadow:0 0 10px rgba(41,191,244,.42)}
#mpCard2.activeTurn .mpLeft>span>span{color:#211300;background:#ffc15e;box-shadow:0 0 10px rgba(255,173,50,.42)}
.mp small{color:var(--muted);font-size:8px}

.turnHex{
 width:28px;
 aspect-ratio:1;
 display:grid;
 place-items:center;
 flex:0 0 auto;
 clip-path:polygon(25% 4%,75% 4%,100% 50%,75% 96%,25% 96%,0 50%);
 background:#183b56;
 color:#bdd4e3;
 font-size:11px;
 font-weight:950;
 transition:transform .16s ease,filter .16s ease,background .16s ease;
}
.turnHex.small{width:23px;font-size:9px}
.turnHex.active{transform:scale(1.12);color:#07131f;background:linear-gradient(#9cecff,#28bdf2);filter:drop-shadow(0 0 8px rgba(41,191,244,.72))}
.player.p2 .turnHex.active,#mpCard2 .turnHex.active{background:linear-gradient(#ffe5ae,#ffad32);filter:drop-shadow(0 0 8px rgba(255,173,50,.72))}

/* Minimal game status */
.heading{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;color:var(--muted);font-size:8px;line-height:1}
.heading b{color:#dfeef7;font-size:9px;letter-spacing:.11em}
.timeRule{padding:4px 7px;border:1px solid rgba(109,179,218,.3);border-radius:999px;background:rgba(7,40,62,.72);color:#a8c7d9;font-size:8px;font-weight:900;letter-spacing:.04em}
.turnStage{
 width:min(640px,100%);
 height:68px;
 margin:4px 0;
 padding:5px 13px;
 display:grid;
 grid-template-columns:94px minmax(0,1fr) 94px;
 align-items:center;
 border:1px solid rgba(94,148,182,.28);
 border-radius:12px;
 background:rgba(5,23,38,.82);
}
.turnStage.singleTurn .turnSide.p2{visibility:hidden}
.turnSide{display:flex;align-items:center;justify-content:center;gap:5px;opacity:.38;transition:opacity .2s ease,transform .2s ease,color .2s ease}
.turnSide.active{opacity:1;transform:scale(1.08)}
.turnSide b{max-width:90px;overflow:hidden;text-overflow:ellipsis;padding:3px 6px;border-radius:6px;font-size:14px;letter-spacing:.035em;white-space:nowrap}
.turnSide.p1 b{color:#76dcff}.turnSide.p2 b{color:#ffc56b}
.turnSide.p1.active b{color:#061522;background:#66dcff;box-shadow:0 0 11px rgba(41,191,244,.45)}
.turnSide.p2.active b{color:#211300;background:#ffc15e;box-shadow:0 0 11px rgba(255,173,50,.45)}
.turnSide.active b{font-size:17px}
.turnSide small{display:none}
.turnHome{
 width:28px;aspect-ratio:1;display:none;place-items:center;
 clip-path:polygon(25% 4%,75% 4%,100% 50%,75% 96%,25% 96%,0 50%);
 color:#07131f;font-size:11px;font-weight:950;
}
.turnSide.p1 .turnHome{background:linear-gradient(#9cecff,#28bdf2)}
.turnSide.p2 .turnHome{background:linear-gradient(#ffe5ae,#ffad32)}
.turnCenter{position:relative;height:57px;display:grid;place-items:center}
.turnLane{position:absolute;left:0;right:0;top:50%;height:5px;transform:translateY(-50%);border-radius:99px;background:linear-gradient(90deg,rgba(41,191,244,.55),#17384e 50%,rgba(255,173,50,.55))}
.turnTokenWrap{position:relative;width:100%;height:57px}
.turnToken{
 position:absolute;left:50%;top:39%;transform:translate(-50%,-50%);
 width:47px;aspect-ratio:1;display:grid;place-items:center;
 clip-path:polygon(25% 4%,75% 4%,100% 50%,75% 96%,25% 96%,0 50%);
 color:#07131f;font-size:19px;font-weight:1000;
 transition:left .3s cubic-bezier(.22,.85,.3,1),transform .2s ease;
}
.turnToken.p1{background:linear-gradient(#a8efff,#27bdf1);filter:drop-shadow(0 0 9px rgba(41,191,244,.55))}
.turnToken.p2{background:linear-gradient(#ffe8b8,#ffad32);filter:drop-shadow(0 0 9px rgba(255,173,50,.55))}
.turnToken.duel{background:linear-gradient(#fff,#bfccd5)}
.turnTokenWrap[data-cur="1"] .turnToken{left:8%}
.turnTokenWrap[data-cur="2"] .turnToken{left:92%}
.turnTokenWrap[data-cur="duel"] .turnToken{left:50%}
.turnTokenText{position:absolute;left:50%;bottom:-1px;width:100%;transform:translateX(-50%);white-space:nowrap;text-align:center;font-size:16px;font-weight:1000;letter-spacing:.06em}
.turnTokenWrap[data-cur="1"] .turnTokenText{color:#73d7ff}
.turnTokenWrap[data-cur="2"] .turnTokenText{color:#ffc66f}

/* Board and centered question use the same space, never two stacked windows. */
.playArea{position:relative;width:100%;height:100%;min-height:0;display:grid;place-items:center;overflow:hidden}
#board{width:100%;height:100%;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;transition:opacity .18s ease,transform .22s ease,filter .18s ease}
.stage:not([data-phase="choose"]) #board{opacity:.055;transform:scale(.9);filter:blur(1.5px);pointer-events:none}
.row{display:flex;gap:1px}
.hex{
 width:clamp(30px,min(5.8vw,calc((100dvh - 172px)/7.15)),78px);
 aspect-ratio:1;
 padding:0;
 border:0;
 clip-path:polygon(25% 4%,75% 4%,100% 50%,75% 96%,25% 96%,0 50%);
 outline:2px solid #344956;
 outline-offset:-3px;
 background:linear-gradient(145deg,#fff,#cbd6dd);
 color:#081521;
 font-size:clamp(11px,1.5vw,18px);
 font-weight:950;
 cursor:pointer;
 transition:transform .1s ease,filter .1s ease;
}
.hex:not(:disabled):hover{transform:scale(1.05);filter:brightness(1.06)}
.hex:disabled{cursor:not-allowed}
.hex[data-o="1"]{background:linear-gradient(#71e3ff,#16ace5)}
.hex[data-o="2"]{background:linear-gradient(#ffd77d,#ff981b)}
.hex[data-s="neutral"]{background:#607387;color:#fff}
.hex[data-x="1"]{outline:3px solid #fff;outline-offset:-4px}
.hex[data-w="1"]{filter:drop-shadow(0 0 7px #fff)}

/* Focused question replaces the board until the answer or timeout resolves. */
.card{position:absolute;left:50%;top:50%;z-index:6;width:min(720px,calc(100% - 16px));max-height:calc(100% - 12px);overflow:hidden;padding:clamp(12px,1.7vw,20px);border:1px solid rgba(105,177,220,.58);border-radius:18px;background:linear-gradient(145deg,rgba(10,39,63,.985),rgba(4,20,34,.99));box-shadow:0 22px 70px rgba(0,0,0,.45),0 0 0 1px rgba(78,188,243,.08);transform:translate(-50%,-50%) scale(1);opacity:1;visibility:visible;transition:opacity .16s ease,transform .18s ease,visibility 0s}
.stage[data-phase="choose"] .card{opacity:0;visibility:hidden;pointer-events:none;transform:translate(-50%,-46%) scale(.96);transition:opacity .12s ease,transform .16s ease,visibility 0s .16s}
.ctop{display:grid;grid-template-columns:86px minmax(0,1fr) 108px;gap:14px;align-items:center}
.focusCell{display:grid;justify-items:center;gap:4px}
.focusCellLabel{color:var(--muted);font-size:8px;font-weight:950;letter-spacing:.14em}
.focusHex{width:76px;aspect-ratio:1;display:grid;place-items:center;clip-path:polygon(25% 4%,75% 4%,100% 50%,75% 96%,25% 96%,0 50%);background:linear-gradient(#a8efff,#27bdf1);color:#07131f;font-size:28px;font-weight:1000;filter:drop-shadow(0 0 15px rgba(41,191,244,.42))}
.focusHex.p2{background:linear-gradient(#ffe8b8,#ffad32);filter:drop-shadow(0 0 15px rgba(255,173,50,.42))}
.focusHex.duel{background:linear-gradient(#fff,#bfccd5);filter:drop-shadow(0 0 15px rgba(255,255,255,.28))}
.taskWrap{min-width:0;display:flex;flex-direction:column;justify-content:center}
.ey{color:#9fc1d7;font-size:10px;font-weight:900;letter-spacing:.12em}
.task{margin-top:5px;font-size:clamp(22px,2.5vw,34px);font-weight:950;line-height:1.08;text-wrap:balance}
.timerHero{min-width:0;padding:6px 8px;border:1px solid rgba(94,151,187,.3);border-radius:9px;background:#0b2a43;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden}
.timerLabel{color:#86abc2;font-size:8px;font-weight:950;letter-spacing:.12em}
.timer{min-width:0;text-align:center;font-size:32px;font-weight:1000;line-height:1;font-variant-numeric:tabular-nums}
.timer.off{color:var(--muted);font-size:10px}
.timer.waiting{color:#89a8ba}
.timer.danger{color:var(--bad);animation:timerPulse .48s ease-in-out infinite alternate;text-shadow:0 0 14px rgba(255,113,104,.5)}
@keyframes timerPulse{from{transform:scale(1)}to{transform:scale(1.1)}}
.pills{display:none}
.msg{min-height:17px;margin-top:9px;font-size:13px;font-weight:850;line-height:1.25;text-align:center}
.msg:empty,.msg.timerHint{display:none}
.msg.good{color:var(--good)}
.msg.bad{color:var(--bad)}
.micGuide{min-height:154px;margin-top:8px;padding:9px 12px;border:1px solid rgba(90,166,210,.5);border-radius:13px;background:linear-gradient(135deg,rgba(8,31,51,.98),rgba(6,22,37,.98));display:grid;grid-template-columns:minmax(0,1fr) 92px;gap:15px;align-items:center;overflow:hidden}
.micPitchInfo{min-width:0;display:grid;grid-template-columns:auto 1fr;grid-template-areas:"label label" "target direction" "detected detected" "help help" "track track" "time time";align-items:center;gap:3px 12px}
.micTargetLabel{grid-area:label;color:#86abc2;font-size:8px;font-weight:950;letter-spacing:.14em}
.micTargetNote{grid-area:target;color:#fff;font-size:44px;line-height:1;font-weight:1000;text-shadow:0 0 18px rgba(41,191,244,.28)}
.micDirection{grid-area:direction;color:#b9d2e1;font-size:18px;line-height:1.08}
.micDetectedNote{grid-area:detected;color:#7ea4bb;font-size:12px;font-weight:900}
.micPitchInfo small{grid-area:help;color:#86a4b7;font-size:9px}
.micHoldTrack{grid-area:track;height:8px;margin-top:5px;border-radius:99px;background:#142f43;overflow:hidden;box-shadow:inset 0 1px 3px rgba(0,0,0,.5)}
.micHoldTrack i{display:block;width:0;height:100%;border-radius:inherit;background:linear-gradient(90deg,#42d675,#9cffb9);box-shadow:0 0 10px rgba(84,214,125,.55);transition:width .08s linear}
.micHoldText{grid-area:time;color:#7697ab;font-size:9px;font-weight:950;font-variant-numeric:tabular-nums}
.pitchLane{height:138px;display:grid;grid-template-rows:13px minmax(0,1fr) 13px;justify-items:center;gap:3px;color:#789bb0;font-size:8px;font-weight:1000;letter-spacing:.08em}
.pitchRail{position:relative;width:42px;height:100%;border-radius:22px;background:linear-gradient(180deg,rgba(255,173,50,.2),rgba(41,191,244,.08) 40%,rgba(41,191,244,.08) 60%,rgba(255,173,50,.2));border:1px solid #315d78;box-shadow:inset 0 2px 9px rgba(0,0,0,.45)}
.pitchRail:before{content:"";position:absolute;left:50%;top:5px;bottom:5px;width:2px;transform:translateX(-50%);background:linear-gradient(#ffb24a,#65dff8 47%,#65dff8 53%,#ffb24a);opacity:.55}
.pitchTargetBand{position:absolute;left:4px;right:4px;top:42%;height:16%;border-radius:9px;background:rgba(84,214,125,.22);box-shadow:0 0 15px rgba(84,214,125,.24)}
.pitchTargetLine{position:absolute;left:-7px;right:-7px;top:50%;height:3px;transform:translateY(-50%);border-radius:3px;background:#62e38b;box-shadow:0 0 10px rgba(84,214,125,.9)}
.pitchMarker{position:absolute;left:50%;top:50%;width:24px;height:7px;transform:translate(-50%,-50%);border-radius:99px;background:#fff;box-shadow:0 0 0 3px rgba(255,255,255,.16),0 0 12px #fff;transition:top .1s linear,background .12s ease,opacity .12s ease}
.micGuide.waiting .pitchMarker{opacity:.18}
.micGuide.matched{border-color:rgba(84,214,125,.78);box-shadow:0 0 22px rgba(84,214,125,.12)}
.micGuide.matched .pitchMarker{background:#75ee9a;box-shadow:0 0 0 4px rgba(84,214,125,.18),0 0 17px #54d67d}
.micGuide.matched .micDirection{color:#65e18c}
.virt{margin-top:9px;padding-top:9px;border-top:1px solid #27465d}
.virtualHead{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:7px}
.virtualHead b{font-size:10px;letter-spacing:.09em;color:#d8f1ff}
.virtualHead span{font-size:10px;color:var(--muted)}
.notes{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin-top:10px}
.note{min-width:0;min-height:49px;padding:5px 3px;border:1px solid #3a607b;border-radius:9px;background:#113653;color:#fff;font-size:14px;font-weight:950;white-space:nowrap;cursor:pointer}
.note:hover{border-color:#54cefa;background:#174667}

/* Countdown and finish */
.countdownOverlay{position:absolute;right:170px;top:50%;z-index:18;pointer-events:none;display:block;transform:translateY(-50%)}
.countdownBig{width:clamp(72px,8vw,110px);aspect-ratio:1;display:grid;place-items:center;border:2px solid rgba(255,255,255,.8);border-radius:50%;background:rgba(3,14,25,.94);color:var(--bad);font-size:clamp(42px,5.5vw,72px);font-weight:1000;box-shadow:0 0 34px rgba(0,0,0,.46),0 0 24px rgba(255,113,104,.2);backdrop-filter:blur(4px)}
.countdownBig.pulse{animation:countPulse .42s ease-out}
@keyframes countPulse{0%{transform:scale(.72);opacity:.3}55%{transform:scale(1.08);opacity:1}100%{transform:scale(1);opacity:1}}
.finish{position:absolute;inset:0;z-index:20;display:grid;place-items:center;overflow:hidden;background:radial-gradient(circle at 50% 42%,rgba(18,85,128,.45),rgba(2,8,14,.94) 68%)}
.finishbox{position:relative;z-index:2;width:min(620px,94%);max-height:94%;overflow:auto;padding:18px;border:1px solid #4b87ac;border-radius:18px;background:linear-gradient(155deg,rgba(13,48,76,.98),rgba(5,21,36,.99));text-align:center;box-shadow:0 24px 80px rgba(0,0,0,.55),0 0 45px rgba(41,191,244,.13)}
.finishbox h2{margin:4px 0 2px;font-size:clamp(27px,4vw,43px);line-height:1;color:#fff;text-shadow:0 0 24px rgba(255,255,255,.25)}
.victoryRoute{position:relative;width:min(390px,92%);height:245px;margin:12px auto 4px;padding:19px 38px 36px;display:grid;place-items:center;border-radius:18px;background:radial-gradient(circle at 50% 43%,rgba(41,191,244,.15),transparent 68%)}
.victoryMap{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;filter:drop-shadow(0 12px 20px rgba(0,0,0,.34))}
.victoryRow{display:flex;gap:1px}
.victoryHex{width:25px;aspect-ratio:1;clip-path:polygon(25% 4%,75% 4%,100% 50%,75% 96%,25% 96%,0 50%);background:#385064;opacity:.22;transform:scale(.88)}
.victoryHex[data-o="1"]{background:#29bff4}.victoryHex[data-o="2"]{background:#ffad32}
.victoryHex[data-win="1"]{position:relative;z-index:2;opacity:1;transform:scale(1);background:linear-gradient(#b8f4ff,#21b9ef);box-shadow:0 0 0 2px #fff;filter:drop-shadow(0 0 8px rgba(41,191,244,.95));animation:routePulse 1.05s ease-in-out infinite alternate}
.victoryRoute[data-player="2"] .victoryHex[data-win="1"]{background:linear-gradient(#ffefc7,#ff9f20);filter:drop-shadow(0 0 8px rgba(255,173,50,.95))}
@keyframes routePulse{from{transform:scale(.94);filter:brightness(1) drop-shadow(0 0 4px currentColor)}to{transform:scale(1.16);filter:brightness(1.2) drop-shadow(0 0 11px #fff)}}
.victorySide{position:absolute;padding:5px 8px;border:1px solid rgba(185,222,244,.55);border-radius:999px;background:#09253b;color:#dff5ff;font-size:8px;font-weight:1000;letter-spacing:.12em;box-shadow:0 0 15px rgba(41,191,244,.18);animation:sideCelebrate 1.7s ease-in-out infinite}
.victoryRoute[data-player="2"] .victorySide{border-color:rgba(255,196,105,.7);box-shadow:0 0 15px rgba(255,173,50,.24)}
.victorySideLeft{left:0;top:45%;animation-delay:.1s}.victorySideRight{right:0;top:45%;animation-delay:.35s}.victorySideBottom{left:50%;bottom:22px;transform:translateX(-50%);animation-delay:.6s}
@keyframes sideCelebrate{0%,100%{opacity:.62}50%{opacity:1;background:#164d70;color:#fff}}
.victoryConnected{position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:max-content;max-width:100%;color:#6ce594;font-size:10px;font-weight:1000;letter-spacing:.08em;text-shadow:0 0 14px rgba(84,214,125,.45)}
.confetti{position:absolute;inset:0;z-index:1;overflow:hidden;pointer-events:none}
.confetti i{position:absolute;top:-10%;left:calc(7% + var(--x,0%));width:8px;height:17px;border-radius:2px;background:#29bff4;animation:confettiFall 2.8s linear infinite}
.confetti i:nth-child(2n){background:#ffad32}.confetti i:nth-child(3n){background:#54d67d}.confetti i:nth-child(4n){background:#fff}
.confetti i:nth-child(1){--x:2%;animation-delay:-.2s}.confetti i:nth-child(2){--x:10%;animation-delay:-1.6s}.confetti i:nth-child(3){--x:18%;animation-delay:-.7s}.confetti i:nth-child(4){--x:27%;animation-delay:-2.2s}.confetti i:nth-child(5){--x:35%;animation-delay:-1.1s}.confetti i:nth-child(6){--x:44%;animation-delay:-2.6s}.confetti i:nth-child(7){--x:53%;animation-delay:-.4s}.confetti i:nth-child(8){--x:62%;animation-delay:-1.9s}.confetti i:nth-child(9){--x:70%;animation-delay:-.9s}.confetti i:nth-child(10){--x:79%;animation-delay:-2.4s}.confetti i:nth-child(11){--x:86%;animation-delay:-1.3s}.confetti i:nth-child(12){--x:91%;animation-delay:-2.7s}
@keyframes confettiFall{0%{transform:translateY(-8vh) rotate(0);opacity:0}12%{opacity:1}100%{transform:translateY(115vh) rotate(620deg);opacity:.2}}
.review{max-height:115px;overflow:auto;margin-top:8px;padding-top:8px;border-top:1px solid #31536d;text-align:left}
.ri{margin-top:5px;padding:7px;border:1px solid #29475d;border-radius:7px;background:#071a2a;font-size:10px}
.ri b{display:block;margin-top:2px;color:#68df8a}

/* Dialogs */
.modalBack{position:fixed;inset:0;z-index:50;padding:8px;display:grid;place-items:center;background:rgba(0,0,0,.72);backdrop-filter:blur(7px)}
.modalBack:not(.onlineBack){z-index:55}
.modal{width:min(720px,100%);max-height:calc(100dvh - 16px);overflow:hidden;padding:16px;border-radius:16px;background:#f7fafc;color:#102039;box-shadow:0 18px 48px rgba(0,0,0,.35)}
.modal h2{margin:0;font-size:22px}
.modal p{margin:6px 0;color:#697b8d;font-size:11px}
.playerNameBox{margin-top:9px;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:8px;padding:7px 9px;border:2px solid #8bc9ec;border-radius:9px;background:#e8f5fc;box-shadow:0 4px 12px rgba(22,138,223,.09)}
.playerNameBox label{color:#126da4;font-size:10px;font-weight:1000;letter-spacing:.08em;white-space:nowrap}
.playerNameBox input{min-width:0;height:35px;padding:6px 10px;border:1px solid #c1d3df;border-radius:7px;background:#fff;color:#102039;font-weight:850;outline:none}
.playerNameBox input:focus{border-color:#168adf;box-shadow:0 0 0 2px rgba(22,138,223,.12)}
.opts{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;margin-top:10px}
.opt{min-height:104px;padding:8px;border:2px solid #d9e3ea;border-radius:11px;background:#fff;color:#102039;cursor:pointer}
.opt.sel{border-color:#168adf;background:#f2faff}
.opt i{display:block;font-style:normal;font-size:27px}
.opt b{display:block;margin-top:4px;font-size:12px}
.opt small{display:block;margin-top:3px;color:#718094;font-size:9px;line-height:1.2}
.device{margin-top:8px;padding:8px;border-radius:8px;background:#edf4f8}
.device label{display:block;margin-bottom:4px;font-size:9px;font-weight:850}
.device select{width:100%;height:36px;border:1px solid #c8d5df;border-radius:7px;background:#fff;color:#102039}
.modalActions{display:flex;justify-content:flex-end;gap:6px;margin-top:9px}
.modal .btn{background:#eaf1f6;border-color:#d1dee7;color:#102039}
.modal .btn.primary{background:#087fd0;border-color:#168adf;color:#fff}

/* Online dialog */
.onlineModal{width:min(520px,100%);padding:22px!important;text-align:center}
.onlineBadge{display:inline-flex;padding:6px 11px;border:1px solid #b9d9ec;border-radius:999px;background:#eaf6fd;color:#126394;font-size:10px;font-weight:950;letter-spacing:.1em}
.onlineModal h2{margin-top:9px;font-size:30px;letter-spacing:-.035em}
.onlineLeadHero{margin:5px auto 0!important;padding:0!important;border:0!important;background:transparent!important;color:#61788b!important;font-size:13px!important;font-weight:700!important;text-align:center}
.inviteWrap{position:relative;margin-top:16px;padding:18px 18px 16px;border:1px solid #b8d9ec;border-radius:16px;background:linear-gradient(180deg,#f1f9fe,#e7f4fc);box-shadow:0 10px 28px rgba(18,126,194,.12)}
.inviteIcon{width:44px;aspect-ratio:1;margin:0 auto 8px;display:grid;place-items:center;border-radius:50%;background:#d8effd;color:#0876c2;font-size:25px;font-weight:1000}
.inviteWrap label{display:block;color:#173d5d;font-size:14px;font-weight:1000;letter-spacing:.05em}
.inviteHelp{margin:5px 0 13px!important;color:#60798d!important;font-size:12px!important;line-height:1.35}
.inviteRow{display:flex;flex-direction:column;gap:7px}
.inviteRow input{order:2;min-width:0;height:31px;padding:5px 10px;border:0;border-radius:7px;background:rgba(255,255,255,.68);color:#71879a;font-size:9px;font-weight:750;text-align:center;outline:none}
.inviteRow .btn{order:1;min-height:55px;border:0;border-radius:12px;background:linear-gradient(180deg,#168be0,#0876c8);font-size:16px;font-weight:1000;letter-spacing:.025em;box-shadow:0 8px 20px rgba(8,118,200,.24)}
.inviteRow .btn:before{content:"⧉";margin-right:8px;font-size:19px}
.inviteOpen,.roomCode{display:none}
.onlinePlayers{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}
.onlinePlayer{display:flex;align-items:center;gap:9px;padding:10px 12px;border:1px solid #d4e1e9;border-radius:11px;background:#fff;text-align:left}
.onlinePlayer strong{display:inline-block;max-width:175px;overflow:hidden;text-overflow:ellipsis;padding:3px 7px;border-radius:6px;font-size:15px;font-weight:1000;white-space:nowrap}
.onlinePlayer:first-child strong{color:#0879bd;background:#e2f5ff}.onlinePlayer:last-child strong{color:#a36300;background:#fff0d6}
.onlinePlayer small{display:block;margin-top:2px;color:#708293;font-size:10px}
.onlineDot{width:11px;height:11px;flex:0 0 auto;border-radius:50%;background:#aebbc5;box-shadow:0 0 0 4px rgba(150,165,177,.14)}
.onlineDot.ready{background:#3fcf7a;box-shadow:0 0 0 3px rgba(63,207,122,.15)}
.onlineConnection{margin-top:8px;padding:9px 10px;border-radius:9px;background:#f5f0e8;color:#936528;font-size:11px;font-weight:900}
.onlineConnection.ok{background:#eaf8ef;color:#257147}
.onlineInfo{margin-top:10px;color:#718291;font-size:9px;line-height:1.35}
.onlineModal .modalActions{justify-content:center;margin-top:10px}
.onlineModal .modalActions .btn{min-height:30px;padding:4px 9px;border:0;background:transparent;color:#718291;font-size:10px;text-decoration:underline}

@media(max-width:1350px){.countdownOverlay{display:none!important}}

/* Tablet and portrait mobile */
@media(max-width:980px){
 .app{padding:5px}
 .top{min-height:38px}
 .brandSub{display:none}
 .topRight{max-width:70%}
 .grid{grid-template-columns:1fr;padding:4px;align-items:stretch}
 .center{grid-template-rows:auto auto auto minmax(0,1fr)}
 .player{display:none}
 .mobilePlayers{display:grid}
 .stage[data-mode="single"] .mobilePlayers{grid-template-columns:1fr}
 .stage[data-mode="single"] .mp:last-child{display:none}
 .heading{margin-top:2px}
 .turnStage{height:58px;margin:2px 0;grid-template-columns:70px minmax(0,1fr) 70px}
 .turnCenter,.turnTokenWrap{height:49px}
 .turnToken{width:39px;font-size:15px}
 .turnTokenText{font-size:11px}
 .hex{width:clamp(28px,min(calc((100vw - 20px)/7.12),calc((100dvh - 176px)/7.15)),52px)}
 .card{width:min(680px,calc(100% - 12px));padding:14px}
 .notes{grid-template-columns:repeat(6,1fr)}
 .note{min-height:34px}
 .countdownOverlay{display:none!important}
}

@media(max-width:650px){
 .logo{font-size:29px}
 .topRight{max-width:76%}
 .actions .btn{min-height:31px;padding:4px 7px;font-size:9px}
 .home{align-self:start;padding-top:clamp(14px,8vh,55px)}
 .home>p{font-size:11px}
 .modes{grid-template-columns:1fr;gap:7px;margin-top:12px}
 .mode{min-height:0;padding:10px 12px;display:grid;grid-template-columns:42px 1fr;grid-template-rows:auto auto;column-gap:9px}
 .mode .icon,.mode .cross{grid-row:1/3;align-self:center;height:34px}
 .mode strong{margin:0;font-size:17px}
 .mode small{font-size:9px}
 .cross .s{font-size:27px}.cross .v{font-size:25px}
 .aboutProject{margin-top:7px}.supportLink{padding:5px 8px;font-size:9px}
 .heading b{font-size:8px}.timeRule{font-size:7px;padding:3px 5px}
 .turnSide b{display:none}
 .turnStage{grid-template-columns:36px minmax(0,1fr) 36px;padding:3px 5px}
 .turnHome{width:24px;font-size:9px}
 .turnTokenText{font-size:10px;letter-spacing:.035em}
 .turnTokenWrap[data-cur="1"] .turnToken{left:10%}.turnTokenWrap[data-cur="2"] .turnToken{left:90%}
 .card{width:calc(100% - 8px);max-height:calc(100% - 8px);padding:10px;border-radius:14px}
 .ctop{grid-template-columns:62px minmax(0,1fr) 78px;gap:7px}
 .focusCell{gap:2px}.focusCellLabel{font-size:7px}.focusHex{width:55px;font-size:21px}
 .task{font-size:clamp(17px,5vw,23px)}
 .ey{font-size:8px}.timer{font-size:23px}
 .timerHero{padding:4px 5px}
 .msg{min-height:13px;margin-top:5px;font-size:10px}
 .micGuide{min-height:126px;margin-top:5px;padding:7px 9px;grid-template-columns:minmax(0,1fr) 70px;gap:8px}.micTargetNote{font-size:34px}.micDirection{font-size:14px}.pitchLane{height:112px}.pitchRail{width:34px}.micPitchInfo small{font-size:8px}
 .virt{margin-top:5px;padding-top:5px}.virtualHead{margin-bottom:4px}.virtualHead span{display:none}
 .notes{margin-top:6px;gap:4px}.note{min-height:39px;font-size:11px}
 .modal{padding:11px}
 .modal h2{font-size:18px}
 .playerNameBox{margin-top:6px;padding:5px 7px}.playerNameBox input{height:31px}
 .opts{grid-template-columns:1fr 1fr;gap:5px;margin-top:7px}
 .opt{min-height:74px;padding:6px}
 .opt i{font-size:22px}.opt b{font-size:10px}.opt small{font-size:8px}
 .onlineLeadHero{font-size:13px!important}
 .inviteRow{grid-template-columns:1fr}
 .inviteRow .btn{min-height:50px;font-size:14px}
 .onlineInfo{display:none}
 .finishbox{padding:12px}.victoryRoute{height:190px;margin-top:7px;padding:12px 31px 31px}.victoryHex{width:20px}.victoryConnected{font-size:8px}.review{max-height:78px}
}

/* Short landscape screens: prioritize board, task and playable controls */
@media(max-height:560px){
 .app{padding:3px;gap:2px}
 .top{min-height:30px}
 .logo{font-size:25px}
 .actions .btn{min-height:27px;padding:2px 6px;font-size:8px}
 .mobilePlayers{gap:3px}
 .mp{padding:2px 5px;font-size:8px}.mp small{display:none}.turnHex.small{width:19px}
 .heading{display:none}
 .turnStage{height:44px;margin:1px 0}
 .turnCenter,.turnTokenWrap{height:37px}
 .turnToken{width:31px;font-size:12px}
 .turnTokenText{bottom:-2px;font-size:8px}
 .turnHome{width:20px}
 .hex{width:clamp(20px,min(calc((100vw - 18px)/7.12),calc((100dvh - 112px)/7.15)),42px);font-size:9px}
 .card{padding:7px;max-height:calc(100% - 4px)}
 .ctop{grid-template-columns:48px minmax(0,1fr) 68px;gap:5px}
 .focusCellLabel{display:none}.focusHex{width:43px;font-size:16px}
 .task{font-size:13px}.ey,.timerLabel{font-size:6px}.timer{font-size:18px}
 .msg{min-height:0;margin:2px 0;font-size:8px}
 .micGuide{min-height:88px;margin-top:2px;padding:4px 7px;grid-template-columns:minmax(0,1fr) 54px;gap:5px}.micTargetLabel,.micPitchInfo small{display:none}.micTargetNote{font-size:27px}.micDirection{font-size:11px}.micDetectedNote{font-size:8px}.micHoldTrack{height:5px;margin-top:1px}.micHoldText{font-size:7px}.pitchLane{height:80px;font-size:6px}.pitchRail{width:27px}.pitchTargetBand{left:3px;right:3px}.pitchMarker{width:17px;height:5px}
 .virt{margin-top:2px;padding-top:2px}
 .virtualHead{display:none}
 .notes{grid-template-columns:repeat(6,1fr);margin-top:2px}
 .note{min-height:27px;font-size:8px}
 .modal{max-height:calc(100dvh - 6px);padding:8px}
 .modal h2{font-size:15px}.modal p{margin:3px 0;font-size:8px}
 .playerNameBox{margin-top:3px;padding:3px 5px}.playerNameBox label{font-size:7px}.playerNameBox input{height:27px;font-size:9px}
 .opts{grid-template-columns:repeat(4,1fr);margin-top:4px}
 .aboutProject{margin-top:4px}.supportLink{padding:4px 6px;font-size:8px}
 .opt{min-height:64px;padding:4px}.opt i{font-size:18px}.opt small{display:none}
 .modalActions{margin-top:4px}
 .inviteWrap{padding:6px}.onlinePlayers{margin-top:4px}.onlineInfo{display:none}
 .finishbox{display:grid;grid-template-columns:minmax(190px,.9fr) minmax(260px,1.1fr);grid-template-rows:auto auto auto auto;column-gap:10px;align-items:center;padding:8px;width:min(720px,96%)}
 .finishbox>.ey,.finishbox>h2,.finishbox>#winSub,.finishbox>#again{grid-column:1}.victoryRoute{grid-column:2;grid-row:1/5;height:190px;margin:0}.review{display:none}
}

/* Visible 440 Hz tuner meter without increasing the page height. */
.tunerPanel{width:330px;height:44px;padding:4px 7px;border:1px solid rgba(91,173,226,.48);border-radius:10px;background:#081f34;display:grid;grid-template-columns:118px minmax(0,1fr);align-items:center;gap:7px;box-shadow:0 6px 18px rgba(0,0,0,.18)}
.tunerHead{display:none}
.tunerMain{width:100%;display:grid;grid-template-columns:40px 1fr;gap:5px;align-items:center}
.tunerNote{height:32px;display:grid;place-items:center;border-radius:6px;background:#061625;font-size:17px;font-weight:950}
.tunerData{display:grid;grid-template-columns:1fr 1fr;gap:3px}
.tunerData div{padding:2px 4px;border-radius:5px;background:rgba(255,255,255,.045)}
.tunerData span{display:block;color:#7898ad;font-size:6px}.tunerData strong{display:block;font-size:8px;white-space:nowrap}
.tunerScale{min-width:0;display:grid;grid-template-columns:12px minmax(0,1fr) 12px;align-items:center;gap:4px;color:#8fb5cb;font-size:10px;font-weight:900;text-align:center}
.tunerMeter{min-width:0;display:grid;grid-template-rows:15px auto;gap:1px}
.tunerMeter small{color:#78a5bf;font-size:7px;font-weight:950;letter-spacing:.07em;white-space:nowrap}
.tunerTrack{position:relative;height:8px;margin-top:3px;border-radius:99px;background:linear-gradient(90deg,#e97770 0,#e5b55b 28%,#4ed27b 46%,#4ed27b 54%,#e5b55b 72%,#e97770 100%);box-shadow:inset 0 1px 3px rgba(0,0,0,.55)}
.tunerTrack:before,.tunerTrack:after{content:"";position:absolute;top:-2px;width:1px;height:12px;background:rgba(255,255,255,.45)}
.tunerTrack:before{left:25%}.tunerTrack:after{right:25%}
.tunerCenter{position:absolute;left:50%;top:-3px;width:2px;height:14px;transform:translateX(-50%);background:#fff;box-shadow:0 0 5px rgba(255,255,255,.8)}
.tunerNeedle{position:absolute;left:50%;top:-5px;width:3px;height:18px;transform:translateX(-50%);border-radius:2px;background:#fff;box-shadow:0 0 7px #fff;transition:left .09s linear}
.tunerPanel.inTune{border-color:rgba(80,213,125,.9);box-shadow:0 0 0 1px rgba(80,213,125,.18),0 0 17px rgba(80,213,125,.18)}
@media(max-width:650px){.tunerPanel{position:absolute;left:50%;top:3px;z-index:4;width:218px;height:37px;transform:translateX(-50%);grid-template-columns:55px minmax(0,1fr);padding:3px 5px}.tunerMain{grid-template-columns:32px 1fr}.tunerNote{height:27px;font-size:13px}.tunerData div:first-child{display:none}.tunerData{grid-template-columns:1fr}.tunerScale{gap:2px}.tunerMeter{grid-template-rows:13px auto}.tunerMeter small{font-size:6px}}

@media(prefers-reduced-motion:reduce){.confetti{display:none}.victoryHex[data-win="1"],.victorySide{animation:none}}
