/* =========================================================================
   Movers24 – scroll animations (homepage only)
   1. .vanscrub – sticky scroll-scrubbed van video scene (white on white)
   2. .mascot-spot – self-playing mascot loop centered above the contact block
   Sticky scene stays at z-index 1 (contract: scroll scenes <= 19;
   header is 60, lang menu 80 – both always above).
   ========================================================================= */

/* ---------- 1. Scroll-scrubbed van scene ---------- */
.vanscrub {
  position: relative;
  /* pin distance: 280vh = 180vh of actual scrub travel. Tightened from
     420vh (client: animation too slow) - the full narrative (orbit ->
     doors -> explosion) still reads, just at a brisker scroll pace. */
  height: 280vh;
  background: #ffffff;
}

.vanscrub-stage {
  position: sticky;
  top: 0;
  height: 100vh;
  height: 100svh;
  z-index: 1;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: #ffffff;
  padding-inline: var(--gutter);
}

.vanscrub-media {
  position: relative;
  width: min(880px, 92vw);
  aspect-ratio: 16 / 9; /* reserved box – no CLS while video loads */
  flex: none;
}

.vanscrub-video {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  background: #ffffff; /* white-on-white seamlessness while poster loads */
  /* render bg is ~#fafafa – brightness clips it to pure white, no seam */
  filter: brightness(1.04);
  transition: filter 0.08s ease-out;
}

/* perceptual mask while the decoder catches up on a seek */
.vanscrub-video.seeking { filter: brightness(1.04) blur(0.5px); }

/* feathered white inner glow blends video edges into the white section */
.vanscrub-media::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  box-shadow: inset 0 0 48px 28px #ffffff;
}

.vanscrub-copy {
  margin-top: clamp(18px, 4vh, 42px);
  max-width: 760px;
  text-align: center;
}

.vanscrub-line { margin: 0 0 14px; }

.vanscrub-copy p.vanscrub-line {
  font-size: clamp(1.02rem, 1.6vw, 1.22rem);
  line-height: 1.55;
  color: var(--ink-2);
}

.vanscrub-claim {
  font-size: clamp(1.5rem, 3.2vw, 2.4rem);
  line-height: 1.18;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--ink);
}

.vanscrub-cta { margin-top: 24px; }

/* Scroll-down cue pinned to the bottom edge of the stage while the scene is
   pinned. Decorative (aria-hidden), icon-only so it needs no translation.
   Hidden by default; anim.js toggles .is-visible from scrub progress
   (shows on pin, fades once the text/CTA reveal fires at TEXT_START). */
.vanscrub-hint {
  position: absolute;
  bottom: clamp(10px, 2.5vh, 26px);
  left: 50%;
  transform: translateX(-50%);
  color: var(--ink-2);
  opacity: 0;
  transition: opacity 0.4s ease;
  pointer-events: none;
}

.vanscrub-hint.is-visible { opacity: 0.7; }

.vanscrub-hint svg {
  display: block;
  width: 24px;
  height: 24px;
  animation: vanscrub-bob 1.7s ease-in-out infinite;
}

@keyframes vanscrub-bob {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(7px); }
}

@media (max-width: 720px) {
  .vanscrub { height: 210vh; } /* shorter pin distance on mobile (was 300vh) */
  .vanscrub-media { width: 94vw; }
  .vanscrub-copy { margin-top: 16px; }
}

/* Short / landscape viewports: keep media from pushing copy off-screen */
@media (max-height: 600px) {
  .vanscrub-media { width: min(520px, 70vw); }
}

/* ---------- 2. Mascot loop above the contact block ---------- */
/* Wordless and decorative: centered to the contact container, sized to read
   as a hero mark rather than an icon. */
.mascot-spot {
  display: flex;
  justify-content: center;
  margin-bottom: clamp(36px, 6vw, 64px);
}

.mascot-video {
  display: block;
  width: clamp(200px, 30vw, 340px);
  aspect-ratio: 1 / 1; /* reserved box – no CLS */
  flex: none;
  border-radius: var(--r-lg);
  object-fit: cover;
  background: #ffffff;
  filter: brightness(1.04); /* same white normalization as the van video */
}

/* ---------- Reduced motion: no pin, no scrub – poster + static text ---------- */
@media (prefers-reduced-motion: reduce) {
  .vanscrub { height: auto; padding-block: var(--section-y); }
  .vanscrub-stage { position: static; height: auto; overflow: visible; }
  .vanscrub-video { transition: none; }
  /* anim.js never hides the lines in this mode, but belt and braces: */
  .vanscrub-line { opacity: 1 !important; transform: none !important; }
  /* no pin, no scrub - the scroll cue has nothing to cue */
  .vanscrub-hint { display: none; }
}
