/* ============================================================
   animations.css - 所有@keyframes动画定义（统一管理）
   ============================================================ */

/* 旋转动画（统一定义，多处复用） */
@keyframes spin{to{transform:rotate(360deg)}}

/* 模态框入场 */
@keyframes modalIn{from{opacity:0;transform:translateY(16px) scale(0.98)}to{opacity:1;transform:translateY(0) scale(1)}}

/* Toast滑入 */
@keyframes slideIn{from{transform:translateX(100%) scale(0.95);opacity:0}to{transform:translateX(0) scale(1);opacity:1}}

/* 确认框入场 */
@keyframes confirmIn{from{transform:scale(0.92);opacity:0}to{transform:scale(1);opacity:1}}

/* 卡片入场（交错动画） */
@keyframes cardIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

/* 卡片滑入 */
@keyframes cardSlideIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}

/* 树状图滑入 */
@keyframes treeSlideIn{from{opacity:0;transform:translateX(-16px)}to{opacity:1;transform:translateX(0)}}

/* 视图淡入 */
@keyframes viewFadeIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}

/* 标签内容淡入 */
@keyframes tabContentFade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}

/* 骨架屏闪烁 */
@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}

/* 承接脉冲动画 */
@keyframes acceptPulse{0%{box-shadow:0 0 0 0 rgba(48,209,88,0.4)}50%{box-shadow:0 0 0 12px rgba(48,209,88,0.15)}100%{box-shadow:0 0 0 0 rgba(48,209,88,0)}}
