/* ========== 全局动画定义 ========== */
/* 统一 600ms cubic-bezier(0.4, 0, 0.2, 1)，流畅舒缓 */

/* ---- 入场动画 ---- */

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(16px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeInDown {
  from {
    opacity: 0;
    transform: translateY(-16px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* ---- 工作区展开动画 ---- */

@keyframes workAreaOpen {
  from {
    opacity: 0;
    transform: translateY(32px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* ---- 脉冲动画（进行中状态） ---- */

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.4; }
}

/* ---- 流水线连线流动 ---- */

@keyframes flowLine {
  from { background-position: 0 0; }
  to { background-position: 24px 0; }
}

/* ---- 打字指示器 ---- */

@keyframes typingDot {
  0%, 60%, 100% { opacity: 0.3; transform: translateY(0); }
  30% { opacity: 1; transform: translateY(-3px); }
}

/* ---- 日志抽屉滑入 ---- */

@keyframes drawerSlideUp {
  from { transform: translateY(100%); }
  to { transform: translateY(0); }
}

/* ---- 应用类 ---- */

.anim-fade-in {
  animation: fadeIn var(--duration-slow) var(--ease-smooth) both;
}

.anim-fade-in-up {
  animation: fadeInUp var(--duration-slow) var(--ease-smooth) both;
}

.anim-fade-in-down {
  animation: fadeInDown var(--duration-normal) var(--ease-smooth) both;
}

/* Stagger 入场：通过 animation-delay 控制 */
.stagger-1 { animation-delay: 100ms; }
.stagger-2 { animation-delay: 200ms; }
.stagger-3 { animation-delay: 300ms; }
.stagger-4 { animation-delay: 400ms; }
