/* ============================================================
   NEBA – animations.css
   All keyframes and animation utility classes
   ============================================================ */

/* ── Page entrance ───────────────────────────────────────────── */
@keyframes page-enter {
  from { opacity:0; transform:translateY(20px); }
  to   { opacity:1; transform:translateY(0); }
}
.page-enter { animation: page-enter .5s cubic-bezier(.4,0,.2,1) both; }

/* ── Fade variants ───────────────────────────────────────────── */
@keyframes fade-up   { from{opacity:0;transform:translateY(26px)} to{opacity:1;transform:translateY(0)} }
@keyframes fade-down { from{opacity:0;transform:translateY(-26px)} to{opacity:1;transform:translateY(0)} }
@keyframes fade-left { from{opacity:0;transform:translateX(26px)} to{opacity:1;transform:translateX(0)} }
@keyframes fade-right{ from{opacity:0;transform:translateX(-26px)} to{opacity:1;transform:translateX(0)} }
@keyframes fade-in   { from{opacity:0} to{opacity:1} }
@keyframes fade-out  { from{opacity:1} to{opacity:0} }
@keyframes scale-in  { from{opacity:0;transform:scale(.88)} to{opacity:1;transform:scale(1)} }

.a-fade-up    { animation:fade-up    .6s cubic-bezier(.34,1.56,.64,1) both; }
.a-fade-down  { animation:fade-down  .6s cubic-bezier(.34,1.56,.64,1) both; }
.a-fade-left  { animation:fade-left  .6s cubic-bezier(.34,1.56,.64,1) both; }
.a-fade-right { animation:fade-right .6s cubic-bezier(.34,1.56,.64,1) both; }
.a-fade-in    { animation:fade-in    .4s ease both; }
.a-scale-in   { animation:scale-in   .4s cubic-bezier(.34,1.56,.64,1) both; }

/* Stagger delays */
.a-d1 { animation-delay:.08s; }
.a-d2 { animation-delay:.16s; }
.a-d3 { animation-delay:.24s; }
.a-d4 { animation-delay:.32s; }
.a-d5 { animation-delay:.40s; }
.a-d6 { animation-delay:.48s; }
.a-d7 { animation-delay:.56s; }
.a-d8 { animation-delay:.64s; }

/* ── Float (for hero elements) ───────────────────────────────── */
@keyframes float-y {
  0%,100% { transform:translateY(0); }
  50%      { transform:translateY(-10px); }
}
.float { animation:float-y 4s ease-in-out infinite; }
.float-slow { animation:float-y 6s ease-in-out infinite; }

/* ── Pulse glow ──────────────────────────────────────────────── */
@keyframes pulse-glow {
  0%,100% { box-shadow:0 0 20px rgba(124,92,252,.2); }
  50%      { box-shadow:0 0 40px rgba(124,92,252,.45); }
}
.pulse-glow { animation:pulse-glow 3s ease-in-out infinite; }

/* ── Shimmer (loading) ───────────────────────────────────────── */
@keyframes shimmer {
  0%   { background-position:200% 0; }
  100% { background-position:-200% 0; }
}

/* ── Ring pulse (landing hero) ───────────────────────────────── */
@keyframes ring-pulse {
  0%,100% { transform:translate(-50%,-50%) scale(1);   opacity:.7; }
  50%      { transform:translate(-50%,-50%) scale(1.06); opacity:.3; }
}

/* ── Particle drift ──────────────────────────────────────────── */
@keyframes particle-drift {
  0%   { transform:translateY(0) translateX(0) rotate(0deg); opacity:.8; }
  33%  { transform:translateY(-22px) translateX(10px) rotate(120deg); }
  66%  { transform:translateY(10px) translateX(-8px) rotate(240deg); }
  100% { transform:translateY(0) translateX(0) rotate(360deg); opacity:.8; }
}

/* ── Card hover lift (utility) ───────────────────────────────── */
.hover-lift { transition:transform .25s cubic-bezier(.34,1.56,.64,1), box-shadow .25s ease; }
.hover-lift:hover { transform:translateY(-6px); box-shadow:0 18px 48px rgba(0,0,0,.35); }

/* ── Bounce in ───────────────────────────────────────────────── */
@keyframes bounce-in {
  0%   { transform:scale(0); }
  60%  { transform:scale(1.08); }
  80%  { transform:scale(.97); }
  100% { transform:scale(1); }
}
.a-bounce { animation:bounce-in .5s cubic-bezier(.34,1.56,.64,1) both; }

/* ── Slide up ────────────────────────────────────────────────── */
@keyframes slide-up {
  from { transform:translateY(100%); opacity:0; }
  to   { transform:translateY(0);    opacity:1; }
}
.a-slide-up { animation:slide-up .4s cubic-bezier(.34,1.56,.64,1) both; }

/* ── Gradient move (hero text bg) ───────────────────────────── */
@keyframes grad-move {
  0%   { background-position:0% 50%; }
  50%  { background-position:100% 50%; }
  100% { background-position:0% 50%; }
}
.grad-animate {
  background-size:200% 200%;
  animation:grad-move 5s ease infinite;
}

/* ── Rotation ────────────────────────────────────────────────── */
@keyframes rotate-360 { to { transform:rotate(360deg); } }
@keyframes counter-rotate { to { transform:rotate(-360deg); } }

/* ── Text type cursor ────────────────────────────────────────── */
@keyframes blink { 0%,100%{opacity:1} 50%{opacity:0} }
.cursor-blink::after {
  content:'|'; animation:blink 1s step-end infinite; color:var(--violet);
}

/* ── Success check ───────────────────────────────────────────── */
@keyframes check-draw {
  from { stroke-dashoffset:50; }
  to   { stroke-dashoffset:0; }
}

/* ── Shake (error) ───────────────────────────────────────────── */
@keyframes shake {
  0%,100% { transform:translateX(0); }
  20%     { transform:translateX(-8px); }
  40%     { transform:translateX(8px); }
  60%     { transform:translateX(-6px); }
  80%     { transform:translateX(6px); }
}
.a-shake { animation:shake .4s ease; }

/* ── Number counter ──────────────────────────────────────────── */
@keyframes count-up {
  from { opacity:0; transform:translateY(10px); }
  to   { opacity:1; transform:translateY(0); }
}
.a-count { animation:count-up .6s ease both; }

/* ── Dot loader ──────────────────────────────────────────────── */
@keyframes dot-bounce {
  0%,80%,100% { transform:scale(0); }
  40%          { transform:scale(1); }
}
.dot-loader { display:flex; gap:6px; align-items:center; justify-content:center; }
.dot-loader span {
  width:8px; height:8px; border-radius:50%;
  background:var(--violet); animation:dot-bounce 1.2s infinite ease-in-out both;
}
.dot-loader span:nth-child(1){ animation-delay:-.32s; }
.dot-loader span:nth-child(2){ animation-delay:-.16s; }

/* ── Progress bar ────────────────────────────────────────────── */
@keyframes progress-fill {
  from { width:0; }
}
.progress-bar-track {
  height:4px; background:var(--border); border-radius:2px; overflow:hidden;
}
.progress-bar-fill {
  height:100%; background:var(--g-main); border-radius:2px;
  animation:progress-fill .8s ease both;
}

/* ── Wave underline ──────────────────────────────────────────── */
.wave-underline {
  position:relative; display:inline-block;
}
.wave-underline::after {
  content:''; position:absolute; bottom:-4px; left:0; right:0;
  height:3px; background:var(--g-main); border-radius:2px;
  transform:scaleX(0); transform-origin:left;
  transition:transform .35s cubic-bezier(.34,1.56,.64,1);
}
.wave-underline:hover::after { transform:scaleX(1); }

/* ── Typewriter (landing headline) ──────────────────────────── */
@keyframes typewriter {
  from { clip-path:inset(0 100% 0 0); }
  to   { clip-path:inset(0 0% 0 0); }
}
.typewriter { animation:typewriter 1.2s steps(20,end) both; }
