/* Welcome V2 motion — entrance choreography (FOUC-safe via .wv2-armed
   gate), Continue ribbon sweep, hover refinements, watermark parallax
   smoothing. prefers-reduced-motion total override at the bottom. See
   welcome-v2-motion.js for the arm/reveal/parallax wiring. */

.wv2-armed .wv2-reveal {
  opacity: 0;
  transform: translateY(8px);
  transition:
    opacity 280ms cubic-bezier(0.2, 0.8, 0.2, 1),
    transform 280ms cubic-bezier(0.2, 0.8, 0.2, 1);
}

.wv2-armed .wv2-reveal-feature {
  opacity: 0;
  transform: translateY(10px) scale(0.985);
  transition:
    opacity 320ms cubic-bezier(0.2, 0.8, 0.2, 1),
    transform 320ms cubic-bezier(0.2, 0.8, 0.2, 1);
}

.wv2-armed .wv2-reveal[data-wv2-stage="0"] { transition-delay: 0ms; }
.wv2-armed .wv2-reveal[data-wv2-stage="1"] { transition-delay: 60ms; }
.wv2-armed .wv2-reveal[data-wv2-stage="2"] { transition-delay: 120ms; }
.wv2-armed .wv2-reveal[data-wv2-stage="3"] { transition-delay: 180ms; }
.wv2-armed .wv2-reveal[data-wv2-stage="4"] { transition-delay: 240ms; }
.wv2-armed .wv2-reveal[data-wv2-stage="5"] { transition-delay: 60ms; }
.wv2-armed .wv2-reveal[data-wv2-stage="6"] { transition-delay: 60ms; }
.wv2-armed .wv2-reveal[data-wv2-stage="7"] { transition-delay: 60ms; }
.wv2-armed .wv2-reveal[data-wv2-stage="8"] { transition-delay: 60ms; }

.wv2-armed .wv2-reveal.wv2-shown,
.wv2-armed .wv2-reveal-feature.wv2-shown {
  opacity: 1;
  transform: none;
}

/* Continue card ribbon sweep. Static `left` parks the ribbon off-screen;
   the keyframe animates transform only (compositor-only). Math:
   ribbon width 40% of parent + translateX(350%) of own width = 140% of
   parent shift, taking the left edge from -40% to 100%. */
.wv2-continue {
  position: relative;
  overflow: hidden;
}

.wv2-continue::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: -40%;
  width: 40%;
  transform: translateX(0);
  will-change: transform;
  background: linear-gradient(
    100deg,
    transparent 0%,
    rgba(255, 255, 255, 0.04) 40%,
    rgba(255, 255, 255, 0.07) 50%,
    rgba(255, 255, 255, 0.04) 60%,
    transparent 100%
  );
  pointer-events: none;
  z-index: 1;
}

[data-theme="light"] .wv2-continue::before {
  background: linear-gradient(
    100deg,
    transparent 0%,
    rgba(0, 0, 0, 0.025) 40%,
    rgba(0, 0, 0, 0.045) 50%,
    rgba(0, 0, 0, 0.025) 60%,
    transparent 100%
  );
}

.wv2-armed .wv2-continue::before {
  animation: wv2-ribbon-sweep 1.1s cubic-bezier(0.2, 0.8, 0.2, 1) 460ms 1 forwards;
}

.wv2-continue:hover::before {
  animation: wv2-ribbon-sweep 1.1s cubic-bezier(0.2, 0.8, 0.2, 1) 0s 1 forwards;
}

@keyframes wv2-ribbon-sweep {
  0%   { transform: translateX(0); }
  100% { transform: translateX(350%); }
}

.wv2-continue > * {
  position: relative;
  z-index: 2;
}

/* Card hover: slowed border-color (240ms feels "considered"), arrow
   micro-translate on hover. Transform lift stays at the existing
   160ms so it feels responsive. */
.wv2-featured-hero,
.wv2-featured-card,
.wv2-foryou-card,
.wv2-library-footer,
.wv2-continue {
  transition:
    transform 160ms ease,
    border-color 240ms cubic-bezier(0.2, 0.8, 0.2, 1),
    box-shadow 240ms cubic-bezier(0.2, 0.8, 0.2, 1);
}

.wv2-featured-hero:hover .wv2-featured-hero-cta span[aria-hidden="true"],
.wv2-continue:hover .wv2-continue-cta span[aria-hidden="true"],
.wv2-foryou-card:hover .wv2-foryou-cta {
  transform: translateX(2px);
  transition: transform 200ms cubic-bezier(0.2, 0.8, 0.2, 1);
}

.wv2-featured-hero-cta span[aria-hidden="true"],
.wv2-continue-cta span[aria-hidden="true"],
.wv2-foryou-cta {
  transition: transform 200ms cubic-bezier(0.2, 0.8, 0.2, 1);
  display: inline-block;
}

/* Watermark parallax smoothing — JS writes inline transforms; CSS
   cushions cursor jitter. Cap (4px) is enforced JS-side. */
.wv2-featured-hero-watermark {
  transition: transform 280ms cubic-bezier(0.2, 0.8, 0.2, 1);
  will-change: transform;
}

/* prefers-reduced-motion: total override of decorative motion. Hover
   transitions stay because they're interaction feedback. */
@media (prefers-reduced-motion: reduce) {
  .wv2-armed .wv2-reveal,
  .wv2-armed .wv2-reveal-feature,
  .wv2-armed .wv2-reveal.wv2-shown,
  .wv2-armed .wv2-reveal-feature.wv2-shown {
    opacity: 1;
    transform: none;
    transition: none;
  }

  .wv2-armed .wv2-continue::before,
  .wv2-continue:hover::before {
    animation: none;
  }

  .wv2-featured-hero-watermark {
    transition: none;
  }
}
