/* ══════════════════════════════════════════
   LINEIGE — ANIMATIONS & REVEAL
══════════════════════════════════════════ */

/* ── Hero entrance ── */
@keyframes slide-up {
  from { opacity: 0; transform: translateY(28px); }
  to   { opacity: 1; transform: none; }
}

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

/* ── Floating orbs ── */
@keyframes orb1 {
  from { transform: translate3d(0, 0, 0)   scale(1);    }
  to   { transform: translate3d(-40px, 30px, 0) scale(1.1);  }
}
@keyframes orb2 {
  from { transform: translate3d(0, 0, 0)   scale(1);    }
  to   { transform: translate3d(30px, -40px, 0) scale(1.15); }
}
@keyframes orb3 {
  from { transform: translate3d(0, 0, 0)   scale(1);    }
  to   { transform: translate3d(-20px, 20px, 0) scale(0.9); }
}

/* ── Scroll indicator line pulse ── */
@keyframes scroll-line {
  0%   { transform: scaleY(0);   transform-origin: top; opacity: 1; }
  50%  { transform: scaleY(1);   transform-origin: top; opacity: 1; }
  51%  { transform: scaleY(1);   transform-origin: bottom; }
  100% { transform: scaleY(0);   transform-origin: bottom; opacity: 0; }
}

/* ── Scroll reveal states ── */
.reveal {
  opacity: 0;
  transform: translateY(22px);
  transition:
    opacity   0.72s var(--ease-out-quint),
    transform 0.72s var(--ease-out-quint);
}
.reveal.on {
  opacity: 1;
  transform: none;
}

.reveal-left {
  opacity: 0;
  transform: translateX(-24px);
  transition:
    opacity   0.72s var(--ease-out-quint),
    transform 0.72s var(--ease-out-quint);
}
.reveal-left.on {
  opacity: 1;
  transform: none;
}

.reveal-right {
  opacity: 0;
  transform: translateX(24px);
  transition:
    opacity   0.72s var(--ease-out-quint),
    transform 0.72s var(--ease-out-quint);
}
.reveal-right.on {
  opacity: 1;
  transform: none;
}

/* Stagger delay helpers — applied by JS via inline style */
/* .reveal[style="--delay: Nms"] → JS adds: transition-delay: var(--delay) */
