/* Content is visible by default, including before JS and outside the viewport.
   Only a successfully observed entrance gets a finite animation. */
@keyframes landing-reveal {
  from { opacity: 0; transform: translateY(var(--reveal-distance, 12px)); }
  to { opacity: 1; transform: translateY(0); }
}

.js-motion [data-reveal].is-revealing {
  animation: landing-reveal var(--reveal-duration, 400ms)
    var(--motion-ease, cubic-bezier(.2, .7, .2, 1))
    var(--reveal-delay, 0ms) both;
}

#problem [data-reveal] { --reveal-duration: 420ms; }
#solution .solution-connector { --reveal-duration: 900ms; }
#opportunity [data-reveal] { --reveal-duration: 360ms; }
#contact [data-reveal] { --reveal-duration: 350ms; }

/* Keyboard focus must never disappear during an entrance or its stagger. */
.js-motion [data-reveal].is-revealing:focus-within {
  animation: none;
  opacity: 1;
  transform: none;
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto !important; }
  [data-reveal], .js-motion [data-reveal].is-revealing {
    animation: none !important;
    transition: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
  [data-motion-scene], [data-motion-scene] * {
    animation: none !important;
    transition: none !important;
  }
  [data-motion-toggle], [data-global-motion-toggle] { display: none !important; }
}
