/* Tokens: taken from simcanvas/build/site.css (jade pass). Nothing invented beyond room-face shades already used on the site. */
:root{
  --paper:#F3F9F7; --tint:#E9F6F2; --surface:#FFFFFF;
  --ink:#0B1023; --ink-2:#343B52; --ink-3:#545B70;
  --line:rgba(11,16,35,.1); --line-2:rgba(11,16,35,.16);
  --brand:#0298B0; --brand-ink:#1F7A66; --brand-ink-hover:#186655; --brand-deep:#0F6B58;
  --brand-soft:rgba(31,122,102,.1);
  --grad-brand:linear-gradient(90deg,#0298B0,#45BB80,#7CD858);
  --accent-red:#FF3131; --green-2:#45BB80;
  --night:#092E25; --night-2:#0C4237;
  /* room faces (site hero room tones) */
  --room-back:#F7FCFA; --room-floor:#E3F4EE; --room-ceil:#F1FAF7; --room-side:#EAF6F1; --room-edge:rgba(15,107,88,.12);
  --card:#FFFFFF; --chrome:rgba(255,255,255,.92);
  --shadow-1:0 1px 2px rgba(11,16,35,.06),0 4px 14px rgba(11,16,35,.06);
  --shadow-2:0 2px 6px rgba(11,16,35,.06),0 18px 40px -12px rgba(15,107,88,.22);
  --focus:0 0 0 3px rgba(2,152,176,.35);
  --w-regular:400;--w-medium:500;--w-semi:600;
  --t-small:14px;--t-label:12.5px;--t-body:16px;--t-h3:19px;
  --r-s:10px;--r-m:14px;--r-l:20px;
  --ease:cubic-bezier(.16,1,.3,1);
  color-scheme:light;
}
:root[data-theme="dark"]{
  --paper:#071F19; --tint:#0C4237; --surface:#0E2F27;
  --ink:#ECF7F3; --ink-2:#C2D6CF; --ink-3:#9FB8B0;
  --line:rgba(236,247,243,.1); --line-2:rgba(236,247,243,.18);
  --brand-ink:#5FD3B1; --brand-ink-hover:#7EDDBF; --brand-soft:rgba(95,211,177,.14);
  --room-back:#0F3A31; --room-floor:#0A2E25; --room-ceil:#0C3229; --room-side:#0D352C; --room-edge:rgba(124,216,88,.10);
  --card:#113D33; --chrome:rgba(9,46,37,.9);
  --shadow-1:0 1px 2px rgba(0,0,0,.3),0 4px 14px rgba(0,0,0,.25);
  --shadow-2:0 2px 6px rgba(0,0,0,.3),0 18px 40px -12px rgba(0,0,0,.5);
  color-scheme:dark;
}
*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{font:var(--w-regular) var(--t-body)/1.6 Manrope,system-ui,sans-serif;color:var(--ink);background:var(--paper);overflow:hidden;-webkit-font-smoothing:antialiased;transition:background .4s var(--ease),color .4s var(--ease)}
::selection{background:rgba(69,187,128,.28)}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
button:disabled{cursor:not-allowed}
:focus-visible{outline:none;box-shadow:var(--focus)}
svg.i{width:20px;height:20px;flex:none;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.vh{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.num{font-variant-numeric:tabular-nums}

/* ---------- Loader ---------- */
#loader{position:fixed;inset:0;z-index:60;display:grid;place-items:center;background:var(--paper);transition:opacity .5s var(--ease),visibility .5s}
#loader.gone{opacity:0;visibility:hidden}
.ld{display:grid;justify-items:center;gap:22px}
.ld img{height:44px}
.ld-bar{width:240px;height:4px;border-radius:4px;background:var(--line);overflow:hidden}
.ld-bar i{display:block;height:100%;width:100%;transform:scaleX(0);transform-origin:left;background:var(--grad-brand);border-radius:inherit;transition:transform .2s linear}
.ld p{margin:0;font-size:var(--t-small);color:var(--ink-3)}

/* ---------- App frame ---------- */
.app{position:fixed;inset:0;display:grid;grid-template-rows:60px minmax(0,1fr);grid-template-columns:minmax(0,1fr)}
.app.focus{grid-template-rows:0 minmax(0,1fr)}
.top{position:relative;z-index:20;height:60px;flex:none;display:flex;align-items:center;gap:18px;padding:0 16px 0 20px;background:var(--chrome);border-bottom:1px solid var(--line);backdrop-filter:saturate(1.4) blur(10px);transition:transform .45s var(--ease),opacity .3s}
.logo{height:36px;display:block}
.logo.d{display:none}
:root[data-theme="dark"] .logo.l{display:none}
:root[data-theme="dark"] .logo.d{display:block}
.sep{width:1px;height:28px;background:var(--line)}
.prog{display:grid;gap:6px;min-width:0;flex:0 1 360px}
.prog-h{display:flex;align-items:baseline;gap:8px;font-size:var(--t-small);white-space:nowrap}
.prog-h b{font-weight:var(--w-semi)}
.prog-h span{color:var(--ink-3);font-size:var(--t-label)}
.segs{display:grid;grid-template-columns:repeat(10,1fr);gap:4px}
.segs i{height:4px;border-radius:4px;background:var(--line-2);transition:background .4s}
.segs i.done{background:var(--brand-ink)}
.segs i.cur{background:linear-gradient(90deg,var(--brand) var(--p,0%),var(--line-2) var(--p,0%))}
.top-r{margin-left:auto;display:flex;align-items:center;gap:6px}
.meta{display:flex;align-items:center;gap:6px;padding:0 10px;font-size:var(--t-small);color:var(--ink-2);white-space:nowrap}
.meta svg{width:17px;height:17px;color:var(--ink-3)}
/* connection badge (the live player's "Good" chip) */
.net{display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 11px;border-radius:9px;border:1px solid var(--line-2);font-size:var(--t-label);font-weight:var(--w-semi);color:var(--ink);white-space:nowrap}
.net.off{background:rgba(255,49,49,.08);border-color:rgba(255,49,49,.35)}
.net.off .bars i{background:var(--accent-red)!important}
/* sound: mute toggle + volume chevron, one joined control */
.snd{position:relative;display:inline-flex;align-items:center;border-radius:var(--r-s)}
.snd .chev{width:24px}
.snd .chev svg{width:16px;height:16px}
.ib{width:40px;height:40px;display:grid;place-items:center;border-radius:var(--r-s);color:var(--ink-2);transition:background .2s,color .2s}
.ib:hover{background:var(--brand-soft);color:var(--ink)}
.ib[aria-pressed="true"],.ib[aria-expanded="true"]{background:var(--brand-soft);color:var(--brand-ink)}
.btn{height:40px;display:inline-flex;align-items:center;gap:8px;padding:0 16px;border-radius:var(--r-s);font-size:var(--t-small);font-weight:var(--w-semi);white-space:nowrap;transition:background .2s,box-shadow .2s,color .2s,transform .15s}
.btn:active{transform:translateY(1px)}
.btn-ghost{border:1px solid var(--line-2);color:var(--ink)}
.btn-ghost:hover{background:var(--brand-soft)}
.btn-pri{background:var(--brand-ink);color:#fff;box-shadow:0 1px 0 rgba(255,255,255,.18) inset,0 6px 16px -6px rgba(15,107,88,.55)}
:root[data-theme="dark"] .btn-pri{color:#062A21}
.btn-pri:hover{background:var(--brand-ink-hover)}
.btn-pri:disabled{background:var(--line-2);color:var(--ink-3);box-shadow:none}
.btn-lg{height:48px;padding:0 22px;font-size:15px}

/* ---------- Popovers ---------- */
.pop{position:absolute;z-index:40;min-width:260px;padding:8px;border-radius:var(--r-m);background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-2);opacity:0;transform:translateY(-4px) scale(.98);transform-origin:top right;visibility:hidden;transition:opacity .18s var(--ease),transform .25s var(--ease),visibility .18s}
.pop.open{opacity:1;transform:none;visibility:visible}
.pop h3{margin:6px 10px 8px;font-size:var(--t-label);font-weight:var(--w-semi);color:var(--ink-3)}
.row{display:flex;align-items:center;gap:12px;min-height:44px;padding:4px 10px;border-radius:var(--r-s);font-size:var(--t-small)}
.row + .row{border-top:1px solid var(--line)}
.row .lbl{flex:1}
.seg{display:inline-flex;padding:3px;border-radius:12px;background:var(--tint);gap:2px}
.seg button{height:34px;padding:0 12px;border-radius:9px;font-size:var(--t-label);font-weight:var(--w-medium);color:var(--ink-2);display:inline-flex;align-items:center;gap:6px;white-space:nowrap;transition:background .2s,color .2s,box-shadow .2s}
.seg button[aria-pressed="true"]{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-1)}
.seg button:not([aria-pressed="true"]):hover{color:var(--ink)}
:root[data-theme="dark"] .seg{background:rgba(0,0,0,.22)}
:root[data-theme="dark"] .seg button[aria-pressed="true"]{background:rgba(95,211,177,.18);color:var(--ink);box-shadow:inset 0 0 0 1px rgba(95,211,177,.35)}
.seg svg{width:16px;height:16px}
input[type=range]{-webkit-appearance:none;appearance:none;width:130px;height:24px;background:transparent;cursor:pointer}
input[type=range]::-webkit-slider-runnable-track{height:4px;border-radius:4px;background:linear-gradient(90deg,var(--brand-ink) var(--v,80%),var(--line-2) var(--v,80%))}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;margin-top:-6px;border-radius:50%;background:var(--surface);border:2px solid var(--brand-ink)}
input[type=range]::-moz-range-track{height:4px;border-radius:4px;background:var(--line-2)}
input[type=range]::-moz-range-progress{height:4px;border-radius:4px;background:var(--brand-ink)}
input[type=range]::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--surface);border:2px solid var(--brand-ink)}
.bars{display:inline-flex;align-items:flex-end;gap:2px;height:14px}
.bars i{width:3px;border-radius:1px;background:var(--brand-ink)}
.bars i:nth-child(1){height:5px}.bars i:nth-child(2){height:9px}.bars i:nth-child(3){height:14px}
.bars.weak i:nth-child(n+2){background:var(--line-2)}

/* character panel: opened straight from the profile button */
.set-pop{width:288px;padding:8px}
.prof{width:40px;height:40px;padding:0;border-radius:50%;overflow:hidden;background:var(--tint);box-shadow:0 0 0 2px var(--surface),0 0 0 3.5px var(--brand-ink);transition:box-shadow .2s,transform .15s}
.prof:hover{transform:scale(1.05)}
.prof[aria-expanded="true"]{box-shadow:0 0 0 2px var(--surface),0 0 0 4px var(--brand-ink),0 0 14px rgba(69,187,128,.45)}
.prof img{display:block;width:100%;height:100%;object-fit:cover;object-position:50% 0;transform:scale(1.9);transform-origin:50% 8%}
.view-h{display:flex;align-items:center;gap:4px;margin:0 0 6px}
.view-h h3{margin:0}
.view-h .ib{width:36px;height:36px}
.row .val{font-size:var(--t-label);color:var(--ink-3)}
.chars{display:grid;gap:14px;padding:6px 10px 4px}
.char{display:grid;justify-items:center;gap:4px;padding:12px 10px 10px;border-radius:14px;background:var(--surface);border:1px solid var(--line);color:var(--ink);font-size:15px;font-weight:var(--w-medium);transition:border-color .2s,box-shadow .2s,transform .15s}
.char img{width:120px;height:118px;object-fit:contain;object-position:50% 100%}
.char:hover{transform:translateY(-1px)}
.char[aria-checked="true"]{border-color:var(--brand-ink);box-shadow:0 0 0 1px var(--brand-ink),0 0 18px rgba(69,187,128,.45)}
.btn-save{width:calc(100% - 20px);margin:18px 10px 6px;height:48px;justify-content:center;border-radius:12px;background:var(--grad-brand);color:#fff;font-size:16px;box-shadow:0 8px 20px -8px rgba(15,107,88,.55)}
.btn-save:hover{filter:brightness(1.05)}
.vol-pop{width:272px;min-width:0}
.vol-pop input[type=range]{width:118px}

/* ---------- Stage + 3D room ---------- */
.stage{position:relative;overflow:hidden;perspective:900px;perspective-origin:50% 44%;cursor:grab;touch-action:none;outline:none}
.stage.drag{cursor:grabbing}
.stage.locked{cursor:default}
.room{position:absolute;left:50%;top:44%;width:0;height:0;transform-style:preserve-3d;transition:transform .55s var(--ease)}
.stage.drag .room,.stage.live .room{transition:none}
.face{position:absolute;left:0;top:0;transform-origin:center;backface-visibility:visible;border:1px solid var(--room-edge);transition:background .4s var(--ease)}
.f-back{background:var(--room-back)}
.f-floor{background:var(--room-floor);background-image:linear-gradient(var(--room-edge) 1px,transparent 1px),linear-gradient(90deg,var(--room-edge) 1px,transparent 1px);background-size:64px 64px}
.f-ceil{background:var(--room-ceil)}
/* faint panelling + skirting so a full turn reads as moving through a room, not a flat colour */
.f-side,.f-front{background:var(--room-side);background-image:linear-gradient(to top,var(--room-edge) 0 2px,transparent 2px 6%,var(--room-edge) 6% calc(6% + 1px),transparent calc(6% + 1px)),linear-gradient(90deg,var(--room-edge) 1px,transparent 1px);background-size:100% 100%,140px 100%}
.f-back > .card{position:absolute;inset:6% 5%}

.card{display:grid;grid-template-columns:1.12fr 1fr;align-items:center;gap:clamp(20px,3vw,48px);padding:clamp(20px,3vw,44px);border-radius:var(--r-l);background:var(--card);box-shadow:var(--shadow-2);transition:background .4s var(--ease)}
.car{position:relative;align-self:center;isolation:isolate}
/* showroom spotlight behind the cut-out: grounds the car and hides the light matte edge on dark */
.car::before{content:"";position:absolute;z-index:-1;left:-6%;right:-6%;top:-4%;bottom:-10%;border-radius:50%;background:radial-gradient(closest-side,rgba(233,246,242,.95),rgba(233,246,242,.55) 55%,rgba(233,246,242,0))}
:root[data-theme="dark"] .car::before{background:radial-gradient(closest-side,rgba(214,238,230,.9),rgba(160,205,190,.35) 60%,rgba(160,205,190,0))}
.car img{display:block;width:100%;height:auto;filter:drop-shadow(0 18px 18px rgba(11,16,35,.18));user-select:none;-webkit-user-drag:none;pointer-events:none}
.copy h1{margin:0 0 12px;font-size:clamp(26px,2.5vw,42px);line-height:1.1;letter-spacing:-.025em;font-weight:700;text-wrap:balance}
.copy p{margin:0;max-width:44ch;font-size:clamp(14px,1.08vw,17px);line-height:1.7;color:var(--ink-2);text-wrap:pretty}

/* hotspots */
.hs{position:absolute;width:44px;height:44px;margin:-22px 0 0 -22px;display:grid;place-items:center;border-radius:50%}
.hs span{width:30px;height:30px;display:grid;place-items:center;border-radius:50%;background:var(--surface);color:var(--ink);font-size:13px;font-weight:700;box-shadow:0 0 0 2px var(--brand-ink),0 6px 14px -4px rgba(11,16,35,.35);transition:transform .25s var(--ease),background .2s,color .2s}
.hs::before{content:"";position:absolute;inset:4px;border-radius:50%;border:2px solid var(--brand-ink);opacity:0;animation:ping 2.4s var(--ease) infinite}
.hs.seen::before{animation:none}
.hs:hover span,.hs[aria-expanded="true"] span{transform:scale(1.12)}
.hs.seen span{background:var(--brand-ink);color:#fff}
:root[data-theme="dark"] .hs.seen span{color:#062A21}
@keyframes ping{0%{transform:scale(.9);opacity:.7}70%,100%{transform:scale(1.7);opacity:0}}
.tip{position:absolute;z-index:30;width:270px;padding:18px 20px 16px;text-align:center;border-radius:16px;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-2);font-size:var(--t-small);opacity:0;visibility:hidden;transform:translateY(4px);transition:opacity .18s,transform .25s var(--ease),visibility .18s}
.tip.open{opacity:1;visibility:visible;transform:none}
.tip b{display:block;margin-bottom:6px;font-size:18px;line-height:1.3;font-weight:700;color:var(--brand-ink)}
.tip p{margin:0 0 14px;color:var(--ink-2);line-height:1.55}
.tip .btn{height:36px;padding:0 22px}

/* step card (hero instruction) */
.step{position:absolute;z-index:15;top:16px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:14px;max-width:min(680px,calc(100% - 160px));padding:12px 18px 12px 12px;border-radius:var(--r-m);background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-2);transition:background .3s,border-color .3s}
.step-ic{width:40px;height:40px;flex:none;display:grid;place-items:center;border-radius:12px;background:var(--brand-soft);color:var(--brand-ink)}
.step-tx{min-width:0}
.step-tx b{display:block;font-size:15.5px;font-weight:var(--w-semi);line-height:1.35}
.step-tx span{display:block;font-size:var(--t-small);color:var(--ink-2);line-height:1.45}
.dots{display:flex;gap:6px;margin-left:6px}
.dots i{width:8px;height:8px;border-radius:50%;background:var(--line-2);transition:background .3s}
.dots i.on{background:var(--brand-ink)}
.step[data-state="done"]{border-color:rgba(69,187,128,.5)}
.step[data-state="done"] .step-ic{background:var(--brand-ink);color:#fff}
:root[data-theme="dark"] .step[data-state="done"] .step-ic{color:#062A21}
.step[data-state="late"] .step-ic{background:rgba(255,49,49,.1);color:var(--ink)}
.step .btn{margin-left:4px}

/* room arrows */
.nav{position:absolute;z-index:12;top:50%;width:52px;height:52px;margin-top:-26px;display:grid;place-items:center;border-radius:50%;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-1);color:var(--ink);transition:background .2s,color .2s,box-shadow .2s,opacity .2s,transform .2s var(--ease)}
.nav:hover:not(:disabled){transform:scale(1.06)}
.nav:disabled{opacity:.4}
.nav.prev{left:20px}.nav.next{right:20px}
/* set by fitDock() only when a measurement says the raised dial would hit the arrows */
.stage.nav-up .nav{top:40%}
.nav.ready{background:var(--brand-ink);border-color:transparent;color:#fff;box-shadow:0 10px 24px -8px rgba(15,107,88,.6)}
:root[data-theme="dark"] .nav.ready{color:#062A21}
.nav-l{position:absolute;top:calc(100% + 8px);left:50%;transform:translateX(-50%);font-size:var(--t-label);font-weight:var(--w-medium);color:var(--ink-2);white-space:nowrap;opacity:0;transition:opacity .2s}
.nav:hover .nav-l,.nav:focus-visible .nav-l,.nav.ready .nav-l{opacity:1}
.nav.ready .nav-l{color:var(--brand-ink)}

/* floating toolbar */
.bar{position:absolute;z-index:20;left:50%;bottom:16px;transform:translateX(-50%);display:flex;align-items:center;gap:4px;padding:6px;border-radius:18px;background:var(--chrome);border:1px solid var(--line);box-shadow:var(--shadow-2);backdrop-filter:saturate(1.4) blur(10px);transition:transform .45s var(--ease),opacity .3s}
.grp{display:flex;align-items:center;gap:4px;padding:0 4px}
.grp + .grp{border-left:1px solid var(--line);padding-left:8px;margin-left:4px}
.play{width:40px;height:40px;display:grid;place-items:center;border-radius:12px;background:var(--brand-ink);color:#fff;transition:background .2s}
:root[data-theme="dark"] .play{color:#062A21}
.play:hover{background:var(--brand-ink-hover)}
.play svg{fill:currentColor;stroke:none}
.wave{position:relative;width:124px;height:40px;display:flex;align-items:center;gap:2px;padding:0 4px;cursor:pointer;border-radius:10px}
.wave i{flex:1;border-radius:2px;background:var(--line-2);transition:background .15s}
.wave i.on{background:var(--brand-ink)}
.wave-t{font-size:var(--t-label);color:var(--ink-2);min-width:70px}
.cd{display:flex;align-items:center;gap:8px;height:40px;padding:0 10px;border-radius:12px;font-size:15px;font-weight:var(--w-semi)}
.cd svg{color:var(--ink-3)}
.cd.low{background:rgba(255,49,49,.08)}
.cd.low svg{color:var(--accent-red)}
.zoom-v{min-width:44px;text-align:center;font-size:var(--t-label);color:var(--ink-2)}

/* camera popover / d-pad */
/* the dial: outer ring turns the camera (labelled like the live player), inner disc walks, centre locks */
.dial{position:relative;width:216px;height:216px;border-radius:50%;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line)}
.dial button{position:absolute;display:grid;place-items:center;transition:background .2s,color .2s,opacity .2s}
.dial button:disabled{opacity:.35}
.ring{border-radius:12px;font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2)}
.ring:hover:not(:disabled){background:var(--brand-soft);color:var(--ink)}
.ring:active:not(:disabled){color:var(--brand-ink)}
.r-u{top:2px;left:72px;width:72px;height:38px}.r-d{bottom:2px;left:72px;width:72px;height:38px}
.r-l{left:1px;top:76px;width:39px;height:64px}.r-r{right:1px;top:76px;width:39px;height:64px}
.disc{position:absolute;left:40px;top:40px;width:136px;height:136px;border-radius:50%;background:var(--brand-ink);box-shadow:0 6px 16px -6px rgba(15,107,88,.55)}
.mv{width:40px;height:40px;border-radius:12px;color:#fff}
:root[data-theme="dark"] .mv{color:#062A21}
.mv:hover:not(:disabled){background:rgba(255,255,255,.16)}
.mv:active:not(:disabled){background:rgba(255,255,255,.28)}
:root[data-theme="dark"] .mv:hover:not(:disabled){background:rgba(0,0,0,.12)}
.m-u{top:4px;left:48px}.m-d{bottom:4px;left:48px}.m-l{left:4px;top:48px}.m-r{right:4px;top:48px}
.lock{left:44px;top:44px;width:48px;height:48px;border-radius:50%;background:var(--surface);color:var(--ink);box-shadow:var(--shadow-1)}
.lock[aria-pressed="true"]{background:var(--ink);color:var(--paper)}
.cam-dock{position:absolute;z-index:18;right:16px;bottom:16px;padding:6px;border-radius:50%;background:var(--chrome);border:1px solid var(--line);box-shadow:var(--shadow-2);backdrop-filter:saturate(1.4) blur(10px)}
.face-btn{position:absolute;z-index:1;left:50%;top:-14px;transform:translateX(-50%);height:26px;padding:0 10px 0 8px;display:inline-flex;align-items:center;gap:5px;border-radius:26px;background:var(--surface);border:1px solid var(--line-2);box-shadow:var(--shadow-1);font-size:11.5px;font-weight:var(--w-semi);color:var(--ink-2);white-space:nowrap;transition:color .2s,border-color .2s,opacity .2s}
.face-btn svg{width:14px;height:14px;color:var(--brand-ink)}
.face-btn:hover:not(:disabled){color:var(--ink);border-color:var(--brand-ink)}
.face-btn:disabled{opacity:.45}

/* focus mode */
.app.focus .top{transform:translateY(-100%);opacity:0;pointer-events:none}
.app.focus .bar{transform:translate(-50%,calc(100% + 30px));opacity:0;pointer-events:none}
.app.focus .nav{opacity:0;pointer-events:none}
.show-ctl{position:absolute;z-index:25;left:50%;bottom:18px;transform:translate(-50%,16px);opacity:0;pointer-events:none;transition:opacity .3s,transform .45s var(--ease)}
.app.focus .show-ctl{opacity:1;transform:translateX(-50%);pointer-events:auto}
.show-ctl .btn{background:var(--surface);box-shadow:var(--shadow-2);border-color:var(--line)}

/* toast */
.toast{position:fixed;z-index:70;left:50%;bottom:92px;transform:translate(-50%,10px);padding:10px 16px;border-radius:12px;background:var(--ink);color:var(--paper);font-size:var(--t-small);font-weight:var(--w-medium);opacity:0;pointer-events:none;transition:opacity .2s,transform .3s var(--ease)}
.toast.on{opacity:1;transform:translateX(-50%)}

/* dialog */
dialog{border:0;padding:0;border-radius:16px;background:var(--surface);color:var(--ink);box-shadow:0 30px 80px -20px rgba(11,16,35,.45);width:min(420px,calc(100% - 32px))}
dialog::backdrop{background:rgba(9,46,37,.32);backdrop-filter:blur(3px)}
dialog[open]{animation:dlg .3s var(--ease)}
@keyframes dlg{from{opacity:0;transform:translateY(8px) scale(.98)}}
.dlg{padding:30px 28px 26px;text-align:center}
.dlg h2{margin:0 0 12px;font-size:22px;line-height:1.25;letter-spacing:-.015em;font-weight:700;color:var(--brand-ink)}
.dlg p{margin:0 0 24px;color:var(--ink-2);font-size:15px}
.dlg-a{display:flex;justify-content:center;gap:12px}
/* pop-up buttons after the live player's cards: outlined secondary, gradient primary */
.btn-out{border:1.5px solid var(--brand-ink);color:var(--brand-ink);min-width:120px;justify-content:center}
.btn-out:hover{background:var(--brand-soft)}
.btn-grad{background:var(--grad-brand);color:#fff;min-width:120px;justify-content:center;box-shadow:0 6px 16px -6px rgba(15,107,88,.5)}
.btn-grad:hover{filter:brightness(1.05)}

/* ---------- Lobby ---------- */
#lobby{position:fixed;inset:0;z-index:50;display:grid;grid-template-rows:64px minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);background:var(--paper);transition:opacity .4s var(--ease),visibility .4s}
#lobby.gone{opacity:0;visibility:hidden}
.lb-top{display:flex;align-items:center;padding:0 24px;border-bottom:1px solid var(--line);background:var(--chrome)}
/* full-bleed: showroom poster on the left, module panel on the right, strip along the bottom */
.lb-main{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(360px,1fr);gap:20px;padding:20px 24px;min-height:0}
.poster{position:relative;min-height:0;border-radius:24px;background:radial-gradient(70% 38% at 50% 78%,var(--room-floor),transparent 72%),radial-gradient(130% 100% at 50% 0%,var(--surface),var(--tint) 62%,var(--room-floor));border:1px solid var(--line);display:grid;place-items:center;overflow:hidden}
:root[data-theme="dark"] .poster{background:radial-gradient(70% 38% at 50% 78%,rgba(214,238,230,.18),transparent 72%),radial-gradient(130% 100% at 50% 0%,#145244,var(--night-2) 60%,var(--night))}
.poster img{width:90%;height:84%;object-fit:contain;user-select:none;-webkit-user-drag:none}
.lb-info{display:flex;flex-direction:column;justify-content:center;gap:clamp(18px,3.2vh,36px);min-height:0;padding:clamp(24px,3.4vw,56px);border-radius:24px;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-1)}
.lb-copy h1{margin:0 0 8px;font-size:clamp(34px,5.4vh,64px);line-height:1.04;letter-spacing:-.03em;font-weight:700}
.lb-sub{margin:0;font-size:clamp(14px,1.7vh,17px);color:var(--ink-3)}
.lb-info p.d{margin:0;color:var(--ink-2);font-size:clamp(15px,1.95vh,19px);line-height:1.65;max-width:48ch}
.facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0;padding:0;list-style:none}
.facts li{display:grid;gap:8px;padding:clamp(12px,1.8vh,18px) 14px;border-radius:var(--r-m);background:var(--tint);font-size:var(--t-small);font-weight:var(--w-semi);line-height:1.35;color:var(--ink)}
:root[data-theme="dark"] .facts li{background:rgba(0,0,0,.2)}
.facts svg{width:20px;height:20px;color:var(--brand-ink)}
.lb-info .btn-lg{height:clamp(52px,7vh,64px);justify-content:center;font-size:clamp(16px,2vh,19px);border-radius:var(--r-m)}
.lb-mods{display:flex;align-items:center;gap:10px;padding:16px 16px 20px;border-top:1px solid var(--line);background:var(--chrome)}
.lb-mods .ib:disabled{opacity:.35}
/* cards that run past either edge fade out instead of being cut mid-word */
.mods{display:flex;gap:12px;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none;flex:1;min-width:0;padding:6px 4px;scroll-snap-type:x proximity;scroll-padding-inline:4px;
  --fl:0px;--fr:0px;-webkit-mask-image:linear-gradient(to right,transparent 0,#000 var(--fl),#000 calc(100% - var(--fr)),transparent 100%);mask-image:linear-gradient(to right,transparent 0,#000 var(--fl),#000 calc(100% - var(--fr)),transparent 100%)}
.mods.fade-l{--fl:56px}.mods.fade-r{--fr:56px}
.mods::-webkit-scrollbar{display:none}
@media (max-width:900px){ .lb-main{grid-template-columns:minmax(0,1fr);grid-template-rows:auto;grid-auto-rows:auto;overflow:auto} .poster{min-height:240px} .lb-info{justify-content:flex-start;min-height:auto} }
.mod{flex:none;width:clamp(212px,16vw,268px);min-height:92px;padding:14px 16px;display:flex;flex-direction:column;justify-content:center;gap:6px;scroll-snap-align:start;border-radius:var(--r-m);border:1px solid var(--line);background:var(--surface);text-align:left;transition:border-color .2s,box-shadow .2s,background .2s}
.mod:hover{border-color:var(--line-2)}
.mod[aria-pressed="true"]{border-color:var(--brand-ink);box-shadow:0 0 0 1px var(--brand-ink);background:color-mix(in srgb,var(--brand-ink) 6%,var(--surface))}
.mod small{display:flex;align-items:center;gap:6px;min-width:0;font-size:12.5px;color:var(--ink-3)}
.mod small span{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mod small svg{width:14px;height:14px;flex:none}
.mod.done small{color:var(--brand-ink)}
.mod b{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:15px;line-height:1.3;font-weight:var(--w-semi);overflow-wrap:anywhere}
@media (max-width:600px){ .mod{width:clamp(180px,62vw,230px);min-height:84px;padding:12px 14px} .mods.fade-l{--fl:32px}.mods.fade-r{--fr:32px} }

/* touch: d-pad docked, drag still works */
@media (pointer:coarse){
  .cam-dock{bottom:96px}
}
@media (max-width:1100px){
  .wave{width:96px}
  .meta.time{display:none}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition-duration:.01ms!important}
}

/* ---------- Main wall: Phase 3 Room content (Step 3 template zones, % of the back wall) ---------- */
.f-back{transform-style:preserve-3d}
.f-back > .wall{position:absolute;inset:0;container-type:size;--acc:#0298B0;--acc2:#45BB80;--lift:10px;
  --p-sh:0 1px 2px rgba(11,16,35,.08),0 3px 8px -2px rgba(11,16,35,.08),0 22px 40px -18px rgba(15,107,88,.32);--p-hl:inset 0 1px 0 rgba(255,255,255,.95)}
:root[data-theme="dark"] .f-back > .wall{--p-sh:0 1px 2px rgba(0,0,0,.35),0 3px 8px -2px rgba(0,0,0,.3),0 22px 40px -18px rgba(0,0,0,.65);--p-hl:inset 0 1px 0 rgba(255,255,255,.08)}
.sw-z{position:absolute;transform-style:preserve-3d}
.sw-p{position:absolute;inset:0;border-radius:1.2cqw;background:var(--card);border:1px solid var(--line);box-shadow:var(--p-hl),var(--p-sh);
  transform:translateZ(var(--lift));transition:transform .35s var(--ease),box-shadow .35s var(--ease),background .4s var(--ease);overflow:hidden}
.sw-z.sw-i .sw-p:hover{transform:translateZ(calc(var(--lift) + 6px))}
.sw-z.sw-in{animation:swIn .45s var(--ease) both;animation-delay:calc(var(--d,0) * 80ms)}
@keyframes swIn{from{opacity:0;translate:0 1.4cqh}to{opacity:1;translate:0 0}}
.sw-eyebrow{display:flex;align-items:center;gap:.6cqw;font-size:.9cqw;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--acc);margin-bottom:.5cqh}
:root[data-theme="dark"] .sw-eyebrow{color:color-mix(in srgb,var(--acc) 65%,#fff)}
.sw-eyebrow i{width:1.6cqw;height:2px;border-radius:2px;background:currentColor}
.sw-head{display:flex;flex-direction:column;justify-content:center;height:100%;padding:0 1.8cqw}
.sw-head h2{margin:0;font-size:2.5cqw;line-height:1.1;letter-spacing:-.025em;font-weight:700;color:var(--ink);text-wrap:balance}
.sw-body{height:100%;padding:1.6cqw 1.8cqw;overflow:auto;scrollbar-width:thin;font-size:1.3cqw;line-height:1.65;color:var(--ink-2)}
.sw-body p{margin:0 0 .8cqw}
.sw-body .s{border-radius:.4cqw;padding:.1cqw .2cqw;transition:background .25s,color .25s;cursor:pointer}
.sw-body .s.cur{background:color-mix(in srgb,var(--acc) 20%,transparent);color:var(--ink);box-shadow:0 0 0 .2cqw color-mix(in srgb,var(--acc) 20%,transparent)}
.sw-body .s.done{color:var(--ink)}
.sw-facts{display:flex;flex-wrap:wrap;gap:.6cqw;margin-top:1cqw}
.sw-facts span{display:inline-flex;align-items:center;gap:.5cqw;padding:.45cqw .9cqw;border-radius:99px;background:var(--tint);font-size:1cqw;font-weight:600;color:var(--ink-2)}
.sw-facts b{color:var(--acc);font-weight:700}
:root[data-theme="dark"] .sw-facts b{color:color-mix(in srgb,var(--acc) 65%,#fff)}
.sw-3d{position:absolute;inset:0;touch-action:none;cursor:grab;background:radial-gradient(90% 80% at 50% 30%,color-mix(in srgb,var(--acc) 12%,var(--card)),var(--card))}
.sw-3d.drag{cursor:grabbing}
.sw-3d canvas{position:absolute;inset:0;width:100%!important;height:100%!important;display:block}
.sw-hint{position:absolute;left:.8cqw;bottom:.8cqw;z-index:2;padding:.3cqw .7cqw;border-radius:99px;background:var(--chrome);font-size:.85cqw;color:var(--ink-3);pointer-events:none}
.sw-tag3d{position:absolute;left:.8cqw;top:.8cqw;z-index:3;display:inline-flex;align-items:center;gap:.4cqw;padding:.35cqw .8cqw;border-radius:99px;background:var(--chrome);font-size:.9cqw;font-weight:700;color:var(--ink)}
.sw-tag3d i{width:.7cqw;height:.7cqw;border-radius:50%;background:var(--acc)}
/* Instructional Audio — corner player (instrAudioCornerZone), no box */
.sw-ia{position:absolute;inset:0;display:grid;place-items:start end;padding:8px 8px 0 0}
.sw-ia button{position:relative;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;color:#fff;background:conic-gradient(#fff var(--p,0%),rgba(255,255,255,.35) 0) border-box;
  box-shadow:0 0 0 2.5px var(--acc),0 8px 18px -6px color-mix(in srgb,var(--acc) 80%,transparent);transform:translateZ(16px)}
.sw-ia button::before{content:"";position:absolute;inset:3px;border-radius:50%;background:var(--grad-brand)}
.sw-ia button svg{position:relative;width:14px;height:14px;fill:currentColor}
.sw-ia button.on{animation:swPulse 1.3s ease-in-out infinite}
@keyframes swPulse{50%{box-shadow:0 0 0 2.5px var(--acc),0 0 0 9px color-mix(in srgb,var(--acc) 22%,transparent),0 8px 18px -6px color-mix(in srgb,var(--acc) 80%,transparent)}}
.sw-ia .t{position:absolute;right:46px;top:13px;padding:2px 7px;border-radius:99px;background:var(--chrome);font-size:10px;font-weight:700;color:var(--ink-2);white-space:nowrap;opacity:0;transition:opacity .2s;font-variant-numeric:tabular-nums}
.sw-ia.on .t,.sw-ia:hover .t{opacity:1}
/* Image zone */
.sw-img svg{display:block;width:100%;height:100%}
/* Input fields (FORM_FIELD_KINDS), each its own stacked zone; sized to its own box */
.sw-fld{container-type:size}
.sw-fld .sw-p{display:flex;flex-direction:column;justify-content:center;gap:5cqh;padding:0 6cqw}
.sw-fld label,.sw-fld .lb{display:flex;justify-content:space-between;gap:4px;font-size:clamp(7px,15cqh,13px);font-weight:600;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sw-fld .lb small{font-weight:600;color:var(--ink-3)}
.sw-fld .err{display:none;font-size:clamp(6px,12cqh,11px);color:#D93A40;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sw-fld.bad .err{display:block}
.sw-fld.bad .sw-p{border-color:#D93A40;box-shadow:var(--p-hl),0 0 0 3px rgba(217,58,64,.16),var(--p-sh)}
.sw-ctl{height:42cqh;min-height:16px;width:100%;display:flex;align-items:center;border-radius:clamp(4px,10cqh,9px);border:1px solid var(--line-2);background:var(--surface);box-shadow:inset 0 2px 3px rgba(11,16,35,.05);font-size:clamp(8px,17cqh,14px);color:var(--ink);overflow:hidden}
.sw-ctl:focus-within{border-color:var(--acc);box-shadow:0 0 0 3px color-mix(in srgb,var(--acc) 20%,transparent)}
.sw-ctl input{flex:1;min-width:0;height:100%;border:0;background:none;padding:0 6cqw;font:inherit;color:inherit;outline:none}
.sw-ctl input::placeholder{color:var(--ink-3)}
.sw-ctl .u{padding-right:5cqw;font-size:.85em;color:var(--ink-3)}
.sw-ctl button{height:100%;aspect-ratio:1;display:grid;place-items:center;color:var(--ink-2);font-size:1.2em;font-weight:700}
.sw-ctl button:hover{background:var(--brand-soft)}
.sw-ctl.num input{text-align:center;font-weight:700;padding:0}
.sw-segc{display:flex;gap:2px;padding:2px;background:var(--tint)}
.sw-segc button{flex:1;aspect-ratio:auto;height:100%;border-radius:clamp(3px,8cqh,7px);font-size:.85em;font-weight:600;color:var(--ink-2)}
.sw-segc button[aria-pressed="true"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px rgba(11,16,35,.15)}
:root[data-theme="dark"] .sw-segc{background:rgba(0,0,0,.25)}
:root[data-theme="dark"] .sw-segc button[aria-pressed="true"]{background:rgba(95,211,177,.2)}
.sw-rng{display:flex;align-items:center;gap:4cqw}
.sw-rng b{font-size:clamp(9px,20cqh,16px);font-weight:700;min-width:5ch;text-align:right;color:var(--ink);font-variant-numeric:tabular-nums}
.sw-rng b small{font-size:.6em;color:var(--ink-3);margin-left:2px}
.sw-rng input{flex:1;min-width:0;-webkit-appearance:none;appearance:none;height:18cqh;background:transparent;cursor:pointer}
.sw-rng input::-webkit-slider-runnable-track{height:clamp(3px,9cqh,7px);border-radius:9px;background:linear-gradient(90deg,var(--acc) var(--p,50%),var(--line-2) var(--p,50%))}
.sw-rng input::-moz-range-track{height:clamp(3px,9cqh,7px);border-radius:9px;background:linear-gradient(90deg,var(--acc) var(--p,50%),var(--line-2) var(--p,50%))}
.sw-rng input::-webkit-slider-thumb{-webkit-appearance:none;width:clamp(10px,26cqh,20px);height:clamp(10px,26cqh,20px);margin-top:calc((clamp(3px,9cqh,7px) - clamp(10px,26cqh,20px))/2);border-radius:50%;background:#fff;box-shadow:0 0 0 4px color-mix(in srgb,var(--acc) 25%,transparent),0 2px 6px rgba(11,16,35,.3)}
.sw-rng input::-moz-range-thumb{width:clamp(10px,26cqh,20px);height:clamp(10px,26cqh,20px);border:0;border-radius:50%;background:#fff;box-shadow:0 0 0 4px color-mix(in srgb,var(--acc) 25%,transparent),0 2px 6px rgba(11,16,35,.3)}
.sw-tg{display:flex;align-items:center;justify-content:space-between;gap:4cqw;width:100%;text-align:left}
.sw-tg span{font-size:clamp(7px,14cqh,12px);color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sw-sw{position:relative;flex:none;width:clamp(22px,52cqh,42px);height:clamp(13px,30cqh,24px);border-radius:99px;background:var(--line-2);transition:background .25s}
.sw-sw::after{content:"";position:absolute;top:2px;left:2px;height:calc(100% - 4px);aspect-ratio:1;border-radius:50%;background:#fff;box-shadow:0 1px 4px rgba(11,16,35,.3);transition:transform .3s var(--ease)}
.sw-tg[aria-checked="true"] .sw-sw{background:var(--acc)}
.sw-tg[aria-checked="true"] .sw-sw::after{transform:translateX(calc(clamp(22px,52cqh,42px) - clamp(13px,30cqh,24px)))}
.sw-stars{display:flex;gap:3cqw}
.sw-stars button{font-size:clamp(11px,30cqh,22px);line-height:1;color:var(--line-2);transition:color .15s,transform .15s}
.sw-stars button.on{color:#F0B429}
.sw-stars button:hover{transform:scale(1.15)}
/* themed dropdown (no native select) */
.sw-dd{position:relative;cursor:pointer;justify-content:space-between;padding:0 4cqw 0 6cqw;text-align:left}
.sw-dd .ph{color:var(--ink-3)}
.sw-dd svg{width:1em;height:1em;flex:none;transition:transform .2s}
.sw-fld.open .sw-dd svg{transform:rotate(180deg)}
.sw-fld.open{z-index:30}
.sw-fld.open .sw-p{overflow:visible}
.sw-ddm{position:absolute;left:6cqw;right:6cqw;top:calc(100% - 6cqh);z-index:40;padding:4px;border-radius:10px;background:var(--surface);border:1px solid var(--line);box-shadow:0 4px 10px rgba(11,16,35,.12),0 20px 40px -14px rgba(11,16,35,.35);display:none;max-height:200px;overflow:auto}
.sw-fld.open .sw-ddm{display:block}
.sw-ddm button{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border-radius:7px;font-size:12px;text-align:left;color:var(--ink)}
.sw-ddm button:hover,.sw-ddm button.kb{background:var(--brand-soft)}
.sw-ddm button[aria-selected="true"]{font-weight:700}
.sw-ddm i{width:10px;height:10px;border-radius:3px;flex:none}
.sw-ddm small{margin-left:auto;color:var(--ink-3);font-size:10.5px}
.sw-submit .sw-p{display:flex;align-items:center;justify-content:space-between;gap:1cqw;padding:0 .6cqw 0 1.2cqw;background:transparent;border:0;box-shadow:none}
.sw-submit .msg{font-size:1cqw;color:var(--ink-3);font-weight:600}
.sw-submit .msg.bad{color:#D93A40}
.sw-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5cqw;height:100%;max-height:44px;padding:0 1.6cqw;border-radius:.8cqw;background:var(--grad-brand);color:#fff;font-size:1.15cqw;font-weight:700;white-space:nowrap;box-shadow:inset 0 1px 0 rgba(255,255,255,.3),0 8px 18px -8px rgba(15,107,88,.6);transform:translateZ(14px);transition:filter .2s}
.sw-btn:hover{filter:brightness(1.07)}
.sw-btn:disabled{background:var(--line-2);color:var(--ink-3);box-shadow:none}
.sw-btn.ghost{background:var(--surface);color:var(--ink);border:1px solid var(--line-2);box-shadow:none}
.sw-done{display:grid;align-content:center;justify-items:center;gap:1cqh;height:100%;padding:2cqw;text-align:center}
.sw-done .bd{width:4.2cqw;height:4.2cqw;border-radius:1.2cqw;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,#1F9D6B,var(--acc));box-shadow:0 10px 24px -10px rgba(31,157,107,.8)}
.sw-done .bd svg{width:55%;height:55%;stroke:currentColor;fill:none;stroke-width:2.6}
.sw-done h3{margin:0;font-size:1.7cqw;color:var(--ink)}
.sw-done p{margin:0;font-size:1.05cqw;color:var(--ink-3)}
.sw-sum{display:grid;grid-template-columns:1fr 1fr;gap:.6cqw;width:100%;text-align:left}
.sw-sum div{padding:.6cqw .9cqw;border-radius:.7cqw;background:var(--tint);font-size:.9cqw;color:var(--ink-3)}
.sw-sum b{display:block;font-size:1.1cqw;color:var(--ink)}
/* Charts */
.sw-ch{position:absolute;inset:0;padding:1cqw}
.sw-ch svg{display:block;width:100%;height:100%;overflow:visible}
.sw-ch .ax{stroke:var(--line);stroke-width:1}
.sw-ch .axt{fill:var(--ink-3);font-size:11px;font-family:Manrope,sans-serif}
.sw-ch .ttl{fill:var(--ink);font-size:13px;font-weight:700;font-family:Manrope,sans-serif}
.sw-ch .dim{opacity:.2;transition:opacity .2s}
.sw-tt{position:absolute;z-index:6;pointer-events:none;padding:7px 10px;border-radius:9px;background:var(--surface);border:1px solid var(--line);box-shadow:0 4px 10px rgba(11,16,35,.12),0 18px 34px -12px rgba(11,16,35,.35);font-size:11.5px;line-height:1.45;white-space:nowrap;color:var(--ink);opacity:0;transform:translate(-50%,calc(-100% - 10px)) translateZ(20px);transition:opacity .15s}
.sw-tt.on{opacity:1}
.sw-tt b{display:block}
.sw-tt i{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px}
@keyframes swDraw{to{stroke-dashoffset:0}}
@keyframes swGrow{from{transform:scaleY(0)}}
@keyframes swPop{from{opacity:0;transform:scale(.3)}}
@keyframes swFade{from{opacity:0}}
/* Assessment — one bundled MCQ element (ASSESSMENT_MCQ_ZONE), like .cel-mcq */
.sw-mcq{position:absolute;inset:0;display:flex;flex-direction:column;gap:1.2cqh;padding:1.2cqw}
.sw-mcq-main{flex:1;min-height:0;display:flex;flex-direction:column;gap:1.4cqh}
.sw-mcq.side .sw-mcq-main{flex-direction:row;gap:1.2cqw}
.sw-mcq-tag{display:block;font-size:.75cqw;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);margin-bottom:.5cqh}
.sw-mcq-q{flex:0 0 auto;display:flex;flex-direction:column;min-height:0}
.sw-mcq-q.media{flex:0 0 46%}
.sw-mcq.side .sw-mcq-q{flex:0 0 40%}
.sw-qtext{padding:1cqh 1cqw;border-radius:.8cqw;border:1.5px solid color-mix(in srgb,var(--acc) 35%,transparent);background:color-mix(in srgb,var(--acc) 6%,var(--surface));font-size:1.45cqw;font-weight:700;color:var(--ink);line-height:1.3}
.sw-qpair{flex:1;min-height:0;display:flex;gap:1cqw}
.sw-qpair > .sw-q3{flex:0 0 57%;position:relative;border-radius:.8cqw;overflow:hidden}
.sw-qpair > .sw-qc{flex:1 1 0;min-width:0;display:flex;align-items:center;justify-content:center}
.sw-mcq.side .sw-qpair{flex-direction:column}
.sw-mcq.side .sw-qpair > .sw-q3{flex:0 0 66%}
.sw-qc .sw-qtext{width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center}
.sw-qaud{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;gap:.8cqh;padding:1cqw;border-radius:.8cqw;background:color-mix(in srgb,var(--acc) 7%,var(--surface));border:1.5px solid color-mix(in srgb,var(--acc) 30%,transparent)}
.sw-qaud .r{display:flex;align-items:center;gap:.8cqw}
.sw-qaud p{margin:0;font-size:1.15cqw;font-weight:700;color:var(--ink);line-height:1.35}
.sw-pb{flex:none;width:2.8cqw;height:2.8cqw;min-width:22px;min-height:22px;border-radius:50%;display:grid;place-items:center;background:var(--grad-brand);color:#fff;box-shadow:0 6px 14px -6px color-mix(in srgb,var(--acc) 80%,transparent)}
.sw-pb svg{width:42%;height:42%;fill:currentColor}
.sw-wv{flex:1;min-width:0;height:2.4cqw;display:flex;align-items:center;gap:2px}
.sw-wv i{flex:1;min-width:0;border-radius:2px;background:var(--line-2)}
.sw-wv.on i{background:var(--acc);animation:swWv .8s ease-in-out infinite alternate;animation-delay:calc(var(--k) * -41ms)}
@keyframes swWv{to{transform:scaleY(.45)}}
.sw-mcq-a{flex:1;min-height:0;display:flex;flex-direction:column}
.sw-opts{flex:1;min-height:0;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:1cqw}
.sw-mcq.side .sw-opts{grid-template-columns:1fr;grid-template-rows:repeat(4,1fr)}
.sw-opt{position:relative;min-height:0;display:flex;align-items:center;gap:.8cqw;padding:.6cqw;border-radius:.9cqw;border:1.5px solid var(--line-2);background:var(--surface);text-align:left;font-size:1.15cqw;font-weight:600;color:var(--ink-2);box-shadow:var(--p-hl),0 1px 2px rgba(11,16,35,.06),0 10px 20px -14px rgba(11,16,35,.35);transform:translateZ(6px);transition:transform .25s var(--ease),border-color .2s,background .2s;cursor:pointer;overflow:hidden}
.sw-opt:hover{transform:translateZ(12px);border-color:color-mix(in srgb,var(--acc) 55%,var(--line-2))}
.sw-opt[aria-pressed="true"]{border-color:var(--acc);box-shadow:0 0 0 3px color-mix(in srgb,var(--acc) 22%,transparent)}
.sw-opt.ok{border-color:#1F9D6B;background:color-mix(in srgb,#1F9D6B 10%,var(--surface))}
.sw-opt.no{border-color:#D93A40;background:color-mix(in srgb,#D93A40 9%,var(--surface))}
.sw-opt .k{flex:none;width:2cqw;height:2cqw;min-width:16px;min-height:16px;border-radius:.5cqw;display:grid;place-items:center;background:var(--tint);font-size:.95cqw;font-weight:800;color:var(--ink-2)}
.sw-opt[aria-pressed="true"] .k{background:var(--acc);color:#fff}
.sw-opt.img{flex-direction:column;align-items:stretch;padding:.5cqw}
.sw-opt.img .art{flex:1;min-height:0;border-radius:.6cqw;overflow:hidden;background:color-mix(in srgb,var(--acc) 8%,var(--tint))}
.sw-opt.img .art svg{width:100%;height:100%;display:block}
.sw-opt.img .lt{display:flex;align-items:center;gap:.6cqw;font-size:1cqw}
.sw-opt .d{font-weight:500;color:var(--ink-3)}
.sw-mcq-f{flex:0 0 auto;display:flex;align-items:center;gap:1.2cqw;min-height:3.6cqh}
.sw-pips{display:flex;gap:.4cqw}
.sw-pips i{width:2.4cqw;height:.5cqw;min-height:3px;border-radius:9px;background:var(--line-2)}
.sw-pips i.cur{background:var(--acc)}.sw-pips i.ok{background:#1F9D6B}.sw-pips i.no{background:#D93A40}
.sw-fb{flex:1;min-width:0;font-size:1.05cqw;color:var(--ink-2);line-height:1.35}
.sw-fb b{color:#1F9D6B}.sw-fb b.no{color:#D93A40}
.sw-mcq-f .sw-btn{height:3.4cqw;min-height:22px}
.sw-score{display:flex;align-items:center;justify-content:center;gap:3cqw;height:100%}
.sw-ring{--v:0;width:13cqw;height:13cqw;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--acc) calc(var(--v) * 1%),var(--line-2) 0)}
.sw-ring > div{width:80%;height:80%;border-radius:50%;background:var(--card);display:grid;place-items:center;text-align:center;line-height:1.1}
.sw-ring b{font-size:3cqw;font-weight:800;color:var(--ink)}
.sw-ring span{font-size:1.1cqw;color:var(--ink-3)}
/* Interaction — ARC cards: A/R areas on the object, instruction beside the area, model rail */
.sw-arc{position:absolute;inset:0}
.sw-arc-h{position:absolute;z-index:5;left:1cqw;top:1cqw;right:1cqw;display:flex;align-items:center;gap:.8cqw;pointer-events:none}
.sw-arc-h .pill{display:inline-flex;align-items:center;gap:.5cqw;padding:.4cqw .9cqw;border-radius:99px;background:var(--chrome);font-size:1cqw;font-weight:700;color:var(--ink);box-shadow:0 4px 12px -6px rgba(11,16,35,.35)}
.sw-arc-h .pill.sc{margin-left:auto}
.sw-arc-h .pill b{color:var(--acc)}
.sw-layer{position:absolute;inset:0;z-index:4;pointer-events:none}
.sw-area{position:absolute;left:0;top:0;border-radius:50%;border:2px dashed var(--acc);background:color-mix(in srgb,var(--acc) 13%,transparent);pointer-events:auto;cursor:pointer;will-change:transform;transition:opacity .25s,background .25s}
.sw-area:hover{background:color-mix(in srgb,var(--acc) 24%,transparent)}
.sw-area.cur{border-style:solid;animation:swArea 1.6s ease-out infinite}
@keyframes swArea{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--acc) 50%,transparent)}100%{box-shadow:0 0 0 14px transparent}}
.sw-area.done{border-color:#1F9D6B;background:rgba(31,157,107,.12)}
.sw-area.back{opacity:.3}
.sw-area .bg{position:absolute;top:-9px;right:-9px;display:flex;gap:2px}
.sw-area .bg i{min-width:17px;height:17px;padding:0 4px;border-radius:9px;display:grid;place-items:center;font-size:9.5px;font-style:normal;font-weight:800;color:#fff}
.sw-area .bg i.a{background:var(--acc)}.sw-area .bg i.r{background:#1F9D6B}
.sw-lead{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.sw-lead path{fill:none;stroke:var(--acc);stroke-width:2;stroke-dasharray:4 4}
.sw-lead circle{fill:var(--acc)}
.sw-co{position:absolute;left:0;top:0;width:min(250px,30cqw);padding:10px 12px;border-radius:12px;background:var(--surface);border:1px solid var(--line);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.6),0 4px 10px rgba(11,16,35,.12),0 24px 44px -16px rgba(11,16,35,.4);pointer-events:auto;will-change:transform;font-size:12px;color:var(--ink-2)}
.sw-co .n{font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--acc)}
.sw-co b{display:block;margin:2px 0 3px;font-size:13.5px;line-height:1.3;color:var(--ink)}
.sw-co p{margin:0 0 7px;line-height:1.45}
.sw-co .acts{display:grid;gap:4px}
.sw-co .acts button{display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:8px;border:1px solid var(--line-2);background:var(--surface);font-size:11.5px;font-weight:600;color:var(--ink);text-align:left;transition:border-color .2s,background .2s}
.sw-co .acts button:hover{border-color:var(--acc);background:color-mix(in srgb,var(--acc) 8%,var(--surface))}
.sw-co .acts button i{flex:none;width:16px;height:16px;border-radius:5px;display:grid;place-items:center;font-size:9px;font-style:normal;font-weight:800;color:#fff;background:var(--acc)}
.sw-co .acts button small{margin-left:auto;color:var(--ink-3);font-weight:500}
.sw-co .rx{margin-top:6px;padding:6px 8px;border-radius:8px;font-size:11.5px;line-height:1.4}
.sw-co .rx.ok{background:rgba(31,157,107,.12);color:var(--ink)}.sw-co .rx.no{background:rgba(217,58,64,.1);color:var(--ink)}
.sw-co .rx b{display:inline;font-size:11.5px}
.sw-rail{position:absolute;z-index:5;left:50%;bottom:1cqw;transform:translateX(-50%) translateZ(12px);display:flex;gap:.6cqw;padding:.45cqw;border-radius:1cqw;background:var(--chrome);box-shadow:0 8px 20px -10px rgba(11,16,35,.45)}
.sw-rail button{display:flex;align-items:center;gap:.6cqw;padding:.35cqw .8cqw .35cqw .35cqw;border-radius:.7cqw;border:1.5px solid transparent;text-align:left}
.sw-rail button.on{border-color:var(--acc);background:color-mix(in srgb,var(--acc) 9%,var(--surface))}
.sw-rail .th{width:3cqw;height:3cqw;min-width:20px;min-height:20px;border-radius:.5cqw;overflow:hidden;background:var(--tint)}
.sw-rail .th svg{width:100%;height:100%;display:block}
.sw-rail b{display:block;font-size:.95cqw;color:var(--ink);white-space:nowrap}
.sw-rail span i{font-style:normal;font-size:.75cqw;font-weight:800;padding:0 .3cqw;border-radius:.3cqw;margin-right:.2cqw;color:#fff}
.sw-rail span i.a{background:var(--acc)}.sw-rail span i.r{background:#1F9D6B}
.sw-endc{position:absolute;z-index:6;left:50%;top:50%;transform:translate(-50%,-50%) translateZ(24px);width:min(300px,40cqw);padding:16px;border-radius:14px;background:var(--surface);border:1px solid var(--line);box-shadow:0 4px 10px rgba(11,16,35,.12),0 30px 60px -20px rgba(11,16,35,.5);text-align:center;font-size:12px;color:var(--ink-2)}
.sw-endc b{display:block;font-size:16px;color:var(--ink);margin:6px 0 2px}
@media (prefers-reduced-motion:reduce){.sw-z.sw-in{animation:none}.sw-area.cur{animation:none}}

@media (max-width:600px){#dots{display:none}}
/* ---------- Interaction: the model stands in the room (full-stage WebGL layer, camera = CSS camera) ---------- */
.sw-room3d{position:absolute;inset:0;z-index:5;pointer-events:none}
.sw-room3d canvas{position:absolute;inset:0;width:100%!important;height:100%!important}
.sw-room-ui{position:absolute;inset:0;z-index:6;pointer-events:none;container-type:size;--acc:#0298B0}
.sw-room-ui .sw-area{pointer-events:auto}
.sw-room-ui .sw-area.off{display:none}
.sw-room-ui .sw-co{width:min(260px,40cqw);pointer-events:auto}
@media (max-width:560px){.sw-room-ui .sw-co{width:min(240px,64cqw)} .sw-room-ui .sw-rail{left:8px;bottom:auto;top:calc(50% + 60px);transform:none!important;flex-direction:column} .sw-room-ui .sw-rail button{padding:4px} .sw-room-ui .sw-rail button > span:last-child{display:none}}
.sw-room-ui .sw-rail{bottom:92px;transform:translateX(-50%);pointer-events:auto;padding:6px;border-radius:14px;gap:6px}
.sw-room-ui .sw-rail button{gap:8px;padding:5px 10px 5px 5px;border-radius:10px}
.sw-room-ui .sw-rail .th{width:34px;height:34px;border-radius:8px}
.sw-room-ui .sw-rail b{font-size:12.5px}
.sw-room-ui .sw-rail span i{font-size:10px;padding:0 4px;border-radius:4px}
.sw-room-ui .sw-endc{transform:translate(-50%,-50%);pointer-events:auto;width:min(300px,80cqw)}
.stage.sw-objdrag{cursor:grabbing}
/* ---------- Interaction: ARC card strip under the top bar ---------- */
.sw-arcstrip{position:absolute;top:12px;left:50%;transform:translateX(-50%);display:flex;gap:6px;padding:6px;border-radius:14px;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-2);max-width:calc(100% - 140px);overflow-x:auto;scrollbar-width:none}
.sw-arcstrip span{flex:none;min-width:36px;height:32px;padding:0 6px;display:grid;place-items:center;border-radius:8px;border:1.5px solid var(--line-2);background:var(--surface);font-size:13px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;transition:background .3s,border-color .3s,color .3s}
.sw-arcstrip span.done{background:#0F5E2E;border-color:#0F5E2E;color:#fff}
.sw-arcstrip span.wrong{background:#8B1A1A;border-color:#8B1A1A;color:#fff}
.sw-arcstrip span.cur{background:#1596B0;border-color:#1596B0;color:#fff;box-shadow:0 0 0 3px rgba(21,150,176,.25)}
.sw-arcstrip span.wrong.cur{background:#8B1A1A;border-color:#8B1A1A;box-shadow:0 0 0 3px rgba(139,26,26,.25)}
.stage.sw-has-strip .step{top:64px}
/* ---------- Interaction: Tray ---------- */
#trayBtn[hidden]{display:none}
.sw-tray{position:absolute;right:16px;top:64px;width:176px;max-height:calc(100% - 300px);min-height:220px;display:flex;flex-direction:column;gap:10px;padding:12px;border-radius:16px;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-2);pointer-events:auto}
.sw-tray.closed{display:none}
.sw-tray-h{text-align:center;font-size:17px;font-weight:700;color:var(--ink)}
.sw-tray-g{flex:1;min-height:0;display:grid;grid-template-columns:1fr 1fr;grid-auto-rows:72px;gap:8px;overflow-y:auto;padding:2px;scrollbar-width:thin}
.sw-slot{position:relative;border-radius:10px;background:#1F7A66;border:1px solid rgba(0,0,0,.18);display:grid;place-items:center;overflow:hidden}
:root[data-theme="dark"] .sw-slot{background:#14584a}
.sw-slot.empty{opacity:.85}
button.sw-slot{cursor:grab;background:radial-gradient(80% 80% at 50% 35%,#2a9a80,#1F7A66);transition:transform .2s var(--ease),box-shadow .2s}
button.sw-slot:hover{transform:translateY(-2px)}
button.sw-slot.on{box-shadow:0 0 0 3px #fff,0 0 0 6px var(--acc);transform:translateY(-2px)}
.sw-slot img{width:84%;height:84%;object-fit:contain;filter:drop-shadow(0 4px 6px rgba(0,0,0,.35));pointer-events:none}
.sw-slot span{position:absolute;inset:auto 0 0 0;padding:2px 4px;font-size:9.5px;font-weight:600;color:#fff;background:rgba(0,0,0,.35);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;opacity:0;transition:opacity .15s}
button.sw-slot:hover span,button.sw-slot.on span{opacity:1}
.sw-trash{flex:none;width:calc(50% - 4px);height:72px;border-radius:10px;background:#0F4A3C;color:#fff;display:grid;place-items:center;transition:background .2s,box-shadow .2s}
.sw-trash svg{width:30px;height:30px}
.sw-trash.armed{background:#8B1A1A;box-shadow:0 0 0 3px rgba(139,26,26,.25)}
.sw-held{position:absolute;left:0;top:0;width:56px;height:56px;z-index:9;pointer-events:none;border-radius:12px;background:rgba(31,122,102,.92);padding:4px;box-shadow:0 10px 24px -8px rgba(0,0,0,.5)}
.sw-need{display:inline-flex;align-items:center;gap:6px;margin-bottom:6px;padding:3px 8px 3px 3px;border-radius:99px;background:rgba(240,180,41,.18);font-size:11.5px;font-weight:700;color:var(--ink)}
.sw-need img{width:22px;height:22px;border-radius:6px;background:#1F7A66}
.sw-need.ok{background:rgba(31,157,107,.18)}
.sw-undo{position:absolute;left:50%;bottom:150px;transform:translate(-50%,10px);display:flex;align-items:center;gap:10px;padding:8px 8px 8px 14px;border-radius:12px;background:var(--ink);color:var(--paper);font-size:13px;font-weight:600;opacity:0;pointer-events:none;transition:opacity .2s,transform .25s var(--ease)}
.sw-undo.on{opacity:1;transform:translate(-50%,0);pointer-events:auto}
.sw-undo button{padding:5px 10px;border-radius:8px;background:var(--brand-ink);color:#fff;font-weight:700}
.sw-room-ui .sw-area.done{display:none}
@media (max-width:1100px) and (min-width:561px){.sw-room-ui .sw-rail{left:16px;bottom:96px;transform:none!important;flex-direction:column}}
@media (max-width:560px){.sw-tray{width:128px;top:58px;padding:8px;gap:6px}.sw-tray-g{grid-auto-rows:52px;gap:6px}.sw-trash{height:52px}.sw-arcstrip{max-width:calc(100% - 24px)}.sw-arcstrip span{min-width:30px;height:28px;font-size:12px}}
/* ---------- Interaction: themed room backdrop for the model (walls, floor, ceiling) ---------- */
.room[data-bd] .face{border-color:transparent}
:root[data-theme="dark"] .room[data-bd] .face:not(.f-back){filter:brightness(.6) saturate(.9)}
:root[data-theme="dark"] .room[data-bd] .f-back{filter:brightness(.6) saturate(.9)}
/* factory cell */
.room[data-bd="factory"] .f-back,.room[data-bd="factory"] .f-side,.room[data-bd="factory"] .f-front{background:
  linear-gradient(to top,rgba(30,34,40,.55) 0 3px,transparent 3px) 0 42%/100% 100% no-repeat,
  repeating-linear-gradient(90deg,rgba(32,36,42,.7) 0 3px,transparent 3px 56px) 0 100%/100% 58% no-repeat,
  linear-gradient(to top,#f2c230 0 10px,#1d1d1d 10px 14px,transparent 14px),
  repeating-linear-gradient(90deg,#8d969e 0 22px,#a6aeb6 22px 25px,#97a0a8 25px 46px)}
.room[data-bd="factory"] .f-floor{border:22px solid transparent;border-image:repeating-linear-gradient(45deg,#f2c230 0 18px,#1d1d1d 18px 36px) 22;background:
  linear-gradient(rgba(0,0,0,.06) 1px,transparent 1px) 0 0/120px 120px,linear-gradient(90deg,rgba(0,0,0,.06) 1px,transparent 1px) 0 0/120px 120px,
  radial-gradient(60% 50% at 50% 15%,#b5b8b5,#9a9d9a)}
.room[data-bd="factory"] .f-ceil{background:repeating-linear-gradient(90deg,transparent 0 140px,rgba(255,252,235,.92) 140px 156px,transparent 156px 300px),#3b4047}
/* outdoor launch pad */
.room[data-bd="launch"] .f-back,.room[data-bd="launch"] .f-side,.room[data-bd="launch"] .f-front{background:
  radial-gradient(18% 9% at 22% 30%,rgba(255,255,255,.95),transparent 70%),radial-gradient(14% 7% at 70% 22%,rgba(255,255,255,.9),transparent 70%),radial-gradient(22% 8% at 52% 40%,rgba(255,255,255,.75),transparent 70%),
  linear-gradient(to top,#6f9a5a 0 9%,#8fb37a 9% 10%,transparent 10%),linear-gradient(#5aa0e6,#9fcdf7 60%,#dcefff)}
.room[data-bd="launch"] .f-floor{background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Ccircle cx='100' cy='100' r='92' fill='none' stroke='%23f2c230' stroke-width='8'/%3E%3Cpath d='M68 55v90M132 55v90M68 100h64' stroke='%23fff' stroke-width='16' fill='none'/%3E%3C/svg%3E") 50% 12%/56% auto no-repeat,
  radial-gradient(rgba(255,255,255,.05) 1px,transparent 1.5px) 0 0/14px 14px,#3d4247}
.room[data-bd="launch"] .f-ceil{background:linear-gradient(#4f97df,#7db8ef)}
/* lab */
.room[data-bd="lab"] .f-back,.room[data-bd="lab"] .f-side,.room[data-bd="lab"] .f-front{background:
  linear-gradient(to top,#5b6670 0 20%,#e4e8ea 20% 22.5%,#c8d0d4 22.5% 23%,transparent 23%),
  linear-gradient(#cfd8db 1px,transparent 1px) 0 0/40px 40px,linear-gradient(90deg,#cfd8db 1px,transparent 1px) 0 0/40px 40px,#f1f5f6}
.room[data-bd="lab"] .f-floor{background:conic-gradient(#dfe5e8 25%,#eef2f4 0 50%,#dfe5e8 0 75%,#eef2f4 0) 0 0/90px 90px}
.room[data-bd="lab"] .f-ceil{background:linear-gradient(#cdd5d9 2px,transparent 2px) 0 0/140px 140px,linear-gradient(90deg,#cdd5d9 2px,transparent 2px) 0 0/140px 140px,radial-gradient(circle at 50% 50%,#fffef6 0 18%,#f3f5f6 19%) 0 0/280px 280px}
/* space */
.room[data-bd="space"] .face{background:
  radial-gradient(1.4px 1.4px at 20px 30px,#fff,transparent),radial-gradient(1px 1px at 90px 70px,#cfe3ff,transparent),radial-gradient(1.6px 1.6px at 150px 20px,#fff,transparent),
  radial-gradient(1px 1px at 60px 140px,#fff,transparent),radial-gradient(1.2px 1.2px at 170px 160px,#ffe9c7,transparent),#05070f;background-size:200px 200px}
.room[data-bd="space"] .f-back{background:radial-gradient(circle at 50% 230%,#1d5fc4 0 64%,#7fc3ff 64.5% 66%,rgba(127,195,255,.25) 67%,transparent 72%),
  radial-gradient(1.4px 1.4px at 20px 30px,#fff,transparent) 0 0/180px 180px,radial-gradient(1px 1px at 110px 90px,#cfe3ff,transparent) 0 0/180px 180px,#05070f}
.room[data-bd="space"] .f-floor{background:linear-gradient(rgba(127,195,255,.12) 1px,transparent 1px) 0 0/90px 90px,linear-gradient(90deg,rgba(127,195,255,.12) 1px,transparent 1px) 0 0/90px 90px,#0d1220}
:root[data-theme="dark"] .room[data-bd="space"] .face{filter:none}
/* hillside */
.room[data-bd="hill"] .f-back,.room[data-bd="hill"] .f-side,.room[data-bd="hill"] .f-front{background:
  url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 100' preserveAspectRatio='none'%3E%3Cpath d='M0 60 Q60 20 130 50 T260 40 T400 55 V100 H0Z' fill='%2397c47f'/%3E%3Cpath d='M0 80 Q90 50 180 75 T400 70 V100 H0Z' fill='%2374ab5c'/%3E%3C/svg%3E") 0 100%/100% 42% no-repeat,
  radial-gradient(14% 7% at 30% 25%,rgba(255,255,255,.9),transparent 70%),linear-gradient(#7fc0ef,#c9e6fb 70%,#eef8ff)}
.room[data-bd="hill"] .f-floor{background:repeating-linear-gradient(90deg,rgba(255,255,255,.07) 0 60px,transparent 60px 120px),radial-gradient(70% 60% at 50% 15%,#7cb862,#5f9e4a)}
.room[data-bd="hill"] .f-ceil{background:linear-gradient(#a9d6f6,#7fc0ef)}
/* ---------- Assessment review (after Submit) ---------- */
.sw-pips i.ans{background:color-mix(in srgb,var(--acc) 45%,var(--line-2))}
.as-review .sw-p{padding:1.2cqw 1.6cqw;overflow:auto}
.sw-rv{display:grid;grid-template-columns:auto minmax(0,1fr);gap:1.6cqw;align-items:start;height:100%}
.sw-rv-s{display:grid;justify-items:center;gap:.8cqh;text-align:center;max-width:16cqw}
.sw-rv-s h2{margin:.3cqh 0;font-size:1.6cqw;color:var(--ink)}
.sw-rv-s p{margin:0;font-size:.95cqw;color:var(--ink-3)}
.sw-rv-s .sw-ring{width:10cqw;height:10cqw}
.sw-rv-l{list-style:none;margin:0;padding:0;display:grid;gap:.7cqh}
.sw-rv-l li{display:flex;gap:.8cqw;align-items:flex-start;padding:.6cqw .8cqw;border-radius:.7cqw;background:var(--tint)}
.sw-rv-l li .m{flex:none;width:1.8cqw;height:1.8cqw;min-width:14px;min-height:14px;border-radius:50%;display:grid;place-items:center;font-size:.9cqw;font-weight:800;color:#fff;background:#1F9D6B}
.sw-rv-l li.no .m{background:#D93A40}
.sw-rv-l b{display:block;font-size:1.05cqw;color:var(--ink);line-height:1.3}
.sw-rv-l span{display:block;font-size:.95cqw;color:var(--ink-2)}
.sw-rv-l em{display:block;font-style:normal;font-size:.9cqw;color:var(--ink-3)}

/* ---------- Assessment: each question part is its own card on the wall ---------- */
.wall .as-part{--lift:14px}
.as-q .sw-p{display:flex;align-items:center;padding:0 1.8cqw;font-size:1.55cqw;font-weight:700;line-height:1.3;color:var(--ink);border-color:color-mix(in srgb,var(--acc) 35%,var(--line))}
.as-q .sw-p::before,.as-comp .sw-p::before,.as-3d .sw-p::before{content:attr(data-tag);position:absolute;left:1.2cqw;top:.9cqh;font-size:.72cqw;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);z-index:3}
.as-q .sw-p{padding-top:1.4cqh}
.as-comp .sw-p{display:flex;flex-direction:column;justify-content:center;gap:1.2cqh;padding:2.4cqh 1.4cqw 1cqh}
.as-comp .r{display:flex;align-items:center;gap:.8cqw}
.as-comp p{margin:0;font-size:1.3cqw;font-weight:700;line-height:1.35;color:var(--ink)}
.as-comp.txt .sw-p{align-items:center;text-align:center}
.as-3d .sw-tag3d{top:2.6cqh}
.as-opt .sw-p{display:flex;align-items:center;gap:.9cqw;padding:.7cqw;cursor:pointer;border:1.5px solid var(--line-2);font-size:1.2cqw;font-weight:600;color:var(--ink-2)}
.as-opt.img .sw-p{flex-direction:column;align-items:stretch;gap:.5cqw;padding:.55cqw}
.as-opt.img .art{flex:1;min-height:0;border-radius:.6cqw;overflow:hidden;background:color-mix(in srgb,var(--acc) 8%,var(--tint))}
.as-opt.img .art svg{width:100%;height:100%;display:block}
.as-opt.img .lt{display:flex;align-items:center;gap:.6cqw;font-size:1.05cqw}
.as-opt .k{flex:none;width:2cqw;height:2cqw;min-width:16px;min-height:16px;border-radius:.5cqw;display:grid;place-items:center;background:var(--tint);font-size:.95cqw;font-weight:800;color:var(--ink-2)}
.as-opt .d{font-weight:500;color:var(--ink-3)}
.as-opt .sw-p:hover{--lift:22px;border-color:color-mix(in srgb,var(--acc) 55%,var(--line-2))}
.as-opt[aria-pressed="true"] .sw-p{--lift:24px;border-color:var(--acc);box-shadow:var(--p-hl),0 0 0 3px color-mix(in srgb,var(--acc) 22%,transparent),var(--p-sh)}
.as-opt[aria-pressed="true"] .k{background:var(--acc);color:#fff}
.as-opt.ok .sw-p{border-color:#1F9D6B;background:color-mix(in srgb,#1F9D6B 10%,var(--card))}
.as-opt.no .sw-p{border-color:#D93A40;background:color-mix(in srgb,#D93A40 9%,var(--card))}
.as-foot .sw-p{display:flex;align-items:center;gap:1.2cqw;padding:0 .7cqw 0 1.4cqw}
.as-foot .sw-btn{height:70%}
.as-score .sw-p{display:flex;align-items:center;justify-content:center}



/* ---------- Explore: room types ---------- */
.types-wrap{display:grid;gap:10px}
.types-h{margin:0;font-size:var(--t-label);font-weight:var(--w-semi);color:var(--ink-3)}
.types{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.type{display:grid;justify-items:start;gap:4px;padding:clamp(12px,1.8vh,16px) 14px;border-radius:var(--r-m);border:1px solid var(--line);background:var(--surface);text-align:left;transition:border-color .2s,box-shadow .2s,background .2s,transform .15s}
.type svg{width:22px;height:22px;color:var(--brand-ink)}
.type b{font-size:15px;font-weight:var(--w-semi);line-height:1.3}
.type small{font-size:12.5px;color:var(--ink-3)}
.type:hover:not(:disabled){border-color:var(--brand-ink);background:var(--brand-soft);transform:translateY(-1px)}
.type:disabled{opacity:.45}
@media (max-width:600px){.types{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ---------- Display room from the API ---------- */
.sw-media-z .sw-p{padding:0}
.sw-media{display:block;width:100%;height:100%;object-fit:cover;background:var(--tint)}
.sw-bgvid{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.vp-load{position:absolute;inset:0;display:grid;place-items:center;font-size:13px;font-weight:var(--w-medium);color:var(--ink-3);text-align:center;padding:12px}
.hs em{position:absolute;bottom:calc(100% + 2px);left:50%;transform:translateX(-50%);padding:3px 9px;border-radius:99px;background:var(--surface);border:1px solid var(--line);font-size:11.5px;font-style:normal;font-weight:var(--w-semi);color:var(--ink);white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s}
.hs:hover em,.hs:focus-visible em{opacity:1}
/* an opened part of the 3D model: it floats in the room, between the viewer and the wall */
.sw-partcv{position:absolute;inset:0;width:100%;height:100%;z-index:5;pointer-events:none}
.sw-partdim{position:absolute;inset:0;z-index:4;pointer-events:none;background:radial-gradient(70% 60% at 50% 46%,transparent 35%,rgba(9,46,37,.32));animation:swFade .3s both}
.sw-partbar{position:absolute;z-index:36;left:50%;top:92px;transform:translateX(-50%);display:flex;align-items:center;gap:14px;max-width:calc(100% - 32px);padding:10px 10px 10px 18px;border-radius:var(--r-m);background:var(--chrome);border:1px solid var(--line);box-shadow:var(--shadow-2);backdrop-filter:saturate(1.4) blur(10px);animation:dlg .25s var(--ease)}
.sw-partbar .t{display:grid;gap:2px;min-width:0}
.sw-partbar b{font-size:16px;font-weight:700;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sw-partbar span{font-size:var(--t-label);color:var(--ink-3)}
.sw-pw-x{flex:none;width:36px;height:36px;display:grid;place-items:center;border-radius:var(--r-s);color:var(--ink-2);transition:background .2s,color .2s}
.sw-pw-x:hover{background:var(--brand-soft);color:var(--ink)}
.stage.sw-objhover{cursor:grab}
.sw-3d.part-open .hs{opacity:.2!important;pointer-events:none!important}

/* a part is open: the wall behind it can't be selected, dragged or pressed */
.stage.part-open{user-select:none;-webkit-user-select:none}
.stage.part-open #room{pointer-events:none}
.stage.part-open img,.stage.part-open video{-webkit-user-drag:none}

/* ---------- Explore: a saved simulation ---------- */
.types-wrap[hidden]{display:none}
.facts li[hidden]{display:none}
.lb-main{min-height:0}
.lb-info{overflow-y:auto;justify-content:safe center;scrollbar-width:thin}
/* poster: the creator's picture, or the brand when there is none */
.poster-ph{display:none;position:absolute;inset:0;place-items:center}
.poster-ph .logo{height:auto;width:min(46%,320px);opacity:.9}
.poster.no-img > img{display:none}
.poster.no-img .poster-ph{display:grid}
.poster.no-img .poster-ph .logo.d{display:none}
:root[data-theme="dark"] .poster.no-img .poster-ph .logo.l{display:none}
:root[data-theme="dark"] .poster.no-img .poster-ph .logo.d{display:block}
.poster > img[src^="http"]{width:100%;height:100%;object-fit:cover}
.poster > img[hidden]{display:none}
.more{display:grid;gap:4px;margin:0}
.more dt{margin-top:6px;font-size:var(--t-label);font-weight:var(--w-semi);color:var(--ink-3)}
.more dd{margin:0;font-size:var(--t-small);line-height:1.6;color:var(--ink-2)}
.rooms{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;padding:2px}
.room-b{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:10px;align-items:center;padding:10px 12px;border-radius:var(--r-m);border:1px solid var(--line);background:var(--surface);text-align:left;transition:border-color .2s,background .2s}
.room-b .n{grid-row:1 / span 2;font-size:12.5px;font-weight:700;color:var(--brand-ink);font-variant-numeric:tabular-nums}
.room-b b{font-size:14px;font-weight:var(--w-semi);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.room-b small{font-size:12px;color:var(--ink-3)}
.room-b:hover{border-color:var(--brand-ink);background:var(--brand-soft)}
.room-b.na{opacity:.6}
/* a saved simulation: Start sits right under the facts, the longer text and the rooms follow */
.is-sim .lb-info > .facts{order:1}
.is-sim .lb-info > .btn-lg{order:2;flex:none}
.is-sim .lb-info > .more{order:3}
.is-sim .lb-info > .types-wrap{order:4}
/* explore: the panel itself never scrolls; only the room list does, so the title, facts and Start stay put */
.is-sim .lb-info{overflow:hidden;justify-content:safe center;gap:clamp(14px,2.4vh,24px);padding:clamp(22px,2.6vw,40px)}
.is-sim .lb-info > *{flex:none}
.is-sim .lb-info > .more{max-height:18vh;overflow-y:auto;padding-right:6px}
.is-sim .lb-info > #roomsWrap{order:4;flex:1 1 0;min-height:140px;grid-template-rows:auto minmax(0,1fr);gap:12px}
.is-sim .lb-info > #typesWrap{order:5}
.is-sim .rooms{grid-template-columns:1fr;align-content:start;overflow-y:auto;min-height:0;padding:2px 6px 2px 2px;margin-right:-6px}
.is-sim .rooms,.is-sim .more{scrollbar-width:thin;scrollbar-color:var(--line) transparent}
.is-sim .rooms::-webkit-scrollbar,.is-sim .more::-webkit-scrollbar{width:6px}
.is-sim .rooms::-webkit-scrollbar-thumb,.is-sim .more::-webkit-scrollbar-thumb{background:var(--line);border-radius:6px}
.is-sim .rooms::-webkit-scrollbar-thumb:hover,.is-sim .more::-webkit-scrollbar-thumb:hover{background:var(--ink-3)}
.is-sim .rooms::-webkit-scrollbar-track,.is-sim .more::-webkit-scrollbar-track{background:transparent}
.is-sim .room-b{padding:12px 14px}
@media (max-width:900px){.lb-info,.is-sim .lb-info{overflow:visible}.is-sim .lb-info > #roomsWrap{flex:none}.is-sim .rooms{overflow:visible;margin-right:0}.is-sim .lb-info > .more{max-height:none}}

/* skeletons while the simulation loads */
@keyframes skl{to{background-position:-200% 0}}
.loading .lb-copy h1,.loading .lb-sub,.loading p.d,.loading .facts li,.loading .mod.sk,.loading #startBtn,:root .poster.sk{
  color:transparent!important;border-radius:10px;border-color:transparent;pointer-events:none;user-select:none;
  background:linear-gradient(90deg,var(--line) 30%,color-mix(in srgb,var(--line) 40%,transparent) 50%,var(--line) 70%) 100% 0/200% 100%;animation:skl 1.3s linear infinite}
.loading .facts li *,.loading #startBtn svg,.poster.sk > *{visibility:hidden}
.loading .lb-copy h1{width:min(70%,16ch);border-radius:12px}
.loading .lb-sub{width:min(45%,18ch)}
.loading .lb-info p.d{border-radius:12px}
.loading #startBtn{box-shadow:none}
.mod.sk{min-height:64px;min-width:200px;flex:none}

/* small "3D view" button on a wall model: opens the entire object floating in the room */
.sw-3dbtn{position:absolute;z-index:3;right:8px;top:8px;display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px 0 8px;border-radius:99px;background:var(--surface);border:1px solid var(--line);color:var(--ink);font-size:11.5px;font-weight:var(--w-semi);box-shadow:0 4px 10px -4px rgba(11,16,35,.3);cursor:pointer;transition:border-color .2s,background .2s,opacity .2s}
.sw-3dbtn .i{width:15px;height:15px;color:var(--brand-ink);flex:none}
.sw-3dbtn:hover,.sw-3dbtn:focus-visible{border-color:var(--brand-ink);background:var(--brand-soft)}

/* explore: a long description is cut with an ellipsis to what fits; the card only scrolls as a last resort */
.is-sim .lb-info > p.d.clamp{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--lines,4);line-clamp:var(--lines,4);overflow:hidden;cursor:help}
.is-sim .lb-info{overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--line) transparent}
