:root{--safe-area-top-js: 0px;--safe-area-right-js: 0px;--safe-area-bottom-js: 0px;--safe-area-left-js: 0px;--safe-area-top: max(env(safe-area-inset-top), var(--safe-area-top-js));--safe-area-right: max(env(safe-area-inset-right), var(--safe-area-right-js));--safe-area-bottom: max(env(safe-area-inset-bottom), var(--safe-area-bottom-js));--safe-area-left: max(env(safe-area-inset-left), var(--safe-area-left-js));--keyboard-offset: 0px;--bg: #f4f6fa;--surface: #ffffff;--surface-2: #f8fafc;--text: #0f172a;--muted: #64748b;--line: #dbe1ea;--accent: #0ea5e9;--accent-soft: #e0f2fe;--good: #16a34a;--warn: #ca8a04;--bad: #dc2626;--app-max-width: 1100px;--tabbar-height: 88px}@media (prefers-color-scheme: dark){:root{--bg: #0b1220;--surface: #111a2b;--surface-2: #0d1727;--text: #e5eaf3;--muted: #9fb0c7;--line: #22314a;--accent: #38bdf8;--accent-soft: #0e2438;--good: #22c55e;--warn: #eab308;--bad: #ef4444}}:root[data-theme=light]{--bg: #f4f6fa;--surface: #ffffff;--surface-2: #f8fafc;--text: #0f172a;--muted: #64748b;--line: #dbe1ea;--accent: #0ea5e9;--accent-soft: #e0f2fe;--good: #16a34a;--warn: #ca8a04;--bad: #dc2626}:root[data-theme=dark]{--bg: #0b1220;--surface: #111a2b;--surface-2: #0d1727;--text: #e5eaf3;--muted: #9fb0c7;--line: #22314a;--accent: #38bdf8;--accent-soft: #0e2438;--good: #22c55e;--warn: #eab308;--bad: #ef4444}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;overscroll-behavior-y:contain;background:var(--bg)}body{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;min-height:100svh;min-height:100dvh;padding-left:var(--safe-area-left);padding-right:var(--safe-area-right);overscroll-behavior-y:contain;overflow-x:hidden}.app{min-height:100vh;min-height:100svh;min-height:100dvh;display:flex;flex-direction:column}.tabbar-scroll-spacer{height:calc(var(--tabbar-height) + var(--safe-area-bottom));flex-shrink:0}@media (min-width: 900px){.tabbar-scroll-spacer{display:none}}.dev-api-banner{margin:8px 12px 0;border:1px solid var(--line);background:var(--surface-2);color:var(--muted);border-radius:8px;padding:5px 8px;font-size:11px}.topbar{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--bg) 80%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);padding:calc(10px + var(--safe-area-top)) calc(12px + var(--safe-area-right)) 10px calc(12px + var(--safe-area-left))}.title-wrap h1{margin:0;font-size:18px;line-height:1.2}.title-wrap p{margin:2px 0 0;color:var(--muted);font-size:12px}.topbar-actions{margin-top:10px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.header-nav{margin:10px 0 0}.top-nav-links{margin:8px 12px 0;display:flex;gap:8px;overflow-x:auto;padding-bottom:2px}.top-nav-links button{border:1px solid var(--line);background:var(--surface);color:var(--muted);border-radius:999px;min-height:44px;padding:8px 14px;font-size:12px;white-space:nowrap}.top-nav-links button.active{background:var(--accent-soft);color:var(--text);border-color:color-mix(in srgb,var(--accent) 38%,var(--line))}.segmented{display:inline-flex;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--surface)}.segmented button{border:0;background:transparent;color:var(--muted);padding:8px 10px;font-size:12px;font-weight:600}.segmented button.active{background:var(--accent-soft);color:var(--text)}.icon-btn{border:1px solid var(--line);background:var(--surface);color:var(--text);border-radius:10px;min-width:44px;min-height:44px;padding:0 10px;display:inline-flex;align-items:center;justify-content:center;white-space:nowrap}.theme-select{border:1px solid var(--line);background:var(--surface);color:var(--text);border-radius:10px;min-height:44px;padding:0 8px;font-size:12px}.page{flex:1 1 auto;padding:12px;display:grid;gap:12px;max-width:var(--app-max-width);margin:0 auto;width:100%;min-width:0;min-height:0;padding-bottom:calc(16px + var(--tabbar-height) + var(--safe-area-bottom) + var(--keyboard-offset));will-change:transform;transition:transform .22s cubic-bezier(.18,.88,.2,1.06)}.page.page-pulling{transition:none}.site-footer{margin:12px auto calc(14px + var(--safe-area-bottom));max-width:var(--app-max-width);width:calc(100% - 24px);border:1px solid var(--line);border-radius:12px;background:var(--surface);padding:12px;display:grid;gap:10px}.site-footer-links{display:flex;flex-wrap:wrap;gap:8px}.site-footer-links button{border:1px solid var(--line);background:var(--surface-2);color:var(--muted);border-radius:999px;min-height:38px;padding:6px 12px;font-size:12px}.site-footer-links button.active{background:var(--accent-soft);color:var(--text);border-color:color-mix(in srgb,var(--accent) 38%,var(--line))}.site-footer-actions{display:inline-flex;align-items:center;gap:8px}.desktop-sections{display:grid;gap:12px}.insights-layout{display:grid;gap:12px;grid-template-columns:minmax(0,2fr) minmax(320px,1fr);align-items:start}.mobile-sections{display:grid;gap:12px}.card-footer-action{margin-top:12px;padding-top:10px;border-top:1px solid var(--line);display:flex;justify-content:center}.more-link-btn{border:0;background:transparent;color:var(--muted);font-size:12px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:36px;padding:2px 6px}.more-link-btn:hover{color:var(--text)}.insights-card{display:flex;flex-direction:column;min-height:0}.insights-card-body{min-height:0;overflow:hidden}.auth-card{max-width:520px;margin:0 auto}.auth-clerk-wrapper{display:flex;justify-content:center;padding:16px 0 80px}.auth-grid{display:grid;gap:10px}.auth-grid label{display:grid;gap:6px}.auth-grid span{font-size:12px;color:var(--muted)}.auth-grid input{border:1px solid var(--line);border-radius:10px;background:var(--surface-2);color:var(--text);padding:10px 12px;font-size:14px}.auth-actions{margin-top:12px}.auth-note{margin:10px 0 0}.mobile-tabbar{position:fixed;left:0;right:0;bottom:0;z-index:30;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;min-height:calc(var(--tabbar-height) + var(--safe-area-bottom));padding:8px calc(10px + var(--safe-area-right)) calc(8px + var(--safe-area-bottom)) calc(10px + var(--safe-area-left));border-top:1px solid var(--line);background:color-mix(in srgb,var(--surface) 92%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.mobile-tabbar button{border:1px solid var(--line);background:var(--surface-2);color:var(--muted);border-radius:10px;font-size:12px;font-weight:700;min-height:48px;display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:6px 4px;-webkit-tap-highlight-color:transparent}.tab-icon{font-size:14px;line-height:1}.mobile-tabbar button.active{background:var(--accent-soft);color:var(--text);border-color:color-mix(in srgb,var(--accent) 40%,var(--line))}.offline-banner{margin:10px 12px 0;border:1px solid color-mix(in srgb,var(--warn) 55%,var(--line));color:color-mix(in srgb,var(--warn) 78%,var(--text));background:color-mix(in srgb,var(--warn) 10%,transparent);border-radius:10px;padding:8px 10px;font-size:12px}.ptr-indicator{position:sticky;top:calc(var(--safe-area-top) + 2px);z-index:19;margin:0 auto;width:fit-content;max-width:calc(100% - 24px);transform:translateY(-120%);opacity:0;transition:transform .2s ease,opacity .2s ease;border:1px solid var(--line);background:var(--surface);color:var(--muted);border-radius:999px;padding:5px 10px;font-size:11px;overflow:hidden}.ptr-indicator.show{transform:translateY(6px);opacity:1}.ptr-progress{position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:left center;background:color-mix(in srgb,var(--accent) 26%,transparent);pointer-events:none}.card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px}.section-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}.section-head h2{margin:0;font-size:15px}.pill{border:1px solid var(--line);background:var(--surface-2);border-radius:999px;padding:4px 8px;font-size:11px;color:var(--muted)}.matches{display:grid;gap:8px}.match{border:1px solid var(--line);border-radius:10px;padding:10px;background:var(--surface-2);display:flex;align-items:center;justify-content:space-between}.teams{font-weight:600}.time{color:var(--muted);font-size:12px}.scheduled-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;overflow:hidden}.scheduled-card{border:1px solid var(--line);border-radius:14px;background:linear-gradient(180deg,color-mix(in srgb,var(--surface) 55%,transparent),transparent 46%),var(--surface-2);padding:12px;box-shadow:0 8px 22px #0f172a0a}.scheduled-card.clickable{cursor:pointer}.scheduled-card-live{border-color:color-mix(in srgb,var(--bad) 35%,var(--line))}.scheduled-card-final{border-color:color-mix(in srgb,var(--muted) 35%,var(--line))}.scheduled-teams{display:grid;gap:8px}.team-chip-row{display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:8px}.team-logo-wrap{width:28px;height:28px;border-radius:50%;border:1px solid var(--line);display:inline-flex;align-items:center;justify-content:center;overflow:hidden;background:#fff}.team-logo-wrap img{width:20px;height:20px;object-fit:contain}.team-logo-fallback{display:none;width:100%;height:100%;align-items:center;justify-content:center;font-size:9px;font-weight:700;color:#fff;background:var(--team-fallback, var(--line))}.team-abbr{font-size:13px}.team-score{font-weight:700;font-size:13px}.team-score-stack{display:flex;flex-direction:column;align-items:flex-end;gap:1px}.team-score-live{font-weight:700;font-size:16px;line-height:1}.team-score-proj{font-size:10px;color:var(--muted);line-height:1}.scheduled-card-top{min-height:0;margin-bottom:6px;display:flex;gap:6px}.scheduled-card-top:empty{display:none}.live-badge-inline{font-size:10px;font-weight:700;letter-spacing:.05em;color:var(--bad);background:color-mix(in srgb,var(--bad) 12%,transparent);border:1px solid color-mix(in srgb,var(--bad) 30%,transparent);border-radius:4px;padding:2px 6px}.final-badge-inline{font-size:10px;font-weight:600;color:var(--muted);background:var(--surface);border:1px solid var(--line);border-radius:4px;padding:2px 6px}.scheduled-meta{margin-top:10px;display:flex;justify-content:space-between;gap:8px;color:var(--muted);font-size:12px}.scheduled-meta-primary{font-weight:600;color:var(--text)}.scheduled-meta-link{color:var(--accent);font-weight:700}.scheduled-detail-row{margin-top:8px;border-top:1px solid color-mix(in srgb,var(--line) 78%,transparent);padding-top:10px;display:flex;flex-wrap:wrap;gap:8px;font-size:11px;color:var(--muted)}.market-pill{border:1px solid var(--line);background:color-mix(in srgb,var(--surface) 88%,var(--surface-2));border-radius:999px;padding:5px 8px;white-space:nowrap}.scheduled-detail-row .model-pick{color:var(--accent, #4a9eff);font-weight:600;border-color:color-mix(in srgb,var(--accent) 34%,var(--line));background:color-mix(in srgb,var(--accent) 10%,var(--surface))}.game-header-card{padding:14px}.game-header-teams{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px}.game-header-team{display:grid;justify-items:center;gap:6px}.game-header-team img{width:34px;height:34px;object-fit:contain}.game-header-team strong{font-size:14px}.game-header-team span{font-size:22px;font-weight:800;line-height:1}.game-header-mid{display:grid;justify-items:center;gap:4px}.match-refresh-btn{width:auto;min-width:72px;padding:0 10px;font-size:12px}.live-pill{color:color-mix(in srgb,var(--bad) 82%,var(--text));border-color:color-mix(in srgb,var(--bad) 40%,var(--line));background:color-mix(in srgb,var(--bad) 10%,transparent)}.match-tabs{width:100%}.match-tabs button{flex:1}.match-layout-grid{display:grid;gap:12px}.match-kv-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.match-kv-grid>div{border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:9px;display:grid;gap:3px}.match-kv-grid span{color:var(--muted);font-size:11px}.match-kv-grid strong{font-size:16px;line-height:1.2}.match-kv-grid small{color:var(--muted);font-size:10px}.match-player-grid{display:grid;gap:8px}.match-player-card{border:1px solid var(--line);border-radius:12px;background:var(--surface-2);padding:10px}.match-player-head{display:grid;grid-template-columns:40px minmax(0,1fr) auto;align-items:center;gap:8px}.match-player-avatar{width:40px;height:40px;border-radius:50%;overflow:hidden;border:1px solid var(--line);display:inline-flex;align-items:center;justify-content:center;background:#fff}.match-player-avatar img{width:100%;height:100%;object-fit:cover}.match-player-avatar-fallback{width:100%;height:100%;display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;color:var(--text);background:var(--accent-soft)}.match-player-meta{min-width:0;display:grid;gap:2px}.match-player-name-row{display:flex;align-items:center;gap:6px;min-width:0}.match-player-meta strong{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.match-team-badge{display:inline-flex;align-items:center;padding:1px 5px;border-radius:5px;font-size:10px;font-weight:700;letter-spacing:.04em;background:var(--accent-dim, rgba(99,102,241,.15));color:var(--accent, #818cf8);flex-shrink:0}.match-stat-grid{margin-top:8px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.match-stat-grid>div{border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:6px;display:grid;gap:2px;justify-items:center}.match-stat-grid span{color:var(--muted);font-size:10px}.match-stat-grid strong{font-size:12px}.match-box-team-totals{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:10px}.match-box-team-totals>div{border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:8px;display:flex;justify-content:space-between}.injury-list{display:flex;flex-direction:column;gap:8px}.injury-row{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--line)}.injury-row:last-child{border-bottom:none}.injury-badge{display:inline-flex;align-items:center;justify-content:center;min-width:34px;padding:2px 6px;border-radius:6px;font-size:10px;font-weight:700;letter-spacing:.04em;flex-shrink:0}.injury-badge-out{background:#dc26262e;color:#f87171}.injury-badge-gtd{background:#eab3082e;color:#facc15}.injury-name{font-size:13px;font-weight:600;color:var(--text);flex:1}.injury-reason{font-size:11px;color:var(--muted)}.h2h-list{display:flex;flex-direction:column;gap:2px}.h2h-row{display:flex;align-items:center;gap:0;padding:10px 4px;border-bottom:1px solid var(--line)}.h2h-row:last-child{border-bottom:none}.h2h-team-side{display:flex;align-items:center;gap:7px;flex:1;min-width:0}.h2h-team-side-right{justify-content:flex-end}.h2h-side-won{opacity:1}.h2h-side-lost{opacity:.38}.h2h-logo{width:34px;height:34px;object-fit:contain;flex-shrink:0}.h2h-abbr{font-size:13px;font-weight:700;letter-spacing:.03em}.h2h-w-badge{font-size:10px;font-weight:800;color:var(--accent, #4ade80);background:color-mix(in srgb,var(--accent, #4ade80) 15%,transparent);border-radius:4px;padding:1px 5px;letter-spacing:.04em;flex-shrink:0}.h2h-center{display:flex;flex-direction:column;align-items:center;gap:3px;min-width:90px;flex-shrink:0}.h2h-scores{display:flex;align-items:center;gap:5px}.h2h-score{font-size:17px;font-weight:800;color:var(--muted);min-width:28px;text-align:center;font-variant-numeric:tabular-nums}.h2h-score.h2h-score-win{color:var(--text)}.h2h-sep{color:var(--muted);font-size:13px;font-weight:400}.h2h-date{font-size:10px;color:var(--muted);text-align:center;letter-spacing:.02em}.view-toggle{display:inline-flex;gap:6px}.view-toggle button{border:1px solid var(--line);background:var(--surface-2);color:var(--muted);padding:6px 10px;border-radius:8px;font-size:12px}.view-toggle button.active{color:var(--text);background:var(--accent-soft)}.bets-filters{display:grid;gap:8px;margin-bottom:10px}.bets-filters input[type=search]{width:100%;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);color:var(--text);padding:9px 10px;font-size:13px}.stat-filter-row{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px}.stat-filter-chip{border:1px solid var(--line);background:var(--surface-2);color:var(--muted);border-radius:999px;padding:4px 9px;font-size:11px;white-space:nowrap}.stat-filter-chip.active{color:var(--text);background:var(--accent-soft);border-color:color-mix(in srgb,var(--accent) 40%,var(--line))}.edge-filter-row{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;font-size:12px;color:var(--muted)}.edge-filter-row input[type=range]{width:100%}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain}.table-wrap .skeleton-line{width:100%}.bets-table{width:100%;border-collapse:collapse;font-size:12px}.bets-table th,.bets-table td{text-align:left;border-bottom:1px solid var(--line);padding:8px 6px;white-space:nowrap}.bets-table tbody tr{cursor:pointer}.bets-grid{display:grid;grid-template-columns:1fr;gap:8px}.bets-grid-pro{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}@media (max-width: 820px){.insights-layout,.scheduled-grid,.bets-grid-pro,.match-layout-grid,.match-player-grid,.proj-controls{grid-template-columns:1fr}}.bet-card{border:1px solid var(--line);border-radius:10px;padding:10px;background:var(--surface-2)}.bet-card-pro{border:1px solid var(--line);border-radius:14px;padding:12px;background:linear-gradient(180deg,color-mix(in srgb,var(--accent-soft) 35%,transparent),transparent 42%),var(--surface-2);box-shadow:0 10px 24px #0f172a0d}.bet-card-head{display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:8px}.bet-avatar-wrap{width:38px;height:38px;border-radius:50%;overflow:hidden;border:1px solid var(--line);background:#fff;display:inline-flex;align-items:center;justify-content:center}.bet-avatar-img{width:100%;height:100%;object-fit:cover}.bet-avatar-fallback{width:100%;height:100%;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:var(--text);background:var(--accent-soft)}.bet-player-col{min-width:0}.bet-player-name{display:block;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bet-chip-row{margin-top:4px;display:flex;gap:6px}.bet-chip{border:1px solid var(--line);border-radius:999px;padding:2px 7px;font-size:10px;color:var(--muted);background:var(--surface)}.chip-over{color:color-mix(in srgb,var(--good) 80%,var(--text));border-color:color-mix(in srgb,var(--good) 40%,var(--line))}.chip-under{color:color-mix(in srgb,var(--bad) 80%,var(--text));border-color:color-mix(in srgb,var(--bad) 40%,var(--line))}.bet-metrics{margin-top:10px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.bet-metric{border:1px solid var(--line);border-radius:10px;background:color-mix(in srgb,var(--surface) 88%,var(--surface-2));padding:8px;display:grid;gap:3px}.bet-metric-label{font-size:10px;letter-spacing:.02em;color:var(--muted)}.bet-metric-value{font-size:13px;line-height:1;color:var(--text)}.bet-book-name{text-transform:capitalize}.bet-edge-row{margin-top:10px;display:grid;grid-template-columns:auto 1fr;align-items:center;gap:8px;font-size:12px}.bet-edge-value{font-weight:800;color:var(--text)}.edge-bar{height:8px;border-radius:999px;border:1px solid var(--line);background:var(--surface);overflow:hidden}.edge-fill{display:block;height:100%;border-radius:inherit;transition:width .2s ease,background-color .2s ease}.bet-card p{margin:6px 0 0;font-size:12px}.bet-top{display:flex;justify-content:space-between;align-items:center;gap:8px}.tier{color:var(--text);background:color-mix(in srgb,var(--good) 14%,transparent);border:1px solid color-mix(in srgb,var(--good) 35%,transparent);border-radius:999px;font-size:11px;padding:2px 7px}.result-badge{margin-top:8px;border-radius:10px;padding:5px 8px;font-size:11px;font-weight:700;letter-spacing:.01em}.result-hit{color:#9df8bb;border:1px solid rgba(46,204,113,.45);background:#2ecc7124}.result-miss{color:#ffb2b2;border:1px solid rgba(255,82,82,.45);background:#ff525224}.result-push,.result-void,.result-pending,.result-noline,.result-unknown{color:#ffe79e;border:1px solid rgba(255,193,7,.45);background:#ffc1071f}.results-summary-strip{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px}.results-summary-strip span{border:1px solid var(--line);border-radius:999px;padding:3px 8px;background:color-mix(in srgb,var(--surface-2) 75%,transparent);font-size:11px}.muted{color:var(--muted)}.placeholder{margin:0;padding:10px;border:1px dashed var(--line);border-radius:10px;color:var(--muted);background:var(--surface-2);font-size:13px}.error-text{margin:0;padding:10px;border:1px solid color-mix(in srgb,var(--bad) 45%,var(--line));border-radius:10px;color:var(--bad);background:color-mix(in srgb,var(--bad) 10%,transparent);font-size:13px}.empty-state{display:grid;gap:8px}.empty-state h2{margin:0;font-size:15px}.empty-state p{margin:0;color:var(--muted);font-size:13px}.proj-cards{display:grid;grid-template-columns:1fr;gap:8px}.proj-cards.hidden{display:none}.proj-controls{margin-top:10px;display:grid;grid-template-columns:1fr;gap:8px;min-width:0}.proj-search,.proj-sort{border:1px solid var(--line);border-radius:10px;background:var(--surface-2);color:var(--text);padding:10px 12px;font-size:14px;min-width:0}.proj-card{width:100%;text-align:left;border:1px solid var(--line);background:linear-gradient(180deg,color-mix(in srgb,var(--accent-soft) 32%,transparent),transparent 38%),var(--surface-2);color:var(--text);border-radius:14px;padding:14px;min-height:136px;overflow:hidden;box-sizing:border-box;box-shadow:0 10px 24px #0f172a0d}.proj-card.proj-card-out{border-color:color-mix(in srgb,var(--bad) 40%,var(--line))}.proj-card-top{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0}.proj-card-player{display:inline-flex;align-items:center;gap:10px;min-width:0}.proj-card-player-copy{min-width:0;display:grid;gap:3px}.proj-card-player strong{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.proj-card-matchup{color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.proj-main{margin-top:8px;font-size:18px;font-weight:700}.proj-main-line{font-size:13px;font-weight:600;white-space:normal;line-height:1.4;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:36px;max-width:100%;box-sizing:border-box}.proj-summary-pills{margin-top:8px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.proj-summary-pills.table{margin-top:0;grid-template-columns:repeat(4,minmax(52px,auto))}.proj-summary-pills.list{margin-top:0;grid-template-columns:repeat(2,minmax(62px,auto));justify-content:end}.proj-pill{border:1px solid var(--line);border-radius:9px;padding:5px 7px;background:color-mix(in srgb,var(--surface) 88%,var(--surface-2));display:inline-flex;align-items:center;justify-content:space-between;gap:6px;min-width:0}.proj-pill-label{font-size:10px;color:var(--muted);letter-spacing:.02em}.proj-pill-value{font-size:12px;line-height:1}.proj-pill.tone-good{border-color:color-mix(in srgb,var(--good) 40%,var(--line));background:color-mix(in srgb,var(--good) 12%,transparent)}.proj-pill.tone-warn{border-color:color-mix(in srgb,var(--warn) 45%,var(--line));background:color-mix(in srgb,var(--warn) 12%,transparent)}.proj-pill.tone-bad{border-color:color-mix(in srgb,var(--bad) 42%,var(--line));background:color-mix(in srgb,var(--bad) 12%,transparent)}.proj-sub{margin-top:4px;color:var(--muted);font-size:12px}.proj-out-note{margin-top:6px;color:color-mix(in srgb,var(--bad) 78%,#fff);font-size:12px;line-height:1.35}.proj-table-wrap{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain}.proj-table-wrap.hidden{display:none}.proj-list{display:grid;gap:8px}.proj-list.hidden{display:none}.proj-list-row{width:100%;border:1px solid var(--line);border-radius:14px;background:linear-gradient(180deg,color-mix(in srgb,var(--accent-soft) 25%,transparent),transparent 42%),var(--surface-2);color:var(--text);padding:12px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;text-align:left;box-shadow:0 8px 20px #0f172a0a}.proj-list-row.proj-list-row-out{border-color:color-mix(in srgb,var(--bad) 40%,var(--line))}.proj-list-left{display:inline-flex;align-items:center;gap:10px;min-width:0;flex:1 1 220px}.proj-list-right{display:inline-flex;align-items:center;justify-content:flex-end;flex:0 1 auto;min-width:0}.proj-list-meta{min-width:0;display:grid;gap:2px}.proj-list-meta strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.proj-list-meta span{color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.proj-table tbody tr{cursor:pointer}.proj-table td:nth-child(4){min-width:180px}.proj-table-player{display:inline-flex;align-items:center;gap:8px}.view-toggle button{min-width:32px;font-size:14px}.proj-avatar{width:34px;height:34px;border-radius:50%;overflow:hidden;border:1px solid var(--line);background:#fff;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.proj-avatar img{width:100%;height:100%;object-fit:cover}.proj-avatar-fallback{width:100%;height:100%;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:var(--text);background:var(--accent-soft)}.sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#030a188f;z-index:40;display:flex;align-items:flex-end;justify-content:center;padding:calc(var(--safe-area-top) + 8px) calc(var(--safe-area-right) + 8px) 0 calc(var(--safe-area-left) + 8px)}.ps-sheet{width:100%;max-width:700px;background:var(--surface);border-top-left-radius:18px;border-top-right-radius:18px;border:1px solid var(--line);border-bottom:0;display:flex;flex-direction:column;max-height:calc(100vh - var(--safe-area-top) - 8px);max-height:calc(100svh - var(--safe-area-top) - 8px);max-height:calc(100dvh - var(--safe-area-top) - 8px);overflow:hidden}.ps-header{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 12px;border-bottom:1px solid var(--line);flex-shrink:0}.ps-details-title{margin:0;font-size:18px;font-weight:700;color:var(--text)}.ps-close{border:1px solid var(--line);background:var(--surface-2);color:var(--muted);border-radius:8px;width:30px;height:30px;display:flex;align-items:center;justify-content:center;font-size:13px;flex-shrink:0;cursor:pointer}.ps-content{overflow-y:auto;flex:1;padding:16px 16px calc(16px + var(--safe-area-bottom) + var(--keyboard-offset));display:flex;flex-direction:column;gap:16px;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.ps-identity{display:flex;align-items:flex-start;gap:14px}.ps-avatar{width:52px;height:52px;border-radius:50%;overflow:hidden;border:2px solid var(--accent-soft);background:var(--surface-2);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.ps-avatar-lg{width:72px;height:72px}.ps-avatar img{width:100%;height:100%;object-fit:cover}.ps-avatar-fallback{width:100%;height:100%;display:inline-flex;align-items:center;justify-content:center;font-size:20px;font-weight:700;color:var(--accent);background:var(--accent-soft)}.ps-identity-info{display:flex;flex-direction:column;gap:5px;min-width:0;flex:1}.ps-player-name{margin:0;font-size:22px;font-weight:800;line-height:1.1}.ps-team-badge{display:inline-block;background:var(--accent);color:#fff;font-size:12px;font-weight:700;padding:3px 12px;border-radius:20px;align-self:flex-start}.ps-bio-row{display:flex;flex-wrap:wrap;gap:10px 18px;margin-top:2px}.ps-bio-cell{display:flex;flex-direction:column;gap:1px}.ps-bio-label{font-size:11px;color:var(--muted)}.ps-bio-val{font-size:13px;font-weight:700;color:var(--text)}.ps-season-avgs{background:var(--surface-2);border:1px solid var(--line);border-radius:14px;padding:14px 16px}.ps-section-title{margin:0 0 12px;font-size:15px;font-weight:700;color:var(--text)}.ps-avgs-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;text-align:center}.ps-avg-cell{display:flex;flex-direction:column;align-items:center;gap:4px}.ps-avg-num{font-size:24px;font-weight:800;color:var(--text);line-height:1}.ps-avg-label{font-size:11px;color:var(--muted);line-height:1.3}.ps-tabs{display:flex;gap:8px;flex-shrink:0}.ps-tab{flex:1;padding:9px 8px;font-size:12px;font-weight:600;color:var(--muted);background:var(--surface-2);border:1px solid var(--line);border-radius:24px;cursor:pointer;transition:color .15s,background .15s,border-color .15s}.ps-tab-active{background:var(--accent);color:#fff;border-color:var(--accent)}.ps-muted{color:var(--muted);font-size:13px;margin:12px 0 0}.ps-error{color:var(--bad);font-size:12px;margin:8px 0}.ps-game-table{width:100%;border-collapse:collapse;font-size:12px}.ps-game-table th{text-align:left;color:var(--muted);font-weight:500;font-size:11px;padding:0 6px 6px 0;border-bottom:1px solid var(--line)}.ps-game-table td{padding:8px 6px 8px 0;border-bottom:1px solid var(--line);color:var(--text)}.ps-game-table tr:last-child td{border-bottom:none}.ps-opp{color:var(--muted)}.ps-stat-val{font-weight:600;text-align:center}.ps-game-table th:nth-child(n+3){text-align:center}.ps-min{color:var(--muted);text-align:center}.ps-best-bet{background:var(--surface-2);border:1px solid var(--accent);border-radius:12px;padding:12px;margin-bottom:14px}.ps-best-bet-label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--accent);margin-bottom:8px}.ps-best-bet-top{display:flex;align-items:center;gap:8px;margin-bottom:10px}.ps-best-stat{font-size:18px;font-weight:700}.ps-best-dir{font-size:12px;font-weight:700;padding:2px 8px;border-radius:6px}.ps-best-dir-over{background:#22c55e26;color:var(--good)}.ps-best-dir-under{background:#ef44441f;color:var(--bad)}.ps-best-dir-na{background:var(--line);color:var(--muted)}.ps-tier-badge{font-size:10px;font-weight:700;padding:2px 6px;border-radius:4px}.ps-tier-a{background:#22c55e33;color:var(--good)}.ps-tier-b{background:#eab30833;color:var(--warn)}.ps-tier-c{background:#38bdf826;color:var(--accent)}.ps-tier-none{background:var(--surface-2);color:var(--muted)}.ps-best-bet-row{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.ps-best-bet-cell{display:flex;flex-direction:column;gap:2px}.ps-cell-label{font-size:10px;color:var(--muted)}.ps-cell-val{font-size:14px;font-weight:700}.ps-best-bet-book{margin:8px 0 0;font-size:10px;color:var(--muted);text-transform:capitalize}.ps-section-label{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin:0 0 8px}.ps-line-row{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid var(--line);font-size:12px}.ps-line-row:last-child{border-bottom:none}.ps-line-stat{font-weight:600;width:32px;flex-shrink:0}.ps-line-proj{color:var(--muted);flex:1}.ps-line-arrow{font-size:13px;font-weight:700;width:16px;text-align:center;flex-shrink:0}.ps-line-val{width:36px;text-align:right;font-weight:600;flex-shrink:0}.ps-line-edge{font-weight:700;width:44px;text-align:right;flex-shrink:0}.ps-line-no-val{width:22px;text-align:center;color:var(--muted);flex-shrink:0}.ps-tier-badge-sm{font-size:9px;font-weight:700;padding:1px 5px;border-radius:4px;flex-shrink:0}.ps-proj-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.ps-proj-card{border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:10px;display:flex;flex-direction:column;gap:4px}.ps-proj-label{font-size:11px;color:var(--muted)}.ps-proj-val{font-size:13px}.ps-proj-market{font-size:10px;color:var(--muted);line-height:1.3}@media (min-width: 900px){.app{padding-bottom:calc(var(--safe-area-bottom) + var(--keyboard-offset))}.topbar{padding:calc(12px + var(--safe-area-top)) 16px 12px;display:flex;align-items:center;justify-content:space-between;gap:12px}.topbar-actions{margin-top:0}.page{max-width:var(--app-max-width);margin:0 auto;padding:16px;padding-bottom:calc(24px + var(--safe-area-bottom) + var(--keyboard-offset))}.mobile-tabbar,.mobile-sections{display:none}.desktop-sections{display:grid;gap:12px}.insights-layout{grid-template-columns:minmax(0,2fr) minmax(320px,1fr);align-items:start}.schedule-card-compact{height:auto;display:flex;flex-direction:column}.schedule-card-compact .scheduled-grid{min-height:0;overflow:hidden}.schedule-card-compact .card-footer-action{margin-top:auto}.insights-card-compact{height:760px}.insights-card-compact .card-footer-action{margin-top:auto}.offline-banner{max-width:var(--app-max-width);margin:10px auto 0}.dev-api-banner{max-width:var(--app-max-width);margin:8px auto 0}.scheduled-grid,.bets-grid-pro,.match-layout-grid,.match-player-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.proj-controls{grid-template-columns:minmax(0,1fr) minmax(140px,220px);align-items:center}}.skeleton{display:inline-block;border-radius:8px;background:linear-gradient(90deg,var(--surface-2) 0%,color-mix(in srgb,var(--surface-2) 75%,var(--line)) 50%,var(--surface-2) 100%);background-size:220% 100%;animation:shimmer 1.2s linear infinite}.skeleton-stack{display:grid;gap:8px}.skeleton-line{width:100%}.skeleton-inline{width:42px;height:12px}.w-32{width:8rem}.w-40{width:10rem}.h-12{height:12px}.h-14{height:14px}.h-16{height:16px}.h-64{height:64px}.page-fade-in{animation:page-enter .18s ease-out}@keyframes shimmer{0%{background-position:220% 0}to{background-position:-220% 0}}@keyframes page-enter{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion: reduce){.skeleton{animation:none;background:var(--surface-2)}.page-fade-in{animation:none}.edge-fill,.ptr-indicator,.page{transition:none}}.brand-row{display:flex;align-items:center;gap:12px}.brand-logo-box{width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,#3b82f6,#8b5cf6);display:inline-flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.brand-text h1{margin:0;font-size:20px;font-weight:700;line-height:1.2}.brand-text p{margin:2px 0 0;font-size:11px;color:var(--muted)}.sport-tabs-row{display:flex;gap:4px;overflow-x:auto;padding-bottom:2px;margin-top:10px;scrollbar-width:none}.sport-tabs-row::-webkit-scrollbar{display:none}.sport-tab{border:1px solid var(--line);background:var(--surface-2);color:var(--muted);border-radius:999px;padding:6px 14px;font-size:13px;font-weight:600;white-space:nowrap;flex-shrink:0;transition:background .15s,color .15s,border-color .15s}.sport-tab.active{background:var(--accent);color:#fff;border-color:var(--accent)}.sport-tab.coming-soon{opacity:.4;cursor:not-allowed}.home-page{display:grid;gap:12px}.home-slate-bar{position:sticky;top:calc(var(--safe-area-top) + 76px);z-index:12;margin-bottom:2px;padding:4px 0 2px;background:color-mix(in srgb,var(--bg) 86%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:space-between;gap:8px}@media (min-width: 900px){.home-slate-bar{top:calc(var(--safe-area-top) + 88px)}}@media (max-width: 640px){.section-head{align-items:flex-start}.section-head h2{font-size:16px}.pill{padding:5px 8px}.scheduled-card{padding:11px}.bet-metric{padding:7px}.proj-list-row{align-items:flex-start}.proj-summary-pills.list{width:100%;justify-content:start}}@media (max-width: 480px){.home-slate-bar{top:calc(var(--safe-area-top) + 70px)}.scheduled-meta{align-items:center}.scheduled-detail-row{gap:6px}.market-pill{max-width:100%;overflow:hidden;text-overflow:ellipsis}.bet-card-head{grid-template-columns:38px minmax(0,1fr)}.bet-card-head>:last-child{grid-column:1 / -1;justify-self:start}.bet-chip-row{flex-wrap:wrap}.proj-card-top{align-items:flex-start}.proj-card-player{width:100%}.proj-card-top .bet-chip{flex-shrink:0}}@supports (padding: max(0px)){.topbar,.mobile-tabbar,.sheet-backdrop{padding-left:max(var(--safe-area-left),0px);padding-right:max(var(--safe-area-right),0px)}}@supports (padding: max(0px)){.topbar{padding:calc(10px + var(--safe-area-top)) max(calc(12px + var(--safe-area-right)),12px) 10px max(calc(12px + var(--safe-area-left)),12px)}.mobile-tabbar{padding:8px max(calc(10px + var(--safe-area-right)),10px) calc(8px + var(--safe-area-bottom)) max(calc(10px + var(--safe-area-left)),10px)}.sheet-backdrop{padding:calc(var(--safe-area-top) + 8px) max(calc(var(--safe-area-right) + 8px),8px) 0 max(calc(var(--safe-area-left) + 8px),8px)}}.refresh-btn{font-size:20px;line-height:1;padding:0 12px}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin{display:inline-block;animation:rotate .7s linear infinite}.page-content{display:grid;gap:12px}.page-hero{display:flex;align-items:center;gap:12px;margin-bottom:4px}.page-hero-icon-box{width:44px;height:44px;border-radius:12px;display:inline-flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.page-hero-icon-box.trending{background:linear-gradient(135deg,#2563eb,#3b82f6)}.page-hero-icon-box.user{background:linear-gradient(135deg,#3b82f6,#8b5cf6)}.page-hero-title{margin:0;font-size:22px;font-weight:700;line-height:1.2}.page-hero-sub{margin:3px 0 0;font-size:12px;color:var(--muted)}.stats-cards-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.stats-card{border:1px solid var(--line);border-radius:12px;padding:14px;display:grid;gap:6px;background:var(--surface)}.stats-card-icon{font-size:22px;line-height:1}.stats-card-value{font-size:26px;font-weight:800;line-height:1}.stats-card-label{font-size:11px;color:var(--muted)}.stats-card-blue{border-color:color-mix(in srgb,#3b82f6 40%,var(--line));background:color-mix(in srgb,#3b82f6 8%,var(--surface))}.stats-card-green{border-color:color-mix(in srgb,var(--good) 40%,var(--line));background:color-mix(in srgb,var(--good) 8%,var(--surface))}.stats-card-purple{border-color:color-mix(in srgb,#8b5cf6 40%,var(--line));background:color-mix(in srgb,#8b5cf6 8%,var(--surface))}.stats-card-orange{border-color:color-mix(in srgb,var(--warn) 40%,var(--line));background:color-mix(in srgb,var(--warn) 8%,var(--surface))}.stats-breakdown-list{display:grid;gap:6px}.stats-breakdown-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px;border-radius:10px;background:var(--surface-2)}.stats-breakdown-title{font-weight:600;font-size:14px}.stats-breakdown-sub{margin-top:2px;font-size:12px;color:var(--muted)}.stats-breakdown-value{font-size:20px;font-weight:700;white-space:nowrap}.stats-breakdown-value.tone-good{color:var(--good)}.stats-breakdown-value.tone-warn{color:var(--warn)}.stats-breakdown-value.tone-bad{color:var(--bad)}.account-profile-card{display:grid;gap:14px}.account-profile-row{display:flex;align-items:center;gap:14px}.account-avatar{width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg,#3b82f6,#8b5cf6);display:inline-flex;align-items:center;justify-content:center;font-size:22px;font-weight:700;color:#fff;flex-shrink:0}.account-name{font-size:17px;font-weight:700}.account-plan{margin-top:2px;font-size:13px;color:var(--muted)}.account-upgrade-btn{width:100%;background:var(--accent);color:#fff;border:none;border-radius:10px;padding:12px;font-size:14px;font-weight:600;cursor:pointer;transition:opacity .15s}.account-upgrade-btn:hover{opacity:.85}.account-empty-state{padding:20px 0 10px;text-align:center}.account-empty-icon{font-size:36px;margin-bottom:8px;opacity:.35}.account-empty-state p{margin:4px 0;font-size:14px}.account-setting-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:4px 0}.account-setting-label{font-weight:600;font-size:14px}.account-setting-sub{margin-top:2px;font-size:12px;color:var(--muted)}.account-settings-list{display:grid;gap:6px}.account-nav-btn{width:100%;text-align:left;background:var(--surface-2);border:1px solid var(--line);border-radius:10px;padding:12px;color:var(--text);display:flex;align-items:center;justify-content:space-between;gap:8px;cursor:pointer;transition:background .15s}.account-nav-btn:hover{background:color-mix(in srgb,var(--surface-2) 65%,var(--line))}.account-nav-arrow{font-size:16px;color:var(--muted);flex-shrink:0}.tab-icon{display:inline-flex;align-items:center;justify-content:center;font-size:14px;line-height:1}.tab-icon svg{display:block}.mobile-tabbar button.active .tab-icon svg{stroke:var(--accent)}@media (min-width: 900px){.brand-row{flex-shrink:0}.sport-tabs-row{margin-top:0;flex:1;justify-content:flex-end}.topbar{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.stats-cards-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.mobile-tabbar{display:none}}@media (max-width: 640px){:root{--tabbar-height: 84px}.page{padding:10px;gap:10px}.card,.stats-card,.scheduled-card,.bet-card-pro,.proj-card,.match-player-card{border-radius:14px}.page-hero,.stats-breakdown-row,.account-setting-row{align-items:flex-start}.stats-breakdown-value{font-size:18px}.ps-header{padding:12px 14px 10px}.ps-content{padding:14px 14px calc(18px + var(--safe-area-bottom) + var(--keyboard-offset))}}@media (max-width: 480px){.topbar{padding:calc(8px + var(--safe-area-top)) calc(10px + var(--safe-area-right)) 8px calc(10px + var(--safe-area-left))}.page-main{padding-top:10px}.mobile-tabbar{gap:5px}.mobile-tabbar button{font-size:11px;min-height:46px}.tab-icon svg{width:20px;height:20px}.page-hero-title{font-size:20px}.stats-cards-grid,.match-kv-grid,.match-box-team-totals,.ps-best-bet-row,.ps-proj-grid{grid-template-columns:1fr}.stats-card-value{font-size:24px}.match-player-head{grid-template-columns:36px minmax(0,1fr)}.match-player-head>:last-child{grid-column:1 / -1}.match-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.results-summary-strip{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.ps-identity{gap:12px}.ps-avatar-lg{width:64px;height:64px}.ps-player-name{font-size:20px}.ps-tabs{overflow-x:auto;padding-bottom:2px}.ps-tab{flex:0 0 auto;min-width:108px}}@media (max-width: 380px){.mobile-tabbar button span:last-child{font-size:10px;letter-spacing:.01em}.results-summary-strip,.stats-cards-grid{grid-template-columns:1fr}.team-chip-row{grid-template-columns:24px minmax(0,1fr) auto}.team-logo-wrap{width:24px;height:24px}}.tennis-surface-badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:.68rem;font-weight:700;letter-spacing:.04em;text-transform:capitalize;color:#fff}.tennis-tour-badge{display:inline-block;padding:2px 7px;border-radius:4px;font-size:.68rem;font-weight:800;letter-spacing:.06em;color:#fff}.tennis-tour-atp{background:#0a3d8f}.tennis-tour-wta{background:#8f0a5a}.tennis-tour-challenger{background:#2e6e2e}.tennis-tour-itf{background:#5a3e00}.tennis-status-chip{display:inline-block;padding:2px 8px;border-radius:12px;font-size:.7rem;font-weight:600;text-transform:capitalize}.tennis-status-ongoing{background:#16a34a22;color:var(--good)}.tennis-status-upcoming{background:var(--accent-soft);color:var(--accent)}.tennis-status-completed{background:var(--surface-2);color:var(--muted)}.tennis-dashboard{max-width:var(--app-max-width);margin:0 auto;padding:0 0 1.5rem}.tennis-tab-bar{display:flex;gap:4px;padding:.75rem 1rem 0;border-bottom:1px solid var(--line);margin-bottom:1rem}.tennis-tab-btn{padding:.45rem 1rem;border:none;border-radius:8px 8px 0 0;background:transparent;color:var(--muted);font-size:.88rem;font-weight:600;cursor:pointer;border-bottom:2px solid transparent;transition:color .15s,border-color .15s}.tennis-tab-btn.active{color:var(--accent);border-bottom-color:var(--accent)}.tennis-tab-btn:hover:not(.active){color:var(--text)}.tennis-controls-row{display:flex;align-items:center;gap:.75rem;padding:0 1rem .75rem;flex-wrap:wrap}.tennis-date-nav{display:flex;align-items:center;gap:.4rem;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:4px 6px}.tennis-date-btn{width:28px;height:28px;border:none;background:transparent;color:var(--accent);font-size:1.1rem;cursor:pointer;border-radius:6px;display:flex;align-items:center;justify-content:center;transition:background .15s}.tennis-date-btn:hover{background:var(--accent-soft)}.tennis-date-label{font-size:.85rem;font-weight:600;color:var(--text);min-width:90px;text-align:center}.tennis-tour-filter,.tennis-filter-row{display:flex;gap:4px}.tennis-filter-btn{padding:5px 12px;border:1px solid var(--line);border-radius:6px;background:var(--surface);color:var(--muted);font-size:.78rem;font-weight:700;letter-spacing:.04em;cursor:pointer;transition:background .15s,color .15s,border-color .15s}.tennis-filter-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)}.tennis-filter-btn:hover:not(.active){background:var(--surface-2)}.tennis-refresh-btn{width:32px;height:32px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--accent);font-size:1rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s}.tennis-refresh-btn:hover{background:var(--accent-soft)}.tennis-schedule-summary{padding:0 1rem .5rem;font-size:.8rem;color:var(--muted)}.tennis-schedule-list{display:flex;flex-direction:column;gap:.75rem;padding:0 .75rem}.tennis-tournament-block{background:var(--surface);border:1px solid var(--line);border-radius:12px;overflow:hidden}.tennis-tournament-header{width:100%;display:flex;align-items:flex-start;gap:.5rem;padding:.75rem 1rem;background:var(--surface);border:none;cursor:pointer;text-align:left;transition:background .12s;flex-wrap:wrap}.tennis-tournament-header:hover{background:var(--surface-2)}.tennis-tournament-title-row{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.tennis-tournament-flag{font-size:1.15rem}.tennis-tournament-name{font-weight:700;font-size:.95rem;color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tennis-live-count{font-size:.68rem;font-weight:800;color:#fff;background:#dc2626;padding:2px 7px;border-radius:10px;letter-spacing:.04em;white-space:nowrap}.tennis-tournament-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px;font-size:.75rem;color:var(--muted);width:100%;padding-top:2px}.tennis-tournament-category,.tennis-tournament-city,.tennis-tournament-prize{font-size:.75rem;color:var(--muted)}.tennis-tournament-chevron{font-size:.7rem;color:var(--muted);flex-shrink:0;margin-left:auto}.tennis-matches-list{display:flex;flex-direction:column;border-top:1px solid var(--line)}.tennis-match-card{width:100%;display:flex;flex-direction:column;gap:.4rem;padding:.7rem 1rem;border:none;border-bottom:1px solid var(--line);background:transparent;cursor:pointer;text-align:left;transition:background .12s}.tennis-match-card:last-child{border-bottom:none}.tennis-match-card:hover{background:var(--surface-2)}.tennis-match-card.live{background:#dc262606}.tennis-match-card.live:hover{background:#dc262610}.tennis-match-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.tennis-match-round{font-size:.72rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.tennis-match-status-wrap{display:flex;align-items:center;gap:6px}.tennis-live-label{font-size:.7rem;font-weight:800;color:#dc2626;letter-spacing:.06em}.tennis-final-score{font-size:.78rem;font-weight:600;color:var(--muted)}.tennis-match-time{font-size:.78rem;color:var(--muted)}.tennis-match-players{display:flex;flex-direction:column;gap:.2rem}.tennis-match-player{display:flex;align-items:center;gap:.4rem}.tennis-match-player.winner .tennis-player-name{font-weight:700;color:var(--text)}.tennis-match-player.winner:after{content:"✓";font-size:.7rem;color:var(--good);margin-left:2px}.tennis-player-flag{font-size:.9rem}.tennis-player-name{font-size:.88rem;color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tennis-player-rank{font-size:.72rem;color:var(--muted);font-weight:600;margin-left:2px}.tennis-sets-score{font-size:.88rem;font-weight:700;color:var(--text);min-width:20px;text-align:right}.tennis-vs-divider{font-size:.68rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;padding-left:22px}.tennis-court-label{font-size:.7rem;color:var(--muted);padding-left:22px}.tennis-headshot{width:28px;height:28px;border-radius:999px;overflow:hidden;background:var(--surface-2);border:1px solid var(--line);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.tennis-headshot img{width:100%;height:100%;object-fit:cover}.tennis-headshot-sm{width:24px;height:24px}.tennis-headshot-fallback{width:100%;height:100%;align-items:center;justify-content:center;font-size:.75rem;font-weight:700;color:var(--text);background:var(--surface-2)}.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}.status-dot.live{background:#dc2626;box-shadow:0 0 0 2px #dc262630;animation:pulse-dot 1.5s ease-in-out infinite}.status-dot.final{background:var(--muted)}@keyframes pulse-dot{0%,to{box-shadow:0 0 0 2px #dc262630}50%{box-shadow:0 0 0 5px #dc262618}}.tennis-tournaments-grid-section{padding:0 .75rem}.tennis-tournaments-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:.75rem;margin-top:.75rem}.tennis-tournament-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:.85rem 1rem;display:flex;flex-direction:column;gap:.35rem}.tennis-tournament-card-header{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.tennis-tournament-card-name{font-size:.95rem;font-weight:700;color:var(--text)}.tennis-tournament-card-meta{font-size:.78rem;color:var(--muted)}.tennis-tournament-card-dates{font-size:.75rem;color:var(--muted)}.tennis-tournament-card-prize{font-size:.78rem;font-weight:600;color:var(--accent)}.tennis-rankings-panel{padding:0 .75rem}.tennis-rankings-table{width:100%;border-collapse:collapse;font-size:.85rem}.tennis-rankings-table th{text-align:left;padding:.5rem .6rem;color:var(--muted);font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;border-bottom:2px solid var(--line)}.tennis-rankings-table td{padding:.5rem .6rem;border-bottom:1px solid var(--line);color:var(--text)}.tennis-rank-num{font-weight:800;color:var(--accent);width:36px}.tennis-rank-name{font-weight:600}.tennis-rank-player-wrap{display:inline-flex;align-items:center;gap:.55rem}.tennis-rank-country{color:var(--muted)}.tennis-rank-points{font-weight:700;text-align:right}.tennis-show-more{display:block;width:100%;padding:.6rem;margin-top:.5rem;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--accent);font-size:.85rem;font-weight:600;cursor:pointer;transition:background .12s}.tennis-show-more:hover{background:var(--accent-soft)}.tennis-empty{font-size:.85rem;color:var(--muted);padding:.75rem 0;text-align:center}.tennis-empty-state{text-align:center;padding:2.5rem 1rem;color:var(--muted)}.tennis-empty-hint{font-size:.8rem;margin-top:.4rem}.tennis-error-banner{background:#dc262612;border:1px solid #dc262640;border-radius:8px;padding:.6rem 1rem;margin:0 .75rem .75rem;font-size:.82rem;color:var(--bad)}.tennis-skeleton-stack{display:flex;flex-direction:column;gap:.75rem;padding:0 .75rem}.tennis-match-page{max-width:720px;margin:0 auto;padding:0 .75rem 2rem}.tennis-mp-nav{display:flex;align-items:center;gap:.75rem;padding:.75rem 0}.tennis-back-btn{border:none;background:transparent;color:var(--accent);font-size:.88rem;font-weight:600;cursor:pointer;padding:.3rem 0}.tennis-mp-breadcrumb{font-size:.8rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tennis-mp-tournament-banner{background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:10px;padding:.85rem 1rem;margin-bottom:.75rem;display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.tennis-mp-banner-left{display:flex;flex-direction:column;gap:.25rem}.tennis-mp-banner-name{font-size:1rem;font-weight:700;color:var(--text)}.tennis-mp-banner-cat,.tennis-mp-banner-location{font-size:.78rem;color:var(--muted)}.tennis-mp-banner-right{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.tennis-mp-prize{font-size:.8rem;font-weight:600;color:var(--accent)}.tennis-mp-status-bar{display:flex;align-items:center;gap:.5rem;padding:.5rem 0;margin-bottom:.5rem;font-size:.85rem;color:var(--muted)}.tennis-mp-status-bar.live{color:#dc2626}.tennis-mp-status-bar.final{color:var(--muted)}.tennis-mp-status-label{font-weight:700}.tennis-mp-court{font-size:.8rem;color:var(--muted)}.tennis-mp-score-text{font-weight:600;color:var(--text);margin-left:auto}.tennis-mp-players-row{display:grid;grid-template-columns:1fr auto 1fr;gap:1rem;background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:1.25rem 1rem;margin-bottom:1rem}.tennis-mp-player-col{display:flex;flex-direction:column;gap:.25rem}.tennis-mp-player-col:last-child{align-items:flex-end;text-align:right}.tennis-mp-player-col.winner .tennis-mp-player-name{color:var(--good)}.tennis-mp-player-flag-name{display:flex;align-items:center;gap:.55rem}.tennis-mp-player-col:last-child .tennis-mp-player-flag-name{flex-direction:row-reverse}.tennis-mp-headshot{width:44px;height:44px;border-radius:999px;overflow:hidden;background:var(--surface-2);border:1px solid var(--line);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.tennis-mp-headshot img{width:100%;height:100%;object-fit:cover}.tennis-mp-headshot-fallback{width:100%;height:100%;align-items:center;justify-content:center;font-size:.95rem;font-weight:700;color:var(--text);background:var(--surface-2)}.tennis-mp-player-name{font-size:1rem;font-weight:700;color:var(--text)}.tennis-mp-player-ranking{font-size:.78rem;font-weight:600;color:var(--accent)}.tennis-mp-player-points,.tennis-mp-player-country,.tennis-mp-player-hand,.tennis-mp-player-height{font-size:.75rem;color:var(--muted)}.tennis-mp-sets{font-size:1.4rem;font-weight:800;color:var(--text);margin-top:.25rem}.tennis-mp-tbd{color:var(--muted)}.tennis-mp-odds-block{margin-top:.5rem;display:flex;flex-direction:column;gap:2px}.tennis-mp-odds{font-size:1.1rem;font-weight:700;color:var(--accent)}.tennis-mp-implied{font-size:.72rem;color:var(--muted)}.tennis-mp-vs-block{display:flex;align-items:center;justify-content:center}.tennis-mp-vs{font-size:.75rem;font-weight:800;color:var(--muted);letter-spacing:.08em}.tennis-mp-section{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:1rem;margin-bottom:.75rem}.tennis-mp-section-title{font-size:.85rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin:0 0 .75rem}.tennis-mp-odds-row{display:grid;grid-template-columns:1fr 1px 1fr;gap:1rem;align-items:center}.tennis-mp-odds-item{display:flex;flex-direction:column;gap:4px}.tennis-mp-odds-right{align-items:flex-end;text-align:right}.tennis-mp-odds-player{font-size:.8rem;font-weight:600;color:var(--text)}.tennis-mp-odds-value{font-size:1.2rem;font-weight:800;color:var(--accent)}.tennis-mp-odds-implied{font-size:.72rem;color:var(--muted)}.tennis-mp-odds-divider{width:1px;background:var(--line);height:60px}.tennis-mp-odds-book{font-size:.72rem;color:var(--muted);margin-top:.5rem}.tennis-mp-h2h-summary{display:grid;grid-template-columns:1fr auto 1fr;gap:.5rem;align-items:center;margin-bottom:1rem}.tennis-mp-h2h-count{display:flex;flex-direction:column;gap:2px}.tennis-mp-h2h-p2{align-items:flex-end;text-align:right}.tennis-mp-h2h-num{font-size:1.8rem;font-weight:800;color:var(--text)}.tennis-mp-h2h-name{font-size:.75rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:120px}.tennis-mp-h2h-label{font-size:.72rem;font-weight:700;color:var(--muted);text-align:center;text-transform:uppercase;letter-spacing:.04em}.tennis-mp-h2h-history{font-size:.8rem}.tennis-h2h-header-row,.tennis-h2h-row{display:grid;grid-template-columns:90px 1fr 50px 1fr 90px;gap:.5rem;padding:.4rem 0;border-bottom:1px solid var(--line);align-items:center}.tennis-h2h-header-row{font-size:.7rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.tennis-h2h-date{color:var(--muted)}.tennis-h2h-tournament{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.tennis-h2h-round{color:var(--muted);text-align:center}.tennis-h2h-winner{font-weight:600}.tennis-h2h-winner.p1{color:var(--good)}.tennis-h2h-winner.p2{color:var(--accent)}.tennis-h2h-score{text-align:right;color:var(--muted)}.tennis-mp-loading,.tennis-mp-error{padding:1rem .75rem;display:flex;flex-direction:column;gap:.75rem}@media (max-width: 600px){.tennis-tournaments-grid{grid-template-columns:1fr}.tennis-mp-players-row{grid-template-columns:1fr auto 1fr;padding:1rem .75rem}.tennis-h2h-header-row,.tennis-h2h-row{grid-template-columns:70px 1fr 40px 100px;font-size:.75rem}.tennis-h2h-score{display:none}.tennis-mp-h2h-name{max-width:80px}}@media (min-width: 900px){.tennis-dashboard{max-width:1200px;padding:0 0 2rem}.tennis-tab-bar{gap:4px;padding:0 0 1rem}.tennis-tab-btn{padding:8px 20px;font-size:.9rem}.tennis-controls-row{flex-wrap:nowrap;gap:16px;margin-bottom:1.25rem}.tennis-date-nav{min-width:180px}.tennis-date-label{font-size:.95rem;min-width:100px}.tennis-schedule-list{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start}.tennis-tournament-block{border:1px solid var(--line);border-radius:12px;overflow:hidden}.tennis-tournament-header{border-radius:0;padding:12px 14px}.tennis-matches-list{padding:0 8px 8px}.tennis-tournaments-grid{grid-template-columns:repeat(3,1fr)}.tennis-rankings-table{font-size:.9rem}.tennis-rankings-panel{max-width:700px}.tennis-match-page{max-width:860px;margin:0 auto}.tennis-mp-tournament-banner{padding:16px 20px;display:flex;align-items:center;justify-content:space-between;flex-direction:row;gap:16px}.tennis-mp-players-row{padding:2rem 1.5rem;gap:2rem}.tennis-mp-player-name{font-size:1.15rem}.tennis-mp-sets{font-size:2rem}.tennis-mp-vs{font-size:1.5rem}.tennis-h2h-header-row,.tennis-h2h-row{grid-template-columns:100px 1fr 70px 160px 120px}.tennis-h2h-score{display:block}.tennis-mp-h2h-name{max-width:200px}.tennis-mp-section{max-width:600px}}.tennis-desktop-layout{display:none}.tennis-mobile-layout{display:block}@media (min-width: 820px){.tennis-desktop-layout{display:block}.tennis-mobile-layout{display:none}.tennis-desktop-section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.tennis-rankings-panel{max-width:100%}.tennis-tournaments-grid{grid-template-columns:repeat(4,1fr)}}
