/* ═══════════════════════════════════════
   动画样式
   ═══════════════════════════════════════ */

/* 脉冲点（连接状态） */
@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.4; }
}
.pulse-dot { animation: pulse 2s ease-in-out infinite; }

/* 刷新按钮旋转 */
@keyframes rotate360 {
  to { transform: rotate(360deg); }
}
.refreshing #refreshIcon {
  animation: rotate360 0.8s linear infinite;
}

/* 骨架屏脉冲 */
@keyframes skeletonPulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}

/* Toast 消息 */
@keyframes toastSlideIn {
  from { opacity: 0; transform: translateY(-20px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes toastSlideOut {
  from { opacity: 1; transform: translateY(0); }
  to { opacity: 0; transform: translateY(-20px); }
}

.toast-enter {
  animation: toastSlideIn 0.3s ease-out;
}
.toast-exit {
  animation: toastSlideOut 0.3s ease-in forwards;
}
