/* ============ MIDNIGHT MARQUEE — MOTION TREATMENT ============
   James, 2026-10-02 (direct order): the unified luxury brand header feels
   alive — a slow champagne-spotlight drift across the noir, a gentle
   breathing glow behind the marquee wordmark. Premium, subtle,
   unmistakably Previously. A visitor should FEEL it, not notice it.

   Additive layer only: pvn-header.css is untouched. Everything here is
   transform/opacity on compositor-friendly layers — no layout, no repaints
   of the page below. Sports arena headers never load this file (they never
   load pvn-header.css either).

   Static fallbacks (the current frozen look, byte-identical):
   - prefers-reduced-motion: reduce  -> all motion off, pure CSS
   - Save-Data / low power       -> js/marquee-motion.js pins it static
   - tab hidden / header off-view-> js/marquee-motion.js pauses the loop
   ========================================================================== */

/* ---- 1. Champagne spotlight drift: the existing beam (::before) slowly
         sweeps diagonally. ±4% horizontal, ±1.5% vertical, 18s loop,
         alternate — never a distracting fast sweep. ---- */
@keyframes pvn-beam-drift {
  from { transform: translate3d(-4%, 1.5%, 0); opacity: .82; }
  to   { transform: translate3d( 4%, -1.5%, 0); opacity: 1; }
}
.pvn-header::before {
  animation: pvn-beam-drift 18s ease-in-out infinite alternate;
}

/* ---- 2. Marquee wordmark breathing glow: a NEW layer behind the wordmark
         (.pvn-lockup::after), so the text itself never animates and stays
         crisp. Opacity-only — the cheapest property there is. ---- */
.pvn-lockup::after {
  content: "";
  position: absolute;
  left: 50%; top: 50%;
  width: 130%; height: 230%;
  transform: translate(-50%, -50%);
  background: radial-gradient(
    ellipse 50% 50% at 50% 50%,
    rgba(232, 220, 195, .13),
    transparent 70%
  );
  z-index: -1;               /* behind the wordmark, inside the lockup */
  pointer-events: none;
  animation: pvn-glow-breathe 7s ease-in-out infinite alternate;
}
@keyframes pvn-glow-breathe {
  from { opacity: .45; }
  to   { opacity: .95; }
}

/* ---- 3. JS governor pause: tab hidden, header scrolled out of view,
         or Save-Data. Pausing keeps the current frame — no snap. ---- */
.pvn-motion-paused .pvn-header::before,
.pvn-motion-paused .pvn-lockup::after {
  animation-play-state: paused;
}

/* ---- 4. Reduced motion: the full static fallback — the frozen look ---- */
@media (prefers-reduced-motion: reduce) {
  .pvn-header::before,
  .pvn-lockup::after {
    animation: none;
  }
}
