/* Runtime-only rules. No artwork, keyframes, durations or filter values change.
   Important declarations in a layer outrank the old unlayered animation
   shorthands, whose higher specificity previously defeated the offscreen guard. */
@layer bryer-runtime-lifecycle {
  html[data-site-hidden="true"] *,
  html[data-site-hidden="true"] *::before,
  html[data-site-hidden="true"] *::after,
  [data-performance-offscreen="true"],
  [data-performance-offscreen="true"]::before,
  [data-performance-offscreen="true"]::after,
  [data-performance-offscreen="true"] *,
  [data-performance-offscreen="true"] *::before,
  [data-performance-offscreen="true"] *::after {
    animation-play-state: paused !important;
  }

  /* Empty carousel slots still reserve the original width and remain in the
     circular track. Their CSS-generated halo must also wait for their artwork. */
  .carousel-coffer[data-carousel-artwork="deferred"]::before,
  .carousel-coffer[data-carousel-artwork="deferred"]::after {
    content: none !important;
  }
}

/* Keep the exact vine movement on an HTML wrapper. Its SVG drawing can retain
   its raster/layout cache instead of invalidating every path on every frame. */
.upgrade-viewport-vine-motion {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  transform-origin: 50% 100%;
  animation: upgradeViewportSvgSway 9.6s ease-in-out infinite !important;
}
@media (prefers-reduced-motion: reduce) {
  .upgrade-viewport-vine-motion { animation-duration: 11s !important; }
}
@layer bryer-runtime-lifecycle {
  .upgrade-viewport-vine-motion > .upgrade-viewport-vine-svg {
    animation: none !important;
    transform: none !important;
  }
}
