/* ==========================================================================
   LIVE UI POLISH  (Live section + live Match Page)           loaded LAST
   --------------------------------------------------------------------------
   Scope: .bc-sb-event--live cards, the odds buttons they and the Match Page share, the live Match Page market list and the
   Live loading / empty / error states. Presentation only: no selector here changes what can be bet on - that is decided by
   the backend `bettable` flag and the JS click guards (a disabled / VIEW_ONLY button is also disabled in the DOM).

   Why the long selectors and !important: ~25 older sheets style the same nodes with ids and !important. This file uses the
   same id-prefixed shape as sportsbook-mobile-ux.css so that it wins by order and specificity without touching those files.
   Phones (<768px) already have a good card layout in sportsbook-mobile-ux.css; this file leaves its geometry alone and
   completes what it lacks (state cues that are not colour-only, view-only markers, focus rings, reduced motion) and brings
   tablet / desktop cards to the same layout.
   ========================================================================== */

html:not([data-sbv2]) body #bcSbApp {
  --lv-accent: var(--sbm-accent, #ffd000);
  --lv-live: var(--sbm-live, #ff4133);
  --lv-card: var(--sbm-card, #0e141b);
  --lv-odd: var(--sbm-odd, #131b24);
  --lv-line: var(--sbm-line-2, rgba(255, 255, 255, .11));
  --lv-text: var(--sbm-text, #f2f5f8);
  --lv-text-2: var(--sbm-text-2, rgba(242, 245, 248, .72));
  --lv-text-3: var(--sbm-text-3, rgba(242, 245, 248, .62));   /* >= 4.5:1 on --lv-odd */
  --lv-up: #4ade80;
  --lv-down: #f87171;
}

/* ---------------------------------------------------------------- live card: tablet / desktop (>= 768px) */
@media (min-width: 768px) {
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event.bc-sb-event--live {
    display: flex !important; flex-direction: column; gap: 8px;
    padding: 12px 14px !important; border-radius: 12px;
    background: var(--lv-card); border: 1px solid var(--lv-line);
    min-width: 0; height: auto !important;           /* content-driven height: long names may take two lines */
  }
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__header { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-width: 0; }
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__header-left { display: flex; align-items: center; gap: 8px; min-width: 0; }
  /* the sport name repeats the sport filter above the list: keep the icon, drop the word */
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__sport-name { display: none !important; }
  /* the competition is already the group heading (.bc-live__league-divider): do not print it again inside every card */
  html:not([data-sbv2]) body #bcSbApp .bc-live__league-group .bc-sb-event--live .bc-sb-event__geo-icon,
  html:not([data-sbv2]) body #bcSbApp .bc-live__league-group .bc-sb-event--live .bc-sb-event__meta-name { display: none !important; }
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__meta-row { display: flex; align-items: center; justify-content: flex-start; gap: 8px; min-height: 0; padding: 0 !important; }
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__status-line { margin: 0 !important; font-size: 12px; font-weight: 600; color: var(--lv-live); font-variant-numeric: tabular-nums; }

  html:not([data-sbv2]) body #bcSbApp .bc-sb-event.bc-sb-event--live .bc-sb-event__match {
    display: flex !important; flex-direction: column !important; align-items: stretch !important; gap: 6px; width: 100% !important; min-width: 0; padding: 0 !important; margin: 0 !important;
  }
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event.bc-sb-event--live .bc-sb-event__match .bc-sb-event__team-row {
    display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 12px; width: 100% !important; min-width: 0; text-align: left !important;
  }
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event.bc-sb-event--live .bc-sb-event__match .bc-sb-event__team-name {
    flex: 1 1 auto !important; min-width: 0 !important; width: auto !important; text-align: left !important; font-size: 15px !important; font-weight: 600; line-height: 1.25 !important;
    white-space: normal !important; overflow-wrap: anywhere;
    display: -webkit-box !important; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden;
  }
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event.bc-sb-event--live .bc-sb-event__match .bc-sb-event__team-score {
    flex: 0 0 auto !important; min-width: 2ch; margin: 0 !important; text-align: right !important; font-size: 16px !important; font-weight: 800; color: var(--lv-accent); font-variant-numeric: tabular-nums;
  }

  html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds {
    display: grid !important; grid-template-columns: none !important; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: 8px; width: 100%; margin: 0 !important; padding: 0 !important;
  }
}

/* ---------------------------------------------------------------- tablet and up: cards flow into as many columns as fit (content-driven) */
@media (min-width: 600px) {
  /* tablet (sidebar hidden, full width): up to two columns of cards; desktop (three panels, narrower list): a card needs ~440px */
  html:not([data-sbv2]) body #bcSbApp .bc-live__league-events {
    display: grid !important; grid-template-columns: repeat(auto-fill, minmax(min(100%, 340px), 1fr)); gap: 10px; align-items: start; min-width: 0;
  }
  html:not([data-sbv2]) body #bcSbApp .bc-live__league-events > .bc-sb-event--live { margin: 0 !important; width: auto !important; }
}
@media (min-width: 1024px) {
  html:not([data-sbv2]) body #bcSbApp .bc-live__league-events { grid-template-columns: repeat(auto-fill, minmax(min(100%, 440px), 1fr)); }
}

/* ---------------------------------------------------------------- odds buttons: every width, one state vocabulary */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-odd,
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-odd,
html:not([data-sbv2]) body #bcSbApp .bc-sb-match-page .bc-sb-odd {
  position: relative; min-width: 0; min-height: 44px; box-sizing: border-box;
  display: flex; align-items: center; justify-content: center; gap: 6px;
  touch-action: manipulation; -webkit-tap-highlight-color: transparent;
}
html:not([data-sbv2]) body #bcSbApp .bc-sb-event.bc-sb-event--live .bc-sb-event__odds .bc-sb-odd { width: 100% !important; max-width: none !important; flex-direction: column; gap: 1px; padding: 6px 4px; }
@media (min-width: 768px) {
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event.bc-sb-event--live .bc-sb-odd__label { font-size: 11px !important; font-weight: 600; color: var(--lv-text-3) !important; line-height: 1; }
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event.bc-sb-event--live .bc-sb-odd__value { font-size: 16px !important; font-weight: 800; line-height: 1.1; font-variant-numeric: tabular-nums; }
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event.bc-sb-event--live .bc-sb-event__status-line { font-size: 12px !important; }
}
html:not([data-sbv2]) body #bcSbApp .bc-sb-event.bc-sb-event--live .bc-sb-event__live-label,
html:not([data-sbv2]) body #bcSbApp .bc-sb-event.bc-sb-event--live .bc-sb-event__live-indicator { font-size: 11px !important; }

/* selected: colour AND a check mark (not colour alone) */
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd.bc-sb-odd--selected::after,
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[aria-pressed="true"]::after {
  content: "\2713"; position: absolute; top: 3px; left: 5px; font-size: 10px; font-weight: 900; line-height: 1; color: #000;
}

/* price moved (set by SportsbookOddsFlash for ~700 ms): a tint that fades out AND a ▲/▼ glyph in a fixed corner, so colour is never
   the only cue and nothing shifts. data-move="up-a|up-b|down-a|down-b": the a/b pair restarts the animation on back-to-back moves. */
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-move^="up"]::before { content: "\25B2"; position: absolute; top: 3px; right: 5px; font-size: 8px; line-height: 1; color: var(--lv-up); }
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-move^="down"]::before { content: "\25BC"; position: absolute; top: 3px; right: 5px; font-size: 8px; line-height: 1; color: var(--lv-down); }
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-move="up-a"]:not(.bc-sb-odd--selected) { animation: lv-up-a 700ms ease-out; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-move="up-b"]:not(.bc-sb-odd--selected) { animation: lv-up-b 700ms ease-out; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-move="down-a"]:not(.bc-sb-odd--selected) { animation: lv-down-a 700ms ease-out; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-move="down-b"]:not(.bc-sb-odd--selected) { animation: lv-down-b 700ms ease-out; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-move^="up"] .bc-sb-odd__value,
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-move^="up"] .bc-sb-mp-odd__value { color: var(--lv-up) !important; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-move^="down"] .bc-sb-odd__value,
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-move^="down"] .bc-sb-mp-odd__value { color: var(--lv-down) !important; }
@keyframes lv-up-a { 0% { background-color: rgba(74, 222, 128, .38); } 100% { background-color: rgba(74, 222, 128, 0); } }
@keyframes lv-up-b { 0% { background-color: rgba(74, 222, 128, .38); } 100% { background-color: rgba(74, 222, 128, 0); } }
@keyframes lv-down-a { 0% { background-color: rgba(248, 113, 113, .38); } 100% { background-color: rgba(248, 113, 113, 0); } }
@keyframes lv-down-b { 0% { background-color: rgba(248, 113, 113, .38); } 100% { background-color: rgba(248, 113, 113, 0); } }
/* reduced motion: no animation at all - the glyph and the coloured number carry the movement for the same ~700 ms */
@media (prefers-reduced-motion: reduce) {
  html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-move] { animation: none !important; }
}

/* closed / suspended / waiting: dashed + muted + never a pointer; the value stays legible for the player who is deciding */
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-state="LOCKED"],
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-state="SUSPENDED"],
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-state="PENDING"],
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-state="VIEW_ONLY"],
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd:disabled {
  cursor: not-allowed; border-style: dashed !important; background: transparent !important; box-shadow: none !important;
}
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-state="PENDING"] .bc-sb-odd__value { color: var(--lv-text-3) !important; }
/* view-only: not selectable by mouse, touch or keyboard (the button is disabled in the DOM); the price stays readable */
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-state="VIEW_ONLY"] { opacity: 1; pointer-events: none; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-state="VIEW_ONLY"] .bc-sb-odd__value,
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-state="VIEW_ONLY"] .bc-sb-mp-odd__value { color: var(--lv-text-3) !important; font-weight: 600; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-state="VIEW_ONLY"] .bc-sb-mp-odd__label,
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-state="VIEW_ONLY"] .bc-sb-odd__label { color: var(--lv-text-3) !important; }

/* "View only" written next to the market name (visible on touch screens: no tooltip needed) */
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-market__note {
  flex: 0 0 auto; margin-left: auto; margin-right: 8px; padding: 2px 8px; border: 1px dashed var(--lv-line); border-radius: 999px;
  font-size: 11px; font-weight: 600; line-height: 1.4; color: var(--lv-text-2); white-space: nowrap;
}
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-market__head { display: flex; align-items: center; gap: 8px; min-height: 44px; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-market__name { min-width: 0; overflow-wrap: anywhere; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-odd__label { min-width: 0; overflow-wrap: anywhere; }

/* ---------------------------------------------------------------- focus (keyboard) */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live:focus-visible,
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-odd:focus-visible,
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-odd:focus-visible,
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-market__head:focus-visible,
html:not([data-sbv2]) body #bcSbApp .bc-sb-event__favorite:focus-visible,
html:not([data-sbv2]) body #bcSbApp .bc-live__empty-cta:focus-visible,
html:not([data-sbv2]) body #bcSbApp .bc-sb-error__retry:focus-visible {
  outline: 2px solid var(--lv-accent) !important; outline-offset: 2px !important;
}

/* ---------------------------------------------------------------- live indicator: subtle, never flashing */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event__live-dot { animation: lv-dot 2.4s ease-in-out infinite; }
@keyframes lv-dot { 0%, 100% { opacity: 1; } 50% { opacity: .45; } }

/* ---------------------------------------------------------------- states: loading / empty / error */
html:not([data-sbv2]) body #bcSbApp .bc-sb-loading,
html:not([data-sbv2]) body #bcSbApp .bc-live__empty,
html:not([data-sbv2]) body #bcSbApp .bc-sb-error {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px;
  min-height: 220px; padding: 28px 20px; text-align: center; color: var(--lv-text-2); box-sizing: border-box;
}
html:not([data-sbv2]) body #bcSbApp .bc-live__empty-title { font-size: 17px; font-weight: 700; color: var(--lv-text); }
html:not([data-sbv2]) body #bcSbApp .bc-live__empty-message,
html:not([data-sbv2]) body #bcSbApp .bc-sb-error__message { font-size: 14px; line-height: 1.45; max-width: 36ch; overflow-wrap: anywhere; }
html:not([data-sbv2]) body #bcSbApp .bc-live__empty-cta,
html:not([data-sbv2]) body #bcSbApp .bc-sb-error__retry { min-height: 44px; min-width: 44px; padding: 0 20px; border-radius: 10px; font-weight: 700; cursor: pointer; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-error { border: 1px dashed var(--lv-line); border-radius: 12px; }

/* a stale slip selection: an explicit, readable reason next to the price (set by the betslip) */
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd--stale { outline: 1px dashed var(--lv-line); outline-offset: -3px; }

/* ---------------------------------------------------------------- phones: keep the last card clear of the fixed bottom nav */
@media (max-width: 767.98px) {
  html:not([data-sbv2]) body #bcSbApp #bcLiveContainer { padding-bottom: calc(var(--sbm-nav, 56px) + env(safe-area-inset-bottom, 0px) + 24px) !important; }
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live { scroll-margin-bottom: calc(var(--sbm-nav, 56px) + env(safe-area-inset-bottom, 0px) + 16px); }
}

/* ---------------------------------------------------------------- reduced motion */
@media (prefers-reduced-motion: reduce) {
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event__live-dot,
  html:not([data-sbv2]) body #bcSbApp .bc-sb-loading__spinner { animation: none !important; }
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live,
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-odd,
  html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-odd { transition: none !important; animation: none !important; }
}

/* ---------------------------------------------------------------- shared: bet hub tab count badges (BETSLIP / MY BETS)
   Older sheets force these to display:flex, which turned the inline display:none into a visible "0" on phones. The `hidden`
   attribute (set by BetHubTabController.updateBadge) now wins. */
html:not([data-sbv2]) body #bcSbApp .bc-sb-hub-tab .bc-sb-hub-tab__badge[hidden] { display: none !important; }

/* ---------------------------------------------------------------- price age line under the odds (fresh / delayed / expired) */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds-age {
  margin-top: 6px; font-size: 11px; line-height: 1.3; color: var(--lv-text-3); font-variant-numeric: tabular-nums; min-height: 1.3em;
}
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds-age::before { content: "\25CF\00a0"; }                       /* ● fresh */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds-age[data-tier="delayed"] { color: #fbbf24; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds-age[data-tier="delayed"]::before { content: "\25D0\00a0"; }  /* ◐ delayed */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds-age[data-tier="expired"] { color: var(--lv-down); font-weight: 600; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds-age[data-tier="expired"]::before { content: "\2715\00a0"; }  /* ✕ expired */

/* same line on the open Match Page (above the market list) */
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-price-age { padding: 6px 12px 4px; font-size: 11px; line-height: 1.3; color: var(--lv-text-3); font-variant-numeric: tabular-nums; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-price-age::before { content: "\25CF\00a0"; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-price-age[data-tier="delayed"] { color: #fbbf24; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-price-age[data-tier="delayed"]::before { content: "\25D0\00a0"; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-price-age[data-tier="expired"] { color: var(--lv-down); font-weight: 600; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-price-age[data-tier="expired"]::before { content: "\2715\00a0"; }

/* ---------------------------------------------------------------- locked / suspended market (state comes from the canonical answer only) */
/* lock glyph in the (blank) price slot of a locked outcome: drawn with a mask so it follows the text colour; decorative (the button carries the aria-label) */
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-state="LOCKED"] .bc-sb-odd__value::before,
html:not([data-sbv2]) body #bcSbApp .bc-sb-mp-odd[data-state="LOCKED"] .bc-sb-mp-odd__value::before {
  content: ""; display: inline-block; width: .95em; height: .95em; vertical-align: -.12em; background: currentColor; opacity: .7;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5' y='11' width='14' height='9' rx='2'/%3E%3Cpath d='M8 11V8a4 4 0 0 1 8 0v3'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5' y='11' width='14' height='9' rx='2'/%3E%3Cpath d='M8 11V8a4 4 0 0 1 8 0v3'/%3E%3C/svg%3E") center / contain no-repeat;
}
html:not([data-sbv2]) body #bcSbApp .bc-sb-odd[data-state="LOCKED"] .bc-sb-odd__value { color: var(--lv-text-3) !important; min-height: 1.1em; }
/* the market-level reason, in words, in the one line the card already has (no new row = no layout shift) */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds-age[data-market="suspended"] { color: var(--lv-text-2); font-weight: 600; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds-age[data-market="suspended"]::before {
  content: ""; display: inline-block; width: 1em; height: 1em; margin-right: .4em; vertical-align: -.15em; background: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5' y='11' width='14' height='9' rx='2'/%3E%3Cpath d='M8 11V8a4 4 0 0 1 8 0v3'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5' y='11' width='14' height='9' rx='2'/%3E%3Cpath d='M8 11V8a4 4 0 0 1 8 0v3'/%3E%3C/svg%3E") center / contain no-repeat;
}
/* only the odds row is toned down: team names, score and clock stay at full contrast */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live[data-market-state="suspended"] .bc-sb-event__odds { opacity: .78; }
/* a restrained fade when the state changes; the transition moves opacity / border colour only (never size) and never colours a reopening green */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds { transition: opacity .2s ease; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-odd { transition: border-color .2s ease, opacity .2s ease; }
@media (prefers-reduced-motion: reduce) {
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds,
  html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-odd { transition: none !important; }
}
/* the reserved status line is empty until the first price age is known: no lone bullet, no jump when text arrives */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds-age:empty::before { content: none; }
/* locked outcomes never look clickable (older sheets force a pointer on every odds button) */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-odd[data-state="LOCKED"],
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-odd:disabled { cursor: not-allowed !important; }
/* one lock icon only: the older sheet draws a centred emoji lock over the button (overlapping the label); live cards use the one in the price slot */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-odd--locked::before { content: none !important; }

/* why a stale price is not being renewed: said in words by the chip (see _priceAgeText); only the accent changes, never the size */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds-age[data-health="budget"] { color: #fbbf24; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds-age[data-health="provider"] { color: var(--lv-down); font-weight: 600; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-event__odds-age[data-tier="watch"] { color: var(--lv-text-2); }
/* a delayed (stale) price stays readable but never looks selectable: dimmed, not-allowed, dashed (the click guard refuses it as well) */
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-odd.bc-sb-odd--stale { cursor: not-allowed !important; }
html:not([data-sbv2]) body #bcSbApp .bc-sb-event--live .bc-sb-odd.bc-sb-odd--stale .bc-sb-odd__value { opacity: .6; }

/* Odds reliability: a price from an out-of-date / unconfirmed snapshot is reference only (clicks are refused in JS too). */
.bc-sb-odd[data-stale="1"] { opacity: .6; cursor: not-allowed; }
