/* ZIRFLO v4.0.5 — living scenic stage.
   The static v213 artwork remains the fallback. This canvas sits above that
   artwork and below every existing ZIRFLO particle, meteor and content layer. */

body.zirflo-body .zirflo-motion-stage-v405{
  position:absolute !important;
  inset:0 !important;
  z-index:0 !important;
  display:block;
  width:100%;
  height:100%;
  border-radius:inherit;
  pointer-events:none;
  overflow:hidden;
  opacity:1;
  transform:translateZ(0);
  backface-visibility:hidden;
}

/* If the previous v4.0.4 experiment exists on disk, do not let two renderers
   fight each other. v4.0.5 is self-contained and becomes the sole scenic layer. */
body.zirflo-body .zirflo-living-scenery{
  display:none !important;
}

@media (prefers-reduced-motion: reduce){
  body.zirflo-body .zirflo-motion-stage-v405{
    display:none !important;
  }
}

/* v4.0.8 atmospheric retune — keep the proven v4.0.5 stage hook unchanged. */
body.zirflo-body .zirflo-meteor{
  width:clamp(150px,14vw,300px);
  height:1.8px;
  background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.05) 26%,rgba(191,231,255,.24) 52%,rgba(203,236,255,.52) 77%,rgba(255,255,255,.92) 100%);
  box-shadow:0 0 8px rgba(216,242,255,.18),0 0 18px rgba(126,196,255,.14);
}
body.zirflo-body .zirflo-meteor::after{
  width:5px;
  height:5px;
  background:rgba(255,255,255,.88);
  box-shadow:0 0 8px rgba(255,255,255,.32),0 0 16px rgba(146,214,255,.20);
}
body.zirflo-body .zirflo-meteor.animate{animation:zirfloMeteorFlightV408 linear forwards}
body.zirflo-body .zirflo-meteor.soft{height:1.4px;filter:blur(.28px)}
@keyframes zirfloMeteorFlightV408{
  0%{opacity:0;transform:translate3d(0,0,0) rotate(var(--meteor-rot))}
  10%{opacity:calc(var(--meteor-opacity) * .84)}
  58%{opacity:var(--meteor-opacity)}
  84%{opacity:calc(var(--meteor-opacity) * .38)}
  100%{opacity:0;transform:translate3d(var(--meteor-x),var(--meteor-y),0) rotate(var(--meteor-rot))}
}
