/* =========================================================
   animations.css — Professor Dr. S.M.G. Kibria
   Keyframes + GSAP reveal classes
   ========================================================= */

/* -----------------------------
   Keyframe Definitions
----------------------------- */
@keyframes pulse-aura {
  0%, 100% { opacity: 0.55; transform: scale(1); }
  50%      { opacity: 0.95; transform: scale(1.08); }
}

@keyframes scroll-line {
  0%   { transform: scaleY(0); transform-origin: top; }
  50%  { transform: scaleY(1); transform-origin: top; }
  51%  { transform: scaleY(1); transform-origin: bottom; }
  100% { transform: scaleY(0); transform-origin: bottom; }
}

@keyframes heartbeat {
  0%, 100% { transform: scale(1); }
  15%      { transform: scale(1.08); }
  30%      { transform: scale(1); }
  45%      { transform: scale(1.08); }
  60%      { transform: scale(1); }
}

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

@keyframes float-up {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-8px); }
}

@keyframes glow-pulse {
  0%, 100% { filter: drop-shadow(0 0 6px rgba(201,168,76,0.4)); }
  50%      { filter: drop-shadow(0 0 20px rgba(201,168,76,0.9)); }
}

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

@keyframes particle-flow {
  0%   { offset-distance: 0%; opacity: 0; }
  10%  { opacity: 1; }
  90%  { opacity: 1; }
  100% { offset-distance: 100%; opacity: 0; }
}

@keyframes fade-up {
  0%   { opacity: 0; transform: translateY(30px); }
  100% { opacity: 1; transform: translateY(0); }
}

@keyframes fade-in {
  0%   { opacity: 0; }
  100% { opacity: 1; }
}

/* -----------------------------
   Reveal Base States
   (initial states pre-scroll, GSAP/JS flips them)
----------------------------- */
[data-reveal] {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out);
  will-change: opacity, transform;
}

[data-reveal].is-visible {
  opacity: 1;
  transform: translateY(0);
}

[data-reveal="fade"] {
  transform: none;
}

[data-reveal="left"] { transform: translateX(-40px); }
[data-reveal="left"].is-visible { transform: translateX(0); }

[data-reveal="right"] { transform: translateX(40px); }
[data-reveal="right"].is-visible { transform: translateX(0); }

[data-reveal="scale"] { transform: scale(0.9); }
[data-reveal="scale"].is-visible { transform: scale(1); }

/* Stagger support */
[data-reveal-stagger] > * {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.6s var(--ease-out), transform 0.6s var(--ease-out);
}

[data-reveal-stagger].is-visible > * {
  opacity: 1;
  transform: translateY(0);
}

[data-reveal-stagger].is-visible > *:nth-child(1) { transition-delay: 0.05s; }
[data-reveal-stagger].is-visible > *:nth-child(2) { transition-delay: 0.12s; }
[data-reveal-stagger].is-visible > *:nth-child(3) { transition-delay: 0.19s; }
[data-reveal-stagger].is-visible > *:nth-child(4) { transition-delay: 0.26s; }
[data-reveal-stagger].is-visible > *:nth-child(5) { transition-delay: 0.33s; }
[data-reveal-stagger].is-visible > *:nth-child(6) { transition-delay: 0.40s; }
[data-reveal-stagger].is-visible > *:nth-child(7) { transition-delay: 0.47s; }
[data-reveal-stagger].is-visible > *:nth-child(8) { transition-delay: 0.54s; }
[data-reveal-stagger].is-visible > *:nth-child(9) { transition-delay: 0.61s; }
[data-reveal-stagger].is-visible > *:nth-child(10) { transition-delay: 0.68s; }
[data-reveal-stagger].is-visible > *:nth-child(11) { transition-delay: 0.75s; }
[data-reveal-stagger].is-visible > *:nth-child(n+12) { transition-delay: 0.82s; }

/* -----------------------------
   SVG Draw Init State
----------------------------- */
.draw-path {
  stroke-dasharray: var(--path-len, 1000);
  stroke-dashoffset: var(--path-len, 1000);
}
.draw-path.is-drawn {
  animation: draw-stroke 2.4s var(--ease-out) forwards;
}

/* -----------------------------
   Hero element initial states (GSAP-targeted)
----------------------------- */
.hero__badge,
.hero__title .hero__line,
.hero__name,
.hero__subtitle,
.hero__credentials,
.hero__actions {
  opacity: 0;
}

.hero--static .hero__badge,
.hero--static .hero__title .hero__line,
.hero--static .hero__name,
.hero--static .hero__subtitle,
.hero--static .hero__credentials,
.hero--static .hero__actions {
  opacity: 1;
}

.hero__portrait {
  opacity: 0;
  transform: scale(1.03);
}
.hero--static .hero__portrait {
  opacity: 1;
  transform: none;
}

/* -----------------------------
   Reduced Motion Fallback
----------------------------- */
@media (prefers-reduced-motion: reduce) {
  [data-reveal],
  [data-reveal-stagger] > *,
  .hero__badge,
  .hero__title .hero__line,
  .hero__name,
  .hero__subtitle,
  .hero__credentials,
  .hero__actions,
  .hero__portrait {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  .hero__portrait-disc,
  .hero__portrait-disc::before,
  .hero__ring,
  .hero__orbit,
  .hero__cred,
  .hero__bg-image,
  .hero__badge-dot {
    animation: none !important;
  }
}
