/* 生成物：由 tools/web/sync-prototype-css.mjs 从 docs/prototypes/2026-09-21-阳光玻璃忠实延展/baseline/style-p-sunlit/motion.css 逐字复制，勿手改。
   原型是唯一视觉真值；要改视觉先改原型，再跑 `node tools/web/sync-prototype-css.mjs .` 同步。 */
/* 风格 P · 阳光玻璃 · 动效（与 A2 逐字相同：同一套弹簧与关键帧；检查脚本要求每风格自带本文件，故不 @import）
   纪律：只放 --m- 变量与 @keyframes m-*；关键帧只动 transform／opacity／filter。
   组件级挂接（transition、animation 的引用）写在 styles.css 末节。
   物理：三档弹簧，用阻尼弹簧解析解采样成 CSS linear()，不用 ease 族。
     snappy  临界阻尼，300ms，无过冲——按压、悬停、徽章形变
     smooth  ζ≈.84，420ms，过冲 0.6%——玻璃显形、坞形变、面板展开
     bouncy  ζ≈.57，560ms，过冲 11.6%——只给「成就时刻」：落章、接单成功
   显形：玻璃不是淡入，是从模糊＋缩小「凝结」（materialize）。 */
:root {
  --m-fast: 120ms;
  --m-snappy-t: 300ms;
  --m-smooth-t: 420ms;
  --m-bouncy-t: 560ms;
  --m-spin-t: 700ms;
  --m-spring-snappy: linear(0, 0.017, 0.061, 0.12, 0.189, 0.261, 0.334, 0.404, 0.471, 0.533, 0.59, 0.641, 0.688, 0.729, 0.765, 0.797, 0.826, 0.85, 0.872, 0.89, 0.906, 0.92, 0.932, 0.942, 0.951, 0.958, 0.965, 0.97, 0.975, 0.979, 0.982, 0.985, 0.987, 0.989, 0.991, 0.992, 0.994, 0.995, 0.995, 0.996, 1);
  --m-spring-smooth: linear(0, 0.0061, 0.0229, 0.0483, 0.0805, 0.118, 0.1593, 0.2033, 0.249, 0.2957, 0.3424, 0.3888, 0.4343, 0.4785, 0.5211, 0.5619, 0.6008, 0.6376, 0.6722, 0.7046, 0.7349, 0.763, 0.789, 0.8129, 0.8348, 0.8549, 0.8731, 0.8897, 0.9047, 0.9181, 0.9302, 0.941, 0.9506, 0.9591, 0.9666, 0.9732, 0.9789, 0.9839, 0.9882, 0.9919, 0.9951, 0.9977, 0.9999, 1.0017, 1.0032, 1.0044, 1.0053, 1.006, 1);
  --m-spring-bouncy: linear(0, 0.0128, 0.0478, 0.1005, 0.1665, 0.2419, 0.3233, 0.4075, 0.4921, 0.5749, 0.6541, 0.7284, 0.7968, 0.8585, 0.9133, 0.9609, 1.0013, 1.0348, 1.0618, 1.0826, 1.0979, 1.1081, 1.1139, 1.1159, 1.1147, 1.1108, 1.1049, 1.0973, 1.0887, 1.0793, 1.0696, 1.0597, 1.0501, 1.0409, 1.0322, 1.0242, 1.017, 1.0106, 1.005, 1.0002, 0.9963, 0.9931, 0.9906, 0.9888, 0.9876, 0.9868, 0.9866, 0.9867, 1);
  --m-ease-out: cubic-bezier(.2, .8, .2, 1);
  --m-lift: -2px;
  --m-press: .97;
}
/* 玻璃凝结显形：模糊 12 → 0、缩放 .92 → 1、透明 0 → 1 */
@keyframes m-materialize {
  from { opacity: 0; transform: scale(.92); filter: blur(12px); }
  to { opacity: 1; transform: none; filter: blur(0); }
}
/* 内容随玻璃显形后进入：上移 8px 渐显 */
@keyframes m-rise {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: none; }
}
/* 页面入场：区块错峰渐显 */
@keyframes m-enter {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: none; }
}
/* 落章：一次过冲落下，−10° → −8° */
@keyframes m-stamp {
  0% { opacity: 0; transform: rotate(-10deg) scale(1.35); }
  60% { opacity: 1; }
  100% { opacity: 1; transform: rotate(-8deg) scale(1); }
}
/* 金高光沿卡边走一圈：conic 遮罩旋转 */
@keyframes m-halo {
  from { opacity: 0; transform: rotate(0turn); }
  15% { opacity: 1; }
  85% { opacity: 1; }
  to { opacity: 0; transform: rotate(1turn); }
}
/* 按压时玻璃从内部发光：光斑从按压点扩散 */
@keyframes m-glow {
  from { opacity: .9; transform: scale(0); }
  to { opacity: 0; transform: scale(3.2); }
}
/* 等待动点 */
@keyframes m-dots {
  0%, 80%, 100% { opacity: .25; transform: scale(.8); }
  40% { opacity: 1; transform: none; }
}
/* 忙碌转环：只转 transform，线性匀速 */
@keyframes m-spin {
  to { transform: rotate(1turn); }
}
/* 团团待机呼吸 */
@keyframes m-breathe {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-3px); }
}
/* 账本条与轨道线的填充：从左／从上长出来 */
@keyframes m-fill {
  from { transform: scaleX(0); }
  to { transform: scaleX(1); }
}
/* 索引圆变勾：一次小过冲 */
@keyframes m-pop {
  0% { transform: scale(.6); opacity: 0; }
  60% { transform: scale(1.08); opacity: 1; }
  100% { transform: none; opacity: 1; }
}
/* 焦散：整层线性平移恰好一个平铺周期（光层 1200×800，影层 900×1500），首尾像素相同、无缝循环。
   速度（回修十一加速 1.4 倍）：光层 √(1200²+800²)/43s ≈ 34px/s，影层 √(900²+1500²)/80s ≈ 22px/s，方向相差约 90°，周期比 43∶80 非整数。
   光层另绕自身摆 ±3°（styles.css 规则 10d）：摆动与平移必须同写一条关键帧（元素只有一个 transform），
   四个中间帧的平移量按比例给足，整体仍是匀速直线；一个平移周期恰好摆一个来回，首尾同帧。 */
@keyframes m-caustic-a {
  0% { transform: translate3d(0, 0, 0) rotate(0deg); }
  25% { transform: translate3d(-300px, 200px, 0) rotate(3deg); }
  50% { transform: translate3d(-600px, 400px, 0) rotate(0deg); }
  75% { transform: translate3d(-900px, 600px, 0) rotate(-3deg); }
  100% { transform: translate3d(-1200px, 800px, 0) rotate(0deg); }
}
@keyframes m-caustic-b {
  from { transform: translate3d(0, 0, 0); }
  to { transform: translate3d(900px, 1500px, 0); }
}
/* 太阳呼吸（回修十一，白晨选定方案 C）：12s 一次，只动 transform／opacity；幅度压在「盯着看才数得出周期」这一档 */
@keyframes m-sun {
  0%, 100% { transform: scale(1); opacity: .85; }
  50% { transform: scale(1.04); opacity: 1; }
}
/* 减弱动态效果：全部关闭，只留 120ms 渐变 */
@media (prefers-reduced-motion: reduce) {
  :root {
    --m-snappy-t: 120ms; --m-smooth-t: 120ms; --m-bouncy-t: 120ms;
    --m-spring-snappy: linear(0, 1); --m-spring-smooth: linear(0, 1); --m-spring-bouncy: linear(0, 1);
    --m-lift: 0px; --m-press: 1;
  }
  *, *::before, *::after { animation-duration: 0s !important; animation-iteration-count: 1 !important; transition-duration: var(--m-fast) !important; }
}
