/* ── SITE MOTION SYSTEM ──────────────────────────────────────────────
   One easing curve and one timing scale for the whole site.
   Image hover zoom: .img-hover-zoom on the container, image scales 1.04.
   Scroll entrance: js/motion.js tags framed blocks with .reveal and
   reveals them once via IntersectionObserver, 90ms stagger per row.
   prefers-reduced-motion: everything off, instantly visible. */
:root {
  --ease-site: cubic-bezier(0.25, 0.6, 0.3, 1);
  --dur-fast: 200ms;
  --dur-zoom: 450ms;
  --dur-reveal: 550ms;
  --stagger: 90ms;
  --dur-hero: 1500ms;
}

/* ── IMAGE HOVER ZOOM (one shared class) ── */
.img-hover-zoom { overflow: hidden; }
.img-hover-zoom img { transition: transform var(--dur-zoom) var(--ease-site) !important; }
@media (hover: hover) {
  .img-hover-zoom:hover img { transform: scale(1.04) !important; }
}

/* ── SCROLL ENTRANCE ── */
.reveal {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity var(--dur-reveal) var(--ease-site), transform var(--dur-reveal) var(--ease-site);
  transition-delay: calc(var(--reveal-i, 0) * var(--stagger));
}
.reveal.is-in { opacity: 1; transform: none; }

/* ── HERO ENTRANCE (page load, once) ── */
@keyframes hero-settle { from { transform: scale(1.06); } to { transform: scale(1); } }
@keyframes hero-rise { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: none; } }
.hero-entrance { overflow: hidden; }
.hero-entrance img { animation: hero-settle var(--dur-hero) var(--ease-site) both; }
.hero-reveal { animation: hero-rise var(--dur-reveal) var(--ease-site) both; }
.hero-reveal-sub { animation: hero-rise var(--dur-reveal) var(--ease-site) both; animation-delay: var(--stagger); }

/* ── REDUCED MOTION: all of it off, no exceptions ── */
@media (prefers-reduced-motion: reduce) {
  .hero-entrance img, .hero-reveal, .hero-reveal-sub { animation: none !important; }
  .reveal { opacity: 1 !important; transform: none !important; transition: none !important; }
  .img-hover-zoom img { transition: none !important; transform: none !important; }
}
