/* Shared motion layer. All readable defaults are in styles.css. */
.motion-ready [data-reveal]:not(.is-revealed) { opacity: 0; clip-path: inset(0 0 100% 0); }
.motion-ready .hero-title .line { overflow: hidden; }
.motion-ready .hero-title:not(.hero-entered) .line > span { display: block; transform: translateY(110%); }
.intro-overlay[hidden], .intro-overlay.is-complete { display: none !important; }
.motion-ready:not(.intro-seen) .intro-overlay:not(.is-complete) { display: flex !important; }
.intro-overlay { position: fixed; inset: 0; z-index: 200; overflow: hidden; }
.intro-word { overflow: hidden; }
.intro-word > span { display: inline-block; }
.intro-skip { position: absolute; right: 5vw; bottom: 5vh; z-index: 1; }
.page-transition { position: fixed; inset: 0; z-index: 190; background: var(--lime, #d8ff3e); pointer-events: none; transform: translateY(100%); visibility: hidden; }
.page-arriving::before { content: ''; position: fixed; inset: 0; z-index: 190; background: var(--lime, #d8ff3e); pointer-events: none; }
.site-shell { transform-origin: 50% 50%; }
.motion-menu-active .site-shell { overflow: hidden; pointer-events: none; }
.motion-menu-active #site-menu { pointer-events: auto; }
.button { overflow: hidden; }
.button-label, .button-arrow { will-change: transform; }
.button-arrow { flex-shrink: 0; }
.motion-live .site-shell { overflow: clip; }
/* Native layout owns every story boundary and its natural scroll space. */
.has-story-motion .story-scroll { position: relative; height: calc(100svh + var(--story-travel, 0px)); }
.has-story-motion .story-viewport { position: sticky; top: 0; height: 100svh; display: flex; flex-direction: column; justify-content: center; gap: 24px; padding: 24px 0 30px; overflow: clip; }
.has-story-motion .story-heading { flex-shrink: 0; margin: 0; width: 100%; }
.has-story-motion .story-deck { position: relative; display: block; width: 100%; flex: 1; min-height: 0; max-height: 680px; }
.has-story-motion .story-panel { position: absolute; inset: 0; height: 100%; width: 100%; }
.has-story-motion .story-panel[aria-hidden="true"] { pointer-events: none; }
.has-story-motion .story-art { height: 100%; min-height: 0; }
.has-story-motion .story-cover { height: 100%; max-height: 100%; aspect-ratio: auto; }
.has-story-motion .story-controls { flex-shrink: 0; width: 100%; }
.brand-star { pointer-events: none; }
.brand-marquee { overflow: hidden; }
.marquee-track { width: max-content; display: flex; flex-wrap: nowrap; white-space: nowrap; }
.motion-fallback [data-reveal], .motion-fallback .hero-title .line > span { opacity: 1 !important; visibility: visible !important; clip-path: none !important; transform: none !important; }
.motion-fallback .intro-overlay { display: none !important; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto !important; }
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
  [data-reveal], .hero-title .line > span { opacity: 1 !important; visibility: visible !important; clip-path: none !important; transform: none !important; }
  .intro-overlay, .page-transition, .page-arriving::before { display: none !important; }
  .brand-star { transform: none !important; }
}
