.js body { opacity: 0; transform: translateY(6px); transition: opacity var(--duration-normal) var(--ease-soft), transform var(--duration-normal) var(--ease-soft); }
.js body.page-ready { opacity: 1; transform: none; }
.js body.page-leaving { opacity: 0; transform: translateY(-4px); pointer-events: none; }

.js [data-reveal] { opacity: 0; transform: translateY(14px); transition: opacity var(--duration-slow) var(--ease-soft), transform var(--duration-cinematic) var(--ease-out); }
.js [data-reveal].is-visible { opacity: 1; transform: none; }

@media (hover: hover) and (pointer: fine) {
  .editorial-shot img { transition: transform var(--duration-cinematic) var(--ease-out), filter var(--duration-slow) ease; }
  .editorial-shot:hover img { transform: scale(1.008); filter: brightness(1.025); }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { scroll-behavior: auto; animation-duration: .001ms; animation-iteration-count: 1; transition-duration: .001ms; }
  .js body, .js body.page-ready, .js body.page-leaving, .js [data-reveal] { opacity: 1; transform: none; }
}
