/* ==========================================================================
   NASHIK EXPORTS — Motion
   Scroll reveals are driven by js/animations.js (IntersectionObserver).
   Elements stay visible when JavaScript is unavailable.
   ========================================================================== */

.js .reveal {
  opacity: 0;
  transform: translateY(25px);
  transition:
    opacity 0.9s var(--ease-out),
    transform 0.9s var(--ease-out);
  transition-delay: calc(var(--d, 0) * 110ms);
  will-change: opacity, transform;
}
.js .reveal.is-visible {
  opacity: 1;
  transform: none;
  will-change: auto;
}

/* Process steps rise in sequence once the timeline is in view */
.js .process__step {
  opacity: 0;
  transform: translateY(25px);
  transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out);
}
.js .process.is-visible .process__step { opacity: 1; transform: none; }
.js .process.is-visible .process__step:nth-child(2) { transition-delay: 0.1s; }
.js .process.is-visible .process__step:nth-child(3) { transition-delay: 0.45s; }
.js .process.is-visible .process__step:nth-child(4) { transition-delay: 0.8s; }
.js .process.is-visible .process__step:nth-child(5) { transition-delay: 1.15s; }
.js .process.is-visible .process__step:nth-child(6) { transition-delay: 1.5s; }
.js .process.is-visible .process__step:nth-child(3) .process__num { transition-delay: 0.45s; }
.js .process.is-visible .process__step:nth-child(4) .process__num { transition-delay: 0.8s; }
.js .process.is-visible .process__step:nth-child(5) .process__num { transition-delay: 1.15s; }
.js .process.is-visible .process__step:nth-child(6) .process__num { transition-delay: 1.5s; }

/* Hero text — a soft focus-in on top of the rise */
.js .hero-slide .hero-anim { filter: blur(6px); transition: opacity 0.9s var(--ease-out), transform 0.9s var(--ease-out), filter 0.9s var(--ease-out); }
.js .hero-slide.is-active .hero-anim { filter: none; }

/* Gallery filtering */
.gallery-item.is-entering { animation: rise-in 0.6s var(--ease-out) both; }
@keyframes rise-in { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }

/* ==========================================================================
   Reduced motion — keep fades, remove movement, stop looping animation.
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    transition-delay: 0s !important;
  }

  .js .reveal,
  .js .process__step,
  .js .route__stop,
  .hero-anim { opacity: 1; transform: none; }
  .js .reveal-media { clip-path: none; }
  .route__vine-grow,
  .purpose__stem-line { stroke-dashoffset: 0; }
  .purpose__leaf,
  .route.is-visible .route__node::after { transform: scale(1); }
  .origin__bg img { transform: none; }

  .hero-slide { transition: opacity 0.4s linear, visibility 0s linear 0.4s !important; }
  .hero-slide.is-active { transition: opacity 0.4s linear !important; }
  .js .hero-slide .hero-anim { filter: none; }
  .hero-slide__media img,
  .hero-slide.is-active .hero-slide__media img { transform: none; }

  .story__badge-ring,
  .wa-float__icon::before,
  .form-success__mark::before { animation: none !important; }
  .wa-float__icon::before { opacity: 0; }

  .btn:hover,
  .why-card:hover,
  .category-card:hover,
  .stage:hover,
  .variety:hover,
  .wa-float:hover,
  .lang__toggle:hover,
  .trust__item:hover .trust__logo,
  .hero-feature:hover { transform: none; }

  .category-card:hover .category-card__media img,
  .mosaic__item:hover img,
  .stage:hover .stage__media img,
  .range__tile:hover .media img,
  .variety:hover .variety__photo img,
  .size:hover .size__visual img,
  .gallery-item__btn:hover img { transform: none; }
}
