/* View Transitions CSS
 * Defines animations for Turbo + View Transitions API
 * Only applies on browsers that support View Transitions (Chrome 111+, Safari 18+)
 */

/* Default transition for all page changes */
::view-transition-old(root),
::view-transition-new(root) {
  animation-duration: 0.3s;
  animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

/* Forward navigation - slide left */
[data-nav-direction="forward"]::view-transition-old(root) {
  animation-name: slide-out-left;
}

[data-nav-direction="forward"]::view-transition-new(root) {
  animation-name: slide-in-right;
}

/* Back navigation - slide right */
[data-nav-direction="back"]::view-transition-old(root) {
  animation-name: slide-out-right;
}

[data-nav-direction="back"]::view-transition-new(root) {
  animation-name: slide-in-left;
}

/* Slide animations */
@keyframes slide-out-left {
  from {
    transform: translateX(0);
    opacity: 1;
  }
  to {
    transform: translateX(-30%);
    opacity: 0;
  }
}

@keyframes slide-in-right {
  from {
    transform: translateX(30%);
    opacity: 0;
  }
  to {
    transform: translateX(0);
    opacity: 1;
  }
}

@keyframes slide-out-right {
  from {
    transform: translateX(0);
    opacity: 1;
  }
  to {
    transform: translateX(30%);
    opacity: 0;
  }
}

@keyframes slide-in-left {
  from {
    transform: translateX(-30%);
    opacity: 0;
  }
  to {
    transform: translateX(0);
    opacity: 1;
  }
}

/* Faster animations for repeated navigations */
::view-transition-old(root),
::view-transition-new(root) {
  animation-duration: 0.25s;
}

/* iOS-style spring animations (optional - smoother feel) */
@media (prefers-reduced-motion: no-preference) {
  ::view-transition-old(root),
  ::view-transition-new(root) {
    animation-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
  }
}

/* Respect user's motion preferences */
@media (prefers-reduced-motion: reduce) {
  ::view-transition-old(root),
  ::view-transition-new(root) {
    animation-duration: 0.01s;
  }

  .fr-enter {
    animation: none !important;
    opacity: 1 !important;
  }
}

/* ============================================
 * Onboarding entrance animations
 * Staggered fade-up for page elements
 * ============================================ */

@keyframes fr-fade-up {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fr-fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes fr-scale-in {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

.fr-enter {
  opacity: 0;
  animation: fr-fade-up 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards;
  animation-delay: var(--enter-delay, 0ms);
}

.fr-enter-fade {
  opacity: 0;
  animation: fr-fade-in 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards;
  animation-delay: var(--enter-delay, 0ms);
}

.fr-enter-scale {
  opacity: 0;
  animation: fr-scale-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards;
  animation-delay: var(--enter-delay, 0ms);
}
