@icen.ai/ui 0.5.0 → 0.8.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 (138) hide show
  1. package/AGENTS.md +256 -0
  2. package/README.md +47 -13
  3. package/dist/base.css +31 -4
  4. package/dist/behaviors/accordion.d.mts +4 -0
  5. package/dist/behaviors/accordion.mjs +4 -3
  6. package/dist/behaviors/ai-chat.d.mts +57 -0
  7. package/dist/behaviors/ai-chat.mjs +557 -0
  8. package/dist/behaviors/ai-composer.d.mts +112 -0
  9. package/dist/behaviors/ai-composer.mjs +2032 -0
  10. package/dist/behaviors/ai-core.d.mts +151 -0
  11. package/dist/behaviors/ai-core.mjs +491 -0
  12. package/dist/behaviors/ai-diff.d.mts +53 -0
  13. package/dist/behaviors/ai-diff.mjs +282 -0
  14. package/dist/behaviors/ai-panel.d.mts +98 -0
  15. package/dist/behaviors/ai-panel.mjs +1012 -0
  16. package/dist/behaviors/ai-provider.d.mts +198 -0
  17. package/dist/behaviors/ai-provider.mjs +1055 -0
  18. package/dist/behaviors/ai-tool.d.mts +18 -0
  19. package/dist/behaviors/ai-tool.mjs +2125 -0
  20. package/dist/behaviors/ai-tools.d.mts +81 -0
  21. package/dist/behaviors/ai-tools.mjs +1658 -0
  22. package/dist/behaviors/back-top.d.mts +20 -0
  23. package/dist/behaviors/back-top.mjs +49 -32
  24. package/dist/behaviors/carousel.d.mts +4 -0
  25. package/dist/behaviors/carousel.mjs +34 -16
  26. package/dist/behaviors/charts.d.mts +250 -0
  27. package/dist/behaviors/charts.mjs +1301 -448
  28. package/dist/behaviors/command-palette.d.mts +8 -0
  29. package/dist/behaviors/command-palette.mjs +24 -12
  30. package/dist/behaviors/context-menu.d.mts +36 -0
  31. package/dist/behaviors/context-menu.mjs +6 -2
  32. package/dist/behaviors/copy.d.mts +4 -0
  33. package/dist/behaviors/copy.mjs +7 -6
  34. package/dist/behaviors/datatable.d.mts +78 -0
  35. package/dist/behaviors/datatable.mjs +54 -11
  36. package/dist/behaviors/date-picker.d.mts +4 -0
  37. package/dist/behaviors/date-picker.mjs +104 -36
  38. package/dist/behaviors/dropdown.d.mts +4 -0
  39. package/dist/behaviors/dropdown.mjs +7 -3
  40. package/dist/behaviors/input.d.mts +4 -0
  41. package/dist/behaviors/input.mjs +29 -22
  42. package/dist/behaviors/modal.d.mts +11 -0
  43. package/dist/behaviors/modal.mjs +11 -6
  44. package/dist/behaviors/nav.d.mts +7 -0
  45. package/dist/behaviors/nav.mjs +25 -9
  46. package/dist/behaviors/notification.d.mts +172 -0
  47. package/dist/behaviors/notification.mjs +243 -89
  48. package/dist/behaviors/popover.d.mts +46 -0
  49. package/dist/behaviors/popover.mjs +2 -1
  50. package/dist/behaviors/select.d.mts +4 -0
  51. package/dist/behaviors/select.mjs +131 -26
  52. package/dist/behaviors/sidebar.d.mts +4 -0
  53. package/dist/behaviors/sidebar.mjs +4 -3
  54. package/dist/behaviors/slider.d.mts +4 -0
  55. package/dist/behaviors/slider.mjs +4 -3
  56. package/dist/behaviors/split-pane.d.mts +4 -0
  57. package/dist/behaviors/split-pane.mjs +13 -13
  58. package/dist/behaviors/tabs.d.mts +8 -0
  59. package/dist/behaviors/tabs.mjs +44 -19
  60. package/dist/behaviors/tag-input.d.mts +4 -0
  61. package/dist/behaviors/tag-input.mjs +12 -3
  62. package/dist/behaviors/theme.d.mts +25 -0
  63. package/dist/behaviors/theme.mjs +3 -1
  64. package/dist/behaviors/toast.d.mts +26 -0
  65. package/dist/behaviors/toast.mjs +24 -18
  66. package/dist/behaviors/tree.d.mts +4 -0
  67. package/dist/behaviors/tree.mjs +4 -3
  68. package/dist/behaviors/upload.d.mts +4 -0
  69. package/dist/behaviors/upload.mjs +63 -26
  70. package/dist/components/ai-chat.css +1037 -0
  71. package/dist/components/ai-chat.mjs +3 -0
  72. package/dist/components/ai-composer.mjs +3 -0
  73. package/dist/components/ai-context.mjs +2 -0
  74. package/dist/components/ai-diff.css +311 -0
  75. package/dist/components/ai-diff.mjs +3 -0
  76. package/dist/components/ai-files.mjs +3 -0
  77. package/dist/components/ai-message.mjs +3 -0
  78. package/dist/components/ai-panel.css +682 -0
  79. package/dist/components/ai-reasoning.mjs +3 -0
  80. package/dist/components/ai-subagent.mjs +2 -0
  81. package/dist/components/ai-todo.mjs +2 -0
  82. package/dist/components/ai-tool-call.mjs +2 -0
  83. package/dist/components/ai-tool.css +532 -0
  84. package/dist/components/ai-usage.mjs +3 -0
  85. package/dist/components/badge.css +4 -8
  86. package/dist/components/breadcrumb.css +1 -5
  87. package/dist/components/btn.css +4 -7
  88. package/dist/components/card.css +3 -6
  89. package/dist/components/chart-bar.css +10 -0
  90. package/dist/components/chart-calendar.mjs +5 -0
  91. package/dist/components/chart-gauge.css +1 -1
  92. package/dist/components/chart-heatmap.css +40 -0
  93. package/dist/components/chart-scatter.css +24 -0
  94. package/dist/components/chart-scatter.mjs +4 -0
  95. package/dist/components/charts.css +86 -1
  96. package/dist/components/charts.mjs +1 -0
  97. package/dist/components/command-palette.css +2 -2
  98. package/dist/components/content.css +8 -9
  99. package/dist/components/copy.css +8 -8
  100. package/dist/components/datatable.css +4 -8
  101. package/dist/components/date-picker.css +3 -7
  102. package/dist/components/empty.css +0 -4
  103. package/dist/components/feedback.css +10 -17
  104. package/dist/components/form.css +13 -14
  105. package/dist/components/input.css +2 -2
  106. package/dist/components/layout.css +36 -36
  107. package/dist/components/media.css +12 -8
  108. package/dist/components/menu.css +2 -2
  109. package/dist/components/modal.css +1 -1
  110. package/dist/components/nav.css +11 -6
  111. package/dist/components/notification.css +28 -28
  112. package/dist/components/pagination.css +1 -1
  113. package/dist/components/panel.css +16 -16
  114. package/dist/components/pill.css +15 -15
  115. package/dist/components/segmented.css +5 -5
  116. package/dist/components/segmented.mjs +1 -0
  117. package/dist/components/select.css +12 -20
  118. package/dist/components/sidebar.css +1 -1
  119. package/dist/components/split-pane.css +0 -1
  120. package/dist/components/stat.css +14 -18
  121. package/dist/components/steps.css +2 -2
  122. package/dist/components/switch.css +8 -12
  123. package/dist/components/table.css +46 -47
  124. package/dist/components/tabs.css +35 -46
  125. package/dist/components/tag-input.css +4 -4
  126. package/dist/components/toast.css +16 -13
  127. package/dist/components/tooltip.css +2 -2
  128. package/dist/index.d.mts +37 -0
  129. package/dist/index.mjs +7890 -1199
  130. package/dist/registry.json +113 -4
  131. package/dist/retro-effects.css +21 -17
  132. package/dist/tokens/colors.css +4 -1
  133. package/dist/tokens/retro-effects.css +21 -17
  134. package/dist/tokens/style-profiles.css +21 -0
  135. package/dist/tokens.css +25 -1
  136. package/dist/ui.css +3168 -433
  137. package/docs/spec/ai-native.md +659 -0
  138. package/package.json +15 -5
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@icen.ai/ui",
3
- "version": "0.5.0",
3
+ "version": "0.8.0",
4
4
  "tokens": [
5
5
  "colors.css",
6
6
  "style-profiles.css",
@@ -11,6 +11,10 @@
11
11
  ],
12
12
  "base": "base.css",
13
13
  "components": [
14
+ "ai-chat",
15
+ "ai-diff",
16
+ "ai-panel",
17
+ "ai-tool",
14
18
  "back-top",
15
19
  "badge",
16
20
  "breadcrumb",
@@ -23,6 +27,7 @@
23
27
  "chart-line",
24
28
  "chart-pie",
25
29
  "chart-radar",
30
+ "chart-scatter",
26
31
  "chart-sparkline",
27
32
  "chart-stack",
28
33
  "charts",
@@ -65,6 +70,14 @@
65
70
  ],
66
71
  "behaviors": [
67
72
  "accordion",
73
+ "ai-chat",
74
+ "ai-composer",
75
+ "ai-core",
76
+ "ai-diff",
77
+ "ai-panel",
78
+ "ai-provider",
79
+ "ai-tool",
80
+ "ai-tools",
68
81
  "back-top",
69
82
  "carousel",
70
83
  "charts",
@@ -153,7 +166,11 @@
153
166
  "css": "switch.css"
154
167
  },
155
168
  "segmented": {
156
- "css": "segmented.css"
169
+ "css": "segmented.css",
170
+ "behavior": "input",
171
+ "exports": [
172
+ "initInput"
173
+ ]
157
174
  },
158
175
  "upload": {
159
176
  "css": "upload.css",
@@ -269,7 +286,8 @@
269
286
  "chart-area.css",
270
287
  "chart-stack.css",
271
288
  "chart-gauge.css",
272
- "chart-sparkline.css"
289
+ "chart-sparkline.css",
290
+ "chart-scatter.css"
273
291
  ],
274
292
  "behavior": "charts",
275
293
  "exports": [
@@ -282,7 +300,13 @@
282
300
  "renderRadar",
283
301
  "renderHeatmap",
284
302
  "renderSparkline",
285
- "renderGauge"
303
+ "renderGauge",
304
+ "renderCalendar",
305
+ "renderScatter",
306
+ "renderChart",
307
+ "normalizeChartSpec",
308
+ "inferChartType",
309
+ "chartFormatValue"
286
310
  ]
287
311
  },
288
312
  "chart-line": {
@@ -376,6 +400,27 @@
376
400
  "renderSparkline"
377
401
  ]
378
402
  },
403
+ "chart-scatter": {
404
+ "css": "chart-scatter.css",
405
+ "extraCss": [
406
+ "charts.css"
407
+ ],
408
+ "behavior": "charts",
409
+ "exports": [
410
+ "renderScatter"
411
+ ]
412
+ },
413
+ "chart-calendar": {
414
+ "css": "chart-calendar.css",
415
+ "extraCss": [
416
+ "charts.css",
417
+ "chart-heatmap.css"
418
+ ],
419
+ "behavior": "charts",
420
+ "exports": [
421
+ "renderCalendar"
422
+ ]
423
+ },
379
424
  "alert": {
380
425
  "css": "feedback.css"
381
426
  },
@@ -430,6 +475,70 @@
430
475
  },
431
476
  "layout": {
432
477
  "css": "layout.css"
478
+ },
479
+ "ai-chat": {
480
+ "css": "ai-chat.css",
481
+ "behavior": "ai-chat",
482
+ "init": "initAiChat"
483
+ },
484
+ "ai-message": {
485
+ "css": "ai-chat.css",
486
+ "behavior": "ai-chat",
487
+ "exports": [
488
+ "renderAiMessage",
489
+ "createAiStream",
490
+ "initAiChat"
491
+ ]
492
+ },
493
+ "ai-reasoning": {
494
+ "css": "ai-chat.css",
495
+ "behavior": "ai-chat",
496
+ "exports": [
497
+ "createAiStream",
498
+ "initAiChat"
499
+ ]
500
+ },
501
+ "ai-composer": {
502
+ "css": "ai-chat.css",
503
+ "behavior": "ai-composer",
504
+ "init": "initAiComposer"
505
+ },
506
+ "ai-tool-call": {
507
+ "css": "ai-tool-call.css",
508
+ "init": "initAiTool"
509
+ },
510
+ "ai-subagent": {
511
+ "css": "ai-tool.css",
512
+ "init": "initAiSubagent"
513
+ },
514
+ "ai-diff": {
515
+ "css": "ai-diff.css",
516
+ "behavior": "ai-diff",
517
+ "init": "initAiDiff"
518
+ },
519
+ "ai-files": {
520
+ "css": "ai-diff.css",
521
+ "behavior": "ai-diff",
522
+ "exports": [
523
+ "renderAiDiff"
524
+ ]
525
+ },
526
+ "ai-todo": {
527
+ "css": "ai-panel.css",
528
+ "init": "initAiTodo"
529
+ },
530
+ "ai-context": {
531
+ "css": "ai-panel.css",
532
+ "init": "initAiContext"
533
+ },
534
+ "ai-usage": {
535
+ "css": "ai-panel.css",
536
+ "behavior": "ai-panel",
537
+ "exports": [
538
+ "renderAiUsage",
539
+ "renderAiUsageRing",
540
+ "renderAiAudit"
541
+ ]
433
542
  }
434
543
  }
435
544
  }
@@ -11,6 +11,11 @@
11
11
  * - 像素边框 / 像素按钮 / 像素分隔线工具类
12
12
  * - 开机自检 / 打字机光标 / 页面闪白动画
13
13
  *
14
+ * 作用域约定:效果类(扫描线/噪点/光标/开机行/闪白)均收在 .style-retro 下;
15
+ * 像素工具类(.retro-pixel-border / .retro-pixel-button / .retro-pixel-rule)
16
+ * 有意保持全局可用——它们是纯几何装饰,任何风格都可取用。
17
+ * z-index 统一走 base.css 的 --z-fx 标尺(效果层,tooltip 之上)。
18
+ *
14
19
  * 所有动画尊重 prefers-reduced-motion:在 reduce 下由 base.css 的全局兜底降为 0.01ms。
15
20
  */
16
21
 
@@ -24,7 +29,7 @@
24
29
  position: fixed;
25
30
  inset: 0;
26
31
  pointer-events: none;
27
- z-index: 9999;
32
+ z-index: calc(var(--z-fx) - 1);
28
33
  opacity: 0.14;
29
34
  background:
30
35
  repeating-linear-gradient(
@@ -48,7 +53,7 @@
48
53
  position: fixed;
49
54
  inset: 0;
50
55
  pointer-events: none;
51
- z-index: 9998;
56
+ z-index: calc(var(--z-fx) - 2);
52
57
  background:
53
58
  radial-gradient(
54
59
  ellipse at center,
@@ -90,7 +95,7 @@
90
95
  position: fixed;
91
96
  inset: 0;
92
97
  pointer-events: none;
93
- z-index: 9997;
98
+ z-index: calc(var(--z-fx) - 3);
94
99
  opacity: 0.06;
95
100
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
96
101
  animation: retro-grain 0.5s steps(10) infinite;
@@ -110,9 +115,8 @@
110
115
  100% { transform: translateY(100vh); }
111
116
  }
112
117
 
113
- /* 游走的扫描线(偶尔闪过)—— 挂到 .style-retro 下的显式节点 */
114
- .style-retro .retro-scanline-beam,
115
- .retro-scanline-beam {
118
+ /* 游走的扫描线(偶尔闪过)—— 仅 .style-retro 下生效 */
119
+ .style-retro .retro-scanline-beam {
116
120
  position: fixed;
117
121
  left: 0;
118
122
  right: 0;
@@ -124,7 +128,7 @@
124
128
  transparent
125
129
  );
126
130
  pointer-events: none;
127
- z-index: 9996;
131
+ z-index: calc(var(--z-fx) - 4);
128
132
  opacity: 0.4;
129
133
  animation: retro-scanline-slide 4s linear infinite;
130
134
  }
@@ -140,19 +144,19 @@
140
144
  100% { opacity: 0; transform: translateY(-4px); }
141
145
  }
142
146
 
143
- .retro-boot-line {
147
+ .style-retro .retro-boot-line {
144
148
  opacity: 0;
145
149
  animation: retro-boot-text 0.3s steps(1) forwards;
146
150
  }
147
151
 
148
- .retro-boot-line:nth-child(1) { animation-delay: 0.1s; }
149
- .retro-boot-line:nth-child(2) { animation-delay: 0.25s; }
150
- .retro-boot-line:nth-child(3) { animation-delay: 0.4s; }
151
- .retro-boot-line:nth-child(4) { animation-delay: 0.55s; }
152
- .retro-boot-line:nth-child(5) { animation-delay: 0.7s; }
152
+ .style-retro .retro-boot-line:nth-child(1) { animation-delay: 0.1s; }
153
+ .style-retro .retro-boot-line:nth-child(2) { animation-delay: 0.25s; }
154
+ .style-retro .retro-boot-line:nth-child(3) { animation-delay: 0.4s; }
155
+ .style-retro .retro-boot-line:nth-child(4) { animation-delay: 0.55s; }
156
+ .style-retro .retro-boot-line:nth-child(5) { animation-delay: 0.7s; }
153
157
 
154
158
  /* 打字机光标 */
155
- .retro-cursor::after {
159
+ .style-retro .retro-cursor::after {
156
160
  content: "█";
157
161
  display: inline-block;
158
162
  margin-left: 2px;
@@ -250,15 +254,15 @@
250
254
  100% { opacity: 0; }
251
255
  }
252
256
 
253
- .retro-page-flash {
257
+ .style-retro .retro-page-flash {
254
258
  position: fixed;
255
259
  inset: 0;
256
260
  pointer-events: none;
257
- z-index: 10000;
261
+ z-index: var(--z-fx);
258
262
  background: var(--token-bg);
259
263
  opacity: 0;
260
264
  }
261
265
 
262
- .retro-page-flash.active {
266
+ .style-retro .retro-page-flash.active {
263
267
  animation: retro-flash 0.2s steps(3) forwards;
264
268
  }
@@ -504,6 +504,8 @@
504
504
  --token-accent-glow: color-mix(in srgb, var(--token-accent) 8%, transparent);
505
505
  --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 60%, transparent);
506
506
  --token-overlay-bg: color-mix(in srgb, var(--token-bg) 92%, transparent);
507
+ /* 睡莲粉 accent 上的文字色:深绿灰(白字在 #d59ab1 上对比度不达标) */
508
+ --token-on-accent: #26302b;
507
509
 
508
510
  --token-shadow-elevated: 0 1px 2px rgba(0,0,0,.18), 0 8px 22px rgba(0,0,0,.24);
509
511
  --token-shadow-overlay: 0 2px 5px rgba(0,0,0,.24), 0 14px 36px rgba(0,0,0,.32);
@@ -841,7 +843,8 @@
841
843
  --token-accent-glow: color-mix(in srgb, var(--token-accent) 6%, transparent);
842
844
  --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 60%, transparent);
843
845
  --token-overlay-bg: color-mix(in srgb, var(--token-bg) 94%, transparent);
844
- --token-on-accent: #ffffff;
846
+ /* 松烟绿 accent 上的文字色:深墨(白字在 #7AA87E 上对比度不达标) */
847
+ --token-on-accent: #1a2018;
845
848
 
846
849
  --token-shadow-elevated: 0 1px 2px rgba(0,0,0,.2), 0 4px 14px rgba(0,0,0,.22);
847
850
  --token-shadow-overlay: 0 2px 4px rgba(0,0,0,.28), 0 10px 30px rgba(0,0,0,.34);
@@ -11,6 +11,11 @@
11
11
  * - 像素边框 / 像素按钮 / 像素分隔线工具类
12
12
  * - 开机自检 / 打字机光标 / 页面闪白动画
13
13
  *
14
+ * 作用域约定:效果类(扫描线/噪点/光标/开机行/闪白)均收在 .style-retro 下;
15
+ * 像素工具类(.retro-pixel-border / .retro-pixel-button / .retro-pixel-rule)
16
+ * 有意保持全局可用——它们是纯几何装饰,任何风格都可取用。
17
+ * z-index 统一走 base.css 的 --z-fx 标尺(效果层,tooltip 之上)。
18
+ *
14
19
  * 所有动画尊重 prefers-reduced-motion:在 reduce 下由 base.css 的全局兜底降为 0.01ms。
15
20
  */
16
21
 
@@ -24,7 +29,7 @@
24
29
  position: fixed;
25
30
  inset: 0;
26
31
  pointer-events: none;
27
- z-index: 9999;
32
+ z-index: calc(var(--z-fx) - 1);
28
33
  opacity: 0.14;
29
34
  background:
30
35
  repeating-linear-gradient(
@@ -48,7 +53,7 @@
48
53
  position: fixed;
49
54
  inset: 0;
50
55
  pointer-events: none;
51
- z-index: 9998;
56
+ z-index: calc(var(--z-fx) - 2);
52
57
  background:
53
58
  radial-gradient(
54
59
  ellipse at center,
@@ -90,7 +95,7 @@
90
95
  position: fixed;
91
96
  inset: 0;
92
97
  pointer-events: none;
93
- z-index: 9997;
98
+ z-index: calc(var(--z-fx) - 3);
94
99
  opacity: 0.06;
95
100
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
96
101
  animation: retro-grain 0.5s steps(10) infinite;
@@ -110,9 +115,8 @@
110
115
  100% { transform: translateY(100vh); }
111
116
  }
112
117
 
113
- /* 游走的扫描线(偶尔闪过)—— 挂到 .style-retro 下的显式节点 */
114
- .style-retro .retro-scanline-beam,
115
- .retro-scanline-beam {
118
+ /* 游走的扫描线(偶尔闪过)—— 仅 .style-retro 下生效 */
119
+ .style-retro .retro-scanline-beam {
116
120
  position: fixed;
117
121
  left: 0;
118
122
  right: 0;
@@ -124,7 +128,7 @@
124
128
  transparent
125
129
  );
126
130
  pointer-events: none;
127
- z-index: 9996;
131
+ z-index: calc(var(--z-fx) - 4);
128
132
  opacity: 0.4;
129
133
  animation: retro-scanline-slide 4s linear infinite;
130
134
  }
@@ -140,19 +144,19 @@
140
144
  100% { opacity: 0; transform: translateY(-4px); }
141
145
  }
142
146
 
143
- .retro-boot-line {
147
+ .style-retro .retro-boot-line {
144
148
  opacity: 0;
145
149
  animation: retro-boot-text 0.3s steps(1) forwards;
146
150
  }
147
151
 
148
- .retro-boot-line:nth-child(1) { animation-delay: 0.1s; }
149
- .retro-boot-line:nth-child(2) { animation-delay: 0.25s; }
150
- .retro-boot-line:nth-child(3) { animation-delay: 0.4s; }
151
- .retro-boot-line:nth-child(4) { animation-delay: 0.55s; }
152
- .retro-boot-line:nth-child(5) { animation-delay: 0.7s; }
152
+ .style-retro .retro-boot-line:nth-child(1) { animation-delay: 0.1s; }
153
+ .style-retro .retro-boot-line:nth-child(2) { animation-delay: 0.25s; }
154
+ .style-retro .retro-boot-line:nth-child(3) { animation-delay: 0.4s; }
155
+ .style-retro .retro-boot-line:nth-child(4) { animation-delay: 0.55s; }
156
+ .style-retro .retro-boot-line:nth-child(5) { animation-delay: 0.7s; }
153
157
 
154
158
  /* 打字机光标 */
155
- .retro-cursor::after {
159
+ .style-retro .retro-cursor::after {
156
160
  content: "█";
157
161
  display: inline-block;
158
162
  margin-left: 2px;
@@ -250,15 +254,15 @@
250
254
  100% { opacity: 0; }
251
255
  }
252
256
 
253
- .retro-page-flash {
257
+ .style-retro .retro-page-flash {
254
258
  position: fixed;
255
259
  inset: 0;
256
260
  pointer-events: none;
257
- z-index: 10000;
261
+ z-index: var(--z-fx);
258
262
  background: var(--token-bg);
259
263
  opacity: 0;
260
264
  }
261
265
 
262
- .retro-page-flash.active {
266
+ .style-retro .retro-page-flash.active {
263
267
  animation: retro-flash 0.2s steps(3) forwards;
264
268
  }
@@ -60,13 +60,20 @@
60
60
  --density-space-sm: 0.5rem;
61
61
  --density-space-md: 0.75rem;
62
62
  --density-space-lg: 1rem;
63
+ --density-space-xl: 1.5rem;
64
+ --density-space-2xl: 2rem;
65
+ --density-space-3xl: 3rem;
66
+ --density-space-4xl: 4rem;
63
67
  --density-input-height-sm: 28px;
64
68
  --density-input-height-md: 36px;
65
69
  --density-input-height-lg: 44px;
70
+ --density-font-size-2xs: 10px;
66
71
  --density-font-size-xs: 11px;
67
72
  --density-font-size-sm: 12px;
68
73
  --density-font-size-md: 13px;
69
74
  --density-font-size-lg: 14px;
75
+ --density-font-size-xl: 18px;
76
+ --density-font-size-2xl: 22px;
70
77
 
71
78
  /* ── Motion 动效 ── */
72
79
  --duration-instant: 0ms;
@@ -98,13 +105,20 @@
98
105
  --density-space-sm: 0.5rem;
99
106
  --density-space-md: 0.75rem;
100
107
  --density-space-lg: 1rem;
108
+ --density-space-xl: 1.5rem;
109
+ --density-space-2xl: 2rem;
110
+ --density-space-3xl: 3rem;
111
+ --density-space-4xl: 4rem;
101
112
  --density-input-height-sm: 28px;
102
113
  --density-input-height-md: 36px;
103
114
  --density-input-height-lg: 44px;
115
+ --density-font-size-2xs: 10px;
104
116
  --density-font-size-xs: 11px;
105
117
  --density-font-size-sm: 12px;
106
118
  --density-font-size-md: 13px;
107
119
  --density-font-size-lg: 14px;
120
+ --density-font-size-xl: 18px;
121
+ --density-font-size-2xl: 22px;
108
122
 
109
123
  /* ── Motion ── */
110
124
  --duration-fast: 150ms;
@@ -133,13 +147,20 @@
133
147
  --density-space-sm: 0.25rem;
134
148
  --density-space-md: 0.5rem;
135
149
  --density-space-lg: 0.75rem;
150
+ --density-space-xl: 1rem;
151
+ --density-space-2xl: 1.5rem;
152
+ --density-space-3xl: 2rem;
153
+ --density-space-4xl: 3rem;
136
154
  --density-input-height-sm: 24px;
137
155
  --density-input-height-md: 32px;
138
156
  --density-input-height-lg: 40px;
157
+ --density-font-size-2xs: 9px;
139
158
  --density-font-size-xs: 9px;
140
159
  --density-font-size-sm: 10px;
141
160
  --density-font-size-md: 11px;
142
161
  --density-font-size-lg: 12px;
162
+ --density-font-size-xl: 14px;
163
+ --density-font-size-2xl: 16px;
143
164
 
144
165
  /* ── Motion:像素风瞬间切换 ── */
145
166
  --duration-fast: 0ms;
package/dist/tokens.css CHANGED
@@ -507,6 +507,8 @@
507
507
  --token-accent-glow: color-mix(in srgb, var(--token-accent) 8%, transparent);
508
508
  --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 60%, transparent);
509
509
  --token-overlay-bg: color-mix(in srgb, var(--token-bg) 92%, transparent);
510
+ /* 睡莲粉 accent 上的文字色:深绿灰(白字在 #d59ab1 上对比度不达标) */
511
+ --token-on-accent: #26302b;
510
512
 
511
513
  --token-shadow-elevated: 0 1px 2px rgba(0,0,0,.18), 0 8px 22px rgba(0,0,0,.24);
512
514
  --token-shadow-overlay: 0 2px 5px rgba(0,0,0,.24), 0 14px 36px rgba(0,0,0,.32);
@@ -844,7 +846,8 @@
844
846
  --token-accent-glow: color-mix(in srgb, var(--token-accent) 6%, transparent);
845
847
  --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 60%, transparent);
846
848
  --token-overlay-bg: color-mix(in srgb, var(--token-bg) 94%, transparent);
847
- --token-on-accent: #ffffff;
849
+ /* 松烟绿 accent 上的文字色:深墨(白字在 #7AA87E 上对比度不达标) */
850
+ --token-on-accent: #1a2018;
848
851
 
849
852
  --token-shadow-elevated: 0 1px 2px rgba(0,0,0,.2), 0 4px 14px rgba(0,0,0,.22);
850
853
  --token-shadow-overlay: 0 2px 4px rgba(0,0,0,.28), 0 10px 30px rgba(0,0,0,.34);
@@ -1312,13 +1315,20 @@
1312
1315
  --density-space-sm: 0.5rem;
1313
1316
  --density-space-md: 0.75rem;
1314
1317
  --density-space-lg: 1rem;
1318
+ --density-space-xl: 1.5rem;
1319
+ --density-space-2xl: 2rem;
1320
+ --density-space-3xl: 3rem;
1321
+ --density-space-4xl: 4rem;
1315
1322
  --density-input-height-sm: 28px;
1316
1323
  --density-input-height-md: 36px;
1317
1324
  --density-input-height-lg: 44px;
1325
+ --density-font-size-2xs: 10px;
1318
1326
  --density-font-size-xs: 11px;
1319
1327
  --density-font-size-sm: 12px;
1320
1328
  --density-font-size-md: 13px;
1321
1329
  --density-font-size-lg: 14px;
1330
+ --density-font-size-xl: 18px;
1331
+ --density-font-size-2xl: 22px;
1322
1332
 
1323
1333
  /* ── Motion 动效 ── */
1324
1334
  --duration-instant: 0ms;
@@ -1350,13 +1360,20 @@
1350
1360
  --density-space-sm: 0.5rem;
1351
1361
  --density-space-md: 0.75rem;
1352
1362
  --density-space-lg: 1rem;
1363
+ --density-space-xl: 1.5rem;
1364
+ --density-space-2xl: 2rem;
1365
+ --density-space-3xl: 3rem;
1366
+ --density-space-4xl: 4rem;
1353
1367
  --density-input-height-sm: 28px;
1354
1368
  --density-input-height-md: 36px;
1355
1369
  --density-input-height-lg: 44px;
1370
+ --density-font-size-2xs: 10px;
1356
1371
  --density-font-size-xs: 11px;
1357
1372
  --density-font-size-sm: 12px;
1358
1373
  --density-font-size-md: 13px;
1359
1374
  --density-font-size-lg: 14px;
1375
+ --density-font-size-xl: 18px;
1376
+ --density-font-size-2xl: 22px;
1360
1377
 
1361
1378
  /* ── Motion ── */
1362
1379
  --duration-fast: 150ms;
@@ -1385,13 +1402,20 @@
1385
1402
  --density-space-sm: 0.25rem;
1386
1403
  --density-space-md: 0.5rem;
1387
1404
  --density-space-lg: 0.75rem;
1405
+ --density-space-xl: 1rem;
1406
+ --density-space-2xl: 1.5rem;
1407
+ --density-space-3xl: 2rem;
1408
+ --density-space-4xl: 3rem;
1388
1409
  --density-input-height-sm: 24px;
1389
1410
  --density-input-height-md: 32px;
1390
1411
  --density-input-height-lg: 40px;
1412
+ --density-font-size-2xs: 9px;
1391
1413
  --density-font-size-xs: 9px;
1392
1414
  --density-font-size-sm: 10px;
1393
1415
  --density-font-size-md: 11px;
1394
1416
  --density-font-size-lg: 12px;
1417
+ --density-font-size-xl: 14px;
1418
+ --density-font-size-2xl: 16px;
1395
1419
 
1396
1420
  /* ── Motion:像素风瞬间切换 ── */
1397
1421
  --duration-fast: 0ms;