:root{--bg: #f3f6f1;--surface: #ffffff;--ink: #10231b;--muted: #5b6b63;--line: #dfe6e0;--brand: #0f3d2e;--lime: #c6f432;--live: #e11d48;--ok: #15803d;--warn: #b45309;--radius: 14px;--shadow: 0 1px 2px rgb(16 35 27 / 6%), 0 4px 14px rgb(16 35 27 / 6%);color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #0b1612;--surface: #13221c;--ink: #eef5f0;--muted: #9db0a6;--line: #23362e;--brand: #c6f432;--shadow: none;color-scheme:dark}}*{box-sizing:border-box}html,body{margin:0}body{background:var(--bg);color:var(--ink);font-family:Be Vietnam Pro,system-ui,-apple-system,sans-serif;font-size:16px;line-height:1.45;-webkit-tap-highlight-color:transparent}a{color:inherit}h2{font-size:1.15rem;margin:0 0 10px;display:flex;gap:8px;align-items:center}h3{font-size:1rem;margin:0 0 10px}code{background:var(--line);padding:1px 5px;border-radius:4px}.num{font-variant-numeric:tabular-nums}.muted{color:var(--muted)}.small{font-size:.82rem}.strong{font-weight:800}.warn{color:var(--warn);font-weight:600}.nowrap{white-space:nowrap}.pos{color:var(--ok)}.neg{color:var(--live)}.eyebrow{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600}.empty{padding:48px 16px;text-align:center;color:var(--muted)}.stack>*+*{margin-top:22px}.row{display:flex;gap:8px;align-items:center;margin-top:8px}.row-between{display:flex;justify-content:space-between;align-items:center}.grow{flex:1;min-width:0}.app{min-height:100dvh;padding-bottom:calc(72px + env(safe-area-inset-bottom))}.topbar{position:sticky;top:0;z-index:10;display:flex;justify-content:space-between;align-items:center;padding:10px 16px;padding-top:calc(10px + env(safe-area-inset-top));background:#0f3d2e;color:#fff}.brand{font-weight:800;letter-spacing:.04em;text-decoration:none}.brand span{color:var(--lime)}.top-right{display:flex;gap:6px}.content{max-width:960px;margin:0 auto;padding:16px}.tabbar{position:fixed;bottom:0;left:0;right:0;z-index:10;display:grid;grid-template-columns:repeat(5,1fr);background:var(--surface);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom)}.tabbar a{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 0 10px;font-size:.72rem;font-weight:600;text-decoration:none;color:var(--muted)}.tabbar a span{font-size:1.15rem}.tabbar a.active{color:var(--ink);box-shadow:inset 0 3px 0 var(--brand)}.sync{font-size:.72rem;font-weight:700;padding:3px 9px;border-radius:99px;background:#ffffff24;white-space:nowrap}.sync.ok:before{content:"● ";color:var(--lime)}.sync.wait{background:#fbbf24;color:#3b2a00}.sync.off,.sync.err{background:#e11d48;color:#fff}.sync.admin{background:var(--lime);color:#10231b}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;border:1px solid var(--line)}.card.flush{padding:0;overflow:hidden}.card+.card{margin-top:12px}.btn{font:inherit;font-weight:700;border:0;border-radius:12px;padding:12px 16px;cursor:pointer;min-height:48px;background:var(--line);color:var(--ink)}.btn.primary{background:#0f3d2e;color:#fff}.btn.ghost{background:transparent;border:1px solid var(--line)}.btn.danger{background:transparent;color:var(--live);border:1px solid currentColor}.btn.small{min-height:36px;padding:6px 10px;font-size:.85rem}.btn:disabled{opacity:.45;cursor:not-allowed}.input{font:inherit;width:100%;min-width:0;padding:10px 12px;border-radius:10px;border:1px solid var(--line);background:var(--bg);color:var(--ink);min-height:44px}.input.big{font-size:1.6rem;text-align:center;letter-spacing:.3em}input[type=color]{width:44px;height:44px;border:0;padding:0;background:none;flex:none}.pill{font-size:.7rem;font-weight:700;padding:2px 8px;border-radius:99px;white-space:nowrap;background:var(--line);color:var(--muted)}.pill.live{background:#ffe4e9;color:var(--live)}.pill.done{background:#dcfce7;color:var(--ok)}.chip{display:inline-flex;align-items:center;gap:6px;font-weight:600}.chip.ghost{color:var(--muted);font-style:italic;font-weight:400}.dot{width:10px;height:10px;border-radius:50%;flex:none}.hero{background:#0f3d2e;color:#fff;border-radius:var(--radius);padding:18px 16px}.hero-title{font-size:1.5rem;font-weight:800}.hero-sub{opacity:.85;font-size:.9rem}.live-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.live-card{display:block;text-decoration:none;background:var(--surface);border:2px solid var(--live);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow)}.live-line{margin-top:8px;display:grid;gap:8px}.live-team{display:flex;align-items:center;gap:10px}.live-team .bar{width:6px;align-self:stretch;border-radius:3px}.lt-name{flex:1;font-weight:700}.lt-score{font-size:2.2rem;font-weight:800;line-height:1}.slot-time{padding:10px 16px 4px;font-weight:800;background:var(--bg);border-top:1px solid var(--line)}.slot-note{padding:10px 16px;color:var(--muted);font-size:.88rem;border-top:1px solid var(--line);background:var(--bg)}.stage-label{padding:6px 16px 0;font-size:.75rem;font-weight:700;color:var(--muted)}.mrow{display:grid;grid-template-columns:52px 1fr auto auto;gap:10px;align-items:center;padding:12px 16px;text-decoration:none;border-top:1px solid var(--line);min-height:64px}.card .mrow:first-of-type{border-top:0}.mrow .court{font-size:.75rem;color:var(--muted);font-weight:700}.mteams{display:grid;gap:2px;min-width:0}.mteams .w{font-weight:800}.mteams .w .chip:after{content:" ✓";color:var(--ok)}.mscore{font-weight:800;font-size:1.1rem}.mrow.live{background:#fff5f7}@media(prefers-color-scheme:dark){.mrow.live{background:#2a1219}}.match-head{display:flex;gap:10px;align-items:center;margin-bottom:12px}.back{font-size:2rem;text-decoration:none;line-height:1;padding:0 8px 4px 0}.match-title{font-weight:800;font-size:1.15rem}.vs{color:var(--muted);font-weight:400}.progress{display:flex;gap:16px;justify-content:center;align-items:center;padding:8px;font-size:.95rem;flex-wrap:wrap}.dots{display:inline-flex;gap:5px;align-items:center}.dots i{width:12px;height:12px;border-radius:50%;border:2px solid var(--muted);display:inline-block}.dots i:first-child{margin-left:4px}.dots i.on{background:var(--ink);border-color:var(--ink)}.dots i.now{border-color:var(--live);box-shadow:0 0 0 3px #e11d4840}.board{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:4px}.side{position:relative;font:inherit;border:0;border-radius:18px;padding:16px 10px 20px;display:flex;flex-direction:column;align-items:center;gap:2px;min-height:260px;justify-content:center;-webkit-user-select:none;user-select:none;touch-action:manipulation;transition:transform .06s}.side:disabled{cursor:default;opacity:1}.board.compact .side{min-height:0;padding:10px}.board.compact .side-score{font-size:3.2rem}.board.compact .side-pair{display:none}.side.tappable{cursor:pointer;box-shadow:0 6px #00000038}.side.tappable:active{transform:translateY(4px);box-shadow:0 2px #00000038}.side.loser{filter:grayscale(.7);opacity:.6!important}.side.winner{outline:4px solid var(--lime);outline-offset:2px}.side-name{font-weight:800;font-size:1.05rem;text-align:center}.side-score{font-size:clamp(5rem,24vw,9rem);font-weight:800;line-height:1;font-variant-numeric:tabular-nums}.side-pair{font-size:.9rem;font-weight:600;opacity:.92;text-align:center;min-height:1.3em}.side-hint{position:absolute;bottom:6px;font-size:.7rem;opacity:.75;font-weight:600}.badge-gp{position:absolute;top:8px;background:var(--lime);color:#10231b;font-size:.7rem;font-weight:800;padding:2px 8px;border-radius:99px}.banner{border-radius:var(--radius);padding:12px 16px;font-weight:800;text-align:center;margin-bottom:10px}.banner.win{background:var(--lime);color:#10231b;font-size:1.15rem}.controls{display:flex;gap:10px;align-items:center;margin:14px 0;flex-wrap:wrap}.controls .btn{flex:1}.picker{margin-top:14px;border:2px solid #fbbf24}.picker-head{margin-bottom:12px}.picker-msg{font-weight:800;font-size:1.05rem;margin-top:2px}.pick-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.pick-col{display:grid;gap:8px;align-content:start}.pick-team{font-weight:800;border-left:5px solid;padding-left:8px;margin-bottom:4px}.pick-team .ok{color:var(--ok)}.pick-wait{font-size:.8rem;color:var(--warn);font-weight:600}.pair-btn{font:inherit;text-align:left;border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:10px;padding:8px 10px;min-height:48px;display:grid;grid-template-columns:auto 1fr;column-gap:8px;align-items:center;cursor:pointer}.pair-btn .pn{font-weight:800;font-size:.8rem;color:var(--muted)}.pair-btn .pl{font-weight:600;font-size:.9rem}.pair-btn .tag{grid-column:2;font-size:.7rem;color:var(--muted)}.pair-btn.used .pl{text-decoration:line-through}.pair-btn:disabled{cursor:not-allowed;opacity:.5}.pair-btn.chosen{opacity:1;border-color:transparent}.pair-btn.chosen .pn{color:inherit}.tbl{width:100%;border-collapse:collapse;font-size:.9rem}.tbl th,.tbl td{padding:8px 6px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}.tbl th{font-size:.75rem;color:var(--muted);font-weight:700}.tbl.hist .pts{color:var(--muted);font-size:.8rem;white-space:nowrap}.standings th:first-child,.standings td:first-child{padding-left:16px}.standings td.num,.standings th:nth-child(n+3){text-align:center}.standings .rank{font-weight:800;font-size:1.1rem}.rules{margin:8px 2px 12px}.stat-row{display:flex;justify-content:space-between;gap:8px;font-size:.85rem;padding:4px 0;border-bottom:1px dashed var(--line)}.bracket{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.bracket .card+.card{margin-top:0}.bracket .mrow{padding:10px 0 0;border:0}.team-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.team-card{border-top:6px solid}.team-grid .card+.card{margin-top:0}.players{padding-left:22px;margin:8px 0 12px;font-weight:600}.cap{background:var(--lime);color:#10231b;font-size:.65rem;font-weight:800;padding:1px 6px;border-radius:6px;vertical-align:middle}.pairs{display:grid;gap:4px;margin-top:6px}.pair-tag{font-size:.85rem}.pair-tag b{color:var(--muted);display:inline-block;width:30px}.rules-list{margin:0;padding-left:20px}.login{max-width:420px;margin:24px auto;display:grid;gap:12px}.edit-team{border-top:6px solid;padding-top:8px}.pos-n{width:18px;font-weight:800;color:var(--muted)}.cap-radio{display:flex;align-items:center;gap:2px;font-size:.75rem;font-weight:700}.move button{font:inherit;width:36px;height:40px;border-radius:8px;border:1px solid var(--line);background:var(--surface);color:var(--ink)}.move button:disabled{opacity:.3}.ko-row{flex-wrap:wrap}.ko-label{width:100%;font-weight:700;font-size:.85rem}.ko-row select{flex:1}.admin-match{border-top:1px solid var(--line);padding-top:8px}.toasts{position:fixed;left:16px;right:16px;bottom:calc(84px + env(safe-area-inset-bottom));display:grid;gap:8px;z-index:50;pointer-events:none;justify-items:center}.toast{background:#10231b;color:#fff;padding:10px 14px;border-radius:12px;font-weight:600;box-shadow:var(--shadow);max-width:480px}.toast.error{background:#be123c}.toast.ok{background:#15803d}.tv{min-height:100dvh;background:#07120e;color:#fff;padding:2vh 2vw;display:grid;grid-template-rows:auto 1fr auto;gap:2vh}.tv-head{font-weight:800;font-size:2.4vh;display:flex;gap:16px;align-items:baseline}.tv-head span{color:#9db0a6;font-weight:400}.tv-exit{margin-left:auto;font-size:1.6vh;color:#9db0a6}.tv-courts{display:grid;grid-template-columns:1fr 1fr;gap:2vw}.tv-court{display:grid;grid-template-rows:auto 1fr 1fr;gap:1.5vh}.tv-court-title{display:flex;justify-content:space-between;font-weight:800;font-size:2.2vh;color:var(--lime);gap:8px;flex-wrap:wrap}.tv-court-title span{color:#fff}.tv-team{border-radius:2vh;padding:2vh 2vw;display:flex;justify-content:space-between;align-items:center;background:#1b2b24}.tv-team.w{outline:.6vh solid var(--lime)}.tv-name{font-size:4vh;font-weight:800}.tv-pair{font-size:2.4vh;opacity:.9}.tv-score{font-size:15vh;font-weight:800;line-height:1}.tv-standings{background:#13221c;border-radius:2vh;padding:0 1vw;font-size:2vh}.tv-standings .tbl{font-size:2vh}.tv-standings .tbl th,.tv-standings .tbl td{border-color:#23362e;color:#fff}@media(max-width:700px){.tv-courts{grid-template-columns:1fr}}@media(max-width:380px){.side{min-height:220px}.pick-grid{gap:8px}.pair-btn .pl{font-size:.82rem}}
