/* Typography, hierarchy and density refinement. Fonts ship locally for offline review. */
@font-face{font-family:Manrope;src:url('assets/fonts/Manrope.ttf') format('truetype');font-style:normal;font-weight:200 800;font-display:swap}
@font-face{font-family:'Barlow Condensed';src:url('assets/fonts/BarlowCondensed-Bold.ttf') format('truetype');font-style:normal;font-weight:700;font-display:swap}
:root{--font-ui:Manrope,Arial,sans-serif;--font-display:'Barlow Condensed','Arial Narrow',Arial,sans-serif;--motion-fast:180ms}
body{font-family:var(--font-ui)}
/* Match's accepted scoreboard/market typography remains inside its measured composition. */
body.page-match{font-family:Arial,sans-serif}
.slip,.ticket-sheet,.dialog:not(.navigation-drawer){font-family:var(--font-ui)}
.page-title h1,.live-page-title h1{font-family:var(--font-display);font-size:54px;line-height:1;letter-spacing:.2px;font-weight:700}
.page-title{gap:20px;margin-bottom:18px}.page-title p{margin-top:8px}.page-title .search{max-width:450px;min-height:44px}
.page-title .search input{font-size:12px}
.section-heading{margin-bottom:12px;align-items:baseline}
.section-heading h2{font-family:var(--font-display);font-size:30px;line-height:1.1;letter-spacing:.2px}
.section-heading .muted{font-size:11px}
.eyebrow{font-size:9px;letter-spacing:1.25px}
.sports{margin-bottom:16px}.sport{min-height:44px;font-weight:600;font-size:11px;padding:10px}
.sports-hint{display:none}
.following-summary{margin-bottom:18px;gap:10px}.follow-chips{font-size:11px}.following-summary>.button{font-size:11px;min-height:40px}
.chip{font-size:11px;min-height:32px}.chip img{width:20px;height:20px}
.fixture-section{margin-bottom:26px}.fixture-list{border-radius:10px}
.fixture{min-height:92px;padding:10px 14px;grid-template-columns:68px minmax(180px,1fr) minmax(228px,42%) 24px;gap:12px}
.fixture .teams{gap:3px}.fixture .teams>span{min-height:25px;gap:8px}
.fixture .teams strong{font-size:12px;line-height:18px;font-weight:700}
.fixture .teams b{font-size:18px;line-height:22px;min-width:24px;text-align:right;color:var(--ink);font-variant-numeric:tabular-nums}
.fixture .teams small{font-size:9px;line-height:14px;margin:0;padding-left:32px}
.fixture .crest{width:23px;height:25px}.fixture-time{gap:5px}.fixture-time>strong{font-size:15px}
.odds .outcome-label{font-size:10px;line-height:15px}.odds strong{font-size:18px;line-height:23px;font-variant-numeric:tabular-nums;font-weight:800}
.odds{min-height:56px;padding:8px 10px;gap:2px}
.fixture-info,.live-match-link,.featured-fixture{transition:background-color var(--motion-fast),border-color var(--motion-fast)}
.fixture-info:hover,.live-match-link:hover{color:var(--aqua)}

/* Featured fixtures have their own composition, without duplicating the personal list. */
.featured-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.featured-fixture{position:relative;isolation:isolate;display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--line);border-radius:12px;background:var(--surface);min-width:0;min-height:0;overflow:hidden}
.featured-fixture::before,.live-group-heading::before,.empty-follow::before{content:'';position:absolute;inset:0;background:url('assets/matchday-wave.svg') right center/480px auto no-repeat;opacity:.075;pointer-events:none;z-index:-1}
.featured-fixture:hover{border-color:#31586a}.feature-meta{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:9px;color:var(--muted);width:100%}
.feature-meta .eyebrow{color:var(--aqua);font-size:8px;letter-spacing:.7px}.feature-meta time{font-variant-numeric:tabular-nums;text-align:right}
.featured-fixture .fixture-info{width:100%;display:block;min-height:0;padding:0}
.feature-contest{display:grid;grid-template-columns:1fr 24px 1fr;gap:12px;align-items:center;min-height:76px}
.feature-team{display:flex;align-items:center;gap:10px;min-width:0}.feature-team:last-child{flex-direction:row-reverse;text-align:right}
.feature-team strong{font-family:var(--font-display);font-size:24px!important;line-height:1.05!important;font-weight:700;overflow-wrap:normal}
.featured-fixture .crest{width:34px;height:40px}.feature-vs{font-size:10px;font-weight:800;color:var(--quiet);text-align:center}
.feature-bottom{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;margin-top:auto}
.feature-bottom .eyebrow{font-size:8px}.feature-bottom .text-button{min-height:32px;padding:0;font-size:10px;white-space:nowrap}
.featured-fixture .odds-row{width:100%}.featured-fixture .odds{min-height:54px}
.featured-fixture .odds.selected{padding-right:24px}
.empty-follow{position:relative;isolation:isolate;overflow:hidden;background:var(--surface);border-left:3px solid var(--cyan)}
.empty-follow h2{font-family:var(--font-display);font-size:28px;line-height:1.1}
.competition>strong{font-family:var(--font-display);font-size:21px;line-height:1.1;letter-spacing:.2px}

/* Live: the league is the landmark; odds and scores stay aligned underneath it. */
.live-page-title{margin-bottom:16px;gap:16px}.live-page-title p{margin-top:6px;font-size:12px}
.live-kicker{margin-bottom:6px;font-size:9px}.live-view-tabs{margin-bottom:12px;gap:26px}
.live-view-tab{min-height:44px;padding-bottom:10px;font-size:13px}
.live-sports{margin-bottom:8px;padding-bottom:6px}.live-sport{font-size:11px}
.live-filter-bar .search,.live-competition select,.live-following{min-height:44px}
.live-results-summary{min-height:44px;font-size:11px}
.live-group{margin-bottom:16px}
.live-group-heading{position:relative;isolation:isolate;overflow:hidden;min-height:64px;padding:10px 14px}
.live-group-heading::before{opacity:.06;right:0;left:40%}
.live-group-heading h2{font-family:var(--font-display);font-size:25px;line-height:1.05;color:var(--ink);letter-spacing:.2px;margin-top:3px}
.live-group-heading .eyebrow{color:var(--sport-accent);font-size:8px}
.live-group-count{font-family:var(--font-ui);font-size:10px;font-weight:500;vertical-align:middle;letter-spacing:0}
.live-fixture{padding:10px 14px;gap:12px;grid-template-columns:72px minmax(185px,1fr) minmax(228px,42%) 22px}
.live-teams>span{min-height:32px}.live-teams strong{font-size:12px;line-height:18px}.live-teams b{font-size:21px;font-weight:800;line-height:28px}
.live-team-follows .compact{min-height:36px;width:36px}
.live-prices{gap:5px}.live-prices>.eyebrow{font-size:8px;letter-spacing:.8px}.live-prices .odds{min-height:56px}
.live-fixture-status{font-size:13px}.live-detail{font-size:9px}

/* Ticket hierarchy: context, choice, money, action; compact records retain full receipts. */
.slip-tabs .tab{font-size:12px;font-weight:650;min-height:54px}
.ticket-selection{padding:12px}.ticket-selection .selection-value{font-size:21px;line-height:27px;margin-top:6px}
.ticket-selection .selection-heading .eyebrow{font-size:8px}.ticket-selection p{margin:2px 0 10px;font-size:10px}
.ticket-fixture{margin:10px 0;gap:5px}.ticket-fixture strong{font-size:11px;line-height:17px}
.ticket-fixture .crest,.ticket-fixture .initials,.ticket-fixture .event-icon{width:20px;height:23px}
.ticket-event{font-size:9px;line-height:15px}.ticket-seam{margin:12px -12px 10px}
.ticket-signature small{letter-spacing:.8px}.ticket-wordmark{width:78px;height:24px}
.stake-label-row{margin-top:16px}.slip-commit{margin-top:14px;padding-top:14px}
.slip-commit .return{font-size:27px;line-height:31px;font-weight:800;font-variant-numeric:tabular-nums}
.ticket-empty{padding:28px 4px 22px}.ticket-empty h2,.history-heading h2,.receipt h2{font-family:var(--font-display);font-size:32px;line-height:1.05;letter-spacing:.2px}
.history-heading{margin-bottom:14px}.history-heading p{font-size:10px}.history-heading h2{margin:6px 0}.history-order{margin:10px 0}
.ticket-summary{padding:0 12px}.ticket-status-row{margin:0 -12px;padding:8px 12px}.ticket-pick{margin:10px 0;align-items:center}
.ticket-pick strong{font-size:14px;line-height:20px}.ticket-pick>b{font-size:18px;font-weight:800}
.ticket-totals{padding-top:10px;margin-bottom:8px}.ticket-totals strong{font-size:13px}.ticket-totals .ticket-return{font-size:18px;font-weight:800}
.ticket-expand{font-size:9px;padding:8px 0}.ticket-details{padding:0 12px 12px}.ticket-details dd{font-variant-numeric:tabular-nums}
.ticket-details>.ticket-seam{margin:0 -5px 12px}
.history-tabs .button{font-size:11px}.history-filter select{font-size:10px}
.ticket-time{font-size:8px;color:var(--quiet);line-height:14px;display:block}

@container(max-width:760px){
 .fixture:not(.featured-fixture){grid-template-columns:64px minmax(0,1fr) 24px;gap:8px}
 .fixture:not(.featured-fixture) .fixture-info{grid-column:2;grid-row:1}
 .fixture:not(.featured-fixture) .fixture-more{grid-column:3;grid-row:1}
 .fixture:not(.featured-fixture)>.odds-row,.fixture:not(.featured-fixture)>.suspended{grid-column:1/-1;grid-row:2}
 .live-fixture{grid-template-columns:72px minmax(0,1fr) 22px;gap:8px}
 .live-contest{grid-column:2;grid-row:1}.live-open{grid-column:3;grid-row:1}.live-prices{grid-column:1/-1;grid-row:2}
 .feature-team{flex-direction:column;text-align:center;gap:8px}.feature-team:last-child{flex-direction:column;text-align:center}
 .feature-contest{gap:6px}.feature-team strong{font-size:22px!important}
}
@media(max-width:650px){
 .page-title h1,.live-page-title h1{font-size:42px}.page-title{margin-bottom:14px}.page-title p{font-size:10px;margin-top:6px}.page-title .search{margin-top:14px}
 .section-heading h2{font-size:27px}.section-heading .muted{font-size:10px}
 .sports{display:flex;overflow-x:auto;gap:4px;scrollbar-width:thin;padding:4px;margin-bottom:14px}
 .sports:has(+.sports-hint){margin-bottom:4px}.sports-hint{display:block;color:var(--quiet);text-align:right;font-size:9px;line-height:16px;margin-bottom:12px}
 .sport{flex-direction:row;flex:0 0 auto;white-space:nowrap;min-height:44px;padding:10px 12px;font-size:11px;gap:7px}
 .sport svg{width:18px;height:18px}
 .following-summary{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}.following-summary>.button{width:auto;margin:0;min-height:44px;padding:8px 10px}.follow-chips{gap:5px;font-size:10px}.chip{font-size:10px;padding:5px 8px}
 .featured-grid{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x proximity;padding:0 1px 6px;scrollbar-width:thin}
 .featured-fixture{flex:0 0 min(100%,330px);scroll-snap-align:start;min-height:0;padding:14px;gap:10px}
 .featured-fixture:only-child{flex-basis:100%}.feature-team strong{font-size:25px!important}.feature-team,.feature-team:last-child{flex-direction:column;text-align:center}
 .feature-meta{font-size:9px;gap:8px}.feature-meta .eyebrow{font-size:8px}.feature-contest{min-height:100px;gap:8px}.feature-bottom .text-button{min-height:44px}
 .fixture:not(.featured-fixture){grid-template-columns:1fr 26px;gap:8px;min-height:0;padding:12px}
 .fixture:not(.featured-fixture) .fixture-time{position:static;grid-column:1;grid-row:1;flex-direction:row;align-items:center;gap:8px;font-size:10px}
 .fixture:not(.featured-fixture) .fixture-info{grid-column:1/-1;grid-row:2;padding:0;min-height:0}
 .fixture:not(.featured-fixture) .fixture-more{display:grid;place-items:center;grid-column:2;grid-row:1;width:26px;min-height:32px}
 .fixture:not(.featured-fixture)>.odds-row,.fixture:not(.featured-fixture)>.suspended{grid-column:1/-1;grid-row:3}
 .fixture .teams b{display:block;font-size:19px}.fixture .teams strong{font-size:13px;line-height:19px}.fixture .teams>span{min-height:29px}
 .fixture .teams small{font-size:9px}.fixture .teams{gap:2px}.odds{min-height:58px}.odds .outcome-label{font-size:10px}.odds strong{font-size:18px}
 .competition-grid{grid-template-columns:1fr}.competition>strong{font-size:23px}
 .empty-follow h2{font-size:26px}.empty-follow p{font-size:11px;line-height:18px}
 .live-page-title{margin-bottom:12px}.live-snapshot{max-width:190px}.live-view-tabs{margin-bottom:10px}.live-sport{min-height:44px}.live-results-summary{min-height:40px}
 .live-group-heading{min-height:60px;padding:8px 12px}.live-group-heading h2{font-size:24px}
 .live-fixture{grid-template-columns:1fr 28px;padding:10px 12px;gap:6px}
 .live-fixture-status{grid-column:1;grid-row:1;gap:8px;align-items:center;flex-direction:row}
 .live-open{grid-column:2;grid-row:1;width:28px;min-height:32px}
 .live-contest{grid-column:1/-1;grid-row:2}.live-prices{grid-column:1/-1;grid-row:3;margin-top:2px;gap:3px}
 .live-teams>span{min-height:40px}.live-teams strong{font-size:13px}.live-team-follows .compact{min-height:44px;width:44px}.live-prices .odds{min-height:58px}
 .ticket-selection{padding:14px}.ticket-fixture strong{font-size:12px}.ticket-selection .ticket-fixture{margin:12px 0}
 .ticket-summary .ticket-fixture{margin:12px 0}.ticket-pick strong{font-size:16px}.ticket-totals strong{font-size:14px}.ticket-totals .ticket-return{font-size:21px}
 .ticket-selection .selection-value{font-size:23px;line-height:29px}.ticket-selection .remove-selection{min-width:44px;min-height:44px}
 .slip-content .presets .button{min-height:44px}.house-ticket .ticket-expand{min-height:44px}
}
@media(prefers-reduced-motion:reduce){.fixture-info,.live-match-link,.featured-fixture{transition:none}.odds.selected{animation:none}}
