/* ---- ambient field ── UPDATED 2026-08-04 (round 2): swapped the chrome
   orb for a canvas-based creative-coding particle field, matching the
   cockpit. Both PWAs the operator installs now share the same generative
   background. Legacy blobs + orb kept but hidden. */
.fieldbg,.blob{display:none !important}
/* z-index was 0 — above the resident at -1 — so this opaque full-viewport
   canvas painted var(--bg) straight over the character. She was visible on the
   sign-in screen only because this canvas is not up yet there.
   PLUTO's arrangement is the correct one and this now matches it: ambient
   field furthest back, resident just above it, every real element above both.
   Nothing else depended on 0 — it is pointer-events:none and the rail sits at
   z-index 6, so the nav still paints over her as it should. */
#creative-bg{position:fixed;inset:0;z-index:-2;pointer-events:none;background:var(--bg)}
@keyframes os-orb-spin{to{filter:blur(120px) saturate(140%) hue-rotate(360deg)}}
@keyframes os-orb-drift{
  0%  {transform:translate(-50%,-50%) translate(-6vw,-4vh)}
  50% {transform:translate(-50%,-50%) translate( 6vw, 2vh)}
  100%{transform:translate(-50%,-50%) translate(-3vw, 5vh)}
}
@media(prefers-reduced-motion:reduce){.fieldbg::before{animation:none}}
/* Legacy keyframes retained for anything else still referencing them */
@keyframes drifta{0%,100%{transform:translate3d(0,0,0) scale(1)}
  34%{transform:translate3d(9%,-6%,0) scale(1.12)}67%{transform:translate3d(-5%,7%,0) scale(.93)}}
@keyframes driftb{0%,100%{transform:translate3d(0,0,0) scale(1.02)}
  40%{transform:translate3d(-8%,8%,0) scale(.9)}72%{transform:translate3d(5%,-4%,0) scale(1.1)}}
@keyframes driftc{0%,100%{transform:translate3d(0,0,0) scale(.96)}
  45%{transform:translate3d(7%,-9%,0) scale(1.15)}75%{transform:translate3d(-9%,-2%,0) scale(1)}}

