/* ═══════════════════════════════════════════════
   BeatzeBook Web App — "Stadium" theme (light/dark)
   Aligned with site vitrine DA (General Sans/Satoshi/Plex Mono)
   Single-file build for /app/ : reskin core + per-screen
   overrides (billing, compare, dashboard, harmony, insights,
   misc, picks, players, portfolio, profile, subscribe,
   theme-toggle, tournaments) merged in cascade order.
   ═══════════════════════════════════════════════ */

/* ── Design Tokens ── */
:root {
    --safe-top: env(safe-area-inset-top, 0px);
    --safe-bottom: env(safe-area-inset-bottom, 0px);
    /* Stadium light palette (mirrors site tokens.css) — production /app/ */
    --bg: #f4ecd9;
    --bg2: #ece2c2;
    --bg3: #dccfa6;
    --text: #1a1d18;
    --text2: #4a4f43;
    --text3: #7a7f6c;
    --ball: #cfeb2b;
    --ball-glow: rgba(143, 164, 21, 0.20);
    --ball-subtle: rgba(207, 235, 43, 0.14);
    --line: rgba(26, 29, 24, 0.12);
    --input-bg: #fbf5e2;
    --hard: #2563a2;
    --clay: #9d4e2a;
    --grass: #1f5530;
    --fault: #a02f1d;
    --ace: #9a7b0a;
    --error: #a02f1d;
    --success: #3a6b1a;
    --blue: #2563a2;
    --warning: var(--ace);
    --hard-subtle: rgba(37, 99, 162, 0.10);
    --hard-border: rgba(37, 99, 162, 0.34);
    --hard-glow: rgba(37, 99, 162, 0.14);
    --ball-border: rgba(122, 140, 18, 0.45);
    --clay-subtle: rgba(157, 78, 42, 0.10);
    --clay-border: rgba(157, 78, 42, 0.30);
    --grass-subtle: rgba(31, 85, 48, 0.10);
    --grass-border: rgba(31, 85, 48, 0.30);

    --font-display: 'General Sans', 'Satoshi', 'Inter', sans-serif;
    --font-body: 'Plus Jakarta Sans', 'General Sans', 'Inter', -apple-system, sans-serif;
    --font-sport-display: 'Marsden Slim', 'Barlow Condensed', 'General Sans', sans-serif;
    --font-mono: 'IBM Plex Mono', monospace;
    --weight-title: 650;
    --weight-label: 700;
    --tracking-label: 1.05px;
    --tracking-data: 0.35px;

    --radius-lg: 16px;
    --radius-md: 12px;
    --radius-sm: 4px;
    --radius-pill: 999px;
    --radius-input: 10px;
    --radius-image: 12px;
    --radius-circle: 50%;
    --control-h: 42px;
    --control-h-sm: 34px;
    --control-bg: rgba(26, 29, 24, 0.045);
    --control-bg-hover: rgba(26, 29, 24, 0.085);
    --control-border: rgba(26, 29, 24, 0.16);
    --control-border-strong: var(--ball-border);
    --focus-ring: rgba(122, 140, 18, 0.30);
    --info-bg: rgba(37, 99, 162, 0.08);
    --info-border: rgba(37, 99, 162, 0.28);
    --text-on-ball: #1a1d18;
    --text-on-light: #1a1d18;

    /* Theme plumbing — light values, every one flipped by [data-theme="dark"] below */
    color-scheme: light;
    --ink-rgb: 26, 29, 24;        /* ink overlays/borders that flip to cream in dark */
    --shadow-rgb: 26, 29, 24;     /* drop shadows + scrims (stay dark in dark mode) */
    --hard-rgb: 37, 99, 162;
    --clay-rgb: 157, 78, 42;
    --grass-rgb: 31, 85, 48;
    --success-rgb: 58, 107, 26;
    --fault-rgb: 160, 47, 29;
    --ace-rgb: 154, 123, 10;
    --ball-deep-rgb: 122, 140, 18;   /* olive lime (decorative borders, dots) */
    --ball-mid-rgb: 143, 164, 21;    /* olive lime (tints, gradients) */
    --nav-glass: rgba(244, 236, 217, 0.78);
    --glass-strong: rgba(244, 236, 217, 0.88);
    --card-veil: rgba(251, 245, 226, 0.5);
    --chip-glass: rgba(251, 245, 226, 0.90);
    --img-fade-0: rgba(244, 236, 217, 0);
    --img-fade-1: rgba(244, 236, 217, 0.82);
    --lock-veil-0: rgba(244, 236, 217, 0.55);
    --lock-veil-1: rgba(244, 236, 217, 0.95);
    --sheen: rgba(255, 255, 255, 0.35);
    --sheen-soft: rgba(255, 255, 255, 0.30);
    --sheen-edge: rgba(255, 255, 255, 0.42);
    --sheen-edge-strong: rgba(255, 255, 255, 0.48);
}

/* ── Stadium night palette — mirrors site tokens.css [data-theme="dark"] ──
   data-theme is set on <html> by the inline script in index.html,
   synced with the site via localStorage['bzb-theme'] (same origin). */
[data-theme="dark"] {
    color-scheme: dark;
    --bg: #0a0c08;
    --bg2: #13150f;
    --bg3: #1c1f18;
    --text: #fbf5e2;
    --text2: #c8c2ac;
    --text3: #7a7565;
    --ball-glow: rgba(207, 235, 43, 0.32);
    --ball-subtle: rgba(207, 235, 43, 0.10);
    --line: rgba(251, 245, 226, 0.10);
    --input-bg: #13150f;
    --hard: #3a78b8;
    --clay: #c96a3c;
    --grass: #5a9d6e;
    --fault: #e07b6e;
    --ace: #d4b13c;
    --error: #e07b6e;
    --success: #74b04a;
    --blue: #3a78b8;
    --hard-subtle: rgba(58, 120, 184, 0.16);
    --hard-border: rgba(58, 120, 184, 0.44);
    --hard-glow: rgba(58, 120, 184, 0.22);
    --ball-border: rgba(207, 235, 43, 0.40);
    --clay-subtle: rgba(201, 106, 60, 0.14);
    --clay-border: rgba(201, 106, 60, 0.38);
    --grass-subtle: rgba(90, 157, 110, 0.14);
    --grass-border: rgba(90, 157, 110, 0.38);
    --control-bg: rgba(251, 245, 226, 0.05);
    --control-bg-hover: rgba(251, 245, 226, 0.09);
    --control-border: rgba(251, 245, 226, 0.18);
    --focus-ring: rgba(207, 235, 43, 0.30);
    --info-bg: rgba(58, 120, 184, 0.14);
    --info-border: rgba(58, 120, 184, 0.38);
    /* --text-on-ball / --text-on-light stay ink: lime never carries light text */
    --ink-rgb: 251, 245, 226;
    --shadow-rgb: 0, 0, 0;
    --hard-rgb: 58, 120, 184;
    --clay-rgb: 201, 106, 60;
    --grass-rgb: 90, 157, 110;
    --success-rgb: 116, 176, 74;
    --fault-rgb: 224, 123, 110;
    --ace-rgb: 212, 177, 60;
    --ball-deep-rgb: 207, 235, 43;
    --ball-mid-rgb: 207, 235, 43;
    --nav-glass: rgba(10, 12, 8, 0.78);
    --glass-strong: rgba(10, 12, 8, 0.88);
    --card-veil: rgba(19, 21, 15, 0.5);
    --chip-glass: rgba(19, 21, 15, 0.92);
    --img-fade-0: rgba(10, 12, 8, 0);
    --img-fade-1: rgba(10, 12, 8, 0.85);
    --lock-veil-0: rgba(10, 12, 8, 0.55);
    --lock-veil-1: rgba(10, 12, 8, 0.95);
    --sheen: rgba(251, 245, 226, 0.05);
    --sheen-soft: rgba(251, 245, 226, 0.04);
    --sheen-edge: rgba(251, 245, 226, 0.07);
    --sheen-edge-strong: rgba(251, 245, 226, 0.08);
}

/* ── Global Transitions & Micro-interactions ── */
button, .btn-primary, .btn-secondary, .btn-detail, .nav-link, .nav-cta, .period-btn, .tier-tab, .picks-tab, .currency-btn, .plan-card, .kpi-card, .pick-card, .history-export-btn, .ui-hint-icon, .filter-select, .form-input, .form-select {
    transition: transform 0.16s ease, background-color 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease, color 0.18s ease;
}
button:active, .btn-primary:active, .btn-secondary:active, .btn-detail:active, .nav-link:active, .nav-cta:active, .period-btn:active, .tier-tab:active, .picks-tab:active, .currency-btn:active, .history-export-btn:active {
    transform: translateY(1px) scale(0.985) !important;
}
.plan-card:active,
.kpi-card:active,
.pick-card:active {
    transform: none !important;
}

/* ── Base ── */
* { box-sizing: border-box; }
body {
    background-color: var(--bg);
    color: var(--text);
    font-family: var(--font-body);
    font-size: 14px;
    font-feature-settings: "kern" 1, "liga" 1;
    margin: 0;
    padding: calc(56px + var(--safe-top)) 0 var(--safe-bottom);
    overflow-x: hidden;
    -webkit-tap-highlight-color: transparent;
    -webkit-font-smoothing: antialiased;
    text-rendering: geometricPrecision;
}

:where(.kpi-value, .pick-card-metric, .history-export-btn, .history-export-badge, .badge, .period-btn, .tier-tab, .picks-tab, .currency-btn, .nav-link, .filter-select) {
    font-variant-numeric: tabular-nums;
}

/* ── Loading screen ── */
.loading-screen {
    display: flex;
    align-items: center;
    justify-content: center;
    height: calc(100vh - 56px);
}

/* tennis-ball-loader */
.loading-spinner {
    width: 34px;
    height: 34px;
    border: 0;
    border-radius: 50%;
    background: radial-gradient(circle at 32% 30%, #e9f680 0%, var(--ball) 42%, #aac21f 78%, #8fa415 100%);
    box-shadow: inset -3px -4px 7px rgba(26,29,24,.28), 0 0 14px var(--ball-glow);
    position: relative;
    overflow: hidden;
    perspective: 90px;
    animation: none;
}
.loading-spinner::before {
    content: "";
    position: absolute;
    inset: -2px;
    border-radius: 50%;
    border-top: 3px solid rgba(255,255,255,.92);
    border-bottom: 3px solid rgba(255,255,255,.92);
    transform-style: preserve-3d;
    animation: ballSpinX 0.9s linear infinite;
}
@keyframes ballSpinX { to { transform: rotateX(360deg); } }
@keyframes spin { to { transform: rotate(360deg); } }

/* ── Top Navbar ── */
.top-nav {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 100;
    background: var(--nav-glass);
    backdrop-filter: blur(30px);
    -webkit-backdrop-filter: blur(30px);
    border-bottom: 1px solid var(--line);
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: calc(56px + var(--safe-top));
    padding: var(--safe-top) 24px 0;
}

.nav-brand {
    display: flex;
    align-items: center;
    gap: 10px;
    text-decoration: none;
    flex-shrink: 0;
}
.nav-logo {
    width: 28px;
    height: 28px;
}
.nav-brand-text {
    font-family: var(--font-mono);
    font-size: 15px;
    font-weight: 600;
    color: var(--text);
    letter-spacing: 0;
}
.nav-brand-accent {
    color: var(--success);
}
@media (max-width: 640px) {
    .nav-brand-text { display: none; }
}

.nav-links {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
    overflow-x: auto;
    scrollbar-width: none;
}
.nav-links::-webkit-scrollbar {
    display: none;
}
@media (max-width: 640px) {
    .nav-links { gap: 0; }
}

.nav-link {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: var(--control-h-sm);
    padding: 0 11px;
    border: 0;
    font-family: var(--font-mono);
    font-size: 0.65rem;
    font-weight: var(--weight-label);
    color: var(--text2);
    text-decoration: none;
    text-transform: uppercase;
    letter-spacing: 0.55px;
    border-radius: 0;
    background: transparent;
}
.nav-link::after {
    content: '';
    position: absolute;
    left: 11px;
    right: 11px;
    bottom: 3px;
    height: 2px;
    border-radius: 999px;
    background: transparent;
    transform: scaleX(0.4);
    opacity: 0;
    transition: transform 0.18s ease, opacity 0.18s ease, background 0.18s ease;
}
.nav-link:hover {
    color: var(--text);
}
.nav-link-active {
    color: var(--text);
    background: transparent;
    box-shadow: none;
}
.nav-link-active::after {
    background: var(--ball);
    box-shadow: none;
    opacity: 1;
    transform: scaleX(1);
}
@media (max-width: 640px) {
    .nav-link { min-height: 32px; padding: 0 8px; font-size: 0.58rem; letter-spacing: 0.4px; }
    .nav-link::after { left: 8px; right: 8px; }
}

.nav-right {
    display: flex;
    align-items: center;
    gap: 8px;
}

.nav-cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: var(--control-h-sm);
    padding: 0 15px;
    border: 1px solid var(--ball-border);
    font-family: var(--font-mono);
    font-size: 0.65rem;
    font-weight: 800;
    color: var(--text-on-ball);
    background: linear-gradient(135deg, var(--ball), #c2dd25 62%, #b3cf1e);
    text-decoration: none;
    text-transform: uppercase;
    letter-spacing: 0.9px;
    border-radius: var(--radius-pill);
    box-shadow: inset 0 1px 0 var(--sheen);
}
.nav-cta:hover {
    box-shadow: 0 2px 10px rgba(var(--shadow-rgb), 0.12), inset 0 1px 0 var(--sheen-edge);
    transform: translateY(-1px);
}
@media (max-width: 480px) {
    .nav-cta { display: none; }
}

/* ── Section labels (mono, court blue) ── */
.section-label {
    font-family: var(--font-mono);
    font-size: 0.58rem;
    font-weight: var(--weight-label);
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: var(--tracking-label);
}
.section-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 12px;
}
.section-head .section-label {
    margin: 0;
}

/* Legacy class — same style */
.section-title {
    font-family: var(--font-mono);
    font-size: 0.58rem;
    font-weight: var(--weight-label);
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: var(--tracking-label);
}

/* ── Page titles ── */
.page-title {
    font-family: var(--font-display);
    font-size: clamp(1.85rem, 4.8vw, 2.08rem);
    font-weight: 680;
    letter-spacing: 0;
    line-height: 1.02;
}
.premium-page-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
    margin-bottom: 18px;
}
.premium-page-title-row {
    display: flex;
    align-items: center;
    gap: 10px;
}
.premium-page-title-row .page-title {
    margin: 0;
}
.premium-page-kicker {
    margin-top: 8px;
    color: var(--text2);
    font-family: var(--font-mono);
    font-size: 0.58rem;
    font-weight: var(--weight-label);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
}
.filter-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 6px 0 12px;
    border: 0;
    border-bottom: 1px solid var(--line);
    border-radius: 0;
    background: transparent;
    box-shadow: none;
}
.filter-toolbar-copy {
    display: flex;
    align-items: center;
    gap: 8px;
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.56rem;
    font-weight: var(--weight-label);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
}
.filter-toolbar-actions {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    justify-content: flex-end;
}

/* ── Contextual UI hints ── */
.ui-hint {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    vertical-align: middle;
    outline: none;
}
.ui-hint-icon {
    display: inline-grid;
    place-items: center;
    width: 19px;
    height: 19px;
    border: 1px solid var(--line);
    border-radius: 50%;
    background: var(--control-bg);
    color: var(--text3);
    cursor: help;
    font-family: var(--font-mono);
    font-size: 0.58rem;
    font-weight: 800;
    line-height: 1;
}
.ui-hint-popover {
    position: absolute;
    left: 0;
    right: auto;
    bottom: calc(100% + 10px);
    z-index: 120;
    display: none;
    width: 320px;
    max-width: calc(100vw - 32px);
    padding: 14px 16px;
    border: 1px solid var(--control-border);
    border-radius: var(--radius-md);
    background: var(--input-bg);
    box-shadow: 0 18px 48px rgba(var(--shadow-rgb), 0.18);
    opacity: 0;
    pointer-events: none;
    transform: translateY(4px);
    transition: opacity 0.16s ease, transform 0.16s ease;
    text-align: left;
    white-space: normal;
    word-break: normal;
    overflow-wrap: anywhere;
}
.ui-hint-popover::after {
    content: '';
    position: absolute;
    left: 10px;
    right: auto;
    bottom: -5px;
    width: 9px;
    height: 9px;
    border-right: 1px solid var(--control-border);
    border-bottom: 1px solid var(--control-border);
    background: var(--input-bg);
    transform: rotate(45deg);
}
/* Optional --right modifier: popover anchored to the right of the icon (extends leftward) */
.ui-hint--right .ui-hint-popover {
    left: auto;
    right: 0;
}
.ui-hint--right .ui-hint-popover::after {
    left: auto;
    right: 10px;
}
.ui-hint-label,
.ui-hint-text {
    display: block;
}
.ui-hint-label {
    color: var(--success);
    font-family: var(--font-mono);
    font-size: 0.56rem;
    font-weight: var(--weight-label);
    letter-spacing: var(--tracking-label);
    margin-bottom: 6px;
    text-transform: uppercase;
}
.ui-hint-text {
    display: block;
    color: var(--text);
    font-family: var(--font-body);
    font-size: 13px;
    font-weight: 400;
    letter-spacing: normal;
    line-height: 1.55;
    text-transform: none;
    word-break: normal;
    overflow-wrap: anywhere;
    white-space: normal;
}
.ui-hint:hover .ui-hint-icon,
.ui-hint:focus .ui-hint-icon,
.ui-hint:focus-visible .ui-hint-icon {
    border-color: var(--ball-border);
    background: var(--ball-subtle);
    box-shadow: 0 0 20px var(--hard-glow);
}
.ui-hint:hover .ui-hint-popover,
.ui-hint:focus .ui-hint-popover,
.ui-hint:focus-within .ui-hint-popover {
    display: block;
    opacity: 1;
    pointer-events: auto;
    transform: translateY(0);
}

/* ── KPI Cards ── */
.kpi-card {
    position: relative;
    overflow: visible;
    background:
        linear-gradient(180deg, var(--sheen), rgba(255,255,255,0)),
        var(--bg2);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    padding: 20px;
    min-width: 130px;
    flex-shrink: 0;
    transition: border-color 0.3s ease, box-shadow 0.3s ease;
}
.kpi-card::before {
    content: '';
    position: absolute;
    inset: 0 0 auto;
    height: 1px;
    background: linear-gradient(90deg, transparent, var(--ball-border), transparent);
    opacity: 0.65;
}
.kpi-card:hover {
    border-color: var(--ball-border);
    box-shadow: 0 0 28px var(--ball-glow);
}
.grid > .kpi-card {
    min-width: 0;
}
.kpi-value {
    font-family: var(--font-display);
    font-size: 1.58rem;
    font-weight: 680;
    line-height: 1.05;
    letter-spacing: 0;
}
.kpi-label {
    font-family: var(--font-mono);
    font-size: 0.56rem;
    font-weight: var(--weight-label);
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: var(--tracking-label);
    margin-top: 6px;
}
.kpi-label-row {
    display: flex;
    align-items: center;
    gap: 7px;
    margin-top: 6px;
}
.kpi-label-row .kpi-label {
    margin: 0;
}
.kpi-positive { color: var(--success); }
.kpi-negative { color: var(--error); }

/* ── Pick cards ── */
.pick-card {
    position: relative;
    overflow: visible;
    background:
        radial-gradient(circle at 100% 0%, rgba(var(--ball-mid-rgb),0.07), transparent 34%),
        linear-gradient(180deg, var(--sheen), rgba(255,255,255,0)),
        var(--bg2);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    padding: 16px 20px;
    margin-bottom: 8px;
    transition: border-color 0.3s ease, box-shadow 0.3s ease;
}
.pick-card::before {
    content: '';
    position: absolute;
    inset: 14px auto 14px 0;
    width: 2px;
    border-radius: 0 2px 2px 0;
    background: linear-gradient(180deg, var(--ball), rgba(var(--ball-mid-rgb),0.30));
    opacity: 0.6;
}
.pick-card:hover {
    border-color: var(--ball-border);
    box-shadow: 0 0 28px var(--ball-glow);
}
.pick-card:hover {
    border-color: var(--hard-border);
    box-shadow: 0 4px 18px rgba(var(--hard-rgb), 0.10);
}
.pick-card-metrics {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    flex-wrap: wrap;
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.56rem;
    font-weight: 650;
    letter-spacing: var(--tracking-data);
    text-transform: uppercase;
}
.pick-card-title {
    color: var(--text);
    font-family: var(--font-display);
    font-size: 15px;
    font-weight: var(--weight-title);
    letter-spacing: 0;
    line-height: 1.24;
}
.pick-card-context {
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.56rem;
    font-weight: var(--weight-label);
    letter-spacing: var(--tracking-data);
    line-height: 1.45;
    margin-top: 7px;
    text-transform: uppercase;
}
.pick-card-metric {
    display: inline-flex;
    align-items: center;
    min-height: 24px;
    padding: 5px 7px;
    border: 1px solid var(--line);
    border-radius: var(--radius-sm);
    background: var(--control-bg);
    color: var(--text2);
}
.pick-card-metric-strong {
    color: var(--text);
}
.pick-card-actions {
    margin-top: 10px;
    display: flex;
    gap: 8px;
    align-items: center;
}

/* ── Modern pick action layout (input + primary + ghost link) ── */
.pick-card-actions-modern {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    align-items: center;
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--line);
}
.pick-card-actions-modern .pick-action-input {
    flex: 1 1 110px;
    min-width: 0;
    padding: 9px 12px;
    font-size: 13px;
    font-family: var(--font-mono);
    border-radius: 999px;
}
.pick-card-actions-modern .pick-action-primary {
    flex: 0 0 auto;
    padding: 9px 18px;
    font-size: 0.62rem;
    font-weight: 700;
    letter-spacing: 1.2px;
    text-transform: uppercase;
    border-radius: 999px;
    white-space: nowrap;
}
.pick-action-ghost {
    flex: 0 0 auto;
    margin-left: auto;
    padding: 9px 4px;
    color: var(--text2);
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: 600;
    letter-spacing: 1px;
    text-transform: uppercase;
    text-decoration: none;
    border: 0;
    background: transparent;
    transition: color 0.18s ease;
    cursor: pointer;
}
.pick-action-ghost:hover {
    color: var(--success);
}
.pick-card-actions-settled {
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px solid var(--line);
    display: flex;
    justify-content: flex-end;
}

.bet-match-card {
    padding: 0;
    overflow: hidden;
}
.bet-match-card::before {
    inset: 18px auto 18px 0;
}
.surface-frame-hard::before { background: linear-gradient(180deg, var(--hard), rgba(var(--hard-rgb),0.2)); }
.surface-frame-clay::before { background: linear-gradient(180deg, var(--clay), rgba(var(--clay-rgb),0.2)); }
.surface-frame-grass::before { background: linear-gradient(180deg, var(--grass), rgba(var(--grass-rgb),0.2)); }
.surface-frame-indoor::before { background: linear-gradient(180deg, var(--ball), rgba(var(--ball-mid-rgb),0.25)); }
.bet-match-head {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 14px;
    padding: 16px 18px 12px 20px;
}
.bet-match-index {
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.52rem;
    font-weight: var(--weight-label);
    letter-spacing: 1.4px;
    margin-bottom: 7px;
    text-transform: uppercase;
}
.bet-player-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 1px;
    border-top: 1px solid var(--line);
    border-bottom: 1px solid var(--line);
    background: var(--line);
}
.bet-player-card {
    min-width: 0;
    display: grid;
    grid-template-columns: 112px minmax(0, 1fr);
    gap: 12px;
    align-items: center;
    padding: 12px 14px;
    background:
        linear-gradient(180deg, var(--sheen-soft), rgba(255,255,255,0)),
        var(--bg2);
}
.bet-player-visual {
    position: relative;
    aspect-ratio: 4 / 5;
    width: 112px;
    border-radius: var(--radius-md);
    overflow: hidden;
    background: var(--bg3);
    border: 1px solid var(--line);
    box-shadow: inset 0 1px 0 var(--sheen-soft);
}
.bet-player-card.is-pick-side .bet-player-visual {
    border-color: var(--success);
    outline: 2px solid var(--success);
    outline-offset: 2px;
    box-shadow: 0 0 0 5px rgba(var(--success-rgb),0.12);
}
.bet-player-photo {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center top;
}
.bet-player-placeholder {
    position: absolute;
    inset: 0;
    overflow: hidden;
    background:
        linear-gradient(180deg, var(--sheen), transparent 30%),
        linear-gradient(145deg, var(--ball-subtle), var(--bg3) 42%, rgba(var(--ball-mid-rgb),0.10));
}
.bet-player-visual:not(.is-fallback) .bet-player-placeholder {
    display: none;
}
.bet-player-placeholder-court {
    position: absolute;
    inset: 58% 10% 8%;
    border: 1px solid var(--ball-border);
    border-left: 0;
    border-right: 0;
    transform: perspective(140px) rotateX(62deg);
    opacity: 0.72;
}
.bet-player-placeholder-figure {
    position: absolute;
    left: 44%;
    top: 29%;
    width: 22%;
    height: 35%;
    border-radius: 999px 999px 40% 40%;
    background: linear-gradient(180deg, rgba(var(--ink-rgb),0.43), rgba(var(--ink-rgb),0.20));
    transform: rotate(-10deg);
}
.bet-player-placeholder-figure::before {
    content: '';
    position: absolute;
    top: -24%;
    left: 18%;
    width: 58%;
    aspect-ratio: 1;
    border-radius: 50%;
    background: rgba(var(--ink-rgb),0.47);
}
.bet-player-placeholder-figure::after {
    content: '';
    position: absolute;
    left: -48%;
    top: 30%;
    width: 135%;
    height: 9%;
    border-radius: 999px;
    background: rgba(var(--ink-rgb),0.35);
    transform: rotate(-19deg);
}
.bet-player-placeholder-racket {
    position: absolute;
    right: 20%;
    top: 30%;
    width: 22%;
    aspect-ratio: 0.72;
    border: 2px solid rgba(var(--ball-deep-rgb),0.62);
    border-radius: 50%;
    transform: rotate(30deg);
}
.bet-player-placeholder-racket::after {
    content: '';
    position: absolute;
    left: 50%;
    top: 94%;
    width: 2px;
    height: 30px;
    background: rgba(var(--ball-deep-rgb),0.62);
    transform: translateX(-50%) rotate(-8deg);
    transform-origin: top center;
}
.bet-player-copy {
    min-width: 0;
}
.bet-player-kicker {
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.52rem;
    font-weight: var(--weight-label);
    letter-spacing: 0.7px;
    text-transform: uppercase;
}
.bet-player-name {
    color: var(--text);
    font-family: var(--font-sport-display);
    font-size: 1.2rem;
    font-weight: 700;
    letter-spacing: 0;
    line-height: 0.96;
    margin-top: 5px;
    overflow-wrap: anywhere;
    text-transform: uppercase;
}
.bet-player-pick-badge,
.bet-player-side-label {
    display: inline-flex;
    align-items: center;
    min-height: 22px;
    margin-top: 9px;
    padding: 0 7px;
    border-radius: var(--radius-sm);
    font-family: var(--font-mono);
    font-size: 0.5rem;
    font-weight: var(--weight-label);
    letter-spacing: 0.8px;
    text-transform: uppercase;
}
.bet-player-pick-badge {
    color: var(--text-on-ball);
    background: var(--ball);
}
.bet-player-side-label {
    color: var(--text3);
    border: 1px solid var(--line);
    background: var(--control-bg);
}
.bet-match-metrics {
    padding: 12px 18px 0 20px;
}
.bet-match-card .pick-card-actions {
    padding: 0 18px 16px 20px;
}
.bet-match-card > .pick-detail {
    margin: 12px 18px 16px 20px;
}
.analysis-discovery-link {
    min-height: 42px;
    padding: 0 14px;
    font-size: 0.6rem;
    white-space: nowrap;
}
.pick-analysis-page {
    max-width: 1020px;
}
/* ── Back navigation (modern pill) ── */
.analysis-back-link,
a.analysis-back-link:link,
a.analysis-back-link:visited {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 8px 14px 8px 12px;
    border: 1px solid var(--line);
    border-radius: 999px;
    background: var(--control-bg);
    color: var(--text2);
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: 700;
    letter-spacing: 1px;
    margin-bottom: 18px;
    text-decoration: none;
    text-transform: uppercase;
    transition: border-color 0.18s ease, background 0.18s ease, color 0.18s ease;
    cursor: pointer;
}
.analysis-back-link::before {
    content: '\2190';
    color: var(--success);
    font-size: 0.85rem;
    font-weight: 700;
    line-height: 1;
    transition: transform 0.18s ease;
}
.analysis-back-link:hover {
    border-color: var(--ball-border);
    background: var(--ball-subtle);
    color: var(--text);
}
.analysis-back-link:hover::before {
    transform: translateX(-2px);
}
.analysis-page-head {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 16px;
    margin-bottom: 16px;
}
.analysis-page-title {
    font-family: var(--font-sport-display);
    font-size: 2.85rem;
    font-weight: 800;
    letter-spacing: 0;
    line-height: 0.9;
    margin-bottom: 8px;
    text-transform: uppercase;
}
.analysis-hero-card,
.analysis-reading-panel {
    position: relative;
    overflow: hidden;
    background:
        linear-gradient(180deg, var(--sheen-soft), rgba(255,255,255,0)),
        var(--bg2);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    margin-bottom: 12px;
    box-shadow: 0 12px 32px rgba(var(--shadow-rgb), 0.10);
}
.analysis-hero-card::before {
    content: '';
    position: absolute;
    inset: 16px auto 16px 0;
    width: 2px;
    border-radius: 0 2px 2px 0;
}
.analysis-player-grid {
    border-top: 0;
}
.analysis-player-grid .bet-player-card {
    grid-template-columns: 132px minmax(0, 1fr);
    gap: 16px;
    padding: 16px 18px;
    background:
        linear-gradient(180deg, var(--sheen-soft), rgba(255,255,255,0)),
        var(--bg2);
}
.analysis-player-grid .bet-player-visual {
    width: 132px;
    border-color: var(--line);
}
.analysis-player-grid .bet-player-name {
    font-size: 1.78rem;
}
.analysis-player-grid .bet-player-kicker {
    color: var(--text2);
    font-family: var(--font-body);
    font-size: 0.62rem;
    font-weight: 700;
    letter-spacing: 0.45px;
}
.analysis-metrics-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(112px, 1fr));
    gap: 1px;
    border-top: 1px solid var(--line);
    background: var(--line);
}
.analysis-metric {
    min-width: 0;
    min-height: 72px;
    padding: 14px 16px;
    background: var(--bg2);
}
.analysis-metric-label {
    color: var(--text3);
    font-family: var(--font-body);
    font-size: 0.58rem;
    font-weight: var(--weight-label);
    letter-spacing: 0.55px;
    text-transform: uppercase;
}
.analysis-metric-value {
    color: var(--text);
    font-family: var(--font-sport-display);
    font-size: 1.55rem;
    font-weight: 800;
    letter-spacing: 0;
    line-height: 0.95;
    margin-top: 6px;
    overflow-wrap: anywhere;
    text-transform: uppercase;
}
.analysis-metric-accent {
    color: var(--success);
}
.analysis-player-stats {
    border-top: 1px solid var(--line);
    background: var(--bg2);
}
.analysis-stat-head,
.analysis-stat-row {
    display: grid;
    grid-template-columns: minmax(78px, 1fr) minmax(128px, 1.1fr) minmax(78px, 1fr);
    align-items: center;
    gap: 1px;
}
.analysis-stat-head {
    min-height: 34px;
    color: var(--text3);
    font-family: var(--font-body);
    font-size: 0.55rem;
    font-weight: var(--weight-label);
    letter-spacing: 0.65px;
    text-transform: uppercase;
    background: var(--bg3);
}
.analysis-stat-head span {
    padding: 0 14px;
}
.analysis-stat-head span:nth-child(2) {
    color: var(--success);
    text-align: center;
}
.analysis-stat-head span:nth-child(3) {
    text-align: right;
}
.analysis-stat-row {
    min-height: 42px;
    border-top: 1px solid var(--line);
    background: var(--card-veil);
}
.analysis-stat-side,
.analysis-stat-label {
    min-width: 0;
    padding: 0 14px;
}
.analysis-stat-side {
    overflow: hidden;
}
.analysis-stat-side-right {
    text-align: right;
}
.analysis-stat-label {
    color: var(--text2);
    font-family: var(--font-body);
    font-size: 0.56rem;
    font-weight: var(--weight-label);
    letter-spacing: 0.6px;
    line-height: 1.12;
    overflow-wrap: anywhere;
    text-align: center;
    text-transform: uppercase;
}
.analysis-h2h-row,
.analysis-form-row {
    min-height: 42px;
}
.analysis-surface-context,
.analysis-h2h-surface {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    gap: 3px;
    line-height: 1;
    max-width: 100%;
    min-width: 0;
}
.analysis-surface-context small,
.analysis-h2h-surface small {
    color: var(--text3);
    font-size: 0.47rem;
    font-weight: 800;
    letter-spacing: 0.7px;
    text-transform: uppercase;
}
.analysis-surface-context strong,
.analysis-h2h-surface strong {
    color: var(--success);
    font-family: var(--font-sport-display);
    font-size: 0.8rem;
    font-weight: 850;
    letter-spacing: 0;
    line-height: 1.1;
    max-width: 100%;
    overflow-wrap: anywhere;
    text-transform: uppercase;
    white-space: normal;
}
.analysis-surface-context.surface-clay strong {
    color: var(--clay);
}
.analysis-surface-context.surface-grass strong {
    color: var(--grass);
}
.analysis-surface-context.surface-indoor strong {
    color: var(--ace);
}
.analysis-stat-value {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    max-width: 100%;
    min-height: 26px;
    min-width: 0;
    padding: 0 9px;
    border: 1px solid var(--control-border);
    border-radius: var(--radius-sm);
    background: var(--input-bg);
    color: var(--text2);
    font-family: var(--font-body);
    font-size: 0.62rem;
    font-weight: 760;
    letter-spacing: 0.25px;
    line-height: 1.1;
    overflow-wrap: anywhere;
    text-transform: uppercase;
    white-space: normal;
}
.surface-form-seq {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    justify-content: flex-start;
    max-width: 100%;
    min-height: 24px;
}
.analysis-stat-side-right .surface-form-seq {
    justify-content: flex-end;
}
.surface-form-seq span {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: var(--radius-sm);
    border: 1px solid var(--control-border);
    background: var(--input-bg);
    font-family: var(--font-body);
    font-size: 0.64rem;
    font-weight: 900;
    line-height: 1;
}
.surface-form-seq .is-win {
    color: var(--success);
    border-color: rgba(var(--success-rgb),0.35);
    background: rgba(var(--success-rgb),0.08);
}
.surface-form-seq .is-loss {
    color: var(--fault);
    border-color: rgba(var(--fault-rgb),0.30);
    background: rgba(var(--fault-rgb),0.08);
}
.analysis-profile-row {
    min-height: 92px;
}
.analysis-profile-row .analysis-stat-side {
    display: flex;
    align-items: center;
    padding-top: 8px;
    padding-bottom: 8px;
}
.analysis-stat-side-right .analysis-profile-chips {
    justify-content: stretch;
}
.analysis-profile-chips {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 6px;
    width: 100%;
    min-width: 0;
}
.analysis-profile-chip {
    display: inline-flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    gap: 2px;
    min-width: 0;
    min-height: 42px;
    padding: 6px 8px;
    border: 1px solid var(--control-border);
    border-radius: var(--radius-sm);
    background: var(--control-bg);
    color: var(--text2);
    font-family: var(--font-body);
    overflow: hidden;
}
.analysis-stat-side-right .analysis-profile-chip {
    align-items: flex-end;
    text-align: right;
}
.analysis-profile-chip small {
    color: var(--success);
    font-size: 0.46rem;
    font-weight: 800;
    letter-spacing: 0.55px;
    text-transform: uppercase;
}
.analysis-profile-chip strong {
    color: var(--text);
    font-family: var(--font-body);
    font-size: 0.68rem;
    font-weight: 820;
    letter-spacing: 0;
    line-height: 1.08;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    text-transform: uppercase;
    white-space: nowrap;
}
.analysis-stat-value.is-pick-strong {
    color: var(--success);
    border-color: var(--ball-border);
    background: var(--ball-subtle);
}
.analysis-stat-value.is-opponent-strong {
    color: var(--fault);
    border-color: rgba(var(--fault-rgb),0.32);
    background: rgba(var(--fault-rgb),0.08);
}
.analysis-stat-note {
    padding: 7px 14px 8px;
    border-top: 1px solid var(--line);
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.48rem;
    font-weight: 600;
    letter-spacing: 0.45px;
    line-height: 1.45;
    text-align: center;
    text-transform: uppercase;
}
.analysis-reading-panel {
    padding: 18px 20px 20px;
}
.analysis-reading-panel .fade-in {
    padding-top: 0 !important;
}
.analysis-stats-panel {
    margin-top: 12px;
}
.analysis-feature-table {
    margin-top: 10px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    overflow: hidden;
    background: var(--control-bg);
}
.analysis-feature-row {
    display: grid;
    grid-template-columns: 72px minmax(0, 1fr) 46px 72px;
    align-items: center;
    min-height: 42px;
    border-top: 1px solid var(--line);
}
.analysis-feature-row:first-child {
    border-top: 0;
}
.analysis-feature-side {
    padding: 0 10px;
    font-family: var(--font-mono);
    font-size: 0.48rem;
    font-weight: 800;
    letter-spacing: 0.7px;
    text-transform: uppercase;
}
.analysis-feature-side-right {
    text-align: right;
}
.analysis-feature-side span {
    display: inline-flex;
    align-items: center;
    min-height: 20px;
    padding: 0 6px;
    border-radius: var(--radius-sm);
}
.analysis-feature-side .is-pick {
    color: var(--text-on-ball);
    background: var(--ball);
}
.analysis-feature-side .is-opponent {
    color: var(--fault);
    background: rgba(var(--fault-rgb),0.10);
    border: 1px solid rgba(var(--fault-rgb),0.25);
}
.analysis-feature-main {
    min-width: 0;
    padding: 7px 8px;
}
.analysis-feature-main span,
.analysis-feature-main small {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.analysis-feature-main span {
    color: var(--text);
    font-family: var(--font-display);
    font-size: 0.86rem;
    font-weight: var(--weight-title);
}
.analysis-feature-main small {
    margin-top: 2px;
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.46rem;
    font-weight: var(--weight-label);
    letter-spacing: 0.6px;
    text-transform: uppercase;
}
.analysis-feature-impact {
    color: var(--text2);
    font-family: var(--font-mono);
    font-size: 0.58rem;
    font-weight: 800;
    text-align: center;
}
@media (max-width: 720px) {
    .bet-match-head {
        padding: 14px 14px 10px 16px;
    }
    .bet-player-grid {
        grid-template-columns: 1fr;
    }
    .bet-player-card {
        grid-template-columns: 92px minmax(0, 1fr);
        gap: 11px;
        padding: 11px 12px 11px 16px;
    }
    .bet-player-visual {
        width: 92px;
    }
    .bet-player-name {
        font-size: 0.92rem;
    }
    .bet-match-metrics {
        padding: 11px 14px 0 16px;
    }
    .bet-match-card .pick-card-actions {
        flex-wrap: wrap;
        padding: 0 14px 14px 16px;
    }
    .bet-match-card .pick-card-actions .form-input {
        min-width: 120px;
    }
    .bet-match-card > .pick-detail {
        margin: 12px 14px 14px 16px;
    }
    .analysis-page-head {
        flex-direction: column;
    }
    .analysis-page-title {
        font-size: 2.2rem;
        line-height: 0.94;
    }
    .analysis-player-grid .bet-player-card {
        grid-template-columns: 106px minmax(0, 1fr);
        gap: 13px;
        padding: 13px 12px 13px 16px;
    }
    .analysis-player-grid .bet-player-visual {
        width: 106px;
    }
    .analysis-player-grid .bet-player-name {
        font-size: 1.48rem;
    }
    .analysis-player-grid .bet-player-kicker {
        font-size: 0.56rem;
    }
    .analysis-metrics-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    .analysis-metrics-grid .analysis-metric:last-child:nth-child(odd) {
        grid-column: 1 / -1;
    }
    .analysis-stat-head,
    .analysis-stat-row {
        grid-template-columns: minmax(86px, 1fr) minmax(92px, 0.86fr) minmax(86px, 1fr);
    }
    .analysis-form-row {
        grid-template-columns: minmax(104px, 1fr) minmax(88px, 0.72fr) minmax(104px, 1fr);
    }
    .analysis-h2h-row {
        grid-template-columns: minmax(92px, 1fr) minmax(94px, 0.86fr) minmax(92px, 1fr);
    }
    .analysis-stat-head span,
    .analysis-stat-side,
    .analysis-stat-label {
        padding-left: 8px;
        padding-right: 8px;
    }
    .analysis-stat-label {
        font-size: 0.5rem;
    }
    .analysis-surface-context small {
        font-size: 0.42rem;
    }
    .analysis-surface-context strong {
        font-size: 0.68rem;
        line-height: 1;
    }
    .analysis-stat-value {
        font-size: 0.54rem;
        padding: 0 6px;
    }
    .analysis-profile-row {
        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
        grid-template-areas:
            "label label"
            "left right";
        align-items: stretch;
        min-height: 0;
    }
    .analysis-profile-row .analysis-stat-side-left {
        grid-area: left;
    }
    .analysis-profile-row .analysis-stat-side-right {
        grid-area: right;
    }
    .analysis-profile-row .analysis-stat-label {
        grid-area: label;
        padding-top: 8px;
        padding-bottom: 4px;
    }
    .analysis-profile-row .analysis-stat-side {
        padding-top: 4px;
        padding-bottom: 10px;
    }
    .analysis-profile-chips {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 4px;
    }
    .analysis-profile-chip {
        min-width: 0;
        min-height: 34px;
        padding: 4px 5px;
    }
    .analysis-profile-chip small {
        font-size: 0.36rem;
    }
    .analysis-profile-chip strong {
        font-size: 0.58rem;
    }
    .surface-form-seq {
        gap: 2px;
    }
    .surface-form-seq span {
        width: 18px;
        height: 21px;
        font-size: 0.52rem;
    }
    .analysis-feature-row {
        grid-template-columns: 58px minmax(0, 1fr) 38px 58px;
        min-height: 52px;
    }
    .analysis-feature-side {
        padding: 0 6px;
        font-size: 0.42rem;
    }
    .analysis-feature-main span,
    .analysis-feature-main small {
        white-space: normal;
        overflow: visible;
        text-overflow: clip;
        line-height: 1.25;
    }
    .analysis-feature-main span {
        font-size: 0.78rem;
    }
    .analysis-metrics-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    .analysis-metrics-grid .analysis-metric:last-child:nth-child(odd) {
        grid-column: 1 / -1;
    }
    .analysis-reading-panel {
        padding: 16px;
    }
}
@media (max-width: 420px) {
    .bet-player-card {
        grid-template-columns: 82px minmax(0, 1fr);
    }
    .bet-player-visual {
        width: 82px;
    }
    .bet-player-kicker {
        font-size: 0.48rem;
    }
    .bet-player-name {
        font-size: 0.86rem;
    }
    .analysis-player-grid .bet-player-card {
        grid-template-columns: 94px minmax(0, 1fr);
    }
    .analysis-player-grid .bet-player-visual {
        width: 94px;
    }
    .analysis-player-grid .bet-player-name {
        font-size: 1.28rem;
    }
    .analysis-profile-chip {
        min-width: 0;
    }
}

/* ── Tournament cards ── */
.tournament-page-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
    margin-bottom: 20px;
}
.tournament-page-subtitle {
    color: var(--text2);
    font-size: 13px;
    line-height: 1.6;
    margin: 0;
    max-width: 620px;
}
.tournament-count-card {
    background: var(--bg2);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    padding: 12px 14px;
    text-align: right;
    min-width: 86px;
}
.tournament-count-card span {
    display: block;
    font-family: var(--font-sport-display);
    font-size: 1.76rem;
    font-weight: 800;
    color: var(--success);
    line-height: 0.92;
}
.tournament-count-card small {
    display: block;
    margin-top: 8px;
    font-family: var(--font-body);
    font-size: 0.68rem;
    font-weight: 600;
    letter-spacing: 0;
    color: var(--text3);
    text-transform: uppercase;
}
.tournament-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin: 14px 0;
}
.tournament-tabs .period-btn {
    gap: 9px;
    min-height: 38px;
    padding: 0 8px;
    font-family: var(--font-body);
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0;
}
.tournament-tab-label {
    line-height: 1;
}
.tournament-tab-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 25px;
    height: 24px;
    padding: 0 8px;
    border: 1px solid var(--control-border);
    border-radius: var(--radius-sm);
    background: var(--control-bg);
    color: var(--text2);
    font-family: var(--font-sport-display);
    font-size: 1.02rem;
    font-weight: 800;
    line-height: 1;
    opacity: 1;
}
.period-btn.active .tournament-tab-count {
    border-color: var(--ball-border);
    background: var(--ball-subtle);
    color: var(--success);
}
.tournament-search-wrap {
    margin-bottom: 16px;
}
.tournament-search {
    max-width: 420px;
}
.tournament-tag-filters {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 0 0 16px;
}

/* ── Filter tags (top of page) — modern pill ── */
.tournament-tag-filter {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    border: 1px solid var(--control-border);
    border-radius: 999px;
    background: var(--control-bg);
    color: var(--text2);
    cursor: pointer;
    font-family: var(--font-mono);
    font-size: 0.58rem;
    font-weight: 700;
    letter-spacing: 0.7px;
    padding: 8px 14px;
    text-transform: uppercase;
    transition: border-color 0.18s ease, background 0.18s ease, color 0.18s ease;
}
.tournament-tag-filter::after {
    /* underline removed in pill design */
    content: none;
}
.tournament-tag-filter:hover {
    border-color: rgba(var(--ink-rgb), 0.30);
    background: var(--control-bg-hover);
    color: var(--text);
}
.tournament-tag-filter.active {
    border-color: var(--ball-border);
    background: var(--ball-subtle);
    color: var(--success);
}
.tournament-tag-filter-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 18px;
    height: 18px;
    padding: 0 6px;
    border-radius: 999px;
    background: rgba(var(--ink-rgb), 0.08);
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.62rem;
    font-weight: 800;
    line-height: 1;
    transition: background 0.18s ease, color 0.18s ease;
}
.tournament-tag-filter:hover .tournament-tag-filter-count {
    background: rgba(var(--ink-rgb), 0.12);
    color: var(--text2);
}
.tournament-tag-filter.active .tournament-tag-filter-count {
    background: rgba(var(--ball-mid-rgb),0.18);
    color: var(--text);
}

/* ── Card tags (inside tournament card) — small pill ── */
.tournament-tag {
    border: 1px solid var(--control-border);
    border-radius: 999px;
    background: var(--control-bg);
    color: var(--text2);
    font-family: var(--font-mono);
    font-size: 0.55rem;
    font-weight: 700;
    letter-spacing: 0.6px;
    text-transform: uppercase;
    cursor: pointer;
    padding: 4px 10px;
    transition: border-color 0.18s ease, background 0.18s ease, color 0.18s ease;
}
.tournament-tag:hover,
.tournament-tag.active {
    border-color: var(--ball-border);
    background: var(--ball-subtle);
    color: var(--success);
}
.tournament-tag-filter.active::after {
    background: var(--ball);
    opacity: 1;
    transform: scaleX(1);
}
.tournament-tag-static {
    cursor: default;
}
.tournament-tag-static:hover {
    border-color: var(--control-border);
    background: var(--control-bg);
    color: var(--text2);
}
.pick-tournament-chip {
    color: var(--success);
    text-decoration: none;
    border-bottom: 1px solid var(--ball-border);
}
.pick-tournament-chip:hover {
    color: var(--text);
    border-bottom-color: var(--success);
}
.tournament-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 12px;
}
.tournament-card {
    overflow: hidden;
    background: var(--bg2);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    transition: border-color 0.25s ease, box-shadow 0.25s ease, transform 0.15s ease;
}
.tournament-card:hover {
    border-color: var(--ball-border);
    box-shadow: 0 0 28px var(--ball-glow);
}
.tournament-image-wrap {
    position: relative;
    aspect-ratio: 16 / 9;
    background: var(--bg3);
    overflow: hidden;
    border-radius: var(--radius-image) var(--radius-image) 0 0;
}
.tournament-image-wrap img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.tournament-image-wrap::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, var(--img-fade-0) 42%, var(--img-fade-1) 100%);
    pointer-events: none;
}
.tournament-status {
    position: absolute;
    top: 10px;
    right: 10px;
    z-index: 1;
    border-radius: var(--radius-pill);
    padding: 4px 8px;
    font-family: var(--font-mono);
    font-size: 0.55rem;
    font-weight: 700;
    letter-spacing: 1px;
    text-transform: uppercase;
    background: var(--chip-glass);
    border: 1px solid var(--line);
}
.status-current { color: var(--success); }
.status-upcoming { color: var(--text2); }
.status-past { color: var(--text2); }
.tournament-card-body {
    padding: 16px;
}
.tournament-meta-line {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-bottom: 10px;
    font-family: var(--font-mono);
    font-size: 0.58rem;
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: 1px;
}
.tournament-card h3 {
    margin: 0;
    font-family: var(--font-body);
    font-size: 1.16rem;
    font-weight: 650;
    letter-spacing: 0;
    line-height: 1.15;
}
.tournament-dates {
    margin: 6px 0 0;
    font-family: var(--font-mono);
    font-size: 0.6rem;
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: 0.8px;
}
.tournament-caption {
    min-height: 42px;
    margin: 12px 0 0;
    color: var(--text2);
    font-size: 13px;
    line-height: 1.55;
}
.tournament-card-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 14px;
}
.tournament-card-stats {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 14px;
    font-family: var(--font-mono);
    font-size: 0.58rem;
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: 0.8px;
}
.tournament-card-stats span {
    padding: 4px 7px;
    border-radius: var(--radius-sm);
    background: var(--control-bg);
}
/* ── Tournament signal grid (Public / VIP / Free) — modernised ── */
.tournament-card-signal {
    display: grid;
    grid-template-columns: minmax(86px, 0.42fr) minmax(0, 1fr);
    gap: 10px;
    align-items: stretch;
    margin-top: 16px;
    padding-top: 16px;
    border-top: 1px solid var(--line);
}
.tournament-signal-main {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    column-gap: 10px;
    align-items: end;
    min-height: 64px;
    padding: 12px 12px;
    border: 1px solid var(--control-border);
    border-radius: var(--radius-md);
    background: var(--control-bg);
    position: relative;
    transition: border-color 0.2s ease, background 0.2s ease;
}
.tournament-signal-main.has-active {
    border-color: var(--ball-border);
    background: var(--ball-subtle);
}
.tournament-signal-main strong {
    color: var(--text3);
    font-family: var(--font-sport-display);
    font-size: 2rem;
    font-weight: 800;
    line-height: 0.9;
}
.tournament-signal-main.has-active strong {
    color: var(--success);
}
.tournament-signal-main span {
    margin: 0;
    padding-bottom: 2px;
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.58rem;
    font-weight: 700;
    letter-spacing: 1px;
    line-height: 1.2;
    text-transform: uppercase;
}
.tournament-card-signal .tournament-card-stats {
    align-content: center;
    margin-top: 0;
}
.tournament-card-signal-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
}
.tournament-card-signal-grid .tournament-card-stats {
    grid-column: 1 / -1;
}
.tournament-card-signal-grid .tournament-signal-main {
    grid-template-columns: 1fr;
    align-items: start;
    gap: 6px;
    min-width: 0;
}
.tournament-card-signal-grid .tournament-signal-main strong {
    font-size: 1.78rem;
}
/* VIP gets a subtle left accent stripe to signal exclusivity */
.tournament-signal-main.is-vip {
    overflow: hidden;
}
.tournament-signal-main.is-vip::before {
    content: '';
    position: absolute;
    inset: 0 auto 0 0;
    width: 3px;
    background: var(--ball);
    opacity: 0.35;
}
.tournament-signal-main.is-vip.has-active::before {
    opacity: 1;
}
.tournament-signal-main.is-vip.has-active {
    border-color: var(--ball-border);
    background: var(--ball-subtle);
}
.tournament-signal-main.is-vip.has-active strong {
    color: var(--success);
}
/* FREE (Telegram public analyses) — neutral, calmer */
.tournament-signal-main.is-free.has-active {
    border-color: rgba(var(--ink-rgb), 0.26);
    background: var(--control-bg-hover);
}
.tournament-signal-main.is-free.has-active strong {
    color: var(--text);
}
.tournament-actions {
    display: flex;
    gap: 8px;
    margin-top: 14px;
}
.tournament-actions .btn-primary,
.tournament-actions .btn-secondary,
.tournament-actions .btn-detail {
    flex: 1;
    padding: 9px 10px;
    text-align: center;
}
.tournament-back-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 8px 14px 8px 12px;
    border: 1px solid var(--line);
    border-radius: 999px;
    background: var(--control-bg);
    color: var(--text2);
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: 700;
    letter-spacing: 1px;
    text-transform: uppercase;
    margin-bottom: 18px;
    cursor: pointer;
    transition: border-color 0.18s ease, background 0.18s ease, color 0.18s ease;
}
.tournament-back-btn:hover {
    border-color: var(--ball-border);
    background: var(--ball-subtle);
    color: var(--text);
}
.tournament-back-btn::after { content: none; }
.tournament-detail-hero {
    display: grid;
    grid-template-columns: minmax(0, 1.15fr) minmax(280px, 0.85fr);
    gap: 18px;
    align-items: stretch;
    margin-bottom: 18px;
}
.tournament-detail-image {
    overflow: hidden;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--bg2);
    aspect-ratio: 16 / 9;
}
.tournament-detail-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.tournament-detail-body {
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--bg2);
    padding: 18px;
}
.tournament-page-head .page-title,
.tournament-detail-body .page-title {
    font-family: var(--font-sport-display);
    font-size: clamp(2.15rem, 5.2vw, 3.7rem);
    font-weight: 800;
    letter-spacing: 0;
    line-height: 0.94;
    text-transform: uppercase;
}
.tournament-detail-tags {
    margin-top: 12px;
}
.tournament-detail-caption {
    min-height: 0;
    margin-top: 14px;
}
.tournament-detail-actions {
    margin-top: 16px;
}
.tournament-detail-tabs {
    position: sticky;
    top: calc(56px + var(--safe-top));
    z-index: 20;
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 12px;
    margin: 0 0 18px;
    padding: 10px 0 12px;
    border-bottom: 1px solid var(--line);
    background: var(--glass-strong);
    backdrop-filter: blur(18px);
    -webkit-backdrop-filter: blur(18px);
}
.tournament-detail-tab {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 9px;
    min-height: 38px;
    padding: 0 10px;
    border: 1px solid var(--control-border);
    border-radius: var(--radius-md);
    background: var(--control-bg);
    color: var(--text2);
    cursor: pointer;
    font-family: var(--font-body);
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0;
    text-transform: uppercase;
}
.tournament-detail-tab:hover {
    border-color: var(--ball-border);
    color: var(--text);
}
.tournament-detail-tab span {
    margin-left: 0;
}
.tournament-detail-tab-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 24px;
    height: 23px;
    padding: 0 8px;
    border: 1px solid var(--ball-border);
    border-radius: var(--radius-sm);
    background: var(--ball-subtle);
    color: var(--success);
    font-family: var(--font-sport-display);
    font-size: 1rem;
    font-weight: 800;
    line-height: 1;
}
.tournament-section {
    scroll-margin-top: calc(86px + var(--safe-top));
    margin-bottom: 24px;
}
.tournament-section-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    margin: 32px 0 16px;
    padding: 14px 16px;
    border: 1px solid var(--line);
    border-left-width: 3px;
    border-radius: var(--radius-md);
    background: var(--bg2);
    position: relative;
}
.tournament-section-head h3 {
    margin: 0;
    font-family: var(--font-display);
    font-size: 1.05rem;
    font-weight: 700;
    letter-spacing: -0.2px;
    color: var(--text);
}
.tournament-section-head p {
    margin: 4px 0 0;
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.62rem;
    font-weight: 600;
    letter-spacing: 0.6px;
    line-height: 1.4;
    text-transform: uppercase;
}
/* tier-specific accent on left border */
#section-public .tournament-section-head,
.tournament-section-head[data-tier="public"] {
    border-left-color: var(--success);
}
#section-vip .tournament-section-head,
.tournament-section-head[data-tier="vip"] {
    border-left-color: var(--success);
    background: linear-gradient(90deg, rgba(var(--ball-mid-rgb),0.08) 0%, var(--bg2) 60%);
}
#section-analysis .tournament-section-head,
.tournament-section-head[data-tier="analysis"] {
    border-left-color: rgba(var(--ink-rgb), 0.35);
}
#section-past .tournament-section-head,
.tournament-section-head[data-tier="past"] {
    border-left-color: var(--text3);
}
.tournament-section-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 34px;
    min-height: 28px;
    padding: 0 9px;
    border: 1px solid var(--ball-border);
    border-radius: var(--radius-sm);
    background: var(--ball-subtle);
    color: var(--success);
    font-family: var(--font-mono);
    font-size: 0.62rem;
    font-weight: 850;
}
.tournament-detail-kpis {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(128px, 1fr));
    gap: 12px;
    margin-bottom: 18px;
}
.tournament-detail-kpis .kpi-card {
    min-width: 0;
    padding: 18px 16px;
    min-height: 112px;
}
.tournament-detail-kpis .kpi-value {
    display: block;
    font-family: var(--font-sport-display);
    font-size: clamp(2rem, 2.6vw, 2.55rem);
    font-weight: 800;
    line-height: 0.94;
    max-width: 100%;
    overflow: hidden;
    text-overflow: clip;
    white-space: nowrap;
}
.tournament-detail-kpis .kpi-label-row {
    margin-top: 13px;
    padding-top: 10px;
    border-top: 1px solid var(--line);
}
.tournament-detail-kpis .kpi-label {
    color: var(--text2);
    font-family: var(--font-body);
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0;
    line-height: 1.2;
    text-transform: none;
}
.tournament-user-bets-panel {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--line);
}
.tournament-user-bets-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 10px;
    color: var(--text2);
    font-family: var(--font-mono);
    font-size: 0.55rem;
    font-weight: var(--weight-label);
    letter-spacing: 0.8px;
    text-transform: uppercase;
}
.tournament-user-bets-head strong {
    color: var(--success);
    font-size: 0.72rem;
}
.tournament-user-bets-panel .pick-card {
    margin-bottom: 8px;
}
.analysis-free-card {
    margin-bottom: 14px;
}
.badge-free,
.badge-tag-free {
    background: rgba(var(--ace-rgb),0.12);
    color: var(--ace);
}
.badge-tag-vip {
    background: var(--ball-subtle);
    color: var(--text);
}
.badge-tag-public {
    background: var(--ball-subtle);
    color: var(--text);
}
.analysis-free-player-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
    margin-top: 12px;
}
.analysis-free-player {
    display: grid;
    grid-template-columns: 86px minmax(0, 1fr);
    gap: 12px;
    min-width: 0;
    padding: 10px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--control-bg);
}
.analysis-free-player-visual {
    position: relative;
    overflow: hidden;
    aspect-ratio: 4 / 5;
    border-radius: var(--radius-md);
    background: linear-gradient(180deg, var(--ball-subtle), var(--bg3));
}
.analysis-free-player-visual img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.analysis-free-player-visual:not(.is-fallback) .bet-player-placeholder {
    display: none;
}
.analysis-free-player-copy {
    min-width: 0;
    align-self: center;
}
.analysis-free-prob {
    margin-top: 8px;
    color: var(--success);
    font-family: var(--font-sport-display);
    font-size: 1.6rem;
    font-weight: 800;
    line-height: 1;
}
.analysis-odds-board {
    margin-top: 14px;
    padding-top: 12px;
    border-top: 1px solid var(--line);
}
.analysis-odds-side {
    margin-top: 12px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--control-bg);
    overflow: hidden;
}
.analysis-odds-side-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 10px 12px;
    border-bottom: 1px solid var(--line);
}
.analysis-odds-side-head strong {
    min-width: 0;
    color: var(--text);
    font-family: var(--font-body);
    font-size: 0.86rem;
    font-weight: 700;
    line-height: 1.15;
}
.analysis-odds-side-head span {
    flex: 0 0 auto;
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.56rem;
    font-weight: var(--weight-label);
    letter-spacing: 0.7px;
    text-transform: uppercase;
}
.analysis-odds-row {
    display: grid;
    grid-template-columns: minmax(90px, 1.15fr) 64px 72px minmax(112px, 0.9fr);
    gap: 8px;
    align-items: center;
    min-height: 42px;
    padding: 8px 10px;
    border-bottom: 1px solid var(--line);
    font-family: var(--font-mono);
    font-size: 0.62rem;
}
.analysis-odds-row:last-child {
    border-bottom: 0;
}
.analysis-odds-row-head {
    min-height: 32px;
    color: var(--text3);
    font-size: 0.54rem;
    font-weight: var(--weight-label);
    letter-spacing: 0.8px;
    text-transform: uppercase;
}
.analysis-odds-row.is-best-edge {
    background: rgba(var(--ace-rgb),0.07);
}
.analysis-bookmaker {
    display: flex;
    flex-direction: column;
    min-width: 0;
    color: var(--text2);
    overflow-wrap: anywhere;
}
.analysis-bookmaker small {
    margin-top: 3px;
    color: var(--ace);
    font-size: 0.48rem;
    letter-spacing: 0.7px;
    text-transform: uppercase;
}
.analysis-odds-value {
    color: var(--text);
    font-family: var(--font-sport-display);
    font-size: 1.12rem;
    font-weight: 800;
}
.analysis-follow-btn {
    width: 100%;
    min-height: 30px;
    padding: 0 9px;
    font-size: 0.52rem;
    white-space: normal;
    line-height: 1.1;
}
.analysis-follow-btn.is-followed {
    border-color: var(--ball-border);
    color: var(--text);
    background: var(--ball-subtle);
}
.analysis-odds-empty {
    padding: 12px;
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.58rem;
    text-align: center;
    text-transform: uppercase;
    letter-spacing: 0.8px;
}
.portfolio-bet-badges {
    display: inline-flex;
    align-items: center;
    justify-content: flex-end;
    gap: 6px;
    flex-wrap: wrap;
}
.portfolio-bet-card.tag-free {
    border-color: rgba(var(--ace-rgb),0.25);
}
.tournament-empty-state {
    padding: 22px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--control-bg);
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.62rem;
    font-weight: var(--weight-label);
    letter-spacing: 0.8px;
    text-align: center;
    text-transform: uppercase;
}
.tournament-profile-section {
    display: grid;
    grid-template-columns: minmax(0, 1.12fr) minmax(260px, 0.88fr);
    gap: 16px;
    margin: 0 0 24px;
    padding: 18px 0;
    border-top: 1px solid var(--line);
    border-bottom: 1px solid var(--line);
}
.tournament-profile-copy p {
    margin: 0;
    color: var(--text2);
    font-size: 13.5px;
    line-height: 1.72;
}
.tournament-profile-copy p + p {
    margin-top: 12px;
    color: var(--text3);
}
.tournament-facts-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
    align-self: start;
}
.tournament-fact {
    min-width: 0;
    padding: 10px 11px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background:
        linear-gradient(180deg, var(--sheen), rgba(255,255,255,0)),
        var(--bg2);
}
.tournament-fact span,
.tournament-fact strong {
    display: block;
}
.tournament-fact span {
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.5rem;
    font-weight: var(--weight-label);
    letter-spacing: var(--tracking-label);
    line-height: 1.25;
    text-transform: uppercase;
}
.tournament-fact strong {
    margin-top: 6px;
    color: var(--text);
    font-family: var(--font-display);
    font-size: 13px;
    font-weight: var(--weight-title);
    letter-spacing: 0;
    line-height: 1.28;
    overflow-wrap: anywhere;
}
.tournament-model-panel {
    grid-column: 1 / -1;
    padding: 14px 16px 14px 18px;
    border-left: 2px solid var(--ball);
    border-radius: 0 var(--radius-md) var(--radius-md) 0;
    background:
        radial-gradient(circle at 100% 0%, rgba(var(--ball-mid-rgb),0.06), transparent 34%),
        rgba(var(--ball-mid-rgb),0.05);
}
.tournament-model-panel ul {
    display: grid;
    gap: 9px;
    margin: 0;
    padding: 0;
    list-style: none;
}
.tournament-model-panel li {
    position: relative;
    padding-left: 14px;
    color: var(--text2);
    font-size: 13px;
    line-height: 1.55;
}
.tournament-model-panel li::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0.72em;
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: var(--ball);
    box-shadow: none;
}
.history-action-bar {
    position: relative;
    overflow: visible;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 4px 0 12px;
    border: 0;
    border-bottom: 1px solid var(--line);
    border-radius: 0;
    background: transparent;
    box-shadow: none;
}
.history-action-bar::before {
    content: none;
}
.history-export-copy {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 0;
    min-width: 0;
}
.history-export-mark {
    display: inline-grid;
    place-items: center;
    flex: 0 0 28px;
    width: 28px;
    height: 28px;
    border: 0;
    border-radius: 50%;
    background: var(--ball-subtle);
    color: var(--text);
    box-shadow: inset 0 0 0 1px var(--ball-border);
}
.history-export-text {
    min-width: 0;
}
.history-export-line {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
}
.history-action-eyebrow {
    display: inline-flex;
    align-items: center;
    min-height: 18px;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    color: var(--success);
    font-family: var(--font-mono);
    font-size: 0.48rem;
    font-weight: 800;
    letter-spacing: 0.45px;
    line-height: 1;
    text-transform: uppercase;
}
.history-action-eyebrow::before {
    content: none;
}
.history-action-title {
    font-family: var(--font-display);
    font-size: 13.5px;
    font-weight: var(--weight-title);
    letter-spacing: 0;
    line-height: 1.22;
    color: var(--text);
}
.history-action-subtitle {
    margin-top: 4px;
    font-size: 11.5px;
    line-height: 1.35;
    color: var(--text3);
}
.history-export-badges {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 9px;
}
.history-export-badge {
    display: inline-flex;
    align-items: center;
    min-height: 16px;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    color: var(--text2);
    font-family: var(--font-mono);
    font-size: 0.52rem;
    font-weight: var(--weight-label);
    letter-spacing: var(--tracking-data);
    line-height: 1;
    text-transform: uppercase;
}
.history-export-badge + .history-export-badge::before {
    content: '/';
    margin-right: 8px;
    color: var(--text3);
}
.history-export-btn {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 32px;
    height: 32px;
    min-height: 32px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: transparent;
    color: var(--success);
    font-family: var(--font-mono);
    font-size: 0.56rem;
    font-weight: 800;
    letter-spacing: var(--tracking-data);
    box-shadow: none;
    text-decoration: none;
    text-transform: uppercase;
    white-space: nowrap;
}
.history-export-btn:hover {
    background: transparent;
    box-shadow: none;
    color: var(--success);
}
.history-export-cta {
    display: inline-flex;
    align-items: baseline;
    gap: 6px;
    min-width: 0;
    text-align: left;
    white-space: nowrap;
}
.history-export-cta strong,
.history-export-cta small {
    display: block;
}
.history-export-cta strong {
    color: currentColor;
    font-size: 0.55rem;
    line-height: 1;
}
.history-export-cta small {
    color: var(--text3);
    font-size: 0.47rem;
    font-weight: var(--weight-label);
    letter-spacing: var(--tracking-data);
}
.history-export-icon {
    display: inline-grid;
    place-items: center;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--ball-subtle);
    color: var(--text);
    box-shadow: inset 0 0 0 1px var(--ball-border);
    transition: background 0.18s ease, box-shadow 0.18s ease, transform 0.16s ease;
}
.history-export-btn:hover .history-export-icon {
    background: rgba(var(--ball-mid-rgb),0.18);
    box-shadow: inset 0 0 0 1px rgba(var(--ball-deep-rgb),0.55);
}
.history-export-hint {
    margin-left: 2px;
}
@media (max-width: 640px) {
    .premium-page-head {
        align-items: flex-start;
    }
    .filter-toolbar {
        align-items: stretch;
        flex-direction: column;
    }
    .filter-toolbar-actions {
        justify-content: flex-start;
    }
    .ui-hint-popover {
        right: -6px;
        width: calc(100vw - 24px);
        max-width: 320px;
    }
    .tournament-page-head {
        align-items: stretch;
        flex-direction: column;
    }
    .tournament-count-card {
        text-align: left;
    }
    .tournament-grid {
        grid-template-columns: 1fr;
    }
    .tournament-search {
        max-width: none;
    }
    .tournament-tag-filters {
        flex-wrap: nowrap;
        overflow-x: auto;
        padding-bottom: 4px;
        scrollbar-width: none;
    }
    .tournament-tag-filter {
        white-space: nowrap;
    }
    .tournament-detail-hero {
        grid-template-columns: 1fr;
    }
    .tournament-detail-tabs {
        grid-template-columns: repeat(5, minmax(58px, 1fr));
        gap: 8px;
        top: calc(56px + var(--safe-top));
        overflow-x: auto;
        scrollbar-width: none;
    }
    .tournament-detail-tabs::-webkit-scrollbar {
        display: none;
    }
    .tournament-detail-tab {
        font-size: 0.5rem;
        letter-spacing: 0.45px;
        padding: 0 4px;
    }
    .tournament-card-signal {
        grid-template-columns: 1fr;
    }
    .tournament-detail-kpis {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    .tournament-detail-kpis .kpi-card:last-child:nth-child(odd) {
        grid-column: 1 / -1;
    }
    .analysis-free-player-grid {
        grid-template-columns: 1fr;
    }
    .analysis-free-player {
        grid-template-columns: 72px minmax(0, 1fr);
    }
    .analysis-odds-row {
        grid-template-columns: minmax(82px, 1fr) 52px 62px;
        gap: 6px;
    }
    .analysis-odds-row > span:last-child {
        grid-column: 1 / -1;
    }
    .analysis-follow-btn {
        min-height: 34px;
    }
    .portfolio-bet-badges {
        justify-content: flex-start;
    }
    .tournament-profile-section {
        grid-template-columns: 1fr;
    }
    .tournament-facts-grid {
        grid-template-columns: 1fr;
    }
    .history-action-bar {
        align-items: center;
        flex-direction: row;
    }
    .history-export-copy {
        align-items: center;
    }
    .history-export-mark {
        flex-basis: 28px;
        width: 28px;
        height: 28px;
    }
    .history-export-btn {
        align-self: center;
        justify-content: center;
    }
}

/* ── Badges ── */
.badge {
    display: inline-flex;
    align-items: center;
    min-height: 22px;
    padding: 0 8px;
    border-radius: var(--radius-pill);
    font-family: var(--font-mono);
    font-size: 0.55rem;
    font-weight: var(--weight-label);
    text-transform: uppercase;
    letter-spacing: var(--tracking-data);
    border: 1px solid var(--line);
}
.badge-win { background: rgba(var(--success-rgb),0.12); color: var(--success); }
.badge-loss { background: rgba(var(--fault-rgb),0.12); color: var(--error); }
.badge-pending { background: var(--info-bg); color: var(--text); border: 1px solid var(--info-border); }

/* Surface badges */
.surface-hard { background: var(--hard-subtle); color: var(--hard); }
.surface-clay { background: var(--clay-subtle); color: var(--clay); }
.surface-grass { background: var(--grass-subtle); color: var(--grass); }
.surface-indoor { background: var(--ball-subtle); color: var(--text2); }

/* ── Plan cards (subscribe page) ── */
.plan-card {
    background: var(--bg2);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    padding: 24px;
    cursor: pointer;
    transition: border-color 0.3s ease, box-shadow 0.3s ease, transform 0.15s ease;
}
.plan-card:active { transform: scale(0.98); }
.plan-card:hover {
    border-color: var(--ball-border);
    box-shadow: 0 0 24px var(--ball-glow);
}
.plan-card.selected {
    border-color: var(--success);
    box-shadow: 0 6px 24px rgba(var(--shadow-rgb), 0.10);
}
.plan-card.recommended {
    position: relative;
    transform: scale(1.02);
    box-shadow: 0 8px 32px rgba(var(--shadow-rgb), 0.14);
    z-index: 1;
}
.plan-card.recommended::before {
    content: attr(data-badge);
    position: absolute;
    top: -10px;
    right: 16px;
    background: var(--ball);
    color: var(--text-on-ball);
    padding: 2px 10px;
    border-radius: var(--radius-pill);
    font-family: var(--font-mono);
    font-size: 0.55rem;
    font-weight: 600;
    letter-spacing: 1px;
    text-transform: uppercase;
}

/* ── VIP gate overlay ── */
.vip-gate {
    position: fixed;
    inset: 0;
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    background: rgba(var(--shadow-rgb), 0.35);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 50;
}

/* ── Horizontal scroll ── */
.scroll-x {
    display: flex;
    gap: 12px;
    overflow-x: auto;
    padding-bottom: 8px;
    -ms-overflow-style: none;
    scrollbar-width: none;
}
.scroll-x::-webkit-scrollbar { display: none; }

/* ── Period selector / pills ── */
.period-btn {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: var(--control-h-sm);
    padding: 0 4px;
    border-radius: 0;
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: var(--weight-label);
    border: 0;
    cursor: pointer;
    background: transparent;
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    box-shadow: none;
}
.period-btn::after {
    content: '';
    position: absolute;
    left: 2px;
    right: 2px;
    bottom: 2px;
    height: 2px;
    border-radius: 999px;
    background: transparent;
    opacity: 0;
    transform: scaleX(0.55);
    transition: opacity 0.18s ease, transform 0.18s ease, background 0.18s ease;
}
.period-btn:hover {
    color: var(--text);
    background: transparent;
}
.period-btn.active {
    background: transparent;
    color: var(--text);
    box-shadow: none;
}
.period-btn.active::after {
    background: var(--ball);
    opacity: 1;
    transform: scaleX(1);
}
.period-btn:disabled {
    opacity: 0.3;
    cursor: not-allowed;
}

/* ── Chart container ── */
.chart-container {
    position: relative;
    height: 200px;
    width: 100%;
    margin: 16px 0;
    background:
        radial-gradient(circle at 100% 0%, rgba(var(--ball-mid-rgb),0.06), transparent 32%),
        linear-gradient(180deg, var(--sheen), rgba(255,255,255,0)),
        var(--bg2);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    padding: 16px;
    box-shadow: inset 0 1px 0 var(--sheen-soft);
}
.chart-container-sm {
    position: relative;
    height: 250px;
    width: 100%;
    margin: 8px 0 16px;
    background:
        radial-gradient(circle at 100% 0%, rgba(var(--ball-mid-rgb),0.06), transparent 32%),
        linear-gradient(180deg, var(--sheen), rgba(255,255,255,0)),
        var(--bg2);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    padding: 16px;
    box-shadow: inset 0 1px 0 var(--sheen-soft);
}

/* ── Confidence bar ── */
.conf-bar-bg {
    height: 6px;
    border-radius: var(--radius-pill);
    background: rgba(var(--ink-rgb), 0.10);
    overflow: hidden;
}
.conf-bar-fill {
    height: 100%;
    border-radius: var(--radius-pill);
    background: var(--ball);
    transition: width 0.5s ease;
}

/* ── Dashboard tier-selection gate ── */
.tier-gate {
    margin-top: 32px;
    padding: 32px 0;
}
.tier-gate-title {
    font-family: var(--font-display);
    font-size: 1.5rem;
    font-weight: 700;
    letter-spacing: -0.3px;
    color: var(--text);
    margin: 0 0 6px;
}
.tier-gate-sub {
    color: var(--text2);
    font-size: 14px;
    margin: 0 0 24px;
}
.tier-gate-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
}
@media (max-width: 640px) {
    .tier-gate-grid { grid-template-columns: 1fr; }
}
.tier-gate-card {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
    padding: 24px 22px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--bg2);
    color: var(--text);
    cursor: pointer;
    text-align: left;
    transition: border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease, transform 0.15s ease;
    position: relative;
    overflow: hidden;
    min-height: 160px;
}
.tier-gate-card:hover {
    border-color: var(--ball-border);
    background: var(--input-bg);
    box-shadow: 0 0 30px var(--ball-glow);
    transform: translateY(-1px);
}
.tier-gate-card-vip::before {
    content: '';
    position: absolute;
    inset: 0 auto 0 0;
    width: 3px;
    background: var(--ball);
    opacity: 0.55;
}
.tier-gate-card-vip:hover::before { opacity: 1; }
.tier-gate-eyebrow {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    font-weight: 700;
    letter-spacing: 1.6px;
    text-transform: uppercase;
    color: var(--text3);
}
.tier-gate-card-title {
    font-family: var(--font-display);
    font-size: 2rem;
    font-weight: 800;
    letter-spacing: -0.5px;
    line-height: 1;
}
.tier-gate-card-desc {
    color: var(--text2);
    font-size: 13px;
    line-height: 1.45;
    flex: 1;
}
.tier-gate-card-cta {
    margin-top: 6px;
    color: var(--success);
    font-family: var(--font-mono);
    font-size: 0.62rem;
    font-weight: 700;
    letter-spacing: 1px;
    text-transform: uppercase;
}

/* Dashboard: tier display badge + circular switch CTA below */
.dashboard-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
}
.tier-control {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 10px;
}
.tier-badge {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    padding: 10px 18px;
    border: 1px solid var(--ball-border);
    border-radius: var(--radius-pill);
    background: var(--ball-subtle);
    pointer-events: none;
    user-select: none;
}
.tier-badge-eyebrow {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    font-weight: 700;
    letter-spacing: 1.4px;
    text-transform: uppercase;
    color: var(--text3);
}
.tier-badge-value {
    font-family: var(--font-display);
    font-size: 1.1rem;
    font-weight: 800;
    letter-spacing: -0.2px;
    color: var(--success);
    line-height: 1;
}
.tier-switch-cta {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 6px 16px 6px 6px;
    border: 1px solid var(--line);
    border-radius: var(--radius-pill);
    background: var(--control-bg);
    color: var(--text2);
    cursor: pointer;
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: 700;
    letter-spacing: 1.1px;
    text-transform: uppercase;
    transition: border-color 0.18s ease, background 0.18s ease, color 0.18s ease, box-shadow 0.18s ease;
}
.tier-switch-cta:hover {
    border-color: var(--ball-border);
    background: var(--ball-subtle);
    color: var(--success);
    box-shadow: 0 0 18px var(--ball-glow);
}
.tier-switch-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: var(--radius-circle);
    background: var(--ball);
    color: var(--text-on-ball);
    font-size: 0.95rem;
    font-weight: 800;
    line-height: 1;
    transition: transform 0.4s ease;
}
.tier-switch-cta:hover .tier-switch-icon { transform: rotate(180deg); }
.tier-switch-text { padding-right: 2px; }
@media (max-width: 640px) {
    .dashboard-head { gap: 10px; }
    .tier-control { align-items: stretch; width: 100%; }
    .tier-badge, .tier-switch-cta { width: 100%; justify-content: space-between; }
}

/* ── Buttons ── */
.btn-primary,
a.btn-primary:link,
a.btn-primary:visited {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    min-height: var(--control-h);
    padding: 0 20px;
    border-radius: var(--radius-pill);
    font-family: var(--font-mono);
    font-weight: 800;
    font-size: 0.6rem;
    border: 1px solid var(--ball-border);
    cursor: pointer;
    background: linear-gradient(135deg, var(--ball), #c2dd25 62%, #b3cf1e);
    color: var(--text-on-ball);
    text-transform: uppercase;
    letter-spacing: 0.65px;
    box-shadow: inset 0 1px 0 var(--sheen-edge);
    text-decoration: none;
    white-space: nowrap;
}
.btn-primary:hover {
    box-shadow: 0 2px 10px rgba(var(--shadow-rgb), 0.12), inset 0 1px 0 var(--sheen-edge-strong);
    transform: translateY(-1px);
}
.btn-primary:active {
    transform: translateY(0) scale(0.98);
    box-shadow: 0 1px 4px rgba(var(--shadow-rgb), 0.12);
}
.btn-primary:disabled {
    opacity: 0.4;
    cursor: not-allowed;
    transform: none;
    box-shadow: none;
}

.btn-secondary,
a.btn-secondary:link,
a.btn-secondary:visited {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    min-height: 32px;
    padding: 0 2px;
    border-radius: 0;
    font-family: var(--font-mono);
    font-weight: var(--weight-label);
    font-size: 0.58rem;
    border: 0;
    cursor: pointer;
    background: transparent;
    color: var(--success);
    text-transform: uppercase;
    letter-spacing: 0.65px;
    text-decoration: none;
    box-shadow: none;
}
.btn-secondary::after {
    content: '';
    position: absolute;
    left: 2px;
    right: 2px;
    bottom: 3px;
    height: 1px;
    background: var(--ball-border);
    transition: background 0.18s ease, box-shadow 0.18s ease;
}
.btn-secondary:hover {
    color: var(--text);
    background: transparent;
    box-shadow: none;
}
.btn-secondary:hover::after {
    background: var(--ball);
    box-shadow: 0 0 10px var(--ball-glow);
}
.btn-secondary:active { opacity: 0.8; }

/* ── Detail button (grass court accent) ── */
.btn-detail {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 34px;
    padding: 0 2px;
    border-radius: 0;
    font-family: var(--font-mono);
    font-weight: var(--weight-label);
    font-size: 0.55rem;
    border: 0;
    cursor: pointer;
    background: transparent;
    color: var(--grass);
    text-transform: uppercase;
    letter-spacing: 0.55px;
    white-space: nowrap;
}
.btn-detail::after {
    content: '';
    position: absolute;
    left: 2px;
    right: 2px;
    bottom: 4px;
    height: 1px;
    background: var(--grass-border);
    transition: background 0.18s ease, box-shadow 0.18s ease;
}
.btn-detail:hover {
    background: transparent;
    color: var(--text);
    box-shadow: none;
}
.btn-detail:hover::after {
    background: var(--grass);
}
.btn-detail:active { opacity: 0.8; }

/* ── Pick Detail ── */
.pick-detail {
    border-top: 1px solid var(--line);
    margin-top: 12px;
    padding-top: 12px;
}
.pick-detail-section-label {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    font-weight: 700;
    color: var(--success);
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 10px;
}
.pick-analysis-text {
    font-size: 13px;
    color: var(--text);
    line-height: 1.7;
    white-space: pre-line;
}
.feature-category-label {
    font-family: var(--font-mono);
    font-size: 0.5rem;
    font-weight: 600;
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin: 12px 0 6px;
}
/* ── Tornado / Butterfly Chart ── */
.tornado-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 12px;
    padding-bottom: 8px;
    border-bottom: 1px solid var(--line);
}
.tornado-player {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: 700;
    color: var(--text2);
    text-transform: uppercase;
    letter-spacing: 1px;
}
.tornado-player-for { color: var(--text2); }
.tornado-player-against { color: var(--text2); }
.tornado-axis-label {
    font-family: var(--font-mono);
    font-size: 0.45rem;
    color: var(--text2);
    text-transform: uppercase;
    letter-spacing: 1.5px;
}
.tornado-row {
    display: flex;
    align-items: center;
    margin-bottom: 4px;
    height: 22px;
}
.tornado-bar-left {
    flex: 1;
    display: flex;
    justify-content: flex-end;
    height: 8px;
    background: rgba(var(--ink-rgb), 0.06);
    border-radius: var(--radius-sm) 0 0 var(--radius-sm);
    overflow: hidden;
}
.tornado-bar-right {
    flex: 1;
    display: flex;
    justify-content: flex-start;
    height: 8px;
    background: rgba(var(--ink-rgb), 0.06);
    border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
    overflow: hidden;
}
.tornado-label {
    font-family: var(--font-mono);
    font-size: 0.5rem;
    color: var(--text2);
    text-align: center;
    flex: 0 0 clamp(160px, 28%, 210px);
    padding: 0 6px;
    white-space: normal;
    overflow: hidden;
    flex-shrink: 0;
}
.tornado-category-row {
    height: 42px;
    margin-bottom: 8px;
}
.tornado-category-label {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 2px;
    color: var(--text);
    font-weight: 700;
    line-height: 1;
}
.tornado-category-label small {
    color: var(--text3);
    font-size: 0.5rem;
    font-weight: 500;
    line-height: 1.2;
    letter-spacing: 0.2px;
    white-space: normal;
    overflow: visible;
}
.tornado-fill-side {
    height: 100%;
    transition: width 0.4s ease;
}
.tornado-fill-left {
    border-radius: var(--radius-sm) 0 0 var(--radius-sm);
    margin-left: auto;
}
.tornado-fill-right {
    border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
}
.tornado-fill-side.is-pick {
    background: var(--ball);
}
.tornado-fill-side.is-opponent {
    background: var(--fault);
}
.tornado-fill-side.is-favorable {
    background: var(--ball);
}
.tornado-fill-side.is-secondary {
    background: rgba(var(--ink-rgb), 0.22);
}
.tornado-fill-for {
    height: 100%;
    background: var(--ball);
    border-radius: var(--radius-sm) 0 0 var(--radius-sm);
    margin-left: auto;
    transition: width 0.4s ease;
}
.tornado-fill-against {
    height: 100%;
    background: var(--fault);
    border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
    transition: width 0.4s ease;
}
.tornado-fill-neutral {
    height: 100%;
    background: var(--text3);
    border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
    transition: width 0.4s ease;
}
@media (max-width: 480px) {
    .tornado-label { flex-basis: 118px; font-size: 0.45rem; }
    .tornado-category-label small { font-size: 0.4rem; }
}

/* ── Forms ── */
.form-group {
    margin-bottom: 16px;
}
.form-label {
    display: block;
    font-family: var(--font-mono);
    font-size: 0.65rem;
    font-weight: 500;
    color: var(--text2);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 8px;
}
.form-input {
    width: 100%;
    min-height: var(--control-h);
    padding: 0 13px;
    border-radius: var(--radius-input);
    border: 1px solid var(--control-border);
    background: var(--input-bg);
    color: var(--text);
    font-family: var(--font-body);
    font-size: 14px;
    outline: none;
    box-shadow: inset 0 1px 2px rgba(var(--shadow-rgb), 0.05);
}
.form-input:focus {
    border-color: var(--control-border-strong);
    box-shadow: 0 0 0 3px var(--focus-ring);
}
.form-input::placeholder {
    color: var(--text3);
}
.form-error {
    font-size: 13px;
    color: var(--error);
    margin-top: 6px;
}
.form-select {
    width: 100%;
    min-height: var(--control-h);
    padding: 0 38px 0 13px;
    border-radius: var(--radius-md);
    border: 1px solid var(--control-border);
    background-color: var(--input-bg);
    color: var(--text);
    font-family: var(--font-body);
    font-size: 14px;
    font-weight: 600;
    appearance: none;
    -webkit-appearance: none;
    background-image:
        linear-gradient(180deg, rgba(255,255,255,0), rgba(255,255,255,0)),
        url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%234a4f43' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: 0 0, right 12px center;
}
.form-select:focus {
    border-color: var(--control-border-strong);
    box-shadow: 0 0 0 3px var(--focus-ring);
    outline: none;
}

/* ── Auth card container ── */
.auth-card {
    max-width: 400px;
    margin: 40px auto;
    padding: 32px 24px;
    background: var(--bg2);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
}
.auth-title {
    font-family: var(--font-display);
    font-size: 1.6rem;
    font-weight: 700;
    text-align: center;
    margin-bottom: 8px;
    letter-spacing: 0;
}
.auth-subtitle {
    font-family: var(--font-mono);
    font-size: 0.65rem;
    color: var(--text3);
    text-align: center;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 24px;
}
.auth-proof {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 14px;
    border-top: 1px solid var(--line);
    border-bottom: 1px solid var(--line);
    padding: 14px 0;
    margin: -8px 0 22px;
}
.auth-proof-item strong,
.auth-proof-item span {
    display: block;
}
.auth-proof-item strong {
    font-family: var(--font-mono);
    font-size: 0.62rem;
    color: var(--success);
    letter-spacing: 0.8px;
    text-transform: uppercase;
    line-height: 1.35;
}
.auth-proof-item span {
    margin-top: 4px;
    font-size: 0.68rem;
    color: var(--text3);
    line-height: 1.35;
}
@media (max-width: 420px) {
    .auth-proof { grid-template-columns: 1fr; }
}
.auth-link {
    color: var(--success);
    text-decoration: none;
    font-size: 13px;
    cursor: pointer;
}
.auth-link:hover { text-decoration: underline; }

/* ── Google Sign-In custom button ── */
.google-custom-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    width: 100%;
    padding: 12px 16px;
    background: transparent;
    border: 1px solid var(--line);
    border-radius: var(--radius-sm);
    color: var(--text2);
    font-family: var(--font-body);
    font-size: 0.85rem;
    font-weight: 500;
    cursor: pointer;
    transition: background 0.2s, border-color 0.2s, color 0.2s;
}
.google-custom-btn:hover {
    background: var(--control-bg);
    border-color: var(--control-border);
    color: var(--text);
}

/* ── Divider with text ── */
.auth-divider {
    display: flex;
    align-items: center;
    gap: 12px;
    margin: 20px 0;
}
.auth-divider::before,
.auth-divider::after {
    content: '';
    flex: 1;
    height: 1px;
    background: var(--line);
}
.auth-divider span {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: 1px;
}

/* ── Message boxes ── */
.msg-success {
    background: rgba(var(--success-rgb),0.08);
    border: 1px solid rgba(var(--success-rgb),0.25);
    color: var(--success);
    padding: 12px 16px;
    border-radius: var(--radius-md);
    font-size: 13px;
    margin-bottom: 16px;
}
.msg-error {
    background: rgba(var(--fault-rgb),0.08);
    border: 1px solid rgba(var(--fault-rgb),0.25);
    color: var(--error);
    padding: 12px 16px;
    border-radius: var(--radius-md);
    font-size: 13px;
    margin-bottom: 16px;
}

/* ── Feature list checkmarks ── */
.feature-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 0;
    font-size: 13px;
    color: var(--text2);
}
.feature-check {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: var(--grass-subtle);
    color: var(--grass);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 11px;
    flex-shrink: 0;
}

/* ── Animations ── */
@keyframes fadeIn {
    from { opacity: 0; transform: translateY(6px); }
    to { opacity: 1; transform: translateY(0); }
}
.fade-in { animation: fadeIn 0.3s ease-out; }

@keyframes fadeInUp {
    from { opacity: 0; transform: translateY(12px); }
    to { opacity: 1; transform: translateY(0); }
}
.card-anim { opacity: 0; animation: fadeInUp 0.35s ease-out forwards; }
.card-anim:nth-child(1) { animation-delay: 0.05s; }
.card-anim:nth-child(2) { animation-delay: 0.1s; }
.card-anim:nth-child(3) { animation-delay: 0.15s; }
.card-anim:nth-child(4) { animation-delay: 0.2s; }
.card-anim:nth-child(5) { animation-delay: 0.25s; }

@keyframes bounceIn {
    0% { transform: scale(0.3); opacity: 0; }
    50% { transform: scale(1.05); }
    70% { transform: scale(0.9); }
    100% { transform: scale(1); opacity: 1; }
}
.bounce-in { animation: bounceIn 0.6s ease-out; }

/* ── Streak badge ── */
.streak-badge {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 4px 10px;
    border-radius: var(--radius-pill);
    font-family: var(--font-mono);
    font-size: 0.65rem;
    font-weight: 700;
    letter-spacing: 0.5px;
}
.streak-win { background: rgba(var(--success-rgb),0.12); color: var(--success); }
.streak-loss { background: rgba(var(--fault-rgb),0.12); color: var(--fault); }

/* ── Filter/dropdown ── */
.filter-select {
    width: 100%;
    min-height: var(--control-h);
    padding: 0 38px 0 13px;
    border-radius: var(--radius-input);
    border: 1px solid var(--control-border);
    background-color: var(--bg2);
    color: var(--text);
    font-family: var(--font-body);
    font-size: 13px;
    font-weight: 600;
    appearance: none;
    -webkit-appearance: none;
    background-image:
        linear-gradient(180deg, rgba(255,255,255,0), rgba(255,255,255,0)),
        url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%234a4f43' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: 0 0, right 12px center;
}
.filter-select:focus {
    border-color: var(--control-border-strong);
    box-shadow: 0 0 0 3px var(--focus-ring);
    outline: none;
}

/* ── Currency toggle ── */
.currency-toggle {
    display: inline-flex;
    gap: 12px;
    border-radius: 0;
    padding: 0;
    border: 0;
    background: transparent;
}
.currency-btn {
    position: relative;
    min-height: var(--control-h-sm);
    padding: 0 2px;
    border-radius: 0;
    font-family: var(--font-mono);
    font-size: 0.65rem;
    font-weight: var(--weight-label);
    border: none;
    cursor: pointer;
    background: transparent;
    color: var(--text2);
    text-transform: uppercase;
    letter-spacing: 0.45px;
    transition: background 0.2s, color 0.2s;
}
.currency-btn::after {
    content: '';
    position: absolute;
    left: 2px;
    right: 2px;
    bottom: 4px;
    height: 2px;
    border-radius: 999px;
    background: transparent;
    opacity: 0;
    transform: scaleX(0.55);
    transition: opacity 0.18s ease, transform 0.18s ease, background 0.18s ease;
}
.currency-btn.active {
    background: transparent;
    color: var(--text);
    box-shadow: none;
}
.currency-btn.active::after {
    background: var(--ball);
    opacity: 1;
    transform: scaleX(1);
}

/* ── Picks page tabs ── */
.picks-page-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 16px;
    margin-bottom: 18px;
}
.picks-page-kicker {
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.56rem;
    font-weight: var(--weight-label);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
}
.picks-tabs {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 18px;
    padding: 0 0 8px;
    margin: 0 0 22px;
    border: 0;
    border-bottom: 1px solid var(--line);
    border-radius: 0;
    background: transparent;
    box-shadow: none;
}
.picks-tab {
    position: relative;
    min-height: 40px;
    border: 0;
    border-radius: 0;
    background: transparent;
    color: var(--text3);
    cursor: pointer;
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: var(--weight-label);
    letter-spacing: 0.55px;
    line-height: 1.1;
    padding: 9px 8px;
    text-transform: uppercase;
    transition: background 0.18s ease, border-color 0.18s ease, color 0.18s ease;
}
.picks-tab::after {
    content: '';
    position: absolute;
    left: 8px;
    right: 8px;
    bottom: -9px;
    height: 2px;
    border-radius: 999px;
    background: transparent;
    opacity: 0;
    transform: scaleX(0.55);
    transition: opacity 0.18s ease, transform 0.18s ease, background 0.18s ease;
}
.picks-tab:hover {
    color: var(--text);
    background: transparent;
}
.picks-tab.active {
    background: transparent;
    color: var(--text);
    box-shadow: none;
}
.picks-tab.active::after {
    background: var(--ball);
    opacity: 1;
    transform: scaleX(1);
}

/* ── Onboarding, contextual activation ── */
.ob-activation {
    display: grid;
    gap: 14px;
    margin: -4px 0 24px;
    padding: 16px 0 18px;
    border-top: 1px solid var(--line);
    border-bottom: 1px solid var(--line);
    animation: fadeInUp 0.28s ease-out;
}
.ob-activation-copy {
    max-width: 560px;
}
.ob-activation-kicker {
    color: var(--success);
    font-family: var(--font-mono);
    font-size: 0.52rem;
    font-weight: var(--weight-label);
    letter-spacing: var(--tracking-label);
    margin-bottom: 7px;
    text-transform: uppercase;
}
.ob-activation-title {
    margin: 0;
    color: var(--text);
    font-family: var(--font-display);
    font-size: 1.12rem;
    font-weight: var(--weight-title);
    letter-spacing: 0;
    line-height: 1.15;
}
.ob-activation-subtitle {
    margin: 6px 0 0;
    color: var(--text2);
    font-size: 12.5px;
    line-height: 1.55;
}
.ob-activation-steps {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
}
.ob-activation-step {
    display: grid;
    grid-template-columns: 26px minmax(0, 1fr);
    align-items: start;
    gap: 9px;
    min-width: 0;
}
.ob-activation-icon {
    display: grid;
    place-items: center;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: var(--control-bg);
    box-shadow: inset 0 0 0 1px var(--control-border);
}
.ob-activation-step strong,
.ob-activation-step small {
    display: block;
}
.ob-activation-step strong {
    color: var(--text);
    font-family: var(--font-display);
    font-size: 12.5px;
    font-weight: var(--weight-title);
    line-height: 1.25;
}
.ob-activation-step small {
    margin-top: 2px;
    color: var(--text3);
    font-size: 11.5px;
    line-height: 1.35;
}
.ob-activation-actions {
    display: flex;
    align-items: center;
    gap: 14px;
}
.ob-activation-cta,
.ob-activation-skip {
    position: relative;
    border: 0;
    background: transparent;
    cursor: pointer;
    font-family: var(--font-mono);
    font-size: 0.56rem;
    font-weight: 800;
    letter-spacing: 0.55px;
    padding: 0 0 4px;
    text-transform: uppercase;
}
.ob-activation-cta {
    color: var(--success);
}
.ob-activation-cta::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 1px;
    background: var(--ball-border);
}
.ob-activation-skip {
    color: var(--text3);
}
@media (max-width: 640px) {
    .ob-activation {
        gap: 13px;
        margin-top: -2px;
    }
    .ob-activation-steps {
        grid-template-columns: 1fr;
        gap: 10px;
    }
}

/* Legacy modal styles kept for old forced QA markup, no longer used by default. */
.ob-welcome-backdrop {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
    background: rgba(var(--shadow-rgb), 0.45);
    backdrop-filter: blur(18px);
    -webkit-backdrop-filter: blur(18px);
    animation: ob-fadeIn 0.18s ease-out;
}
.ob-welcome-card {
    width: min(420px, 100%);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--input-bg);
    box-shadow: 0 24px 70px rgba(var(--shadow-rgb), 0.25);
    padding: 24px;
}
.ob-welcome-logo {
    width: 34px;
    height: 34px;
    display: grid;
    place-items: center;
    margin-bottom: 18px;
    border-radius: var(--radius-sm);
    background: var(--ball);
    color: var(--text-on-ball);
    font-family: var(--font-display);
    font-weight: 900;
}
.ob-welcome-title {
    margin: 0 0 8px;
    font-family: var(--font-display);
    font-size: 1.45rem;
    line-height: 1.1;
    letter-spacing: 0;
}
.ob-welcome-subtitle {
    margin: 0 0 18px;
    color: var(--text2);
    font-size: 13px;
    line-height: 1.6;
}
.ob-steps {
    display: grid;
    gap: 8px;
    margin-bottom: 20px;
}
.ob-step {
    display: grid;
    grid-template-columns: 34px 1fr;
    gap: 12px;
    align-items: center;
    padding: 12px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--control-bg);
}
.ob-step-icon {
    width: 34px;
    height: 34px;
    display: grid;
    place-items: center;
    border-radius: var(--radius-sm);
    background: var(--control-bg);
}
.ob-step-number {
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.52rem;
    font-weight: 700;
    letter-spacing: 1.2px;
}
.ob-step-label {
    color: var(--text);
    font-family: var(--font-display);
    font-size: 0.95rem;
    font-weight: 700;
    line-height: 1.2;
}
.ob-step-desc {
    color: var(--text3);
    font-size: 12px;
    line-height: 1.4;
    margin-top: 2px;
}
.ob-welcome-cta,
.ob-tooltip-btn {
    border: 0;
    border-radius: var(--radius-sm);
    background: var(--ball);
    color: var(--text-on-ball);
    cursor: pointer;
    font-family: var(--font-mono);
    font-size: 0.64rem;
    font-weight: 800;
    letter-spacing: 1.2px;
    padding: 11px 14px;
    text-transform: uppercase;
}
.ob-welcome-cta {
    width: 100%;
}
.ob-welcome-skip {
    width: 100%;
    margin-top: 10px;
    border: 0;
    background: transparent;
    color: var(--text3);
    cursor: pointer;
    font-family: var(--font-mono);
    font-size: 0.58rem;
    font-weight: 700;
    letter-spacing: 1.2px;
    padding: 8px;
    text-transform: uppercase;
}
.ob-nudge {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: -8px 0 18px;
    padding: 11px 12px;
    border: 1px solid var(--grass-border);
    border-radius: var(--radius-md);
    background: rgba(var(--grass-rgb),0.06);
}
.ob-nudge-icon {
    width: 28px;
    height: 28px;
    display: grid;
    place-items: center;
    flex: 0 0 auto;
    border-radius: var(--radius-sm);
    background: var(--grass-subtle);
}
.ob-nudge-text {
    flex: 1;
    color: var(--text2);
    font-size: 12px;
    line-height: 1.45;
}
.ob-nudge-dismiss {
    width: 28px;
    height: 28px;
    display: grid;
    place-items: center;
    border: 0;
    border-radius: var(--radius-sm);
    background: transparent;
    color: var(--text3);
    cursor: pointer;
}
.ob-highlight {
    position: relative;
    z-index: 1001;
    box-shadow: 0 0 0 2px rgba(var(--ball-deep-rgb),0.55), 0 0 0 8px rgba(var(--ball-mid-rgb),0.12);
}
.ob-tooltip {
    z-index: 1002;
    max-width: min(300px, calc(100vw - 32px));
    padding: 14px;
    border: 1px solid var(--control-border);
    border-radius: var(--radius-md);
    background: var(--input-bg);
    box-shadow: 0 18px 48px rgba(var(--shadow-rgb), 0.20);
}
.ob-tooltip-label {
    color: var(--success);
    font-family: var(--font-mono);
    font-size: 0.56rem;
    font-weight: 800;
    letter-spacing: 1.2px;
    margin-bottom: 6px;
    text-transform: uppercase;
}
.ob-tooltip-text {
    color: var(--text2);
    font-size: 12px;
    line-height: 1.5;
}
.ob-tooltip-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-top: 12px;
}
.ob-tooltip-dots {
    display: flex;
    gap: 5px;
}
.ob-tooltip-dot {
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: rgba(var(--ink-rgb), 0.18);
}
.ob-tooltip-dot--active {
    background: var(--ball);
}
@keyframes ob-fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}
@keyframes ob-slideUp {
    from { opacity: 0; transform: translateY(8px); }
    to { opacity: 1; transform: translateY(0); }
}

/* ── Trial badge ── */
.trial-badge {
    display: inline-block;
    padding: 8px 20px;
    border-radius: var(--radius-sm);
    font-family: var(--font-mono);
    font-size: 0.65rem;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 1px;
    background: rgba(var(--grass-rgb),0.06);
    color: var(--grass);
    border: 1px solid var(--grass-border);
}
.trial-badge.trial-active {
    background: var(--grass-subtle);
    color: var(--grass);
    border-color: var(--grass-border);
}
.trial-badge.trial-expired {
    background: rgba(var(--fault-rgb),0.10);
    color: var(--fault);
    border-color: rgba(var(--fault-rgb),0.25);
}

/* ── Social proof ── */
.social-proof {
    display: flex;
    justify-content: center;
    flex-wrap: wrap;
    gap: 16px;
    row-gap: 8px;
    font-family: var(--font-mono);
    font-size: 0.6rem;
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: 1px;
}

/* ── Payment buttons ── */
.payment-btn {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 14px 16px;
    border-radius: var(--radius-lg);
    border: 1px solid var(--line);
    background: var(--bg2);
    color: var(--text2);
    cursor: pointer;
    transition: border-color 0.3s, box-shadow 0.3s;
}
.payment-btn.selected {
    border-color: var(--success);
    color: var(--text);
    box-shadow: 0 0 20px var(--ball-glow);
}
.payment-btn:active { opacity: 0.7; }

/* ── View all link ── */
.view-all-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: var(--control-h);
    color: var(--text2);
    font-family: var(--font-mono);
    font-weight: 800;
    font-size: 0.6rem;
    text-decoration: none;
    text-transform: uppercase;
    letter-spacing: 0.8px;
    padding: 0 18px;
    border-radius: var(--radius-pill);
    border: 1px solid var(--line);
    background: var(--control-bg);
    box-shadow: none;
    transition: border-color 0.18s ease, background 0.18s ease, color 0.18s ease;
}
.view-all-link:hover {
    border-color: var(--ball-border);
    background: var(--ball-subtle);
    color: var(--success);
    box-shadow: 0 0 22px var(--ball-glow);
}

/* ── VIP CTA banner ── */
.vip-cta-banner {
    background: var(--bg2);
    border: 1px solid var(--ace);
    border-radius: var(--radius-md);
    padding: 24px;
    margin-bottom: 16px;
    box-shadow: 0 0 30px rgba(var(--ace-rgb),0.08);
}

/* ── VIP gate inline (picks page) ── */
.vip-gate-inline {
    background: var(--bg2);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    margin-bottom: 16px;
    position: relative;
    overflow: hidden;
}
.vip-gate-inline::before {
    content: '';
    position: absolute;
    inset: 0;
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
}
.vip-gate-inline > div {
    position: relative;
    z-index: 1;
}

/* ── Toggle switch (custom) ── */
.toggle-switch {
    position: relative;
    width: 44px;
    height: 24px;
    flex-shrink: 0;
}
.toggle-switch input {
    opacity: 0;
    width: 0;
    height: 0;
}
.toggle-slider {
    position: absolute;
    cursor: pointer;
    inset: 0;
    background: rgba(var(--ink-rgb), 0.14);
    border-radius: var(--radius-pill);
    transition: background 0.2s;
}
.toggle-slider::before {
    content: '';
    position: absolute;
    height: 18px;
    width: 18px;
    left: 3px;
    bottom: 3px;
    background: var(--text2);
    border-radius: var(--radius-circle);
    transition: transform 0.2s, background 0.2s;
}
.toggle-switch input:checked + .toggle-slider {
    background: var(--ball);
}
.toggle-switch input:checked + .toggle-slider::before {
    transform: translateX(20px);
    background: var(--text-on-ball);
}

/* ── Page container ── */
.page-container {
    max-width: 1180px;
    margin: 0 auto;
    padding: 24px 20px;
}

/* ── Portfolio responsive stats grid (fix mobile overflow) ── */
.portfolio-stats {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
}
.portfolio-stats .kpi-card {
    min-width: 0;
    flex-shrink: 1;
}
@media (min-width: 720px) {
    .portfolio-stats {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }
}

/* ── Profile sections + danger zone ── */
.profile-section-label {
    font-family: var(--font-mono);
    font-size: 0.58rem;
    font-weight: var(--weight-label);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    color: var(--text3);
    margin-top: 24px;
}
.danger-zone {
    border: 1px solid rgba(var(--fault-rgb),0.30);
    border-radius: var(--radius-lg);
    padding: 18px;
    background: rgba(var(--fault-rgb),0.05);
}
.danger-zone-label {
    font-family: var(--font-mono);
    font-size: 0.58rem;
    font-weight: var(--weight-label);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
    color: var(--error);
    margin-bottom: 12px;
}
/* Danger link button — used for cancel subscription / delete account */
.btn-danger-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    min-height: 36px;
    padding: 8px 14px;
    background: transparent;
    border: 1px solid rgba(var(--fault-rgb),0.40);
    border-radius: var(--radius-pill);
    color: var(--error);
    font-family: var(--font-mono);
    font-size: 0.58rem;
    font-weight: 700;
    letter-spacing: 1px;
    text-transform: uppercase;
    cursor: pointer;
    transition: border-color 0.18s ease, background 0.18s ease, color 0.18s ease;
}
.btn-danger-link:hover {
    border-color: var(--error);
    background: rgba(var(--fault-rgb),0.07);
    color: var(--error);
}

/* ── Accessibility ── */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible {
    outline: 2px solid var(--ball);
    outline-offset: 2px;
    box-shadow: 0 0 0 4px var(--focus-ring);
}

/* ── Utility classes ── */
.flex { display: flex; }
.items-center { align-items: center; }
.items-start { align-items: flex-start; }
.justify-center { justify-content: center; }
.justify-between { justify-content: space-between; }
.flex-col { flex-direction: column; }
.flex-wrap { flex-wrap: wrap; }
.gap-2 { gap: 8px; }
.gap-3 { gap: 12px; }
.gap-4 { gap: 16px; }
.text-center { text-align: center; }
.text-sm { font-size: 13px; }
.text-xs { font-size: 12px; }
.text-lg { font-size: 18px; }
.font-bold { font-weight: 700; }
.font-semibold { font-weight: 600; }
.mt-1 { margin-top: 4px; }
.mt-2 { margin-top: 8px; }
.mt-3 { margin-top: 12px; }
.mt-4 { margin-top: 16px; }
.mt-6 { margin-top: 24px; }
.mb-1 { margin-bottom: 4px; }
.mb-2 { margin-bottom: 8px; }
.mb-3 { margin-bottom: 12px; }
.mb-4 { margin-bottom: 16px; }
.mb-6 { margin-bottom: 24px; }
.p-4 { padding: 16px; }
.px-4 { padding-left: 16px; padding-right: 16px; }
.py-2 { padding-top: 8px; padding-bottom: 8px; }
.w-full { width: 100%; }
.h-screen { height: 100vh; }
.grid { display: grid; }
.grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
.grid-cols-3 { grid-template-columns: repeat(3, 1fr); }
.hidden { display: none; }

/* ═══════════════════════════════════════════════
   RESPONSIVE
   ═══════════════════════════════════════════════ */

@media (max-width: 640px) {
    .period-btn {
        padding: 10px 16px;
        font-size: 0.6rem;
        min-height: 44px;
        min-width: 44px;
    }

    .page-container {
        padding: 16px 16px;
    }

    .section-title,
    .section-label {
        font-size: 0.55rem;
    }
}

@media (max-width: 480px) {
    .chart-container {
        height: 160px;
        padding: 10px;
    }
    .chart-container-sm {
        height: 180px;
        padding: 10px;
    }

    .grid-cols-2 {
        grid-template-columns: 1fr;
    }

    .auth-card {
        margin: 20px 12px;
        padding: 24px 16px;
    }

    /* Remove recommended card scale on mobile */
    .plan-card.recommended {
        transform: none;
    }
}

/* ── Tier tabs ── */
.tier-tabs {
    display: flex;
    justify-content: center;
    gap: 18px;
    width: fit-content;
    margin: 0 auto 24px;
    padding: 0 0 8px;
    border: 0;
    border-bottom: 1px solid var(--line);
    border-radius: 0;
    background: transparent;
    box-shadow: none;
}
.tier-tab {
    position: relative;
    display: flex;
    align-items: center;
    gap: 6px;
    min-height: var(--control-h-sm);
    padding: 0 2px;
    border-radius: 0;
    border: 0;
    background: transparent;
    color: var(--text2);
    font-size: 0.62rem;
    font-weight: var(--weight-label);
    cursor: pointer;
    font-family: var(--font-mono);
    letter-spacing: 0.5px;
    text-transform: uppercase;
}
.tier-tab::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    bottom: -9px;
    height: 2px;
    border-radius: 999px;
    background: transparent;
    opacity: 0;
    transform: scaleX(0.55);
    transition: opacity 0.18s ease, transform 0.18s ease, background 0.18s ease;
}
.tier-tab:hover {
    color: var(--text);
    background: transparent;
}
.tier-tab.active {
    background: transparent;
    color: var(--text);
    box-shadow: none;
}
.tier-tab.active::after {
    background: var(--ball);
    opacity: 1;
    transform: scaleX(1);
}
.tier-tab .tier-emoji {
    font-size: 16px;
}

@media (max-width: 320px) {
    body {
        overflow-x: hidden;
    }

    .chart-container { height: 140px; }
    .chart-container-sm { height: 150px; }
    .kpi-card { padding: 14px; }
}

/* ── Players page (list + profile) ── */
.players-page .premium-page-head { margin-bottom: 18px; }
.players-search-row { margin-bottom: 18px; }
.players-search-input { max-width: 520px; }

.players-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 14px;
}
.players-empty {
    text-align: center;
    padding: 60px 0;
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.65rem;
    letter-spacing: 1px;
    text-transform: uppercase;
}

.player-card {
    position: relative;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    padding: 0;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
    color: var(--text);
    cursor: pointer;
    text-align: left;
    transition: border-color 0.18s ease, background 0.18s ease, box-shadow 0.18s ease, transform 0.15s ease;
}
.player-card:hover {
    border-color: var(--ball-border);
    background: var(--input-bg);
    box-shadow: 0 0 28px var(--ball-glow);
    transform: translateY(-1px);
}
.player-card-photo {
    aspect-ratio: 4 / 3;
    background-size: cover;
    background-position: center top;
    background-color: var(--bg3);
}
.player-card-photo-empty {
    background-image: linear-gradient(135deg, var(--bg2), var(--bg3));
}
.player-card-rank {
    position: absolute;
    top: 10px;
    right: 10px;
    padding: 4px 10px;
    border-radius: var(--radius-pill);
    /* de-highlighted: solid lime fill -> subtle outlined pill */
    background: var(--ball-subtle);
    border: 1px solid var(--ball-border);
    color: var(--success);
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: 800;
    letter-spacing: 0.8px;
}
.player-card-body {
    padding: 12px 14px 14px;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.player-card-name {
    font-family: var(--font-display);
    font-size: 1rem;
    font-weight: 700;
    letter-spacing: -0.2px;
    color: var(--text);
}
.player-card-country {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--text3);
}

/* Profile view */
.player-profile-hero {
    display: grid;
    grid-template-columns: minmax(0, 260px) minmax(0, 1fr);
    gap: 24px;
    align-items: end;
    margin: 18px 0 28px;
}
@media (max-width: 640px) {
    .player-profile-hero { grid-template-columns: 1fr; }
}
.player-profile-photo {
    aspect-ratio: 1;
    background-size: cover;
    background-position: center top;
    background-color: var(--bg3);
    border-radius: var(--radius-md);
    border: 1px solid var(--line);
}
.player-profile-name {
    font-family: var(--font-display);
    font-size: 2.4rem;
    font-weight: 800;
    letter-spacing: -0.5px;
    line-height: 1;
    margin: 8px 0 12px;
}
.player-profile-rank-pill {
    display: inline-flex;
    padding: 8px 14px;
    border-radius: var(--radius-pill);
    background: var(--ball-subtle);
    border: 1px solid var(--ball-border);
    color: var(--success);
    font-family: var(--font-mono);
    font-size: 0.7rem;
    font-weight: 800;
    letter-spacing: 0.8px;
}

.player-section-title {
    margin: 32px 0 14px;
    font-family: var(--font-mono);
    font-size: 0.62rem;
    font-weight: 700;
    letter-spacing: 2px;
    text-transform: uppercase;
    color: var(--text3);
}

.player-stats-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 14px;
}
.player-stat-row {
    padding: 14px 16px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
}
.player-stat-head {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 8px;
}
.player-stat-label {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    font-weight: 700;
    letter-spacing: 1.2px;
    text-transform: uppercase;
    color: var(--text3);
}
.player-stat-value {
    font-family: var(--font-display);
    font-size: 1.4rem;
    font-weight: 800;
    color: var(--text);
}
.player-stat-bar {
    height: 6px;
    background: rgba(var(--ink-rgb), 0.10);
    border-radius: var(--radius-pill);
    overflow: hidden;
    margin-bottom: 10px;
}
.player-stat-bar-fill {
    height: 100%;
    background: var(--ball);
    border-radius: var(--radius-pill);
    transition: width 0.4s ease;
}
.player-stat-sentence {
    font-size: 13px;
    color: var(--text2);
    line-height: 1.45;
}

.player-trend-list {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
    gap: 8px;
}
.player-trend-item {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 8px 10px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--control-bg);
    font-family: var(--font-mono);
    font-size: 0.6rem;
    color: var(--text2);
}
.player-trend-rank { color: var(--text); font-weight: 700; }

.player-locked-grid {
    margin-top: 32px;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 14px;
}
.player-locked-card {
    padding: 24px 18px;
    border: 1px dashed var(--line);
    border-radius: var(--radius-md);
    background: var(--control-bg);
    text-align: center;
    opacity: 0.7;
}
.player-locked-icon {
    font-size: 1.4rem;
    color: var(--success);
    margin-bottom: 8px;
}
.player-locked-title {
    font-family: var(--font-display);
    font-size: 1rem;
    font-weight: 700;
    color: var(--text);
    margin-bottom: 4px;
}
.player-locked-sub {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    letter-spacing: 1.2px;
    text-transform: uppercase;
    color: var(--text3);
}

/* Players page - feature sections */
.player-features-legend {
    margin-top: 36px;
    padding-top: 24px;
    border-top: 1px solid var(--line);
}
.player-features-legend-sub {
    font-size: 0.85rem;
    color: var(--text2);
    max-width: 680px;
    line-height: 1.5;
}
.player-section {
    margin-top: 28px;
    padding: 20px 18px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
}
.player-section-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 4px;
}
.player-section-h {
    font-family: var(--font-display);
    font-size: 1.15rem;
    font-weight: 700;
    color: var(--text);
    margin: 0;
    display: flex;
    align-items: center;
    gap: 10px;
}
.player-section-icon {
    font-size: 1.3rem;
    line-height: 1;
}
.player-section-count {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--text3);
    padding: 4px 10px;
    border: 1px solid var(--line);
    border-radius: var(--radius-pill);
    background: var(--bg3);
}
.player-section-intro {
    font-size: 0.85rem;
    color: var(--text2);
    margin: 0 0 16px 0;
    line-height: 1.5;
}
.player-features-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 12px;
}
.player-feature-card {
    padding: 12px 14px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg3);
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.player-feature-card--on {
    border-color: var(--ball-border);
}
.player-feature-card--off {
    opacity: 0.62;
    border-style: dashed;
}
.player-feature-head {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}
.player-feature-label {
    font-family: var(--font-display);
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--text);
    flex: 1;
    min-width: 0;
}
.player-feature-imp {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    letter-spacing: 0.6px;
    color: var(--success);
    background: var(--ball-subtle);
    border: 1px solid var(--ball-border);
    padding: 2px 6px;
    border-radius: var(--radius-pill);
}
.player-feature-value {
    font-family: var(--font-mono);
    font-size: 0.85rem;
    font-weight: 700;
    color: var(--success);
}
.player-feature-lock {
    font-size: 0.85rem;
    color: var(--text3);
}
.player-feature-desc {
    font-size: 0.75rem;
    color: var(--text2);
    line-height: 1.45;
}
.player-feature-sentence {
    font-size: 0.72rem;
    color: var(--text3);
    font-style: italic;
    line-height: 1.4;
}
.player-feature-locked-note {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    letter-spacing: 0.8px;
    text-transform: uppercase;
    color: var(--text3);
}

/* Player insights panel (Phase 1 — real data from snapshot) */
.player-insights-panel {
    margin-top: 32px;
    padding: 22px 20px;
    border: 1px solid var(--ball-border);
    border-radius: var(--radius-md);
    background: linear-gradient(180deg, rgba(var(--ball-mid-rgb),0.06) 0%, var(--bg2) 100%);
}
.player-insights-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
}
.insight-group {
    margin-top: 22px;
}
.insight-group-title {
    font-family: var(--font-display);
    font-size: 0.85rem;
    font-weight: 700;
    color: var(--text2);
    margin: 0 0 10px 0;
    letter-spacing: 0.3px;
}
.insight-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 10px;
}
.insight-card {
    padding: 12px 14px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg3);
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.insight-card--level { border-color: var(--ball-border); }
.insight-card--form { border-color: rgba(var(--ball-deep-rgb),0.30); }
.insight-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}
.insight-card-label {
    font-family: var(--font-display);
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--text);
    line-height: 1.2;
}
.insight-pct-badge {
    font-family: var(--font-mono);
    font-size: 0.7rem;
    font-weight: 700;
    color: var(--success);
    background: var(--ball-subtle);
    border: 1px solid var(--ball-border);
    padding: 3px 8px;
    border-radius: var(--radius-pill);
    line-height: 1;
    white-space: nowrap;
}
.insight-pct-badge small {
    font-size: 0.55rem;
    opacity: 0.7;
    margin-left: 1px;
}
.insight-card-value {
    font-family: var(--font-mono);
    font-size: 1.45rem;
    font-weight: 800;
    color: var(--success);
    line-height: 1;
}
.insight-card-sentence {
    font-size: 0.72rem;
    color: var(--text2);
    line-height: 1.45;
}

/* Players V2 — filter bar + breakdown panels */
.players-filter-bar {
    margin-top: 28px;
    padding: 16px 18px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
    display: flex;
    flex-direction: column;
    gap: 12px;
    position: sticky;
    top: 0;
    z-index: 4;
}
.filter-row {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
}
.filter-row-label {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    letter-spacing: 1.2px;
    text-transform: uppercase;
    color: var(--text3);
    min-width: 70px;
}
.filter-row-pills {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
    flex: 1;
}
.filter-pill {
    font-family: var(--font-display);
    font-size: 0.75rem;
    font-weight: 600;
    color: var(--text2);
    background: var(--bg3);
    border: 1px solid var(--line);
    padding: 6px 12px;
    border-radius: var(--radius-pill);
    cursor: pointer;
    transition: all 0.15s ease;
}
.filter-pill:hover:not(.filter-pill--disabled) {
    color: var(--text);
    border-color: var(--ball-border);
}
.filter-pill--active {
    color: var(--text-on-ball);
    background: var(--ball);
    border-color: var(--success);
}
.filter-pill--disabled {
    opacity: 0.35;
    cursor: not-allowed;
}
.filter-select {
    font-family: var(--font-body);
    font-size: 0.85rem;
    color: var(--text);
    background: var(--bg3);
    border: 1px solid var(--line);
    padding: 8px 12px;
    border-radius: var(--radius-input);
    cursor: pointer;
    flex: 1;
    max-width: 360px;
}
.filter-row-actions {
    justify-content: space-between;
    border-top: 1px solid var(--line);
    padding-top: 12px;
}
.live-tournament-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-family: var(--font-display);
    font-size: 0.78rem;
    font-weight: 700;
    color: var(--text-on-ball);
    background: var(--ball);
    border: 1px solid var(--ball);
    padding: 8px 14px;
    border-radius: var(--radius-pill);
    cursor: pointer;
    letter-spacing: 0.3px;
}
.live-tournament-btn:hover {
    box-shadow: 0 2px 10px rgba(var(--shadow-rgb), 0.15);
}
.live-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--fault);
    animation: live-pulse 1.4s infinite;
}
@keyframes live-pulse {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: 0.5; transform: scale(0.8); }
}
.complete-view-toggle {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 0.78rem;
    color: var(--text2);
    cursor: pointer;
}
.complete-view-toggle input { accent-color: var(--success); }

.compare-toggle-group {
    display: inline-flex;
    gap: 8px;
    margin-left: auto;
    flex-wrap: wrap;
}
.compare-toggle-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-family: var(--font-display);
    font-size: 0.75rem;
    font-weight: 600;
    color: var(--text2);
    background: var(--bg3);
    border: 1px solid var(--line);
    padding: 6px 12px;
    border-radius: var(--radius-pill);
    cursor: pointer;
    transition: all 0.15s ease;
}
.compare-toggle-btn:hover {
    color: var(--text);
    border-color: var(--ball-border);
}
.compare-toggle-btn--active {
    color: var(--text-on-ball);
    background: var(--ball);
    border-color: var(--success);
}
.compare-toggle-btn--active:hover {
    color: var(--text-on-ball);
    filter: brightness(1.05);
}
.compare-toggle-state {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    border-radius: 50%;
    background: rgba(var(--ink-rgb), 0.15);
    font-family: var(--font-mono);
    font-size: 0.8rem;
    font-weight: 800;
    line-height: 1;
}
.compare-toggle-btn--active .compare-toggle-state {
    background: rgba(var(--ink-rgb), 0.2);
}

/* Stats bloc */
.players-breakdown { margin-top: 24px; }
.stats-bloc-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 16px;
}
@media (min-width: 900px) {
    .stats-bloc-grid--complete[data-cols="2"] {
        grid-template-columns: repeat(2, 1fr);
    }
    .stats-bloc-grid--complete[data-cols="3"] {
        grid-template-columns: repeat(3, 1fr);
    }
}
.stats-bloc {
    padding: 18px 18px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
    display: flex;
    flex-direction: column;
    gap: 14px;
}
.stats-bloc--primary {
    border-color: var(--ball-border);
    background: linear-gradient(180deg, rgba(var(--ball-mid-rgb),0.06) 0%, var(--bg2) 100%);
}
.stats-bloc--empty {
    opacity: 0.6;
}
.stats-bloc-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
}
.stats-bloc-title {
    font-family: var(--font-display);
    font-size: 1rem;
    font-weight: 700;
    color: var(--text);
    margin: 0;
}
.stats-bloc-headline {
    display: flex;
    align-items: baseline;
    gap: 10px;
}
.stats-bloc-win-pct {
    font-family: var(--font-mono);
    font-size: 1.8rem;
    font-weight: 800;
    color: var(--success);
    line-height: 1;
}
.stats-bloc-win-pct small {
    font-size: 0.7rem;
    opacity: 0.7;
    margin-left: 1px;
}
.stats-bloc-wl {
    font-family: var(--font-mono);
    font-size: 0.7rem;
    color: var(--text2);
}
.stats-bloc-empty {
    color: var(--text3);
    font-size: 0.85rem;
}
.stats-bloc-kpi-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
    gap: 8px;
}
.stats-bloc-kpi {
    padding: 8px 10px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg3);
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.stats-bloc-kpi .kpi-label {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    letter-spacing: 0.8px;
    text-transform: uppercase;
    color: var(--text3);
}
.stats-bloc-kpi .kpi-value {
    font-family: var(--font-mono);
    font-size: 0.95rem;
    font-weight: 700;
    color: var(--text);
}

/* New 3-col thematic KPI grid */
.kpi-thematic-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 12px;
    margin-bottom: 2px;
}
@media (min-width: 700px) {
    .kpi-thematic-grid { grid-template-columns: repeat(3, 1fr); }
}
.kpi-col {
    padding: 12px 14px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg3);
}
.kpi-col-title {
    font-family: var(--font-display);
    font-size: 0.72rem;
    font-weight: 700;
    color: var(--text);
    margin-bottom: 8px;
    letter-spacing: 0.3px;
}
.kpi-line {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    padding: 3px 0;
    border-top: 1px solid var(--line);
    gap: 8px;
}
.kpi-line:first-of-type { border-top: 0; }
.kpi-line-label {
    font-size: 0.7rem;
    color: var(--text2);
}
.kpi-line-value {
    font-family: var(--font-mono);
    font-size: 0.85rem;
    font-weight: 700;
    color: var(--success);
}
.kpi-line--empty {
    font-size: 0.65rem;
    color: var(--text3);
    font-style: italic;
}

/* Collapsibles */
.stats-collapsible {
    border-top: 1px solid var(--line);
}
.stats-collapsible-btn {
    width: 100%;
    text-align: left;
    background: transparent;
    border: 0;
    padding: 12px 4px;
    font-family: var(--font-display);
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--text);
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 8px;
}
.stats-collapsible-btn:hover { color: var(--success); }
.stats-collapsible-chevron {
    font-size: 0.7rem;
    color: var(--text3);
    transition: transform 0.15s ease;
}
.stats-collapsible-btn.open .stats-collapsible-chevron {
    transform: rotate(90deg);
    color: var(--success);
}
.stats-collapsible-content {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.25s ease, padding 0.25s ease;
}
.stats-collapsible-content.open {
    max-height: 2000px;
    padding-bottom: 12px;
}
.adv-rows {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 4px 0;
}
.adv-row {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    padding: 6px 10px;
    background: var(--bg3);
    border-radius: var(--radius-input);
    gap: 8px;
}
.adv-label {
    font-size: 0.75rem;
    color: var(--text2);
}
.adv-value {
    font-family: var(--font-mono);
    font-size: 0.85rem;
    font-weight: 700;
    color: var(--success);
}
.adv-value small {
    font-size: 0.7em;
    color: var(--text3);
    margin-left: 4px;
    font-weight: 500;
}
.stats-section-note {
    font-size: 0.65rem;
    color: var(--text3);
    font-style: italic;
    margin: 8px 0 0 0;
}

/* Distribution bars */
.dist-section { margin-top: 10px; }
.dist-section-title {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--text3);
    margin-bottom: 6px;
}
.dist-row {
    display: grid;
    grid-template-columns: 100px 1fr 90px;
    align-items: center;
    gap: 10px;
    padding: 3px 0;
}
.dist-key {
    font-size: 0.75rem;
    color: var(--text);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.dist-bar-wrap {
    height: 8px;
    background: var(--bg3);
    border-radius: var(--radius-pill);
    overflow: hidden;
}
.dist-bar {
    height: 100%;
    background: var(--ball);
    opacity: 0.7;
    border-radius: var(--radius-pill);
}
.dist-val {
    font-family: var(--font-mono);
    font-size: 0.7rem;
    color: var(--text2);
    text-align: right;
}

/* Match list section */
.match-list-section {
    margin-top: 16px;
    padding-top: 14px;
    border-top: 1px solid var(--line);
}
.match-list-title {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--text3);
    margin-bottom: 8px;
}
.match-list-expand {
    background: transparent;
    border: 1px solid var(--line);
    color: var(--text2);
    padding: 6px 14px;
    border-radius: var(--radius-pill);
    cursor: pointer;
    font-family: var(--font-display);
    font-size: 0.75rem;
    margin-top: 8px;
}
.match-list-expand:hover {
    color: var(--success);
    border-color: var(--ball-border);
}
.match-list-extra { display: none; margin-top: 4px; }
.match-list-expanded .match-list-extra { display: flex; flex-direction: column; gap: 4px; }

/* Compact mode for secondary panels in "Vue complète" */
.stats-bloc--compact .kpi-thematic-grid { gap: 8px; }
.stats-bloc--compact .kpi-col { padding: 8px 10px; }

/* Match list compact */
.match-list-compact {
    display: flex;
    flex-direction: column;
    gap: 4px;
    border-top: 1px solid var(--line);
    padding-top: 10px;
}
.match-row {
    display: grid;
    grid-template-columns: 80px 60px 1fr 130px 24px;
    gap: 10px;
    align-items: center;
    padding: 6px 8px;
    border-radius: var(--radius-input);
    font-size: 0.75rem;
    color: var(--text2);
}
.match-row-win {
    background: rgba(var(--ball-mid-rgb),0.10);
}
.match-row-loss {
    background: rgba(var(--fault-rgb),0.06);
}
.match-date {
    font-family: var(--font-mono);
    font-size: 0.65rem;
    color: var(--text3);
}
.match-round {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}
.match-opponent {
    color: var(--text);
    font-weight: 600;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.match-score {
    font-family: var(--font-mono);
    font-size: 0.7rem;
    color: var(--text2);
    text-align: right;
}
.match-result-icon {
    font-family: var(--font-mono);
    font-weight: 800;
    text-align: center;
}
.match-row-win .match-result-icon { color: var(--success); }
.match-row-loss .match-result-icon { color: var(--fault); }

@media (max-width: 640px) {
    .match-row {
        grid-template-columns: 60px 1fr 80px 18px;
    }
    .match-round { display: none; }
    .filter-row-label { min-width: 50px; font-size: 0.55rem; }
}

/* Overview toggle */
.overview-toggle-wrap {
    margin-top: 24px;
    text-align: center;
}
.overview-toggle-btn {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-family: var(--font-display);
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--text2);
    background: var(--bg2);
    border: 1px solid var(--line);
    padding: 10px 18px;
    border-radius: var(--radius-pill);
    cursor: pointer;
    transition: all 0.15s ease;
}
.overview-toggle-btn:hover {
    color: var(--text);
    border-color: var(--ball-border);
    background: var(--bg3);
}
.overview-toggle-btn--open {
    color: var(--success);
    border-color: var(--ball-border);
}
.overview-toggle-icon {
    font-family: var(--font-mono);
    font-size: 1.1rem;
    font-weight: 700;
    width: 20px;
    height: 20px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background: var(--bg3);
}
.player-overview-content {
    margin-top: 20px;
}

.surface-bullet {
    display: inline-block;
    font-size: 0.9em;
    line-height: 1;
    margin-right: 2px;
}
.surface-bullet--clay { color: var(--clay); }
.surface-bullet--hard { color: var(--hard); }
.surface-bullet--grass { color: var(--grass); }
.surface-bullet--carpet { color: var(--text3); }

.country-flag-img {
    width: 22px;
    height: auto;
    vertical-align: middle;
    border-radius: 2px;
    box-shadow: 0 0 0 1px var(--line);
    margin-right: 4px;
}

/* Career snapshot strip */
.career-strip {
    margin-top: 18px;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
    gap: 10px;
    padding: 14px 18px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
}
.career-pill {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    padding: 4px 6px;
    border-left: 2px solid var(--ball-border);
}
.career-pill-value {
    font-family: var(--font-mono);
    font-size: 1.35rem;
    font-weight: 800;
    color: var(--success);
    line-height: 1;
}
.career-pill-label {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--text3);
    margin-top: 4px;
}
.career-pill-sub {
    font-size: 0.7rem;
    color: var(--text2);
}

/* Recent form sparkline */
.recent-form-row {
    margin-top: 14px;
    padding: 12px 18px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
}
.recent-form-label {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    letter-spacing: 1.2px;
    text-transform: uppercase;
    color: var(--text3);
    min-width: 100px;
}
.recent-form-dots {
    display: inline-flex;
    gap: 5px;
    flex: 1;
    flex-wrap: wrap;
}
.form-dot {
    display: inline-block;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    cursor: help;
    transition: transform 0.1s ease;
}
.form-dot:hover { transform: scale(1.4); }
.form-dot--win {
    background: var(--ball);
    box-shadow: inset 0 0 0 1px var(--ball-border);
}
.form-dot--loss {
    background: var(--fault);
}
.form-dot--latest {
    width: 18px;
    height: 18px;
    box-shadow: 0 0 0 2px var(--bg2), 0 0 0 3px var(--text);
}
.form-axis-label {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    color: var(--text3);
    letter-spacing: 0.5px;
    align-self: center;
    white-space: nowrap;
}
.form-axis-label--left { margin-right: 6px; }
.form-axis-label--right {
    margin-left: 6px;
    color: var(--success);
    font-weight: 700;
}

/* Ranking trend mini-chart */
.ranking-trend {
    margin-top: 14px;
    padding: 14px 18px 10px 18px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
}
.ranking-trend-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 6px;
}
.ranking-trend-label {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    letter-spacing: 1.2px;
    text-transform: uppercase;
    color: var(--text3);
}
.ranking-trend-svg {
    width: 100%;
    height: 200px;
    display: block;
    max-height: 220px;
}
.ranking-trend-legend {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-family: var(--font-mono);
    font-size: 0.55rem;
    color: var(--text3);
    letter-spacing: 0.5px;
}
.legend-dot {
    display: inline-block;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    margin: 0 2px;
}
.legend-dot--peak { background: var(--ball); }
.legend-dot--current { background: var(--text); }

/* Compare CTA on profile */
.compare-cta-row {
    margin-top: 14px;
    text-align: center;
}
.compare-cta-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-family: var(--font-display);
    font-size: 0.85rem;
    font-weight: 700;
    color: var(--text-on-ball);
    background: var(--ball);
    border: 1px solid var(--ball);
    padding: 10px 22px;
    border-radius: var(--radius-pill);
    cursor: pointer;
    transition: all 0.15s ease;
    letter-spacing: 0.3px;
}
.compare-cta-btn:hover {
    box-shadow: 0 2px 12px rgba(var(--shadow-rgb), 0.15);
    transform: translateY(-1px);
}

/* Player picker modal */
.player-picker-overlay {
    position: fixed;
    inset: 0;
    background: rgba(var(--shadow-rgb), 0.45);
    display: flex;
    align-items: flex-start;
    justify-content: center;
    padding-top: 80px;
    z-index: 1000;
    animation: fadeIn 0.15s ease;
}
@keyframes fadeIn {
    from { opacity: 0; } to { opacity: 1; }
}
.player-picker-modal {
    background: var(--bg2);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    width: min(520px, 92vw);
    max-height: 70vh;
    padding: 24px 20px;
    box-shadow: 0 24px 48px rgba(var(--shadow-rgb), 0.25);
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 14px;
}
.player-picker-close {
    position: absolute;
    top: 10px;
    right: 12px;
    background: transparent;
    border: 0;
    font-size: 1.6rem;
    color: var(--text2);
    cursor: pointer;
    padding: 4px 10px;
    line-height: 1;
}
.player-picker-close:hover { color: var(--success); }
.player-picker-title {
    font-family: var(--font-display);
    font-size: 1rem;
    font-weight: 700;
    color: var(--text);
    margin: 0;
}
.player-picker-input {
    width: 100%;
    padding: 10px 14px;
    background: var(--bg3);
    border: 1px solid var(--line);
    color: var(--text);
    border-radius: var(--radius-input);
    font-size: 0.9rem;
}
.player-picker-results {
    overflow-y: auto;
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.player-picker-result {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 8px 10px;
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--radius-md);
    cursor: pointer;
    text-align: left;
    color: var(--text);
    transition: all 0.1s ease;
}
.player-picker-result:hover {
    background: var(--bg3);
    border-color: var(--ball-border);
}
.player-picker-photo {
    width: 42px;
    height: 42px;
    border-radius: 50%;
    background-size: cover;
    background-position: center 20%;
    background-color: var(--bg3);
    flex-shrink: 0;
}
.player-picker-photo--empty {
    background: var(--bg3);
    border: 1px solid var(--line);
}
.player-picker-info {
    flex: 1;
    min-width: 0;
}
.player-picker-name {
    font-family: var(--font-display);
    font-size: 0.9rem;
    font-weight: 700;
    color: var(--text);
}
.player-picker-meta {
    font-family: var(--font-mono);
    font-size: 0.7rem;
    color: var(--text3);
}
.player-picker-empty {
    text-align: center;
    color: var(--text3);
    font-style: italic;
    padding: 24px;
    font-size: 0.85rem;
}

/* Compare page */
.compare-page { max-width: 1100px; }

.compare-hero {
    margin-top: 18px;
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    gap: 16px;
    padding: 24px 18px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
}
.compare-hero-side {
    text-align: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
}
.compare-hero-photo {
    width: 130px;
    height: 130px;
    border-radius: 50%;
    background-size: cover;
    background-position: center 20%;
    background-color: var(--bg3);
    border: 2px solid var(--ball);
    box-shadow: 0 4px 14px rgba(var(--shadow-rgb), 0.12);
}
.compare-hero-photo--empty {
    background: var(--bg3);
    border-color: var(--line);
    box-shadow: none;
}
.compare-hero-rank {
    font-family: var(--font-mono);
    font-size: 1.1rem;
    font-weight: 800;
    color: var(--success);
    background: var(--ball-subtle);
    border: 1px solid var(--ball-border);
    padding: 3px 12px;
    border-radius: var(--radius-pill);
}
.compare-hero-name {
    font-family: var(--font-display);
    font-size: 1.3rem;
    font-weight: 700;
    color: var(--text);
    margin: 0;
}
.compare-hero-country {
    font-family: var(--font-mono);
    font-size: 0.7rem;
    color: var(--text2);
    letter-spacing: 0.6px;
}
.compare-hero-vs {
    font-family: var(--font-display);
    font-size: 2rem;
    font-weight: 800;
    color: var(--text);
    letter-spacing: 1px;
}
.compare-hero-photo--rect {
    width: 160px;
    height: 224px;
    border-radius: 12px;
    background-position: center top;
}
@media (min-width: 768px) {
    .compare-hero-photo--rect {
        width: 200px;
        height: 280px;
    }
}
.compare-hero-vs-block {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
}
.compare-hero-vs-surface {
    font-family: var(--font-mono);
    font-size: 0.7rem;
    text-transform: lowercase;
    letter-spacing: 1px;
    color: var(--text3);
}

/* H2H banner */
.h2h-banner {
    margin-top: 20px;
    padding: 22px 20px;
    border: 1px solid var(--ball-border);
    border-radius: var(--radius-md);
    background: linear-gradient(180deg, rgba(var(--ball-mid-rgb),0.06) 0%, var(--bg2) 100%);
    text-align: center;
}
.h2h-title {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    letter-spacing: 1.5px;
    text-transform: uppercase;
    color: var(--text3);
    margin-bottom: 12px;
}
.h2h-score {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 20px;
    font-family: var(--font-mono);
    font-size: 3rem;
    font-weight: 800;
    line-height: 1;
}
.h2h-side {
    color: var(--text2);
    transition: all 0.2s ease;
}
.h2h-side--winner {
    color: var(--success);
}
.h2h-dash {
    font-size: 2rem;
    color: var(--text3);
}
.h2h-meta {
    font-size: 0.85rem;
    color: var(--text2);
    margin-top: 10px;
}
.h2h-surf-panel {
    margin: 20px auto 0;
    max-width: 460px;
    padding: 16px 18px 18px;
    background: linear-gradient(180deg, var(--sheen) 0%, rgba(255,255,255,0) 100%);
    border: 1px solid var(--line);
    border-radius: 14px;
}
.h2h-surf-panel-head {
    font-family: var(--font-mono);
    font-size: 0.62rem;
    text-transform: uppercase;
    letter-spacing: 2px;
    color: var(--text3);
    text-align: center;
    margin-bottom: 16px;
}
.h2h-surf-breakdown {
    display: flex;
    flex-direction: column;
    gap: 14px;
}
.h2h-surf-row {
    padding: 9px 11px;
    border-radius: 10px;
    transition: background 0.25s ease, transform 0.25s ease;
}
.h2h-surf-row--dominant {
    background: rgba(var(--ball-mid-rgb),0.08);
    box-shadow: inset 0 0 0 1px rgba(var(--ball-deep-rgb),0.25);
}
.h2h-surf-row:hover {
    background: rgba(var(--ink-rgb), 0.05);
    transform: translateY(-1px);
}
.h2h-surf-top {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 7px;
}
.h2h-surf-name {
    font-family: var(--font-display);
    font-size: 0.82rem;
    font-weight: 600;
    color: var(--text);
    letter-spacing: 0.2px;
}
.h2h-surf-count {
    font-family: var(--font-mono);
    font-size: 0.62rem;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: var(--text3);
}
.h2h-surf-count b { color: var(--text); font-weight: 700; }
.h2h-surf-track {
    position: relative;
    height: 16px;
    border-radius: 8px;
    overflow: hidden;
    background: var(--bg3);
    box-shadow: inset 0 0 0 1px var(--line);
}
.h2h-surf-a-fill {
    position: absolute;
    right: 50%;
    top: 0;
    bottom: 0;
    background: linear-gradient(90deg, rgba(var(--clay-rgb),0.13) 0%, var(--clay) 60%, #b96a3e 100%);
    box-shadow: none;
    transition: width 0.6s cubic-bezier(0.16,1,0.3,1);
}
.h2h-surf-b-fill {
    position: absolute;
    left: 50%;
    top: 0;
    bottom: 0;
    background: linear-gradient(90deg, var(--hard) 0%, #3d7ec4 40%, rgba(var(--hard-rgb),0.13) 100%);
    box-shadow: none;
    transition: width 0.6s cubic-bezier(0.16,1,0.3,1);
}
.h2h-surf-mid {
    position: absolute;
    left: 50%;
    top: -3px;
    bottom: -3px;
    width: 0;
    border-left: 2px dashed rgba(var(--ink-rgb), 0.45);
    transform: translateX(-1px);
    pointer-events: none;
    z-index: 3;
}
.h2h-surf-bottom {
    display: flex;
    align-items: baseline;
    justify-content: center;
    margin-top: 9px;
}
.h2h-surf-score {
    font-family: var(--font-mono);
    font-size: 1.15rem;
    font-weight: 700;
    display: inline-flex;
    align-items: baseline;
    gap: 10px;
}
.h2h-surf-score .h2h-surf-a { color: var(--clay); }
.h2h-surf-score .h2h-surf-b { color: var(--hard); }
.h2h-surf-score .h2h-surf-dash { color: var(--text3); font-weight: 400; font-size: 0.9rem; }
.h2h-empty-text {
    font-size: 0.85rem;
    color: var(--text3);
    font-style: italic;
    margin: 0;
}

/* H2H series V/D */
.h2h-series-row {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-top: 14px;
    flex-wrap: wrap;
    justify-content: center;
}
.h2h-series-label {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    letter-spacing: 1.2px;
    text-transform: uppercase;
    color: var(--text3);
}
.h2h-series-letters {
    display: inline-flex;
    gap: 4px;
    flex-wrap: wrap;
    justify-content: center;
}
.h2h-series-arrow {
    font-family: var(--font-mono);
    font-size: 0.65rem;
    color: var(--success);
    font-weight: 700;
}
.vd-letter {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    font-family: var(--font-mono);
    font-size: 0.85rem;
    font-weight: 800;
    border-radius: 4px;
    cursor: help;
    transition: transform 0.1s ease;
}
.vd-letter:hover { transform: scale(1.2); }
.vd-letter--win {
    background: var(--ball-subtle);
    color: var(--text);
    border: 1px solid var(--ball-border);
}
.vd-letter--loss {
    background: rgba(var(--fault-rgb),0.10);
    color: var(--fault);
    border: 1px solid rgba(var(--fault-rgb),0.35);
}

/* Compare — Forme récente V/D rows per player */
.cmp-form-row {
    padding: 10px 12px;
    background: var(--bg3);
    border-radius: var(--radius-md);
    margin-bottom: 8px;
    border: 1px solid var(--line);
}
.cmp-form-row:last-child { margin-bottom: 0; }
.cmp-form-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    margin-bottom: 8px;
}
.cmp-form-name {
    font-family: var(--font-display);
    font-size: 0.85rem;
    font-weight: 700;
    color: var(--text);
}
.cmp-form-counter {
    font-family: var(--font-mono);
    font-size: 0.7rem;
    color: var(--text2);
}
.cmp-form-letters {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
}
.cmp-form-axis {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    color: var(--text3);
    letter-spacing: 0.5px;
}
.cmp-form-axis--end {
    color: var(--success);
    font-weight: 700;
}
.cmp-form-empty {
    font-size: 0.75rem;
    color: var(--text3);
    font-style: italic;
}

/* Unified Compare filter bar (Surface + Tournament) */
.compare-filter-bar {
    margin-top: 16px;
    padding: 16px 18px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
    display: flex;
    flex-direction: column;
    gap: 10px;
    position: sticky;
    top: 0;
    z-index: 4;
}
.filter-reset {
    background: transparent;
    border: 1px solid var(--line);
    color: var(--text2);
    padding: 6px 10px;
    border-radius: var(--radius-pill);
    cursor: pointer;
    font-family: var(--font-mono);
    font-size: 0.7rem;
    margin-left: 8px;
}
.filter-reset:hover { color: var(--fault); border-color: rgba(var(--fault-rgb),0.35); }

/* H2H scope bar + panel */
.h2h-scope-bar {
    margin-top: 18px;
    padding: 14px 16px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
    display: flex;
    flex-direction: column;
    gap: 10px;
}
.h2h-scope-panel {
    margin-top: 14px;
    padding: 18px 18px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
}
.h2h-scope-title {
    font-family: var(--font-display);
    font-size: 1rem;
    font-weight: 700;
    color: var(--text);
    margin: 0 0 14px 0;
    padding-bottom: 8px;
    border-bottom: 1px solid var(--line);
}
.h2h-scope-meta-list {
    list-style: none;
    padding: 0;
    margin: 0 0 16px 0;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 8px;
}
.h2h-scope-meta-list li {
    display: flex;
    flex-direction: column;
    padding: 8px 12px;
    background: var(--bg3);
    border-radius: var(--radius-input);
    border-left: 2px solid var(--ball-border);
}
.h2h-scope-meta-list li span {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    letter-spacing: 0.8px;
    text-transform: uppercase;
    color: var(--text3);
}
.h2h-scope-meta-list li strong {
    font-family: var(--font-mono);
    font-size: 0.85rem;
    font-weight: 700;
    color: var(--text);
    margin-top: 2px;
}

/* Digeste KPI tiles */
.h2h-kpi-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
    gap: 10px;
    margin: 0 0 18px 0;
}
.h2h-kpi {
    padding: 12px 14px;
    background: linear-gradient(180deg, var(--sheen) 0%, rgba(255,255,255,0) 100%);
    border: 1px solid var(--line);
    border-radius: 12px;
    display: flex;
    flex-direction: column;
    gap: 4px;
    transition: border-color 0.2s ease, transform 0.2s ease;
}
.h2h-kpi:hover {
    border-color: var(--ball-border);
    transform: translateY(-1px);
}
.h2h-kpi-label {
    font-family: var(--font-mono);
    font-size: 0.56rem;
    letter-spacing: 1.5px;
    text-transform: uppercase;
    color: var(--text3);
}
.h2h-kpi-val {
    font-family: var(--font-display);
    font-size: 1.45rem;
    font-weight: 700;
    color: var(--text);
    line-height: 1.1;
}
.h2h-kpi-val .h2h-kpi-u {
    font-size: 0.78rem;
    font-weight: 500;
    color: var(--text2);
}
.h2h-kpi-val .h2h-surf-a { color: var(--clay); }
.h2h-kpi-val .h2h-surf-b { color: var(--hard); }
.h2h-kpi-sub {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    letter-spacing: 0.4px;
    color: var(--text3);
}
.h2h-kpi--pair { gap: 6px; }
.h2h-kpi-pair-row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
}
.h2h-kpi-pname {
    font-family: var(--font-mono);
    font-size: 0.72rem;
    font-weight: 700;
}
.h2h-kpi-pname.h2h-surf-a { color: var(--clay); }
.h2h-kpi-pname.h2h-surf-b { color: var(--hard); }
.h2h-kpi-pval {
    font-family: var(--font-display);
    font-size: 1.15rem;
    font-weight: 700;
    color: var(--text);
}

.h2h-side-stats {
    margin-top: 14px;
    border-top: 1px solid var(--line);
    padding-top: 14px;
}
.h2h-side-row {
    display: grid;
    grid-template-columns: 1fr 220px 1fr;
    align-items: center;
    gap: 10px;
    padding: 6px 0;
}
.h2h-side-row--head {
    border-bottom: 1px solid var(--line);
    margin-bottom: 8px;
    padding-bottom: 8px;
}
.h2h-side-row--head .h2h-side-cell,
.h2h-side-row--head .h2h-side-label {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    letter-spacing: 0.8px;
    text-transform: uppercase;
    color: var(--text3);
    background: transparent;
}
.h2h-side-cell {
    font-family: var(--font-mono);
    font-size: 0.9rem;
    font-weight: 700;
    color: var(--text2);
    text-align: center;
    padding: 6px 12px;
    border-radius: var(--radius-input);
    background: var(--bg3);
}
.h2h-side-cell--winner {
    color: var(--text-on-ball);
    background: var(--ball);
}
.h2h-side-label {
    text-align: center;
    font-size: 0.78rem;
    color: var(--text3);
}

/* Comparison rows — diverging bars (clay A / blue B), avg ±σ */
.h2h-cmp-legend {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 14px;
}
.h2h-cmp-leg {
    font-family: var(--font-mono);
    font-size: 0.62rem;
    font-weight: 700;
    letter-spacing: 0.5px;
}
.h2h-cmp-leg--a { color: var(--clay); }
.h2h-cmp-leg--b { color: var(--hard); }
.h2h-cmp-head-label {
    font-family: var(--font-mono);
    font-size: 0.55rem;
    letter-spacing: 1.2px;
    text-transform: uppercase;
    color: var(--text3);
}
.h2h-cmp-row {
    padding: 9px 0;
    border-top: 1px solid var(--line);
}
.h2h-cmp-row:first-of-type { border-top: none; }
.h2h-cmp-label {
    font-family: var(--font-mono);
    font-size: 0.58rem;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--text3);
    text-align: center;
    margin-bottom: 6px;
}
.h2h-cmp-body {
    display: grid;
    grid-template-columns: 72px 1fr 72px;
    align-items: center;
    gap: 12px;
}
.h2h-cmp-val {
    font-family: var(--font-mono);
    font-size: 0.98rem;
    font-weight: 700;
    display: flex;
    flex-direction: column;
    line-height: 1.15;
}
.h2h-cmp-val--a { color: var(--clay); align-items: flex-end; }
.h2h-cmp-val--b { color: var(--hard); align-items: flex-start; }
.h2h-cmp-val.is-win { text-decoration: underline 2px; text-underline-offset: 3px; }
.h2h-cmp-sd {
    font-size: 0.62rem;
    font-weight: 600;
    color: var(--text2);
    margin-top: 2px;
}
.h2h-cmp-track {
    position: relative;
    height: 10px;
    border-radius: 5px;
    overflow: hidden;
    background: var(--bg3);
    box-shadow: inset 0 0 0 1px var(--line);
}
.h2h-cmp-bar-a {
    position: absolute;
    right: 50%;
    top: 0;
    bottom: 0;
    background: linear-gradient(90deg, rgba(var(--clay-rgb),0.13) 0%, var(--clay) 60%, #b96a3e 100%);
    transition: width 0.55s cubic-bezier(0.16,1,0.3,1);
}
.h2h-cmp-bar-b {
    position: absolute;
    left: 50%;
    top: 0;
    bottom: 0;
    background: linear-gradient(90deg, var(--hard) 0%, #3d7ec4 40%, rgba(var(--hard-rgb),0.13) 100%);
    transition: width 0.55s cubic-bezier(0.16,1,0.3,1);
}
.h2h-cmp-mid {
    position: absolute;
    left: 50%;
    top: -2px;
    bottom: -2px;
    width: 0;
    border-left: 1px dashed rgba(var(--ink-rgb), 0.40);
    transform: translateX(-0.5px);
    z-index: 2;
}

@media (max-width: 720px) {
    .h2h-side-row {
        grid-template-columns: 1fr 1fr;
        grid-template-areas: "label label" "a b";
    }
    .h2h-side-row > .h2h-side-label { grid-area: label; }
    .h2h-side-row > .h2h-side-cell:first-child { grid-area: a; }
    .h2h-side-row > .h2h-side-cell:last-child { grid-area: b; }
}

/* Surface picker */
.cmp-surface-row {
    margin-top: 18px;
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
}

/* Compare stats grid */
.cmp-stats { margin-top: 18px; }
.cmp-section {
    margin-bottom: 18px;
    padding: 16px 18px;
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    background: var(--bg2);
}
.cmp-section-title {
    font-family: var(--font-display);
    font-size: 0.9rem;
    font-weight: 700;
    color: var(--text);
    margin: 0 0 12px 0;
    padding-bottom: 8px;
    border-bottom: 1px solid var(--line);
}
.cmp-row {
    display: grid;
    grid-template-columns: 1fr 220px 1fr;
    align-items: center;
    gap: 12px;
    padding: 8px 0;
    border-top: 1px solid var(--line);
}
.cmp-row:first-of-type, .cmp-section .cmp-row:first-child { border-top: 0; }
.cmp-cell {
    font-family: var(--font-mono);
    font-size: 1rem;
    font-weight: 700;
    color: var(--text2);
    padding: 6px 12px;
    border-radius: var(--radius-input);
    background: var(--bg3);
    text-align: center;
}
.cmp-cell--winner {
    color: var(--text-on-ball);
    background: var(--ball);
}
.cmp-label {
    text-align: center;
    font-size: 0.78rem;
    color: var(--text3);
    font-family: var(--font-mono);
    letter-spacing: 0.4px;
}
.cmp-row--spark {
    border-top: 1px solid var(--line);
    padding-top: 14px;
    margin-top: 6px;
}
.cmp-spark {
    background: transparent;
    padding: 4px 0;
    display: inline-flex;
    gap: 4px;
    justify-content: center;
    flex-wrap: wrap;
}
.cmp-spark-empty {
    color: var(--text3);
    font-size: 0.7rem;
    font-style: italic;
}

/* H2H list section */
.cmp-h2h-list { margin-top: 28px; }
.cmp-h2h-list .match-list-compact { margin-top: 8px; }

@media (max-width: 720px) {
    .compare-hero {
        grid-template-columns: 1fr;
        text-align: center;
    }
    .compare-hero-vs {
        font-size: 1.4rem;
        padding: 6px 0;
    }
    .compare-hero-photo {
        width: 100px;
        height: 100px;
    }
    .compare-hero-photo--rect {
        width: 140px;
        height: 196px;
    }
    .cmp-row {
        grid-template-columns: 1fr 1fr;
        grid-template-areas: "label label" "a b";
    }
    .cmp-label { grid-area: label; }
    .cmp-cell--a { grid-area: a; }
    .cmp-cell--b { grid-area: b; }
    .h2h-score { font-size: 2.2rem; }
}

/* ═══════════════════════════════════════════════
 * Tier gating (Players & Compare)
 * ═══════════════════════════════════════════════ */

.tier-locked-section {
    position: relative;
    margin: 16px 0;
}

.tier-locked-section--compact {
    min-height: 140px;
}

.tier-locked-overlay {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(180deg, var(--lock-veil-0) 0%, var(--lock-veil-1) 50%);
    backdrop-filter: blur(3px);
    -webkit-backdrop-filter: blur(3px);
    border-radius: 12px;
    z-index: 4;
    padding: 24px;
}

.tier-locked-overlay-inner {
    text-align: center;
    max-width: 360px;
}

.tier-locked-overlay-title {
    font-family: var(--font-display, "Inter", sans-serif);
    font-weight: 700;
    font-size: 1.05rem;
    color: var(--text, #1a1d18);
    margin-bottom: 12px;
    letter-spacing: -0.01em;
}

.tier-locked-overlay-btn {
    min-width: 180px;
}

/* CTA banner at bottom of profile page */
.tier-cta-banner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: 18px 22px;
    margin: 32px 0 8px;
    border-radius: 14px;
    background: linear-gradient(135deg, rgba(var(--ball-mid-rgb),0.08), rgba(var(--ball-mid-rgb),0.04));
    border: 1px solid var(--ball-border);
}

.tier-cta-banner--pro {
    background: linear-gradient(135deg, rgba(var(--ball-mid-rgb),0.10), rgba(var(--ball-mid-rgb),0.05));
    border-color: rgba(var(--ball-deep-rgb),0.50);
}

.tier-cta-banner-text {
    flex: 1;
    color: var(--text2, #4a4f43);
    font-size: 0.95rem;
    line-height: 1.4;
}

.tier-cta-banner-btn {
    flex-shrink: 0;
    white-space: nowrap;
}

@media (max-width: 640px) {
    .tier-cta-banner {
        flex-direction: column;
        align-items: stretch;
        text-align: center;
    }
    .tier-cta-banner-btn { width: 100%; }
}

/* SEO pivot link near top of profile */
.players-seo-pivot {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 8px 0 14px;
    font-size: 0.78rem;
    flex-wrap: wrap;
}

.players-seo-pivot-badge {
    display: inline-block;
    padding: 3px 8px;
    border-radius: 6px;
    background: var(--ball-subtle);
    color: var(--text2, #4a4f43);
    font-family: var(--font-mono, monospace);
    text-transform: uppercase;
    letter-spacing: 0.08em;
    font-size: 0.65rem;
}

.players-seo-pivot-link {
    color: var(--text3, #7a7f6c);
    text-decoration: none;
    transition: color 0.18s ease;
}

.players-seo-pivot-link:hover {
    color: var(--text, #1a1d18);
    text-decoration: underline;
}

/* Tier modal (auth + upgrade prompts) */
.tier-modal-overlay {
    position: fixed;
    inset: 0;
    background: rgba(var(--shadow-rgb), 0.45);
    z-index: 1200;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    animation: tier-modal-fade 0.18s ease;
}

@keyframes tier-modal-fade {
    from { opacity: 0; }
    to { opacity: 1; }
}

.tier-modal {
    position: relative;
    width: 100%;
    max-width: 440px;
    background: var(--bg2, #ece2c2);
    border: 1px solid var(--line, rgba(26,29,24,0.12));
    border-radius: 16px;
    padding: 32px 28px 24px;
    box-shadow: 0 24px 60px rgba(var(--shadow-rgb), 0.25);
}

.tier-modal-close {
    position: absolute;
    top: 12px;
    right: 14px;
    width: 32px;
    height: 32px;
    background: transparent;
    border: 0;
    color: var(--text3, #7a7f6c);
    font-size: 1.6rem;
    cursor: pointer;
    line-height: 1;
}

.tier-modal-close:hover { color: var(--text, #1a1d18); }

.tier-modal-title {
    font-family: var(--font-display, sans-serif);
    font-weight: 700;
    font-size: 1.15rem;
    margin: 0 0 10px;
    color: var(--text, #1a1d18);
}

.tier-modal-body {
    color: var(--text2, #4a4f43);
    font-size: 0.9rem;
    line-height: 1.5;
    margin: 0 0 18px;
}

.tier-modal-actions {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.tier-modal-actions .btn-primary,
.tier-modal-actions .btn-secondary {
    width: 100%;
}

/* Newsletter soft modal */
.newsletter-soft-modal-overlay {
    position: fixed;
    inset: 0;
    background: rgba(var(--shadow-rgb), 0.40);
    z-index: 1150;
    display: flex;
    align-items: flex-end;
    justify-content: center;
    padding: 16px;
    animation: tier-modal-fade 0.2s ease;
}

@media (min-width: 640px) {
    .newsletter-soft-modal-overlay { align-items: center; }
}

.newsletter-soft-modal {
    position: relative;
    width: 100%;
    max-width: 420px;
    background: var(--bg2, #ece2c2);
    border: 1px solid var(--line, rgba(26,29,24,0.12));
    border-radius: 16px;
    padding: 28px 24px 20px;
    box-shadow: 0 16px 40px rgba(var(--shadow-rgb), 0.22);
}

.newsletter-soft-modal-close {
    position: absolute;
    top: 10px;
    right: 12px;
    width: 28px;
    height: 28px;
    background: transparent;
    border: 0;
    color: var(--text3, #7a7f6c);
    font-size: 1.4rem;
    cursor: pointer;
}

.newsletter-soft-modal-title {
    font-family: var(--font-display, sans-serif);
    font-weight: 700;
    font-size: 1.05rem;
    margin: 0 0 6px;
    color: var(--text, #1a1d18);
}

.newsletter-soft-modal-sub {
    color: var(--text3, #7a7f6c);
    font-size: 0.82rem;
    margin: 0 0 14px;
}

.newsletter-soft-modal-form {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin-bottom: 8px;
}

.newsletter-soft-modal-dismiss {
    width: 100%;
    background: transparent;
    border: 0;
    color: var(--text3, #7a7f6c);
    font-size: 0.82rem;
    padding: 8px;
    cursor: pointer;
    margin-top: 4px;
}

.newsletter-soft-modal-dismiss:hover { color: var(--text, #1a1d18); }

.newsletter-soft-modal-thanks {
    text-align: center;
    color: var(--success, #3a6b1a);
    font-weight: 600;
    padding: 12px 0;
}

/* Locked teaser button on overview toggle */
.overview-toggle-btn--locked {
    opacity: 0.85;
    cursor: pointer;
}

.overview-toggle-btn--locked:hover { opacity: 1; }

/* Compare locked H2H scope teaser */
.h2h-scope-panel--teaser {
    opacity: 0.6;
    filter: blur(0.6px);
}

.h2h-scope-meta-list--teaser li strong { color: var(--text3, #7a7f6c); }

/* Pricing page */
.insights-pro-page { max-width: 920px; margin: 0 auto; }

.insights-pro-hero {
    text-align: center;
    padding: 32px 0 24px;
}

.insights-pro-sub {
    max-width: 560px;
    margin: 12px auto 0;
    color: var(--text2, #4a4f43);
    font-size: 0.98rem;
    line-height: 1.5;
}

.insights-pro-features-list {
    list-style: none;
    padding: 0;
    margin: 24px auto 32px;
    max-width: 520px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.insights-pro-feature {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    color: var(--text2, #4a4f43);
    font-size: 0.95rem;
}

.insights-pro-check {
    color: var(--success, #3a6b1a);
    font-weight: 700;
    flex-shrink: 0;
    margin-top: 2px;
}

.insights-pro-cards {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 14px;
    max-width: 560px;
    margin: 0 auto;
}

@media (max-width: 540px) {
    .insights-pro-cards { grid-template-columns: 1fr; }
}

.insights-pro-card {
    position: relative;
    text-align: left;
    background: var(--bg2, #ece2c2);
    border: 2px solid var(--line, rgba(26,29,24,0.12));
    border-radius: 14px;
    padding: 20px 18px 18px;
    cursor: pointer;
    transition: border-color 0.18s ease, transform 0.18s ease;
}

.insights-pro-card:hover { transform: translateY(-2px); }

.insights-pro-card--selected {
    border-color: var(--ball, #cfeb2b);
    box-shadow: 0 0 0 3px rgba(var(--ball-mid-rgb),0.18);
}

.insights-pro-card--recommended .insights-pro-card-badge {
    position: absolute;
    top: -10px;
    right: 14px;
    background: var(--ball, #cfeb2b);
    color: var(--text-on-ball, #1a1d18);
    padding: 3px 10px;
    border-radius: 6px;
    font-family: var(--font-mono, monospace);
    font-size: 0.62rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    font-weight: 700;
}

.insights-pro-card-label {
    font-family: var(--font-mono, monospace);
    text-transform: uppercase;
    letter-spacing: 0.08em;
    font-size: 0.7rem;
    color: var(--text3, #7a7f6c);
    margin-bottom: 8px;
}

.insights-pro-card-price {
    display: flex;
    align-items: baseline;
    gap: 6px;
}

.insights-pro-card-amount {
    font-family: var(--font-display, sans-serif);
    font-weight: 800;
    font-size: 1.85rem;
    color: var(--text, #1a1d18);
}

.insights-pro-card-per {
    color: var(--text3, #7a7f6c);
    font-size: 0.85rem;
}

.insights-pro-cta-row {
    text-align: center;
    margin: 28px auto 0;
    max-width: 360px;
}

.insights-pro-cta-btn { width: 100%; }

.insights-pro-cta-note {
    margin-top: 12px;
    color: var(--text3, #7a7f6c);
    font-size: 0.82rem;
}

.insights-pro-already {
    text-align: center;
    padding: 36px 24px;
    background: var(--ball-subtle);
    border: 1px solid var(--ball-border);
    border-radius: 16px;
    max-width: 480px;
    margin: 24px auto;
}

.insights-pro-already-icon {
    font-size: 2.4rem;
    color: var(--success, #3a6b1a);
    margin-bottom: 8px;
}

.insights-pro-already-text {
    color: var(--text, #1a1d18);
    font-size: 1rem;
    margin-bottom: 18px;
}


/* ═══════════════════════════════════════════════════════════════════
   PER-SCREEN STADIUM OVERRIDES (loaded after the core above)
   Source: stadium-overrides.css — billing/compare/dashboard/harmony/
   insights/misc/picks/players/portfolio/profile/subscribe/
   theme-toggle/tournaments. Cascade order preserved.
   ═══════════════════════════════════════════════════════════════════ */

/* ==== billing.css ==== */
/* ═══════════════════════════════════════════════
   Stadium patch — Billing screen (invoices + credit notes)
   Loaded AFTER css/app.css. Scoped to `.billing-page`
   (class added on the page container in js/billing.js).
   NOTE: the invoice table itself is styled by the runtime
   <style id="billing-styles"> injected from js/billing.js
   (it lands after this file in document order, so the
   canonical table rules live there). This patch covers the
   page shell, empty state and error state only.
   ═══════════════════════════════════════════════ */

.billing-page {
    max-width: 600px;
}

.billing-page .page-title {
    margin-bottom: 6px;
}

/* Hairline under the title, mirrors the table frame language */
.billing-page .page-title::after {
    content: '';
    display: block;
    width: 44px;
    height: 3px;
    margin-top: 12px;
    background: var(--ball);
    border-radius: 99px;
}

/* ── Empty state ── */
.billing-page .billing-empty {
    padding: 56px 16px;
    border: 1px dashed var(--control-border);
    border-radius: 24px;
    margin-top: 16px;
    color: var(--text3);
}
.billing-page .billing-empty p {
    font-family: var(--font-mono);
    font-size: 0.68rem;
    letter-spacing: 1.1px;
    text-transform: uppercase;
    margin: 0;
}

/* ── Error state ── */
.billing-page .billing-error {
    padding: 40px 16px;
    color: var(--fault);
}
.billing-page .billing-error p {
    font-family: var(--font-mono);
    font-size: 0.72rem;
    letter-spacing: 0.6px;
    margin: 0;
}

/* ==== compare.css ==== */
/* ═══════════════════════════════════════════════
   Stadium patch — Compare screen (H2H in-app)
   Loaded AFTER css/app.css. Scoped to `.compare-page`
   plus compare-only classes added by js/compare.js
   (cmp-titleblock, compare-hero--panel, score center).
   Reference: /stadium/comparer/ (bzb-h2h-panel mega
   panel, surface pills, mono meta).
   ═══════════════════════════════════════════════ */

/* ── Title block: eyebrow + two-tone H1 + mono meta ── */
.compare-page .cmp-titleblock {
    margin: 14px 0 24px;
}
.cmp-title-eyebrow {
    font-family: var(--font-mono);
    font-size: 10.5px;
    font-weight: 500;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--text3);
}
.cmp-h1 {
    font-family: var(--font-display);
    font-size: clamp(30px, 7.5vw, 60px);
    font-weight: 700;
    line-height: 0.95;
    letter-spacing: -0.035em;
    color: var(--text);
    margin: 12px 0 0;
}
.cmp-h1 em {
    font-style: italic;
    color: var(--clay);
    font-size: 0.62em;
}
.cmp-h1-2 {
    color: var(--text3);
}
.cmp-title-meta {
    margin-top: 12px;
    font-family: var(--font-mono);
    font-size: 11.5px;
    letter-spacing: 0.06em;
    color: var(--text2);
    font-variant-numeric: tabular-nums;
}

/* ── H2H mega panel: 2px ink frame, portraits + scoreboard center ── */
.compare-page .compare-hero--panel {
    margin-top: 0;
    padding: 0;
    gap: 0;
    grid-template-columns: 1fr minmax(150px, 220px) 1fr;
    align-items: stretch;
    border: 2px solid var(--text);
    border-radius: 0;
    background: var(--input-bg);
    overflow: hidden;
}
.compare-page .compare-hero--panel .compare-hero-side {
    padding: 22px 14px;
    gap: 12px;
    justify-content: center;
}
.compare-page .compare-hero--panel .compare-hero-side--a {
    border-right: 1px solid var(--text);
}
.compare-page .compare-hero--panel .compare-hero-side--b {
    border-left: 1px solid var(--text);
}
.compare-page .compare-hero--panel .compare-hero-photo {
    width: 112px;
    height: 112px;
    border: 1px solid var(--control-border);
    box-shadow: none;
}
.compare-hero-side-text {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    min-width: 0;
}
.compare-hero-eyebrow {
    font-family: var(--font-mono);
    font-size: 10px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text3);
    font-variant-numeric: tabular-nums;
}
.compare-page .compare-hero--panel .compare-hero-name {
    font-size: clamp(16px, 2.6vw, 22px);
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1.05;
}
.compare-page .compare-hero-vs-block {
    background: var(--bg2);
    padding: 22px 12px;
    justify-content: center;
    gap: 10px;
}
.compare-hero-vs-eyebrow {
    font-family: var(--font-mono);
    font-size: 10px;
    letter-spacing: 0.15em;
    text-transform: uppercase;
    color: var(--text3);
}
.compare-hero-score {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}
.compare-hero-score-n {
    font-family: var(--font-display);
    font-size: clamp(40px, 6vw, 64px);
    font-weight: 700;
    line-height: 0.95;
    letter-spacing: -0.04em;
    color: var(--text2);
    font-variant-numeric: tabular-nums;
}
.compare-hero-score-n.is-winner { color: var(--grass); }
.compare-hero-score-sep {
    font-family: var(--font-mono);
    font-size: 22px;
    color: var(--text3);
}
.compare-page .compare-hero--panel .compare-hero-vs {
    font-size: clamp(28px, 5vw, 40px);
    letter-spacing: 0;
}
.compare-page .compare-hero-vs-surface {
    font-family: var(--font-mono);
    font-size: 10px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text3);
}
@media (max-width: 720px) {
    .compare-page .compare-hero--panel { grid-template-columns: 1fr; }
    .compare-page .compare-hero--panel .compare-hero-side {
        flex-direction: row;
        justify-content: flex-start;
        text-align: left;
        padding: 16px 18px;
    }
    .compare-page .compare-hero--panel .compare-hero-side--a {
        border-right: 0;
        border-bottom: 1px solid var(--text);
    }
    .compare-page .compare-hero--panel .compare-hero-side--b { border-left: 0; }
    .compare-page .compare-hero--panel .compare-hero-photo {
        width: 72px;
        height: 72px;
    }
    .compare-hero-side-text { align-items: flex-start; }
    .compare-page .compare-hero-vs-block {
        order: 3;
        border-top: 1px solid var(--text);
        padding: 16px 12px;
    }
}

/* ── Section titles: bracketed mono eyebrows ── */
.compare-page .player-section-title::before,
.compare-page .h2h-title::before { content: '[ '; color: var(--text3); }
.compare-page .player-section-title::after,
.compare-page .h2h-title::after { content: ' ]'; color: var(--text3); }

/* ── H2H banner (meta + surface breakdown, score removed) ── */
.compare-page .h2h-banner {
    border: 1px solid var(--control-border);
    border-radius: 16px;
    background: var(--input-bg);
}
.compare-page .h2h-meta {
    font-family: var(--font-mono);
    font-size: 12px;
    letter-spacing: 0.04em;
    color: var(--text2);
    margin-top: 2px;
    font-variant-numeric: tabular-nums;
}
.compare-page .h2h-surf-panel {
    background: transparent;
    border: 1px solid var(--line);
    border-radius: 14px;
}
.compare-page .h2h-surf-row--dominant {
    background: var(--control-bg);
    box-shadow: inset 0 0 0 1px var(--control-border);
}

/* ── Diverging H2H bars: control-bg track + solid surface fills ── */
.compare-page .h2h-surf-track {
    background: var(--control-bg);
    box-shadow: none;
    height: 14px;
    border-radius: 7px;
}
.compare-page .h2h-surf-a-fill { background: var(--clay); }
.compare-page .h2h-surf-b-fill { background: var(--hard); }
.compare-page .h2h-cmp-track {
    background: var(--control-bg);
    box-shadow: none;
}
.compare-page .h2h-cmp-bar-a { background: var(--clay); }
.compare-page .h2h-cmp-bar-b { background: var(--hard); }

/* ── H2H scope panel: important data panel → 2px ink frame ── */
.compare-page .h2h-scope-panel {
    border: 2px solid var(--text);
    border-radius: 0;
    background: var(--input-bg);
}
.compare-page .h2h-scope-panel--teaser {
    border: 1px solid var(--control-border);
}

/* ── KPI capsules (label top-left, mono value bottom-right) ── */
.compare-page .h2h-kpi {
    background: var(--input-bg);
    border: 1px solid var(--control-border);
    border-radius: 16px;
    padding: 14px 16px;
    min-height: 92px;
    display: flex;
    flex-direction: column;
    box-shadow: none;
}
.compare-page .h2h-kpi:hover {
    background: var(--input-bg);
    transform: none;
}
.compare-page .h2h-kpi-label {
    font-family: var(--font-mono);
    font-size: 10px;
    letter-spacing: 0.13em;
    text-transform: uppercase;
    color: var(--text3);
}
.compare-page .h2h-kpi-val {
    margin-top: auto;
    align-self: flex-end;
    padding-top: 10px;
    font-family: var(--font-mono);
    font-size: 22px;
    font-weight: 700;
    color: var(--text);
    text-align: right;
    font-variant-numeric: tabular-nums;
}
.compare-page .h2h-kpi-sub {
    align-self: flex-end;
    font-family: var(--font-mono);
    font-size: 10px;
    color: var(--text3);
}
.compare-page .h2h-kpi--pair .h2h-kpi-pair-row {
    font-variant-numeric: tabular-nums;
}

/* ── Stats sections: cream cards + mono section titles ── */
.compare-page .cmp-section {
    background: var(--input-bg);
    border: 1px solid var(--control-border);
    border-radius: 16px;
    padding: 18px;
}
.compare-page .cmp-section-title {
    font-family: var(--font-mono);
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
    border-bottom: 1px solid var(--line);
    padding-bottom: 10px;
}
.compare-page .cmp-section-title::before { content: '[ '; color: var(--text3); }
.compare-page .cmp-section-title::after { content: ' ]'; color: var(--text3); }
.compare-page .cmp-cell {
    background: var(--control-bg);
    border-radius: 10px;
    color: var(--text2);
    font-variant-numeric: tabular-nums;
}
.compare-page .cmp-cell--winner {
    background: var(--text);
    color: var(--bg);
}
.compare-page .cmp-label {
    font-size: 0.66rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

/* ── V/D letters: semantic win/loss chips (cream text on grass/fault) ── */
.compare-page .vd-letter--win {
    background: var(--success);
    border: 0;
    color: #fbf5e2;
}
.compare-page .vd-letter--loss {
    background: var(--fault);
    border: 0;
    color: #fbf5e2;
}

/* ── Filter bar: outline mono pills, active = ink filled ── */
.compare-page .compare-filter-bar {
    border: 1px solid var(--control-border);
    background: var(--input-bg);
    border-radius: 16px;
}
.compare-page .filter-row-label {
    font-family: var(--font-mono);
    font-size: 10px;
    letter-spacing: 0.15em;
    text-transform: uppercase;
    color: var(--text3);
}
.compare-page .filter-pill {
    background: transparent;
    border: 1px solid var(--control-border);
    border-radius: var(--radius-pill);
    font-family: var(--font-mono);
    font-size: 10.5px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text2);
    padding: 8px 14px;
    box-shadow: none;
}
.compare-page .filter-pill:hover:not(.filter-pill--disabled) {
    border-color: var(--text);
    color: var(--text);
    background: transparent;
}
.compare-page .filter-pill--active,
.compare-page .filter-pill--active:hover {
    background: var(--text);
    border-color: var(--text);
    color: var(--bg);
}
.compare-page .filter-pill--disabled { opacity: 0.38; }
.compare-page .filter-select {
    font-family: var(--font-mono);
    font-size: 12px;
    background-color: var(--input-bg);
    border: 1px solid var(--control-border);
    color: var(--text);
}
.compare-page .filter-select:focus {
    border-color: var(--text);
    box-shadow: none;
    outline: none;
}

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
    .compare-page .filter-pill,
    .compare-page .h2h-surf-a-fill,
    .compare-page .h2h-surf-b-fill,
    .compare-page .h2h-cmp-bar-a,
    .compare-page .h2h-cmp-bar-b,
    .compare-page .h2h-surf-row,
    .compare-page .vd-letter {
        transition: none;
    }
    .compare-page .h2h-surf-row:hover,
    .compare-page .vd-letter:hover { transform: none; }
}

/* ==== dashboard.css ==== */
/* ═══════════════════════════════════════════════
   Stadium patch — Dashboard screen (loaded after app.css)
   Capsule KPIs, 2px ink chart frames, Signal panel rows.
   ═══════════════════════════════════════════════ */

/* ── Mono eyebrow (Stadium label) ── */
.dash-eyebrow {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
}
.dash-eyebrow--cream {
    color: rgba(251, 245, 226, 0.78);
}

/* ── Bankroll hero (dark capsule, defocused stadium scoreboard photo).
      Intentionally dark in BOTH themes (night-session pattern from the
      landing); cream/lime text on it is theme-safe.
      Fallback when the photo is missing (onerror removes the img):
      subtle court-lines grid on the dark capsule. ── */
.dash-hero {
    position: relative;
    overflow: hidden;
    border-radius: 24px;
    background:
        repeating-linear-gradient(90deg, rgba(251, 245, 226, 0.045) 0 1px, transparent 1px 56px),
        repeating-linear-gradient(0deg, rgba(251, 245, 226, 0.035) 0 1px, transparent 1px 44px),
        #11140e;
    min-height: 192px;
    display: flex;
}
.dash-hero-bg {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center 42%;
}
.dash-hero-inner {
    position: relative;
    z-index: 1;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    width: 100%;
    padding: 18px 20px 16px;
    background: linear-gradient(168deg, rgba(10, 12, 8, 0.78) 0%, rgba(10, 12, 8, 0.22) 52%, rgba(10, 12, 8, 0.74) 100%);
}
.dash-hero-head {
    display: flex;
    align-items: center;
    gap: 8px;
}
.dash-hero-foot {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 12px;
    margin-top: 40px;
    flex-wrap: wrap;
}
.dash-hero-delta {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: rgba(251, 245, 226, 0.66);
}
.dash-hero-delta.is-up { color: rgba(207, 235, 43, 0.78); }
.dash-hero-delta.is-down { color: rgba(235, 160, 132, 0.85); }
.dash-hero-value {
    margin-left: auto;
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    font-size: clamp(2.1rem, 8vw, 2.9rem);
    line-height: 1;
    letter-spacing: -0.02em;
    color: #fbf5e2;
    text-align: right;
}
/* Lime as text on dark = allowed (never as background under light text) */
.dash-hero-value.is-up { color: var(--ball); }
.dash-hero-value.is-down { color: #eba084; }
/* Hint icon legibility on the dark photo */
.dash-hero .ui-hint-icon {
    border-color: rgba(251, 245, 226, 0.38);
    background: rgba(10, 12, 8, 0.35);
    color: rgba(251, 245, 226, 0.85);
}

/* ── Capsule KPI cards (label top-left 12px, mono value bottom-right) ── */
.dash-kpi {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    gap: 18px;
    border-radius: 24px;
    padding: 16px 18px 14px;
    min-height: 112px;
}
.dash-kpi::before { display: none; }
.dash-kpi-head {
    display: flex;
    align-items: center;
    gap: 7px;
    min-width: 0;
}
.dash-kpi-label {
    font-family: var(--font-mono);
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--text3);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.dash-kpi-foot {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
}
.dash-kpi-value {
    display: block;
    margin-left: auto;
    text-align: right;
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    font-size: clamp(1.65rem, 5.2vw, 2.1rem);
    line-height: 1;
    letter-spacing: -0.02em;
    color: var(--text);
}
.dash-kpi-value--sm {
    font-size: clamp(1.2rem, 4vw, 1.55rem);
}
.dash-kpi-value--xl {
    font-size: clamp(2.05rem, 5.5vw, 2.7rem);
}

/* ── KPI bento: P&L + ROI dominant, win rate + volume compact stack ── */
.dash-kpi-bento {
    display: grid;
    gap: 12px;
    grid-template-columns: 1.35fr 1fr 0.95fr;
    grid-template-areas: "pnl roi side";
    align-items: stretch;
}
.dash-kpi--pnl { grid-area: pnl; }
.dash-kpi--roi { grid-area: roi; }
.dash-kpi-side {
    grid-area: side;
    display: flex;
    flex-direction: column;
    gap: 12px;
    min-width: 0;
}
.dash-kpi-side .dash-kpi {
    flex: 1 1 0;
    min-height: 0;
}
.dash-kpi--hero {
    min-height: 176px;
    gap: 10px;
}
.dash-kpi--mini {
    min-height: 82px;
    padding: 14px 16px 12px;
    gap: 10px;
}

/* Subtle hover lift (capsules only, pointer devices).
   Uses the standalone `translate` property: .card-anim's fadeInUp runs with
   fill-mode forwards, so its keyframe `transform` would override a
   transform-based lift; `translate` composes independently.
   Also overrides app.css .kpi-card:hover lime glow: lime glow is reserved
   for dark contexts, never on the cream background (DA rule). */
.dash-kpi { transition: translate 0.22s ease, border-color 0.3s ease, box-shadow 0.3s ease; }
@media (hover: hover) {
    .dash-kpi:hover {
        translate: 0 -2px;
        border-color: rgba(var(--ink-rgb), 0.38);
        box-shadow: 0 12px 26px rgba(10, 12, 8, 0.10);
    }
}
@media (prefers-reduced-motion: reduce) {
    .dash-kpi { transition: none; }
    .dash-kpi:hover { translate: none; }
}

/* Discreet trend triangle (head, right edge) */
.dash-kpi-trend {
    display: inline-flex;
    align-items: center;
    margin-left: auto;
    opacity: 0.85;
}
.dash-kpi-trend.is-up { color: var(--success); }
.dash-kpi-trend.is-down { color: var(--fault); transform: rotate(180deg); }

/* P&L capsule sparkline (real cumulative series) */
.dash-kpi-sparkwrap {
    flex: 1 1 auto;
    min-height: 30px;
    max-height: 48px;
    color: var(--success);
}
.dash-kpi-sparkwrap.is-down { color: var(--fault); }
.dash-kpi-spark {
    display: block;
    width: 100%;
    height: 100%;
}
.dash-kpi-spark-line {
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
    vector-effect: non-scaling-stroke;
}
.dash-kpi-spark-area {
    fill: currentColor;
    opacity: 0.08;
    stroke: none;
}
.dash-kpi-spark-dot {
    stroke: currentColor;
    stroke-width: 5;
    stroke-linecap: round;
    vector-effect: non-scaling-stroke;
}
.dash-kpi-spark-zero {
    stroke: rgba(var(--ink-rgb), 0.18);
    stroke-width: 1;
    stroke-dasharray: 3 4;
    vector-effect: non-scaling-stroke;
}

/* Win-rate micro meter (lime fill on ink hairline track) */
.dash-kpi-meter {
    position: relative;
    height: 3px;
    flex: 0 0 auto; /* flex column item: never collapse to 0 */
    margin-top: auto;
    border-radius: var(--radius-pill);
    background: rgba(var(--ink-rgb), 0.16);
    overflow: hidden;
}
.dash-kpi-meter span {
    position: absolute;
    inset: 0 auto 0 0;
    border-radius: inherit;
    background: var(--ball);
}

/* ── Explicit streak pill (B2): outline + faint tint, mono uppercase ── */
.dash-streak-pill {
    gap: 7px;
    padding: 5px 12px;
    font-size: 0.6rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    border: 1px solid;
    white-space: nowrap;
}
.dash-streak-pill.streak-win {
    background: rgba(var(--success-rgb), 0.07);
    border-color: rgba(var(--success-rgb), 0.45);
    color: var(--success);
}
.dash-streak-pill.streak-loss {
    background: rgba(var(--fault-rgb), 0.07);
    border-color: rgba(var(--fault-rgb), 0.45);
    color: var(--fault);
}
.dash-streak-dot {
    width: 6px;
    height: 6px;
    border-radius: var(--radius-pill);
    background: currentColor;
    flex: 0 0 auto;
}
/* In the stacked mobile toolbar, keep the pill hugging its content */
@media (max-width: 640px) {
    .dash-streak-pill { align-self: flex-start; }
}

/* Surface capsules */
.dash-surface-kpi { min-height: 100px; padding: 14px 16px 12px; }
.dash-surface-meta {
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.08em;
    color: var(--text3);
    white-space: nowrap;
}

/* Best/worst tournament capsules */
.dash-tournament-kpi { gap: 10px; }
.dash-tournament-name {
    font-family: var(--font-display);
    font-weight: 650;
    font-size: 14px;
    line-height: 1.22;
    color: var(--text);
}

/* Confidence card */
.dash-conf-card {
    border-radius: 24px;
    padding: 18px;
}
.dash-conf-card::before { display: none; }

/* ── Chart frames (2px solid ink, eyebrow mono header) ── */
.dash-chart-frame {
    border: 2px solid var(--text);
    background: var(--input-bg);
}
.dash-chart-frame--thin {
    border-width: 1px;
    border-color: var(--line);
    border-radius: var(--radius-md);
    overflow: hidden;
}
.dash-chart-head {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 16px;
    border-bottom: 1px solid var(--text);
    background: var(--bg2);
}
.dash-chart-frame--thin .dash-chart-head {
    border-bottom-color: var(--line);
}
.dash-chart-period {
    margin-left: auto;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text-on-ball);
    background: var(--ball);
    padding: 3px 10px;
    border-radius: var(--radius-pill);
    white-space: nowrap;
}
.dash-chart-body {
    position: relative;
    height: 220px;
    padding: 14px 12px 10px;
}
.dash-chart-body--tall { height: 260px; }

/* ── Signal panel (Stadium landing pattern) ── */
.dash-signal-panel {
    position: relative;
    overflow: hidden;
    border: 2px solid var(--text);
    background: var(--input-bg);
}
.dash-signal-head {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 13px 16px;
    border-bottom: 1px solid var(--text);
    background: var(--bg2);
}
.dash-signal-live {
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 10px;
    background: var(--ball);
    color: var(--text-on-ball);
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.16em;
    border-radius: var(--radius-pill);
    white-space: nowrap;
}
.dash-signal-live-dot {
    width: 6px;
    height: 6px;
    border-radius: 99px;
    background: var(--grass);
    animation: dash-blink 1.6s ease-in-out infinite;
}
@keyframes dash-blink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.35; }
}
@media (prefers-reduced-motion: reduce) {
    .dash-signal-live-dot { animation: none; }
}

.dash-signal-item {
    position: relative;
    z-index: 1;
    padding: 0 16px;
}
.dash-signal-item--divided {
    border-bottom: 1px solid var(--line);
}
.dash-signal-row {
    display: grid;
    grid-template-columns: 12px minmax(0, 1fr) 64px auto auto;
    gap: 10px;
    align-items: center;
    padding: 14px 0;
}
.dash-signal-dot {
    width: 9px;
    height: 9px;
    border-radius: 99px;
    flex: 0 0 auto;
    justify-self: center;
}
.dot-hard { background: var(--hard); }
.dot-clay { background: var(--clay); }
.dot-grass { background: var(--grass); }
.dot-indoor { background: var(--ace); }

.dash-signal-player {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
    text-decoration: none;
}
.dash-signal-player strong {
    font-family: var(--font-display);
    font-weight: 650;
    font-size: 14.5px;
    color: var(--text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dash-signal-player small {
    font-family: var(--font-mono);
    font-size: 10px;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: var(--text3);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dash-signal-player:hover strong { color: var(--grass); }

.dash-signal-spark {
    display: block;
    opacity: 0.9;
}
/* Theme-aware spark strokes (var() does not resolve in SVG attributes) */
.dash-signal-spark-line { stroke: rgba(var(--ink-rgb), 0.32); }
.dash-signal-spark-dot { fill: var(--grass); }
.dash-signal-spark--empty {
    display: block;
    width: 64px;
    height: 20px;
}
.dash-signal-odds {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    font-size: 15px;
    color: var(--hard);
    text-align: right;
}
.dash-signal-edge {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    font-size: 16px;
    color: var(--grass);
    text-align: right;
    min-width: 58px;
}
.dash-signal-edge--na { color: var(--text3); }

.dash-signal-actions {
    display: flex;
    gap: 8px;
    align-items: center;
    padding: 0 0 14px;
}
.dash-signal-input {
    flex: 1 1 90px;
    min-width: 0;
    padding: 8px 12px;
    font-size: 13px;
    font-family: var(--font-mono);
    border-radius: var(--radius-pill);
}
.dash-signal-follow {
    flex: 0 0 auto;
    padding: 8px 16px;
    font-size: 0.6rem;
    border-radius: var(--radius-pill);
    white-space: nowrap;
}
.dash-signal-analysis {
    flex: 0 0 auto;
    margin-left: auto;
    font-family: var(--font-mono);
    font-size: 0.58rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--text2);
    text-decoration: none;
    white-space: nowrap;
}
.dash-signal-analysis:hover { color: var(--grass); }

.dash-signal-foot {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 11px 16px;
    border-top: 1px solid var(--text);
    background: var(--bg2);
}
.dash-signal-meta {
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text3);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dash-signal-cta {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text);
    text-decoration: none;
    white-space: nowrap;
}
.dash-signal-cta:hover { color: var(--grass); }

.dash-signal-empty {
    position: relative;
    z-index: 1;
    padding: 28px 16px;
    font-family: var(--font-mono);
    font-size: 12px;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--text3);
}

/* Decorative giant outline number (picks count) */
.dash-ghost-num {
    position: absolute;
    top: 50px;
    right: 10px;
    z-index: 0;
    font-family: var(--font-display);
    font-size: 96px;
    font-weight: 700;
    line-height: 1;
    color: transparent;
    -webkit-text-stroke: 1px rgba(var(--ink-rgb), 0.12);
    pointer-events: none;
    user-select: none;
}

/* Hint popovers open upward by default; inside overflow-hidden Stadium
   containers (hero, thin frames, signal panel) open them downward instead */
.dash-hero-head .ui-hint-popover,
.dash-chart-frame--thin .dash-chart-head .ui-hint-popover,
.dash-signal-head .ui-hint-popover {
    bottom: auto;
    top: calc(100% + 10px);
}
.dash-hero-head .ui-hint-popover::after,
.dash-chart-frame--thin .dash-chart-head .ui-hint-popover::after,
.dash-signal-head .ui-hint-popover::after {
    display: none;
}

/* ── Mobile (PWA is mobile-first) ── */
@media (max-width: 700px) {
    /* Bento folds: P&L full width on top, ROI + compact stack below */
    .dash-kpi-bento {
        grid-template-columns: 1fr 1fr;
        grid-template-areas:
            "pnl pnl"
            "roi side";
    }
    .dash-kpi--hero { min-height: 150px; }
    .dash-kpi--pnl { min-height: 158px; }
}
@media (max-width: 480px) {
    .dash-chart-body { height: 180px; padding: 10px 8px 8px; }
    .dash-chart-body--tall { height: 215px; }
    .dash-hero { min-height: 170px; }
    .dash-kpi-value--xl { font-size: clamp(1.8rem, 8.4vw, 2.2rem); }
    .dash-kpi--mini { min-height: 70px; padding: 12px 14px 10px; }
    /* Narrow 3-col surface capsules: meta on its own line, value below right */
    .dash-surface-kpi { padding: 12px 12px 10px; }
    .dash-surface-kpi .dash-kpi-foot { flex-wrap: wrap; }
    .dash-surface-kpi .dash-surface-meta { flex: 1 0 100%; }
    .dash-surface-kpi .dash-kpi-value--sm { font-size: 1.1rem; }
}
@media (max-width: 419px) {
    .dash-signal-spark,
    .dash-signal-spark--empty { display: none; }
    .dash-signal-row { grid-template-columns: 12px minmax(0, 1fr) auto auto; }
    .dash-signal-edge { min-width: 0; }
    .dash-ghost-num { font-size: 76px; }
}

/* ==== harmony.css ==== */
/* ═══════════════════════════════════════════════
   Stadium patch — Harmony (#14, cross-screen accord)
   MUST be the LAST stylesheet loaded (after every
   per-screen patch): it arbitrates between them.
   Scope: vertical rhythm, one card grammar
   (capsule radius 24 / ink frame 2px), title sizes,
   page-head grammar (mono eyebrow above the title).
   Tokens only, light + dark.
   ═══════════════════════════════════════════════ */

/* ── 1. Page-head grammar ─────────────────────────
   Hub screens (tournaments / players / insights) put the
   mono eyebrow ABOVE the title; app screens (dashboard,
   picks, portfolio) had it below. Align: kicker first. */
.premium-page-head > div:first-child,
.picks-page-head > div:first-child {
    display: flex;
    flex-direction: column;
}
.premium-page-kicker,
.picks-page-kicker {
    order: -1;
    margin: 0 0 8px;
}

/* One eyebrow voice on every screen: mono 11px, muted */
.premium-page-kicker,
.picks-page-kicker,
.profile-eyebrow,
.players-head-eyebrow,
.tour-eyebrow {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
}

/* ── 2. Vertical rhythm: page heads breathe the same ── */
.premium-page-head,
.picks-page-head,
.profile-head,
.tcal-head {
    margin-bottom: 24px;
}
.players-page .players-head {
    margin: 6px 0 24px;
}
.picks-tabs {
    margin-bottom: 24px;
}
.subscribe-page .sub-hero {
    margin-bottom: 24px;
}

/* ── 3. Display titles: one size on the hub screens ──
   (was 54.4 / 56 / 57.6px: three near-identical sizes) */
.players-head-title,
.tournament-page-head .page-title.tcal-title,
.page-title.ip-title {
    font-size: clamp(2.15rem, 7.5vw, 3.5rem);
    font-weight: 700;
    letter-spacing: -0.035em;
    line-height: 0.97;
}

/* ── 4. One card grammar ──────────────────────────
   Capsule cards: radius 24 / 1px hairline.
   Ink frames: 2px solid var(--text), same radius 24
   (portfolio + profile frames already are; align the
   squared dashboard / insights frames with them). */
.dash-chart-frame,
.dash-signal-panel,
.ip-frame,
.insights-pro-already.ip-already {
    border-radius: 24px;
}
/* Tinted head bars follow the curve (frame has no
   overflow:hidden so hint popovers stay visible) */
.dash-chart-frame > .dash-chart-head {
    border-radius: 22px 22px 0 0;
}

/* Stragglers at radius 12-16px join the capsule grammar */
.dash-chart-frame--thin {
    border-radius: 24px;
}
.profile-card {
    border-radius: 24px;
}
.picks-empty {
    border-radius: 24px;
}

/* Tournament cards are SQUARE (tournaments.css wins the cascade — Stadium
   frame style, confirmed by user feedback): the chalk-line sweep must hug
   the same square shape. Dead border-radius removed to avoid cascade traps. */
.tcal-sweep-rect {
    rx: 0;
}

/* ==== insights.css ==== */
/* ═══════════════════════════════════════════════
   Stadium patch — pricing screen (loaded after app.css)
   Two-tone display title, ink frames with mono eyebrows,
   numbered feature rows, locked teaser (padlock + light blur),
   capsule plan cards. No lime glow on cream.
   ═══════════════════════════════════════════════ */

/* ── Hero: bracketed eyebrow + two-tone display title ── */
.insights-pro-hero { padding: 28px 0 22px; }
.ip-eyebrow {
    margin-top: 0;
    color: var(--clay);
    font-size: 11px;
    letter-spacing: 0.14em;
}
.ip-eyebrow::before { content: '[ '; opacity: 0.55; }
.ip-eyebrow::after { content: ' ]'; opacity: 0.55; }
.ip-title {
    margin: 14px 0 0;
    font-size: clamp(2.4rem, 9vw, 3.6rem);
    font-weight: 700;
    letter-spacing: -0.035em;
    line-height: 0.97;
}
.ip-title-2 { color: var(--text3); }
.insights-pro-hero .insights-pro-sub { margin-top: 16px; }

/* ── Ink frame + eyebrow head bar (Stadium data panel) ── */
.ip-frame {
    border: 2px solid var(--text);
    background: var(--input-bg);
    max-width: 640px;
    margin: 0 auto 18px;
    overflow: hidden;
}
.ip-frame-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 12px 16px;
    border-bottom: 1px solid var(--text);
    background: var(--bg2);
}
.ip-frame-eyebrow {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text);
}
.ip-frame-count {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    padding: 2px 10px;
    border-radius: 99px;
    background: var(--ball);
    color: var(--text-on-ball);
}

/* ── Features: numbered mono rows with hairline dividers ── */
.insights-pro-features-list.ip-features {
    max-width: none;
    margin: 0;
    padding: 4px 16px 10px;
    gap: 0;
}
.insights-pro-feature.ip-feature {
    align-items: baseline;
    gap: 14px;
    padding: 11px 0;
    border-bottom: 1px solid var(--line);
    font-size: 0.92rem;
    color: var(--text2);
}
.ip-feature:last-child { border-bottom: 0; }
.ip-feature-num {
    flex: 0 0 auto;
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.08em;
    font-variant-numeric: tabular-nums;
    color: var(--clay);
}
.ip-feature-text { line-height: 1.45; }

/* ── Locked teaser: padlock pill + blurred skeleton + overlay CTA ── */
.ip-locked-pill {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 11px;
    border: 1px solid var(--text);
    border-radius: 99px;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text);
    background: transparent;
    white-space: nowrap;
}
.ip-teaser-body {
    position: relative;
    min-height: 188px;
    padding: 14px 16px 16px;
}
.ip-skel {
    display: flex;
    flex-direction: column;
    gap: 9px;
    filter: blur(3px);
    opacity: 0.75;
    pointer-events: none;
    user-select: none;
}
.ip-skel-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 13px 14px;
    border: 1px solid var(--line);
    background: var(--bg2);
}
.ip-skel-dot {
    flex: 0 0 10px;
    width: 10px;
    height: 10px;
    background: rgba(26, 29, 24, 0.16);
}
.ip-skel-bar {
    display: block;
    height: 10px;
    border-radius: 6px;
    background: rgba(26, 29, 24, 0.10);
}
.ip-skel-bar--lg { flex: 1 1 auto; }
.ip-skel-bar--num { flex: 0 0 46px; }
.ip-teaser-overlay {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 18px;
    background: linear-gradient(180deg, rgba(244, 236, 217, 0.40) 0%, rgba(244, 236, 217, 0.88) 62%);
}
.ip-teaser-inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    text-align: center;
    max-width: 340px;
}
.ip-teaser-lock {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border: 1.5px solid var(--text);
    border-radius: 50%;
    color: var(--text);
    background: var(--input-bg);
}
.ip-teaser-lock .ip-lock-ic { width: 14px; height: 14px; }
.ip-teaser-text {
    margin: 0;
    font-size: 12.5px;
    line-height: 1.5;
    color: var(--text2);
}
/* ink-on-ball pill CTA, no glow on cream */
.ip-teaser-cta { min-width: 170px; }
.ip-teaser-cta:hover {
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.42);
    transform: none;
}

/* ── Plans: capsule cards, ink selection (no lime ring glow) ── */
.ip-plans {
    max-width: 640px;
    margin: 26px auto 0;
    scroll-margin-top: calc(72px + var(--safe-top));
}
.ip-plans-eyebrow {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
    margin-bottom: 12px;
}
.ip-plans .insights-pro-cards { max-width: none; }
.insights-pro-card {
    display: flex;
    flex-direction: column;
    min-height: 128px;
    border-radius: 24px;
    border: 1px solid var(--line);
    background: var(--input-bg);
    padding: 18px;
    overflow: hidden;
}
.insights-pro-card:hover {
    transform: translateY(-1px);
    border-color: var(--text);
}
.insights-pro-card--selected,
.insights-pro-card--selected:hover {
    border: 2px solid var(--text);
    box-shadow: none;
    background: var(--bg2);
}
.insights-pro-card-label {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.12em;
    color: var(--text3);
}
.insights-pro-card-price {
    margin-top: auto;
    justify-content: flex-end;
}
.insights-pro-card-amount {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    font-size: 1.9rem;
    letter-spacing: -0.02em;
}
.insights-pro-card-per {
    font-family: var(--font-mono);
    font-size: 0.74rem;
    color: var(--text3);
}
/* Recommended badge: ink-on-ball pill inside the capsule */
.insights-pro-card--recommended .insights-pro-card-badge {
    position: static;
    align-self: flex-start;
    margin-bottom: 10px;
    padding: 3px 11px;
    border-radius: 99px;
    background: var(--ball);
    color: var(--text-on-ball);
    font-size: 10px;
    letter-spacing: 0.12em;
}
/* "Selected" mono tag, visible only on the active card */
.ip-card-selected {
    display: none;
    margin-top: 8px;
    font-family: var(--font-mono);
    font-size: 9.6px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--grass);
}
.insights-pro-card--selected .ip-card-selected { display: block; }

/* CTA row: pill already ink-on-ball via .btn-primary */
.insights-pro-cta-row { margin-top: 22px; }

/* Already VIP / Pro panel as ink frame */
.insights-pro-already.ip-already {
    border: 2px solid var(--text);
    border-radius: 0;
    background: var(--input-bg);
    max-width: 480px;
    padding: 30px 24px;
}
.insights-pro-already-icon {
    font-size: 1.6rem;
    color: var(--grass);
}

/* ── Mobile ── */
@media (max-width: 540px) {
    .insights-pro-hero { padding: 20px 0 16px; }
    .ip-frame { margin-bottom: 14px; }
    .ip-teaser-body { min-height: 200px; }
    .insights-pro-card { min-height: 112px; }
}

@media (prefers-reduced-motion: reduce) {
    .insights-pro-card,
    .insights-pro-card:hover { transition: none; transform: none; }
}

/* ==== misc.css ==== */
/* ═══════════════════════════════════════════════
   Stadium patch — Misc: forms, auth screens, onboarding
   (loaded after app.css)
   Ink-framed auth card on crème, mono labels, quiet focus
   ring, giant outline step numbers, progress dots.
   ═══════════════════════════════════════════════ */

/* ── Forms: mono uppercase 11px labels, radius 10 inputs ── */
.form-label {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.08em;
    color: var(--text2);
}
.form-select {
    border-radius: var(--radius-input);
}

/* Quiet focus ring (replaces the loud lime outline on fields) */
.form-input:focus-visible,
.form-select:focus-visible {
    outline: none;
    border-color: rgba(var(--ink-rgb), 0.5);
    box-shadow: 0 0 0 3px var(--focus-ring);
}
.form-input:focus,
.form-select:focus {
    border-color: rgba(var(--ink-rgb), 0.5);
    box-shadow: 0 0 0 3px var(--focus-ring);
}

/* ═══════════════════════════════════════════════
   AUTH (login / register / verify / forgot / reset)
   ═══════════════════════════════════════════════ */

.auth-screen {
    display: grid;
    place-items: center;
    min-height: calc(100vh - 220px);
    min-height: calc(100dvh - 220px);
    padding: 18px 16px 56px;
}

/* Ink-framed card on crème */
.auth-screen .auth-card {
    width: 100%;
    max-width: 432px;
    margin: 0 auto;
    padding: 32px 30px 28px;
    background: var(--input-bg);
    border: 2px solid var(--text);
    border-radius: 24px;
    box-shadow: 8px 8px 0 rgba(var(--shadow-rgb), 0.07);
}

/* Mono eyebrow with ball dot */
.auth-eyebrow {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 20px;
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--text3);
}
.auth-eyebrow-dot {
    width: 8px;
    height: 8px;
    flex: 0 0 auto;
    border-radius: 50%;
    background: var(--ball);
    box-shadow: inset 0 0 0 1px var(--ball-border);
}

/* Two-tone left-aligned title */
.auth-screen .auth-title {
    text-align: left;
    margin: 0 0 6px;
    font-size: clamp(1.7rem, 5vw, 2.05rem);
    font-weight: 680;
    line-height: 1.04;
    letter-spacing: -0.01em;
}
.auth-title-accent {
    color: var(--text3);
}
.auth-screen .auth-subtitle {
    text-align: left;
    margin-bottom: 24px;
    font-size: 11px;
    letter-spacing: 0.09em;
}
.auth-screen .text-center .auth-title,
.auth-screen .auth-card.text-center .auth-title {
    text-align: center;
}
.auth-screen .auth-card.text-center .auth-eyebrow {
    justify-content: center;
}

/* Register proof strip: hairline columns, mono ink values */
.auth-screen .auth-proof {
    gap: 0;
    padding: 13px 0;
    margin: 0 0 22px;
}
.auth-screen .auth-proof-item {
    padding: 0 14px;
    border-left: 1px solid var(--line);
}
.auth-screen .auth-proof-item:first-child {
    padding-left: 0;
    border-left: 0;
}
.auth-screen .auth-proof-item strong {
    font-size: 11px;
    color: var(--text);
    letter-spacing: 0.05em;
}
.auth-screen .auth-proof-item span {
    font-size: 11px;
    color: var(--text3);
}
@media (max-width: 420px) {
    .auth-screen .auth-proof-item {
        padding: 8px 0;
        border-left: 0;
        border-top: 1px solid var(--line);
    }
    .auth-screen .auth-proof-item:first-child {
        padding-top: 0;
        border-top: 0;
    }
}

/* Forgot link row, switch line */
.auth-forgot-row {
    text-align: right;
    margin: -4px 0 16px;
}
.auth-link {
    color: var(--text2);
    font-size: 12.5px;
    text-decoration: underline;
    text-decoration-color: var(--ball-border);
    text-underline-offset: 3px;
}
.auth-link:hover {
    color: var(--text);
    text-decoration-color: var(--text);
}
.auth-switch {
    margin: 18px 0 0;
    text-align: center;
    font-size: 13px;
    color: var(--text3);
}

/* Google button as quiet pill */
.google-custom-btn {
    min-height: var(--control-h);
    padding: 0 16px;
    border-radius: var(--radius-pill);
    border: 1px solid var(--control-border);
    background: var(--input-bg);
    color: var(--text);
    font-weight: 600;
}
.google-custom-btn:hover {
    background: var(--control-bg);
    border-color: rgba(var(--ink-rgb), 0.4);
    color: var(--text);
}

.auth-divider span {
    font-size: 10px;
}

/* hCaptcha widget centred in the card */
#captcha-widget {
    display: flex;
    justify-content: center;
}

@media (max-width: 480px) {
    .auth-screen {
        padding: 6px 14px 40px;
        min-height: calc(100vh - 180px);
        min-height: calc(100dvh - 180px);
    }
    .auth-screen .auth-card {
        margin: 0 auto;
        padding: 26px 18px 24px;
        border-radius: 20px;
        box-shadow: 6px 6px 0 rgba(var(--shadow-rgb), 0.07);
    }
}

/* ═══════════════════════════════════════════════
   ONBOARDING (welcome overlay, nudge, coachmarks)
   ═══════════════════════════════════════════════ */

/* Welcome card: ink frame, theme-driven (tokens only, light + dark) */
.ob-welcome-backdrop {
    background: rgba(var(--shadow-rgb), 0.45);
}
.ob-welcome-card {
    background: var(--input-bg);
    border: 2px solid var(--text);
    border-radius: 24px;
    padding: 26px 26px 20px;
    box-shadow: 10px 10px 0 rgba(var(--shadow-rgb), 0.10);
}
.ob-welcome-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 18px;
}
.ob-welcome-logo {
    margin-bottom: 0;
    border-radius: 10px;
    box-shadow: inset 0 0 0 1px var(--ball-border);
}

/* Mono eyebrow above the title (Stadium grammar) */
.ob-welcome-eyebrow {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 10px;
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
}
.ob-welcome-eyebrow-dot {
    width: 8px;
    height: 8px;
    flex: 0 0 auto;
    border-radius: 50%;
    background: var(--ball);
    box-shadow: inset 0 0 0 1px var(--ball-border);
}
.ob-welcome-title {
    color: var(--text);
}
.ob-welcome-subtitle {
    color: var(--text2);
}

/* Progress dots (decorative, mirror the 3 steps) */
.ob-welcome-dots {
    display: flex;
    gap: 6px;
}
.ob-welcome-dot {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    border: 1.5px solid rgba(var(--ink-rgb), 0.4);
    background: transparent;
}
.ob-welcome-dot--active {
    background: var(--ball);
    border-color: var(--ball-border);
}

/* Steps: capsule cards with mono 01/02/03 chips */
.ob-steps {
    gap: 10px;
    margin-bottom: 22px;
    border-top: 0;
}
.ob-step {
    grid-template-columns: 40px minmax(0, 1fr);
    gap: 14px;
    align-items: center;
    padding: 12px 18px 12px 12px;
    border: 1px solid var(--line);
    border-radius: 24px;
    background: var(--control-bg);
}
.ob-step-num {
    display: grid;
    place-items: center;
    width: 40px;
    height: 40px;
    border: 1px solid var(--control-border);
    border-radius: 50%;
    background: var(--input-bg);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.08em;
    color: var(--text2);
    user-select: none;
}
.ob-step-label {
    font-size: 0.95rem;
    color: var(--text);
}
.ob-step-desc {
    color: var(--text2);
}

/* CTA pill: ink on ball, both themes */
.ob-welcome-cta {
    min-height: 46px;
    border: 1px solid var(--ball-border);
    border-radius: var(--radius-pill);
    background: var(--ball);
    color: var(--text-on-ball);
    font-size: 0.62rem;
    letter-spacing: 0.8px;
}
.ob-welcome-cta:hover {
    box-shadow: 0 2px 10px rgba(var(--shadow-rgb), 0.12);
}
.ob-welcome-skip {
    color: var(--text2);
}

/* Bankroll nudge icon inherits grass tint */
.ob-nudge-icon {
    color: var(--grass);
}

/* Coachmark tooltip: small ink frame + ink/ball dots */
.ob-tooltip {
    border: 2px solid var(--text);
    border-radius: 16px;
    box-shadow: 6px 6px 0 rgba(var(--shadow-rgb), 0.08);
}
.ob-tooltip-btn {
    border: 1px solid var(--ball-border);
    border-radius: var(--radius-pill);
}
.ob-tooltip-dot {
    width: 6px;
    height: 6px;
    box-sizing: border-box;
    background: transparent;
    border: 1.5px solid rgba(var(--ink-rgb), 0.4);
}
.ob-tooltip-dot--active {
    background: var(--ball);
    border-color: var(--ball-border);
}

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
    .ob-welcome-backdrop,
    .ob-welcome-card,
    .ob-step,
    .ob-nudge,
    .auth-screen,
    .fade-in {
        animation: none !important;
    }
}

/* ════════════════════════════════════════════
   Onboarding welcome → non-blocking corner nudge (retour user #18)
   Modern toast pattern: slides in bottom-right, a 12s time bar depletes
   (paused on hover), then the card minimizes to a pill instead of
   squatting the middle of the screen. Loaded after the block above:
   these override the centered-modal rules.
   ════════════════════════════════════════════ */
.ob-welcome-backdrop {
    position: fixed;
    inset: auto 24px 24px auto;
    width: auto;
    height: auto;
    display: block;
    background: none;
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
    pointer-events: none;
    z-index: 1200;
}

.ob-welcome-card {
    pointer-events: auto;
    width: 372px;
    max-width: calc(100vw - 32px);
    max-height: calc(100vh - 48px);
    overflow: auto;
    position: relative;
    margin: 0;
    border: 1px solid var(--line);
    border-radius: 20px;
    box-shadow: 0 24px 60px -24px rgba(var(--shadow-rgb, 26, 29, 24), 0.45);
    animation: ob-nudge-in 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}

.ob-welcome-close {
    position: absolute;
    top: 12px;
    right: 12px;
    width: 28px;
    height: 28px;
    border-radius: 99px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--text3);
    background: var(--control-bg);
    font-size: 12px;
    line-height: 1;
    cursor: pointer;
}
.ob-welcome-close:hover {
    color: var(--text);
    background: var(--control-bg-hover);
}

.ob-welcome-progress {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 2px;
    background: var(--ball);
    transform: scaleX(1);
    transform-origin: 0 50%;
}
.ob-welcome-card.is-live .ob-welcome-progress {
    animation: ob-deplete 12s linear forwards;
}
.ob-welcome-card.is-live:hover .ob-welcome-progress {
    animation-play-state: paused;
}

/* Minimized pill (after the bar runs out, or never if reduced-motion) */
.ob-welcome-pill {
    pointer-events: auto;
    display: none;
    align-items: center;
    gap: 8px;
    padding: 10px 16px;
    border-radius: 999px;
    border: 1px solid var(--line);
    background: var(--bg2);
    color: var(--text);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    cursor: pointer;
    box-shadow: 0 12px 30px -16px rgba(var(--shadow-rgb, 26, 29, 24), 0.4);
}
.ob-welcome-pill .ob-welcome-pill-dot {
    width: 7px;
    height: 7px;
    border-radius: 99px;
    background: var(--ball);
    flex-shrink: 0;
}

.ob-welcome-backdrop.ob-minimized .ob-welcome-card {
    display: none;
}
.ob-welcome-backdrop.ob-minimized .ob-welcome-pill {
    display: inline-flex;
}

@keyframes ob-nudge-in {
    from { transform: translateY(24px); opacity: 0; }
    to { transform: translateY(0); opacity: 1; }
}
@keyframes ob-deplete {
    from { transform: scaleX(1); }
    to { transform: scaleX(0); }
}

@media (max-width: 640px) {
    .ob-welcome-backdrop {
        inset: auto 12px 12px 12px;
    }
    .ob-welcome-card {
        width: 100%;
    }
}

@media (prefers-reduced-motion: reduce) {
    .ob-welcome-card {
        animation: none;
    }
    .ob-welcome-card.is-live .ob-welcome-progress {
        animation: none;
    }
}

/* ════════════════════════════════════════════
   Interactive guided tour (retour user #19) : spotlight on real
   elements + step card + completion toast. Tokens only, both themes.
   ════════════════════════════════════════════ */
.ob-tour-spot {
    position: fixed;
    z-index: 1300;
    border-radius: 18px;
    box-shadow: 0 0 0 9999px rgba(var(--shadow-rgb, 26, 29, 24), 0.52);
    border: 2px solid var(--ball);
    pointer-events: none;
    transition: left 0.35s cubic-bezier(0.16, 1, 0.3, 1), top 0.35s cubic-bezier(0.16, 1, 0.3, 1),
                width 0.35s cubic-bezier(0.16, 1, 0.3, 1), height 0.35s cubic-bezier(0.16, 1, 0.3, 1);
}

.ob-tour-card {
    position: fixed;
    z-index: 1301;
    background: var(--bg2);
    border: 1px solid var(--line);
    border-radius: 18px;
    padding: 18px 20px;
    box-shadow: 0 24px 60px -24px rgba(var(--shadow-rgb, 26, 29, 24), 0.5);
    transition: top 0.35s cubic-bezier(0.16, 1, 0.3, 1), left 0.35s cubic-bezier(0.16, 1, 0.3, 1);
}

.ob-tour-eyebrow {
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--text3);
}

.ob-tour-title {
    margin-top: 8px;
    font-family: var(--font-display);
    font-size: 17px;
    font-weight: 650;
    color: var(--text);
}

.ob-tour-desc {
    margin-top: 6px;
    font-size: 13px;
    line-height: 1.5;
    color: var(--text2);
}

.ob-tour-foot {
    margin-top: 14px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.ob-tour-dots {
    display: inline-flex;
    gap: 5px;
}
.ob-tour-dot {
    width: 6px;
    height: 6px;
    border-radius: 99px;
    background: var(--control-border);
}
.ob-tour-dot--on {
    background: var(--ball);
}

.ob-tour-btns {
    display: inline-flex;
    align-items: center;
    gap: 10px;
}

.ob-tour-skip {
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text3);
    background: none;
    cursor: pointer;
}
.ob-tour-skip:hover { color: var(--text); }

.ob-tour-next {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    padding: 9px 16px;
    border-radius: 999px;
    background: var(--ball);
    color: var(--text-on-ball);
    cursor: pointer;
}

/* Action step: the card pulses gently toward the real click */
.ob-tour-card--action {
    border-color: var(--ball-border);
}
.ob-tour-card--action .ob-tour-eyebrow {
    color: var(--ball);
}

/* Completion toast (bottom center, depleting bar, auto-dismiss 5s) */
.ob-tour-toast {
    position: fixed;
    left: 50%;
    bottom: 28px;
    transform: translateX(-50%);
    z-index: 1302;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 12px 20px;
    border-radius: 999px;
    background: var(--bg2);
    border: 1px solid var(--line);
    color: var(--text);
    font-family: var(--font-mono);
    font-size: 12px;
    box-shadow: 0 16px 40px -18px rgba(var(--shadow-rgb, 26, 29, 24), 0.5);
    overflow: hidden;
    animation: ob-nudge-in 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
.ob-tour-toast-dot {
    width: 8px;
    height: 8px;
    border-radius: 99px;
    background: var(--ball);
    flex-shrink: 0;
}
.ob-tour-toast-bar {
    position: absolute;
    left: 0;
    bottom: 0;
    height: 2px;
    width: 100%;
    background: var(--ball);
    transform-origin: 0 50%;
    animation: ob-deplete 5s linear forwards;
}

/* Welcome nudge: tour CTA primary, dashboard CTA becomes ghost */
.ob-welcome-cta--ghost {
    background: none;
    border: 1px solid var(--control-border);
    color: var(--text2);
}
.ob-welcome-cta--ghost:hover {
    color: var(--text);
    border-color: var(--text);
}

@media (prefers-reduced-motion: reduce) {
    .ob-tour-spot,
    .ob-tour-card {
        transition: none;
    }
    .ob-tour-toast {
        animation: none;
    }
    .ob-tour-toast-bar {
        animation: none;
        display: none;
    }
}

/* ════════════════════════════════════════════
   Contextual tour offer (bottom-right pill, first visit of a screen).
   Reuses the .ob-welcome-pill grammar; 15s depleting bar (pattern #18),
   pause on hover, ✕ to dismiss. Tokens only, both themes.
   ════════════════════════════════════════════ */
.ob-offer {
    position: fixed;
    right: 24px;
    bottom: 24px;
    z-index: 1190;
    display: flex;
    align-items: center;
    gap: 8px;
    animation: ob-nudge-in 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
.ob-offer .ob-offer-pill {
    display: inline-flex;
    position: relative;
    overflow: hidden;
}
.ob-offer-bar {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 2px;
    background: var(--ball);
    transform-origin: 0 50%;
}
.ob-offer.is-live .ob-offer-bar {
    animation: ob-deplete 15s linear forwards;
}
.ob-offer.is-live:hover .ob-offer-bar {
    animation-play-state: paused;
}
.ob-offer.is-leaving {
    opacity: 0;
    transform: translateY(8px);
    transition: opacity 0.2s ease, transform 0.2s ease;
}
.ob-offer-x {
    flex-shrink: 0;
    width: 28px;
    height: 28px;
    border-radius: 99px;
    border: 1px solid var(--line);
    background: var(--bg2);
    color: var(--text3);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    box-shadow: 0 12px 30px -16px rgba(var(--shadow-rgb, 26, 29, 24), 0.4);
}
.ob-offer-x:hover {
    color: var(--text);
    background: var(--control-bg-hover);
}

@media (max-width: 640px) {
    .ob-offer {
        right: 12px;
        bottom: 12px;
    }
}

@media (prefers-reduced-motion: reduce) {
    .ob-offer {
        animation: none;
    }
    .ob-offer.is-live .ob-offer-bar {
        animation: none;
        display: none;
    }
    .ob-offer.is-leaving {
        transition: none;
    }
}

/* Topbar « ? » tour entry: inherits the .theme-toggle 32px pill frame */
.tour-help {
    font-family: var(--font-mono);
    font-size: 13px;
    font-weight: 700;
    line-height: 1;
}

/* ==== picks.css ==== */
/* ═══════════════════════════════════════════════
   Stadium patch — Picks screen
   Loaded AFTER css/app.css. Scope kept to the picks
   screen: `.picks-tabs/.picks-tab` (picks-only classes)
   and `#picksTabContent …` (tab content container).
   ═══════════════════════════════════════════════ */

/* ── Main tabs: pills 99px, active = ink filled ── */
.picks-tabs {
    display: flex;
    flex-wrap: nowrap;
    gap: 8px;
    margin: 0 0 22px;
    padding: 0 0 2px;
    border: 0;
    overflow-x: auto;
    scrollbar-width: none;
}
.picks-tabs::-webkit-scrollbar { display: none; }
.picks-tab {
    flex: 0 0 auto;
    min-height: 36px;
    padding: 8px 16px;
    border: 1px solid var(--control-border);
    border-radius: 99px;
    background: transparent;
    color: var(--text2);
    white-space: nowrap;
}
.picks-tab::after { display: none; }
.picks-tab:hover {
    border-color: var(--text3);
    color: var(--text);
    background: transparent;
}
.picks-tab.active {
    background: var(--text);
    border-color: var(--text);
    color: var(--bg);
}

/* ── Tier tabs (Public / VIP): same pill grammar ── */
#picksTabContent .tier-tabs {
    gap: 8px;
    margin: 0 auto 20px;
    padding: 0;
    border: 0;
}
#picksTabContent .tier-tab {
    min-height: 32px;
    padding: 0 14px;
    border: 1px solid var(--control-border);
    border-radius: 99px;
    color: var(--text2);
}
#picksTabContent .tier-tab::after { display: none; }
#picksTabContent .tier-tab:hover {
    border-color: var(--text3);
    color: var(--text);
}
#picksTabContent .tier-tab.active {
    background: var(--text);
    border-color: var(--text);
    color: var(--bg);
}
.tier-dot {
    flex: 0 0 auto;
    width: 7px;
    height: 7px;
    border-radius: 50%;
}
.tier-dot-public { background: var(--grass); }
.tier-dot-vip { background: var(--clay); }
/* On ink fill, surface-dark dots vanish: switch to the lime ball
   (lime on dark = allowed context). */
#picksTabContent .tier-tab.active .tier-dot { background: var(--ball); }

/* ── Filter pills (surface / result) + pagination arrows ── */
.picks-filter-row {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 10px;
}
.picks-filter-row-last {
    margin-bottom: 16px;
}
#picksTabContent .period-btn {
    min-height: 32px;
    padding: 0 13px;
    border: 1px solid var(--control-border);
    border-radius: 99px;
    background: transparent;
    color: var(--text2);
}
#picksTabContent .period-btn::after { display: none; }
#picksTabContent .period-btn:hover {
    border-color: var(--text3);
    color: var(--text);
    background: transparent;
}
#picksTabContent .period-btn.active {
    background: var(--text);
    border-color: var(--text);
    color: var(--bg);
}
#picksTabContent .period-btn:disabled {
    opacity: 1;
    border-color: var(--line);
    color: var(--text3);
    cursor: not-allowed;
}

/* Keyboard focus on all picks pills */
.picks-tab:focus-visible,
#picksTabContent .tier-tab:focus-visible,
#picksTabContent .period-btn:focus-visible {
    outline: none;
    box-shadow: 0 0 0 3px var(--focus-ring);
}

/* Tournament dropdown joins the pill grammar */
#picksTabContent .filter-select {
    border-radius: 99px;
    padding-left: 16px;
}

/* ── Pick cards: hairline panels, no glow ── */
#picksTabContent .pick-card {
    background: var(--bg2);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    margin-bottom: 12px;
}
#picksTabContent .pick-card::before { display: none; } /* drop left accent bar, surface = dot */
#picksTabContent .pick-card:hover {
    border-color: var(--control-border);
    box-shadow: 0 6px 20px rgba(var(--ink-rgb), 0.08);
}

/* ── Surface dot per match (context line chip → dot + label) ── */
#picksTabContent .pick-card-context .badge {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    min-height: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    font-size: inherit;
    letter-spacing: inherit;
    vertical-align: baseline;
}
#picksTabContent .pick-card-context .badge::before {
    content: '';
    flex: 0 0 auto;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: currentColor;
}
/* indoor inherits --text2: nudge the dot to the lime ball, ink-ringed for AA-safe edges */
#picksTabContent .pick-card-context .badge.surface-indoor::before {
    background: var(--ball);
    box-shadow: 0 0 0 1px var(--ball-border);
}

/* ── Result badges: outline pills ── */
#picksTabContent .badge-win,
#picksTabContent .badge-loss,
#picksTabContent .badge-void,
#picksTabContent .badge-pending {
    min-height: 24px;
    padding: 0 11px;
    border-radius: 99px;
    border: 1px solid currentColor;
    background: transparent;
    font-weight: 700;
    letter-spacing: 0.8px;
}
#picksTabContent .badge-win  { color: var(--success); }
#picksTabContent .badge-loss { color: var(--fault); }
#picksTabContent .badge-void { color: var(--text3); }
#picksTabContent .badge-pending {
    color: var(--text2);
    border-color: var(--control-border);
}
#picksTabContent .badge-pending::before {
    content: '';
    width: 6px;
    height: 6px;
    margin-right: 6px;
    border-radius: 50%;
    background: var(--ball);
    box-shadow: 0 0 0 1px var(--ball-border);
    animation: picksPendingPulse 2.2s ease-in-out infinite;
}
@keyframes picksPendingPulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.35; }
}

/* ── Odds / edge metrics: mono tabular, odds lifted ── */
#picksTabContent .pick-card-metric {
    font-variant-numeric: tabular-nums;
}
#picksTabContent .pick-card-metric[data-odds] {
    font-size: 0.72rem;
    color: var(--text);
    background: var(--input-bg);
    border-color: var(--control-border);
}
#picksTabContent .pick-card-metric[data-edge] {
    color: var(--text);
}

/* ── Running P&L: Stadium capsule (label top-left, mono value bottom-right) ── */
#picksTabContent .picks-pnl-capsule {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    min-height: 116px;
    padding: 16px 20px 14px;
    border-radius: 24px;
    text-align: left;
}
#picksTabContent .picks-pnl-capsule .kpi-label {
    margin: 0;
    font-size: 12px;
    letter-spacing: var(--tracking-label);
}
#picksTabContent .picks-pnl-capsule .kpi-value {
    align-self: flex-end;
    font-family: var(--font-mono);
    font-size: 34px;
    font-weight: 600;
    letter-spacing: -0.5px;
    line-height: 1;
    font-variant-numeric: tabular-nums;
}

/* ── Empty state: a sketched blank ticket (no pick = no ticket yet) ── */
.picks-empty {
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--bg2);
    padding: 38px 20px 36px;
    text-align: center;
}
.picks-empty p {
    margin: 0;
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.62rem;
    font-weight: var(--weight-label);
    letter-spacing: var(--tracking-label);
    text-transform: uppercase;
}
.picks-empty-ticket {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 8px;
    width: min(190px, 100%);
    margin: 0 auto 16px;
    padding: 13px 14px 0;
    border: 1px dashed rgba(var(--ink-rgb), 0.35);
    border-radius: 12px;
    background: var(--input-bg);
    overflow: hidden;
    text-align: left;
}
.picks-empty-ticket-rows {
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.picks-empty-ticket-rows span {
    height: 8px;
    border-radius: 4px;
    background: rgba(var(--ink-rgb), 0.1);
}
.picks-empty-ticket-rows span:first-child { width: 72%; }
.picks-empty-ticket-rows span:last-child { width: 45%; }
.picks-empty-ticket-perf {
    position: relative;
    margin: 3px -14px 0;
    border-top: 1px dashed rgba(var(--ink-rgb), 0.3);
}
.picks-empty-ticket-perf::before,
.picks-empty-ticket-perf::after {
    content: '';
    position: absolute;
    top: -6px;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background: var(--bg2);
    border: 1px dashed rgba(var(--ink-rgb), 0.35);
}
.picks-empty-ticket-perf::before { left: -6px; }
.picks-empty-ticket-perf::after { right: -6px; }
.picks-empty-ticket-stub {
    display: flex;
    gap: 8px;
    margin: 0 -14px;
    padding: 10px 14px 11px;
    background: var(--control-bg);
}
.picks-empty-ticket-stub span {
    flex: 1;
    height: 7px;
    border-radius: 4px;
    background: rgba(var(--ink-rgb), 0.1);
}

/* ── Pagination ── */
.picks-pagination {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 14px;
    margin: 22px 0 16px;
}
#picksTabContent .picks-pagination .period-btn {
    min-width: 38px;
    justify-content: center;
    padding: 0;
}
.picks-page-indicator {
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.65rem;
    letter-spacing: 1px;
    font-variant-numeric: tabular-nums;
}

/* ── Motion guard ── */
@media (prefers-reduced-motion: reduce) {
    #picksTabContent .badge-pending::before { animation: none; }
}

/* ── Mobile (PWA mobile-first, 390px ref) ── */
@media (max-width: 480px) {
    .picks-tab {
        min-height: 34px;
        padding: 7px 13px;
    }
    #picksTabContent .picks-pnl-capsule {
        min-height: 104px;
    }
    #picksTabContent .picks-pnl-capsule .kpi-value {
        font-size: 30px;
    }
}

/* ==== players.css ==== */
/* ═══════════════════════════════════════════════
   Stadium patch — Players screens (list + profile)
   Loaded AFTER css/app.css. Scoped to `.players-page`
   (list) and `.players-profile` (profile) containers,
   plus the players-only classes added by js/players.js
   (player-dir-*, scout-*, players-head-*).
   Reference: /stadium/joueuses/ (bzb-dir-* directory).
   ═══════════════════════════════════════════════ */

/* ── Two-tone heading + mono eyebrow ── */
.players-page .players-head {
    margin: 6px 0 22px;
}
.players-head-eyebrow {
    font-family: var(--font-mono);
    font-size: 10.5px;
    font-weight: 500;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--text3);
}
.players-head-title {
    font-family: var(--font-display);
    font-size: clamp(34px, 8vw, 56px);
    font-weight: 700;
    line-height: 0.95;
    letter-spacing: -0.035em;
    color: var(--text);
    margin: 12px 0 0;
}
.players-head-title-2 {
    color: var(--text3);
}

/* ── Toolbar: search inside 2px-ink top rule (Stadium dir toolbar) ── */
.players-page .players-toolbar {
    margin: 0 0 12px;
    padding: 16px 0;
    border-top: 2px solid var(--text);
    border-bottom: 1px solid var(--line);
}
.players-page .players-search-input {
    max-width: 520px;
    font-family: var(--font-mono);
    font-size: 13px;
    letter-spacing: 0.05em;
    background: var(--input-bg);
    border: 1px solid var(--control-border);
    border-radius: 0;
}
.players-page .players-search-input:focus {
    border-color: var(--text);
    box-shadow: none;
    outline: none;
}
.players-page .players-meta {
    font-family: var(--font-mono);
    font-size: 10.4px;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--text3);
    font-variant-numeric: tabular-nums;
    margin: 0 0 18px;
}

/* ── Directory grid + cards (round headshot + mono rank) ── */
.players-page .players-grid--dir {
    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
    gap: 10px;
}
.player-dir-card {
    display: flex;
    align-items: center;
    gap: 14px;
    width: 100%;
    padding: 13px 16px;
    background: var(--input-bg);
    border: 1px solid var(--control-border);
    border-radius: 0;
    color: var(--text);
    cursor: pointer;
    text-align: left;
    font-family: var(--font-body);
    transition: border-color 0.15s ease, transform 0.15s ease;
}
.player-dir-card:hover {
    border-color: var(--text);
    transform: translateY(-1px);
}
.player-dir-card:hover .player-dir-arrow {
    opacity: 1;
    transform: none;
}
.player-dir-photo {
    position: relative;
    flex: 0 0 56px;
    width: 56px;
    height: 56px;
    border-radius: 50%;
    overflow: hidden;
    background: var(--bg3);
    border: 1px solid var(--control-border);
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.player-dir-photo img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center 20%;
    display: block;
}
.player-dir-initials {
    font-family: var(--font-display);
    font-size: 17px;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--text2);
}
.player-dir-id {
    min-width: 0;
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.player-dir-name {
    font-family: var(--font-display);
    font-size: 15px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.player-dir-sub {
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text2);
    font-variant-numeric: tabular-nums;
}
.player-dir-arrow {
    flex: 0 0 auto;
    font-family: var(--font-mono);
    font-size: 13px;
    color: var(--clay);
    opacity: 0;
    transform: translateX(-4px);
    transition: opacity 0.15s ease, transform 0.15s ease;
}
@media (max-width: 639px) {
    .players-page .players-grid--dir { grid-template-columns: 1fr; }
    .player-dir-arrow { opacity: 1; transform: none; }
}

/* ── Profile hero: round portrait + display name + grass rank ── */
.players-profile .player-profile-hero {
    grid-template-columns: 200px minmax(0, 1fr);
    align-items: center;
    gap: 26px;
}
.players-profile .player-profile-photo--round {
    width: 200px;
    aspect-ratio: 1;
    border-radius: 50%;
    border: 1px solid var(--control-border);
    background-color: var(--bg3);
}
.player-profile-eyebrow {
    font-family: var(--font-mono);
    font-size: 10.5px;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--text3);
}
.players-profile .player-profile-name {
    font-size: clamp(34px, 7vw, 56px);
    font-weight: 700;
    letter-spacing: -0.04em;
    line-height: 0.95;
    margin: 10px 0 14px;
}
.player-profile-rankblock {
    display: flex;
    align-items: baseline;
    gap: 12px;
}
.player-profile-rank-num {
    font-family: var(--font-display);
    font-size: 44px;
    font-weight: 700;
    color: var(--grass);
    letter-spacing: -0.03em;
    line-height: 1;
    font-variant-numeric: tabular-nums;
}
.player-profile-rank-sub {
    font-family: var(--font-mono);
    font-size: 10.5px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
}
@media (max-width: 640px) {
    .players-profile .player-profile-hero { grid-template-columns: 1fr; }
    .players-profile .player-profile-photo--round { width: 148px; }
}

/* ── Section titles: bracketed mono eyebrows ── */
.players-profile .player-section-title::before { content: '[ '; color: var(--text3); }
.players-profile .player-section-title::after { content: ' ]'; color: var(--text3); }

/* ── Career strip → capsule cards (label top-left, value bottom-right) ── */
.players-profile .career-strip {
    padding: 0;
    border: 0;
    background: transparent;
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    gap: 10px;
}
.players-profile .career-pill {
    border: 1px solid var(--control-border);
    border-left: 1px solid var(--control-border);
    border-radius: 18px;
    background: var(--input-bg);
    padding: 14px 16px;
    min-height: 96px;
    gap: 0;
}
.players-profile .career-pill-label {
    order: 0;
    margin-top: 0;
    font-size: 10px;
    letter-spacing: 0.14em;
    color: var(--text3);
}
.players-profile .career-pill-value {
    order: 1;
    margin-top: auto;
    align-self: flex-end;
    padding-top: 14px;
    font-size: 21px;
    font-weight: 700;
    color: var(--text);
    text-align: right;
    font-variant-numeric: tabular-nums;
}
.players-profile .career-pill-sub {
    order: 2;
    align-self: flex-end;
    font-family: var(--font-mono);
    font-size: 10px;
    color: var(--text3);
}

/* ── Compare CTA: outline ink pill ── */
.players-profile .compare-cta-btn {
    background: transparent;
    border: 1px solid var(--text);
    color: var(--text);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
}
.players-profile .compare-cta-btn:hover {
    background: var(--text);
    color: var(--bg);
    box-shadow: none;
}

/* ── Scouting "Profil de jeu" cards (Stadium repaint of the old dark card) ── */
.scout-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 12px;
}
@media (min-width: 680px) {
    .scout-grid { grid-template-columns: 1fr 1fr; }
}
.scout-card {
    background: var(--input-bg);
    border: 1px solid var(--control-border);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    flex-direction: column;
}
.scout-eyebrow {
    font-family: var(--font-mono);
    font-size: 10px;
    letter-spacing: 0.15em;
    text-transform: uppercase;
    color: var(--text3);
    margin-bottom: 16px;
}
.scout-bar { margin-bottom: 10px; }
.scout-bar--big { margin-bottom: 16px; }
.scout-bar-head {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    font-size: 12px;
    margin-bottom: 5px;
}
.scout-bar--big .scout-bar-head { font-size: 13.5px; }
.scout-bar-label { color: var(--text2); }
.scout-bar-pct {
    font-family: var(--font-mono);
    font-size: 12px;
    color: var(--grass);
    font-variant-numeric: tabular-nums;
}
.scout-bar-pct--muted { color: var(--text3); }
.scout-bar-track {
    height: 6px;
    border-radius: var(--radius-pill);
    background: var(--control-bg);
    overflow: hidden;
}
.scout-bar--big .scout-bar-track { height: 8px; }
.scout-bar-fill {
    height: 100%;
    border-radius: var(--radius-pill);
}
.scout-bar-fill--ink { background: var(--text); }
.scout-bar-fill--hard { background: var(--hard); }
.scout-bar-fill--clay { background: var(--clay); }
.scout-bar-fill--grass { background: var(--grass); }
.scout-best {
    margin-top: 12px;
    font-size: 12px;
    color: var(--text3);
}
.scout-best-val { font-weight: 700; }
.scout-best-val--hard { color: var(--hard); }
.scout-best-val--clay { color: var(--clay); }
.scout-best-val--grass { color: var(--grass); }
.scout-kpis {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px;
    margin-bottom: 16px;
}
.scout-kpi-val {
    font-family: var(--font-mono);
    font-size: 24px;
    font-weight: 700;
    color: var(--text);
    font-variant-numeric: tabular-nums;
}
.scout-kpi-label {
    font-family: var(--font-mono);
    font-size: 10px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text3);
    margin-top: 4px;
}
.scout-meta {
    font-size: 13px;
    color: var(--text2);
    margin-bottom: 6px;
}
.scout-meta strong { color: var(--text); font-weight: 700; }
.scout-foot-line {
    font-size: 12px;
    color: var(--text3);
    margin-bottom: 8px;
}

/* ── Stat bars harmonized: control-bg track + surface-color fills ── */
.players-profile .player-stat-bar {
    background: var(--control-bg);
    box-shadow: none;
}
.players-profile .player-stat-bar-fill { background: var(--clay); }
.players-profile .insight-card--service .player-stat-bar-fill { background: var(--hard); }
.players-profile .insight-card--return .player-stat-bar-fill { background: var(--grass); }
.players-profile .dist-bar-wrap {
    background: var(--control-bg);
    box-shadow: none;
}
.players-profile .dist-bar { background: var(--clay); }

/* ── Recent form dots: win/loss semantic colors (no lime fills) ── */
.players-profile .form-dot--win {
    background: var(--success);
    box-shadow: none;
}
.players-profile .form-dot--loss { background: var(--fault); }
.players-profile .form-dot--latest {
    box-shadow: 0 0 0 2px var(--bg2), 0 0 0 3px var(--text);
}
.players-profile .vd-letter--win {
    background: var(--success);
    border: 0;
    color: #fbf5e2;
}
.players-profile .vd-letter--loss {
    background: var(--fault);
    border: 0;
    color: #fbf5e2;
}

/* ── Ranking trend: clay accent (matches the SVG repaint) ── */
.players-profile .legend-dot--peak { background: var(--clay); }

/* ── Filter bar: outline mono pills, active = ink filled ── */
.players-profile .players-filter-bar {
    border: 1px solid var(--control-border);
    background: var(--input-bg);
    border-radius: 16px;
}
.players-profile .filter-row-label {
    font-family: var(--font-mono);
    font-size: 10px;
    letter-spacing: 0.15em;
    text-transform: uppercase;
    color: var(--text3);
}
.players-profile .filter-pill {
    background: transparent;
    border: 1px solid var(--control-border);
    border-radius: var(--radius-pill);
    font-family: var(--font-mono);
    font-size: 10.5px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text2);
    padding: 8px 14px;
    box-shadow: none;
}
.players-profile .filter-pill:hover:not(.filter-pill--disabled) {
    border-color: var(--text);
    color: var(--text);
    background: transparent;
}
.players-profile .filter-pill--active,
.players-profile .filter-pill--active:hover {
    background: var(--text);
    border-color: var(--text);
    color: var(--bg);
}
.players-profile .filter-pill--disabled { opacity: 0.38; }
.players-profile .filter-select {
    font-family: var(--font-mono);
    font-size: 12px;
    background-color: var(--input-bg);
    border: 1px solid var(--control-border);
    color: var(--text);
}
.players-profile .filter-select:focus {
    border-color: var(--text);
    box-shadow: none;
    outline: none;
}

/* ── Overview toggle: 2px ink frame button ── */
.players-profile .overview-toggle-btn {
    background: transparent;
    border: 2px solid var(--text);
    border-radius: 0;
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text);
    box-shadow: none;
}
.players-profile .overview-toggle-btn:hover {
    background: var(--control-bg);
    color: var(--text);
}

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
    .player-dir-card,
    .player-dir-arrow,
    .players-profile .filter-pill,
    .players-profile .player-stat-bar-fill,
    .players-profile .dist-bar,
    .scout-bar-fill {
        transition: none;
    }
    .player-dir-card:hover { transform: none; }
}

/* ==== portfolio.css ==== */
/* ═══════════════════════════════════════════════
   Stadium patch — Portfolio screen (loaded after app.css)
   A bet = a ticket on one precise match: perforated ticket
   cards (pending), day-grouped settled timeline, capsule
   stats, ink-framed bankroll hero, sketched-ticket empty
   state, CSV export pill. Tokens only (light AND dark).
   ═══════════════════════════════════════════════ */

/* ── Mono eyebrow (Stadium label) ── */
.pf-eyebrow {
    font-family: var(--font-mono);
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--text3);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ── Bankroll hero: 2px ink frame capsule ── */
.pf-hero {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    gap: 26px;
    min-height: 132px;
    padding: 16px 20px 15px;
    border: 2px solid var(--text);
    border-radius: 24px;
    background: var(--input-bg);
}
.pf-hero-head {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
}
.pf-hero-streak {
    margin-left: auto;
}
.pf-hero-foot {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 12px;
    margin-top: auto;
    flex-wrap: wrap;
}
.pf-hero-delta {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text3);
}
.pf-hero-delta.is-up { color: var(--success); }
.pf-hero-delta.is-down { color: var(--fault); }
.pf-hero-value {
    margin-left: auto;
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    font-size: clamp(2.1rem, 8vw, 2.7rem);
    line-height: 1;
    letter-spacing: -0.02em;
    color: var(--text);
    text-align: right;
}
.pf-hero-value.is-up { color: var(--success); }
.pf-hero-value.is-down { color: var(--fault); }

/* ── Stats: capsule grid (2 cols mobile, 4 desktop) ── */
.pf-stats {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
}
@media (min-width: 720px) {
    .pf-stats { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
.pf-kpi {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    gap: 18px;
    min-width: 0;
    min-height: 108px;
    padding: 15px 16px 13px;
    border-radius: 24px;
}
.pf-kpi::before { display: none; }
.pf-kpi-head {
    display: flex;
    align-items: center;
    gap: 7px;
    min-width: 0;
}
.pf-kpi-head .pf-eyebrow { font-size: 11px; }
.pf-kpi-foot {
    display: flex;
    align-items: flex-end;
    justify-content: flex-end;
    margin-top: auto;
}
.pf-kpi-value {
    display: block;
    text-align: right;
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    font-size: clamp(1.45rem, 4.8vw, 1.9rem);
    line-height: 1;
    letter-spacing: -0.02em;
    color: var(--text);
}

/* ── Settings capsule (collapsible) ── */
.pf-settings {
    border-radius: 24px;
    padding: 16px 18px;
}
.pf-settings::before { display: none; }
.pf-settings-summary {
    display: flex;
    align-items: center;
    gap: 8px;
    cursor: pointer;
    list-style: none;
    min-width: 0;
}
.pf-settings-summary::-webkit-details-marker { display: none; }
.pf-settings-value {
    margin-left: auto;
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    font-size: 1.1rem;
    letter-spacing: -0.01em;
    color: var(--text);
}
.pf-settings-chev {
    flex: 0 0 auto;
    color: var(--text3);
    transition: transform 0.18s ease;
}
.pf-settings[open] .pf-settings-chev { transform: rotate(180deg); }
.pf-settings-body {
    margin-top: 16px;
    padding-top: 16px;
    border-top: 1px solid var(--line);
}

/* ── P&L chart: 2px ink data frame ── */
.pf-chart-frame {
    border: 2px solid var(--text);
    border-radius: var(--radius-lg);
    background: var(--input-bg);
    overflow: hidden;
}
.pf-chart-head {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 16px;
    border-bottom: 1px solid var(--text);
    background: var(--bg2);
}
.pf-chart-unit {
    margin-left: auto;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text-on-ball);
    background: var(--ball);
    padding: 3px 10px;
    border-radius: var(--radius-pill);
    white-space: nowrap;
}
.pf-chart-body {
    position: relative;
    height: 220px;
    padding: 14px 12px 10px;
}

/* ── Export: pill outline (ink), fills on hover ── */
.pf-export-btn {
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    min-height: 32px;
    padding: 0 14px;
    border: 1px solid var(--text);
    border-radius: var(--radius-pill);
    background: transparent;
    color: var(--text);
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    cursor: pointer;
    white-space: nowrap;
}
.pf-export-btn:hover {
    background: var(--text);
    color: var(--bg);
}
.pf-export-btn:disabled {
    opacity: 0.45;
    cursor: wait;
}
.pf-export-btn svg { flex: 0 0 auto; }

/* ═══════════════════════════════════════════════
   TICKETS — a bet is a ticket on one precise match
   ═══════════════════════════════════════════════ */

.pf-tickets {
    display: grid;
    grid-template-columns: 1fr;
    gap: 14px;
    margin-top: 14px;
}
@media (min-width: 860px) {
    .pf-tickets { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

.pf-ticket {
    position: relative;
    display: flex;
    flex-direction: column;
    min-width: 0;
    padding: 13px 16px 0;
    border: 1px solid var(--line);
    border-radius: 18px;
    background: var(--input-bg);
    overflow: hidden; /* clips the punched notches on the perforation */
}

/* Top strip: ticket ref + date (mono) / tag + status pills */
.pf-tk-top {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    min-width: 0;
}
.pf-tk-ref {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text2);
    white-space: nowrap;
}
.pf-tk-date {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.06em;
    color: var(--text3);
    white-space: nowrap;
}
.pf-tk-top-right {
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

/* Tier tag pill: outline, surface-coded (vip=clay, public=grass) */
.pf-tk-tag {
    display: inline-flex;
    align-items: center;
    padding: 2px 8px;
    border: 1px solid currentColor;
    border-radius: var(--radius-pill);
    font-family: var(--font-mono);
    font-size: 9px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    white-space: nowrap;
}
.pf-tk-tag-vip { color: var(--clay); }
.pf-tk-tag-public { color: var(--grass); }
.pf-tk-tag-free { color: var(--text3); }

/* Status pill: outline, result-coded */
.pf-tk-status {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 2px 9px;
    border: 1px solid currentColor;
    border-radius: var(--radius-pill);
    font-family: var(--font-mono);
    font-size: 9px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    white-space: nowrap;
}
.pf-tk-status-win { color: var(--success); }
.pf-tk-status-loss { color: var(--fault); }
.pf-tk-status-void { color: var(--text3); }
.pf-tk-status-pending {
    color: var(--text2);
    border-color: var(--control-border);
}
.pf-tk-status-dot {
    flex: 0 0 auto;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--ball);
    box-shadow: 0 0 0 1px var(--ball-border);
    animation: pfPendingPulse 2.2s ease-in-out infinite;
}
@keyframes pfPendingPulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.35; }
}

/* Match block: the two players of THIS match, mirrored around VS */
.pf-tk-match {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 13px 0 3px;
    min-width: 0;
}
.pf-tk-match-flat { padding: 12px 0 4px; }
.pf-tk-player {
    flex: 1;
    display: flex;
    align-items: center;
    gap: 10px;
    min-width: 0;
}
.pf-tk-player:last-child {
    flex-direction: row-reverse;
    text-align: right;
}
.pf-tk-player:last-child .pf-tk-player-copy { align-items: flex-end; }
.pf-tk-avatar {
    position: relative;
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    border: 1px solid var(--line);
    background: var(--bg2);
    overflow: hidden;
}
.pf-tk-avatar img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.pf-tk-avatar.is-fallback::after {
    content: attr(data-initials);
    font-family: var(--font-mono);
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.04em;
    color: var(--text3);
}
.pf-tk-player.is-pick .pf-tk-avatar {
    border-color: var(--ball-border);
    box-shadow: 0 0 0 2px var(--ball);
}
.pf-tk-player-copy {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 4px;
    min-width: 0;
}
.pf-tk-player-name {
    max-width: 100%;
    font-family: var(--font-display);
    font-size: 13.5px;
    font-weight: 650;
    line-height: 1.2;
    color: var(--text);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.pf-tk-player-sub {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 9px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text3);
    white-space: nowrap;
}
/* Lime chip on the picked side: ink text on ball (AA-safe) */
.pf-tk-player.is-pick .pf-tk-player-sub {
    padding: 1px 7px;
    border: 1px solid var(--ball-border);
    border-radius: var(--radius-pill);
    background: var(--ball);
    color: var(--text-on-ball);
}
.pf-tk-vs {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border: 1px solid var(--line);
    border-radius: 50%;
    font-family: var(--font-mono);
    font-size: 8.5px;
    font-weight: 700;
    letter-spacing: 0.06em;
    color: var(--text3);
}

/* Context line: surface dot OF THIS MATCH + tournament */
.pf-tk-context {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 5px 0 12px;
    font-family: var(--font-mono);
    font-size: 9.5px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--text3);
    min-width: 0;
}
.pf-tk-context > span:not(.pf-surface-dot):not(.pf-tk-context-sep) {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.pf-tk-context-sep { flex: 0 0 auto; }
.pf-surface-dot {
    flex: 0 0 auto;
    width: 7px;
    height: 7px;
    border-radius: 50%;
}
.pf-dot-hard { background: var(--hard); }
.pf-dot-clay { background: var(--clay); }
.pf-dot-grass { background: var(--grass); }
.pf-dot-indoor { background: var(--ace); }

/* Perforation: dashed hairline + punched side notches */
.pf-tk-perf {
    position: relative;
    margin: 0 -16px;
    border-top: 1px dashed rgba(var(--ink-rgb), 0.3);
}
.pf-tk-perf::before,
.pf-tk-perf::after {
    content: '';
    position: absolute;
    top: -8px;
    width: 15px;
    height: 15px;
    border-radius: 50%;
    background: var(--bg);
    border: 1px solid var(--line);
}
.pf-tk-perf::before { left: -8px; }
.pf-tk-perf::after { right: -8px; }

/* Stub: selection + numbers, mono tabular */
.pf-tk-stub {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 12px 18px;
    flex-wrap: wrap;
    margin: 0 -16px;
    padding: 12px 16px 14px;
    background: var(--control-bg);
}
.pf-stub-sel {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
}
.pf-stub-label {
    font-family: var(--font-mono);
    font-size: 9px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text3);
    white-space: nowrap;
}
.pf-stub-sel-name {
    font-family: var(--font-display);
    font-size: 14.5px;
    font-weight: 680;
    line-height: 1.15;
    color: var(--text);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.pf-stub-nums {
    display: flex;
    gap: 16px;
    margin-left: auto;
}
.pf-stub-cell {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 4px;
}
.pf-stub-value {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 14.5px;
    font-weight: 600;
    line-height: 1;
    color: var(--text);
    white-space: nowrap;
}
.pf-pnl-pos { color: var(--success); }
.pf-pnl-neg { color: var(--fault); }

/* Actions row continues the stub zone (pending tickets) */
.pf-tk-actions {
    margin: 0 -16px;
    padding: 0 16px 13px;
    background: var(--control-bg);
    text-align: right;
}
.pf-unfollow-btn {
    padding: 6px 14px;
    font-size: 0.6rem;
}

/* ═══════════════════════════════════════════════
   HISTORY — day-grouped timeline of settled tickets
   ═══════════════════════════════════════════════ */

.pf-timeline {
    display: flex;
    flex-direction: column;
    gap: 18px;
    margin-top: 14px;
}
.pf-day {
    position: relative;
    padding-left: 20px;
}
/* vertical rail linking day markers */
.pf-day::before {
    content: '';
    position: absolute;
    left: 3.5px;
    top: 16px;
    bottom: -18px;
    width: 1px;
    background: var(--line);
}
.pf-day:last-child::before { display: none; }
.pf-day-head {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 8px;
    min-width: 0;
}
.pf-day-marker {
    position: absolute;
    left: 0;
    top: 4px;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--ball);
    box-shadow: 0 0 0 1px var(--ball-border);
}
.pf-day-date {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text);
    white-space: nowrap;
}
.pf-day-count {
    font-family: var(--font-mono);
    font-size: 9.5px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--text3);
    white-space: nowrap;
}
.pf-day-pnl {
    margin-left: auto;
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 12px;
    font-weight: 700;
    color: var(--text2);
    white-space: nowrap;
}
.pf-day-rows {
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--input-bg);
    overflow: hidden;
}

/* Settled ticket row: W/L/V seal + match + numbers */
.pf-trow {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 11px 14px;
    min-width: 0;
}
.pf-trow + .pf-trow { border-top: 1px solid var(--line); }
.pf-trow-result {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border: 1px solid currentColor;
    border-radius: 50%;
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
}
.pf-trow-result-win { color: var(--success); }
.pf-trow-result-loss { color: var(--fault); }
.pf-trow-result-void { color: var(--text3); }
.pf-trow-main {
    flex: 1;
    min-width: 0;
}
.pf-trow-match {
    font-family: var(--font-display);
    font-size: 13.5px;
    font-weight: 650;
    line-height: 1.25;
    color: var(--text);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.pf-trow-opp {
    color: var(--text3);
    font-weight: 500;
}
.pf-trow-sub {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 3px;
    font-family: var(--font-mono);
    font-size: 9.5px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--text3);
    min-width: 0;
}
.pf-trow-sub > span:not(.pf-surface-dot) {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.pf-trow-odds {
    flex: 0 0 auto;
    font-variant-numeric: tabular-nums;
    color: var(--text2);
}
.pf-trow-nums {
    flex: 0 0 auto;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 3px;
}
.pf-trow-stake {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 10px;
    font-weight: 600;
    color: var(--text3);
}
.pf-trow-pnl {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 13px;
    font-weight: 700;
    color: var(--text2);
}

/* ═══════════════════════════════════════════════
   EMPTY STATE — a sketched blank ticket (your next bet),
   meaningful and theme-aware, replaces the clay-court photo
   ═══════════════════════════════════════════════ */

.pf-empty {
    border: 1px solid var(--line);
    border-radius: 24px;
    background: var(--input-bg);
    padding: 30px 20px 28px;
    text-align: center;
}
.pf-empty-ticket {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 10px;
    width: min(250px, 100%);
    margin: 0 auto 18px;
    padding: 13px 16px 0;
    border: 1px dashed rgba(var(--ink-rgb), 0.35);
    border-radius: 14px;
    background: var(--bg2);
    overflow: hidden;
}
.pf-empty-ticket-ref {
    font-family: var(--font-mono);
    font-size: 9.5px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
    text-align: left;
}
.pf-empty-ticket-rows {
    display: flex;
    flex-direction: column;
    gap: 7px;
}
.pf-empty-ticket-rows span {
    height: 9px;
    border-radius: 5px;
    background: rgba(var(--ink-rgb), 0.1);
}
.pf-empty-ticket-rows span:first-child { width: 72%; }
.pf-empty-ticket-rows span:last-child { width: 46%; }
.pf-empty-ticket-perf {
    position: relative;
    margin: 3px -16px 0;
    border-top: 1px dashed rgba(var(--ink-rgb), 0.3);
}
.pf-empty-ticket-perf::before,
.pf-empty-ticket-perf::after {
    content: '';
    position: absolute;
    top: -7px;
    width: 13px;
    height: 13px;
    border-radius: 50%;
    background: var(--input-bg);
    border: 1px dashed rgba(var(--ink-rgb), 0.35);
}
.pf-empty-ticket-perf::before { left: -7px; }
.pf-empty-ticket-perf::after { right: -7px; }
.pf-empty-ticket-stub {
    display: flex;
    gap: 10px;
    margin: 0 -16px;
    padding: 11px 16px 9px;
    background: var(--control-bg);
}
.pf-empty-ticket-stub span {
    flex: 1;
    height: 8px;
    border-radius: 4px;
    background: rgba(var(--ink-rgb), 0.1);
}
.pf-empty-ticket-label {
    margin: 0 -16px;
    padding: 0 16px 12px;
    background: var(--control-bg);
    font-family: var(--font-mono);
    font-size: 9px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text3);
}
.pf-empty-body {
    max-width: 380px;
    margin: 0 auto;
}
.pf-empty-title {
    font-family: var(--font-display);
    font-size: 1.25rem;
    font-weight: 680;
    line-height: 1.15;
    color: var(--text);
}
.pf-empty-hint {
    margin: 8px auto 0;
    max-width: 360px;
    font-size: 13px;
    line-height: 1.5;
    color: var(--text2);
}
.pf-empty-cta {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    margin-top: 16px;
    min-height: 38px;
    padding: 0 20px;
    border: 1px solid var(--text);
    border-radius: var(--radius-pill);
    background: transparent;
    color: var(--text);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    cursor: pointer;
}
.pf-empty-cta:hover {
    background: var(--text);
    color: var(--bg);
}

/* ── Motion guard ── */
@media (prefers-reduced-motion: reduce) {
    .pf-settings-chev { transition: none; }
    .pf-tk-status-dot { animation: none; }
}

/* ── Mobile (PWA mobile-first, 390px ref) ── */
@media (max-width: 480px) {
    .pf-hero { min-height: 118px; padding: 14px 16px 13px; }
    .pf-kpi { min-height: 96px; padding: 13px 14px 11px; }
    .pf-chart-body { height: 180px; padding: 10px 8px 8px; }
    .pf-export-btn span { display: none; }
    .pf-export-btn { padding: 0 11px; }
    .pf-tk-avatar { width: 38px; height: 38px; }
    .pf-tk-player-name { font-size: 12.5px; }
    .pf-tk-vs { width: 22px; height: 22px; font-size: 8px; }
    .pf-stub-nums { gap: 13px; }
    .pf-stub-value { font-size: 13.5px; }
    .pf-trow { padding: 10px 11px; gap: 10px; }
    .pf-day { padding-left: 17px; }
}

/* ==== profile.css ==== */
/* ════════════════════════════════════════════
   Profile · Stadium bento rework (retour user #22)
   Two-column grid, capsule cards, explicit danger zone.
   Tokens only — light + dark.
   ════════════════════════════════════════════ */

.profile-page .page-title {
    margin-bottom: 0;
}

.profile-head {
    margin-bottom: 28px;
}

.profile-eyebrow {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--text3);
}

.profile-title-muted {
    color: var(--text3);
    font-weight: 500;
}

.profile-grid {
    display: grid;
    grid-template-columns: 1.05fr 0.95fr;
    gap: 18px;
    align-items: start;
    max-width: 980px;
}

.profile-col {
    display: flex;
    flex-direction: column;
    gap: 18px;
    min-width: 0;
}

/* ── Plan capsule : ink frame, big mono value ── */
.profile-plan {
    border: 2px solid var(--text);
    border-radius: 20px;
    background: var(--input-bg);
    padding: 18px 20px;
    min-height: 168px;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}

.profile-plan-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.profile-plan-label {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
}

.profile-plan-pill {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 5px 12px;
    border-radius: 999px;
    border: 1px solid var(--control-border);
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text2);
}

.profile-plan-pill--on {
    background: var(--ball);
    border-color: var(--ball);
    color: var(--text-on-ball);
}

.profile-plan-dot {
    width: 6px;
    height: 6px;
    border-radius: 99px;
    background: var(--text-on-ball);
    animation: profile-blink 1.8s ease-in-out infinite;
}

@keyframes profile-blink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.35; }
}

.profile-plan-bottom {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 12px;
}

.profile-plan-meta {
    font-family: var(--font-mono);
    font-size: 12px;
    color: var(--text3);
}

.profile-plan-value {
    font-family: var(--font-mono);
    font-size: 44px;
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1;
    color: var(--text);
}

/* ── Row link (billing) ── */
.profile-row-link {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    width: 100%;
    padding: 14px 18px;
    border: 1px solid var(--line);
    border-radius: 14px;
    background: var(--bg2);
    color: var(--text);
    font-family: var(--font-mono);
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    cursor: pointer;
    transition: border-color 0.15s ease, transform 0.15s ease;
}
.profile-row-link:hover {
    border-color: var(--text);
    transform: translateY(-1px);
}

/* ── Section cards ── */
.profile-card {
    border: 1px solid var(--line);
    border-radius: 20px;
    background: var(--bg2);
    padding: 18px 20px;
}

.profile-card-label {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
    margin-bottom: 14px;
}

/* Language pills */
.profile-lang-row {
    display: flex;
    gap: 8px;
}

.profile-lang-pill {
    padding: 9px 18px;
    border-radius: 999px;
    border: 1px solid var(--control-border);
    background: transparent;
    color: var(--text2);
    font-family: var(--font-mono);
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.06em;
    cursor: pointer;
    transition: all 0.15s ease;
}
.profile-lang-pill:hover { border-color: var(--text); color: var(--text); }
.profile-lang-pill.active {
    background: var(--text);
    border-color: var(--text);
    color: var(--bg);
}

/* Toggle rows */
.profile-toggle-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: 12px 0;
    border-top: 1px solid var(--line);
    cursor: pointer;
}
.profile-toggle-row:first-of-type { border-top: none; }

.profile-toggle-text {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

.profile-toggle-label {
    font-size: 14px;
    font-weight: 600;
    color: var(--text);
}

.profile-toggle-desc {
    font-size: 12px;
    color: var(--text3);
}

.profile-toggle-row--push { cursor: default; }

/* ── Action pills ── */
.profile-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
}

.profile-pill-ghost,
.profile-pill-on,
.profile-pill-danger {
    padding: 10px 18px;
    border-radius: 999px;
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    cursor: pointer;
    transition: all 0.15s ease;
}

.profile-pill-ghost {
    border: 1px solid var(--control-border);
    background: transparent;
    color: var(--text2);
}
.profile-pill-ghost:hover { border-color: var(--text); color: var(--text); }

.profile-pill-on {
    border: 1px solid var(--ball);
    background: var(--ball);
    color: var(--text-on-ball);
}

.profile-pill-danger {
    border: 1px solid var(--fault);
    background: transparent;
    color: var(--fault);
}
.profile-pill-danger:hover { background: var(--fault); color: var(--input-bg); }
.profile-pill-danger:disabled { opacity: 0.55; cursor: wait; }

/* Danger zone */
.profile-danger .profile-card-label { color: var(--text3); }

.profile-delete-row {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--line);
    display: flex;
    align-items: baseline;
    gap: 12px;
    flex-wrap: wrap;
}

.profile-delete-link {
    background: none;
    border: none;
    padding: 0;
    color: var(--fault);
    font-size: 12.5px;
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 3px;
    cursor: pointer;
}

.profile-delete-note {
    font-size: 11.5px;
    color: var(--text3);
}

.profile-upgrade { border-radius: 999px; }

/* ── Responsive ── */
@media (max-width: 900px) {
    .profile-grid {
        grid-template-columns: 1fr;
    }
}

@media (prefers-reduced-motion: reduce) {
    .profile-plan-dot { animation: none; }
    .profile-row-link, .profile-row-link:hover { transform: none; transition: none; }
}

/* ==== subscribe.css ==== */
/* ═══════════════════════════════════════════════
   Stadium patch — Subscribe screen
   Loaded AFTER css/app.css. Scoped to `.subscribe-page`
   (class added on the page container in js/subscribe.js).
   ═══════════════════════════════════════════════ */

/* Focused single column on desktop, full width on mobile */
.subscribe-page {
    max-width: 600px;
}

/* ── Hero: dark capsule with night-session photo ──
   Dark context: lime text/accents allowed here (never on cream). */
.sub-hero {
    position: relative;
    overflow: hidden;
    border-radius: 24px;
    background: #0a0c08;
    min-height: 224px;
    display: flex;
    align-items: flex-end;
    margin-bottom: 28px;
}
.sub-hero-bg {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center 38%;
}
.sub-hero-inner {
    position: relative;
    z-index: 1;
    width: 100%;
    padding: 84px 22px 20px;
    background: linear-gradient(180deg, rgba(10, 12, 8, 0) 0%, rgba(10, 12, 8, 0.55) 48%, rgba(10, 12, 8, 0.88) 100%);
}
.sub-hero-eyebrow {
    color: var(--ball);
    margin-bottom: 10px;
}
.sub-hero-title {
    color: #fbf5e2;
    margin: 0 0 8px;
}
.sub-hero-vip {
    color: var(--ball);
    text-shadow: 0 0 18px rgba(207, 235, 43, 0.35);
}
.sub-hero-tag {
    font-family: var(--font-mono);
    font-size: 0.62rem;
    color: rgba(251, 245, 226, 0.78);
    letter-spacing: 1.5px;
    text-transform: uppercase;
    margin: 0 0 14px;
}
.sub-hero-proof {
    justify-content: flex-start;
    gap: 14px;
    row-gap: 6px;
    color: rgba(251, 245, 226, 0.66);
}

/* ── Currency toggle: pill group, active = ink filled ── */
.subscribe-page .currency-toggle {
    border: 1px solid var(--control-border);
    border-radius: 99px;
    padding: 3px;
    gap: 2px;
    background: transparent;
}
.subscribe-page .currency-btn {
    border-radius: 99px;
    padding: 0 16px;
    min-height: 30px;
}
.subscribe-page .currency-btn::after {
    display: none;
}
.subscribe-page .currency-btn.active {
    background: var(--text);
    color: var(--bg);
}

/* ── Plan cards: capsules radius 24, 2px ink frame on recommended ── */
.subscribe-page .plan-card {
    background: var(--input-bg);
    border: 1px solid var(--line);
    border-radius: 24px;
    padding: 18px 22px 16px;
    box-shadow: none;
}
.subscribe-page .plan-card:hover {
    border-color: var(--control-border);
    box-shadow: 0 4px 18px rgba(26, 29, 24, 0.08);
}
/* Recommended plan: permanent 2px ink frame + "Recommandé" pill */
.subscribe-page .plan-card.recommended {
    transform: none;
    border-color: var(--text);
    box-shadow: inset 0 0 0 1px var(--text);
    z-index: 1;
}
.subscribe-page .plan-card.recommended:hover {
    box-shadow: inset 0 0 0 1px var(--text), 0 4px 18px rgba(26, 29, 24, 0.10);
}
.subscribe-page .plan-card.recommended::before {
    top: -10px;
    left: 20px;
    right: auto;
    background: var(--text);
    color: var(--bg);
    padding: 3px 12px;
    border-radius: 99px;
    font-size: 0.55rem;
    font-weight: 700;
    letter-spacing: 1.2px;
}
/* Selected plan: ink frame + lime tick (ink glyph on ball, AA-safe) */
.subscribe-page .plan-card.selected {
    border-color: var(--text);
    box-shadow: inset 0 0 0 1px var(--text), 0 6px 22px rgba(26, 29, 24, 0.10);
    background: var(--input-bg);
}
.subscribe-page .plan-tick {
    display: none;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: var(--ball);
    color: var(--text);
    font-size: 11px;
    font-weight: 700;
    align-items: center;
    justify-content: center;
    margin-right: 8px;
    flex-shrink: 0;
}
.subscribe-page .plan-card.selected .plan-tick {
    display: inline-flex;
}

.subscribe-page .plan-row-top {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 10px;
}
.subscribe-page .plan-name {
    display: inline-flex;
    align-items: center;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 15px;
    color: var(--text);
}
.subscribe-page .plan-save {
    font-family: var(--font-mono);
    font-size: 0.56rem;
    font-weight: 700;
    color: var(--grass);
    background: var(--grass-subtle);
    border: 1px solid var(--grass-border);
    border-radius: 99px;
    padding: 3px 10px;
    letter-spacing: 0.6px;
    text-transform: uppercase;
    white-space: nowrap;
}
/* Capsule pattern: big mono price bottom-right, mono period bottom-left */
.subscribe-page .plan-row-bottom {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-top: 16px;
}
.subscribe-page .plan-period {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    color: var(--text3);
    letter-spacing: 0.6px;
    text-transform: uppercase;
}
.subscribe-page .plan-price {
    font-family: var(--font-mono);
    font-size: 2.1rem;
    font-weight: 600;
    letter-spacing: -1px;
    line-height: 1;
    color: var(--text);
    font-variant-numeric: tabular-nums;
}
.subscribe-page .plan-price-cur {
    font-size: 1.15rem;
    color: var(--text2);
    margin-left: 2px;
    letter-spacing: 0;
}

/* ── Payment method buttons: ink frame when selected ── */
.subscribe-page .payment-btn {
    border-radius: 16px;
    background: var(--input-bg);
    border: 1px solid var(--line);
    min-height: 56px;
}
.subscribe-page .payment-btn:hover {
    border-color: var(--control-border);
}
.subscribe-page .payment-btn.selected {
    border-color: var(--text);
    box-shadow: inset 0 0 0 1px var(--text);
    color: var(--text);
}

/* ── CGV consent row ── */
.subscribe-page .cgv-row {
    gap: 10px;
    margin-bottom: 16px;
    cursor: pointer;
    align-items: flex-start;
}
.subscribe-page .cgv-row input[type="checkbox"] {
    margin-top: 3px;
    flex-shrink: 0;
    width: 15px;
    height: 15px;
    accent-color: var(--grass);
}
.subscribe-page .cgv-label {
    font-size: 0.72rem;
    color: var(--text2);
    line-height: 1.5;
}

/* ── CTA: ink-on-ball pill ── */
.subscribe-page .cta-pay {
    min-height: 54px;
    padding: 16px 24px;
    margin-bottom: 24px;
    border-radius: 99px;
    background: var(--ball);
    border: 1px solid var(--text);
    color: var(--text);
    font-size: 0.72rem;
    font-weight: 800;
    letter-spacing: 1px;
    box-shadow: 0 2px 0 rgba(26, 29, 24, 0.85);
}
.subscribe-page .cta-pay:hover {
    transform: translateY(-1px);
    box-shadow: 0 3px 0 rgba(26, 29, 24, 0.85), 0 6px 16px rgba(26, 29, 24, 0.14);
}
.subscribe-page .cta-pay:active {
    transform: translateY(1px);
    box-shadow: 0 1px 0 rgba(26, 29, 24, 0.85);
}
.subscribe-page .cta-pay:disabled {
    box-shadow: none;
}

/* ── Features: hairline rows, grass checks ── */
.subscribe-page .feature-item {
    border-top: 1px solid var(--line);
    padding: 12px 2px;
    gap: 12px;
    font-size: 13px;
    color: var(--text2);
}
.subscribe-page .feature-item:last-child {
    border-bottom: 1px solid var(--line);
}
.subscribe-page .feature-check {
    width: 22px;
    height: 22px;
    background: transparent;
    border: 1.5px solid var(--grass-border);
    color: var(--grass);
    font-weight: 700;
}

/* ── Trial badge already themed in app.css; tighten width on mobile ── */
@media (max-width: 480px) {
    .sub-hero {
        min-height: 196px;
    }
    .sub-hero-inner {
        padding: 64px 18px 16px;
    }
    .subscribe-page .plan-price {
        font-size: 1.85rem;
    }
}

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
    .subscribe-page .plan-card,
    .subscribe-page .payment-btn,
    .subscribe-page .currency-btn,
    .subscribe-page .cta-pay {
        transition: none;
    }
    .subscribe-page .cta-pay:hover,
    .subscribe-page .cta-pay:active {
        transform: none;
    }
}

/* ==== theme-toggle.css ==== */
/* ═══════════════════════════════════════════════
   Stadium patch — Theme toggle (topbar) + dark-mode nav fixes
   Loaded AFTER css/app.css. Markup lives in renderNavbar()
   (js/app.js); clicks are handled by the delegated listener
   in index.html. Same aria-pressed mechanic as the site
   /stadium/ ThemeToggle component.
   ═══════════════════════════════════════════════ */

.theme-toggle {
    appearance: none;
    -webkit-appearance: none;
    flex-shrink: 0;
    width: 32px;
    height: 32px;
    padding: 0;
    margin: 0;
    border: 1px solid var(--control-border);
    border-radius: var(--radius-pill);
    background: transparent;
    color: var(--text2);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.theme-toggle:hover {
    background: var(--control-bg-hover);
    color: var(--text);
}
.theme-toggle:focus-visible {
    outline: none;
    box-shadow: 0 0 0 3px var(--focus-ring);
}

/* Icon swap driven by aria-pressed (kept in sync by the inline script) */
.theme-toggle .ico { display: none; }
.theme-toggle[aria-pressed="false"] .ico-moon { display: block; }
.theme-toggle[aria-pressed="true"] .ico-sun { display: block; }

@media (prefers-reduced-motion: reduce) {
    .theme-toggle { transition: none; }
}

/* Compact topbar at phone widths: the 32px toggle was pushing the last
   nav link (MY BETS) out of the fixed-height bar at 390px */
@media (max-width: 640px) {
    .theme-toggle { width: 28px; height: 28px; }
    .theme-toggle svg { width: 16px; height: 16px; }
    .top-nav { padding-left: 12px; padding-right: 12px; }
    .nav-right { gap: 6px; }
}

/* ── Logo chip (mirrors the site nav fix, retour user #23): the PNG has an
      integrated dark background that smudges on cream AND melts into dark.
      Ink chip in light (theme-immutable, the PNG frame merges into it),
      lifted surface + hairline in dark. ── */
.nav-logo {
    width: 32px;
    height: 32px;
    padding: 3px;
    box-sizing: border-box;
    background: #1a1d18;
    border-radius: 8px;
}
html[data-theme="dark"] .nav-logo {
    background: var(--bg3);
    border: 1px solid var(--line);
}

/* ==== tournaments.css ==== */
/* ═══════════════════════════════════════════════
   Stadium patch — Tournaments screen (loaded after app.css)
   Calendar aligned on /stadium/tournoi/: month groups, surface
   dot + mono dates cards, ink frames + eyebrows on detail,
   VIP locks (padlock + light blur + ink-on-ball pill CTA).
   ═══════════════════════════════════════════════ */

/* ── Mono eyebrow (Stadium label, clay accent, optional brackets) ── */
.tour-eyebrow {
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
}
.tour-eyebrow--brackets {
    color: var(--clay);
}
.tour-eyebrow--brackets::before { content: '[ '; opacity: 0.55; }
.tour-eyebrow--brackets::after { content: ' ]'; opacity: 0.55; }

/* ── Page header: two-tone display title + lede ── */
.tcal-head {
    align-items: flex-end;
    margin-bottom: 26px;
}
.tcal-head-main { min-width: 0; }
/* Beat app.css `.tournament-page-head .page-title` (sport-display uppercase) */
.tournament-page-head .page-title.tcal-title {
    margin: 14px 0 0;
    font-family: var(--font-display);
    font-size: clamp(2.1rem, 7vw, 3.4rem);
    font-weight: 700;
    letter-spacing: -0.035em;
    line-height: 0.97;
    text-transform: none;
}
.tcal-title-2 { color: var(--text3); }
.tcal-lede {
    margin-top: 14px;
    max-width: 560px;
}

/* Count capsule (label top-left, mono value bottom-right) */
.tournament-count-card.tcal-count-capsule {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    min-width: 118px;
    min-height: 96px;
    padding: 14px 16px 12px;
    border-radius: 24px;
    background: var(--input-bg);
    border: 1px solid var(--line);
    text-align: left;
}
.tcal-count-capsule small {
    order: 1;
    margin: 0;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.09em;
    color: var(--text3);
}
.tcal-count-capsule span {
    order: 2;
    align-self: flex-end;
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: 2rem;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--text);
}

/* ── Toolbar: 2px ink top rule, surface legend + live badge ── */
.tcal-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    flex-wrap: wrap;
    margin: 6px 0 16px;
    padding: 14px 0;
    border-top: 2px solid var(--text);
    border-bottom: 1px solid var(--line);
}
.tcal-legend {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
}
.tcal-legend-item {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    font-family: var(--font-mono);
    font-size: 10.4px;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text2);
}

/* Surface dot: 10px square, surface color (Stadium signature) */
.tcal-dot {
    flex: 0 0 10px;
    display: inline-block;
    width: 10px;
    height: 10px;
    background: var(--text3);
}
.tcal-dot--hard { background: var(--hard); }
.tcal-dot--clay { background: var(--clay); }
.tcal-dot--grass { background: var(--grass); }

/* Live pill: ink-on-ball, immutable */
.tcal-live {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    flex: 0 0 auto;
    padding: 5px 12px;
    border-radius: 99px;
    background: var(--ball);
    color: var(--text-on-ball);
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
.tcal-live--badge { padding: 7px 16px; }
.tcal-live-pulse {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--grass);
    animation: tcal-blink 1.6s ease-in-out infinite;
}
@keyframes tcal-blink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.35; }
}

/* ── Month groups ── */
.tournament-grid.tcal-grid {
    display: block;
}
.tcal-month { margin-top: 30px; }
.tcal-month:first-child { margin-top: 0; }
.tcal-month-head {
    display: flex;
    align-items: baseline;
    gap: 14px;
    margin-bottom: 12px;
}
.tcal-month-title {
    margin: 0;
    font-family: var(--font-display);
    font-size: clamp(1.2rem, 2.6vw, 1.55rem);
    font-weight: 700;
    letter-spacing: -0.03em;
    line-height: 1;
    color: var(--text);
    white-space: nowrap;
}
.tcal-month-count {
    font-family: var(--font-mono);
    font-size: 10.4px;
    font-weight: 600;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text3);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
.tcal-month-line {
    flex: 1;
    height: 1px;
    background: var(--line);
    align-self: center;
}
.tcal-month-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(310px, 1fr));
    gap: 10px;
}

/* ── Card: dot + name + mono dates, no image, sharp frame ── */
.tournament-card.tcal-card {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 15px 16px 13px;
    background: var(--input-bg);
    border: 1px solid var(--line);
    border-radius: 0;
    overflow: visible;
    transition: border-color 0.25s ease, box-shadow 0.3s ease, transform 0.22s cubic-bezier(0.34, 1.3, 0.5, 1), opacity 0.25s ease;
}
/* Surface identity vars: the sweep, ring and shadow all read these */
.tcal-card--hard { --tcal-surface: var(--hard); --tcal-surface-rgb: var(--hard-rgb); }
.tcal-card--clay { --tcal-surface: var(--clay); --tcal-surface-rgb: var(--clay-rgb); }
.tcal-card--grass { --tcal-surface: var(--grass); --tcal-surface-rgb: var(--grass-rgb); }

/* ── Signature hover: chalk line sweep ──
   An SVG rect (pathLength=100) traces the card frame clockwise from the
   top-left corner, like a court line being chalked, in the surface color.
   Combined with a discreet lift + theme-plumbed shadow. */
.tcal-sweep {
    position: absolute;
    inset: -1px;            /* sit exactly on the 1px border */
    width: calc(100% + 2px);
    height: calc(100% + 2px);
    pointer-events: none;
    z-index: 1;
    overflow: visible;
}
.tcal-sweep-rect {
    x: 1px;
    y: 1px;
    width: calc(100% - 2px);
    height: calc(100% - 2px);
    fill: none;
    stroke: var(--tcal-surface, var(--text));
    stroke-width: 2;
    stroke-dasharray: 100;
    stroke-dashoffset: 100;  /* hidden: nothing drawn yet */
    transition: stroke-dashoffset 0.55s cubic-bezier(0.65, 0, 0.35, 1);
}
.tournament-card.tcal-card:hover,
.tournament-card.tcal-card:focus-within {
    border-color: var(--line);
    transform: translateY(-3px);
    box-shadow:
        0 18px 32px -22px rgba(var(--shadow-rgb), 0.5),
        0 6px 20px -12px rgba(var(--tcal-surface-rgb, var(--shadow-rgb)), 0.35);
}
.tournament-card.tcal-card:hover .tcal-sweep-rect,
.tournament-card.tcal-card:focus-within .tcal-sweep-rect {
    stroke-dashoffset: 0;    /* line fully chalked around the frame */
}
/* Echo: the surface dot pulses one ring in the same color */
.tournament-card.tcal-card:hover .tcal-row > .tcal-dot,
.tournament-card.tcal-card:focus-within .tcal-row > .tcal-dot {
    animation: tcal-dot-ring 0.9s ease-out 1;
}
@keyframes tcal-dot-ring {
    0% { box-shadow: 0 0 0 0 rgba(var(--tcal-surface-rgb, var(--shadow-rgb)), 0.45); }
    100% { box-shadow: 0 0 0 9px rgba(var(--tcal-surface-rgb, var(--shadow-rgb)), 0); }
}
/* Micro: arrow of the open pill nudges along the sweep direction */
.tcal-open-arrow { display: inline-block; transition: transform 0.25s ease 0.15s; }
.tournament-card.tcal-card:hover .tcal-open-arrow,
.tournament-card.tcal-card:focus-within .tcal-open-arrow { transform: translateX(3px); }

.tcal-card.status-past { opacity: 0.62; }
.tcal-card.status-past:hover,
.tcal-card.status-past:focus-within { opacity: 1; }

.tcal-row {
    display: flex;
    align-items: center;
    gap: 12px;
    min-width: 0;
}
.tcal-id {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.tcal-name {
    font-family: var(--font-display);
    font-size: 15px;
    font-weight: 650;
    letter-spacing: -0.01em;
    line-height: 1.2;
    color: var(--text);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.tcal-dates {
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--text2);
    font-variant-numeric: tabular-nums;
    line-height: 1.45;
    /* stadium-overrides.css (older aggregate) truncates with nowrap+ellipsis:
       let dates + place wrap instead of cutting the city off */
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
    transition: color 0.25s ease;
}
/* Dates pick up the surface color while the line chalks itself */
.tournament-card.tcal-card:hover .tcal-dates,
.tournament-card.tcal-card:focus-within .tcal-dates {
    color: var(--tcal-surface, var(--text2));
}
.tcal-cat {
    flex: 0 0 auto;
    padding: 5px 12px;
    border: 1px solid var(--control-border);
    border-radius: 99px;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text2);
    white-space: nowrap;
}
.tcal-caption {
    min-height: 0;
    margin: 0;
    font-size: 12.5px;
    line-height: 1.5;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.tcal-card .tournament-card-tags { margin-top: 0; }

/* Signal chips: mono counters, padlock when VIP-locked */
.tcal-sigrow {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    margin-top: auto;    /* pin stat row + actions to the bottom: rows align across the grid */
    padding-top: 11px;
    border-top: 1px solid var(--line);
}
.tcal-sig {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 9px;
    border: 1px solid var(--control-border);
    border-radius: 99px;
    background: var(--control-bg);
    font-family: var(--font-mono);
    font-size: 9.6px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text3);
    font-variant-numeric: tabular-nums;
}
.tcal-sig strong {
    font-size: 11.5px;
    font-weight: 700;
    color: var(--text2);
}
.tcal-sig.has-active {
    border-color: var(--text);
    color: var(--text2);
}
.tcal-sig.has-active strong { color: var(--text); }
.tcal-sig--locked { color: var(--text3); }
.tcal-sig--locked .tour-lock-ic { opacity: 0.8; }
.tcal-sig--stat {
    border-color: transparent;
    background: transparent;
    padding-left: 2px;
    padding-right: 2px;
}
.tcal-sig--stat.kpi-positive { color: var(--success); }
.tcal-sig--stat.kpi-negative { color: var(--error); }

/* Actions: outline ink pill (invert on hover) + mono link */
.tcal-actions {
    margin-top: 2px;
    align-items: center;
}
.tcal-open {
    flex: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    min-height: 36px;
    padding: 0 16px;
    border: 1px solid var(--text);
    border-radius: 99px;
    background: transparent;
    color: var(--text);
    cursor: pointer;
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    transition: background-color 0.16s ease, color 0.16s ease, transform 0.16s ease;
}
.tcal-open:hover {
    background: var(--text);
    color: var(--input-bg);
}
.tcal-open-arrow { font-family: var(--font-mono); }

/* Empty state */
.tcal-empty {
    padding: 36px 18px;
    border: 1px dashed var(--control-border);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    text-align: center;
    color: var(--text3);
}

/* ── Detail hero: ink frame body, dot + mono dates ── */
.tournament-detail-body {
    border: 2px solid var(--text);
    border-radius: 0;
    background: var(--input-bg);
}
.tournament-detail-image {
    border-radius: 0;
    border-color: var(--line);
}
.tour-detail-eyebrow-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 12px;
}
/* Beat app.css `.tournament-detail-body .page-title` (sport-display uppercase) */
.tournament-detail-body .page-title.tour-detail-title {
    font-family: var(--font-display);
    font-size: clamp(1.9rem, 5vw, 2.8rem);
    font-weight: 700;
    letter-spacing: -0.03em;
    line-height: 0.98;
    text-transform: none;
}
.tour-detail-dates {
    display: flex;
    align-items: center;
    gap: 9px;
    font-size: 11px;
    letter-spacing: 0.08em;
    color: var(--text2);
    font-variant-numeric: tabular-nums;
}

/* ── Sections as ink frames with eyebrow head bars ── */
.tournament-section.tour-frame {
    border: 2px solid var(--text);
    border-radius: 0;
    background: var(--input-bg);
    margin-bottom: 22px;
    overflow: hidden;
}
.tour-frame .tournament-section-head.tour-frame-head {
    margin: 0;
    padding: 12px 16px;
    border: 0;
    border-bottom: 1px solid var(--text);
    border-radius: 0;
    background: var(--bg2);
}
.tour-frame-head-copy { min-width: 0; }
.tour-frame-head-copy .tour-eyebrow { display: block; color: var(--text); }
.tour-frame-head-copy p {
    margin: 4px 0 0;
    color: var(--text3);
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: 600;
    letter-spacing: 0.06em;
    line-height: 1.4;
    text-transform: none;
}
/* Section count: ink-on-ball pill */
.tour-frame .tournament-section-count {
    min-width: 30px;
    min-height: 24px;
    padding: 0 11px;
    border: 0;
    border-radius: 99px;
    background: var(--ball);
    color: var(--text-on-ball);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}
.tour-frame-body {
    padding: 14px 16px 16px;
}
.tour-frame-body > .pick-card { margin-bottom: 10px; }
.tour-frame-body > .pick-card:last-child { margin-bottom: 0; }
.tour-frame-body .tournament-profile-section {
    border-bottom: 0;
    padding-bottom: 0;
    margin-bottom: 0;
}

/* ── Summary KPI capsules (label top-left, mono value bottom-right) ── */
.tournament-detail-kpis .kpi-card.tour-kpi {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    gap: 14px;
    min-height: 104px;
    padding: 14px 16px 12px;
    border-radius: 24px;
    background: var(--bg2);
}
.tour-kpi::before { display: none; }
.tour-kpi:hover {
    border-color: var(--line);
    box-shadow: none;
}
.tour-kpi-label {
    font-family: var(--font-mono);
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--text3);
    line-height: 1.35;
}
.tour-kpi-value {
    margin-top: auto;
    align-self: flex-end;
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: clamp(1.45rem, 4.5vw, 1.85rem);
    font-weight: 600;
    letter-spacing: -0.02em;
    line-height: 1;
    color: var(--text);
}
.tour-kpi-value.kpi-positive { color: var(--success); }
.tour-kpi-value.kpi-negative { color: var(--error); }
.tour-kpi-value .tour-lock-ic {
    width: 18px;
    height: 18px;
    color: var(--text3);
}

/* ── VIP locked panel: light blur skeleton + padlock + pill CTA ── */
.tour-locked {
    position: relative;
    min-height: 196px;
}
.tour-locked--compact { min-height: 150px; }
.tour-locked-skeleton {
    display: flex;
    flex-direction: column;
    gap: 10px;
    filter: blur(3px);
    opacity: 0.75;
    pointer-events: none;
    user-select: none;
}
.tour-locked-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 14px;
    border: 1px solid var(--line);
    background: var(--bg2);
}
.tour-locked-bar {
    display: block;
    height: 11px;
    border-radius: 6px;
    background: rgba(var(--ink-rgb), 0.10);
}
.tour-locked-bar--dot {
    width: 10px;
    height: 10px;
    flex: 0 0 10px;
    border-radius: 0;
    background: rgba(var(--ink-rgb), 0.16);
}
.tour-locked-bar--lg { flex: 1 1 auto; }
.tour-locked-bar--sm { flex: 0 0 52px; }
.tour-locked-overlay {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 18px;
    background: linear-gradient(180deg, var(--lock-veil-0) 0%, var(--lock-veil-1) 62%);
}
.tour-locked-inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 9px;
    text-align: center;
    max-width: 340px;
}
.tour-locked-lock {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border: 1.5px solid var(--text);
    border-radius: 50%;
    color: var(--text);
    background: var(--input-bg);
}
.tour-locked-lock .tour-lock-ic { width: 14px; height: 14px; }
.tour-locked-title {
    font-family: var(--font-display);
    font-size: 1rem;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--text);
}
.tour-locked-text {
    margin: 0;
    font-size: 12.5px;
    line-height: 1.5;
    color: var(--text2);
}
/* CTA stays the global ink-on-ball pill; just kill any cream glow */
.tour-locked-cta { min-width: 170px; }
.tour-locked-cta:hover {
    box-shadow: inset 0 1px 0 var(--sheen-edge);
    transform: none;
}

/* ── Mobile (PWA mobile-first) ── */
@media (max-width: 640px) {
    .tcal-head { flex-direction: column; align-items: flex-start; gap: 14px; }
    .tournament-count-card.tcal-count-capsule {
        flex-direction: row;
        align-items: center;
        min-height: 0;
        width: 100%;
        padding: 10px 16px;
    }
    .tcal-count-capsule span { align-self: center; font-size: 1.45rem; }
    .tcal-month-grid { grid-template-columns: 1fr; }
    .tcal-row { flex-wrap: wrap; }
    .tcal-id { flex-basis: calc(100% - 22px); }
    .tcal-cat { margin-left: 22px; }
    .tour-frame-body { padding: 12px 12px 14px; }
}

@media (prefers-reduced-motion: reduce) {
    .tcal-live-pulse { animation: none; }
    .tournament-card.tcal-card,
    .tcal-open,
    .tcal-sweep-rect,
    .tcal-open-arrow,
    .tcal-dates { transition: none; }
    /* Static fallback: the full surface frame appears instantly, no motion */
    .tournament-card.tcal-card:hover,
    .tournament-card.tcal-card:focus-within { transform: none; }
    .tournament-card.tcal-card:hover .tcal-row > .tcal-dot,
    .tournament-card.tcal-card:focus-within .tcal-row > .tcal-dot { animation: none; }
    .tournament-card.tcal-card:hover .tcal-open-arrow,
    .tournament-card.tcal-card:focus-within .tcal-open-arrow { transform: none; }
}

/* ===== tcv tournament cards ===== */
/* Ported from the validated "medallion / conviction" mockup. tcv- namespace,
   real PWA tokens only (light + dark valid), motion gated under
   prefers-reduced-motion:no-preference with a solid-halo @property fallback. */

/* 4 filtering tabs reuse the .tournament-detail-tabs wrapper (override 5-col grid) */
.tournament-detail-tabs.tcv-tabs { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.tcv-tab {
    min-height: 38px; display: inline-flex; align-items: center; justify-content: center; gap: 8px;
    font-family: var(--font-body); font-size: .72rem; font-weight: 600; text-transform: uppercase;
    color: var(--grass); background: color-mix(in srgb, var(--grass) 8%, transparent);
    border: 1px solid color-mix(in srgb, var(--grass) 28%, transparent);
    border-radius: 12px; padding: 0 10px; cursor: pointer;
}
.tcv-tab.tcv-on { background: var(--grass); color: #fff; border-color: var(--grass); }
.tcv-tab:not(.tcv-on):hover { border-color: var(--grass); background: color-mix(in srgb, var(--grass) 14%, transparent); }
.tcv-ct { font-size: 9px; background: color-mix(in srgb, var(--grass) 14%, transparent); color: var(--grass); border-radius: 999px; padding: 1px 6px; }
.tcv-tab.tcv-on .tcv-ct { background: rgba(255, 255, 255, .22); color: #fff; }

/* section filtering: exactly one visible at a time */
.tcv-sec { display: none; }
.tcv-sec.tcv-show { display: block; }

/* section heading */
.tcv-sect-hd { display: flex; align-items: baseline; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; }
.tcv-sect-eyebrow { font-family: var(--font-mono); font-size: 10px; letter-spacing: .16em; text-transform: uppercase; color: var(--clay); }
.tcv-sect-title { font-family: var(--font-display); font-size: 21px; font-weight: 700; letter-spacing: -.02em; }
.tcv-sect-sub { font-family: var(--font-body); font-size: 12.5px; color: var(--text3); margin-left: auto; }

/* grids */
.tcv-grid2 { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 16px; }
.tcv-grid2.tcv-stats { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }

/* résumé: stat médaillon + info-card */
.tcv-stat { background: var(--bg2); border: 1px solid var(--line); border-radius: 18px; padding: 16px;
    box-shadow: 0 1px 2px rgba(var(--shadow-rgb), .05), 0 14px 30px -14px rgba(var(--shadow-rgb), .2); }
.tcv-sk { font-family: var(--font-mono); font-size: 9px; letter-spacing: .12em; text-transform: uppercase; color: var(--text3); }
.tcv-sv { font-family: var(--font-display); font-size: 30px; font-weight: 700; margin-top: 4px; letter-spacing: -.02em; display: block; }
.tcv-res-grid { display: grid; grid-template-columns: 1.35fr 1fr; gap: 16px; margin-top: 16px; }
@media (max-width: 760px) { .tcv-res-grid { grid-template-columns: 1fr; } }
.tcv-info-card { background: var(--bg2); border: 1px solid var(--line); border-radius: 20px; padding: 20px;
    box-shadow: 0 1px 2px rgba(var(--shadow-rgb), .05), 0 14px 30px -14px rgba(var(--shadow-rgb), .2); }
.tcv-info-card.tcv-span { margin-top: 16px; }
.tcv-ic-eyebrow { font-family: var(--font-mono); font-size: 10px; letter-spacing: .16em; text-transform: uppercase; color: var(--clay); margin-bottom: 12px; }
.tcv-info-card p { font-family: var(--font-body); font-size: 13.5px; line-height: 1.55; color: var(--text2); margin-bottom: 10px; }
.tcv-info-card p:last-child { margin-bottom: 0; }
.tcv-facts { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: var(--line); border: 1px solid var(--line); border-radius: 14px; overflow: hidden; }
.tcv-fact { background: var(--bg2); padding: 11px 13px; }
.tcv-fk { display: block; font-family: var(--font-mono); font-size: 8.6px; letter-spacing: .14em; text-transform: uppercase; color: var(--text3); margin-bottom: 4px; }
.tcv-fv { font-family: var(--font-display); font-size: 13px; font-weight: 600; }
.tcv-lens { list-style: none; display: flex; flex-direction: column; gap: 11px; margin-top: 2px; padding: 0; }
.tcv-lens li { position: relative; padding-left: 18px; font-family: var(--font-body); font-size: 12.5px; line-height: 1.5; color: var(--text2); }
.tcv-lens li::before { content: ""; position: absolute; left: 0; top: 7px; width: 7px; height: 7px; border-radius: 50%; background: var(--grass); }

/* ===== conviction card shell ===== */
.tcv-mc { position: relative; overflow: hidden; background: var(--bg2); border: 1px solid var(--line); border-radius: 22px;
    padding: 20px 22px 18px; box-shadow: 0 1px 2px rgba(var(--shadow-rgb), .05), 0 14px 30px -14px rgba(var(--shadow-rgb), .2); }
.tcv-ghost { position: absolute; bottom: -22px; right: 10px; font-family: var(--font-display); font-size: 92px; font-weight: 700;
    letter-spacing: -.05em; color: transparent; -webkit-text-stroke: 1.2px var(--line); opacity: .5; z-index: 0; line-height: 1; pointer-events: none; user-select: none; }
.tcv-mc > * { position: relative; z-index: 1; }
.tcv-mc-hd { display: flex; align-items: center; gap: 11px; padding-bottom: 13px; border-bottom: 1px solid var(--line); margin-bottom: 18px; }
.tcv-rd { font-family: var(--font-display); font-size: 13px; font-weight: 700; letter-spacing: -.01em; }
.tcv-dv { width: 1px; height: 13px; background: var(--control-border); }
.tcv-surf { display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-mono); font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--text2); }
.tcv-sd { width: 7px; height: 7px; border-radius: 50%; background: var(--text3); }
.tcv-sd-grass { background: var(--grass); }
.tcv-sd-clay { background: var(--clay); }
.tcv-sd-hard { background: var(--hard); }
.tcv-sp { flex: 1; }
.tcv-tag-vip { display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-mono); font-size: 8.4px; font-weight: 600;
    letter-spacing: .14em; text-transform: uppercase; color: var(--grass); border: 1px solid color-mix(in srgb, var(--grass) 40%, transparent); border-radius: 999px; padding: 5px 10px; }
.tcv-tag-vip::before { content: ""; width: 5px; height: 5px; border-radius: 50%; background: var(--ball); }
.tcv-tag-free { display: inline-flex; align-items: center; font-family: var(--font-mono); font-size: 8.4px; font-weight: 600;
    letter-spacing: .14em; text-transform: uppercase; color: var(--text2); border: 1px solid var(--control-border); border-radius: 999px; padding: 5px 10px; }
.tcv-badge { font-family: var(--font-mono); font-size: 9px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; border-radius: 999px; padding: 5px 10px; white-space: nowrap; }
.tcv-badge.tcv-pending { color: var(--text2); background: var(--bg3); }
.tcv-badge.tcv-win { color: #fff; background: var(--success); }
.tcv-badge.tcv-loss { color: #fff; background: var(--clay); }

/* duel */
.tcv-duel { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 8px; }
.tcv-av { display: flex; flex-direction: column; align-items: center; gap: 9px; text-align: center; }
.tcv-gauge { width: 84px; height: 84px; border-radius: 50%; display: grid; place-items: center; background: var(--bg3); }
.tcv-av.tcv-fav .tcv-gauge { background: var(--success); }
.tcv-ph { box-sizing: border-box; width: 68px; height: 68px; border-radius: 50%; overflow: hidden; background: var(--bg3);
    box-shadow: 0 0 0 4px var(--bg2); display: grid; place-items: center; }
.tcv-ph img { width: 100%; height: 100%; object-fit: cover; object-position: center top; }
.tcv-mono { display: none; font-family: var(--font-display); font-weight: 700; font-size: 22px; color: var(--text2); }
.tcv-ph.tcv-noimg .tcv-mono { display: block; }
.tcv-nm { font-family: var(--font-display); font-size: 13px; font-weight: 600; max-width: 128px; line-height: 1.15; }
/* favourite name highlight removed per user 2026-06-27 (halo + conviction bar already mark the favourite) */
.tcv-pc { font-family: var(--font-mono); font-size: 12px; font-weight: 600; color: var(--text3); }
.tcv-av.tcv-fav .tcv-pc { color: var(--success); }
.tcv-vs { align-self: center; font-family: var(--font-mono); font-size: 8.5px; letter-spacing: .12em; color: var(--text3); writing-mode: vertical-rl; text-orientation: mixed; opacity: .65; }

/* conviction bar */
.tcv-conv { margin-top: 18px; }
.tcv-conv-top { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 8px; }
.tcv-cl { font-family: var(--font-mono); font-size: 10px; letter-spacing: .04em; color: var(--text3); }
.tcv-cl b { font-family: var(--font-display); font-size: 13px; font-weight: 700; }
.tcv-cl.tcv-fav b { color: var(--success); }
.tcv-conv-bar { position: relative; height: 8px; border-radius: 999px; background: var(--bg3); overflow: hidden; }
.tcv-conv-bar .tcv-fill { position: absolute; inset: 0 auto 0 0; border-radius: 999px; background: var(--success); transform-origin: left; }

/* pick payload */
.tcv-eyebrow { display: block; font-family: var(--font-mono); font-size: 8.2px; letter-spacing: .16em; text-transform: uppercase; color: var(--text3); margin-bottom: 6px; }
.tcv-pick { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-top: 16px; padding-top: 15px; border-top: 1px solid var(--line); }
.tcv-who { font-family: var(--font-display); font-size: 20px; font-weight: 700; letter-spacing: -.01em; }
.tcv-who .tcv-ck { color: var(--success); margin-right: 6px; }
.tcv-pk-r { text-align: right; }
.tcv-od { font-family: var(--font-display); font-size: 32px; font-weight: 700; letter-spacing: -.03em; line-height: .82; }
.tcv-edge { display: block; font-family: var(--font-mono); font-size: 11px; font-weight: 600; color: var(--success); margin-top: 8px; }
/* locked variant (free member view of a VIP card) */
.tcv-pick.tcv-locked { align-items: center; gap: 12px; }
.tcv-pick.tcv-locked .tcv-lk { width: 22px; height: 22px; color: var(--text2); flex: none; }
.tcv-pick.tcv-locked .tcv-lockmsg { font-family: var(--font-body); font-size: 13px; font-weight: 600; color: var(--text2); }

/* free key factor */
.tcv-factor { display: flex; align-items: center; gap: 12px; margin-top: 16px; padding: 14px 16px; border: 1px solid var(--line); border-radius: 16px; background: var(--bg2); }
.tcv-factor .tcv-fv { font-family: var(--font-display); font-size: 15px; font-weight: 600; }

/* footer */
.tcv-mc-ft { display: flex; align-items: center; gap: 10px; margin-top: 14px; flex-wrap: wrap; }
.tcv-ci { flex: 0 1 130px; border: 1px solid var(--line); background: var(--bg); border-radius: 10px; padding: 9px 11px; font-size: 12px; font-family: var(--font-body); color: var(--text); }
.tcv-meta { font-family: var(--font-mono); font-size: 9.4px; letter-spacing: .06em; text-transform: uppercase; color: var(--text3); }
.tcv-bpri { font-family: var(--font-mono); font-size: 9.5px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; border: 0; border-radius: 10px; padding: 10px 15px; cursor: pointer; background: var(--ball); color: #1a1d18; white-space: nowrap; }
.tcv-calink { display: inline-flex; align-items: center; gap: 9px; font-family: var(--font-mono); font-size: 9.4px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--text); text-decoration: none; cursor: pointer; background: none; border: 0; padding: 0; }
.tcv-tx { border-bottom: 1px solid var(--text); padding-bottom: 2px; }
.tcv-arr { width: 24px; height: 24px; border-radius: 50%; border: 1px solid var(--control-border); display: grid; place-items: center; transition: .2s; }
.tcv-calink:hover .tcv-arr { background: var(--ball); border-color: var(--ball); color: #1a1d18; transform: translate(2px, -2px); }
.tcv-res { font-family: var(--font-display); font-size: 13px; font-weight: 600; }
.tcv-amt { font-family: var(--font-mono); font-size: 15px; font-weight: 600; }
.tcv-amt.tcv-pos { color: var(--success); }
.tcv-amt.tcv-neg { color: var(--clay); }

/* ===== motion (gated; solid-halo fallback when @property unsupported) ===== */
@property --tcv-ring { syntax: '<angle>'; inherits: false; initial-value: 0deg; }
@keyframes tcv-rise { from { opacity: 0; transform: translateY(13px); } to { opacity: 1; transform: translateY(0); } }
@keyframes tcv-fadein { from { opacity: 0; } to { opacity: 1; } }
@keyframes tcv-growx { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes tcv-drawring { from { --tcv-ring: 0deg; } to { --tcv-ring: 360deg; } }
@media (prefers-reduced-motion: no-preference) {
    .tcv-mc, .tcv-stat, .tcv-info-card { transition: transform .25s cubic-bezier(.3, .7, .2, 1), box-shadow .25s; }
    .tcv-mc:hover, .tcv-stat:hover, .tcv-info-card:hover { transform: translateY(-3px);
        box-shadow: 0 1px 2px rgba(var(--shadow-rgb), .05), 0 22px 42px -16px rgba(var(--shadow-rgb), .3); }
    .tcv-sec.tcv-show .tcv-grid2 > *, .tcv-sec.tcv-show .tcv-res-grid > *, .tcv-sec.tcv-show > .tcv-info-card { animation: tcv-fadein .4s ease both; }
    .tcv-sec.tcv-show .tcv-mc-hd, .tcv-sec.tcv-show .tcv-duel, .tcv-sec.tcv-show .tcv-conv,
    .tcv-sec.tcv-show .tcv-pick, .tcv-sec.tcv-show .tcv-factor, .tcv-sec.tcv-show .tcv-mc-ft { animation: tcv-rise .55s cubic-bezier(.3, .7, .2, 1) both; }
    .tcv-sec.tcv-show .tcv-duel { animation-delay: .08s; }
    .tcv-sec.tcv-show .tcv-conv { animation-delay: .16s; }
    .tcv-sec.tcv-show .tcv-pick, .tcv-sec.tcv-show .tcv-factor { animation-delay: .24s; }
    .tcv-sec.tcv-show .tcv-mc-ft { animation-delay: .3s; }
    .tcv-sec.tcv-show .tcv-info-card > *, .tcv-sec.tcv-show .tcv-stat > * { animation: tcv-rise .55s cubic-bezier(.3, .7, .2, 1) both; }
    .tcv-sec.tcv-show .tcv-info-card > *:nth-child(2), .tcv-sec.tcv-show .tcv-stat > *:nth-child(2) { animation-delay: .12s; }
    .tcv-sec.tcv-show .tcv-info-card > *:nth-child(3) { animation-delay: .22s; }
    .tcv-sec.tcv-show .tcv-conv-bar .tcv-fill { animation: tcv-growx .85s cubic-bezier(.3, .7, .2, 1) .25s both; }
    body.tcv-ring-ok .tcv-sec.tcv-show .tcv-av.tcv-fav .tcv-gauge {
        background: conic-gradient(var(--success) var(--tcv-ring), var(--bg3) 0);
        animation: tcv-drawring .9s cubic-bezier(.3, .7, .2, 1) .3s both; }
}
/* G9 fix: neutralize the circled-arrow hover nudge for reduced-motion users */
@media (prefers-reduced-motion: reduce) {
    .tcv-arr { transition: none; }
    .tcv-calink:hover .tcv-arr { transform: none; }
}

/* ===== hero overlay (image plein + titre + barre infos verre) — porté À L'IDENTIQUE de la maquette validée ===== */
.tcv-hero { position: relative; border-radius: 24px; overflow: hidden; min-height: 300px; display: flex;
    flex-direction: column; justify-content: flex-end; background: var(--bg3); padding: 22px; margin-bottom: 18px; }
.tcv-h-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }
.tcv-hero::after { content: ""; position: absolute; inset: 0; z-index: 0;
    background: linear-gradient(180deg, rgba(8,10,6,.18) 0%, rgba(8,10,6,.05) 32%, rgba(8,10,6,.55) 70%, rgba(8,10,6,.82) 100%); }
.tcv-h-top { position: absolute; top: 20px; left: 22px; right: 22px; display: flex; align-items: center;
    justify-content: space-between; gap: 10px; z-index: 1; }
.tcv-h-eyebrow { font-family: var(--font-mono); font-size: 11px; letter-spacing: .16em; text-transform: uppercase; color: rgba(255,255,255,.85); }
.tcv-h-live { display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-mono); font-size: 10px;
    font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: #1a1d18; background: var(--ball);
    border-radius: 999px; padding: 6px 12px; white-space: nowrap; }
.tcv-h-live::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: #1a1d18; }
.tcv-h-title { position: relative; z-index: 1; font-family: var(--font-display); font-weight: 700; letter-spacing: -.03em;
    line-height: .95; color: #fff; font-size: clamp(32px, 5.5vw, 56px); margin: 0 0 16px; text-shadow: 0 2px 24px rgba(0,0,0,.4); }
.tcv-h-yr { color: var(--ball); }
.tcv-h-info { position: relative; z-index: 1; display: flex; flex-wrap: wrap; background: rgba(10,12,8,.42);
    backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid rgba(255,255,255,.16);
    border-radius: 16px; overflow: hidden; }
.tcv-h-cell { flex: 1 1 0; min-width: 110px; padding: 12px 16px; border-right: 1px solid rgba(255,255,255,.12); }
.tcv-h-cell:last-child { border-right: 0; }
.tcv-h-k { display: block; font-family: var(--font-mono); font-size: 8.4px; letter-spacing: .16em; text-transform: uppercase; color: rgba(255,255,255,.6); margin-bottom: 5px; }
.tcv-h-v { font-family: var(--font-display); font-size: 15px; font-weight: 600; color: #fff; }
.tcv-h-v svg { width: 14px; height: 14px; vertical-align: -2px; }
