/* ============================================
   THE ASYLUM — Animations
   Keyframes and animation utilities
   ============================================ */

/* === ALL ANIMATIONS WRAPPED FOR REDUCED MOTION === */
@media (prefers-reduced-motion: no-preference) {

  /* === REVEAL ANIMATIONS === */
  
  @keyframes fade-in {
    from { opacity: 0; }
    to { opacity: 1; }
  }

  @keyframes fade-in-up {
    from {
      opacity: 0;
      transform: translateY(20px);
    }
    to {
      opacity: 1;
      transform: translateY(0);
    }
  }

  @keyframes fade-in-down {
    from {
      opacity: 0;
      transform: translateY(-20px);
    }
    to {
      opacity: 1;
      transform: translateY(0);
    }
  }

  @keyframes fade-in-left {
    from {
      opacity: 0;
      transform: translateX(-20px);
    }
    to {
      opacity: 1;
      transform: translateX(0);
    }
  }

  @keyframes fade-in-right {
    from {
      opacity: 0;
      transform: translateX(20px);
    }
    to {
      opacity: 1;
      transform: translateX(0);
    }
  }

  /* === GATE ANIMATIONS === */

  @keyframes gate-left-open {
    0% { 
      transform: perspective(1000px) rotateY(0deg); 
    }
    100% { 
      transform: perspective(1000px) rotateY(-110deg); 
    }
  }

  @keyframes gate-right-open {
    0% { 
      transform: perspective(1000px) rotateY(0deg); 
    }
    100% { 
      transform: perspective(1000px) rotateY(110deg); 
    }
  }

  @keyframes gate-fade-in {
    from {
      opacity: 0;
      filter: blur(10px);
    }
    to {
      opacity: 1;
      filter: blur(0);
    }
  }

  /* === TYPEWRITER === */

  @keyframes typewriter {
    from { width: 0; }
    to { width: 100%; }
  }

  @keyframes blink-caret {
    0%, 100% { border-color: transparent; }
    50% { border-color: var(--spectral-gold); }
  }

  /* === ATMOSPHERIC EFFECTS === */

  @keyframes fog-drift {
    0% { 
      background-position: 0 0, 0 0; 
    }
    100% { 
      background-position: 100% 0, -100% 0; 
    }
  }

  @keyframes particle-float {
    0%, 100% {
      transform: translateY(0) translateX(0);
      opacity: 0;
    }
    10% {
      opacity: 1;
    }
    90% {
      opacity: 1;
    }
    100% {
      transform: translateY(-100vh) translateX(20px);
      opacity: 0;
    }
  }

  @keyframes particle-drift {
    0%, 100% {
      transform: translateX(0);
    }
    50% {
      transform: translateX(10px);
    }
  }

  /* === GLOW EFFECTS === */

  @keyframes candle-flicker {
    0%, 100% {
      opacity: 1;
      filter: brightness(1);
    }
    25% {
      opacity: 0.9;
      filter: brightness(1.1);
    }
    50% {
      opacity: 1;
      filter: brightness(0.95);
    }
    75% {
      opacity: 0.95;
      filter: brightness(1.05);
    }
  }

  @keyframes pulse-glow {
    0%, 100% {
      box-shadow: 0 0 5px var(--glow-gold);
    }
    50% {
      box-shadow: 0 0 20px var(--glow-gold), 0 0 30px var(--glow-gold);
    }
  }

  /* === GLITCH EFFECT === */

  @keyframes glitch-1 {
    0%, 100% { transform: translate(0); }
    20% { transform: translate(-2px, 2px); }
    40% { transform: translate(-2px, -2px); }
    60% { transform: translate(2px, 2px); }
    80% { transform: translate(2px, -2px); }
  }

  @keyframes glitch-2 {
    0%, 100% { transform: translate(0); }
    20% { transform: translate(2px, -2px); }
    40% { transform: translate(2px, 2px); }
    60% { transform: translate(-2px, -2px); }
    80% { transform: translate(-2px, 2px); }
  }

  /* === SCANLINES (CRT Effect) === */

  @keyframes scanline {
    0% {
      transform: translateY(0);
    }
    100% {
      transform: translateY(4px);
    }
  }

  /* === UTILITY CLASSES === */

  .animate-fade-in {
    animation: fade-in 0.6s ease forwards;
  }

  .animate-fade-in-up {
    animation: fade-in-up 0.6s ease forwards;
  }

  .animate-fade-in-down {
    animation: fade-in-down 0.6s ease forwards;
  }

  /* Staggered reveal for children */
  .stagger-reveal > * {
    opacity: 0;
    animation: fade-in-up 0.6s ease forwards;
  }

  .stagger-reveal > *:nth-child(1) { animation-delay: 0.1s; }
  .stagger-reveal > *:nth-child(2) { animation-delay: 0.2s; }
  .stagger-reveal > *:nth-child(3) { animation-delay: 0.3s; }
  .stagger-reveal > *:nth-child(4) { animation-delay: 0.4s; }
  .stagger-reveal > *:nth-child(5) { animation-delay: 0.5s; }
  .stagger-reveal > *:nth-child(6) { animation-delay: 0.6s; }

  /* Glow on hover */
  .glow-on-hover {
    transition: filter var(--transition-normal);
  }

  .glow-on-hover:hover {
    filter: drop-shadow(0 0 8px var(--glow-gold));
  }

  /* Candle flicker */
  .candle-flicker {
    animation: candle-flicker 3s ease-in-out infinite;
  }

  /* Pulse glow */
  .pulse-glow {
    animation: pulse-glow 2s ease-in-out infinite;
  }

  /* Glitch text effect */
  .glitch {
    position: relative;
  }

  .glitch::before,
  .glitch::after {
    content: attr(data-text);
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
  }

  .glitch:hover::before {
    animation: glitch-1 0.3s infinite;
    color: var(--phantasm-blue);
    opacity: 0.8;
    clip-path: polygon(0 0, 100% 0, 100% 45%, 0 45%);
  }

  .glitch:hover::after {
    animation: glitch-2 0.3s infinite;
    color: var(--blood-moon);
    opacity: 0.8;
    clip-path: polygon(0 55%, 100% 55%, 100% 100%, 0 100%);
  }

} /* End prefers-reduced-motion: no-preference */

/* === FOG OVERLAY (Always available, animation conditional) === */

.fog-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: var(--z-above);
  opacity: 0.08;
  background: 
    radial-gradient(ellipse at 20% 50%, var(--fog-dense) 0%, transparent 50%),
    radial-gradient(ellipse at 80% 50%, var(--fog-dense) 0%, transparent 50%),
    radial-gradient(ellipse at 50% 100%, var(--fog-dense) 0%, transparent 40%);
}

@media (prefers-reduced-motion: no-preference) {
  .fog-overlay {
    animation: fog-drift 60s linear infinite;
  }
}

/* === CRT SCANLINES (Optional toggle) === */

.crt-effect::after {
  content: '';
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: repeating-linear-gradient(
    0deg,
    transparent,
    transparent 2px,
    rgba(0, 0, 0, 0.1) 2px,
    rgba(0, 0, 0, 0.1) 4px
  );
  pointer-events: none;
  z-index: var(--z-tooltip);
}
