@keyframes gradientShift {
  0%   { background-position: 0% 0%, 0% 0%, 0% 0%, 0% 0%, 0% 0%, 0% 0%; }
  50%  { background-position: 8% 4%, -4% 8%, 4% -4%, -3% 3%, 5% 2%, 0% 0%; }
  100% { background-position: -8% -4%, 4% -8%, -4% 4%, 3% -3%, -5% -2%, 0% 0%; }
}


@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.3; }
}

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

@keyframes fadeUp {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes scrollBounce {
  0%, 100% { transform: rotate(45deg) translate(0, 0); opacity: 0.4; }
  50% { transform: rotate(45deg) translate(0, 6px); opacity: 1; }
}

/* ── 几何元素浮动 ── */
@keyframes geoFloatA {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50% { transform: translateY(-24px) rotate(12deg); }
}

@keyframes geoFloatB {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50% { transform: translateY(20px) rotate(-8deg); }
}

@keyframes geoFloatC {
  0%, 100% { transform: translateX(0) translateY(0); }
  33% { transform: translateX(16px) translateY(-10px); }
  66% { transform: translateX(-12px) translateY(6px); }
}

/* ── 脉冲环扩散 ── */
@keyframes pulseRing {
  0% { transform: scale(0.8); opacity: 0.12; }
  100% { transform: scale(1.8); opacity: 0; }
}
