weifuwu 0.60.0 → 0.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +23 -7
  2. package/dist/ai/agent.d.ts +29 -1
  3. package/dist/ai/client.d.ts +15 -0
  4. package/dist/ai/index.d.ts +2 -1
  5. package/dist/client/diff.d.ts +15 -0
  6. package/dist/client/hydration.d.ts +13 -0
  7. package/dist/client/index.d.ts +4 -0
  8. package/dist/client/index.js +3 -2214
  9. package/dist/client/middleware/api.d.ts +2 -0
  10. package/dist/client/motion.d.ts +8 -0
  11. package/dist/client/registry.d.ts +34 -0
  12. package/dist/client/render.d.ts +13 -14
  13. package/dist/client/types.d.ts +28 -0
  14. package/dist/client/ui.d.ts +56 -0
  15. package/dist/components/Badge/Badge.d.ts +1 -1
  16. package/dist/components/Button/Button.d.ts +3 -0
  17. package/dist/components/Card/Card.d.ts +2 -0
  18. package/dist/components/Confirm/Confirm.d.ts +8 -1
  19. package/dist/components/Dropdown/Dropdown.d.ts +2 -0
  20. package/dist/components/Icon/Icon.d.ts +19 -0
  21. package/dist/components/Input/Input.d.ts +5 -0
  22. package/dist/components/Modal/Modal.d.ts +2 -0
  23. package/dist/components/PageHeader/PageHeader.d.ts +2 -0
  24. package/dist/components/StatCard/StatCard.d.ts +2 -0
  25. package/dist/components/Table/Table.d.ts +4 -0
  26. package/dist/components/Toast/Toast.d.ts +13 -1
  27. package/dist/components/index.d.ts +2 -0
  28. package/dist/components/index.js +1 -3381
  29. package/dist/components/style.css +282 -134
  30. package/dist/core/router.d.ts +10 -10
  31. package/dist/core/serve.d.ts +1 -1
  32. package/dist/index.d.ts +3 -1
  33. package/dist/index.js +523 -11
  34. package/dist/layout/weifuwu-layout.css +106 -17
  35. package/dist/messager/index.d.ts +107 -0
  36. package/dist/types.d.ts +2 -2
  37. package/dist/user/index.d.ts +3 -2
  38. package/package.json +1 -1
@@ -14,13 +14,18 @@
14
14
  /* 品牌(覆盖 --wf-brand-500 即换主题色,全站跟随) */
15
15
  --wf-brand-500: #4f6ef7;
16
16
  --wf-brand-600: #3b5ae0;
17
+ --wf-brand-700: #4338ca; /* 品牌文字色(浅底可读,配 --wf-color-primary-text) */
17
18
  --wf-brand-50: #eef1ff;
18
19
 
19
20
  /* 语义原始色 */
20
21
  --wf-green-500: #22c55e; --wf-green-50: #f0fdf4;
22
+ --wf-green-700: #15803d; /* 语义文字色(浅底可读) */
21
23
  --wf-amber-500: #f59e0b; --wf-amber-50: #fffbeb;
24
+ --wf-amber-700: #b45309; /* 语义文字色(浅底可读) */
22
25
  --wf-red-500: #ef4444; --wf-red-50: #fef2f2;
26
+ --wf-red-700: #b91c1c; /* 语义文字色(浅底可读) */
23
27
  --wf-sky-500: #1677ff; --wf-sky-50: #e6f4ff;
28
+ --wf-sky-700: #0369a1; /* 语义文字色(浅底可读) */
24
29
 
25
30
  /* 中性 */
26
31
  --wf-slate-900: #0f172a; --wf-slate-500: #64748b; --wf-slate-400: #94a3b8;
@@ -36,6 +41,7 @@
36
41
  --wf-dark-slate-900: #f1f5f9; --wf-dark-slate-500: #94a3b8; --wf-dark-slate-400: #64748b;
37
42
  --wf-dark-slate-300: #475569; --wf-dark-slate-200: #334155; --wf-dark-slate-100: #1e293b;
38
43
  --wf-dark-slate-50: #0f172a; --wf-dark-bg: #0f172a;
44
+ --wf-dark-overlay: rgba(0, 0, 0, 0.6); /* 暗色遮罩(比亮色更深,压住暗底内容) */
39
45
  --wf-dark-surface-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
40
46
  --wf-dark-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2);
41
47
  --wf-dark-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
@@ -135,6 +141,11 @@
135
141
  --wf-font-size-3xl: 24px;
136
142
  --wf-font-size-4xl: 30px;
137
143
  --wf-font-size-5xl: 36px;
144
+ --wf-font-size-display: 30px; /* 顶级页面标题(PageHeader display 档,配负字距) */
145
+
146
+ /* ── 表头/分组标题:文本变换与字距 token 化(CJK 默认 none/0,英文可覆盖 uppercase/0.5px) ── */
147
+ --wf-heading-case: none;
148
+ --wf-heading-tracking: 0;
138
149
 
139
150
  --wf-font-weight-normal: 400;
140
151
  --wf-font-weight-medium: 500;
@@ -157,10 +168,36 @@
157
168
  --wf-transition-timing: ease;
158
169
  --wf-transition: var(--wf-transition-duration) var(--wf-transition-timing);
159
170
 
171
+ /* ── 动效语言:时长阶梯 + 缓动曲线 + 位移量(组件动效统一引用,不各自硬编码) ── */
172
+ --wf-dur-fast: 120ms;
173
+ --wf-dur-base: 200ms;
174
+ --wf-dur-slow: 300ms;
175
+
176
+ --wf-ease-out: cubic-bezier(0.16, 1, 0.3, 1); /* 入场:快出缓停 */
177
+ --wf-ease-in: cubic-bezier(0.4, 0, 1, 1); /* 退场:渐入加速 */
178
+ --wf-ease-snap: cubic-bezier(0.34, 1.56, 0.64, 1); /* 选中/弹跳 */
179
+
180
+ --wf-motion-sm: 4px;
181
+ --wf-motion-md: 8px;
182
+ --wf-motion-lg: 24px; /* drawer 全幅位移 */
183
+
160
184
  /* ── 色彩 — 信息(补充) ── */
161
185
  --wf-color-info: var(--wf-sky-500);
162
186
  --wf-color-info-bg: var(--wf-sky-50);
163
187
 
188
+ /* ── 色彩 — 语义文字色(浅底/白底可读,WCAG AA ≥ 4.5:1;实心色上的文字用 on-brand) ── */
189
+ --wf-color-primary-text: var(--wf-brand-700);
190
+ --wf-color-success-text: var(--wf-green-700);
191
+ --wf-color-warning-text: var(--wf-amber-700);
192
+ --wf-color-error-text: var(--wf-red-700);
193
+ --wf-color-info-text: var(--wf-sky-700);
194
+
195
+ /* ── 色彩 — 实心填充上的文字/图标(primary/success 等实心底色) ── */
196
+ --wf-color-on-brand: #fff;
197
+
198
+ /* ── 浮层遮罩(Modal/Drawer overlay,暗色经 --wf-dark-overlay 映射) ── */
199
+ --wf-overlay: rgba(0, 0, 0, 0.4);
200
+
164
201
  /* ── 表单控件 ── */
165
202
  --wf-accent-color: var(--wf-color-primary);
166
203
  --wf-caret-color: var(--wf-color-primary);
@@ -186,6 +223,9 @@
186
223
  --wf-letter-spacing: normal;
187
224
  --wf-letter-spacing-wide: 0.5px;
188
225
  --wf-letter-spacing-wider: 1px;
226
+
227
+ /* ── 数字 ── */
228
+ --wf-nums: 'tabular-nums'; /* 数字等宽(统计/表格数值防抖动) */
189
229
  }
190
230
  }
191
231
 
@@ -236,6 +276,14 @@
236
276
  --wf-shadow: var(--wf-dark-shadow);
237
277
  --wf-shadow-md: var(--wf-dark-shadow-md);
238
278
  --wf-shadow-lg: var(--wf-dark-shadow-lg);
279
+
280
+ --wf-color-primary-text: var(--wf-dark-brand-500);
281
+ --wf-color-success-text: var(--wf-dark-green-500);
282
+ --wf-color-warning-text: var(--wf-dark-amber-500);
283
+ --wf-color-error-text: var(--wf-dark-red-500);
284
+ --wf-color-info-text: var(--wf-dark-sky-500);
285
+
286
+ --wf-overlay: var(--wf-dark-overlay);
239
287
  }
240
288
 
241
289
  /* ── 激活方式二:系统暗色偏好(data-theme="light" 可强制亮色) ── */
@@ -275,6 +323,14 @@
275
323
  --wf-shadow: var(--wf-dark-shadow);
276
324
  --wf-shadow-md: var(--wf-dark-shadow-md);
277
325
  --wf-shadow-lg: var(--wf-dark-shadow-lg);
326
+
327
+ --wf-color-primary-text: var(--wf-dark-brand-500);
328
+ --wf-color-success-text: var(--wf-dark-green-500);
329
+ --wf-color-warning-text: var(--wf-dark-amber-500);
330
+ --wf-color-error-text: var(--wf-dark-red-500);
331
+ --wf-color-info-text: var(--wf-dark-sky-500);
332
+
333
+ --wf-overlay: var(--wf-dark-overlay);
278
334
  }
279
335
  }
280
336
  }
@@ -303,7 +359,7 @@ body {
303
359
  }
304
360
 
305
361
  a {
306
- color: var(--wf-color-primary);
362
+ color: var(--wf-color-primary-text);
307
363
  text-decoration: none;
308
364
  }
309
365
  a:hover {
@@ -360,7 +416,7 @@ button {
360
416
  }
361
417
  button:hover {
362
418
  border-color: var(--wf-color-primary);
363
- color: var(--wf-color-primary);
419
+ color: var(--wf-color-primary-text);
364
420
  }
365
421
 
366
422
  /* 键盘焦点:button 与 [tabindex] 统一 focus ring(仅键盘触发,鼠标点击不闪) */
@@ -383,8 +439,10 @@ button:focus-visible,
383
439
  .wf-tag-close,
384
440
  .wf-checkbox,
385
441
  .wf-switch,
386
- .wf-radio {
442
+ .wf-radio,
443
+ .wf-datepicker-cell {
387
444
  min-height: 44px;
445
+ min-width: 44px;
388
446
  }
389
447
  }
390
448
 
@@ -419,8 +477,8 @@ th {
419
477
  font-weight: var(--wf-font-weight-medium);
420
478
  font-size: var(--wf-font-size-xs);
421
479
  color: var(--wf-color-text-tertiary);
422
- text-transform: uppercase;
423
- letter-spacing: 0.5px;
480
+ text-transform: var(--wf-heading-case); /* CJK 默认 none,英文可覆盖 uppercase */
481
+ letter-spacing: var(--wf-heading-tracking);
424
482
  padding: var(--wf-space) var(--wf-space-sm);
425
483
  border-bottom: var(--wf-border-width) solid var(--wf-color-border);
426
484
  background: var(--wf-color-bg-secondary);
@@ -687,6 +745,30 @@ code {
687
745
  .wf-rounded-md { border-radius: var(--wf-radius-md); }
688
746
  .wf-rounded-lg { border-radius: var(--wf-radius-lg); }
689
747
 
748
+ /* ── hover 抬升(Card/StatCard 可点击/悬停共用,阴影 + 上移 + 焦点环) ── */
749
+ .wf-elevate {
750
+ transition: box-shadow var(--wf-dur-fast) var(--wf-ease-out), transform var(--wf-dur-fast) var(--wf-ease-out);
751
+ }
752
+ .wf-elevate:hover {
753
+ box-shadow: var(--wf-shadow-md);
754
+ transform: translateY(-2px);
755
+ }
756
+ .wf-elevate:focus-visible {
757
+ outline: none;
758
+ box-shadow: var(--wf-shadow-md), var(--wf-focus-ring);
759
+ }
760
+
761
+ /* ── 面板入场:统一 scale+fade(面板族:dropdown/select/datepicker 从触发点下方弹出) ── */
762
+ .wf-panel-in {
763
+ animation: wf-panel-in var(--wf-dur-fast) var(--wf-ease-out);
764
+ transform-origin: top center;
765
+ }
766
+
767
+ @keyframes wf-panel-in {
768
+ from { opacity: 0; transform: translateY(-4px) scale(0.97); }
769
+ to { opacity: 1; transform: translateY(0) scale(1); }
770
+ }
771
+
690
772
  /* ── 聊天气泡 ──
691
773
  * 用法:wf-bubble(对方/AI)+ wf-bubble--own(自己)
692
774
  * 行布局用 wf-row + wf-gap/wf-mb 覆盖;文字用 wf-pre-wrap 已内建
@@ -706,7 +788,7 @@ code {
706
788
 
707
789
  .wf-bubble--own {
708
790
  background: var(--wf-color-primary);
709
- color: #fff;
791
+ color: var(--wf-color-on-brand);
710
792
  border-bottom-right-radius: var(--wf-radius-sm);
711
793
  }
712
794
 
@@ -979,8 +1061,8 @@ code {
979
1061
  font-size: var(--wf-font-size-xs);
980
1062
  font-weight: var(--wf-font-weight-medium);
981
1063
  color: var(--wf-color-text-tertiary);
982
- text-transform: uppercase;
983
- letter-spacing: 0.5px;
1064
+ text-transform: var(--wf-heading-case); /* CJK 默认 none,英文可覆盖 uppercase */
1065
+ letter-spacing: var(--wf-heading-tracking);
984
1066
  padding: var(--wf-space-md) var(--wf-space-sm) var(--wf-space-xs);
985
1067
  }
986
1068
 
@@ -1015,13 +1097,13 @@ code {
1015
1097
 
1016
1098
  .wf-nav-item--active {
1017
1099
  background: var(--wf-color-primary-bg);
1018
- color: var(--wf-color-primary);
1100
+ color: var(--wf-color-primary-text);
1019
1101
  font-weight: var(--wf-font-weight-medium);
1020
1102
  }
1021
1103
 
1022
1104
  .wf-nav-item--active:hover {
1023
1105
  background: var(--wf-color-primary-bg);
1024
- color: var(--wf-color-primary);
1106
+ color: var(--wf-color-primary-text);
1025
1107
  }
1026
1108
 
1027
1109
  .wf-nav-icon {
@@ -1097,18 +1179,25 @@ code {
1097
1179
  .wf-text-3xl { font-size: var(--wf-font-size-3xl); }
1098
1180
  .wf-text-4xl { font-size: var(--wf-font-size-4xl); }
1099
1181
  .wf-text-5xl { font-size: var(--wf-font-size-5xl); }
1182
+ .wf-text-display { font-size: var(--wf-font-size-display); }
1183
+
1184
+ /* ── 数字等宽(统计/表格数值防宽度抖动) ── */
1185
+
1186
+ .wf-nums {
1187
+ font-variant-numeric: var(--wf-nums);
1188
+ }
1100
1189
 
1101
1190
  /* ── 色阶 ── */
1102
1191
 
1103
1192
  .wf-text-secondary { color: var(--wf-color-text-secondary); }
1104
1193
  .wf-text-tertiary { color: var(--wf-color-text-tertiary); }
1105
1194
  .wf-text-disabled { color: var(--wf-color-text-disabled); }
1106
- .wf-text-brand { color: var(--wf-color-primary); } /* 兼容别名 → wf-text-primary */
1107
- .wf-text-primary { color: var(--wf-color-primary); }
1108
- .wf-text-success { color: var(--wf-color-success); }
1109
- .wf-text-warning { color: var(--wf-color-warning); }
1110
- .wf-text-error { color: var(--wf-color-error); }
1111
- .wf-text-info { color: var(--wf-color-info); }
1195
+ .wf-text-brand { color: var(--wf-color-primary-text); } /* 兼容别名 → wf-text-primary */
1196
+ .wf-text-primary { color: var(--wf-color-primary-text); }
1197
+ .wf-text-success { color: var(--wf-color-success-text); }
1198
+ .wf-text-warning { color: var(--wf-color-warning-text); }
1199
+ .wf-text-error { color: var(--wf-color-error-text); }
1200
+ .wf-text-info { color: var(--wf-color-info-text); }
1112
1201
 
1113
1202
  /* ── 字重 ── */
1114
1203
 
@@ -1253,7 +1342,7 @@ code {
1253
1342
  }
1254
1343
 
1255
1344
  .wf-prose a {
1256
- color: var(--wf-color-primary);
1345
+ color: var(--wf-color-primary-text);
1257
1346
  text-decoration: none;
1258
1347
  }
1259
1348
 
@@ -1306,16 +1395,16 @@ code {
1306
1395
  text-decoration: none;
1307
1396
  }
1308
1397
 
1309
- .wf-btn--primary { background: var(--wf-color-primary); color: #fff; border-color: var(--wf-color-primary); }
1398
+ .wf-btn--primary { background: var(--wf-color-primary); color: var(--wf-color-on-brand); border-color: var(--wf-color-primary); }
1310
1399
  .wf-btn--primary:hover { background: var(--wf-color-primary-hover); }
1311
1400
 
1312
1401
  .wf-btn--secondary { background: var(--wf-color-bg); color: var(--wf-color-text); border-color: var(--wf-color-border); }
1313
- .wf-btn--secondary:hover { border-color: var(--wf-color-primary); color: var(--wf-color-primary); }
1402
+ .wf-btn--secondary:hover { border-color: var(--wf-color-primary); color: var(--wf-color-primary-text); }
1314
1403
 
1315
- .wf-btn--ghost { background: transparent; color: var(--wf-color-primary); border-color: transparent; }
1404
+ .wf-btn--ghost { background: transparent; color: var(--wf-color-primary-text); border-color: transparent; }
1316
1405
  .wf-btn--ghost:hover { background: var(--wf-color-primary-bg); }
1317
1406
 
1318
- .wf-btn--danger { background: var(--wf-color-error); color: #fff; border-color: var(--wf-color-error); }
1407
+ .wf-btn--danger { background: var(--wf-color-error); color: var(--wf-color-on-brand); border-color: var(--wf-color-error); }
1319
1408
  .wf-btn--danger:hover { opacity: 0.9; }
1320
1409
 
1321
1410
  .wf-btn--sm { padding: var(--wf-space-xs) var(--wf-space-sm); font-size: var(--wf-font-size-xs); min-height: 28px; }
@@ -1325,8 +1414,28 @@ code {
1325
1414
 
1326
1415
  .wf-btn--loading { opacity: 0.7; pointer-events: none; }
1327
1416
 
1417
+ /* 加载 spinner:随文字色(primary 白字自动白色),尺寸稳定不抖 */
1418
+ .wf-btn-spinner {
1419
+ width: 14px;
1420
+ height: 14px;
1421
+ border: 2px solid currentColor;
1422
+ border-top-color: transparent;
1423
+ border-radius: 50%;
1424
+ animation: wf-btn-spin 0.6s linear infinite;
1425
+ flex-shrink: 0;
1426
+ }
1427
+
1428
+ @keyframes wf-btn-spin {
1429
+ to { transform: rotate(360deg); }
1430
+ }
1431
+
1328
1432
  .wf-btn:disabled { opacity: var(--wf-opacity-disabled); cursor: not-allowed; }
1329
1433
 
1434
+ /* 按压反馈(触屏/鼠标通用,reduced-motion 下由 _base.css 全局降级) */
1435
+ .wf-btn:active:not(:disabled) {
1436
+ transform: scale(0.98);
1437
+ }
1438
+
1330
1439
  /* weifuwu/components — Input */
1331
1440
 
1332
1441
  .wf-input-wrap {
@@ -1342,7 +1451,7 @@ code {
1342
1451
  }
1343
1452
 
1344
1453
  .wf-input-req {
1345
- color: var(--wf-color-error);
1454
+ color: var(--wf-color-error-text);
1346
1455
  margin-left: 2px;
1347
1456
  }
1348
1457
 
@@ -1395,7 +1504,7 @@ code {
1395
1504
 
1396
1505
  .wf-input-err {
1397
1506
  font-size: var(--wf-font-size-xs);
1398
- color: var(--wf-color-error);
1507
+ color: var(--wf-color-error-text);
1399
1508
  }
1400
1509
 
1401
1510
  .wf-input-hint {
@@ -1493,7 +1602,7 @@ code {
1493
1602
  }
1494
1603
 
1495
1604
  .wf-textarea-req {
1496
- color: var(--wf-color-error);
1605
+ color: var(--wf-color-error-text);
1497
1606
  margin-left: 2px;
1498
1607
  }
1499
1608
 
@@ -1529,7 +1638,7 @@ code {
1529
1638
 
1530
1639
  .wf-textarea-err {
1531
1640
  font-size: var(--wf-font-size-xs);
1532
- color: var(--wf-color-error);
1641
+ color: var(--wf-color-error-text);
1533
1642
  }
1534
1643
 
1535
1644
  .wf-textarea-hint {
@@ -1547,7 +1656,7 @@ code {
1547
1656
  }
1548
1657
 
1549
1658
  .wf-textarea-count--over {
1550
- color: var(--wf-color-error);
1659
+ color: var(--wf-color-error-text);
1551
1660
  }
1552
1661
 
1553
1662
  .wf-textarea--err .wf-textarea {
@@ -1570,7 +1679,7 @@ code {
1570
1679
  }
1571
1680
 
1572
1681
  .wf-select-req {
1573
- color: var(--wf-color-error);
1682
+ color: var(--wf-color-error-text);
1574
1683
  margin-left: 2px;
1575
1684
  }
1576
1685
 
@@ -1604,7 +1713,7 @@ code {
1604
1713
 
1605
1714
  .wf-select-err {
1606
1715
  font-size: var(--wf-font-size-xs);
1607
- color: var(--wf-color-error);
1716
+ color: var(--wf-color-error-text);
1608
1717
  }
1609
1718
 
1610
1719
  .wf-select--err .wf-select {
@@ -1666,6 +1775,9 @@ code {
1666
1775
  max-height: 240px;
1667
1776
  overflow-y: auto;
1668
1777
  z-index: var(--wf-z-dropdown);
1778
+ /* 面板族统一入场:wf-panel-in(scale+fade,Token 驱动) */
1779
+ animation: wf-panel-in var(--wf-dur-fast) var(--wf-ease-out);
1780
+ transform-origin: top center;
1669
1781
  }
1670
1782
 
1671
1783
  .wf-select-search-opt {
@@ -1679,7 +1791,7 @@ code {
1679
1791
  background: var(--wf-color-bg-tertiary);
1680
1792
  }
1681
1793
  .wf-select-search-opt--sel {
1682
- color: var(--wf-color-primary);
1794
+ color: var(--wf-color-primary-text);
1683
1795
  font-weight: var(--wf-font-weight-medium);
1684
1796
  }
1685
1797
  .wf-select-search-opt--dis {
@@ -1733,7 +1845,7 @@ code {
1733
1845
 
1734
1846
  .wf-checkbox-input:checked + .wf-checkbox-visual::after {
1735
1847
  content: '✓';
1736
- color: #fff;
1848
+ color: var(--wf-color-on-brand);
1737
1849
  font-size: 11px;
1738
1850
  font-weight: bold;
1739
1851
  }
@@ -1917,15 +2029,27 @@ code {
1917
2029
  user-select: none;
1918
2030
  }
1919
2031
  .wf-table-th--sortable:hover {
1920
- color: var(--wf-color-primary);
2032
+ color: var(--wf-color-primary-text);
1921
2033
  }
1922
2034
  .wf-table-th--sortable:focus-visible {
1923
2035
  outline: none;
1924
2036
  box-shadow: var(--wf-focus-ring);
1925
- color: var(--wf-color-primary);
2037
+ color: var(--wf-color-primary-text);
1926
2038
  }
1927
2039
  .wf-table-th--sorted {
1928
- color: var(--wf-color-primary);
2040
+ color: var(--wf-color-primary-text);
2041
+ }
2042
+
2043
+ /* 排序指示图标:随文字色,激活列高亮 */
2044
+ .wf-table-sort-icon {
2045
+ margin-left: var(--wf-gap-xs);
2046
+ opacity: 0.6;
2047
+ }
2048
+ .wf-table-sort-icon--active {
2049
+ opacity: 1;
2050
+ }
2051
+ .wf-table-th:hover .wf-table-sort-icon {
2052
+ opacity: 1;
1929
2053
  }
1930
2054
 
1931
2055
  .wf-table-tr:last-child .wf-table-td {
@@ -1953,11 +2077,11 @@ code {
1953
2077
  }
1954
2078
 
1955
2079
  .wf-modal--enter {
1956
- animation: wf-modal-fadein 0.2s ease-out;
2080
+ animation: wf-modal-fadein var(--wf-dur-base) var(--wf-ease-out);
1957
2081
  }
1958
2082
 
1959
2083
  .wf-modal--exit {
1960
- animation: wf-modal-fadeout 0.2s ease-out forwards;
2084
+ animation: wf-modal-fadeout var(--wf-dur-base) var(--wf-ease-in) forwards;
1961
2085
  }
1962
2086
 
1963
2087
  @keyframes wf-modal-fadein {
@@ -1973,7 +2097,7 @@ code {
1973
2097
  .wf-modal-overlay {
1974
2098
  position: fixed;
1975
2099
  inset: 0;
1976
- background: rgba(0, 0, 0, 0.4);
2100
+ background: var(--wf-overlay);
1977
2101
  z-index: -1;
1978
2102
  }
1979
2103
 
@@ -2057,7 +2181,7 @@ code {
2057
2181
  max-width: 400px;
2058
2182
  cursor: pointer;
2059
2183
  pointer-events: auto;
2060
- animation: wf-toast-in 0.2s ease;
2184
+ animation: wf-toast-in var(--wf-dur-base) var(--wf-ease-out);
2061
2185
  }
2062
2186
 
2063
2187
  @keyframes wf-toast-in {
@@ -2084,10 +2208,20 @@ code {
2084
2208
  to { opacity: 1; transform: translateY(0); }
2085
2209
  }
2086
2210
 
2087
- .wf-toast--success { background: var(--wf-color-success-bg); color: var(--wf-color-success); }
2088
- .wf-toast--error { background: var(--wf-color-error-bg); color: var(--wf-color-error); }
2089
- .wf-toast--warning { background: var(--wf-color-warning-bg); color: var(--wf-color-warning); }
2090
- .wf-toast--info { background: var(--wf-color-info-bg); color: var(--wf-color-info); }
2211
+ .wf-toast--success { background: var(--wf-color-success-bg); color: var(--wf-color-success-text); }
2212
+ .wf-toast--error { background: var(--wf-color-error-bg); color: var(--wf-color-error-text); }
2213
+ .wf-toast--warning { background: var(--wf-color-warning-bg); color: var(--wf-color-warning-text); }
2214
+ .wf-toast--info { background: var(--wf-color-info-bg); color: var(--wf-color-info-text); }
2215
+
2216
+ /* ── 退场:向右淡出(位置变体方向未细分,诚实裁剪) ── */
2217
+ .wf-toast-out {
2218
+ animation: wf-toast-out var(--wf-dur-base) var(--wf-ease-in) forwards;
2219
+ }
2220
+
2221
+ @keyframes wf-toast-out {
2222
+ from { opacity: 1; transform: translateX(0); }
2223
+ to { opacity: 0; transform: translateX(var(--wf-motion-md)); }
2224
+ }
2091
2225
 
2092
2226
  .wf-toast-icon {
2093
2227
  font-size: var(--wf-font-size-lg);
@@ -2099,6 +2233,30 @@ code {
2099
2233
  color: var(--wf-color-text);
2100
2234
  }
2101
2235
 
2236
+ /* 操作按钮(如"撤销"):语义色文字,点击不自动关闭 */
2237
+ .wf-toast-action {
2238
+ border: none;
2239
+ background: none;
2240
+ padding: 0;
2241
+ cursor: pointer;
2242
+ font-family: var(--wf-font-sans);
2243
+ font-size: var(--wf-font-size-sm);
2244
+ font-weight: var(--wf-font-weight-medium);
2245
+ color: var(--wf-color-primary-text);
2246
+ }
2247
+ .wf-toast-action:hover {
2248
+ text-decoration: underline;
2249
+ }
2250
+ .wf-toast-action:focus-visible {
2251
+ outline: none;
2252
+ box-shadow: var(--wf-focus-ring);
2253
+ border-radius: var(--wf-radius-sm);
2254
+ }
2255
+ .wf-toast-action--success { color: var(--wf-color-success-text); }
2256
+ .wf-toast-action--error { color: var(--wf-color-error-text); }
2257
+ .wf-toast-action--warning { color: var(--wf-color-warning-text); }
2258
+ .wf-toast-action--info { color: var(--wf-color-primary-text); }
2259
+
2102
2260
  /* weifuwu/components — Alert */
2103
2261
 
2104
2262
  .wf-alert {
@@ -2112,10 +2270,10 @@ code {
2112
2270
  line-height: var(--wf-line-height);
2113
2271
  }
2114
2272
 
2115
- .wf-alert--info { background: var(--wf-color-info-bg); color: var(--wf-color-info); }
2116
- .wf-alert--success { background: var(--wf-color-success-bg); color: var(--wf-color-success); }
2117
- .wf-alert--warning { background: var(--wf-color-warning-bg); color: var(--wf-color-warning); }
2118
- .wf-alert--error { background: var(--wf-color-error-bg); color: var(--wf-color-error); }
2273
+ .wf-alert--info { background: var(--wf-color-info-bg); color: var(--wf-color-info-text); }
2274
+ .wf-alert--success { background: var(--wf-color-success-bg); color: var(--wf-color-success-text); }
2275
+ .wf-alert--warning { background: var(--wf-color-warning-bg); color: var(--wf-color-warning-text); }
2276
+ .wf-alert--error { background: var(--wf-color-error-bg); color: var(--wf-color-error-text); }
2119
2277
 
2120
2278
  .wf-alert-icon {
2121
2279
  font-weight: var(--wf-font-weight-bold);
@@ -2241,10 +2399,15 @@ code {
2241
2399
  }
2242
2400
 
2243
2401
  .wf-tab--active {
2244
- color: var(--wf-color-primary);
2402
+ color: var(--wf-color-primary-text);
2245
2403
  border-bottom-color: var(--wf-color-primary);
2246
2404
  }
2247
2405
 
2406
+ /* 激活指示平滑滑动(下边框) */
2407
+ .wf-tab {
2408
+ transition: color var(--wf-dur-fast) var(--wf-ease-out), border-color var(--wf-dur-fast) var(--wf-ease-out);
2409
+ }
2410
+
2248
2411
  .wf-tab-content {
2249
2412
  padding-top: var(--wf-space-md);
2250
2413
  }
@@ -2294,18 +2457,14 @@ code {
2294
2457
  }
2295
2458
 
2296
2459
  .wf-dropdown-item--danger {
2297
- color: var(--wf-color-error);
2460
+ color: var(--wf-color-error-text);
2298
2461
  }
2299
2462
 
2300
- /* ── 入场动画 ── */
2463
+ /* ── 入场动画:面板族统一 wf-panel-in(scale+fade,Token 驱动) ── */
2301
2464
  .wf-dropdown-menu {
2302
- animation: wf-dropdown-in 0.12s ease-out;
2465
+ animation: wf-panel-in var(--wf-dur-fast) var(--wf-ease-out);
2303
2466
  transform-origin: top center;
2304
2467
  }
2305
- @keyframes wf-dropdown-in {
2306
- from { opacity: 0; transform: translateY(-4px) scaleY(0.96); }
2307
- to { opacity: 1; transform: translateY(0) scaleY(1); }
2308
- }
2309
2468
 
2310
2469
  /* weifuwu/components — Pagination */
2311
2470
 
@@ -2336,13 +2495,13 @@ code {
2336
2495
 
2337
2496
  .wf-page-btn:hover:not(:disabled):not(.wf-page-btn--active) {
2338
2497
  border-color: var(--wf-color-primary);
2339
- color: var(--wf-color-primary);
2498
+ color: var(--wf-color-primary-text);
2340
2499
  }
2341
2500
 
2342
2501
  .wf-page-btn--active {
2343
2502
  background: var(--wf-color-primary);
2344
2503
  border-color: var(--wf-color-primary);
2345
- color: #fff;
2504
+ color: var(--wf-color-on-brand);
2346
2505
  }
2347
2506
 
2348
2507
  .wf-page-btn--disabled {
@@ -2377,26 +2536,10 @@ code {
2377
2536
 
2378
2537
  .wf-card--clickable {
2379
2538
  cursor: pointer;
2380
- transition: box-shadow var(--wf-transition);
2381
2539
  }
2382
2540
 
2383
- .wf-card--clickable:hover {
2384
- box-shadow: var(--wf-shadow-md);
2385
- }
2386
-
2387
- .wf-card--clickable:focus-visible {
2388
- outline: none;
2389
- box-shadow: var(--wf-shadow-md), var(--wf-focus-ring);
2390
- }
2391
-
2392
- /* hover 抬升变体 — 阴影 + 上移(悬停卡片/列表卡片) */
2541
+ /* hover 抬升已提炼为 .wf-elevate(_surface.css),此处仅保留语义类 */
2393
2542
  .wf-card--hover {
2394
- transition: box-shadow var(--wf-transition), transform var(--wf-transition);
2395
- }
2396
-
2397
- .wf-card--hover:hover {
2398
- box-shadow: var(--wf-shadow-md);
2399
- transform: translateY(-2px);
2400
2543
  }
2401
2544
 
2402
2545
  /* 选中态 — 选择卡片(类型选择/模板选择) */
@@ -2420,11 +2563,11 @@ code {
2420
2563
  }
2421
2564
 
2422
2565
  .wf-badge--default { background: var(--wf-color-bg-tertiary); color: var(--wf-color-text-secondary); }
2423
- .wf-badge--primary { background: var(--wf-color-primary-bg); color: var(--wf-color-primary); }
2424
- .wf-badge--success { background: var(--wf-color-success-bg); color: var(--wf-color-success); }
2425
- .wf-badge--warning { background: var(--wf-color-warning-bg); color: var(--wf-color-warning); }
2426
- .wf-badge--danger { background: var(--wf-color-error-bg); color: var(--wf-color-error); }
2427
- .wf-badge--info { background: var(--wf-color-info-bg); color: var(--wf-color-info); }
2566
+ .wf-badge--primary { background: var(--wf-color-primary-bg); color: var(--wf-color-primary-text); }
2567
+ .wf-badge--success { background: var(--wf-color-success-bg); color: var(--wf-color-success-text); }
2568
+ .wf-badge--warning { background: var(--wf-color-warning-bg); color: var(--wf-color-warning-text); }
2569
+ .wf-badge--danger { background: var(--wf-color-error-bg); color: var(--wf-color-error-text); }
2570
+ .wf-badge--info { background: var(--wf-color-info-bg); color: var(--wf-color-info-text); }
2428
2571
 
2429
2572
  /* Dot variant */
2430
2573
  .wf-badge-dot {
@@ -2450,7 +2593,7 @@ code {
2450
2593
  border-radius: 50%;
2451
2594
  font-family: var(--wf-font-sans);
2452
2595
  font-weight: var(--wf-font-weight-semibold);
2453
- color: #fff;
2596
+ color: var(--wf-color-on-brand);
2454
2597
  flex-shrink: 0;
2455
2598
  overflow: hidden;
2456
2599
  object-fit: cover;
@@ -2474,9 +2617,9 @@ code {
2474
2617
  }
2475
2618
 
2476
2619
  .wf-tag--default { background: var(--wf-color-bg-tertiary); color: var(--wf-color-text-secondary); }
2477
- .wf-tag--primary { background: var(--wf-color-primary-bg); color: var(--wf-color-primary); }
2478
- .wf-tag--success { background: var(--wf-color-success-bg); color: var(--wf-color-success); }
2479
- .wf-tag--danger { background: var(--wf-color-error-bg); color: var(--wf-color-error); }
2620
+ .wf-tag--primary { background: var(--wf-color-primary-bg); color: var(--wf-color-primary-text); }
2621
+ .wf-tag--success { background: var(--wf-color-success-bg); color: var(--wf-color-success-text); }
2622
+ .wf-tag--danger { background: var(--wf-color-error-bg); color: var(--wf-color-error-text); }
2480
2623
 
2481
2624
  .wf-tag-text { }
2482
2625
 
@@ -2516,6 +2659,7 @@ code {
2516
2659
  font-weight: var(--wf-font-weight-bold);
2517
2660
  color: var(--wf-color-text);
2518
2661
  line-height: 1;
2662
+ font-variant-numeric: var(--wf-nums); /* 数字等宽:递增不抖 */
2519
2663
  }
2520
2664
 
2521
2665
  .wf-stat-label {
@@ -2531,27 +2675,16 @@ code {
2531
2675
  margin-top: var(--wf-gap-xs);
2532
2676
  }
2533
2677
 
2534
- .wf-stat-trend--up { color: var(--wf-color-success); }
2535
- .wf-stat-trend--down { color: var(--wf-color-error); }
2678
+ .wf-stat-trend--up { color: var(--wf-color-success-text); }
2679
+ .wf-stat-trend--down { color: var(--wf-color-error-text); }
2536
2680
 
2537
2681
  .wf-stat-trend-arrow {
2538
2682
  font-weight: var(--wf-font-weight-bold);
2539
2683
  }
2540
2684
 
2541
- /* 可点击指标卡 */
2685
+ /* 可点击指标卡:hover 抬升已提炼为 .wf-elevate(_surface.css) */
2542
2686
  .wf-stat--clickable {
2543
2687
  cursor: pointer;
2544
- transition: box-shadow var(--wf-transition), transform var(--wf-transition);
2545
- }
2546
-
2547
- .wf-stat--clickable:hover {
2548
- box-shadow: var(--wf-shadow-md);
2549
- transform: translateY(-2px);
2550
- }
2551
-
2552
- .wf-stat--clickable:focus-visible {
2553
- outline: none;
2554
- box-shadow: var(--wf-shadow-md), var(--wf-focus-ring);
2555
2688
  }
2556
2689
 
2557
2690
  /* weifuwu/components — Steps */
@@ -2587,13 +2720,13 @@ code {
2587
2720
 
2588
2721
  .wf-step--done .wf-step-num {
2589
2722
  background: var(--wf-color-primary);
2590
- color: #fff;
2723
+ color: var(--wf-color-on-brand);
2591
2724
  font-size: 14px;
2592
2725
  }
2593
2726
 
2594
2727
  .wf-step--current .wf-step-num {
2595
2728
  background: var(--wf-color-primary);
2596
- color: #fff;
2729
+ color: var(--wf-color-on-brand);
2597
2730
  box-shadow: 0 0 0 3px var(--wf-color-primary-bg);
2598
2731
  }
2599
2732
 
@@ -2605,7 +2738,7 @@ code {
2605
2738
  }
2606
2739
 
2607
2740
  .wf-step--current .wf-step-label {
2608
- color: var(--wf-color-primary);
2741
+ color: var(--wf-color-primary-text);
2609
2742
  }
2610
2743
 
2611
2744
  .wf-step-desc {
@@ -2650,13 +2783,13 @@ code {
2650
2783
  }
2651
2784
 
2652
2785
  .wf-field-req {
2653
- color: var(--wf-color-error);
2786
+ color: var(--wf-color-error-text);
2654
2787
  margin-left: 2px;
2655
2788
  }
2656
2789
 
2657
2790
  .wf-field-err {
2658
2791
  font-size: var(--wf-font-size-xs);
2659
- color: var(--wf-color-error);
2792
+ color: var(--wf-color-error-text);
2660
2793
  }
2661
2794
 
2662
2795
  .wf-field-hint {
@@ -2665,7 +2798,7 @@ code {
2665
2798
  }
2666
2799
 
2667
2800
  .wf-field--err .wf-field-label {
2668
- color: var(--wf-color-error);
2801
+ color: var(--wf-color-error-text);
2669
2802
  }
2670
2803
 
2671
2804
  /* weifuwu/components — Slider */
@@ -2821,12 +2954,13 @@ code {
2821
2954
 
2822
2955
  .wf-segmented-option--active {
2823
2956
  background: var(--wf-surface-bg);
2824
- color: var(--wf-color-primary);
2957
+ color: var(--wf-color-primary-text);
2825
2958
  box-shadow: var(--wf-shadow-sm);
2959
+ transition: box-shadow var(--wf-dur-fast) var(--wf-ease-snap), color var(--wf-dur-fast) var(--wf-ease-out);
2826
2960
  }
2827
2961
 
2828
2962
  .wf-segmented-option--active:hover {
2829
- color: var(--wf-color-primary);
2963
+ color: var(--wf-color-primary-text);
2830
2964
  }
2831
2965
 
2832
2966
  .wf-segmented-option:focus-visible {
@@ -2958,6 +3092,12 @@ code {
2958
3092
  line-height: var(--wf-line-height-tight);
2959
3093
  }
2960
3094
 
3095
+ /* display 档:顶级页面标题,配窄字距 */
3096
+ .wf-page-title--display {
3097
+ font-size: var(--wf-font-size-display);
3098
+ letter-spacing: -0.5px;
3099
+ }
3100
+
2961
3101
  .wf-page-sub {
2962
3102
  font-family: var(--wf-font-sans);
2963
3103
  font-size: var(--wf-font-size-sm);
@@ -2985,7 +3125,7 @@ code {
2985
3125
  }
2986
3126
 
2987
3127
  .wf-breadcrumb-link {
2988
- color: var(--wf-color-primary);
3128
+ color: var(--wf-color-primary-text);
2989
3129
  text-decoration: none;
2990
3130
  }
2991
3131
 
@@ -3166,14 +3306,14 @@ code {
3166
3306
  }
3167
3307
 
3168
3308
  .wf-upload-item-remove:hover {
3169
- color: var(--wf-color-error);
3309
+ color: var(--wf-color-error-text);
3170
3310
  background: var(--wf-color-error-bg);
3171
3311
  }
3172
3312
 
3173
3313
  .wf-upload-err {
3174
3314
  font-family: var(--wf-font-sans);
3175
3315
  font-size: var(--wf-font-size-xs);
3176
- color: var(--wf-color-error);
3316
+ color: var(--wf-color-error-text);
3177
3317
  }
3178
3318
 
3179
3319
  /* weifuwu/components — Tooltip */
@@ -3259,9 +3399,9 @@ code {
3259
3399
  line-height: 1.4;
3260
3400
  }
3261
3401
 
3262
- /* ── 入场动画 ── */
3402
+ /* ── 入场动画:fade(浮层族,时长 Token 驱动) ── */
3263
3403
  .wf-tooltip {
3264
- animation: wf-tooltip-in 0.15s ease-out;
3404
+ animation: wf-tooltip-in var(--wf-dur-fast) var(--wf-ease-out);
3265
3405
  }
3266
3406
  @keyframes wf-tooltip-in {
3267
3407
  from { opacity: 0; }
@@ -3288,15 +3428,15 @@ code {
3288
3428
  .wf-drawer-overlay {
3289
3429
  position: absolute;
3290
3430
  inset: 0;
3291
- background: rgba(0, 0, 0, 0.4);
3431
+ background: var(--wf-overlay);
3292
3432
  }
3293
3433
 
3294
3434
  .wf-drawer--enter .wf-drawer-overlay {
3295
- animation: wf-drawer-overlay-fadein 0.2s ease-out;
3435
+ animation: wf-drawer-overlay-fadein var(--wf-dur-fast) var(--wf-ease-out);
3296
3436
  }
3297
3437
 
3298
3438
  .wf-drawer--exit .wf-drawer-overlay {
3299
- animation: wf-drawer-overlay-fadeout 0.2s ease-out forwards;
3439
+ animation: wf-drawer-overlay-fadeout var(--wf-dur-fast) var(--wf-ease-in) forwards;
3300
3440
  }
3301
3441
 
3302
3442
  @keyframes wf-drawer-overlay-fadein {
@@ -3321,7 +3461,7 @@ code {
3321
3461
  }
3322
3462
 
3323
3463
  .wf-drawer--enter .wf-drawer-panel {
3324
- animation: wf-drawer-slidein 0.25s ease-out;
3464
+ animation: wf-drawer-slidein var(--wf-dur-base) var(--wf-ease-out);
3325
3465
  }
3326
3466
 
3327
3467
  .wf-drawer--enter .wf-drawer-panel--right {
@@ -3333,7 +3473,7 @@ code {
3333
3473
  }
3334
3474
 
3335
3475
  .wf-drawer--exit .wf-drawer-panel {
3336
- animation: wf-drawer-slideout 0.2s ease-out forwards;
3476
+ animation: wf-drawer-slideout var(--wf-dur-base) var(--wf-ease-in) forwards;
3337
3477
  }
3338
3478
 
3339
3479
  .wf-drawer--exit .wf-drawer-panel--right {
@@ -3464,16 +3604,16 @@ code {
3464
3604
  display: inline-flex;
3465
3605
  }
3466
3606
 
3467
- /* ── 入场动画 ── */
3607
+ /* ── 入场动画:fade(浮层族 popover/tooltip 保持 fade,时长 Token 驱动) ── */
3468
3608
  .wf-popover {
3469
- animation: wf-popover-in 0.15s ease-out;
3609
+ animation: wf-popover-in var(--wf-dur-fast) var(--wf-ease-out);
3470
3610
  }
3471
3611
  @keyframes wf-popover-in {
3472
3612
  from { opacity: 0; }
3473
3613
  to { opacity: 1; }
3474
3614
  }
3475
3615
  .wf-popover-overlay {
3476
- animation: wf-popover-overlay-in 0.15s ease-out;
3616
+ animation: wf-popover-overlay-in var(--wf-dur-fast) var(--wf-ease-out);
3477
3617
  }
3478
3618
  @keyframes wf-popover-overlay-in {
3479
3619
  from { opacity: 0; }
@@ -3646,6 +3786,9 @@ code {
3646
3786
  padding: var(--wf-space);
3647
3787
  min-width: var(--wf-datepicker-width, 260px);
3648
3788
  user-select: none;
3789
+ /* 面板族统一入场:wf-panel-in(scale+fade,Token 驱动) */
3790
+ animation: wf-panel-in var(--wf-dur-fast) var(--wf-ease-out);
3791
+ transform-origin: top center;
3649
3792
  }
3650
3793
 
3651
3794
  .wf-datepicker-header {
@@ -3724,11 +3867,12 @@ code {
3724
3867
 
3725
3868
  .wf-datepicker-cell--today {
3726
3869
  font-weight: var(--wf-font-weight-bold);
3870
+ box-shadow: inset 0 0 0 1px var(--wf-color-border-dark); /* 边框高亮,不撑开布局 */
3727
3871
  }
3728
3872
 
3729
3873
  .wf-datepicker-cell--selected {
3730
3874
  background: var(--wf-color-primary);
3731
- color: #fff;
3875
+ color: var(--wf-color-on-brand);
3732
3876
  }
3733
3877
 
3734
3878
  .wf-datepicker-cell--in-range {
@@ -3738,7 +3882,7 @@ code {
3738
3882
 
3739
3883
  .wf-datepicker-cell--range-edge {
3740
3884
  background: var(--wf-color-primary);
3741
- color: #fff;
3885
+ color: var(--wf-color-on-brand);
3742
3886
  }
3743
3887
 
3744
3888
  /* ── 区间模式 ── */
@@ -3754,6 +3898,8 @@ code {
3754
3898
  box-shadow: var(--wf-shadow-md);
3755
3899
  padding: var(--wf-space);
3756
3900
  user-select: none;
3901
+ animation: wf-panel-in var(--wf-dur-fast) var(--wf-ease-out);
3902
+ transform-origin: top center;
3757
3903
  }
3758
3904
 
3759
3905
  .wf-datepicker-range-panel {
@@ -3772,6 +3918,8 @@ code {
3772
3918
  padding: var(--wf-space);
3773
3919
  min-width: var(--wf-datepicker-range-width, 200px);
3774
3920
  user-select: none;
3921
+ animation: wf-panel-in var(--wf-dur-fast) var(--wf-ease-out);
3922
+ transform-origin: top center;
3775
3923
  }
3776
3924
 
3777
3925
  .wf-time-body {
@@ -3820,7 +3968,7 @@ code {
3820
3968
 
3821
3969
  .wf-time-opt--selected {
3822
3970
  background: var(--wf-color-primary);
3823
- color: #fff;
3971
+ color: var(--wf-color-on-brand);
3824
3972
  }
3825
3973
 
3826
3974
  .wf-time-footer {
@@ -3999,8 +4147,8 @@ code {
3999
4147
  }
4000
4148
 
4001
4149
  .wf-editor-tb-btn--active {
4002
- background: var(--wf-color-primary-light, #e0f2fe);
4003
- color: var(--wf-color-primary);
4150
+ background: var(--wf-color-primary-bg);
4151
+ color: var(--wf-color-primary-text);
4004
4152
  }
4005
4153
 
4006
4154
  .wf-editor-tb-btn--active:hover {
@@ -4075,7 +4223,7 @@ code {
4075
4223
  }
4076
4224
 
4077
4225
  .wf-editor-content a {
4078
- color: var(--wf-color-primary);
4226
+ color: var(--wf-color-primary-text);
4079
4227
  text-decoration: underline;
4080
4228
  }
4081
4229
 
@@ -4328,9 +4476,9 @@ code {
4328
4476
 
4329
4477
  .wf-toolcall-icon { font-size: var(--wf-font-size-sm); }
4330
4478
 
4331
- .wf-toolcall-icon--running { color: var(--wf-color-info); }
4332
- .wf-toolcall-icon--ok { color: var(--wf-color-success); }
4333
- .wf-toolcall-icon--error { color: var(--wf-color-error); }
4479
+ .wf-toolcall-icon--running { color: var(--wf-color-info-text); }
4480
+ .wf-toolcall-icon--ok { color: var(--wf-color-success-text); }
4481
+ .wf-toolcall-icon--error { color: var(--wf-color-error-text); }
4334
4482
 
4335
4483
  .wf-toolcall-name {
4336
4484
  font-weight: var(--wf-font-weight-semibold);
@@ -4364,7 +4512,7 @@ code {
4364
4512
  }
4365
4513
 
4366
4514
  .wf-toolcall-error {
4367
- color: var(--wf-color-error);
4515
+ color: var(--wf-color-error-text);
4368
4516
  font-size: var(--wf-font-size-xs);
4369
4517
  margin-top: var(--wf-gap-xs);
4370
4518
  }
@@ -4381,8 +4529,8 @@ code {
4381
4529
  background: var(--wf-color-warning-bg);
4382
4530
  }
4383
4531
 
4384
- .wf-approval--approved { border-color: var(--wf-color-success); background: var(--wf-color-success-bg); }
4385
- .wf-approval--rejected { border-color: var(--wf-color-error); background: var(--wf-color-error-bg); }
4532
+ .wf-approval--approved { border-color: var(--wf-color-success-text); background: var(--wf-color-success-bg); }
4533
+ .wf-approval--rejected { border-color: var(--wf-color-error-text); background: var(--wf-color-error-bg); }
4386
4534
  .wf-approval--timeout { border-color: var(--wf-color-border); background: var(--wf-color-bg-tertiary); }
4387
4535
 
4388
4536
  .wf-approval-header {
@@ -4390,11 +4538,11 @@ code {
4390
4538
  align-items: center;
4391
4539
  gap: var(--wf-gap-xs);
4392
4540
  font-weight: var(--wf-font-weight-semibold);
4393
- color: var(--wf-color-warning);
4541
+ color: var(--wf-color-warning-text);
4394
4542
  }
4395
4543
 
4396
- .wf-approval--approved .wf-approval-header { color: var(--wf-color-success); }
4397
- .wf-approval--rejected .wf-approval-header { color: var(--wf-color-error); }
4544
+ .wf-approval--approved .wf-approval-header { color: var(--wf-color-success-text); }
4545
+ .wf-approval--rejected .wf-approval-header { color: var(--wf-color-error-text); }
4398
4546
  .wf-approval--timeout .wf-approval-header { color: var(--wf-color-text-secondary); }
4399
4547
 
4400
4548
  .wf-approval-detail {
@@ -4506,7 +4654,7 @@ code {
4506
4654
 
4507
4655
  .wf-aichat-bubble--user {
4508
4656
  background: var(--wf-color-primary);
4509
- color: #fff;
4657
+ color: var(--wf-color-on-brand);
4510
4658
  }
4511
4659
 
4512
4660
  .wf-aichat-bubble--assistant {
@@ -4516,7 +4664,7 @@ code {
4516
4664
 
4517
4665
  .wf-aichat-status {
4518
4666
  font-size: var(--wf-font-size-xs, 12px);
4519
- color: var(--wf-color-info);
4667
+ color: var(--wf-color-info-text);
4520
4668
  }
4521
4669
 
4522
4670
  .wf-aichat-usage {
@@ -4526,7 +4674,7 @@ code {
4526
4674
 
4527
4675
  .wf-aichat-error {
4528
4676
  font-size: var(--wf-font-size-xs, 12px);
4529
- color: var(--wf-color-error);
4677
+ color: var(--wf-color-error-text);
4530
4678
  background: var(--wf-color-error-bg);
4531
4679
  border-radius: var(--wf-radius);
4532
4680
  padding: var(--wf-space-sm, 8px);