/* Design tokens. Light is the primary theme (Visual System v1 + the Webflow palette, 2026-09-21).
   Contrast-checked: every text token is >= 4.5:1 on the surfaces it is used on; --gm-brand
   (the logo green) is for graphics/fills only - it is 3.8:1 on white. The previous dark values
   are kept below under [data-theme="dark"] for the future dark theme. */
:root {
  --gm-bg: #F7FAF8;
  --gm-panel: #FFFFFF;
  --gm-panel-2: #EFF7F3;
  --gm-hover: #E5F3EC;
  --gm-line: #DCE7E1;
  --gm-line-control: #7F8D86;
  --gm-ink: #172B24;
  --gm-muted: #596B63;
  --gm-muted-2: #66736C;

  --gm-brand: #009564;
  --gm-accent: #047857;
  --gm-accent-hover: #065F46;
  --gm-accent-dim: rgba(4, 120, 87, 0.10);
  --gm-on-accent: #FFFFFF;

  --gm-danger: #C0333F;
  --gm-danger-dim: #FBEAEC;
  --gm-warn: #8F5F00;
  --gm-warn-dim: #FFF4D8;
  --gm-good: #047857;
  --gm-good-dim: #E3F4EC;
  /* Scoring-outlook 4th tier (item 80, 2026-09-22): one step darker/richer than --gm-good, for
     "Boom" - the app's existing danger/warn/good severity scale tops out at "good", but this
     chart needs a real 4th, distinct-but-related step. Reuses --gm-accent-hover rather than a
     new hex - text contrast checked at 7.3:1 light / 11.7:1 dark against the page surface. */
  /* Item 119 follow-up (2026-10-05): was var(--gm-accent-hover), nearly indistinguishable
     from --gm-good's green in both themes - "a real color key" needs 4 actually-distinct
     colors, not 3 plus a near-duplicate. Violet reads clearly apart from red/gold/green. */
  --gm-boom: #7C3AED;
  --gm-boom-dim: rgba(124, 58, 237, 0.10);
  --gm-info: #2A6BB0;
  --gm-info-dim: #EAF3FC;
  --gm-neutral-dim: #EEF2F0;

  --gm-shadow-float: 0 12px 28px rgba(23, 43, 36, 0.14);
  --gm-scrim: rgba(23, 43, 36, 0.45);
}

:root[data-theme="dark"] {
  --gm-bg: #0a0f0d;
  --gm-panel: #101713;
  --gm-panel-2: #141d18;
  --gm-hover: rgba(255, 255, 255, 0.04);
  --gm-line: #223028;
  --gm-line-control: #3a5147;
  --gm-ink: #f2f5f3;
  --gm-muted: #8a978f;
  --gm-muted-2: #5f6b64;
  --gm-brand: #009564;
  --gm-accent: #22d3a3;
  --gm-accent-hover: #4fe0b9;
  --gm-accent-dim: rgba(34, 211, 163, 0.12);
  --gm-on-accent: #06231b;
  --gm-danger: #f2495c;
  --gm-danger-dim: rgba(242, 73, 92, 0.12);
  --gm-warn: #e2b93b;
  --gm-warn-dim: rgba(226, 185, 59, 0.14);
  --gm-good: #22d3a3;
  --gm-good-dim: rgba(34, 211, 163, 0.12);
  --gm-boom: #A78BFA;
  --gm-boom-dim: rgba(167, 139, 250, 0.14);
  --gm-info: #6fa8e0;
  --gm-info-dim: rgba(111, 168, 224, 0.14);
  --gm-neutral-dim: rgba(138, 151, 143, 0.14);
  --gm-shadow-float: 0 12px 28px rgba(0, 0, 0, 0.45);
  --gm-scrim: rgba(4, 8, 6, 0.72);
}

.gm-body {
  margin: 0;
  background: var(--gm-bg);
  color: var(--gm-ink);
  font-family: "Inter", "Segoe UI", "Helvetica Neue", Arial, sans-serif;
  font-size: 14px;
  line-height: 1.4;
  /* viewport-fit=cover (item 222) lets the page run under the notch in landscape; these insets are 0 everywhere else */
  padding-left: env(safe-area-inset-left);
  padding-right: env(safe-area-inset-right);
}

.gm-topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.9rem 1.5rem;
  background: var(--gm-panel);
  border-bottom: 1px solid var(--gm-line);
  position: sticky;
  top: 0;
  /* Real bug found 2026-09-22 (live screenshot: nav dropdown rendering under Player Profile's
     own sticky sub-nav): `position: sticky` makes this element its own stacking context, so a
     dropdown menu inside it (z-index: 25, below) can only ever out-stack OTHER children of
     .gm-topbar - it can never beat a sibling element elsewhere in the page (e.g. .gm-pf-subnav
     at z-index 30) that has a higher z-index than .gm-topbar itself. The nav is global chrome
     and must out-stack every in-page sticky element (highest found: 30) while staying below
     true modal overlays (drawers/sheets/scrims, 90-120), which should still cover it. */
  z-index: 45;
}

.gm-brand {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  text-decoration: none;
  color: var(--gm-ink);
}

.gm-brand-lockup {
  display: block;
  height: 36px;
  width: auto;
}

.gm-brand-mono {
  display: none;
  height: 22px;
  width: auto;
}

@media (max-width: 700px) {
  .gm-brand-lockup { display: none; }
  .gm-brand-mono { display: block; }
}

.gm-topnav {
  display: flex;
  align-items: center;
  gap: 1.75rem;
}

.gm-topnav a {
  color: var(--gm-muted);
  text-decoration: none;
  font-weight: 600;
  font-size: 0.9rem;
  padding-bottom: 0.35rem;
  border-bottom: 2px solid transparent;
}

.gm-topnav a.active {
  color: var(--gm-accent);
  border-bottom-color: var(--gm-accent);
}

.gm-topnav a.disabled {
  color: var(--gm-muted-2);
  cursor: default;
  pointer-events: none;
}

/* Tools dropdown - same link styling as a plain top-nav item, plus a small caret and an
   absolutely-positioned menu panel toggled by JS (click, not hover - more reliable on
   touch, and avoids an accidental-close-while-moving-the-mouse annoyance). */
.gm-nav-dropdown {
  position: relative;
}

.gm-nav-dropdown-trigger {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  background: none;
  border: none;
  color: var(--gm-muted);
  text-decoration: none;
  font-weight: 600;
  font-size: 0.9rem;
  font-family: inherit;
  padding: 0 0 0.35rem;
  border-bottom: 2px solid transparent;
  cursor: pointer;
}

.gm-nav-dropdown-trigger:hover,
.gm-nav-dropdown.open .gm-nav-dropdown-trigger {
  color: var(--gm-ink);
}

.gm-nav-dropdown.active .gm-nav-dropdown-trigger {
  color: var(--gm-accent);
  border-bottom-color: var(--gm-accent);
}

.gm-nav-dropdown-caret {
  width: 8px;
  height: 8px;
  border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor;
  transform: rotate(45deg) translateY(-2px);
  transition: transform 0.12s ease;
}

.gm-nav-dropdown.open .gm-nav-dropdown-caret {
  transform: rotate(225deg) translateY(-1px);
}

.gm-nav-dropdown-menu {
  position: absolute;
  top: calc(100% + 0.75rem);
  left: 50%;
  transform: translateX(-50%);
  min-width: 230px;
  background: var(--gm-panel);
  border: 1px solid var(--gm-line);
  border-radius: 10px;
  padding: 0.4rem;
  box-shadow: var(--gm-shadow-float);
  display: none;
  flex-direction: column;
  gap: 0.1rem;
  z-index: 25;
}

/* Section labels inside a dropdown (e.g. RANKINGS / DRAFT DATA / TOOLS) - not a link,
   just a small, muted divider grouping related items. 2026-09-14, full-menu mockup. */
.gm-nav-dropdown-group {
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--gm-muted);
  opacity: 0.7;
  padding: 0.6rem 0.7rem 0.2rem;
  text-transform: uppercase;
}

.gm-nav-dropdown-group:first-child {
  padding-top: 0.35rem;
}

.gm-nav-dropdown-menu hr.gm-nav-dropdown-divider {
  border: none;
  border-top: 1px solid var(--gm-line);
  margin: 0.35rem 0.2rem;
}

/* Placeholder ("#") items - visually present for the menu mockup, but not yet a real
   destination. Slightly dimmer + a not-allowed cursor so it reads as "not built yet"
   rather than a broken link. */
.gm-nav-dropdown-menu a.gm-nav-placeholder {
  opacity: 0.45;
  cursor: default;
}

.gm-nav-dropdown-menu a.gm-nav-placeholder:hover {
  background: none;
  color: var(--gm-muted);
}

.gm-nav-external-icon {
  font-size: 0.75em;
  opacity: 0.7;
  margin-left: 0.2rem;
}

.gm-nav-dropdown.open .gm-nav-dropdown-menu {
  display: flex;
}

.gm-nav-dropdown-menu a {
  color: var(--gm-muted);
  text-decoration: none;
  font-weight: 600;
  font-size: 0.86rem;
  padding: 0.55rem 0.7rem;
  border-radius: 7px;
  white-space: nowrap;
}

.gm-nav-dropdown-menu a:hover {
  color: var(--gm-ink);
  background: var(--gm-panel-2);
}

.gm-nav-dropdown-menu a.active {
  color: var(--gm-accent);
  background: var(--gm-accent-dim);
}

.gm-avatar {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: var(--gm-panel-2);
  border: 1px solid var(--gm-line);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--gm-muted);
}

.gm-refresh-btn {
  width: 26px;
  height: 26px;
  border-radius: 6px;
  border: 1px solid var(--gm-line);
  background: transparent;
  color: var(--gm-muted);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

.gm-main {
  padding: 1.75rem 2rem 3rem;
  min-width: 0;
}

/* Compact page-level meta strip - replaces the old sidebar's League Profile/Scoring/
   Roster summary + Data Updated/refresh, now that the sidebar is gone and the page runs
   full width. */
.gm-page-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 1.75rem;
  background: var(--gm-panel);
  border: 1px solid var(--gm-line);
  border-radius: 10px;
  padding: 0.85rem 1.25rem;
  margin-bottom: 1.25rem;
}

.gm-page-meta .gm-info-label {
  color: var(--gm-muted-2);
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-bottom: 0.2rem;
}

.gm-page-meta .gm-info-value {
  color: var(--gm-ink);
  font-weight: 600;
  font-size: 0.88rem;
}

.gm-page-meta-spacer {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 0.6rem;
}

.gm-page-title {
  font-size: 1.7rem;
  font-weight: 700;
  margin: 0 0 0.3rem;
}

.gm-page-sub {
  color: var(--gm-muted);
  margin: 0 0 1.4rem;
  font-size: 0.92rem;
}

.gm-filter-bar {
  display: flex;
  align-items: flex-end;
  gap: 1.5rem;
  background: var(--gm-panel);
  border: 1px solid var(--gm-line);
  border-radius: 10px;
  padding: 1rem 1.25rem;
  margin-bottom: 1.25rem;
  flex-wrap: wrap;
}

.gm-field {
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
}

.gm-field label {
  color: var(--gm-muted);
  font-size: 0.75rem;
}

.gm-field select,
.gm-field input {
  background: var(--gm-panel-2);
  border: 1px solid var(--gm-line);
  color: var(--gm-ink);
  border-radius: 7px;
  padding: 0.45rem 0.7rem;
  font-size: 0.85rem;
  min-width: 170px;
}

.gm-search {
  flex: 1;
  min-width: 220px;
}

.gm-live-indicator {
  margin-left: auto;
  color: var(--gm-muted);
  font-size: 0.8rem;
  display: flex;
  align-items: center;
  gap: 0.4rem;
  white-space: nowrap;
  padding-bottom: 0.5rem;
}

.gm-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--gm-accent);
  box-shadow: 0 0 6px var(--gm-accent);
}

.gm-board-card {
  background: var(--gm-panel);
  border: 1px solid var(--gm-line);
  border-radius: 10px;
  overflow: hidden;
}

.gm-board-head {
  display: flex;
  align-items: baseline;
  gap: 0.6rem;
  padding: 1rem 1.25rem;
  border-bottom: 1px solid var(--gm-line);
}

.gm-board-head h2 {
  margin: 0;
  font-size: 1.05rem;
  color: var(--gm-accent);
}

.gm-board-head .gm-muted-inline {
  color: var(--gm-muted);
  font-size: 0.85rem;
}

.gm-week-picker {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.gm-week-picker select {
  background: var(--gm-panel-2);
  border: 1px solid var(--gm-line);
  color: var(--gm-ink);
  border-radius: 6px;
  padding: 0.3rem 0.5rem;
  font-size: 0.82rem;
  font-weight: 600;
}

.gm-board-head .gm-updated {
  margin-left: auto;
  color: var(--gm-muted-2);
  font-size: 0.78rem;
}

.gm-table-scroll {
  overflow-x: auto;
}

.gm-table {
  width: 100%;
  border-collapse: collapse;
  min-width: 920px;
}

.gm-table thead th {
  text-align: left;
  color: var(--gm-muted-2);
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding: 0.6rem 1rem;
  border-bottom: 1px solid var(--gm-line);
  white-space: nowrap;
}

.gm-table tbody td {
  padding: 0.55rem 1rem;
  border-bottom: 1px solid var(--gm-line);
  white-space: nowrap;
  font-size: 0.86rem;
}

.gm-table tbody tr:hover {
  background: var(--gm-hover);
}

.gm-tier-row td {
  padding: 0.5rem 1rem;
  color: var(--gm-accent);
  font-weight: 700;
  font-size: 0.75rem;
  letter-spacing: 0.04em;
  background: var(--gm-panel-2);
  border-bottom: 1px solid var(--gm-line);
}

.gm-player-cell {
  display: flex;
  align-items: center;
  gap: 0.6rem;
}

.gm-team-badge {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.62rem;
  font-weight: 800;
  color: #ffffff;
  flex-shrink: 0;
}

.gm-player-name {
  color: var(--gm-ink);
  font-weight: 600;
  text-decoration: none;
}

a.gm-player-name:hover {
  color: var(--gm-accent);
  text-decoration: underline;
}

.gm-player-team {
  color: var(--gm-muted-2);
  font-size: 0.78rem;
  margin-left: 0.35rem;
}

.gm-status-pill {
  display: inline-block;
  font-size: 0.65rem;
  font-weight: 800;
  padding: 0.05rem 0.35rem;
  border-radius: 4px;
  margin-left: 0.4rem;
  vertical-align: middle;
}

.gm-status-q { background: var(--gm-warn-dim); color: var(--gm-warn); }
.gm-status-d { background: var(--gm-danger-dim); color: var(--gm-danger); }
.gm-status-o { background: var(--gm-danger-dim); color: var(--gm-danger); }
/* Item 117 (2026-10-05): the Tank01 feed is stale on this player's own game day - a missing
   badge, not a possibly-wrong one. Neutral/muted, not alarming like Q/D/O. */
.gm-status-unavailable { background: var(--gm-muted-2); color: var(--gm-bg); font-weight: 700; }
.gm-status-pending { background: transparent; color: var(--gm-warn); border: 1px dashed var(--gm-warn); font-weight: 600; }

.gm-diff-pos { color: var(--gm-good); }
.gm-diff-neg { color: var(--gm-danger); }
.gm-diff-flat { color: var(--gm-muted-2); }

.gm-pill {
  display: inline-block;
  padding: 0.15rem 0.55rem;
  border-radius: 999px;
  font-size: 0.78rem;
  font-weight: 700;
}

.gm-pill-good { background: var(--gm-good-dim); color: var(--gm-good); }
.gm-pill-neutral { background: var(--gm-neutral-dim); color: var(--gm-muted); }
.gm-pill-warn { background: var(--gm-warn-dim); color: var(--gm-warn); }
.gm-pill-danger { background: var(--gm-danger-dim); color: var(--gm-danger); }

.gm-notes-btn {
  background: none;
  border: none;
  color: var(--gm-muted-2);
  cursor: pointer;
  font-size: 1rem;
}

.gm-notes-btn:hover {
  color: var(--gm-accent);
}

.gm-coming-soon {
  background: var(--gm-panel);
  border: 1px solid var(--gm-line);
  border-radius: 10px;
  padding: 3rem 2rem;
  text-align: center;
  color: var(--gm-muted);
}

.gm-coming-soon h2 {
  color: var(--gm-ink);
  margin-top: 0;
}

.gm-info-icon {
  color: var(--gm-muted-2);
  font-size: 0.7rem;
  cursor: help;
  margin-left: 0.15rem;
}

/* ---- Depth charts ---- */

.gm-depth-team {
  background: var(--gm-panel);
  border: 1px solid var(--gm-line);
  border-radius: 10px;
  padding: 1.1rem 1.25rem 1.4rem;
  margin-bottom: 1.1rem;
}

.gm-depth-team-header {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin-bottom: 1rem;
}

.gm-team-badge-lg {
  width: 40px;
  height: 40px;
  font-size: 0.85rem;
}

.gm-depth-team-header h2 {
  margin: 0;
  font-size: 1.05rem;
  color: var(--gm-accent);
}

.gm-depth-grid {
  display: grid;
  grid-template-columns: repeat(5, minmax(140px, 1fr));
  gap: 1rem;
  overflow-x: auto;
}

.gm-depth-col-header {
  color: var(--gm-muted-2);
  font-size: 0.68rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 700;
  padding-bottom: 0.5rem;
  margin-bottom: 0.5rem;
  border-bottom: 1px solid var(--gm-line);
  white-space: nowrap;
}

.gm-depth-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
}

.gm-depth-list li {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
  font-size: 0.82rem;
}

.gm-depth-rank {
  color: var(--gm-muted-2);
  font-weight: 700;
  min-width: 2.8em;
  text-align: right;
  flex-shrink: 0;
  font-size: 0.85em;
}

.gm-depth-name {
  color: var(--gm-ink);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

@media (max-width: 900px) {
  .gm-depth-grid {
    grid-template-columns: repeat(5, 160px);
  }
}

/* ---- Injury report ---- */

.gm-injury-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
}

.gm-injury-row {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.55rem 0;
  border-bottom: 1px solid var(--gm-line);
  font-size: 0.86rem;
}

.gm-injury-row:last-child {
  border-bottom: none;
}

.gm-injury-pos {
  flex-shrink: 0;
  width: 32px;
  text-align: center;
  font-size: 0.68rem;
  font-weight: 800;
  letter-spacing: 0.03em;
  color: var(--gm-muted-2);
  background: var(--gm-panel-2);
  border: 1px solid var(--gm-line);
  border-radius: 4px;
  padding: 0.15rem 0;
}

.gm-injury-name {
  color: var(--gm-ink);
  font-weight: 600;
  flex-shrink: 0;
}

.gm-injury-detail {
  color: var(--gm-muted);
  font-size: 0.8rem;
  margin-left: auto;
  text-align: right;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ---- My Teams ---- */

.gm-page-head-row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
  margin-bottom: 1.4rem;
}

.gm-back-link {
  display: inline-block;
  color: var(--gm-muted);
  text-decoration: none;
  font-size: 0.82rem;
  margin-bottom: 0.75rem;
}

.gm-back-link:hover {
  color: var(--gm-accent);
}

.gm-team-card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 1rem;
}

.gm-team-card {
  background: var(--gm-panel);
  border: 1px solid var(--gm-line);
  border-radius: 10px;
  padding: 1.1rem 1.25rem;
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
}

.gm-team-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.gm-team-card h2 {
  margin: 0.2rem 0 0;
  font-size: 1.05rem;
  color: var(--gm-ink);
}

.gm-team-card-league {
  margin: 0;
  color: var(--gm-muted);
  font-size: 0.82rem;
}

.gm-team-card-count {
  margin: 0 0 0.4rem;
  color: var(--gm-muted-2);
  font-size: 0.78rem;
}

.gm-team-card .gm-btn {
  align-self: flex-start;
}

.gm-icon-btn {
  width: 26px;
  height: 26px;
  border-radius: 6px;
  border: 1px solid var(--gm-line);
  background: transparent;
  color: var(--gm-muted);
  font-size: 1rem;
  line-height: 1;
  cursor: pointer;
}

.gm-icon-btn:hover {
  color: var(--gm-danger);
  border-color: var(--gm-danger);
}

.gm-player-search-results {
  margin-top: 0.75rem;
  border: 1px solid var(--gm-line);
  border-radius: 8px;
  max-height: 360px;
  overflow-y: auto;
  overflow-x: hidden;
}

.gm-player-search-row {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.5rem 0.75rem;
  border-bottom: 1px solid var(--gm-line);
}

.gm-player-search-row:last-child {
  border-bottom: none;
}

.gm-player-search-row .gm-player-name {
  flex: 1;
}

.gm-player-search-row .gm-btn {
  padding: 0.3rem 0.7rem;
  font-size: 0.75rem;
}

.gm-position-filter-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

.gm-position-filter-btn.active {
  background: var(--gm-accent-dim);
  border-color: var(--gm-accent);
  color: var(--gm-accent);
}

.gm-roster-row-empty td {
  color: var(--gm-muted-2);
  font-style: italic;
}

.gm-roster-table {
  min-width: 1280px;
}

.gm-roster-table .gm-stack-header {
  white-space: normal;
  line-height: 1.2;
  text-align: right;
  max-width: 44px;
}

.gm-roster-table .gm-stat-cell,
.gm-roster-table thead th:nth-child(n+8) {
  padding-left: 0.6rem;
  padding-right: 0.6rem;
  text-align: right;
}

.gm-roster-table .gm-stat-cell {
  color: var(--gm-muted);
  font-variant-numeric: tabular-nums;
}

.gm-roster-table .gm-actual-cell {
  color: var(--gm-accent);
  font-weight: 700;
}

.gm-weather-cell {
  text-align: center;
}

.gm-matchup-cell {
  white-space: nowrap;
}

.gm-matchup-time {
  color: var(--gm-muted);
  font-size: 0.78rem;
  margin-right: 0.3rem;
}

.gm-weather-icon {
  width: 18px;
  height: 18px;
  vertical-align: middle;
  opacity: 0.85;
  transition: opacity 0.1s ease;
}

.gm-weather-icon:hover {
  opacity: 1;
}

.gm-table-group-row th {
  color: var(--gm-muted-2);
  font-size: 0.66rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  text-align: center;
  padding: 0.3rem 0.5rem 0;
  border-bottom: none;
}

#gm-bench-zone {
  min-height: 2.5rem;
}

.gm-roster-row {
  cursor: grab;
}

.gm-roster-row.gm-dragging {
  opacity: 0.4;
}

.gm-roster-row-empty {
  cursor: default;
}

.gm-roster-row-empty td {
  border-bottom: 1px dashed var(--gm-line);
}

.gm-roster-slot-badge {
  display: inline-block;
  width: 40px;
  text-align: center;
  font-size: 0.65rem;
  font-weight: 800;
  letter-spacing: 0.03em;
  color: var(--gm-accent);
  background: var(--gm-accent-dim);
  border-radius: 4px;
  padding: 0.15rem 0;
}

.gm-roster-drag-cell {
  width: 1.5rem;
}

.gm-drag-handle {
  color: var(--gm-muted-2);
  font-size: 0.8rem;
  cursor: grab;
}

/* ---- Player notes modal ---- */

.gm-modal-backdrop {
  position: fixed;
  inset: 0;
  background: var(--gm-scrim);
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 100;
  padding: 1.5rem;
}

.gm-modal-backdrop:not([hidden]) {
  display: flex;
}

.gm-modal {
  position: relative;
  width: 100%;
  max-width: 480px;
  max-height: 85vh;
  overflow-y: auto;
  background: var(--gm-panel);
  border: 1px solid var(--gm-line);
  border-radius: 12px;
  padding: 1.5rem;
  box-shadow: var(--gm-shadow-float);
}

.gm-modal-close {
  position: absolute;
  top: 0.75rem;
  right: 0.75rem;
  width: 28px;
  height: 28px;
  border-radius: 6px;
  border: 1px solid var(--gm-line);
  background: var(--gm-panel-2);
  color: var(--gm-muted);
  font-size: 1.1rem;
  line-height: 1;
  cursor: pointer;
}

.gm-modal-close:hover {
  color: var(--gm-ink);
  border-color: var(--gm-accent);
}

.gm-modal-header {
  display: flex;
  align-items: center;
  gap: 0.85rem;
  margin-bottom: 1.1rem;
  padding-right: 1.5rem;
}

.gm-modal-header .gm-team-badge {
  width: 40px;
  height: 40px;
  font-size: 0.85rem;
  flex-shrink: 0;
}

.gm-modal-title {
  font-size: 1.2rem;
  font-weight: 700;
  color: var(--gm-ink);
}

.gm-modal-meta {
  color: var(--gm-muted);
  font-size: 0.82rem;
  margin-top: 0.15rem;
}

.gm-modal-summary {
  color: var(--gm-ink);
  font-size: 0.9rem;
  line-height: 1.55;
  margin: 0 0 1rem;
}

.gm-modal-bullets {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.gm-modal-bullets li {
  background: var(--gm-panel-2);
  border: 1px solid var(--gm-line);
  border-radius: 8px;
  padding: 0.55rem 0.75rem;
  font-size: 0.82rem;
  color: var(--gm-muted);
  line-height: 1.4;
}

/* ---- Admin page ---- */

.gm-admin-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.25rem;
  align-items: start;
}

.gm-admin-grid.gm-admin-grid-3 {
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  margin-top: 1.25rem;
}

@media (max-width: 1100px) {
  .gm-admin-grid {
    grid-template-columns: 1fr;
  }
}

.gm-card {
  background: var(--gm-panel);
  border: 1px solid var(--gm-line);
  border-radius: 10px;
  padding: 1.25rem 1.4rem;
}

.gm-card-highlight {
  border-color: var(--gm-accent);
  border-width: 2px;
}

.gm-card h2 {
  margin: 0 0 0.6rem;
  font-size: 1rem;
  color: var(--gm-accent);
}

.gm-card h3 {
  margin: 1.1rem 0 0.5rem;
  font-size: 0.85rem;
  color: var(--gm-ink);
}

.gm-card p {
  color: var(--gm-muted);
  font-size: 0.85rem;
  margin: 0 0 0.6rem;
}

.gm-card ul,
.gm-card ol {
  margin: 0 0 0.6rem;
  padding-left: 1.25rem;
  color: var(--gm-muted);
  font-size: 0.85rem;
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
}

.gm-card ul code,
.gm-card ol code {
  color: var(--gm-ink);
  background: var(--gm-panel-2);
  border-radius: 4px;
  padding: 0.05rem 0.3rem;
  font-size: 0.8rem;
}

.gm-card hr {
  border: none;
  border-top: 1px solid var(--gm-line);
  margin: 1.1rem 0;
}

.gm-checkline {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  color: var(--gm-muted);
  font-size: 0.85rem;
  margin-right: 1.25rem;
}

.gm-checkline input {
  accent-color: var(--gm-accent);
}

.gm-actions-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  margin: 0.9rem 0;
}

.gm-btn {
  border-radius: 7px;
  padding: 0.55rem 0.9rem;
  font-size: 0.82rem;
  font-weight: 700;
  cursor: pointer;
  border: 1px solid var(--gm-line);
  background: var(--gm-panel-2);
  color: var(--gm-ink);
}

.gm-btn:hover {
  border-color: var(--gm-accent);
}

.gm-btn:disabled {
  opacity: 0.5;
  cursor: default;
}

.gm-btn-primary {
  background: var(--gm-accent);
  border-color: var(--gm-accent);
  color: var(--gm-on-accent);
}

.gm-btn-primary:hover {
  background: var(--gm-accent-hover);
  border-color: var(--gm-accent-hover);
}

.gm-btn-ghost {
  background: transparent;
}

.gm-status-line {
  margin-top: 0.6rem;
  font-size: 0.82rem;
  color: var(--gm-muted);
}

.gm-pre {
  background: var(--gm-panel-2);
  border: 1px solid var(--gm-line);
  border-radius: 8px;
  padding: 0.85rem 1rem;
  font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
  font-size: 0.78rem;
  color: var(--gm-ink);
  white-space: pre-wrap;
  word-break: break-word;
  max-height: 360px;
  overflow-y: auto;
  margin: 0;
}

.gm-release-form {
  display: flex;
  flex-direction: column;
  gap: 0.8rem;
  margin-top: 1rem;
}

/* Admin page usability pass (2026-09-09): plain-language run results + a clear
   step-by-step order, replacing raw JSON dumps everywhere they used to appear. */
.gm-step-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 1.4rem;
  height: 1.4rem;
  padding: 0 0.4rem;
  border-radius: 999px;
  background: var(--gm-accent-dim);
  color: var(--gm-accent);
  font-size: 0.75rem;
  font-weight: 700;
  margin-right: 0.5rem;
}

.gm-card-lead {
  color: var(--gm-muted);
  font-size: 0.82rem;
  margin: 0 0 1rem;
  line-height: 1.5;
}

.gm-oncold {
  border-color: var(--gm-warn);
}

.gm-oncold summary {
  cursor: pointer;
  list-style: none;
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 1rem;
  color: var(--gm-accent);
  font-weight: 600;
}

.gm-oncold summary::-webkit-details-marker { display: none; }

.gm-oncold summary::before {
  content: "\25B8";
  color: var(--gm-muted);
  transition: transform 0.12s ease;
}

.gm-oncold[open] summary::before {
  transform: rotate(90deg);
}

.gm-hold-pill {
  display: inline-flex;
  align-items: center;
  padding: 0.15rem 0.55rem;
  border-radius: 999px;
  background: var(--gm-warn-dim);
  color: var(--gm-warn);
  font-size: 0.68rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin-left: 0.6rem;
}

.gm-next-step {
  display: flex;
  align-items: flex-start;
  gap: 0.6rem;
  margin-top: 0.9rem;
  padding: 0.75rem 0.9rem;
  border-radius: 8px;
  background: var(--gm-accent-dim);
  border: 1px solid var(--gm-accent);
  color: var(--gm-ink);
  font-size: 0.85rem;
}

.gm-next-step.gm-next-step-error {
  background: var(--gm-danger-dim);
  border-color: var(--gm-danger);
}

.gm-next-step.gm-next-step-warn {
  background: var(--gm-warn-dim);
  border-color: var(--gm-warn);
}

.gm-next-step.gm-next-step-done {
  background: var(--gm-good-dim);
  border-color: var(--gm-good);
}

.gm-next-step-icon {
  flex-shrink: 0;
  font-weight: 700;
}

.gm-run-list {
  display: flex;
  flex-direction: column;
  gap: 0.55rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.gm-run-list li {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 0.75rem;
  padding-bottom: 0.55rem;
  border-bottom: 1px solid var(--gm-line);
  font-size: 0.82rem;
}

.gm-run-list li:last-child {
  border-bottom: none;
  padding-bottom: 0;
}

.gm-run-list .gm-run-main {
  color: var(--gm-ink);
  font-weight: 600;
}

.gm-run-list .gm-run-meta {
  color: var(--gm-muted-2);
  font-size: 0.75rem;
  white-space: nowrap;
}

.gm-status-pill-run {
  display: inline-flex;
  align-items: center;
  padding: 0.1rem 0.5rem;
  border-radius: 999px;
  font-size: 0.68rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  margin-right: 0.5rem;
}

.gm-status-pill-run.ok { background: var(--gm-good-dim); color: var(--gm-good); }
.gm-status-pill-run.bad { background: var(--gm-danger-dim); color: var(--gm-danger); }
.gm-status-pill-run.pending { background: var(--gm-warn-dim); color: var(--gm-warn); }

/* ---------- Player Profile (2026-09-18) ---------- */
.gm-text-good { color: var(--gm-good); }
.gm-text-danger { color: var(--gm-danger); }

.gm-kv-table { width: 100%; border-collapse: collapse; font-size: 0.85rem; }
.gm-kv-table td { padding: 0.4rem 0; border-bottom: 1px solid var(--gm-line); }
.gm-kv-table td:first-child { color: var(--gm-muted); width: 55%; }
.gm-kv-table td:last-child { color: var(--gm-ink); text-align: right; font-weight: 600; }
.gm-kv-table tr:last-child td { border-bottom: none; }

.gm-profile-two-col {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.25rem;
  margin-top: 1.25rem;
}
@media (max-width: 900px) {
  .gm-profile-two-col { grid-template-columns: 1fr; }
}

.gm-profile-caveat {
  font-size: 0.78rem;
  color: var(--gm-muted-2);
}

.gm-profile-headline-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 0.75rem;
}
@media (max-width: 700px) {
  .gm-profile-headline-grid { grid-template-columns: repeat(3, 1fr); }
}

.gm-profile-headline-stat {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  background: var(--gm-panel-2);
  border: 1px solid var(--gm-line);
  border-radius: 8px;
  padding: 0.7rem 0.6rem;
  text-align: center;
}

.gm-profile-headline-median {
  border-color: var(--gm-accent);
  background: var(--gm-accent-dim);
}

.gm-profile-headline-label {
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--gm-muted);
}

.gm-profile-headline-value {
  font-size: 1.3rem;
  font-weight: 700;
  color: var(--gm-ink);
}

.gm-profile-stat-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-top: 0.5rem;
}

.gm-profile-stat-chip {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  background: var(--gm-panel-2);
  border: 1px solid var(--gm-line);
  border-radius: 7px;
  padding: 0.45rem 0.65rem;
  min-width: 72px;
}

.gm-profile-stat-chip-label {
  font-size: 0.68rem;
  color: var(--gm-muted);
}

.gm-profile-stat-chip-value {
  font-size: 0.95rem;
  font-weight: 700;
  color: var(--gm-ink);
}

.gm-profile-roll-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
  margin-top: 0.5rem;
}
@media (max-width: 560px) {
  .gm-profile-roll-grid { grid-template-columns: 1fr; }
}

.gm-profile-roll-row {
  display: flex;
  justify-content: space-between;
  font-size: 0.82rem;
  padding: 0.3rem 0;
  border-bottom: 1px solid var(--gm-line);
  color: var(--gm-muted);
}
.gm-profile-roll-row span:last-child { color: var(--gm-ink); font-weight: 600; }

.gm-profile-attribution {
  display: flex;
  flex-direction: column;
  gap: 0.55rem;
}

.gm-profile-attribution-row {
  display: grid;
  grid-template-columns: 130px 1fr 56px;
  align-items: center;
  gap: 0.6rem;
  font-size: 0.8rem;
}

.gm-profile-attribution-label { color: var(--gm-muted); }

.gm-profile-attribution-bar-track {
  height: 8px;
  border-radius: 999px;
  background: var(--gm-panel-2);
  border: 1px solid var(--gm-line);
  overflow: hidden;
}

.gm-profile-attribution-bar {
  height: 100%;
  background: var(--gm-accent);
}

.gm-profile-attribution-delta {
  text-align: right;
  font-weight: 700;
}

/* ---------- Start / Sit (2026-09-18) ---------- */
.gm-startsit-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-top: 0.9rem;
  min-height: 1px;
}

.gm-startsit-chip {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  background: var(--gm-accent-dim);
  border: 1px solid var(--gm-accent);
  color: var(--gm-ink);
  border-radius: 999px;
  padding: 0.3rem 0.5rem 0.3rem 0.75rem;
  font-size: 0.82rem;
  font-weight: 600;
}

.gm-startsit-chip button {
  background: none;
  border: none;
  color: var(--gm-muted);
  cursor: pointer;
  font-size: 1rem;
  line-height: 1;
  padding: 0 0.2rem;
}

.gm-startsit-chip button:hover {
  color: var(--gm-danger);
}

.gm-startsit-differentiator {
  background: var(--gm-accent-dim);
  border: 1px solid var(--gm-accent);
  border-radius: 8px;
  padding: 0.75rem 1rem;
  color: var(--gm-ink);
  font-weight: 600;
  font-size: 0.9rem;
  margin: 0 0 1.1rem;
}

.gm-startsit-cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 1rem;
}

.gm-startsit-card {
  background: var(--gm-panel-2);
  border: 1px solid var(--gm-line);
  border-radius: 10px;
  padding: 1rem 1.1rem;
}

.gm-startsit-card-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4rem;
  margin-bottom: 0.6rem;
}

.gm-startsit-median {
  font-size: 1.8rem;
  font-weight: 700;
  color: var(--gm-accent);
  line-height: 1;
  display: flex;
  align-items: baseline;
  gap: 0.4rem;
}

.gm-startsit-median-label {
  font-size: 0.7rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--gm-muted);
}

.gm-startsit-range {
  font-size: 0.8rem;
  color: var(--gm-muted);
  margin: 0.3rem 0 0.7rem;
}

.gm-startsit-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 0.8rem;
  padding: 0.35rem 0;
  border-top: 1px solid var(--gm-line);
  color: var(--gm-muted);
}

.gm-startsit-arrow {
  font-weight: 700;
  color: var(--gm-ink);
}

.gm-startsit-arrow-up { color: var(--gm-good); }
.gm-startsit-arrow-down { color: var(--gm-danger); }
.gm-startsit-arrow-flat { color: var(--gm-muted); }

/* ==========================================================================
   Lineup (My Team) page - Lineup Wireframe Spec v1.
   Open list, not per-player cards (Visual System 8/11); one signal per row;
   detail lives in row expansion; swaps + optimize review live in a drawer.
   ========================================================================== */

.gm-visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

.gm-btn { box-sizing: border-box; }
.gm-btn-small { padding: 0.3rem 0.75rem; font-size: 0.78rem; }
.gm-btn-large { padding: 0.65rem 1.25rem; font-size: 0.92rem; border-radius: 8px; }
.gm-btn:focus-visible,
.gm-link:focus-visible,
.gm-lineup-row:focus-visible,
.gm-option:focus-visible,
.gm-rail-item:focus-visible {
  outline: 2px solid var(--gm-accent);
  outline-offset: 2px;
}

.gm-link {
  background: none;
  border: 0;
  padding: 0;
  font: inherit;
  font-weight: 600;
  color: var(--gm-accent);
  cursor: pointer;
  text-decoration: none;
}
.gm-link:hover { color: var(--gm-accent-hover); text-decoration: underline; }

.gm-count-chip {
  display: inline-block;
  min-width: 1.6rem;
  padding: 0.1rem 0.5rem;
  border-radius: 999px;
  background: var(--gm-neutral-dim);
  color: var(--gm-muted);
  font-size: 0.72rem;
  font-weight: 600;
  text-align: center;
}

/* ---- league header + workspace tabs ---- */
.gm-league-bar {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 1.5rem;
  border-bottom: 1px solid var(--gm-line);
  margin-bottom: 1.5rem;
}
.gm-league-ident { padding-bottom: 0.75rem; }
.gm-league-name { margin: 0.25rem 0 0; font-size: 1.15rem; font-weight: 700; }
.gm-league-sub { margin: 0.1rem 0 0; font-size: 0.82rem; color: var(--gm-muted); }
.gm-league-tabs { display: flex; gap: 1.5rem; overflow-x: auto; }
.gm-league-tabs a {
  padding: 0.6rem 0.1rem;
  color: var(--gm-muted);
  font-weight: 600;
  font-size: 0.9rem;
  text-decoration: none;
  border-bottom: 2px solid transparent;
  white-space: nowrap;
}
.gm-league-tabs a.active { color: var(--gm-accent); border-bottom-color: var(--gm-accent); }
.gm-league-tabs a.gm-nav-placeholder { opacity: 0.55; pointer-events: none; }

/* ---- status strip ---- */
.gm-lineup-status {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
  flex-wrap: wrap;
  background: var(--gm-panel);
  border: 1px solid var(--gm-line);
  border-radius: 12px;
  padding: 1rem 1.5rem;
  margin-bottom: 1.5rem;
}
.gm-status-figures { display: flex; gap: 2.5rem; flex-wrap: wrap; }
.gm-figure { display: flex; flex-direction: column; gap: 0.15rem; }
.gm-figure-label { font-size: 0.75rem; font-weight: 600; color: var(--gm-muted); }
.gm-figure-value { font-size: 1.75rem; font-weight: 700; line-height: 1.1; font-variant-numeric: tabular-nums; }
.gm-figure-value.is-attn { color: var(--gm-warn); }
.gm-figure-value.is-risk { color: var(--gm-danger); }
.gm-status-cta { display: flex; flex-direction: column; align-items: flex-end; gap: 0.35rem; }
.gm-status-note { font-size: 0.82rem; color: var(--gm-muted); }
.gm-status-note.is-good { color: var(--gm-good); font-weight: 600; }

/* ---- 9/3 layout ---- */
.gm-lineup-grid {
  display: grid;
  grid-template-columns: minmax(0, 9fr) minmax(280px, 3fr);
  gap: 1.5rem;
  align-items: start;
}
.gm-lineup-main { display: flex; flex-direction: column; gap: 1.5rem; min-width: 0; }
.gm-lineup-card {
  background: var(--gm-panel);
  border: 1px solid var(--gm-line);
  border-radius: 12px;
  overflow: hidden;
}
.gm-lineup-card-head {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.9rem 1.25rem;
  border-bottom: 1px solid var(--gm-line);
}
.gm-lineup-card-head h2 { margin: 0; font-size: 1rem; font-weight: 600; }

/* ---- table ---- */
.gm-lineup-table { width: 100%; border-collapse: collapse; }
.gm-lineup-table thead th {
  background: var(--gm-panel-2);
  padding: 0.55rem 1rem;
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--gm-muted);
  text-align: left;
  border-bottom: 1px solid var(--gm-line);
}
.gm-lineup-table td { padding: 0.6rem 1rem; border-bottom: 1px solid var(--gm-line); font-size: 0.86rem; vertical-align: middle; }
.gm-lineup-table tbody tr:last-child td { border-bottom: 0; }
.gm-lineup-row { cursor: pointer; }
.gm-lineup-row:hover,
.gm-lineup-row.is-open { background: var(--gm-hover); }
.gm-lineup-row.is-out { background: var(--gm-danger-dim); }
.gm-lineup-row.is-locked .gm-col-proj strong { color: var(--gm-muted); }
.gm-lineup-table .gm-col-proj,
.gm-lineup-table .gm-col-range { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.gm-lineup-table .gm-col-proj strong { font-size: 0.95rem; font-weight: 700; }
.gm-lineup-table .gm-col-slot { width: 64px; }
.gm-lineup-table .gm-col-action { text-align: right; white-space: nowrap; width: 110px; }
.gm-lineup-sub { display: block; font-size: 0.72rem; color: var(--gm-muted); }
.gm-col-opp { white-space: nowrap; }

.gm-slot-badge {
  display: inline-block;
  min-width: 2.6rem;
  padding: 0.2rem 0.4rem;
  border: 1px solid var(--gm-line);
  border-radius: 6px;
  background: var(--gm-panel-2);
  font-size: 0.72rem;
  font-weight: 700;
  text-align: center;
}
.gm-lineup-table-bench .gm-slot-badge { color: var(--gm-muted); }

.gm-lineup-player { display: flex; align-items: center; gap: 0.65rem; }
.gm-lineup-player .gm-team-badge { width: 30px; height: 30px; font-size: 0.66rem; }
.gm-lineup-id { display: flex; flex-direction: column; min-width: 0; }
.gm-lineup-meta { font-size: 0.75rem; color: var(--gm-muted); }
.gm-lineup-opp-inline,
.gm-lineup-signal-inline { display: none; }

.gm-chevron {
  display: inline-block;
  width: 0.45rem;
  height: 0.45rem;
  margin-left: 0.6rem;
  border-right: 2px solid var(--gm-muted);
  border-bottom: 2px solid var(--gm-muted);
  transform: rotate(45deg);
  transition: transform 0.15s;
  vertical-align: 0.1rem;
}
.gm-lineup-row.is-open .gm-chevron { transform: rotate(-135deg); }

.gm-lineup-empty td { background: var(--gm-panel-2); }
.gm-lineup-empty-text { color: var(--gm-muted); font-style: italic; }

/* ---- signal pills (Visual System 13): soft fill + darkened text, text always present ---- */
.gm-signal {
  display: inline-block;
  padding: 0.15rem 0.65rem;
  border-radius: 999px;
  font-size: 0.75rem;
  font-weight: 600;
  white-space: nowrap;
}
.gm-signal-good { background: var(--gm-good-dim); color: var(--gm-good); }
.gm-signal-warn { background: var(--gm-warn-dim); color: var(--gm-warn); }
.gm-signal-danger { background: var(--gm-danger-dim); color: var(--gm-danger); }
.gm-signal-info { background: var(--gm-info-dim); color: var(--gm-info); }
.gm-signal-neutral { background: var(--gm-neutral-dim); color: var(--gm-muted); }

/* ---- row detail ---- */
.gm-lineup-detail td { background: var(--gm-panel-2); padding: 1rem 1.25rem; }
.gm-detail-grid { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 2rem; }
.gm-detail-title { margin: 0 0 0.5rem; font-size: 0.85rem; font-weight: 700; }
.gm-detail-metrics { display: flex; flex-wrap: wrap; gap: 0.5rem 2rem; margin: 0 0 0.75rem; }
.gm-detail-metrics dt { font-size: 0.72rem; font-weight: 600; color: var(--gm-muted); }
.gm-detail-metrics dd { margin: 0; font-size: 1.1rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.gm-detail-stats { display: flex; flex-wrap: wrap; gap: 0.35rem 1rem; margin: 0 0 0.5rem; font-size: 0.82rem; }
.gm-detail-label { font-size: 0.72rem; font-weight: 600; color: var(--gm-muted); }
.gm-detail-stat span { color: var(--gm-muted); }
.gm-detail-note { margin: 0.25rem 0 0; font-size: 0.82rem; color: var(--gm-muted); }
.gm-detail-context p { margin: 0 0 0.75rem; font-size: 0.86rem; line-height: 1.5; }
.gm-detail-links { display: flex; gap: 1.25rem; flex-wrap: wrap; font-size: 0.82rem; }
.gm-detail-links .gm-remove-player-btn { color: var(--gm-muted); font-weight: 500; }
.gm-detail-links .gm-remove-player-btn:hover { color: var(--gm-danger); }

/* ---- right rail ---- */
.gm-lineup-rail {
  position: sticky;
  top: 5rem;
  background: var(--gm-panel);
  border: 1px solid var(--gm-line);
  border-radius: 12px;
  padding: 1rem 1.1rem;
}
.gm-rail-title { margin: 0 0 0.5rem; font-size: 1rem; font-weight: 700; }
.gm-rail-section { padding: 0.85rem 0; border-top: 1px solid var(--gm-line); }
.gm-rail-title + .gm-rail-section { border-top: 0; padding-top: 0.25rem; }
.gm-rail-section h3 { display: flex; align-items: center; gap: 0.5rem; margin: 0 0 0.6rem; font-size: 0.85rem; font-weight: 700; }
.gm-rail-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.5rem; }
.gm-rail-item {
  display: flex;
  gap: 0.6rem;
  align-items: flex-start;
  width: 100%;
  padding: 0.55rem 0.6rem;
  border: 1px solid var(--gm-line);
  border-left-width: 3px;
  border-radius: 8px;
  background: var(--gm-panel);
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.gm-rail-item:hover { background: var(--gm-hover); }
.gm-rail-item-info { border-left-color: var(--gm-info); }
.gm-rail-item-warn { border-left-color: var(--gm-warn); }
.gm-rail-item-danger { border-left-color: var(--gm-danger); }
.gm-rail-slot { flex: none; padding: 0.1rem 0.4rem; border-radius: 5px; background: var(--gm-panel-2); font-size: 0.68rem; font-weight: 700; }
.gm-rail-text { display: flex; flex-direction: column; font-size: 0.82rem; }
.gm-rail-text span { color: var(--gm-muted); font-size: 0.78rem; }
/* Decision Center v2 rail rows: the facts, then one button (Compare / Review / Player) */
.gm-rail-decision { display: flex; flex-direction: column; gap: 0.45rem; padding: 0.6rem 0.7rem; border: 1px solid var(--gm-line); border-radius: 8px; }
.gm-rail-decision .gm-decision-btn { align-self: flex-start; }
.gm-rail-decision-watch { border-style: dashed; }
.gm-rail-more,
.gm-rail-muted,
.gm-rail-empty { margin: 0.4rem 0 0; font-size: 0.8rem; color: var(--gm-muted); }
.gm-rail-big { margin: 0; font-size: 1.6rem; font-weight: 700; color: var(--gm-good); font-variant-numeric: tabular-nums; }
.gm-rail-big span { font-size: 0.8rem; font-weight: 500; color: var(--gm-muted); }
.gm-watch-item { display: grid; grid-template-columns: 1fr auto; gap: 0 0.5rem; font-size: 0.85rem; }
.gm-watch-name { font-weight: 600; }
.gm-watch-proj { font-weight: 700; font-variant-numeric: tabular-nums; }
.gm-watch-detail { grid-column: 1 / -1; font-size: 0.78rem; color: var(--gm-muted); }

/* ---- add player ---- */
.gm-add-card { margin-top: 1.5rem; }
.gm-add-body { padding: 1rem 1.25rem 1.25rem; }
.gm-add-body .gm-position-filter-row { margin-bottom: 0.75rem; }
.gm-add-body .gm-field input { width: 100%; max-width: 420px; }

/* ---- drawer: right panel on desktop, bottom sheet on mobile ---- */
.gm-drawer-scrim { position: fixed; inset: 0; background: var(--gm-scrim); z-index: 90; }
.gm-drawer-scrim[hidden] { display: none; }
.gm-drawer {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  width: min(440px, 100vw);
  display: flex;
  flex-direction: column;
  background: var(--gm-panel);
  border-left: 1px solid var(--gm-line);
  box-shadow: var(--gm-shadow-float);
  z-index: 100;
}
.gm-drawer[hidden] { display: none; }
.gm-drawer-head { display: flex; justify-content: space-between; gap: 1rem; padding: 1.1rem 1.25rem; border-bottom: 1px solid var(--gm-line); }
.gm-drawer-head h2 { margin: 0; font-size: 1.05rem; }
.gm-drawer-sub { margin: 0.2rem 0 0; font-size: 0.8rem; color: var(--gm-muted); }
.gm-drawer-body { flex: 1; overflow-y: auto; padding: 1rem 1.25rem; }
.gm-drawer-foot { display: flex; flex-direction: row-reverse; gap: 0.6rem; padding: 0.9rem 1.25rem; border-top: 1px solid var(--gm-line); }
.gm-drawer-empty { color: var(--gm-muted); font-size: 0.9rem; line-height: 1.5; }
/* Swap drawer roster actions (owner 10-27): Move to IR / Activate / Drop */
.gm-drawer-actions { margin-top: 1.1rem; padding-top: 0.9rem; border-top: 1px solid var(--gm-line); }
.gm-drawer-actions h3 { margin: 0 0 0.55rem; font-size: 0.82rem; color: var(--gm-muted); text-transform: uppercase; letter-spacing: 0.04em; }
.gm-drawer-actions-row { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.gm-btn.gm-btn-danger-text { color: var(--gm-danger); }
.gm-btn.gm-btn-danger { background: var(--gm-danger); border-color: var(--gm-danger); color: #fff; }
.gm-btn.gm-btn-danger:hover:not(:disabled) { filter: brightness(0.92); }
.gm-drop-ask { margin: 0.7rem 0 0; color: var(--gm-danger); font-weight: 600; font-size: 0.9rem; }
.gm-drawer-note { font-size: 0.78rem; color: var(--gm-muted); }

.gm-option-list { display: flex; flex-direction: column; gap: 0.6rem; }
.gm-option {
  display: block;
  width: 100%;
  padding: 0.75rem 0.9rem;
  border: 1px solid var(--gm-line-control);
  border-radius: 10px;
  background: var(--gm-panel);
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.gm-option:hover { background: var(--gm-hover); }
.gm-option.is-selected { border-color: var(--gm-accent); box-shadow: 0 0 0 1px var(--gm-accent); background: var(--gm-accent-dim); }
.gm-option-top { display: flex; justify-content: space-between; gap: 0.75rem; }
.gm-option-proj { font-weight: 700; font-variant-numeric: tabular-nums; }
.gm-option-meta,
.gm-option-range { font-size: 0.78rem; color: var(--gm-muted); font-variant-numeric: tabular-nums; }
.gm-option-lean { margin-top: 0.35rem; font-size: 0.8rem; font-weight: 600; color: var(--gm-info); }
.gm-option-lean.is-neutral { color: var(--gm-muted); }
.gm-compare { margin-top: 1rem; }
.gm-compare h3 { margin: 0 0 0.35rem; font-size: 0.95rem; }
.gm-compare p { margin: 0 0 0.4rem; font-size: 0.85rem; line-height: 1.5; }
.gm-compare-warn { color: var(--gm-warn); font-weight: 600; }

.gm-opt-total { display: flex; align-items: baseline; gap: 0.6rem; margin-bottom: 1rem; color: var(--gm-muted); font-size: 0.85rem; }
.gm-opt-gain { font-size: 2rem; font-weight: 700; color: var(--gm-good); font-variant-numeric: tabular-nums; }
.gm-opt-changes { list-style: none; margin: 0 0 1rem; padding: 0; display: flex; flex-direction: column; gap: 0.5rem; }
.gm-opt-change {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.6rem 0.8rem;
  border: 1px solid var(--gm-line);
  border-left: 3px solid var(--gm-accent);
  border-radius: 8px;
  font-size: 0.86rem;
}
.gm-opt-sit { border-left-color: var(--gm-line-control); }
.gm-opt-move { border-left-color: var(--gm-info); }
.gm-opt-proj { color: var(--gm-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }

/* ---- responsive ---- */
@media (max-width: 1100px) {
  .gm-lineup-grid { grid-template-columns: minmax(0, 1fr); }
  .gm-lineup-rail { position: static; }
  .gm-detail-grid { grid-template-columns: 1fr; gap: 1rem; }
}

@media (max-width: 760px) {
  .gm-main { padding: 1rem 1rem 2.5rem; }
  .gm-league-bar { flex-direction: column; align-items: stretch; gap: 0; }
  .gm-league-tabs { gap: 1.25rem; margin: 0 -1rem; padding: 0 1rem; }
  .gm-lineup-status { padding: 0.9rem 1rem; }
  .gm-status-figures { gap: 1.25rem 1.5rem; }
  .gm-figure-value { font-size: 1.4rem; }
  .gm-status-cta { align-items: stretch; width: 100%; }
  .gm-status-cta .gm-btn { width: 100%; min-height: 44px; }
  .gm-status-note { text-align: center; }

  /* rows: slot | player (+ opp and signal beneath) | proj | action - no table header */
  .gm-lineup-table thead { display: none; }
  .gm-lineup-table td { padding: 0.65rem 0.5rem; }
  .gm-lineup-table .gm-col-slot { width: 44px; padding-left: 0.75rem; }
  .gm-lineup-table .gm-col-opp,
  .gm-lineup-table .gm-col-range,
  .gm-lineup-table .gm-col-signal { display: none; }
  .gm-lineup-opp-inline { display: inline; }
  .gm-lineup-signal-inline { display: block; margin-top: 0.3rem; }
  .gm-lineup-player .gm-team-badge { display: none; }
  .gm-slot-badge { min-width: 2.2rem; }
  .gm-lineup-table .gm-col-action { width: auto; padding-right: 0.75rem; }
  .gm-chevron { display: none; }
  .gm-btn-small { min-height: 36px; }

  .gm-drawer {
    top: auto;
    left: 0;
    right: 0;
    width: auto;
    max-height: 85vh;
    border-left: 0;
    border-top: 1px solid var(--gm-line);
    border-radius: 16px 16px 0 0;
  }
  .gm-drawer-foot { flex-direction: column; }
  .gm-drawer-foot .gm-btn { min-height: 44px; }
}

/* ==========================================================================
   Global nav (Shell doc): Logo | Draft Tools | In-Season | My Leagues | Intelligence ... ? | account.
   Wide menus use columns; the right-hand menus anchor to their trigger's right edge so they
   never spill off-screen. Mobile swaps the whole thing for a bottom nav + bottom sheet.
   ========================================================================== */

.gm-topbar-utils { display: flex; align-items: center; gap: 0.6rem; }

/* Help (?) and account (initials) are round buttons, not text links. */
.gm-nav-dropdown-trigger.gm-util-btn,
.gm-nav-dropdown-trigger.gm-avatar {
  width: 34px;
  height: 34px;
  padding: 0;
  gap: 0;
  justify-content: center;
  border: 1px solid var(--gm-line-control);
  border-radius: 50%;
  background: var(--gm-panel);
  color: var(--gm-muted);
  font-family: inherit;
  font-weight: 700;
  cursor: pointer;
}
.gm-nav-dropdown-trigger.gm-util-btn { font-size: 0.95rem; }
.gm-nav-dropdown-trigger.gm-avatar { font-size: 0.75rem; background: var(--gm-panel-2); border-color: var(--gm-line); }
.gm-nav-dropdown-trigger.gm-util-btn:hover,
.gm-nav-dropdown-trigger.gm-avatar:hover,
.gm-nav-dropdown.open .gm-nav-dropdown-trigger.gm-util-btn,
.gm-nav-dropdown.open .gm-nav-dropdown-trigger.gm-avatar { color: var(--gm-ink); border-color: var(--gm-ink); }
.gm-nav-dropdown.active .gm-nav-dropdown-trigger.gm-util-btn,
.gm-nav-dropdown.active .gm-nav-dropdown-trigger.gm-avatar { color: var(--gm-accent); border-color: var(--gm-accent); }
.gm-nav-dropdown-trigger.gm-util-btn:focus-visible,
.gm-nav-dropdown-trigger.gm-avatar:focus-visible,
.gm-nav-dropdown-trigger:focus-visible { outline: 2px solid var(--gm-accent); outline-offset: 2px; }

.gm-menu-right { left: auto; right: 0; transform: none; }

.gm-nav-dropdown.open .gm-nav-dropdown-menu.gm-menu-cols {
  display: grid;
  grid-template-columns: repeat(var(--cols, 2), minmax(190px, 1fr));
  gap: 0 1rem;
  padding: 0.6rem;
}
.gm-menu-col { display: flex; flex-direction: column; gap: 0.1rem; }

.gm-league-link { display: flex; justify-content: space-between; align-items: baseline; gap: 1.25rem; }
.gm-league-link-sub { font-size: 0.74rem; font-weight: 500; color: var(--gm-muted-2); }
.gm-menu-identity { padding: 0.5rem 0.7rem 0.3rem; font-size: 0.9rem; }

/* ---- mobile: bottom nav + sheet (hidden on desktop) ---- */
.gm-bottomnav,
.gm-sheet,
.gm-sheet-scrim { display: none; }

.gm-sheet-scrim { position: fixed; inset: 0; background: var(--gm-scrim); z-index: 110; }
.gm-sheet {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  max-height: 80vh;
  flex-direction: column;
  background: var(--gm-panel);
  border-top: 1px solid var(--gm-line);
  border-radius: 16px 16px 0 0;
  box-shadow: var(--gm-shadow-float);
  z-index: 120;
}
.gm-sheet-head { display: flex; justify-content: space-between; align-items: center; padding: 0.9rem 1.25rem; border-bottom: 1px solid var(--gm-line); }
.gm-sheet-head h2 { margin: 0 auto 0 0; font-size: 1.05rem; }
.gm-sheet-back { margin-right: 0.5rem; font-size: 1.5rem; line-height: 1; }
.gm-sheet-back[hidden] { display: none; }
/* More: a short list you tap into (owner 10-30) */
.gm-sheet-drill { list-style: none; margin: 0; padding: 0; }
.gm-sheet-drill button { box-sizing: border-box; display: grid; grid-template-columns: 1fr auto; column-gap: 0.75rem; width: 100%; min-height: 60px;
  padding: 0.7rem 0.5rem; border: 0; border-bottom: 1px solid var(--gm-line); background: none; text-align: left; font: inherit; color: var(--gm-ink);
  cursor: pointer; -webkit-tap-highlight-color: transparent; }
.gm-sheet-drill button:active { background: color-mix(in srgb, var(--gm-muted) 10%, transparent); }
.gm-sheet-drill button::after { content: ""; grid-column: 2; grid-row: 1 / span 2; align-self: center; width: 0.5rem; height: 0.5rem;
  border-right: 2px solid var(--gm-muted); border-bottom: 2px solid var(--gm-muted); transform: rotate(-45deg); }
.gm-sheet-drill-name { grid-column: 1; font-size: 1.05rem; font-weight: 600; }
.gm-sheet-drill-hint { grid-column: 1; font-size: 0.82rem; color: var(--gm-muted); }
.gm-sheet-body { overflow-y: auto; padding: 0.25rem 1rem calc(1.25rem + env(safe-area-inset-bottom)); }
.gm-sheet .gm-nav-dropdown-menu {
  display: flex;
  position: static;
  transform: none;
  min-width: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  background: none;
}
.gm-sheet .gm-nav-dropdown-menu.gm-menu-cols { display: block; }
.gm-sheet .gm-menu-col { display: flex; flex-direction: column; }
.gm-sheet .gm-nav-dropdown-menu a { box-sizing: border-box; display: flex; align-items: center; min-height: 44px; padding: 0.4rem 0.5rem; font-size: 1rem;
  color: var(--gm-ink); border-radius: 0; border-bottom: 1px solid var(--gm-line); }
.gm-sheet .gm-nav-dropdown-menu a.active { color: var(--gm-accent); }
/* round 2 (owner 10-30): a pressed link is light gray, so it never looks like a green sub-label band */
.gm-sheet .gm-nav-dropdown-menu a:hover, .gm-sheet .gm-nav-dropdown-menu a:active { background: color-mix(in srgb, var(--gm-muted) 10%, transparent); color: var(--gm-ink); }
.gm-sheet .gm-nav-dropdown-menu a { -webkit-tap-highlight-color: transparent; }
.gm-sheet hr.gm-nav-dropdown-divider { display: none; }   /* the links' own separators do this on phones; the rule read as an empty row */
/* sub-labels (Players / Teams / Games): a sage band, semibold, not tappable (owner 10-30: the brand green read as top-level) */
.gm-sheet .gm-nav-dropdown-group { margin: 0.75rem -1rem 0; padding: 0.5rem 1.5rem; opacity: 1; background: var(--gm-hover);
  color: var(--gm-muted); font-size: 0.85rem; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; }
.gm-sheet .gm-nav-dropdown-group:first-child { margin-top: 0.25rem; }
.gm-sheet .gm-league-link { justify-content: space-between; }

@media (max-width: 900px) {
  .gm-topbar { padding: calc(0.55rem + env(safe-area-inset-top)) 1rem 0.55rem; }
  .gm-topnav,
  .gm-help-dropdown { display: none; }

  .gm-bottomnav {
    display: flex;
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 40;
    background: var(--gm-panel);
    border-top: 1px solid var(--gm-line);
    padding: 0 env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);   /* needs viewport-fit=cover (item 222) */
  }
  .gm-tab {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    min-height: 56px;
    background: none;
    border: 0;
    color: var(--gm-muted);
    font: inherit;
    font-size: 0.68rem;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
  }
  .gm-tab svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
  .gm-tab.active { color: var(--gm-accent); }
  .gm-tab:focus-visible { outline: 2px solid var(--gm-accent); outline-offset: -2px; }

  .gm-main { padding-bottom: calc(5.5rem + env(safe-area-inset-bottom)); }
  .gm-sheet-scrim:not([hidden]) { display: block; }
  .gm-sheet:not([hidden]) { display: flex; }
}

@media (max-width: 760px) {
  .gm-page-head-row { flex-direction: column; align-items: flex-start; gap: 0.75rem; }
}

/* ==========================================================================
   Home dashboard (Home Dashboard Blueprint). Three surface types only:
   A = bordered panel (Decision Center, This Week), B = object card (league cards),
   C = list section (Model Intelligence, Players to Watch). 1360px max width, 12-col / 24px grid.
   ========================================================================== */

.gm-only-mobile { display: none !important; }

.gm-eyebrow {
  margin: 0;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--gm-muted);
}

.gm-home { max-width: 1360px; margin: 0 auto; }
.gm-home-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 1.5rem; margin-bottom: 1.5rem; }
.gm-home-title { margin: 0.15rem 0 0.25rem; font-size: 1.75rem; font-weight: 700; }
.gm-home-sub { margin: 0; font-size: 0.95rem; color: var(--gm-muted); }
.gm-home-selector { display: flex; flex-direction: column; align-items: flex-end; gap: 0.35rem; }
.gm-home-selector select {
  box-sizing: border-box;
  min-height: 40px;
  padding: 0.45rem 0.75rem;
  border: 1px solid var(--gm-line-control);
  border-radius: 8px;
  background: var(--gm-panel);
  color: var(--gm-ink);
  font: inherit;
  font-size: 0.88rem;
}
.gm-updated { font-size: 0.75rem; color: var(--gm-muted-2); }

/* ---- early-game banner (Home Dashboard Revamp step 3): inactive red, needs attention amber, game day neutral with a check,
   upcoming quieter ---- */
.gm-early { display: flex; justify-content: space-between; align-items: flex-start; gap: 1.25rem; margin: 0 0 1.5rem; padding: 1rem 1.25rem;
  border: 1px solid var(--gm-line); border-left-width: 4px; border-radius: 12px; background: var(--gm-panel); }
.gm-early[hidden] { display: none; }
.gm-early-inactive { border-color: var(--gm-danger); background: var(--gm-danger-dim); }
.gm-early-attention { border-color: var(--gm-warn); background: var(--gm-warn-dim); }
.gm-early-game_day { border-color: var(--gm-good); }
.gm-early-upcoming { border-left-color: var(--gm-line-control); }
.gm-early-main { display: flex; flex-direction: column; gap: 0.35rem; min-width: 0; }
.gm-early-head { margin: 0; font-size: 1rem; }
.gm-early-countdown[hidden], .gm-early-sub[hidden] { display: none; }
.gm-early-countdown:not([hidden]) + .gm-early-status::before { content: " \00B7  "; }
.gm-early-status { font-weight: 600; color: var(--gm-ink); }
.gm-early-sub { margin: 0; font-size: 0.86rem; color: var(--gm-muted); }
.gm-early-chips { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 0.35rem 0 0; padding: 0; list-style: none; }
.gm-early-chip { display: inline-flex; align-items: center; gap: 0.45rem; padding: 0.35rem 0.6rem; border: 1px solid var(--gm-line); border-radius: 999px;
  background: var(--gm-panel); font-size: 0.82rem; }
.gm-early-chip-meta { color: var(--gm-muted); }
a.gm-early-chip { color: var(--gm-ink); text-decoration: none; }
a.gm-early-chip:hover strong { text-decoration: underline; }
.gm-early-more { align-self: center; font-size: 0.82rem; font-weight: 600; color: var(--gm-muted); }
.gm-early-also { margin: 0.15rem 0 0; font-size: 0.82rem; color: var(--gm-muted); }
.gm-early-actions { display: flex; align-items: center; gap: 0.5rem; flex: none; }
.gm-early-cta { white-space: nowrap; text-decoration: none; }
.gm-early-dismiss { width: 32px; height: 32px; border: 0; border-radius: 8px; background: none; color: var(--gm-muted); font-size: 1.25rem; line-height: 1; cursor: pointer; }
.gm-early-dismiss:hover { background: var(--gm-hover); color: var(--gm-ink); }

/* Home Dashboard Revamp (2026-10-21): two INDEPENDENT column stacks - each column is a flex column as tall as its own content,
   so the number of leagues can't leave a hole beside My Leagues (rows spanning both columns did). */
.gm-home-band { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 1.5rem; align-items: start; }
.gm-home-main,
.gm-home-rail { display: flex; flex-direction: column; gap: 2rem; min-width: 0; }
.gm-home-section { margin-top: 2rem; }

.gm-section-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 1rem; }
.gm-section-head h2 { margin: 0; font-size: 1.1rem; font-weight: 700; }

/* ---- type A panels ---- */
.gm-panel { background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 12px; overflow: hidden; }
.gm-panel-head { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--gm-line); }
.gm-panel-head h2 { margin: 0; font-size: 1rem; font-weight: 600; }
.gm-panel-note { font-size: 0.82rem; font-weight: 600; color: var(--gm-muted); }
.gm-lock-line { margin: 0; padding: 0.6rem 1.5rem 0; font-size: 0.82rem; color: var(--gm-muted); }

/* ---- decision rows: every row looks the same (owner 10-30, item 222 dropped the first row's accent border) ---- */
.gm-decision-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1.5rem;
  padding: 1rem 1.5rem;
  border-bottom: 1px solid var(--gm-line);
  color: var(--gm-ink);
  text-decoration: none;
}
.gm-decision-list .gm-decision-row:last-child { border-bottom: 0; }
.gm-decision-body { display: flex; flex-direction: column; gap: 0.2rem; min-width: 0; }
.gm-decision-top { display: flex; align-items: center; flex-wrap: wrap; gap: 0.6rem; }
.gm-decision-team { font-size: 0.75rem; color: var(--gm-muted); }
.gm-decision-subject { font-size: 1rem; font-weight: 600; }
.gm-decision-lean { font-size: 0.86rem; font-weight: 600; color: var(--gm-info); }
.gm-decision-expl { font-size: 0.85rem; color: var(--gm-muted); }
/* Decision Center v2: one outlined button per row (Compare / Review / Player) - the row itself is not a link */
.gm-decision-btn { flex: none; white-space: nowrap; text-decoration: none; text-align: center; border-color: var(--gm-accent); color: var(--gm-accent); background: transparent; }
.gm-decision-btn:hover { background: var(--gm-hover); color: var(--gm-accent-hover); }
.gm-decision-btn:focus-visible { outline: 2px solid var(--gm-accent); outline-offset: 2px; }
.gm-status-muted { color: var(--gm-muted); font-size: 0.85rem; }
.gm-decision-more { display: block; padding: 0.75rem 1.5rem; border-top: 1px solid var(--gm-line); font-size: 0.86rem; font-weight: 600; color: var(--gm-accent); text-decoration: none; }
.gm-decision-more:hover { background: var(--gm-hover); }
/* item 222: the toggle stays green in every state (no tap flash, no sticky hover) with a chevron - down to open, up to close */
button.gm-decision-more, button.gm-decision-more:hover, button.gm-decision-more:active, button.gm-decision-more:focus {
  color: var(--gm-accent); -webkit-text-fill-color: var(--gm-accent); -webkit-tap-highlight-color: transparent; }
@media (hover: none) { button.gm-decision-more:hover { background: none; } }
.gm-toggle-chevron::after, button.gm-decision-more::after { content: ""; display: inline-block; width: 0.42em; height: 0.42em; margin-left: 0.5em;
  border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: translateY(-0.2em) rotate(45deg); }
.gm-toggle-chevron[aria-expanded="true"]::after, button.gm-decision-more[aria-expanded="true"]::after { transform: translateY(0.05em) rotate(-135deg); }
/* "Show N more decisions" expands the list in place (owner 2026-10-22); the button replaces the old link */
.gm-decision-list:not(.is-expanded) .gm-decision-row.is-extra { display: none; }
button.gm-decision-more { width: 100%; border: 0; border-top: 1px solid var(--gm-line); background: none; text-align: left; font: inherit;
  font-size: 0.86rem; font-weight: 600; color: var(--gm-accent); cursor: pointer; }
/* ---- item 225 (owner 11-01): mark a decision done - a round check before the row; the row folds away, Undo shows for a few seconds,
   and checked-off rows wait under "Show done" (faded, filled check) ---- */
.gm-done-check { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; padding: 0;
  border: 2px solid var(--gm-line-control); border-radius: 50%; background: var(--gm-panel); color: transparent; cursor: pointer;
  transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease;
  -webkit-tap-highlight-color: transparent; }
.gm-done-check svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round; }
.gm-done-check:focus-visible { outline: 2px solid var(--gm-accent); outline-offset: 2px; }
@media (hover: hover) { .gm-done-check:hover { border-color: var(--gm-accent); color: var(--gm-accent); } }
.gm-done-check[aria-pressed="true"] { border-color: var(--gm-accent); background: var(--gm-accent); color: #fff; }
.is-checking .gm-done-check { transform: scale(1.12); }
.gm-decision-row .gm-done-check { margin-right: -0.5rem; }
.gm-decision-row .gm-decision-body { flex: 1; }
.gm-decision-row.is-leaving, .gm-rail-decision.is-leaving { overflow: hidden; opacity: 0; padding-top: 0; padding-bottom: 0; margin: 0;
  border-bottom-width: 0; transition: height 0.28s ease, opacity 0.2s ease, padding 0.28s ease; }
.gm-decision-list:not(.is-showing-done) .gm-decision-row.is-done,
.gm-rail-list:not(.is-showing-done) .gm-rail-decision.is-done { display: none; }
.gm-decision-row.is-done .gm-decision-body, .gm-decision-row.is-done .gm-decision-btn,
.gm-rail-decision.is-done .gm-rail-text, .gm-rail-decision.is-done .gm-decision-btn { opacity: 0.55; }
.gm-decision-more[hidden], .gm-done-toggle[hidden], .gm-quiet[hidden], .gm-rail-empty[hidden] { display: none !important; }
button.gm-done-toggle { display: block; width: 100%; padding: 0.75rem 1.5rem; border: 0; border-top: 1px solid var(--gm-line); background: none;
  font: inherit; font-size: 0.86rem; font-weight: 600; text-align: left; color: var(--gm-muted); cursor: pointer;
  -webkit-tap-highlight-color: transparent; }
@media (hover: hover) { button.gm-done-toggle:hover { background: var(--gm-hover); color: var(--gm-ink); } }
button.gm-done-toggle.gm-done-toggle-rail { margin-top: 0.5rem; padding: 0.4rem 0; border-top: 0; font-size: 0.8rem; }
@media (hover: hover) { button.gm-done-toggle.gm-done-toggle-rail:hover { background: none; text-decoration: underline; } }
.gm-rail-decision-head { display: flex; align-items: flex-start; gap: 0.6rem; }
.gm-rail-decision-head .gm-done-check { width: 24px; height: 24px; margin-top: 1px; }
.gm-rail-decision-head .gm-done-check svg { width: 14px; height: 14px; }
.gm-rail-decision .gm-decision-btn { margin-left: calc(24px + 0.6rem); }
.gm-done-toast { position: fixed; left: 50%; bottom: calc(24px + env(safe-area-inset-bottom, 0px)); z-index: 60; display: flex; align-items: center;
  gap: 1rem; padding: 0.7rem 0.75rem 0.7rem 1.1rem; border-radius: 10px; background: #13231C; color: #fff; font-size: 0.9rem;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18); transform: translate(-50%, 16px); opacity: 0; pointer-events: none;
  transition: opacity 0.2s ease, transform 0.2s ease; }
.gm-done-toast span { white-space: nowrap; }
.gm-done-toast.is-shown { opacity: 1; transform: translate(-50%, 0); pointer-events: auto; }
.gm-done-toast button { padding: 0.35rem 0.7rem; border: 0; border-radius: 6px; background: transparent; color: #6EE7B7; font: inherit;
  font-weight: 700; cursor: pointer; }
.gm-done-toast button:hover { background: rgba(255, 255, 255, 0.08); }
/* League sync popup (item 242, owner 2026-11-06): "Syncing your league..." while Sync now runs, then what the sync found on the
   page it returns to (static/js/sync_toast.js). The same dark toast as Decision Center's, with room for a second line. */
.gm-sync-toast { position: fixed; left: 50%; bottom: calc(24px + env(safe-area-inset-bottom, 0px)); z-index: 61; display: flex;
  align-items: flex-start; gap: 0.75rem; width: max-content; max-width: min(460px, calc(100vw - 32px)); padding: 0.75rem 0.6rem 0.75rem 1.1rem;
  border-radius: 10px; background: #13231C; color: #fff; font-size: 0.9rem; line-height: 1.4; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
  transform: translate(-50%, 16px); opacity: 0; pointer-events: none; transition: opacity 0.2s ease, transform 0.2s ease; }
.gm-sync-toast.is-shown { opacity: 1; transform: translate(-50%, 0); pointer-events: auto; }
.gm-sync-toast.is-busy { align-items: center; padding-right: 1.1rem; }
.gm-sync-toast-text { display: grid; gap: 0.15rem; }
.gm-sync-toast-text span { color: rgba(255, 255, 255, 0.78); }
.gm-sync-toast.is-warn strong { color: #FCD34D; }
.gm-sync-toast-close { flex: none; margin-left: 0.25rem; padding: 0.15rem 0.5rem; border: 0; border-radius: 6px; background: transparent;
  color: #6EE7B7; font: inherit; font-size: 1.15rem; line-height: 1; cursor: pointer; }
.gm-sync-toast-close:hover { background: rgba(255, 255, 255, 0.08); }
.gm-sync-spinner { flex: none; width: 16px; height: 16px; border: 2px solid rgba(255, 255, 255, 0.3); border-top-color: #6EE7B7;
  border-radius: 50%; animation: gm-sync-spin 0.8s linear infinite; }
@keyframes gm-sync-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .gm-sync-spinner { animation-duration: 2.4s; } }
/* Roster watch sits in a white panel like Decision Center and This Week (owner 2026-10-22) */
.gm-panel.gm-home-watch .gm-watch-list { padding: 0 1.5rem; }
.gm-panel.gm-home-watch .gm-empty-note { padding: 1rem 1.5rem; margin: 0; }
/* Home Dashboard Revamp step 4: lock chip (amber when the item locks before the main slate, like the early-game banner), inline
   injury pills beside names, the "New report since last update" tag, and the league name on a per-league detail line */
.gm-lock-chip { display: inline-block; padding: 0.1rem 0.5rem; border: 1px solid var(--gm-line-control); border-radius: 6px;
  font-size: 0.75rem; font-weight: 600; color: var(--gm-ink); white-space: nowrap; }
.gm-lock-chip.is-early { border-color: var(--gm-warn); background: var(--gm-warn-dim); color: var(--gm-warn); }
.gm-decision-name { white-space: nowrap; }
.gm-pill-inline { padding: 0.05rem 0.45rem; font-size: 0.7rem; vertical-align: 0.1em; }
.gm-decision-fresh { font-size: 0.75rem; font-weight: 600; color: var(--gm-info); }
.gm-decision-in { font-weight: 600; color: var(--gm-ink); }
/* Lineup row key facts (owner 2026-10-22): label + one line each, only the facts that say something */
.gm-keyfacts { display: grid; gap: 0.3rem; margin: 0.5rem 0 0.75rem; }
.gm-keyfacts > div { display: grid; grid-template-columns: 4.75rem minmax(0, 1fr); gap: 0.5rem; align-items: baseline; }
.gm-keyfacts dt { font-size: 0.72rem; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: var(--gm-muted); }
.gm-keyfacts dd { margin: 0; font-size: 0.88rem; color: var(--gm-ink); }

.gm-quiet { padding: 1.5rem; }
.gm-quiet-title { margin: 0 0 0.35rem; font-size: 1.05rem; font-weight: 600; }
.gm-quiet-text { margin: 0 0 0.75rem; font-size: 0.9rem; color: var(--gm-muted); line-height: 1.5; }
.gm-quiet-lock { margin: 0 0 0.75rem; font-size: 0.9rem; }
.gm-status-good { color: var(--gm-good); font-weight: 700; }

/* ---- This Week ---- */
.gm-home-week { display: flex; flex-direction: column; }
.gm-week-stats { margin: 0; padding: 1rem 1.5rem 0.25rem; }
.gm-week-stats > div { display: flex; justify-content: space-between; align-items: baseline; padding: 0.4rem 0; }
.gm-week-stats dt { font-size: 0.88rem; color: var(--gm-muted); }
.gm-week-stats dd { margin: 0; font-size: 1.25rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.gm-of { font-size: 0.82rem; font-weight: 500; color: var(--gm-muted); }
.gm-week-lock { display: flex; flex-direction: column; gap: 0.2rem; padding: 0.75rem 1.5rem; border-top: 1px solid var(--gm-line); margin-top: 0.5rem; }
.gm-week-lock strong { font-size: 1rem; }
.gm-week-tools { display: flex; flex-direction: column; gap: 0.6rem; padding: 0.9rem 1.5rem 1.25rem; border-top: 1px solid var(--gm-line); margin-top: auto; }

/* ---- quick tools: compact shortcuts, not content ---- */
.gm-quick-tools { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.5rem; }
.gm-quick-tool {
  box-sizing: border-box;
  display: flex;
  align-items: center;
  gap: 0.5rem;
  min-height: 44px;
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--gm-line);
  border-radius: 8px;
  background: var(--gm-panel);
  color: var(--gm-ink);
  font-size: 0.85rem;
  font-weight: 600;
  text-decoration: none;
}
.gm-quick-tool:hover { background: var(--gm-hover); border-color: var(--gm-line-control); }
.gm-quick-tool svg { flex: none; width: 18px; height: 18px; fill: none; stroke: var(--gm-accent); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }

/* ---- type B: league cards ---- */
.gm-league-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 1.5rem; }
.gm-home-leagues.is-single .gm-league-grid { grid-template-columns: minmax(0, 1fr); }
/* 5+ leagues: one compact line per league - name, platform, score, what to fix */
.gm-home-leagues.is-compact .gm-league-grid { grid-template-columns: minmax(0, 1fr); gap: 0; border: 1px solid var(--gm-line); border-radius: 12px; overflow: hidden; background: var(--gm-panel); }
.gm-home-leagues.is-compact .gm-league-card { flex-direction: row; align-items: center; gap: 1rem; min-height: 0; padding: 0.75rem 1.25rem; border: 0; border-bottom: 1px solid var(--gm-line); border-radius: 0; }
.gm-home-leagues.is-compact .gm-league-card:last-child { border-bottom: 0; }
.gm-home-leagues.is-compact .gm-league-card-id { flex: 1 1 40%; min-width: 0; }
.gm-home-leagues.is-compact .gm-league-card-score { flex: none; flex-direction: row; align-items: baseline; gap: 0.4rem; }
.gm-home-leagues.is-compact .gm-score { font-size: 1.15rem; }
.gm-home-leagues.is-compact .gm-score-label,
.gm-home-leagues.is-compact .gm-league-card-cta { display: none; }
.gm-home-leagues.is-compact .gm-league-card-status { flex: 1 1 30%; justify-content: flex-end; font-size: 0.8rem; }
.gm-league-card {
  display: flex;
  flex-direction: column;
  gap: 0.85rem;
  min-height: 190px;
  padding: 1.25rem;
  border: 1px solid var(--gm-line);
  border-radius: 12px;
  background: var(--gm-panel);
  color: var(--gm-ink);
  text-decoration: none;
}
.gm-league-card:hover { border-color: var(--gm-line-control); background: var(--gm-panel-2); }
.gm-league-card:focus-visible { outline: 2px solid var(--gm-accent); outline-offset: 2px; }
.gm-league-card-id { display: flex; flex-direction: column; }
.gm-league-card-id strong { font-size: 1.05rem; }
.gm-league-card-id span { font-size: 0.82rem; color: var(--gm-muted); }
.gm-league-card-score { display: flex; flex-direction: column; }
.gm-score { font-size: 2rem; font-weight: 700; line-height: 1.1; font-variant-numeric: tabular-nums; }
.gm-score-label { font-size: 0.78rem; color: var(--gm-muted); }
.gm-league-card-status { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem 1rem; font-size: 0.86rem; font-weight: 600; }
.gm-status-attn { color: var(--gm-ink); }
.gm-status-risk { display: inline-flex; align-items: center; gap: 0.4rem; color: var(--gm-danger); }
.gm-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--gm-danger); }
.gm-league-card-cta { margin-top: auto; font-size: 0.86rem; font-weight: 600; color: var(--gm-accent); }
.gm-league-card:hover .gm-league-card-cta { color: var(--gm-accent-hover); }

/* ---- type C: watch list ---- */
.gm-empty-note { margin: 0; font-size: 0.88rem; color: var(--gm-muted); }

.gm-watch-list { list-style: none; margin: 0; padding: 0; }
.gm-watch-row { border-bottom: 1px solid var(--gm-line); }
.gm-watch-row:last-child { border-bottom: 0; }
.gm-watch-row a { display: flex; flex-direction: column; gap: 0.25rem; padding: 0.8rem 0; color: var(--gm-ink); text-decoration: none; }
.gm-watch-row a:hover strong { text-decoration: underline; }
.gm-watch-top { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; }
.gm-watch-note { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; font-size: 0.82rem; color: var(--gm-muted); line-height: 1.4; }
/* item 222 round 2: the first 5 rows, then "Show N more"; this week's earlier notes open under the row */
.gm-watch-list:not(.is-expanded) .gm-watch-row.is-extra { display: none; }
.gm-home-watch button.gm-decision-more { padding: 0.75rem 1.5rem; }
.gm-watch-earlier { margin: -0.4rem 0 0.8rem; font-size: 0.82rem; }
.gm-watch-earlier summary { display: inline-flex; align-items: center; min-height: 32px; list-style: none; cursor: pointer; font-weight: 600;
  color: var(--gm-accent); -webkit-tap-highlight-color: transparent; }
.gm-watch-earlier summary::-webkit-details-marker { display: none; }
.gm-watch-earlier summary::after { content: ""; display: inline-block; width: 0.42em; height: 0.42em; margin-left: 0.5em;
  border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: translateY(-0.2em) rotate(45deg); }
.gm-watch-earlier[open] summary::after { transform: translateY(0.05em) rotate(-135deg); }
.gm-watch-earlier ul { list-style: none; margin: 0.25rem 0 0; padding: 0 0 0 0.75rem; border-left: 2px solid var(--gm-line); }
.gm-watch-earlier li { padding: 0.3rem 0; color: var(--gm-muted); line-height: 1.4; }
.gm-watch-leagues { font-size: 0.75rem; color: var(--gm-muted-2); }
.gm-watch-meta { font-size: 0.78rem; color: var(--gm-muted); }
.gm-watch-date { font-weight: 600; color: var(--gm-ink); }

/* ---- blog row (placeholder until the Webflow feed): 3 cards across, a swipe row on phones ---- */
.gm-blog-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.5rem; }
.gm-blog-card { display: flex; flex-direction: column; border: 1px solid var(--gm-line); border-radius: 12px; background: var(--gm-panel); color: var(--gm-ink); text-decoration: none; overflow: hidden; }
.gm-blog-card:hover { border-color: var(--gm-line-control); background: var(--gm-panel-2); }
.gm-blog-card:focus-visible { outline: 2px solid var(--gm-accent); outline-offset: 2px; }
.gm-blog-img { display: block; aspect-ratio: 16 / 9; background: var(--gm-panel-2); }
.gm-blog-img img { display: block; width: 100%; height: 100%; object-fit: cover; }
.gm-blog-body { display: flex; flex-direction: column; align-items: flex-start; gap: 0.35rem; padding: 1rem 1.25rem 1.25rem; }
.gm-blog-title { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; font-size: 1rem; line-height: 1.35; }
.gm-blog-meta { font-size: 0.78rem; color: var(--gm-muted); }
.gm-blog-chip { margin-top: 0.25rem; }

.gm-draft-center,
.gm-welcome { padding-bottom: 1.5rem; }
.gm-draft-center > p,
.gm-draft-center > .gm-quick-tools,
.gm-welcome > p,
.gm-welcome > .gm-btn,
.gm-welcome-explore { margin-left: 1.5rem; margin-right: 1.5rem; }
.gm-draft-center > p:first-of-type,
.gm-welcome > p:first-of-type { margin-top: 1rem; }
.gm-welcome-explore { display: flex; flex-direction: column; gap: 0.6rem; margin-top: 1.5rem; max-width: 460px; }
.gm-welcome > .gm-btn { display: inline-block; text-decoration: none; }
.gm-draft-center > .gm-quick-tools { max-width: 560px; grid-template-columns: repeat(3, minmax(0, 1fr)); }

/* ---- medium desktop (Blueprint section 25) ---- */
@media (max-width: 1199px) {
  .gm-home-band { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
  .gm-blog-row { gap: 1rem; }
}

/* ---- mobile: recompose, don't shrink (Blueprint sections 33-53, 58) ---- */
@media (max-width: 760px) {
  .gm-only-desktop { display: none !important; }
  .gm-only-mobile { display: block !important; }

  .gm-home-head { flex-direction: column; align-items: stretch; gap: 1rem; margin-bottom: 1.25rem; }
  .gm-home-title { font-size: 1.5rem; }
  .gm-home-selector { align-items: stretch; }
  .gm-home-selector select { min-height: 44px; width: 100%; }
  .gm-updated { text-align: center; }

  .gm-home-band { grid-template-columns: minmax(0, 1fr); gap: 2rem; }
  .gm-home-rail { gap: 0; }
  .gm-home-section { margin-top: 2rem; }

  /* one featured decision, then compact rows, then a "more" link - never an endless feed */
  .gm-panel-head { padding: 0.9rem 1rem; }
  .gm-lock-line { padding: 0.5rem 1rem 0; }
  .gm-decision-row { flex-direction: column; align-items: stretch; gap: 0.6rem; padding: 0.9rem 1rem; }
  /* .gm-btn.gm-decision-btn so a.gm-btn's inline-block (later in this file) cannot win - it left the label at the top (item 222) */
  .gm-btn.gm-decision-btn { width: 100%; min-height: 44px; display: flex; align-items: center; justify-content: center; }
  .gm-decision-list:not(.is-expanded) .gm-decision-row.is-extra-mobile { display: none; }
  /* item 225: the check beside the facts, the button full width under both */
  .gm-decision-row[data-done-key] { display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 0.75rem; row-gap: 0.6rem; }
  .gm-decision-row .gm-done-check { margin-right: 0; width: 32px; height: 32px; }
  .gm-decision-row[data-done-key] .gm-decision-btn { grid-column: 1 / -1; }
  button.gm-done-toggle { padding: 0.75rem 1rem; min-height: 44px; }
  .gm-done-toast { bottom: calc(76px + env(safe-area-inset-bottom, 0px)); max-width: calc(100vw - 32px); }
  .gm-sync-toast { bottom: calc(76px + env(safe-area-inset-bottom, 0px)); }
  .gm-decision-more { padding: 0.75rem 1rem; }
  .gm-quiet { padding: 1rem; }

  .gm-early { flex-direction: column; gap: 0.75rem; padding: 0.9rem 1rem; }
  .gm-early-actions { width: 100%; }
  .gm-early-cta { flex: 1; text-align: center; min-height: 40px; display: inline-flex; align-items: center; justify-content: center; }
  .gm-early-chip-3 { display: none; }
  .gm-early-more.gm-only-mobile { display: list-item !important; list-style: none; }

  /* My Leagues and the blog row: a horizontal swipe, each card ~85% wide so the next one peeks in */
  .gm-league-grid,
  .gm-home-leagues.is-single .gm-league-grid,
  .gm-home-leagues.is-compact .gm-league-grid,
  .gm-blog-row { display: flex; gap: 0.75rem; overflow-x: auto; scroll-snap-type: x mandatory; border: 0; border-radius: 0; background: none; padding-bottom: 0.25rem; }
  .gm-league-card,
  .gm-home-leagues.is-compact .gm-league-card { flex: 0 0 85%; flex-direction: column; align-items: stretch; gap: 0.85rem; min-height: 0; padding: 1rem; border: 1px solid var(--gm-line); border-radius: 12px; scroll-snap-align: start; }
  .gm-home-leagues.is-single .gm-league-card { flex-basis: 100%; }
  .gm-home-leagues.is-compact .gm-league-card-score { flex-direction: column; align-items: flex-start; gap: 0; }
  .gm-home-leagues.is-compact .gm-score { font-size: 2rem; }
  .gm-home-leagues.is-compact .gm-score-label,
  .gm-home-leagues.is-compact .gm-league-card-cta { display: inline; }
  .gm-home-leagues.is-compact .gm-league-card-status { justify-content: flex-start; }
  .gm-blog-card { flex: 0 0 85%; scroll-snap-align: start; }
  .gm-home-watch.is-empty { display: none; }
  .gm-panel.gm-home-watch .gm-watch-list { padding: 0 1rem; }
  .gm-home-watch button.gm-decision-more { padding: 0.75rem 1rem; }
  .gm-draft-center > .gm-quick-tools { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ---- page-level notice (e.g. no weekly projections for this league's scoring) ---- */
.gm-banner {
  margin: 0 0 1.25rem;
  padding: 0.75rem 1rem;
  border: 1px solid transparent;
  border-radius: 10px;
  font-size: 0.9rem;
  line-height: 1.45;
}
.gm-banner-warn { background: var(--gm-warn-dim); color: var(--gm-warn); border-color: var(--gm-warn); }

/* ==========================================================================
   Add League flow + My Leagues hub (league sync, backlog item 75).
   ========================================================================== */

.gm-flow { max-width: 960px; margin: 0 auto; }
.gm-flow.gm-flow-wide { max-width: 1200px; }

.gm-steps { list-style: none; display: flex; flex-wrap: wrap; gap: 0.5rem 1.25rem; padding: 0; margin: 1rem 0 1.5rem; counter-reset: step; }
.gm-steps li { counter-increment: step; display: flex; align-items: center; gap: 0.45rem; font-size: 0.82rem; color: var(--gm-muted); }
.gm-steps li::before {
  content: counter(step);
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; border-radius: 50%;
  border: 1px solid var(--gm-line-control); font-size: 0.72rem; font-weight: 700;
}
.gm-steps li.is-current { color: var(--gm-ink); font-weight: 600; }
.gm-steps li.is-current::before { background: var(--gm-accent); border-color: var(--gm-accent); color: var(--gm-on-accent); }
.gm-steps li.is-done::before { content: "\2713"; background: var(--gm-good-dim); border-color: var(--gm-good); color: var(--gm-good); }

.gm-provider-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 1.25rem; margin-top: 1.5rem; }
.gm-provider-card {
  display: flex; flex-direction: column; gap: 0.75rem;
  padding: 1.25rem; background: var(--gm-panel);
  border: 1px solid var(--gm-line); border-radius: 12px;
}
.gm-provider-card.is-soon { background: var(--gm-panel-2); }
.gm-provider-head { display: flex; justify-content: space-between; align-items: center; gap: 0.75rem; }
.gm-provider-head h2 { margin: 0; font-size: 1.05rem; }
.gm-provider-card p { margin: 0; font-size: 0.88rem; line-height: 1.5; color: var(--gm-muted); }
.gm-provider-card .gm-btn,
.gm-provider-card form { margin-top: auto; align-self: flex-start; }
.gm-btn[disabled] { opacity: 0.55; cursor: not-allowed; }

.gm-league-pick-list { display: flex; flex-direction: column; gap: 1rem; margin-top: 1.25rem; }
/* Browser extension progress text (item 233 steps 3-4): beside Import on Add League -> Yahoo and beside a Yahoo league's Sync now. */
.gm-ext-finder > .gm-banner { margin-top: 1rem; }
.gm-ext-finder > .gm-btn { margin-top: 0.75rem; }
.gm-ext-install { margin-top: 1.25rem; padding: 1.25rem; border: 1px solid var(--gm-line); border-radius: 12px; background: var(--gm-panel); max-width: 640px; }
.gm-ext-install h2 { margin: 0 0 0.5rem; font-size: 1.05rem; }
.gm-ext-install p { margin: 0 0 0.75rem; }
.gm-ext-install ol { margin: 1rem 0; padding-left: 1.25rem; display: flex; flex-direction: column; gap: 0.4rem; }
.gm-ext-install .gm-ext-install-wait { color: var(--gm-muted); font-size: 0.9rem; }
.gm-ext-status { color: var(--gm-muted); font-size: 0.85rem; }
.gm-ext-status:empty { display: none; }
.gm-ext-status.is-error { color: var(--gm-danger); }
form[data-gm-extension-sync] { flex-wrap: wrap; }
form[data-gm-extension-sync] .gm-ext-status { display: block; flex-basis: 100%; margin-top: 0.35rem; max-width: 28rem; }
.gm-league-pick {
  display: flex; align-items: center; justify-content: space-between; gap: 1.5rem; flex-wrap: wrap;
  padding: 1.1rem 1.25rem; background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 12px;
}
.gm-league-pick-main h2 { margin: 0 0 0.2rem; font-size: 1.05rem; }
.gm-league-pick-main p { margin: 0 0 0.4rem; }
.gm-league-pick-controls { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; }
.gm-league-pick-controls select {
  min-height: 40px; padding: 0.4rem 0.7rem; border: 1px solid var(--gm-line-control); border-radius: 8px;
  background: var(--gm-panel); color: var(--gm-ink); font: inherit; font-size: 0.88rem;
}

/* League number entry (FFPC sync, 2026-11-02) */
.gm-league-number { display: flex; flex-direction: column; gap: 0.4rem; margin-top: 1.25rem; max-width: 520px; }
.gm-league-number label { font-size: 0.86rem; font-weight: 600; }
.gm-league-number-row { display: flex; gap: 0.75rem; }
.gm-league-number input {
  flex: 1; min-width: 0; min-height: 40px; padding: 0.4rem 0.7rem; border: 1px solid var(--gm-line-control); border-radius: 8px;
  background: var(--gm-panel); color: var(--gm-ink); font: inherit; font-size: 0.9rem;
}
.gm-flow > .gm-banner { margin-top: 1rem; }

.gm-banner ul { margin: 0.4rem 0 0; padding-left: 1.2rem; }
.gm-banner-danger { background: var(--gm-danger-dim); color: var(--gm-danger); border-color: var(--gm-danger); }
.gm-banner-good { background: var(--gm-good-dim); color: var(--gm-good); border-color: var(--gm-good); }

.gm-review-grid { display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); gap: 1.5rem; align-items: start; }
.gm-review-side { display: flex; flex-direction: column; gap: 1.25rem; }
.gm-review-card { padding: 1.25rem; background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 12px; min-width: 0; }
.gm-review-card h2 { margin: 0 0 0.75rem; font-size: 1rem; font-weight: 700; }
.gm-review-card p { margin: 0 0 0.6rem; }
.gm-review-note { font-size: 0.86rem; color: var(--gm-muted); line-height: 1.5; }
.gm-review-table { width: 100%; border-collapse: collapse; font-size: 0.86rem; }
.gm-review-table th { text-align: left; padding: 0.4rem 0.5rem; font-size: 0.72rem; font-weight: 600; color: var(--gm-muted); border-bottom: 1px solid var(--gm-line); }
.gm-review-table td { padding: 0.45rem 0.5rem; border-bottom: 1px solid var(--gm-line); }
.gm-review-table tbody tr:last-child td { border-bottom: 0; }
.gm-review-details { margin-top: 0.5rem; font-size: 0.85rem; }
.gm-review-details summary { cursor: pointer; font-weight: 600; color: var(--gm-accent); }
.gm-review-details h3 { margin: 0.9rem 0 0.3rem; font-size: 0.8rem; color: var(--gm-muted); }
.gm-rule-list { list-style: none; margin: 0; padding: 0; }
.gm-rule-list li { padding: 0.25rem 0; border-bottom: 1px solid var(--gm-line); }
.gm-slot-summary { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.gm-review-actions { display: flex; gap: 0.75rem; margin-top: 1.5rem; }
.gm-review-adopt form { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem; margin-bottom: 0.6rem; }
.gm-review-adopt select {
  min-height: 40px; max-width: 100%; padding: 0.4rem 0.7rem; border: 1px solid var(--gm-line-control); border-radius: 8px;
  background: var(--gm-panel); color: var(--gm-ink); font: inherit; font-size: 0.88rem;
}
.gm-review-adopt, .gm-review-adopt + .gm-review-card, .gm-flow > .gm-review-card { margin-bottom: 1.25rem; }
.gm-review-diff { list-style: none; margin: 0; padding: 0; font-size: 0.88rem; }
.gm-review-diff li { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; padding: 0.4rem 0; border-bottom: 1px solid var(--gm-line); }
.gm-review-diff li:last-child { border-bottom: 0; }

.gm-team-card-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 0.5rem 0.75rem; margin-top: 0.75rem; }
.gm-team-card-actions form { margin: 0; }
.gm-sync-line { margin: 0.25rem 0 0; font-size: 0.8rem; color: var(--gm-muted); }
.gm-sync-strip { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem; margin: 0.4rem 0 0; font-size: 0.8rem; color: var(--gm-muted); }

@media (max-width: 900px) {
  .gm-review-grid { grid-template-columns: minmax(0, 1fr); }
  .gm-league-pick { flex-direction: column; align-items: stretch; }
  .gm-league-pick-controls { flex-direction: column; align-items: stretch; }
  .gm-league-pick-controls .gm-btn { min-height: 44px; }
  .gm-review-actions { flex-direction: column; }
  .gm-review-actions .gm-btn { min-height: 44px; text-align: center; }
  .gm-league-number-row { flex-direction: column; }
  .gm-league-number .gm-btn, .gm-review-adopt .gm-btn { min-height: 44px; }
  .gm-review-adopt form { flex-direction: column; align-items: stretch; }
}

a.gm-btn { text-decoration: none; display: inline-block; }

/* ==========================================================================
   Weekly Rankings (Weekly Rankings Wireframe Spec v1): dense but calm. Eye order: player + rank -> projection ->
   signal -> range. Same markup serves desktop (grid columns) and phones (rank | player | metric | chevron).
   ========================================================================== */
.gm-sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

.gm-rk { max-width: 1360px; margin: 0 auto; --gm-rk-cols: 64px minmax(240px, 320px) 90px 110px 100px 160px minmax(0, 1fr) 40px; --gm-topbar-h: 65px; }
.gm-rk-head { margin-bottom: 0.75rem; }
.gm-rk-fresh { font-size: 0.8rem; color: var(--gm-muted); white-space: nowrap; }
.gm-rk-fresh.is-stale { color: var(--gm-warn); }

.gm-rk-context { display: flex; flex-wrap: wrap; gap: 0.75rem 1.25rem; margin-bottom: 0.9rem; }
.gm-rk-select-wrap { display: inline-flex; align-items: center; gap: 0.5rem; font-size: 0.8rem; color: var(--gm-muted); font-weight: 600; }
.gm-rk-select-wrap select {
  min-height: 40px; box-sizing: border-box; padding: 0.35rem 0.7rem; border: 1px solid var(--gm-line-control);
  border-radius: 8px; background: var(--gm-panel); color: var(--gm-ink); font: inherit; font-size: 0.88rem; font-weight: 500;
}

.gm-rk-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem; margin-bottom: 1rem; }
.gm-seg { display: inline-flex; border: 1px solid var(--gm-line-control); border-radius: 9px; overflow: hidden; background: var(--gm-panel); }
.gm-seg-item {
  box-sizing: border-box; min-height: 40px; min-width: 44px; padding: 0.35rem 0.85rem; display: inline-flex; align-items: center; justify-content: center;
  border: 0; border-right: 1px solid var(--gm-line); background: transparent; color: var(--gm-ink); font: inherit; font-size: 0.86rem; font-weight: 600;
  cursor: pointer; text-decoration: none;
}
.gm-seg-item:last-child { border-right: 0; }
.gm-seg-item:hover { background: var(--gm-hover); }
.gm-seg-item.is-active { background: var(--gm-good-dim); color: var(--gm-accent-hover); box-shadow: inset 0 -2px 0 var(--gm-accent); }
.gm-seg-item:focus-visible { outline: 2px solid var(--gm-accent); outline-offset: -2px; }
.gm-seg-item:disabled { opacity: 0.4; cursor: not-allowed; }
.gm-seg-item:disabled:hover { background: none; }
.gm-rk-search {
  box-sizing: border-box; min-height: 40px; width: 240px; padding: 0.35rem 0.8rem; border: 1px solid var(--gm-line-control);
  border-radius: 8px; background: var(--gm-panel); color: var(--gm-ink); font: inherit; font-size: 0.88rem;
}
.gm-rk-filter-btn { display: inline-flex; align-items: center; gap: 0.4rem; min-height: 40px; }
.gm-rk-filter-count { display: inline-flex; min-width: 1.2rem; height: 1.2rem; align-items: center; justify-content: center; margin-left: 0.1rem;
  border-radius: 999px; background: var(--gm-accent); color: var(--gm-on-accent); font-size: 0.72rem; font-weight: 700; }
.gm-rk-filter-count[hidden] { display: none; }
.gm-rk-sortnote { margin: -0.25rem 0 0.75rem; font-size: 0.82rem; color: var(--gm-muted); display: flex; flex-wrap: wrap; gap: 0.25rem 0.75rem; align-items: center; }
.gm-rk-sortnote[hidden] { display: none; }

.gm-rk-table { background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 12px; }
.gm-rk-headrow, .gm-rk-row { display: grid; grid-template-columns: var(--gm-rk-cols); align-items: center; column-gap: 0.5rem; padding: 0 0.5rem; }
.gm-rk-headrow {
  position: sticky; top: var(--gm-topbar-h); z-index: 20; min-height: 44px; background: var(--gm-panel-2);
  border-bottom: 1px solid var(--gm-line); border-radius: 12px 12px 0 0;
  font-size: 0.72rem; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: var(--gm-muted);
}
.gm-rk-headrow > span:first-child { text-align: center; }
.gm-rk-sort { border: 0; background: transparent; padding: 0; text-align: left; font: inherit; letter-spacing: inherit; text-transform: inherit; color: inherit; cursor: pointer; }
.gm-rk-sort:hover, .gm-rk-sort.is-sorted { color: var(--gm-accent-hover); }
.gm-rk-sort i { font-style: normal; }
.gm-rk-sort[data-dir="desc"] i::after { content: "\25BE"; }
.gm-rk-sort[data-dir="asc"] i::after { content: "\25B4"; }
.gm-rk-sort:focus-visible { outline: 2px solid var(--gm-accent); outline-offset: 2px; }

.gm-rk-tier {
  display: flex; align-items: baseline; gap: 0.75rem; min-height: 38px; box-sizing: border-box; padding: 0.5rem 1rem;
  background: var(--gm-good-dim); border-top: 1px solid var(--gm-line); border-bottom: 1px solid var(--gm-line);
  font-size: 0.8rem; color: var(--gm-accent-hover);
}
.gm-rk-tier[hidden], .gm-rk-item[hidden], .gm-rk-empty[hidden], .gm-rk-selbar[hidden], .gm-rk-detail[hidden] { display: none; }
.gm-rk-tier span { color: var(--gm-muted); }

.gm-rk-item { border-bottom: 1px solid var(--gm-line); }
.gm-rk-item:last-child { border-bottom: 0; }
.gm-rk-row { min-height: 62px; cursor: pointer; }
.gm-rk-row:hover { background: var(--gm-hover); }
.gm-rk-item.is-open > .gm-rk-row { background: var(--gm-panel-2); }
.gm-rk-item.is-selected > .gm-rk-row { box-shadow: inset 3px 0 0 var(--gm-accent); }

.gm-rk-rank { position: relative; display: flex; align-items: center; justify-content: center; height: 100%; font-size: 0.92rem; font-weight: 600; color: var(--gm-muted); }
.gm-rk-check { position: absolute; inset: 0; margin: auto; width: 18px; height: 18px; opacity: 0; accent-color: var(--gm-accent); cursor: pointer; }
.gm-rk-row:hover .gm-rk-check, .gm-rk-check:focus-visible, .gm-rk-check:checked { opacity: 1; }
.gm-rk-row:hover .gm-rk-num, .gm-rk-check:checked ~ .gm-rk-num { visibility: hidden; }
.gm-rk-check:disabled { cursor: not-allowed; }

.gm-rk-player { display: flex; align-items: center; gap: 0.75rem; min-width: 0; }
.gm-rk-idblock { display: flex; flex-direction: column; min-width: 0; gap: 0.1rem; }
.gm-rk-nameline { display: flex; align-items: center; gap: 0.4rem; min-width: 0; }
.gm-rk-name { font-size: 0.98rem; font-weight: 650; color: var(--gm-ink); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gm-rk-name:hover { color: var(--gm-accent-hover); text-decoration: underline; }
.gm-rk-meta { font-size: 0.78rem; color: var(--gm-muted); }
.gm-rk-mine { margin-left: 0.35rem; padding: 0.05rem 0.4rem; border-radius: 999px; background: var(--gm-accent-dim); color: var(--gm-accent-hover); font-size: 0.68rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; }

.gm-rk-proj { font-size: 1.05rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.gm-rk-range { font-size: 0.86rem; color: var(--gm-muted); font-variant-numeric: tabular-nums; } /* Player Explorer's Opp cell (.gm-px-opp) only, since item 95 */
.gm-rk-great { font-size: 0.9rem; color: var(--gm-muted); font-variant-numeric: tabular-nums; }
.gm-rk-matchup { min-width: 0; }
.gm-rk-signal { min-width: 0; display: flex; flex-wrap: wrap; gap: 0.3rem; } /* item 113: up to 4 tags, wrap instead of overflow */
.gm-rk-chev { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border: 0; border-radius: 8px; background: transparent; color: var(--gm-muted); cursor: pointer; opacity: 0.6; }
.gm-rk-row:hover .gm-rk-chev, .gm-rk-chev:focus-visible { opacity: 1; }
.gm-rk-chev:focus-visible { outline: 2px solid var(--gm-accent); }
.gm-rk-chev svg { transition: transform 0.15s; }
.gm-rk-item.is-open .gm-rk-chev svg { transform: rotate(180deg); }

/* Item 119 follow-up (2026-10-05): the Expanded panel spec calls for a real 2x2 - outlook/
   drivers on top, context/why on the bottom - not the 3-across-then-2-below shape this had
   before (which also meant Outcome range's own standalone block duplicated the row's numbers;
   removed above). named grid-areas, not source order, define the 2x2 - easy to re-check. */
.gm-rk-detail {
  display: grid; grid-template-columns: 1fr 1fr; grid-template-areas: "outlook drivers" "context why";
  gap: 1.5rem; padding: 1.1rem 1.5rem 1.4rem 4.5rem; background: var(--gm-panel-2); border-top: 1px solid var(--gm-line); cursor: default;
}
.gm-rk-outlook { grid-area: outlook; }
.gm-rk-drivers { grid-area: drivers; }
.gm-rk-context { grid-area: context; }
.gm-rk-why { grid-area: why; }
.gm-rk-panel { min-width: 0; }
.gm-rk-panel h3 { margin: 0 0 0.7rem; font-size: 0.9rem; font-weight: 700; }
.gm-rk-panel h4 { margin: 1rem 0 0.4rem; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); }
.gm-rk-panel p { margin: 0 0 0.9rem; font-size: 0.88rem; line-height: 1.55; }
.gm-rk-muted { color: var(--gm-muted); font-size: 0.86rem; }
/* Item 119's Phase 3 build item (2026-10-05): the Matchup badge and the Matchup/Opponent
   driver can disagree (pending the item-118 retrain experiment) - this explains why, right
   next to the drivers it's about, instead of leaving a silent contradiction on screen. */
.gm-rk-conflict-note { margin: 0.5rem 0 0; padding: 0.5rem 0.65rem; border-radius: 6px; font-size: 0.8rem;
  line-height: 1.4; background: var(--gm-warn-dim); color: var(--gm-warn); }
.gm-rk-bar { position: relative; height: 10px; border-radius: 999px; background: var(--gm-line); margin: 0.4rem 0 1rem; }
.gm-rk-bar-fill { position: absolute; top: 0; bottom: 0; border-radius: 999px; background: var(--gm-brand); opacity: 0.45; }
.gm-rk-bar-dot { position: absolute; top: 50%; width: 16px; height: 16px; margin: -8px 0 0 -8px; border-radius: 50%; background: var(--gm-accent); border: 2px solid var(--gm-panel); box-shadow: 0 0 0 1px var(--gm-accent); box-sizing: border-box; }

/* Collapsed-row Range column (Weekly Rankings Improvement Plan, Collapsed row spec): a slim
   typical-range (25th-75th percentile) bar with a tick at the projection, scaled against
   max_ceiling_by_pos (the page's own full ceiling) so bars stay comparable across rows even
   though the visible band itself is the tighter middle-50%, not the full floor-to-ceiling
   spread. */
.gm-rk-range-cell { display: flex; flex-direction: column; gap: 0.3rem; }
/* Item 120 follow-up (2026-10-05): the bar alone drew real screenshot feedback ("doesn't tell
   a user anything") - a literal number label under it, same tabular-nums/muted treatment the
   histogram's own axis labels use, is what actually makes "this is the band" legible at a
   glance instead of requiring a hover. */
.gm-rk-rangelabel { font-size: 0.72rem; color: var(--gm-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }

/* Matchup 5-segment meter (Collapsed row spec: "5-segment meter + text label") - the text
   pill alone already carried the tone/label; the meter adds "how close to the edge of the
   band" at a glance, same "more filled segments always means better" rule the plan's own
   Matchup score section specifies. Color is still secondary to the text label, never the only
   cue - matches that section's own display rule. */
.gm-rk-matchup-wrap { display: inline-flex; align-items: center; gap: 0.4rem; }
.gm-rk-meter { display: inline-flex; gap: 2px; }
.gm-rk-meter-seg { width: 6px; height: 12px; border-radius: 2px; background: var(--gm-line); }
.gm-rk-meter-seg.is-filled.gm-rk-meter-danger { background: var(--gm-danger); }
.gm-rk-meter-seg.is-filled.gm-rk-meter-warn { background: var(--gm-warn); }
.gm-rk-meter-seg.is-filled.gm-rk-meter-good { background: var(--gm-good); }
/* Real bug, found live (2026-10-05): this is a <span> (inline by default) with no explicit
   width, so its absolutely-positioned fill/tick children had a zero-width containing block to
   compute their left/width percentages against - every row showed only the tick's own small
   fixed size, no visible bar at all. display:block + a real width fixes it. */
.gm-rk-rangebar { display: block; position: relative; width: 100%; height: 6px; border-radius: 999px; background: var(--gm-line); }
.gm-rk-rangebar-fill { position: absolute; top: 0; bottom: 0; border-radius: 999px; background: var(--gm-brand); opacity: 0.5; }
.gm-rk-rangebar-tick { position: absolute; top: 50%; width: 3px; height: 14px; margin: -7px 0 0 -1.5px; border-radius: 2px; background: var(--gm-accent-hover); }
.gm-rk-outcome-nums { display: flex; flex-wrap: wrap; gap: 0.75rem 1.5rem; margin: 0; }
.gm-rk-outcome-nums div { display: flex; flex-direction: column; }
.gm-rk-outcome-nums dt { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); }
.gm-rk-outcome-nums dd { margin: 0; font-size: 1.15rem; font-weight: 650; font-variant-numeric: tabular-nums; }
.gm-rk-outcome-nums .is-main dd { color: var(--gm-accent-hover); font-size: 1.4rem; }
/* Scoring outlook chart (item 80, 2026-09-22) - expanded-row real distribution, replacing the
   plain floor/proj/ceiling/boom/bust number list per the Scoring Outcomes dev notes. */
.gm-outlook-head { display: flex; align-items: baseline; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.5rem; }
.gm-outlook-head .gm-outlook-sub { font-size: 0.78rem; color: var(--gm-muted); }
/* 2026-10-12 shelf cleanup: only bars, the axis line and the marker line are drawn in the stretched SVG; all chart text is
   HTML placed by percentage (scoring_outlook.js buildChart), so it stays 11px instead of scaling with the viewBox. */
.gm-outlook-figure { position: relative; }
.gm-outlook-plot { position: relative; padding-top: 16px; }
.gm-outlook-chart { width: 100%; height: 96px; display: block; overflow: visible; }
.gm-outlook-bar { fill: var(--gm-muted-2); }
.gm-outlook-bar.b-bust { fill: var(--gm-danger); }
.gm-outlook-bar.b-below { fill: var(--gm-warn); }
.gm-outlook-bar.b-strong { fill: var(--gm-good); }
.gm-outlook-bar.b-boom { fill: var(--gm-boom); }
.gm-outlook-axis-line { stroke: var(--gm-line-control); stroke-width: 1; }
.gm-outlook-marker { position: absolute; top: 2px; bottom: 0; width: 0; border-left: 1px dashed var(--gm-ink); pointer-events: none; }
.gm-outlook-marker-label { position: absolute; top: 0; padding-left: 4px; font-size: 11px; line-height: 14px; font-weight: 600; color: var(--gm-ink); white-space: nowrap; }
.gm-outlook-marker-label.is-left { transform: translateX(-100%); padding: 0 4px 0 0; }
.gm-outlook-ticks { position: relative; height: 18px; }
.gm-outlook-tick { position: absolute; top: 4px; transform: translateX(-50%); font-size: 11px; line-height: 14px; color: var(--gm-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
.gm-outlook-tick::before { content: ""; position: absolute; left: 50%; top: -4px; height: 4px; border-left: 1px solid var(--gm-line-control); }
.gm-outlook-tick.is-first { transform: none; }
.gm-outlook-tick.is-first::before { left: 0; }
.gm-outlook-tick.is-last { transform: translateX(-100%); }
.gm-outlook-tick.is-last::before { left: auto; right: 0; }
.gm-outlook-range-row { position: relative; height: 24px; margin-top: 2px; }
.gm-outlook-bracket { position: absolute; top: 0; height: 5px; box-sizing: border-box; border: 1.5px solid var(--gm-muted-2); border-top: none; }
.gm-outlook-range-label { position: absolute; top: 8px; transform: translateX(-50%); font-size: 11px; line-height: 14px; color: var(--gm-muted); white-space: nowrap; }
.gm-outlook-key { display: flex; flex-wrap: wrap; gap: 0.3rem 0.8rem; margin: 0.6rem 0 0; padding: 0; list-style: none; font-size: 0.74rem; color: var(--gm-muted); }
.gm-outlook-key li { display: flex; align-items: center; gap: 0.3rem; }
.gm-outlook-key-swatch { width: 9px; height: 9px; border-radius: 2px; background: var(--gm-muted-2); }
.gm-outlook-key li.b-bust .gm-outlook-key-swatch { background: var(--gm-danger); }
.gm-outlook-key li.b-below .gm-outlook-key-swatch { background: var(--gm-warn); }
.gm-outlook-key li.b-strong .gm-outlook-key-swatch { background: var(--gm-good); }
.gm-outlook-key li.b-boom .gm-outlook-key-swatch { background: var(--gm-boom); }
.gm-outlook-nums { display: flex; flex-wrap: wrap; gap: 0.75rem 1.5rem; margin: 0.6rem 0 0; }
.gm-outlook-nums div { display: flex; flex-direction: column; }
.gm-outlook-nums dt { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); }
.gm-outlook-nums dd { margin: 0; font-size: 1.1rem; font-weight: 650; font-variant-numeric: tabular-nums; }
.gm-outlook-typical { margin: 0.5rem 0 0; font-size: 0.8rem; color: var(--gm-muted); }
.gm-outlook-buckets { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.6rem; margin: 0.5rem 0 0; padding: 0; list-style: none; }
.gm-outlook-buckets li { border-top: 3px solid var(--gm-line); padding-top: 0.4rem; }
.gm-outlook-buckets li.b-bust { border-top-color: var(--gm-danger); }
.gm-outlook-buckets li.b-below { border-top-color: var(--gm-warn); }
.gm-outlook-buckets li.b-strong { border-top-color: var(--gm-good); }
.gm-outlook-buckets li.b-boom { border-top-color: var(--gm-boom); }
.gm-outlook-buckets .gm-outlook-pct { display: block; font-size: 1.05rem; font-weight: 650; font-variant-numeric: tabular-nums; }
.gm-outlook-buckets .gm-outlook-label { display: block; font-size: 0.74rem; color: var(--gm-muted); }
.gm-outlook-buckets .gm-outlook-range { display: block; font-size: 0.72rem; color: var(--gm-muted-2); }
.gm-outlook-threshold { display: flex; align-items: center; gap: 0.5rem; margin-top: 0.85rem; font-size: 0.86rem; }
.gm-outlook-threshold input { width: 4.5rem; padding: 0.25rem 0.4rem; border: 1px solid var(--gm-line-control); border-radius: 6px; background: var(--gm-panel); color: var(--gm-ink); font-variant-numeric: tabular-nums; }
.gm-outlook-threshold .gm-outlook-threshold-pct { font-weight: 650; color: var(--gm-accent-hover); font-variant-numeric: tabular-nums; }
@media (max-width: 640px) {
  .gm-outlook-buckets { grid-template-columns: repeat(2, 1fr); }
}

.gm-rk-kv { margin: 0; display: flex; flex-direction: column; gap: 0.45rem; }
.gm-rk-kv div { display: flex; justify-content: space-between; gap: 1rem; font-size: 0.86rem; border-bottom: 1px solid var(--gm-line); padding-bottom: 0.35rem; }
.gm-rk-kv dt { color: var(--gm-muted); }
.gm-rk-kv dd { margin: 0; font-weight: 600; text-align: right; }
/* Model drivers' baseline/projection rows (item 119 follow-up, 2026-10-05) - visually set
   apart from the group deltas between them, since they're the two numbers the deltas sum
   between, not another driver. */
.gm-rk-kv div.is-total { border-bottom: none; border-top: 2px solid var(--gm-line-control); padding-top: 0.35rem; margin-top: 0.1rem; }
.gm-rk-kv div.is-total dt, .gm-rk-kv div.is-total dd { color: var(--gm-accent-hover); font-weight: 700; }
/* This Week's Factors (2026-10-12): label pills reuse the Form rating's .gm-form classes; one info button by the heading
   opens what each category covers (no per-row hover text). */
.gm-factors { margin-top: 0.5rem; }
.gm-factors-help { display: inline-flex; align-items: center; justify-content: center; width: 1.05rem; height: 1.05rem; margin-left: 0.4rem;
  padding: 0; border: 1px solid var(--gm-line-control); border-radius: 50%; background: transparent; color: var(--gm-muted);
  font: italic 700 0.68rem/1 Georgia, serif; vertical-align: 0.12em; cursor: pointer; }
.gm-factors-help:hover, .gm-factors-help[aria-expanded="true"] { color: var(--gm-accent-hover); border-color: var(--gm-accent-hover); }
.gm-factors-help:focus-visible { outline: 2px solid var(--gm-accent-hover); outline-offset: 2px; }
.gm-factors-defs { margin: 0.5rem 0 0.6rem; padding: 0.6rem 0.75rem; border: 1px solid var(--gm-line); border-radius: 8px; background: var(--gm-panel); font-size: 0.8rem; }
.gm-factors-defs dt { font-weight: 700; }
.gm-factors-defs dd { margin: 0 0 0.4rem; color: var(--gm-muted); }
.gm-factors-defs dd:last-child { margin-bottom: 0; }
.gm-factors dd .gm-form { cursor: default; }
/* Factor labels: every tier is a chip in its Form rating colours, all one size (Form rating pills elsewhere unchanged). */
.gm-factors .gm-form { display: inline-flex; align-items: center; gap: 4px; height: 22px; padding: 0 8px; border-radius: 11px; font-size: 12px; font-weight: 600; line-height: 1; }
.gm-factors .gm-form-good { background: var(--gm-good-dim); }
.gm-factors .gm-form-steady { background: color-mix(in srgb, var(--gm-muted) 12%, transparent); }
.gm-factors .gm-form-cooling { background: var(--gm-warn-dim); }
.gm-factors-admin-h { margin: 0.9rem 0 0.4rem; font-size: 0.78rem; color: var(--gm-muted); text-transform: uppercase; letter-spacing: 0.04em; }
.gm-rk-statline { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.4rem 1rem; font-size: 0.84rem; }
.gm-rk-statline li { display: flex; gap: 0.35rem; }
.gm-rk-statline span { color: var(--gm-muted); }
.gm-rk-actions { display: flex; flex-wrap: wrap; gap: 0.5rem; }

.gm-rk-empty { padding: 2.5rem 1rem; text-align: center; }
.gm-rk-empty p { color: var(--gm-muted); margin: 0.3rem 0 1rem; }

.gm-rk-selbar {
  position: fixed; left: 50%; bottom: 1.25rem; transform: translateX(-50%); z-index: 60;
  display: flex; align-items: center; gap: 1rem; padding: 0.7rem 1rem; background: var(--gm-panel);
  border: 1px solid var(--gm-line-control); border-radius: 12px; box-shadow: var(--gm-shadow-float); font-size: 0.88rem;
}
.gm-rk-selbar a.is-disabled { opacity: 0.55; pointer-events: none; }

.gm-rk-fieldset { border: 0; margin: 0 0 1.25rem; padding: 0; }
.gm-rk-fieldset legend { padding: 0; margin-bottom: 0.5rem; font-size: 0.78rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); }
.gm-rk-radio { display: flex; align-items: center; gap: 0.6rem; min-height: 40px; font-size: 0.92rem; }
.gm-rk-radio input { width: 18px; height: 18px; accent-color: var(--gm-accent); }

@media (max-width: 900px) {
  .gm-rk-selbar { bottom: 76px; width: calc(100% - 2rem); box-sizing: border-box; justify-content: space-between; }
}

@media (max-width: 760px) {
  .gm-rk-fresh { display: none; }
  .gm-rk-sub { display: none; }
  .gm-rk-context { gap: 0.5rem; }
  .gm-rk-select-wrap { flex: 1 1 0; min-width: 0; }
  .gm-rk-select-wrap > span { display: none; }
  .gm-rk-select-wrap select { width: 100%; min-width: 0; }
  .gm-rk-controls { gap: 0.5rem; }
  /* phone order per spec: position -> search + filters -> rankings/tiers */
  .gm-rk-controls > .gm-seg:first-child { width: 100%; order: 1; }
  .gm-rk-controls > .gm-seg:first-child .gm-seg-item { flex: 1; min-width: 0; padding: 0.35rem 0.2rem; }
  .gm-rk-search { flex: 1 1 200px; width: auto; min-width: 0; order: 2; }
  .gm-rk-mine { white-space: nowrap; }
  .gm-rk-filter-btn { order: 3; }
  .gm-rk-controls > .gm-seg:nth-child(2) { order: 4; }
  .gm-rk-headrow { display: none; }
  .gm-rk-table { border-radius: 10px; }

  .gm-rk-row {
    grid-template-columns: 30px 38px minmax(0, 1fr) auto 32px;
    grid-template-areas: "rank badge player proj chev" ". . matchup matchup .";
    padding: 0.4rem 0.25rem; min-height: 62px; column-gap: 0.4rem;
  }
  .gm-rk-player { display: contents; }
  .gm-rk-player .gm-team-badge { grid-area: badge; }
  .gm-rk-idblock { grid-area: player; }
  .gm-rk-rank { grid-area: rank; font-size: 0.85rem; }
  .gm-rk-proj { grid-area: proj; justify-self: end; font-size: 1rem; }
  /* Narrow-screen spec: keep Rank, Player, Proj and the matchup meter on the row; Range,
     Great % and Signal move into the expanded panel instead of competing for phone width. */
  .gm-rk-great, .gm-rk-range-cell, .gm-rk-signal { display: none; }
  .gm-rk-matchup { grid-area: matchup; padding-bottom: 0.15rem; }
  .gm-rk-matchup:empty { display: none; }
  .gm-rk-chev { grid-area: chev; }
  .gm-rk-name { font-size: 0.95rem; }
  /* selection on phones = the button inside the expanded row, not a checkbox on every row */
  .gm-rk-row:hover .gm-rk-check { opacity: 0; }
  .gm-rk-row:hover .gm-rk-num { visibility: visible; }
  .gm-rk-check:checked { opacity: 1; }
  .gm-rk-check:checked ~ .gm-rk-num { visibility: hidden; }
  .gm-rk-detail { grid-template-columns: minmax(0, 1fr); grid-template-areas: "outlook" "drivers" "context" "why"; gap: 1.1rem; padding: 1rem; }
  .gm-rk-tier { padding: 0.5rem 0.75rem; }

  .gm-rk-drawer { top: auto; left: 0; right: 0; bottom: 0; width: 100%; max-height: 85vh; border-left: 0; border-top: 1px solid var(--gm-line); border-radius: 16px 16px 0 0; }
  .gm-rk-drawer .gm-btn { min-height: 44px; }
}

/* ==========================================================================
   Player Profile (Player Profile Wireframe Spec v1): one continuous page, sticky jump-nav, open sections with
   dividers rather than a tower of cards. Two bordered/tinted surfaces only: Decision Snapshot and Outcome range.
   ========================================================================== */
.gm-pf { max-width: 1360px; margin: 0 auto; --gm-topbar-h: 65px; }
.gm-pf > .gm-back-link { display: inline-block; margin-bottom: 0.5rem; }
.gm-pf-header { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 1rem 2rem; min-height: 96px; padding-bottom: 1rem; }
.gm-pf-identity { display: flex; align-items: center; gap: 1rem; min-width: 0; }
.gm-pf-avatar {
  flex: none; display: flex; align-items: center; justify-content: center; width: 72px; height: 72px; border-radius: 50%;
  background: var(--gm-panel-2); border: 1px solid var(--gm-line); color: var(--gm-accent-hover); font-weight: 700; font-size: 0.95rem;
}
.gm-pf-name { margin: 0 0 0.35rem; }
.gm-pf-meta { margin: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; }
.gm-pf-mine { padding: 0.1rem 0.55rem; border-radius: 999px; background: var(--gm-accent-dim); color: var(--gm-accent-hover); font-size: 0.75rem; font-weight: 700; }
.gm-pf-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem; }
.gm-pf-context { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 0; }
.gm-pf-context select { min-height: 40px; box-sizing: border-box; padding: 0.35rem 0.7rem; border: 1px solid var(--gm-line-control); border-radius: 8px; background: var(--gm-panel); color: var(--gm-ink); font: inherit; font-size: 0.88rem; }

.gm-pf-subnav {
  position: sticky; top: var(--gm-topbar-h); z-index: 30; display: flex; gap: 0.25rem; overflow-x: auto; min-height: 44px; align-items: stretch;
  background: var(--gm-bg); border-bottom: 1px solid var(--gm-line); margin-bottom: 1.5rem; scrollbar-width: none;
}
.gm-pf-subnav::-webkit-scrollbar { display: none; }
.gm-pf-subnav a { display: inline-flex; align-items: center; padding: 0 1rem; font-size: 0.88rem; font-weight: 600; color: var(--gm-muted); text-decoration: none; white-space: nowrap; border-bottom: 2px solid transparent; }
.gm-pf-subnav a:hover { color: var(--gm-ink); }
.gm-pf-subnav a.is-active { color: var(--gm-accent-hover); border-bottom-color: var(--gm-accent); }
.gm-pf [id] { scroll-margin-top: 120px; }

.gm-pf-top { display: grid; grid-template-columns: 7fr 5fr; gap: 1.5rem; margin-bottom: 1.5rem; align-items: stretch; }
.gm-pf-snapshot { padding: 1.5rem; background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 12px; min-width: 0; }
.gm-pf-snap-head { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; }
.gm-pf h2 { margin: 0 0 0.6rem; font-size: 1.05rem; font-weight: 700; }
.gm-pf h3 { margin: 0 0 0.5rem; font-size: 0.85rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); }
.gm-pf-hero { display: flex; flex-wrap: wrap; gap: 1rem 3rem; margin: 0.6rem 0 1.25rem; }
.gm-pf-bignum { display: flex; flex-direction: column; }
.gm-pf-label { font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); }
.gm-pf-value { font-size: 2.6rem; font-weight: 700; line-height: 1.1; font-variant-numeric: tabular-nums; color: var(--gm-accent-hover); }
.gm-pf-bignum:nth-child(2) .gm-pf-value { color: var(--gm-ink); }
.gm-pf-muted { color: var(--gm-muted); font-size: 0.85rem; margin: 0.25rem 0; }
.gm-pf-muted.is-stale { color: var(--gm-warn); }
.gm-pf-mini { display: flex; flex-wrap: wrap; gap: 0.75rem 2rem; margin: 0; padding-top: 1rem; border-top: 1px solid var(--gm-line); }
.gm-pf-mini div { display: flex; flex-direction: column; }
.gm-pf-mini dt { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); }
.gm-pf-mini dd { margin: 0; font-size: 1.1rem; font-weight: 650; font-variant-numeric: tabular-nums; }
.gm-pf-statline { margin-top: 1rem; padding-top: 1rem; border-top: 1px solid var(--gm-line); }
.gm-pf-statline .gm-pf-muted { margin: 0 0 0.5rem; }

.gm-pf-sees { padding: 0.5rem 0.25rem; min-width: 0; }
.gm-pf-sees p { margin: 0 0 0.7rem; font-size: 0.95rem; line-height: 1.6; }
.gm-pf-outlook-stance { display: inline-block; padding: 0.15rem 0.6rem; border-radius: 999px; background: var(--gm-accent-dim); color: var(--gm-accent-hover); font-size: 0.72rem; font-weight: 700; letter-spacing: 0.04em; margin-bottom: 0.5rem; }
.gm-pf-outlook-action strong { color: var(--gm-ink); }
.gm-pf-outlook-note { margin: 0.35rem 0 0.2rem; line-height: 1.5; }
.gm-pf-outlook-updated { margin-top: 0; }
.gm-pf-outlook-watch { color: var(--gm-warn); }
.gm-pf-outlook-watch strong { color: inherit; }
.gm-pf-details { margin-top: 0.6rem; font-size: 0.88rem; }
.gm-pf-details summary { cursor: pointer; font-weight: 600; color: var(--gm-accent); min-height: 32px; display: flex; align-items: center; }
.gm-pf-details summary:focus-visible { outline: 2px solid var(--gm-accent); outline-offset: 2px; }

.gm-pf-outcome { padding: 1.5rem; background: var(--gm-panel-2); border: 1px solid var(--gm-line); border-radius: 12px; margin-bottom: 2rem; }
/* .gm-pf-range/.gm-pf-odds (plain gradient bar) removed, item 106 part 2 - replaced by the shared
   GMScoringOutlook histogram component (.gm-outlook-* rules, defined once for every page that uses it). */
.gm-pf-trend-summary { font-size: 1rem; margin: 0.25rem 0 0.75rem; }
.gm-pf-factors { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; padding-top: 1rem; border-top: 1px solid var(--gm-line); }
.gm-pf-factors ul, .gm-pf-leagues { list-style: none; margin: 0; padding: 0; }
.gm-pf-factors li { position: relative; padding: 0.35rem 0 0.35rem 1.1rem; font-size: 0.9rem; line-height: 1.5; }
.gm-pf-factors li::before { content: ""; position: absolute; left: 0; top: 0.85rem; width: 6px; height: 6px; border-radius: 50%; background: var(--gm-muted-2); }
.gm-pf-factors > div:first-child li::before { background: var(--gm-good); }
.gm-pf-factors > div:last-child li::before { background: var(--gm-warn); }
.gm-pf-factors li.gm-pf-muted::before { display: none; }

.gm-pf-two { display: grid; grid-template-columns: 7fr 5fr; gap: 3rem; margin-bottom: 2rem; align-items: start; }
.gm-pf-section { padding: 0 0 1.75rem; border-bottom: 1px solid var(--gm-line); margin-bottom: 2rem; min-width: 0; }
.gm-pf-two .gm-pf-section { margin-bottom: 0; }
.gm-pf-tag { margin-left: 0.4rem; padding: 0.05rem 0.4rem; border: 1px solid var(--gm-line-control); border-radius: 4px; font-size: 0.66rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--gm-muted); vertical-align: middle; }
.gm-pf-outlook { margin: 0 0 0.9rem; font-size: 1rem; font-weight: 600; }
.gm-pf-outlook-good { color: var(--gm-good); }
.gm-pf-outlook-warn { color: var(--gm-warn); }
.gm-pf-outlook-info { color: var(--gm-info); font-weight: 500; }
.gm-pf-lead { display: flex; align-items: center; gap: 0.6rem; margin: 0 0 0.6rem; font-size: 1.05rem; font-weight: 650; }
.gm-pf-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; margin: 0.25rem 0 0.75rem; }
.gm-pf-table th, .gm-pf-table td { padding: 0.45rem 0.5rem; border-bottom: 1px solid var(--gm-line); text-align: left; font-variant-numeric: tabular-nums; }
.gm-pf-table thead th { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); }
.gm-pf-table tbody th { font-weight: 500; }
.gm-pf-table-wide { max-width: 640px; }
.gm-pf-trend { width: 2rem; font-weight: 700; }
.gm-pf-trend-up { color: var(--gm-good); }
.gm-pf-trend-down { color: var(--gm-warn); }
.gm-pf-trend-flat { color: var(--gm-muted); }
.gm-pf-kv { margin: 0.75rem 0; display: flex; flex-direction: column; gap: 0.4rem; }
.gm-pf-kv div { display: flex; justify-content: space-between; gap: 1rem; font-size: 0.88rem; border-bottom: 1px solid var(--gm-line); padding-bottom: 0.35rem; }
.gm-pf-kv dt { color: var(--gm-muted); }
.gm-pf-edges { margin: 0.5rem 0; padding-left: 1.1rem; font-size: 0.88rem; display: flex; flex-direction: column; gap: 0.5rem; }
.gm-pf-edges ul { margin: 0.25rem 0 0; padding-left: 1rem; color: var(--gm-muted); }
.gm-pf-kv dd { margin: 0; font-weight: 600; text-align: right; }
/* Same box for every player (item 107); the tint says whether there's an injury designation. */
.gm-pf-avail { margin-bottom: 0.5rem; padding: 0.9rem 1rem; background: var(--gm-panel-2); border-radius: 10px; }
.gm-pf-avail.is-injured { background: var(--gm-warn-dim); }
.gm-pf-avail-status { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem; margin: 0 0 0.5rem; font-weight: 600; }
.gm-pf-assumption { margin: 0; font-size: 0.9rem; line-height: 1.5; }
.gm-pf-news-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.5rem; }
.gm-pf-news-list li { font-size: 0.9rem; line-height: 1.4; padding-bottom: 0.5rem; border-bottom: 1px solid var(--gm-line); }
.gm-pf-news-list li:last-child { border-bottom: none; padding-bottom: 0; }
.gm-pf-news-list a { color: var(--gm-ink); text-decoration: none; }
.gm-pf-news-when { display: inline-block; min-width: 3.4rem; margin-right: 0.5rem; color: var(--gm-muted); font-size: 0.8rem; font-variant-numeric: tabular-nums; }
.gm-pf-news-list a:hover { color: var(--gm-accent); text-decoration: underline; }
.gm-pf-leagues li { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.25rem 1rem; padding: 0.65rem 0; border-bottom: 1px solid var(--gm-line); font-size: 0.9rem; }
.gm-pf-leagues em { font-style: normal; color: var(--gm-muted); font-size: 0.8rem; margin-left: 0.3rem; }
.gm-pf-league-mine { color: var(--gm-good); font-weight: 600; }
.gm-pf-league-available { color: var(--gm-info); font-weight: 600; }
.gm-pf-league-rostered, .gm-pf-league-unknown { color: var(--gm-muted); }

@media (max-width: 1100px) {
  .gm-pf-top, .gm-pf-two { grid-template-columns: minmax(0, 1fr); }
  .gm-pf-two { gap: 2rem; }
}
@media (max-width: 760px) {
  .gm-pf-header { min-height: 0; gap: 0.75rem; }
  .gm-pf-avatar { width: 52px; height: 52px; font-size: 0.8rem; }
  .gm-pf-controls { width: 100%; }
  .gm-pf-context { width: 100%; }
  .gm-pf-context label { flex: 1 1 0; min-width: 0; }
  .gm-pf-context select { width: 100%; }
  .gm-pf-subnav { margin: 0 -1rem 1.25rem; padding: 0 0.5rem; top: 54px; }
  .gm-pf-snapshot { padding: 1.1rem; }
  .gm-pf-value { font-size: 2.2rem; }
  .gm-pf-outcome { padding: 1.1rem; }
  .gm-pf-factors { grid-template-columns: minmax(0, 1fr); gap: 1rem; }
  /* Item 190: five-column Usage table was wider than a phone (QB names like "Team pass rate over expected") */
  .gm-pf-table th, .gm-pf-table td { padding: 0.4rem 0.3rem; }
  .gm-pf-table thead th { font-size: 0.66rem; letter-spacing: 0.02em; }
  .gm-pf-table .gm-pill { padding-left: 0.4rem; padding-right: 0.4rem; }
}

/* ==========================================================================
   Start / Sit (Start/Sit Wireframe Spec v1): answer first, evidence second, depth on demand. Less dense than Rankings.
   ========================================================================== */
.gm-ss { max-width: 1200px; margin: 0 auto; }
.gm-ss > .gm-back-link { display: inline-block; margin-bottom: 0.5rem; }
.gm-ss-card { padding: 1.25rem; background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 12px; }
.gm-ss-setup { padding: 1.5rem; background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 12px; margin-bottom: 1.5rem; }
.gm-ss-setup h2 { margin: 0.25rem 0 0.75rem; font-size: 1.05rem; }
.gm-ss-context { display: flex; flex-wrap: wrap; gap: 0.75rem 1.5rem; margin-bottom: 1rem; }
.gm-ss-context label { display: inline-flex; align-items: center; gap: 0.5rem; font-size: 0.8rem; font-weight: 600; color: var(--gm-muted); }
.gm-ss-context select { min-height: 40px; box-sizing: border-box; padding: 0.35rem 0.7rem; border: 1px solid var(--gm-line-control); border-radius: 8px; background: var(--gm-panel); color: var(--gm-ink); font: inherit; font-size: 0.88rem; font-weight: 500; }

.gm-ss-slots { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 0.75rem; margin-bottom: 1rem; }
.gm-ss-slot { display: flex; flex-direction: column; justify-content: center; gap: 0.5rem; min-height: 84px; box-sizing: border-box; padding: 0.8rem 1rem; border: 1px solid var(--gm-line-control); border-radius: 10px; background: var(--gm-panel); font: inherit; }
.gm-ss-slot-empty { align-items: center; border-style: dashed; color: var(--gm-accent-hover); font-weight: 600; cursor: pointer; background: var(--gm-panel-2); }
.gm-ss-slot-empty:hover { background: var(--gm-hover); }
.gm-ss-slot-empty:focus-visible { outline: 2px solid var(--gm-accent); outline-offset: 2px; }
.gm-ss-slot-main { display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem 0.5rem; }
.gm-ss-slot-name { font-size: 1rem; }
.gm-ss-slot-meta { color: var(--gm-muted); font-size: 0.82rem; }
.gm-ss-slot-actions { display: flex; align-items: center; gap: 1rem; font-size: 0.82rem; }
.gm-ss-slot-actions .gm-btn { white-space: nowrap; }

.gm-ss-picker { border: 1px solid var(--gm-line); border-radius: 10px; padding: 0.9rem; margin-bottom: 1rem; background: var(--gm-panel-2); }
.gm-ss-picker-top { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem; margin-bottom: 0.75rem; }
.gm-ss-picker[hidden] { display: none; }
.gm-ss-results { display: flex; flex-direction: column; max-height: 300px; overflow-y: auto; background: var(--gm-panel); border-radius: 8px; border: 1px solid var(--gm-line); }
.gm-ss-result { display: flex; align-items: center; gap: 0.75rem; min-height: 44px; padding: 0.4rem 0.9rem; border: 0; border-bottom: 1px solid var(--gm-line); background: transparent; font: inherit; text-align: left; cursor: pointer; }
.gm-ss-result:last-child { border-bottom: 0; }
.gm-ss-result:hover, .gm-ss-result:focus-visible { background: var(--gm-hover); }
.gm-ss-result-name { font-weight: 600; }
.gm-ss-result-meta { color: var(--gm-muted); font-size: 0.82rem; }

.gm-ss-strategy { padding-top: 0.5rem; border-top: 1px solid var(--gm-line); }
.gm-ss-blurb { margin: 0.6rem 0 0; font-size: 0.86rem; color: var(--gm-muted); }
.gm-ss-prompt { padding: 1.25rem 0.25rem; color: var(--gm-ink); }
.gm-ss-prompt[hidden], #gm-ss-output[hidden] { display: none; }
.gm-ss-chips { display: flex; flex-wrap: wrap; gap: 0.5rem; }

.gm-ss-lean { padding: 1.5rem; background: var(--gm-panel); border: 1px solid var(--gm-line); border-left: 4px solid var(--gm-accent); border-radius: 12px; margin-bottom: 1.5rem; }
.gm-ss-lean-head { display: flex; flex-direction: column; gap: 0.15rem; }
.gm-ss-lean-label { font-size: 0.8rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--gm-accent-hover); }
.gm-ss-lean-name { margin: 0; font-size: 1.7rem; }
.gm-ss-lean-note { margin: 0.6rem 0 0; font-size: 0.95rem; line-height: 1.55; max-width: 70ch; }
.gm-ss-lean-shift { margin: 0.6rem 0 0; padding: 0.5rem 0.75rem; border-radius: 8px; background: var(--gm-info-dim); color: var(--gm-info); font-size: 0.88rem; font-weight: 600; }
.gm-ss-lean-warn { margin: 0.6rem 0 0; padding: 0.5rem 0.75rem; border-radius: 8px; background: var(--gm-warn-dim); color: var(--gm-warn); font-size: 0.88rem; font-weight: 600; }
.gm-ss-order { margin: 0.25rem 0 0; padding-left: 1.2rem; font-size: 0.9rem; }

.gm-ss-compare { margin-bottom: 1.5rem; }
.gm-ss-keydiff h3 { margin: 0 0 0.5rem; font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); }
.gm-ss-keydiff { display: none; }
.gm-ss-kd-row { padding: 0.65rem 0; border-bottom: 1px solid var(--gm-line); }
.gm-ss-kd-label { display: block; font-size: 0.8rem; color: var(--gm-muted); margin-bottom: 0.15rem; }
.gm-ss-kd-vals { display: flex; flex-wrap: wrap; gap: 0.25rem 1.25rem; font-weight: 600; font-size: 0.95rem; }
.gm-ss-kd-val em { font-style: normal; font-weight: 400; color: var(--gm-muted); }
.gm-ss-kd-val.is-best { color: var(--gm-accent-hover); }
.gm-ss-allbtn { display: none; margin-top: 0.75rem; }
.gm-ss-grid-title, .gm-ss-gridrow.gm-ss-namerow { display: none; }

.gm-ss-grid { --n: 2; background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 12px; overflow: hidden; }
.gm-ss-gridrow { display: grid; grid-template-columns: 190px repeat(var(--n), minmax(0, 1fr)); align-items: center; min-height: 46px; padding: 0 1rem; border-bottom: 1px solid var(--gm-line); column-gap: 1rem; }
.gm-ss-gridhead { align-items: start; min-height: 90px; padding-top: 1rem; padding-bottom: 0.75rem; background: var(--gm-panel-2); }
.gm-ss-playerhead { display: flex; flex-direction: column; gap: 0.2rem; }
.gm-ss-playerhead strong { font-size: 1.05rem; }
.gm-ss-playerhead .gm-rk-mine { align-self: flex-start; margin-left: 0; }
.gm-ss-rowlabel { font-size: 0.86rem; color: var(--gm-muted); }
.gm-ss-cell { font-variant-numeric: tabular-nums; font-size: 0.95rem; padding: 0.4rem 0; }
.gm-ss-cell.is-best { color: var(--gm-accent-hover); font-weight: 700; }
.gm-ss-group { min-height: 36px; display: flex; align-items: center; padding: 0 1rem; background: var(--gm-good-dim); border-bottom: 1px solid var(--gm-line); font-size: 0.78rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-accent-hover); }
.gm-ss-gridrow:last-child { border-bottom: 0; }
.gm-ss-range { position: relative; height: 10px; border-radius: 999px; background: var(--gm-line); margin: 0.4rem 0 0.35rem; }
.gm-ss-range-band { position: absolute; top: 0; bottom: 0; border-radius: 999px; background: var(--gm-brand); opacity: 0.5; }
.gm-ss-range-mid { position: absolute; top: -3px; width: 4px; height: 16px; margin-left: -2px; border-radius: 2px; background: var(--gm-accent-hover); }
/* the floor / projection / ceiling numbers, each under its mark (owner 10-29) */
.gm-ss-range-nums { position: relative; height: 1.3rem; font-size: 0.85rem; color: var(--gm-muted); }
.gm-ss-range-nums span { position: absolute; top: 0; transform: translateX(-50%); white-space: nowrap; }
.gm-ss-range-nums .is-proj { color: var(--gm-ink); font-weight: 600; }

.gm-ss-reasons { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 3rem; margin-bottom: 1.25rem; }
.gm-ss-reasons h2 { margin: 0 0 0.5rem; font-size: 1.05rem; }
.gm-pf-factors-list { list-style: none; margin: 0; padding: 0; }
.gm-pf-factors-list li { position: relative; padding: 0.4rem 0 0.4rem 1.1rem; font-size: 0.92rem; line-height: 1.5; border-bottom: 1px solid var(--gm-line); }
.gm-pf-factors-list li::before { content: ""; position: absolute; left: 0; top: 0.95rem; width: 6px; height: 6px; border-radius: 50%; background: var(--gm-muted-2); }
.gm-ss-scenarios { border-top: 1px solid var(--gm-line); padding-top: 0.75rem; }
.gm-ss-scenarios summary { cursor: pointer; font-weight: 600; color: var(--gm-accent); min-height: 36px; display: flex; align-items: center; }
.gm-ss-scenarios ul { margin: 0.5rem 0 0; padding-left: 1.2rem; line-height: 1.6; }
.gm-ss-scenarios[hidden] { display: none; }

@media (max-width: 900px) {
  .gm-ss-reasons { grid-template-columns: minmax(0, 1fr); gap: 1.5rem; }
}
@media (max-width: 760px) {
  .gm-ss-sub { display: none; }
  .gm-ss-setup { padding: 1rem; }
  .gm-ss-context { gap: 0.5rem; }
  .gm-ss-context label { flex: 1 1 0; min-width: 0; }
  .gm-ss-context label > span { display: none; }
  .gm-ss-context select { width: 100%; }
  .gm-ss-slots { grid-template-columns: minmax(0, 1fr); gap: 0.5rem; }
  /* compact rows so the lean is on the first phone screen (spec: answer first) */
  .gm-ss-slot.is-filled { flex-direction: row; align-items: center; justify-content: space-between; min-height: 0; padding: 0.55rem 0.8rem; }
  .gm-ss-slot-empty { min-height: 48px; }
  .gm-ss-slot-actions .gm-link:not(button) { display: none; }
  .gm-ss-strategy .gm-seg { display: flex; }
  .gm-ss-strategy .gm-seg-item { flex: 1; min-width: 0; padding: 0.35rem 0.25rem; }
  .gm-ss-lean { padding: 1.1rem; }
  .gm-ss-lean-name { font-size: 1.4rem; }
  .gm-ss-keydiff { display: block; }
  /* item 222: a full-width green toggle like Home's Compare buttons, chevron down / up, room above and below */
  .gm-btn.gm-ss-allbtn { display: flex; align-items: center; justify-content: center; width: 100%; min-height: 44px; margin: 1rem 0 1.5rem;
    border-color: var(--gm-accent); background: transparent; color: var(--gm-accent); font-size: 0.9rem; font-weight: 600;
    -webkit-tap-highlight-color: transparent; }
  .gm-btn.gm-ss-allbtn[aria-expanded="true"] { margin-bottom: 1rem; }
  .gm-ss-grid { display: none; }
  .gm-ss-grid.is-open { display: block; }
  /* item 222: "More metrics" lists only what Key Differences does not; sections get real headings (no band) and each metric is one
     line in the Key Differences style - "Pitts 22% Fannin 18%", the leader in green */
  .gm-ss-grid-title { display: block; margin: 0; padding: 1rem 1rem 0; font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.04em;
    color: var(--gm-muted); }
  .gm-ss-gridrow.is-kd, .gm-ss-group.is-kd { display: none; }
  .gm-ss-group { min-height: 0; padding: 1.5rem 1rem 0.5rem; background: none; font-size: 1rem; font-weight: 600; text-transform: none;
    letter-spacing: 0; color: var(--gm-ink); }
  .gm-ss-gridrow { grid-template-columns: minmax(0, 1fr) repeat(var(--n), minmax(4rem, max-content)); align-items: baseline; column-gap: 0.5rem; min-height: 0;
    padding: 0.55rem 1rem; }
  .gm-ss-gridrow .gm-ss-cell { max-width: 6.5rem; padding: 0; text-align: right; font-weight: 600; }
  .gm-ss-gridrow.gm-ss-namerow { display: grid; padding-top: 0.75rem; padding-bottom: 0.5rem; }
  .gm-ss-namerow .gm-ss-cell { font-size: 0.8rem; font-weight: 600; color: var(--gm-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  /* the range bars need the width: one bar per line, the name before it */
  .gm-ss-rangerow { grid-template-columns: minmax(0, 1fr); row-gap: 0.15rem; }
  .gm-ss-rangerow .gm-ss-cell { max-width: none; text-align: left; font-weight: 400; }
  .gm-ss-rangerow .gm-ss-cell[data-name]::before { content: attr(data-name); color: var(--gm-muted); }
  .gm-ss-gridhead { display: none; }
  .gm-ss-picker-top .gm-rk-search { flex: 1 1 100%; width: auto; }
}

/* Player Explorer: same table language as Weekly Rankings, one extra column (opponent) and a quick-look row. */
.gm-px { --gm-rk-cols: 72px minmax(240px, 320px) 80px 100px 140px minmax(0, 1fr) 40px; }
.gm-px .gm-rk-rank { font-size: 0.82rem; }
.gm-px-detail { padding-left: 5rem; }
.gm-px-more { display: flex; justify-content: center; padding: 1rem; border-top: 1px solid var(--gm-line); }
.gm-px-more[hidden] { display: none; }
@media (max-width: 760px) {
  .gm-px .gm-rk-row { grid-template-columns: 44px 38px minmax(0, 1fr) auto 32px; }
  .gm-px .gm-px-opp { display: none; }
  .gm-px-detail { padding-left: 1rem; }
}

/* Projection Matrix: same table language as Weekly Rankings; the column set is dynamic (presets / custom). */
.gm-pm { max-width: 1440px; }
.gm-pm .gm-rk-headrow, .gm-pm .gm-rk-row { grid-template-columns: var(--pm-cols, 64px minmax(220px, 300px) repeat(4, minmax(78px, 1fr)) 150px 40px); }
.gm-pm .gm-rk-row { min-height: 58px; }
.gm-pm .gm-rk-rank { font-size: 0.82rem; }
/* Step 5 (dev plan, 2026-10-15): every number the same size and full-contrast color; Proj leads by weight only. Numbers right-aligned under
   right-aligned headers; fixed column widths (set in the page script) with the spare width after the last column. */
.gm-pm-cell { font-variant-numeric: tabular-nums; font-size: 14px; font-weight: 400; color: var(--gm-ink); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gm-pm-cell.is-primary { font-size: 14px; font-weight: 600; color: var(--gm-ink); }
/* Round 3 (owner 10-15): values and headers centered in equal-width columns, with a 24px gap between kinds of number. */
.gm-pm-cell { text-align: center; }
.gm-pm .gm-rk-headrow { font-size: 11px; color: var(--gm-muted); line-height: 1.2; }
.gm-pm .gm-rk-headrow > [data-key] { white-space: normal; }
.gm-pm .gm-rk-headrow > [data-key] { justify-self: stretch; text-align: center; }
.gm-pm-band { align-items: end; }
.gm-pm-band .gm-pm-band-seg { white-space: normal; line-height: 1.25; }
.gm-pm-band .gm-pm-band-seg { text-align: center; }   /* a label over one narrow column wraps rather than being cut */
.gm-pm-wx { display: inline-flex; vertical-align: -3px; margin-right: 0.3rem; color: var(--gm-muted); }
/* Step 4 (dev plan, 2026-10-15): the header band names the kind of number over each run of columns; the column guide explains each. */
.gm-pm-band { display: grid; grid-template-columns: var(--pm-cols); column-gap: 0.5rem; padding: 0.45rem 0.5rem 0; background: var(--gm-panel-2); border-radius: 12px 12px 0 0; }
.gm-pm-band + .gm-rk-headrow { border-radius: 0; }
.gm-pm-band-seg { padding-bottom: 0.3rem; border-bottom: 2px solid var(--gm-line); font-size: 11px; font-weight: 600; letter-spacing: 0.03em; text-transform: uppercase; color: var(--gm-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gm-pm-band-seg[data-band="proj"] { border-bottom-color: var(--gm-accent); }
.gm-pm-guide-btn { display: inline-flex; align-items: center; gap: 0.4rem; }
.gm-pm-guide-list { margin: 0; }
.gm-pm-guide-item { padding: 0.75rem 0; border-bottom: 1px solid var(--gm-line); }
.gm-pm-guide-item:last-child { border-bottom: 0; }
.gm-pm-guide-item dt { display: flex; justify-content: space-between; gap: 0.75rem; align-items: baseline; }
.gm-pm-guide-name { font-weight: 700; color: var(--gm-ink); }
.gm-pm-guide-kind { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.03em; color: var(--gm-muted); white-space: nowrap; }
.gm-pm-guide-item dd { margin: 0.25rem 0 0; font-size: 0.9rem; color: var(--gm-ink); line-height: 1.4; }
.gm-pm-guide-better { display: block; margin-top: 0.2rem; font-size: 0.8rem; color: var(--gm-muted); }
.gm-pm-modes { justify-content: space-between; }
.gm-pm-context { margin: 0; }
.gm-pm-viewrow { margin-top: -0.25rem; }
.gm-pm-sortmobile { display: none; }
.gm-pm-sortmobile select, .gm-pm-select, .gm-pm-number { min-height: 40px; box-sizing: border-box; padding: 0.35rem 0.7rem; border: 1px solid var(--gm-line-control); border-radius: 8px; background: var(--gm-panel); color: var(--gm-ink); font: inherit; font-size: 0.88rem; }
.gm-pm-number { width: 90px; margin-left: 0.5rem; }
.gm-pm-popwrap { position: relative; }
.gm-pm-pop { position: absolute; z-index: 50; top: calc(100% + 6px); left: 0; width: 260px; max-height: 420px; overflow-y: auto; padding: 0.5rem 0.9rem 0.9rem; background: var(--gm-panel); border: 1px solid var(--gm-line-control); border-radius: 10px; box-shadow: var(--gm-shadow-float); }
.gm-pm-pop[hidden] { display: none; }
.gm-pm-pop-group { margin: 0.7rem 0 0.25rem; font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); }
.gm-pm-pop-item { display: flex; align-items: center; gap: 0.4rem; min-height: 32px; font-size: 0.9rem; cursor: pointer; }
.gm-pm-pop-item input { width: 16px; height: 16px; accent-color: var(--gm-accent); }
.gm-pm-pop-divider { margin: 0.7rem 0 0.4rem; padding-top: 0.55rem; border-top: 1px solid var(--gm-line); }
.gm-pm-view-row { display: flex; align-items: center; gap: 0.3rem; min-height: 30px; }
.gm-pm-view-load { flex: 1; min-width: 0; text-align: left; background: none; border: none; padding: 0.2rem 0; color: var(--gm-ink); cursor: pointer; font-size: 0.85rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gm-pm-view-load:hover { color: var(--gm-accent); }
.gm-pm-view-del { flex: none; background: none; border: none; color: var(--gm-muted); cursor: pointer; font-size: 1rem; line-height: 1; padding: 0.1rem 0.35rem; }
.gm-pm-view-del:hover { color: var(--gm-warn); }
.gm-pm-view-empty { font-size: 0.82rem; color: var(--gm-muted); margin: 0; }
.gm-pm-view-save-row { display: flex; gap: 0.35rem; margin-top: 0.5rem; }
.gm-pm-view-save-row input { flex: 1; min-width: 0; font-size: 0.85rem; padding: 0.3rem 0.5rem; border: 1px solid var(--gm-line-control); border-radius: 6px; background: var(--gm-panel-2); color: var(--gm-ink); }
.gm-pm-view-save-row button { flex: none; }
/* Advanced Stats (item 130 phase 3): the Projection Matrix table model plus a window, cohort filters and reliability fading */
.gm-as-check { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.88rem; color: var(--gm-ink); }
.gm-as-check input[type="checkbox"] { width: 16px; height: 16px; accent-color: var(--gm-accent); }
.gm-as-check .gm-pm-number { margin-left: 0.15rem; }
.gm-as-range { display: inline-flex; gap: 0.75rem; }
.gm-as-range[hidden] { display: none; }
.gm-as .gm-pm-cell.is-unsettled { opacity: 0.55; }
.gm-pm .gm-pm-cell.is-unsettled { opacity: 0.55; }   /* round 2: the same faded rate as Advanced Stats, with its Low reliability tooltip */
.gm-pm-szn { display: none; }                         /* " szn" on season headers of a mixed tab: phones only (desktop has the band) */
/* item 130 phase 3: the "Since role change" / "With current QB" windows - games column, the window label (tooltip: week and reason), low sample */
.gm-as-gcol { text-align: center; color: var(--gm-muted); }
.gm-as-window-label { color: var(--gm-muted); }
.gm-as-lowsample { margin-left: 0.35rem; padding: 0.02rem 0.4rem; border-radius: 999px; background: var(--gm-neutral-dim); color: var(--gm-muted); font-size: 0.68rem; }
/* item 130: the raw box-score value beside a sample-size-adjusted rate on the Advanced Stats board */
.gm-as-raw { margin-left: 0.3rem; color: var(--gm-muted); font-size: 0.72em; font-weight: 400; }
.gm-as-weak { margin-left: auto; padding: 0.05rem 0.45rem; border-radius: 999px; background: var(--gm-neutral-dim); color: var(--gm-muted); font-size: 0.68rem; white-space: nowrap; }
.gm-as-foot { margin: 0.75rem 0 1rem; }
/* the League / Window group keeps the shared context margin-bottom, which sat it 6px above the switches beside it (owner 10-16) */
.gm-as-top > .gm-as-window { margin-bottom: 0; }
.gm-as-defs { margin-bottom: 1.5rem; }
.gm-as-script { margin-top: 1rem; }
/* Team Stats (item 177): the Fantasy view's position picker sits under the view tabs */
.gm-ts-picker { margin-top: -0.25rem; }
/* Matchups & Schedule (owner doc 10-18): opponent chips colored by the Matchup labels' five bands, playoff weeks shaded */
.gm-ms .gm-pm-cell { text-align: center; align-self: stretch; display: flex; align-items: center; justify-content: center; }
.gm-ms-chip { display: inline-flex; align-items: center; justify-content: center; min-width: 48px; min-height: 26px; padding: 0 0.3rem; box-sizing: border-box;
  border-radius: 6px; font-size: 0.8rem; font-variant-numeric: tabular-nums; color: var(--gm-ink); border: 1px solid transparent; white-space: nowrap; }
.gm-ms-b0 { background: color-mix(in srgb, var(--gm-danger) 34%, transparent); }
.gm-ms-b1 { background: color-mix(in srgb, var(--gm-danger) 12%, transparent); border-color: color-mix(in srgb, var(--gm-danger) 40%, transparent); }
.gm-ms-b2 { background: transparent; border-color: var(--gm-line-control); }
.gm-ms-b3 { background: color-mix(in srgb, var(--gm-good) 14%, transparent); border-color: color-mix(in srgb, var(--gm-good) 40%, transparent); }
.gm-ms-b4 { background: color-mix(in srgb, var(--gm-good) 34%, transparent); }
.gm-ms-bye { background: transparent; border: 1px dashed var(--gm-line); color: var(--gm-muted); font-size: 0.72rem; letter-spacing: 0.04em; }
.gm-ms-empty { background: transparent; }
.gm-ms-chip.is-neutral { text-decoration: underline dotted; text-underline-offset: 3px; }
.gm-ms-legend .gm-ms-chip { min-width: 22px; min-height: 16px; font-size: 0.62rem; }
.gm-ms-legend .gm-ms-chip.is-neutral { min-width: 30px; }
.gm-ms .gm-pm-cell.is-playoff, .gm-ms .gm-ms-wk.is-playoff { background: color-mix(in srgb, var(--gm-accent) 10%, transparent); align-self: stretch;
  display: flex; align-items: center; justify-content: center; }
.gm-ms .gm-rk-row, .gm-ms .gm-rk-headrow { align-items: stretch; }
.gm-ms .gm-rk-row > .gm-rk-rank, .gm-ms .gm-rk-row > .gm-rk-player, .gm-ms .gm-rk-headrow > * { align-self: center; }
.gm-ms .gm-rk-item.is-selected > .gm-rk-row { --gm-ms-sel: color-mix(in srgb, var(--gm-accent) 12%, var(--gm-panel)); background: var(--gm-ms-sel); }   /* the team from the Player Profile's button */
.gm-ms .gm-rk-item.is-selected > .gm-rk-row > .gm-rk-rank, .gm-ms .gm-rk-item.is-selected > .gm-rk-row > .gm-rk-player { background: var(--gm-ms-sel); }
.gm-ms .gm-rk-headrow > .gm-ms-wk.is-playoff { align-self: stretch; }
.gm-ms-wk { text-align: center; font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); align-self: center; }
.gm-ms-wk.is-playoff { color: var(--gm-ink); font-weight: 600; border-radius: 6px 6px 0 0; }
.gm-ms-legend { display: flex; flex-wrap: wrap; gap: 0.35rem 1rem; align-items: center; margin: 0.25rem 0 0.75rem; font-size: 0.8rem; color: var(--gm-muted); }
.gm-ms-legend[hidden] { display: none; }
.gm-ms-legend-item { display: inline-flex; align-items: center; gap: 0.4rem; }
.gm-ms-tabs { margin: 0 0 1rem; }
.gm-ms-week-title { font-size: 1.05rem; margin: 0.25rem 0 0.75rem; }
.gm-ms-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(520px, 1fr)); gap: 1rem; }
.gm-ms-card { background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 12px; padding: 0.9rem 1rem 1rem; min-width: 0; }
.gm-ms-card-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.25rem 0.75rem; margin-bottom: 0.5rem; }
.gm-ms-card-head h3 { font-size: 1rem; margin: 0; }
.gm-ms-card-link { margin-left: auto; font-size: 0.85rem; }
.gm-ms-side + .gm-ms-side { margin-top: 0.75rem; padding-top: 0.75rem; border-top: 1px solid var(--gm-line); }
.gm-ms-side h4 { font-size: 0.85rem; font-weight: 600; margin: 0 0 0.4rem; color: var(--gm-muted); }
.gm-ms-side-row { display: grid; grid-template-columns: 44px 104px minmax(0, 1fr) minmax(0, 1fr); align-items: center; column-gap: 0.5rem; padding: 0.2rem 0;
  font-size: 0.85rem; font-variant-numeric: tabular-nums; }
.gm-ms-side-row > span:nth-child(n+3) { text-align: center; }
.gm-ms-side-row small { display: block; color: var(--gm-muted); font-size: 0.72rem; }
.gm-ms-side-head { font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); border-bottom: 1px solid var(--gm-line); padding-bottom: 0.3rem; }
.gm-ms-pos { font-weight: 600; }
/* Fantasy Points Allowed (owner spec 10-17): a team's log opens under its row */
.gm-fpa .gm-rk-row.is-openable { cursor: pointer; }
.gm-fpa .gm-rk-row.is-openable:hover { background: var(--gm-hover); }
.gm-fpa-cellink { color: inherit; text-decoration: none; }
.gm-fpa-cellink:hover, .gm-fpa-cellink:focus-visible { color: var(--gm-accent); text-decoration: underline; }
.gm-fpa-log { padding: 0.75rem 1rem 1rem; background: var(--gm-panel-2); border-top: 1px solid var(--gm-line); }
.gm-fpa-rankline { margin: 0 0 0.5rem; font-weight: 600; }
.gm-fpa-logtools { display: flex; gap: 1rem; margin-bottom: 0.5rem; font-size: 0.85rem; }
.gm-fpa-logscroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.gm-fpa-logtable { width: 100%; border-collapse: collapse; font-size: 0.85rem; font-variant-numeric: tabular-nums; }
.gm-fpa-logtable th, .gm-fpa-logtable td { padding: 0.3rem 0.5rem; text-align: center; white-space: nowrap; }
.gm-fpa-logtable thead th { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); font-weight: 600; border-bottom: 1px solid var(--gm-line); }
.gm-fpa-logtable td.gm-fpa-player, .gm-fpa-logtable thead th:first-child, .gm-fpa-week th, .gm-fpa-subtotal td:first-child { text-align: left; }
.gm-fpa-player a { color: var(--gm-ink); text-decoration: none; font-weight: 600; }
.gm-fpa-player a:hover { color: var(--gm-accent); text-decoration: underline; }
.gm-fpa-week th { padding-top: 0.7rem; font-size: 0.8rem; color: var(--gm-ink); font-weight: 600; border-bottom: 1px solid var(--gm-line); }
.gm-fpa-subtotal td { color: var(--gm-muted); border-top: 1px dashed var(--gm-line); }
.gm-ms-card a { color: var(--gm-accent); text-decoration: none; font-weight: 600; }
.gm-ms-card a:hover, .gm-ms-card a:focus-visible { text-decoration: underline; }
.gm-ms-side .gm-ms-chip { min-width: 92px; }
@media (max-width: 640px) {
  .gm-ms-cards { grid-template-columns: 1fr; }
  .gm-ms-side-row { grid-template-columns: 34px 88px minmax(0, 1fr) minmax(0, 1fr); column-gap: 0.35rem; font-size: 0.8rem; }
  .gm-ms-side .gm-ms-chip { min-width: 80px; font-size: 0.74rem; }
}
.gm-ts-picker[hidden] { display: none; }
@media (max-width: 760px) {
  /* the view tabs and the position picker scroll sideways at their natural widths, as on Advanced Stats (squeezed labels overlapped) */
  .gm-ts #ts-views, .gm-ts #ts-picker-seg { display: flex; width: 100%; overflow-x: auto; }
  .gm-ts #ts-views .gm-seg-item, .gm-ts #ts-picker-seg .gm-seg-item { flex: 0 0 auto; min-width: auto; padding: 0.35rem 0.75rem; white-space: nowrap; }
  .gm-ts #ts-mode { order: 3; width: 100%; }
  .gm-ts #ts-mode .gm-seg-item { flex: 1 1 0; }
}
@media (max-width: 760px) {
  .gm-as .gm-as-window { order: 2; width: 100%; }
  .gm-as #as-groups { display: flex; width: 100%; overflow-x: auto; }
  /* seven position tabs (K and DEF, 10-16): tighter so "Teams" keeps its padding at 390px */
  .gm-as .gm-as-top > .gm-seg:first-child .gm-seg-item { padding-left: 0.2rem; padding-right: 0.2rem; font-size: 0.85rem; }
  .gm-as #as-groups .gm-seg-item { flex: 0 0 auto; min-width: auto; padding: 0.35rem 0.75rem; white-space: nowrap; }
  .gm-as .gm-rk-controls .gm-rk-select-wrap, .gm-as .gm-rk-controls .gm-rk-search { flex: 1 1 100%; }
  .gm-as .gm-rk-controls .gm-rk-select-wrap select { width: 100%; }
}

@media (max-width: 760px) {
  .gm-pm-modes { flex-direction: column; align-items: stretch; }
  .gm-pm-modes > .gm-seg { display: none; }
  .gm-pm-viewrow .gm-seg { display: flex; width: 100%; overflow-x: auto; }
  .gm-pm-viewrow .gm-seg-item { flex: 1 0 auto; white-space: nowrap; }
  /* Item 166 (2026-10-15): the generic first-segment rule (.gm-rk-controls > .gm-seg:first-child .gm-seg-item: flex 1, min-width 0) squeezed
     the tabs to equal widths and "Game environment" spilled over Efficiency, so a tap there opened the wrong tab. Four equal columns, labels
     wrap to two lines inside their own button. */
  .gm-pm-viewrow #pm-presets { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); overflow: visible; }
  .gm-pm-viewrow #pm-presets .gm-seg-item { min-width: 0; padding: 0.3rem 0.25rem; white-space: normal; line-height: 1.15; text-align: center; }
  .gm-pm-viewrow #pm-presets .gm-seg-item:last-child { border-right: 0; }
  .gm-pm-guide-label { display: none; }
  .gm-pm-szn { display: inline; }
  .gm-pm-guide-btn { min-width: 44px; justify-content: center; }
  .gm-pm-viewrow .gm-pm-popwrap { display: none; }
  .gm-pm-viewrow #pm-export { display: none; }
  .gm-pm-sortmobile { display: block; flex: 1 1 0; min-width: 0; }   /* shares its row with the column guide button */
  .gm-pm-sortmobile select { width: 100%; }
  /* Step 5: a real table on phones - it scrolls sideways inside its own box; Rk and Player stay pinned on the left, Proj is the first data
     column. The header row shows (tap sorts; the Sort menu stays). It scrolls away vertically: a sticky top cannot work inside a box that
     scrolls sideways. */
  .gm-pm .gm-pm-table { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .gm-pm .gm-pm-band, .gm-pm .gm-rk-headrow, .gm-pm .gm-rk-row { grid-template-columns: var(--pm-cols-m); grid-template-areas: none; width: max-content; min-width: 100%;
    box-sizing: border-box; padding: 0 0.25rem; column-gap: 0.5rem; }
  .gm-pm .gm-rk-headrow { display: grid; position: static; }
  .gm-pm .gm-rk-row > *, .gm-pm .gm-rk-headrow > * { grid-area: auto; }     /* the generic phone card layout names areas this table does not have */
  .gm-pm .gm-pm-band { display: grid; }
  .gm-pm .gm-rk-row { min-height: 56px; padding-top: 0.35rem; padding-bottom: 0.35rem; }
  .gm-pm .gm-rk-rank, .gm-pm .gm-rk-headrow > span:first-child, .gm-pm .gm-pm-band-lead { position: sticky; left: 0.25rem; z-index: 2; background: var(--gm-panel); }   /* 0.25rem = the row padding: no jump when the scroll starts */
  .gm-pm .gm-rk-player, .gm-pm .gm-rk-headrow > span:nth-child(2) { position: sticky; left: calc(0.25rem + 44px + 0.5rem); z-index: 2; background: var(--gm-panel); }
  .gm-pm .gm-rk-headrow > span:first-child, .gm-pm .gm-rk-headrow > span:nth-child(2), .gm-pm .gm-pm-band-lead { background: var(--gm-panel-2); }
  .gm-pm .gm-rk-player { display: flex; min-width: 0; box-shadow: 6px 0 6px -6px rgba(0, 0, 0, 0.25); }
  .gm-pm .gm-rk-player .gm-team-badge { display: none; }
  .gm-ms .gm-rk-row > .gm-rk-rank { box-shadow: -0.25rem 0 0 var(--gm-panel), 0.5rem 0 0 var(--gm-panel); }
  .gm-ms .gm-rk-item.is-selected > .gm-rk-row > .gm-rk-rank { box-shadow: -0.25rem 0 0 var(--gm-accent), 0.5rem 0 0 var(--gm-ms-sel); }
  .gm-fpa .gm-fpa-log { position: sticky; left: 0; width: calc(100vw - 2rem - 2px); box-sizing: border-box; padding: 0.6rem 0.6rem 0.8rem; }
  .gm-fpa-tools .gm-rk-search { order: -1; flex: 1 1 100%; }     /* phones: search first, the buttons under it */
  .gm-ms .gm-rk-headrow > span:first-child { box-shadow: -0.25rem 0 0 var(--gm-panel-2), 0.5rem 0 0 var(--gm-panel-2); }
  .gm-ms .gm-rk-row > .gm-rk-rank, .gm-ms .gm-rk-row > .gm-rk-player { align-self: stretch; display: flex; align-items: center; }
  .gm-ms .gm-rk-headrow > :nth-child(2) { position: sticky; left: calc(0.25rem + 44px + 0.5rem); z-index: 2; background: var(--gm-panel-2); align-self: stretch;
    display: flex; align-items: center; box-shadow: 6px 0 6px -6px rgba(0, 0, 0, 0.25); }
  .gm-pm .gm-rk-idblock { min-width: 0; }
  .gm-pm .gm-rk-name, .gm-pm .gm-rk-meta { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .gm-pm .gm-rk-mine { display: none; }
  .gm-pm .gm-pm-cell { display: block; }
  .gm-pm .gm-rk-detail { position: sticky; left: 0; width: calc(100vw - 2rem - 2px); box-sizing: border-box; }
}

/* Injury Report: designation, injury and the MODEL'S ASSUMPTION are separate things; the assumption is the emphasis. */
.gm-ij { --gm-rk-cols: minmax(230px, 290px) 100px 120px 150px minmax(190px, 1fr) 70px 80px 40px; }
.gm-ij .gm-rk-headrow, .gm-ij .gm-rk-row { padding-left: 1rem; }
.gm-ij-cell { font-size: 0.9rem; min-width: 0; font-variant-numeric: tabular-nums; color: var(--gm-muted); }
.gm-ij-assume { font-weight: 650; color: var(--gm-ink); }
.gm-ij-assume-not_projected { color: var(--gm-danger); }
.gm-ij-assume-chance { color: var(--gm-warn); }
.gm-ij-assume-none { color: var(--gm-muted); font-weight: 500; }
/* item 195: the info button beside Chance of playing - the same italic "i" as This Week's Factors (.gm-factors-help; owner 2026-10-19) */
.gm-qtip-wrap { position: relative; display: inline-flex; align-items: center; }
.gm-qtip { display: inline-flex; align-items: center; justify-content: center; width: 1.05rem; height: 1.05rem; margin-left: 0.4rem; padding: 0;
  border: 1px solid var(--gm-line-control); border-radius: 50%; background: transparent; color: var(--gm-muted);
  font: italic 700 0.68rem/1 Georgia, serif; text-transform: none; letter-spacing: 0; cursor: pointer; }
.gm-qtip:hover, .gm-qtip[aria-expanded="true"] { color: var(--gm-accent-hover); border-color: var(--gm-accent-hover); }
.gm-qtip:focus-visible { outline: 2px solid var(--gm-accent-hover); outline-offset: 2px; }
.gm-qtip-pop { position: absolute; top: calc(100% + 6px); left: 0; z-index: 30; width: max-content; max-width: min(280px, calc(100vw - 2.5rem));
  padding: 0.6rem 0.75rem; background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 8px; box-shadow: 0 6px 18px rgba(0, 0, 0, 0.12);
  color: var(--gm-ink); font-size: 0.8rem; font-weight: 400; line-height: 1.4; letter-spacing: normal; text-transform: none; white-space: normal; }
/* owner 2026-10-19: the injury box - Player Profile and the shelf (under Player Notes) - one text size, the status in its colour */
.gm-injury-box { padding: 0.9rem 1rem; border-radius: 10px; background: var(--gm-warn-dim); font-size: 0.92rem; line-height: 1.45; color: var(--gm-ink); }
.gm-injury-box.gm-injury-danger { background: var(--gm-danger-dim); }
.gm-injury-box p { margin: 0; }
.gm-injury-box p + p { margin-top: 0.35rem; }
.gm-injury-status { font-weight: 700; color: var(--gm-warn); }
.gm-injury-danger .gm-injury-status { color: var(--gm-danger); }
.gm-injury-chance { position: relative; display: flex; align-items: center; flex-wrap: wrap; font-weight: 700; }   /* label and number bold (owner) */
.gm-injury-chance .gm-qtip-wrap { position: static; }          /* the note opens under the whole line, so it stays on a phone screen */
.gm-injury-chance strong { margin-left: 0.3rem; }
.gm-shelf-injury { margin-top: 1rem; }
.gm-shelf-injury[hidden] { display: none; }
.gm-qtip-wrap { position: relative; display: inline-flex; align-items: center; gap: 0.35rem; }
.gm-qtip { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; padding: 0; border: 1px solid var(--gm-line);
  border-radius: 50%; background: transparent; color: var(--gm-muted); font-size: 0.68rem; font-weight: 700; line-height: 1; cursor: pointer; }
.gm-qtip:hover, .gm-qtip:focus-visible, .gm-qtip[aria-expanded="true"] { color: var(--gm-accent); border-color: var(--gm-accent); }
.gm-qtip-pop { position: absolute; top: calc(100% + 6px); left: 0; z-index: 30; width: max-content; max-width: min(280px, calc(100vw - 2.5rem));
  padding: 0.6rem 0.75rem; background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 8px; box-shadow: 0 6px 18px rgba(0, 0, 0, 0.12);
  color: var(--gm-ink); font-size: 0.8rem; font-weight: 400; line-height: 1.4; letter-spacing: normal; text-transform: none; white-space: normal; }
.gm-ij-proj { font-weight: 700; color: var(--gm-ink); }
.gm-ij-toggle { display: inline-flex; align-items: center; gap: 0.5rem; min-height: 40px; font-size: 0.86rem; color: var(--gm-muted); }
.gm-ij-toggle input { width: 18px; height: 18px; accent-color: var(--gm-accent); }
.gm-ij-detail { grid-template-columns: 1fr 1fr 1.4fr; padding-left: 1.5rem; }
.gm-ij-mine { margin-bottom: 1rem; padding: 0.9rem 1.1rem; background: var(--gm-warn-dim); border-radius: 10px; }
.gm-ij-mine ul { list-style: none; margin: 0.4rem 0 0; padding: 0; display: flex; flex-direction: column; gap: 0.3rem; }
.gm-ij-mine li { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; font-size: 0.9rem; }
.gm-ij-mine a { font-weight: 650; color: var(--gm-ink); }
.gm-ij-mine-note { color: var(--gm-muted); }

@media (max-width: 760px) {
  .gm-ij .gm-rk-row {
    grid-template-columns: minmax(0, 1fr) auto 32px;
    grid-template-areas: "player status chev" "assume assume assume" "injury injury injury";
    padding: 0.55rem 0.5rem; row-gap: 0.2rem; min-height: 0;
  }
  .gm-ij .gm-rk-player { grid-area: player; }
  .gm-ij .gm-ij-cell[data-label="Designation"] { grid-area: status; justify-self: end; }
  .gm-ij .gm-ij-assume { grid-area: assume; padding-left: 46px; }
  .gm-ij .gm-ij-assume-chance::before { content: "Chance of playing: "; font-weight: 500; color: var(--gm-muted); }
  .gm-ij .gm-ij-injury { grid-area: injury; padding-left: 46px; font-size: 0.8rem; }
  .gm-ij .gm-ij-injury::before { content: "Injury: "; }
  .gm-ij .gm-ij-game, .gm-ij .gm-ij-proj, .gm-ij .gm-ij-updated { display: none; }
  .gm-ij .gm-rk-chev { grid-area: chev; }
  .gm-ij-detail { grid-template-columns: minmax(0, 1fr); padding-left: 1rem; }
  .gm-ij .gm-rk-controls .gm-seg { display: flex; width: 100%; overflow-x: auto; }
  .gm-ij .gm-rk-controls .gm-seg-item { flex: 1 0 auto; white-space: nowrap; }
}

.gm-ij .gm-rk-headrow > span:first-child { text-align: left; }
@media (max-width: 760px) {
  .gm-ij-n { display: none; }
  .gm-ij .gm-rk-controls .gm-rk-select-wrap, .gm-ij .gm-rk-controls .gm-rk-search { flex: 1 1 100%; }
  .gm-ij .gm-rk-controls .gm-rk-select-wrap select { width: 100%; }
}

/* Depth Charts: one team at a time, position groups as accordions (open on desktop, collapsed on phones). */
.gm-dc { max-width: 980px; }
.gm-dc-team { display: flex; align-items: baseline; gap: 1rem; margin: 0.5rem 0 1rem; }
.gm-dc-team h2 { margin: 0; font-size: 1.5rem; }
.gm-dc-group { background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 12px; margin-bottom: 0.9rem; overflow: hidden; }
.gm-dc-group summary { display: flex; align-items: baseline; gap: 0.75rem; padding: 0.8rem 1.1rem; min-height: 44px; box-sizing: border-box; cursor: pointer; background: var(--gm-panel-2); font-size: 0.95rem; }
.gm-dc-group summary:focus-visible { outline: 2px solid var(--gm-accent); outline-offset: -2px; }
.gm-dc-row { display: grid; grid-template-columns: 56px minmax(180px, 1fr) 190px 90px minmax(0, 1.2fr); align-items: center; column-gap: 0.75rem; min-height: 52px; padding: 0.3rem 1.1rem; border-top: 1px solid var(--gm-line); }
.gm-dc-slot { font-size: 0.8rem; font-weight: 700; color: var(--gm-muted); }
.gm-dc-who { display: flex; align-items: center; flex-wrap: wrap; gap: 0.4rem; min-width: 0; }
.gm-dc-snap, .gm-dc-proj { font-size: 0.88rem; color: var(--gm-muted); font-variant-numeric: tabular-nums; }
.gm-dc-snap .gm-pf-trend { margin-left: 0.3rem; font-size: 0.78rem; }
.gm-dc-note { justify-self: start; }
.gm-dc-foot { margin-top: 1.25rem; max-width: 70ch; }
@media (max-width: 760px) {
  .gm-dc-row { grid-template-columns: 44px minmax(0, 1fr) auto; grid-template-areas: "slot who proj" ". snap snap" ". note note"; row-gap: 0.1rem; padding: 0.55rem 0.9rem; }
  .gm-dc-slot { grid-area: slot; }
  .gm-dc-who { grid-area: who; }
  .gm-dc-proj { grid-area: proj; justify-self: end; }
  .gm-dc-snap { grid-area: snap; }
  .gm-dc-note { grid-area: note; }
  .gm-dc .gm-rk-controls .gm-rk-select-wrap { flex: 1 1 100%; }
  .gm-dc .gm-rk-controls .gm-rk-select-wrap select { width: 100%; }
  .gm-dc .gm-rk-controls .gm-seg { display: flex; width: 100%; overflow-x: auto; }
  .gm-dc .gm-rk-controls .gm-seg-item { flex: 1 0 auto; }
}

/* Teammate Impact (Intelligence, 2026-10-11) */
.gm-ti-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem 1.25rem; margin-bottom: 0.75rem; }
.gm-ti-controls-2 { margin-bottom: 1rem; }
.gm-ti-pick { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; }
.gm-ti-pick-label { font-size: 0.8rem; font-weight: 600; color: var(--gm-muted); }
.gm-ti-chip { display: inline-flex; align-items: center; gap: 0.3rem; padding: 0.25rem 0.4rem 0.25rem 0.65rem; border-radius: 999px; font-size: 0.85rem; font-weight: 600; }
.gm-ti-chip a { color: inherit; text-decoration: none; font-size: 1.05rem; line-height: 1; padding: 0 0.3rem; border-radius: 999px; }
.gm-ti-chip a:hover { background: rgba(0, 0, 0, 0.08); }
.gm-ti-chip-out { background: var(--gm-danger-dim); color: var(--gm-danger); }
.gm-ti-chip-with { background: var(--gm-good-dim); color: var(--gm-good); }
.gm-ti-chip-pick { background: var(--gm-panel); border: 1px solid var(--gm-line-control); color: var(--gm-ink); text-decoration: none; padding-right: 0.65rem; }
.gm-ti-chip-pick:hover { border-color: var(--gm-accent); }
.gm-ti-quick { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 0.4rem; }
.gm-ti-chip-pos { font-size: 0.7rem; font-weight: 600; color: var(--gm-muted); }
.gm-ti-chip-status { font-size: 0.68rem; font-weight: 700; padding: 0.05rem 0.35rem; border-radius: 4px; background: var(--gm-warn-dim); color: var(--gm-warn); }
.gm-ti-add { min-height: 36px; padding: 0.25rem 0.6rem; border: 1px dashed var(--gm-line-control); border-radius: 8px; background: var(--gm-panel); color: var(--gm-ink); font: inherit; font-size: 0.85rem; max-width: 220px; }
.gm-ti-summary { margin-bottom: 1rem; font-size: 0.9rem; }
.gm-ti-summary p { margin: 0 0 0.3rem; }
.gm-ti-muted { color: var(--gm-muted); font-weight: 400; }
.gm-ti-qb { color: var(--gm-muted); }
.gm-ti-qb.is-flag { color: var(--gm-warn); background: var(--gm-warn-dim); padding: 0.4rem 0.6rem; border-radius: 6px; }
.gm-ti-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; margin-bottom: 1rem; }
.gm-ti-card .gm-board-head { padding: 0.75rem 1rem; }
.gm-ti-gains { list-style: none; margin: 0; padding: 0.4rem 1rem; }
.gm-ti-gains li { display: grid; grid-template-columns: minmax(0, 1fr) auto 3.5rem; gap: 0.5rem; align-items: baseline; padding: 0.35rem 0; border-bottom: 1px solid var(--gm-line); font-size: 0.88rem; }
.gm-ti-gains li:last-child { border-bottom: 0; }
.gm-ti-gname { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
.gm-ti-gval { color: var(--gm-muted); font-variant-numeric: tabular-nums; }
.gm-ti-gains .gm-ti-change { text-align: right; }
.gm-ti-empty { margin: 0; padding: 0.9rem 1rem; color: var(--gm-muted); font-size: 0.88rem; }
.gm-ti-cardnote { margin: 0; padding: 0 1rem 0.7rem; font-size: 0.74rem; color: var(--gm-muted-2, var(--gm-muted)); }
.gm-ti-team { margin: 0; padding: 0.4rem 1rem 0.7rem; }
.gm-ti-team div { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 0.5rem; padding: 0.3rem 0; border-bottom: 1px solid var(--gm-line); font-size: 0.86rem; }
.gm-ti-team div:last-child { border-bottom: 0; }
.gm-ti-team dt { color: var(--gm-muted); }
.gm-ti-team dd { margin: 0; font-variant-numeric: tabular-nums; text-align: right; }
.gm-ti-change { font-size: 0.78rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.gm-ti-change.is-up { color: var(--gm-good); }
.gm-ti-change.is-down { color: var(--gm-danger); }
.gm-ti-change.is-flat { color: var(--gm-muted); font-weight: 600; }
.gm-ti-table { min-width: 860px; }
.gm-ti-table thead th { padding: 0.6rem 0.75rem; }
.gm-ti-table th[scope="row"], .gm-ti-table td { padding: 0.5rem 0.75rem; border-bottom: 1px solid var(--gm-line); font-size: 0.86rem; white-space: nowrap; }
.gm-ti-table th[scope="row"] { text-align: left; font-weight: 600; }
.gm-ti-sticky { position: sticky; left: 0; background: var(--gm-panel); z-index: 1; }
.gm-ti-cell { line-height: 1.3; }
.gm-ti-vals { display: block; font-variant-numeric: tabular-nums; }
.gm-ti-games { font-variant-numeric: tabular-nums; color: var(--gm-muted); }
/* faded rows fade the cell contents, not the cells: the pinned name cell must stay opaque over the scrolled columns */
.gm-ti-row.is-low > tr:first-child > * > *, .gm-ti-row.is-low > tr:first-child > td { opacity: 0.5; }
.gm-ti-row.is-low > tr:first-child > .gm-ti-sticky { opacity: 1; }
.gm-ti-cell.is-thin .gm-ti-vals { color: var(--gm-muted); }
.gm-ti-cell.is-na { color: var(--gm-muted-2, var(--gm-muted)); }
.gm-ti-row.is-open > tr:first-child > * { border-bottom-color: transparent; }
.gm-ti-strip-row td { background: var(--gm-panel-2); white-space: normal; }
.gm-ti-strip { display: flex; flex-wrap: wrap; align-items: center; gap: 0.25rem; margin: 0.15rem 0; }
.gm-ti-strip-season { font-size: 0.75rem; font-weight: 700; color: var(--gm-muted); width: 2.6rem; }
.gm-ti-wk { display: inline-flex; align-items: center; justify-content: center; min-width: 1.6rem; height: 1.4rem; border-radius: 4px; font-size: 0.72rem; font-weight: 600; border: 1px solid var(--gm-line); color: var(--gm-muted); font-variant-numeric: tabular-nums; }
.gm-ti-wk.is-with { border-color: var(--gm-good); color: var(--gm-good); background: var(--gm-panel); }
.gm-ti-wk.is-without { border-color: var(--gm-danger); background: var(--gm-danger); color: #fff; }
.gm-ti-wk.is-set-aside, .gm-ti-wk.is-own-left, .gm-ti-wk.is-mixed { background: repeating-linear-gradient(135deg, var(--gm-neutral-dim) 0 4px, transparent 4px 8px); }
.gm-ti-wk.is-dnp, .gm-ti-wk.is-not-counted { opacity: 0.45; border-style: dashed; }
.gm-ti-legend, .gm-ti-foot { font-size: 0.8rem; color: var(--gm-muted); margin: 0.75rem 0 0; line-height: 1.8; }
.gm-ti-legend .gm-ti-wk { margin-left: 0.4rem; }
.gm-ti-sortmobile { display: none; margin-bottom: 0.75rem; }
@media (max-width: 960px) { .gm-ti-cards { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } .gm-ti-cards > :last-child { grid-column: 1 / -1; } }
@media (max-width: 760px) {
  .gm-ti-cards { grid-template-columns: minmax(0, 1fr); }
  .gm-ti-sortmobile { display: flex; }
  .gm-ti-controls .gm-rk-select-wrap, .gm-ti-pick { flex: 1 1 100%; }
  .gm-ti-controls-2 .gm-seg { flex: 1 1 100%; }
  .gm-ti-controls-2 .gm-seg-item { flex: 1; text-align: center; }
  .gm-ti-add { max-width: none; flex: 1; }
}

/* Game Outlook (was Game Environment) + Weather Report */
/* Every column takes a share of the width (owner 2026-10-11: no dead space left over in Tags) */
.gm-ge { --gm-rk-cols: minmax(140px, 1.3fr) minmax(70px, 0.8fr) minmax(90px, 1fr) minmax(110px, 1fr) minmax(90px, 1fr) minmax(200px, 1.5fr) 40px; }
.gm-ge-weekform { display: contents; }
.gm-ge-sortmobile { display: none; }
@media (max-width: 760px) { .gm-ge-sortmobile { display: flex; } }
.gm-ge .gm-rk-headrow .gm-rk-sort { justify-self: start; }
.gm-ge-implied { display: flex; flex-direction: column; line-height: 1.35; }
.gm-ge-was { font-size: 0.74rem; font-weight: 400; color: var(--gm-muted-2, var(--gm-muted)); }
.gm-ge-tags:empty::before { content: "\2014"; color: var(--gm-muted-2, var(--gm-muted)); }
.gm-ge .gm-rk-headrow, .gm-ge .gm-rk-row { padding-left: 1rem; }
.gm-ge-game { display: flex; flex-direction: column; }
.gm-ge-cell { font-size: 0.9rem; color: var(--gm-muted); font-variant-numeric: tabular-nums; min-width: 0; }
.gm-ge-total { font-weight: 700; color: var(--gm-ink); font-size: 1.02rem; }
.gm-ge-detail { grid-template-columns: 1.3fr 1fr 1.3fr; padding-left: 1.5rem; }
.gm-ge-team { margin: 0 0 0.5rem; font-size: 0.88rem; line-height: 1.6; }
.gm-ge-team strong { margin-right: 0.4rem; }
.gm-wx { max-width: 1200px; }
.gm-wx-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 1rem; margin-top: 0.5rem; }
.gm-wx-card { padding: 1.1rem 1.25rem; background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 12px; }
.gm-wx-card[hidden] { display: none; }
.gm-wx-high { border-left: 4px solid var(--gm-danger); }
.gm-wx-moderate { border-left: 4px solid var(--gm-warn); }
.gm-wx-card header { display: flex; justify-content: space-between; align-items: flex-start; gap: 0.75rem; margin-bottom: 0.6rem; }
.gm-wx-card header > div { display: flex; flex-direction: column; }
.gm-wx-facts { display: flex; flex-wrap: wrap; gap: 0.5rem 1.5rem; margin: 0 0 0.6rem; }
.gm-wx-facts div { display: flex; flex-direction: column; }
.gm-wx-facts dt { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--gm-muted); }
.gm-wx-facts dd { margin: 0; font-size: 1.05rem; font-weight: 650; }
.gm-wx-precip dd { font-size: 0.92rem; }
.gm-wx-factors { margin: 0 0 0.6rem; padding-left: 1.1rem; font-size: 0.88rem; line-height: 1.5; }
.gm-wx-model-out { margin-top: 0.6rem; padding-top: 0.6rem; border-top: 1px solid var(--gm-line); font-size: 0.86rem; }
.gm-wx-model-out[hidden] { display: none; }
.gm-wx-model-out ul { margin: 0 0 0.4rem; padding-left: 1.1rem; line-height: 1.6; }
.gm-wx-indoor { margin-top: 1.5rem; color: var(--gm-muted); }
.gm-wx-indoor summary { cursor: pointer; min-height: 40px; display: flex; align-items: center; font-weight: 600; }
.gm-wx-indoor ul { list-style: none; margin: 0; padding: 0; }
.gm-wx-indoor li { padding: 0.35rem 0; border-bottom: 1px solid var(--gm-line); font-size: 0.9rem; }
@media (max-width: 760px) {
  /* phones: game + total on top, then Spread / Win prob / Implied points as three small labelled stats, then the tags (owner
     2026-10-11: the phone layout had dropped win prob and implied points) */
  .gm-ge .gm-rk-row {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1.15fr) 32px;
    grid-template-areas: "game game total chev" "spread win implied ." "signal signal signal signal";
    padding: 0.6rem 0.5rem; row-gap: 0.4rem; column-gap: 0.5rem; min-height: 0;
  }
  .gm-ge .gm-ge-game { grid-area: game; }
  .gm-ge .gm-ge-total { grid-area: total; justify-self: end; text-align: right; }
  .gm-ge .gm-ge-cell[data-label="Spread"] { grid-area: spread; }
  .gm-ge .gm-ge-cell[data-label="Win prob"] { grid-area: win; }
  .gm-ge .gm-ge-cell[data-label="Implied"] { grid-area: implied; }
  .gm-ge .gm-ge-cell[data-label="Spread"], .gm-ge .gm-ge-cell[data-label="Win prob"], .gm-ge .gm-ge-cell[data-label="Implied"] { color: var(--gm-ink); font-size: 0.86rem; align-self: start; }
  .gm-ge .gm-ge-cell::before { content: attr(data-label); display: block; color: var(--gm-muted-2, var(--gm-muted)); font-size: 0.68rem;
    font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; line-height: 1.4; }
  .gm-ge .gm-ge-cell[data-label="Implied"]::before { content: "Implied pts"; }
  .gm-ge .gm-rk-signal { grid-area: signal; display: flex; }
  .gm-ge .gm-rk-signal:empty { display: none; }
  .gm-ge .gm-rk-chev { grid-area: chev; }
  .gm-ge-detail { grid-template-columns: minmax(0, 1fr); padding-left: 1rem; }
  .gm-ge .gm-rk-controls .gm-rk-search { flex: 1 1 100%; }
  .gm-wx-grid { grid-template-columns: minmax(0, 1fr); }
  .gm-wx #wx-filter { display: flex; width: 100%; overflow-x: auto; }
  .gm-wx #wx-filter .gm-seg-item { flex: 1 0 auto; white-space: nowrap; }
}

.gm-ge .gm-rk-headrow > span:first-child { text-align: left; }

/* Form rating (item 68): a 0-10 number with a colour-coded arrow for its level. Our own signal; the colour follows the level, never the player's team. */
.gm-form { display: inline-flex; align-items: center; gap: 2px; font-size: 0.72rem; font-weight: 700; line-height: 1.2; padding: 1px 6px; border-radius: 999px; font-variant-numeric: tabular-nums; cursor: help; white-space: nowrap; }
.gm-form-arrow { display: inline-block; font-size: 0.85rem; line-height: 1; }
/* item 222: every level is the same up-arrow glyph, turned here - never an emoji - and every level is a tinted pill */
.gm-form-good .gm-form-arrow { transform: rotate(45deg); }
.gm-form-steady .gm-form-arrow { transform: rotate(90deg); }
.gm-form-cooling .gm-form-arrow { transform: rotate(135deg); }
.gm-form-cold .gm-form-arrow { transform: rotate(180deg); }
.gm-form-missed { font-weight: 600; opacity: 0.7; }
.gm-form-hot { background: var(--gm-good-dim); color: var(--gm-good); }
.gm-form-good { background: var(--gm-good-dim); color: var(--gm-good); }
.gm-form-steady { background: color-mix(in srgb, var(--gm-muted) 12%, transparent); color: var(--gm-muted); }
.gm-form-cooling { background: var(--gm-warn-dim); color: var(--gm-warn); }
.gm-form-cold { background: var(--gm-danger-dim); color: var(--gm-danger); }

/* ==========================================================================
   Admin Accuracy page (item 197, 2026-10-20): ours vs FantasyPros vs DraftSharks, PPR.
   ========================================================================== */
.gm-acc .gm-acc-ok { background: var(--gm-good-dim); color: var(--gm-good); border-color: var(--gm-good); }
.gm-acc-upload { margin-bottom: 1.25rem; }
.gm-acc-form { display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: end; margin-top: 0.5rem; }
.gm-acc-form input[type="file"] { max-width: 100%; font-size: 0.9rem; }
.gm-acc-loaded, .gm-acc-key { color: var(--gm-muted); font-size: 0.85rem; }
.gm-acc-key { margin: 0.75rem 0 1rem; max-width: 72ch; }
.gm-acc-table { margin-bottom: 1.5rem; }
.gm-acc-table .is-num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.gm-acc-caption { caption-side: top; text-align: left; font-weight: 600; padding: 0 0 0.5rem; }
.gm-acc-bias { display: block; color: var(--gm-muted); font-size: 0.78rem; }
.gm-acc-ci { color: var(--gm-muted); font-size: 0.78rem; }
.gm-acc-partial { display: block; color: var(--gm-warn); font-size: 0.72rem; }
.gm-acc-form select { min-width: 9rem; }
.gm-acc-gap.is-better { color: var(--gm-good); }
.gm-acc-gap.is-worse { color: var(--gm-danger); }
.gm-acc-total th, .gm-acc-total td { border-top: 2px solid var(--gm-line); }
.gm-acc-h2 { font-size: 1.05rem; margin: 0.5rem 0 0.75rem; }
.gm-acc-change { color: var(--gm-muted); font-size: 0.85rem; min-width: 16rem; }
.gm-acc-how { margin-top: 1rem; }
.gm-acc-how summary { cursor: pointer; font-weight: 600; }
@media (max-width: 760px) {
  .gm-acc-form { flex-direction: column; align-items: stretch; }
  .gm-acc-form .gm-rk-select-wrap { width: 100%; }
  .gm-acc-form .gm-rk-select-wrap select { flex: 1 1 auto; }
  .gm-acc-form button { align-self: flex-start; }
  .gm-acc-change { min-width: 12rem; }
  .gm-acc .gm-seg { flex-wrap: wrap; }
}

/* Sign in (accounts step 4, 2026-10-23): a standalone page, no app menus. */
.gm-login { box-sizing: border-box; max-width: 400px; margin: 0 auto; padding: 3rem 16px 2rem; }
.gm-login-logo { display: block; margin: 0 0 1rem; }
.gm-login .gm-banner { margin: 0 0 1rem; }
.gm-login .gm-field { margin-bottom: 1rem; }
.gm-login .gm-field input { box-sizing: border-box; width: 100%; font-size: 1rem; }
.gm-login-remember { display: flex; align-items: center; gap: 0.5rem; margin: 0 0 1.25rem; color: var(--gm-muted); font-size: 0.9rem; }
.gm-login-submit { width: 100%; font-size: 0.95rem; }
.gm-login-help { margin: 1rem 0 0; color: var(--gm-muted); font-size: 0.85rem; }

/* Log out in the account menu: a form button that looks like the menu's links. */
.gm-menu-form { display: flex; flex-direction: column; margin: 0; }
.gm-menu-button {
  appearance: none; background: none; border: 0; font: inherit; text-align: left; cursor: pointer;
  color: var(--gm-muted); font-weight: 600; font-size: 0.86rem; padding: 0.55rem 0.7rem; border-radius: 7px; white-space: nowrap;
}
.gm-menu-button:hover { color: var(--gm-ink); background: var(--gm-panel-2); }
.gm-sheet .gm-menu-button { box-sizing: border-box; min-height: 44px; padding: 0.4rem 0.5rem; font-size: 1rem; color: var(--gm-ink); }

/* Account page (accounts step 5, 2026-10-23): one column of cards, fields full width up to a readable line. */
.gm-acct { display: flex; flex-direction: column; gap: 1rem; max-width: 640px; }
.gm-acct-card { scroll-margin-top: 80px; }
.gm-acct-card h2 { margin: 0 0 1rem; }
.gm-acct-card form { display: flex; flex-direction: column; gap: 1rem; }
.gm-acct-card .gm-banner { margin: 0 0 1rem; }
.gm-acct-card .gm-field input, .gm-acct-card .gm-field select { box-sizing: border-box; width: 100%; min-width: 0; font-size: 0.95rem; }
.gm-acct-card .gm-btn { align-self: flex-start; }
.gm-acct-label { color: var(--gm-muted); font-size: 0.75rem; }
.gm-acct-value { color: var(--gm-ink); font-size: 0.95rem; overflow-wrap: anywhere; }
.gm-acct-hint { margin: 0; color: var(--gm-muted); font-size: 0.8rem; }
.gm-acct-note { margin: 0; color: var(--gm-muted); }
.gm-card .gm-acct-list { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 0.5rem; }
/* Browser Extension card (2026-11-05): each connected browser on one line with its Remove button; the note sits above Connect. */
.gm-acct-card .gm-acct-list li { display: flex; flex-wrap: wrap; align-items: center; gap: 0.25rem 0.75rem; }
.gm-acct-card .gm-acct-inline-form { display: inline-flex; margin-left: auto; }
#extension .gm-acct-note, #extension .gm-acct-list { margin-bottom: 1rem; }

/* Invite / reset link page (accounts step 6, 2026-10-24): the Sign in page's layout. */
.gm-link-text { margin: 0 0 1rem; }
.gm-link-hint { margin: 0 0 1rem; }
.gm-link-signin { display: block; box-sizing: border-box; text-align: center; text-decoration: none; }

/* Admin -> Users (accounts step 6, 2026-10-24). */
.gm-users > .gm-banner { margin: 0 0 1rem; }
.gm-users .gm-card { max-width: 640px; margin-bottom: 1rem; }
.gm-users .gm-card h2 { margin: 0 0 0.75rem; font-size: 1.05rem; overflow-wrap: anywhere; }
.gm-users .gm-card p { margin: 0 0 0.75rem; }
.gm-users-link { border-color: var(--gm-good); }
.gm-users-copy { display: flex; gap: 0.5rem; align-items: center; }
.gm-users-copy input { flex: 1 1 auto; min-width: 0; box-sizing: border-box; font-size: 0.9rem; }
.gm-users-form { display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: end; margin: 0 0 0.5rem; }
.gm-users-form .gm-field { flex: 1 1 260px; margin: 0; }
.gm-users-form .gm-field input { box-sizing: border-box; width: 100%; font-size: 0.95rem; }
.gm-users-h2 { font-size: 1.05rem; margin: 1.5rem 0 0.75rem; }
.gm-users-table { margin-bottom: 0.5rem; }
.gm-users-table th[scope="row"] { text-align: left; font-weight: 600; white-space: nowrap; padding: 0.55rem 1rem; border-bottom: 1px solid var(--gm-line); font-size: 0.86rem; }
.gm-users-table td, .gm-users-table th { vertical-align: top; }
.gm-users-you, .gm-users-sub { color: var(--gm-muted); font-weight: 400; font-size: 0.8rem; }
.gm-users-sub { display: block; }
.gm-users-email { overflow-wrap: anywhere; min-width: 10rem; }
.gm-users-when { white-space: nowrap; }
.gm-users-status { font-weight: 600; }
.gm-users-status.is-active { color: var(--gm-good); }
.gm-users-status.is-invited { color: var(--gm-warn); }
.gm-users-status.is-disabled { color: var(--gm-danger); }
.gm-users-actions { display: flex; gap: 0.4rem; justify-content: flex-end; flex-wrap: wrap; }
.gm-users-actions form { margin: 0; }
.gm-users-actions .gm-btn { white-space: nowrap; }
.gm-users-table { min-width: 760px; }
@media (max-width: 640px) {
  .gm-users-form .gm-btn { width: 100%; min-height: 44px; }
  /* Phones: each row stacks into a block of label / value lines, so nothing hides off to the side. */
  .gm-users-table { min-width: 0; }
  .gm-users-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  .gm-users-table, .gm-users-table tbody, .gm-users-table tr, .gm-users-table th[scope="row"], .gm-users-table td { display: block; }
  .gm-users-table tr { padding: 0.6rem 0; border-bottom: 1px solid var(--gm-line); }
  .gm-users-table tbody td, .gm-users-table th[scope="row"] { border: 0; padding: 0.15rem 0; white-space: normal; }
  .gm-users-table td[data-label] { display: flex; gap: 0.75rem; }
  .gm-users-table td[data-label]::before { content: attr(data-label); flex: 0 0 6.5rem; color: var(--gm-muted); font-size: 0.78rem; }
  .gm-users-table td[data-label] > * { min-width: 0; }
  .gm-users-email { min-width: 0; }
  .gm-users-actions { justify-content: flex-start; padding-top: 0.4rem; }
  .gm-users-actions .gm-btn { min-height: 40px; }
  .gm-users-table tbody tr:hover { background: none; }
}


/* Waiver Finder (Waiver Wire dev plan, owner 2026-11-02): built on the Weekly Rankings row classes (.gm-rk-*), like the Projection
   Matrix, with its own columns; the cell rules Weekly Rankings scopes to #gm-rk are repeated here for .gm-wv (owner 11-2: same look). */
/* Spare width goes to Player and Role in step, so the gaps stay even at any width (owner 11-2: "Weekly Rankings has nice spacing"). */
.gm-wv { --gm-rk-cols: 28px 52px minmax(190px, 1.3fr) 84px 124px 60px 72px 60px 64px minmax(96px, 1fr) 136px 112px 36px; }
.gm-wv .gm-rk-head { align-items: flex-start; }
.gm-wv-sync { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 0.5rem 0.75rem; margin: 0; }
.gm-wv .gm-rk-select-wrap select:disabled { opacity: 1; color: var(--gm-ink); background: var(--gm-panel-2); }
.gm-wv .gm-rk-proj { justify-self: end; text-align: right; }
.gm-wv .gm-rk-headrow > [data-sort="proj"] { justify-self: end; }
.gm-wv .gm-rk-h-center, .gm-wv .gm-rk-form-cell { justify-self: center; text-align: center; }
.gm-wv .gm-rk-opp { display: flex; flex-direction: column; line-height: 1.2; min-width: 0; }
.gm-wv .gm-rk-opp-name { font-size: 0.9rem; font-weight: 700; }
.gm-wv .gm-rk-opp-when { font-size: 0.7rem; color: var(--gm-muted); white-space: nowrap; }
.gm-wv .gm-rk-meta-opp { display: none; }
.gm-wv .gm-rk-nameline { flex-wrap: wrap; row-gap: 2px; }
.gm-wv-stat { font-size: 0.92rem; font-weight: 600; font-variant-numeric: tabular-nums; }
.gm-wv .gm-rk-headrow > [data-sort="season"], .gm-wv .gm-rk-headrow > [data-sort="last3"], .gm-wv-stat { justify-self: end; text-align: right; }
.gm-wv .gm-rk-headrow > :nth-child(10), .gm-wv-role { padding-left: 1rem; }
.gm-wv-role { font-size: 0.8rem; color: var(--gm-muted); }
.gm-wv-fits { font-size: 0.82rem; color: var(--gm-muted); }
.gm-wv-fits.is-start { color: var(--gm-good); font-weight: 700; }
.gm-wv-phone, .gm-wv-sortsel { display: none; }
.gm-wv-expand { background: var(--gm-panel-2); }
.gm-wv-expand[hidden] { display: none; }
.gm-wv-ahead { display: flex; flex-wrap: wrap; gap: 0.3rem 1.5rem; margin: 0; padding: 0.9rem 1.5rem 0 4.5rem; font-size: 0.84rem; color: var(--gm-muted); }
.gm-wv-ahead + .gm-rk-detail { border-top: 0; }
.gm-wv-fold[hidden] { display: none; }
.gm-wv-fold > summary { cursor: pointer; list-style: none; border-bottom: 0; }
.gm-wv-fold > summary::-webkit-details-marker { display: none; }
.gm-wv-fold > summary strong::before { content: "\25B8"; display: inline-block; width: 1rem; }
.gm-wv-fold[open] > summary strong::before { content: "\25BE"; }
.gm-wv-fold[open] > summary { border-bottom: 1px solid var(--gm-line); }
/* Compare and Add to Team (owner's Waiver Page notes, 11-8). */
.gm-wv.has-tray { padding-bottom: 5rem; }
.gm-wv-pick { display: flex; align-items: center; justify-content: center; height: 100%; cursor: pointer; }
.gm-wv-check { width: 18px; height: 18px; margin: 0; accent-color: var(--gm-accent); cursor: pointer; }
.gm-wv-check:disabled { cursor: not-allowed; }
.gm-wv-pick-text { display: none; }
.gm-wv .gm-rk-row:hover .gm-rk-num { visibility: visible; }       /* the checkbox has its own column here, unlike Weekly Rankings */
.gm-wv-tray .gm-btn { white-space: nowrap; }
.gm-wv-action { justify-self: end; }
.gm-wv-add { white-space: nowrap; }
.gm-wv-locked { font-size: 0.78rem; font-weight: 600; color: var(--gm-muted); }
.gm-wv-dock { position: fixed; left: 50%; bottom: 1.25rem; transform: translateX(-50%); z-index: 60; display: flex; flex-direction: column; gap: 0.5rem; width: max-content; max-width: calc(100% - 2rem); }
.gm-wv-dock .gm-rk-selbar { position: static; transform: none; }
.gm-wv-chips { display: flex; flex-wrap: wrap; gap: 0.35rem; min-width: 0; }
.gm-wv-chip { padding: 0.2rem 0.55rem; border: 1px solid var(--gm-line-control); border-radius: 999px; background: var(--gm-panel-2); color: var(--gm-ink); font-size: 0.78rem; cursor: pointer; }
.gm-wv-chip::after { content: " \00D7"; color: var(--gm-muted); }
.gm-wv-after { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 0.9rem; padding: 0.6rem 1rem; background: var(--gm-panel); border: 1px solid var(--gm-line-control); border-radius: 12px; box-shadow: var(--gm-shadow-float); font-size: 0.86rem; }
.gm-wv-after[hidden] { display: none; }
.gm-ss-after { margin-top: 0.75rem; box-shadow: none; }
.gm-wv-ffpc { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 0.75rem; margin: 0 0 1rem; padding: 0.75rem 1rem; background: var(--gm-panel); border: 1px solid var(--gm-line); border-radius: 12px; font-size: 0.88rem; }
.gm-wv-ffpc input[name="link"] { flex: 1 1 280px; }
.gm-wv-ffpc-error { flex-basis: 100%; margin: 0; color: var(--gm-danger); font-size: 0.82rem; }
/* League FAAB board and Lock bids (FAAB Bids Plan, owner 2026-11-06): the Weekly Rankings row classes with their own columns; not sticky, like My Leagues' tables. */
.gm-wv-fb { margin: 0 0 1rem; }
.gm-wv-board { --gm-fb-cols: minmax(190px, 1.1fr) 104px minmax(0, 2fr) 96px; }
.gm-wv-locks { --gm-fb-cols: minmax(190px, 1fr) 72px 92px 92px 72px; }
.gm-wv-fb .gm-rk-headrow, .gm-wv-fb .gm-rk-row { grid-template-columns: var(--gm-fb-cols); grid-template-areas: none; }
.gm-wv-fb .gm-rk-headrow { position: static; }
.gm-wv-fb .gm-rk-headrow > span:first-child { text-align: left; }
.gm-wv-fb .gm-rk-row { min-height: 40px; cursor: default; }
.gm-wv-locks .gm-rk-row { min-height: 62px; }
.gm-wv-fb > .gm-rk-table { border-radius: 0 0 12px 12px; }
.gm-wv-fb .gm-rk-row.is-mine { box-shadow: inset 3px 0 0 var(--gm-accent); }
.gm-wv-fb-num { justify-self: end; text-align: right; font-variant-numeric: tabular-nums; }
.gm-wv-fb-team { min-width: 0; font-size: 0.92rem; font-weight: 650; overflow-wrap: anywhere; }
.gm-wv-fb-left { font-size: 0.95rem; font-weight: 700; }
.gm-wv-fb-needs, .gm-wv-fb-adding { font-size: 0.85rem; color: var(--gm-muted); }
.gm-wv-fb-needs { padding-left: 1rem; }
.gm-wv-board .gm-rk-headrow > :nth-child(3) { padding-left: 1rem; }
.gm-wv-fb-proj { font-size: 0.92rem; font-weight: 600; }
.gm-wv-fb-lock { font-size: 1.1rem; font-weight: 800; color: var(--gm-accent); }
.gm-wv-fb-hard { font-size: 0.95rem; font-weight: 600; }
.gm-wv-fb-label { display: none; }
.gm-wv-fb-why { margin: 0; padding: 0 0.5rem 0.7rem; font-size: 0.84rem; color: var(--gm-muted); }
.gm-wv-fb-note { margin: 0 0 1rem; font-size: 0.88rem; color: var(--gm-muted); }
.gm-wv-fb-warn { color: var(--gm-warn); font-weight: 600; }
.gm-wv-fb > .gm-wv-fb-note { margin: 0; padding: 0.6rem 1rem; }
.gm-wv-locks .gm-wv-flag { justify-self: end; font-size: 0.8rem; }
.gm-wv-ahead .gm-wv-flag { margin-left: auto; font-size: 0.84rem; }
.gm-wv-mustwin { padding: 0.05rem 0.4rem; border-radius: 999px; background: color-mix(in srgb, var(--gm-accent) 14%, transparent); color: var(--gm-accent); font-size: 0.68rem; font-weight: 700; white-space: nowrap; }

@media (max-width: 760px) {
  .gm-wv-dock { bottom: 76px; width: calc(100% - 2rem); }
  .gm-wv-dock .gm-rk-selbar { width: 100%; flex-wrap: wrap; row-gap: 0.5rem; }
  .gm-wv-chips { flex: 1 1 100%; }
  .gm-wv.has-tray { padding-bottom: 9rem; }
  .gm-wv-pick { grid-area: pick; justify-self: start; height: auto; margin-top: 0.3rem; padding: 0.3rem 0.65rem; border: 1px solid var(--gm-line-control); border-radius: 8px; font-size: 0.78rem; font-weight: 600; }
  .gm-wv-check { position: absolute; width: 1px; height: 1px; opacity: 0; }
  .gm-wv-pick-text { display: inline; }
  .gm-wv-pick-text::before { content: "+ Compare"; }
  .gm-wv-item.is-selected .gm-wv-pick { border-color: var(--gm-accent); color: var(--gm-accent); }
  .gm-wv-item.is-selected .gm-wv-pick-text::before { content: "Selected"; }
  .gm-wv-check:disabled ~ .gm-wv-pick-text { opacity: 0.45; }
  .gm-wv-action { grid-area: action; margin-top: 0.3rem; padding-bottom: 0.2rem; }
  .gm-wv-sortsel { display: inline-flex; order: 3; flex: 0 0 auto; }
  .gm-wv-sortsel select { min-width: 150px; }
  .gm-wv .gm-rk-search { flex: 1 1 140px; }
  .gm-wv .gm-rk-row { grid-template-areas: "rank badge player proj chev" ". . matchup matchup ." ". . phone phone ." ". . fits fits ." ". . pick action ."; }
  .gm-wv .gm-rk-opp, .gm-wv .gm-rk-form-cell, .gm-wv-stat, .gm-wv-role { display: none; }
  .gm-wv .gm-rk-meta-opp { display: inline; }
  .gm-wv-phone { display: block; grid-area: phone; font-size: 0.78rem; color: var(--gm-muted); }
  .gm-wv-phone:empty { display: none; }
  .gm-wv-fits { grid-area: fits; padding-bottom: 0.2rem; }
  .gm-wv-ahead { padding: 0.8rem 1rem 0; }
  .gm-wv .gm-rk-num { font-size: 0.72rem; }
  .gm-wv-board { --gm-fb-cols: minmax(0, 1fr) 62px 44px; }
  .gm-wv-board .gm-rk-headrow { display: grid; min-height: 38px; }
  .gm-wv-board .gm-rk-headrow > :nth-child(3) { display: none; }
  .gm-wv-board .gm-rk-headrow > :nth-child(4) { font-size: 0; }
  .gm-wv-board .gm-rk-headrow > :nth-child(4)::after { content: "Adds"; font-size: 0.68rem; }
  .gm-wv-board .gm-rk-row { grid-template-areas: "team left adding" "needs needs needs"; padding: 0.45rem 0.6rem; row-gap: 0.1rem; }
  .gm-wv-fb-team { grid-area: team; }
  .gm-wv-fb-left { grid-area: left; }
  .gm-wv-fb-adding { grid-area: adding; }
  .gm-wv-fb-needs { grid-area: needs; padding-left: 0; font-size: 0.78rem; }
  .gm-wv-locks { --gm-fb-cols: 38px minmax(0, 1fr) auto; }
  .gm-wv-locks .gm-rk-row { grid-template-areas: "badge player player" ". lock hard" ". proj flag"; padding: 0.45rem 0.6rem; row-gap: 0.2rem; }
  .gm-wv-fb-label { display: inline; font-size: 0.74rem; font-weight: 600; color: var(--gm-muted); }
  .gm-wv-fb-lock { grid-area: lock; justify-self: start; }
  .gm-wv-fb-hard { grid-area: hard; justify-self: end; }
  .gm-wv-fb-proj { grid-area: proj; justify-self: start; font-size: 0.8rem; color: var(--gm-muted); }
  .gm-wv-fb-proj::before { content: "Proj "; }
  .gm-wv-locks .gm-wv-flag { grid-area: flag; }
}

/* League section + Draft Results page (sync roadmap step 2, owner 2026-11-04): standings and draft picks on the Weekly Rankings row
   classes, inside the team page's cards. Small tables, so the header row stays on phones and nothing is sticky. */
.gm-lg-standings { --gm-lg-cols: 48px minmax(0, 1fr) 72px 84px; }
.gm-lg-standings.is-points-only { --gm-lg-cols: 48px minmax(0, 1fr) 84px; }
.gm-lg-picks { --gm-lg-cols: 64px minmax(0, 1fr) 72px; }
.gm-lg-picks-board { --gm-lg-cols: 64px minmax(200px, 1.3fr) minmax(0, 1fr) 72px; }
.gm-lg { margin-top: 2rem; }
.gm-lg.gm-rk { margin-top: 0; }
.gm-lg-title { margin: 0 0 0.75rem; font-size: 1.15rem; font-weight: 700; }
.gm-lg-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.5rem; align-items: start; }
.gm-lg .gm-lineup-card-head h3 { margin: 0; font-size: 1rem; font-weight: 600; }
.gm-lg-more { margin-left: auto; font-size: 0.86rem; }
.gm-lg-table.gm-rk-table { border: 0; border-radius: 0; }
.gm-lg-board .gm-lg-table.gm-rk-table { border: 1px solid var(--gm-line); border-radius: 12px; }
.gm-lg .gm-rk-headrow, .gm-lg .gm-rk-row { grid-template-columns: var(--gm-lg-cols); grid-template-areas: none; }
.gm-lg .gm-rk-headrow { position: static; border-radius: 0; }
.gm-lg-board .gm-rk-headrow { border-radius: 12px 12px 0 0; }
.gm-lg .gm-rk-row { min-height: 52px; cursor: default; }
.gm-lg-num { justify-self: end; text-align: right; font-variant-numeric: tabular-nums; }
.gm-lg-record { font-size: 0.92rem; font-weight: 600; }
.gm-lg-overall { font-size: 0.88rem; color: var(--gm-muted); }
.gm-lg-team { display: flex; align-items: center; gap: 0.35rem; min-width: 0; }
.gm-lg-team-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.95rem; font-weight: 650; }
.gm-lg-team-cell .gm-lg-team-name { font-size: 0.88rem; font-weight: 500; color: var(--gm-muted); }
.gm-lg-meta-team { display: none; }
.gm-lg-empty { margin: 0; padding: 1rem 1.25rem; font-size: 0.88rem; color: var(--gm-muted); }
.gm-lg-round[hidden] { display: none; }
@media (max-width: 900px) {
  .gm-lg-grid { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 760px) {
  .gm-lg .gm-rk-headrow { display: grid; min-height: 38px; }
  .gm-lg .gm-rk-row { padding: 0.35rem 0.5rem; min-height: 50px; }
  .gm-lg .gm-rk-player { display: flex; gap: 0.6rem; }
  .gm-lg .gm-rk-player .gm-team-badge, .gm-lg .gm-rk-idblock, .gm-lg .gm-rk-rank, .gm-lg .gm-rk-proj { grid-area: auto; }
  .gm-lg .gm-rk-rank { justify-content: flex-start; }
  .gm-lg-standings { --gm-lg-cols: 26px minmax(0, 1fr) 44px 58px; }
  .gm-lg-standings.is-points-only { --gm-lg-cols: 26px minmax(0, 1fr) 58px; }
  .gm-lg-picks-board { --gm-lg-cols: 52px minmax(0, 1fr) 56px; }
  .gm-lg-picks-board .gm-lg-team-cell { display: none; }
  .gm-lg-picks-board .gm-lg-meta-team { display: inline; }
}

/* Weekly Rankings columns (2026-10-08): Rk | Player | Opp | Matchup | Proj | Range | Form | Big Game | expand. One alignment per column, shared by its header and its cells:
   numbers right, Form centred, everything else left. Scoped to #gm-rk so the other tables that share these classes keep their own layouts. */
/* 2026-10-12 (owner: "spaced more evenly"): each column is its content width plus 32px, and the spare width is split
   into equal extra gaps (--gm-rk-x, one share per gap; Form sits between two gaps so it takes two). Before, one column
   took all the spare - first Matchup (a wide gap before PROJ), then Player (a wide gap before OPP). Content: Player 230,
   Opp ~96, Matchup ~150, Proj 46 (right-aligned), Range bar 180 (right-aligned in its column), Form pill ~50 (centred),
   Big game 64 (right-aligned). Rank and the chevron stay fixed so the shelf still lines up with PLAYER and BIG GAME. */
#gm-rk {
  --gm-rk-x: max(0px, calc((100% - 1128px) / 6));
  --gm-rk-cols: 64px calc(254px + var(--gm-rk-x)) calc(120px + var(--gm-rk-x)) calc(174px + var(--gm-rk-x)) 46px
                calc(204px + var(--gm-rk-x)) calc(98px + 2 * var(--gm-rk-x)) 64px 40px;
}
#gm-rk .gm-rk-headrow > :nth-child(6), #gm-rk .gm-rk-range-cell { width: 180px; justify-self: end; box-sizing: border-box; }
#gm-rk .gm-rk-h-num { justify-self: end; text-align: right; }
#gm-rk .gm-rk-h-center { justify-self: center; text-align: center; }
#gm-rk .gm-rk-proj, #gm-rk .gm-rk-great { justify-self: end; text-align: right; }
#gm-rk .gm-rk-form-cell { justify-self: center; text-align: center; }
#gm-rk .gm-rk-great { display: flex; flex-direction: column; align-items: flex-end; line-height: 1.15; }
#gm-rk .gm-rk-great-pct { font-size: 0.95rem; font-weight: 600; color: var(--gm-text, inherit); font-variant-numeric: tabular-nums; }
#gm-rk .gm-rk-great-bar { font-size: 0.68rem; color: var(--gm-muted); font-weight: 500; }
#gm-rk .gm-rk-opp { display: flex; flex-direction: column; line-height: 1.2; min-width: 0; }
#gm-rk .gm-rk-opp-name { font-size: 0.9rem; font-weight: 700; }
#gm-rk .gm-rk-opp-when { font-size: 0.7rem; color: var(--gm-muted); white-space: nowrap; }
#gm-rk .gm-rk-meta-opp, #gm-rk .gm-form-phone { display: none; }
#gm-rk .gm-rk-nameline { flex-wrap: wrap; row-gap: 2px; }
@media (max-width: 760px) {
  #gm-rk .gm-rk-opp, #gm-rk .gm-rk-form-cell, #gm-rk .gm-rk-great { display: none; }
  #gm-rk .gm-rk-meta-opp { display: inline; }
  #gm-rk .gm-rk-proj { display: inline-flex; flex-direction: column; align-items: flex-end; gap: 2px; }
  #gm-rk .gm-form-phone { display: inline-flex; }
}

/* ==========================================================================
   Weekly Rankings shelf (owner's cleanup spec + mockup, 2026-10-12). Five text roles - section title 15/20 600, body
   14/22, label 14/20 muted, caption 12/16 muted, eyebrow 11/14 600 caps - plus 18/24 stat values and 12px chips; 4px
   spacing steps. Content runs from the PLAYER column's left edge (8px row padding + 64px rank + 8px gap = 80px) to the
   BIG GAME column's right edge (8 + 40px chevron + 8 = 56px). Shared with the Projection Matrix since 2026-10-15 (.gm-shelf, player_shelf.js),
   which sets its own edges.
   ========================================================================== */
.gm-rk-detail.gm-shelf { display: block; padding: 24px 56px 20px 80px; background: var(--gm-bg); border-top: 1px solid var(--gm-line); }
.gm-rk-detail.gm-shelf[hidden] { display: none; }  /* the line above outranks the global [hidden] rule; closed shelves stay closed */
.gm-shelf .gm-rk-shelf { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 48px; row-gap: 32px; align-items: start; }
.gm-shelf .gm-rk-shelf > * { grid-area: auto; min-width: 0; }
.gm-shelf .gm-rk-stack { display: flex; flex-direction: column; gap: 32px; }
.gm-shelf .gm-rk-sec { margin: 0 0 12px; font-size: 15px; line-height: 20px; font-weight: 600; color: var(--gm-ink); }
.gm-shelf .gm-outlook-head { margin: -10px 0 12px; }
.gm-shelf .gm-outlook-sub, .gm-shelf .gm-outlook-key, .gm-shelf .gm-rk-caption { font-size: 12px; line-height: 16px; color: var(--gm-muted); }
.gm-shelf .gm-outlook-key { margin-top: 12px; gap: 4px 16px; }
.gm-shelf .gm-outlook-nums { margin: 20px 0 0; gap: 12px 32px; }
.gm-shelf .gm-outlook-nums dt, .gm-shelf .gm-rk-tiles dt { font-size: 11px; line-height: 14px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--gm-muted); }
.gm-shelf .gm-outlook-nums dd, .gm-shelf .gm-rk-tiles dd { margin: 4px 0 0; font-size: 18px; line-height: 24px; font-weight: 600; font-variant-numeric: tabular-nums; color: var(--gm-ink); }
.gm-shelf .gm-outlook-typical { margin: 8px 0 0; font-size: 14px; line-height: 20px; color: var(--gm-muted); }
.gm-shelf .gm-rk-tiles { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 12px 8px; margin: 0; }
.gm-shelf .gm-rk-tiles div { min-width: 0; }
.gm-shelf .gm-rk-tiles dt { white-space: nowrap; }
/* Label/value rows - This Week's Factors and Game context share them: 36px tall, full column width, 1px rules. */
.gm-rk-detail.gm-shelf .gm-rk-kv { gap: 0; margin: 0; border-top: 1px solid var(--gm-line); }
.gm-rk-detail.gm-shelf .gm-rk-kv div { height: 36px; align-items: center; padding: 0; border-bottom: 1px solid var(--gm-line); font-size: 14px; line-height: 20px; }
.gm-rk-detail.gm-shelf .gm-rk-kv dt { color: var(--gm-muted); }
.gm-rk-detail.gm-shelf .gm-rk-kv dd { font-weight: 600; color: var(--gm-ink); }
.gm-shelf .gm-factors { margin-top: 0; }
.gm-shelf .gm-factors-defs { margin: 0 0 12px; }
.gm-shelf .gm-rk-body { margin: 0; font-size: 14px; line-height: 22px; color: var(--gm-ink); }
.gm-shelf .gm-rk-caption { margin: 8px 0 0; }
.gm-shelf .gm-rk-conflict-note { margin: 12px 0 0; }
/* Actions: one row across the shelf, buttons right-aligned. */
.gm-rk-detail.gm-shelf > .gm-rk-actions { margin-top: 24px; justify-content: flex-end; gap: 8px; }  /* no rule above (owner 2026-10-12) */
.gm-rk-detail.gm-shelf > .gm-rk-actions .gm-btn { display: inline-flex; align-items: center; box-sizing: border-box; height: 36px; padding: 0 14px; font-size: 14px; font-weight: 600; }
@media (max-width: 960px) {
  .gm-rk-detail.gm-shelf { padding: 20px 16px; }
  .gm-shelf .gm-rk-shelf { grid-template-columns: minmax(0, 1fr); }
  .gm-shelf .gm-rk-tiles { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
