/* SDZ motion 令牌层（HUI-2823）。
 *
 * pattern-level 移植自 Whirl（MIT，whirlchat/whirl）的统一 motion primitive：
 *   apps/v2/lib/motion.ts（rise/paneRise/paneFlip 的「一个应用的入场」方法）、
 *   apps/v2/app/globals.css:916-968（page-slide 的时长分级与 reduced-motion 关停）。
 * 移植的是方法（时长分级、缓动极少、reduced-motion 全量关停、落定卸下合成负担），
 * 不是代码——数值由本计划冻结，令牌主权归 HUI-2576。
 *
 * 纪律（与 Whirl motion.ts 同源）：
 *   - 全站只用本文件的 3 档时长与 2 条缓动，组件禁止自造曲线；
 *   - 本文件不定义任何颜色，色值一律引用既有 :root 令牌（--accent 等）；
 *   - 落定态不残留 filter/will-change（Whirl SHED_BLUR，motion.ts:18-29）。
 */

:root {
  /* 时长三档：快=小动作（淡入淡出/指示），中=标准入场，慢=面级强调入场。 */
  --sdz-motion-fast: 120ms;
  --sdz-motion-base: 180ms;
  --sdz-motion-slow: 280ms;

  /* 缓动两条：标准（常规过渡）、强调（有轻微回弹感的入场）。 */
  --sdz-ease-standard: cubic-bezier(0.2, 0, 0, 1);
  --sdz-ease-emphasized: cubic-bezier(0.3, 0, 0.2, 1);
}

/* enter 态工具类：挂上即声明入场过渡，具体 from→to 由页面层切换类名驱动。 */

/* 淡入：opacity-only。最便宜的一条，指示与轻内容用。 */
.sdz-motion-fade {
  transition:
    opacity var(--sdz-motion-fast) var(--sdz-ease-standard);
}

/* 升起：标准入场（opacity + 轻位移）。对应 Whirl paneRise 的去 blur 版。 */
.sdz-motion-rise {
  transition:
    opacity var(--sdz-motion-base) var(--sdz-ease-standard),
    translate var(--sdz-motion-base) var(--sdz-ease-standard);
}

/* 缩放：面级强调入场。对应 Whirl paneFlip 的进入节奏（慢于 rise，落定更稳）。 */
.sdz-motion-scale {
  transition:
    opacity var(--sdz-motion-slow) var(--sdz-ease-emphasized),
    scale var(--sdz-motion-slow) var(--sdz-ease-emphasized);
}

/* reduced-motion：全局兜底（SDZ-F2 由「三工具类」扩为 * 级，对齐 Whirl
 * globals.css:966-968 的全量关停方法）——App 面两页必装本文件，覆盖真实生效的
 * 全部过渡（face 切换/rail 折叠/标签淡出/mode/发送/托盘）。只压过程帧时长、
 * 不动落定态目标值，功能可见性不受损；transition-delay 一并归零，否则隐藏面
 * visibility 的延迟退场在 reduce 下仍滞留 tab 序 180ms。0.01ms（非 0）保
 * transitionend 事件照常派发，不悬挂依赖过渡完成的监听者。 */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-delay: 0ms !important;
    scroll-behavior: auto !important;
  }
}
