/* ==========================================================================
   LAVA CASCADE — Animations & scroll reveals
   ========================================================================== */

/* torch flicker on the glow accents */
@keyframes flicker {
  0%, 100% { opacity: 1; }
  45% { opacity: 0.85; }
  55% { opacity: 0.95; }
  70% { opacity: 0.8; }
}

/* status pulse */
@keyframes pulse-ring {
  0%   { box-shadow: 0 0 0 0 rgba(52,228,168,.55); }
  70%  { box-shadow: 0 0 0 8px rgba(52,228,168,0); }
  100% { box-shadow: 0 0 0 0 rgba(52,228,168,0); }
}
.sc-status .pulse, .hero-badge .dot { animation: pulse-ring 2s infinite; }

/* subtle float on the hero card */
@keyframes float-soft {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-10px); }
}
.server-card { animation: float-soft 6s ease-in-out infinite; }

/* torch glow flicker */
.hero h1 .glow { animation: flicker 4s infinite ease-in-out; }

/* spark bars in the dashboard breathe */
@keyframes spark-pulse {
  0%, 100% { transform: scaleY(0.7); }
  50% { transform: scaleY(1); }
}

/* scroll reveal — elements start hidden, .in reveals them */
[data-reveal] {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.7s var(--ease-out), transform 0.7s var(--ease-out);
  transition-delay: var(--reveal-delay, 0s);
  will-change: opacity, transform;
}
[data-reveal].in { opacity: 1; transform: translateY(0); }

/* price count-up flash */
@keyframes num-flash {
  0% { color: var(--torch-soft); text-shadow: 0 0 20px var(--torch-glow); }
  100% { color: var(--ink); text-shadow: none; }
}
.quote-price .amt.flash { animation: num-flash 0.4s var(--ease); }

/* block light-up ripple when preset picked */
@keyframes block-pop {
  0% { transform: translateY(0) scale(1); }
  50% { transform: translateY(-6px) scale(1.04); }
  100% { transform: translateY(0) scale(1); }
}
.ram-block.pop { animation: block-pop 0.35s var(--ease); }

/* nav slide down on load */
@keyframes nav-drop {
  from { transform: translateY(-100%); }
  to   { transform: translateY(0); }
}
.nav { animation: nav-drop 0.6s var(--ease-out) both; }

/* hero staggered entrance */
@keyframes rise {
  from { opacity: 0; transform: translateY(30px); }
  to   { opacity: 1; transform: translateY(0); }
}
.hero-badge  { animation: rise 0.7s var(--ease-out) 0.1s both; }
.hero h1     { animation: rise 0.7s var(--ease-out) 0.2s both; }
.hero-lead   { animation: rise 0.7s var(--ease-out) 0.35s both; }
.hero-cta    { animation: rise 0.7s var(--ease-out) 0.5s both; }
.hero-note   { animation: rise 0.7s var(--ease-out) 0.6s both; }
.server-card { animation: rise 0.9s var(--ease-out) 0.4s both, float-soft 6s ease-in-out 1.2s infinite; }

/* mobile menu slide */
.nav-links.mobile-open { animation: rise 0.3s var(--ease-out) both; }

/* respect reduced motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  [data-reveal] { opacity: 1; transform: none; }
}
