/* Candy Shenanigans — layers on top of /styles.css */
@font-face{font-family:"Kenney Future";src:url(/games/rainbow-dash/assets/fonts/KenneyFuture.ttf) format("truetype");font-display:swap}
/* Player colours P1-P8 (bright, distinct on grey frames). Keep in step with
   PLAYER_HEX in js/sim/tuning.js. */
:root{
  --p1:#3fae3a; /* green */  --p2:#2f6fe0; /* blue */ --p3:#f2c200; /* yellow */ --p4:#9b4fd6; /* purple */
  --p5:#ff7a1a; /* orange */ --p6:#ff4fa8; /* pink */ --p7:#16b8a8; /* teal */   --p8:#e5322d; /* red */
  --fx:"Kenney Future","Baloo 2",system-ui,sans-serif
}
body::after{display:none}
html,body{overflow:hidden;touch-action:none;overscroll-behavior:none;height:100%}
[hidden]{display:none !important}

/* Factory on top (~55%), player cards below. Reduced cards are short, so the
   floor takes the rest. */
.screen{position:fixed;inset:0;display:grid;grid-template-rows:55% 45%;background:var(--navy)}
.screen.reduced{grid-template-rows:minmax(0,1fr) auto}
.floor-wrap{position:relative;min-height:0}
#floor{position:absolute;inset:0;display:block;width:100%;height:100%}

/* ---------- player cards ---------- */
.panels{display:flex;justify-content:center;align-items:stretch;gap:clamp(8px,1.6vw,28px);
  padding:clamp(8px,1.4vh,16px) 16px;min-height:0;min-width:0;background:var(--slate)}
/* A portrait card, 9:16 like a phone, as tall as the band allows. */
.panel{--pc:var(--p1);position:relative;flex:0 1 auto;height:100%;aspect-ratio:9/16;min-width:0;
  display:grid;grid-template-rows:auto minmax(0,1fr);container-type:inline-size;
  color:var(--navy);background:var(--cream);border-radius:14px;
  box-shadow:0 0 0 6px var(--pc),0 6px 0 6px rgba(16,26,61,.35)}
.panel[data-player="1"]{--pc:var(--p2)}
.panel[data-player="2"]{--pc:var(--p3)}
.panel[data-player="3"]{--pc:var(--p4)}
.panel[data-player="4"]{--pc:var(--p5)}
.panel[data-player="5"]{--pc:var(--p6)}
.panel[data-player="6"]{--pc:var(--p7)}
.panel[data-player="7"]{--pc:var(--p8)}

/* status bar: tag, device, lamp / machine name */
.panel-head{display:flex;flex-wrap:wrap;align-items:center;gap:.15em .35em;padding:.3em .45em .25em;
  font-family:var(--fx);font-size:clamp(10px,8.5cqi,22px);line-height:1.1;
  background:var(--navy);color:var(--cream);border-radius:12px 12px 0 0;transition:background .2s}
.ptag{background:var(--pc);color:var(--navy);border:2px solid var(--cream);border-radius:999px;padding:0 .45em}
.device{font-family:system-ui,sans-serif;font-size:1.25em;line-height:1}
.mname{order:9;flex:1 0 100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:.9em}
.lamp{width:.8em;height:.8em;border-radius:50%;background:var(--pc);border:2px solid var(--cream);margin-left:auto;box-shadow:0 0 8px var(--pc)}

/* card body: the challenge view inside a grey frame */
.stage{position:relative;overflow:hidden;min-height:0;container-type:size;
  border:clamp(6px,5cqi,14px) solid transparent;border-image-source:var(--frame);border-image-slice:24 fill;border-image-repeat:stretch}
.body{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3cqh;padding:2cqi}
.touch-host{position:absolute;inset:0}
.panel.touch .body{display:none}
.shutter{position:absolute;inset:0;z-index:2;transform:translateY(-102%);transition:transform .35s ease-in-out;
  background:repeating-linear-gradient(180deg,#9aa3b5 0 14px,#6f7890 14px 17px);border-bottom:6px solid var(--pc);
  display:grid;place-items:center;text-align:center;font-family:var(--fx);font-size:11cqi;color:var(--cream);text-shadow:0 2px 0 var(--navy)}
.panel.shut .shutter{transform:translateY(0)}
@media (prefers-reduced-motion:reduce){.shutter{transition-duration:.05s}}

/* challenge views, sized from the card (cqi = card body width) */
.title{font-family:var(--fx);font-size:12cqi;line-height:1.05;color:var(--navy);text-align:center}
.title.big{font-size:22cqi;color:var(--pc);-webkit-text-stroke:2px var(--navy)}
.hint{font-weight:800;font-size:7.5cqi;opacity:.75;text-align:center}
.row{display:flex;align-items:center;justify-content:center;gap:3cqi;flex-wrap:wrap}

.glyph{width:34cqi;aspect-ratio:1;background:center/contain no-repeat;filter:drop-shadow(0 4px 0 rgba(16,26,61,.45));
  transition:transform .06s,filter .06s;background-color:var(--navy);border-radius:22%;background-size:88%}
.glyph.small{width:21cqi}
.glyph.down{transform:translateY(4px) scale(.92);filter:drop-shadow(0 1px 0 rgba(16,26,61,.45)) brightness(1.25)}
.glyph.next{outline:3px solid var(--sun);outline-offset:2px;animation:nudge .6s ease-in-out infinite alternate}
.glyph.dim{opacity:.4}
@keyframes nudge{to{transform:translateY(-3px)}}

.meter{position:relative;width:88%;height:11cqi;border:2.5cqi solid transparent;
  border-image:url(assets/ui/bar_track.png) 24 fill stretch;box-sizing:border-box}
.meter .fill{position:absolute;left:0;top:0;bottom:0;width:0;border:8px solid transparent;border-image:var(--fill,url(assets/ui/bar_fill_blue.png)) 24 fill stretch;
  box-sizing:border-box;min-width:6px;transition:width .05s linear}
.meter .zone{position:absolute;top:-3px;bottom:-3px;background:rgba(169,217,75,.55);border:2px solid #3c7a12;border-radius:4px}
.meter .mark{position:absolute;top:-6px;bottom:-6px;width:4px;margin-left:-2px;background:var(--navy);border-radius:2px}
.meter .mark.target{background:none;top:-22px;bottom:auto;width:22px;height:22px;margin-left:-11px;
  background:url(assets/ui/marker_down.png) center/contain no-repeat}
.timer{width:88%;height:max(4px,2cqi);border-radius:3px;background:rgba(16,26,61,.2);overflow:hidden}
.timer i{display:block;height:100%;background:var(--navy);width:100%}

.gauge{position:relative;width:48cqi;aspect-ratio:2/1;overflow:hidden}
.gauge::before{content:"";position:absolute;inset:0 0 -100% 0;border-radius:50%;
  background:conic-gradient(from -90deg,#e0473f 0 30deg,var(--sun) 30deg 70deg,var(--grass) 70deg 110deg,var(--sun) 110deg 150deg,#e0473f 150deg 180deg,transparent 180deg);
  border:4px solid var(--navy);box-sizing:border-box}
.gauge .needle{position:absolute;left:50%;bottom:0;width:5px;height:90%;margin-left:-2.5px;background:var(--navy);border-radius:3px;transform-origin:50% 100%}

.swatch{width:9cqi;aspect-ratio:1;border-radius:50%;border:2px solid var(--navy)}
.swatch.big{width:18cqi}
.pick{display:flex;flex-direction:column;align-items:center;gap:1.5cqi}
.pick .glyph{width:20cqi}
.pick .swatch{width:10cqi}
.target-row{gap:2cqi}

.result{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--fx);font-size:18cqi;pointer-events:none;
  -webkit-text-stroke:2px var(--navy);animation:pop .3s ease-out}
.result.ok{color:var(--grass)}
.result.bad{color:var(--peach)}
@keyframes pop{from{transform:scale(.4);opacity:0}}
.idle{font-family:var(--fx);font-size:9cqi;opacity:.6}
.turn{font-weight:800;font-size:7cqi;padding:0 .5em;border-radius:999px;background:var(--turn,var(--pc));border:2px solid var(--navy)}

/* Reduced strip: one word, progress, timer */
.strip{display:none}
.panels.reduced{align-items:flex-start;gap:clamp(6px,1vw,16px);padding-bottom:16px}
.panels.reduced .panel{height:auto;aspect-ratio:auto;flex:1 1 0;max-width:260px;grid-template-rows:auto auto}
.panels.reduced .stage{display:none}
.panels.reduced .strip{display:grid;gap:4px;padding:.3em .5em .5em;font-size:clamp(10px,8cqi,18px)}
.strip-word{font-family:var(--fx);min-height:1.2em;line-height:1.2;text-align:center}
.strip-bar,.strip-time{border-radius:999px;overflow:hidden;background:rgba(16,26,61,.18)}
.strip-bar{height:.75em;border:2px solid var(--navy)}
.strip-time{height:.3em}
.strip-bar i,.strip-time i{display:block;height:100%;width:0;transition:width .05s linear}
.strip-bar i{background:var(--pc)}
.strip-time i{background:var(--navy)}

/* ---------- chrome & overlays (as Window Washers) ---------- */
.corner-btns{position:fixed;top:max(10px,env(safe-area-inset-top));right:10px;display:flex;gap:10px;z-index:7}
.btn.tiny{display:grid;place-items:center;width:1.7em;font-size:clamp(1.2rem,3.5vw,1.7rem);padding:.2em 0;line-height:1;border-radius:20px;text-decoration:none}
.btn.big{font-size:1.2rem}
.btn.green{background:var(--grass)}
.btn.sun{background:var(--sun)}
.overlay{position:fixed;inset:0;display:grid;place-items:center;padding:16px;overflow:auto;background:rgba(16,26,61,.35);z-index:6}
.overlay.solid{background:linear-gradient(180deg,rgba(199,232,251,.94),rgba(132,195,239,.94))}
.card-panel{max-width:620px;width:100%;text-align:center;color:var(--navy);background:var(--cream);border-radius:30px;
  padding:clamp(14px,3vw,26px);box-shadow:0 10px 0 rgba(16,26,61,.18),0 18px 36px rgba(16,26,61,.25)}
.card-panel h1{margin:.1em 0 .2em}
.card-panel h2{margin:.1em 0 .3em;font-size:clamp(1.6rem,5vw,2.4rem)}
.card-panel .sub{margin:0 0 .8em}
.sub.small{font-size:.85rem;opacity:.75}
.press{font-family:var(--fx);font-size:clamp(1.2rem,4vw,1.8rem);color:var(--orange);animation:nudge .7s ease-in-out infinite alternate}
.over-btns{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin:.6em 0 0}
.stars{display:flex;justify-content:center;gap:6px;margin:0}
.stars img{width:clamp(36px,9vw,60px);height:auto;animation:pop .35s ease-out backwards}
.aspects img{width:1.3em;height:1.3em}
.aspects{list-style:none;padding:0;margin:.4em auto;max-width:22em;text-align:left}
.aspects li{display:flex;justify-content:space-between;background:var(--ice);border-radius:14px;padding:.2em .8em;margin-bottom:5px;font-weight:700}
.aspects li.ok{background:var(--grass)}

.remap-pick{display:grid;gap:10px;justify-content:center;margin:.6em 0}
.remap-progress{margin:.2em 0 0;font-weight:800;opacity:.65;font-size:.95rem}
.remap-prompt{margin:.1em 0 .2em;font-weight:800;font-size:clamp(1.1rem,3.4vw,1.5rem)}
.remap-captured{margin:0 0 .4em;min-height:1.4em;font-weight:800;color:#3c7a12}
.remap-list{list-style:none;margin:.2em auto .6em;padding:0;max-width:28em;text-align:left}
.remap-row{display:flex;justify-content:space-between;gap:12px;align-items:baseline;background:var(--ice);border-radius:16px;padding:.25em .8em;margin-bottom:5px;border:3px solid transparent}
.remap-row.current{background:var(--sun);border-color:var(--navy)}
.remap-foot{margin:.6em 0 0;font-size:.85rem;opacity:.7}
.btn[disabled]{opacity:.45;pointer-events:none}
.body.shake{animation:shake .12s linear infinite}
@keyframes shake{25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
@media (prefers-reduced-motion:reduce){.body.shake{animation:none}}
.glyph.done{opacity:.45;position:relative}
.glyph.done::after{content:"";position:absolute;inset:15%;background:url(assets/ui/check.png) center/contain no-repeat}
.pending{position:fixed;left:50%;top:10px;transform:translateX(-50%);z-index:5;background:var(--sun);color:var(--navy);font-weight:800;
  border-radius:999px;padding:.2em 1em;box-shadow:0 4px 0 rgba(16,26,61,.25)}
.lobby{font-weight:700;color:var(--navy);min-height:1.4em;margin:.2em 0}

/* meters default to the player's colour */
.meter .fill{border-image:var(--fill,none);background:var(--fill-bg,var(--pc));border-radius:6px;border-width:0}
.meter .fill[style*="--fill"]{border-width:8px;background:none}
/* trigger glyph: plain trigger shape with L / R, never ZL / ZR */
.glyph.trig{position:relative;background-size:70%}
.glyph.trig::after{content:attr(data-label);position:absolute;right:6%;bottom:2%;font-family:var(--fx);
  color:var(--cream);-webkit-text-stroke:1px var(--navy);font-size:7cqi}
/* corner buttons on the left, clear of the order card */
.corner-btns.left{right:auto;left:10px}

/* the candy is at your machine: flash the card, its status bar and lamp */
.panel.call{animation:callbox .5s ease-in-out infinite alternate}
.panel.call .panel-head{animation:headflash .5s steps(1) infinite}
.panel.call .lamp{animation:lampflash .5s steps(1) infinite;transform:scale(1.4)}
@keyframes callbox{to{box-shadow:0 0 0 10px var(--pc),0 0 30px 14px var(--pc)}}
@keyframes lampflash{50%{background:var(--cream);box-shadow:0 0 18px 6px var(--pc)}}
@keyframes headflash{50%{background:var(--pc);color:var(--navy)}}
@media (prefers-reduced-motion:reduce){
  .panel.call,.panel.coming{animation:none;box-shadow:0 0 0 9px var(--pc)}
  .panel.call .panel-head,.panel.coming .panel-head{animation:none;background:var(--pc);color:var(--navy)}
}

/* colour pick: each button wears its colour */
.glyph.colored{box-shadow:0 0 0 4px var(--sw)}
.color-word{-webkit-text-stroke:2px var(--navy)}

/* candy is on its way to this player's machine: glow, shutter still shut */
.panel.coming{animation:callbox .9s ease-in-out infinite alternate}
.panel.coming .panel-head{animation:headflash .9s steps(1) infinite}
.panel.coming .lamp{animation:lampflash .9s steps(1) infinite}
.panel.coming .shutter{color:var(--sun)}
.panel.coming .strip-word{color:var(--orange)}
.panel.call .strip-word{color:#3c7a12}

/* ---------- phones: room code, QR, seat list ---------- */
.join-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:12px 24px;margin:.4em 0}
.join-local{flex:1 1 180px}
.join-local .press{margin:.2em 0}
.join-phone{flex:1 1 300px;display:flex;align-items:center;gap:14px;text-align:left;background:var(--ice);border-radius:22px;padding:10px 14px}
.join-phone.solo{justify-content:center;margin:.4em 0}
.join-phone p{margin:0}
.qr{flex:0 0 auto;width:clamp(120px,18vw,190px);aspect-ratio:1;background:#fff;border-radius:12px;overflow:hidden;border:3px solid var(--navy)}
.qr svg{display:block;width:100%;height:100%}
.join-phone.solo .qr{width:clamp(180px,34vmin,300px)}
.join-title{font-weight:800}
.room-code{font-family:var(--fx);letter-spacing:.12em;color:var(--navy)}
.room-code.big{font-size:clamp(2.2rem,6vw,3.4rem);line-height:1.1}
.join-url{font-size:.8rem;opacity:.75;word-break:break-all}
.no-phones .join-phone .qr,.no-phones .join-phone .room-code,.no-phones #btn-phones{display:none}
.lobby{list-style:none;display:flex;flex-wrap:wrap;justify-content:center;gap:8px;padding:0;min-height:2.2em;margin:.5em 0 .2em}
.seat-chip{--pc:var(--p1);display:flex;align-items:center;gap:.35em;padding:.15em .7em .15em .2em;border-radius:999px;
  background:var(--cream);border:3px solid var(--pc);font-weight:800;animation:pop .3s ease-out}
.seat-chip b{background:var(--pc);color:var(--navy);border-radius:999px;padding:0 .45em;font-family:var(--fx)}
.seat-chip .btn.kick{font-size:.8rem;line-height:1;padding:.25em .6em;margin-left:.2em;min-height:0;border-width:2px;box-shadow:0 2px 0 var(--navy)}
.seat-chip .btn.kick.sure{background:var(--orange);color:#fff}
.phone-list[hidden]{display:none}
.lobby-hint{margin:.1em 0;font-weight:800;color:var(--orange)}
.room-badge{position:fixed;right:10px;bottom:10px;z-index:5;background:var(--navy);color:var(--cream);font-weight:800;
  border-radius:999px;padding:.15em .8em;box-shadow:0 3px 0 rgba(16,26,61,.3);font-size:clamp(.8rem,1.6vw,1.1rem)}
.room-badge .room-code{color:var(--sun);letter-spacing:.1em}

/* ---------- pause card ---------- */
#pause .join-phone.solo{margin:.8em 0 .2em}
.pause-opts{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;align-items:center;margin-top:.8em}
.pause-opts .opt{display:flex;align-items:center;gap:10px;font-weight:800;background:var(--ice);border-radius:14px;padding:.3em .8em;min-height:44px}
.pause-opts .opt input{width:26px;height:26px;accent-color:var(--grass)}

/* ---------- phone host (index.html?host=phone): portrait ---------- */
.hostbar,.host-panel{display:none}
:root:not(.host-phone) .phone-only{display:none}
.host-phone .tv-only,.host-phone .corner-btns,.host-phone .room-badge,.host-phone .panels,.host-phone .join-local{display:none}
.host-phone .screen{display:flex;flex-direction:column;gap:8px;background:var(--navy);
  padding:max(8px,env(safe-area-inset-top)) 8px max(8px,env(safe-area-inset-bottom))}
.host-phone .hostbar{--pc:var(--p1);display:flex;align-items:center;gap:8px;flex:0 0 auto;padding:4px 8px;border-radius:16px;
  background:var(--cream);color:var(--navy);font-weight:800;box-shadow:0 3px 0 rgba(0,0,0,.3)}
.hostbar .ptag{background:var(--pc);color:#fff;-webkit-text-stroke:1px var(--navy);paint-order:stroke fill;border:3px solid var(--navy);border-radius:999px;padding:0 .5em}
.host-mname{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.host-lamp{flex:0 0 auto;width:16px;height:16px;border-radius:50%;background:#8a8fa0;border:3px solid var(--navy)}
.host-lamp.on{background:var(--pc);box-shadow:0 0 10px var(--pc)}
.host-lamp.blink{background:var(--pc);animation:host-blink .5s steps(1) infinite}
@keyframes host-blink{50%{background:#8a8fa0}}
.host-room{white-space:nowrap;font-size:.95rem}
.host-room .room-code{letter-spacing:.08em}
.hostbar .btn.tiny{font-size:1.3rem;width:1.9em;min-height:40px}
/* factory: 16:9, as wide as the phone (capped so the panel keeps most of the height) */
.host-phone .floor-wrap{flex:0 0 auto;width:min(100%,calc(38vh * 16 / 9));align-self:center;aspect-ratio:16/9;
  border-radius:14px;overflow:hidden;border:3px solid var(--cream)}
.host-phone .host-panel{--pc:var(--p1);display:block;flex:1 1 auto;min-height:0;position:relative}
/* lobby / pause / score cards fit a phone */
.host-phone .overlay{padding:10px;align-items:start}
.host-phone .overlay.solid{background:linear-gradient(180deg,rgba(199,232,251,.97),rgba(132,195,239,.97))}
.host-phone .card-panel{padding:14px;border-radius:24px}
.host-phone .card-panel h1{font-size:1.9rem}
.host-phone #start .sub:not(.phone-only):not(.small){display:none} /* keep the music credits */
.host-phone .join-phone{flex-direction:column;text-align:center;padding:12px}
.host-phone .join-phone .qr,.host-phone .join-phone.solo .qr{width:min(62vw,240px)}
.host-phone .over-btns .btn.big{font-size:1.05rem}

/* ---------- mode toggle (start screen) ---------- */
.mode-row{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;margin:.5em 0}
.mode-toggle{display:inline-flex;border:3px solid var(--navy);border-radius:999px;overflow:hidden;background:var(--cream)}
.mode-toggle .btn{border:0;border-radius:0;margin:0;box-shadow:none;background:transparent;min-height:44px}
.mode-toggle .btn[aria-pressed="true"]{background:var(--sun)}
#mode-hint{margin:0}

/* ---------- level banner and timed practice bar ---------- */
.level-banner{position:fixed;left:50%;top:22%;transform:translate(-50%,-50%);z-index:6;pointer-events:none;width:max-content;max-width:calc(100vw - 16px);box-sizing:border-box;text-align:center;
  background:var(--sun);color:var(--navy);border:4px solid var(--navy);border-radius:999px;
  padding:.35em 1.1em;font-weight:900;font-size:clamp(1.2rem,4vw,2.4rem);box-shadow:0 6px 0 var(--navy)}
.level-banner.go{animation:banner-pop 3.2s ease-out forwards}
@keyframes banner-pop{0%{transform:translate(-50%,-50%) scale(.3);opacity:0}
  10%{transform:translate(-50%,-50%) scale(1.1);opacity:1}15%{transform:translate(-50%,-50%) scale(1)}
  85%{opacity:1}100%{transform:translate(-50%,-70%) scale(1);opacity:0}}
.practice-bar{position:fixed;left:50%;top:10px;transform:translateX(-50%);z-index:5;display:flex;width:max-content;max-width:calc(100vw - 16px);box-sizing:border-box;align-items:center;gap:10px;
  background:var(--cream);color:var(--navy);border:3px solid var(--navy);border-radius:999px;padding:4px 6px 4px 16px;font-weight:900;font-size:1.2rem}
.practice-bar .btn{margin:0;min-height:40px}
#practice-left{white-space:nowrap}
.host-phone .practice-bar{top:calc(max(8px,env(safe-area-inset-top)) + 64px);font-size:.95rem;padding:2px 3px 2px 12px;gap:6px}
.host-phone .practice-bar .btn{font-size:.95rem;min-height:34px;padding:.1em .7em}
.host-phone .level-banner{top:18%;font-size:1.1rem;border-radius:24px}

/* ---------- score card ---------- */
.score-sub{margin:.2em 0;font-weight:800}
.score-sub:empty{display:none}
.score-time{margin:.3em 0;font-weight:800;color:var(--slate)}
.score-candies{display:flex;flex-wrap:wrap;justify-content:center;gap:6px;margin:.4em auto;max-width:28em}
.score-candies canvas{width:64px;height:84px;background:var(--ice);border-radius:14px;animation:pop .35s ease-out backwards}
.score-rows{list-style:none;padding:0;margin:.4em auto;max-width:30em;display:grid;grid-template-columns:1fr;gap:5px;text-align:left}
#score.many .score-rows{grid-template-columns:1fr 1fr;max-width:44em}
.score-rows li{display:flex;align-items:center;gap:8px;background:var(--ice);border-radius:14px;padding:2px 8px 2px 2px}
.score-rows li.ok{background:var(--grass)}
.score-rows canvas{flex:0 0 auto;width:40px;height:52px}
.row-info{display:flex;flex-direction:column;min-width:0;line-height:1.15}
.row-stars{font-weight:900}
.row-wrong{font-size:.85rem;font-weight:700}
.row-wrong .miss{display:inline-flex;align-items:center;gap:2px;margin-right:6px;white-space:nowrap}
.row-wrong img{width:1em;height:1em}
#score.many .card-panel{max-height:96vh;overflow:auto}

/* ---------- host phone: phone room connection light ---------- */
.host-conn{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:5px;vertical-align:middle;
  background:#e5322d;border:2px solid var(--navy)}
.host-conn.ok{background:#3fae3a;box-shadow:0 0 6px #3fae3a}

/* Enter room code form on the start screen */
.join-code{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;align-items:center;margin:.6em 0 0}
.join-code label{width:100%;font-weight:800}
.join-code input{font-family:var(--fx);font-size:1.8rem;width:6.5ch;text-align:center;letter-spacing:.2em;text-transform:uppercase;
  padding:.15em .3em;border:4px solid var(--navy);border-radius:14px;background:#fff;color:var(--navy)}
.join-code p{width:100%;margin:0}

.ready-count{font-weight:800;color:var(--navy);background:var(--ice);border-radius:999px;padding:.2em .9em;display:inline-block;margin:.3em 0}

/* start level slider */
.level-row{gap:10px}
.level-row label{font-weight:800}
.level-row input[type=range]{flex:1;min-width:140px;max-width:280px;accent-color:var(--orange)}
.level-row output{font-family:var(--fx);font-size:1.4rem;min-width:2ch;text-align:center}
.level-row #level-hint{flex-basis:100%}
