/* animations.css - keyframes & transition helpers */

/* entry animations */
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(32px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}
@keyframes fadeDown {
  from { opacity: 0; transform: translateY(-16px); }
  to   { opacity: 1; transform: translateY(0); }
}
/* scroll reveal */
.reveal {
  opacity: 0;
  transform: translateY(36px);
  transition: opacity 0.75s var(--ease-out), transform 0.75s var(--ease-out);
}
.reveal.visible {
  opacity: 1;
  transform: none;
}
.reveal[data-delay="1"] { transition-delay: 0.1s; }
.reveal[data-delay="2"] { transition-delay: 0.2s; }
.reveal[data-delay="3"] { transition-delay: 0.3s; }
/* hero */
@keyframes heroDrift {
  from { transform: translate(-50%, -50%) skewX(-1.5deg) scale(1); }
  to   { transform: translate(-50%, -52%) skewX(1.5deg) scale(1.02); }
}
@keyframes scrollPulse {
  0%, 100% { opacity: 1; transform: scaleY(1); }
  50%       { opacity: 0.3; transform: scaleY(0.6); }
}
/* ticker */
@keyframes tickerScroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
/* status dot */
@keyframes pulseDot {
  0%, 100% { opacity: 1; box-shadow: 0 0 6px var(--accent3); }
  50%       { opacity: 0.35; box-shadow: none; }
}
/* terminal cursor */
@keyframes termBlink {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0; }
}
/* toast notifications */
@keyframes toastIn {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes toastOut {
  from { opacity: 1; transform: translateY(0); }
  to   { opacity: 0; transform: translateY(-10px); }
}
/* threat map node pulse */
@keyframes nodePulse {
  0%   { transform: scale(1); opacity: 1; }
  60%  { transform: scale(2.8); opacity: 0.2; }
  100% { transform: scale(1); opacity: 1; }
}
/* number counter spin-up helper class */
.counting { color: var(--accent4) !important; }
