/* ==========================================================================
   DAILY PAWS — CLAUDE EDITION
   leaderboard.css · the monthly board, shared by all four games
   --------------------------------------------------------------------------
   Replaces the original leaderboard.css, which had survived the overhaul with
   only a thin patch in each game stylesheet: the podium gradients, the emoji
   medals, the trophy gold and five different corner radii were all still the
   original Daily Paws.

   This is a results table, not a podium. Flat rows on the panel's own ground,
   separated by hairline rules; rank set in DM Mono with tabular figures; the
   first three carry weight and the game's accent rather than a medal; the one
   spent colour is the reader's own row.

   Light and dark are one set of rules. The two themes differ only in the
   --lb-* values below, instead of the original's duplicated `body.light`
   fork that restated every declaration.

   Per-game accent: each game sets --lb-accent in its own stylesheet.
   Tokens: shared/css/tokens.css.
   ========================================================================== */

.lb-panel{
  /* Night is the default: three of the four games open dark. */
  --lb-surface:   var(--night-2);
  --lb-ink:       var(--cream);
  --lb-muted:     var(--cream-mute);
  --lb-faint:     rgba(244,234,214,.42);
  --lb-line:      var(--night-line);
  --lb-line-firm: rgba(244,234,214,.26);
  --lb-accent:    var(--amber);
  --lb-me-tint:   rgba(191,78,28,.18);
  --lb-avatar-bg: rgba(244,234,214,.06);
  --lb-gold:      #E6B34C;
  --lb-gold-tint: rgba(230,179,76,.10);

  position:relative;
  box-sizing:border-box;
  width:100%; max-width:392px;
  max-height:88dvh; overflow-y:auto; overscroll-behavior:contain;
  padding:26px 22px 22px;
  background:var(--lb-surface);
  color:var(--lb-ink);
  border:1px solid var(--lb-line);
  border-radius:var(--r-md);
  box-shadow:0 40px 80px -40px rgba(0,0,0,.7);
  font-family:var(--f-sans); font-weight:400; line-height:1.5;
  scrollbar-width:none; -ms-overflow-style:none;
}
.lb-panel::-webkit-scrollbar{ display:none }
.lb-panel *, .lb-panel *::before, .lb-panel *::after{ box-sizing:border-box }
.lb-panel p, .lb-panel h2, .lb-panel div, .lb-panel span{ margin:0 }

body.light .lb-panel, .light .lb-panel{
  --lb-surface:   var(--paper);
  --lb-ink:       var(--ink);
  --lb-muted:     var(--muted);
  --lb-faint:     rgba(31,21,12,.45);
  --lb-line:      var(--line);
  --lb-line-firm: var(--line-firm);
  --lb-accent:    var(--rust);
  --lb-me-tint:   rgba(191,78,28,.10);
  --lb-avatar-bg: rgba(31,21,12,.05);
  --lb-gold:      #A8721C;
  --lb-gold-tint: rgba(201,133,38,.10);
  box-shadow:0 40px 80px -44px rgba(64,40,14,.45);
}

/* ── Close ─────────────────────────────────────────────────────────────── */
.lb-close{
  position:absolute; top:10px; right:10px;
  width:40px; height:40px; padding:0;
  display:flex; align-items:center; justify-content:center;
  background:none; border:0; cursor:pointer;
  font-family:var(--f-sans); font-size:15px; line-height:1;
  color:var(--lb-muted);
  border-radius:var(--r-pill);
  transition:color .22s var(--e-out), background .22s var(--e-out);
}
.lb-close:hover{ color:var(--lb-ink); background:var(--lb-avatar-bg) }
.lb-close:focus{ outline:none }
.lb-close:focus-visible{ outline:1.5px solid var(--lb-line-firm); outline-offset:0; color:var(--lb-ink); border-radius:var(--r-pill) }
.lb-close span{ position:relative }

/* ── Masthead ──────────────────────────────────────────────────────────
   Title, then the month row. The month-display line is a fallback only: once
   the nav renders it repeats the nav label, so it steps aside. */
.lb-heading{
  font-family:var(--f-display); font-weight:600; font-size:1.32rem;
  letter-spacing:-.018em; line-height:1.1; color:var(--lb-ink);
  text-align:center; margin-bottom:16px;
}
.lb-month-display{
  font-family:var(--f-mono); font-size:.6875rem; font-weight:500;
  letter-spacing:.16em; text-transform:uppercase;
  color:var(--lb-accent); text-align:center; margin:-8px 0 14px;
}
.lb-month-display:empty,
.lb-panel:has(.lb-nav-inner) .lb-month-display{ display:none }
/* Out-rank the ".lb-panel p/h2/div" margin reset above. */
.lb-panel .lb-heading{ margin-bottom:14px }
.lb-panel .lb-month-display{ margin:-6px 0 12px }
.lb-panel .lb-subhead{ margin:14px auto 0 }
.lb-panel .lb-subhead + .lb-scoring{ margin-top:14px }
/* The div reset above outranks the grid's own auto margins, which pinned the
   scoring table to the left edge under a centred title. */
.lb-panel .lb-scoring-grid{ margin:0 auto }
/* The reset note sits under the list as small print, not in the masthead. */
.lb-subhead,.lb-month{
  font-family:var(--f-sans); font-size:.75rem; line-height:1.5;
  color:var(--lb-faint); text-align:center; margin:14px auto 0; max-width:34ch;
  text-wrap:balance;
}

/* ── Month navigation ──────────────────────────────────────────────────
   Two quiet mono controls either side of the month, on a hairline rule —
   not a bordered box. */
.lb-month-nav{ margin:0 0 4px }
.lb-nav-inner{
  display:flex; align-items:center; justify-content:space-between; gap:8px;
  padding:0 0 12px; border-bottom:1px solid var(--lb-line);
  background:none; border-radius:0;
}
.lb-nav-label{
  flex:1; text-align:center; white-space:nowrap;
  font-family:var(--f-display); font-weight:600; font-size:.9375rem;
  letter-spacing:-.01em; color:var(--lb-ink);
}
.lb-panel .lb-transition-countdown{
  display:flex; flex-direction:column; align-items:center; gap:2px;
  margin-top:5px;
  font-family:var(--f-mono); font-weight:400; line-height:1.3;
  color:var(--lb-muted);
}
.lb-transition-kicker{
  font-size:.5625rem; letter-spacing:.1em; text-transform:uppercase;
}
.lb-transition-time{
  font-size:.6875rem; letter-spacing:.03em;
  font-variant-numeric:tabular-nums;
}
.lb-nav-btn{
  padding:4px 2px; background:none; border:0; cursor:pointer;
  font-family:var(--f-mono); font-size:.625rem; font-weight:500;
  letter-spacing:.12em; text-transform:uppercase; white-space:nowrap;
  color:var(--lb-muted); flex:none;
  transition:color .2s var(--e-out);
}
.lb-nav-btn:hover:not(:disabled){ color:var(--lb-accent) }
.lb-nav-btn:disabled{ opacity:.3; cursor:default }

/* ── Rows ──────────────────────────────────────────────────────────────
   One row treatment. The top three differ by weight and a portrait, not by
   a gradient pill. */
.lb-list,.lb-panel .lb-list{ display:flex; flex-direction:column; gap:0; margin-top:2px }
.lb-rest{ display:flex; flex-direction:column; gap:0 }

.lb-row--top3,
.lb-row--rest{
  position:relative;
  display:flex; align-items:center; gap:12px;
  padding:11px 10px 11px 8px;
  border-bottom:1px solid var(--lb-line);
  background:none; border-radius:0;
}
/* Every place carries its portrait; the firmer rule is all that marks the
   top three now. */
.lb-list > .lb-row--top3:nth-of-type(3){ border-bottom-color:var(--lb-line-firm) }
.lb-rest .lb-row--rest:last-child{ border-bottom:0 }

.lb-rank{
  flex:none; width:2ch; text-align:right;
  font-family:var(--f-mono); font-size:.75rem; font-weight:500;
  font-variant-numeric:tabular-nums; color:var(--lb-faint);
}
.lb-row--top3 .lb-rank{ color:var(--lb-accent) }

/* The breed portrait is content. Only its ring is restated: a hairline in
   place of the original's gold bevel. */
.lb-avatar-wrap{
  flex:none; display:block; overflow:hidden;
  width:42px; height:42px; padding:0;
  background:var(--lb-avatar-bg);
  border:1px solid var(--lb-line-firm); border-radius:50%;
}
.lb-avatar{ display:block; width:100%; height:100%; border-radius:50%; object-fit:cover; filter:none; opacity:1 }
.lb-avatar--blank{ display:block; width:100%; height:100%; border-radius:50%; background:var(--lb-avatar-bg); border:0 }

.lb-name-wrap{ flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; justify-content:center }
.lb-name{
  font-family:var(--f-sans); font-weight:600; font-size:.9375rem; line-height:1.3;
  color:var(--lb-ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}

.lb-missed,.lb-best,.lb-wins{
  font-family:var(--f-mono); font-size:.625rem; font-weight:400;
  letter-spacing:.04em; line-height:1.4; color:var(--lb-faint);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.lb-missed:empty,.lb-best:empty,.lb-wins:empty{ display:none }

.lb-pts{
  flex:none; margin-left:auto; white-space:nowrap;
  font-family:var(--f-mono); font-weight:500; font-size:.875rem;
  font-variant-numeric:tabular-nums; color:var(--lb-ink);
}

/* ── The reader's own row ──────────────────────────────────────────────
   The one place colour is spent: a rust rule in the margin and the faintest
   tint, instead of the original's border, glow and inset shadow. */
.lb-row--me{ background:var(--lb-me-tint) }
.lb-row--me::before{
  content:""; position:absolute; left:0; top:0; bottom:0;
  width:2px; background:var(--rust);
}
.lb-you-dot{
  display:inline-block; flex:none; width:6px; height:6px; border-radius:50%;
  background:var(--moss); margin-left:9px; vertical-align:middle;
  position:relative; top:-1px; /* optically centres it against the bold name, not its baseline */
}
/* The ".lb-panel span" margin reset above outranks the margin-left in the
   rule itself, which left the dot sitting flush against the name. Restating
   it with the panel class in front wins the tie. */
.lb-panel .lb-you-dot{ margin-left:8px }

/* ── Pinned personal position row ───────────────────────────────────────
   When the player is outside the Top 10, their real standing is pinned
   underneath, separated from the Top 10 by a subtle dashed rule and label. */
.lb-pinned-wrap{
  margin-top:10px;
  padding-top:10px;
  border-top:1px dashed var(--lb-line-firm);
}
.lb-pinned-header{
  display:flex; align-items:center; justify-content:space-between;
  padding:0 8px 6px;
}
.lb-pinned-label{
  font-family:var(--f-mono); font-size:.625rem; font-weight:500;
  letter-spacing:.14em; text-transform:uppercase;
  color:var(--lb-muted);
}
.lb-row--pinned{
  border-bottom:0;
}
.lb-row--pinned .lb-rank{
  width:auto; min-width:2ch;
  color:var(--lb-ink);
  font-weight:600;
}

/* ── Podium test (leaderboard.js PODIUM) ────────────────────────────────
   The weekly boards show only the top 5; the top 3 get a gold, silver or
   bronze medal in place of the rank, a larger portrait ringed in that
   metal and a soft wash of it behind the row. Everything is scoped to
   .lb-list--podium, so switching PODIUM off restores the plain table. */
.lb-list--podium .lb-row--top3{ padding-top:13px; padding-bottom:13px }
.lb-list--podium .lb-row--gold{ --lb-metal:#E2A93A; --lb-metal-wash:rgba(230,179,76,.16) }
.lb-list--podium .lb-row--silver{ --lb-metal:#B3BCC6; --lb-metal-wash:rgba(196,204,214,.12) }
.lb-list--podium .lb-row--bronze{ --lb-metal:#C47A3F; --lb-metal-wash:rgba(196,122,63,.13) }
.lb-list--podium .lb-row--gold,
.lb-list--podium .lb-row--silver,
.lb-list--podium .lb-row--bronze{
  background:linear-gradient(90deg,var(--lb-metal-wash),transparent 78%);
}
.lb-list--podium .lb-avatar-wrap{ width:48px; height:48px }
.lb-list--podium .lb-row--top3 .lb-avatar-wrap{
  border:2px solid var(--lb-metal, var(--lb-line-firm));
}
.lb-list--podium .lb-row--gold .lb-avatar-wrap{
  box-shadow:0 0 0 3px rgba(230,179,76,.18);
}
.lb-list--podium .lb-row--top3 .lb-name{ font-size:1rem }
.lb-list--podium .lb-row--gold .lb-name{ font-size:1.0625rem }
.lb-list--podium .lb-row--top3 .lb-pts{ font-size:.9375rem; font-weight:600 }
.lb-list--podium .lb-row--gold .lb-pts{ color:var(--lb-gold) }
.lb-list--podium .lb-rank{ width:28px; text-align:center }
/* The reader's own row keeps its tint, even on the podium */
.lb-list--podium .lb-row--me{ background:var(--lb-me-tint) }

/* The medal: a struck coin with its number, hung from a short ribbon.
   The coin is the inner span, so it sits over the ribbon's lower edge. */
.lb-medal{ position:relative; flex:none; width:28px; height:28px; margin-top:6px }
.lb-medal::before{
  content:""; position:absolute; left:50%; top:-9px;
  width:16px; height:13px; transform:translateX(-50%);
  clip-path:polygon(0 0,100% 0,82% 100%,50% 72%,18% 100%);
}
.lb-medal > span{
  position:absolute; inset:0; display:grid; place-items:center; border-radius:50%;
  font-family:var(--f-mono); font-size:.8125rem; font-weight:700;
  font-variant-numeric:tabular-nums; line-height:1;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.55), inset 0 -2px 0 rgba(0,0,0,.18), 0 3px 8px -3px rgba(0,0,0,.55);
}
.lb-medal > span::after{
  content:""; position:absolute; inset:3px; border-radius:50%;
  border:1px solid rgba(255,255,255,.35); pointer-events:none;
}
.lb-medal--gold > span{ color:#5A3905; background:radial-gradient(circle at 35% 30%,#FFF0B8 0%,#F5CC5C 38%,#D69A2A 100%) }
.lb-medal--gold::before{ background:linear-gradient(90deg,#B8452A 0 50%,#2F5D8A 50% 100%) }
.lb-medal--silver > span{ color:#37404A; background:radial-gradient(circle at 35% 30%,#FFFFFF 0%,#D9DFE5 40%,#99A3AE 100%) }
.lb-medal--silver::before{ background:linear-gradient(90deg,#2F5D8A 0 50%,#B8452A 50% 100%) }
.lb-medal--bronze > span{ color:#43200A; background:radial-gradient(circle at 35% 30%,#FBD3AE 0%,#D9925A 40%,#9C5728 100%) }
.lb-medal--bronze::before{ background:linear-gradient(90deg,#4D7A3E 0 50%,#B8452A 50% 100%) }
.lb-row--gold .lb-medal > span{ font-size:.875rem }

/* ── Loading, empty and footnote ───────────────────────────────────────── */
.lb-loading{
  font-family:var(--f-display); font-style:italic; font-size:1rem;
  color:var(--lb-accent); text-align:center; padding:22px 12px;
}
.lb-note{
  font-family:var(--f-sans); font-size:.75rem; line-height:1.5;
  color:var(--lb-faint); text-align:center; margin-top:14px;
}

/* ── Scoring ───────────────────────────────────────────────────────────
   A mono definition list under a rule, matching the rule rows on the front
   page's puzzle plates. */
.lb-scoring{ margin-top:18px; padding-top:16px; border-top:1px solid var(--lb-line) }
.lb-panel .lb-scoring-title{
  font-family:var(--f-mono); font-size:.625rem; font-weight:500;
  letter-spacing:.18em; text-transform:uppercase;
  color:var(--lb-muted); text-align:center; margin-bottom:18px;
}
.lb-scoring-grid{
  display:grid; grid-template-columns:1fr auto; gap:7px 14px;
  max-width:250px; margin:0 auto; align-items:baseline;
  font-family:var(--f-sans); font-size:.8125rem; color:var(--lb-muted);
}
.lb-scoring-pts{
  font-family:var(--f-mono); font-weight:500; text-align:right;
  font-variant-numeric:tabular-nums; color:var(--lb-ink);
}

/* ── Catch-Up Paws ─────────────────────────────────────────────────────
   A paw and a count in the row's small print, only for players who used one.
   One key under the list explains it, instead of a column. */
.lb-panel .lb-cup{
  display:inline-flex; align-items:center; gap:3px;
  margin-left:7px;
  line-height:1; color:var(--lb-accent);
}
.lb-cup .dp-paw{ display:block; width:9px; height:9px; flex:none }
.lb-cup-n{ font-variant-numeric:tabular-nums }
.lb-panel .lb-cup-note{
  display:flex; align-items:center; justify-content:center; gap:6px;
  margin:12px 0 0;
  font-family:var(--f-mono); font-size:.625rem; font-weight:400; letter-spacing:.06em;
  color:var(--lb-faint);
}
.lb-cup-note .dp-paw{ display:block; width:10px; height:10px; flex:none; color:var(--lb-accent) }
/* The note is a link to the Catch-Up Paws guide: quiet like the note it
   replaces, with an underline that draws on hover and a small arrow. */
.lb-cup-note a{
  display:inline-flex; align-items:center; gap:6px;
  color:inherit; text-decoration:none;
  padding-bottom:1px;
  background-image:linear-gradient(currentColor,currentColor);
  background-size:0% 1px; background-repeat:no-repeat; background-position:0 100%;
  transition:color .22s var(--e-out), background-size .32s var(--e-io);
}
.lb-cup-note a:hover,
.lb-cup-note a:focus-visible{ color:var(--lb-ink); background-size:100% 1px }
.lb-cup-note a:focus-visible{ outline:1.5px solid var(--lb-line-firm); outline-offset:3px; border-radius:var(--r-xs) }
.lb-cup-note-arrow{ color:var(--lb-accent); transition:transform .25s var(--e-out) }
.lb-cup-note a:hover .lb-cup-note-arrow{ transform:translateX(2px) }

/* ── Streaks ───────────────────────────────────────────────────────────
   Pawdle and Connect Paws show each player's streak in the row's small
   print: a flame in the game's accent and the count. The row renders at once
   with a quiet "Streak" placeholder; leaderboard.js fills the count in. */
.lb-streak{ display:inline-flex; align-items:center; gap:4px; vertical-align:top }
.lb-streak-icon{ display:block; flex:none; width:10px; height:10px; color:var(--lb-accent) }
.lb-streak.is-zero .lb-streak-icon{ color:var(--lb-faint) }
.lb-streak.is-loading .lb-streak-n{ opacity:.5 }
@media (prefers-reduced-motion:no-preference){
  .lb-streak-n{ transition:opacity .25s var(--e-out) }
}

/* ── Last month's winners ──────────────────────────────────────────────
   Pawdle, Connect Paws and Paw Paths close their board with a way through to
   the front page's podium of last month's top three (index.html #winners). */
.lb-panel .lb-winners-link{
  display:flex; align-items:center; gap:12px;
  margin:16px 0 0; padding:12px 14px;
  border:1px solid var(--lb-line); border-radius:var(--r-sm);
  background:linear-gradient(100deg,var(--lb-gold-tint),transparent 72%);
  color:var(--lb-ink); text-decoration:none;
  transition:border-color .22s var(--e-out);
}
.lb-panel .lb-winners-link:hover{ border-color:var(--lb-gold) }
.lb-panel .lb-winners-link:focus-visible{ outline:1.5px solid var(--lb-gold); outline-offset:2px }
.lb-winners-cup{ display:block; flex:none; width:26px; height:26px; color:var(--lb-gold) }
.lb-panel .lb-winners-text{ flex:1; min-width:0; display:flex; flex-direction:column; gap:3px }
.lb-winners-kicker{
  font-family:var(--f-mono); font-size:.5625rem; font-weight:500;
  letter-spacing:.18em; text-transform:uppercase; line-height:1.2;
  color:var(--lb-gold);
}
.lb-winners-title{
  font-family:var(--f-display); font-weight:600; font-size:1rem;
  letter-spacing:-.01em; line-height:1.2; color:var(--lb-ink);
}
.lb-winners-arrow{
  flex:none; font-size:1.05rem; line-height:1; color:var(--lb-muted);
  transition:transform .25s var(--e-out), color .25s var(--e-out);
}
.lb-winners-link:hover .lb-winners-arrow{ transform:translateX(3px); color:var(--lb-gold) }

/* ── Small screens ─────────────────────────────────────────────────────── */
@media (max-width:420px){
  .lb-panel{ padding:22px 16px 18px }
  .lb-row--top3,.lb-row--rest{ gap:10px; padding:10px 6px 10px 8px }
  .lb-avatar-wrap{ width:38px; height:38px }
  .lb-name{ font-size:.875rem }
  .lb-list--podium .lb-avatar-wrap{ width:44px; height:44px }
}

@media (prefers-reduced-motion:reduce){
  .lb-close,.lb-nav-btn,.lb-winners-link,.lb-winners-arrow{ transition:none }
}

/* ── Weekly competition ────────────────────────────────────────────────
   Shared by the page and the three game modals. One compact header (week
   stepper with its dates, then a single live strip carrying the countdown,
   the last update and Refresh), then tight rows: portrait, name and small
   print, points, and the week's daily chips. */
.lb-competition-panel{max-width:500px;max-height:calc(100dvh - 32px);scrollbar-width:thin;padding:24px 20px 18px}
.lb-panel.lb-competition-panel .lb-heading{margin-bottom:8px}

/* Week stepper: two quiet round chevrons hugging the week's name, the dates
   beneath. Each button keeps a 44px hit area; the ring is drawn inside it. */
.lb-period{display:flex;flex-direction:column;align-items:center}
.lb-panel .lb-period .lb-nav-inner{justify-content:center;gap:0;padding:0;border:0}
.lb-panel .lb-period .lb-nav-label{flex:0 1 auto;min-width:6.5em;padding:0 4px;font-size:1.0625rem;white-space:normal}
.lb-panel .lb-period .lb-nav-btn{position:relative;display:grid;place-items:center;width:44px;height:44px;min-width:0;min-height:0;padding:0;color:var(--lb-muted)}
.lb-period .lb-nav-btn::before{content:"";position:absolute;inset:8px;border:1px solid var(--lb-line-firm);border-radius:50%;transition:border-color .2s var(--e-out),background-color .2s var(--e-out),box-shadow .2s var(--e-out)}
.lb-period .lb-nav-btn svg{position:relative;display:block;width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.lb-panel .lb-period .lb-nav-btn:hover:not(:disabled){color:var(--lb-gold)}
.lb-period .lb-nav-btn:hover:not(:disabled)::before{border-color:var(--lb-gold);background:var(--lb-gold-tint)}
.lb-panel .lb-period .lb-nav-btn:disabled{opacity:.3}
.lb-panel .lb-period .lb-nav-btn:focus-visible{outline:0}
.lb-period .lb-nav-btn:focus-visible::before{border-color:var(--lb-gold);box-shadow:0 0 0 2px var(--lb-gold)}
.lb-panel .lb-period-dates,
.lb-panel.lb-competition-panel:has(.lb-nav-inner) .lb-month-display{display:block;margin:0;font:400 .75rem/1.4 var(--f-sans);letter-spacing:0;text-transform:none;text-align:center;color:var(--lb-muted);font-variant-numeric:tabular-nums}

/* The live strip: one line between hairlines. Countdown on the left with a
   live dot, the update time and Refresh on the right. A stale warning drops
   to its own line underneath, where there's room to read it. */
.lb-panel .lb-board-tools{display:flex;flex-wrap:wrap;align-items:center;gap:0 14px;margin:14px 0 0;padding:0 0 0 2px;border-top:1px solid var(--lb-line);border-bottom:1px solid var(--lb-line);font:500 .625rem/1.4 var(--f-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--lb-muted)}
.lb-countdown{display:inline-flex;align-items:center;gap:8px;color:var(--lb-gold)}
.lb-countdown.is-live::before{content:"";flex:none;width:6px;height:6px;border-radius:50%;background:#6E9A57;box-shadow:0 0 0 3px rgba(110,154,87,.18)}
.lb-panel .lb-board-status{flex:1;min-width:0;min-height:0;margin:0;font:400 .72rem/1.4 var(--f-sans);letter-spacing:0;text-transform:none;text-align:right;color:var(--lb-faint)}
.lb-panel .lb-board-status:empty{visibility:hidden}
.lb-panel .lb-board-status.is-stale{flex-basis:100%;order:3;margin:0 0 10px;padding:8px 10px;text-align:left;color:var(--lb-gold);background:var(--lb-gold-tint);border-left:2px solid var(--lb-gold)}
.lb-panel .lb-refresh{margin-left:auto;gap:6px;min-height:44px;padding:0 2px;border:0;border-radius:0;font:inherit;letter-spacing:inherit;color:var(--lb-muted)}
.lb-refresh::before{content:"";flex:none;width:12px;height:12px;background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13.5 8A5.5 5.5 0 1 1 11.9 4.1'/%3E%3Cpath d='M12.4 1.6v2.9H9.5'/%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 16 16' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13.5 8A5.5 5.5 0 1 1 11.9 4.1'/%3E%3Cpath d='M12.4 1.6v2.9H9.5'/%3E%3C/svg%3E") center/contain no-repeat}
.lb-panel .lb-refresh:hover{color:var(--lb-gold)}
.lb-panel .lb-refresh:disabled{opacity:.6}
/* Phones: the update time steps out of sight (still announced) so the strip
   stays one line; a stale warning always shows. */
@media(max-width:540px){.lb-panel .lb-board-status:not(.is-stale){position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}}
@media(prefers-reduced-motion:no-preference){
  .lb-countdown.is-live::before{animation:lb-live 2.4s var(--e-io) infinite}
  .lb-refresh:disabled::before{animation:lb-spin .9s linear infinite}
  @keyframes lb-live{50%{box-shadow:0 0 0 5px rgba(110,154,87,0)}}
  @keyframes lb-spin{to{transform:rotate(360deg)}}
}

/* Rows */
.lb-competition-row{display:grid;grid-template-columns:28px 40px minmax(0,1fr) auto;align-items:center;gap:0 12px;padding:10px 8px}
.lb-list--podium .lb-competition-row.lb-row--top3{padding-top:12px;padding-bottom:12px}
.lb-competition-row .lb-avatar-wrap,.lb-list--podium .lb-competition-row .lb-avatar-wrap{width:40px;height:40px}
.lb-competition-row .lb-medal{margin:6px auto 0}
.lb-competition-row .lb-rank{width:auto;text-align:center}
.lb-competition-row .lb-name-wrap{min-width:0;gap:1px}
.lb-competition-row .dp-player-name{display:flex;align-items:center;gap:5px;min-width:0;flex-wrap:wrap}
.lb-competition-row .lb-name{overflow:visible;white-space:normal;overflow-wrap:anywhere}
.lb-list--podium .lb-competition-row.lb-row--top3 .lb-name{font-size:.9688rem}
.lb-list--podium .lb-competition-row.lb-row--gold .lb-name{font-size:1rem}
/* The name stays a 44px target without making every row 44px tall. */
.lb-competition-row a.lb-name{position:relative}
.lb-competition-row a.lb-name::after{content:"";position:absolute;inset:-12px -4px}
.lb-competition-row a.lb-name:hover{text-decoration:underline;text-underline-offset:3px}
.lb-competition-row .lb-row-meta{font:400 .6875rem/1.45 var(--f-sans);color:var(--lb-muted);overflow-wrap:anywhere}
.lb-competition-row .lb-pts{display:flex;flex-direction:column;align-items:flex-end;margin:0;align-self:center}
.lb-competition-row .lb-pts>b{font:500 1rem/1.15 var(--f-mono);font-variant-numeric:tabular-nums}
.lb-list--podium .lb-competition-row.lb-row--top3 .lb-pts>b{font-weight:600}
.lb-competition-row .lb-pts>span{font:500 .5625rem/1 var(--f-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--lb-faint);margin-top:4px}
.lb-you-label{font:500 .5625rem var(--f-mono);letter-spacing:.1em;color:var(--lb-accent);text-transform:uppercase}
/* The week's daily results: small soft tabs, newest first. */
.lb-recent{grid-column:3 / 5;display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}
.lb-panel .lb-score-chip{display:inline-flex;align-items:baseline;gap:6px;padding:2px 7px;border:1px solid var(--lb-line);border-radius:5px;background:var(--lb-avatar-bg);font:400 .65rem/1.5 var(--f-sans);color:var(--lb-muted);white-space:nowrap}
.lb-panel .lb-score-chip b{font:500 .6875rem var(--f-mono);font-variant-numeric:tabular-nums;color:var(--lb-ink)}
.lb-recent--missing{font:400 .65rem/1.5 var(--f-sans);color:var(--lb-faint)}

.lb-action{display:inline-flex;align-items:center;justify-content:center;min-height:44px;background:none;color:var(--lb-ink);border:1px solid var(--lb-line-firm);padding:8px 14px;border-radius:var(--r-sm);font:500 .75rem var(--f-sans);line-height:1.3;cursor:pointer;text-decoration:none;text-align:center;transition:border-color .2s var(--e-out),color .2s var(--e-out)}
.lb-action:hover{border-color:var(--lb-gold);color:var(--lb-gold)}
.lb-action:disabled{opacity:.5;cursor:wait}
.lb-action:focus-visible,.lb-nav-btn:focus-visible,.lb-name:focus-visible,.lb-avatar-wrap:focus-visible{outline:2px solid var(--lb-gold);outline-offset:3px}
.lb-shortcuts{display:flex;gap:8px;justify-content:center;margin-top:16px!important}
.lb-panel .lb-empty{padding:30px 12px;text-align:center;font-size:.9rem;color:var(--lb-muted)}
.lb-empty .lb-action{margin-top:16px}
.lb-panel .lb-participation-note{font-size:.8rem;color:var(--lb-muted);padding:16px 8px 4px;line-height:1.6}
.lb-participation-note a{color:var(--lb-gold);text-decoration:underline}
.lb-competition-panel .lb-subhead{color:var(--lb-muted);font-size:.78rem;max-width:48ch}

/* "How points work": a quiet disclosure with its own chevron in place of the
   browser's triangle. */
.lb-scoring summary{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;padding:10px 0;list-style:none;cursor:pointer;font:500 .8rem var(--f-sans);color:var(--lb-muted);transition:color .2s var(--e-out)}
.lb-scoring summary::-webkit-details-marker{display:none}
.lb-scoring summary::after{content:"";flex:none;width:7px;height:7px;margin-right:3px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform .25s var(--e-out)}
.lb-scoring[open] summary::after{transform:translateY(1px) rotate(-135deg)}
.lb-scoring summary:hover{color:var(--lb-ink)}
.lb-scoring summary:focus-visible{outline:2px solid var(--lb-gold);outline-offset:2px;border-radius:var(--r-xs)}
.lb-scoring[open] .lb-scoring-grid{margin:6px auto 16px}
.lb-skeleton{display:flex;align-items:center;gap:14px;padding:20px 8px;border-bottom:1px solid var(--lb-line)}
.lb-skeleton i{display:block;height:13px;background:var(--lb-avatar-bg);border-radius:4px}
.lb-skeleton>i:first-child{width:42px;height:42px;border-radius:50%;flex:none}
.lb-skeleton>span{display:grid;gap:10px;flex:1}.lb-skeleton>span i:first-child{width:65%}.lb-skeleton>span i:last-child{width:85%}.lb-skeleton>i:last-child{width:52px}
@media(prefers-reduced-motion:no-preference){.lb-skeleton{animation:lb-breathe 1.6s ease-in-out infinite alternate}@keyframes lb-breathe{to{opacity:.45}}}
/* ── Player profile ────────────────────────────────────────────────────
   A native dialog above any open game shortcut. Compact: portrait and name
   side by side, then one hairline row per game for this week and for the
   trophy cabinet. Reactions stay folded behind a single toggle. */
.dp-profile-dialog.lb-panel{position:fixed;inset:0;margin:auto;width:calc(100% - 32px);max-width:560px;max-height:calc(100dvh - 40px);padding:22px 24px 18px;scrollbar-width:thin;overscroll-behavior:contain;--lb-surface:var(--paper);--lb-ink:var(--ink);--lb-muted:var(--muted);--lb-faint:rgba(31,21,12,.45);--lb-line:var(--line);--lb-line-firm:var(--line-firm);--lb-gold:#93621d;--lb-gold-tint:rgba(201,133,38,.09);--lb-avatar-bg:rgba(31,21,12,.05)}
.dp-profile-dialog::backdrop{background:rgba(21,14,8,.7);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.dp-profile-dialog:not([open]){display:none}

/* Toolbar: icon refresh and close, tucked into the corner. */
.dp-profile-dialog .dp-profile-toolbar{position:absolute;top:10px;right:10px;z-index:1;display:flex;align-items:center;gap:0;margin:0}
.dp-profile-toolbar .lb-close{position:static}
.lb-panel .dp-profile-toolbar .lb-refresh{justify-content:center;width:40px;min-height:40px;margin:0;padding:0;border-radius:50%;font-size:0;color:var(--lb-muted)}
.dp-profile-toolbar .lb-refresh::before{width:14px;height:14px}
.lb-panel .dp-profile-toolbar .lb-refresh:hover{color:var(--lb-ink);background:var(--lb-avatar-bg)}
.dp-profile-toolbar .lb-refresh:focus-visible{outline:1.5px solid var(--lb-line-firm);outline-offset:0}
/* The status only takes space when something is wrong; otherwise it is read, not shown. */
.lb-panel.dp-profile-dialog .lb-board-status{margin:0}
.lb-panel.dp-profile-dialog .lb-board-status:not(.is-stale){position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.lb-panel.dp-profile-dialog .lb-board-status.is-stale{margin:34px 0 14px}

/* Header */
.dp-profile-dialog .dp-profile-head{display:grid;grid-template-columns:72px minmax(0,1fr);align-items:center;gap:0 16px;padding:4px 84px 20px 0;text-align:left}
.dp-profile-head>img{grid-row:1 / span 2;width:72px;height:72px;margin:0;object-fit:cover;border-radius:50%;border:2px solid var(--lb-gold);box-shadow:0 0 0 4px var(--lb-gold-tint)}
.dp-profile-dialog .dp-profile-id{min-width:0}
.dp-profile-dialog .dp-profile-kicker{margin:0;font:500 .5625rem/1.4 var(--f-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--lb-gold)}
.dp-profile-dialog h2{margin:2px 0 3px;font:600 1.65rem/1.1 var(--f-display);letter-spacing:-.02em;overflow-wrap:anywhere}
.dp-profile-dialog .dp-profile-verification{display:flex;align-items:center;gap:6px;margin:0;font-size:.72rem;color:var(--lb-muted)}
.dp-react-toggle,.dp-profile-own{grid-column:2;justify-self:start;margin-top:10px}
.dp-react-toggle{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 14px 0 11px;border:1px solid var(--lb-line-firm);border-radius:var(--r-pill);background:var(--lb-avatar-bg);color:var(--lb-ink);font:600 .78rem var(--f-sans);cursor:pointer;transition:border-color .2s var(--e-out),background-color .2s var(--e-out)}
.dp-react-toggle>span{font-size:1rem;line-height:1}
.dp-react-toggle::after{content:"";width:6px;height:6px;margin:0 0 3px 2px;border-right:1.5px solid var(--lb-muted);border-bottom:1.5px solid var(--lb-muted);transform:rotate(45deg);transition:transform .25s var(--e-out),margin .25s var(--e-out)}
.dp-react-toggle:hover,.dp-react-toggle[aria-expanded="true"]{border-color:var(--lb-gold);background:var(--lb-gold-tint)}
.dp-react-toggle[aria-expanded="true"]::after{margin:3px 0 0 2px;transform:rotate(-135deg)}
.dp-react-toggle:focus-visible{outline:2px solid var(--lb-gold);outline-offset:2px}
.dp-profile-own{display:inline-flex;align-items:center;gap:7px;min-height:40px;font-size:.8rem;font-weight:600;color:var(--lb-ink);text-decoration:none}
.dp-profile-own span{color:var(--lb-gold);transition:transform .25s var(--e-out)}
.dp-profile-own:hover span{transform:translateX(3px)}

/* Reactions panel: an inset tray with the "about" chips, four section tabs
   and a compact grid of the chosen section. */
.dp-profile-dialog .dp-react{margin:0 0 20px;padding:14px;border:1px solid var(--lb-line);border-radius:var(--r-md);background:var(--lb-avatar-bg)}
.dp-react[hidden]{display:none}
.dp-react-about{display:flex;align-items:center;gap:6px;margin:0 -14px 12px;padding:0 14px 2px;overflow-x:auto;scrollbar-width:none}
.dp-react-about::-webkit-scrollbar{display:none}
.dp-react-about-label{flex:none;margin-right:2px;font:500 .5625rem var(--f-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--lb-muted)}
.dp-react-chip{flex:none;min-height:32px;padding:0 12px;border:1px solid var(--lb-line-firm);border-radius:var(--r-pill);background:none;color:var(--lb-muted);font:500 .72rem var(--f-sans);white-space:nowrap;cursor:pointer;transition:color .2s var(--e-out),border-color .2s var(--e-out)}
.dp-react-chip:hover{color:var(--lb-ink);border-color:var(--lb-gold)}
.dp-react-chip[aria-pressed="true"]{background:var(--lb-ink);border-color:var(--lb-ink);color:var(--lb-surface)}
.dp-react-chip:focus-visible,.dp-react-tab:focus-visible{outline:2px solid var(--lb-gold);outline-offset:2px}
.dp-react-tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:2px;margin:0 0 12px;padding:3px;border:1px solid var(--lb-line);border-radius:10px;background:var(--lb-avatar-bg)}
.dp-react-tab{min-height:34px;padding:0 4px;border:0;border-radius:7px;background:none;color:var(--lb-muted);font:500 .72rem var(--f-sans);white-space:nowrap;cursor:pointer;transition:color .2s var(--e-out),background-color .2s var(--e-out)}
.dp-react-tab:hover{color:var(--lb-ink)}
.dp-react-tab[aria-pressed="true"]{background:var(--lb-surface);color:var(--lb-ink);box-shadow:0 1px 3px rgba(0,0,0,.16),0 0 0 1px var(--lb-line)}
.dp-react-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px}
.dp-react-grid[hidden]{display:none}
.dp-react-btn{display:flex;align-items:center;gap:9px;min-height:40px;padding:6px 10px;border:1px solid var(--lb-line);border-radius:9px;background:var(--lb-surface);color:var(--lb-ink);font:500 .76rem/1.25 var(--f-sans);text-align:left;cursor:pointer;transition:border-color .2s var(--e-out),background-color .2s var(--e-out),transform .2s var(--e-out)}
.dp-react-btn span{flex:none;font-size:1.05rem;line-height:1}
.dp-react-btn b{font-weight:500}
.dp-react-btn:hover:not(:disabled){border-color:var(--lb-gold);background:var(--lb-gold-tint);transform:translateY(-1px)}
.dp-react-btn:focus-visible{outline:2px solid var(--lb-gold);outline-offset:2px}
.dp-react-btn:disabled{opacity:.5;cursor:default;transform:none}
.dp-react-status{margin:10px 0 0;font-size:.78rem;font-weight:600;color:var(--lb-muted);text-align:center}
.dp-react-status:empty{margin:0}
.dp-react-status.is-ok{color:#6E9A57}

/* Sections: a mono label over a firm rule, then hairline rows. */
.dp-profile-dialog section{margin:0 0 18px;padding:0;border:0}
.dp-profile-section-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding-bottom:8px;border-bottom:1px solid var(--lb-line-firm)}
.dp-profile-dialog h3{margin:0;font:500 .625rem var(--f-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--lb-ink)}
.dp-profile-dialog .dp-profile-caption{margin:0;font-size:.72rem;color:var(--lb-muted)}
.dp-profile-rows{margin:0;padding:0;list-style:none}
.dp-profile-rows>li{border-bottom:1px solid var(--lb-line)}
.dp-profile-row{display:grid;grid-template-columns:minmax(96px,1fr) minmax(0,1.7fr) auto 10px;align-items:center;gap:2px 14px;min-height:50px;padding:6px 4px;color:inherit;text-decoration:none}
li.dp-profile-row{grid-template-columns:minmax(96px,1fr) auto minmax(0,1fr)}
.dp-profile-game-name{font:600 .9375rem/1.2 var(--f-display);letter-spacing:-.01em;color:var(--lb-ink)}
.dp-profile-figs{display:flex;align-items:baseline;gap:14px;font-size:.7rem;color:var(--lb-muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.dp-profile-pos{min-width:2.2em;font:600 .9375rem var(--f-mono);color:var(--lb-gold)}
.dp-profile-fig b{font:500 .85rem var(--f-mono);color:var(--lb-ink)}
.dp-profile-none{font-size:.75rem;color:var(--lb-faint)}
.dp-profile-dialog .dp-profile-streak{justify-self:end;font-size:.7rem;color:var(--lb-muted);white-space:nowrap}
.dp-profile-go{width:6px;height:6px;border-top:1.5px solid var(--lb-muted);border-right:1.5px solid var(--lb-muted);transform:rotate(45deg);transition:transform .25s var(--e-out),border-color .25s var(--e-out)}
a.dp-profile-row{transition:background-color .2s var(--e-out)}
a.dp-profile-row:hover{background:linear-gradient(90deg,var(--lb-gold-tint),transparent 85%)}
a.dp-profile-row:hover .dp-profile-go{border-color:var(--lb-gold);transform:translateX(2px) rotate(45deg)}
a.dp-profile-row:focus-visible{outline:2px solid var(--lb-gold);outline-offset:-2px;border-radius:6px}
.dp-profile-dialog .dp-profile-titles{margin:0;font-size:.72rem;color:var(--lb-muted);white-space:nowrap}
.dp-profile-titles b{margin-right:2px;font:600 1.05rem var(--f-display);color:var(--lb-gold)}
.dp-profile-medals{display:flex;justify-content:flex-end;gap:12px}
.dp-profile-medals>span{display:inline-flex;align-items:center;gap:5px}
.dp-profile-medals>span.is-zero{opacity:.38}
.dp-profile-medals b{font:500 .8rem var(--f-mono);font-variant-numeric:tabular-nums;color:var(--lb-ink)}
.dp-profile-dialog .lb-medal{margin:5px -4px 0;transform:scale(.72);transform-origin:50% 60%}

/* Podium history */
.dp-profile-history{font-size:.8rem}
.dp-profile-history summary{display:flex;align-items:center;gap:8px;min-height:44px;list-style:none;cursor:pointer;font-weight:500;color:var(--lb-muted);transition:color .2s var(--e-out)}
.dp-profile-history summary::-webkit-details-marker{display:none}
.dp-profile-history summary>span{padding:1px 7px;border:1px solid var(--lb-line);border-radius:var(--r-pill);background:var(--lb-avatar-bg);font:500 .625rem var(--f-mono);color:var(--lb-ink)}
.dp-profile-history summary::after{content:"";width:6px;height:6px;margin:0 4px 3px auto;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);transition:transform .25s var(--e-out)}
.dp-profile-history[open] summary::after{margin-bottom:-2px;transform:rotate(-135deg)}
.dp-profile-history summary:hover{color:var(--lb-ink)}
.dp-profile-history summary:focus-visible{outline:2px solid var(--lb-gold);outline-offset:2px;border-radius:var(--r-xs)}
.dp-profile-history ul{margin:0;padding:0;list-style:none}
.dp-profile-history li>a{display:flex;align-items:center;gap:8px;min-height:40px;padding:4px 2px;border-top:1px solid var(--lb-line);color:inherit;text-decoration:none;font-size:.78rem}
.dp-profile-history li>a:hover{color:var(--lb-gold)}
.dp-profile-history-pts{margin-left:auto;font:500 .7rem var(--f-mono);color:var(--lb-muted);white-space:nowrap}
.dp-dark .dp-profile-dialog,.is-game-page:not(.light) .dp-profile-dialog{--lb-surface:var(--night-2);--lb-ink:var(--cream);--lb-muted:var(--cream-mute);--lb-line:var(--night-line);--lb-line-firm:rgba(244,234,214,.26);--lb-faint:rgba(244,234,214,.42);--lb-gold:#E6B34C;--lb-gold-tint:rgba(230,179,76,.1);--lb-avatar-bg:rgba(244,234,214,.06)}
/* The page defaults to the same light paper as editorial pages. */
.dp-competition-page:not(.dp-dark) .competition-board{--lb-surface:var(--paper);--lb-ink:var(--ink);--lb-muted:var(--muted);--lb-faint:var(--muted);--lb-line:var(--line);--lb-line-firm:var(--line-firm);--lb-gold:#93621d;--lb-gold-tint:rgba(201,133,38,.09);--lb-avatar-bg:rgba(31,21,12,.05);--lb-accent:var(--rust);--lb-me-tint:rgba(191,78,28,.08)}
/* Profile links inherit the champions' existing editorial typesetting. */
.podium-av[data-player-profile]{display:block;cursor:pointer}.podium-av[data-player-profile]:focus-visible,.podium-name[data-player-profile]:focus-visible,.podium-champ-text[data-player-profile]:focus-visible{outline:2px solid var(--amber);outline-offset:4px}
.podium-name[data-player-profile]:hover,.podium-champ-text[data-player-profile]:hover{text-decoration:underline;text-underline-offset:4px}
@media(max-width:540px){.dp-profile-dialog.lb-panel{padding:18px 16px 14px;width:calc(100% - 24px);max-height:calc(100dvh - 24px)}.dp-profile-dialog .dp-profile-head{grid-template-columns:60px minmax(0,1fr);gap:0 14px;padding-right:76px}.dp-profile-head>img{width:60px;height:60px}.dp-profile-dialog h2{font-size:1.4rem}a.dp-profile-row{grid-template-columns:minmax(0,1fr) auto 10px}a.dp-profile-row .dp-profile-figs{grid-column:1;grid-row:2}a.dp-profile-row .dp-profile-streak{grid-column:2;grid-row:1 / span 2}a.dp-profile-row .dp-profile-go{grid-column:3;grid-row:1 / span 2}li.dp-profile-row{grid-template-columns:minmax(0,1fr) auto auto;gap:10px}.dp-profile-medals{gap:8px}.dp-profile-dialog .dp-react{padding:12px}.dp-react-about{margin:0 -12px 10px;padding:0 12px 2px}.dp-react-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.dp-react-btn{gap:7px;padding:6px 8px;font-size:.72rem}.lb-competition-panel{padding:22px 14px 16px}.lb-competition-row{grid-template-columns:26px 36px minmax(0,1fr) auto;gap:0 10px;padding:10px 4px}.lb-competition-row .lb-avatar-wrap,.lb-list--podium .lb-competition-row .lb-avatar-wrap{width:36px;height:36px}}
.dp-competition-page:not(.dp-dark) .dp-identity--account,.dp-profile-dialog .dp-identity--account{color:var(--lb-gold);--dp-seal-ink:var(--lb-surface)}
/* Long boards remain above the fixed masthead and Teddy dock, with their own scrolling. */
#pw-overlay-lb,#cp-overlay-lb,#pp-lb{z-index:650}
/* Replace the old offset below the navbar: the board now owns the full viewport. */
body #pw-overlay-lb,body #cp-overlay-lb,body #pp-lb{align-items:center;overflow:hidden;padding:max(16px,env(safe-area-inset-top)) 16px max(16px,env(safe-area-inset-bottom))}
.lb-competition-panel{max-height:calc(100dvh - max(16px,env(safe-area-inset-top)) - max(16px,env(safe-area-inset-bottom)))}

