/* One entrance effect; native page transitions replace the fallback animation. */
html:not(.invoxa-native-transition) .invoxa-page-content {
  animation: invoxa-page-enter .26s cubic-bezier(.22, 1, .36, 1) backwards;
}

/* The outgoing page stays readable while the next document loads. */
.page-transition-bar {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 10000;
  width: 100%;
  height: 2px;
  pointer-events: none;
  opacity: 0;
  transform: scaleX(0);
  transform-origin: left;
  background: linear-gradient(90deg, var(--primary, #4f46e5), var(--secondary, #7c3aed));
}
body.page-is-leaving .page-transition-bar {
  animation: invoxa-page-progress 1.8s cubic-bezier(.16, 1, .3, 1) .15s forwards;
}
@keyframes invoxa-page-enter {
  from { opacity: .35; transform: translateY(5px); }
  to { opacity: 1; transform: none; }
}
@keyframes invoxa-page-progress {
  0% { opacity: 1; transform: scaleX(.06); }
  40% { opacity: 1; transform: scaleX(.65); }
  100% { opacity: 1; transform: scaleX(.92); }
}

/* Use the shared entrance above; cancelled native captures reject before reveal. */
@view-transition { navigation: none; }
body > header.fixed { view-transition-name: invoxa-header; }
body > .aw-shell > .aw-sidebar { view-transition-name: invoxa-admin-sidebar; }
::view-transition-group(root) { animation-duration: .22s; }
::view-transition-old(root) { animation: invoxa-view-out .18s ease-out both; }
::view-transition-new(root) { animation: invoxa-view-in .24s cubic-bezier(.22, 1, .36, 1) both; }
::view-transition-group(invoxa-header),
::view-transition-group(invoxa-admin-sidebar) { animation: none; }
::view-transition-old(invoxa-header),
::view-transition-old(invoxa-admin-sidebar) { display: none; }
::view-transition-new(invoxa-header),
::view-transition-new(invoxa-admin-sidebar) { animation: none; mix-blend-mode: normal; }
@keyframes invoxa-view-out { to { opacity: 0; } }
@keyframes invoxa-view-in { from { opacity: 0; } to { opacity: 1; } }

@media (prefers-reduced-motion: reduce) {
  @view-transition { navigation: none; }
  .invoxa-page-content,
  .page-transition-bar,
  body.page-is-leaving .page-transition-bar,
  ::view-transition-group(*),
  ::view-transition-old(*),
  ::view-transition-new(*) {
    animation: none !important;
    transition: none !important;
    transform: none !important;
  }
}
