:root {
  color-scheme: dark;
  /* palette */
  --bg: #0e0f11; --panel: #17191c; --card: #1c1f23; --btn: #2a2e34; --btn-hi: #363b43;
  --fg: #f4f5f7; --muted: #8d939c; --dim: #848b94; --line: #2b2f35; --link: #6cb4ff;
  --accent: #4fd26a; --accent-fg: #06170b; --accent-soft: rgba(79, 210, 106, .15);
  --warn: #3a2c12; --warn-fg: #ffd58a; --bad: #ff5a4f; --bad-soft: rgba(255, 90, 79, .14);
  /* streaks: violet when someone is running hot, ice blue when they can't buy a win */
  --rare: #a78bfa; --rare-lit: #ddd6fe; --ice: #67d3fb; --ice-lit: #bfeaff;
  /* shape and rhythm */
  --r-sm: 10px; --r: 14px; --r-lg: 18px; --pill: 999px;
  --tap: 44px;               /* smallest comfortable tap target */
  --gut: 16px;               /* page gutter */
  --card-pad: 12px;
  --col: 74px;               /* width of one odds column */
  --shadow: 0 10px 30px rgba(0, 0, 0, .45);
}
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: transparent; }  /* our own :active states instead of the grey flash */
body {
  margin: 0; background: var(--bg); color: var(--fg);
  font: 16px/1.4 -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
  font-variant-numeric: tabular-nums;
  overscroll-behavior-y: none;
}
main { max-width: 620px; margin: 0 auto;
  padding: calc(12px + env(safe-area-inset-top)) var(--gut) calc(64px + env(safe-area-inset-bottom)); }
h1 { font-size: 28px; line-height: 1.1; margin: 0; letter-spacing: -0.02em; }
h2 { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .07em;
  color: var(--muted); margin: 28px 0 10px; }
a { color: var(--link); }
p { margin: 8px 0; }
.muted, .sub { color: var(--muted); }
.sub { font-size: 13px; }
.eyebrow { font-size: 12px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
.price { color: var(--accent); font-weight: 700; }
.good { color: var(--accent); font-weight: 700; }
.bad { color: var(--bad); font-weight: 700; }
.warn { color: var(--warn-fg); }
button { font: inherit; color: inherit; cursor: pointer; -webkit-tap-highlight-color: transparent; }
button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible, [tabindex]:focus-visible {
  outline: 2px solid var(--link); outline-offset: 2px;
}
input, select {
  font: inherit; font-size: 16px; min-height: var(--tap); color: var(--fg);
  background: var(--card); border: 1px solid var(--line); border-radius: var(--r-sm); padding: 10px 12px;
}
.row-between { display: flex; align-items: center; justify-content: space-between; gap: 10px; }

/* top navigation */
.tabs { display: flex; gap: 8px; margin-bottom: 14px; }
.tabs a { flex: 1; min-height: 40px; display: flex; align-items: center; justify-content: center;
  border-radius: var(--pill); border: 1px solid var(--line); color: var(--muted);
  text-decoration: none; font-size: 14px; font-weight: 600; transition: background .12s, color .12s; }
.tabs a.on { background: var(--fg); color: var(--bg); border-color: var(--fg); }
.tabs a:active { background: var(--btn); }

/* week header: what week, when it locks, how many are in */
.head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.status { display: inline-flex; align-items: center; gap: 6px; margin-top: 8px; padding: 5px 11px 5px 9px;
  border-radius: var(--pill); background: var(--card); border: 1px solid var(--line);
  font-size: 13px; font-weight: 600; }
.status .soon { color: var(--warn-fg); }
.status.locked { background: var(--bad-soft); border-color: transparent; color: var(--bad);
  text-transform: uppercase; letter-spacing: .04em; }
.meter { height: 5px; border-radius: var(--pill); background: var(--btn); overflow: hidden; margin: 14px 0 6px; }
.meter span { display: block; height: 100%; background: var(--accent); border-radius: var(--pill);
  transition: width .5s cubic-bezier(.2, .8, .3, 1); }

/* the group parlay, once picks lock: where it stands, every leg in one bar, and your leg */
.parlay { margin: 14px 0 6px; padding: 12px 14px; border-radius: var(--r); background: var(--card);
  border: 1px solid var(--line); }
.parlay.alive { border-color: rgba(79, 210, 106, .35); }
.parlay.hit { border-color: var(--accent); box-shadow: 0 0 18px rgba(79, 210, 106, .25); }
.parlay-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.parlay-head b { font-size: 17px; }
.parlay.alive .parlay-head b, .parlay.hit .parlay-head b { color: var(--accent); }
.parlay.dead .parlay-head b { color: var(--bad); }
.parlay-odds { font-size: 17px; font-weight: 800; }
.parlay.hit .parlay-odds { color: var(--accent); }
.parlay.dead .parlay-odds { color: var(--dim); text-decoration: line-through; }   /* what it would have paid */
.parlay-sub { margin-top: 2px; font-size: 13px; color: var(--muted); }
.legs { display: flex; gap: 3px; height: 8px; margin: 10px 0 8px; }
.legs i { border-radius: 2px; background: var(--btn-hi); }
.legs i.w { background: var(--accent); }
.legs i.l { background: var(--bad); }
.legs i.p { background: var(--muted); }
.legs-key { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 12px; font-weight: 600; color: var(--muted); }
.your-leg { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; margin-top: 10px; padding-top: 10px;
  border-top: 1px solid var(--line); font-size: 14px; }

/* "5 of 12 picks in", with the running parlay on the right */
.picks-in { display: flex; justify-content: space-between; align-items: baseline; gap: 4px 12px; flex-wrap: wrap; }
.running b { color: var(--fg); font-weight: 800; }

/* ---------- reports (public/articles.js) ---------- */
.kicker { display: block; margin-bottom: 2px; font-size: 10px; font-weight: 800; letter-spacing: .08em;
  text-transform: uppercase; color: var(--accent); }
/* the week page's slim card, under the tabs: cover, kicker and title, out of the board's way */
.feature { display: flex; margin: 0 0 16px; background: var(--card); border: 1px solid var(--line);
  border-radius: var(--r); overflow: hidden; }
.feature-link { flex: 1; min-width: 0; display: flex; align-items: center; gap: 12px; min-height: 64px;
  padding: 9px 4px 9px 10px; color: var(--fg); text-decoration: none; }
.feature-link > span:not(.feature-go) { flex: 1; min-width: 0; }
.feature-link b { display: block; font-size: 14px; line-height: 1.25; }
.feature-go { font-size: 20px; color: var(--dim); }
.feature img, .report img { flex: none; border-radius: 3px; background: #fff; box-shadow: 0 2px 8px rgba(0, 0, 0, .45); }
.feature-x { flex: none; min-width: var(--tap); background: none; border: 0; border-left: 1px solid var(--line);
  color: var(--dim); font-size: 13px; }
.feature-link:active, .feature-x:active, .report:active { background: var(--btn); }
/* History's Reports tab: a bigger cover, the standfirst, and the date */
.report { display: flex; gap: 14px; margin-bottom: 10px; padding: 12px; background: var(--card);
  border-radius: var(--r); color: var(--fg); text-decoration: none; }
.report > span { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.report b { font-size: 17px; line-height: 1.25; margin-bottom: 4px; }
.report-meta { display: flex; justify-content: space-between; gap: 8px; margin-top: auto; padding-top: 8px;
  font-size: 12px; color: var(--muted); }
.report-meta .go { color: var(--link); font-weight: 700; white-space: nowrap; }
@media (hover: hover) { .feature-link:hover, .report:hover { background: var(--btn); } }

/* a section heading with a number on the right */
.h2row { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.h2row h2 { margin-bottom: 10px; }
.tiny { display: flex; align-items: center; gap: 7px; margin-top: 3px;
  font-size: 11px; font-weight: 600; color: var(--dim); letter-spacing: .02em; }
.tiny.r { justify-content: flex-end; white-space: nowrap; }

/* ---------- streaks ----------
   Three rings that fill as a run builds, then a badge and a whole-row state once it lands.
   Win and loss streaks have their own colour language (violet / ice), separate from the
   green and red of the results themselves. Only a landed streak changes the row. */
.streak { display: inline-flex; align-items: center; gap: 4px; }
.streak i { width: 7px; height: 7px; border-radius: 50%; border: 1.5px solid #3b414a; background: transparent;
  transition: background .2s, box-shadow .2s; }
.streak.win i.on { border-color: var(--rare); background: var(--rare);
  box-shadow: 0 0 6px rgba(167, 139, 250, .8), 0 0 1px rgba(255, 255, 255, .6); }
.streak.loss i.on { border-color: var(--ice); background: var(--ice);
  box-shadow: 0 0 6px rgba(103, 211, 251, .75), 0 0 1px rgba(255, 255, 255, .6); }

/* the badge: an earned status, not a label */
.mult { display: inline-flex; align-items: center; gap: 3px; padding: 2px 8px 2px 6px; border-radius: var(--pill);
  font-size: 12px; font-weight: 800; letter-spacing: .03em; white-space: nowrap; line-height: 1.3; }
.mult i { font-style: normal; font-size: 11px; }
.mult.hot { color: #ede9fe; border: 1px solid rgba(196, 181, 253, .6);
  background: linear-gradient(180deg, rgba(139, 92, 246, .45), rgba(91, 33, 182, .35));
  box-shadow: 0 0 14px rgba(139, 92, 246, .5), inset 0 1px 0 rgba(255, 255, 255, .22); }
.mult.cold { color: #e6f8ff; border: 1px solid rgba(165, 232, 255, .6);
  background: linear-gradient(180deg, rgba(56, 189, 248, .4), rgba(3, 105, 161, .35));
  box-shadow: 0 0 14px rgba(56, 189, 248, .45), inset 0 1px 0 rgba(255, 255, 255, .22); }
.mult.pop { animation: unlock .6s cubic-bezier(.2, .9, .3, 1.25); }
@keyframes unlock {
  0% { transform: scale(.6); opacity: 0; }
  60% { transform: scale(1.14); }
  100% { transform: scale(1); opacity: 1; }
}

tr.hot .tiny, tr.cold .tiny { color: #b3b8c2; }
/* On the board the badge sits beside the record, where the dots go, and is no taller than
   that line: a lit row is the same height as any other, the colour does the talking. */
.board .mult { gap: 2px; padding: 0 5px 0 4px; font-size: 10.5px; letter-spacing: 0; line-height: 16px; }
.board .mult i { font-size: 9px; }
.board tr.hot .tiny, .board tr.cold .tiny { gap: 5px; }

/* a run that is still building gets a faint edge in its colour, and nothing else */
tr.building.win td:first-child { box-shadow: inset 3px 0 0 rgba(167, 139, 250, .38); }
tr.building.loss td:first-child { box-shadow: inset 3px 0 0 rgba(103, 211, 251, .38); }
tr.mine.building td:first-child { box-shadow: none; }   /* "you" already marks that edge */

/* a landed streak turns the row into a status card: a vertical gradient (identical in every
   cell, so a table row shows no seams), a lit edge, a soft glow at both ends, and a raised
   name. --lv is the streak length, capped, so ×8 glows a little more than ×3. */
tr.hot td, tr.cold td { border-top: 1px solid; border-bottom: 1px solid; }
tr.hot td { background: linear-gradient(180deg, rgba(139, 92, 246, calc(.16 + min(var(--lv, 3), 8) * .014)), rgba(76, 29, 149, .10));
  border-color: rgba(167, 139, 250, .28); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .07); }
tr.cold td { background: linear-gradient(180deg, rgba(56, 189, 248, calc(.13 + min(var(--lv, 3), 8) * .012)), rgba(12, 74, 110, .12));
  border-color: rgba(103, 211, 251, .28); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .07); }
tr.hot td:first-child, tr.cold td:first-child { border-left: 3px solid; border-radius: var(--r-sm) 0 0 var(--r-sm); padding-left: 5px; }
tr.hot td:last-child, tr.cold td:last-child { border-right: 1px solid; border-radius: 0 var(--r-sm) var(--r-sm) 0; padding-right: 8px; }
tr.hot td:first-child { border-left-color: var(--rare);
  box-shadow: -6px 0 22px -6px rgba(139, 92, 246, .75), inset 0 1px 0 rgba(255, 255, 255, .07); }
tr.hot td:last-child { border-right-color: rgba(167, 139, 250, .35);
  box-shadow: 6px 0 22px -8px rgba(139, 92, 246, .55), inset 0 1px 0 rgba(255, 255, 255, .07); }
tr.cold td:first-child { border-left-color: var(--ice);
  box-shadow: -6px 0 22px -6px rgba(56, 189, 248, .7), inset 0 1px 0 rgba(255, 255, 255, .07); }
tr.cold td:last-child { border-right-color: rgba(103, 211, 251, .35);
  box-shadow: 6px 0 22px -8px rgba(56, 189, 248, .5), inset 0 1px 0 rgba(255, 255, 255, .07); }
tr.hot .n { color: #ede9fe; text-shadow: 0 0 14px rgba(167, 139, 250, .65); }
tr.cold .n { color: #e6f8ff; text-shadow: 0 0 14px rgba(103, 211, 251, .6); }
tr.hot.mine .n::before, tr.cold.mine .n::before { display: none; }  /* the edge is the marker */
tr:has(+ tr.hot) td, tr:has(+ tr.cold) td { border-bottom-color: transparent; }  /* no double line above */

/* landing a streak: the row flares once, then sits still */
tr.fresh.hot td { animation: ignite-hot .9s ease-out; }
tr.fresh.cold td { animation: ignite-cold .9s ease-out; }
@keyframes ignite-hot { 0% { background: rgba(139, 92, 246, .55); } 100% { } }
@keyframes ignite-cold { 0% { background: rgba(56, 189, 248, .5); } 100% { } }

/* the key under the board */
/* the key under the board: three short items, spread across one line */
.legend { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px 8px; margin: 10px 2px 0;
  font-size: 11px; color: var(--muted); }
.legend span { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.legend .mult { font-size: 10px; padding: 0 6px 0 5px; }
.legend .mult i { font-size: 9px; }

/* the week's picks, in a panel of their own so the board reads as one thing */
.board { background: var(--card); border-radius: var(--r); margin: 0 -12px; padding: 2px 12px 0 4px; }
.board tr:last-child td { border-bottom: 0; }
.board th { border-bottom-color: var(--line); }
table { width: 100%; border-collapse: separate; border-spacing: 0; }
th { font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--muted);
  text-align: left; padding: 0 6px 8px; border-bottom: 1px solid var(--line); }
td { padding: 12px 6px; border-bottom: 1px solid var(--line); vertical-align: top; }
th:first-child, td:first-child { padding-left: 8px; }
th:last-child, td:last-child { padding-right: 0; }
.n { font-weight: 700; white-space: nowrap; width: 1%; padding-right: 12px; }
.num { text-align: right; white-space: nowrap; }
tr.tap { cursor: pointer; }
tr.tap:active td { background: var(--card); }
.board tr.tap:active td { background: var(--btn); }   /* the panel is already --card */
tr.tap:focus-visible { outline: 2px solid var(--link); outline-offset: -2px; }
.res { margin: 5px 0 1px; }  /* the result badge, under the odds */
tr.just td { background: var(--accent-soft); }
/* the one mark of your own row: a green edge on the name, quiet enough to sit under a streak */
tr.mine .n::before { content: ''; display: block; float: left; width: 3px; height: 18px; margin: 2px 5px 0 -8px;
  border-radius: 2px; background: var(--accent); }
.pick-line { font-size: 16px; line-height: 1.25; }
td.empty { color: var(--dim); }
tr.tap td.go::after { content: '\203a'; font-size: 18px; line-height: 1; color: var(--dim); }
/* who else is on this pick */
.rel { display: inline-block; margin-top: 6px; font-size: 12px; font-weight: 600; }
.rel.same { color: var(--muted); }
.rel.opp { color: var(--warn-fg); }
/* result, secondary to the pick itself */
.badge { display: inline-block; min-width: 26px; padding: 3px 8px; border-radius: var(--r-sm);
  font-size: 11px; font-weight: 800; letter-spacing: .03em; text-align: center; }
.badge.win { background: var(--accent-soft); color: var(--accent); }
.badge.loss { background: var(--bad-soft); color: var(--bad); }
.badge.push { background: var(--btn); color: var(--muted); }

.item { padding: 11px 0; border-bottom: 1px solid var(--line); }
.item:last-child { border-bottom: 0; }
.note { background: var(--warn); color: var(--warn-fg); border-radius: var(--r); padding: 12px; margin: 10px 0;
  font-size: 14px; }

/* buttons */
.big { display: block; width: 100%; margin-top: 14px; padding: 16px; border: 0; border-radius: var(--r);
  background: var(--accent); color: var(--accent-fg); font-size: 17px; font-weight: 800;
  transition: filter .12s, transform .06s; }
.big:active { filter: brightness(.94); transform: scale(.995); }
.big:disabled { opacity: .55; }
.big.alt { background: var(--card); color: var(--fg); border: 1px solid var(--line); }

/* the one thing to do on this page, in thumb reach */
.cta-bar { margin: 16px -16px 0; padding: 10px var(--gut) calc(10px + env(safe-area-inset-bottom)); }
/* floats only until a pick is in; opaque past a short fade, so rows under it are hidden
   cleanly rather than showing through half-cut */
.cta-bar.float { position: sticky; bottom: 0; z-index: 5; padding-top: 22px;
  background: linear-gradient(180deg, transparent 0, var(--bg) 18px); }
.cta-bar .big { margin: 0; }
.cta-who { display: block; width: 100%; min-height: 40px; margin-top: 4px; padding: 8px; background: none; border: 0;
  color: var(--muted); font-size: 13px; text-decoration: underline; text-underline-offset: 3px; }

/* "pick saved" banner */
.flash { position: relative; background: var(--card); border: 1px solid var(--accent); border-radius: var(--r);
  padding: 14px 44px 14px 14px; margin: 14px 0 4px; animation: pop .22s ease-out; }
.flash .ok { color: var(--accent); font-weight: 700; font-size: 14px; }
.flash .big-pick { font-size: 21px; font-weight: 700; margin: 4px 0 2px; }
.flash p { margin: 10px 0 0; font-size: 14px; }
.x { position: absolute; top: 4px; right: 4px; min-width: var(--tap); min-height: var(--tap);
  background: none; border: 0; color: var(--muted); font-size: 17px; }
@keyframes pop { from { opacity: 0; transform: translateY(-6px); } }

/* empty / error / loading */
.blank { text-align: center; padding: 26px 16px; border: 1px dashed var(--line); border-radius: var(--r);
  color: var(--muted); }
.blank b { display: block; color: var(--fg); font-size: 16px; margin-bottom: 4px; }
.err { background: var(--card); border: 1px solid var(--line); border-left: 3px solid var(--bad);
  border-radius: var(--r); padding: 14px; margin: 12px 0; }
.err b { display: block; margin-bottom: 4px; }
.err .big { margin-top: 12px; }
.sk { border-radius: var(--r-sm); background: linear-gradient(90deg, var(--card), var(--btn), var(--card));
  background-size: 300% 100%; animation: sheen 1.3s linear infinite; }
.sk-row { height: 54px; margin-bottom: 8px; }
.sk-line { height: 13px; margin: 8px 0; }
@keyframes sheen { from { background-position: 150% 0; } to { background-position: -150% 0; } }
.spin { display: inline-block; width: 15px; height: 15px; vertical-align: -2px; margin-right: 7px;
  border: 2px solid var(--btn-hi); border-top-color: var(--accent); border-radius: 50%;
  animation: spin .7s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }

/* ---------- pick sheet ---------- */
#sheet { position: fixed; inset: 0; z-index: 10; display: flex; flex-direction: column; background: var(--bg);
  animation: slide .2s cubic-bezier(.2, .8, .3, 1); }
#sheet[hidden] { display: none; }
@keyframes slide { from { transform: translateY(16px); } }
@keyframes rise { from { opacity: 0; transform: translateY(8px); } }
/* the sheet covers the whole screen, so its bar clears the status bar and notch itself */
.bar { display: flex; justify-content: space-between; align-items: center; gap: 8px;
  padding: calc(10px + env(safe-area-inset-top, 0px)) calc(12px + env(safe-area-inset-right, 0px)) 10px calc(12px + env(safe-area-inset-left, 0px));
  border-bottom: 1px solid var(--line); background: var(--panel); }
.bar b { font-size: 16px; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bar button { min-width: 82px; min-height: var(--tap); padding: 0 4px; background: none; border: 0;
  color: var(--link); font-size: 16px; font-weight: 600; text-align: left; }
.bar button:last-child { text-align: right; }
#scroll { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; }
.pad { max-width: 620px; margin: 0 auto; padding: 0 12px calc(24px + env(safe-area-inset-bottom)); }
.pad h2 { margin: 18px 4px 8px; }
/* a strip under the bar: this person's current pick */
.current { display: flex; align-items: center; gap: 8px; margin: 0 -12px 2px; padding: 11px 16px;
  background: var(--panel); border-bottom: 1px solid var(--line); font-size: 13px; color: var(--muted); }
.current b { color: var(--fg); }
.current .price { margin-left: auto; }

/* one sticky row per day carries the column labels, so the cards stay quiet */
.dayhead { position: sticky; top: 0; z-index: 2; margin: 0 -12px; padding: 14px 24px 6px; background: var(--bg); }
.dayhead .day { display: block; font-size: 12px; font-weight: 700; letter-spacing: .07em;
  text-transform: uppercase; color: var(--fg); }
.dayhead .cols { display: grid; gap: 6px; grid-template-columns: minmax(0, 1fr) repeat(3, var(--col));
  margin-top: 6px; }
.current + .dayhead, .dayhead:first-child { padding-top: 10px; }
.col { font-size: 10px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: var(--muted); text-align: center; }

/* a game card: two teams x spread / total / moneyline */
.game { background: var(--card); border-radius: var(--r); padding: var(--card-pad); margin-bottom: 10px; }
.game.has-pick { box-shadow: inset 0 0 0 1px var(--accent); }
.ghead { display: flex; justify-content: space-between; align-items: center; gap: 8px; margin-bottom: 8px; }
.when { font-size: 12px; color: var(--muted); letter-spacing: .02em; }
.yours { padding: 2px 8px; border-radius: var(--pill); background: var(--accent-soft);
  color: var(--accent); font-size: 11px; font-weight: 800; }
.grid { display: grid; grid-template-columns: minmax(0, 1fr) repeat(3, var(--col)); gap: 6px; align-items: center; }
.team { font-weight: 700; font-size: 16px; line-height: 1.15; overflow-wrap: anywhere; padding-right: 6px; }
.team small { display: block; font-weight: 500; font-size: 12px; color: var(--muted); }
.ghead-right { display: flex; align-items: center; gap: 8px; }
a.chip { display: inline-flex; align-items: center; text-decoration: none; color: inherit; }
.more { min-height: 38px; padding: 6px 14px; background: var(--btn); border: 0; border-radius: var(--pill);
  color: var(--fg); font-size: 12px; font-weight: 600; white-space: nowrap; }
.more:active { background: var(--btn-hi); }

/* a tappable betting option: the line leads, the price follows */
.bet { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px;
  min-height: 62px; padding: 6px 4px; border: 1px solid transparent; border-radius: var(--r-sm);
  background: var(--btn); transition: background .09s, transform .06s, box-shadow .09s; }
.bet .line { font-size: 15px; font-weight: 700; }
.bet .price { font-size: 13px; font-weight: 600; }
.bet.ml .price { font-size: 17px; }          /* moneyline has no line, so the price is the number */
.bet:active { background: var(--btn-hi); transform: scale(.97); }
.bet.cur { box-shadow: inset 0 0 0 1px var(--accent); }
.bet.on { background: var(--accent); color: var(--accent-fg); box-shadow: 0 0 0 2px var(--fg); }
.bet.on .price { color: var(--accent-fg); opacity: .8; }
.bet.off { color: var(--dim); background: var(--panel); }
.bet.row { flex-direction: row; justify-content: space-between; gap: 12px; width: 100%;
  min-height: 54px; padding: 12px 14px; margin-bottom: 8px; text-align: left; }
.bet.row .price { font-size: 16px; }
.chips { display: flex; gap: 8px; overflow-x: auto; margin: 12px -12px; padding: 2px 12px 6px;
  scrollbar-width: none; scroll-snap-type: x proximity; }
.chips::-webkit-scrollbar { display: none; }
.chip { flex: none; min-height: 40px; padding: 8px 14px; border-radius: var(--pill);
  border: 1px solid var(--line); background: none; color: var(--fg);
  font-size: 14px; font-weight: 600; scroll-snap-align: start; transition: background .12s, color .12s; }
.chip.on { background: var(--fg); color: var(--bg); border-color: var(--fg); }
.chip:active { background: var(--btn); }
.chip.on:active { background: var(--fg); }
#sheet .chips { position: sticky; top: 0; z-index: 2; background: var(--bg); margin-top: 0; padding-top: 10px; }
#filter { width: 100%; margin-bottom: 10px; }

/* alt lines: both sides paired, with a wheel of line values under them */
.altbox { background: var(--card); border-radius: var(--r); padding: 14px 12px 10px; }
.wheel-cap { margin: 0 2px 10px; }
.pair { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.big-bet { min-height: 88px; gap: 4px; padding: 12px 6px; background: var(--btn); }
.big-bet .line { font-size: 17px; font-weight: 700; }
.big-bet .price { font-size: 20px; font-weight: 800; }
.wheel { display: flex; gap: 8px; overflow-x: auto; margin: 14px -12px 0; padding: 2px 12px 10px;
  scrollbar-width: none; scroll-snap-type: x proximity; }
.wheel::-webkit-scrollbar { display: none; }
.tick { position: relative; flex: none; min-width: 62px; min-height: var(--tap); padding: 10px 8px;
  border-radius: var(--r-sm); border: 1px solid var(--line); background: none; color: var(--fg);
  font-size: 15px; font-weight: 600; scroll-snap-align: center; }
.tick.on { background: var(--fg); color: var(--bg); border-color: var(--fg); font-weight: 800; }
.tick.main::after { content: ''; position: absolute; left: 50%; bottom: 3px; width: 4px; height: 4px;
  margin-left: -2px; border-radius: 50%; background: var(--accent); }
.tick.on.main::after { background: var(--accent-fg); }

/* player props: one row per player with Over / Under */
.props { display: grid; grid-template-columns: minmax(0, 1fr) 80px 80px; gap: 6px; align-items: center; }
.prop-name { font-size: 15px; }

/* confirm bar: the one action, always in thumb reach */
#confirm { background: var(--panel); border-top: 1px solid var(--line); box-shadow: 0 -12px 32px rgba(0, 0, 0, .5);
  padding: 12px var(--gut) calc(14px + env(safe-area-inset-bottom)); animation: rise .18s ease-out; }
#confirm[hidden] { display: none; }
.c-head { display: flex; justify-content: space-between; align-items: center; font-size: 11px; font-weight: 800;
  letter-spacing: .1em; text-transform: uppercase; color: var(--muted); }
.c-head button { min-width: var(--tap); min-height: 32px; background: none; border: 0; color: var(--muted);
  font-size: 17px; text-align: right; }
.c-pick { display: flex; justify-content: space-between; align-items: baseline; gap: 12px;
  font-size: 22px; font-weight: 700; margin-top: 2px; }
.c-note { font-size: 13px; margin-top: 6px; }
#confirm .big { text-transform: uppercase; letter-spacing: .04em; margin-top: 12px; }

/* ---------- history ---------- */
/* your place in the open view, one tap from your full record */
.yours-card { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%;
  margin: 2px 0 0; padding: 11px 14px; min-height: var(--tap); text-align: left; font-size: 14px; color: var(--muted);
  background: var(--card); border: 1px solid var(--line); border-left: 3px solid var(--accent); border-radius: var(--r); }
.yours-card .sub { display: block; font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.yours-card b { color: var(--fg); font-size: 17px; }
.yours-card .go { font-size: 22px; line-height: 1; color: var(--dim); }
.yours-card:active { background: var(--btn); }
.stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-top: 12px; }
.stat { background: var(--card); border-radius: var(--r); padding: 12px 6px; text-align: center; }
.stat b { display: block; font-size: 17px; }
.stat > span { font-size: 10px; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; }
.cats { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; }
.cat:last-child:nth-child(odd) { grid-column: 1 / -1; } /* five categories: the last one spans */
.cat { background: var(--card); border-radius: var(--r); padding: 12px; display: flex;
  justify-content: space-between; align-items: baseline; gap: 8px; }
.rank { color: var(--dim); font-size: 13px; font-weight: 700; width: 1%; padding-right: 2px; }
.records { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; }
.record { background: var(--card); border-radius: var(--r); padding: 12px; }
.record > span { display: block; font-size: 10px; font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--muted); }
.record b { display: block; font-size: 17px; margin: 4px 0 2px; }
.record:last-child:nth-child(odd) { grid-column: 1 / -1; }

/* ---------- admin ---------- */
.panel { background: var(--card); border-radius: var(--r); padding: 12px; }
.form { display: grid; gap: 10px; margin-top: 8px; }
.form label { display: grid; gap: 4px; font-size: 13px; color: var(--muted); }
.form .two { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
td select { padding: 8px; font-size: 14px; min-width: 96px; min-height: 40px; }

/* desktop: the sheet becomes a centred panel instead of a full-bleed screen */
@media (min-width: 760px) {
  #sheet { inset: 24px 0; max-width: 680px; margin: 0 auto; border-radius: var(--r-lg);
    overflow: hidden; box-shadow: var(--shadow); border: 1px solid var(--line); }
  #sheet::before { content: ''; position: fixed; inset: 0; z-index: -1; background: rgba(0, 0, 0, .55); }
  .bar { padding-top: 10px; }
}
@media (hover: hover) {
  .bet:hover { background: var(--btn-hi); }
  .bet.on:hover { background: var(--accent); }
  .chip:hover, .more:hover, .tick:hover { background: var(--btn); }
  .chip.on:hover { background: var(--fg); }
  tr.tap:hover td { background: var(--card); }
  .board tr.tap:hover td { background: var(--btn); }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}
