/* ══════════════════════════════════════════
   SCROLL REVEAL
══════════════════════════════════════════ */
.fade-up {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}
.fade-up.visible {
  opacity: 1;
  transform: translateY(0);
}
.delay-1 { transition-delay: 0.1s; }
.delay-2 { transition-delay: 0.2s; }
.delay-3 { transition-delay: 0.3s; }
.delay-4 { transition-delay: 0.45s; }
.delay-5 { transition-delay: 0.6s; }

.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}
.reveal.visible {
  opacity: 1;
  transform: translateY(0);
}

/* Stagger children inside a grid */
.services-grid .service-card:nth-child(1) { transition-delay: 0.05s; }
.services-grid .service-card:nth-child(2) { transition-delay: 0.12s; }
.services-grid .service-card:nth-child(3) { transition-delay: 0.19s; }
.services-grid .service-card:nth-child(4) { transition-delay: 0.26s; }
.services-grid .service-card:nth-child(5) { transition-delay: 0.33s; }
.services-grid .service-card:nth-child(6) { transition-delay: 0.40s; }

.projects-grid .project-card:nth-child(1) { transition-delay: 0.05s; }
.projects-grid .project-card:nth-child(2) { transition-delay: 0.12s; }
.projects-grid .project-card:nth-child(3) { transition-delay: 0.19s; }
.projects-grid .project-card:nth-child(4) { transition-delay: 0.26s; }
.projects-grid .project-card:nth-child(5) { transition-delay: 0.33s; }
.projects-grid .project-card:nth-child(6) { transition-delay: 0.40s; }
.projects-grid .project-card:nth-child(7) { transition-delay: 0.47s; }
.projects-grid .project-card:nth-child(8) { transition-delay: 0.54s; }

.stack-grid .stack-item:nth-child(odd)  { transition-delay: 0.05s; }
.stack-grid .stack-item:nth-child(even) { transition-delay: 0.12s; }

/* ══════════════════════════════════════════
   HERO LINE ANIMATION
══════════════════════════════════════════ */
.hero-title .line-wrap span {
  display: inline-block;
  transform: translateY(100%);
  opacity: 0;
  transition: transform 0.8s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.8s ease;
}
.hero-title.visible .line-wrap:nth-child(1) span { transform: translateY(0); opacity: 1; transition-delay: 0.05s; }
.hero-title.visible .line-wrap:nth-child(2) span { transform: translateY(0); opacity: 1; transition-delay: 0.2s; }
.hero-title.visible .line-wrap:nth-child(3) span { transform: translateY(0); opacity: 1; transition-delay: 0.35s; }
