/* Frame Scroll Deck — base styles for section-to-section transitions.
   Transforms/opacity are driven by frame-scroll-deck.js; this file owns the
   optional full-screen + scroll-snap layout and the reduced-motion reset. */

/* Snap container is opted-in per page (the runtime / theme adds .frame-deck-on
   to <html> when at least one full-screen slide exists). Proximity (not
   mandatory) so tall/interactive slides never trap the scroll. */
html.frame-deck-on { scroll-snap-type: y proximity; }

/* Scale-based transitions (dissolve / zoom-in) keep scale >= 1 so a full-screen
   slide never shrinks below the viewport and shows an edge gap. The >1 overflow
   is absorbed here — overflow-x:clip stops any horizontal scrollbar without
   creating a scroll container (so position:fixed header + sticky map controls
   are unaffected, unlike overflow:hidden). */
html.frame-deck-on { overflow-x: clip; }

/* A slide that is also full-screen: fill the viewport + snap + center content. */
[data-frame-deck-slide][data-frame-deck-fullscreen] {
  min-height: 100svh;
  scroll-snap-align: start;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

/* The transform target gets compositor hints from the JS; nothing needed here,
   but keep slides from leaking their transition transform outside their box. */
[data-frame-deck-slide] { position: relative; }

@media (prefers-reduced-motion: reduce) {
  html.frame-deck-on { scroll-snap-type: none; }
  [data-frame-deck-slide],
  [data-frame-deck-slide] > * { transform: none !important; filter: none !important; opacity: 1 !important; }
}
