/* Harbor House — Mission Space (Phase 3 premium)
   Premium launch plate (space-scene.webp) + Nova performance frame +
   rich SVG rocket. Planet explorer / astronaut card styles carried over.
   Shared scene system in scene.css; exhibit chrome in exhibit.css. */

/* ── Launch scene stage ─────────────────────────── */
.space-scene{aspect-ratio:1200/700;background:#241047;box-shadow:var(--shadow);margin-top:var(--sp-4)}
.space-scene [hidden],.planet-scene [hidden],.launch-dock [hidden]{display:none!important}
.space-bg{position:absolute;inset:-3%;z-index:0;will-change:transform;pointer-events:none}
.space-bg img{width:100%;height:100%;object-fit:cover;object-position:50% 42%;display:block}
.altitude-dark{position:absolute;inset:0;z-index:2;background:linear-gradient(180deg,#0d0621,#1b1035 55%,#3a1c71);opacity:0;transition:opacity 2.8s var(--ease);pointer-events:none}
.space-scene.launching .altitude-dark{opacity:.55}
.space-scene.in-orbit .altitude-dark{opacity:0}
.launch-fx{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:5}
.speed-lines{position:absolute;inset:0;z-index:4;opacity:0;transition:opacity .5s;pointer-events:none;overflow:hidden}
.speed-lines.on{opacity:.55}
.speed-lines span{position:absolute;top:-30%;width:3px;height:34%;background:linear-gradient(180deg,transparent,#fff,transparent);border-radius:99px;animation:speedLine .55s linear infinite}
.speed-lines span:nth-child(1){left:18%}.speed-lines span:nth-child(2){left:38%;animation-delay:-.2s}
.speed-lines span:nth-child(3){left:57%;animation-delay:-.35s}.speed-lines span:nth-child(4){left:74%;animation-delay:-.1s}
.speed-lines span:nth-child(5){left:88%;animation-delay:-.45s}
@keyframes speedLine{from{transform:translateY(0)}to{transform:translateY(340%)}}
body.hh-calm .speed-lines{display:none}

/* Gentle ignition rumble — transform only */
.space-scene.shaking{animation:spShake .16s ease-in-out infinite alternate}
@keyframes spShake{from{transform:translate(-1.5px,1px)}to{transform:translate(1.5px,-1px)}}
body.hh-calm .space-scene.shaking{animation:none}
.space-scene .space-bg{transition:transform 4.6s cubic-bezier(.45,.05,.8,.4)}
.space-scene.launching .space-bg{transform:translateY(5%)}

/* ── Rocket ─────────────────────────────────────── */
.rocket-el{position:absolute;left:calc(55% - 66px);bottom:21.5%;width:132px;z-index:6;transition:transform 4.4s cubic-bezier(.3,.12,.7,.45),opacity .8s var(--ease)}
.rocket-el>svg{width:100%;height:auto;display:block;filter:drop-shadow(0 12px 16px rgba(10,4,32,.45))}
.rocket-el.liftoff{transform:translateY(-230%) rotate(3deg)}
body.hh-calm .rocket-el{transition:transform 2.6s ease-in-out,opacity 1.2s var(--ease)}
body.hh-calm .rocket-el.liftoff{transform:translateY(-46%);opacity:0}
.rocket-beacon{animation:rkBeacon 1.8s ease-in-out infinite}
@keyframes rkBeacon{0%,100%{opacity:1}50%{opacity:.35}}
body.hh-calm .rocket-beacon{animation:none}
.hatch-door{position:absolute;left:50%;top:36%;width:54px;height:54px;margin-left:-27px;border-radius:50%;border:4px solid var(--sun);background:radial-gradient(circle at 35% 32%,#ffe9a8,#f0a500);opacity:0;transform:scale(.6);transition:opacity .5s var(--ease),transform .5s var(--ease)}
.hatch-door.closed{opacity:1;transform:scale(1)}
.rocket-flame{position:absolute;left:50%;bottom:-58px;width:42px;height:70px;margin-left:-21px;background:linear-gradient(180deg,#ffe66d,#ff9f1c 55%,rgba(255,107,74,0));border-radius:50% 50% 50% 50%/22% 22% 78% 78%;opacity:0;transform-origin:top center}
.rocket-el.burning .rocket-flame{opacity:1;animation:flameFlick .28s ease-in-out infinite alternate}
@keyframes flameFlick{from{transform:scaleY(.88) scaleX(.96)}to{transform:scaleY(1.1) scaleX(1.03)}}
body.hh-calm .rocket-flame{display:none}
.smoke-puffs span{position:absolute;bottom:-24px;width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.85);opacity:0}
.smoke-puffs span:nth-child(1){left:-16px}.smoke-puffs span:nth-child(2){right:-16px}
.smoke-puffs span:nth-child(3){left:22px}.smoke-puffs span:nth-child(4){right:22px}
.rocket-el.burning .smoke-puffs span{animation:smokePuff 1.15s ease-out infinite}
.rocket-el.burning .smoke-puffs span:nth-child(2){animation-delay:-.4s}
.rocket-el.burning .smoke-puffs span:nth-child(3){animation-delay:-.7s}
.rocket-el.burning .smoke-puffs span:nth-child(4){animation-delay:-.25s}
@keyframes smokePuff{0%{opacity:0;transform:scale(.5) translateY(0)}25%{opacity:.9}100%{opacity:0;transform:scale(1.7) translateY(20px)}}
body.hh-calm .smoke-puffs{display:none}

/* ── Nova performance frame (proto pattern) ─────── */
.nova-wrap{position:absolute;z-index:9;right:1.2%;top:11.5%;width:min(26.5%,296px);pointer-events:none}
.nova-frame{
  position:relative;aspect-ratio:3/3.55;overflow:hidden;
  -webkit-mask-image:linear-gradient(to right,transparent 0,#000 11%,#000 97%,transparent 100%),linear-gradient(to bottom,transparent 0,#000 9%,#000 96%,transparent 100%);
  -webkit-mask-composite:source-in;
          mask-image:linear-gradient(to right,transparent 0,#000 11%,#000 97%,transparent 100%),linear-gradient(to bottom,transparent 0,#000 9%,#000 96%,transparent 100%);
          mask-composite:intersect;
  filter:brightness(1.01) saturate(1.05);
}
.nova-frame img,.nova-frame video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 14%;display:block;opacity:0;transition:opacity .25s ease}
.nova-frame .on{opacity:1}
#novaStill{z-index:1}
#novaIdle{z-index:2}
#novaReact{z-index:3}
.nova-shadow{position:absolute;left:16%;bottom:-3%;width:72%;height:8%;z-index:-1;background:radial-gradient(ellipse at center,rgba(8,2,24,.55) 0%,rgba(8,2,24,0) 68%);filter:blur(3px)}
.nova-wrap.celebrating .nova-frame{animation:novaHop .62s ease-in-out 4}
@keyframes novaHop{0%,100%{transform:translateY(0)}30%{transform:translateY(-7px)}55%{transform:translateY(0)}75%{transform:translateY(-4px)}}
body.hh-calm .nova-wrap.celebrating .nova-frame{animation:none}
.nova-speech{
  position:absolute;z-index:6;right:96%;top:24%;width:min(216px,58vw);
  background:#fff;border:3px solid var(--sun);border-radius:16px;padding:.5rem .75rem;
  box-shadow:0 14px 34px rgba(8,2,24,.4);opacity:0;visibility:hidden;transform:translateY(5px);
  transition:opacity .3s ease,transform .3s ease,visibility 0s linear .3s;
}
.nova-speech.show{opacity:1;visibility:visible;transform:none;transition:opacity .3s ease,transform .3s ease}
.nova-speech p{margin:0;font-weight:800;font-size:.9rem;line-height:1.3;color:var(--navy)}
.nova-speech::after{content:"";position:absolute;right:-12px;top:34px;border:6px solid transparent;border-left:9px solid var(--sun)}
.nova-name{
  margin:6px auto 0;width:max-content;max-width:100%;
  background:rgba(15,35,64,.88);color:#fff;font-family:var(--font-display);font-weight:700;font-size:.78rem;
  border-radius:999px;padding:.3rem .8rem;letter-spacing:.02em;
}

/* ── Prep zones (all ON the scene) ──────────────── */
.fuel-zone,.cargo-dock,.crew-zone{position:absolute;z-index:7;background:rgba(255,253,248,.94);border:3px solid rgba(15,35,64,.22);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:var(--sp-2)}
.fuel-zone{left:2%;bottom:3.5%;width:172px;display:flex;flex-direction:column;gap:var(--sp-2);align-items:stretch}
.fuel-gauge{position:relative;height:86px;border:3px solid var(--navy);border-radius:12px;background:linear-gradient(180deg,#dfeaf5,#b9cbdf);overflow:hidden}
.fuel-liquid{position:absolute;left:0;right:0;bottom:0;height:0%;background:linear-gradient(180deg,#57b6e8,#1e7ac2);transition:height .18s linear}
.fuel-wave{position:absolute;top:-7px;left:-25%;width:150%;height:14px;background:radial-gradient(circle at 10px -4px,transparent 12px,#57b6e8 13px);background-size:24px 14px;animation:fuelSlosh 1.1s linear infinite}
@keyframes fuelSlosh{from{transform:translateX(0)}to{transform:translateX(24px)}}
body.hh-calm .fuel-wave{animation:none}
.fuel-pct{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:800;font-size:var(--fs-xl);color:var(--navy);text-shadow:0 1px 0 #fff}
.fuel-btn{min-height:52px;border:none;border-radius:var(--radius);background:linear-gradient(135deg,var(--sun),var(--sun-dark));color:var(--navy);font-family:var(--font-display);font-weight:800;font-size:var(--fs-base);cursor:pointer;touch-action:none;user-select:none;-webkit-user-select:none}
.fuel-btn.holding{filter:brightness(1.08);transform:scale(.985)}
.fuel-btn:disabled{opacity:.55;cursor:default}
.assist-link{min-height:44px;background:none;border:none;color:var(--w-space-2);font-family:var(--font-body);font-weight:800;font-size:var(--fs-sm);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.dock-label{margin:0 0 var(--sp-2);font-family:var(--font-display);font-weight:700;font-size:var(--fs-sm);color:var(--navy)}
.dock-alt{font-family:var(--font-body);font-weight:700;color:var(--ink-soft)}

.cargo-dock{left:20.5%;bottom:3.5%;width:min(348px,40%)}
.cargo-items{display:flex;gap:var(--sp-2)}
.cargo-item{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;min-height:64px;padding:var(--sp-2);border-radius:var(--radius);border:3px dashed rgba(58,28,113,.45);background:#fff;font-family:var(--font-display);font-weight:700;font-size:var(--fs-sm);color:var(--navy);cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}
.cargo-item .cargo-emoji{font-size:1.7rem;line-height:1.1}
.cargo-item.selected{border-style:solid;border-color:var(--sun-dark);background:#fff3cf;box-shadow:0 0 0 3px var(--sun)}
.cargo-item.dragging{position:relative;z-index:20;cursor:grabbing;box-shadow:var(--shadow)}
.cargo-item.loaded{visibility:hidden;pointer-events:none}

.cargo-bay{position:absolute;left:calc(55% + 62px);bottom:calc(21.5% + 26px);width:92px;height:104px;z-index:7;border:3px dashed var(--sun);border-radius:var(--radius);background:rgba(15,35,64,.55);color:#fff;font-family:var(--font-display);cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:var(--sp-1)}
.cargo-bay.armed{border-style:solid;background:rgba(240,165,0,.75);color:var(--navy)}
.bay-label{font-size:.68rem;font-weight:800;letter-spacing:.08em}
.bay-slots{display:flex;gap:2px;font-size:1.25rem;min-height:28px}
.bay-count{font-weight:800;font-size:var(--fs-sm)}
.cargo-bay.clunk{animation:bayClunk .3s ease-in-out}
@keyframes bayClunk{0%{transform:scale(1)}40%{transform:scale(.94)}100%{transform:scale(1)}}
body.hh-calm .cargo-bay.clunk{animation:none}

.crew-zone{left:22%;bottom:41%;display:flex;align-items:flex-end;gap:var(--sp-2);background:rgba(255,253,248,.88)}
.crew-zone[hidden]{display:none!important}
.crew-label{margin:0;max-width:104px}
.crew-btn{display:flex;flex-direction:column;align-items:center;gap:0;min-width:56px;min-height:56px;padding:4px;border-radius:var(--radius);border:3px solid rgba(15,35,64,.25);background:#fff;font-family:var(--font-display);font-weight:700;font-size:var(--fs-sm);color:var(--navy);cursor:pointer;transition:transform 1s var(--scene-ease),opacity .9s var(--ease)}
.crew-fig{font-size:1.9rem;line-height:1.15}
.crew-btn.boarded{transform:translate(190px,84px) scale(.72);opacity:0;pointer-events:none}
body.hh-calm .crew-btn.boarded{transform:translate(30px,10px) scale(.9);transition-duration:.3s}
.crew-btn:disabled{cursor:default}

/* ── Progress dock ON the scene ─────────────────── */
.launch-dock{position:absolute;left:50%;transform:translateX(-50%);top:10px;z-index:10;width:min(920px,calc(100% - 16px));flex-wrap:wrap;justify-content:center}
.launch-dock .btn-launch{min-height:54px;font-size:var(--fs-lg);padding:var(--sp-2) var(--sp-5);width:auto}
.launch-dock .btn-launch:disabled{opacity:.45;cursor:not-allowed}
.launch-missing{color:#ffd66e}
@media (max-width:640px){
  .launch-dock{border-radius:20px;padding:.55rem .7rem;gap:.3rem .6rem}
  .launch-dock .pd-text{white-space:normal;text-align:center;font-size:.82rem;line-height:1.3}
  .launch-dock .btn-launch{min-height:48px;flex:1 1 100%}
}
.orbit-next{display:inline-flex;gap:var(--sp-2);flex-wrap:wrap}
.count-display{position:absolute;inset:0;z-index:11;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:800;font-size:clamp(3.4rem,11vw,7.5rem);color:#fff;text-shadow:0 6px 30px rgba(15,35,64,.65),0 2px 0 rgba(15,35,64,.4);pointer-events:none}
.count-display.pop{animation:countPop .5s var(--ease-bounce)}
@keyframes countPop{0%{transform:scale(1.4);opacity:.4}100%{transform:scale(1);opacity:1}}
body.hh-calm .count-display.pop{animation:none}

/* ── Orbit view ─────────────────────────────────── */
.orbit-view{position:absolute;inset:0;z-index:8;background:radial-gradient(ellipse 120% 90% at 50% 0%,#241047,#0d0621 70%);opacity:0;transition:opacity 1.1s var(--ease)}
.orbit-view.show{opacity:1}
.space-scene.in-orbit .fuel-zone,.space-scene.in-orbit .cargo-dock,.space-scene.in-orbit .crew-zone,.space-scene.in-orbit .cargo-bay,.space-scene.in-orbit .rocket-el{opacity:0;pointer-events:none;transition:opacity .6s var(--ease)}
.space-scene.launching .fuel-zone,.space-scene.launching .cargo-dock,.space-scene.launching .crew-zone,.space-scene.launching .cargo-bay{opacity:0;pointer-events:none;transition:opacity .9s var(--ease) .5s}
.orbit-stars{position:absolute;inset:0;background-image:radial-gradient(2px 2px at 12% 22%,#fff,transparent),radial-gradient(1.6px 1.6px at 32% 12%,#fff,transparent),radial-gradient(2.2px 2.2px at 55% 30%,#fff,transparent),radial-gradient(1.6px 1.6px at 72% 16%,#fff,transparent),radial-gradient(2px 2px at 88% 34%,#fff,transparent),radial-gradient(1.5px 1.5px at 44% 48%,#fff,transparent),radial-gradient(1.8px 1.8px at 8% 55%,#fff,transparent),radial-gradient(1.5px 1.5px at 94% 62%,#fff,transparent)}
.orbit-earth{position:absolute;left:50%;top:57%;width:150%;aspect-ratio:1;transform:translateX(-50%);border-radius:50%;background:radial-gradient(circle at 38% 12%,#5ea9e6,#2f7fd1 42%,#1c5ea8);overflow:hidden;box-shadow:0 -18px 60px rgba(94,169,230,.45)}
.earth-land{position:absolute;background:#4caf7d;border-radius:50%}
.earth-land.l1{left:16%;top:2.5%;width:26%;height:6%;transform:rotate(-14deg)}
.earth-land.l2{right:14%;top:5.5%;width:22%;height:5%;transform:rotate(10deg)}
.earth-band{position:absolute;left:-10%;width:120%;height:3.2%;background:rgba(255,255,255,.5);border-radius:99px;animation:earthDrift 26s linear infinite alternate}
.earth-band.b1{top:3.5%}.earth-band.b2{top:8%;animation-duration:34s;animation-delay:-12s}
@keyframes earthDrift{from{transform:translateX(-3%)}to{transform:translateX(3%)}}
body.hh-calm .earth-band{animation:none}
.orbit-rocket{position:absolute;left:50%;top:15%;width:104px;margin-left:-130px;transform:rotate(18deg);animation:orbitBob 5.5s ease-in-out infinite}
.orbit-rocket svg{width:100%;height:auto;display:block}
@keyframes orbitBob{0%,100%{transform:rotate(18deg) translateY(0)}50%{transform:rotate(16deg) translateY(-10px)}}
body.hh-calm .orbit-rocket{animation:none}
.wave-arm{transform-box:fill-box;transform-origin:bottom left;animation:novaWaveArm 1.6s ease-in-out infinite}
@keyframes novaWaveArm{0%,100%{transform:rotate(0)}50%{transform:rotate(18deg)}}
body.hh-calm .wave-arm{animation:none}
.orbit-banner{position:absolute;left:50%;top:92px;transform:translateX(-50%);background:rgba(255,253,248,.96);border:3px solid var(--sun);border-radius:999px;padding:.5rem 1.4rem;box-shadow:var(--shadow)}
.orbit-banner p{margin:0;font-family:var(--font-display);font-weight:800;font-size:var(--fs-xl);color:var(--navy);white-space:nowrap}
.orbit-again{position:absolute;right:12px;bottom:64px;min-height:52px;z-index:3}

/* ── Planet explorer (carried over) ─────────────── */
.planet-panel .mission{margin-bottom:var(--sp-4)}
.planet-wrap{position:relative}
.planet-card[hidden]{display:none!important}
.planet-scene{aspect-ratio:1200/620;background:#150b2e;box-shadow:var(--shadow-sm)}
.planet-world{position:absolute;inset:0;transition:transform 1.15s var(--scene-ease);will-change:transform;transform-origin:0 0}
.planet-orbits{position:absolute;inset:0;width:100%;height:100%;display:block}
.planet{position:absolute;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:4px;background:none;border:none;cursor:pointer;padding:6px;min-width:56px;min-height:56px;font-family:var(--font-display)}
.planet:focus-visible{outline:3px solid var(--sun);outline-offset:3px;border-radius:50%}
.planet-ball{position:relative;display:block;width:var(--sz);height:var(--sz);border-radius:50%;box-shadow:inset -8px -8px 0 rgba(0,0,0,.18),0 6px 18px rgba(0,0,0,.4)}
.planet-label{font-weight:800;font-size:var(--fs-sm);color:#fff;text-shadow:0 2px 6px rgba(0,0,0,.8)}
.planet.active .planet-ball{box-shadow:inset -8px -8px 0 rgba(0,0,0,.18),0 0 0 4px var(--sun),0 6px 18px rgba(0,0,0,.4)}
.mars-ball{background:radial-gradient(circle at 34% 32%,#f0967e,#c85a44)}
.mars-dust{position:absolute;inset:0;border-radius:50%;background:radial-gradient(circle at 68% 60%,rgba(255,220,170,.55) 0 18%,transparent 42%);animation:marsDrift 5s ease-in-out infinite alternate}
@keyframes marsDrift{from{transform:translateX(-2px)}to{transform:translateX(3px)}}
.jupiter-ball{background:repeating-linear-gradient(180deg,#e8bd85 0 16%,#c9853f 16% 27%,#eed3a4 27% 42%,#c9853f 42% 54%,#e8bd85 54% 72%,#d9a05e 72% 100%)}
.jupiter-storm{position:absolute;right:16%;top:52%;width:34%;height:20%;border-radius:50%;background:#d96f4e;box-shadow:inset 0 0 0 3px rgba(255,255,255,.35);animation:stormSwirl 7s linear infinite}
@keyframes stormSwirl{from{transform:rotate(0) scale(1)}50%{transform:rotate(180deg) scale(1.08)}to{transform:rotate(360deg) scale(1)}}
.saturn-ball{background:radial-gradient(circle at 34% 32%,#f7e7ae,#d9b36a)}
.saturn-ring{position:absolute;left:50%;top:50%;width:190%;height:52%;transform:translate(-50%,-50%) rotate(-14deg);border-radius:50%;border:7px solid rgba(233,205,130,.95);box-shadow:0 0 0 4px rgba(233,205,130,.35);animation:ringShimmer 4.5s ease-in-out infinite}
@keyframes ringShimmer{0%,100%{opacity:.85}50%{opacity:1;box-shadow:0 0 0 6px rgba(255,230,150,.5)}}
body.hh-calm .mars-dust,body.hh-calm .jupiter-storm,body.hh-calm .saturn-ring{animation:none}
.planet-hint{position:absolute;left:10px;top:10px;z-index:6;background:rgba(15,35,64,.88);color:#fff;font-family:var(--font-display);font-weight:700;font-size:var(--fs-sm);border-radius:999px;padding:.45rem .9rem;pointer-events:none}
.nova-note{position:absolute;left:10px;bottom:10px;z-index:6;background:#e6fbf3;border:3px solid #3aa68c;color:var(--navy);border-radius:999px;padding:.45rem .95rem;font-weight:700;font-size:var(--fs-sm);box-shadow:var(--shadow-sm)}
.nova-peek{position:absolute;right:-14px;top:-18px;font-size:1.9rem;line-height:1;transform:scale(0);transition:transform .55s var(--ease-bounce);z-index:3}
.nova-peek.peeking{transform:scale(1) rotate(-8deg)}
.nova-bubble{position:absolute;left:50%;bottom:calc(100% + 8px);transform:translateX(-50%);background:#fff;border:3px solid var(--sun);color:var(--navy);font-family:var(--font-display);font-weight:800;font-size:.82rem;border-radius:12px;padding:.3rem .6rem;white-space:nowrap;box-shadow:var(--shadow-sm)}
body.hh-calm .nova-peek{transition-duration:.01s}
.planet-card{position:absolute;right:12px;top:50%;transform:translateY(-50%);z-index:7;width:min(330px,calc(100% - 24px));background:var(--paper);border:3px solid var(--sun);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:var(--sp-4) var(--sp-5);animation:disc-in .5s var(--scene-ease)}
.planet-card h3{margin:0 0 var(--sp-1);color:var(--navy)}
.planet-card p{margin:0}
.planet-card .planet-back{margin-top:var(--sp-3);width:100%;min-height:52px;justify-content:center}
body.hh-calm .planet-card{animation:none}

/* ── Mobile ─────────────────────────────────────── */
@media (max-width:640px){
  /* P3-6 BIG GAMES: on a portrait phone the launch pad takes the
     museum standard stage height (Ocean P3-4) — min(72svh,660px),
     never shorter than the old 390/630 plate (578px at 358 wide).
     At 390×844 the stage is 358×608 = 72% of the viewport height. */
  .space-scene{aspect-ratio:auto;height:min(72vh,660px);height:min(72svh,660px);min-height:578px}
  .space-bg img{object-position:62% 40%}
  /* Rocket hero-sized: 92×153 → 126×210. Base sits at 26.5% so the
     nose (top ≈237 at 608 tall) clears the crew zone (ends ≈233)
     and the hull stands in the open band above the bottom docks. */
  .rocket-el{left:calc(36% - 63px);bottom:26.5%;width:126px}
  .hatch-door{width:48px;height:48px;margin-left:-24px}
  .rocket-flame{bottom:-52px;height:62px}
  /* Nova's guide frame compacts to a corner portrait (Ocean's Willa
     precedent: 47% → 35% of scene width) so the enlarged rocket and
     its bay own the middle of the stage — and the bay↔pill gap grows
     from 6px to ~20px at the new geometry. */
  .nova-wrap{width:35%;top:15.5%;right:2%}
  /* Bubble reaches further left at the compact frame width so it
     covers only the frame's left edge — Nova's face stays visible
     (at -58% of a 125px frame the 172px bubble sat on her face). */
  .nova-speech{right:auto;left:-94%;top:32%;width:172px}
  .nova-speech::after{right:-12px;left:auto;border-left:9px solid var(--sun);border-right:none}
  .nova-speech p{font-size:.8rem}
  /* Pill keeps one line at the compact width: it may outgrow the
     125px frame (centred, ~7px each side) — bay↔pill gap stays 12px. */
  .nova-name{font-size:.68rem;padding:.24rem .6rem;white-space:nowrap;max-width:170%;margin-left:-8px}
  .fuel-zone{left:2%;bottom:2%;width:136px}
  .fuel-gauge{height:62px}
  .fuel-btn{font-size:var(--fs-sm)}
  .cargo-dock{left:auto;right:2%;bottom:2%;width:53%}
  .cargo-item{min-height:64px;font-size:.72rem;padding:4px}
  .cargo-item .cargo-emoji{font-size:1.5rem}
  .cargo-item .cargo-name{display:none}
  .dock-label{font-size:.72rem}
  .dock-alt{display:none}
  /* P3-4: the bay rides ON the rocket's right flank — visible, where
     Pip's instruction points. (It used to sit at the scene's top-right,
     ~85% hidden behind Nova's portrait, so no tap or drag aimed at the
     rocket could ever reach it, and its count collided with her name
     pill.) P3-6: the bay grows with the rocket (82×94 → 92×104) and
     keeps its +48px offset from the rocket's left edge — rocket spans
     x 36%−63…36%+63, bay x 36%−15…+92 from there, y bottom 40%. */
  .cargo-bay{left:calc(36% - 15px);right:auto;bottom:40%;width:92px;height:104px}
  .bay-slots{font-size:1.4rem;min-height:32px}
  .bay-label{font-size:.72rem}
  .crew-zone{left:2%;bottom:auto;top:23.5%}
  .crew-label{display:none}
  .crew-btn.boarded{transform:translate(70px,120px) scale(.72)}
  .orbit-rocket{width:96px;margin-left:-104px;top:20%}
  .orbit-banner{top:110px}
  .orbit-banner p{font-size:var(--fs-lg)}
  .orbit-again{bottom:56px;right:8px}
  .planet-scene{aspect-ratio:390/520}
  .planet-card{position:static;width:auto;transform:none;margin-top:var(--sp-3);padding:var(--sp-3) var(--sp-4)}
  .planet-label{font-size:.72rem}
}
@media (prefers-reduced-motion:reduce){
  .fuel-wave,.speed-lines span,.rocket-el.burning .smoke-puffs span,.mars-dust,.jupiter-storm,.saturn-ring,.earth-band,.wave-arm,.rocket-beacon{animation:none!important}
  .nova-wrap.celebrating .nova-frame{animation:none}
}
