/* Authoritative type scale. Data text stays readable across all views. */
:root{--type-body:15px;--type-name:17px;--type-stat:13px;--type-meta:12px;--type-score:32px}
body{font-size:var(--type-body);line-height:1.45}
.player-cell .pc-name{font-size:var(--type-name);line-height:24px;letter-spacing:-.25px;font-weight:750}
.player-cell .pc-score{font-size:var(--type-score);line-height:33px;letter-spacing:-.4px}.player-cell .pc-proj{font-size:12px;line-height:15px;margin-top:2px;color:#536983}
.player-cell .pc-stats,.player-cell.opp .pc-stats{font-size:var(--type-stat);line-height:17px;letter-spacing:0;color:#405774;font-weight:500;gap:0}.pc-stats .stat-line{line-height:inherit}.player-cell .pc-stats.no-stats{font-size:13px}
.player-cell .pc-game{font-size:var(--type-meta);line-height:18px;gap:5px}.pc-status,.pc-status.live,.pc-status.final,.pc-status.upcoming,.pc-field{font-size:12px;line-height:17px;letter-spacing:0}.pc-position{font-size:12px;margin-left:6px}
.hero-team h2{font-size:19px;line-height:1.3;letter-spacing:-.3px}.team-record{font-size:12px;line-height:18px}.hero-proj{font-size:12px;line-height:15px}.metric-row{font-size:12px;line-height:15px}
.pill-team{--pill-score-w:6ch;--pill-proj-w:6ch;display:grid;grid-template-columns:19px minmax(0,1fr) var(--pill-score-w);align-items:center;gap:6px 8px;font-size:13px;line-height:21px}.pill-team.has-proj{grid-template-columns:19px minmax(0,1fr) var(--pill-score-w) var(--pill-proj-w)}.pill-team>img{width:18px;height:18px}.pill-team>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pill-team strong,.pill-score>.score-value{font-size:17px;line-height:18px;font-variant-numeric:tabular-nums}.pill-score{display:block;width:100%;max-width:100%;min-width:0;overflow:hidden;text-align:right;font-variant-numeric:tabular-nums;justify-self:stretch}.pill-score>.score-value{display:block;width:100%;overflow:hidden;text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.pill-proj{display:block;width:100%;max-width:100%;min-width:0;overflow:hidden;text-align:right;font:500 11px/14px Manrope,sans-serif;font-variant-numeric:tabular-nums;color:#8a9bb0;white-space:nowrap;justify-self:stretch}.matchup-pill{max-width:330px;min-height:58px;padding:7px 10px}
.side-heading h3,.side-card h3{font-size:23px;line-height:1.15}.side-heading>span{font-size:12px}.mini-team{font-size:14px;line-height:21px}.mini-team .mini-score>.score-value,.mini-team strong{font-size:24px;line-height:24px}.mini-proj{font-size:12px;line-height:14px}.mini-match small{font-size:12px;line-height:16px}.text-link{font-size:14px}.nfl-game{font-size:14px}.nfl-game>strong{font-size:13px}
.current-week,.source-toggle,.league-switch,.search-button{font-size:14px}.week-date{font-size:13px}.season-badge{font-size:12px}.rail-item{font-size:12px}.rail-item span{font-size:11px;letter-spacing:.1px}
.league-jumps button{font-size:14px;min-height:42px}.data-table th{font-size:12px}.data-table td{font-size:14px;line-height:20px}.standings-table td{padding:15px 8px}.standings-team strong{font-size:16px;line-height:22px}.standings-team small{font-size:12px;line-height:17px}.result-dot{width:27px;height:27px;font-size:11px}.standings-key{font-size:12px;line-height:18px}.h2h-value strong{font-size:16px;line-height:18px}.h2h-value .h2h-mark{font-size:12px;line-height:14px}
.bracket-round h4{font-size:25px}.bracket-round header button{font-size:12px;min-height:36px}.bracket-game-label{font-size:11px;line-height:16px;letter-spacing:.5px}.bracket-game{min-height:96px}.bracket-team{font-size:15px;min-height:29px}.bracket-seed{font-size:12px}.bracket-score{font-size:22px}.bracket-placeholder{font-size:14px;line-height:20px}
.activity-date{font-size:14px;line-height:20px}.activity-teams strong{font-size:14px;line-height:21px}.activity-action strong{font-size:15px;line-height:22px}.activity-action small,.activity-content time{font-size:12px;line-height:18px}.activity-demo-note{font-size:12px}.activity-end,.activity-loading,.activity-pagination button{font-size:13px}.activity-state strong{font-size:16px}.activity-state p,.activity-state a,.activity-state button{font-size:14px}
.player-tile h3{font-size:17px}.player-tile small{font-size:13px}.page-toolbar .seg{font-size:13px}.dialog-tab{font-size:14px}.player-subtitle{font-size:14px}.metric-tile span{font-size:12px;line-height:17px}.game-banner strong{font-size:15px}.game-banner small{font-size:12px}.chart-heading h3{font-size:16px}.chart-heading>span{font-size:12px}.subtle-note{font-size:13px;line-height:1.6}
.bench-disclosure{margin-top:18px;scroll-margin-top:20px;overflow:hidden}.bench-disclosure>summary{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 20px;cursor:pointer;list-style:none;font-size:16px;font-weight:800;color:#223e61;min-height:52px}.bench-disclosure>summary::-webkit-details-marker{display:none}.bench-disclosure>summary>span{display:flex;align-items:center;gap:10px;font-size:12px;font-weight:600;color:#62748d}.bench-disclosure>summary .ph{font-size:18px;transition:transform .15s}.bench-disclosure[open]>summary .ph{transform:rotate(180deg)}.bench-disclosure[open]>summary{border-bottom:1px solid #dfe6f0}.bench-disclosure>summary:focus-visible{outline:2px solid #d32648;outline-offset:-3px}
@media(min-width:651px){.player-cell{grid-template-columns:64px minmax(0,1fr) 56px;grid-template-rows:auto auto auto;padding:0 8px 0 0;gap:2px 8px;align-items:stretch;align-content:center;height:auto;min-height:0}.player-cell.opp{grid-template-columns:56px minmax(0,1fr) 64px;padding:0 0 0 8px}.player-cell .pc-game{grid-column:2/4;padding-right:56px;display:flex;flex-wrap:wrap;align-items:center;gap:2px 5px;min-width:0;max-width:100%;overflow:hidden}.player-cell.opp .pc-game{grid-column:1/3;padding-right:0;padding-left:56px;flex-direction:row-reverse;justify-content:flex-start}.player-cell .pc-score{position:relative;z-index:2;grid-column:3;grid-row:1/3;justify-self:end;align-self:start;padding-top:0}.player-cell.opp .pc-score{grid-column:1;justify-self:start}.player-cell .pc-name{align-self:start;padding-top:5px}.player-cell .pc-game{align-self:center}.player-cell .pc-stats{align-self:start;padding-bottom:5px;justify-content:flex-start}.player-cell .pc-mid{flex:1 1 auto;flex-wrap:nowrap;min-width:0;overflow:hidden;text-overflow:ellipsis}.player-cell.opp .pc-mid{flex:0 1 auto}.player-cell .pc-chips{flex:0 1 auto;margin-left:0;flex-wrap:wrap;max-width:100%}.player-cell.opp .pc-chips{margin-left:0;margin-right:4px}.player-cell.opp .pc-stats{padding-left:56px;text-align:right}.player-cell.opp .pc-name{grid-column:2;width:100%;min-width:0}.lineup-row{height:auto;min-height:0}.player-shot{width:64px;min-height:100%;grid-row:1/-1;align-self:stretch}.player-cell .pc-name,.player-cell .pc-score{padding-top:0}.player-cell .pc-stats{padding-bottom:0;min-height:0}.slot-label{font-size:12px}.matchup-panel .lineup-list{padding:0}.bench-disclosure .lineup-list{padding:0}
 .pc-position{font-size:11px}.pc-status,.pc-status.live,.pc-status.final,.pc-status.upcoming,.pc-field{font-size:11px;line-height:14px}.player-cell .pc-name{font-size:14px;line-height:20px}.player-cell .pc-score{font-size:26px;line-height:26px}.player-cell .pc-proj{font-size:11px;line-height:12px;margin-top:1px}.player-cell .pc-stats,.player-cell.opp .pc-stats{font-size:12px;line-height:15px}.minutes-side{font-size:12px}.lineup-labels,.roster-legend{font-size:12px}.dialog-topbar{font-size:12px}.metric-tile span{font-size:12px}.data-table th{font-size:12px}.scoreboard-note,.chart-heading>span,.side-heading>span{font-size:12px}}
@media(min-width:651px) and (max-width:1399px){.workspace{grid-template-columns:minmax(0,1fr)}.workspace .sidebar{display:none}}
@media(max-width:650px){
 :root{--type-body:14px;--type-name:13px;--type-stat:11px;--type-meta:10px;--type-score:22px;--row-h:clamp(57px,calc((100svh - 258px - env(safe-area-inset-top) - env(safe-area-inset-bottom))/8),70px)}
 .compact-league,.current-week{font-size:12px}.data-state{font-size:10px;padding:5px 6px}.week-navigation .icon-button{width:25px}.mobile-nav button{font-size:11px;line-height:14px}.mobile-nav button i{font-size:21px}
 .matchup-pill{height:50px;min-height:50px;padding:5px 7px;max-width:none}.pill-team{--pill-score-w:5.5ch;--pill-proj-w:5.5ch;font-size:11px;line-height:19px;grid-template-columns:14px minmax(0,1fr) var(--pill-score-w);gap:3px 5px}.pill-team.has-proj{grid-template-columns:14px minmax(0,1fr) var(--pill-score-w) var(--pill-proj-w)}.pill-team>img{width:14px;height:14px}.pill-team strong,.pill-score>.score-value{font-size:15px;line-height:17px}.pill-proj{font-size:10px;line-height:12px}
 .hero-team{grid-template-columns:26px minmax(0,1fr);grid-template-rows:28px auto}.hero-team.opponent{grid-template-columns:minmax(0,1fr) 26px;grid-template-rows:28px auto}.hero-logo{width:26px;height:26px}.hero-team h2{font-size:12px;line-height:14px;max-height:28px;min-height:0;letter-spacing:-.15px}.hero-score,.hero-team.opponent .hero-score{font-size:34px;line-height:30px}.hero-proj{font-size:10px;line-height:12px}.metric-row{font-size:10px;line-height:12px}
 .lineup-list{padding:0}.player-cell{grid-template-rows:19px 12px minmax(24px,auto);padding:0 3px 0 0;gap:0 3px;align-items:stretch;align-content:stretch}.player-cell.opp{padding:0 0 0 3px}.player-cell .pc-name{font-size:var(--type-name);line-height:19px;letter-spacing:-.2px;font-weight:750}.player-cell .pc-score{font-size:var(--type-score);line-height:22px;letter-spacing:-.3px}.player-cell .pc-score .score-value{line-height:22px}.player-cell .pc-proj{font-size:9.5px;line-height:11px;margin:0}.player-cell .pc-game{font-size:var(--type-meta);line-height:12px;gap:3px}.pc-status,.pc-status.live,.pc-status.final,.pc-status.upcoming{font-size:9px;line-height:12px}.pc-field{font-size:8.5px;line-height:12px}.player-cell .pc-stats,.player-cell.opp .pc-stats{font-size:var(--type-stat);line-height:12px;letter-spacing:-.1px;min-height:24px}.player-cell .pc-stats .stat-line{line-height:12px;overflow-wrap:normal}.player-cell .pc-stats.no-stats{font-size:10px;line-height:12px}.mobile-stats{word-spacing:0}.player-cell .pc-score .score-delta{font-size:9px;line-height:11px}.pc-position{display:none}
 .bench-disclosure{margin-top:14px;scroll-margin-top:10px}.bench-disclosure>summary{font-size:14px;min-height:48px;padding:12px}.bench-disclosure>summary>span{font-size:11px}.bench-disclosure .lineup-list{padding:0}
 .side-heading h3,.side-card h3{font-size:23px}.side-heading>span{font-size:10px;line-height:15px}.league-jumps button{font-size:13px}.league-matchup-list .mini-team{font-size:13px}.mini-team .mini-score>.score-value,.mini-team strong{font-size:26px}.mini-match small{font-size:10px}.data-table td{font-size:13px}.data-table th{font-size:11px}.standings-team strong{font-size:14px;line-height:20px}.standings-team small{font-size:11px}.standings-key{font-size:11px}.standings-table{min-width:830px}
 .bracket-team{font-size:14px}.bracket-placeholder{font-size:13px}.bracket-round h4{font-size:24px}.bracket-game-label{font-size:10px}.bracket-seed{font-size:11px}.bracket-round header button{font-size:12px}.playoff-bracket{grid-template-columns:repeat(var(--rounds),minmax(235px,1fr));min-width:calc(var(--rounds)*235px + (var(--rounds) - 1)*28px)}
 .activity-teams strong{font-size:13px;line-height:18px}.activity-action strong{font-size:14px;line-height:20px}.activity-action small,.activity-content time{font-size:11px;line-height:16px}.activity-date{font-size:13px}.activity-card .side-heading{flex-wrap:wrap}.activity-card .side-heading>span{font-size:10px;line-height:15px}.demo-label{font-size:9px}.activity-demo-note{font-size:11px}.activity-end,.activity-loading{font-size:12px}
 .player-tile h3{font-size:15px}.player-tile small{font-size:12px}.dialog-tab{font-size:12px}.player-subtitle{font-size:11px}.metric-tile span{font-size:11px;line-height:15px}.game-banner strong{font-size:14px}.game-banner small{font-size:11px}.chart-heading h3{font-size:15px}.chart-heading>span{font-size:11px}.subtle-note{font-size:13px}.setting-row p{font-size:13px}.field-details small{font-size:11px}
}
@media(max-width:370px){:root{--type-name:12px;--type-stat:10.5px;--type-meta:9.5px;--type-score:21px}.compact-league{font-size:11px}.current-week{font-size:11px}.data-state{font-size:9px}.pill-team{font-size:10.5px}.pc-status,.pc-status.live,.pc-status.final,.pc-status.upcoming{font-size:8.5px}.pc-field{font-size:8px}.player-cell .pc-proj{font-size:9px}.hero-team h2{font-size:11px}}
@media(max-width:650px) and (max-height:700px){:root{--row-h:57px}.matchup-pill{height:48px;min-height:48px;padding-top:4px;padding-bottom:4px}.scoreboard{padding:4px 7px}.hero-team,.hero-team.opponent{grid-template-rows:22px auto}.hero-team h2{font-size:11px;line-height:12px;max-height:24px}.hero-logo{width:22px;height:22px}.hero-score,.hero-team.opponent .hero-score{font-size:31px;line-height:26px}.hero-proj,.metric-row{font-size:9px;line-height:11px}.player-cell,.player-cell.opp{padding-top:0;padding-bottom:0}}
@media(prefers-reduced-motion:reduce){.bench-disclosure>summary .ph{transition:none}}

/* Short phones retain the data type size; only header spacing is tightened. */
@media(max-width:650px) and (max-height:700px){.matchup-tabs{margin-bottom:1px}.matchup-pill{height:46px;min-height:46px}.scoreboard{padding:1px 7px 2px}.hero-team{grid-template-columns:20px minmax(0,1fr);grid-template-rows:18px auto}.hero-team.opponent{grid-template-columns:minmax(0,1fr) 20px;grid-template-rows:18px auto}.hero-team h2{font-size:11px;line-height:16px;max-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hero-logo{width:18px;height:18px}.hero-score,.hero-team.opponent .hero-score{font-size:29px;line-height:24px}.hero-proj,.metric-row{font-size:8.5px;line-height:10px}}

/* Score and projection share exactly the name/status rows, without bleeding into stats. */
@media(min-width:651px){.player-cell .pc-proj{line-height:12px}}
@media(max-width:650px){.player-cell .pc-score,.player-cell .pc-score .score-value{line-height:21px}.player-cell .pc-proj,.player-cell .pc-score .score-delta{line-height:10px}}

@media(min-width:651px) and (max-width:1000px){.player-cell .desktop-name{display:none}.player-cell .mobile-name{display:inline}}

/* Position occupies its complete grid cell in starters and bench. */
.lineup-row>.slot-label{align-self:stretch;justify-self:stretch;margin:0;padding:0;min-width:0;min-height:0;border-radius:0}

/* Single-line stats scroll inside their cell, with fades only at hidden edges. */
.lineup-row>.slot-label{background:#f6f8fb}
.player-cell .pc-stats,.player-cell.opp .pc-stats{display:flex;flex-direction:column;justify-content:center;min-width:0;overflow:hidden;white-space:nowrap}
.stat-scroll{display:block;flex:none;width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none;overscroll-behavior-x:contain;touch-action:pan-x pan-y;white-space:nowrap;text-overflow:clip;--fade-left:0px;--fade-right:0px;mask-image:linear-gradient(to right,transparent,#000 var(--fade-left),#000 calc(100% - var(--fade-right)),transparent)}
.stat-scroll::-webkit-scrollbar{display:none;width:0;height:0}
.stat-scroll.fade-left{--fade-left:14px}.stat-scroll.fade-right{--fade-right:14px}
.player-cell .pc-stats .stat-line{display:block;width:max-content;min-width:100%;white-space:nowrap;overflow-wrap:normal;user-select:none}
@media(pointer:fine){.stat-scroll.fade-left,.stat-scroll.fade-right{cursor:ew-resize}}

/* Player portraits fill the row edge-to-edge (no vertical padding). */
.player-shot .player-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 18%}
.hero-headshot{object-fit:cover;object-position:center 15%}
@media(min-width:651px){
  .player-cell{padding-top:0;padding-bottom:0;padding-left:0;align-items:stretch}
  .player-cell.opp{padding-right:0;padding-left:8px}
  .player-shot{position:relative;overflow:hidden;min-height:100%;height:100%;grid-row:1/-1;width:64px;align-self:stretch}
}
@media(max-width:650px){
  .player-shot,.opp .player-shot{grid-row:1/-1;min-height:100%;align-self:stretch}
}

/* Actual and projected matchup scores share mirrored center edges. */
.scoreboard{--score-center:42px;--score-gap:10px}
.scoreboard .score-teams,
.scoreboard .metric-row,
.scoreboard .minutes-track{
  grid-template-columns:minmax(0,1fr) var(--score-center) minmax(0,1fr);
  column-gap:var(--score-gap);
}
.scoreboard .minutes-label{justify-self:center;text-align:center;width:100%}
.scoreboard .hero-score{display:flex;align-items:center;justify-content:flex-end;text-align:right;justify-self:end}
.scoreboard .hero-team.opponent .hero-score{justify-content:flex-start;text-align:left;justify-self:start}
.scoreboard .hero-score .decimal{line-height:1}
/* Proj under live scores (same columns as .hero-team); clock on the outer edge. */
@media(min-width:651px){
  .scoreboard{--hero-logo:48px;--hero-pad:10px}
  .scoreboard .minutes-head{
    display:grid;grid-template-columns:var(--hero-logo) minmax(0,1fr) auto;grid-template-rows:auto;
    column-gap:var(--hero-pad);align-items:center;width:100%;min-width:0;
  }
  /* Explicit row — without it, own-side clock (DOM after proj) can auto-place onto row 2. */
  .scoreboard .minutes-clock{grid-column:1/3;grid-row:1;justify-self:start;min-width:0;overflow:hidden;text-overflow:ellipsis}
  .scoreboard .minutes-proj{grid-column:3;grid-row:1;justify-self:end;margin:0 0 0 8px;text-align:right}
  .scoreboard .minutes-side.opponent .minutes-head{grid-template-columns:auto minmax(0,1fr) var(--hero-logo)}
  .scoreboard .minutes-side.opponent .minutes-proj{grid-column:1;grid-row:1;justify-self:start;margin:0 8px 0 0;text-align:left}
  .scoreboard .minutes-side.opponent .minutes-clock{grid-column:2/4;grid-row:1;justify-self:end}
  .scoreboard .minutes-side.opponent{align-items:stretch;text-align:left}
}
@media(max-width:650px){
 .scoreboard{--score-center:30px;--score-gap:4px}
 .scoreboard .metric-row>span{min-width:0}
 .scoreboard .score-metrics{margin-top:3px}
 .scoreboard .versus{align-self:end;padding-bottom:10px}
 .scoreboard .hero-score .score-delta{left:auto;right:calc(100% + 6px);top:50%;transform:translateY(-50%)}
 .scoreboard .opponent .hero-score .score-delta{left:calc(100% + 6px);right:auto;top:50%;transform:translateY(-50%)}
}

/* Mobile: Foto aus; Matchup-Route überschreibt das Raster in matchup-mobile.css. */
@media(max-width:650px){
 .lineup-list{--lineup-score-width:36px}
 .lineup-list .player-shot{display:none}
}
@media(max-width:370px){.lineup-list{--lineup-score-width:33px}}
