.fade-in { animation: fadeIn 1s ease forwards; }
@keyframes fadeIn { from {opacity:0;} to {opacity:1;} }

/* Glitch effect for neon headers */
.glitch {
  position: relative;
  color: #0ff;
  text-shadow: 0.05em 0 0 #f0f, -0.03em -0.04em 0 #0f0, 0.03em 0.04em 0 #00f;
  animation: glitch 1s infinite;
}

@keyframes glitch {
  0% { text-shadow: 0.05em 0 0 #f0f, -0.03em -0.04em 0 #0f0, 0.03em 0.04em 0 #00f; }
  20% { text-shadow: -0.05em -0.025em 0 #f0f, 0.025em 0.035em 0 #0f0, -0.035em -0.05em 0 #00f; }
  40% { text-shadow: 0.035em 0.025em 0 #f0f, -0.025em -0.035em 0 #0f0, 0.05em 0.05em 0 #00f; }
  60% { text-shadow: 0.05em 0.035em 0 #f0f, -0.05em -0.05em 0 #0f0, -0.025em -0.025em 0 #00f; }
  80% { text-shadow: -0.025em -0.025em 0 #f0f, 0.05em 0.05em 0 #0f0, 0.025em 0 0 #00f; }
  100% { text-shadow: 0.05em 0 0 #f0f, -0.03em -0.04em 0 #0f0, 0.03em 0.04em 0 #00f; }
}

.fade-up {
  opacity: 0;
  transform: translateY(20px);
  animation: fadeUp 0.8s ease forwards;
}

@keyframes fadeUp {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}