:root {
  color-scheme: light;
  --navy-950:#0b1328;
  --navy-900:#101a33;
  --navy-800:#172544;
  --navy-700:#22365d;
  --ink:#14213a;
  --muted:#6d7a90;
  --line:#dce4ef;
  --paper:#eef3f9;
  --white:#ffffff;
  --blue:#2f72ff;
  --blue-2:#1f5ed8;
  --red:#e05269;
  --amber:#f0b83e;
  --green:#23a977;
  --purple:#8d67e8;
  --cyan:#31a9d8;
  --shadow:0 18px 50px rgba(12,25,54,.15);
  --shadow-soft:0 10px 24px rgba(12,25,54,.10);
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
}
button,input{font:inherit}
button{-webkit-tap-highlight-color:transparent}
svg{width:1em;height:1em;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.hidden{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* ---------- Player app ---------- */
body.player-page{
  height:100vh;
  height:100dvh;
  overflow:hidden;
  background:
    radial-gradient(circle at 8% -8%,rgba(72,143,255,.42),transparent 33%),
    radial-gradient(circle at 92% 6%,rgba(247,92,124,.34),transparent 24%),
    radial-gradient(circle at 50% 110%,rgba(112,76,255,.20),transparent 28%),
    linear-gradient(180deg,#132248 0%,#0d1835 52%,#091126 100%);
  color:#fff;
}
body.player-page::before{
  content:"";
  position:fixed;
  inset:0;
  pointer-events:none;
  opacity:.17;
  background-image:
    radial-gradient(circle at 20px 20px,rgba(255,255,255,.18) 0 1px,transparent 1.5px),
    radial-gradient(circle at 60px 70px,rgba(255,255,255,.10) 0 1px,transparent 1.5px);
  background-size:84px 84px,112px 112px;
}
body.modal-open{overflow:hidden}

.player-app{
  position:relative;
  z-index:1;
  width:min(100%,760px);
  height:100%;
  margin:0 auto;
  padding:max(10px,env(safe-area-inset-top)) 12px max(10px,env(safe-area-inset-bottom));
  display:grid;
  grid-template-rows:auto minmax(0,1fr);
  gap:8px;
}

.player-header{
  min-height:48px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
}
.brand-lockup{display:flex;align-items:center;gap:10px;min-width:0}
.brand-balls{display:flex;align-items:center;margin-right:1px}
.brand-ball{
  width:25px;height:25px;border-radius:50%;display:grid;place-items:center;
  margin-left:-5px;border:2px solid rgba(255,255,255,.88);
  color:#fff;font-weight:950;font-size:10px;box-shadow:0 4px 10px rgba(0,0,0,.16)
}
.brand-ball:first-child{margin-left:0}
.brand-name{font-weight:950;letter-spacing:-.045em;font-size:19px;white-space:nowrap}
.header-actions{display:flex;align-items:center;gap:10px}
.status-dot{display:inline-flex;align-items:center;gap:6px;color:#aebbd2;font-size:12px;font-weight:800;white-space:nowrap}
.status-dot::before{content:"";width:8px;height:8px;border-radius:50%;background:#8c99ad;box-shadow:0 0 0 4px rgba(140,153,173,.12)}
.status-dot.online{color:#d8f8eb}
.status-dot.online::before{background:#42d395;box-shadow:0 0 0 4px rgba(66,211,149,.13)}
.icon-button{
  width:40px;height:40px;border-radius:12px;border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.08);color:#fff;display:grid;place-items:center;cursor:pointer
}
.icon-button svg{width:20px;height:20px}

/* Join */
.join-screen{
  min-height:0;
  display:grid;
  grid-template-rows:minmax(150px,1fr) auto;
  gap:12px;
}
.join-graphic{position:relative;min-height:0;display:grid;place-items:center;overflow:hidden}
.machine-glow{
  position:absolute;width:min(72vw,430px);aspect-ratio:1;border-radius:50%;
  background:radial-gradient(circle,rgba(65,124,255,.30) 0%,rgba(65,124,255,.06) 48%,transparent 72%);
  filter:blur(1px)
}
.hero-ticket{
  position:relative;width:min(66vw,330px);padding:14px;border-radius:22px;
  background:linear-gradient(180deg,#fff 0%,#f5f8fd 100%);color:var(--ink);
  border:1px solid rgba(255,255,255,.75);box-shadow:0 24px 54px rgba(0,0,0,.25);
  transform:rotate(-3deg)
}
.hero-ticket::before,.hero-ticket::after{
  content:"";position:absolute;top:50%;width:24px;height:24px;border-radius:50%;background:var(--navy-900);transform:translateY(-50%)
}
.hero-ticket::before{left:-13px}.hero-ticket::after{right:-13px}
.ticket-top{display:flex;justify-content:space-between;font-size:10px;font-weight:950;letter-spacing:.08em;color:#6c7890;margin-bottom:9px}
.mini-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.mini-grid span{aspect-ratio:1;border-radius:10px;display:grid;place-items:center;background:#eef3f9;border:1px solid #d9e2ef;font-weight:950;font-size:15px}
.hero-ball{
  position:absolute;width:56px;height:56px;border-radius:50%;display:grid;place-items:center;color:#fff;font-weight:950;font-size:17px;
  border:3px solid rgba(255,255,255,.88);box-shadow:0 12px 24px rgba(0,0,0,.24),inset 0 -8px 15px rgba(0,0,0,.12)
}
.hero-ball-a{left:7%;top:15%;transform:rotate(-8deg)}
.hero-ball-b{right:8%;top:7%;width:68px;height:68px;font-size:20px;transform:rotate(8deg)}
.hero-ball-c{left:17%;bottom:10%;width:48px;height:48px}
.hero-ball-d{right:14%;bottom:10%;width:50px;height:50px}

.join-card{
  border:1px solid rgba(255,255,255,.12);border-radius:24px;padding:20px;
  background:linear-gradient(180deg,rgba(255,255,255,.11) 0%,rgba(255,255,255,.07) 100%);
  box-shadow:0 18px 44px rgba(0,0,0,.18);backdrop-filter:blur(14px)
}
.eyebrow{font-size:11px;font-weight:950;letter-spacing:.11em;text-transform:uppercase;color:#79a6ff}
.eyebrow.light{color:#a9c7ff}
.join-card h1{margin:7px 0 7px;font-size:clamp(32px,8vw,46px);line-height:.98;letter-spacing:-.055em}
.join-card p{margin:0;color:#c4cee0;font-size:14px;line-height:1.45}
.join-form{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:9px;margin-top:16px}
.code-input{
  min-width:0;height:54px;border-radius:15px;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.96);
  color:var(--ink);font-size:25px;font-weight:950;letter-spacing:.25em;text-align:center;outline:none;padding:0 12px
}
.code-input:focus{border-color:#6d9cff;box-shadow:0 0 0 4px rgba(79,134,255,.18)}

.game-button{
  min-height:50px;border:0;border-radius:15px;padding:0 17px;display:inline-flex;align-items:center;justify-content:center;gap:8px;
  font-weight:900;cursor:pointer;transition:transform .12s ease,opacity .15s ease,box-shadow .15s ease
}
.game-button:active{transform:scale(.985)}
.game-button svg{width:19px;height:19px}
.game-button.primary{color:#fff;background:linear-gradient(180deg,#3d7dff 0%,#2364e4 100%);box-shadow:0 12px 24px rgba(29,93,220,.30)}
.game-button.secondary{color:var(--ink);background:#edf2f8}
.game-button.danger{color:#fff;background:linear-gradient(180deg,#ee6679 0%,#d9425a 100%)}
.game-button.ghost-light{color:#fff;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18)}
.game-button.winner-primary{color:#0d2440;background:#fff;box-shadow:0 12px 28px rgba(0,0,0,.16)}
.game-button:disabled{opacity:.52;cursor:not-allowed;box-shadow:none}

.inline-message{margin-top:11px;padding:10px 12px;border-radius:12px;font-size:13px}
.inline-message.error{background:rgba(255,79,110,.13);border:1px solid rgba(255,116,140,.28);color:#ffd7de}

/* Game screen - intentionally one viewport, no scrolling */
.game-screen{
  min-height:0;
  height:100%;
  display:grid;
  grid-template-rows:auto auto minmax(0,1fr) auto;
  gap:7px;
  overflow:hidden;
}
.game-status-row{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:34px}
.game-code-chip,.mark-progress{
  min-height:34px;border-radius:999px;padding:0 12px;display:inline-flex;align-items:center;gap:7px;
  background:linear-gradient(180deg,rgba(255,255,255,.13),rgba(255,255,255,.08));border:1px solid rgba(255,255,255,.16);color:#eff5ff;font-size:12px;font-weight:900;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.15)
}
.chip-icon{width:21px;height:21px;border-radius:7px;display:grid;place-items:center;background:rgba(255,255,255,.08)}
.chip-icon svg{width:13px;height:13px}
.mark-progress{color:#fff;background:rgba(67,126,255,.17);border-color:rgba(91,145,255,.26)}

.latest-call{
  min-height:86px;border-radius:20px;padding:11px 12px;display:grid;grid-template-columns:72px minmax(0,1fr);gap:12px;align-items:center;
  background:
    radial-gradient(circle at top right, rgba(255,255,255,.14), transparent 30%),
    linear-gradient(135deg,rgba(72,143,255,.28) 0%,rgba(130,92,255,.18) 42%,rgba(255,255,255,.08) 100%);
  border:1px solid rgba(255,255,255,.14);box-shadow:0 14px 30px rgba(0,0,0,.14)
}
.call-ball{
  width:66px;height:66px;border-radius:50%;display:grid;place-items:center;color:#fff;font-size:25px;font-weight:950;
  border:3px solid rgba(255,255,255,.88);box-shadow:0 9px 18px rgba(0,0,0,.22),inset 0 -8px 15px rgba(0,0,0,.13);position:relative
}
.call-ball::after{content:"";position:absolute;left:15px;top:8px;width:18px;height:9px;border-radius:50%;background:rgba(255,255,255,.30);transform:rotate(-20deg)}
.call-ball.waiting{background:linear-gradient(180deg,#7786a0,#58677f);font-size:22px}
.latest-copy{min-width:0}
.latest-copy .eyebrow{display:block;margin-bottom:2px;color:#91b5ff}
.latest-copy strong{display:block;font-size:clamp(18px,5vw,25px);line-height:1.05;letter-spacing:-.035em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.latest-copy>span:last-child{display:block;margin-top:4px;color:#afbdd4;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.board-stage{min-height:0;display:grid;place-items:center;padding:1px 0}
.bingo-card-shell{
  --board-size:min(calc(100vw - 24px),calc(100dvh - 252px),430px);
  width:var(--board-size);height:var(--board-size);min-width:0;min-height:0;position:relative;
  padding:10px;border-radius:24px;background:linear-gradient(180deg,#fffefc 0%,#faf3df 55%,#f4ead2 100%);color:var(--ink);
  border:1px solid rgba(255,255,255,.88);box-shadow:0 24px 48px rgba(0,0,0,.28), inset 0 0 0 1px rgba(198,184,151,.22), inset 0 10px 24px rgba(255,255,255,.4)
}
.bingo-card-shell::before{
  content:"";position:absolute;inset:0;border-radius:21px;pointer-events:none;opacity:.28;
  background-image:radial-gradient(circle at 2px 2px,rgba(95,75,34,.22) 0 1px,transparent 1.25px);background-size:12px 12px
}
.card-rivet{position:absolute;top:50%;width:16px;height:16px;border-radius:50%;background:var(--navy-950);transform:translateY(-50%);z-index:2}
.card-rivet-left{left:-8px}.card-rivet-right{right:-8px}
.card-label-row{height:27px;position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;padding:0 3px 6px;font-size:10px;font-weight:950;letter-spacing:.09em;text-transform:uppercase;color:#778298}
.full-house-tag{color:#8a630b;background:#fff3bd;border:1px solid #f1d67a;border-radius:999px;padding:3px 7px}
.card-grid{position:relative;z-index:1;height:calc(100% - 27px);display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:repeat(3,minmax(0,1fr));gap:7px}
.number-cell{
  min-width:0;min-height:0;border:1px solid #d6ddec;border-radius:15px;background:linear-gradient(180deg,#ffffff 0%,#f8fbff 42%,#f6f8fb 100%);
  color:var(--ink);display:grid;place-items:center;padding:0;cursor:pointer;position:relative;overflow:hidden;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.92), 0 5px 10px rgba(13,26,53,.05);transition:transform .12s ease,border-color .18s ease,background .18s ease,box-shadow .18s ease
}
.number-cell::before{content:"";position:absolute;inset:4px;border:1px dashed rgba(89,104,129,.12);border-radius:10px}
.number-cell::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.42),transparent 38%);pointer-events:none}
.number-cell:active{transform:scale(.97)}
.number-disc{
  width:min(68%,68px);aspect-ratio:1;border-radius:50%;display:grid;place-items:center;position:relative;
  border:2px solid #e1e7ef;background:#fff;box-shadow:0 4px 10px rgba(18,36,68,.08)
}
.number-disc span{font-size:clamp(22px,calc(var(--board-size)*.088),39px);font-weight:950;letter-spacing:-.045em;line-height:1}
.number-cell.called-unmarked{background:linear-gradient(180deg,#fffdf4,#fff7da);border-color:#e6c667}
.number-cell.called-unmarked .number-disc{border-color:#e4bd45;box-shadow:0 0 0 4px rgba(240,184,62,.13)}
.number-cell.just-called{background:linear-gradient(180deg,#fff7f8,#ffecee);border-color:#ef8393;animation:cellPulse 1.25s ease-in-out infinite}
.number-cell.just-called .number-disc{border-color:#e05269;box-shadow:0 0 0 5px rgba(224,82,105,.14)}
.number-cell.marked{background:linear-gradient(155deg,#eef5ff 0%,#dbe9ff 100%);border-color:#87adff}
.number-cell.marked::after{
  content:"✓";position:absolute;right:7px;top:5px;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;
  background:#fff;color:#1f5ed8;font-size:12px;font-weight:950;box-shadow:0 3px 8px rgba(31,94,216,.18)
}
.number-cell.marked .number-disc{
  color:#fff;border-color:#2f72ff;background:
    radial-gradient(circle at 32% 28%,rgba(255,255,255,.22) 0 10%,transparent 11%),
    linear-gradient(150deg,#4b8cff 0%,#1f5ed8 100%);
  box-shadow:0 7px 14px rgba(31,94,216,.25),inset 0 -7px 12px rgba(0,0,0,.08)
}
@keyframes cellPulse{0%,100%{transform:scale(1);box-shadow:0 0 0 0 rgba(224,82,105,.02)}50%{transform:scale(1.018);box-shadow:0 0 0 5px rgba(224,82,105,.10)}}
@media(prefers-reduced-motion:reduce){.number-cell.just-called{animation:none;box-shadow:0 0 0 4px rgba(224,82,105,.12)}}

.recent-dock{
  min-height:46px;border-radius:18px;padding:6px 9px;display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;align-items:center;
  background:linear-gradient(180deg,rgba(255,255,255,.11),rgba(255,255,255,.07));border:1px solid rgba(255,255,255,.12);box-shadow:0 10px 22px rgba(0,0,0,.12)
}
.recent-title{display:flex;align-items:center;gap:5px;color:#b9c6dc;font-size:10px;font-weight:950;text-transform:uppercase;letter-spacing:.07em}
.recent-title svg{width:14px;height:14px}
.recent-strip{min-width:0;display:flex;gap:5px;align-items:center;justify-content:flex-end;overflow:hidden}
.recent-ball{
  flex:0 0 31px;width:31px;height:31px;border-radius:50%;display:grid;place-items:center;color:#fff;font-size:10px;font-weight:950;
  border:2px solid rgba(255,255,255,.76);box-shadow:0 4px 8px rgba(0,0,0,.18),inset 0 -5px 8px rgba(0,0,0,.12)
}
.recent-empty{color:#8f9db4;font-size:11px;font-weight:700;white-space:nowrap}
.toast{
  position:fixed;left:50%;bottom:calc(env(safe-area-inset-bottom) + 14px);transform:translateX(-50%);z-index:60;
  width:min(calc(100% - 22px),430px);padding:11px 13px;border-radius:13px;background:#fff4ce;color:#684d09;border:1px solid #efda83;
  box-shadow:0 16px 32px rgba(0,0,0,.22);font-size:13px;font-weight:800;text-align:center
}

/* Modals */
.modal-overlay,.winner-overlay{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:18px}
.modal-overlay{background:rgba(5,12,27,.73);backdrop-filter:blur(8px)}
.dialog-card{
  width:min(100%,420px);background:#fff;color:var(--ink);border-radius:24px;padding:24px;box-shadow:0 28px 70px rgba(0,0,0,.35);text-align:center
}
.compact-dialog h2{margin:12px 0 7px;font-size:25px;letter-spacing:-.04em}
.compact-dialog p{margin:0;color:var(--muted);font-size:14px;line-height:1.5}
.dialog-icon{width:52px;height:52px;margin:0 auto;border-radius:17px;display:grid;place-items:center;background:#eef3f9;color:#41536f}
.dialog-icon svg{width:25px;height:25px}
.exit-icon{background:#fff1f3;color:#c83f56}
.dialog-actions{display:grid;gap:9px;margin-top:20px}
.dialog-actions.two-up{grid-template-columns:1fr 1fr}

.winner-overlay{
  overflow:hidden;background:
    radial-gradient(circle at 50% 20%,rgba(255,255,255,.18),transparent 24%),
    radial-gradient(circle at 10% 10%,rgba(87,194,255,.28),transparent 28%),
    radial-gradient(circle at 88% 12%,rgba(255,102,135,.26),transparent 25%),
    linear-gradient(150deg,#173d86 0%,#142b63 38%,#0c1f49 100%);
  color:#fff;text-align:center
}
.winner-content{position:relative;z-index:2;width:min(100%,440px)}
.winner-crown{width:86px;height:72px;margin:0 auto 2px;color:#ffd65b;filter:drop-shadow(0 10px 18px rgba(0,0,0,.22))}
.winner-crown svg{width:100%;height:100%;stroke-width:3;fill:rgba(255,214,91,.14)}
.winner-kicker{font-size:12px;font-weight:950;letter-spacing:.16em;text-transform:uppercase;color:#b8d2ff}
.winner-title{font-size:clamp(66px,21vw,112px);line-height:.85;font-weight:1000;letter-spacing:-.085em;margin-top:7px;text-shadow:0 10px 30px rgba(0,0,0,.30)}
.winner-ribbon{display:inline-block;margin-top:14px;padding:8px 15px;border-radius:999px;background:#ffd65b;color:#33260a;font-size:13px;font-weight:1000;letter-spacing:.11em}
.winner-content p{margin:13px auto 20px;color:#d4def1;font-size:14px;line-height:1.45;max-width:310px}
.winner-actions{display:grid;grid-template-columns:1fr 1.35fr;gap:9px}
.confetti-layer{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.confetti-layer span{position:absolute;left:var(--x);top:-12%;width:8px;height:14px;border-radius:2px;transform:rotate(var(--rot));animation:confettiFall var(--dur) linear var(--delay) infinite}
@keyframes confettiFall{0%{transform:translate3d(0,-20px,0) rotate(var(--rot));opacity:0}12%{opacity:1}100%{transform:translate3d(24px,115vh,0) rotate(calc(var(--rot) + 540deg));opacity:.9}}

/* Ball palette */
.tone-1{background:linear-gradient(160deg,#f36c80,#d9445c)!important}
.tone-2{background:linear-gradient(160deg,#f6c957,#d99e1d)!important}
.tone-3{background:linear-gradient(160deg,#4bcf9c,#229b70)!important}
.tone-4{background:linear-gradient(160deg,#5a9bff,#2b67df)!important}
.tone-5{background:linear-gradient(160deg,#a686f2,#7552d0)!important}
.tone-6{background:linear-gradient(160deg,#51c4e9,#248eb8)!important}

/* Short phones: keep everything on one screen */
@media(max-height:640px){
  .player-app{padding-top:max(6px,env(safe-area-inset-top));padding-bottom:max(6px,env(safe-area-inset-bottom));gap:5px}
  .player-header{min-height:42px}
  .brand-ball{width:22px;height:22px;font-size:9px}.brand-name{font-size:17px}.icon-button{width:36px;height:36px}
  .game-screen{gap:5px}.game-status-row{min-height:29px}.game-code-chip,.mark-progress{min-height:28px;font-size:10px;padding:0 8px}
  .latest-call{min-height:69px;padding:7px 9px;grid-template-columns:56px 1fr;gap:9px;border-radius:15px}
  .call-ball{width:54px;height:54px;font-size:21px;border-width:2px}.call-ball::after{left:12px;top:7px;width:14px;height:7px}
  .latest-copy strong{font-size:18px}.latest-copy>span:last-child{font-size:10px}.latest-copy .eyebrow{font-size:9px}
  .bingo-card-shell{--board-size:min(calc(100vw - 24px),calc(100dvh - 206px),390px);padding:8px;border-radius:17px}
  .card-label-row{height:23px;font-size:8px}.card-grid{height:calc(100% - 23px);gap:5px}.number-cell{border-radius:11px}.number-cell::before{inset:3px;border-radius:8px}
  .recent-dock{min-height:36px;padding:3px 6px}.recent-ball{flex-basis:27px;width:27px;height:27px;font-size:9px}.recent-title{font-size:9px}
  .join-screen{grid-template-rows:minmax(105px,.75fr) auto;gap:7px}.join-card{padding:15px;border-radius:19px}.join-card h1{font-size:31px}.join-card p{font-size:12px}.join-form{margin-top:12px}.code-input{height:48px;font-size:22px}.game-button{min-height:48px}.hero-ticket{width:min(55vw,260px);padding:10px}.hero-ball{transform:scale(.82)}
}

@media(max-height:520px){
  .join-graphic{display:none}.join-screen{display:grid;place-items:center}.join-card{width:100%}
}

/* Landscape phone layout */
@media(orientation:landscape) and (max-height:540px){
  .player-app{width:100%;padding-left:max(10px,env(safe-area-inset-left));padding-right:max(10px,env(safe-area-inset-right))}
  .player-header{min-height:38px}
  .game-screen{grid-template-columns:180px minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto;column-gap:10px}
  .game-status-row{grid-column:1/-1}
  .latest-call{grid-column:1;grid-row:2;grid-template-columns:1fr;text-align:center;align-content:center}
  .call-ball{margin:0 auto}.latest-copy>span:last-child{white-space:normal}
  .board-stage{grid-column:2;grid-row:2/4}
  .bingo-card-shell{--board-size:min(calc(100dvh - 86px),calc(100vw - 220px),390px)}
  .recent-dock{grid-column:1;grid-row:3;grid-template-columns:1fr}.recent-title{justify-content:center}.recent-strip{justify-content:center}.recent-ball:nth-child(n+5){display:none}
}


/* Narrow portrait phones */
@media(max-width:460px) and (orientation:portrait){
  .player-app{padding-left:10px;padding-right:10px;gap:6px}
  .player-header{min-height:42px}
  .brand-name{font-size:18px}
  .brand-ball{width:23px;height:23px;font-size:9px}
  .game-screen{gap:6px}
  .game-status-row{flex-wrap:wrap;justify-content:space-between;min-height:auto;row-gap:6px}
  .game-code-chip,.mark-progress{min-height:30px;padding:0 10px;font-size:11px}
  .latest-call{min-height:78px;padding:9px 10px;grid-template-columns:62px 1fr;gap:10px}
  .call-ball{width:60px;height:60px;font-size:22px}
  .latest-copy strong{font-size:17px;white-space:normal;overflow:visible;text-overflow:clip}
  .latest-copy>span:last-child{font-size:11px;white-space:normal;overflow:visible;text-overflow:clip;line-height:1.3}
  .board-stage{padding:0}
  .bingo-card-shell{--board-size:min(calc(100vw - 20px),calc(100dvh - 248px),396px);padding:8px;border-radius:20px}
  .card-label-row{height:24px;padding-bottom:4px}
  .card-grid{height:calc(100% - 24px);gap:6px}
  .number-cell{border-radius:13px}
  .number-disc{width:min(72%,72px)}
  .number-disc span{font-size:clamp(19px,calc(var(--board-size)*.085),35px)}
  .recent-dock{min-height:40px;padding:4px 7px}
  .recent-ball{flex-basis:28px;width:28px;height:28px;font-size:9px}
  .recent-empty{font-size:10px}
}

/* ---------- Controller ---------- */
body:not(.player-page){
  min-height:100vh;background:
    radial-gradient(circle at top left,rgba(47,114,255,.08),transparent 28%),
    linear-gradient(180deg,#f6f9fd 0%,#edf2f8 100%);color:var(--ink)
}
.shell{width:min(100% - 28px,640px);margin:0 auto;padding:24px 0 40px}
.control-shell{width:min(100% - 28px,1120px)}
.brandbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px}
.logo{display:inline-flex;align-items:center;gap:10px;font-weight:950;letter-spacing:-.035em;font-size:20px}
.logo-ball{width:35px;height:35px;border-radius:50%;display:grid;place-items:center;color:#fff;background:linear-gradient(160deg,#f36c80,#d9445c);border:2px solid #fff;box-shadow:0 7px 16px rgba(217,68,92,.24);font-size:12px}
body:not(.player-page) .status-dot{color:var(--muted)}
body:not(.player-page) .status-dot.online{color:#237a5c}
.panel{background:rgba(255,255,255,.96);border:1px solid var(--line);border-radius:24px;padding:22px;box-shadow:var(--shadow);backdrop-filter:blur(10px)}
.hero-panel{padding:27px}.hero-panel h1{margin:6px 0 8px;font-size:clamp(32px,6vw,48px);line-height:1;letter-spacing:-.055em}
.lead{color:var(--muted);line-height:1.5}.section-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:15px}.section-head.compact{margin-bottom:11px}.section-head.no-margin{margin-bottom:0}.section-title{font-size:18px;font-weight:950;letter-spacing:-.03em}.section-title.large{font-size:30px;margin:0}.section-subtitle{color:var(--muted);font-size:13px;margin-top:4px}
.stack-form{display:grid;gap:10px;margin-top:18px}.inline-form{display:grid;grid-template-columns:1fr auto;gap:10px}.text-input{width:100%;min-width:0;height:52px;border:1px solid var(--line);border-radius:15px;padding:0 14px;font-size:16px;outline:none;background:#fff}.text-input:focus{border-color:#7da5ff;box-shadow:0 0 0 4px rgba(47,114,255,.12)}
.primary,.secondary,.danger{min-height:50px;border:0;border-radius:15px;padding:0 18px;font-weight:900;cursor:pointer}.primary{color:#fff;background:linear-gradient(180deg,#3d7dff,#2364e4);box-shadow:0 10px 22px rgba(35,100,228,.18)}.secondary{color:var(--ink);background:#edf2f8}.danger{color:#fff;background:linear-gradient(180deg,#ed6477,#d9425a)}button:disabled{opacity:.48;cursor:not-allowed;box-shadow:none}.error{margin-top:12px;padding:11px 13px;border-radius:13px;background:#fff0f3;color:#8f1e34;border:1px solid #ffd1da;font-size:13px}
.control-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(310px,.8fr);gap:18px}.control-main-panel,.control-side-panel{display:grid;gap:16px;align-content:start}.pill{border:1px solid var(--line);background:#f7f9fc;border-radius:999px;padding:8px 12px;font-size:12px;font-weight:900}.status-pill{color:#48607f}.call-main.enhanced{display:grid;grid-template-columns:1fr 148px;gap:16px;align-items:center;padding:18px;border:1px solid var(--line);border-radius:21px;background:linear-gradient(180deg,#fbfdff,#f4f7fb)}.call-main .ball{margin-left:auto;width:146px;aspect-ratio:1;border-radius:50%;display:grid;place-items:center;color:#fff;background:linear-gradient(160deg,#f36c80,#d9445c);border:4px solid #fff;box-shadow:0 14px 28px rgba(217,68,92,.18),inset 0 -12px 22px rgba(0,0,0,.12);font-size:57px;font-weight:950}.call-main .ball.waiting{background:linear-gradient(160deg,#a7b3c4,#7c899e);font-size:34px}.call-main-copy .lead{margin:5px 0 0;font-size:18px}.control-actions{display:grid;gap:9px}.control-actions .primary,.control-actions .secondary,.control-actions .danger{width:100%}.inset-panel{border-radius:19px;padding:17px;background:linear-gradient(180deg,#fbfdff,#f7f9fc);border:1px solid var(--line);box-shadow:none}.kpis{display:grid;grid-template-columns:repeat(2,1fr);gap:9px}.kpi{border:1px solid var(--line);border-radius:17px;padding:13px;background:linear-gradient(180deg,#fff,#f9fbfe)}.kpi span{display:block;color:var(--muted);font-size:10px;font-weight:950;text-transform:uppercase;letter-spacing:.07em}.kpi strong{display:block;font-size:28px;margin-top:3px;letter-spacing:-.045em}.final-box{border-radius:20px;padding:17px;background:linear-gradient(180deg,#fff9e8,#fff2c9);border:1px solid #efd37c}.final-box.ready{background:linear-gradient(180deg,#effbf5,#e4f7ed);border-color:#a6dec7}.final-number{font-size:58px;font-weight:950;letter-spacing:-.065em;line-height:.95;margin:9px 0}.final-lead{margin:0}.called-list{display:flex;flex-wrap:wrap;gap:7px;min-height:38px}.called-chip{border-radius:999px;background:#eef3f8;padding:8px 11px;font-weight:900;font-size:12px}.share-panel{gap:11px}.public-link{color:#235ecf;word-break:break-word;font-weight:850;line-height:1.45}.copy-button{width:100%}

@media(max-width:900px){.control-grid{grid-template-columns:1fr}}
@media(max-width:720px){.shell,.control-shell{width:min(100% - 16px,100%);padding-top:14px}.panel,.hero-panel{padding:18px;border-radius:20px}.inline-form{grid-template-columns:1fr}.call-main.enhanced{grid-template-columns:1fr;text-align:center}.call-main .ball{margin:0 auto;width:120px;font-size:46px}.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ===== v0.5.0 ticket realism + premium daub animation ===== */
.ticket-bingo{display:inline-flex;align-items:center;gap:3px;font-weight:950;letter-spacing:0}
.ticket-bingo>span{
  width:18px;height:18px;border-radius:50%;display:grid;place-items:center;color:#fff;font-size:8px;
  border:1px solid rgba(255,255,255,.78);box-shadow:0 2px 5px rgba(17,28,50,.14),inset 0 -3px 5px rgba(0,0,0,.10)
}
.ticket-bingo.large>span{width:24px;height:24px;font-size:10px}

/* Printed ticket numbers are plain until a player daubs them. */
.number-disc{
  width:auto;aspect-ratio:auto;border:0;background:transparent;box-shadow:none;z-index:2;
  transition:width .2s ease,background .2s ease,color .2s ease,box-shadow .2s ease,transform .2s ease
}
.number-disc span{position:relative;z-index:2}
.number-cell.called-unmarked .number-disc,
.number-cell.just-called .number-disc{border:0;box-shadow:none;background:transparent}
.number-cell.marked .number-disc{
  width:min(72%,74px);aspect-ratio:1;color:#fff;border:2px solid rgba(255,255,255,.70);
  background:
    radial-gradient(circle at 31% 25%,rgba(255,255,255,.34) 0 8%,transparent 9%),
    radial-gradient(circle at 67% 72%,rgba(0,0,0,.10) 0 12%,transparent 13%),
    linear-gradient(150deg,#5596ff 0%,#2869e8 56%,#1d55c7 100%);
  box-shadow:0 8px 18px rgba(31,94,216,.28),inset 0 -8px 15px rgba(0,0,0,.10)
}
.number-cell.marked::after{z-index:4}
.daub-ring{
  position:absolute;left:50%;top:50%;width:68%;aspect-ratio:1;border-radius:50%;pointer-events:none;
  transform:translate(-50%,-50%) scale(.35);opacity:0;border:3px solid rgba(78,139,255,.55);z-index:3
}
.number-cell.mark-pop{animation:ticketTap .62s cubic-bezier(.2,.9,.25,1)}
.number-cell.mark-pop .number-disc{animation:daubPop .66s cubic-bezier(.15,.85,.22,1.25)}
.number-cell.mark-pop .daub-ring{animation:daubRing .72s ease-out}
.number-cell.mark-pop::after{animation:checkPop .55s .18s both cubic-bezier(.2,.9,.3,1.2)}
@keyframes ticketTap{
  0%{transform:scale(1)}
  26%{transform:scale(.94) rotate(-.6deg)}
  60%{transform:scale(1.025) rotate(.3deg)}
  100%{transform:scale(1)}
}
@keyframes daubPop{
  0%{transform:scale(.25) rotate(-8deg);opacity:.15;filter:saturate(.7)}
  55%{transform:scale(1.13) rotate(2deg);opacity:1;filter:saturate(1.25)}
  78%{transform:scale(.97) rotate(-1deg)}
  100%{transform:scale(1) rotate(0);opacity:1;filter:saturate(1)}
}
@keyframes daubRing{
  0%{transform:translate(-50%,-50%) scale(.45);opacity:.9}
  100%{transform:translate(-50%,-50%) scale(1.5);opacity:0}
}
@keyframes checkPop{
  0%{transform:scale(.2) rotate(-20deg);opacity:0}
  100%{transform:scale(1) rotate(0);opacity:1}
}
@media(prefers-reduced-motion:reduce){
  .number-cell.mark-pop,.number-cell.mark-pop .number-disc,.number-cell.mark-pop .daub-ring,.number-cell.mark-pop::after{animation:none}
}

/* ===== v0.5.0 mobile-first controller: visually matches the player app ===== */
body.controller-page{
  height:100vh;height:100dvh;overflow:hidden;color:#fff;
  background:
    radial-gradient(circle at 8% -8%,rgba(72,143,255,.42),transparent 33%),
    radial-gradient(circle at 92% 6%,rgba(247,92,124,.34),transparent 24%),
    radial-gradient(circle at 50% 110%,rgba(112,76,255,.20),transparent 28%),
    linear-gradient(180deg,#132248 0%,#0d1835 52%,#091126 100%);
}
body.controller-page::before{
  content:"";position:fixed;inset:0;pointer-events:none;opacity:.17;
  background-image:radial-gradient(circle at 20px 20px,rgba(255,255,255,.18) 0 1px,transparent 1.5px),radial-gradient(circle at 60px 70px,rgba(255,255,255,.10) 0 1px,transparent 1.5px);
  background-size:84px 84px,112px 112px
}
.controller-app{
  position:relative;z-index:1;width:min(100%,760px);height:100%;margin:0 auto;
  padding:max(10px,env(safe-area-inset-top)) 12px max(10px,env(safe-area-inset-bottom));
  display:grid;grid-template-rows:auto minmax(0,1fr);gap:8px
}
.controller-header{color:#fff}
.controller-badge{
  border-radius:999px;padding:5px 8px;background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.13);
  color:#c8d8f3;font-size:9px;font-weight:950;letter-spacing:.10em
}
body.controller-page .status-dot{color:#aebbd2}
body.controller-page .status-dot.online{color:#d8f8eb}

.controller-login-screen{min-height:0;display:grid;grid-template-rows:minmax(130px,1fr) auto;gap:10px}
.controller-login-art{position:relative;display:grid;place-items:center;min-height:0;overflow:hidden}
.host-ball{
  position:absolute;left:50%;top:44%;transform:translate(-50%,-50%);width:84px;height:84px;border-radius:50%;display:grid;place-items:center;
  color:#fff;font-size:28px;font-weight:950;border:4px solid rgba(255,255,255,.9);box-shadow:0 20px 36px rgba(0,0,0,.27),inset 0 -12px 20px rgba(0,0,0,.12)
}
.host-ball-small{width:48px;height:48px;font-size:16px;left:24%;top:28%;border-width:3px}
.host-ball-right{width:54px;height:54px;font-size:17px;left:78%;top:30%;border-width:3px}
.host-card-art{
  position:absolute;left:50%;bottom:7%;transform:translateX(-50%) rotate(-2deg);width:min(70%,310px);padding:12px 15px;
  border-radius:18px;background:linear-gradient(180deg,#fffefc,#f7edd5);color:#14213a;box-shadow:0 18px 38px rgba(0,0,0,.25);
  display:flex;align-items:center;justify-content:space-between;gap:12px
}
.host-card-art strong{font-size:11px;letter-spacing:.08em;color:#6a7487}
.controller-login-card{
  border:1px solid rgba(255,255,255,.13);border-radius:24px;padding:20px;
  background:linear-gradient(180deg,rgba(255,255,255,.115),rgba(255,255,255,.07));box-shadow:0 18px 44px rgba(0,0,0,.18);backdrop-filter:blur(14px)
}
.controller-login-card h1{margin:7px 0 7px;font-size:clamp(32px,8vw,46px);line-height:.98;letter-spacing:-.055em}
.controller-login-card p{margin:0;color:#c4cee0;font-size:14px;line-height:1.45}
.controller-login-form{display:grid;gap:9px;margin-top:15px}
.controller-input{
  width:100%;height:50px;border-radius:15px;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.96);
  color:#14213a;font-size:16px;font-weight:750;outline:none;padding:0 13px
}
.controller-input:focus{border-color:#6d9cff;box-shadow:0 0 0 4px rgba(79,134,255,.18)}
.controller-open-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}
.controller-primary{color:#fff;background:linear-gradient(180deg,#3d7dff,#2364e4);box-shadow:0 12px 24px rgba(29,93,220,.28)}
.controller-secondary{color:#fff;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.14)}

.controller-game-screen{
  min-height:0;height:100%;display:grid;grid-template-rows:auto auto auto auto auto auto;gap:7px;overflow:hidden
}
.controller-status-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
.controller-code,.controller-state-chip{
  min-height:32px;border-radius:999px;padding:0 11px;display:inline-flex;align-items:center;
  background:linear-gradient(180deg,rgba(255,255,255,.13),rgba(255,255,255,.08));border:1px solid rgba(255,255,255,.15);
  color:#eff5ff;font-size:11px;font-weight:900;box-shadow:inset 0 1px 0 rgba(255,255,255,.14)
}
.controller-state-chip{color:#c9d7ef}
.controller-call-card{
  min-height:92px;border-radius:20px;padding:10px 12px;display:grid;grid-template-columns:74px minmax(0,1fr);gap:12px;align-items:center;
  background:radial-gradient(circle at top right,rgba(255,255,255,.15),transparent 30%),linear-gradient(135deg,rgba(72,143,255,.29),rgba(130,92,255,.18) 45%,rgba(255,255,255,.08));
  border:1px solid rgba(255,255,255,.14);box-shadow:0 14px 30px rgba(0,0,0,.14)
}
.controller-call-card .call-ball{width:70px;height:70px;font-size:26px}
.controller-call-copy{min-width:0}
.controller-call-copy .eyebrow{display:block;color:#91b5ff;margin-bottom:2px}
.controller-call-copy strong{display:block;font-size:clamp(20px,5vw,27px);line-height:1.05;letter-spacing:-.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.controller-call-copy>span:last-child{display:block;margin-top:4px;color:#afbdd4;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.controller-action-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}
.host-action{
  min-height:48px;border:0;border-radius:15px;padding:0 8px;color:#fff;font-size:12px;font-weight:950;cursor:pointer;
  transition:transform .12s ease,opacity .15s ease,filter .15s ease
}
.host-action:active{transform:scale(.975)}
.host-action:disabled{opacity:.34;filter:saturate(.6);cursor:not-allowed}
.start-action{background:linear-gradient(180deg,#42bf94,#218c69);box-shadow:0 10px 20px rgba(33,140,105,.18)}
.next-action{background:linear-gradient(180deg,#4383ff,#2462df);box-shadow:0 10px 20px rgba(36,98,223,.22)}
.final-action{background:linear-gradient(180deg,#ef6d80,#d7435a);box-shadow:0 10px 20px rgba(215,67,90,.20)}
.controller-kpi-strip{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:5px}
.host-kpi{
  min-width:0;border-radius:14px;padding:8px 3px;text-align:center;background:linear-gradient(180deg,rgba(255,255,255,.11),rgba(255,255,255,.065));
  border:1px solid rgba(255,255,255,.10)
}
.host-kpi span{display:block;color:#aab9d1;font-size:8px;font-weight:950;text-transform:uppercase;letter-spacing:.055em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.host-kpi strong{display:block;margin-top:2px;color:#fff;font-size:18px;line-height:1;font-weight:950;letter-spacing:-.04em}
.controller-final-card{
  min-height:74px;border-radius:18px;padding:10px 12px;display:grid;grid-template-columns:90px minmax(0,1fr);align-items:center;gap:11px;
  background:linear-gradient(135deg,rgba(240,184,62,.20),rgba(255,255,255,.07));border:1px solid rgba(240,184,62,.27)
}
.controller-final-card.ready{background:linear-gradient(135deg,rgba(52,196,139,.24),rgba(255,255,255,.08));border-color:rgba(74,214,159,.32);animation:finalReadyGlow 1.7s ease-in-out infinite}
.controller-final-card>div{display:flex;flex-direction:column;align-items:center;justify-content:center;border-right:1px solid rgba(255,255,255,.10)}
.controller-final-card .final-eyebrow{font-size:7px;color:#ffe49a;margin:0;text-align:center}
.controller-final-card strong{font-size:35px;line-height:1;font-weight:950;color:#fff;letter-spacing:-.06em}
.controller-final-card p{margin:0;color:#c8d4e8;font-size:10px;line-height:1.35;font-weight:700}
@keyframes finalReadyGlow{0%,100%{box-shadow:0 0 0 rgba(52,196,139,0)}50%{box-shadow:0 0 24px rgba(52,196,139,.16)}}
.controller-bottom-dock{
  min-height:42px;border-radius:16px;padding:4px 5px 4px 8px;display:grid;grid-template-columns:minmax(0,1fr) 36px;gap:6px;align-items:center;
  background:linear-gradient(180deg,rgba(255,255,255,.10),rgba(255,255,255,.06));border:1px solid rgba(255,255,255,.10)
}
.called-dock{min-width:0;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:7px}
.called-label{color:#aab9d1;font-size:8px;font-weight:950;letter-spacing:.07em;text-transform:uppercase}
.controller-called-strip{min-width:0;display:flex;justify-content:flex-end;align-items:center;gap:4px;overflow:hidden}
.controller-called-ball{
  flex:0 0 28px;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;color:#fff;font-size:9px;font-weight:950;
  border:2px solid rgba(255,255,255,.75);box-shadow:0 4px 8px rgba(0,0,0,.17),inset 0 -4px 7px rgba(0,0,0,.10)
}
.controller-called-empty{color:#8392aa;font-size:10px;font-weight:800;white-space:nowrap}
.host-icon-button{
  width:34px;height:34px;border:1px solid rgba(255,255,255,.12);border-radius:11px;background:rgba(255,255,255,.09);color:#dce8fa;display:grid;place-items:center;cursor:pointer
}
.host-icon-button svg{width:17px;height:17px}
.controller-public-link{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
.controller-toast{
  position:fixed;z-index:70;left:50%;bottom:calc(env(safe-area-inset-bottom) + 14px);transform:translateX(-50%);width:min(calc(100% - 22px),430px);
  padding:10px 12px;border-radius:13px;background:#fff4ce;color:#684d09;border:1px solid #efda83;box-shadow:0 16px 32px rgba(0,0,0,.22);font-size:12px;font-weight:850;text-align:center
}

@media(max-width:460px) and (orientation:portrait){
  .controller-app{padding-left:10px;padding-right:10px;gap:6px}
  .controller-header{min-height:42px}
  .controller-badge{display:none}
  .controller-game-screen{gap:6px}
  .controller-call-card{min-height:82px;grid-template-columns:64px 1fr;padding:8px 9px;gap:9px;border-radius:17px}
  .controller-call-card .call-ball{width:60px;height:60px;font-size:22px}
  .controller-call-copy strong{font-size:19px}
  .controller-call-copy>span:last-child{font-size:10px}
  .host-action{min-height:45px;font-size:11px;border-radius:13px}
  .host-kpi{padding:7px 2px;border-radius:12px}.host-kpi span{font-size:7px}.host-kpi strong{font-size:16px}
  .controller-final-card{min-height:68px;grid-template-columns:78px 1fr;padding:8px 10px}.controller-final-card strong{font-size:31px}.controller-final-card p{font-size:9px}
  .controller-bottom-dock{min-height:38px}.controller-called-ball{flex-basis:25px;width:25px;height:25px;font-size:8px}.host-icon-button{width:31px;height:31px}
}

@media(max-height:640px){
  .controller-app{padding-top:max(6px,env(safe-area-inset-top));padding-bottom:max(6px,env(safe-area-inset-bottom));gap:5px}
  .controller-header{min-height:40px}.controller-game-screen{gap:5px}
  .controller-code,.controller-state-chip{min-height:28px;font-size:9px;padding:0 8px}
  .controller-call-card{min-height:70px;grid-template-columns:56px 1fr;padding:7px 8px}.controller-call-card .call-ball{width:54px;height:54px;font-size:20px}
  .controller-call-copy strong{font-size:17px}.controller-call-copy>span:last-child{font-size:9px}.controller-call-copy .eyebrow{font-size:8px}
  .host-action{min-height:40px;font-size:10px}.host-kpi{padding:5px 2px}.host-kpi strong{font-size:15px}
  .controller-final-card{min-height:58px;grid-template-columns:70px 1fr;padding:6px 8px}.controller-final-card strong{font-size:27px}.controller-final-card p{font-size:8px}
  .controller-bottom-dock{min-height:34px}.controller-called-ball{flex-basis:23px;width:23px;height:23px;font-size:7px}.host-icon-button{width:28px;height:28px}
  .controller-login-screen{grid-template-rows:minmax(95px,.65fr) auto;gap:6px}.controller-login-card{padding:15px}.controller-login-card h1{font-size:30px}.controller-login-card p{font-size:12px}.controller-input{height:45px}.controller-login-form{margin-top:11px}.host-ball{transform:translate(-50%,-50%) scale(.78)}.host-card-art{transform:translateX(-50%) rotate(-2deg) scale(.86)}
}

@media(orientation:landscape) and (max-height:540px){
  .controller-app{width:100%;padding-left:max(10px,env(safe-area-inset-left));padding-right:max(10px,env(safe-area-inset-right))}
  .controller-game-screen{grid-template-columns:180px minmax(0,1fr) 190px;grid-template-rows:auto minmax(0,1fr) auto;gap:7px}
  .controller-status-row{grid-column:1/-1}
  .controller-call-card{grid-column:1;grid-row:2;grid-template-columns:1fr;text-align:center;align-content:center}.controller-call-card .call-ball{margin:0 auto}
  .controller-action-grid{grid-column:1;grid-row:3}.controller-kpi-strip{grid-column:2;grid-row:3}
  .controller-final-card{grid-column:3;grid-row:2/4;grid-template-columns:1fr;align-content:center;text-align:center}.controller-final-card>div{border-right:0;border-bottom:1px solid rgba(255,255,255,.10);padding-bottom:6px}.controller-final-card p{margin-top:7px}
  .controller-bottom-dock{grid-column:2;grid-row:2;align-self:end}.host-kpi span{font-size:7px}
}

/* ===== v0.6.0 excitement states + stage controller redesign ===== */

/* Player progress becomes a game moment, not just a counter. */
.mark-progress.two-to-go{
  color:#ffe69a;
  border-color:rgba(255,214,91,.35);
  background:linear-gradient(180deg,rgba(255,205,66,.20),rgba(255,178,28,.10));
}
.mark-progress.one-to-go{
  color:#fff;
  border-color:rgba(255,111,145,.55);
  background:linear-gradient(180deg,rgba(255,91,132,.34),rgba(195,55,110,.20));
  animation:oneToGoChip 1.05s ease-in-out infinite;
  box-shadow:0 0 0 0 rgba(255,91,132,.18),0 8px 18px rgba(192,48,101,.16);
}
@keyframes oneToGoChip{
  0%,100%{transform:scale(1);box-shadow:0 0 0 0 rgba(255,91,132,.14),0 8px 18px rgba(192,48,101,.16)}
  50%{transform:scale(1.055);box-shadow:0 0 0 6px rgba(255,91,132,.08),0 10px 24px rgba(192,48,101,.24)}
}
.player-one-to-go .bingo-card-shell{
  animation:boardAlmostGlow 1.8s ease-in-out infinite;
}
@keyframes boardAlmostGlow{
  0%,100%{box-shadow:0 24px 48px rgba(0,0,0,.28),inset 0 0 0 1px rgba(198,184,151,.22),inset 0 10px 24px rgba(255,255,255,.4)}
  50%{box-shadow:0 24px 54px rgba(0,0,0,.30),0 0 32px rgba(244,88,135,.18),inset 0 0 0 1px rgba(255,157,187,.35),inset 0 10px 24px rgba(255,255,255,.4)}
}
.number-cell.one-to-go-cell:not(.marked):not(.just-called) .number-disc{
  animation:lastNumberBreathe 1.25s ease-in-out infinite;
}
.number-cell.one-to-go-cell:not(.marked):not(.just-called)::before{
  border-color:rgba(226,84,126,.28);
}
@keyframes lastNumberBreathe{
  0%,100%{transform:scale(1);text-shadow:0 0 0 rgba(225,75,123,0)}
  50%{transform:scale(1.09);text-shadow:0 0 18px rgba(237,91,139,.32)}
}

.milestone-overlay{
  position:fixed;inset:0;z-index:72;pointer-events:none;display:grid;place-items:center;overflow:hidden;
  opacity:0;transform:scale(.98);transition:opacity .24s ease,transform .24s ease;
  background:radial-gradient(circle at 50% 48%,rgba(40,88,191,.18),transparent 34%);
}
.milestone-overlay.show{opacity:1;transform:scale(1)}
.milestone-overlay.one-to-go{
  background:radial-gradient(circle at 50% 48%,rgba(237,75,127,.28),transparent 35%);
}
.milestone-rays{
  position:absolute;width:min(150vw,850px);aspect-ratio:1;border-radius:50%;opacity:.34;
  background:repeating-conic-gradient(from 0deg,rgba(255,255,255,.22) 0deg 7deg,transparent 7deg 18deg);
  animation:milestoneSpin 12s linear infinite;
  mask-image:radial-gradient(circle,transparent 0 17%,#000 18% 65%,transparent 72%);
}
.one-to-go .milestone-rays{opacity:.48;animation-duration:8s}
@keyframes milestoneSpin{to{transform:rotate(360deg)}}
.milestone-content{
  position:relative;z-index:2;width:min(86vw,390px);padding:24px 18px 22px;border-radius:30px;text-align:center;color:#fff;
  background:linear-gradient(145deg,rgba(48,105,230,.94),rgba(92,77,196,.94));
  border:1px solid rgba(255,255,255,.28);box-shadow:0 26px 70px rgba(0,0,0,.36),inset 0 1px 0 rgba(255,255,255,.25);
  animation:milestoneCardIn .62s cubic-bezier(.15,.9,.22,1.18) both;
  backdrop-filter:blur(14px)
}
.one-to-go .milestone-content{
  background:linear-gradient(145deg,rgba(239,76,123,.97),rgba(148,58,178,.96));
}
@keyframes milestoneCardIn{
  0%{transform:scale(.56) translateY(24px) rotate(-3deg);opacity:0}
  62%{transform:scale(1.06) translateY(-4px) rotate(.8deg);opacity:1}
  100%{transform:scale(1) translateY(0) rotate(0)}
}
.milestone-count{
  width:92px;height:92px;margin:0 auto 10px;border-radius:50%;display:grid;place-items:center;
  color:#19223d;background:linear-gradient(180deg,#fff,#f1f5ff);font-size:52px;line-height:1;font-weight:1000;letter-spacing:-.08em;
  border:4px solid rgba(255,255,255,.72);box-shadow:0 15px 32px rgba(0,0,0,.20),inset 0 -9px 18px rgba(31,71,148,.10);
  animation:milestoneBall .85s cubic-bezier(.15,.9,.22,1.2) .1s both
}
@keyframes milestoneBall{0%{transform:scale(.3) rotate(-16deg)}70%{transform:scale(1.12) rotate(3deg)}100%{transform:scale(1) rotate(0)}}
.milestone-title{font-size:clamp(31px,10vw,50px);line-height:.92;font-weight:1000;letter-spacing:-.065em;text-shadow:0 8px 22px rgba(0,0,0,.18)}
.milestone-subtitle{margin-top:8px;color:rgba(255,255,255,.82);font-size:13px;font-weight:750}
.milestone-burst{position:absolute;inset:0;z-index:1}
.milestone-burst span{position:absolute;width:12px;height:12px;border-radius:50%;opacity:0;animation:burstDot .9s ease-out .25s both}
.milestone-burst span:nth-child(1){left:15%;top:35%;background:#ffd85d;--dx:-42px;--dy:-35px}
.milestone-burst span:nth-child(2){right:16%;top:33%;background:#66e1b0;--dx:45px;--dy:-38px}
.milestone-burst span:nth-child(3){left:19%;bottom:34%;background:#ff7793;--dx:-44px;--dy:32px}
.milestone-burst span:nth-child(4){right:18%;bottom:31%;background:#72b2ff;--dx:45px;--dy:35px}
.milestone-burst span:nth-child(5){left:48%;top:23%;background:#b891ff;--dx:0;--dy:-48px}
.milestone-burst span:nth-child(6){left:48%;bottom:23%;background:#fff;--dx:0;--dy:50px}
@keyframes burstDot{0%{transform:translate(0,0) scale(.2);opacity:0}25%{opacity:1}100%{transform:translate(var(--dx),var(--dy)) scale(1.1);opacity:0}}

/* Controller deliberately mirrors the audience app, but is optimised for a phone held on stage. */
.controller-stage-screen{
  min-height:0;height:100%;display:grid;
  grid-template-rows:82px 94px 106px 108px 76px minmax(40px,1fr);
  gap:7px;overflow:hidden
}
.stage-game-hero{
  min-height:0;border-radius:22px;padding:10px 12px 10px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px;
  background:
    radial-gradient(circle at 85% 0%,rgba(255,117,150,.22),transparent 34%),
    linear-gradient(135deg,rgba(65,132,255,.32),rgba(111,78,208,.20) 54%,rgba(255,255,255,.08));
  border:1px solid rgba(255,255,255,.16);box-shadow:0 14px 30px rgba(0,0,0,.18),inset 0 1px 0 rgba(255,255,255,.16)
}
.stage-game-code-block{min-width:0;display:flex;flex-direction:column;justify-content:center}
.stage-label{font-size:9px;line-height:1;font-weight:950;letter-spacing:.14em;color:#b9c8df;text-transform:uppercase}
.stage-label.blue{color:#98b9ff}.stage-label.gold{color:#ffe19a}
.stage-game-code-block strong{
  margin-top:4px;color:#fff;font-size:clamp(40px,11vw,58px);line-height:.82;font-weight:1000;letter-spacing:.09em;
  text-shadow:0 10px 24px rgba(0,0,0,.22)
}
.stage-game-tools{display:flex;align-items:center;gap:7px;flex:0 0 auto}
.stage-state-chip{
  min-height:32px;padding:0 11px;border-radius:999px;display:inline-flex;align-items:center;color:#e7efff;font-size:10px;font-weight:900;
  background:rgba(255,255,255,.11);border:1px solid rgba(255,255,255,.15)
}
.stage-icon-button{
  width:36px;height:36px;border-radius:12px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.10);color:#e7efff;
  display:grid;place-items:center;cursor:pointer
}
.stage-icon-button svg{width:18px;height:18px}

.stage-current-call{
  min-height:0;border-radius:21px;padding:10px 12px;display:grid;grid-template-columns:72px minmax(0,1fr);gap:12px;align-items:center;
  background:linear-gradient(135deg,rgba(255,255,255,.12),rgba(255,255,255,.065));border:1px solid rgba(255,255,255,.12);
  box-shadow:0 12px 26px rgba(0,0,0,.13)
}
.stage-current-call .call-ball{width:70px;height:70px;font-size:26px}
.stage-current-copy{min-width:0}
.stage-current-copy strong{display:block;margin-top:3px;font-size:clamp(20px,5.6vw,29px);line-height:1;letter-spacing:-.045em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stage-current-copy>span:last-child{display:block;margin-top:5px;color:#afbdd4;font-size:10px;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.stage-actions{min-height:0;display:grid;grid-template-columns:1.3fr .9fr;gap:7px}
.stage-next-button,.stage-secondary-action{
  border:0;color:#fff;cursor:pointer;transition:transform .12s ease,filter .15s ease,opacity .15s ease
}
.stage-next-button:active,.stage-secondary-action:active{transform:scale(.975)}
.stage-next-button:disabled,.stage-secondary-action:disabled{opacity:.32;filter:saturate(.55);cursor:not-allowed}
.stage-next-button{
  min-width:0;border-radius:20px;padding:10px 14px;display:flex;align-items:center;gap:11px;text-align:left;
  background:linear-gradient(145deg,#4b8dff 0%,#2668e8 55%,#2057c6 100%);box-shadow:0 13px 24px rgba(27,84,202,.26),inset 0 1px 0 rgba(255,255,255,.20)
}
.stage-action-icon{
  width:44px;height:44px;flex:0 0 44px;border-radius:15px;display:grid;place-items:center;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.15)
}
.stage-action-icon svg{width:22px;height:22px}
.stage-action-copy{min-width:0;display:flex;flex-direction:column}
.stage-action-copy small{font-size:8px;letter-spacing:.13em;font-weight:950;color:#c9dbff}
.stage-action-copy strong{font-size:20px;line-height:1.05;font-weight:1000;letter-spacing:-.04em}
.stage-side-actions{display:grid;grid-template-rows:1fr 1fr;gap:7px}
.stage-secondary-action{
  min-height:0;border-radius:16px;padding:0 9px;display:flex;align-items:center;justify-content:center;gap:7px;font-size:10px;font-weight:950
}
.stage-secondary-action svg{width:16px;height:16px}
.stage-secondary-action.start-action{background:linear-gradient(145deg,#45c59b,#238b6b);box-shadow:0 10px 20px rgba(35,139,107,.17)}
.stage-secondary-action.final-action{background:linear-gradient(145deg,#f06a80,#cf3e5b);box-shadow:0 10px 20px rgba(207,62,91,.18)}

.stage-audience-card{
  min-height:0;border-radius:21px;padding:10px 11px;display:grid;grid-template-rows:minmax(0,1fr) 31px;gap:7px;
  background:linear-gradient(180deg,rgba(255,255,255,.105),rgba(255,255,255,.065));border:1px solid rgba(255,255,255,.11)
}
.stage-audience-primary{display:grid;grid-template-columns:1fr 1px 1fr;align-items:center;gap:11px;min-height:0}
.stage-audience-divider{width:1px;height:48px;background:linear-gradient(transparent,rgba(255,255,255,.18),transparent)}
.stage-audience-stat{min-width:0;display:flex;align-items:center;justify-content:center;gap:9px}
.stage-stat-icon{
  width:38px;height:38px;flex:0 0 38px;border-radius:13px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.12)
}
.stage-stat-icon svg{width:20px;height:20px}.audience-icon{background:rgba(66,202,153,.14);color:#72e0b5}.card-icon{background:rgba(76,139,255,.16);color:#8ab5ff}
.stage-audience-stat>div{display:flex;flex-direction:column;min-width:0}
.stage-audience-stat strong{font-size:30px;line-height:.9;font-weight:1000;letter-spacing:-.055em}
.stage-audience-stat span{margin-top:4px;color:#b7c4d9;font-size:8px;font-weight:950;letter-spacing:.08em;text-transform:uppercase}
.stage-readiness-row{display:grid;grid-template-columns:1fr 1.3fr .7fr;gap:5px}
.stage-readiness-row>div{min-width:0;border-radius:10px;padding:4px 5px;display:flex;align-items:center;justify-content:space-between;gap:4px;background:rgba(255,255,255,.065)}
.stage-readiness-row span{color:#9dacC4;font-size:6.5px;font-weight:950;letter-spacing:.05em;white-space:nowrap}
.stage-readiness-row strong{font-size:11px;font-weight:1000;white-space:nowrap}

.stage-finale-card{
  min-height:0;border-radius:19px;padding:8px 10px 8px 12px;display:grid;grid-template-columns:minmax(0,1fr) 100px;gap:9px;align-items:center;
  background:linear-gradient(135deg,rgba(240,184,62,.20),rgba(255,255,255,.065));border:1px solid rgba(240,184,62,.27)
}
.stage-finale-card.ready{
  background:linear-gradient(135deg,rgba(47,197,141,.26),rgba(66,122,255,.10));border-color:rgba(76,218,165,.38);animation:stageFinalReady 1.6s ease-in-out infinite
}
@keyframes stageFinalReady{0%,100%{box-shadow:0 0 0 rgba(51,206,151,0)}50%{box-shadow:0 0 27px rgba(51,206,151,.18)}}
.stage-finale-copy{min-width:0}
.stage-finale-copy strong{display:block;margin-top:4px;color:#d3dcef;font-size:10px;line-height:1.25;font-weight:780}
.stage-final-number-wrap{
  align-self:stretch;border-left:1px solid rgba(255,255,255,.12);padding-left:9px;display:grid;grid-template-columns:1fr auto;grid-template-rows:auto 1fr;align-items:center;column-gap:5px
}
.stage-final-number-label{grid-column:1/-1;color:#aab7cc;font-size:7px;font-weight:950;letter-spacing:.11em;text-transform:uppercase}
.stage-final-number-wrap strong{font-size:29px;line-height:1;font-weight:1000;letter-spacing:-.055em;color:#fff}
.stage-final-number-wrap strong.masked{letter-spacing:.03em;color:#ffe092;font-size:25px}
.stage-reveal-button{
  height:28px;border:1px solid rgba(255,255,255,.14);border-radius:9px;padding:0 7px;background:rgba(255,255,255,.09);color:#dce7fa;font-size:8px;font-weight:900;cursor:pointer
}

.stage-recent-dock{
  min-height:0;border-radius:17px;padding:5px 8px;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:8px;
  background:linear-gradient(180deg,rgba(255,255,255,.09),rgba(255,255,255,.055));border:1px solid rgba(255,255,255,.09)
}
.stage-recent-dock .controller-called-strip{justify-content:flex-end}

@media(max-width:460px) and (orientation:portrait){
  .controller-stage-screen{grid-template-rows:76px 86px 100px 104px 72px minmax(38px,1fr);gap:6px}
  .stage-game-hero{border-radius:19px;padding:9px 10px 9px 13px}
  .stage-game-code-block strong{font-size:43px}
  .stage-state-chip{min-height:29px;padding:0 9px;font-size:9px}.stage-icon-button{width:32px;height:32px;border-radius:10px}
  .stage-current-call{border-radius:18px;padding:8px 9px;grid-template-columns:64px 1fr;gap:9px}.stage-current-call .call-ball{width:61px;height:61px;font-size:22px}
  .stage-current-copy strong{font-size:19px}.stage-current-copy>span:last-child{font-size:9px}
  .stage-actions{grid-template-columns:1.35fr .85fr;gap:6px}.stage-next-button{border-radius:18px;padding:8px 10px;gap:8px}.stage-action-icon{width:39px;height:39px;flex-basis:39px;border-radius:13px}.stage-action-copy strong{font-size:18px}.stage-secondary-action{font-size:9px;border-radius:14px}
  .stage-audience-card{border-radius:18px;padding:8px 9px;grid-template-rows:minmax(0,1fr) 28px}.stage-stat-icon{width:34px;height:34px;flex-basis:34px}.stage-audience-stat strong{font-size:27px}.stage-readiness-row span{font-size:6px}.stage-readiness-row strong{font-size:10px}
  .stage-finale-card{border-radius:17px;padding:7px 8px 7px 10px;grid-template-columns:minmax(0,1fr) 94px}.stage-finale-copy strong{font-size:9px}.stage-final-number-wrap strong{font-size:27px}.stage-reveal-button{height:26px;padding:0 6px;font-size:7px}
  .stage-recent-dock{border-radius:15px;padding:4px 7px}
}

@media(max-height:640px){
  .controller-stage-screen{grid-template-rows:66px 72px 82px 84px 60px minmax(32px,1fr);gap:5px}
  .stage-game-code-block strong{font-size:36px}.stage-state-chip{min-height:26px;font-size:8px}.stage-icon-button{width:29px;height:29px}
  .stage-current-call{padding:6px 8px;grid-template-columns:54px 1fr}.stage-current-call .call-ball{width:52px;height:52px;font-size:19px}.stage-current-copy strong{font-size:17px}.stage-current-copy>span:last-child{font-size:8px}
  .stage-next-button{padding:6px 8px}.stage-action-icon{width:34px;height:34px;flex-basis:34px}.stage-action-copy strong{font-size:15px}.stage-secondary-action{font-size:8px}
  .stage-audience-card{padding:6px 8px;grid-template-rows:minmax(0,1fr) 24px}.stage-stat-icon{width:30px;height:30px;flex-basis:30px}.stage-stat-icon svg{width:16px;height:16px}.stage-audience-stat strong{font-size:23px}.stage-audience-stat span{font-size:7px}.stage-readiness-row>div{padding:3px 4px}.stage-readiness-row span{font-size:5.5px}.stage-readiness-row strong{font-size:9px}
  .stage-finale-card{padding:5px 7px 5px 9px;grid-template-columns:minmax(0,1fr) 84px}.stage-finale-copy strong{font-size:8px}.stage-final-number-wrap strong{font-size:24px}.stage-reveal-button{height:23px;font-size:7px}
  .stage-recent-dock{padding:3px 6px}.controller-called-ball{flex-basis:23px;width:23px;height:23px;font-size:7px}
}

@media(orientation:landscape) and (max-height:540px){
  .controller-stage-screen{grid-template-columns:180px minmax(0,1fr) 190px;grid-template-rows:68px minmax(0,1fr) 74px;gap:7px}
  .stage-game-hero{grid-column:1/-1;grid-row:1}
  .stage-current-call{grid-column:1;grid-row:2;grid-template-columns:1fr;text-align:center;align-content:center}.stage-current-call .call-ball{margin:0 auto}
  .stage-actions{grid-column:1;grid-row:3}.stage-audience-card{grid-column:2;grid-row:2}.stage-finale-card{grid-column:3;grid-row:2/4;grid-template-columns:1fr;align-content:center;text-align:center}.stage-final-number-wrap{border-left:0;border-top:1px solid rgba(255,255,255,.12);padding:7px 0 0;margin-top:7px}.stage-recent-dock{grid-column:2;grid-row:3}
}

@media(prefers-reduced-motion:reduce){
  .mark-progress.one-to-go,.player-one-to-go .bingo-card-shell,.number-cell.one-to-go-cell:not(.marked):not(.just-called) .number-disc,.milestone-rays,.milestone-content,.milestone-count,.milestone-burst span,.stage-finale-card.ready{animation:none}
}


/* ===== v0.7.0 controller mobile-fit pass + glossy winner overlay ===== */
.player-app{
  transition:filter .24s ease,transform .24s ease,opacity .24s ease;
}
body.modal-open .player-app{
  filter:blur(4px) saturate(1.08) brightness(.94);
  transform:scale(.985);
}

.winner-overlay{
  background:rgba(4,10,24,.34);
  backdrop-filter:blur(10px) saturate(1.18);
  -webkit-backdrop-filter:blur(10px) saturate(1.18);
}
.winner-overlay::before,
.winner-overlay::after{
  content:"";position:absolute;inset:-10%;pointer-events:none;
}
.winner-overlay::before{
  background:
    radial-gradient(circle at 15% 14%,rgba(87,194,255,.33),transparent 22%),
    radial-gradient(circle at 84% 13%,rgba(255,103,135,.30),transparent 22%),
    radial-gradient(circle at 50% 90%,rgba(119,92,255,.20),transparent 28%),
    radial-gradient(circle at 50% 36%,rgba(255,214,91,.18),transparent 18%);
  animation:winnerBackdropGlow 4.2s ease-in-out infinite;
}
.winner-overlay::after{
  background:conic-gradient(from 0deg at 50% 50%, rgba(255,255,255,.00), rgba(255,255,255,.09), rgba(255,255,255,.00), rgba(255,255,255,.08), rgba(255,255,255,.00));
  opacity:.32;filter:blur(30px);animation:winnerSpin 18s linear infinite;
}
.winner-content{
  position:relative;
  z-index:2;
  width:min(100%,430px);
  padding:24px 22px 20px;
  border-radius:30px;
  background:
    radial-gradient(circle at 50% 0%,rgba(255,255,255,.20),transparent 40%),
    linear-gradient(160deg,rgba(72,143,255,.27) 0%,rgba(132,95,255,.20) 48%,rgba(255,255,255,.08) 100%);
  border:1px solid rgba(255,255,255,.20);
  box-shadow:0 30px 80px rgba(0,0,0,.38), inset 0 1px 0 rgba(255,255,255,.20), inset 0 -20px 40px rgba(0,0,0,.08);
  backdrop-filter:blur(16px) saturate(1.15);
  -webkit-backdrop-filter:blur(16px) saturate(1.15);
  animation:winnerFloat 3s ease-in-out infinite;
}
.winner-content::before{
  content:"";position:absolute;left:8%;right:8%;top:0;height:46%;border-radius:0 0 44px 44px;pointer-events:none;
  background:linear-gradient(180deg,rgba(255,255,255,.25),rgba(255,255,255,0));opacity:.78;
}
.winner-crown{width:92px;height:78px;margin:0 auto 4px;color:#ffd861;filter:drop-shadow(0 12px 26px rgba(0,0,0,.22))}
.winner-kicker{color:#cae0ff;text-shadow:0 4px 12px rgba(0,0,0,.15)}
.winner-title{font-size:clamp(64px,20vw,104px);margin-top:5px}
.winner-ribbon{
  margin-top:12px;
  background:linear-gradient(180deg,#ffe37c,#ffc947);
  box-shadow:0 10px 24px rgba(240,184,62,.26), inset 0 1px 0 rgba(255,255,255,.48);
}
.winner-content p{margin:14px auto 20px;color:#e3ebfa;font-size:14px;line-height:1.45;max-width:320px}
.winner-actions{display:grid;grid-template-columns:1fr 1.35fr;gap:10px}
.winner-primary{position:relative;overflow:hidden}
.winner-primary::before{
  content:"";position:absolute;left:-24%;top:0;width:38%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);transform:skewX(-22deg);animation:winnerButtonSweep 2.2s ease-in-out infinite;
}
.confetti-layer{opacity:.96}
@keyframes winnerBackdropGlow{0%,100%{transform:scale(1);opacity:.95}50%{transform:scale(1.05);opacity:1}}
@keyframes winnerSpin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
@keyframes winnerFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes winnerButtonSweep{0%,54%{left:-28%}75%{left:118%}100%{left:118%}}

/* Controller sizing is now content-led so it stays within the phone viewport more reliably. */
.controller-app{padding:max(8px,env(safe-area-inset-top)) 10px max(8px,env(safe-area-inset-bottom));gap:6px}
.controller-stage-screen{
  grid-template-rows:auto auto auto auto auto auto;
  gap:6px;
  align-content:start;
}
.stage-game-hero{
  min-height:74px;
  padding:10px 12px 10px 14px;
  border-radius:20px;
}
.stage-game-code-block .stage-label{display:block;margin-bottom:4px}
.stage-game-code-block strong{font-size:clamp(44px,12.8vw,62px);letter-spacing:.07em;line-height:.84}
.stage-game-tools{gap:8px}
.stage-state-chip{min-height:34px;padding:0 12px;font-size:11px}
.stage-icon-button{width:38px;height:38px;border-radius:12px}

.stage-current-call{
  min-height:84px;
  padding:9px 11px;
  border-radius:20px;
  grid-template-columns:66px minmax(0,1fr);
  gap:11px;
}
.stage-current-call .call-ball{width:62px;height:62px;font-size:23px}
.stage-current-copy strong{font-size:clamp(21px,5.8vw,28px)}
.stage-current-copy>span:last-child{font-size:11px}

.stage-actions{grid-template-columns:minmax(0,1.2fr) .86fr;gap:6px}
.stage-next-button{
  min-height:82px;
  border-radius:19px;
  padding:8px 12px;
}
.stage-action-icon{width:42px;height:42px;flex-basis:42px}
.stage-action-copy small{font-size:8px}
.stage-action-copy strong{font-size:22px}
.stage-side-actions{gap:6px}
.stage-secondary-action{min-height:38px;border-radius:15px;padding:0 8px;font-size:10px}

.stage-audience-card{
  min-height:98px;
  padding:9px 10px;
  border-radius:20px;
  grid-template-rows:auto auto;
}
.stage-audience-primary{gap:10px}
.stage-audience-divider{height:42px}
.stage-stat-icon{width:36px;height:36px;flex-basis:36px}
.stage-audience-stat strong{font-size:28px}
.stage-audience-stat span{font-size:8px;margin-top:3px}
.stage-readiness-row{gap:4px}
.stage-readiness-row>div{padding:4px 6px;border-radius:10px}
.stage-readiness-row span{font-size:6.3px}
.stage-readiness-row strong{font-size:10px}

.stage-finale-card{
  min-height:64px;
  padding:7px 9px 7px 11px;
  border-radius:18px;
  grid-template-columns:minmax(0,1fr) 94px;
}
.stage-finale-copy strong{font-size:9px}
.stage-final-number-wrap{padding-left:8px}
.stage-final-number-wrap strong{font-size:26px}
.stage-reveal-button{height:26px;font-size:7px}

.stage-recent-dock{
  min-height:42px;
  height:42px;
  padding:4px 8px;
  border-radius:16px;
  grid-template-columns:auto minmax(0,1fr);
}
.stage-recent-dock .stage-label{font-size:8px}
.stage-recent-dock .controller-called-strip{justify-content:flex-end;gap:5px;overflow:hidden}
.controller-called-ball{flex:0 0 26px;width:26px;height:26px;font-size:8px}
.controller-called-empty{font-size:10px}

@media(max-width:460px) and (orientation:portrait){
  .controller-app{padding-left:10px;padding-right:10px;gap:6px}
  .controller-header{min-height:40px}
  .brand-name{font-size:18px}
  .brand-ball{width:23px;height:23px;font-size:9px}
  .controller-stage-screen{grid-template-rows:auto auto auto auto auto auto;gap:6px}
  .stage-game-hero{min-height:72px;padding:9px 10px 9px 13px}
  .stage-game-code-block strong{font-size:50px}
  .stage-state-chip{min-height:32px;padding:0 11px;font-size:10px}
  .stage-icon-button{width:34px;height:34px;border-radius:11px}
  .stage-current-call{min-height:80px;padding:8px 9px;grid-template-columns:60px 1fr;gap:9px;border-radius:18px}
  .stage-current-call .call-ball{width:58px;height:58px;font-size:21px}
  .stage-current-copy strong{font-size:18px}
  .stage-current-copy>span:last-child{font-size:9px}
  .stage-actions{grid-template-columns:minmax(0,1.14fr) .86fr;gap:6px}
  .stage-next-button{min-height:78px;padding:8px 10px;gap:8px;border-radius:18px}
  .stage-action-icon{width:38px;height:38px;flex-basis:38px;border-radius:13px}
  .stage-action-copy strong{font-size:18px}
  .stage-secondary-action{min-height:36px;font-size:9px;border-radius:14px}
  .stage-audience-card{min-height:92px;border-radius:18px;padding:8px 9px}
  .stage-stat-icon{width:33px;height:33px;flex-basis:33px}.stage-stat-icon svg{width:18px;height:18px}
  .stage-audience-stat strong{font-size:25px}
  .stage-readiness-row span{font-size:5.8px}.stage-readiness-row strong{font-size:9.6px}
  .stage-finale-card{min-height:60px;border-radius:16px;padding:7px 8px 7px 10px;grid-template-columns:minmax(0,1fr) 88px}
  .stage-finale-copy strong{font-size:8px}
  .stage-final-number-wrap strong{font-size:24px}
  .stage-reveal-button{height:24px}
  .stage-recent-dock{min-height:40px;height:40px;border-radius:15px;padding:3px 7px}
  .controller-called-ball{width:24px;height:24px;flex-basis:24px;font-size:7px}
}

@media(max-height:700px){
  .controller-app{padding-top:max(6px,env(safe-area-inset-top));padding-bottom:max(6px,env(safe-area-inset-bottom));gap:5px}
  .controller-header{min-height:38px}
  .stage-game-hero{min-height:64px;padding:8px 10px 8px 12px}
  .stage-game-code-block strong{font-size:41px}
  .stage-state-chip{min-height:28px;padding:0 9px;font-size:9px}
  .stage-icon-button{width:31px;height:31px}
  .stage-current-call{min-height:70px;padding:7px 8px;grid-template-columns:54px 1fr}
  .stage-current-call .call-ball{width:51px;height:51px;font-size:19px}
  .stage-current-copy strong{font-size:16px}.stage-current-copy>span:last-child{font-size:8px}
  .stage-next-button{min-height:66px;padding:7px 8px}.stage-action-icon{width:34px;height:34px;flex-basis:34px}.stage-action-copy strong{font-size:15px}
  .stage-secondary-action{min-height:30px;font-size:8px}
  .stage-audience-card{min-height:78px;padding:6px 8px}.stage-stat-icon{width:29px;height:29px;flex-basis:29px}.stage-audience-stat strong{font-size:21px}.stage-audience-stat span{font-size:7px}
  .stage-readiness-row>div{padding:3px 4px}.stage-readiness-row span{font-size:5px}.stage-readiness-row strong{font-size:8.5px}
  .stage-finale-card{min-height:54px;padding:5px 7px 5px 9px;grid-template-columns:minmax(0,1fr) 78px}.stage-final-number-wrap strong{font-size:22px}.stage-reveal-button{height:21px;font-size:6.5px}
  .stage-recent-dock{min-height:34px;height:34px;padding:3px 6px}.controller-called-ball{width:22px;height:22px;flex-basis:22px;font-size:7px}
}

@media(orientation:landscape) and (max-height:540px){
  .controller-stage-screen{grid-template-columns:170px minmax(0,1fr) 180px;grid-template-rows:64px minmax(0,1fr) 44px;gap:6px}
  .stage-game-hero{grid-column:1/-1;grid-row:1;min-height:64px}
  .stage-current-call{grid-column:1;grid-row:2;grid-template-columns:1fr;text-align:center;align-content:center}
  .stage-current-call .call-ball{margin:0 auto}
  .stage-actions{grid-column:1;grid-row:3}.stage-audience-card{grid-column:2;grid-row:2}
  .stage-finale-card{grid-column:3;grid-row:2;grid-template-columns:1fr;align-content:center;text-align:center}
  .stage-final-number-wrap{border-left:0;border-top:1px solid rgba(255,255,255,.12);padding:7px 0 0;margin-top:7px}
  .stage-recent-dock{grid-column:2;grid-row:3;height:42px;min-height:42px}
}

@media(prefers-reduced-motion:reduce){
  .winner-content,.winner-overlay::before,.winner-overlay::after,.winner-primary::before{animation:none}
}

/* ===== v0.8.0 full controller rebuild ===== */
html{background:#091126}
body.controller-page{
  height:var(--host-viewport-height,100dvh);
  min-height:0;
  overflow:hidden;
}
.controller-app{
  height:var(--host-viewport-height,100dvh);
  min-height:0;
  padding:max(8px,env(safe-area-inset-top)) 10px max(8px,env(safe-area-inset-bottom));
  grid-template-rows:auto minmax(0,1fr);
  gap:7px;
}
body.controller-active .controller-header{display:none}
body.controller-active .controller-app{
  grid-template-rows:minmax(0,1fr);
  padding-top:max(10px,env(safe-area-inset-top));
  padding-bottom:max(10px,env(safe-area-inset-bottom));
}

.host-stage{
  min-height:0;
  height:100%;
  display:grid;
  grid-template-rows:
    minmax(92px,1.15fr)
    minmax(90px,1fr)
    minmax(116px,1.18fr)
    minmax(100px,1.05fr)
    minmax(70px,.72fr)
    46px;
  gap:8px;
  overflow:hidden;
}
.host-stage-top,
.host-now-card,
.host-controls-card,
.host-audience-card,
.host-finale-card,
.host-recent-strip{
  min-height:0;
  border:1px solid rgba(255,255,255,.13);
  box-shadow:0 13px 28px rgba(0,0,0,.16),inset 0 1px 0 rgba(255,255,255,.13);
}
.host-stage-top{
  border-radius:24px;
  padding:12px 13px 11px 15px;
  display:flex;
  align-items:stretch;
  justify-content:space-between;
  gap:12px;
  background:
    radial-gradient(circle at 89% 10%,rgba(255,107,145,.28),transparent 31%),
    radial-gradient(circle at 12% 2%,rgba(92,154,255,.25),transparent 34%),
    linear-gradient(135deg,rgba(51,115,238,.38),rgba(100,70,188,.24) 52%,rgba(255,255,255,.075));
  overflow:hidden;
  position:relative;
}
.host-stage-top::after{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  background:linear-gradient(180deg,rgba(255,255,255,.13),transparent 42%);
}
.host-stage-code{min-width:0;position:relative;z-index:1;display:flex;flex-direction:column;justify-content:center}
.host-inline-brand{display:flex;align-items:center;gap:3px;margin-bottom:5px;white-space:nowrap}
.host-brand-dot{
  width:17px;height:17px;border-radius:50%;display:grid;place-items:center;
  color:#fff;font-size:6.5px;font-weight:1000;border:1px solid rgba(255,255,255,.8);box-shadow:0 2px 5px rgba(0,0,0,.13),inset 0 -3px 4px rgba(0,0,0,.10)
}
.host-brand-word{margin-left:4px;color:#d9e5fb;font-size:9px;font-weight:900;letter-spacing:-.02em}
.host-stage-label{font-size:8px;line-height:1;font-weight:950;letter-spacing:.14em;text-transform:uppercase;color:#b9c8df}
.host-stage-label.blue{color:#9dbbff}.host-stage-label.gold{color:#ffe19a}
.host-stage-code>strong{
  margin-top:4px;color:#fff;font-size:clamp(48px,14vw,68px);line-height:.80;font-weight:1000;letter-spacing:.075em;
  text-shadow:0 11px 27px rgba(0,0,0,.24)
}
.host-stage-tools{position:relative;z-index:1;display:flex;align-items:flex-start;gap:7px;padding-top:2px}
.host-state-chip{
  min-height:34px;padding:0 12px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18);color:#f2f6ff;font-size:10px;font-weight:900
}
.host-tool-button{
  width:36px;height:36px;border-radius:12px;border:1px solid rgba(255,255,255,.17);background:rgba(255,255,255,.11);color:#edf4ff;
  display:grid;place-items:center;cursor:pointer
}
.host-tool-button svg{width:18px;height:18px}

.host-now-card{
  border-radius:22px;
  padding:10px 12px;
  display:grid;
  grid-template-columns:72px minmax(0,1fr);
  gap:12px;
  align-items:center;
  background:
    radial-gradient(circle at 92% 7%,rgba(255,255,255,.14),transparent 30%),
    linear-gradient(135deg,rgba(255,255,255,.12),rgba(255,255,255,.065));
}
.host-now-card .call-ball{width:68px;height:68px;font-size:25px}
.host-now-copy{min-width:0}
.host-now-copy strong{
  display:block;margin-top:4px;color:#fff;font-size:clamp(20px,5.8vw,29px);line-height:1.02;font-weight:1000;letter-spacing:-.045em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
.host-now-copy>span:last-child{display:block;margin-top:5px;color:#aebdd5;font-size:10px;font-weight:760;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.host-controls-card{
  display:grid;
  grid-template-columns:minmax(0,1.25fr) .82fr;
  gap:8px;
  border:0;
  box-shadow:none;
}
.host-call-next,
.host-mini-action{
  border:0;color:#fff;cursor:pointer;transition:transform .12s ease,opacity .15s ease,filter .15s ease
}
.host-call-next:active,.host-mini-action:active{transform:scale(.975)}
.host-call-next:disabled,.host-mini-action:disabled{opacity:.33;filter:saturate(.55);cursor:not-allowed}
.host-call-next{
  min-width:0;border-radius:22px;padding:12px 14px;display:flex;align-items:center;gap:12px;text-align:left;
  background:linear-gradient(145deg,#5596ff 0%,#2d6eea 58%,#1e55c7 100%);
  box-shadow:0 16px 30px rgba(26,82,199,.28),inset 0 1px 0 rgba(255,255,255,.23)
}
.host-call-next>span:last-child{display:flex;flex-direction:column;min-width:0}
.host-call-next small{color:#c8dbff;font-size:8px;line-height:1;font-weight:950;letter-spacing:.14em;text-transform:uppercase}
.host-call-next strong{margin-top:4px;font-size:clamp(21px,6vw,29px);line-height:.95;font-weight:1000;letter-spacing:-.045em}
.host-call-icon{
  width:46px;height:46px;flex:0 0 46px;border-radius:16px;display:grid;place-items:center;background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.16)
}
.host-call-icon svg{width:24px;height:24px}
.host-control-secondary{display:grid;grid-template-rows:1fr 1fr;gap:8px}
.host-mini-action{min-height:0;border-radius:17px;padding:0 9px;display:flex;align-items:center;justify-content:center;gap:7px;font-size:10px;font-weight:950}
.host-mini-action svg{width:16px;height:16px}
.host-start{background:linear-gradient(145deg,#43c49a,#228b69);box-shadow:0 11px 22px rgba(35,139,107,.18)}
.host-final{background:linear-gradient(145deg,#ef6b80,#cf3e5b);box-shadow:0 11px 22px rgba(207,62,91,.18)}

.host-audience-card{
  border-radius:22px;
  padding:9px 10px;
  display:grid;
  grid-template-rows:minmax(0,1fr) auto;
  gap:8px;
  background:linear-gradient(180deg,rgba(255,255,255,.105),rgba(255,255,255,.065));
}
.host-audience-main{min-height:0;display:grid;grid-template-columns:1fr 1fr;gap:9px}
.host-main-stat{
  min-width:0;border-radius:16px;background:rgba(255,255,255,.055);display:flex;align-items:center;justify-content:center;gap:10px;padding:7px 8px
}
.host-main-icon{width:38px;height:38px;flex:0 0 38px;border-radius:13px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.13)}
.host-main-icon svg{width:20px;height:20px}
.host-main-stat>div{display:flex;flex-direction:column;min-width:0}
.host-main-stat strong{color:#fff;font-size:clamp(26px,7vw,34px);line-height:.87;font-weight:1000;letter-spacing:-.055em}
.host-main-stat span{margin-top:5px;color:#b6c4d9;font-size:8px;font-weight:950;text-transform:uppercase;letter-spacing:.09em}
.host-readiness{display:grid;grid-template-columns:1fr 1.25fr .68fr;gap:5px}
.host-readiness>div{min-width:0;border-radius:11px;padding:5px 7px;background:rgba(255,255,255,.065);display:flex;align-items:center;justify-content:space-between;gap:5px}
.host-readiness span{color:#9facbf;font-size:6.4px;font-weight:950;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
.host-readiness strong{color:#fff;font-size:10.5px;font-weight:1000;white-space:nowrap}

.host-finale-card{
  border-radius:19px;
  padding:8px 10px 8px 12px;
  display:grid;
  grid-template-columns:minmax(0,1fr) 100px;
  gap:9px;
  align-items:center;
  background:linear-gradient(135deg,rgba(240,184,62,.20),rgba(255,255,255,.065));
  border-color:rgba(240,184,62,.31)
}
.host-finale-card.ready{
  background:linear-gradient(135deg,rgba(47,197,141,.27),rgba(66,122,255,.10));
  border-color:rgba(76,218,165,.40);
  animation:stageFinalReady 1.6s ease-in-out infinite
}
.host-finale-copy{min-width:0}
.host-finale-copy strong{display:block;margin-top:5px;color:#d5deef;font-size:9px;line-height:1.3;font-weight:780}
.host-final-secret{
  align-self:stretch;border-left:1px solid rgba(255,255,255,.12);padding-left:9px;display:grid;grid-template-columns:1fr auto;grid-template-rows:auto 1fr;align-items:center;gap:2px 5px
}
.host-final-secret>span{grid-column:1/-1;color:#aab7cc;font-size:7px;font-weight:950;letter-spacing:.11em;text-transform:uppercase}
.host-final-secret strong{color:#fff;font-size:29px;line-height:1;font-weight:1000;letter-spacing:-.055em}
.host-final-secret strong.masked{color:#ffe092;font-size:24px;letter-spacing:.03em}
.host-final-secret button{height:27px;border:1px solid rgba(255,255,255,.14);border-radius:9px;padding:0 7px;background:rgba(255,255,255,.09);color:#dce7fa;font-size:7px;font-weight:900;cursor:pointer}

.host-recent-strip{
  border-radius:16px;
  padding:4px 8px;
  display:grid;
  grid-template-columns:auto minmax(0,1fr);
  align-items:center;
  gap:8px;
  background:linear-gradient(180deg,rgba(255,255,255,.09),rgba(255,255,255,.055));
}
.host-recent-strip .controller-called-strip{min-width:0;display:flex;align-items:center;justify-content:flex-end;gap:5px;overflow:hidden}
.host-recent-strip .controller-called-ball{flex:0 0 28px;width:28px;height:28px;font-size:9px}
.host-recent-strip .controller-called-empty{font-size:10px}

@media(max-width:460px) and (orientation:portrait){
  .host-stage{
    grid-template-rows:minmax(86px,1.12fr) minmax(82px,1fr) minmax(108px,1.16fr) minmax(92px,1.02fr) minmax(64px,.72fr) 42px;
    gap:7px
  }
  .host-stage-top{border-radius:21px;padding:10px 10px 10px 13px}
  .host-stage-code>strong{font-size:clamp(48px,15vw,62px)}
  .host-inline-brand{margin-bottom:4px}.host-brand-dot{width:15px;height:15px;font-size:6px}.host-brand-word{font-size:8px}
  .host-state-chip{min-height:31px;padding:0 10px;font-size:9px}.host-tool-button{width:33px;height:33px;border-radius:11px}
  .host-now-card{border-radius:19px;padding:8px 9px;grid-template-columns:62px 1fr;gap:9px}
  .host-now-card .call-ball{width:59px;height:59px;font-size:21px}
  .host-now-copy strong{font-size:18px}.host-now-copy>span:last-child{font-size:9px}
  .host-controls-card{grid-template-columns:minmax(0,1.17fr) .83fr;gap:7px}
  .host-call-next{border-radius:19px;padding:9px 10px;gap:9px}.host-call-icon{width:39px;height:39px;flex-basis:39px;border-radius:13px}.host-call-next strong{font-size:19px}.host-call-next small{font-size:7px}
  .host-control-secondary{gap:7px}.host-mini-action{border-radius:15px;font-size:9px}
  .host-audience-card{border-radius:19px;padding:8px 9px;gap:6px}.host-audience-main{gap:7px}.host-main-stat{border-radius:14px;gap:8px;padding:6px}.host-main-icon{width:33px;height:33px;flex-basis:33px}.host-main-icon svg{width:18px;height:18px}.host-main-stat strong{font-size:25px}.host-main-stat span{font-size:7px}
  .host-readiness>div{padding:4px 5px}.host-readiness span{font-size:5.7px}.host-readiness strong{font-size:9.5px}
  .host-finale-card{border-radius:17px;padding:7px 8px 7px 10px;grid-template-columns:minmax(0,1fr) 89px}.host-finale-copy strong{font-size:8px}.host-final-secret strong{font-size:25px}.host-final-secret strong.masked{font-size:22px}.host-final-secret button{height:24px;font-size:6.5px}
  .host-recent-strip{height:42px;border-radius:15px;padding:3px 7px}.host-recent-strip .controller-called-ball{width:24px;height:24px;flex-basis:24px;font-size:7px}
}

@media(max-height:700px){
  .host-stage{grid-template-rows:minmax(72px,1fr) minmax(68px,.9fr) minmax(88px,1fr) minmax(74px,.9fr) minmax(54px,.66fr) 36px;gap:5px}
  .host-stage-top{padding:8px 9px 8px 11px}.host-stage-code>strong{font-size:40px}.host-brand-dot{width:13px;height:13px;font-size:5px}.host-brand-word{font-size:7px}.host-stage-label{font-size:7px}.host-state-chip{min-height:27px;font-size:8px}.host-tool-button{width:29px;height:29px}
  .host-now-card{padding:6px 8px;grid-template-columns:52px 1fr}.host-now-card .call-ball{width:49px;height:49px;font-size:18px}.host-now-copy strong{font-size:16px}.host-now-copy>span:last-child{font-size:8px}
  .host-call-next{padding:6px 8px}.host-call-icon{width:32px;height:32px;flex-basis:32px}.host-call-next strong{font-size:15px}.host-mini-action{font-size:8px}
  .host-audience-card{padding:6px 7px;gap:5px}.host-main-icon{width:28px;height:28px;flex-basis:28px}.host-main-icon svg{width:15px;height:15px}.host-main-stat strong{font-size:20px}.host-main-stat span{font-size:6px}.host-readiness>div{padding:3px 4px}.host-readiness span{font-size:5px}.host-readiness strong{font-size:8px}
  .host-finale-card{padding:5px 7px 5px 8px;grid-template-columns:minmax(0,1fr) 77px}.host-finale-copy strong{font-size:7px}.host-final-secret strong{font-size:21px}.host-final-secret strong.masked{font-size:19px}.host-final-secret button{height:21px;font-size:6px}
  .host-recent-strip{height:36px}.host-recent-strip .controller-called-ball{width:22px;height:22px;flex-basis:22px;font-size:7px}
}

@media(orientation:landscape) and (max-height:540px){
  .host-stage{grid-template-columns:180px minmax(0,1fr) 180px;grid-template-rows:minmax(64px,.8fr) minmax(0,1fr) 42px;gap:6px}
  .host-stage-top{grid-column:1/-1;grid-row:1}
  .host-now-card{grid-column:1;grid-row:2;grid-template-columns:1fr;text-align:center;align-content:center}.host-now-card .call-ball{margin:0 auto}
  .host-controls-card{grid-column:1;grid-row:3}
  .host-audience-card{grid-column:2;grid-row:2}
  .host-finale-card{grid-column:3;grid-row:2;grid-template-columns:1fr;align-content:center;text-align:center}.host-final-secret{border-left:0;border-top:1px solid rgba(255,255,255,.12);padding:7px 0 0;margin-top:7px}
  .host-recent-strip{grid-column:2;grid-row:3}
}

/* Winner should feel like the game exploding into a celebration, not a page change. */
body.modal-open .player-app{
  filter:brightness(.70) saturate(1.20);
  transform:none;
}
.winner-overlay{
  background:rgba(5,11,28,.12);
  backdrop-filter:blur(3px) saturate(1.12);
  -webkit-backdrop-filter:blur(3px) saturate(1.12);
}
.winner-overlay::before{
  opacity:.82;
  background:
    radial-gradient(circle at 12% 15%,rgba(73,177,255,.34),transparent 23%),
    radial-gradient(circle at 88% 15%,rgba(255,93,139,.34),transparent 23%),
    radial-gradient(circle at 50% 83%,rgba(127,91,255,.27),transparent 28%),
    radial-gradient(circle at 50% 46%,rgba(255,216,94,.16),transparent 22%);
}
.winner-content{
  width:min(88vw,410px);
  padding:22px 20px 18px;
  border-radius:28px;
  background:
    linear-gradient(180deg,rgba(255,255,255,.16),rgba(255,255,255,.075)),
    linear-gradient(145deg,rgba(42,104,225,.56),rgba(121,72,191,.42));
  border:1px solid rgba(255,255,255,.22);
  box-shadow:0 28px 70px rgba(0,0,0,.30),inset 0 1px 0 rgba(255,255,255,.25);
  backdrop-filter:blur(9px) saturate(1.15);
  -webkit-backdrop-filter:blur(9px) saturate(1.15)
}
.winner-content::before{opacity:.48}
.winner-title{text-shadow:0 10px 26px rgba(0,0,0,.26),0 0 30px rgba(110,169,255,.18)}
