/* ============ 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(var(--desert-pressed-rgb), .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;
  }
}
