:root{
  --bg1:#1b1140; --bg2:#2d1b69; --panel:rgba(255,255,255,.06); --panel-b:rgba(255,255,255,.12);
  --text:#f4f1ff; --muted:#b7addb; --accent:#ffc83d; --accent2:#ff4d8d; --ok:#35d399; --warn:#ff9f43;
  --B:#3b82f6; --I:#ef4444; --N:#a3a3a3; --G:#22c55e; --O:#f59e0b;
  --radius:16px;
}
*{box-sizing:border-box}
html,body{margin:0}
body{font-family:system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;color:var(--text);
  background:radial-gradient(1200px 600px at 10% -10%,#5b2bbd55,transparent),radial-gradient(900px 500px at 110% 10%,#ff4d8d33,transparent),linear-gradient(160deg,var(--bg1),var(--bg2));
  min-height:100vh;line-height:1.4}
a{color:var(--accent)}
.hidden{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.muted{color:var(--muted)} .small{font-size:.82rem}
h1,h2{margin:0}
h2{font-size:1.15rem}
.section-title{font-size:.95rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:18px 0 10px}

/* top bar */
.topbar{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;padding:14px clamp(12px,3vw,32px);
  background:rgba(10,5,30,.45);backdrop-filter:blur(8px);border-bottom:1px solid var(--panel-b);position:sticky;top:0;z-index:20}
.brand{display:flex;align-items:center;gap:12px}
.logo-ball{width:46px;height:46px;border-radius:50%;display:grid;place-items:center;font-weight:900;font-size:1.4rem;color:#1b1140;
  background:radial-gradient(circle at 35% 30%,#fff 0 18%,var(--accent) 19% 60%,#e0a000 100%);box-shadow:0 4px 14px #ffc83d66}
.brand h1{font-size:1.35rem;letter-spacing:.02em}
.tagline{margin:0;color:var(--muted);font-size:.8rem}
.top-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.balance{display:flex;flex-direction:column;align-items:flex-end;padding:6px 14px;border-radius:12px;background:linear-gradient(135deg,#ffc83d22,#ff4d8d22);border:1px solid #ffc83d55;min-width:140px}
.balance-label{font-size:.66rem;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}
.balance-dbv{font-weight:800;font-size:1.15rem;color:var(--accent)}
.balance-local{font-size:.75rem;color:var(--muted)}
.balance.bump{animation:bump .6s}
@keyframes bump{30%{transform:scale(1.08)}}
select,input[type=number]{background:#0e0828;color:var(--text);border:1px solid var(--panel-b);border-radius:10px;padding:8px 10px;font:inherit}
.icon-btn{background:var(--panel);border:1px solid var(--panel-b);color:var(--text);border-radius:10px;padding:8px 10px;cursor:pointer;font:inherit;display:flex;gap:6px;align-items:center}
.icon-btn:hover{background:rgba(255,255,255,.12)}

/* earn banner */
.earn-banner{display:flex;gap:10px;align-items:center;width:calc(100% - 2*clamp(12px,3vw,32px));margin:14px auto 0;padding:10px 16px;border-radius:12px;cursor:pointer;
  background:linear-gradient(90deg,#35d39926,#3b82f626);border:1px solid #35d39977;color:var(--text);font:inherit;text-align:left}
.earn-banner:hover{background:linear-gradient(90deg,#35d39944,#3b82f644)}
.earn-star{color:var(--ok);font-size:1.3rem}
.earn-arrow{margin-left:auto;color:var(--ok);font-weight:800}

/* layout */
.layout{display:grid;grid-template-columns:minmax(300px,420px) 1fr;gap:18px;padding:18px clamp(12px,3vw,32px);align-items:start}
.panel{background:var(--panel);border:1px solid var(--panel-b);border-radius:var(--radius);padding:18px;box-shadow:0 10px 30px #0004}

/* ball */
.ball-stage{display:flex;gap:16px;align-items:center}
.current-ball{--c:var(--accent);flex:0 0 auto;width:120px;height:120px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;
  background:radial-gradient(circle at 35% 30%,#fff 0 10%,var(--c) 45%,color-mix(in srgb,var(--c) 60%,#000) 100%);box-shadow:0 10px 30px #0007, inset 0 -8px 16px #0004}
.cb-inner{width:64%;height:64%;border-radius:50%;background:#fff;color:#1b1140;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:inset 0 -3px 6px #0002}
.cb-letter{font-weight:800;font-size:.8rem;line-height:1;color:var(--c)}
.cb-num{font-weight:900;font-size:2.1rem;line-height:1}
.current-ball.idle{--c:#6b5fa6}
.current-ball.pop{animation:pop .5s cubic-bezier(.2,1.6,.4,1)}
@keyframes pop{0%{transform:scale(.3) rotate(-90deg);opacity:.2}100%{transform:none;opacity:1}}
.ball-meta{flex:1;min-width:0}
.ball-count{font-weight:700}
.ball-count span{color:var(--accent);font-size:1.3rem}
.recent{display:flex;gap:6px;margin:8px 0;min-height:34px;flex-wrap:wrap}
.mini-ball{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-size:.8rem;font-weight:800;color:#fff;background:var(--c);box-shadow:inset 0 -3px 6px #0004}
.round-status{font-size:.85rem;color:var(--muted)}

.controls{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap}
.controls-row{display:flex;gap:14px;margin-top:12px;flex-wrap:wrap;align-items:center;font-size:.88rem}
.btn{font:inherit;font-weight:700;border-radius:12px;padding:10px 16px;border:1px solid var(--panel-b);background:rgba(255,255,255,.08);color:var(--text);cursor:pointer;transition:transform .08s,background .2s}
.btn:hover:not(:disabled){background:rgba(255,255,255,.16)}
.btn:active:not(:disabled){transform:scale(.97)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.primary{background:linear-gradient(135deg,var(--accent),#ff9a3d);color:#2a1600;border:none;box-shadow:0 6px 18px #ffc83d44}
.btn.warn{background:linear-gradient(135deg,var(--accent2),#ff7a59);border:none}
.btn.big{font-size:1.1rem;padding:14px 22px;width:100%}
.slider{display:flex;align-items:center;gap:8px}
.slider input{accent-color:var(--accent);width:110px}
.toggle{display:flex;align-items:center;gap:8px;cursor:pointer;user-select:none}
.toggle input{position:absolute;opacity:0}
.toggle .track{width:38px;height:22px;border-radius:11px;background:#ffffff30;position:relative;transition:background .2s}
.toggle .track::after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;transition:left .2s}
.toggle input:checked+.track{background:var(--ok)}
.toggle input:checked+.track::after{left:19px}
.toggle input:focus-visible+.track{outline:2px solid var(--accent)}

/* called board */
.called-board{display:grid;grid-template-columns:28px repeat(15,1fr);gap:3px}
.cb-row-label{font-weight:900;display:grid;place-items:center;border-radius:6px;color:#fff;background:var(--c);font-size:.85rem}
.cb-cell{aspect-ratio:1;display:grid;place-items:center;font-size:.68rem;border-radius:50%;background:#ffffff10;color:#ffffff70;transition:all .3s}
.cb-cell.on{background:var(--c);color:#fff;font-weight:800;box-shadow:0 0 8px color-mix(in srgb,var(--c) 70%,transparent)}
.cb-cell.last{outline:2px solid #fff;transform:scale(1.15)}

/* buy panel */
.buy-panel{text-align:center;max-width:520px;margin:0 auto 10px;padding:10px 0}
.buy-panel h2{font-size:1.4rem;margin-bottom:6px}
.card-count{display:flex;justify-content:center;gap:10px;margin:18px 0}
.card-count button{width:62px;height:62px;border-radius:14px;font:inherit;font-size:1.5rem;font-weight:800;cursor:pointer;background:rgba(255,255,255,.08);border:2px solid var(--panel-b);color:var(--text)}
.card-count button.active{border-color:var(--accent);background:#ffc83d22;color:var(--accent)}
.total{margin-bottom:14px;font-size:1.05rem}
.total strong{color:var(--accent)}
.insufficient{color:var(--warn);font-size:.9rem}
.fine{font-size:.78rem;color:var(--muted);margin-top:12px}

/* cards */
.cards-area{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}
.bcard{background:#fffdf7;color:#1b1140;border-radius:14px;padding:10px;box-shadow:0 8px 24px #0006;position:relative;transition:box-shadow .3s}
.bcard.won{box-shadow:0 0 0 3px var(--accent),0 8px 30px #ffc83d66}
.bcard-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;font-weight:800;font-size:.9rem}
.badges{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}
.badge{font-size:.66rem;padding:2px 7px;border-radius:999px;background:#1b1140;color:var(--accent);font-weight:800}
.bgrid{display:grid;grid-template-columns:repeat(5,1fr);gap:4px}
.bgrid .hdr{text-align:center;font-weight:900;color:#fff;border-radius:6px;padding:3px 0;background:var(--c)}
.cell{aspect-ratio:1;display:grid;place-items:center;border-radius:8px;background:#efeaf8;font-weight:800;font-size:clamp(.95rem,2.6vw,1.2rem);cursor:pointer;position:relative;user-select:none;border:none;color:inherit;font-family:inherit;padding:0}
.cell:hover{background:#e3dbf5}
.cell.daub::after{content:"";position:absolute;inset:12%;border-radius:50%;background:radial-gradient(circle at 40% 35%,#ff7eb0,var(--accent2));opacity:.85}
.cell.daub.fresh::after{animation:daub .25s}
.cell.daub span{position:relative;z-index:1;color:#fff}
.cell.free{background:linear-gradient(135deg,var(--accent),#ff9a3d);font-size:.7rem;cursor:default}
.cell.free::after{display:none}
.cell.free span{color:#2a1600}
.cell.winline{box-shadow:inset 0 0 0 3px var(--accent)}
.cell.shake{animation:shake .3s}
@keyframes daub{from{transform:scale(0)}to{transform:scale(1)}}
@keyframes shake{25%{transform:translateX(-3px)}75%{transform:translateX(3px)}}

/* prizes */
.prize-list{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px}
.prize-list li{display:flex;gap:12px;align-items:center;background:rgba(0,0,0,.2);border-radius:12px;padding:10px 12px}
.pat{display:grid;grid-template-columns:repeat(5,8px);gap:2px;flex:0 0 auto}
.pat i{width:8px;height:8px;border-radius:2px;background:#ffffff25}
.pat i.on{background:var(--accent2)}
.prize-list .pl{font-weight:800}
.prize-list .pv{color:var(--accent);font-weight:700;font-size:.9rem}
.prize-list .pd{color:var(--muted);font-size:.75rem}

/* footer */
.footer{padding:8px clamp(12px,3vw,32px) 30px;text-align:center;font-size:.85rem;color:var(--muted);max-width:900px;margin:0 auto}
.footer strong{color:var(--text)}
.link-btn{background:none;border:none;color:var(--muted);text-decoration:underline;cursor:pointer;font:inherit}

/* modals */
.modal{position:fixed;inset:0;background:#07031acc;display:grid;place-items:center;z-index:50;padding:16px;animation:fade .2s}
@keyframes fade{from{opacity:0}}
.modal-box{background:linear-gradient(160deg,#2a1a5e,#1b1140);border:1px solid var(--panel-b);border-radius:18px;padding:24px;max-width:520px;width:100%;max-height:88vh;overflow:auto;position:relative;box-shadow:0 20px 60px #000a}
.modal-box.wide{max-width:760px}
.modal-box h2{font-size:1.3rem;margin-bottom:10px;padding-right:30px}
.modal-close{position:absolute;top:10px;right:12px;background:none;border:none;color:var(--text);font-size:1.8rem;cursor:pointer;line-height:1}
.earn-list{list-style:none;padding:0;display:grid;gap:12px}
.earn-list li{display:flex;gap:12px;background:rgba(255,255,255,.06);padding:12px;border-radius:12px}
.ei{font-size:1.6rem}
.history-wrap{overflow:auto}
.history{width:100%;border-collapse:collapse;font-size:.85rem}
.history th,.history td{padding:8px;border-bottom:1px solid var(--panel-b);text-align:left;vertical-align:top}
.history th{color:var(--muted);font-weight:600;position:sticky;top:0;background:#23164f}
.history .num{text-align:right;white-space:nowrap}
.history .cr{color:var(--ok);font-weight:700}
.history .dr{color:#ff8fa3;font-weight:700}
.history .loc{display:block;color:var(--muted);font-size:.72rem;font-weight:400}
.settings{display:grid;gap:12px}
.settings label{display:grid;gap:4px;font-size:.9rem}
.settings-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:14px}
.result-list{list-style:none;padding:0;display:grid;gap:6px}
.result-list li{display:flex;justify-content:space-between;gap:10px;background:rgba(255,255,255,.06);padding:8px 12px;border-radius:10px}
.result-total{font-size:1.2rem;font-weight:800;color:var(--accent);margin-top:10px}

/* toasts */
.toasts{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);display:grid;gap:8px;z-index:60;width:min(92vw,420px)}
.toast{background:linear-gradient(135deg,var(--accent),#ff9a3d);color:#2a1600;padding:12px 16px;border-radius:12px;font-weight:800;box-shadow:0 10px 30px #0008;animation:toastIn .35s cubic-bezier(.2,1.4,.4,1)}
.toast.info{background:#2d1b69;color:var(--text);border:1px solid var(--panel-b)}
@keyframes toastIn{from{transform:translateY(30px);opacity:0}}

@media (max-width:860px){
  .layout{grid-template-columns:1fr}
  .btn-text{display:none}
  .current-ball{width:96px;height:96px}
  .cb-num{font-size:1.7rem}
  .balance{min-width:0}
}
@media (max-width:480px){
  .tagline{display:none}
  .topbar{padding:10px 12px}
  .panel{padding:14px}
  .cb-cell{font-size:.55rem}
  .called-board{grid-template-columns:22px repeat(15,1fr);gap:2px}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ===== multiplayer additions ===== */
body{position:relative}
body.has-bg{background:#140a32}
body.has-bg::before{content:"";position:fixed;inset:0;z-index:-1;
  background:linear-gradient(180deg,rgba(20,10,50,.45),rgba(20,10,50,.7)),var(--bg-desktop) center/cover no-repeat}
@media (orientation:portrait){body.has-bg::before{background:linear-gradient(180deg,rgba(20,10,50,.5),rgba(20,10,50,.72)),var(--bg-mobile) center/cover no-repeat}}
.bg-wrap{display:flex;align-items:center;gap:4px}
.bg-wrap select{max-width:130px}
.cell{cursor:default}
.cell:hover{background:#efeaf8}
.conn-warning{margin:10px auto 0;width:calc(100% - 2*clamp(12px,3vw,32px));background:#ff9f4333;border:1px solid var(--warn);border-radius:10px;padding:8px 14px;font-size:.9rem}

.phase-banner{border-radius:14px;padding:12px 14px;margin-bottom:14px;background:rgba(0,0,0,.25);border:1px solid var(--panel-b);display:flex;align-items:center;justify-content:space-between;gap:10px}
.phase-banner.lobby{background:linear-gradient(135deg,#35d39926,#3b82f626);border-color:#35d39977}
.phase-banner.drawing{background:linear-gradient(135deg,#ff4d8d26,#ffc83d1a);border-color:#ff4d8d77}
.phase-banner.finished{background:linear-gradient(135deg,#ffc83d2a,#ff9a3d1a);border-color:#ffc83d77}
.phase-title{font-weight:800;font-size:1rem;min-width:0}
.phase-timer{font-variant-numeric:tabular-nums;font-weight:900;font-size:2rem;color:var(--accent);flex:0 0 auto}
.sponsor{display:flex;align-items:center;gap:10px;margin-top:8px;color:var(--text);text-decoration:none;font-weight:400;border-radius:10px;padding:6px 8px;background:rgba(255,255,255,.07)}
.sponsor:hover{background:rgba(255,255,255,.13)}
.sponsor img{height:34px;width:auto;border-radius:6px;flex:0 0 auto}
.sponsor.big img{height:46px}
.sponsor .sp-text{display:flex;flex-direction:column;font-size:.85rem;line-height:1.25;min-width:0}
.sponsor .sp-pre{font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.sponsor .sp-tag{font-size:.75rem;color:var(--muted)}
.sponsor.small{padding:4px 6px}
.sponsor.small img{height:26px}
.sponsor.small .sp-tag{display:none}

.sound-toggle{margin-top:12px;font-size:.85rem}
.players{list-style:none;padding:0;margin:0;display:grid;gap:4px;max-height:220px;overflow:auto}
.players li{display:flex;justify-content:space-between;gap:8px;padding:6px 10px;border-radius:8px;background:rgba(255,255,255,.05);font-size:.9rem}
.players li.me{background:#ffc83d22;border:1px solid #ffc83d55}
.bot-tag{font-size:.6rem;font-weight:800;background:#ff9f43;color:#2a1600;border-radius:4px;padding:1px 4px;vertical-align:middle}
.dev-panel{margin-top:18px;border:2px dashed var(--warn);border-radius:12px;padding:10px 12px;background:#ff9f4312}
.dev-tag{font-size:.7rem;font-weight:900;letter-spacing:.1em;color:var(--warn);margin-bottom:6px}

.pot{background:linear-gradient(135deg,#ffc83d1f,#ff4d8d1f);border:1px solid #ffc83d55;border-radius:14px;padding:14px;margin-bottom:16px}
.pot-head{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.pot-label{font-size:.72rem;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}
.pot-dbv{font-size:2.2rem;font-weight:900;color:var(--accent);line-height:1.1}
.pot-local{color:var(--muted);font-size:.9rem;display:flex;flex-direction:column}
.pot-extra{font-size:.8rem;color:var(--ok)}
.pot-extra.muted{color:var(--muted)}
.pot-info{text-align:right;line-height:1.5}
.prize-list li.won{background:#ffc83d22;outline:1px solid #ffc83d66}
.prize-list .pw{display:flex;flex-direction:column;font-size:.8rem;font-weight:700}
.prize-list .pw .me{color:var(--accent)}
.prize-list .pw small{color:var(--muted);font-weight:400}
.watch-note{text-align:center;padding:14px;border-radius:12px;background:rgba(255,255,255,.06);margin-bottom:8px}
.empty-cards{text-align:center;padding:20px}
.history-rounds{list-style:none;padding:0;margin:0;display:grid;gap:6px;font-size:.85rem}
.history-rounds li{background:rgba(255,255,255,.05);padding:8px 10px;border-radius:8px}
.toast{display:flex;flex-direction:column;gap:4px}
.toast-sponsor{display:flex;align-items:center;gap:6px;font-size:.72rem;font-weight:600;opacity:.85}
.toast-sponsor img{height:18px;width:auto}
.toast-sponsor .sp-wordmark{font-size:.8rem;color:inherit}
input[type=text]{background:#0e0828;color:var(--text);border:1px solid var(--panel-b);border-radius:10px;padding:10px 12px;font:inherit}
@media (max-width:860px){.pot-info{text-align:left}.phase-timer{font-size:1.6rem}}
@media (max-width:480px){.bg-wrap select{max-width:90px}.pot-dbv{font-size:1.8rem}}

.sponsor{flex-wrap:wrap;column-gap:10px;row-gap:2px}
.sponsor .sp-pre{flex-basis:100%}
.sponsor .sp-brand{display:flex;align-items:center}
.sponsor .sp-logo{height:30px;width:auto;border-radius:0}
.sponsor.big .sp-logo{height:40px}
.sponsor.small .sp-logo{height:22px}
.sp-wordmark{font-weight:900;font-size:1.25rem;letter-spacing:.02em;color:#fff}
.sponsor.small .sp-wordmark{font-size:1rem}
.sponsor .sp-tag{font-size:.78rem;color:var(--muted)}

/* compact, non-sticky header on phones so it doesn't cover the game */
@media (max-width:600px){
  .topbar{position:static;gap:8px}
  .top-actions{width:100%;justify-content:space-between;gap:6px;flex-wrap:nowrap}
  .balance{padding:4px 10px}
  .balance-dbv{font-size:1rem}
  .top-actions select{padding:6px 4px;max-width:74px}
  .bg-wrap select{max-width:74px}
  .icon-btn{padding:6px 8px}
}

.value-in{display:flex;flex-direction:column;gap:1px}
.value-in-label{font-size:.62rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);padding-left:2px}
@media (max-width:600px){.value-in-label{display:none}}
