/* Navigation continuity adapted from PresuCart.
   The outgoing view remains visible until Vue mounts the destination.
   The destination then settles into place without opacity changes, avoiding
   the white-frame flicker seen on iOS while still signalling a route change. */
.view{
  backface-visibility:hidden;
  transform:translateZ(0);
  will-change:transform;
}
.view.view-exit{pointer-events:none}
.view.view-enter-forward{
  animation:bp-route-enter-forward 190ms cubic-bezier(.2,.78,.2,1) both;
}
.view.view-enter-back{
  animation:bp-route-enter-back 190ms cubic-bezier(.2,.78,.2,1) both;
}
.view.view-enter-filter{
  animation:bp-route-enter-filter 160ms cubic-bezier(.2,.78,.2,1) both;
}
@keyframes bp-route-enter-forward{
  from{transform:translate3d(14px,0,0) scale(.996)}
  to{transform:translate3d(0,0,0) scale(1)}
}
@keyframes bp-route-enter-back{
  from{transform:translate3d(-14px,0,0) scale(.996)}
  to{transform:translate3d(0,0,0) scale(1)}
}
@keyframes bp-route-enter-filter{
  from{transform:translate3d(0,7px,0) scale(.998)}
  to{transform:translate3d(0,0,0) scale(1)}
}
.entity-card.route-origin-pulse{animation:bp-origin-pulse 520ms ease both}
@keyframes bp-origin-pulse{
  0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 30%,transparent)}
  35%{box-shadow:0 0 0 5px color-mix(in srgb,var(--accent) 18%,transparent)}
  100%{box-shadow:var(--shadow-elev-1)}
}
@media(prefers-reduced-motion:reduce){
  .view.view-enter-forward,
  .view.view-enter-back,
  .view.view-enter-filter,
  .entity-card.route-origin-pulse{animation:none!important}
}
