/* ── Loader ─────────────────────────────────────────────────── */
@keyframes loader-reveal {
  0%   { opacity: 0; transform: scale(0.97); }
  100% { opacity: 1; transform: scale(1); }
}
@keyframes char-up {
  0%   { opacity: 0; transform: translateY(0.45em); filter: blur(3px); }
  100% { opacity: 1; transform: translateY(0); filter: blur(0); }
}
@keyframes loader-bar {
  0%   { transform: scaleX(0); }
  100% { transform: scaleX(1); }
}

/* ── Aurora / mesh blobs ────────────────────────────────────── */
@keyframes blob-a {
  0%   { transform: translate(0,0) scale(1); }
  34%  { transform: translate(7vw,-5vh) scale(1.1); }
  67%  { transform: translate(-4vw,8vh) scale(0.93); }
  100% { transform: translate(0,0) scale(1); }
}
@keyframes blob-b {
  0%   { transform: translate(0,0) scale(1); }
  34%  { transform: translate(-8vw,6vh) scale(0.96); }
  67%  { transform: translate(5vw,-7vh) scale(1.07); }
  100% { transform: translate(0,0) scale(1); }
}
@keyframes blob-c {
  0%   { transform: translate(0,0) scale(1); }
  50%  { transform: translate(4vw,9vh) scale(1.05); }
  100% { transform: translate(0,0) scale(1); }
}
@keyframes blob-d {
  0%   { transform: translate(0,0) scale(1); }
  50%  { transform: translate(-5vw,-5vh) scale(1.08); }
  100% { transform: translate(0,0) scale(1); }
}

/* ── Misc ───────────────────────────────────────────────────── */
@keyframes blink {
  0%,100% { opacity: 1; }
  50%      { opacity: 0; }
}
@keyframes scan {
  0%   { left: -100%; }
  100% { left: 130%; }
}
@keyframes flash-in {
  0%  { opacity: 0; }
  12% { opacity: 1; }
  20% { opacity: 0.5; }
  30% { opacity: 1; }
}
@keyframes tag-float {
  0%,100% { transform: translateY(0); }
  50%      { transform: translateY(-5px); }
}
@keyframes dot-pulse {
  0%,100% { transform: translate(-50%,-50%) scale(1); opacity: 1; }
  50%      { transform: translate(-50%,-50%) scale(1.3); opacity: 0.7; }
}

/* ── Reveal ─────────────────────────────────────────────────── */
.rv { opacity: 0; transform: translateY(20px); }
.rv.in {
  opacity: 1; transform: translateY(0);
  transition: opacity 0.8s var(--expo), transform 0.8s var(--expo);
}
.rv.in.d1 { transition-delay: 0.07s; }
.rv.in.d2 { transition-delay: 0.14s; }
.rv.in.d3 { transition-delay: 0.21s; }
.rv.in.d4 { transition-delay: 0.28s; }

/* ── Hero lines ─────────────────────────────────────────────── */
.hli {
  display: block;
  transform: translateY(108%);
  transition: transform 0.95s var(--expo);
}
.hli.up { transform: translateY(0); }

/* ── Service rows ───────────────────────────────────────────── */
.srow { opacity: 0; transform: translateX(-8px); }
.srow.in {
  opacity: 1; transform: translateX(0);
  transition: opacity 0.55s var(--expo), transform 0.55s var(--expo),
              background 0.4s var(--expo);
}
.srow.flash .srow-title { animation: flash-in 0.35s ease-out forwards; }

/* ── Venture cards ──────────────────────────────────────────── */
.vcard { opacity: 0; transform: translateY(16px); }
.vcard.in {
  opacity: 1; transform: translateY(0);
  transition: opacity 0.7s var(--expo), transform 0.7s var(--expo),
              box-shadow 0.35s var(--expo), background 0.35s;
}

/* ── Overlay ────────────────────────────────────────────────── */
.ov-el {
  opacity: 0; transform: translateY(12px);
  transition: opacity 0.5s var(--expo), transform 0.5s var(--expo);
}
#overlay.open .ov-el                { opacity: 1; transform: none; }
#overlay.open .ov-el:nth-child(1)   { transition-delay: 0.08s; }
#overlay.open .ov-el:nth-child(2)   { transition-delay: 0.14s; }
#overlay.open .ov-el:nth-child(3)   { transition-delay: 0.20s; }
#overlay.open .ov-el:nth-child(4)   { transition-delay: 0.26s; }
#overlay.open .ov-el:nth-child(5)   { transition-delay: 0.31s; }
