/* ============================================
   Animations - Keyframes & Scroll Triggers
   ============================================ */

/* --- Keyframe Definitions --- */

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

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

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

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

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

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

@keyframes slideInLeft {
  from { transform: translateX(-100%); }
  to { transform: translateX(0); }
}

@keyframes slideInRight {
  from { transform: translateX(100%); }
  to { transform: translateX(0); }
}

/* Floating animation for decorative elements */
@keyframes float {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  25% { transform: translateY(-10px) rotate(2deg); }
  75% { transform: translateY(5px) rotate(-1deg); }
}

@keyframes floatSlow {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50% { transform: translateY(-20px) rotate(3deg); }
}

/* Pulse glow for CTAs */
@keyframes pulse {
  0%, 100% { box-shadow: 0 0 0 0 var(--color-gold-glow); }
  50% { box-shadow: 0 0 20px 5px var(--color-gold-glow); }
}

@keyframes pulseSubtle {
  0%, 100% { opacity: 0.6; }
  50% { opacity: 1; }
}

/* Chess knight L-jump for loading screen */
@keyframes knightJump {
  0% { transform: translate(0, 0); }
  25% { transform: translate(0, -60px); }
  50% { transform: translate(40px, -60px); }
  75% { transform: translate(40px, -20px); }
  100% { transform: translate(40px, -20px) scale(1.1); }
}

@keyframes knightJumpBack {
  0% { transform: translate(40px, -20px) scale(1.1); }
  25% { transform: translate(40px, -80px); }
  50% { transform: translate(0, -80px); }
  75% { transform: translate(0, -20px); }
  100% { transform: translate(0, 0); }
}

/* Rotate */
@keyframes rotate {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* Shimmer effect */
@keyframes shimmer {
  0% { background-position: -200% center; }
  100% { background-position: 200% center; }
}

/* Line draw for decorative borders */
@keyframes drawLine {
  from { width: 0; }
  to { width: 100%; }
}

@keyframes drawLineCenter {
  from { width: 0; left: 50%; }
  to { width: 60px; left: calc(50% - 30px); }
}

/* Piece movement paths */
@keyframes bishopSlide {
  0% { transform: translate(0, 0); opacity: 0.8; }
  50% { transform: translate(60px, -60px); opacity: 1; }
  100% { transform: translate(120px, -120px); opacity: 0; }
}

@keyframes pawnPromote {
  0% { transform: translateY(0) scale(1); }
  50% { transform: translateY(-30px) scale(1.2); }
  100% { transform: translateY(-30px) scale(1); }
}

/* --- Scroll Animation Classes --- */

.animate-on-scroll {
  opacity: 0;
  transition: opacity 0.6s ease, transform 0.6s ease;
}

.animate-on-scroll[data-animation="fadeInUp"],
.animate-on-scroll:not([data-animation]) {
  transform: translateY(30px);
}

.animate-on-scroll[data-animation="fadeInLeft"] {
  transform: translateX(-30px);
}

.animate-on-scroll[data-animation="fadeInRight"] {
  transform: translateX(30px);
}

.animate-on-scroll[data-animation="fadeInDown"] {
  transform: translateY(-30px);
}

.animate-on-scroll[data-animation="scaleIn"] {
  transform: scale(0.9);
}

.animate-on-scroll[data-animation="fadeIn"] {
  /* just opacity, no transform */
}

/* Visible state (added by JS) */
.animate-on-scroll.is-visible {
  opacity: 1;
  transform: translateY(0) translateX(0) scale(1);
}

/* Stagger delays */
.delay-100 { transition-delay: 100ms !important; }
.delay-200 { transition-delay: 200ms !important; }
.delay-300 { transition-delay: 300ms !important; }
.delay-400 { transition-delay: 400ms !important; }
.delay-500 { transition-delay: 500ms !important; }
.delay-600 { transition-delay: 600ms !important; }
.delay-700 { transition-delay: 700ms !important; }
.delay-800 { transition-delay: 800ms !important; }

/* --- Loading Screen --- */
.loading-screen {
  position: fixed;
  inset: 0;
  z-index: var(--z-loading);
  background: var(--color-bg-primary);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-6);
  transition: opacity 0.5s ease, visibility 0.5s ease;
}

.loading-screen.hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.loading-knight {
  width: 60px;
  height: 60px;
  color: var(--color-gold);
  animation: knightJump 1s ease forwards, knightJumpBack 1s ease 1s forwards;
}

.loading-text {
  font-family: var(--font-heading);
  font-size: var(--text-lg);
  color: var(--color-cream-dim);
  letter-spacing: var(--tracking-widest);
  animation: pulseSubtle 1.5s ease infinite;
}

/* --- Floating Decorative Pieces --- */
.floating-piece {
  position: fixed;
  pointer-events: none;
  z-index: var(--z-behind);
  opacity: 0.04;
  color: var(--color-gold);
}

.floating-piece:nth-child(1) {
  top: 20%;
  left: 5%;
  width: 80px;
  animation: float 8s ease-in-out infinite;
}

.floating-piece:nth-child(2) {
  top: 60%;
  right: 8%;
  width: 60px;
  animation: floatSlow 12s ease-in-out infinite;
  animation-delay: -3s;
}

.floating-piece:nth-child(3) {
  bottom: 15%;
  left: 12%;
  width: 50px;
  animation: float 10s ease-in-out infinite;
  animation-delay: -6s;
}

/* --- Hover Effects --- */
.hover-lift {
  transition: transform var(--transition-base), box-shadow var(--transition-base);
}

.hover-lift:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-lg);
}

.hover-glow {
  transition: box-shadow var(--transition-base);
}

.hover-glow:hover {
  box-shadow: var(--shadow-gold);
}

/* --- Chess Pattern Background --- */
.chess-pattern-bg {
  background-image:
    repeating-conic-gradient(
      rgba(255, 255, 255, 0.02) 0% 25%,
      transparent 0% 50%
    );
  background-size: 40px 40px;
}

/* --- Section Divider --- */
.section-divider {
  position: relative;
  height: 80px;
  overflow: hidden;
}

.section-divider svg {
  position: absolute;
  bottom: 0;
  width: 100%;
  height: 80px;
}

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

  .animate-on-scroll {
    opacity: 1;
    transform: none;
  }

  .loading-screen {
    display: none;
  }

  .floating-piece {
    display: none;
  }

  html {
    scroll-behavior: auto;
  }
}
