/* ============================================================================
   seas-site/motion.css — authored-code lane (SEAS-D-11), owner: LANE A (append-only).
   The entrance layer: seas-rise / seas-drift + reduced-motion gates (I-26/I-27,
   SEAS-D-8). LOAD-TIME keyframes, NOT scroll reveal — zero IntersectionObservers
   exist live; a builder adding scroll triggers is a process failure.
   NOT built with Bricks interaction effects (wrong curves — BRICKS_ADAPTATION §1e).
   Rules re-authored verbatim from live-built.css; durations/easings are the seeded
   motion tokens (no raw ms in any Bricks control — the raw values here ARE the
   authored lane, per INTERACTIONS.md lane column).
   ========================================================================== */

@media (prefers-reduced-motion: no-preference) {
  .hero__content,
  .page-hero__inner,
  .detail-hero__inner,
  .facility-hero__content,
  .contact-layout__grid,
  .not-found__content {
    animation: seas-rise 520ms var(--ease-expo-out) both;
  }
  .hero__image-wrap,
  .facility-hero__image {
    animation: seas-rise 600ms var(--ease-expo-out) 70ms both;
  }
  .not-found__visual:after {
    animation: seas-drift 8s var(--ease-drift) infinite alternate;
  }
}

@keyframes seas-rise {
  0% { opacity: 0; transform: translateY(17px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes seas-drift {
  0% { transform: rotate(20deg) translate(-6px, 5px); }
  to { transform: rotate(44deg) translate(7px, -8px); }
}

/* Global reduce rule — live posture carried (tokens.json motion.reducedMotion:
   durations collapse, end-states apply, drift stops). Kept at END of file;
   selectors are universal so no later rule outranks it (McCardle G11/28). */
@media (prefers-reduced-motion: reduce) {
  *,
  ::before,
  ::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }
}
