@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes fadeOut {
  from { opacity: 1; }
  to { opacity: 0; }
}

@keyframes slideUp {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideDown {
  from {
    opacity: 0;
    transform: translateY(-30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes scaleIn {
  from {
    opacity: 0;
    transform: scale(0.9);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes pulse {
  0%, 100% {
    box-shadow: 0 0 20px rgba(255, 215, 0, 0.3);
  }
  50% {
    box-shadow: 0 0 40px rgba(255, 215, 0, 0.6);
  }
}

@keyframes shimmer {
  0% {
    background-position: -200% center;
  }
  100% {
    background-position: 200% center;
  }
}

@keyframes float {
  0%, 100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-10px);
  }
}

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

@keyframes particleFloat {
  0% {
    transform: translateY(100vh);
    opacity: 0;
  }
  10% {
    opacity: 0.3;
  }
  90% {
    opacity: 0.3;
  }
  100% {
    transform: translateY(-100vh);
    opacity: 0;
  }
}

@keyframes cardFlip3D {
  0% {
    transform: rotateY(0deg);
  }
  100% {
    transform: rotateY(180deg);
  }
}

@keyframes scrollUnroll {
  0% {
    max-height: 0;
    opacity: 0;
  }
  100% {
    max-height: 500px;
    opacity: 1;
  }
}

@keyframes pageFlip {
  0% {
    transform: rotateY(0deg);
  }
  50% {
    transform: rotateY(-90deg);
  }
  100% {
    transform: rotateY(-180deg);
  }
}

@keyframes waxSealPress {
  0% {
    transform: scale(1);
  }
  50% {
    transform: scale(0.9);
  }
  100% {
    transform: scale(1);
  }
}

@keyframes curtainOpen {
  0% {
    clip-path: inset(0 0 0 0);
  }
  100% {
    clip-path: inset(0 0 100% 0);
  }
}

@keyframes heartbeat {
  0%, 100% {
    transform: scale(1);
  }
  14% {
    transform: scale(1.1);
  }
  28% {
    transform: scale(1);
  }
  42% {
    transform: scale(1.1);
  }
  70% {
    transform: scale(1);
  }
}

@keyframes glow {
  0%, 100% {
    box-shadow: 0 0 5px var(--color-gold), 0 0 10px var(--color-gold);
  }
  50% {
    box-shadow: 0 0 20px var(--color-gold), 0 0 30px var(--color-gold);
  }
}

@keyframes cardDrop {
  0% {
    transform: translateY(-100px) rotate(10deg);
    opacity: 0;
  }
  60% {
    transform: translateY(10px) rotate(-5deg);
  }
  80% {
    transform: translateY(-5px) rotate(2deg);
  }
  100% {
    transform: translateY(0) rotate(0);
    opacity: 1;
  }
}

@keyframes sparkle {
  0%, 100% {
    opacity: 0;
    transform: scale(0);
  }
  50% {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes pageFlipIn {
  0% {
    transform: rotateY(-90deg);
    opacity: 0;
    transform-origin: left center;
  }
  100% {
    transform: rotateY(0deg);
    opacity: 1;
    transform-origin: left center;
  }
}

@keyframes pageFlipOut {
  0% {
    transform: rotateY(0deg);
    opacity: 1;
    transform-origin: left center;
  }
  100% {
    transform: rotateY(90deg);
    opacity: 0;
    transform-origin: left center;
  }
}

@keyframes cardDraw {
  0% {
    transform: translateY(0) rotate(0deg);
  }
  100% {
    transform: translateY(-15px) rotate(-3deg);
  }
}

@keyframes cardDrawReverse {
  0% {
    transform: translateY(-15px) rotate(-3deg);
  }
  100% {
    transform: translateY(0) rotate(0deg);
  }
}

@keyframes inkDropPulse {
  0%, 100% {
    box-shadow: 0 0 5px rgba(139, 90, 43, 0.5);
    transform: scale(1);
  }
  50% {
    box-shadow: 0 0 15px rgba(139, 90, 43, 0.8);
    transform: scale(1.1);
  }
}

@keyframes waxSealSeal {
  0% {
    transform: scale(0) rotate(-180deg);
    opacity: 0;
  }
  60% {
    transform: scale(1.1) rotate(10deg);
  }
  100% {
    transform: scale(1) rotate(0deg);
    opacity: 1;
  }
}

.animate-fade-in {
  animation: fadeIn 0.5s ease-out forwards;
}

.animate-slide-up {
  animation: slideUp 0.5s ease-out forwards;
}

.animate-slide-down {
  animation: slideDown 0.5s ease-out forwards;
}

.animate-scale-in {
  animation: scaleIn 0.3s ease-out forwards;
}

.animate-pulse {
  animation: pulse 2s ease-in-out infinite;
}

.animate-shimmer {
  background-size: 200% auto;
  animation: shimmer 3s linear infinite;
}

.animate-float {
  animation: float 3s ease-in-out infinite;
}

.animate-spin {
  animation: spin 1s linear infinite;
}

.animate-heartbeat {
  animation: heartbeat 1.5s ease-in-out infinite;
}

.animate-glow {
  animation: glow 2s ease-in-out infinite;
}

.animate-page-flip-in {
  animation: pageFlipIn 0.6s ease-out forwards;
}

.animate-page-flip-out {
  animation: pageFlipOut 0.4s ease-in forwards;
}

.animate-card-draw {
  animation: cardDraw 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards;
}

.animate-card-draw-reverse {
  animation: cardDrawReverse 0.3s ease-out forwards;
}

.animate-ink-pulse {
  animation: inkDropPulse 2s ease-in-out infinite;
}

.animate-wax-seal {
  animation: waxSealSeal 0.5s ease-out forwards;
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
