/* UPS Mobile — Phase 1 shell + Contracts view.
   Mobile-first. Dark theme mirrors the desktop player modal palette
   (#0e1320 background, #5b8dff accent) so visual identity stays consistent.
   No framework — vanilla CSS, no preprocessor. */

:root {
  --bg: #0e1320;
  --bg-elev: #141a26;
  --bg-elev2: #1a2230;
  --line: #2a3446;
  --line-soft: #3a455c;
  --fg: #e8edf5;
  --fg-muted: #8a97ad;
  --accent: #5b8dff;
  --warn: #ffb86b;
  --ok: #8be58b;
  --danger: #ff6b6b;
  --teal: #2dd4bf;
  --nav-h: 60px;
  --hdr-h: 48px;
  --safe-bot: env(safe-area-inset-bottom, 0px);
  --safe-top: env(safe-area-inset-top, 0px);
}

/* Embed mode (body.ups-m-embed) — a stripped-down chrome for one-off deep
   links (e.g. the desktop header's Add/Drop link) opened in their own tab.
   --nav-h feeds calc() in several places across this file (main content's
   bottom padding, the bottom nav's own height, and a handful of floating
   elements' bottom offsets, e.g. the "update available" banner) — rather
   than hunting down and overriding every individual selector, zero out the
   custom property ONCE here so every existing calc() referencing it
   collapses automatically, including any usage added later that isn't
   grepped for today. The bottom nav itself is then hidden outright. */
body.ups-m-embed {
  --nav-h: 0px;
}
body.ups-m-embed .ups-m-nav {
  display: none;
}

* { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
  background: var(--bg);
  color: var(--fg);
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  font-size: 15px;
  line-height: 1.4;
  -webkit-font-smoothing: antialiased;
  -webkit-text-size-adjust: 100%;
  overscroll-behavior-y: contain;
}

body { min-height: 100vh; }

.ups-m-app {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

/* ----- Header ----- */
.ups-m-header {
  position: sticky;
  top: 0;
  height: calc(var(--hdr-h) + var(--safe-top));
  padding-top: var(--safe-top);
  background: var(--bg-elev);
  border-bottom: 1px solid var(--line);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-left: 16px;
  padding-right: 16px;
  z-index: 20;
}
.ups-m-header-title {
  font-size: 16px;
  font-weight: 700;
  letter-spacing: 0.02em;
  color: var(--fg);
}
.ups-m-header-meta {
  font-size: 11px;
  color: var(--fg-muted);
  text-align: right;
}
/* Embed-mode header actions — sits in the meta slot where the year normally
   goes. Small + unobtrusive, matching the pill/button language used
   elsewhere in this file (e.g. .ups-m-update-banner button). Two parts:
   Close (primary -- calls window.close()) and a plain "MFL" link (fallback
   for Safari/WebKit, which is known to refuse closing a tab it didn't open
   via window.open(), unlike the Chromium behavior this was verified against). */
.ups-m-embed-actions {
  display: flex;
  align-items: center;
  gap: 6px;
}
.ups-m-embed-close {
  border: 1px solid var(--line);
  background: var(--bg-elev2);
  color: var(--fg);
  border-radius: 999px;
  padding: 5px 11px;
  font-size: 11px;
  font-weight: 700;
  font-family: inherit;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-embed-close:active {
  background: var(--line);
}
.ups-m-embed-desktop-link {
  font-size: 10px;
  font-weight: 600;
  color: var(--fg-muted);
  text-decoration: underline;
  padding: 5px 2px;
}

/* ----- Main scroll area ----- */
.ups-m-main {
  flex: 1;
  padding-bottom: calc(var(--nav-h) + var(--safe-bot) + 16px);
}

.ups-m-loading,
.ups-m-empty,
.ups-m-error {
  padding: 32px 20px;
  text-align: center;
  color: var(--fg-muted);
  font-size: 14px;
}
.ups-m-error { color: var(--danger); }

/* ----- Bottom nav ----- */
.ups-m-nav {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  height: calc(var(--nav-h) + var(--safe-bot));
  padding-bottom: var(--safe-bot);
  background: var(--bg-elev);
  border-top: 1px solid var(--line);
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  z-index: 30;
}
.ups-m-nav-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
  color: var(--fg-muted);
  text-decoration: none;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.02em;
  -webkit-tap-highlight-color: transparent;
  transition: color 120ms;
}
.ups-m-nav-item.active { color: var(--accent); }
.ups-m-nav-icon {
  font-size: 20px;
  line-height: 1;
  position: relative;
}
.ups-m-nav-label { font-size: 11px; white-space: nowrap; }
/* Pending-offers badge on a nav icon — red dot top-right with optional count. */
.ups-m-nav-icon .ups-m-nav-badge {
  position: absolute;
  top: -4px;
  right: -10px;
  min-width: 16px;
  height: 16px;
  padding: 0 4px;
  border-radius: 8px;
  background: var(--danger);
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  line-height: 16px;
  text-align: center;
}

/* ----- Skeleton loaders (shown during initial load instead of "Loading…") ----- */
@keyframes ups-m-shimmer {
  0% { background-position: -200px 0; }
  100% { background-position: calc(200px + 100%) 0; }
}
.ups-m-skeleton {
  background: linear-gradient(90deg, var(--bg-elev) 0%, var(--bg-elev2) 50%, var(--bg-elev) 100%);
  background-size: 200px 100%;
  background-repeat: no-repeat;
  animation: ups-m-shimmer 1.2s infinite linear;
  border-radius: 6px;
}
.ups-m-skel-row {
  display: grid;
  grid-template-columns: 32px 1fr 60px;
  gap: 10px;
  align-items: center;
  padding: 14px 16px;
  border-bottom: 1px solid var(--line);
}
.ups-m-skel-row .pos { height: 28px; border-radius: 6px; }
.ups-m-skel-row .body { display: flex; flex-direction: column; gap: 6px; }
.ups-m-skel-row .body .ln1 { height: 14px; width: 60%; }
.ups-m-skel-row .body .ln2 { height: 10px; width: 80%; }
.ups-m-skel-row .right { height: 18px; }
.ups-m-skel-card { height: 110px; margin: 12px; }

/* ----- Team header card (Rosters → Team Detail) ----- */
.ups-m-team-header {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 12px;
  padding: 12px 14px;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 10px;
}
.ups-m-team-icon {
  /* MFL franchise icons are often horizontal banners (e.g. wordmarks),
     not squares. Cropping to a 44x44 square cuts off the brand text.
     Use a wider aspect with `object-fit: contain` so banner-style icons
     show fully; square icons just letterbox naturally. */
  width: 88px;
  height: 56px;
  border-radius: 8px;
  object-fit: contain;
  background: var(--bg-elev2);
  flex: 0 0 auto;
}
.ups-m-team-header-text { flex: 1 1 auto; min-width: 0; }
.ups-m-team-header-name {
  font-size: 15px;
  font-weight: 700;
  color: var(--fg);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ups-m-team-header-owner {
  font-size: 12px;
  color: var(--fg-muted);
  margin-top: 2px;
}

/* ----- Salary Summary (Rosters → Summary mode) ----- */
.ups-m-segctl {
  display: flex;
  gap: 6px;
  padding: 10px 12px;
  background: var(--bg);
}
.ups-m-segctl-btn {
  flex: 1 1 0;
  padding: 8px 10px;
  background: var(--bg-elev);
  color: var(--fg-muted);
  border: 1px solid var(--line);
  border-radius: 8px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-segctl-btn.on {
  background: var(--bg-elev2);
  color: var(--accent);
  border-color: var(--accent);
}
.ups-m-salsum {
  margin: 0 12px;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 10px;
  overflow: hidden;
}
.ups-m-salsum-head,
.ups-m-salsum-row {
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) 54px 54px 50px 36px 44px;
  gap: 5px;
  padding: 8px 10px;
  align-items: center;
  font-size: 12px;
}
.ups-m-salsum-head {
  background: var(--bg-elev2);
  color: var(--fg-muted);
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  font-size: 10px;
}
.ups-m-salsum-row {
  border-top: 1px solid var(--line);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-salsum-row:active { background: var(--bg-elev2); }
.ups-m-salsum-row.me { background: rgba(91, 141, 255, 0.06); }
.ups-m-salsum-row .team {
  font-weight: 600;
  color: var(--fg);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ups-m-salsum-row .team .tag {
  display: inline-block;
  margin-left: 4px;
  padding: 0 4px;
  font-size: 9px;
  font-weight: 700;
  border-radius: 4px;
  background: var(--bg-elev2);
  color: var(--fg-muted);
  text-transform: uppercase;
  letter-spacing: 0.03em;
}
.ups-m-salsum-row .team .tag.ir { color: var(--danger); }
.ups-m-salsum-row .team .tag.tx { color: var(--teal); }
.ups-m-salsum-row .team .tag.adj { color: var(--warn); }
.ups-m-salsum-row .team .tag.neutral { color: var(--fg-muted); }
.ups-m-salsum-row .team .tag.danger {
  color: #fff;
  background: var(--danger);
}
.ups-m-salsum-row .num {
  text-align: right;
  font-variant-numeric: tabular-nums;
  color: var(--fg);
}
.ups-m-salsum-row .num.ok { color: var(--ok); }
.ups-m-salsum-row .num.warn { color: var(--warn); }
.ups-m-salsum-row .num.danger { color: var(--danger); }
.ups-m-salsum-foot {
  margin: 8px 12px 12px;
  font-size: 11px;
  color: var(--fg-muted);
  text-align: center;
}

/* ----- Submit-busy state (U4) ----- */
/* Applied to .ups-m-sheet-foot .btn and .btn-act via setSubmitButtonsBusy.
   While the "…ing" toast is showing, the button is disabled + dimmed +
   gets a leading spinner so double-taps can't fire a duplicate write. */
button.ups-m-busy,
.ups-m-busy {
  opacity: 0.55;
  cursor: progress !important;
  position: relative;
}
button.ups-m-busy::before,
.ups-m-busy::before {
  content: "";
  display: inline-block;
  width: 12px;
  height: 12px;
  margin-right: 8px;
  vertical-align: -2px;
  border: 2px solid currentColor;
  border-right-color: transparent;
  border-radius: 50%;
  animation: ups-m-busy-spin 700ms linear infinite;
}
@keyframes ups-m-busy-spin {
  to { transform: rotate(360deg); }
}

/* ----- Pull-to-refresh indicator ----- */
.ups-m-ptr {
  position: fixed;
  left: 50%;
  top: calc(var(--hdr-h) + var(--safe-top) + 4px);
  transform: translate(-50%, -120%);
  width: 36px;
  height: 36px;
  border-radius: 18px;
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--accent);
  font-size: 18px;
  z-index: 25;
  transition: transform 200ms;
  pointer-events: none;
}
.ups-m-ptr.show { transform: translate(-50%, 0); }
.ups-m-ptr.spin svg { animation: ups-m-ptr-spin 700ms linear infinite; }
@keyframes ups-m-ptr-spin {
  to { transform: rotate(360deg); }
}

/* ----- Sub-tabs (used by My Team and League) ----- */
.ups-m-subtabs {
  position: sticky;
  top: calc(var(--hdr-h) + var(--safe-top));
  background: var(--bg-elev);
  border-bottom: 1px solid var(--line);
  display: flex;
  overflow-x: auto;
  padding: 0 8px;
  z-index: 10;
}
.ups-m-subtab {
  flex: 0 0 auto;
  padding: 10px 14px;
  font-size: 13px;
  font-weight: 600;
  color: var(--fg-muted);
  text-decoration: none;
  border-bottom: 2px solid transparent;
  white-space: nowrap;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-subtab.active {
  color: var(--accent);
  border-bottom-color: var(--accent);
}

/* Contracts hub — secondary action nav (MYAC/Extend/Restructure/MYM/Tag).
   NOT sticky: the primary My Team subtabs already occupy the sticky slot, so a
   second sticky bar would overlap it. Slightly inset/dimmer to read as level 2. */
.ups-m-subtabs.ups-m-action-chips {
  position: static;
  top: auto;
  z-index: auto;
  background: var(--bg);
}
.ups-m-action-chips .ups-m-subtab { font-size: 12px; padding: 9px 13px; }
.ups-m-action-blurb {
  font-size: 12px;
  color: var(--fg-muted);
  line-height: 1.4;
  padding: 10px 14px 0;
}

/* "Update available" banner — shown when a newer build is deployed than the
   running cached code. Floats above the bottom nav. */
.ups-m-update-banner {
  position: fixed;
  left: 12px; right: 12px;
  bottom: calc(var(--nav-h) + var(--safe-bot) + 12px);
  /* Outranks even the toast (1200): this one is a call to ACTION with a button
     in it, not a status line, and the two occupy the same band above the nav —
     an opaque toast centred over it would swallow the Reload button. */
  z-index: 1300;
  display: flex; align-items: center; gap: 10px;
  padding: 10px 12px;
  background: var(--accent);
  color: #fff;
  border-radius: 12px;
  box-shadow: 0 6px 24px rgba(0,0,0,0.45);
  font-size: 14px; font-weight: 600;
}
.ups-m-update-banner .ups-m-update-msg { flex: 1; }
.ups-m-update-banner button {
  border: none; border-radius: 8px; padding: 7px 12px;
  font-size: 13px; font-weight: 700; cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
#ups-m-update-reload { background: #fff; color: var(--accent); }
#ups-m-update-dismiss { background: rgba(255,255,255,0.22); color: #fff; padding: 7px 10px; }

/* ── My Team action center (dashboard summary card) ── */
.ups-m-action-center { margin: 12px; }
.ups-m-ac-title {
  font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: var(--fg-muted); margin-bottom: 8px;
}
.ups-m-ac-item {
  display: flex; align-items: center; gap: 10px;
  width: 100%; text-align: left;
  padding: 11px 12px; margin-bottom: 8px;
  background: var(--bg-elev); border: 1px solid var(--line);
  border-radius: 12px; color: var(--fg); text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-ac-item:last-child { margin-bottom: 0; }
.ups-m-ac-item.warn { border-color: var(--warn); background: rgba(255,184,107,0.07); }
.ups-m-ac-item.danger { border-color: var(--danger); background: rgba(255,107,107,0.07); }
.ups-m-ac-icon { font-size: 18px; flex: 0 0 auto; }
.ups-m-ac-text { flex: 1; font-size: 14px; line-height: 1.35; }
.ups-m-ac-text .sub { display: block; font-size: 12px; color: var(--fg-muted); margin-top: 1px; }
.ups-m-ac-chev { color: var(--fg-muted); font-size: 16px; flex: 0 0 auto; }
.ups-m-ac-allset {
  display: flex; align-items: center; gap: 8px;
  padding: 12px; background: var(--bg-elev); border: 1px solid var(--line);
  border-radius: 12px; color: var(--fg-muted); font-size: 13px;
}

/* ----- Cards ----- */
.ups-m-card {
  margin: 12px;
  padding: 14px;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 10px;
}
.ups-m-card-title {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--fg-muted);
  margin: 0 0 8px;
}

/* Cap Space card */
.ups-m-cap-card {
  margin: 12px;
  padding: 14px 14px 12px;
  background: linear-gradient(180deg, #161d2c 0%, #121826 100%);
  border: 1px solid var(--line);
  border-radius: 12px;
}
.ups-m-cap-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}
.ups-m-cap-kv .lbl {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--fg-muted);
}
.ups-m-cap-kv .val {
  font-size: 22px;
  font-weight: 700;
  margin-top: 2px;
  font-variant-numeric: tabular-nums;
}
.ups-m-cap-kv .val.warn { color: var(--warn); }
.ups-m-cap-kv .val.ok { color: var(--ok); }
.ups-m-cap-kv .val.danger { color: var(--danger); }

.ups-m-cap-bar {
  margin-top: 12px;
  height: 6px;
  background: var(--bg-elev2);
  border-radius: 3px;
  overflow: hidden;
}
.ups-m-cap-bar-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--accent), #7aa9ff);
  transition: width 200ms;
}
.ups-m-cap-bar-fill.over { background: linear-gradient(90deg, var(--warn), var(--danger)); }

.ups-m-cap-foot {
  margin-top: 8px;
  font-size: 11px;
  color: var(--fg-muted);
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}
.ups-m-cap-foot .chip {
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  padding: 3px 7px;
  border-radius: 999px;
  font-size: 11px;
  color: var(--fg-muted);
}

/* ----- Position group headers ----- */
.ups-m-pos-group {
  margin: 0;
  padding: 8px 16px;
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 0.1em;
  color: var(--fg-muted);
  text-transform: uppercase;
  /* Stick under the page header + sub-tabs so the user always knows
     which position group they're scrolling through on a long roster. */
  position: sticky;
  top: calc(var(--hdr-h) + var(--safe-top) + 40px);
  background: var(--bg);
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  z-index: 5;
}
.ups-m-pos-group:first-child { border-top: 0; }

/* ----- Player rows (Contracts view) ----- */
.ups-m-player-list {
  display: flex;
  flex-direction: column;
}
.ups-m-player-row {
  display: grid;
  grid-template-columns: 32px 1fr auto;
  gap: 10px;
  align-items: center;
  padding: 12px 16px;
  background: var(--bg-elev);
  border-top: 1px solid var(--line);
  cursor: pointer;
  -webkit-tap-highlight-color: rgba(91,141,255,0.12);
  min-height: 56px;
}
.ups-m-player-row:active { background: var(--bg-elev2); }
.ups-m-player-row .pos {
  font-size: 11px;
  font-weight: 700;
  text-align: center;
  padding: 3px 0;
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  border-radius: 4px;
  color: var(--fg-muted);
  letter-spacing: 0.04em;
}
.ups-m-player-row .pos.qb { color: #ef9a9a; }
.ups-m-player-row .pos.rb { color: #80deea; }
.ups-m-player-row .pos.wr { color: #a5d6a7; }
.ups-m-player-row .pos.te { color: #ffcc80; }
.ups-m-player-row .pos.pk { color: #ce93d8; }
.ups-m-player-row .pos.def,
.ups-m-player-row .pos.dl,
.ups-m-player-row .pos.lb,
.ups-m-player-row .pos.db { color: #b39ddb; }

.ups-m-player-row .body { min-width: 0; }
.ups-m-player-row .name {
  font-size: 14px;
  font-weight: 600;
  color: var(--fg);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ups-m-player-row .sub {
  font-size: 11px;
  color: var(--fg-muted);
  margin-top: 2px;
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
}
.ups-m-player-row .sub .badge {
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  border-radius: 3px;
  padding: 1px 5px;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--fg-muted);
}
.ups-m-player-row .sub .badge.ir { color: var(--warn); border-color: rgba(255,184,107,0.4); }
.ups-m-player-row .sub .badge.tx { color: var(--teal); border-color: rgba(45,212,191,0.4); }
.ups-m-player-row .sub .badge.exp { color: var(--danger); border-color: rgba(255,107,107,0.4); }
.ups-m-player-row .sub .badge.otb {
  color: var(--teal);
  border-color: rgba(45,212,191,0.5);
  background: rgba(45,212,191,0.10);
}
.ups-m-player-row .sub .badge.ext { color: var(--accent); border-color: rgba(91,141,255,0.4); }

.ups-m-player-row .right {
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.ups-m-player-row .salary {
  font-size: 14px;
  font-weight: 700;
  color: var(--fg);
}
.ups-m-player-row .cy {
  font-size: 10px;
  font-weight: 600;
  color: var(--fg-muted);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  margin-top: 2px;
}

/* ----- Empty/placeholder rows ----- */
.ups-m-stub {
  padding: 40px 24px;
  text-align: center;
  color: var(--fg-muted);
  font-size: 14px;
  line-height: 1.6;
}
.ups-m-stub h3 { color: var(--fg); margin: 0 0 8px; font-size: 16px; }

/* ----- Toast ----- */
.ups-m-toast {
  position: fixed;
  left: 50%;
  bottom: calc(var(--nav-h) + var(--safe-bot) + 20px);
  transform: translate(-50%, 30px);
  background: var(--bg-elev2);
  color: var(--fg);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 10px 14px;
  font-size: 13px;
  opacity: 0;
  transition: opacity 200ms, transform 200ms;
  /* ABOVE EVERY MODAL LAYER. The toast is the app's primary confirmation
     channel, and it lives as a plain sibling of the overlays inside
     #ups-m-app — same stacking context, so z-index alone decides. At the old
     z-index:50 every toast fired from inside a waiver overlay (claims 104 and
     OPAQUE, bid sheet 108, drop picker 110, sheet backdrop 1000) was painted
     BEHIND a solid screen and never seen: "Claim updated", "Claims submitted ✓",
     and — worst — the duplicate-claim refusal, which made "Add to claims" look
     like a dead button. pointer-events:none means sitting on top blocks
     nothing. Above every modal layer; only .ups-m-update-banner (1300)
     outranks it, because that one has a button a toast would cover. */
  z-index: 1200;
  pointer-events: none;
  max-width: 88%;
  text-align: center;
}
.ups-m-toast.show {
  opacity: 1;
  transform: translate(-50%, 0);
}
.ups-m-toast.err { border-color: var(--danger); color: var(--danger); }
.ups-m-toast.ok { border-color: var(--ok); color: var(--ok); }
.ups-m-toast.warn { border-color: var(--warn, #f4c369); color: var(--warn, #f4c369); }

/* ----- Load-error banner (surfaces silent fetch failures) ----- */
.ups-m-load-err-banner {
  margin: 8px 12px 12px;
  padding: 10px 12px;
  background: rgba(255, 184, 107, 0.10);
  border: 1px solid var(--warn);
  border-radius: 8px;
  color: var(--warn);
  font-size: 13px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.ups-m-load-err-banner .ico { font-size: 14px; flex: 0 0 auto; }
.ups-m-load-err-banner .msg { flex: 1 1 auto; }
.ups-m-load-err-banner .dismiss {
  flex: 0 0 auto;
  background: transparent;
  border: 0;
  color: var(--warn);
  font-size: 18px;
  cursor: pointer;
  padding: 0 4px;
}

/* ----- Lineup view ----- */
.ups-m-lineup-status-card {
  margin: 12px;
  padding: 12px 14px;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 10px;
}
.ups-m-lineup-status-line {
  font-size: 14px;
  color: var(--fg);
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
}
.ups-m-lineup-status-line strong { font-weight: 700; }
.ups-m-lineup-chips { display: flex; gap: 6px; }
.ups-m-lineup-chip {
  font-size: 11px;
  font-weight: 700;
  padding: 2px 8px;
  border-radius: 999px;
  border: 1px solid var(--line);
  background: var(--bg);
  color: var(--fg-muted);
  font-variant-numeric: tabular-nums;
}
.ups-m-lineup-chip.ok { color: var(--ok); border-color: rgba(139,229,139,0.4); }
.ups-m-lineup-chip.under { color: var(--warn); border-color: rgba(255,184,107,0.4); }
.ups-m-lineup-bar {
  margin-top: 8px;
  height: 6px;
  background: var(--bg-elev2);
  border-radius: 3px;
  overflow: hidden;
}
.ups-m-lineup-bar-fill {
  height: 100%;
  transition: width 200ms;
  background: var(--accent);
}
.ups-m-lineup-bar-fill.ok { background: var(--ok); }
.ups-m-lineup-bar-fill.under { background: var(--warn); }
.ups-m-lineup-bar-fill.over { background: var(--danger); }
.ups-m-lineup-errors {
  margin: 8px 0 0;
  padding: 0 0 0 18px;
  font-size: 11px;
  color: var(--warn);
}
.ups-m-lineup-errors li { margin-bottom: 2px; }

/* Auto-fill / Clear controls under the status card */
.ups-m-lineup-tools {
  display: flex;
  gap: 8px;
  margin-top: 10px;
}
.ups-m-lineup-tool {
  flex: 1;
  padding: 8px;
  background: var(--bg-elev2);
  color: var(--fg);
  border: 1px solid var(--line);
  border-radius: 8px;
  font-size: 12px;
  font-weight: 600;
  font-family: inherit;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-lineup-tool:active { background: var(--bg); }

/* Section header (Offense / Defense) */
.ups-m-lineup-section-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 16px 6px;
  margin-top: 6px;
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--fg-muted);
}
.ups-m-lineup-section-head .n {
  color: var(--accent);
  letter-spacing: 0;
}

/* One starting slot = position tag + dropdown */
.ups-m-slot {
  display: grid;
  grid-template-columns: 56px 1fr 40px;
  gap: 8px;
  align-items: center;
  padding: 7px 14px;
  border-top: 1px solid var(--line);
  background: var(--bg-elev);
}
.ups-m-slot.filled { border-left: 3px solid var(--accent); padding-left: 11px; }
/* Matchup line under a player (review #1249): a real button, 32px tall, 12px text.
   It wraps the chip onto a second line rather than overflow at 320px. */
.ups-m-slot-mu { -webkit-appearance: none; appearance: none; display: flex; flex-wrap: wrap; align-items: center; gap: 1px 5px;
  width: 100%; min-height: 32px; margin: 0; padding: 3px 12px 6px 11px; background: transparent; border: 0;
  border-left: 3px solid var(--accent); border-radius: 0; text-align: left; font: inherit; font-size: 12px; line-height: 1.35;
  color: var(--fg-muted); cursor: pointer; -webkit-tap-highlight-color: transparent; }
.ups-m-slot-mu:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.ups-m-mu-where { white-space: nowrap; }
.ups-m-mu-sep { color: var(--fg-muted); }
/* "#30 vs QBs": the opponent's rank in MFL points allowed per game to the position (Keith 2026-10-13).
   Green = the 10 allowing the most, red = the 10 allowing the least; the rank says it in text. */
.ups-m-mu-chip { font-weight: 700; color: var(--fg); white-space: nowrap; }
.ups-m-mu-chip.good, .ups-m-mu-rk.good { color: var(--ok); }
.ups-m-mu-chip.tough, .ups-m-mu-rk.tough { color: var(--danger); }
.ups-m-mu-rk { font-weight: 700; color: var(--fg); }
/* The "Details" button on every matchup line (Keith 2026-10-13: more pronounced). */
.ups-m-mu-more { margin-left: auto; flex: none; display: inline-flex; align-items: center; min-height: 24px; padding: 0 9px;
  border: 1px solid var(--accent); border-radius: 999px; color: var(--accent); background: rgba(91,141,255,0.12);
  font-size: 11.5px; font-weight: 800; letter-spacing: 0.01em; white-space: nowrap; }
.ups-m-mu-more.on { background: var(--accent); color: #0a1222; }
.ups-m-mu-inj { color: var(--fg); }
.ups-m-mu-note.inj { margin-top: 4px; }
.ups-m-mu-about-spread { margin-top: 6px; }
/* Injury/roster status chips (the shared .ups-m-inj-chip, player_sheet.css) on Lineup:
   under the slot's position label, after a bench player's team. */
.ups-m-inj-chip.lu { margin-left: 0; padding: 0 4px; font-size: 10.5px; line-height: 15px; border-radius: 4px; }
/* Last week's final designation ("W5 OUT"): outlined, so it never reads as this week's. */
.ups-m-inj-chip.lu.prior { background: transparent; border-style: dashed; }
.ups-m-slot-tag .inj { display: flex; flex-wrap: wrap; gap: 2px; margin-top: 3px; }
.ups-m-bench-id .ups-m-inj-chip.lu { margin-left: 6px; vertical-align: 1px; }
.ups-m-mu-note { font-size: 12px; line-height: 1.45; color: var(--fg-muted); margin-top: 8px; }
.ups-m-mu-note.warn { color: var(--warn); }
.ups-m-mu-retry { background: transparent; border: 1px solid var(--line); color: var(--accent); border-radius: 6px;
  min-height: 32px; padding: 4px 10px; font: inherit; font-size: 12px; font-weight: 700; cursor: pointer; }
.ups-m-mu-detail { font-size: 12px; color: var(--fg-muted); padding: 4px 12px 9px 11px; border-left: 3px solid var(--accent); background: rgba(91,141,255,0.05); }
.ups-m-mu-detail .r { padding: 2px 0; line-height: 1.45; }
.ups-m-mu-detail b { color: var(--fg); font-weight: 800; }
.ups-m-mu-wx { opacity: 0.9; }
.ups-m-bench .ups-m-mu-detail { border-left: 0; padding-left: 12px; }
.ups-m-bench-head { margin: 14px 0 0; }
.ups-m-bench-toggle { width: 100%; min-height: 44px; text-align: left; background: var(--bg-elev); border: 1px solid var(--line); color: var(--fg);
  border-radius: 8px; padding: 10px 13px; font-size: 12.5px; font-weight: 700; cursor: pointer; font-family: inherit; -webkit-tap-highlight-color: transparent; }
.ups-m-bench { border: 1px solid var(--line); border-top: 0; border-radius: 0 0 8px 8px; overflow: hidden; }
.ups-m-bench-row { display: grid; grid-template-columns: 1fr 48px; gap: 10px; align-items: center; padding: 8px 12px 1px; border-top: 1px solid var(--line); }
.ups-m-bench-id .nm { font-size: 13px; font-weight: 700; color: var(--fg); }
.ups-m-bench-id .meta { font-size: 10px; color: var(--fg-muted); margin-left: 6px; }
.ups-m-bench-proj { text-align: right; font-size: 14px; font-weight: 800; color: var(--accent); font-variant-numeric: tabular-nums; }
.ups-m-bench .ups-m-slot-mu { border-left: 0; padding-left: 12px; }
.ups-m-bench-empty { padding: 12px; text-align: center; color: var(--fg-muted); font-size: 12px; }
/* Taxi / IR / expired — on the bench list but NOT startable. */
.ups-m-bench-tag { display: inline-block; margin-left: 6px; padding: 0 4px; border-radius: 3px; line-height: 14px;
  font-size: 9px; font-weight: 800; letter-spacing: 0.3px; vertical-align: middle; }
.ups-m-bench-tag.taxi { background: rgba(91, 141, 255, 0.16); color: var(--accent); }
.ups-m-bench-tag.ir   { background: rgba(255, 107, 107, 0.16); color: var(--danger); }
.ups-m-bench-tag.exp  { background: rgba(138, 151, 173, 0.16); color: var(--fg-muted); }
.ups-m-bench-tag.locked { background: rgba(138, 151, 173, 0.16); color: var(--fg-muted); }
/* BYE (Keith 2026-10-06): MFL rejects a lineup that starts a bye-week player. */
.ups-m-bench-tag.bye { background: rgba(255, 107, 107, 0.16); color: var(--danger); }
.ups-m-bye-badge { display: inline-block; font-size: 11px; font-weight: 800; letter-spacing: 0.02em; padding: 2px 8px; border-radius: 5px; color: #fff; background: var(--danger); }
.ups-m-slot.bye { border-color: var(--danger); }
.ups-m-bench-row.blocked .ups-m-bench-id .nm { color: var(--fg-muted); }
.ups-m-bench-row.blocked .ups-m-bench-proj { opacity: 0.45; }
.ups-m-hz { white-space: nowrap; color: var(--fg); }
.ups-m-slot-proj {
  text-align: right;
  font-size: 13px;
  font-weight: 800;
  color: var(--accent);
  font-variant-numeric: tabular-nums;
}
.ups-m-slot-proj.none { color: var(--fg-muted); font-weight: 600; }
.ups-m-lineup-chip.proj { color: var(--accent); border-color: rgba(91,141,255,0.4); }
.ups-m-slot-tag { display: flex; flex-direction: column; line-height: 1.15; }
.ups-m-slot-tag .pos {
  font-size: 14px;
  font-weight: 800;
  color: var(--fg);
}
.ups-m-slot-tag .pos.flex { color: var(--accent); font-size: 12px; }
.ups-m-slot-tag .elig {
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--fg-muted);
  margin-top: 1px;
}
.ups-m-slot-sel {
  width: 100%;
  background: var(--bg);
  color: var(--fg);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 11px 30px 11px 12px;
  font-size: 13px;
  font-family: inherit;
  min-height: 44px;
  -webkit-appearance: none;
  appearance: none;
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%238a97ad"><path d="M7 10l5 5 5-5z"/></svg>');
  background-repeat: no-repeat;
  background-position: right 8px center;
  /* A long choice ("Name · TEAM · W5 OUT · 8.1 pts · RB #21") is clipped inside the
     box; unclipped, WebKit let it widen the whole page (64 px of sideways scroll at
     320 px, 9 px at 375 — measured 2026-10-13, #1249). */
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ups-m-slot-sel.empty {
  color: var(--fg-muted);
  border-color: var(--line-soft);
  border-style: dashed;
}
.ups-m-slot[data-none] .ups-m-slot-sel { opacity: 0.6; }
.ups-m-slot-sel:disabled { opacity: 0.8; cursor: not-allowed; background-color: var(--bg-elev2); }
/* Locked = his NFL game has started; canon §B4 says he can't move now.
   Neutral color on purpose (unlike an injury tag) -- a lock is often GOOD
   news (he already went off for you), it's just no longer editable. */
.ups-m-slot-lock-row { padding: 0 12px 7px 11px; border-left: 3px solid var(--accent); }
.ups-m-lock-badge { display: inline-block; font-size: 11px; font-weight: 800; letter-spacing: 0.02em; padding: 2px 8px; border-radius: 5px; color: var(--fg); background: var(--line-soft); }

.ups-m-lineup-footer {
  position: sticky;
  bottom: calc(var(--nav-h) + var(--safe-bot));
  margin-top: 12px;
  padding: 10px 12px;
  background: var(--bg);
  border-top: 1px solid var(--line);
  z-index: 5;
}
.ups-m-lineup-submit {
  width: 100%;
  padding: 14px;
  background: var(--bg-elev2);
  color: var(--fg);
  border: 1px solid var(--line);
  border-radius: 10px;
  font-size: 14px;
  font-weight: 700;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  min-height: 48px;
}
.ups-m-lineup-submit.ready {
  background: var(--teal);
  color: #08251f;
  border-color: var(--teal);
}
.ups-m-lineup-submit.busy { opacity: 0.6; cursor: wait; }
.ups-m-lineup-submit:disabled { opacity: 0.5; cursor: not-allowed; }

.ups-m-lineup-msg {
  margin: 8px 12px;
  padding: 8px 12px;
  border-radius: 6px;
  font-size: 12px;
}
.ups-m-lineup-msg.ok { background: rgba(139,229,139,0.1); color: var(--ok); border: 1px solid rgba(139,229,139,0.3); }
.ups-m-lineup-msg.err { background: rgba(255,107,107,0.1); color: var(--danger); border: 1px solid rgba(255,107,107,0.3); }
.ups-m-lineup-msg.info { background: rgba(91,141,255,0.1); color: var(--accent); border: 1px solid rgba(91,141,255,0.3); }

/* ----- Players (FA browser) view ----- */
.ups-m-players-toolbar {
  position: sticky;
  top: calc(var(--hdr-h) + var(--safe-top));
  background: var(--bg-elev);
  border-bottom: 1px solid var(--line);
  padding: 8px 12px 4px;
  z-index: 10;
}
.ups-m-players-search {
  width: 100%;
  background: var(--bg);
  color: var(--fg);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 10px 12px;
  /* 16px, not 14px: iOS Safari zooms the whole viewport when you focus an input
     under 16px, and the page never zooms back out. That put the Stats and
     Players search boxes one tap away from a stuck, over-zoomed layout. */
  font-size: 16px;
  font-family: inherit;
  box-sizing: border-box;
  -webkit-appearance: none;
}
.ups-m-players-search:focus { outline: none; border-color: var(--accent); }
.ups-m-players-search::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none; }
.ups-m-players-search:focus { outline: none; border-color: var(--accent); }

/* Players filter — single Team/FA dropdown (replaces the old FA/All toggle
   + the redundant Market hub tiles). Keith 2026-06-10. */
.ups-m-players-filter {
  width: 100%;
  background: var(--bg) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238a97ad' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>") no-repeat right 12px center;
  color: var(--fg);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 10px 34px 10px 12px;
  font-size: 14px;
  font-weight: 600;
  font-family: inherit;
  box-sizing: border-box;
  -webkit-appearance: none;
  appearance: none;
  margin-bottom: 8px;
}
.ups-m-players-filter:focus { outline: none; border-color: var(--accent); }

/* Contract Ledger — read-only contract-activity audit log (Contracts section). */
.ups-m-ledger { margin-top: 4px; }
.ups-m-ledger-loading { padding: 18px; text-align: center; color: var(--fg-muted); font-size: 13px; }
.ups-m-ledger-note { font-size: 12px; color: var(--fg-muted); padding: 8px 2px 10px; }
.ups-m-ledger-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 2px;
  border-bottom: 1px solid var(--line);
}
.ups-m-ledger-kind {
  flex: 0 0 auto;
  min-width: 66px;
  text-align: center;
  font-size: 10px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  padding: 4px 7px;
  border-radius: 6px;
  background: rgba(91, 141, 255, 0.16);
  color: #9cc0ff;
}
.ups-m-ledger-kind.k-restructure { background: rgba(255, 184, 107, 0.16); color: var(--warn); }
.ups-m-ledger-kind.k-tag { background: rgba(45, 212, 191, 0.16); color: var(--teal); }
.ups-m-ledger-kind.k-mym { background: rgba(139, 229, 139, 0.16); color: var(--ok); }
.ups-m-ledger-kind.k-untag { background: rgba(255, 107, 107, 0.16); color: var(--danger); }
.ups-m-ledger-body { flex: 1 1 auto; min-width: 0; }
.ups-m-ledger-player { font-size: 14px; font-weight: 600; color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ups-m-ledger-player .pos { font-size: 11px; color: var(--fg-muted); font-weight: 500; margin-left: 2px; }
.ups-m-ledger-meta { font-size: 12px; color: var(--fg-muted); margin-top: 1px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ups-m-ledger-date { flex: 0 0 auto; font-size: 11px; color: var(--fg-muted); }
/* Cap Adjustments tab — year + team controls, category-split summary, rows. */
.ups-m-adj-controls { display: flex; gap: 10px; margin: 10px 2px 12px; }
.ups-m-adj-controls label {
  flex: 1 1 0; display: block; font-size: 10px; font-weight: 700; letter-spacing: 0.08em;
  text-transform: uppercase; color: var(--fg-muted);
}
.ups-m-adj-controls select {
  display: block; width: 100%; margin-top: 6px; background: var(--bg-elev); color: var(--fg);
  border: 1px solid var(--line); border-radius: 6px; padding: 10px 12px; font-size: 14px;
  font-family: inherit; -webkit-appearance: none; appearance: none;
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%238a97ad"><path d="M7 10l5 5 5-5z"/></svg>');
  background-repeat: no-repeat; background-position: right 8px center;
}
.ups-m-adj-summary { display: flex; flex-wrap: wrap; gap: 8px; padding: 0 2px 10px; }
.ups-m-adj-summary .chip {
  background: var(--bg-elev2); border: 1px solid var(--line); padding: 4px 9px;
  border-radius: 999px; font-size: 11px; color: var(--fg-muted);
}
.ups-m-adj-row { display: flex; align-items: center; gap: 10px; padding: 10px 2px; border-bottom: 1px solid var(--line); }
.ups-m-adj-cat {
  flex: 0 0 auto; min-width: 56px; text-align: center; font-size: 10px; font-weight: 800;
  text-transform: uppercase; letter-spacing: 0.03em; padding: 4px 7px; border-radius: 6px;
  background: rgba(91, 141, 255, 0.16); color: #9cc0ff;
}
.ups-m-adj-cat.cat-cap_penalty { background: rgba(255, 107, 107, 0.16); color: var(--danger); }
.ups-m-adj-cat.cat-other { background: rgba(138, 151, 173, 0.16); color: var(--fg-muted); }
.ups-m-adj-item { flex: 1 1 auto; min-width: 0; }
.ups-m-adj-label { font-size: 14px; font-weight: 600; color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ups-m-adj-meta { font-size: 12px; color: var(--fg-muted); margin-top: 1px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ups-m-adj-amt { flex: 0 0 auto; font-size: 14px; font-weight: 700; color: var(--ok); font-variant-numeric: tabular-nums; }
.ups-m-adj-amt.neg { color: var(--danger); }
.ups-m-pos-chips {
  display: flex;
  gap: 6px;
  margin-top: 8px;
  overflow-x: auto;
  padding-bottom: 4px;
}
.ups-m-pos-chip {
  flex: 0 0 auto;
  padding: 6px 12px;
  background: var(--bg);
  color: var(--fg-muted);
  border: 1px solid var(--line);
  border-radius: 999px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.04em;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-pos-chip.on {
  background: var(--accent);
  /* Dark text on the accent blue: 5.97:1 (white was 3.13:1, under the 4.5:1 minimum).
     Same as the selected Stats tab (.ups-m-stseg.on). */
  color: #0a1222;
  border-color: var(--accent);
}
.ups-m-sort-row {
  display: flex;
  gap: 6px;
  margin-top: 6px;
}
.ups-m-sort-btn {
  flex: 1;
  padding: 6px 10px;
  background: var(--bg);
  color: var(--fg-muted);
  border: 1px solid var(--line);
  border-radius: 6px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-sort-btn.on {
  background: var(--bg-elev2);
  color: var(--accent);
  border-color: var(--accent);
}

.ups-m-fa-list { display: flex; flex-direction: column; }
.ups-m-fa-row {
  display: grid;
  grid-template-columns: 28px 36px 1fr;
  gap: 10px;
  align-items: center;
  padding: 10px 12px;
  background: var(--bg-elev);
  border-top: 1px solid var(--line);
  min-height: 56px;
  cursor: pointer;
  -webkit-tap-highlight-color: rgba(91,141,255,0.08);
}
.ups-m-fa-row:active { background: var(--bg-elev2); }
.ups-m-fa-row .rank {
  font-size: 12px;
  font-weight: 700;
  color: var(--fg-muted);
  text-align: center;
  font-variant-numeric: tabular-nums;
}
.ups-m-fa-row .pos {
  font-size: 10px;
  font-weight: 700;
  text-align: center;
  padding: 4px 0;
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  border-radius: 4px;
  color: var(--fg-muted);
  letter-spacing: 0.04em;
}
.ups-m-fa-row .pos.qb { color: #ef9a9a; }
.ups-m-fa-row .pos.rb { color: #80deea; }
.ups-m-fa-row .pos.wr { color: #a5d6a7; }
.ups-m-fa-row .pos.te { color: #ffcc80; }
.ups-m-fa-row .pos.pk { color: #ce93d8; }
.ups-m-fa-row .pos.dl,
.ups-m-fa-row .pos.lb,
.ups-m-fa-row .pos.db { color: #b39ddb; }
.ups-m-fa-row .body { min-width: 0; }

/* Player Stats view (#league/stats) — per-position leaderboard.
   Layout (Keith 2026-10-09 review): the controls (search, Roster, Columns, the
   points basis) scroll away; the position chips + column headings are PINNED
   directly under the League tabs (--st-subtabs-h is measured by stats.js).
   They used to stick at the same 48px offset as the League tabs with the same
   z-index, so the 148px toolbar slid over and covered them, and the headings
   lived inside an overflow-x box, which can't stick.
   No horizontal scroll: every column set has at most four numbers and the grid
   is sized from the set's own columns (--cols, set inline by stats.js), so the
   PPG column is on screen at 320px. */
.ups-m-st-tools { padding: 6px 12px 10px; display: grid; gap: 8px; }
.ups-m-st-pin {
  position: sticky;
  top: calc(var(--hdr-h) + var(--safe-top) + var(--st-subtabs-h, 41px));
  z-index: 9;
  background: var(--bg-elev);
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
}
.ups-m-st-pin .ups-m-pos-chips { margin-top: 0; padding: 7px 12px 6px; gap: 5px; scrollbar-width: none; }
.ups-m-st-pin .ups-m-pos-chips::-webkit-scrollbar { display: none; }
.ups-m-st-pin .ups-m-pos-chip { padding: 5px 10px; font-size: 12px; letter-spacing: 0.02em; }
.ups-m-st-table { display: flex; flex-direction: column; }
.ups-m-st-row {
  display: grid;
  grid-template-columns: var(--cols, 26px minmax(0, 1fr) repeat(4, 40px));
  gap: 4px; align-items: center;
  padding: 6px 8px; border-top: 1px solid var(--line); background: var(--bg-elev);
  cursor: pointer; min-height: 48px; -webkit-tap-highlight-color: rgba(91,141,255,0.08);
}
.ups-m-st-row:first-child { border-top: 0; }
.ups-m-st-row:active { background: var(--bg-elev2); }
.ups-m-st-row.mine { background: linear-gradient(90deg, rgba(91,141,255,0.12), var(--bg-elev) 70%); }
/* Headings, two tiers: a band naming the source + period over each run of
   columns that share it, then the short labels. */
.ups-m-st-row.head {
  background: transparent; border-top: 0; min-height: 0; padding: 0 8px 2px; cursor: default;
  color: var(--fg-muted); font-size: 11px; line-height: 1.25; row-gap: 3px;
}
.ups-m-st-row.head .band-pad { grid-column: 1 / 3; }
.ups-m-st-row.head .band {
  text-align: center; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  border-bottom: 1px solid var(--line); padding-bottom: 2px;
}
.ups-m-st-row.head .v { font-weight: 700; color: var(--fg); font-size: 11px; }
/* Sortable headings: the whole cell is the button; a second line carries the
   direction (▼ high→low, ▲ low→high) or a faint ⇅ on unsorted columns. */
.ups-m-st-sort {
  display: block; width: 100%; min-height: 32px; padding: 2px 0; margin: 0; border: 0; background: transparent;
  font: inherit; font-weight: 700; color: var(--fg); text-align: right; line-height: 1.2; cursor: pointer;
  -webkit-tap-highlight-color: rgba(91,141,255,0.15); white-space: nowrap;
}
.ups-m-st-row.head .rk .ups-m-st-sort { text-align: center; color: var(--fg-muted); }
.ups-m-st-sort i { display: block; font-style: normal; font-size: 10px; color: var(--fg-muted); opacity: 0.55; }
.ups-m-st-sort.on, .ups-m-st-row.head .rk .ups-m-st-sort.on { color: var(--accent); }
.ups-m-st-sort.on i { color: var(--accent); opacity: 1; }
.ups-m-st-sort:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: 4px; }
/* A rate over its numerator/denominator in one cell: "41%" over "9/22". */
.ups-m-st-row .v .nd { display: inline-flex; flex-direction: column; align-items: flex-end; line-height: 1.15; }
.ups-m-st-row .v .nd b { font-weight: 400; font-size: 13px; }
.ups-m-st-row .v .nd small { font-size: 11px; font-weight: 600; color: var(--fg-muted); }
/* A reliability warning in words under the row's numbers ("Small sample · 28 targets"). */
.ups-m-st-row .flag { grid-column: 2 / -1; justify-self: end; margin-top: -2px; font-size: 11px; font-weight: 600; color: var(--warn); white-space: nowrap; }
/* A one-column coverage band on two lines ("Wk 1–5" over "in progress"); bands sit on one baseline. */
.ups-m-st-row.head .band { align-self: end; }
.ups-m-st-row.head .band.two { white-space: nowrap; line-height: 1.2; }
/* DL/DB: the position leads the team line instead of a chip beside the name. */
.ups-m-st-row .nm .tm span.pos { background: none; border: 0; padding: 0; font-size: 11px; font-weight: 700; color: #b39ddb; }
/* "About these numbers": the longer definitions, collapsed. */
.ups-m-st-more { margin-top: 3px; }
.ups-m-st-more summary { cursor: pointer; color: var(--accent); font-weight: 600; font-size: 12px; list-style: none; min-height: 32px; display: flex; align-items: center; }
.ups-m-st-more summary::-webkit-details-marker { display: none; }
.ups-m-st-more summary::before { content: "▸ "; }
.ups-m-st-more[open] summary::before { content: "▾ "; }
.ups-m-st-more > div { margin-top: 4px; }
.ups-m-st-row.head .nm { font-weight: 700; color: var(--fg-muted); }
.ups-m-st-row .rk { text-align: center; font-variant-numeric: tabular-nums; color: var(--fg-muted); font-weight: 700; font-size: 12px; letter-spacing: -0.02em; }
.ups-m-st-row .nm { display: flex; align-items: center; gap: 6px; min-width: 0; }
/* `span.pos`, not `.pos`: the punter group class `pn` collides with the
   player-name span `.pn` at equal specificity. Shown on DL/DB only. */
.ups-m-st-row .nm span.pos {
  font-size: 11px; font-weight: 700; letter-spacing: 0.02em; padding: 1px 4px; border-radius: 4px;
  background: var(--bg-elev2); border: 1px solid var(--line); color: #b39ddb; flex: 0 0 auto;
  white-space: nowrap;
}
.ups-m-st-row .nm .t { display: flex; flex-direction: column; min-width: 0; }
.ups-m-st-row .nm .pn { font-size: 14px; font-weight: 600; color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* One line, ellipsised: the owner is secondary and not worth a second line. */
.ups-m-st-row .nm .tm { font-size: 11px; color: var(--fg-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Status chips lead the team line (2026-10-10): small, never truncated by a long name, never over the numbers. */
.ups-m-st-row .nm .tm .ups-m-inj-chip.sm { margin: 0 4px 0 0; padding: 0 3px; font-size: 11px; line-height: 13px; border-radius: 4px; letter-spacing: .02em; vertical-align: 1px; }
.ups-m-st-row .nm .tm .ups-m-inj-chip.sm + .ups-m-inj-chip.sm { margin-left: 0; }
.ups-m-st-injline { margin-top: 2px; font-size: 11px; color: var(--fg-muted); }
.ups-m-st-row .nm .tm .own.fa { color: var(--accent); font-weight: 700; }
.ups-m-st-row .nm .tm .own.me { color: var(--fg); font-weight: 600; }
.ups-m-st-row .nm .tm .own.unk { color: var(--warn); font-weight: 600; }
.ups-m-st-row .v { text-align: right; font-variant-numeric: tabular-nums; font-size: 13px; color: var(--fg); white-space: nowrap; }
.ups-m-st-row .v.ppg { font-weight: 700; font-size: 14px; }
.ups-m-st-row .v.dim { color: var(--fg-muted); font-size: 12px; }
/* A total that includes a week still being played. */
.ups-m-st-live { display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--warn); margin: 0 3px 1px 0; vertical-align: middle; }
.ups-m-st-row.head .ups-m-st-live { margin: 0 0 1px 4px; }
/* Roster + Columns dropdowns, each with a visible label. */
/* (.ups-m-st-filters is also the filter row of the other Stats boards — keep
   its original flex rule; only the Players tools get the labelled grid.) */
.ups-m-st-filters { display: flex; gap: 8px; padding: 0 12px 8px; align-items: center; }
.ups-m-st-filters .ups-m-players-filter { flex: 1 1 0; min-width: 0; }
.ups-m-st-tools .ups-m-st-filters { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 0; align-items: end; }
.ups-m-st-sel { display: flex; flex-direction: column; gap: 3px; min-width: 0; font-size: 11px; font-weight: 600; color: var(--fg-muted); }
.ups-m-st-sel .ups-m-players-filter { margin-bottom: 0; padding: 8px 30px 8px 10px; font-size: 14px; min-width: 0; }
/* What the numbers ARE (period, live week, read time) + the set's source. */
.ups-m-st-basis { font-size: 12px; line-height: 1.45; color: var(--fg-muted); }
.ups-m-st-basis b { color: var(--fg); font-weight: 600; }
.ups-m-st-basis.warn { color: var(--warn); }
.ups-m-st-setnote { font-size: 12px; line-height: 1.45; color: var(--fg-muted); margin-top: 4px; }
.ups-m-st-setnote:empty { display: none; }

/* Empty search result → hand off to the league-wide search rather than
   reporting a real player as missing data. */
.ups-m-st-noq { color: var(--fg); font-weight: 600; }
.ups-m-st-nosub { margin-top: 6px; font-size: 13px; color: var(--fg-muted); }
.ups-m-st-searchall {
  margin-top: 16px;
  padding: 10px 18px;
  border: 1px solid var(--accent);
  border-radius: 9px;
  background: transparent;
  color: var(--accent);
  font-size: 14px;
  font-weight: 700;
  font-family: inherit;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-st-searchall:active { background: var(--bg-elev2); }

/* Stats inner switch (Player Stats / Fantasy Points Against) + FPA table */
.ups-m-stseg-bar { display: flex; gap: 6px; padding: 0 12px 10px; }
.ups-m-stseg { flex: 1 1 0; background: var(--bg-elev); border: 1px solid var(--line); color: var(--fg-muted); border-radius: 8px; padding: 8px 6px; font-size: 12px; font-weight: 700; cursor: pointer; font-family: inherit; -webkit-tap-highlight-color: transparent; white-space: nowrap; }
.ups-m-stseg-bar.four { gap: 4px; }
.ups-m-stseg-bar.four .ups-m-stseg { font-size: 11px; padding: 8px 2px; letter-spacing: -0.01em; }
.ups-m-stseg-bar.five { gap: 3px; }
.ups-m-stseg-bar.five .ups-m-stseg { font-size: 10px; padding: 8px 1px; letter-spacing: -0.02em; }
/* Stats → the six boards (shared navigation). 13px labels in a row that
   scrolls sideways when it doesn't fit — they were squeezed to 9px with
   negative tracking to fit a 375px screen. */
.ups-m-stseg-bar.six { gap: 6px; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; padding-bottom: 10px; }
.ups-m-stseg-bar.six::-webkit-scrollbar { display: none; }
.ups-m-stseg-bar.six .ups-m-stseg { flex: 0 0 auto; font-size: 13px; padding: 8px 14px; letter-spacing: 0; }
/* Every Stats board's sticky toolbar pins BELOW the League tabs, never over
   them (same offset + z-index used to stack the two). */
.ups-m-stseg-bar ~ .ups-m-players-toolbar { top: calc(var(--hdr-h) + var(--safe-top) + var(--st-subtabs-h, 41px)); z-index: 9; }
.ups-m-stseg.on { background: var(--accent); border-color: var(--accent); color: #0a1222; }
/* Stats → Sched (#1270): who each NFL team plays. Controls scroll away; the chips and the
   week headings pin (Pts Agst's layout). The week strip swipes sideways under the pinned
   headings (bindSched keeps them aligned); the team and Avg columns stay in place. */
.ups-m-st-tools .ups-m-sched-filters { grid-template-columns: 1fr 1fr; }
.ups-m-sched-show { display: grid; grid-template-columns: 1fr 1fr; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; }
.ups-m-sched-show button {
  min-height: 36px; margin: 0; border: 0; background: var(--bg-elev); color: var(--fg-muted);
  font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; -webkit-tap-highlight-color: rgba(91,141,255,0.15);
}
.ups-m-sched-show button + button { border-left: 1px solid var(--line); }
.ups-m-sched-show button.on { background: var(--accent); color: #0a1222; }
.ups-m-sched-show button:focus-visible { outline: 2px solid var(--fg); outline-offset: -3px; }
.ups-m-sched-hscroll { overflow: hidden; }
.ups-m-sched-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; overscroll-behavior-x: contain; scrollbar-width: none; }
.ups-m-sched-scroll::-webkit-scrollbar { display: none; }
.ups-m-sched-row {
  --sc-tm: 66px; --sc-ag: 50px; --sc-c: 50px;
  display: grid; grid-template-columns: var(--sc-tm) var(--sc-ag) repeat(var(--n, 1), var(--sc-c));
  width: max-content; min-width: 100%; min-height: 48px; align-items: stretch;
  border-top: 1px solid var(--line); background: var(--bg-elev);
  cursor: pointer; -webkit-tap-highlight-color: rgba(91,141,255,0.08);
}
.ups-m-sched-row:first-child { border-top: 0; }
.ups-m-sched-row:not(.head):active, .ups-m-sched-row:not(.head):active > .tm, .ups-m-sched-row:not(.head):active > .ag { background: var(--bg-elev2); }
.ups-m-sched-row:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.ups-m-sched-row > .tm, .ups-m-sched-row > .ag { position: sticky; z-index: 1; background: var(--bg-elev); }
.ups-m-sched-row > .tm { left: 0; display: flex; flex-direction: column; justify-content: center; min-width: 0; padding: 4px 2px 4px 8px; }
.ups-m-sched-row > .tm b { font-size: 14px; font-weight: 700; color: var(--fg); }
.ups-m-sched-row > .tm small { font-size: 11px; color: var(--fg-muted); white-space: nowrap; }
.ups-m-sched-row > .ag {
  left: var(--sc-tm); display: flex; align-items: center; justify-content: flex-end; padding: 0 8px 0 0;
  border-right: 1px solid var(--line); font-size: 14px; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--fg);
}
.ups-m-sched-row .c {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px; padding: 4px 1px;
  border-left: 1px solid rgba(58,69,92,0.45); text-align: center; white-space: nowrap;
  font-size: 12px; font-variant-numeric: tabular-nums; color: var(--fg);
}
.ups-m-sched-row > .ag + .c { border-left: 0; }
.ups-m-sched-row .c b { font-size: 12px; font-weight: 700; }
.ups-m-sched-row .c .ups-m-tr { font-size: 12px; font-weight: 600; }
.ups-m-sched-row .c.off, .ups-m-sched-row .c.off b { color: var(--fg-muted); font-weight: 500; }
.ups-m-sched-row .c.bye { color: var(--fg-muted); font-size: 11px; font-weight: 700; letter-spacing: 0.06em; }
/* Pinned headings: the same columns as the rows. */
.ups-m-sched-row.head { min-height: 0; border-top: 0; cursor: default; background: var(--bg-elev); }
.ups-m-sched-row.head > .tm { padding: 0 2px 0 8px; }
.ups-m-sched-row.head > .tm .ups-m-st-sort { text-align: left; }
.ups-m-sched-row.head > .ag { padding: 0 8px 0 0; font-size: 11px; }
.ups-m-sched-row.head .ups-m-st-sort { font-size: 11px; }
.ups-m-sched-row.head .wk {
  display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 2px 0 4px;
  font-size: 11px; font-weight: 700; color: var(--fg-muted); white-space: nowrap;
}
.ups-m-sched-row.head .wk small { font-size: 11px; font-weight: 600; }
.ups-m-sched-row.head .wk.now { color: var(--accent); }
.ups-m-sched-row.head .wk.po { color: var(--fg); }
.ups-m-fpa-table { display: flex; flex-direction: column; }
/* Stats → Pts Agst (review 2026-10-12). The list uses the Players board's rows,
   headings and pin (.ups-m-st-*); these rules only add what Pts Agst needs. */
.ups-m-st-tools .ups-m-fpa-filters { grid-template-columns: 1fr 1fr; }
.ups-m-fpa-chips { display: grid; grid-template-columns: repeat(9, minmax(0, 1fr)); gap: 3px; overflow: visible; }
.ups-m-st-pin .ups-m-fpa-chips .ups-m-pos-chip { padding: 7px 0; min-height: 32px; text-align: center; font-size: 12px; }
.ups-m-fpa-list, .ups-m-fpa-head { --cols: 24px minmax(0, 1fr) 46px 42px 54px; }
@media (max-width: 340px) { .ups-m-fpa-list, .ups-m-fpa-head { --cols: 24px minmax(0, 1fr) 44px 40px 48px; } }
.ups-m-fpa-list .ups-m-st-row .nm .tm { font-size: 11px; }
.ups-m-fpa-list .v.vs { font-weight: 700; font-size: 14px; }
.ups-m-fpa-r:focus-visible, .ups-m-fpa-wk2[role="button"]:focus-visible, .ups-m-fpa-pl[role="button"]:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.ups-m-fpa-root.drill { padding-bottom: 12px; }
.ups-m-fpa-backbtn {
  display: inline-flex; align-items: center; gap: 6px; min-height: 44px; padding: 0 12px; margin: 2px 0 0;
  background: transparent; border: 0; color: var(--accent); font-size: 15px; font-weight: 600; cursor: pointer;
}
.ups-m-fpa-backbtn span { font-size: 22px; line-height: 1; margin-top: -2px; }
.ups-m-fpa-backbtn:focus-visible, .ups-m-fpa-title:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 4px; }
.ups-m-fpa-title { margin: 0; padding: 0 12px 2px; font-size: 17px; font-weight: 700; color: var(--fg); outline: none; }
.ups-m-fpa-sum { padding: 0 12px 10px; font-size: 12px; color: var(--fg-muted); font-variant-numeric: tabular-nums; }
.ups-m-fpa-wk2, .ups-m-fpa-pl {
  display: grid; gap: 4px; align-items: center; min-height: 48px; padding: 6px 12px;
  border-top: 1px solid var(--line); background: var(--bg-elev);
}
/* Week rows (Pts Agst breakdown, Sched team schedule): room for "Wk 17" on one line
   (34px wrapped Wk 10–17, #1281); the number columns give a little back under 340px. */
.ups-m-fpa-wk2 { grid-template-columns: 44px minmax(0, 1fr) 48px 56px 12px; }
@media (max-width: 340px) { .ups-m-fpa-wk2 { grid-template-columns: 40px minmax(0, 1fr) 44px 52px 10px; } }
.ups-m-fpa-pl { grid-template-columns: minmax(0, 1fr) 44px 44px 56px; }
.ups-m-fpa-wk2[role="button"], .ups-m-fpa-pl[role="button"] { cursor: pointer; -webkit-tap-highlight-color: rgba(91,141,255,0.08); }
.ups-m-fpa-wk2[role="button"]:active, .ups-m-fpa-pl[role="button"]:active { background: var(--bg-elev2); }
.ups-m-fpa-wk2.head, .ups-m-fpa-pl.head { min-height: 0; padding: 0 12px 4px; background: transparent; border-top: 0; font-size: 11px; font-weight: 700; color: var(--fg-muted); }
.ups-m-fpa-wk2.off { color: var(--fg-muted); background: transparent; }
.ups-m-fpa-wk2 .wk { font-size: 12px; font-weight: 700; color: var(--fg-muted); font-variant-numeric: tabular-nums; }
.ups-m-fpa-wk2 .op, .ups-m-fpa-pl .nm { display: flex; flex-direction: column; min-width: 0; font-size: 14px; font-weight: 600; color: var(--fg); }
.ups-m-fpa-wk2.off .op { color: var(--fg-muted); font-weight: 500; }
.ups-m-fpa-pl .nm b { font-weight: 600; overflow-wrap: anywhere; }
.ups-m-fpa-wk2 .op small, .ups-m-fpa-pl .nm small { font-size: 11px; font-weight: 500; color: var(--fg-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ups-m-fpa-wk2 .v, .ups-m-fpa-pl .v { text-align: right; font-variant-numeric: tabular-nums; font-size: 14px; color: var(--fg); white-space: nowrap; }
.ups-m-fpa-wk2.head .v, .ups-m-fpa-pl.head .v { font-size: 11px; color: var(--fg-muted); }
.ups-m-fpa-pl .v.dim { color: var(--fg-muted); font-size: 13px; }
.ups-m-fpa-wk2 .ch { text-align: right; color: var(--accent); font-weight: 700; font-size: 15px; }
.ups-m-fpa-err .ups-m-st-searchall { margin-top: 10px; }
.ups-m-tr { font-weight: 700; font-variant-numeric: tabular-nums; }
.ups-m-tr.up { color: var(--ok); }
.ups-m-tr.dn { color: var(--danger); }
.ups-m-adp-row { display: grid; grid-template-columns: 30px 1fr 56px 54px; gap: 6px; align-items: center; padding: 8px 12px; border-top: 1px solid var(--line); background: var(--bg-elev); }
.ups-m-adp-row.head { background: transparent; border-top: 0; padding: 2px 12px 4px; color: var(--fg-muted); font-size: 10px; text-transform: uppercase; letter-spacing: 0.04em; }
.ups-m-adp-row .rk { text-align: center; color: var(--fg-muted); font-weight: 700; font-size: 12px; }
.ups-m-adp-row .pl { display: flex; flex-direction: column; min-width: 0; }
.ups-m-adp-row .pl .nm { font-size: 13px; font-weight: 600; color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ups-m-adp-row .pl .sub { font-size: 10px; color: var(--fg-muted); }
.ups-m-adp-row .v { text-align: right; font-variant-numeric: tabular-nums; font-size: 12.5px; color: var(--fg); }
.ups-m-adp-row .v:nth-child(3) { font-weight: 700; }
.ups-m-adp-ctl { display: flex; align-items: center; gap: 8px; padding: 8px 12px 2px; }
.ups-m-adp-ctl .ups-m-adp-skew { font-size: 10px; color: var(--fg-muted); text-transform: uppercase; letter-spacing: 0.03em; white-space: nowrap; }
.ups-m-adp-slider { flex: 1; accent-color: var(--accent); }
.ups-m-adp-srcs { display: flex; gap: 12px; padding: 6px 12px 2px; flex-wrap: wrap; }
.ups-m-adp-srctog { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: var(--fg); }
.ups-m-adp-srctog input { accent-color: var(--accent); }
.ups-m-tierp { display: inline-block; min-width: 20px; padding: 1px 5px; border-radius: 4px; font-weight: 800; font-size: 11px; }
.ups-m-tierp.t1 { background: var(--accent); color: #0a1222; }
.ups-m-tierp.t2 { background: rgba(91,141,255,0.55); color: #0a1222; }
.ups-m-tierp.t3 { background: rgba(91,141,255,0.28); color: var(--fg); }
.ups-m-tierp.tn { background: var(--bg-elev2); color: var(--fg-muted); }
.ups-m-fa-row .name {
  font-size: 14px;
  font-weight: 600;
  color: var(--fg);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ups-m-fa-row .sub {
  font-size: 11px;
  color: var(--fg-muted);
  margin-top: 2px;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
/* Second sub-line on an FA row: proj · opponent · opponent's rank vs this
   position. Rendered only when there's real data (views/players.js
   faIntelHtml), so this never reserves empty space. The chip ("QBs +29% vs DEN")
   reuses .ups-m-mu-chip from the Lineup view. */
.ups-m-fa-row .ups-m-fa-mu {
  font-size: 11px;
  color: var(--fg-muted);
  margin-top: 3px;
  line-height: 1.35;
}
.ups-m-fa-add {
  background: var(--teal);
  color: #08251f;
  border: 0;
  border-radius: 6px;
  padding: 8px 14px;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  min-width: 56px;
  min-height: 36px;
}
.ups-m-fa-add:active { filter: brightness(0.92); }
.ups-m-fa-more {
  padding: 12px 16px;
  text-align: center;
  font-size: 11px;
  color: var(--fg-muted);
  font-style: italic;
}

/* ----- Drop / Extend / Restructure sheets (centered modals) ----- */
.ups-m-drop-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.6);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  z-index: 110;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-drop-sheet {
  position: relative;
  width: 100%;
  max-width: 520px;
  max-height: calc(100vh - 32px);
  background: var(--bg-elev);
  color: var(--fg);
  border-radius: 16px;
  border: 1px solid var(--line);
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.55);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  animation: ups-m-sheet-in 200ms ease-out;
}
.ups-m-drop-head {
  padding: 14px 16px 12px;
  border-bottom: 1px solid var(--line);
}
.ups-m-drop-head .grip {
  display: none;
}
.ups-m-drop-head .title {
  font-size: 16px;
  font-weight: 700;
}
.ups-m-drop-head .sub {
  font-size: 12px;
  color: var(--fg-muted);
  margin-top: 2px;
}
.ups-m-drop-close {
  position: absolute;
  top: 6px;
  right: 6px;
  width: 44px;
  height: 44px;
  background: transparent;
  border: 0;
  color: var(--fg-muted);
  font-size: 24px;
  line-height: 1;
  cursor: pointer;
}
.ups-m-drop-body {
  flex: 1 1 auto;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
.ups-m-drop-row {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 10px;
  align-items: center;
  width: 100%;
  padding: 12px 16px;
  background: var(--bg-elev);
  color: var(--fg);
  border: 0;
  border-bottom: 1px solid var(--line);
  text-align: left;
  cursor: pointer;
  font-family: inherit;
  -webkit-tap-highlight-color: rgba(255,107,107,0.08);
}
.ups-m-drop-row:active { background: var(--bg-elev2); }
.ups-m-drop-row .name {
  font-size: 14px;
  font-weight: 600;
  color: var(--fg);
}
.ups-m-drop-row .sub {
  font-size: 11px;
  color: var(--fg-muted);
  margin-top: 2px;
}
.ups-m-drop-row .right { text-align: right; }
.ups-m-drop-row .penalty {
  font-size: 12px;
  font-weight: 700;
  color: var(--danger);
}
.ups-m-drop-row .penalty.ok { color: var(--ok); }
.ups-m-drop-row .after {
  font-size: 11px;
  color: var(--fg-muted);
  margin-top: 2px;
  font-variant-numeric: tabular-nums;
}

/* ----- League view ----- */
.ups-m-league-pick {
  margin: 12px;
  padding: 12px 14px;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 10px;
}
.ups-m-league-pick label {
  display: block;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--fg-muted);
  margin-bottom: 6px;
}
.ups-m-league-pick select {
  width: 100%;
  background: var(--bg);
  color: var(--fg);
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: 10px 12px;
  font-size: 14px;
  font-family: inherit;
  -webkit-appearance: none;
  appearance: none;
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%238a97ad"><path d="M7 10l5 5 5-5z"/></svg>');
  background-repeat: no-repeat;
  background-position: right 8px center;
  background-size: 20px;
  padding-right: 32px;
}

.ups-m-standings-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 12px;
  font-variant-numeric: tabular-nums;
}
.ups-m-standings-table th,
.ups-m-standings-table td {
  padding: 6px 8px;
  text-align: right;
  border-bottom: 1px solid var(--line);
}
.ups-m-standings-table th { font-weight: 700; color: var(--fg-muted); font-size: 10px; letter-spacing: 0.06em; text-transform: uppercase; }
.ups-m-standings-table th.team,
.ups-m-standings-table td.team { text-align: left; }
.ups-m-standings-table td.rank { text-align: center; font-weight: 700; color: var(--fg-muted); }
.ups-m-standings-table tr.div-winner td { background: rgba(206, 147, 216, 0.08); }
.ups-m-standings-table tr.div-winner .div-crown { font-size: 12px; }
/* Champion row — gold tint layered ON TOP of any div-winner styling.
   Cell order matters: champion is set first in className so the rule
   below wins via specificity + later-in-stylesheet ordering. */
.ups-m-standings-table tr.champion td { background: rgba(255, 215, 0, 0.10); }
.ups-m-standings-table tr.champion td.team { font-weight: 700; }
.ups-m-standings-table .title-num {
  display: inline-block;
  margin-left: 2px;
  padding: 1px 6px;
  font-size: 10px;
  font-weight: 700;
  color: #ffe7a1;
  background: rgba(255, 215, 0, 0.18);
  border: 1px solid rgba(255, 215, 0, 0.35);
  border-radius: 4px;
  vertical-align: 1px;
  letter-spacing: 0.02em;
}
.ups-m-standings-legend {
  margin-top: 6px;
  font-size: 10px;
  color: var(--fg-muted);
  text-align: center;
}

/* On-the-Block list */
.ups-m-otb-lookingfor {
  margin: 4px 0 10px;
  padding: 8px 10px;
  background: rgba(45,212,191,0.08);
  border-left: 3px solid var(--teal);
  border-radius: 0 6px 6px 0;
  font-size: 12px;
  color: var(--fg);
}
.ups-m-otb-lookingfor .lbl {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--fg-muted);
  margin-right: 6px;
}
.ups-m-otb-row {
  display: flex;
  width: 100%;
  align-items: center;
  padding: 10px 12px;
  background: var(--bg-elev2);
  color: var(--fg);
  border: 1px solid var(--line);
  border-radius: 8px;
  margin-top: 8px;
  text-align: left;
  cursor: pointer;
  font-family: inherit;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-otb-row:active { background: var(--line); }
.ups-m-otb-row .body { flex: 1; min-width: 0; }
.ups-m-otb-row .name { font-size: 14px; font-weight: 600; }
.ups-m-otb-row .sub { font-size: 11px; color: var(--fg-muted); margin-top: 2px; display: flex; gap: 8px; }

/* ----- Rulebook view (views/rules.js, data from data/rules_data.js) -----
   Reference doc read one-handed, usually mid-argument: search is pinned to the
   top, everything else starts collapsed, and tap targets stay >= 44px. */

.ups-m-rb-head { padding: 12px 14px 0; }
.ups-m-rb-stamp {
  font-size: 11px;
  color: var(--fg-muted);
  letter-spacing: .01em;
}
.ups-m-rb-tabs { display: flex; gap: 6px; margin: 10px 0 0; }
.ups-m-rb-tab {
  flex: 1;
  min-height: 36px;
  border: 1px solid var(--line);
  background: var(--bg-elev);
  color: var(--fg-muted);
  border-radius: 8px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}
.ups-m-rb-tab.is-on {
  background: var(--accent);
  border-color: var(--accent);
  color: #0e1320;
}

/* Search stays reachable while the member scrolls a long section. */
.ups-m-rb-searchbar {
  position: sticky;
  top: 0;
  z-index: 5;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  background: var(--bg);
  border-bottom: 1px solid var(--line);
}
.ups-m-rb-input {
  flex: 1;
  min-height: 42px;
  padding: 0 12px;
  border-radius: 10px;
  border: 1px solid var(--line-soft);
  background: var(--bg-elev2);
  color: var(--fg);
  font-size: 16px;          /* < 16px makes iOS Safari zoom on focus */
  -webkit-appearance: none;
}
.ups-m-rb-input::placeholder { color: var(--fg-muted); }
.ups-m-rb-clear {
  min-width: 34px; min-height: 34px;
  border: none; border-radius: 8px;
  background: var(--bg-elev2);
  color: var(--fg-muted);
  font-size: 14px; cursor: pointer;
}

.ups-m-rb-chips {
  display: flex;
  gap: 6px;
  overflow-x: auto;
  padding: 10px 14px;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.ups-m-rb-chips::-webkit-scrollbar { display: none; }
.ups-m-rb-chip {
  flex: 0 0 auto;
  min-height: 30px;
  padding: 0 12px;
  border-radius: 999px;
  border: 1px solid var(--line);
  background: var(--bg-elev);
  color: var(--fg-muted);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
}
.ups-m-rb-chip.is-on {
  background: var(--teal); border-color: var(--teal); color: #0e1320;
}

/* --- Topic index: what an owner is actually looking up --- */
.ups-m-rb-topics { display: flex; flex-direction: column; }
/* Rows carry the title only — the one-liner still shows on the topic page and
   in search results, so repeating it here just cost a screen and a half of
   scrolling. 46px keeps the row above the 44px touch-target minimum. */
.ups-m-rb-topic {
  display: grid;
  grid-template-columns: 1fr auto;
  grid-template-areas: "title caret" "blurb caret";
  align-items: center;
  gap: 2px 10px;
  width: 100%;
  min-height: 46px;
  padding: 10px 14px;
  border: none;
  border-bottom: 1px solid var(--line);
  background: none;
  color: var(--fg);
  text-align: left;
  cursor: pointer;
}
.ups-m-rb-topic:active { background: var(--bg-elev); }
.ups-m-rb-topic-t { grid-area: title; font-size: 16px; font-weight: 650; }
.ups-m-rb-topic-b { grid-area: blurb; font-size: 12.5px; color: var(--fg-muted); line-height: 1.4; }
.ups-m-rb-topic .ups-m-rb-caret { grid-area: caret; }

.ups-m-rb-back {
  border: none; background: none; padding: 12px 14px 4px;
  color: var(--accent); font-size: 13px; cursor: pointer;
}
.ups-m-rb-topic-head { padding: 4px 14px 12px; }
.ups-m-rb-topic-head h2 {
  margin: 0; font-size: 24px; font-weight: 700; line-height: 1.15;
  text-wrap: balance;
}
.ups-m-rb-lede {
  margin: 8px 0 0; font-size: 15px; line-height: 1.45; color: var(--fg);
}

/* The at-a-glance answer: the numbers people came for. */
.ups-m-rb-facts {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 1px;
  background: var(--line);
  border-block: 1px solid var(--line);
  margin-bottom: 14px;
}
.ups-m-rb-fact { background: var(--bg); padding: 10px 14px; }
/* Odd tile counts otherwise leave a dead cell on a 2-column phone grid. */
.ups-m-rb-facts > .ups-m-rb-fact:last-child:nth-child(odd) { grid-column: 1 / -1; }
.ups-m-rb-fact-v {
  font-size: 17px; font-weight: 700; color: var(--accent);
  font-variant-numeric: tabular-nums; line-height: 1.2;
}
.ups-m-rb-fact-l {
  font-size: 11px; color: var(--fg-muted); margin-top: 2px;
  text-transform: uppercase; letter-spacing: .04em;
}

.ups-m-rb-today { padding: 0 14px; }
.ups-m-rb-today p {
  margin: 0 0 12px; font-size: 15px; line-height: 1.55;
}
.ups-m-rb-sub-h {
  font-size: 11px; font-weight: 700; text-transform: uppercase;
  letter-spacing: .07em; color: var(--fg-muted);
  padding: 16px 14px 8px;
}
.ups-m-rb-cap {
  font-size: 11px; color: var(--fg-muted); padding: 0 14px 12px;
}

/* Worked examples — cap math a person can follow line by line. */
.ups-m-rb-ex {
  margin: 0 14px 10px; padding: 12px 14px;
  background: var(--bg-elev); border-radius: 10px;
  border-left: 3px solid var(--teal);
}
.ups-m-rb-ex-t { font-size: 13.5px; font-weight: 650; margin-bottom: 8px; }
.ups-m-rb-ex-l {
  margin: 0; padding-left: 18px;
  font-size: 13px; line-height: 1.65; color: var(--fg-muted);
  font-variant-numeric: tabular-nums;
}
.ups-m-rb-ex-l li:last-child { color: var(--fg); font-weight: 600; }

.ups-m-rb-time { padding: 0 14px; }
.ups-m-rb-tl {
  display: grid; grid-template-columns: 92px 1fr; gap: 10px;
  padding: 10px 0; border-bottom: 1px solid var(--line);
}
.ups-m-rb-tl-when {
  font-size: 11.5px; font-weight: 650; color: var(--accent); line-height: 1.35;
}
.ups-m-rb-approx {
  display: inline-block; font-size: 9px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .05em;
  color: var(--warn); background: rgba(255,184,107,.14);
  padding: 1px 4px; border-radius: 3px;
}
.ups-m-rb-tl-what { font-size: 14px; font-weight: 600; }
.ups-m-rb-tl-d { font-size: 12.5px; color: var(--fg-muted); line-height: 1.5; margin-top: 3px; }

.ups-m-rb-gotchas {
  margin: 0; padding: 0 14px 0 32px;
  font-size: 13.5px; line-height: 1.55;
}
.ups-m-rb-gotchas li { margin-bottom: 9px; }

.ups-m-rb-open {
  margin: 16px 14px 0; padding: 12px 14px;
  border: 1px dashed var(--line-soft); border-radius: 10px;
}
.ups-m-rb-open-h {
  font-size: 11px; font-weight: 700; text-transform: uppercase;
  letter-spacing: .06em; color: var(--warn); margin-bottom: 6px;
}
.ups-m-rb-open ul {
  margin: 0; padding-left: 16px;
  font-size: 12.5px; line-height: 1.55; color: var(--fg-muted);
}
.ups-m-rb-open li { margin-bottom: 6px; }

/* A rule the app states but canon does not yet carry. */
.ups-m-rb-nocanon {
  margin: 0 14px 14px; padding: 10px 12px;
  background: rgba(255,184,107,.10);
  border-left: 3px solid var(--warn);
  border-radius: 0 8px 8px 0;
  font-size: 12.5px; line-height: 1.5; color: var(--fg-muted);
}
.ups-m-rb-nocanon b { color: var(--warn); }

/* Era notes — the "SuperFlex since 2022" line, deliberately the quietest
   thing on the page. History must never compete with the current rule. */
.ups-m-rb-eras {
  display: flex; flex-wrap: wrap; gap: 6px;
  padding: 16px 14px 0;
}
.ups-m-rb-era {
  font-size: 11.5px; color: var(--fg-muted);
  background: var(--bg-elev); border-radius: 999px; padding: 4px 10px;
}

.ups-m-rb-drawer { margin: 18px 14px 0; border-top: 1px solid var(--line); }
.ups-m-rb-drawer-btn {
  display: flex; align-items: center; justify-content: space-between;
  width: 100%; min-height: 46px; padding: 0;
  border: none; background: none; color: var(--fg-muted);
  font-size: 13px; cursor: pointer; text-align: left;
}
.ups-m-rb-drawer.is-open .ups-m-rb-caret { transform: rotate(90deg); }
.ups-m-rb-drawer-body { padding-bottom: 8px; }
.ups-m-rb-cite {
  margin-bottom: 14px; padding: 10px 12px;
  background: var(--bg-elev); border-radius: 8px;
  font-size: 13px; line-height: 1.55;
}
.ups-m-rb-cite-h {
  display: flex; align-items: baseline; gap: 8px;
  margin-bottom: 6px; flex-wrap: wrap;
}
.ups-m-rb-cite-t { font-weight: 650; font-size: 13px; }
.ups-m-rb-cite-s { font-size: 11px; color: var(--fg-muted); margin-left: auto; }

.ups-m-rb-hit {
  display: block; width: 100%; text-align: left;
  padding: 12px 14px; border: none; border-bottom: 1px solid var(--line);
  background: none; color: var(--fg); cursor: default;
}
.ups-m-rb-hit-topic { cursor: pointer; }
.ups-m-rb-hit-topic:active { background: var(--bg-elev); }
.ups-m-rb-hit-k {
  display: inline-block; font-size: 10px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .05em;
  color: var(--accent); background: rgba(91,141,255,.14);
  padding: 2px 7px; border-radius: 999px; margin-bottom: 6px;
}
.ups-m-rb-hit-canon { color: var(--fg-muted); background: var(--bg-elev2); }
.ups-m-rb-hit-t { display: block; font-size: 15px; font-weight: 620; line-height: 1.3; }
.ups-m-rb-hit-b {
  display: block; font-size: 12.5px; color: var(--fg-muted);
  line-height: 1.5; margin-top: 4px;
}
.ups-m-rb-hit-b mark {
  background: rgba(91,141,255,.28); color: var(--fg);
  border-radius: 3px; padding: 0 2px;
}

.ups-m-rb-chg-h {
  display: flex; align-items: center; gap: 10px; width: 100%;
  min-height: 52px; padding: 10px 14px;
  border: none; background: none; color: var(--fg);
  text-align: left; cursor: pointer;
}
.ups-m-rb-chg.is-open .ups-m-rb-caret { transform: rotate(90deg); }

.ups-m-rb-secttl {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .07em;
  color: var(--fg-muted);
  padding: 14px 14px 8px;
}
.ups-m-rb-note, .ups-m-rb-resultcount {
  font-size: 12px; color: var(--fg-muted);
  padding: 0 14px 10px; line-height: 1.5;
}
.ups-m-rb-empty {
  padding: 18px 14px; font-size: 13px;
  color: var(--fg-muted); line-height: 1.6;
}
.ups-m-rb-loading { font-size: 13px; color: var(--fg-muted); }

/* Quick answers — the questions that start arguments. */
.ups-m-rb-quickwrap { padding-bottom: 4px; }
.ups-m-rb-quick {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  padding: 0 14px;
}
.ups-m-rb-qbtn {
  min-height: 48px;
  padding: 8px 10px;
  border-radius: 10px;
  border: 1px solid var(--line);
  background: var(--bg-elev);
  color: var(--fg);
  font-size: 13px;
  font-weight: 600;
  text-align: left;
  line-height: 1.3;
  cursor: pointer;
}
.ups-m-rb-qbtn:active { background: var(--bg-elev2); }

/* Grouped topic index. Headers stay put while the list scrolls so you always
   know which section you are in — the whole point of grouping 13 topics. */
.ups-m-rb-group { padding-top: 10px; }
.ups-m-rb-group-h {
  position: sticky; top: 0; z-index: 2;
  display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
  padding: 8px 14px 6px;
  background: var(--bg);
  font-size: 12px; font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--fg-muted);
}
.ups-m-rb-group-b {
  font-size: 11.5px; font-weight: 500; letter-spacing: 0;
  text-transform: none; color: var(--fg-dim, var(--fg-muted)); opacity: .85;
}

/* Section / rule accordions */
.ups-m-rb-sec { border-bottom: 1px solid var(--line); }
.ups-m-rb-sec-head, .ups-m-rb-rule-head {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  min-height: 52px;
  padding: 10px 14px;
  border: none;
  background: none;
  color: var(--fg);
  text-align: left;
  cursor: pointer;
  font-size: 15px;
}
.ups-m-rb-secnum {
  flex: 0 0 auto;
  min-width: 30px;
  font-size: 12px;
  font-weight: 700;
  color: var(--accent);
}
.ups-m-rb-sectitle { flex: 1; font-weight: 600; line-height: 1.25; }
.ups-m-rb-seccount {
  flex: 0 0 auto; font-size: 11px; color: var(--fg-muted);
  background: var(--bg-elev2); border-radius: 999px; padding: 2px 8px;
}
.ups-m-rb-caret {
  flex: 0 0 auto; color: var(--fg-muted); font-size: 18px;
  transition: transform .15s ease;
}
.is-open > .ups-m-rb-sec-head .ups-m-rb-caret,
.is-open > .ups-m-rb-rule-head .ups-m-rb-caret { transform: rotate(90deg); }
.ups-m-rb-sec-body { padding-bottom: 6px; }

.ups-m-rb-grp {
  font-size: 11px; font-weight: 700; text-transform: uppercase;
  letter-spacing: .06em; color: var(--fg-muted);
  padding: 12px 14px 4px;
}
.ups-m-rb-grpkey { color: var(--accent); }

.ups-m-rb-rule { border-top: 1px solid var(--line); }
.ups-m-rb-rule:first-child { border-top: none; }
.ups-m-rb-rid {
  flex: 0 0 auto; min-width: 44px;
  font-size: 12px; font-weight: 700; color: var(--accent);
  font-variant-numeric: tabular-nums;
}
.ups-m-rb-rtitle { flex: 1; font-size: 14px; font-weight: 600; line-height: 1.3; }
.ups-m-rb-where {
  font-size: 11px; color: var(--fg-muted); padding: 0 14px 2px 14px;
}
.ups-m-rb-meta {
  display: flex; flex-wrap: wrap; gap: 5px;
  padding: 0 14px 8px 14px;
}
.ups-m-rb-meta:empty { display: none; }
.ups-m-rb-badge {
  font-size: 10px; font-weight: 700; letter-spacing: .03em;
  padding: 2px 7px; border-radius: 999px;
  background: var(--bg-elev2); color: var(--fg-muted);
}
.ups-m-rb-badge-chg { background: rgba(45,212,191,.16); color: var(--teal); }
.ups-m-rb-badge-ok { background: rgba(139,229,139,.16); color: var(--ok); }
.ups-m-rb-badge-no { background: rgba(255,107,107,.16); color: var(--danger); }
.ups-m-rb-badge-adopt { background: rgba(91,141,255,.16); color: var(--accent); }
.ups-m-rb-badge-provisional,
.ups-m-rb-badge-new,
.ups-m-rb-badge-caution { background: rgba(255,184,107,.16); color: var(--warn); }
.ups-m-rb-badge-ambiguous { background: rgba(255,107,107,.16); color: var(--danger); }
.ups-m-rb-badge-int { background: rgba(138,151,173,.18); color: var(--fg-muted); }

.ups-m-rb-snip {
  font-size: 12.5px; color: var(--fg-muted); line-height: 1.55;
  padding: 0 14px 12px;
}
.ups-m-rb-snip mark {
  background: rgba(91,141,255,.28); color: var(--fg);
  border-radius: 3px; padding: 0 2px;
}

/* Rule body — the actual canon prose. */
.ups-m-rb-rule:not(.is-open) > .ups-m-rb-body { display: none; }
.ups-m-rb-body { padding: 0 14px 14px; font-size: 13.5px; line-height: 1.6; }
.ups-m-rb-body p { margin: 0 0 10px; }
.ups-m-rb-body p:last-of-type { margin-bottom: 6px; }
.ups-m-rb-list { margin: 0 0 10px; padding-left: 20px; }
.ups-m-rb-list li { margin-bottom: 6px; }
.ups-m-rb-sub { margin-top: 6px; margin-bottom: 0; }
.ups-m-rb-body code {
  font-size: 11.5px; background: var(--bg-elev2);
  padding: 1px 5px; border-radius: 3px;
  overflow-wrap: anywhere;
}
.ups-m-rb-body a { color: var(--accent); }
.ups-m-rb-quote {
  margin: 0 0 10px; padding: 8px 12px;
  border-left: 3px solid var(--line-soft);
  background: var(--bg-elev); color: var(--fg-muted);
  border-radius: 0 6px 6px 0;
}
/* Wide tables scroll inside their own box — the page itself must never
   scroll sideways on a phone. */
.ups-m-rb-tablewrap {
  overflow-x: auto; -webkit-overflow-scrolling: touch;
  margin: 0 0 10px; border: 1px solid var(--line); border-radius: 8px;
}
.ups-m-rb-table { border-collapse: collapse; width: 100%; font-size: 12.5px; }
.ups-m-rb-table th, .ups-m-rb-table td {
  padding: 7px 10px; text-align: left; white-space: nowrap;
  border-bottom: 1px solid var(--line);
}
.ups-m-rb-table th { background: var(--bg-elev2); font-size: 11px; text-transform: uppercase; letter-spacing: .05em; color: var(--fg-muted); }
.ups-m-rb-table tr:last-child td { border-bottom: none; }

.ups-m-rb-child {
  margin: 10px 0; padding: 10px 12px;
  background: var(--bg-elev); border-radius: 8px;
}
.ups-m-rb-child-title {
  font-size: 12px; font-weight: 700; color: var(--accent); margin-bottom: 6px;
}

/* Commish-only material. These styles apply only once the footer toggle is on:
   for a member, whole internal blocks are never emitted and internal <li>s are
   removed from the fragment before insert (see blockHtml in views/rules.js), so
   the rendered page genuinely does not contain them. */
.ups-m-rb-int-block, .ups-m-rb-int {
  color: var(--fg-muted);
  border-left: 2px solid var(--line-soft);
  padding-left: 8px;
}
.ups-m-rb-int { list-style: none; margin-left: -14px; }

.ups-m-rb-copy {
  margin-top: 4px; min-height: 34px; padding: 0 12px;
  border: 1px solid var(--line); border-radius: 8px;
  background: var(--bg-elev); color: var(--fg-muted);
  font-size: 12px; cursor: pointer;
}

.ups-m-rb-chg { border-bottom: 1px solid var(--line); }
.ups-m-rb-chg:not(.is-open) > .ups-m-rb-body { display: none; }
.ups-m-rb-chgdate {
  flex: 0 0 auto; font-size: 11px; font-weight: 700;
  color: var(--fg-muted); font-variant-numeric: tabular-nums;
}
.ups-m-rb-affected {
  font-size: 12px; color: var(--fg-muted);
  margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--line);
  line-height: 1.5;
}
.ups-m-rb-thread {
  display: inline-block; margin-top: 8px; font-size: 12px; color: var(--accent);
}

.ups-m-rb-foot {
  padding: 18px 14px calc(24px + var(--safe-bot));
  font-size: 11px; color: var(--fg-muted); line-height: 1.6;
}
.ups-m-rb-footrow { display: flex; gap: 14px; margin-top: 8px; }
.ups-m-rb-link {
  border: none; background: none; padding: 0;
  color: var(--accent); font-size: 12px; cursor: pointer;
  text-decoration: underline;
}
.ups-m-rb-link.is-on { color: var(--warn); }

/* Deep-link landing cue: a link pasted into Discord should make it obvious
   which rule it meant. */
.ups-m-rb-flash { animation: ups-m-rb-flash 1.6s ease-out; }
@keyframes ups-m-rb-flash {
  0%, 30% { background: rgba(91,141,255,.20); }
  100% { background: transparent; }
}
@media (prefers-reduced-motion: reduce) {
  .ups-m-rb-flash { animation: none; }
  .ups-m-rb-caret { transition: none; }
}

/* Tablet / desktop: same page, wider grid, and the column stops growing —
   a rule set in a 1280px-wide line is not readable, and full-bleed rows make
   the section list look empty. */
@media (min-width: 700px) {
  .ups-m-rb-wrap { max-width: 920px; margin: 0 auto; }
  .ups-m-rb-quick { grid-template-columns: repeat(4, 1fr); }
  .ups-m-rb-body, .ups-m-rb-snip { max-width: 74ch; }
  .ups-m-rb-sec-head, .ups-m-rb-rule-head { min-height: 46px; }
}
@media (min-width: 1100px) {
  .ups-m-rb-wrap { max-width: 1040px; }
}

/* ----- Roster row enrichment (Contracts view) ----- */
.ups-m-nfl-logo {
  width: 18px;
  height: 18px;
  vertical-align: middle;
  margin-right: 6px;
  border-radius: 2px;
}
.ups-m-player-row .name .nfl-team {
  font-size: 10px;
  font-weight: 600;
  color: var(--fg-muted);
  margin-left: 6px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.ups-m-player-row.rich .sub.chips-row {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-top: 4px;
  align-items: center;
}
.ups-m-player-row.rich .chip {
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--fg-muted);
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  border-radius: 3px;
  padding: 1px 6px;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
.ups-m-player-row.rich .chip.type { color: var(--accent); border-color: rgba(91,141,255,0.4); }

/* ----- Trade view (League → Trade) ----- */
.ups-m-trade-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  margin-top: 4px;
}
.ups-m-trade-col {
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 8px 10px;
}
.ups-m-trade-col .lbl {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--fg-muted);
  margin-bottom: 4px;
}
.ups-m-trade-col ul {
  margin: 0;
  padding-left: 16px;
  font-size: 12px;
  line-height: 1.55;
}
.ups-m-trade-col .muted { font-size: 12px; color: var(--fg-muted); font-style: italic; }
.ups-m-trade-note {
  margin-top: 8px;
  padding: 6px 10px;
  background: rgba(91,141,255,0.06);
  border-left: 3px solid var(--accent);
  border-radius: 0 6px 6px 0;
  font-size: 12px;
}
.ups-m-trade-note .lbl {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--fg-muted);
  margin-right: 6px;
}
/* Pre-trade extension(s) attached to a pending offer (teal accent). */
.ups-m-trade-ext {
  margin-top: 8px;
  padding: 6px 10px;
  background: rgba(45, 212, 191, 0.07);
  border-left: 3px solid var(--teal);
  border-radius: 0 6px 6px 0;
  font-size: 12px;
}
.ups-m-trade-ext > .lbl {
  display: block;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--teal);
  margin-bottom: 3px;
}
.ups-m-trade-ext ul { margin: 0; padding-left: 16px; }
.ups-m-trade-ext li { margin: 1px 0; }
.ups-m-trade-ext .term { color: var(--teal); font-weight: 700; }
.ups-m-trade-ext .by { color: var(--fg-muted); font-size: 11px; }
.ups-m-trade-actions {
  display: flex;
  gap: 8px;
  margin-top: 10px;
}
.ups-m-trade-actions .btn-act { flex: 1; }

/* ----- Draft Countdown banner ----- */
.ups-m-draft-countdown {
  margin: 8px 0 12px;
  padding: 12px;
  background: linear-gradient(135deg, rgba(91,141,255,0.15), rgba(45,212,191,0.12));
  border: 1px solid rgba(91,141,255,0.4);
  border-radius: 10px;
  text-align: center;
}
.ups-m-draft-countdown .lbl {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--fg-muted);
  margin-bottom: 4px;
}
.ups-m-draft-countdown .val {
  font-size: 20px;
  font-weight: 700;
  color: var(--fg);
  font-variant-numeric: tabular-nums;
}
.ups-m-draft-countdown.live {
  background: linear-gradient(135deg, rgba(45,212,191,0.18), rgba(139,229,139,0.15));
  border-color: var(--ok);
}
.ups-m-draft-countdown.live .val { color: var(--ok); }

/* ----- Draft view (League → Draft) ----- */
.ups-m-draft-clock {
  margin-top: 8px;
  padding: 8px 10px;
  background: var(--bg-elev2);
  border-radius: 6px;
  font-size: 12px;
  color: var(--fg-muted);
}
.ups-m-draft-clock.you {
  background: rgba(206, 147, 216, 0.12);
  border: 1px solid rgba(206, 147, 216, 0.4);
  color: #ce93d8;
}
.ups-m-draft-clock strong { color: var(--fg); }
.ups-m-draft-clock.you strong { color: #ce93d8; }
.ups-m-rank-badge {
  display: inline-block;
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  color: var(--accent);
  font-size: 10px;
  font-weight: 700;
  padding: 1px 5px;
  border-radius: 3px;
  margin-right: 6px;
  letter-spacing: 0.04em;
  font-variant-numeric: tabular-nums;
}
.ups-m-draft-pick {
  display: grid;
  grid-template-columns: 56px 1fr;
  gap: 10px;
  align-items: center;
  padding: 8px 12px;
  background: var(--bg-elev);
  border-top: 1px solid var(--line);
  min-height: 48px;
}
.ups-m-draft-pick.filled { background: var(--bg-elev); cursor: pointer; -webkit-tap-highlight-color: rgba(91,141,255,0.08); }
.ups-m-draft-pick.filled:active { background: var(--bg-elev2); }
.ups-m-draft-pick .pick {
  font-family: ui-monospace, monospace;
  font-size: 13px;
  font-weight: 700;
  color: var(--accent);
  text-align: center;
  letter-spacing: 0.04em;
}
.ups-m-draft-pick .franchise {
  font-size: 11px;
  color: var(--fg-muted);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  font-weight: 600;
}
.ups-m-draft-pick .player {
  font-size: 14px;
  font-weight: 600;
  color: var(--fg);
  margin-top: 1px;
}
.ups-m-draft-pick .player.muted { font-style: italic; color: var(--fg-muted); font-weight: 500; }
.ups-m-draft-pick .player .muted { color: var(--fg-muted); font-weight: 500; }

/* ----- Tagging view (My Team → Tagging) ----- */
.ups-m-tag-slots {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}
.ups-m-tag-slot {
  padding: 10px;
  border-radius: 8px;
  border: 1px solid var(--line);
  background: var(--bg-elev2);
}
.ups-m-tag-slot.filled {
  border-color: rgba(206, 147, 216, 0.5);
  background: rgba(206, 147, 216, 0.08);
}
.ups-m-tag-slot .lbl {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--fg-muted);
  margin-bottom: 4px;
}
.ups-m-tag-slot .val {
  font-size: 14px;
  font-weight: 700;
  color: var(--fg);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ups-m-tag-slot.open .val { color: var(--fg-muted); font-style: italic; font-weight: 500; }
.ups-m-tag-help {
  margin-top: 10px;
  font-size: 11px;
  color: var(--fg-muted);
  line-height: 1.5;
}

.ups-m-tag-row {
  display: grid;
  grid-template-columns: 36px 1fr auto;
  gap: 10px;
  align-items: center;
  padding: 10px 12px;
  background: var(--bg-elev);
  border-top: 1px solid var(--line);
  min-height: 56px;
  cursor: pointer;
  -webkit-tap-highlight-color: rgba(206, 147, 216, 0.1);
}
.ups-m-tag-row:active { background: var(--bg-elev2); }
.ups-m-tag-row .pos {
  font-size: 11px;
  font-weight: 700;
  text-align: center;
  padding: 4px 0;
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  border-radius: 4px;
  color: var(--fg-muted);
  letter-spacing: 0.04em;
}
.ups-m-tag-row .body { min-width: 0; }
.ups-m-tag-row .name {
  font-size: 14px;
  font-weight: 600;
  color: var(--fg);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ups-m-tag-row .sub {
  font-size: 11px;
  color: var(--fg-muted);
  margin-top: 2px;
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
}
.ups-m-tag-row .sub .badge {
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  border-radius: 3px;
  padding: 1px 5px;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--fg-muted);
}
.ups-m-tag-row .sub .badge.side.offense { color: #ef9a9a; border-color: rgba(239, 154, 154, 0.4); }
.ups-m-tag-row .sub .badge.side.defense { color: #b39ddb; border-color: rgba(179, 157, 219, 0.4); }
.ups-m-tag-row .formula {
  font-size: 10px;
  color: var(--fg-muted);
  margin-top: 4px;
  font-style: italic;
  opacity: 0.8;
}
.ups-m-tag-btn {
  padding: 8px 12px;
  border-radius: 6px;
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  min-height: 38px;
  min-width: 80px;
  border: 1px solid var(--line);
  background: var(--bg-elev2);
  color: var(--fg);
}
.ups-m-tag-btn.tag {
  background: rgba(206, 147, 216, 0.12);
  border-color: rgba(206, 147, 216, 0.5);
  color: #ce93d8;
}
.ups-m-tag-btn.untag {
  background: rgba(255, 184, 107, 0.12);
  border-color: rgba(255, 184, 107, 0.5);
  color: var(--warn);
}
.ups-m-tag-btn.locked,
.ups-m-tag-btn.disabled,
.ups-m-tag-btn[disabled] {
  opacity: 0.45;
  cursor: not-allowed;
  color: var(--fg-muted);
  background: transparent;
}

/* ----- Franchise picker ----- */
.ups-m-pick-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.ups-m-pick-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 14px;
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  border-radius: 8px;
  color: var(--fg);
  font-size: 14px;
  text-align: left;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  min-height: 48px;
  width: 100%;
}
.ups-m-pick-row:active { background: var(--line); }
.ups-m-pick-row .num {
  font-size: 11px;
  font-weight: 700;
  color: var(--fg-muted);
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 4px;
  padding: 2px 6px;
  letter-spacing: 0.04em;
}
.ups-m-pick-row .name { font-weight: 600; flex: 1; }
.ups-m-pick-row .owner { font-size: 11px; color: var(--fg-muted); }

/* ----- "Use Desktop Site" link ----- */
.ups-m-desktop-link {
  display: block;
  margin: 20px 12px;
  padding: 14px;
  text-align: center;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 10px;
  color: var(--accent);
  text-decoration: none;
  font-size: 14px;
  font-weight: 600;
}

/* Commish "act as which team" picker (Keith 2026-08-03). A dedicated row
   style rather than reusing .ups-m-desktop-link's 20px stacked margins,
   which read fine for a handful of scattered single links but would sprawl
   across a full 12-team list. */
.ups-m-team-pick-list { display: flex; flex-direction: column; gap: 6px; }
.ups-m-team-pick {
  display: block;
  width: 100%;
  padding: 12px 14px;
  text-align: left;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 10px;
  color: var(--fg);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
}
.ups-m-team-pick:active { background: var(--bg-elev2); }
.ups-m-team-pick .owner { color: var(--fg-muted); font-weight: 400; font-size: 12px; }

/* Hide on very narrow phones where bottom nav gets squeezed */
@media (max-width: 320px) {
  .ups-m-nav-label { font-size: 10px; }
  .ups-m-cap-kv .val { font-size: 18px; }
}

/* ──────────────────────────────────────────────────────────────────────
   DRAFT VIEW (mobile commish-capable rookie draft)
   ────────────────────────────────────────────────────────────────────── */
.ups-m-draft-header {
  position: sticky;
  top: calc(var(--hdr-h) + var(--safe-top));
  z-index: 5;
  background: var(--bg);
  border-bottom: 1px solid var(--line);
  padding: 10px 12px;
}
.ups-m-draft-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 6px;
}
.ups-m-draft-mode {
  font-size: 11px;
  font-weight: 700;
  padding: 3px 8px;
  border-radius: 12px;
  letter-spacing: 0.04em;
  border: 1px solid transparent;
}
.ups-m-draft-mode.live { background: rgba(255,107,107,0.18); color: var(--danger); border-color: rgba(255,107,107,0.5); }
.ups-m-draft-mode.sim  { background: rgba(255,184,107,0.18); color: var(--warn); border-color: rgba(255,184,107,0.5); }
.ups-m-draft-commish {
  font-size: 10px;
  font-weight: 700;
  background: var(--accent);
  color: #0e1320;
  padding: 3px 8px;
  border-radius: 12px;
  letter-spacing: 0.06em;
}
.ups-m-resync {
  margin-left: auto;
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  color: var(--fg);
  padding: 4px 10px;
  border-radius: 8px;
  cursor: pointer;
  font-size: 14px;
}
.ups-m-draft-onclock { font-size: 16px; font-weight: 600; color: var(--fg); }
.ups-m-draft-onclock strong { color: var(--accent); }
.ups-m-draft-progress { font-size: 11px; color: var(--fg-muted); margin-top: 3px; }

.ups-m-draft-filters {
  margin: 10px 12px 14px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.ups-m-search {
  width: 100%;
  padding: 10px 12px;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 8px;
  color: var(--fg);
  font-size: 15px;
  -webkit-appearance: none;
  appearance: none;
}
.ups-m-search:focus { outline: 2px solid var(--accent); outline-offset: 0; }
.ups-m-pos-row { display: flex; gap: 6px; }
.ups-m-pos-pill {
  flex: 1;
  padding: 8px 6px;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 8px;
  color: var(--fg-muted);
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
}
.ups-m-pos-pill.active { background: var(--accent); color: #0e1320; border-color: var(--accent); }

.ups-m-prospect-list { display: flex; flex-direction: column; gap: 6px; margin: 0 12px; }
.ups-m-prospect-row {
  display: grid;
  grid-template-columns: 1fr auto;
  grid-template-areas:
    "name adp"
    "sub adp";
  gap: 2px 8px;
  padding: 10px 12px;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 8px;
  color: var(--fg);
  text-align: left;
  cursor: pointer;
  min-height: 56px;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-prospect-row:active { background: var(--bg-elev2); }
.ups-m-prospect-name { grid-area: name; font-weight: 600; font-size: 14px; }
.ups-m-prospect-sub  { grid-area: sub; font-size: 11px; color: var(--fg-muted); }
.ups-m-prospect-adp  { grid-area: adp; align-self: center; font-size: 11px; color: var(--accent); font-weight: 600; }

/* Bottom-sheet confirm */
.ups-m-sheet-backdrop {
  position: fixed; inset: 0;
  background: rgba(0,0,0,0.65);
  z-index: 1000;
  display: flex;
  align-items: flex-end;
  justify-content: center;
}
.ups-m-sheet {
  width: 100%;
  max-width: 480px;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 16px 16px 0 0;
  padding: 16px 16px calc(20px + var(--safe-bot));
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.ups-m-sheet-title { font-size: 13px; color: var(--fg-muted); letter-spacing: 0.06em; text-transform: uppercase; }
.ups-m-sheet-body { font-size: 14px; line-height: 1.5; }
.ups-m-sheet-player { font-size: 20px; font-weight: 700; color: var(--accent); margin: 4px 0; }
.ups-m-sheet-sub { font-size: 12px; color: var(--fg-muted); }
.ups-m-sheet-warn {
  margin-top: 10px;
  padding: 10px;
  background: rgba(255,107,107,0.10);
  border-left: 3px solid var(--danger);
  border-radius: 4px;
  font-size: 12px;
  color: var(--fg);
}
.ups-m-sheet-actions { display: flex; gap: 10px; }
.ups-m-btn-secondary, .ups-m-btn-danger {
  flex: 1;
  padding: 12px;
  border-radius: 8px;
  font-weight: 700;
  font-size: 14px;
  border: 1px solid var(--line);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-btn-secondary { background: var(--bg-elev2); color: var(--fg); }
.ups-m-btn-danger { background: var(--danger); color: #0e1320; border-color: var(--danger); }
.ups-m-btn-danger:disabled { opacity: 0.5; cursor: wait; }

.ups-m-error {
  padding: 20px;
  text-align: center;
  color: var(--danger);
  font-size: 13px;
}

/* ════════ Auction view (League → Auction) ════════ */
.ups-m-auction { padding: 12px 12px 24px; }
.ups-m-auc-intro {
  font-size: 12px;
  color: var(--fg-muted);
  line-height: 1.45;
  margin-bottom: 10px;
}
.ups-m-auc-banner {
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  border-left: 3px solid var(--warn);
  border-radius: 6px;
  padding: 8px 10px;
  font-size: 12px;
  color: var(--fg);
  line-height: 1.4;
  margin-bottom: 12px;
}
.ups-m-auc-banner.open { border-left-color: var(--ok); }
.ups-m-auc-sec-head {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--fg-muted);
  margin: 16px 2px 8px;
}
.ups-m-auc-sec-head.sub { color: var(--line-soft); margin-top: 18px; }
.ups-m-auc-sec-head .ct {
  font-size: 11px;
  font-weight: 700;
  color: var(--fg);
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 1px 7px;
}
.ups-m-auc-empty {
  font-size: 12px;
  color: var(--fg-muted);
  padding: 10px 2px;
}
/* FA Value board (commish) */
.ups-m-fav-infl { display: flex; align-items: center; gap: 12px; background: var(--bg-elev); border: 1px solid var(--line); border-left: 3px solid var(--accent, #5b8dff); border-radius: 10px; padding: 10px 12px; margin-bottom: 10px; }
.ups-m-fav-infl-x { font-size: 26px; font-weight: 800; letter-spacing: -0.02em; line-height: 1; color: var(--accent, #5b8dff); }
.ups-m-fav-infl-t { font-size: 11px; color: var(--fg-muted); line-height: 1.45; }
.ups-m-fav-infl-t b { color: var(--fg); text-transform: capitalize; }
.ups-m-fav-blend { background: var(--bg-elev); border: 1px solid var(--line); border-radius: 10px; padding: 9px 12px; margin-bottom: 10px; }
.ups-m-fav-blend-h { font-size: 11px; color: var(--fg-muted); margin-bottom: 4px; } .ups-m-fav-blend-h b { color: var(--fg); }
.ups-m-fav-blend input[type=range] { width: 100%; accent-color: var(--accent, #5b8dff); }
.ups-m-fav-pos { display: flex; gap: 6px; margin-bottom: 10px; }
.ups-m-fav-pospill { flex: 1; font-size: 12px; font-weight: 700; padding: 6px 0; border-radius: 8px; border: 1px solid var(--line); background: var(--bg-elev); color: var(--fg-muted); }
.ups-m-fav-pospill.active { background: var(--accent, #5b8dff); color: #0a1222; border-color: var(--accent, #5b8dff); }
.ups-m-fav-card { background: var(--bg-elev); border: 1px solid var(--line); border-radius: 10px; padding: 9px 12px; margin-bottom: 7px; }
.ups-m-fav-row { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.ups-m-fav-nm { font-size: 13px; min-width: 0; } .ups-m-fav-nm b { display: inline; }
.ups-m-fav-rk { font-size: 10px; color: var(--fg-muted); margin-left: 3px; }
.ups-m-fav-v { font-size: 9px; font-weight: 800; padding: 1px 6px; border-radius: 999px; margin-left: 5px; vertical-align: middle; }
.ups-m-fav-v.sp { color: #0a1222; background: #34d399; } .ups-m-fav-v.val { color: #0a1222; background: var(--accent, #5b8dff); }
.ups-m-fav-v.fair { color: var(--fg-muted); border: 1px solid var(--line); } .ups-m-fav-v.over { color: #fff; background: #ef4444; } .ups-m-fav-v.dart { color: #0a1222; background: #c084fc; }
.ups-m-fav-nums { display: flex; align-items: center; gap: 5px; font-size: 13px; white-space: nowrap; }
.ups-m-fav-w { color: var(--fg-muted); } .ups-m-fav-arrow { color: var(--fg-muted); font-size: 10px; } .ups-m-fav-e { font-weight: 800; } .ups-m-fav-e i { font-style: normal; font-size: 9px; font-weight: 600; color: var(--fg-muted); }
.ups-m-fav-gap { font-size: 11px; font-weight: 700; min-width: 26px; text-align: right; } .ups-m-fav-gap.pos { color: #34d399; } .ups-m-fav-gap.neg { color: #ef4444; }
.ups-m-fav-detail { font-size: 11px; color: var(--fg-muted); line-height: 1.5; margin-top: 7px; padding-top: 7px; border-top: 1px solid var(--line); } .ups-m-fav-detail b { color: var(--fg); } .ups-m-fav-detail i { font-style: normal; color: #fbbf24; }
/* ADP override: tappable rank chip + price direction arrow */
.ups-m-fav-rankchip { color: var(--accent, #5b8dff); font-weight: 700; border-bottom: 1px dotted currentColor; padding-bottom: 1px; }
.ups-m-fav-rankchip.ovr { color: #fbbf24; }
.ups-m-fav-rankx { color: #ef4444; font-weight: 800; margin-left: 2px; padding: 0 3px; }
.ups-m-fav-rankin { width: 46px; font-size: 12px; padding: 2px 4px; border: 1px solid var(--accent, #5b8dff); border-radius: 5px; background: var(--bg, #0a1222); color: var(--fg); }
.ups-m-fav-row.ovr { box-shadow: inset 3px 0 0 #fbbf24; padding-left: 5px; border-radius: 4px; }
.ups-m-fav-dir { font-size: 9px; font-weight: 800; margin-left: 3px; } .ups-m-fav-dir.up { color: #ef4444; } .ups-m-fav-dir.down { color: #34d399; }
.ups-m-fav-ovrline { font-size: 10.5px; color: var(--fg-muted); margin: 4px 0 6px; }
.ups-m-fav-ovrline #ups-m-fav-ovr-reset { font-size: 10.5px; font-weight: 700; color: var(--accent, #5b8dff); background: none; border: 1px solid var(--accent, #5b8dff); border-radius: 5px; padding: 1px 7px; margin-left: 4px; }
.ups-m-fav-tiers { margin-top: 2px; }
.ups-m-fav-tierpos { font-size: 13px; font-weight: 800; color: var(--accent, #5b8dff); margin: 10px 0 4px; }
.ups-m-fav-tier { display: flex; justify-content: space-between; align-items: center; gap: 8px; background: var(--bg-elev); border: 1px solid var(--line); border-radius: 8px; padding: 6px 10px; margin-bottom: 5px; }
.ups-m-fav-tier.sweet { border-color: #34d399; }
.ups-m-fav-tier-l { font-size: 11px; font-weight: 700; text-transform: uppercase; } .ups-m-fav-tier-l i { color: var(--fg-muted); font-weight: 500; font-style: normal; }
.ups-m-fav-tier-v { font-size: 12px; color: var(--fg); white-space: nowrap; } .ups-m-fav-tier-v b { font-size: 10px; color: var(--fg-muted); font-weight: 600; }
/* FA value live overlay */
.ups-m-fav-liveline { font-size: 11px; font-weight: 600; color: var(--fg-muted); margin-bottom: 8px; }
.ups-m-fav-liveline.on { color: #34d399; }
/* FA value help */
.ups-m-fav-help-q { margin-left: auto; flex: 0 0 26px; width: 26px; height: 26px; border-radius: 999px; border: 1px solid var(--accent, #5b8dff); background: transparent; color: var(--accent, #5b8dff); font-weight: 800; font-size: 14px; }
.ups-m-fav-help { font-size: 13px; line-height: 1.55; }
.ups-m-fav-help h3 { font-size: 15px; margin: 6px 0 4px; } .ups-m-fav-help h4 { font-size: 12.5px; color: var(--accent, #5b8dff); margin: 12px 0 3px; }
.ups-m-fav-help p { margin: 3px 0; color: var(--fg-muted); } .ups-m-fav-help p b, .ups-m-fav-help b { color: var(--fg); }
.ups-m-fav-help-pos { background: var(--bg-elev); border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; margin-bottom: 8px; } .ups-m-fav-help-pos h4 { margin: 0 0 5px; color: var(--fg); }
.ups-m-fav-help-ex { font-size: 11.5px; color: var(--fg-muted); line-height: 1.5; margin-bottom: 7px; } .ups-m-fav-help-ex b { color: var(--fg); }
.ups-m-auc-card {
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 10px 12px;
  margin-bottom: 8px;
}
.ups-m-auc-card.won { opacity: 0.72; }
.ups-m-auc-card-main { flex: 1 1 auto; min-width: 0; }
.ups-m-auc-name {
  font-size: 14px;
  font-weight: 600;
  color: var(--fg);
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}
.ups-m-auc-pos {
  font-size: 10px;
  font-weight: 700;
  color: var(--accent);
  background: rgba(91, 141, 255, 0.12);
  border-radius: 4px;
  padding: 1px 5px;
}
.ups-m-auc-team { font-size: 11px; color: var(--fg-muted); font-weight: 500; }
.ups-m-auc-meta {
  font-size: 11.5px;
  color: var(--fg-muted);
  margin-top: 3px;
  line-height: 1.4;
}
.ups-m-auc-meta strong { color: var(--fg); font-variant-numeric: tabular-nums; }
.ups-m-auc-origin { color: var(--teal); }
.ups-m-auc-proxy { color: var(--warn); }
.ups-m-auc-noopen { color: var(--line-soft); font-style: italic; }
.ups-m-auc-card-cta {
  flex: 0 0 auto;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
}
.ups-m-auc-card-cta .btn-act {
  width: auto;
  padding: 7px 12px;
  font-size: 13px;
  white-space: nowrap;
}
.ups-m-auc-time {
  font-size: 11px;
  font-weight: 600;
  color: var(--warn);
  font-variant-numeric: tabular-nums;
}
.ups-m-auc-won {
  font-size: 11px;
  font-weight: 600;
  color: var(--fg-muted);
  white-space: nowrap;
}
/* In-app bid: Bid button + the small "open on MFL" fallback link. */
.ups-m-auc-card-cta .ups-m-auc-bid-btn { width: auto; }
.ups-m-auc-mfl {
  display: inline-block; font-size: 14px; font-weight: 700; line-height: 1;
  color: var(--fg-muted); text-decoration: none;
  padding: 5px 9px; border: 1px solid var(--line); border-radius: 8px;
}
.ups-m-auc-mfl:active { color: var(--accent); border-color: var(--accent); }
/* Bid / nominate sheet */
.ups-m-auc-bid-sheet { max-width: 460px; }
.ups-m-auc-bid-lbl { display: block; font-size: 12px; color: var(--fg-muted); margin: 4px 0 8px; letter-spacing: 0.03em; }
.ups-m-auc-bid-input { display: flex; align-items: center; gap: 10px; }
.ups-m-auc-step {
  width: 46px; height: 46px; flex: 0 0 auto;
  background: var(--bg-elev2); color: var(--fg);
  border: 1px solid var(--line); border-radius: 10px;
  font-size: 22px; font-weight: 700; line-height: 1; cursor: pointer;
}
.ups-m-auc-bid-input input {
  flex: 1; min-width: 0; text-align: center;
  padding: 11px 12px; background: var(--bg); color: var(--fg);
  border: 1px solid var(--line); border-radius: 10px;
  font-size: 20px; font-weight: 700; font-variant-numeric: tabular-nums; -webkit-appearance: none;
}
.ups-m-auc-bid-input input:focus { outline: none; border-color: var(--accent); }
.ups-m-auc-bid-note { font-size: 11px; color: var(--fg-muted); margin-top: 10px; line-height: 1.4; }
.ups-m-auc-bid-err { font-size: 12px; color: var(--bad, #ff6b6b); margin-top: 8px; min-height: 1em; font-weight: 600; }
.ups-m-auc-bid-foot { display: flex; gap: 10px; padding: 12px 16px 16px; }
.ups-m-auc-bid-foot .btn-act { flex: 1; }
.ups-m-auc-bid-foot .btn-act.otb { flex: 2; }
/* Nomination cadence */
.ups-m-auc-nom { display: flex; flex-direction: column; gap: 6px; }
.ups-m-auc-nom-row {
  display: grid;
  grid-template-columns: 1fr auto auto;
  align-items: center;
  gap: 8px;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 8px 10px;
}
.ups-m-auc-nom-row.me { border-color: var(--accent); background: rgba(91, 141, 255, 0.06); }
.ups-m-auc-nom-row .fn {
  font-size: 13px;
  font-weight: 600;
  color: var(--fg);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ups-m-auc-nom-row .you {
  font-size: 9px;
  text-transform: uppercase;
  color: var(--accent);
  border: 1px solid var(--accent);
  border-radius: 4px;
  padding: 0 3px;
  margin-left: 4px;
}
.ups-m-auc-nom-row .ns { font-size: 11px; color: var(--fg-muted); text-align: right; }
.ups-m-auc-nom-row .ns .lbl { font-weight: 700; color: var(--line-soft); margin-right: 2px; }
.ups-m-auc-nom-row .rdy { color: var(--ok); font-weight: 600; }
.ups-m-auc-nom-row .cd { color: var(--fg-muted); }

/* ── ERA/FAA inner tabs + redesign ── */
.ups-m-auc-itabs { display: flex; gap: 6px; margin: 2px 0 12px; }
.ups-m-auc-itab {
  flex: 1; min-width: 0; padding: 9px 6px; cursor: pointer; white-space: nowrap;
  background: var(--bg-elev); color: var(--fg-muted);
  border: 1px solid var(--line); border-radius: 9px;
  font-size: 12.5px; font-weight: 600;
}
.ups-m-auc-itab.active { background: var(--bg-elev2); color: var(--fg); border-color: var(--accent); }
.ups-m-auc-live { color: var(--teal); font-size: 10px; font-weight: 700; }
.ups-m-auc-tabbody { display: block; }
/* KPI strip */
.ups-m-auc-kpis { display: flex; gap: 8px; margin-bottom: 12px; }
.ups-m-auc-kpi {
  flex: 1; min-width: 0; text-align: center; padding: 8px 6px;
  background: var(--bg-elev); border: 1px solid var(--line); border-radius: 9px;
}
.ups-m-auc-kpi .lbl { display: block; font-size: 9.5px; text-transform: uppercase; letter-spacing: 0.03em; color: var(--fg-muted); margin-bottom: 2px; }
.ups-m-auc-kpi strong { display: block; font-size: 15px; color: var(--fg); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ups-m-auc-lock { font-size: 10px; color: var(--warn); font-weight: 600; margin-left: 6px; }
/* Pool search + list */
.ups-m-auc-search {
  width: 100%; box-sizing: border-box; margin: 6px 0 10px; padding: 10px 12px;
  background: var(--bg); color: var(--fg); border: 1px solid var(--line);
  border-radius: 9px; font-size: 16px; -webkit-appearance: none;
}
.ups-m-auc-search:focus { outline: none; border-color: var(--accent); }
.ups-m-auc-pool { display: flex; flex-direction: column; gap: 8px; }
/* Budgets / needs tables */
.ups-m-auc-table {
  display: flex; flex-direction: column; gap: 1px; margin-bottom: 14px;
  background: var(--line); border: 1px solid var(--line); border-radius: 9px; overflow: hidden;
}
.ups-m-auc-trow {
  display: grid; grid-template-columns: 1.3fr 0.9fr 0.7fr 1.1fr; gap: 4px;
  padding: 8px 10px; background: var(--bg-elev); font-size: 12px;
  align-items: center; font-variant-numeric: tabular-nums;
}
.ups-m-auc-trow.head { background: var(--bg-elev2); color: var(--fg-muted); font-size: 9.5px; text-transform: uppercase; letter-spacing: 0.03em; font-weight: 700; }
.ups-m-auc-trow.me { background: rgba(91, 141, 255, 0.12); }
.ups-m-auc-trow span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ups-m-auc-trow .tn { color: var(--fg); font-weight: 600; }
.ups-m-auc-trow .def { font-size: 10.5px; color: var(--fg-muted); white-space: normal; }

/* ── Secondary sub-nav (Summary · Lots · Players · Cadence · Schedule) ── */
.ups-m-auc-subnav {
  display: flex; gap: 5px; margin: 0 0 12px; overflow-x: auto;
  -webkit-overflow-scrolling: touch; scrollbar-width: none;
}
.ups-m-auc-subnav::-webkit-scrollbar { display: none; }
.ups-m-auc-subpill {
  flex: 0 0 auto; padding: 6px 12px; cursor: pointer; white-space: nowrap;
  background: transparent; color: var(--fg-muted);
  border: 1px solid var(--line); border-radius: 999px;
  font-size: 12px; font-weight: 600;
}
.ups-m-auc-subpill.active { background: var(--accent); color: #fff; border-color: var(--accent); }
/* Explanatory note under a section. */
.ups-m-auc-note {
  font-size: 11.5px; color: var(--fg-muted); line-height: 1.5;
  background: var(--bg-elev); border: 1px solid var(--line);
  border-radius: 9px; padding: 9px 11px; margin: 0 0 12px;
}
.ups-m-auc-note strong { color: var(--fg); }
/* Per-auction cadence row → single status column. */
.ups-m-auc-nom-row.single { grid-template-columns: 1fr auto; }
/* Schedule (compliance) table — status colors + out-of-compliance accent. */
.ups-m-auc-table.sched .ups-m-auc-trow { grid-template-columns: 1.4fr 1fr 0.6fr 0.9fr; }
.ups-m-auc-trow.ooc { box-shadow: inset 3px 0 0 var(--warn); }
.ups-m-auc-trow .rdy { color: var(--ok); font-weight: 600; }
.ups-m-auc-trow .bad { color: var(--warn); font-weight: 600; }
.ups-m-auc-trow .cd { color: var(--fg-muted); }
.ups-m-auc-trow .rst { color: var(--fg-dim, var(--fg-muted)); font-size: 10px; }
/* Lots Open/Completed toggle. */
.ups-m-auc-lotstoggle { display: flex; gap: 6px; margin: 0 0 12px; }
.ups-m-auc-lottab {
  flex: 1; padding: 8px 6px; cursor: pointer; white-space: nowrap;
  background: var(--bg-elev); color: var(--fg-muted);
  border: 1px solid var(--line); border-radius: 9px; font-size: 12.5px; font-weight: 600;
}
.ups-m-auc-lottab.active { background: var(--bg-elev2); color: var(--fg); border-color: var(--accent); }
.ups-m-auc-lottab .ct { font-size: 10px; color: var(--fg-muted); margin-left: 3px; }
/* Bid-history feed. */
.ups-m-auc-hist { display: flex; flex-direction: column; gap: 6px; }
.ups-m-auc-hrow {
  display: flex; flex-direction: column; gap: 3px;
  background: var(--bg-elev); border: 1px solid var(--line);
  border-radius: 8px; padding: 8px 10px;
}
.ups-m-auc-hrow .hp { font-size: 13px; font-weight: 600; color: var(--fg); }
.ups-m-auc-hrow .hb { font-size: 11.5px; color: var(--fg-muted); display: flex; align-items: center; gap: 5px; }
.ups-m-auc-hrow .hb strong { color: var(--fg); }
.ups-m-auc-hrow .hw { margin-left: auto; font-size: 10px; color: var(--line-soft); }
.ups-m-auc-hrow .nom { font-size: 9px; text-transform: uppercase; font-weight: 700; color: var(--accent); border: 1px solid var(--accent); border-radius: 4px; padding: 0 3px; }
.ups-m-auc-hrow .bid { font-size: 9px; text-transform: uppercase; font-weight: 700; color: var(--teal); border: 1px solid var(--teal); border-radius: 4px; padding: 0 3px; }

/* ── Pool controls: sort + team selects, position chips ── */
.ups-m-auc-poolctl { display: flex; gap: 6px; margin: 0 0 8px; }
.ups-m-auc-sel {
  flex: 1; min-width: 0; padding: 8px 10px; font-size: 12.5px;
  background: var(--bg-elev); color: var(--fg); border: 1px solid var(--line);
  border-radius: 9px; -webkit-appearance: none; appearance: none;
}
.ups-m-auc-poschips { display: flex; gap: 5px; margin: 0 0 10px; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.ups-m-auc-poschips::-webkit-scrollbar { display: none; }
.ups-m-auc-poschip {
  flex: 0 0 auto; padding: 5px 11px; cursor: pointer; white-space: nowrap;
  background: transparent; color: var(--fg-muted);
  border: 1px solid var(--line); border-radius: 999px; font-size: 11.5px; font-weight: 600;
}
.ups-m-auc-poschip.active { background: var(--accent); color: #fff; border-color: var(--accent); }
/* Clickable player name (opens the player modal). */
.ups-m-auc-pname {
  background: none; border: none; padding: 0; cursor: pointer; text-align: left;
  font: inherit; color: var(--fg); font-weight: 600;
}
.ups-m-auc-pname:active { color: var(--accent); }
/* Bid-history collapsible threads. */
.ups-m-auc-threads { display: flex; flex-direction: column; gap: 6px; }
.ups-m-auc-thread { background: var(--bg-elev); border: 1px solid var(--line); border-radius: 8px; overflow: hidden; }
.ups-m-auc-thread.open { border-color: var(--accent); }
.ups-m-auc-thsum { display: flex; align-items: center; gap: 7px; padding: 9px 10px; cursor: pointer; }
.ups-m-auc-thsum .thtog { color: var(--fg-muted); font-size: 11px; width: 10px; flex: 0 0 auto; }
.ups-m-auc-thsum .thmeta { margin-left: auto; font-size: 11px; color: var(--fg-muted); white-space: nowrap; }
.ups-m-auc-thbids { display: flex; flex-direction: column; gap: 1px; padding: 0 10px 8px 27px; }
.ups-m-auc-thbids .thbid { display: flex; align-items: center; gap: 5px; font-size: 11.5px; color: var(--fg-muted); padding: 4px 0; border-top: 1px solid var(--line); }
.ups-m-auc-thbids .thbid strong { color: var(--fg); }
.ups-m-auc-thbids .thbid .hw { margin-left: auto; font-size: 10px; color: var(--line-soft); white-space: nowrap; }
/* "forcer → leader" on a walk-up: the arrow is connective tissue, not content. */
.ups-m-auc-thbids .thbid .fwarrow { color: var(--line-soft); }
/* "your max $15K" on a live lot — YOUR number, so it reads as yours. Only ever
   rendered when the O=43 scrape saw it (i.e. you have an MFL session). */
.ups-m-auc-mymax { color: var(--accent, #5b8dff); font-weight: 600; }
.ups-m-auc-thbids .nom, .ups-m-auc-thbids .bid { font-size: 9px; text-transform: uppercase; font-weight: 700; border-radius: 4px; padding: 0 3px; }
.ups-m-auc-thbids .nom { color: var(--accent); border: 1px solid var(--accent); }
.ups-m-auc-thbids .bid { color: var(--teal); border: 1px solid var(--teal); }
.ups-m-auc-thbids .forced { font-size: 9px; text-transform: uppercase; font-weight: 700; border-radius: 4px; padding: 0 3px; color: var(--warn); border: 1px solid var(--warn); }
/* Per-player auction status badge in the pool meta line. */
.ups-m-auc-meta .stb { font-size: 9.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.02em; border-radius: 4px; padding: 1px 4px; }
.ups-m-auc-meta .stb.won { color: var(--ok); background: rgba(139, 229, 139, 0.12); }
.ups-m-auc-meta .stb.active { color: var(--teal); background: rgba(45, 212, 191, 0.12); }
.ups-m-auc-meta .stb.closed, .ups-m-auc-meta .stb.na { color: var(--fg-muted); background: var(--bg-elev2); }
/* Status filter chips share the position-chip look but stay on their own row. */
#ups-m-auc-statuschips { margin-top: -4px; }

/* ════════ Trade offer builder (League → Trade → Build offer) ════════ */
.ups-m-tb-sheet { height: 92vh; max-height: 92vh; }
#ups-m-tb-body { padding: 14px 16px 28px; display: flex; flex-direction: column; }
.ups-m-tb-steptitle {
  font-size: 15px;
  font-weight: 700;
  color: var(--fg);
  margin-bottom: 12px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.ups-m-tb-steptitle .cnt {
  font-size: 11px;
  font-weight: 600;
  color: var(--teal);
  background: rgba(45, 212, 191, 0.12);
  border-radius: 10px;
  padding: 2px 8px;
}
/* counterparty list */
.ups-m-tb-flist { display: flex; flex-direction: column; gap: 8px; }
.ups-m-tb-frow {
  text-align: left;
  padding: 14px 16px;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 10px;
  color: var(--fg);
  font-size: 15px;
  font-weight: 600;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-tb-frow:active { background: var(--bg-elev2); }
/* asset picker */
.ups-m-tb-search {
  width: 100%;
  padding: 11px 12px;
  background: var(--bg);
  color: var(--fg);
  border: 1px solid var(--line);
  border-radius: 8px;
  font-size: 15px;
  margin-bottom: 10px;
  -webkit-appearance: none;
}
.ups-m-tb-search:focus { outline: none; border-color: var(--accent); }
.ups-m-tb-assets {
  flex: 1 1 auto;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--bg-elev);
}
.ups-m-tb-subhead {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--fg-muted);
  padding: 10px 12px 4px;
  border-top: 1px solid var(--line);
}
.ups-m-tb-asset {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  width: 100%;
  text-align: left;
  padding: 10px 12px;
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--line);
  color: var(--fg);
  -webkit-tap-highlight-color: transparent;
}
.ups-m-tb-asset:last-child { border-bottom: none; }
.ups-m-tb-asset .nm { font-size: 14px; font-weight: 600; }
.ups-m-tb-asset .mt { font-size: 11px; color: var(--fg-muted); white-space: nowrap; }
.ups-m-tb-asset.on { background: rgba(45, 212, 191, 0.12); }
.ups-m-tb-asset.on .nm { color: var(--teal); }
.ups-m-tb-asset.on::before { content: "✓ "; color: var(--teal); font-weight: 700; }
/* Lineup-penalty forfeited pick: visible, greyed, never selectable (Keith 2026-10-12). */
.ups-m-tb-asset.is-forfeited { opacity: .55; cursor: not-allowed; }
.ups-m-tb-asset.is-forfeited .nm { text-decoration: line-through; text-decoration-color: var(--fg-muted); }
.ups-m-tb-asset.is-forfeited .mt { color: var(--warn); font-weight: 700; white-space: normal; text-align: right; }
.ups-m-tb-assets .ups-m-tb-pickwarn { margin: 4px 12px 8px; font-weight: 600; }
/* cap money */
.ups-m-tb-cap { margin-top: 12px; }
.ups-m-tb-cap label {
  display: block;
  font-size: 11px;
  color: var(--fg-muted);
  margin-bottom: 4px;
  letter-spacing: 0.03em;
}
.ups-m-tb-cap input {
  width: 100%;
  padding: 11px 12px;
  background: var(--bg);
  color: var(--fg);
  border: 1px solid var(--line);
  border-radius: 8px;
  font-size: 16px;
  font-variant-numeric: tabular-nums;
  -webkit-appearance: none;
}
.ups-m-tb-cap input:focus { outline: none; border-color: var(--accent); }
.ups-m-tb-cap input:disabled { opacity: 0.5; }
.ups-m-tb-cap label .mx { color: var(--teal); font-weight: 700; }
.ups-m-tb-cap .hint { font-size: 10px; color: var(--fg-muted); margin-top: 4px; line-height: 1.35; }
/* nav row */
.ups-m-tb-nav { display: flex; gap: 10px; margin-top: 14px; }
.ups-m-tb-nav .btn-act { flex: 1 1 0; }
/* review */
/* Keith's ruling, 2026-10-02: grid-template-columns: 1fr 1fr (without minmax(0, ...))
   lets a track's min-width default to its content's min-content size, so a long
   player/pick name or contract-status string can force the review step's two
   columns wider than the sheet's actual width instead of wrapping within it --
   matches the same narrow-column squeeze fixed on desktop (trade_workbench.html's
   .twb-offer-cart-item-head/.twb-offer-player-metric). minmax(0, 1fr) + min-width: 0
   let the column shrink to the sheet's real width; overflow-wrap lets long names
   wrap at a real word/character boundary instead of overflowing past the card edge. */
.ups-m-tb-review { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 10px; margin-bottom: 12px; }
.ups-m-tb-review .col {
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 10px 12px;
  min-width: 0;
}
.ups-m-tb-review .lbl {
  font-size: 11px;
  font-weight: 700;
  color: var(--fg-muted);
  margin-bottom: 6px;
  overflow-wrap: break-word;
}
.ups-m-tb-review ul { list-style: none; margin: 0; padding: 0; }
.ups-m-tb-review li { font-size: 13px; color: var(--fg); padding: 3px 0; line-height: 1.35; overflow-wrap: break-word; }
.ups-m-tb-review li .sal { color: var(--fg-muted); font-size: 11px; }
.ups-m-tb-review li.cap { color: var(--warn); font-weight: 600; }
.ups-m-tb-review li.muted { color: var(--line-soft); }
/* Pre-trade extension control (review step, give-side eligible players) */
.ups-m-tb-extwrap { margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--line); }
.ups-m-tb-extlbl { font-size: 10px; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase; color: var(--accent); margin-bottom: 5px; }
.ups-m-tb-extctl { display: flex; gap: 5px; flex-wrap: wrap; }
.ups-m-tb-extseg {
  flex: 1 1 0; min-width: 54px; display: flex; flex-direction: column; align-items: center;
  gap: 1px; padding: 6px 4px; border-radius: 8px;
  background: var(--bg); border: 1px solid var(--line); color: var(--fg);
  font-family: inherit; cursor: pointer;
}
.ups-m-tb-extseg .l { font-size: 12px; font-weight: 700; }
.ups-m-tb-extseg .s { font-size: 9px; color: var(--fg-muted); }
.ups-m-tb-extseg.on { border-color: var(--accent); background: rgba(91, 141, 255, 0.16); }
.ups-m-tb-extseg.on .l, .ups-m-tb-extseg.on .s { color: var(--accent); }
.ups-m-tb-extprev { font-size: 11px; color: var(--teal); margin-top: 6px; line-height: 1.3; }
.ups-m-tb-comment {
  width: 100%;
  padding: 10px 12px;
  background: var(--bg);
  color: var(--fg);
  border: 1px solid var(--line);
  border-radius: 8px;
  font-size: 14px;
  font-family: inherit;
  resize: vertical;
  -webkit-appearance: none;
}
.ups-m-tb-comment:focus { outline: none; border-color: var(--accent); }
.ups-m-tb-warn {
  font-size: 11px;
  color: var(--warn);
  background: rgba(255, 184, 107, 0.08);
  border: 1px solid rgba(255, 184, 107, 0.25);
  border-radius: 6px;
  padding: 8px 10px;
  margin-top: 10px;
  line-height: 1.4;
}

/* ── 3-way (ring) trade builder (views/trade.js) ── */
.ups-m-3w-ring {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
  padding: 9px 11px; margin-bottom: 12px;
  background: var(--bg-elev2); border: 1px solid var(--line);
  border-radius: 10px; font-size: 12px; font-weight: 600; color: var(--fg-muted);
}
.ups-m-3w-ring .you { color: var(--accent); }
.ups-m-3w-ring .arr { color: var(--line-soft); font-weight: 400; }
.ups-m-3w-ring .tag {
  font-size: 10px; font-weight: 800; letter-spacing: 0.04em; text-transform: uppercase;
  color: var(--bg); background: var(--accent); border-radius: 5px; padding: 1px 6px;
}
.ups-m-3w-leg { margin-bottom: 14px; }

/* per-asset destination chooser (step 3) */
.ups-m-3w-assetwrap { margin-bottom: 2px; }
.ups-m-3w-destrow {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
  padding: 6px 4px 9px 12px;
}
.ups-m-3w-destrow .to { font-size: 11px; color: var(--fg-muted); text-transform: uppercase; letter-spacing: 0.03em; }
.ups-m-3w-dest {
  font-size: 12px; font-weight: 600; color: var(--fg);
  background: var(--bg-elev2); border: 1px solid var(--line);
  border-radius: 999px; padding: 4px 12px; cursor: pointer;
}
.ups-m-3w-dest.on { background: var(--accent); border-color: var(--accent); color: var(--bg); }

/* notes label (step 4) */
.ups-m-3w-noteslbl { display: block; font-size: 12px; font-weight: 600; color: var(--fg); margin: 4px 0 6px; }
.ups-m-3w-noteslbl .opt { font-weight: 400; color: var(--fg-muted); }

/* 3-way outbox cards (Trades view) */
.ups-m-3wc { padding: 12px 13px; }
.ups-m-3wc-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
.ups-m-3wc-head .st { font-size: 13px; font-weight: 700; color: var(--accent); }
.ups-m-3wc-head .rl { font-size: 11px; color: var(--fg-muted); }
.ups-m-3wc-movs { display: flex; flex-direction: column; gap: 5px; }
.ups-m-3wc-mov { font-size: 13px; line-height: 1.3; }
.ups-m-3wc-mov .rt { color: var(--fg-muted); font-weight: 600; }
.ups-m-3wc-mov .as { color: var(--fg); margin-left: 6px; }
.ups-m-3wc-note {
  font-size: 12px; color: var(--fg-muted); font-style: italic;
  margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--line);
}
.ups-m-3wc-actions { margin-top: 10px; }
.ups-m-3wc-actions .btn-act { width: 100%; }
.ups-m-3w-review { display: flex; flex-direction: column; gap: 8px; margin-bottom: 12px; }
.ups-m-3w-revrow {
  background: var(--bg-elev2); border: 1px solid var(--line);
  border-radius: 8px; padding: 9px 11px;
}
.ups-m-3w-revrow .lbl {
  font-size: 11px; font-weight: 700; letter-spacing: 0.02em;
  color: var(--accent); margin-bottom: 3px;
}
.ups-m-3w-revrow .val { font-size: 13px; color: var(--fg); line-height: 1.35; }
.ups-m-3w-revrow .val .muted { color: var(--line-soft); }
/* Per-movement cap money (BlindBid$), §A6-clamped. 16px input dodges iOS zoom. */
.ups-m-3w-capctl { display: flex; align-items: center; gap: 6px; margin-top: 8px; flex-wrap: wrap; }
.ups-m-3w-capctl .cl { font-size: 12px; color: var(--fg-muted); font-weight: 700; }
.ups-m-3w-capin {
  width: 80px; padding: 7px 9px; background: var(--bg); color: var(--fg);
  border: 1px solid var(--line); border-radius: 7px;
  font-size: 16px; font-weight: 700; font-variant-numeric: tabular-nums; -webkit-appearance: none;
}
.ups-m-3w-capin:focus { outline: none; border-color: var(--accent); }
.ups-m-3w-capctl .ck { font-size: 12px; color: var(--fg-muted); font-weight: 700; }
.ups-m-3w-capctl .cm { font-size: 10px; color: var(--teal); font-weight: 700; margin-left: auto; }

/* ═══════════════════════════════════════════════════════════════════════
   HOME COMMAND CENTER (views/home.js) + Market / Events mini-hubs.
   A dense salary-cap operations console — neutral dark base, one accent
   color per action family, letter-mark icons, strong tap targets, and
   no horizontal overflow (every text node ellipsizes).
   ═══════════════════════════════════════════════════════════════════════ */
.ups-m-home { padding: 14px 12px 0; }

/* ── Owner status panel ── */
.ups-m-home-status {
  background: linear-gradient(180deg, #18202f 0%, #121826 100%);
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 14px;
}
.ups-m-home-status-head { display: flex; align-items: center; gap: 12px; }
.ups-m-home-mark {
  width: 46px; height: 46px; border-radius: 10px;
  flex: 0 0 auto; object-fit: contain; background: var(--bg-elev2);
  display: flex; align-items: center; justify-content: center;
}
.ups-m-home-mark.letter {
  font-size: 16px; font-weight: 800; color: var(--accent);
  border: 1px solid var(--line); letter-spacing: 0.02em;
}
.ups-m-home-status-text { flex: 1; min-width: 0; }
.ups-m-kicker {
  font-size: 10px; font-weight: 800; letter-spacing: 0.14em;
  text-transform: uppercase; color: var(--fg-muted);
}
.ups-m-home-team {
  font-size: 21px; font-weight: 800; margin: 2px 0 0; color: var(--fg);
  line-height: 1.15; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ups-m-home-subline {
  font-size: 12px; color: var(--fg-muted); margin-top: 3px;
  display: flex; flex-wrap: wrap; align-items: center; gap: 5px;
}
.ups-m-home-subline .dot { opacity: 0.45; }

/* signal grid */
.ups-m-signal-grid {
  display: grid; grid-template-columns: repeat(4, 1fr);
  gap: 8px; margin-top: 14px;
}
.ups-m-signal {
  background: var(--bg-elev2); border: 1px solid var(--line);
  border-radius: 10px; padding: 9px 5px; text-align: center; min-width: 0;
}
.ups-m-signal-value {
  font-size: 16px; font-weight: 800; color: var(--fg); line-height: 1.1;
  font-variant-numeric: tabular-nums; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis;
}
.ups-m-signal-label {
  font-size: 9px; font-weight: 700; letter-spacing: 0.05em;
  text-transform: uppercase; color: var(--fg-muted); margin-top: 4px;
}
.ups-m-signal.ok .ups-m-signal-value { color: var(--ok); }
.ups-m-signal.warn .ups-m-signal-value { color: var(--warn); }
.ups-m-signal.danger .ups-m-signal-value { color: var(--danger); }
.ups-m-signal.info .ups-m-signal-value { color: var(--teal); }

/* next-event "what matters next" strip */
.ups-m-phase-strip {
  display: flex; align-items: center; gap: 10px;
  margin-top: 12px; padding: 10px 12px;
  background: var(--bg-elev2); border: 1px solid var(--line);
  border-radius: 10px; text-decoration: none; color: var(--fg);
  -webkit-tap-highlight-color: transparent;
}
.ups-m-phase-strip:active { filter: brightness(1.08); }
.ups-m-phase-strip.soon { border-color: rgba(91,141,255,0.45); }
.ups-m-phase-strip.now {
  border-color: rgba(95,227,192,0.5);
  background: linear-gradient(90deg, rgba(95,227,192,0.12), var(--bg-elev2) 70%);
}
.ups-m-phase-cal { font-size: 16px; flex: 0 0 auto; }
.ups-m-phase-body { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.ups-m-phase-lbl {
  font-size: 9px; font-weight: 800; letter-spacing: 0.1em;
  text-transform: uppercase; color: var(--fg-muted);
}
.ups-m-phase-evt {
  font-size: 14px; font-weight: 700; color: var(--fg);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ups-m-phase-when {
  font-size: 12px; font-weight: 700; color: var(--accent); flex: 0 0 auto;
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.ups-m-phase-strip.now .ups-m-phase-when { color: var(--teal); }

/* primary CTA */
.ups-m-home-cta-row { margin-top: 12px; }
.ups-m-home-primary {
  display: block; width: 100%; text-align: center;
  padding: 13px; border-radius: 11px;
  background: var(--accent); color: #08101f;
  font-size: 15px; font-weight: 800; text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-home-primary:active { filter: brightness(0.93); }

/* ── Command cards ── */
.ups-m-command-grid { display: flex; flex-direction: column; gap: 12px; margin-top: 14px; }
.ups-m-command-card {
  --tone: var(--fg-muted);
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-left: 3px solid var(--tone);
  border-radius: 12px;
  padding: 12px 12px 6px;
  overflow: hidden;
}
.ups-m-command-card.tone-field  { --tone: var(--teal); }
.ups-m-command-card.tone-gold   { --tone: #e8c267; }
.ups-m-command-card.tone-ember  { --tone: #ff8a5b; }
.ups-m-command-card.tone-sky    { --tone: var(--accent); }
.ups-m-command-card.tone-violet { --tone: #b39ddb; }
.ups-m-command-card.tone-mint   { --tone: #5fe3c0; }
.ups-m-command-card.tone-base   { --tone: var(--fg-muted); }
/* pending-inbox alert lives on the CARD (header flag + glow), never on a row */
.ups-m-command-card.alert {
  border-color: var(--danger); border-left-color: var(--danger);
  box-shadow: 0 0 0 1px rgba(255,107,107,0.30), 0 6px 18px rgba(255,107,107,0.12);
}
.ups-m-command-head {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 10px; margin-bottom: 8px;
}
.ups-m-command-head-text { min-width: 0; }
.ups-m-command-title {
  font-size: 15px; font-weight: 800; color: var(--fg);
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
.ups-m-command-sub { font-size: 11px; color: var(--fg-muted); margin-top: 2px; }
.ups-m-command-flag {
  font-size: 10px; font-weight: 800; color: #fff; background: var(--danger);
  border-radius: 999px; padding: 2px 8px; text-transform: uppercase;
  letter-spacing: 0.02em; white-space: nowrap;
}
.ups-m-command-open {
  flex: 0 0 auto; align-self: center;
  font-size: 11px; font-weight: 800; letter-spacing: 0.04em;
  text-transform: uppercase; text-decoration: none; color: var(--tone);
  border: 1px solid var(--line); border-radius: 8px; padding: 6px 10px;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-command-open:active { background: var(--bg-elev2); }

/* action rows */
.ups-m-action-list { display: flex; flex-direction: column; }
.ups-m-action-row {
  display: flex; align-items: center; gap: 11px;
  padding: 10px 2px; min-height: 48px;
  border-top: 1px solid var(--line);
  text-decoration: none; color: var(--fg);
  -webkit-tap-highlight-color: transparent;
}
.ups-m-action-row:first-child { border-top: 0; }
.ups-m-action-row:active { background: var(--bg-elev2); }
.ups-m-action-icon {
  flex: 0 0 auto; width: 30px; height: 30px; border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  font-size: 13px; font-weight: 800; color: var(--tone);
  background: var(--bg-elev2); border: 1px solid var(--line);
  font-variant-numeric: tabular-nums;
}
.ups-m-action-copy { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.ups-m-action-label {
  font-size: 14px; font-weight: 600; color: var(--fg);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ups-m-action-meta {
  font-size: 11px; color: var(--fg-muted); margin-top: 1px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ups-m-action-badge {
  flex: 0 0 auto; min-width: 20px; height: 20px; padding: 0 6px;
  border-radius: 10px; background: var(--bg-elev2); border: 1px solid var(--line);
  color: var(--fg-muted); font-size: 11px; font-weight: 800; line-height: 18px;
  text-align: center; font-variant-numeric: tabular-nums;
}
.ups-m-action-badge.warn { color: var(--warn); border-color: rgba(255,184,107,0.4); }
.ups-m-action-badge.alert { color: #fff; background: var(--danger); border-color: var(--danger); }
.ups-m-action-chev { flex: 0 0 auto; color: var(--line-soft); font-size: 18px; }

.ups-m-command-note {
  font-size: 11px; color: var(--fg-muted); line-height: 1.45;
  padding: 8px 2px 6px; border-top: 1px solid var(--line); margin-top: 2px;
}
.ups-m-home-foot {
  text-align: center; font-size: 11px; color: var(--line-soft);
  padding: 16px 0 8px; letter-spacing: 0.02em;
}

/* ── Mini-hub headers (Market / Events) ── */
.ups-m-section-head { padding: 2px 2px; }
.ups-m-section-head h1 { font-size: 22px; font-weight: 800; margin: 2px 0 0; color: var(--fg); }
.ups-m-section-sub { font-size: 12px; color: var(--fg-muted); margin-top: 4px; line-height: 1.4; }
.ups-m-hub-points {
  margin: 4px 0 6px; padding: 0 2px 0 18px;
  font-size: 13px; line-height: 1.6; color: var(--fg);
}
.ups-m-hub-points li { margin-bottom: 4px; }
.ups-m-hub-points i { color: var(--accent); font-style: normal; font-weight: 700; }

/* ── Events calendar ── */
.ups-m-cal-list { display: flex; flex-direction: column; }
.ups-m-cal-row {
  display: flex; align-items: center; gap: 12px;
  padding: 11px 2px; border-top: 1px solid var(--line);
  text-decoration: none; color: var(--fg);
  -webkit-tap-highlight-color: transparent;
}
.ups-m-cal-row:first-child { border-top: 0; }
.ups-m-cal-row:active { background: var(--bg-elev2); }
.ups-m-cal-date {
  flex: 0 0 auto; width: 62px; text-align: center;
  display: flex; flex-direction: column; gap: 2px;
}
.ups-m-cal-date .d {
  font-size: 13px; font-weight: 800; color: var(--fg);
  font-variant-numeric: tabular-nums;
}
.ups-m-cal-date .w {
  font-size: 9px; font-weight: 700; letter-spacing: 0.04em;
  text-transform: uppercase; color: var(--fg-muted);
}
.ups-m-cal-body {
  flex: 1; min-width: 0;
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
}
.ups-m-cal-evt {
  font-size: 14px; font-weight: 600; color: var(--fg);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ups-m-cal-go { flex: 0 0 auto; font-size: 11px; font-weight: 700; color: var(--accent); }
.ups-m-cal-row.now {
  border-left: 3px solid var(--teal); padding-left: 8px;
  background: linear-gradient(90deg, rgba(95,227,192,0.10), transparent 60%);
}
.ups-m-cal-row.now .ups-m-cal-go,
.ups-m-cal-row.now .ups-m-cal-date .d { color: var(--teal); }
.ups-m-cal-row.soon .ups-m-cal-date .d { color: var(--accent); }
.ups-m-cal-row.past { opacity: 0.5; }

/* ═══════════════════════════════════════════════════════════════════════
   HOME v2 — launcher grid + identity + icon system (declutter pass).
   Reuses .ups-m-home / .ups-m-kicker / .ups-m-home-team / .ups-m-home-mark /
   .ups-m-cap-card / .ups-m-action-center / .ups-m-section-head / .ups-m-cal-*.
   The older .ups-m-command-*/.ups-m-signal-*/.ups-m-phase-* rules are no longer
   emitted by home.js (dead, harmless).
   ═══════════════════════════════════════════════════════════════════════ */

/* inline icons */
.ups-ic { display: inline-block; vertical-align: middle; flex: 0 0 auto; }
.ups-ic-inline { width: 16px; height: 16px; margin-right: 8px; vertical-align: -3px; }
.ups-m-ac-icon .ups-ic { width: 18px; height: 18px; }
.ups-m-desktop-link .ups-ic-inline { color: var(--fg-muted); }

/* tone tokens, lifted so any element can tint by family */
.tone-field  { --tone: var(--teal); }
.tone-gold   { --tone: #e8c267; }
.tone-ember  { --tone: #ff8a5b; }
.tone-sky    { --tone: var(--accent); }
.tone-violet { --tone: #b39ddb; }
.tone-mint   { --tone: #5fe3c0; }
.tone-base   { --tone: var(--fg-muted); }

/* Home zone spacing — align cap card + attention queue to the 12px gutter */
.ups-m-home .ups-m-cap-card { margin: 0 0 12px; }
.ups-m-home .ups-m-action-center { margin: 0 0 14px; }

/* identity bar */
.ups-m-identity {
  display: flex; align-items: center; justify-content: space-between;
  gap: 10px; margin-bottom: 14px;
}
.ups-m-identity-main { display: flex; align-items: center; gap: 11px; min-width: 0; }
.ups-m-home-mark.glyph {
  display: flex; align-items: center; justify-content: center;
  color: var(--accent); border: 1px solid var(--line);
}
.ups-m-identity-text { min-width: 0; }
.ups-m-identity-text .ups-m-home-team { font-size: 19px; margin-top: 1px; }
.ups-m-identity-actions { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; }
.ups-m-icon-btn {
  display: flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; border-radius: 10px;
  background: var(--bg-elev); border: 1px solid var(--line);
  color: var(--fg-muted); text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-icon-btn:active { background: var(--bg-elev2); }
.ups-m-signin-pill {
  display: flex; align-items: center; gap: 6px;
  padding: 8px 12px; border-radius: 10px;
  background: var(--accent); color: #08101f;
  font-size: 13px; font-weight: 800; text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-signin-pill:active { filter: brightness(0.93); }

/* sign-in button on the franchise picker */
.ups-m-signin-btn {
  display: flex; align-items: center; justify-content: center; gap: 8px;
  width: 100%; padding: 13px; border-radius: 11px;
  background: var(--accent); color: #08101f;
  font-size: 15px; font-weight: 800; text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-signin-btn:active { filter: brightness(0.93); }

/* cap HERO (Home) — Cap Room dominant; reuses .ups-m-cap-bar/-foot */
.ups-m-cap-card.hero { padding: 16px 14px 12px; }
.ups-m-cap-hero-room .lbl {
  font-size: 10px; font-weight: 800; letter-spacing: 0.1em;
  text-transform: uppercase; color: var(--fg-muted);
}
.ups-m-cap-hero-room .val {
  font-size: 30px; font-weight: 800; line-height: 1.05; margin-top: 2px;
  font-variant-numeric: tabular-nums; color: var(--fg);
}
.ups-m-cap-hero-room .val.ok { color: var(--ok); }
.ups-m-cap-hero-room .val.warn { color: var(--warn); }
.ups-m-cap-hero-room .val.danger { color: var(--danger); }

/* launcher grid + tiles */
.ups-m-launch-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 4px; }
.ups-m-launch-tile {
  --tone: var(--fg-muted);
  position: relative; display: flex; flex-direction: column; gap: 7px;
  padding: 14px 12px; min-height: 92px;
  background: var(--bg-elev); border: 1px solid var(--line);
  border-radius: 14px; text-decoration: none; color: var(--fg);
  -webkit-tap-highlight-color: transparent;
}
.ups-m-launch-tile:active { background: var(--bg-elev2); }
.ups-m-launch-ic {
  width: 34px; height: 34px; border-radius: 10px;
  display: flex; align-items: center; justify-content: center;
  color: var(--tone); background: var(--bg-elev2); border: 1px solid var(--line);
}
.ups-m-launch-label { font-size: 15px; font-weight: 800; color: var(--fg); }
.ups-m-launch-sub {
  font-size: 11px; color: var(--fg-muted);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ups-m-launch-dot {
  position: absolute; top: 13px; right: 13px;
  width: 9px; height: 9px; border-radius: 50%;
  background: var(--danger); box-shadow: 0 0 0 3px var(--bg-elev);
}
/* Red count badge — received-offer alert on the Trades tile. */
.ups-m-launch-badge {
  position: absolute; top: 9px; right: 9px;
  min-width: 18px; height: 18px; padding: 0 5px; box-sizing: border-box;
  border-radius: 9px; background: var(--danger); color: #fff;
  font: 700 11px/18px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  text-align: center; box-shadow: 0 0 0 2px var(--bg-elev);
}

/* taxi / IR buckets */
.ups-m-bucket-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 16px 6px; font-size: 12px; font-weight: 800;
  letter-spacing: 0.04em; text-transform: uppercase; color: var(--fg-muted);
}
.ups-m-bucket-head .ct {
  font-size: 11px; min-width: 20px; height: 20px; line-height: 18px;
  padding: 0 6px; text-align: center; border-radius: 10px;
  background: var(--bg-elev2); border: 1px solid var(--line); color: var(--fg-muted);
}
.ups-m-bucket-empty {
  margin: 0 12px 4px; padding: 14px; text-align: center;
  font-size: 12px; color: var(--fg-muted); line-height: 1.5;
  background: var(--bg-elev); border: 1px solid var(--line); border-radius: 10px;
}
.ups-m-player-row.rich .chip.danger {
  color: var(--danger); border-color: rgba(255,107,107,0.4); background: rgba(255,107,107,0.08);
}

/* market explainer / info card */
.ups-m-info-card {
  margin-top: 12px; padding: 14px; border-radius: 14px;
  background: var(--bg-elev); border: 1px solid var(--line);
}
.ups-m-info-title { font-size: 14px; font-weight: 800; color: var(--fg); margin-bottom: 6px; }
.ups-m-info-note {
  font-size: 11px; color: var(--fg-muted); line-height: 1.45;
  padding-top: 8px; margin-top: 6px; border-top: 1px solid var(--line);
}

/* calendar row icon */
.ups-m-cal-ic {
  flex: 0 0 auto; width: 30px; height: 30px; border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  color: var(--fg-muted); background: var(--bg-elev2); border: 1px solid var(--line);
}
.ups-m-cal-row.now .ups-m-cal-ic { color: var(--teal); }
.ups-m-cal-row.soon .ups-m-cal-ic { color: var(--accent); }

/* nav SVG sizing (replaces emoji font-size) */
.ups-m-nav-icon .ups-ic { width: 22px; height: 22px; }
@media (max-width: 320px) {
  .ups-m-nav-icon .ups-ic { width: 20px; height: 20px; }
  .ups-m-launch-label { font-size: 14px; }
}

/* Contract deadlines strip (Contracts hub) */
.ups-m-deadlines {
  margin: 10px 12px 0;
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: 12px;
  padding: 10px 12px;
}
.ups-m-deadlines-title {
  font-size: 10px; font-weight: 800; letter-spacing: 0.1em;
  text-transform: uppercase; color: var(--fg-muted); margin-bottom: 4px;
}
.ups-m-deadline-row {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 8px 0; border-top: 1px solid var(--line);
  text-decoration: none; color: var(--fg);
  -webkit-tap-highlight-color: transparent;
}
.ups-m-deadline-row:first-of-type { border-top: 0; }
.ups-m-deadline-row .dl-evt {
  font-size: 13px; font-weight: 600;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ups-m-deadline-row .dl-when {
  font-size: 11px; color: var(--fg-muted); flex: 0 0 auto;
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.ups-m-deadline-row.now .dl-when { color: var(--teal); font-weight: 700; }
.ups-m-deadline-row.soon .dl-when { color: var(--accent); }

/* Per-player extension deadline (Extend list rows) */
.ups-m-ext-dl { font-size: 10px; color: var(--fg-muted); margin-top: 3px; font-style: italic; }
.ups-m-player-row .right .ext-dl-date {
  font-size: 12px; font-weight: 700; color: var(--fg); font-variant-numeric: tabular-nums; white-space: nowrap;
}
.ups-m-player-row .right .ext-dl-days {
  font-size: 11px; font-weight: 700; margin-top: 1px; color: var(--fg-muted); font-variant-numeric: tabular-nums;
}
.ups-m-player-row .right .ext-dl-days.now { color: var(--danger); }
.ups-m-player-row .right .ext-dl-days.soon { color: var(--warn); }
.ups-m-player-row .right .ext-dl-days.past { color: var(--fg-muted); opacity: 0.6; }

/* Players — FA/All scope toggle + propose-trade on rostered players */
.ups-m-seg-toggle { display: flex; gap: 6px; margin-bottom: 8px; }
.ups-m-seg-btn {
  flex: 1; padding: 8px 10px;
  background: var(--bg); color: var(--fg-muted);
  border: 1px solid var(--line); border-radius: 8px;
  font-size: 12px; font-weight: 700; cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-seg-btn.on { background: var(--accent); color: #08101f; border-color: var(--accent); }
.ups-m-fa-row.has-act { grid-template-columns: 28px 36px 1fr auto; }
.ups-m-fa-row .sub .owned { color: var(--accent); font-weight: 600; }
.ups-m-fa-row .sub .owned.you { color: var(--teal); }
/* MFL's rosters read not confirmed complete (views/players.js rostersNoteHtml) */
.ups-m-fa-row .sub .owned.unk { color: var(--fg-muted); }
.ups-m-fa-own-act { margin-top: 12px; display: flex; justify-content: center; }
.ups-m-fa-own-act .ups-m-btn-secondary { flex: 0 0 auto; padding: 9px 18px; }
.ups-m-fa-own-note.inline {
  display: flex; align-items: center; gap: 10px; margin: 0 12px 8px; padding: 8px 10px;
  border: 1px solid var(--line); border-radius: 8px; font-size: 12.5px; line-height: 1.45; color: var(--fg-muted);
}
.ups-m-fa-own-note.inline span { flex: 1 1 auto; min-width: 0; }
.ups-m-fa-own-note.inline .ups-m-btn-secondary { flex: 0 0 auto; padding: 7px 12px; font-size: 12.5px; }
.ups-m-fa-trade {
  align-self: center; flex: 0 0 auto;
  padding: 9px 11px; border-radius: 8px;
  background: rgba(91,141,255,0.12); color: var(--accent);
  border: 1px solid rgba(91,141,255,0.4);
  font-size: 11px; font-weight: 700; cursor: pointer;
  -webkit-tap-highlight-color: transparent; white-space: nowrap;
}
.ups-m-fa-trade:active { background: rgba(91,141,255,0.22); }

/* ── Live Scoring scoreboard (#scores) ─────────────────────────────────── */
.ups-m-sb-controls { display: flex; gap: 8px; margin: 10px 0 12px; }
.ups-m-sb-sel { flex: 1; background: var(--bg-elev); color: var(--fg); border: 1px solid var(--line);
  border-radius: 8px; padding: 9px 10px; font-size: 13px; font-weight: 600; -webkit-appearance: none; appearance: none; }
.ups-m-sb-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 2px 0 10px; }
.ups-m-sb-top .wk { font-size: 13px; font-weight: 700; color: var(--fg); }
.ups-m-sb-livedot { font-size: 11px; font-weight: 800; color: var(--ok); white-space: nowrap; }
.ups-m-sb-final { font-size: 11px; font-weight: 800; color: var(--fg-muted); white-space: nowrap; }
.ups-m-sb-meta { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--fg-muted); }
.ups-m-sb-refresh { background: none; border: 1px solid var(--line); color: var(--fg-muted); border-radius: 999px;
  width: 24px; height: 24px; line-height: 1; font-size: 14px; cursor: pointer; display: inline-flex;
  align-items: center; justify-content: center; padding: 0; }
.ups-m-sb-refresh[disabled] { opacity: 0.5; cursor: default; animation: ups-m-spin 0.8s linear infinite; }
@keyframes ups-m-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
.ups-m-sb-sec { display: flex; align-items: center; justify-content: space-between; margin: 18px 2px 7px;
  font-size: 11px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; color: var(--fg-muted); }
.ups-m-sb-toggle button { background: transparent; border: 1px solid var(--line); color: var(--fg-muted);
  border-radius: 6px; padding: 3px 9px; font-size: 11px; font-weight: 700; cursor: pointer; font-family: inherit; margin-left: 4px; }
.ups-m-sb-toggle button.on { color: var(--accent); border-color: var(--accent); }
.ups-m-sb-note { font-size: 12.5px; color: var(--fg-muted); background: var(--bg-elev); border: 1px solid var(--line);
  border-radius: 10px; padding: 11px 13px; margin-bottom: 8px; line-height: 1.45; }

/* team rows (My + opponents) */
.ups-m-sb-row { background: var(--bg-elev); border: 1px solid var(--line); border-radius: 10px; margin-bottom: 8px; overflow: hidden; }
.ups-m-sb-row.mine { background: rgba(91,141,255,0.07); border-color: rgba(91,141,255,0.35); }
.ups-m-sb-row-tap { padding: 11px 12px; cursor: pointer; -webkit-tap-highlight-color: transparent; }
.ups-m-sb-row-tap:active { background: rgba(255,255,255,0.03); }
.ups-m-sb-row-main { display: flex; align-items: center; gap: 8px; }
.ups-m-sb-caret { color: var(--fg-muted); font-size: 11px; flex: 0 0 auto; width: 12px; }
.ups-m-sb-team { flex: 1 1 auto; min-width: 0; font-weight: 700; font-size: 14px; color: var(--fg);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ups-m-sb-team .lbl { color: var(--fg-muted); font-weight: 600; margin-right: 2px; }
.ups-m-sb-num { flex: 0 0 auto; text-align: right; font-size: 15px; font-weight: 800; font-variant-numeric: tabular-nums; color: var(--fg); }
.ups-m-sb-num small { display: block; font-size: 10.5px; font-weight: 600; color: var(--fg-muted); margin-top: 1px; }
.ups-m-sb-pill { font-size: 9.5px; font-weight: 800; padding: 1px 6px; border-radius: 999px; margin-left: 4px;
  text-transform: uppercase; letter-spacing: 0.03em; }
.ups-m-sb-pill.win { color: var(--ok); border: 1px solid rgba(139,229,139,0.45); }
.ups-m-sb-pill.lose { color: var(--warn); border: 1px solid rgba(255,184,107,0.45); }
.ups-m-sb-pill.tie { color: var(--fg-muted); border: 1px solid var(--line-soft); }
.ups-m-sb-h2h { font-size: 9.5px; font-weight: 800; color: var(--accent); border: 1px solid rgba(91,141,255,0.45);
  border-radius: 999px; padding: 1px 6px; margin-left: 5px; letter-spacing: 0.03em; white-space: nowrap; }
.ups-m-sb-wp { display: flex; align-items: center; gap: 8px; margin-top: 8px; }
.ups-m-sb-wpbar { flex: 1; height: 6px; background: var(--bg-elev2); border-radius: 4px; overflow: hidden; border: 1px solid var(--line); }
.ups-m-sb-wpbar .fill { height: 100%; background: var(--accent); }
.ups-m-sb-wp .wpn { font-size: 12px; font-weight: 800; color: var(--accent); font-variant-numeric: tabular-nums; min-width: 32px; text-align: right; }

/* expanded roster under a team row */
.ups-m-sb-ros { border-top: 1px solid var(--line); background: var(--bg); }
/* roster order toggle + position group headers */
.ups-m-sb-order { display: flex; align-items: center; justify-content: flex-end; gap: 6px; padding: 8px 12px 6px;
  font-size: 10.5px; font-weight: 700; color: var(--fg-muted); border-bottom: 1px solid var(--line); }
.ups-m-sb-grp { display: flex; justify-content: space-between; align-items: baseline; padding: 9px 12px 4px;
  font-size: 10px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; color: var(--fg-muted);
  background: rgba(255,255,255,0.025); border-bottom: 1px solid var(--line); font-variant-numeric: tabular-nums; }
.ups-m-sb-grp small { font-size: 10px; font-weight: 600; letter-spacing: 0; opacity: 0.65; margin-left: 6px; }
.ups-m-sb-ros-empty { padding: 12px; text-align: center; color: var(--fg-muted); font-size: 12px; }
.ups-m-sb-pl { display: flex; align-items: center; gap: 8px; padding: 9px 12px; border-bottom: 1px solid var(--line);
  cursor: pointer; -webkit-tap-highlight-color: transparent; }
.ups-m-sb-pl:active { background: rgba(255,255,255,0.03); }
.ups-m-sb-pl.open { background: rgba(91,141,255,0.06); }
.ups-m-sb-pl-caret { color: var(--fg-muted); font-size: 10px; flex: 0 0 auto; width: 11px; }
.ups-m-sb-pl-id { flex: 1 1 auto; min-width: 0; }
.ups-m-sb-pl-id .nm { display: block; font-size: 13px; font-weight: 700; color: var(--fg);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ups-m-sb-pl-id .meta { display: block; font-size: 10.5px; color: var(--fg-muted); margin-top: 1px; }
.ups-m-sb-pl-id .st.done { color: var(--fg-muted); }
.ups-m-sb-pl-id .st.now { color: var(--ok); font-weight: 700; }
.ups-m-sb-pl-id .st.yet { color: var(--fg-muted); opacity: 0.8; }
.ups-m-sb-pl-pts { flex: 0 0 auto; text-align: right; font-size: 14px; font-weight: 800; font-variant-numeric: tabular-nums; color: var(--fg); }
.ups-m-sb-pl-pts small { display: block; font-size: 10px; font-weight: 600; color: var(--accent); margin-top: 1px; }
.ups-m-sb-inj { font-size: 8.5px; font-weight: 800; color: var(--danger); border: 1px solid rgba(255,107,107,0.4);
  border-radius: 4px; padding: 0 3px; margin-left: 3px; vertical-align: middle; }

/* per-player breakdown (MFL Detailed Results) */
.ups-m-sb-bd { background: rgba(91,141,255,0.06); border-left: 2px solid var(--accent);
  border-bottom: 1px solid var(--line); padding: 9px 12px 11px; }
.ups-m-sb-bd-game { font-size: 10.5px; color: var(--fg-muted); margin-bottom: 7px; }
.ups-m-sb-bd-line { display: flex; justify-content: space-between; gap: 10px; padding: 4px 0;
  font-size: 12.5px; border-bottom: 1px solid rgba(255,255,255,0.05); }
.ups-m-sb-bd-line .st { color: var(--fg); }
.ups-m-sb-bd-line .pt { font-variant-numeric: tabular-nums; font-weight: 700; white-space: nowrap; }
.ups-m-sb-bd-line .pt.p { color: var(--ok); }
.ups-m-sb-bd-line .pt.n { color: var(--danger); }
.ups-m-sb-bd-line.bonus .st { color: var(--fg-muted); font-style: italic; }
.ups-m-sb-prank { font-size: 9px; font-weight: 700; color: var(--fg-muted); margin-left: 5px; white-space: nowrap; }
.ups-m-sb-bd-sub { display: flex; justify-content: space-between; gap: 10px; padding: 8px 0 2px;
  font-weight: 800; font-size: 13px; font-variant-numeric: tabular-nums; color: var(--fg); }
.ups-m-sb-bd-exp { text-align: right; padding: 3px 0 1px; font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums; }
.ups-m-sb-bd-exp.p { color: var(--ok); }
.ups-m-sb-bd-exp.n { color: var(--danger); }
.ups-m-sb-bd-foot { display: flex; justify-content: space-between; align-items: center; gap: 8px;
  margin-top: 8px; font-size: 10px; color: var(--fg-muted); }
.ups-m-sb-bd-foot a { color: var(--accent); text-decoration: none; }
.ups-m-sb-bd-loading, .ups-m-sb-bd-msg { padding: 9px 2px; text-align: center; color: var(--fg-muted); font-size: 12px; }
.ups-m-sb-bd-msg a { color: var(--accent); }

/* All-Play board */
.ups-m-sb-ap { background: var(--bg-elev); border: 1px solid var(--line); border-radius: 10px; overflow: hidden; }
.ups-m-sb-ap-row { display: grid; grid-template-columns: 20px 1fr 46px 46px 50px; align-items: center; gap: 6px;
  padding: 8px 11px; border-bottom: 1px solid var(--line); font-size: 12.5px; }
.ups-m-sb-ap-row:last-child { border-bottom: 0; }
.ups-m-sb-ap-row.head { font-size: 9.5px; font-weight: 800; letter-spacing: 0.05em; text-transform: uppercase; color: var(--fg-muted); }
.ups-m-sb-ap-row.mine { background: rgba(91,141,255,0.10); }
.ups-m-sb-ap-row.tap { cursor: pointer; -webkit-tap-highlight-color: transparent; }
.ups-m-sb-ap-row.tap:active { background: rgba(255,255,255,0.03); }
.ups-m-sb-ap-row.open { background: rgba(91,141,255,0.08); }
.ups-m-sb-apcaret { display: inline-block; width: 11px; color: var(--fg-muted); font-size: 10px; }
.ups-m-sb-ap-ros { border-bottom: 1px solid var(--line); }
.ups-m-sb-ap-row .rk { color: var(--fg-muted); font-variant-numeric: tabular-nums; }
.ups-m-sb-ap-row .nm { font-weight: 700; color: var(--fg); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ups-m-sb-ap-row .lv, .ups-m-sb-ap-row .pj, .ups-m-sb-ap-row .bt { text-align: right; font-variant-numeric: tabular-nums; }
.ups-m-sb-ap-row .lv { color: var(--fg); }
.ups-m-sb-ap-row .pj { color: var(--accent); font-weight: 700; }
.ups-m-sb-ap-row .bt { color: var(--fg-muted); }

.ups-m-sb-actions { margin: 14px 0 4px; text-align: center; }
.ups-m-sb-actions a { color: var(--accent); text-decoration: none; font-size: 12.5px; font-weight: 600; }

/* ═════════════════════════════════════════════════════════════════════════
   In-app waivers (2026-07-30) — Market CTAs, bid sheet, claims screen.
   Layering: player sheet 100 < claims 104 < bid 108 < drop picker 110
   (the drop picker is opened FROM the bid sheet, which is opened FROM the
   claims screen, so each must sit above its parent) < toast 1200.
   The toast really does stay on top NOW — this comment asserted it from day
   one while .ups-m-toast sat at z-index:50, so every confirmation this flow
   emitted was invisible. Fixed 2026-08-01; see the note on .ups-m-toast.
   ═════════════════════════════════════════════════════════════════════════ */

/* One-shot success line after a fully-verified submit drops you back on the
   Market. Sits directly above the window strip so the eye lands on it where
   the claims screen used to be. Time-boxed in JS (see waiverFlash). */
.ups-m-waiver-flash {
  padding: 8px 12px;
  background: rgba(139, 229, 139, 0.1);       /* --ok #8be58b, matching .ups-m-lineup-msg.ok */
  border-top: 1px solid var(--line);
  border-left: 3px solid var(--ok);
  color: var(--ok);
  font-size: 12px;
  font-weight: 600;
  animation: ups-m-flash-in 240ms ease-out;
}
/* Submitted successfully, but MFL attached an advisory §6 note (roster
   headroom / cap room / unread limits). Still a success — different colour so
   it reads as "done, and read this" rather than "done". */
.ups-m-waiver-flash.warn {
  background: rgba(255, 184, 107, 0.12);       /* --warn #ffb86b */
  border-left-color: var(--warn);
  color: var(--warn);
  font-weight: 500;
  line-height: 1.45;
}
@keyframes ups-m-flash-in {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  .ups-m-waiver-flash { animation: none; }
}

/* ----- Window context strip (sits under the Market toolbar) ----- */
.ups-m-waiver-strip {
  display: flex;
  align-items: center;
  /* The claims CTA is a full-size button now; on a narrow phone let it drop to
     its own line rather than squeezing the window text to a few characters. */
  flex-wrap: wrap;
  gap: 10px;
  padding: 8px 12px;
  background: var(--bg-elev);
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  font-size: 12px;
  color: var(--fg-muted);
}
.ups-m-waiver-strip .txt { flex: 1 1 auto; min-width: 0; }
.ups-m-waiver-strip.bbid { border-left: 3px solid var(--accent); }
.ups-m-waiver-strip.fcfs { border-left: 3px solid var(--teal); }
.ups-m-waiver-strip.blackout,
.ups-m-waiver-strip.closed { border-left: 3px solid var(--warn); color: var(--warn); }
/* write_enabled:false — a live window we can't write to. Read-only styling +
   the link out to MFL replaces the CTA that would only have 503'd. */
.ups-m-waiver-strip.readonly { border-left-color: var(--warn); }
.ups-m-waiver-native {
  color: var(--accent);
  font-weight: 700;
  text-decoration: none;
  white-space: nowrap;
}
/* The one control that actually sends claims to MFL. Was a small outlined
   chip and got missed (Keith 2026-07-30) — now a filled primary CTA, sized so
   it reads as THE action in the waiver strip. The strip sits above the list,
   so it is on screen the moment the tab loads without scrolling. */
.ups-m-waiver-claims-cta {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  background: var(--accent);
  color: #fff;
  border: 1px solid var(--accent);
  border-radius: 999px;
  padding: 9px 16px;
  font-size: 13px;
  font-weight: 800;
  font-family: inherit;
  cursor: pointer;
  min-height: 38px;
  box-shadow: 0 2px 10px rgba(91, 141, 255, 0.35);
  -webkit-tap-highlight-color: transparent;
}
.ups-m-waiver-claims-cta .n {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  padding: 0 6px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.22);
  font-size: 11px;
  font-weight: 800;
}
/* Unsent edits — amber, so "you have work that hasn't reached MFL" reads
   differently from "everything is submitted". */
.ups-m-waiver-claims-cta.dirty {
  background: var(--warn);
  border-color: var(--warn);
  color: #1a1206;
  box-shadow: 0 2px 10px rgba(255, 184, 107, 0.38);
}
.ups-m-waiver-claims-cta.dirty .n { background: rgba(0, 0, 0, 0.18); }

/* ----- Row CTA: Bid (accent) reuses the Add button's box ----- */
.ups-m-fa-add.bid { background: var(--accent); color: #08122b; }
.ups-m-fa-add.bid.staged {
  background: rgba(91, 141, 255, 0.18);
  color: var(--accent);
  box-shadow: inset 0 0 0 1px rgba(91, 141, 255, 0.5);
}

/* ----- Drop picker additions (selected row / "No drop" / estimate note) ----- */
.ups-m-drop-row.on { box-shadow: inset 3px 0 0 var(--accent); background: var(--bg-elev2); }
.ups-m-drop-row.none .name { color: var(--accent); }
/* Shown INSTEAD of the "No drop" row when the active roster is known-full —
   the option is withheld, so the reason has to take its place. Not a button:
   nothing here is selectable. */
.ups-m-drop-note {
  padding: 12px 16px;
  background: var(--bg-elev);
  border-bottom: 1px solid var(--line);
  border-left: 3px solid var(--danger);
  font-size: 12px;
  line-height: 1.45;
  color: var(--fg-muted);
}
.ups-m-drop-foot {
  padding: 10px 16px;
  border-top: 1px solid var(--line);
  font-size: 11px;
  color: var(--fg-muted);
  font-style: italic;
}

/* ----- Bid sheet ----- */
.ups-m-bid-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.6);
  display: flex;
  align-items: flex-end;
  justify-content: center;
  z-index: 108;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-bid-sheet {
  position: relative;
  width: 100%;
  max-width: 520px;
  max-height: 92vh;
  background: var(--bg-elev);
  color: var(--fg);
  border-radius: 16px 16px 0 0;
  border: 1px solid var(--line);
  border-bottom: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  animation: ups-m-sheet-in 200ms ease-out;
}
.ups-m-bid-head { padding: 14px 48px 12px 16px; border-bottom: 1px solid var(--line); }
.ups-m-bid-head .title { font-size: 16px; font-weight: 700; }
.ups-m-bid-head .sub { font-size: 12px; color: var(--fg-muted); margin-top: 2px; }
.ups-m-bid-close {
  position: absolute;
  top: 4px;
  right: 4px;
  width: 44px;
  height: 44px;
  background: transparent;
  border: 0;
  color: var(--fg-muted);
  font-size: 24px;
  line-height: 1;
  cursor: pointer;
}
.ups-m-bid-body {
  flex: 1 1 auto;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: 14px 16px 4px;
}
.ups-m-bid-label {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--fg-muted);
  margin: 14px 0 6px;
}
.ups-m-bid-body .ups-m-bid-label:first-child { margin-top: 0; }
.ups-m-bid-stepper {
  display: grid;
  grid-template-columns: 56px 1fr 56px;
  gap: 10px;
  align-items: center;
}
.ups-m-bid-stepper .step {
  height: 48px;
  border-radius: 10px;
  border: 1px solid var(--line-soft);
  background: var(--bg-elev2);
  color: var(--fg);
  font-size: 24px;
  line-height: 1;
  font-family: inherit;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-bid-stepper .step:active { background: var(--line); }
.ups-m-bid-stepper .amt {
  text-align: center;
  font-size: 26px;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  color: var(--accent);
}
.ups-m-bid-hint { font-size: 11px; color: var(--fg-muted); margin-top: 6px; line-height: 1.45; }
.ups-m-bid-advisory {
  margin-top: 8px;
  padding: 8px 10px;
  border-radius: 8px;
  background: var(--bg-elev2);
  border: 1px solid var(--line);
  font-size: 12px;
  color: var(--fg-muted);
}
.ups-m-bid-advisory strong { color: var(--fg); }
.ups-m-bid-advisory.warn { border-color: rgba(255, 184, 107, 0.45); color: var(--warn); }
.ups-m-bid-advisory.warn strong { color: var(--warn); }
.ups-m-bid-rounds { display: flex; flex-wrap: wrap; gap: 6px; }
.ups-m-bid-round {
  position: relative;
  min-width: 44px;
  min-height: 40px;
  border-radius: 8px;
  border: 1px solid var(--line-soft);
  background: var(--bg-elev2);
  color: var(--fg);
  font-size: 14px;
  font-weight: 700;
  font-family: inherit;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-bid-round.on { background: var(--accent); color: #08122b; border-color: var(--accent); }
.ups-m-bid-round .n {
  position: absolute;
  top: -5px;
  right: -5px;
  min-width: 16px;
  height: 16px;
  padding: 0 4px;
  border-radius: 999px;
  background: var(--teal);
  color: #08251f;
  font-size: 10px;
  line-height: 16px;
}
.ups-m-bid-droppick {
  width: 100%;
  text-align: left;
  padding: 12px;
  border-radius: 10px;
  border: 1px dashed var(--line-soft);
  background: var(--bg-elev2);
  color: var(--fg);
  font-size: 13px;
  font-family: inherit;
  cursor: pointer;
  min-height: 44px;
}
.ups-m-bid-foot {
  display: flex;
  gap: 10px;
  padding: 12px 16px calc(12px + var(--safe-bot));
  border-top: 1px solid var(--line);
  background: var(--bg-elev);
}
.ups-m-bid-btn {
  flex: 1 1 0;
  min-height: 46px;
  border-radius: 10px;
  border: 1px solid var(--line-soft);
  background: var(--bg-elev2);
  color: var(--fg);
  font-size: 14px;
  font-weight: 700;
  font-family: inherit;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-bid-btn.primary { background: var(--accent); color: #08122b; border-color: var(--accent); }
.ups-m-bid-btn.ghost { flex: 0 0 auto; padding: 0 16px; }
.ups-m-bid-btn[disabled] { opacity: 0.55; cursor: default; }

/* ----- Claims screen (full-screen overlay) ----- */
.ups-m-claims-overlay {
  position: fixed;
  inset: 0;
  background: var(--bg);
  z-index: 104;
  display: flex;
  flex-direction: column;
}
.ups-m-claims-screen { display: flex; flex-direction: column; height: 100%; min-height: 0; }
.ups-m-claims-head {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: calc(10px + var(--safe-top)) 12px 10px;
  border-bottom: 1px solid var(--line);
  background: var(--bg-elev);
}
.ups-m-claims-back {
  width: 40px;
  height: 40px;
  flex: 0 0 auto;
  background: transparent;
  border: 0;
  color: var(--fg);
  font-size: 28px;
  line-height: 1;
  font-family: inherit;
  cursor: pointer;
}
.ups-m-claims-head .ttl { min-width: 0; }
.ups-m-claims-head .t { font-size: 16px; font-weight: 700; }
.ups-m-claims-head .s { font-size: 11px; color: var(--fg-muted); }
.ups-m-claims-body {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding-bottom: 12px;
}
/* Lives in the pinned header now, not the scrolling body, so the
   "Edited — not submitted" state can't scroll out of sight while editing. */
.ups-m-claims-status { flex: 0 0 auto; margin-left: auto; padding-left: 8px; }

/* Tabbed groups — one group on screen at a time instead of an 8-round scroll.
   The strip sticks to the top of the scrolling body so switching groups is
   always one tap away. */
.ups-m-claim-tabs {
  position: sticky;
  top: 0;
  z-index: 2;
  display: flex;
  gap: 6px;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  padding: 8px 14px;
  background: var(--bg);
  border-bottom: 1px solid var(--line);
}
.ups-m-claim-tabs::-webkit-scrollbar { display: none; }
.ups-m-claim-tab {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 6px 11px;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: var(--bg-elev);
  color: var(--fg-muted);
  font-size: 12px;
  font-weight: 700;
}
.ups-m-claim-tab .n {
  font-size: 10px;
  font-weight: 600;
  opacity: .75;
}
.ups-m-claim-tab.on {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}
.ups-m-claim-tab.cleared { border-style: dashed; }

/* Copy-group row, at the foot of the open group. */
.ups-m-claim-copy {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  padding: 10px 14px 2px;
  font-size: 12px;
  color: var(--fg-muted);
}
.ups-m-claim-copysel {
  background: var(--bg-elev);
  color: var(--fg);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 5px 8px;
  font-size: 12px;
}
.ups-m-claims-dirty {
  display: inline-block;
  padding: 4px 10px;
  border-radius: 999px;
  background: rgba(255, 184, 107, 0.16);
  color: var(--warn);
  font-size: 11px;
  font-weight: 700;
}
.ups-m-claims-clean {
  display: inline-block;
  padding: 4px 10px;
  border-radius: 999px;
  background: rgba(139, 229, 139, 0.14);
  color: var(--ok);
  font-size: 11px;
  font-weight: 700;
}
.ups-m-claims-empty { padding: 40px 24px; text-align: center; }
.ups-m-claims-empty .t { font-size: 15px; font-weight: 700; margin-bottom: 6px; }
.ups-m-claims-empty .s { font-size: 12.5px; color: var(--fg-muted); line-height: 1.5; }
.ups-m-claim-group { margin-top: 14px; }
.ups-m-claim-group h3 {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin: 0;
  padding: 0 14px 6px;
  font-size: 12px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--fg-muted);
}
.ups-m-claim-group h3 .n { font-size: 11px; letter-spacing: 0; text-transform: none; color: var(--line-soft); }
.ups-m-claim-row {
  display: grid;
  grid-template-columns: 26px 1fr auto;
  grid-template-areas: "ord body ctl" ".  ctl2 ctl2";
  gap: 6px 10px;
  align-items: center;
  padding: 10px 14px;
  background: var(--bg-elev);
  border-top: 1px solid var(--line);
}
.ups-m-claim-row .ord {
  grid-area: ord;
  font-size: 12px;
  font-weight: 700;
  color: var(--fg-muted);
  text-align: center;
}
.ups-m-claim-row .body { grid-area: body; min-width: 0; }
.ups-m-claim-row .name { font-size: 14px; font-weight: 600; }
.ups-m-claim-row .sub { font-size: 11px; color: var(--fg-muted); margin-top: 2px; }
.ups-m-claim-row .sub strong { color: var(--accent); }
.ups-m-claim-row .ctl { grid-area: ctl; display: flex; flex-direction: column; gap: 4px; }
.ups-m-claim-row .mv {
  width: 40px;
  height: 28px;
  border-radius: 6px;
  border: 1px solid var(--line-soft);
  background: var(--bg-elev2);
  color: var(--fg);
  font-size: 11px;
  line-height: 1;
  font-family: inherit;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-claim-row .mv[disabled] { opacity: 0.3; cursor: default; }
.ups-m-claim-row .ctl2 {
  grid-area: ctl2;
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.ups-m-claim-move {
  background: var(--bg-elev2);
  color: var(--fg);
  border: 1px solid var(--line-soft);
  border-radius: 6px;
  padding: 5px 6px;
  font-size: 11px;
  font-family: inherit;
  min-height: 32px;
}
.ups-m-claim-row .lnk {
  background: transparent;
  border: 0;
  padding: 6px 2px;
  color: var(--accent);
  font-size: 12px;
  font-weight: 600;
  font-family: inherit;
  cursor: pointer;
  min-height: 32px;
}
.ups-m-claim-row .lnk.danger { color: var(--danger); }
.ups-m-claims-foot {
  flex: 0 0 auto;
  display: flex;
  gap: 10px;
  padding: 12px 14px calc(12px + var(--safe-bot));
  border-top: 1px solid var(--line);
  background: var(--bg-elev);
}
/* The MFL escape hatch renders as an <a> in the footer when write_enabled is
   false, so it has to sit in the .ups-m-bid-btn box like the buttons do. */
a.ups-m-bid-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  text-decoration: none;
}

/* ----- Contract v2: unknown-state banner, clears, dry-run preview ----- */
/* Sticky, NOT a toast: when the server couldn't read our claims the owner has
   to keep seeing that this screen is their local draft, not MFL's truth. */
.ups-m-claims-notice {
  margin: 10px 14px 0;
  padding: 9px 11px;
  border-radius: 8px;
  font-size: 12px;
  line-height: 1.45;
  background: var(--bg-elev2);
  border-left: 3px solid var(--warn);
  color: var(--warn);
}
.ups-m-claims-notice.ok { border-left-color: var(--ok); color: var(--ok); }
.ups-m-claims-notice a { color: inherit; font-weight: 700; }
/* A round staged for an explicit clear (picks:[] → "clear this at MFL"). */
.ups-m-claim-group.cleared h3 .n { color: var(--danger); }
.ups-m-claim-clearrow {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  background: var(--bg-elev);
  border-top: 1px solid var(--line);
  border-left: 3px solid var(--danger);
}
.ups-m-claim-clearrow .body { flex: 1 1 auto; min-width: 0; }
.ups-m-claim-clearrow .name { font-size: 14px; font-weight: 600; color: var(--danger); }
.ups-m-claim-clearrow .sub { font-size: 11px; color: var(--fg-muted); margin-top: 2px; }
.ups-m-claim-clearrow .lnk {
  flex: 0 0 auto;
  background: transparent;
  border: 0;
  padding: 6px 2px;
  color: var(--accent);
  font-size: 12px;
  font-weight: 600;
  font-family: inherit;
  cursor: pointer;
  min-height: 32px;
}
/* Per-group clear, parked at the end of the group heading. */
.ups-m-claim-group h3 .gclear {
  margin-left: auto;
  background: transparent;
  border: 0;
  padding: 2px 0 2px 8px;
  color: var(--danger);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0;
  text-transform: none;
  font-family: inherit;
  cursor: pointer;
  min-height: 28px;
}
/* Withdraw-everything: the explicit, user-asked-for destructive action. */
.ups-m-claims-withdraw {
  margin: 18px 14px 4px;
  padding-top: 12px;
  border-top: 1px solid var(--line);
}
.ups-m-claims-withdraw .lnk {
  background: transparent;
  border: 1px solid rgba(255, 107, 107, 0.45);
  border-radius: 8px;
  padding: 9px 14px;
  color: var(--danger);
  font-size: 13px;
  font-weight: 700;
  font-family: inherit;
  cursor: pointer;
  min-height: 40px;
}
.ups-m-claims-withdraw .lnk[disabled] { opacity: 0.5; cursor: default; }
.ups-m-claims-withdraw .s { font-size: 11px; color: var(--fg-muted); margin-top: 6px; line-height: 1.45; }
/* Dry run: a PREVIEW of what a live submit would send. Deliberately styled as
   a note, not as state — nothing here has been written to MFL. */
.ups-m-claims-preview {
  margin: 10px 14px 0;
  padding: 10px 12px;
  border-radius: 8px;
  background: var(--bg-elev2);
  border: 1px dashed var(--line-soft);
}
.ups-m-claims-preview .t { font-size: 12px; font-weight: 700; margin-bottom: 6px; }
.ups-m-claims-preview .s { font-size: 11px; color: var(--fg-muted); margin-top: 6px; line-height: 1.45; }
.ups-m-claims-preview ul { margin: 0; padding-left: 18px; }
.ups-m-claims-preview li { font-size: 12px; color: var(--fg-muted); line-height: 1.6; }

/* ----- Player-sheet acquisition block ----- */
.ups-m-sheet-acq { margin-bottom: 10px; }
.ups-m-acq-note {
  font-size: 12px;
  color: var(--fg-muted);
  padding: 8px 10px;
  margin-bottom: 8px;
  border-radius: 8px;
  background: var(--bg-elev2);
  border-left: 3px solid var(--warn);
}
.ups-m-acq-note.staged { border-left-color: var(--accent); color: var(--fg); }
.ups-m-acq-note .lnk {
  background: transparent;
  border: 0;
  padding: 0;
  color: var(--accent);
  font-size: 12px;
  font-weight: 600;
  font-family: inherit;
  cursor: pointer;
}
/* Sheet-level MFL escape hatch (write_enabled:false). Sized like the sheet's
   own action buttons so the read-only state doesn't look broken. */
.ups-m-acq-native {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 0 16px;
  border-radius: 10px;
  border: 1px solid var(--line-soft);
  background: var(--bg-elev2);
  color: var(--accent);
  font-size: 14px;
  font-weight: 700;
  text-decoration: none;
}

/* Division-leader tag in the mobile Divisions standings view. The flat league
   table only ever showed a crown, which told an owner he had won something but
   never which division or who he was racing. */
.ups-m-div-tag {
  display: inline-block;
  margin-left: 6px;
  padding: 1px 5px;
  border-radius: 4px;
  font-size: 9px;
  font-weight: 800;
  letter-spacing: 0.06em;
  color: #2b1d33;
  background: rgba(206, 147, 216, 0.85);
  vertical-align: middle;
}

/* Records like "0-0" and the short numeric headers must never wrap -- at 375px
   the divisions table was breaking "W-L" and "0-0" across two lines. */
.ups-m-standings-table th,
.ups-m-standings-table td { white-space: nowrap; }
.ups-m-standings-table td.team,
.ups-m-standings-table th.team { white-space: normal; }

/* ── Players market: actual points + bid entry (2026-10-01) ─────────────────
   Every points number on the market now comes from MFL's own league scoring
   (views/players.js pointsBasis). These rules give that number a fixed place
   and a label, and pull the filter + sort into one row so more of the list
   is on screen at 375px. */
.ups-m-players-selects { display: flex; gap: 8px; }
.ups-m-players-selects .ups-m-players-filter { flex: 1 1 0; min-width: 0; }
.ups-m-fa-basis {
  font-size: 11px;
  line-height: 1.35;
  color: var(--fg-muted);
  margin: 6px 0 4px;
}
.ups-m-fa-basis.warn { color: var(--warn); }
.ups-m-fa-row .name .tm {
  margin-left: 6px;
  font-size: 11px;
  font-weight: 600;
  color: var(--fg-muted);
  letter-spacing: 0.03em;
}
.ups-m-fa-row .sub { gap: 4px 10px; align-items: baseline; }
.ups-m-fa-stat { white-space: nowrap; font-variant-numeric: tabular-nums; }
.ups-m-fa-stat.pts b { font-size: 13px; font-weight: 800; color: var(--fg); }
.ups-m-fa-stat.na { font-style: italic; }
/* FCFS: a free agent whose game has kicked off can't be added this week. */
.ups-m-fa-add.locked { background: transparent; color: var(--fg-muted); border: 1px dashed var(--line-soft); cursor: default; font-weight: 600; text-align: center; line-height: 1.2; padding: 6px 10px; }
.ups-m-fa-add.locked .why { display: block; font-size: 11px; font-weight: 500; white-space: nowrap; }
/* Below the PPG-rank minimum: the real PPG stays, the rank slot says why. */
.ups-m-fa-stat.unranked { color: var(--fg-muted); font-style: italic; }
.ups-m-bid-context {
  margin-top: 6px;
  font-size: 12px;
  line-height: 1.4;
  color: var(--fg-muted);
}
.ups-m-bid-context b { color: var(--fg); font-weight: 800; }
.ups-m-bid-stepper .amt-wrap {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  min-width: 0;
}
.ups-m-bid-stepper .amt-wrap .cur { font-size: 18px; font-weight: 700; color: var(--fg-muted); }
.ups-m-bid-stepper input.amt {
  width: 100%;
  max-width: 120px;
  min-width: 0;
  height: 48px;
  padding: 0 6px;
  box-sizing: border-box;
  background: var(--bg);
  border: 1px solid var(--line);
  border-radius: 10px;
  font-family: inherit;
  -webkit-appearance: none;
  appearance: none;
}
.ups-m-bid-stepper input.amt:focus { outline: none; border-color: var(--accent); }
.ups-m-bid-stepper input.amt[aria-invalid="true"] { border-color: var(--danger); }
.ups-m-bid-total {
  margin-top: 6px;
  text-align: center;
  font-size: 13px;
  font-weight: 700;
  color: var(--fg);
  font-variant-numeric: tabular-nums;
}
.ups-m-bid-total .snap { font-weight: 600; font-size: 11px; color: var(--warn); }
.ups-m-stat-basis { margin-top: 6px; font-size: 11px; color: var(--fg-muted); }
.ups-m-stat-basis.warn { color: var(--warn); }

/* ── Players market: ONE points-period control (2026-10-02) ──────────────────
   Replaces the YTD / L2 buttons that looked like a second sort. Each button
   names the completed weeks it covers ("Season · Wks 1–3"). */
.ups-m-period {
  display: flex;
  align-items: stretch;
  gap: 6px;
  margin-top: 6px;
}
.ups-m-period .lbl {
  flex: 0 0 auto;
  align-self: center;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--fg-muted);
  padding-right: 2px;
}
.ups-m-period-btn {
  flex: 1 1 0;
  min-width: 0;
  min-height: 40px;
  padding: 4px 6px;
  background: var(--bg);
  color: var(--fg-muted);
  border: 1px solid var(--line);
  border-radius: 8px;
  font-family: inherit;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1px;
  -webkit-tap-highlight-color: transparent;
}
.ups-m-period-btn .nm { font-size: 12px; font-weight: 700; color: inherit; }
.ups-m-period-btn .wk { font-size: 10px; font-variant-numeric: tabular-nums; opacity: 0.85; }
.ups-m-period-btn.on {
  background: var(--bg-elev2);
  color: var(--accent);
  border-color: var(--accent);
}
.ups-m-bid-droppick.need { border-color: var(--warn); color: var(--warn); }
.ups-m-period-btn .nm, .ups-m-period-btn .wk { white-space: nowrap; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
/* Three or four periods on a phone (late season): "Wks 10–11 · final" no
   longer fits one line of a quarter-width button, so the status takes its own
   line, and (as at 320px above) the "Points" caption goes and the type
   tightens so "Last 6 wks" isn't cut either. Found by the 2026-10-02
   Playwright check at 320 and 375. */
@media (max-width: 480px) {
  .ups-m-period.crowd .lbl { display: none; }
  .ups-m-period.crowd .ups-m-period-btn { padding: 4px 3px; }
  .ups-m-period.crowd .ups-m-period-btn .nm { font-size: 11px; }
  .ups-m-period.crowd .ups-m-period-btn .st { display: block; }
  .ups-m-period.crowd .ups-m-period-btn .sep { display: none; }
}
/* Up to four periods late in the season (Season / Last 2 / 4 / 6 wks): on the
   narrowest phones drop the "Points" caption (the buttons name themselves) and
   tighten the type so each button keeps its full label at 320px. */
@media (max-width: 360px) {
  .ups-m-period .lbl { display: none; }
  .ups-m-period-btn { padding: 4px 3px; }
  .ups-m-period-btn .nm { font-size: 11px; }
}
/* Claims footer at 320px (found by the 2026-10-02 Playwright check): "Reload
   from MFL" + "Preview" are fixed-width ghosts and left the primary Submit
   ~40px, so "Submit 1 claim" ran off the right edge. On narrow phones the two
   ghosts share a row and Submit — the one that matters — gets a full-width
   row of its own, still at the bottom under the thumb. */
@media (max-width: 360px) {
  .ups-m-claims-foot { flex-wrap: wrap; }
  .ups-m-claims-foot .ups-m-bid-btn.ghost { flex: 1 1 0; min-width: 0; padding: 0 8px; }
  .ups-m-claims-foot .ups-m-bid-btn.primary { flex: 1 0 100%; }
}
