:root{--bg: #0e1116;--bg2: #151a22;--panel: #1a2029;--panel2: #202834;--line: #2a3341;--text: #e8ecf1;--muted: #8b95a5;--accent: #ffb03a;--accent2: #42e2b8;--red: #ff5d5d;--green: #51d96b;--blue: #4fc3f7;--font-display: "Bebas Neue", "Arial Narrow", sans-serif;--font-body: "Zen Kaku Gothic New", "Hiragino Kaku Gothic ProN", system-ui, sans-serif}*{box-sizing:border-box}html,body,#app{height:100%}body{margin:0;background:radial-gradient(1100px 700px at 75% -10%,#1c2531 0%,var(--bg) 55%),var(--bg);color:var(--text);font-family:var(--font-body);font-size:15px;-webkit-font-smoothing:antialiased}.app{min-height:100%;display:flex;flex-direction:column}h3{margin:0 0 8px;font-size:13px;letter-spacing:.08em;color:var(--muted);text-transform:uppercase}.btn{appearance:none;border:1px solid var(--line);background:var(--panel2);color:var(--text);padding:10px 18px;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer;transition:transform .06s ease,background .15s ease,border-color .15s ease}.btn:hover:not(:disabled){background:#26303e;border-color:#3a4759}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.4;cursor:default}.btn.primary{background:linear-gradient(180deg,#ffc35c,#f29b1d);border-color:#f29b1d;color:#241703}.btn.primary:hover:not(:disabled){background:linear-gradient(180deg,#ffcd74,#f7a72c)}.btn.ghost{background:transparent}.btn.big{font-size:17px;padding:14px 34px}.btn.wide{width:100%;margin-top:10px}.icon-btn{appearance:none;border:1px solid var(--line);background:var(--panel);border-radius:10px;width:38px;height:34px;cursor:pointer;font-size:16px;opacity:.45;transition:opacity .15s ease,border-color .15s ease}.icon-btn .mini-label{font-size:11px;font-weight:700;letter-spacing:.05em}.vol{display:flex;align-items:center;gap:6px}.vol-slider{width:92px;height:22px;accent-color:var(--accent);cursor:pointer}.vol-pct{font-size:11px;font-weight:700;color:var(--muted);min-width:42px;text-align:right;font-variant-numeric:tabular-nums}.vol.off .icon-btn{opacity:.45}.latency{display:flex;align-items:center;gap:4px;color:var(--muted)}.latency-icon{font-size:13px}.latency-input{width:62px;background:var(--panel);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:6px;font-size:12px;font-family:ui-monospace,SF Mono,Menlo,monospace;text-align:right}.latency-input:focus{outline:none;border-color:var(--accent)}.latency-unit{font-size:11px;font-variant-numeric:tabular-nums}.icon-btn.on{opacity:1;border-color:var(--accent)}.chip-btn{appearance:none;border:1px solid var(--line);background:transparent;color:var(--accent);font-size:12px;font-weight:700;padding:4px 10px;border-radius:999px;cursor:pointer}.chip-btn:hover{background:#ffb03a1f}.exit-btn{appearance:none;border:1px solid transparent;background:transparent;color:var(--muted);cursor:pointer;font-size:13px;padding:8px 10px}.exit-btn:hover{color:var(--red)}.seg-ctl{display:inline-flex;border:1px solid var(--line);border-radius:10px;overflow:hidden}.seg-ctl button{appearance:none;border:none;background:transparent;color:var(--muted);padding:8px 16px;font-size:13px;font-weight:700;cursor:pointer}.seg-ctl button.on{background:var(--accent);color:#241703}.seg-ctl.big button{padding:10px 22px;font-size:15px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 20px;background:#0d1016e0;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.brand{display:flex;align-items:baseline;gap:12px;min-width:0}.brand .logo{font-family:var(--font-display);font-size:24px;letter-spacing:2px;white-space:nowrap}.brand .game-name{color:var(--accent);font-family:var(--font-display);font-size:17px;letter-spacing:1.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar .right{display:flex;align-items:center;gap:8px}.conn-chip{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:999px;padding:5px 8px 5px 12px;font-size:12.5px;color:var(--muted);max-width:260px}.conn-chip .status-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conn-chip.connected{border-color:#51d96b66;color:var(--green)}.conn-chip.connecting{color:var(--accent)}.dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex:none}.conn-chip.connected .dot,.conn-state.connected .dot{background:var(--green);box-shadow:0 0 8px var(--green)}.conn-chip.connecting .dot,.conn-state.connecting .dot{background:var(--accent);animation:pulse 1s infinite}@keyframes pulse{50%{opacity:.3}}.setup{width:100%;max-width:1020px;margin:0 auto;padding:36px 22px 90px}.hero h1{font-family:var(--font-display);font-size:44px;letter-spacing:3px;margin:0 0 6px}.hero p{color:var(--muted);margin:0 0 10px}.block{margin-top:30px}.block>h2{font-size:14px;color:var(--accent);letter-spacing:.1em;text-transform:uppercase;border-bottom:1px solid var(--line);padding-bottom:8px}.game-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin-top:14px}.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px 18px;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease}.card:hover{border-color:#3a4759}.card.sel{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset,0 8px 30px #ffb03a14}.card-title{font-family:var(--font-display);font-size:24px;letter-spacing:2px}.card-desc{color:var(--muted);font-size:13px;margin-top:4px}.card-opts{margin-top:12px;display:flex;flex-direction:column;gap:10px}.check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text);cursor:pointer}.check input{accent-color:var(--accent);width:15px;height:15px}.name-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin-top:14px}.name-grid input{background:var(--panel);border:1px solid var(--line);color:var(--text);border-radius:10px;padding:10px 14px;font-size:14px;font-family:var(--font-display);letter-spacing:1px;outline:none}.name-grid input:focus{border-color:var(--accent)}.conn-box{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px 18px;margin-top:14px}.conn-state{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13.5px;color:var(--muted)}.conn-state.connected{color:var(--green)}.hint{color:var(--muted);font-size:12.5px;line-height:1.7}.warn{color:var(--red);font-size:12.5px}.row{display:flex;gap:10px;margin-top:12px}.start-row{display:flex;gap:14px;margin-top:40px;flex-wrap:wrap}.game-screen{display:grid;grid-template-columns:300px minmax(0,1fr) 280px;gap:14px;padding:14px 16px 24px;width:100%;max-width:1500px;margin:0 auto;flex:1}.col.players{display:flex;flex-direction:column;gap:10px;min-width:0}.col.side{display:flex;flex-direction:column;gap:12px;min-width:0}.pcard{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:14px 16px;transition:border-color .2s ease,box-shadow .2s ease}.pcard.active{border-color:var(--accent);box-shadow:0 0 20px #ffb03a1f}.pcard.winner{border-color:var(--accent2)}.pname{display:flex;align-items:center;gap:8px;font-weight:700;font-size:14px;letter-spacing:.06em}.turn-badge{background:var(--accent);color:#241703;font-size:10px;font-weight:800;padding:2px 7px;border-radius:999px;letter-spacing:.1em}.main{display:flex;align-items:baseline;gap:10px;margin-top:6px}.main-value{font-family:var(--font-display);font-size:56px;line-height:1;color:var(--accent2)}.main-value.win{color:var(--accent)}.main-label{color:var(--muted);font-size:11px;letter-spacing:.12em;text-transform:uppercase}.subs{display:grid;grid-template-columns:1fr 1fr;gap:4px 14px;margin-top:12px}.sub{display:flex;justify-content:space-between;font-size:12px;color:var(--muted)}.sub .v{color:var(--text);font-weight:700;font-variant-numeric:tabular-nums}.board-area{display:flex;flex-direction:column;align-items:center;gap:14px;min-width:0}.turn-row{width:100%;max-width:640px;display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}.turn-label{font-size:15px;color:var(--muted)}.turn-label strong{color:var(--text);font-size:17px}.round{margin-left:10px;font-family:var(--font-display);color:var(--accent);font-size:18px;letter-spacing:1px}.dart-slots{display:flex;gap:8px}.slot{min-width:78px;padding:8px 12px;border-radius:10px;border:1px dashed var(--line);text-align:center;font-family:var(--font-display);font-size:22px;letter-spacing:1px;color:var(--muted);background:var(--panel)}.slot.filled{border-style:solid;border-color:var(--accent2);color:var(--text)}.dartboard{width:min(60vh,540px);max-width:100%;aspect-ratio:1;filter:drop-shadow(0 18px 40px rgba(0,0,0,.5))}.dartboard:not(.clickable){pointer-events:none}.dartboard.clickable path.seg:hover,.dartboard.clickable circle.seg:hover{filter:brightness(1.3);cursor:pointer}.dart-num{font-family:var(--font-display);font-size:4.2px;fill:#d7dbe2}.marker.newest circle{animation:dart-pop .25s ease}@keyframes dart-pop{0%{r:6;opacity:.4}}.await-hint{color:var(--accent);font-size:13px;font-weight:500;background:#ffb03a14;border:1px dashed rgba(255,176,58,.45);border-radius:10px;padding:9px 18px;animation:breathe 1.8s ease-in-out infinite}.await-hint strong{font-weight:700}@keyframes breathe{50%{opacity:.55}}.checkout{display:flex;align-items:center;gap:12px;background:var(--panel);border:1px solid var(--accent);border-radius:12px;padding:10px 18px}.co-label{font-size:10px;letter-spacing:.18em;color:var(--accent);font-weight:800}.co-route{font-family:var(--font-display);font-size:24px;letter-spacing:2px;color:var(--text)}.actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.cricket{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:12px 14px}.cricket table{width:100%;border-collapse:collapse;font-size:13px}.cricket th,.cricket td{padding:5px 6px;border-bottom:1px solid var(--line);text-align:center}.cricket th{color:var(--muted);font-size:11px;max-width:70px;overflow:hidden;text-overflow:ellipsis}.cricket th.me,.cricket td.me{background:#ffb03a14}.cricket td.num{font-family:var(--font-display);font-size:17px;letter-spacing:1px;color:var(--accent);text-align:left}.cricket .points-row td{border-bottom:none;font-weight:700;color:var(--accent2)}.sim{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:12px 14px}.sim .hint{margin:0 0 10px}.sim-grid{display:grid;grid-template-columns:34px repeat(4,1fr);gap:4px;max-height:300px;overflow:auto;padding-right:4px}.sim-grid .n{align-self:center;font-family:var(--font-display);color:var(--accent);font-size:15px;letter-spacing:1px}.sim-grid .bull-n{font-size:11px}.sim-grid button.in{color:var(--accent2)}.sim-grid button.out{color:var(--blue)}.sim-grid button{appearance:none;border:1px solid var(--line);background:var(--panel2);color:var(--text);border-radius:7px;padding:6px 0;font-size:12px;font-weight:700;cursor:pointer}.sim-grid button:hover{border-color:var(--accent);color:var(--accent)}.sim-grid button:active{transform:scale(.94)}.hitlog{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:12px 14px;min-height:120px;max-height:640px;display:flex;flex-direction:column}.hl-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.unk-badge{color:var(--red);font-size:11px;font-weight:700;border:1px solid var(--red);padding:2px 9px;border-radius:999px;white-space:nowrap}.hl-list{max-height:180px}.hitlog ul{list-style:none;margin:0;padding:0;overflow:auto}.hitlog li{display:flex;gap:8px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11px;color:var(--muted);padding:3px 0;border-bottom:1px dashed rgba(42,51,65,.6);line-height:1.5}.hitlog li time{flex:none;opacity:.6}.hitlog li.hit{color:var(--accent2)}.hitlog li.unknown{color:var(--accent)}.hitlog li.err{color:var(--red)}.hitlog .empty{color:var(--muted);font-size:12px}.seg-values{pointer-events:none}.seg-values text{font-family:var(--font-body);font-size:2.5px;font-weight:700}.seg-values .on-dark{fill:#aeb8c6}.seg-values .on-cream{fill:#45433a}.seg-values .on-red{fill:#ffe0da}.seg-values .on-blue{fill:#d8ecff}.toasts{position:fixed;top:76px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:8px;z-index:60;pointer-events:none}.toast{padding:10px 26px;border-radius:999px;font-family:var(--font-display);font-size:21px;letter-spacing:2px;background:#1a2029f2;border:1px solid var(--line);color:var(--text);box-shadow:0 10px 30px #0006;cursor:pointer}.toast-x{margin-left:12px;font-size:12px;opacity:.5;font-family:var(--font-body)}.toast.bust{color:var(--red);border-color:var(--red)}.toast.win{color:var(--accent2);border-color:var(--accent2)}.toast-enter-active,.toast-leave-active{transition:all .25s ease}.toast-enter-from,.toast-leave-to{opacity:0;transform:translateY(-10px) scale(.9)}.overlay{position:fixed;inset:0;background:#080a0eb8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:grid;place-items:center;z-index:50;padding:20px}.overlay .panel{background:var(--panel);border:1px solid var(--line);border-radius:22px;padding:34px 44px;width:min(620px,100%);text-align:center;box-shadow:0 30px 80px #0000008c}.crown{font-size:52px}.overlay h2{font-family:var(--font-display);font-size:34px;letter-spacing:2px;color:var(--accent);margin:8px 0 22px}.overlay table{width:100%;border-collapse:collapse;margin-bottom:26px}.overlay th,.overlay td{padding:8px 10px;border-bottom:1px solid var(--line);font-size:13px}.overlay th{color:var(--accent2);font-family:var(--font-display);letter-spacing:1px;font-size:16px}.overlay td.k{text-align:left;color:var(--muted)}.overlay .actions{display:flex;justify-content:center;gap:12px}.last-result{display:flex;align-items:center;gap:12px;background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:6px 8px 6px 18px;font-size:13px}.last-result.bust{border-color:var(--red)}.lr-player{font-weight:700;color:var(--accent2)}.lr-darts{font-family:var(--font-display);font-size:18px;letter-spacing:1px}.lr-pts{font-weight:700;color:var(--accent)}.last-result.bust .lr-pts{color:var(--red)}.lr-x{appearance:none;border:none;background:transparent;color:var(--muted);cursor:pointer;font-size:13px;padding:4px 10px;border-radius:50%}.lr-x:hover{color:var(--text)}.diag{border-top:1px solid var(--line);margin-top:12px;padding-top:10px}.diag-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.diag-check{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted);cursor:pointer;white-space:nowrap}.diag-check input{accent-color:var(--accent)}.unk-list{list-style:none;margin:8px 0;padding:0;max-height:130px;overflow:auto}.unk-list li{display:flex;align-items:baseline;gap:8px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11px;padding:2px 0}.unk-list code{color:var(--red)}.unk-list .asc{color:var(--muted)}.unk-list .cnt{margin-left:auto;color:var(--accent);font-weight:700}.hitlog textarea{width:100%;background:#0c0f14;color:var(--muted);border:1px solid var(--line);border-radius:8px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:10.5px;line-height:1.55;padding:8px;resize:vertical}.diag-actions{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap}.settings-overlay .settings-panel{text-align:left;width:min(660px,100%);max-height:calc(100vh - 60px);overflow:auto;padding:24px 28px}.sp-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.sp-head h2{font-family:var(--font-display);letter-spacing:2px;color:var(--accent);margin:0;font-size:28px}.sp-block{border-top:1px solid var(--line);padding:16px 0}.sp-block h3{margin-bottom:12px}.set-row{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.set-row.between{flex-direction:row;align-items:center;justify-content:space-between}.set-label{font-size:13px;font-weight:600;color:var(--text)}.seg-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px}.seg-card{appearance:none;border:1px solid var(--line);background:var(--panel2);color:var(--text);border-radius:10px;padding:10px 12px;cursor:pointer;display:flex;flex-direction:column;gap:2px;text-align:left}.seg-card:hover{border-color:#3a4759}.seg-card.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset}.seg-card .t{font-weight:700;font-size:13px}.seg-card .d{font-size:11px;color:var(--muted)}.seg-pill-row{display:flex;gap:6px;flex-wrap:wrap}.seg-pill{appearance:none;border:1px solid var(--line);background:var(--panel2);color:var(--muted);border-radius:999px;padding:7px 16px;font-size:12.5px;font-weight:700;cursor:pointer}.seg-pill.on{background:var(--accent);border-color:var(--accent);color:#241703}.sp-vol{display:flex;align-items:center;gap:8px}.sp-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;border-top:1px solid var(--line);padding-top:12px;margin-top:4px}.setup-gear{position:fixed;top:14px;right:16px;z-index:30;opacity:1}@media(max-width:1180px){.game-screen{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start}.game-screen.board-right{grid-template-areas:"players board" "side board"}.game-screen.board-left{grid-template-areas:"board players" "board side"}.board-area{grid-area:board}.col.players{grid-area:players;position:sticky;top:70px;max-height:calc(100vh - 90px);overflow:auto}.col.side{grid-area:side}.dartboard{width:min(42vw,60vh,500px)}.turn-row{max-width:none}.brand .game-name{display:none}}@media(max-width:700px){.latency{display:none}.vol-slider{width:64px}.vol-pct{min-width:0}.game-screen.board-right,.game-screen.board-left{grid-template-columns:1fr;grid-template-areas:"board" "players" "side"}.col.players{position:static;max-height:none;overflow:visible}.dartboard{width:min(82vw,460px)}}
