/* ============================================================
   animations.css — Keyframes & Transitions
   All animation definitions in one place.
   ============================================================ */

/* ── Keyframes ── */
@keyframes blink {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0; }
}

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

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

@keyframes pulse-dot {
  0%, 100% {
    opacity: 1;
    box-shadow: 0 0 0 0 rgba(57, 255, 131, 0.4);
  }
  50% {
    opacity: 0.8;
    box-shadow: 0 0 0 4px rgba(57, 255, 131, 0);
  }
}

/* ── Cursor blink ── */
.terminal__cursor {
  animation: blink 1s step-end infinite;
}

/* ── Terminal lines (JS-driven via .is-visible) ── */
.terminal__line.is-visible,
.terminal__output.is-visible {
  animation: fadeIn 0.15s ease forwards;
}

/* ── Section reveal on scroll ── */
.section {
  opacity: 0;
  transform: translateY(16px);
  transition:
    opacity var(--transition-slow),
    transform var(--transition-slow);
}

.section.is-visible {
  opacity: 1;
  transform: translateY(0);
}

/* ── Skill cards stagger ── */
.skill-card {
  opacity: 0;
  transform: translateY(8px);
  transition:
    opacity 0.4s ease,
    transform 0.4s ease,
    background var(--transition-normal);
}

.skill-card.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.skill-card:nth-child(1) { transition-delay: 0ms; }
.skill-card:nth-child(2) { transition-delay: 60ms; }
.skill-card:nth-child(3) { transition-delay: 120ms; }
.skill-card:nth-child(4) { transition-delay: 180ms; }
.skill-card:nth-child(5) { transition-delay: 240ms; }
.skill-card:nth-child(6) { transition-delay: 300ms; }

/* ── Cloud cards stagger ── */
.cloud-card {
  opacity: 0;
  transform: translateY(8px);
  transition:
    opacity 0.4s ease,
    transform 0.4s ease,
    background var(--transition-normal);
}

.cloud-card.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.cloud-card:nth-child(1) { transition-delay: 0ms; }
.cloud-card:nth-child(2) { transition-delay: 80ms; }
.cloud-card:nth-child(3) { transition-delay: 160ms; }

/* ── Timeline items stagger ── */
.timeline__item {
  opacity: 0;
  transform: translateX(-8px);
  transition:
    opacity 0.4s ease,
    transform 0.4s ease;
}

.timeline__item.is-visible {
  opacity: 1;
  transform: translateX(0);
}

.timeline__item:nth-child(1) { transition-delay: 0ms; }
.timeline__item:nth-child(2) { transition-delay: 100ms; }
.timeline__item:nth-child(3) { transition-delay: 200ms; }

/* ── Topbar ── */
.topbar {
  animation: fadeIn 0.6s ease forwards;
}
