:root{--bg:#0b1020;--card:#151c31;--text:#f5f7fb;--muted:#9aa6bf;--line:#2a3657;--accent:#6ee7b7;--danger:#fb7185}*{box-sizing:border-box}body{margin:0;font-family:Inter,system-ui,Arial;background:#f4f6fa;color:#1b2438}a{color:inherit;text-decoration:none}.topbar{background:var(--bg);color:white;padding:16px 0}.wrap{width:min(1180px,94%);margin:auto}.nav{display:flex;gap:14px;align-items:center;justify-content:space-between}.nav .links{display:flex;gap:12px;flex-wrap:wrap}.brand{font-weight:800;font-size:20px}.card{background:white;border:1px solid #e4e8f0;border-radius:14px;padding:18px;margin:16px 0;box-shadow:0 5px 20px rgba(15,23,42,.05)}.grid{display:grid;gap:16px}.grid-2{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.grid-3{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.btn{display:inline-block;border:0;border-radius:10px;padding:10px 14px;background:#18223b;color:white;cursor:pointer;font-weight:650}.btn.alt{background:#e8edf7;color:#17213a}.btn.good{background:#067a57}.btn.danger{background:#be123c}.btn.sm{padding:7px 10px;font-size:13px}input,select{width:100%;padding:10px 12px;border:1px solid #cfd7e6;border-radius:9px;background:white}label{font-weight:650;font-size:14px;display:block;margin:9px 0 5px}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse}th,td{padding:10px;border-bottom:1px solid #e6eaf1;text-align:left;white-space:nowrap}th{font-size:12px;text-transform:uppercase;color:#667085}.badge{padding:4px 8px;border-radius:999px;background:#eef2ff;font-size:12px}.notice{padding:12px 14px;border-radius:10px;background:#ecfdf5;color:#065f46;margin:12px 0}.error{background:#fff1f2;color:#9f1239}.scoreboard{background:#0b1020;color:white;border-radius:18px;padding:22px}.score-head{display:grid;grid-template-columns:1fr auto 1fr;gap:14px;align-items:center;text-align:center}.team-name{font-size:24px;font-weight:800}.sets-score{font-size:42px;font-weight:900}.points-score{font-size:72px;line-height:1;font-weight:900;margin:18px 0}.live-dot{display:inline-block;width:9px;height:9px;background:#ef4444;border-radius:50%;margin-right:6px;animation:pulse 1s infinite}@keyframes pulse{50%{opacity:.35}}.point-controls{display:grid;grid-template-columns:1fr 1fr;gap:18px}.bracket{display:flex;gap:36px;overflow:auto;padding:20px 2px;align-items:stretch}.round{min-width:240px;display:flex;flex-direction:column;justify-content:space-around;gap:22px}.round h3{text-align:center}.match-card{background:white;border:1px solid #dce3ef;border-radius:12px;padding:10px;box-shadow:0 4px 14px rgba(15,23,42,.05)}.match-team{display:flex;justify-content:space-between;padding:7px 5px;border-bottom:1px solid #edf0f5}.match-team:last-child{border-bottom:0}.winner{font-weight:800;color:#047857}.muted{color:#667085}.actions{display:flex;gap:8px;flex-wrap:wrap}.hero{padding:30px 0}.hero h1{font-size:38px;margin:0 0 8px}@media(max-width:700px){.points-score{font-size:48px}.team-name{font-size:18px}.score-head{grid-template-columns:1fr}.point-controls{grid-template-columns:1fr}.hero h1{font-size:30px}}

.court-badge{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:8px 14px;border:2px solid #a5b4fc;border-radius:12px;background:#eef2ff;color:#312e81;font-size:16px;font-weight:800;line-height:1.25;white-space:nowrap}
.court-badge small{font-size:11px;font-weight:650}
.court-badge.court-live{background:#d1fae5;border-color:#34d399;color:#065f46}
.court-badge.court-unknown{background:#f1f5f9;border-color:#cbd5e1;color:#475569}
.court-banner{text-align:center;margin-bottom:18px}
.court-badge-large{font-size:clamp(24px,5vw,36px);padding:12px 28px;border-radius:16px}
.court-badge-large small{font-size:13px}
.court-next{margin:10px 0}
.games-table tbody tr:nth-child(odd){background:#fff}
.games-table tbody tr:nth-child(even){background:#edf2f8}
.games-table tbody tr:hover{background:#e0e9f5}
.next-game .next-opponent{display:flex;flex-direction:column;gap:4px;margin:12px 0}
.next-game .next-opponent>span,.next-match-time>span:first-child{font-size:12px;color:#475569}
.next-game .next-opponent>strong{font-size:22px;line-height:1.25;color:#172554;overflow-wrap:anywhere}
.next-match-details{display:flex;align-items:center;flex-wrap:wrap;gap:14px;margin:12px 0}
.next-game .next-court-number{font-size:28px;line-height:1.1}
.next-match-time{display:flex;flex-direction:column;gap:4px;min-width:0}
.next-match-time>strong{font-size:18px;color:#172554;font-variant-numeric:tabular-nums}
.next-match-time>small{font-size:11px;color:#475569}
.next-game .next-opponent{flex-direction:row;align-items:baseline;flex-wrap:wrap;column-gap:6px}
.next-match-details .court-badge{flex-direction:row;align-items:baseline;gap:6px}
.next-match-time{flex-direction:row;align-items:baseline;flex-wrap:wrap;column-gap:6px}
.next-match-time>small{flex-basis:100%}
.match-winner{display:inline-flex;align-items:center;gap:8px;padding:6px 9px;border-radius:8px;background:#d1fae5;color:#065f46;font-weight:800}
.winner-label{display:inline-block;margin:4px 6px;padding:3px 7px;border-radius:6px;background:#d1fae5;color:#065f46;font-size:12px;font-weight:800;line-height:1.4}
.scoreboard .score-winner{border:2px solid #34d399;border-radius:14px;background:#064e3b;padding:12px}

.swap-dialog{width:min(640px,calc(100% - 24px));max-height:85vh;max-height:85dvh;padding:24px;border:1px solid #dce3ef;border-radius:16px;color:#1b2438;background:#fff;box-shadow:0 24px 70px rgba(0,0,0,.3);overflow-y:auto}
.swap-dialog::backdrop{background:rgba(11,16,32,.65)}
.swap-dialog-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.swap-dialog-heading h2{margin:0;font-size:22px;overflow-wrap:anywhere}
.swap-player-list{display:grid;gap:8px;margin-top:16px}
.swap-player-list .btn{text-align:left;white-space:normal;overflow-wrap:anywhere;padding:12px}