/* ===== 粒子旋转 ===== */
@keyframes spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}
@keyframes spinReverse {
  from { transform: rotate(0deg); }
  to   { transform: rotate(-360deg); }
}

/* ===== 脉冲 ===== */
@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%       { opacity: 0.6; transform: scale(0.95); }
}

/* ===== 浮动 ===== */
@keyframes float {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(-12px); }
}

/* ===== 节点闪烁 ===== */
@keyframes nodePulse {
  0%, 100% { opacity: 0.4; transform: scale(1); }
  50%       { opacity: 1; transform: scale(1.4); }
}

/* ===== 流光边框 ===== */
@keyframes borderFlow {
  0%   { background-position: 0% 50%; }
  50%  { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

/* ===== 滚动箭头 ===== */
@keyframes scrollBounce {
  0%, 100% { transform: translateY(0); opacity: 1; }
  50%       { transform: translateY(8px); opacity: 0.5; }
}

/* ===== 徽章点闪烁 ===== */
@keyframes dotBlink {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0.3; }
}

/* ===== 合作伙伴滚动 ===== */
@keyframes marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
@keyframes marqueeReverse {
  from { transform: translateX(-50%); }
  to   { transform: translateX(0); }
}

/* ===== 图表柱子入场 ===== */
@keyframes barGrow {
  from { height: 0; }
  to   { height: var(--h); }
}
