:root{--team-a: #15a08e;--team-b: #f0743a;--bg: #0a1a24;--ink: #ffffff;--panel: #122e3a}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}html,body{margin:0;height:100%;overflow:hidden;background:var(--bg);color:var(--ink);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}#app{position:relative;height:100vh;height:100dvh;overflow:hidden}svg{display:block}.court{height:100%;display:flex}.half{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;transition:filter .1s}.half:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(180deg,#ffffff29,#fff0 45%,#0000002e);pointer-events:none}.half:active{filter:brightness(1.12)}.half-tag{position:absolute;top:3.5vh;font-size:3vh;font-weight:800;letter-spacing:.12em;opacity:.9;text-shadow:0 2px 8px rgba(0,0,0,.3)}.serve{position:absolute;bottom:5vh;display:flex;flex-direction:column;align-items:center;gap:5px;background:none;border:none;color:var(--ink);cursor:pointer;padding:8px;opacity:.28;filter:grayscale(.4);transition:opacity .15s,transform .15s,filter .15s}.half.left .serve{right:4vw}.half.right .serve{left:4vw}.serve.on{opacity:1;filter:none;transform:scale(1.08)}.serve .ball{position:relative;width:9vh;height:9vh;border-radius:50%;background:radial-gradient(circle at 35% 30%,#eaf65a,#aacb1c 82%);box-shadow:0 3px 12px #0006;overflow:hidden}.serve .ball:after{content:"";position:absolute;top:-22%;bottom:-22%;left:50%;width:58%;transform:translate(-50%);border-radius:50%;border:3px solid rgba(255,255,255,.95)}.serve small{font-size:1.8vh;font-weight:800;letter-spacing:.14em;visibility:hidden}.serve.on small{visibility:visible}@media (orientation: landscape){.serve{bottom:4vh}.serve .ball{width:11vh;height:11vh}}.points{font-size:min(26vh,34vw);font-weight:900;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-.02em;text-shadow:0 6px 24px rgba(0,0,0,.4);max-width:92%;overflow:hidden}@media (orientation: landscape){.points{font-size:min(58vh,42vw)}}.half-stats{position:absolute;bottom:4vh;display:flex;gap:14px}.stat{display:flex;flex-direction:column;align-items:center;background:#00000038;padding:6px 16px;border-radius:12px;min-width:56px}.stat b{font-size:4vh;font-weight:800;line-height:1}.stat small{font-size:1.5vh;opacity:.8;letter-spacing:.08em;text-transform:uppercase}.stat.tb{justify-content:center;font-weight:800;font-size:3vh}.net{position:absolute;top:0;bottom:0;left:50%;width:3px;transform:translate(-50%);background:#ffffff59;pointer-events:none;z-index:5}.net:after{content:"";position:absolute;top:50%;left:50%;width:12vh;height:12vh;transform:translate(-50%,-50%);border:3px solid rgba(255,255,255,.25);border-radius:50%}.handle{position:absolute;top:6px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 20px 8px;background:#00000073;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-radius:20px;color:var(--ink);z-index:25;cursor:pointer;transition:transform .25s ease}.handle.open{transform:translate(-50%,78px)}.handle-top{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;opacity:.85}.handle-chev{display:flex;transition:transform .25s}.handle.open .handle-chev{transform:rotate(180deg)}.gamesbug{display:flex;align-items:center;gap:20px}.gamesbug .g{font-size:12vh;font-weight:900;line-height:1;font-variant-numeric:tabular-nums;min-width:.7em;text-align:center;color:#ffd60a;text-shadow:0 0 16px rgba(255,214,10,.55),0 2px 8px rgba(0,0,0,.5)}.gamesbug .g-label{font-size:12px;font-weight:800;letter-spacing:.12em;color:#ffd60a;opacity:.85}@media (orientation: landscape){.gamesbug .g{font-size:21vh}}.topbar{position:absolute;top:0;left:0;right:0;display:flex;justify-content:space-around;align-items:center;padding:10px 8px;background:#08141cf5;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 4px 20px #0006;transform:translateY(-110%);transition:transform .25s ease;z-index:24}.topbar.open{transform:translateY(0)}.topbar button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:none;color:var(--ink);display:flex;flex-direction:column;align-items:center;gap:3px;font-size:11px;font-weight:600;padding:6px 10px;border-radius:10px;cursor:pointer}.topbar button:active{background:#ffffff1f}.topbar button.off{opacity:.45}.winner-banner{position:absolute;top:0;right:0;bottom:0;left:0;display:none;align-items:center;justify-content:center;flex-direction:column;gap:18px;background:#000000c7;z-index:30;text-align:center;padding:24px}.winner-banner.show{display:flex}.trophy{color:#ffd34d}.winner-banner h2{font-size:8vh;margin:0}.banner-sub{font-size:5vh;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:.06em;opacity:.9}.banner-btn{display:flex;align-items:center;gap:10px;font-size:20px;padding:14px 28px;border:none;border-radius:12px;font-weight:700;background:#fff;color:var(--bg);cursor:pointer}#start-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 30%,#143845,var(--bg));z-index:50;padding:24px;text-align:center}#start-overlay.hidden{display:none}.start-card h1{font-size:30px;margin-bottom:8px}.start-card p{opacity:.8;margin-bottom:24px}#start-btn{font-size:24px;padding:16px 44px;border:none;border-radius:14px;font-weight:800;background:var(--team-a);color:#fff;cursor:pointer}#settings,#health{position:fixed;top:0;right:0;bottom:0;left:0;display:none;align-items:center;justify-content:center;background:#000000a6;z-index:40;padding:16px}#settings.show,#health.show{display:flex}#health{z-index:42}.settings-card{background:var(--panel);border-radius:18px;padding:18px 20px;width:min(460px,100%);max-height:92vh;overflow:auto}.settings-header{display:flex;align-items:center;justify-content:space-between}.settings-header h2{margin:0}.icon-only{background:none;border:none;color:var(--ink);cursor:pointer;padding:6px;opacity:.8}.settings-card h3{margin:20px 0 8px;font-size:13px;opacity:.6;text-transform:uppercase;letter-spacing:.06em}.option-row{display:flex;align-items:center;gap:12px;padding:13px;border-radius:10px;background:#ffffff0d;margin-bottom:7px;cursor:pointer;font-size:16px}.option-row input[type=radio],.option-row input[type=checkbox]{width:20px;height:20px;accent-color:var(--team-a);flex:none}.option-label{flex:1}.voice-id{opacity:.5;font-size:12px}.team-row{display:flex;flex-direction:column;gap:8px;padding:12px 13px;border-radius:10px;background:#ffffff0d;margin-bottom:8px}.team-label{font-weight:800;font-size:13px;opacity:.7;letter-spacing:.06em}.team-input{width:100%;min-width:0;box-sizing:border-box;padding:12px;border-radius:8px;border:1px solid rgba(255,255,255,.2);background:#00000047;color:var(--ink);font-size:16px}.wide-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:12px;margin-top:4px;border:1px solid rgba(255,255,255,.2);border-radius:10px;background:#ffffff0f;color:var(--ink);font-size:15px;font-weight:600;cursor:pointer}.settings-actions{display:flex;gap:10px;margin-top:20px}.settings-actions button{flex:1;padding:14px;border:none;border-radius:10px;font-size:16px;font-weight:700;cursor:pointer;background:#ffffff1f;color:var(--ink)}.settings-actions button.primary{background:var(--team-a)}.note{font-size:13px;opacity:.65;margin:8px 0 0;line-height:1.45}.telao-code{text-align:center;font-size:34px;font-weight:900;letter-spacing:.35em;padding:12px 0 12px .35em;border-radius:10px;background:#ffffff14;border:1px dashed rgba(255,255,255,.25);margin:8px 0;-webkit-user-select:all;user-select:all}.telao-url{font-size:13px;text-align:center;opacity:.7;word-break:break-all;margin:0 0 8px;-webkit-user-select:all;user-select:all}.remote-status{position:fixed;bottom:10px;display:flex;flex-wrap:wrap;gap:6px;z-index:30;pointer-events:none;max-width:46vw}.remote-status.left{left:10px;justify-content:flex-start}.remote-status.right{right:10px;justify-content:flex-end}.rs-item{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:#fff;background:#00000073;border-radius:999px;padding:4px 10px;max-width:40vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rs-item i{width:9px;height:9px;border-radius:50%;flex:none}.rs-item.on i{background:#35d07f;box-shadow:0 0 8px #35d07fe6}.rs-item.off i{background:#e5484d;box-shadow:0 0 8px #e5484de6;animation:rs-blink 1s steps(2,start) infinite}@keyframes rs-blink{50%{opacity:.35}}#tv .remote-status{bottom:6.5vh}#tv .remote-status.left{left:1.5vw}#tv .remote-status.right{right:1.5vw}#tv .rs-item{font-size:clamp(12px,1.6vw,22px);padding:.5vh 1.2vw}#tv .rs-item i{width:.7em;height:.7em}.health-card{background:#ffffff0d;border-radius:10px;padding:13px;margin-bottom:7px}.health-title{display:flex;align-items:center;gap:8px}.health-dot{width:10px;height:10px;border-radius:50%;flex:none}.health-dot.on{background:#35d07f;box-shadow:0 0 6px #35d07fb3}.health-dot.off{background:#e5484d;box-shadow:0 0 6px #e5484db3}.health-name{flex:1;font-weight:700;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.health-status{font-size:12px;opacity:.65;flex:none}.health-metrics{display:flex;gap:14px;margin-top:10px}.health-metric{flex:1}.health-metric-label{font-size:11px;text-transform:uppercase;letter-spacing:.06em;opacity:.55;margin-bottom:4px}.health-metric-value{display:flex;align-items:baseline;gap:8px;font-size:15px;font-weight:600}.health-metric-value small{font-size:11px;font-weight:400;opacity:.55}.health-bars{display:inline-flex;align-items:flex-end;gap:2px;height:14px}.health-bars i{width:4px;border-radius:1px;background:#ffffff2e}.health-bars i.b1{height:5px}.health-bars i.b2{height:8px}.health-bars i.b3{height:11px}.health-bars i.b4{height:14px}.health-bars i.on{background:var(--team-a)}.health-batt.good{color:#35d07f}.health-batt.mid{color:#f5a524}.health-batt.bad{color:#e5484d}.health-log{max-height:220px;overflow:auto;border-radius:10px;background:#00000040;padding:6px 10px;font-size:13px;line-height:1.5}.health-log-row{display:flex;gap:10px;padding:3px 0;border-bottom:1px solid rgba(255,255,255,.06)}.health-log-row:last-child{border-bottom:none}.health-log-time{opacity:.5;flex:none;font-variant-numeric:tabular-nums}.health-log-row.disconnect .health-log-text{color:#ff8589}.health-log-row.connect .health-log-text{color:#7fe0ac}.confirm-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#0009;z-index:60;padding:24px}.confirm-card{background:var(--panel);border-radius:16px;padding:22px;width:min(380px,100%);text-align:center}.confirm-card p{font-size:17px;margin:0 0 20px;line-height:1.4}.confirm-actions{display:flex;gap:10px}.confirm-actions button{flex:1;padding:14px;border:none;border-radius:10px;font-size:16px;font-weight:700;cursor:pointer;background:#ffffff24;color:var(--ink)}.confirm-actions button.danger{background:#e0463b}.calibrate-overlay{z-index:70}.calibrate-title{margin:0 0 12px;font-size:20px}.calibrate-step{font-size:18px;margin:0 0 6px;line-height:1.5}.calibrate-team{display:inline-block;margin-top:4px;font-size:22px;font-weight:800;color:var(--team-a)}.calibrate-hint{margin-bottom:18px}.calibrate-card.flash{outline:3px solid var(--team-a);transition:outline .1s}.edit-overlay{z-index:70}.edit-card{text-align:left;width:min(440px,100%)}.edit-title{margin:0 0 14px;font-size:20px;text-align:center}.edit-head{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;margin-bottom:6px}.edit-teamname{font-size:14px;font-weight:800;text-align:center;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.edit-teamname.a{color:var(--team-a)}.edit-teamname.b{color:var(--team-b)}.edit-body{display:flex;flex-direction:column;gap:12px;margin-bottom:4px}.edit-row{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px}.edit-label{font-size:13px;font-weight:700;opacity:.7;text-transform:uppercase;text-align:center;min-width:56px}.edit-stepper{display:flex;align-items:center;justify-content:center;gap:6px}.edit-step{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;width:40px;height:40px;border-radius:50%;background:#ffffff1f;color:var(--ink);display:flex;align-items:center;justify-content:center;cursor:pointer}.edit-step:active{background:#ffffff42}.edit-value{min-width:40px;text-align:center;font-size:24px;font-weight:800;font-variant-numeric:tabular-nums}
