/* Optional native snapshots, loaded after styles.css. Unsupported browsers keep
   immediate document navigation; there is no loader, curtain or hidden page. */
@view-transition { navigation: auto; }

::view-transition { pointer-events: none; }
::view-transition-group(root) { animation-duration: 240ms; }
::view-transition-image-pair(root) { isolation: isolate; }

/* Keep the complete old view underneath until the new one is fully visible.
   Override the earlier global fade-out: neither the DOM nor both snapshots
   become transparent at once. No translation exposes an empty page edge. */
::view-transition-old(root) {
  animation: none;
  opacity: 1;
  mix-blend-mode: normal;
}
::view-transition-new(root) {
  animation: ft-route-snapshot 240ms cubic-bezier(.22, 1, .36, 1) both;
  mix-blend-mode: normal;
}
@keyframes ft-route-snapshot {
  from { opacity: 0; }
  to { opacity: 1; }
}

/* Global pause applies immediately, even if a deferred module misses pagereveal.
   OS reduction also works with JavaScript disabled. */
html.motion-paused::view-transition { display: none; }
html.motion-paused::view-transition-group(root),
html.motion-paused::view-transition-old(root),
html.motion-paused::view-transition-new(root) { animation: none; opacity: 1; }
@media (prefers-reduced-motion: reduce) {
  @view-transition { navigation: none; }
  ::view-transition { display: none; }
  ::view-transition-group(root),
  ::view-transition-old(root),
  ::view-transition-new(root) { animation: none; opacity: 1; }
}
