/* Sports Ballpark stylesheet — shared by index.html (solo) and versus.html (private room).
   Extracted from index.html on 9/28 when versus mode landed; the tokens comment below is the original. */
/* ── Pick 5 design tokens (subset of bebida-games/web/src/pick5-tokens.css, "Classic Ink"
   palette) — copied from games/sports-golf/index.html, which copied them from Pick 5. Sports
   Baseball ships as a standalone static page with no build step, so the tokens travel as a copy. */
:root{
  --add-yellow:#F2D233; --add-charcoal:#2D2D2D; --add-white:#FFFFFF; --add-orange:#cc2200;
  --add-border-color:#141414; --add-shadow-color:#141414;
  --add-text:#141414; --add-surface:#FFFFFF; --add-bg:var(--add-yellow);
  --add-cta-bg:var(--add-text); --add-cta-fg:var(--add-yellow); --add-chip-fg:#141414;
  --add-focus-ring:var(--add-orange); --add-well:#FFF9E6; --add-error:var(--add-orange);
  --add-search-bg:#E8E8E8;
  --add-font-display:'Teko',system-ui,sans-serif; --add-font-body:'Archivo',system-ui,sans-serif;
  --text-xs:.75rem; --text-sm:.875rem; --text-base:1rem; --text-lg:1.25rem;
  --display-xs:1.125rem; --display-sm:clamp(1.125rem,4.6vw,1.5rem);
  --display-md:clamp(1.5rem,6.5vw,2rem); --display-lg:clamp(2rem,9vw,3rem);
  --display-xl:clamp(2.75rem,14vw,4.25rem);
  --space-2xs:.25rem; --space-xs:.375rem; --space-sm:.5rem; --space-md:.75rem;
  --space-lg:1rem; --space-xl:1.25rem; --space-2xl:1.5rem;
  --radius-pill:9999px; --radius:.6875rem; --radius-lg:1rem;
  --border:.25rem solid var(--add-border-color); --border-sm:.1875rem solid var(--add-border-color);
  --border-thin:.125rem solid var(--add-border-color);
  --shadow-sm:.1875rem .1875rem 0 var(--add-shadow-color); --shadow:.3125rem .3125rem 0 var(--add-shadow-color);
  --shadow-pop:.4375rem .4375rem 0 var(--add-shadow-color); --tap:2.75rem;
  --out-red:#CC2430;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --add-bg:#141414; --add-border-color:#4a4a4a;
    --add-shadow-color:color-mix(in srgb, var(--add-yellow) 49%, transparent);
    --add-text:#FFFFFF; --add-surface:#2D2D2D; --add-search-bg:#3A3A3A;
    --add-cta-bg:var(--add-yellow); --add-cta-fg:#141414;
    --add-focus-ring:var(--add-yellow); --add-error:#FF6B57; --add-well:#2D2D2D;
  }
}
:root[data-theme="dark"]{
  --add-bg:#141414; --add-border-color:#4a4a4a;
  --add-shadow-color:color-mix(in srgb, var(--add-yellow) 49%, transparent);
  --add-text:#FFFFFF; --add-surface:#2D2D2D; --add-search-bg:#3A3A3A;
  --add-cta-bg:var(--add-yellow); --add-cta-fg:#141414;
  --add-focus-ring:var(--add-yellow); --add-error:#FF6B57; --add-well:#2D2D2D;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
html,body{margin:0;padding:0;background:var(--add-bg)}
body{color:var(--add-text);font-family:var(--add-font-body);min-height:100dvh}
#app{max-width:26rem;margin:0 auto;padding:0 1rem}
#menu-screen{display:flex;flex-direction:column;gap:var(--space-lg);padding-bottom:2rem}
/* One screen, no scrolling (Kota 9/11): the game screen is the viewport. Topbar and linescore
   take what they need, the at-bat card takes the rest, and inside the card the field takes what
   the entry/reveal slot leaves (the SVG meet-fits). */
#game-screen{display:flex;flex-direction:column;gap:var(--space-sm);height:100dvh;overflow:hidden;padding-bottom:var(--space-sm)}
#round{flex:1;min-height:0;display:flex;flex-direction:column}
#atbat-card{flex:1;min-height:0;display:flex;flex-direction:column;padding:var(--space-lg) var(--space-xl) var(--space-md)}

.screen.screen-fade-in{animation:sb-screen-in .22s ease both}
.screen.screen-fade-in.from-left{animation-name:sb-screen-in-left}
@keyframes sb-screen-in{from{opacity:0;transform:translateX(1rem)}to{opacity:1;transform:translateX(0)}}
@keyframes sb-screen-in-left{from{opacity:0;transform:translateX(-1rem)}to{opacity:1;transform:translateX(0)}}
@media (prefers-reduced-motion: reduce){.screen.screen-fade-in,.screen.screen-fade-in.from-left{animation:none}}

.icon-btn{width:2.25rem;height:2.25rem;flex-shrink:0;display:flex;align-items:center;justify-content:center;
  background:var(--add-surface);border:var(--border-thin);border-radius:var(--radius-pill);padding:0;font-size:1.05rem;
  line-height:1;color:var(--add-text);cursor:pointer;box-shadow:var(--shadow-sm);transition:transform .12s ease,box-shadow .12s ease}
.icon-btn:hover{transform:translate(-.0625rem,-.0625rem);box-shadow:var(--shadow)}

/* Menu */
#menu-topbar{display:flex;justify-content:flex-end;padding:.75rem 0 0}
#menu-hero{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.4rem;padding:.25rem 0 .5rem}
#menu-wordmark{font-family:var(--add-font-display);font-weight:700;font-size:var(--display-lg);letter-spacing:.03em;
  color:var(--add-text);line-height:1;text-transform:uppercase}
#menu-wordmark .muted{display:block;font-family:var(--add-font-body);font-weight:400;font-size:var(--text-sm);
  letter-spacing:normal;text-transform:none;color:color-mix(in srgb, var(--add-text) 60%, transparent);margin-top:.25rem}
#menu-cards{display:flex;flex-direction:column;gap:var(--space-md)}
.menu-card{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);width:100%;text-align:left;
  background:var(--add-surface);border:var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);
  padding:var(--space-lg) var(--space-xl);cursor:pointer;font-family:inherit;color:var(--add-text);transition:transform .12s ease,box-shadow .12s ease}
.menu-card:hover{transform:translate(-.125rem,-.125rem);box-shadow:var(--shadow-pop)}
.menu-card-title{font-family:var(--add-font-display);font-weight:600;font-size:var(--display-sm);text-transform:uppercase;letter-spacing:.03em}
.menu-card-chip{flex-shrink:0;display:inline-block;border-radius:var(--radius-pill);padding:.3rem .75rem .2rem;
  font-family:var(--add-font-body);font-weight:800;font-size:var(--text-xs);letter-spacing:.05em;text-transform:uppercase;
  border:var(--border-thin);background:transparent;color:var(--add-text)}
.menu-card-chip.progress{background:var(--add-yellow);color:var(--add-chip-fg);border-color:transparent}
.menu-card-chip.done{background:#141414;color:var(--add-yellow);border-color:transparent}

/* Game topbar */
#topbar{background:var(--add-charcoal);margin:0 -1rem;padding:.55rem 1rem;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;border-bottom:var(--border);gap:var(--space-sm)}
#game-title{flex:1;min-width:0;text-align:center;font-family:var(--add-font-display);font-weight:700;font-size:var(--display-sm);
  letter-spacing:.03em;color:var(--add-yellow);text-transform:uppercase;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* Line score strip — diamond (runners + batter) · inning · outs · runs. */
#linescore{display:flex;align-items:center;gap:var(--space-md);background:var(--add-surface);border:var(--border-sm);
  border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:.35rem .75rem;flex-shrink:0}
#diamond{width:3rem;height:3rem;flex-shrink:0}
#diamond .base{fill:var(--add-surface);stroke:var(--add-border-color);stroke-width:2.2}
#diamond .base.on{fill:var(--add-yellow)}
#diamond .home{fill:var(--add-border-color)}
#diamond .batter{fill:var(--out-red);stroke:var(--add-border-color);stroke-width:1.5}
#diamond .path{fill:none;stroke:color-mix(in srgb, var(--add-text) 30%, transparent);stroke-width:1.5;stroke-dasharray:3 3}
#linescore .cols{flex:1;display:grid;grid-template-columns:1fr 1fr 1fr;gap:.25rem;text-align:center}
#linescore .k{font-family:var(--add-font-body);font-weight:800;font-size:.6rem;letter-spacing:.08em;text-transform:uppercase;
  color:color-mix(in srgb, var(--add-text) 60%, transparent)}
#linescore .v{font-family:var(--add-font-display);font-weight:700;font-size:var(--display-md);line-height:1;color:var(--add-text)}
#outs{display:flex;justify-content:center;gap:.3rem;padding-top:.4rem}
#outs i{width:.8rem;height:.8rem;border-radius:50%;border:var(--border-thin);background:transparent;display:block}
#outs i.on{background:var(--out-red)}

.card{position:relative;background:var(--add-surface);border:var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:var(--space-xl)}
.card-tab{position:absolute;top:-.75rem;left:1rem;background:#141414;color:var(--add-yellow);border-radius:var(--radius-pill);
  padding:.28rem .85rem .2rem;font-family:var(--add-font-display);font-weight:700;font-size:var(--display-xs);letter-spacing:.06em;
  text-transform:uppercase;line-height:1;white-space:nowrap;box-shadow:var(--shadow-sm)}

#target{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-md);margin:.85rem 0 .5rem;flex-shrink:0}
#category{flex:1;min-width:0;text-align:right;font-family:var(--add-font-body);font-weight:800;font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.1em;
  color:color-mix(in srgb, var(--add-text) 60%, transparent)}
#number{flex-shrink:0;font-family:var(--add-font-display);font-weight:700;font-size:var(--display-lg);line-height:1;
  color:var(--add-text);transform:translateY(1rem);opacity:0;transition:transform .35s ease,opacity .35s ease}
#number.in{transform:none;opacity:1}
#number small{font-family:var(--add-font-body);font-weight:700;font-size:var(--text-sm);color:color-mix(in srgb, var(--add-text) 55%, transparent);
  margin-left:.4rem;text-transform:uppercase;letter-spacing:.04em}

/* ── The field (Kota 9/25): an isometric cartoon diamond floating on the page. It takes whatever
   height the screen leaves; the SVG meet-fits so nothing is ever clipped. */
#table-wrap{position:relative;flex:1;min-height:7rem;margin:0 0 var(--space-sm)}
#field{position:absolute;inset:0;width:100%;height:100%;display:block}
#banner{position:absolute;left:50%;top:38%;z-index:95;pointer-events:none;transform:translate(-50%,-50%) rotate(-4deg) scale(.6);opacity:0;
  font-family:var(--add-font-display);font-weight:700;font-size:var(--display-lg);line-height:.85;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;
  padding:.45rem 1rem .15rem;background:#141414;color:var(--add-yellow);border-radius:.5rem;box-shadow:.3rem .3rem 0 var(--add-orange);
  transition:transform .25s cubic-bezier(.3,1.6,.5,1),opacity .15s}
#banner.show{opacity:1;transform:translate(-50%,-50%) rotate(-4deg) scale(1)}
#menu-art{width:min(70vw,17rem);height:auto;display:block;margin:0 auto}
/* Caption sits on the field (top strip): the target window before the swing, the verdict after. */
#table-caption{position:absolute;left:.5rem;right:.5rem;top:.45rem;z-index:90;pointer-events:none;text-align:right;margin:0;
  opacity:1;transition:opacity .35s ease}
#table-caption .pill{display:inline-block;max-width:100%;padding:.32rem .7rem .26rem;border-radius:var(--radius-pill);
  background:rgba(0,0,0,.42);color:#fff;font-family:var(--add-font-body);font-weight:700;font-size:var(--text-xs);letter-spacing:.02em;line-height:1.25}
#table-caption .pill b{font-family:var(--add-font-display);font-weight:700;font-size:var(--display-xs);letter-spacing:.06em;text-transform:uppercase;margin-right:.35rem;vertical-align:-.04em}
#table-caption.hr .pill{background:#141414;color:var(--add-yellow);border:.125rem solid var(--add-yellow)}
#table-caption.triple .pill,#table-caption.double .pill,#table-caption.single .pill{background:var(--add-yellow);color:var(--add-chip-fg)}
#table-caption.out .pill{background:var(--out-red);color:#fff}
@media (prefers-reduced-motion: reduce){
  #table-caption{transition:none}
  #banner{transition:none}
}

#guess{width:100%;padding:.7rem .75rem;font-family:var(--add-font-body);font-weight:700;font-size:1rem;
  border:var(--border-sm);border-radius:var(--radius);background:var(--add-search-bg);color:var(--add-text)}
#guess::placeholder{color:color-mix(in srgb, var(--add-text) 65%, transparent)}
#guess:focus{outline:.1875rem solid var(--add-focus-ring);outline-offset:.125rem}
/* Entry and reveal share one slot (grid-stacked, visibility toggled) so the field never resizes
   when the verdict swaps in. Suggestions drop UP over the field — the input sits near the bottom. */
#slot{display:grid;flex-shrink:0;min-height:10.5rem}
#slot > *{grid-area:1/1}
#slot > .off{visibility:hidden;pointer-events:none}
#entry{position:relative;align-self:start}
#entry-field{position:relative}
#suggestions{list-style:none;position:absolute;left:0;right:0;bottom:calc(100% - .1rem);z-index:100;margin:0;padding:0;max-height:11rem;overflow:auto;
  border-radius:var(--radius);border:var(--border-sm);background:var(--add-surface);box-shadow:var(--shadow)}
#suggestions:empty{border:none}
#suggestions li{padding:.5rem .75rem;border-bottom:.0625rem solid color-mix(in srgb, var(--add-text) 16%, transparent);cursor:pointer;font-weight:700}
#suggestions li:last-child{border-bottom:none}
#suggestions li[aria-selected="true"]{background:color-mix(in srgb, var(--add-yellow) 35%, transparent)}
#suggestions li small{color:color-mix(in srgb, var(--add-text) 55%, transparent);margin-left:.4rem;font-weight:400}

button.primary{width:100%;margin-top:var(--space-sm);min-height:var(--tap);border-radius:var(--radius);border:var(--border);
  background:var(--add-cta-bg);color:var(--add-cta-fg);font-family:var(--add-font-display);font-weight:600;font-size:var(--display-xs);
  letter-spacing:.04em;text-transform:uppercase;box-shadow:var(--shadow-sm);cursor:pointer;transition:transform .12s ease,box-shadow .12s ease}
button.primary:hover:not(:disabled){transform:translate(-.125rem,-.125rem);box-shadow:var(--shadow-pop)}
button.primary:disabled{opacity:.5;cursor:not-allowed}
button.secondary{background:var(--add-surface);color:var(--add-text)}

#reveal .reward{display:flex;align-items:center;justify-content:center;gap:.5rem;margin:0 0 .35rem;padding:.4rem .6rem;border-radius:var(--radius);
  border:var(--border-thin);font-family:var(--add-font-body);font-weight:700;font-size:var(--text-sm);text-align:center;flex-wrap:wrap}
#reveal .reward .cue{font-weight:800;text-transform:uppercase;letter-spacing:.05em;font-size:var(--text-xs);
  background:var(--add-charcoal);color:var(--add-yellow);border-radius:var(--radius-pill);padding:.25rem .6rem .18rem}
#reveal .line,#result .line{display:flex;justify-content:space-between;gap:var(--space-md);padding:.35rem 0;
  border-bottom:.125rem dashed color-mix(in srgb, var(--add-text) 22%, transparent);font-size:var(--text-sm)}
#reveal .line:last-of-type,#result .line:last-of-type{border-bottom:none}
#reveal .line span:first-child,#result .line span:first-child{font-weight:800;text-transform:uppercase;letter-spacing:.04em;font-size:var(--text-xs);
  color:color-mix(in srgb, var(--add-text) 60%, transparent)}
#reveal .line span:last-child,#result .line span:last-child{text-align:right;font-weight:700}

#result .runs{font-family:var(--add-font-display);font-weight:700;font-size:var(--display-lg);text-align:center;padding:.5rem;
  border-radius:var(--radius-lg);background:var(--add-yellow);color:var(--add-chip-fg);margin-bottom:var(--space-md)}
#abline{display:flex;flex-wrap:wrap;gap:.3rem;justify-content:center;margin-bottom:var(--space-sm)}
#result .actions{display:flex;gap:var(--space-sm)}
#result .actions button{flex:1;min-width:0;margin-top:var(--space-sm)}
#abline .chip{font-family:var(--add-font-display);font-weight:700;font-size:var(--text-lg);line-height:1;padding:.35rem .5rem .25rem;
  border-radius:var(--radius);border:var(--border-thin);background:var(--add-surface);color:var(--add-text);min-width:2.4rem;text-align:center}
#abline .chip.hr{background:#141414;color:var(--add-yellow);border-color:#141414}
#abline .chip.single,#abline .chip.double,#abline .chip.triple{background:var(--add-yellow);color:var(--add-chip-fg)}
#abline .chip.out{background:var(--out-red);color:#fff;border-color:var(--out-red)}
#result pre{font-family:var(--add-font-body);font-weight:700;white-space:pre-wrap;background:var(--add-search-bg);padding:.85rem;
  border-radius:var(--radius);margin:var(--space-md) 0 0;font-size:var(--text-sm);color:var(--add-text)}
.muted{color:color-mix(in srgb, var(--add-text) 60%, transparent);font-size:var(--text-xs);text-align:center;margin-top:.35rem}
[hidden]{display:none!important}

.dev-row{display:flex;align-items:center;justify-content:center;gap:.5rem;flex-wrap:wrap;margin-top:var(--space-sm);flex-shrink:0}
.dev-label{font-family:var(--add-font-body);font-weight:800;font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;
  color:color-mix(in srgb, var(--add-text) 55%, transparent)}
.dev-btn{min-height:1.7rem;padding:.15rem .6rem;border-radius:var(--radius-pill);border:.125rem dashed color-mix(in srgb, var(--add-text) 45%, transparent);
  background:transparent;color:var(--add-text);font-family:var(--add-font-body);font-weight:700;font-size:var(--text-xs);cursor:pointer}
.dev-btn:hover{border-style:solid}
.dev-btn:focus-visible{outline:.1875rem solid var(--add-focus-ring);outline-offset:.125rem}
/* Short viewports (most phones once Safari's chrome is on screen): trim the frame so the field keeps room. */
@media (max-height: 720px){
  #topbar{padding:.35rem 1rem}
  #linescore{padding:.2rem .75rem}
  #diamond{width:2.5rem;height:2.5rem}
  #linescore .v{font-size:var(--display-sm)}
  #outs{padding-top:.3rem}
  #target{margin:.1rem 0 .3rem}
  #number{font-size:var(--display-md)}
  #atbat-card{padding:var(--space-md) var(--space-lg) var(--space-sm)}
  #reveal .reward{padding:.3rem .5rem;margin-bottom:.2rem}
  #reveal .line,#result .line{padding:.22rem 0}
  #game-screen{gap:var(--space-xs);padding-bottom:var(--space-xs)}
  #slot{min-height:9.5rem}
}
/* ── Desktop (Kota 9/25 "computer optimized, similar to Pick 5 UI") — Pick 5's rules copied:
   the root font-size scales with the viewport (16px at 1280, 1.25vw above, capped at 32px) so every
   rem dimension grows in proportion; page content lives in a centered column of
   min(100%, max(360px, 45vw)); the top bar spans the full width with its controls pinned to the
   corners from 40rem; from 64rem the game is two columns — the field card on the left (Pick 5's
   target card), the linescore + swing panel on the right with the primary action inline. Phones
   are untouched: nothing below 40rem changes. */
html{font-size:clamp(16px,1.25vw,32px)}
body{overflow-x:hidden}
@media (min-width: 40rem){
  #app{max-width:min(100%, max(360px, 45vw))}
  #game-screen{overflow:visible}  /* the full-bleed top bar would otherwise be clipped to the column */
  #topbar{margin:0 calc(50% - 50vw);padding:.6rem 1.5rem}
  #menu-topbar{padding:1rem 0 0}
  #menu-art{width:min(45vw,20rem)}
  #menu-hero{padding:.5rem 0 .75rem}
  #howto{margin-top:var(--space-sm)}
  #slot{min-height:11rem}
}
@media (min-width: 64rem){
  /* Pick 5 measured 9/25: a 720px column at 1440 (50vw). Two columns need more room than one, so the
     frame is 66vw with Pick 5's column as its floor — 950px at 1440, 1267px at 1920. */
  #app{max-width:min(100%, max(720px, 66vw));padding:0 1.5rem}
  #menu-screen{max-width:min(100%, max(360px, 45vw));margin:0 auto}
  #game-screen{display:grid;gap:var(--space-md) var(--space-lg);align-content:start;
    grid-template-columns:minmax(0,1.5fr) minmax(22rem,1fr);
    grid-template-rows:auto auto auto 1fr auto;
    grid-template-areas:"topbar topbar" "stage linescore" "stage side" "stage ." "stage dev";
    padding-bottom:var(--space-lg)}
  #topbar{grid-area:topbar}
  #linescore{grid-area:linescore;padding:.6rem 1rem;margin-top:var(--space-xs)}
  #diamond{width:3.75rem;height:3.75rem}
  #linescore .v{font-size:var(--display-lg)}
  #round{display:contents}
  /* the field card hugs its content (Kota 9/25: "so much white space") — the field keeps the
     viewBox's aspect so there is no letterbox, and only shrinks when the viewport is short */
  #atbat-card{grid-area:stage;align-self:start;max-height:calc(100dvh - 6rem);margin-top:var(--space-xs);padding:var(--space-xl) var(--space-2xl) var(--space-lg)}
  #table-wrap{flex:1 1 auto;aspect-ratio:360 / 240;min-height:0}  /* the trimmed desktop viewBox (see placeSlot) */
  #field{overflow:visible}  /* the ball may still arc above the trimmed frame, into the card's white */
  #banner{top:40%}  /* clears the verdict pill (which grows to two lines after the play) */
  #target{margin:.6rem 0 .25rem}
  #number{font-size:var(--display-xl)}
  #category{font-size:var(--text-sm)}
  #table-caption .pill{font-size:var(--text-sm);padding:.4rem .9rem .32rem}
  #table-caption .pill b{font-size:var(--display-sm)}
  #banner{font-size:var(--display-xl)}
  #side{grid-area:side;display:block}
  #swing-card{padding:var(--space-2xl) var(--space-xl) var(--space-xl)}
  #swing-card > #slot{min-height:0}
  #slot > .off{display:none}  /* the two panels don't stack here — the card hugs whichever is live */
  #entry{align-self:stretch}
  /* the panel sits at the top of the column, so suggestions drop DOWN from the input, over the button */
  #suggestions{bottom:auto;top:calc(100% + .2rem);max-height:16rem}
  #guess{padding:.85rem .9rem}
  #category{text-wrap:balance}
  #reveal .line span:first-child{white-space:nowrap}
  button.primary{min-height:3.25rem;font-size:var(--display-sm)}
  #reveal .reward{font-size:var(--text-base);padding:.55rem .75rem}
  #reveal .line{font-size:var(--text-base);padding:.5rem 0}
  #dev-controls{grid-area:dev;justify-content:flex-start;margin-top:0}
  /* Final screen: the field column is gone, so the linescore recenters above the box score */
  #game-screen:has(#round[hidden]) #linescore{grid-column:1 / -1;justify-self:center;width:min(100%, 40rem)}
  #result{grid-column:1 / -1;justify-self:center;width:min(100%, 40rem);margin-top:var(--space-sm)}
}
#howto{margin-top:0;font-size:var(--text-xs);color:color-mix(in srgb, var(--add-text) 70%, transparent)}
#howto summary{cursor:pointer;font-family:var(--add-font-body);font-weight:800;text-transform:uppercase;letter-spacing:.05em;font-size:var(--text-xs);
  list-style:none;display:flex;align-items:center;gap:.3rem}
#howto summary::-webkit-details-marker{display:none}
#howto summary::before{content:"▸";display:inline-block;transition:transform .15s ease}
#howto[open] summary::before{transform:rotate(90deg)}
#howto p{margin:.35rem 0 0;line-height:1.45}

/* ── Versus · private room (versus.html). Two phones, one room; the shared pieces above are reused
   as-is, these are only the two-row linescore, the room lobby, the swing clock and the two-swing
   status. */
a.menu-card{text-decoration:none}
.menu-card-sub{display:block;font-family:var(--add-font-body);font-weight:700;font-size:var(--text-xs);letter-spacing:.06em;text-transform:none;
  color:color-mix(in srgb, var(--add-text) 60%, transparent);margin-top:.15rem}
#vs-linescore{display:grid;grid-template-columns:1fr;gap:.35rem;background:var(--add-surface);border:var(--border-sm);border-radius:var(--radius);
  box-shadow:var(--shadow-sm);padding:.4rem .75rem;flex-shrink:0}
.vs-row{display:grid;grid-template-columns:1.6rem 1fr auto 2.6rem;align-items:center;gap:.5rem}
.vs-row .mini{width:1.6rem;height:1.6rem}
.vs-row .mini .base{fill:var(--add-surface);stroke:var(--add-border-color);stroke-width:3}
.vs-row .mini .base.on{fill:var(--add-yellow)}
.vs-row .who{font-family:var(--add-font-body);font-weight:800;font-size:var(--text-sm);text-transform:uppercase;letter-spacing:.05em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--add-text)}
.vs-row .who small{font-weight:700;text-transform:none;letter-spacing:0;color:color-mix(in srgb, var(--add-text) 55%, transparent);margin-left:.35rem}
.vs-row .who .dot{display:inline-block;width:.5rem;height:.5rem;border-radius:50%;background:#2e9e4a;margin-left:.35rem;vertical-align:middle}
.vs-row .who .dot.quiet{background:var(--out-red);animation:sb-blink 1.2s steps(2,start) infinite}
@keyframes sb-blink{to{visibility:hidden}}
.vs-row .outs{display:flex;gap:.25rem}
.vs-row .outs i{width:.7rem;height:.7rem;border-radius:50%;border:var(--border-thin);display:block}
.vs-row .outs i.on{background:var(--out-red)}
.vs-row .r{font-family:var(--add-font-display);font-weight:700;font-size:var(--display-sm);line-height:1;text-align:right;color:var(--add-text)}
.vs-row.done .who{opacity:.7}
.vs-row.done .r::after{content:" F";font-size:.6em;opacity:.6}
#need{font-family:var(--add-font-body);font-weight:700;font-size:var(--text-xs);text-align:center;color:var(--add-text);
  background:var(--add-well);border:var(--border-thin);border-radius:var(--radius-pill);padding:.3rem .8rem;margin-top:.35rem}
#clockline{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin:.1rem 0 .35rem;font-family:var(--add-font-body);font-weight:700;font-size:var(--text-xs);
  color:color-mix(in srgb, var(--add-text) 70%, transparent)}
#clock{font-family:var(--add-font-display);font-weight:700;font-size:var(--display-sm);line-height:1;color:var(--add-text);min-width:3rem;text-align:right}
#clock.low{color:var(--out-red)}
.two-swing{display:flex;gap:.4rem;flex-wrap:wrap}
.two-swing span{border:var(--border-thin);border-radius:var(--radius-pill);padding:.2rem .6rem .12rem;background:var(--add-surface);color:var(--add-text)}
.two-swing span.in{background:var(--add-yellow);color:var(--add-chip-fg);border-color:transparent}
#reveal .line.them span:last-child{color:var(--add-text)}
#reveal .line .hitmark{display:inline-block;min-width:1.9rem;text-align:center;font-family:var(--add-font-display);font-weight:700;font-size:var(--text-lg);line-height:1;
  padding:.2rem .35rem .12rem;border-radius:var(--radius);border:var(--border-thin);margin-left:.4rem;vertical-align:middle}
#reveal .line .hitmark.hr{background:#141414;color:var(--add-yellow);border-color:#141414}
#reveal .line .hitmark.single,#reveal .line .hitmark.double,#reveal .line .hitmark.triple{background:var(--add-yellow);color:var(--add-chip-fg)}
#reveal .line .hitmark.out{background:var(--out-red);color:#fff;border-color:var(--out-red)}
#nextline{text-align:center;font-family:var(--add-font-body);font-weight:700;font-size:var(--text-xs);margin-top:.5rem;color:color-mix(in srgb, var(--add-text) 65%, transparent)}
.lobby .code{font-family:var(--add-font-display);font-weight:700;font-size:var(--display-xl);line-height:1;letter-spacing:.08em;text-align:center;margin:.75rem 0 .25rem;color:var(--add-text)}
.lobby .seat{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.45rem 0;border-top:.0625rem solid color-mix(in srgb, var(--add-text) 25%, transparent);
  font-family:var(--add-font-body);font-weight:700;font-size:var(--text-sm);color:var(--add-text)}
.lobby .seat:first-of-type{border-top:0}
.lobby .seat .tag{border-radius:var(--radius-pill);border:var(--border-thin);padding:.2rem .6rem .12rem;font-size:var(--text-xs);font-weight:800;letter-spacing:.05em;text-transform:uppercase}
.lobby .seat .tag.in{background:var(--add-yellow);color:var(--add-chip-fg);border-color:transparent}
.field-row{display:flex;flex-direction:column;gap:.5rem;margin-top:.75rem}
.field-row label{font-family:var(--add-font-body);font-weight:800;font-size:.65rem;letter-spacing:.1em;text-transform:uppercase;color:color-mix(in srgb, var(--add-text) 60%, transparent)}
.field-row input{width:100%;min-height:var(--tap);border:var(--border-thin);border-radius:var(--radius);padding:.5rem .75rem;font-family:var(--add-font-body);font-weight:700;
  font-size:var(--text-base);background:var(--add-search-bg);color:var(--add-text)}
.field-row input:focus{outline:.1875rem solid var(--add-focus-ring);outline-offset:.125rem}
.league-pick{display:flex;gap:.4rem}
.league-pick button{flex:1;min-height:var(--tap);border:var(--border-thin);border-radius:var(--radius);background:var(--add-surface);color:var(--add-text);
  font-family:var(--add-font-display);font-weight:600;font-size:var(--display-xs);letter-spacing:.05em;text-transform:uppercase;cursor:pointer}
.league-pick button[aria-pressed="true"]{background:var(--add-yellow);color:var(--add-chip-fg);border-color:#141414}
.vs-final .score{display:flex;align-items:baseline;justify-content:center;gap:.75rem;font-family:var(--add-font-display);font-weight:700;font-size:var(--display-lg);line-height:1;margin:.85rem 0 .35rem;color:var(--add-text)}
.vs-final .score small{font-family:var(--add-font-body);font-weight:800;font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.06em;opacity:.7}
.vs-final .headline{text-align:center;font-family:var(--add-font-body);font-weight:800;font-size:var(--text-sm);text-transform:uppercase;letter-spacing:.06em;color:var(--add-text)}
.vs-final .compare{display:grid;grid-template-columns:auto 1fr;gap:.35rem .6rem;align-items:center;margin-top:.75rem}
.vs-final .compare .n{font-family:var(--add-font-body);font-weight:800;font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.05em;color:var(--add-text)}
.vs-final .compare .abline{display:flex;gap:.25rem;flex-wrap:wrap}
.vs-final .compare .chip{font-family:var(--add-font-display);font-weight:700;font-size:var(--text-base);line-height:1;padding:.3rem .4rem .2rem;border-radius:var(--radius);
  border:var(--border-thin);background:var(--add-surface);color:var(--add-text);min-width:2rem;text-align:center}
.vs-final .compare .chip.hr{background:#141414;color:var(--add-yellow);border-color:#141414}
.vs-final .compare .chip.single,.vs-final .compare .chip.double,.vs-final .compare .chip.triple{background:var(--add-yellow);color:var(--add-chip-fg)}
.vs-final .compare .chip.out{background:var(--out-red);color:#fff;border-color:var(--out-red)}
.vs-final .actions{display:flex;gap:var(--space-sm)}
.vs-final .actions button{flex:1;min-width:0}
.vs-final pre{font-family:var(--add-font-body);font-weight:700;white-space:pre-wrap;background:var(--add-search-bg);padding:.85rem;border-radius:var(--radius);
  margin:var(--space-md) 0 0;font-size:var(--text-sm);color:var(--add-text)}
#toast{position:fixed;left:50%;bottom:1.25rem;transform:translateX(-50%);background:#141414;color:var(--add-yellow);border-radius:var(--radius-pill);
  padding:.5rem 1rem;font-family:var(--add-font-body);font-weight:800;font-size:var(--text-xs);letter-spacing:.05em;text-transform:uppercase;box-shadow:var(--shadow-sm);z-index:9;transition:opacity .3s}
#toast[hidden]{display:none}
.stack{display:flex;flex-direction:column;gap:var(--space-md)}
