@keyframes gradient-shift {
  0%   { background-position: 0% 50%; }
  50%  { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

@keyframes mesh-drift {
  0%   { transform: translate(0, 0) scale(1); }
  33%  { transform: translate(2%, -2%) scale(1.04); }
  66%  { transform: translate(-1%, 2%) scale(0.98); }
  100% { transform: translate(0, 0) scale(1); }
}

@keyframes live-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(16,185,129,0.55); }
  70%  { box-shadow: 0 0 0 9px rgba(16,185,129,0); }
  100% { box-shadow: 0 0 0 0 rgba(16,185,129,0); }
}

@keyframes spin { to { transform: rotate(360deg); } }

@keyframes orb-drift-1 {
  0%   { transform: translate(0, 0) scale(1); }
  25%  { transform: translate(3%, 4%) scale(1.06); }
  50%  { transform: translate(-2%, 6%) scale(0.96); }
  75%  { transform: translate(4%, -2%) scale(1.04); }
  100% { transform: translate(0, 0) scale(1); }
}

@keyframes orb-drift-2 {
  0%   { transform: translate(0, 0) scale(1); }
  30%  { transform: translate(-4%, -3%) scale(1.08); }
  60%  { transform: translate(3%, -5%) scale(0.94); }
  100% { transform: translate(0, 0) scale(1); }
}

@keyframes orb-drift-3 {
  0%   { transform: translate(0, 0) scale(1); }
  40%  { transform: translate(5%, 3%) scale(1.05); }
  80%  { transform: translate(-3%, 4%) scale(0.97); }
  100% { transform: translate(0, 0) scale(1); }
}

@keyframes cube-float {
  0%   { transform: translateY(0px); }
  50%  { transform: translateY(-18px); }
  100% { transform: translateY(0px); }
}

@keyframes cube-rotate {
  from { transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); }
  to   { transform: rotateX(360deg) rotateY(240deg) rotateZ(120deg); }
}

@keyframes ring-float-a {
  0%   { transform: translateY(0px) rotate(0deg); }
  50%  { transform: translateY(-22px) rotate(180deg); }
  100% { transform: translateY(0px) rotate(360deg); }
}

@keyframes ring-float-b {
  0%   { transform: translateY(0px) rotate(0deg) scale(1); }
  33%  { transform: translateY(16px) rotate(120deg) scale(1.08); }
  66%  { transform: translateY(-12px) rotate(240deg) scale(0.94); }
  100% { transform: translateY(0px) rotate(360deg) scale(1); }
}

@keyframes sphere-float {
  0%   { transform: translateY(0px) translateX(0px); }
  25%  { transform: translateY(-14px) translateX(8px); }
  50%  { transform: translateY(-24px) translateX(-4px); }
  75%  { transform: translateY(-10px) translateX(-12px); }
  100% { transform: translateY(0px) translateX(0px); }
}

@keyframes pyramid-rotate {
  0%   { transform: rotateY(0deg) rotateX(12deg); }
  100% { transform: rotateY(360deg) rotateX(12deg); }
}

@keyframes chakra-spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

@keyframes hero-label-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(0,122,255,0.45); }
  70%  { box-shadow: 0 0 0 8px rgba(0,122,255,0); }
  100% { box-shadow: 0 0 0 0 rgba(0,122,255,0); }
}

@keyframes cursor-blink {
  0%, 49% { opacity: 1; }
  50%, 100% { opacity: 0; }
}

@keyframes scroll-dot-move {
  0%   { transform: translateY(-100%); opacity: 0; }
  20%  { opacity: 1; }
  80%  { opacity: 1; }
  100% { transform: translateY(100%); opacity: 0; }
}

.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition:
    opacity 700ms var(--ease-expo),
    transform 700ms var(--ease-expo);
  will-change: opacity, transform;
}
.reveal[data-reveal="blur"] {
  filter: blur(8px);
  transition:
    opacity 800ms var(--ease-expo),
    transform 800ms var(--ease-expo),
    filter 800ms var(--ease-expo);
}
.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
  filter: none;
}

.reveal-stagger > * {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 600ms var(--ease-expo), transform 600ms var(--ease-expo);
}
.reveal-stagger.is-visible > * { opacity: 1; transform: translateY(0); }
.reveal-stagger.is-visible > *:nth-child(1) { transition-delay: 0ms; }
.reveal-stagger.is-visible > *:nth-child(2) { transition-delay: 80ms; }
.reveal-stagger.is-visible > *:nth-child(3) { transition-delay: 160ms; }
.reveal-stagger.is-visible > *:nth-child(4) { transition-delay: 240ms; }
.reveal-stagger.is-visible > *:nth-child(5) { transition-delay: 320ms; }
.reveal-stagger.is-visible > *:nth-child(6) { transition-delay: 400ms; }

.reveal-delay-1 { transition-delay: 100ms; }
.reveal-delay-2 { transition-delay: 200ms; }
.reveal-delay-3 { transition-delay: 300ms; }
.reveal-delay-4 { transition-delay: 400ms; }
.reveal-delay-5 { transition-delay: 500ms; }
