/* ============================================================
   ANLGRAM Intelligence — Animations
   ============================================================ */

/* ── Entrance Animations ──────────────────────────────────── */
@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

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

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

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

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

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

/* ── Glow / Pulse ─────────────────────────────────────────── */
@keyframes glowPulse {
  0%, 100% { box-shadow: 0 0 20px rgba(0,136,204,0.3), 0 0 60px rgba(0,136,204,0.1); }
  50%       { box-shadow: 0 0 30px rgba(0,136,204,0.5), 0 0 80px rgba(0,136,204,0.2); }
}

@keyframes cyanPulse {
  0%, 100% { box-shadow: 0 0 16px rgba(0,207,255,0.3); }
  50%       { box-shadow: 0 0 28px rgba(0,207,255,0.6); }
}

@keyframes shimmer {
  0%   { background-position: -400px 0; }
  100% { background-position: 400px 0; }
}

/* ── Network Graph Animations ─────────────────────────────── */
@keyframes nodeFloat {
  0%, 100% { transform: translateY(0px); }
  50%       { transform: translateY(-6px); }
}

@keyframes lineDash {
  to { stroke-dashoffset: 0; }
}

@keyframes dataFlow {
  0%   { opacity: 0; transform: scale(0.5); }
  50%  { opacity: 1; }
  100% { opacity: 0; transform: scale(1.5); }
}

/* ── Number Counter ───────────────────────────────────────── */
@keyframes countUp {
  from { opacity: 0; transform: translateY(8px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ── Particle / Star Field ────────────────────────────────── */
@keyframes starTwinkle {
  0%, 100% { opacity: 0.2; }
  50%       { opacity: 0.8; }
}

@keyframes particleFloat {
  0%   { transform: translateY(0) translateX(0); opacity: 0; }
  10%  { opacity: 1; }
  90%  { opacity: 1; }
  100% { transform: translateY(-120px) translateX(30px); opacity: 0; }
}

/* ── Spinner ──────────────────────────────────────────────── */
@keyframes spin {
  to { transform: rotate(360deg); }
}

.spinner {
  display: inline-block;
  width: 16px; height: 16px;
  border: 2px solid var(--border-default);
  border-top-color: var(--ton-blue);
  border-radius: 50%;
  animation: spin 0.7s linear infinite;
}

/* ── Skeleton Loading ─────────────────────────────────────── */
.skeleton {
  background: linear-gradient(
    90deg,
    var(--bg-card) 25%,
    var(--bg-card-hover) 50%,
    var(--bg-card) 75%
  );
  background-size: 800px 100%;
  animation: shimmer 1.5s infinite linear;
  border-radius: var(--radius-sm);
}

/* ── Animation Classes ────────────────────────────────────── */
.animate-fade-in   { animation: fadeIn 0.4s ease forwards; }
.animate-fade-up   { animation: fadeUp 0.5s ease forwards; }
.animate-fade-down { animation: fadeDown 0.4s ease forwards; }
.animate-scale-in  { animation: scaleIn 0.3s ease forwards; }
.animate-slide-left  { animation: slideInLeft 0.4s ease forwards; }
.animate-slide-right { animation: slideInRight 0.4s ease forwards; }

/* Staggered delays */
.delay-1 { animation-delay: 0.05s; }
.delay-2 { animation-delay: 0.1s; }
.delay-3 { animation-delay: 0.15s; }
.delay-4 { animation-delay: 0.2s; }
.delay-5 { animation-delay: 0.25s; }
.delay-6 { animation-delay: 0.3s; }

/* ── Hover Transitions ────────────────────────────────────── */
.hover-lift { transition: transform 0.2s ease, box-shadow 0.2s ease; }
.hover-lift:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); }

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

/* ── Chart Animations ─────────────────────────────────────── */
@keyframes chartGrow {
  from { clip-path: inset(0 100% 0 0); }
  to   { clip-path: inset(0 0% 0 0); }
}

/* ── Toast Notifications ──────────────────────────────────── */
@keyframes toastIn {
  from { opacity: 0; transform: translateX(100%); }
  to   { opacity: 1; transform: translateX(0); }
}

@keyframes toastOut {
  from { opacity: 1; transform: translateX(0); }
  to   { opacity: 0; transform: translateX(100%); }
}

.toast-container {
  position: fixed;
  top: var(--space-4);
  right: var(--space-4);
  z-index: 9999;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.toast {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-3) var(--space-4);
  background: var(--bg-card);
  border: 1px solid var(--border-default);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  font-size: var(--text-sm);
  animation: toastIn 0.3s ease forwards;
  min-width: 300px;
}

.toast.toast-success { border-left: 3px solid var(--green); }
.toast.toast-error   { border-left: 3px solid var(--red); }
.toast.toast-info    { border-left: 3px solid var(--ton-blue); }
