@icen.ai/ui 0.10.0 → 0.11.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 (355) hide show
  1. package/AGENTS.md +79 -309
  2. package/LICENSE +21 -0
  3. package/README.md +43 -54
  4. package/dist/base.css +57 -16
  5. package/dist/behaviors/accordion.mjs +1 -1
  6. package/dist/behaviors/ai-branch.mjs +1 -0
  7. package/dist/behaviors/ai-chat.d.mts +2 -2
  8. package/dist/behaviors/ai-chat.mjs +53 -10
  9. package/dist/behaviors/ai-composer.d.mts +5 -5
  10. package/dist/behaviors/ai-composer.mjs +21 -10
  11. package/dist/behaviors/ai-core.mjs +1 -0
  12. package/dist/behaviors/ai-diff.mjs +1 -0
  13. package/dist/behaviors/ai-feedback.mjs +1 -0
  14. package/dist/behaviors/ai-panel.d.mts +2 -2
  15. package/dist/behaviors/ai-panel.mjs +1 -0
  16. package/dist/behaviors/ai-provider.d.mts +1 -1
  17. package/dist/behaviors/ai-provider.mjs +1 -0
  18. package/dist/behaviors/ai-threads.mjs +1 -0
  19. package/dist/behaviors/ai-tool.d.mts +1 -1
  20. package/dist/behaviors/ai-tool.mjs +57 -24
  21. package/dist/behaviors/ai-tools.mjs +937 -28
  22. package/dist/behaviors/autocomplete.d.mts +1 -1
  23. package/dist/behaviors/autocomplete.mjs +1 -0
  24. package/dist/behaviors/back-top.mjs +1 -0
  25. package/dist/behaviors/carousel.mjs +8 -1
  26. package/dist/behaviors/cascader.mjs +14 -0
  27. package/dist/behaviors/charts.mjs +56 -20
  28. package/dist/behaviors/code-block.mjs +9 -1
  29. package/dist/behaviors/command-palette.mjs +3 -3
  30. package/dist/behaviors/context-menu.d.mts +2 -2
  31. package/dist/behaviors/context-menu.mjs +1 -0
  32. package/dist/behaviors/controls.d.mts +8 -8
  33. package/dist/behaviors/controls.mjs +37 -6
  34. package/dist/behaviors/copy.mjs +1 -0
  35. package/dist/behaviors/datatable.d.mts +3 -3
  36. package/dist/behaviors/datatable.mjs +76 -11
  37. package/dist/behaviors/date-picker.mjs +1 -0
  38. package/dist/behaviors/events.d.mts +10 -10
  39. package/dist/behaviors/events.mjs +11 -1
  40. package/dist/behaviors/form-validate.d.mts +10 -1
  41. package/dist/behaviors/form-validate.mjs +266 -4611
  42. package/dist/behaviors/i18n.d.mts +1 -0
  43. package/dist/behaviors/i18n.mjs +2 -0
  44. package/dist/behaviors/input.mjs +3 -0
  45. package/dist/behaviors/kb-access.d.mts +2 -2
  46. package/dist/behaviors/kb-access.mjs +8 -2
  47. package/dist/behaviors/kb-acl.d.mts +2 -2
  48. package/dist/behaviors/kb-acl.mjs +1 -0
  49. package/dist/behaviors/kb-answer.d.mts +2 -2
  50. package/dist/behaviors/kb-answer.mjs +56 -23
  51. package/dist/behaviors/kb-audit.d.mts +2 -2
  52. package/dist/behaviors/kb-audit.mjs +1 -0
  53. package/dist/behaviors/kb-canvas.d.mts +3 -3
  54. package/dist/behaviors/kb-canvas.mjs +1 -0
  55. package/dist/behaviors/kb-chain.d.mts +2 -2
  56. package/dist/behaviors/kb-chain.mjs +1 -0
  57. package/dist/behaviors/kb-checkpoint.d.mts +2 -2
  58. package/dist/behaviors/kb-checkpoint.mjs +1 -0
  59. package/dist/behaviors/kb-chunks.d.mts +2 -2
  60. package/dist/behaviors/kb-chunks.mjs +1 -0
  61. package/dist/behaviors/kb-citation.d.mts +2 -2
  62. package/dist/behaviors/kb-citation.mjs +20 -6
  63. package/dist/behaviors/kb-clarify.d.mts +2 -2
  64. package/dist/behaviors/kb-clarify.mjs +1 -0
  65. package/dist/behaviors/kb-conflict.d.mts +2 -2
  66. package/dist/behaviors/kb-conflict.mjs +1 -0
  67. package/dist/behaviors/kb-connector.d.mts +2 -2
  68. package/dist/behaviors/kb-connector.mjs +1 -0
  69. package/dist/behaviors/kb-core.d.mts +1 -1
  70. package/dist/behaviors/kb-core.mjs +1 -0
  71. package/dist/behaviors/kb-eval.d.mts +2 -2
  72. package/dist/behaviors/kb-eval.mjs +8 -2
  73. package/dist/behaviors/kb-explain.d.mts +2 -2
  74. package/dist/behaviors/kb-explain.mjs +13 -2
  75. package/dist/behaviors/kb-filter.d.mts +2 -2
  76. package/dist/behaviors/kb-filter.mjs +8 -2
  77. package/dist/behaviors/kb-gap.d.mts +2 -2
  78. package/dist/behaviors/kb-gap.mjs +1 -0
  79. package/dist/behaviors/kb-hittest.d.mts +2 -2
  80. package/dist/behaviors/kb-hittest.mjs +2 -1
  81. package/dist/behaviors/kb-metadata.mjs +6 -0
  82. package/dist/behaviors/kb-passage.d.mts +2 -2
  83. package/dist/behaviors/kb-passage.mjs +1 -0
  84. package/dist/behaviors/kb-pipeline.d.mts +2 -2
  85. package/dist/behaviors/kb-pipeline.mjs +1 -0
  86. package/dist/behaviors/kb-qa.mjs +1 -0
  87. package/dist/behaviors/kb-rerank.d.mts +2 -2
  88. package/dist/behaviors/kb-rerank.mjs +1 -0
  89. package/dist/behaviors/kb-retrieval.d.mts +2 -2
  90. package/dist/behaviors/kb-retrieval.mjs +18 -4
  91. package/dist/behaviors/kb-review.d.mts +2 -2
  92. package/dist/behaviors/kb-review.mjs +8 -2
  93. package/dist/behaviors/kb-sandbox.d.mts +2 -2
  94. package/dist/behaviors/kb-sandbox.mjs +7 -1
  95. package/dist/behaviors/kb-segment.d.mts +2 -2
  96. package/dist/behaviors/kb-segment.mjs +2 -1
  97. package/dist/behaviors/kb-select.mjs +8 -2
  98. package/dist/behaviors/kb-sources.d.mts +2 -2
  99. package/dist/behaviors/kb-sources.mjs +1 -0
  100. package/dist/behaviors/kb-sql.d.mts +2 -2
  101. package/dist/behaviors/kb-sql.mjs +1 -0
  102. package/dist/behaviors/kb-trace.d.mts +2 -2
  103. package/dist/behaviors/kb-trace.mjs +9 -3
  104. package/dist/behaviors/kb-visibility.d.mts +2 -2
  105. package/dist/behaviors/kb-visibility.mjs +1 -0
  106. package/dist/behaviors/kb-who-can.d.mts +2 -2
  107. package/dist/behaviors/kb-who-can.mjs +8 -2
  108. package/dist/behaviors/mentions.d.mts +1 -1
  109. package/dist/behaviors/mentions.mjs +1 -0
  110. package/dist/behaviors/modal.d.mts +1 -1
  111. package/dist/behaviors/modal.mjs +1 -0
  112. package/dist/behaviors/notification.d.mts +2 -2
  113. package/dist/behaviors/notification.mjs +14 -3
  114. package/dist/behaviors/panel.mjs +1 -0
  115. package/dist/behaviors/scroll-area.d.mts +17 -0
  116. package/dist/behaviors/scroll-area.mjs +59 -0
  117. package/dist/behaviors/select.mjs +8 -2
  118. package/dist/behaviors/slider.mjs +3 -3
  119. package/dist/behaviors/split-pane.mjs +2 -0
  120. package/dist/behaviors/suggestions.mjs +1 -0
  121. package/dist/behaviors/tabs.mjs +10 -0
  122. package/dist/behaviors/tag-input.mjs +1 -0
  123. package/dist/behaviors/theme-switcher.d.mts +2 -2
  124. package/dist/behaviors/theme-switcher.mjs +17 -2
  125. package/dist/behaviors/theme.mjs +16 -2
  126. package/dist/behaviors/toast.d.mts +2 -2
  127. package/dist/behaviors/toast.mjs +1 -0
  128. package/dist/behaviors/tree-select.mjs +14 -0
  129. package/dist/behaviors/tree.mjs +4 -4
  130. package/dist/behaviors/upload.mjs +1 -0
  131. package/dist/behaviors/url-safety.d.mts +8 -0
  132. package/dist/behaviors/url-safety.mjs +11 -0
  133. package/dist/components/accordion.d.mts +2 -0
  134. package/dist/components/ai-branch.d.mts +2 -0
  135. package/dist/components/ai-chat.css +40 -33
  136. package/dist/components/ai-chat.d.mts +2 -0
  137. package/dist/components/ai-composer.d.mts +2 -0
  138. package/dist/components/ai-context.d.mts +2 -0
  139. package/dist/components/ai-context.mjs +1 -0
  140. package/dist/components/ai-diff.css +6 -6
  141. package/dist/components/ai-diff.d.mts +2 -0
  142. package/dist/components/ai-feedback.d.mts +2 -0
  143. package/dist/components/ai-files.d.mts +2 -0
  144. package/dist/components/ai-message.d.mts +2 -0
  145. package/dist/components/ai-panel.css +12 -10
  146. package/dist/components/ai-reasoning.d.mts +2 -0
  147. package/dist/components/ai-subagent.d.mts +2 -0
  148. package/dist/components/ai-subagent.mjs +1 -0
  149. package/dist/components/ai-threads.d.mts +2 -0
  150. package/dist/components/ai-todo.d.mts +2 -0
  151. package/dist/components/ai-todo.mjs +1 -0
  152. package/dist/components/ai-tool-call.d.mts +2 -0
  153. package/dist/components/ai-tool-call.mjs +1 -0
  154. package/dist/components/ai-tool.css +16 -16
  155. package/dist/components/ai-usage.d.mts +2 -0
  156. package/dist/components/alert.d.mts +2 -0
  157. package/dist/components/autocomplete.css +12 -12
  158. package/dist/components/autocomplete.d.mts +2 -0
  159. package/dist/components/avatar.d.mts +2 -0
  160. package/dist/components/back-top.css +47 -16
  161. package/dist/components/back-top.d.mts +2 -0
  162. package/dist/components/badge.css +1 -1
  163. package/dist/components/badge.d.mts +2 -0
  164. package/dist/components/breadcrumb.css +26 -8
  165. package/dist/components/breadcrumb.d.mts +2 -0
  166. package/dist/components/btn.css +67 -62
  167. package/dist/components/btn.d.mts +2 -0
  168. package/dist/components/card.css +22 -22
  169. package/dist/components/card.d.mts +2 -0
  170. package/dist/components/carousel.d.mts +2 -0
  171. package/dist/components/cascader.css +56 -35
  172. package/dist/components/cascader.d.mts +2 -0
  173. package/dist/components/chart-area.css +46 -0
  174. package/dist/components/chart-area.d.mts +2 -0
  175. package/dist/components/chart-bar.css +66 -19
  176. package/dist/components/chart-bar.d.mts +2 -0
  177. package/dist/components/chart-calendar.d.mts +2 -0
  178. package/dist/components/chart-gauge.css +23 -3
  179. package/dist/components/chart-gauge.d.mts +2 -0
  180. package/dist/components/chart-graph.css +15 -3
  181. package/dist/components/chart-graph.d.mts +2 -0
  182. package/dist/components/chart-heatmap.css +117 -95
  183. package/dist/components/chart-heatmap.d.mts +2 -0
  184. package/dist/components/chart-line.css +54 -0
  185. package/dist/components/chart-line.d.mts +2 -0
  186. package/dist/components/chart-map.d.mts +2 -0
  187. package/dist/components/chart-pie.css +29 -0
  188. package/dist/components/chart-pie.d.mts +2 -0
  189. package/dist/components/chart-radar.css +50 -1
  190. package/dist/components/chart-radar.d.mts +2 -0
  191. package/dist/components/chart-scatter.css +39 -2
  192. package/dist/components/chart-scatter.d.mts +2 -0
  193. package/dist/components/chart-sparkline.css +20 -0
  194. package/dist/components/chart-sparkline.d.mts +2 -0
  195. package/dist/components/chart-stack.css +16 -5
  196. package/dist/components/chart-stack.d.mts +2 -0
  197. package/dist/components/charts.css +80 -35
  198. package/dist/components/charts.d.mts +2 -0
  199. package/dist/components/code-block.css +10 -8
  200. package/dist/components/code-block.d.mts +2 -0
  201. package/dist/components/command-palette.css +45 -38
  202. package/dist/components/command-palette.d.mts +2 -0
  203. package/dist/components/content.css +62 -57
  204. package/dist/components/context-menu.d.mts +2 -0
  205. package/dist/components/copy.css +10 -10
  206. package/dist/components/copy.d.mts +2 -0
  207. package/dist/components/datatable.css +72 -59
  208. package/dist/components/datatable.d.mts +2 -0
  209. package/dist/components/date-picker.css +26 -26
  210. package/dist/components/date-picker.d.mts +2 -0
  211. package/dist/components/desc.d.mts +2 -0
  212. package/dist/components/dropdown.d.mts +2 -0
  213. package/dist/components/empty.css +16 -16
  214. package/dist/components/empty.d.mts +2 -0
  215. package/dist/components/feedback.css +31 -29
  216. package/dist/components/form-validate.css +20 -6
  217. package/dist/components/form-validate.d.mts +2 -0
  218. package/dist/components/form.css +17 -14
  219. package/dist/components/form.d.mts +2 -0
  220. package/dist/components/icon.css +21 -10
  221. package/dist/components/icon.d.mts +2 -0
  222. package/dist/components/input.css +22 -22
  223. package/dist/components/input.d.mts +2 -0
  224. package/dist/components/kb-access.d.mts +2 -0
  225. package/dist/components/kb-acl.d.mts +2 -0
  226. package/dist/components/kb-agent.css +134 -55
  227. package/dist/components/kb-answer.d.mts +2 -0
  228. package/dist/components/kb-audit.d.mts +2 -0
  229. package/dist/components/kb-canvas.d.mts +2 -0
  230. package/dist/components/kb-chain.d.mts +2 -0
  231. package/dist/components/kb-checkpoint.d.mts +2 -0
  232. package/dist/components/kb-chunks.d.mts +2 -0
  233. package/dist/components/kb-citation.d.mts +2 -0
  234. package/dist/components/kb-clarify.d.mts +2 -0
  235. package/dist/components/kb-conflict.d.mts +2 -0
  236. package/dist/components/kb-connector.d.mts +2 -0
  237. package/dist/components/kb-data.css +192 -80
  238. package/dist/components/kb-eval.d.mts +2 -0
  239. package/dist/components/kb-explain.d.mts +2 -0
  240. package/dist/components/kb-filter.d.mts +2 -0
  241. package/dist/components/kb-gap.d.mts +2 -0
  242. package/dist/components/kb-ground.css +165 -73
  243. package/dist/components/kb-hittest.d.mts +2 -0
  244. package/dist/components/kb-ingest.css +308 -113
  245. package/dist/components/kb-metadata.d.mts +2 -0
  246. package/dist/components/kb-ops.css +189 -75
  247. package/dist/components/kb-passage.d.mts +2 -0
  248. package/dist/components/kb-perm.css +158 -87
  249. package/dist/components/kb-pipeline.d.mts +2 -0
  250. package/dist/components/kb-qa.d.mts +2 -0
  251. package/dist/components/kb-rerank.d.mts +2 -0
  252. package/dist/components/kb-retrieval.d.mts +2 -0
  253. package/dist/components/kb-review.d.mts +2 -0
  254. package/dist/components/kb-sandbox.d.mts +2 -0
  255. package/dist/components/kb-search.css +353 -116
  256. package/dist/components/kb-segment.d.mts +2 -0
  257. package/dist/components/kb-sources.d.mts +2 -0
  258. package/dist/components/kb-sql.d.mts +2 -0
  259. package/dist/components/kb-trace.d.mts +2 -0
  260. package/dist/components/kb-visibility.d.mts +2 -0
  261. package/dist/components/kb-who-can.d.mts +2 -0
  262. package/dist/components/kb.css +60 -36
  263. package/dist/components/kb.d.mts +2 -0
  264. package/dist/components/kbd.d.mts +2 -0
  265. package/dist/components/layout.css +10 -10
  266. package/dist/components/layout.d.mts +2 -0
  267. package/dist/components/list.d.mts +2 -0
  268. package/dist/components/material-chinese.css +10 -0
  269. package/dist/components/material-soviet.css +10 -0
  270. package/dist/components/material.css +61 -18
  271. package/dist/components/media-card.d.mts +2 -0
  272. package/dist/components/media.css +22 -27
  273. package/dist/components/mentions.css +18 -17
  274. package/dist/components/mentions.d.mts +2 -0
  275. package/dist/components/menu.css +32 -28
  276. package/dist/components/modal.css +30 -27
  277. package/dist/components/modal.d.mts +2 -0
  278. package/dist/components/nav.css +48 -44
  279. package/dist/components/nav.d.mts +2 -0
  280. package/dist/components/notification.css +31 -25
  281. package/dist/components/notification.d.mts +2 -0
  282. package/dist/components/pagination.css +15 -13
  283. package/dist/components/pagination.d.mts +2 -0
  284. package/dist/components/panel.css +19 -20
  285. package/dist/components/panel.d.mts +2 -0
  286. package/dist/components/pill.css +8 -7
  287. package/dist/components/pill.d.mts +2 -0
  288. package/dist/components/popover.css +32 -23
  289. package/dist/components/popover.d.mts +2 -0
  290. package/dist/components/progress.d.mts +2 -0
  291. package/dist/components/rating.d.mts +2 -0
  292. package/dist/components/result.d.mts +2 -0
  293. package/dist/components/scroll-area.css +84 -112
  294. package/dist/components/scroll-area.d.mts +2 -0
  295. package/dist/components/scroll-area.mjs +1 -0
  296. package/dist/components/segmented.css +47 -29
  297. package/dist/components/segmented.d.mts +2 -0
  298. package/dist/components/select.css +80 -41
  299. package/dist/components/select.d.mts +2 -0
  300. package/dist/components/sidebar.css +42 -38
  301. package/dist/components/sidebar.d.mts +2 -0
  302. package/dist/components/skeleton.d.mts +2 -0
  303. package/dist/components/slider.css +26 -22
  304. package/dist/components/slider.d.mts +2 -0
  305. package/dist/components/spinner.d.mts +2 -0
  306. package/dist/components/split-pane.css +16 -7
  307. package/dist/components/split-pane.d.mts +2 -0
  308. package/dist/components/stat.css +17 -16
  309. package/dist/components/stat.d.mts +2 -0
  310. package/dist/components/steps.css +26 -26
  311. package/dist/components/steps.d.mts +2 -0
  312. package/dist/components/switch.css +78 -39
  313. package/dist/components/switch.d.mts +2 -0
  314. package/dist/components/table.css +54 -32
  315. package/dist/components/table.d.mts +2 -0
  316. package/dist/components/tabs.css +53 -32
  317. package/dist/components/tabs.d.mts +2 -0
  318. package/dist/components/tag-input.css +12 -8
  319. package/dist/components/tag-input.d.mts +2 -0
  320. package/dist/components/tag.css +20 -12
  321. package/dist/components/tag.d.mts +2 -0
  322. package/dist/components/theme-switcher.css +7 -7
  323. package/dist/components/theme-switcher.d.mts +2 -0
  324. package/dist/components/timeline.d.mts +2 -0
  325. package/dist/components/toast.css +34 -30
  326. package/dist/components/toast.d.mts +2 -0
  327. package/dist/components/toolbar.css +19 -18
  328. package/dist/components/toolbar.d.mts +2 -0
  329. package/dist/components/tooltip.css +9 -8
  330. package/dist/components/tooltip.d.mts +2 -0
  331. package/dist/components/tree-select.css +63 -40
  332. package/dist/components/tree-select.d.mts +2 -0
  333. package/dist/components/tree.d.mts +2 -0
  334. package/dist/components/upload.css +9 -11
  335. package/dist/components/upload.d.mts +2 -0
  336. package/dist/index.d.mts +85 -84
  337. package/dist/index.mjs +14764 -14311
  338. package/dist/react.d.mts +18 -18
  339. package/dist/react.mjs +135 -36
  340. package/dist/registry.json +795 -64
  341. package/dist/tokens/colors.css +6 -0
  342. package/dist/tokens/design.css +130 -30
  343. package/dist/tokens/dtcg.json +6189 -1461
  344. package/dist/tokens/figma.variables.json +4107 -345
  345. package/dist/tokens/pixel.css +3 -0
  346. package/dist/tokens/scrollbars.css +40 -0
  347. package/dist/tokens/tokens-studio.json +5191 -271
  348. package/dist/tokens.css +304 -81
  349. package/dist/ui.css +4050 -2148
  350. package/dist/vue.d.mts +17 -17
  351. package/dist/vue.mjs +129 -34
  352. package/docs/spec/design-philosophy.md +5 -5
  353. package/docs/spec/design-primitives.md +10 -10
  354. package/docs/spec/scrollbars.md +46 -0
  355. package/package.json +16 -3
@@ -0,0 +1,2 @@
1
+ // kit: kb-segment 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/kb-segment.mjs';
@@ -0,0 +1,2 @@
1
+ // kit: kb-sources 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/kb-sources.mjs';
@@ -0,0 +1,2 @@
1
+ // kit: kb-sql 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/kb-sql.mjs';
@@ -0,0 +1,2 @@
1
+ // kit: kb-trace 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/kb-trace.mjs';
@@ -0,0 +1,2 @@
1
+ // kit: kb-visibility 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/kb-visibility.mjs';
@@ -0,0 +1,2 @@
1
+ // kit: kb-who-can 类型面(构建产物,勿手改)
2
+ export * from '../behaviors/kb-who-can.mjs';
@@ -21,37 +21,39 @@
21
21
  grid-template-columns: auto 1fr auto;
22
22
  align-items: center;
23
23
  gap: 10px;
24
- min-height: 28px;
24
+ min-height: var(--icen-density-item-height);
25
25
  padding: 2px 8px;
26
- border-radius: var(--icen-radius-sm);
26
+ border-radius: var(--icen-radius-xs);
27
+ transition: background-color var(--icen-tx-fast);
27
28
  }
28
- .icen-kb-row:hover { background: var(--icen-token-bg-soft); }
29
+ .icen-kb-row:hover { background: var(--icen-token-fill-hover); }
29
30
  .icen-kb-row-main { min-width: 0; display: flex; flex-direction: column; gap: 1px; }
30
31
  .icen-kb-row-title {
31
- font-size: 13px;
32
+ font-size: var(--icen-density-font-size-md);
32
33
  color: var(--icen-token-text);
33
34
  white-space: nowrap;
34
35
  overflow: hidden;
35
36
  text-overflow: ellipsis;
36
37
  }
37
- .icen-kb-row-sub { font-size: 11.5px; color: var(--icen-token-text-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
38
+ .icen-kb-row-sub { font-size: var(--icen-density-font-size-xs); color: var(--icen-token-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
38
39
  .icen-kb-row-side { display: inline-flex; align-items: center; gap: 8px; }
39
40
 
40
41
  /* 密度:compact 档(管理台/密集列表) */
41
- [data-icen-density='compact'] .icen-kb-row { min-height: 24px; gap: 8px; }
42
+ [data-icen-density='compact'] .icen-kb-row { min-height: var(--icen-density-item-height); gap: 8px; }
42
43
 
43
44
  /* 数字与元信息 */
44
45
  .icen-kb-num {
45
46
  font-family: var(--icen-font-mono);
46
47
  font-variant-numeric: tabular-nums;
47
- font-size: 12px;
48
+ font-size: var(--icen-density-font-size-xs);
49
+ letter-spacing: 0.01em;
48
50
  color: var(--icen-token-text-muted);
49
51
  white-space: nowrap;
50
52
  }
51
53
  .icen-kb-meta {
52
54
  font-family: var(--icen-font-mono);
53
- font-size: 11px;
54
- letter-spacing: 0.3px;
55
+ font-size: var(--icen-density-font-size-xs);
56
+ letter-spacing: 0.2px;
55
57
  color: var(--icen-token-text-faint);
56
58
  white-space: nowrap;
57
59
  /* nowrap 必须配省略截断(诚实截断纪律):裸 nowrap 会让长文本横向溢出盖到邻列 */
@@ -61,12 +63,13 @@
61
63
 
62
64
  /* 状态点(族内状态色的唯一入口) */
63
65
  .icen-kb-dot {
64
- width: 7px;
65
- height: 7px;
66
+ width: 6px;
67
+ height: 6px;
66
68
  border-radius: 50%;
67
69
  flex: 0 0 auto;
68
70
  background: var(--icen-token-text-faint);
69
71
  opacity: 0.6;
72
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--icen-token-card) 70%, transparent);
70
73
  }
71
74
  .icen-kb-dot.is-ok { background: var(--icen-token-success); opacity: 1; }
72
75
  .icen-kb-dot.is-warn { background: var(--icen-token-warning); opacity: 1; }
@@ -88,16 +91,16 @@
88
91
  overflow: hidden;
89
92
  min-inline-size: 40px;
90
93
  }
91
- .icen-kb-score-bar > i { display: block; height: 100%; border-radius: 2px; background: var(--icen-token-accent); opacity: 0.75; /* guard:allow-radius 微构件(指示条等图形级,不属容器圆角面) */ }
92
- .icen-kb-score-value { font-family: var(--icen-font-mono); font-variant-numeric: tabular-nums; font-size: 11.5px; color: var(--icen-token-text-muted); min-inline-size: 34px; text-align: right; /* guard:allow-physical 分数数字右对齐惯例(数字是 LTR 文种,RTL 不镜像) */ }
94
+ .icen-kb-score-bar > i { display: block; height: 100%; border-radius: 2px; background: var(--icen-token-accent-strong); opacity: 0.85; /* guard:allow-radius 微构件(指示条等图形级,不属容器圆角面) */ }
95
+ .icen-kb-score-value { font-family: var(--icen-font-mono); font-variant-numeric: tabular-nums; font-size: var(--icen-density-font-size-xs); color: var(--icen-token-text-muted); min-inline-size: 34px; text-align: right; /* guard:allow-physical 分数数字右对齐惯例(数字是 LTR 文种,RTL 不镜像) */ }
93
96
 
94
97
  /* 证据引用体(原文摘录、citedText、chunk 预览;证据线沿 inline-start,RTL 镜像) */
95
98
  .icen-kb-quote {
96
99
  position: relative;
97
100
  padding-block: 2px;
98
101
  padding-inline-start: 12px;
99
- font-size: 12.5px;
100
- line-height: 1.7;
102
+ font-size: var(--icen-density-font-size-md);
103
+ line-height: 1.75;
101
104
  color: var(--icen-token-text-muted);
102
105
  }
103
106
  .icen-kb-quote::before {
@@ -114,7 +117,9 @@
114
117
  .icen-kb-passage-body mark,
115
118
  .icen-kb-hit mark {
116
119
  background: color-mix(in srgb, var(--icen-token-accent) 18%, transparent);
117
- color: inherit;
120
+ /* 全量正文色:命中片段底色是 muted,inherit 只有 ~3.8-4.2:1(12.5px 低于 AA);
121
+ 高亮词本就该比环绕文本更醒目而非更淡 */
122
+ color: var(--icen-token-text);
118
123
  border-radius: 2px; /* guard:allow-radius 微构件(bar/dot/track/指示器等图形级,不属容器圆角面) */
119
124
  padding: 0 2px;
120
125
  }
@@ -129,16 +134,17 @@
129
134
  display: inline-flex;
130
135
  align-items: center;
131
136
  gap: 4px;
132
- font-size: 10.5px;
137
+ min-height: 22px;
138
+ padding: 0 7px;
139
+ font-size: var(--icen-density-font-size-xs);
133
140
  line-height: 1;
134
- letter-spacing: 0.3px;
135
- color: var(--icen-token-text-faint);
136
- border: 1px solid var(--icen-token-line-soft);
141
+ letter-spacing: .02em;
142
+ color: var(--icen-token-text-muted);
143
+ border: 1px solid var(--icen-token-separator-soft);
137
144
  border-radius: var(--icen-radius-full);
138
- padding: 2.5px 7px;
139
145
  white-space: nowrap;
140
146
  }
141
- .icen-kb-badge svg { width: 10px; height: 10px; }
147
+ .icen-kb-badge svg { width: 11px; height: 11px; }
142
148
  .icen-kb-badge--official {
143
149
  color: var(--icen-token-accent-text);
144
150
  border-color: color-mix(in srgb, var(--icen-token-accent) 45%, transparent);
@@ -158,13 +164,15 @@
158
164
  display: inline-flex;
159
165
  align-items: center;
160
166
  gap: 4px;
167
+ min-height: 22px;
168
+ padding: 0 7px;
161
169
  font-family: var(--icen-font-mono);
162
- font-size: 11px;
170
+ font-size: var(--icen-density-font-size-xs);
171
+ letter-spacing: 0.01em;
163
172
  color: var(--icen-token-text-muted);
164
173
  background: var(--icen-token-bg-soft);
165
174
  border: 1px solid var(--icen-token-line-soft);
166
175
  border-radius: var(--icen-radius-sm);
167
- padding: 2px 7px;
168
176
  max-inline-size: 220px;
169
177
  white-space: nowrap;
170
178
  overflow: hidden;
@@ -177,25 +185,27 @@
177
185
  align-items: center;
178
186
  gap: 8px;
179
187
  width: 100%;
180
- min-height: 28px;
188
+ min-height: var(--icen-density-item-height);
181
189
  padding: 2px 8px;
182
190
  border: none;
183
191
  background: none;
184
192
  border-radius: var(--icen-radius-sm);
185
193
  font: inherit;
186
- font-size: 12.5px;
194
+ font-size: var(--icen-density-font-size-md);
187
195
  color: var(--icen-token-text-muted);
188
196
  cursor: pointer;
189
197
  text-align: start;
198
+ transition: color var(--icen-tx-fast), background-color var(--icen-tx-fast);
190
199
  }
191
- .icen-kb-fold-head:hover { color: var(--icen-token-text); background: var(--icen-token-bg-soft); }
192
- .icen-kb-fold-head:focus-visible { outline: 2px solid var(--icen-token-accent); outline-offset: -2px; }
200
+ .icen-kb-fold-head:hover { color: var(--icen-token-text); background: var(--icen-token-fill-hover); }
201
+ .icen-kb-fold-head:active { background: var(--icen-token-fill-pressed); }
202
+ .icen-kb-fold-head:focus-visible { outline: none; box-shadow: var(--icen-ring); }
193
203
  .icen-kb-fold-caret {
194
204
  display: inline-block;
195
205
  width: 1em;
196
206
  color: var(--icen-token-text-faint);
197
- font-size: 10px;
198
- transition: transform 0.16s ease-out;
207
+ font-size: var(--icen-density-font-size-xs);
208
+ transition: transform var(--icen-tx-fast);
199
209
  flex: 0 0 auto;
200
210
  }
201
211
  .icen-kb-fold-head[aria-expanded='true'] .icen-kb-fold-caret { transform: rotate(90deg); }
@@ -204,12 +214,13 @@
204
214
  /* 键位提示(标注队列快捷键等) */
205
215
  .icen-kb-key {
206
216
  font-family: var(--icen-font-mono);
207
- font-size: 10px;
217
+ font-size: var(--icen-density-font-size-xs);
218
+ line-height: 1;
208
219
  color: var(--icen-token-text-faint);
209
220
  border: 1px solid var(--icen-token-line-soft);
210
221
  border-bottom-width: 2px;
211
222
  border-radius: 4px; /* guard:allow-radius 微构件(bar/dot/track/指示器等图形级,不属容器圆角面) */
212
- padding: 1px 5px;
223
+ padding: 3px 5px;
213
224
  background: var(--icen-token-bg-soft);
214
225
  }
215
226
 
@@ -221,7 +232,8 @@
221
232
  gap: 8px;
222
233
  padding: 28px 16px;
223
234
  color: var(--icen-token-text-faint);
224
- font-size: 12.5px;
235
+ font-size: var(--icen-density-font-size-xs);
236
+ line-height: 1.6;
225
237
  text-align: center;
226
238
  }
227
239
 
@@ -230,9 +242,10 @@
230
242
  display: flex;
231
243
  align-items: center;
232
244
  gap: 6px;
233
- font-size: 11.5px;
245
+ font-size: var(--icen-density-font-size-xs);
246
+ line-height: 1.5;
234
247
  color: var(--icen-token-text-faint);
235
- padding: 4px 8px;
248
+ padding: 6px 8px;
236
249
  }
237
250
  .icen-kb-notice svg { width: 12px; height: 12px; flex: 0 0 auto; }
238
251
  /* flex 容器内 hidden 会被 display 覆盖——notice 显隐必须显式归零 */
@@ -242,7 +255,8 @@
242
255
  三态:pre ✓ 安全基线 / post ⚠ 缺陷层 / none ✕ fail-open 危险——spec §9.0-1/§9.7) */
243
256
  .icen-kb-layer-chip {
244
257
  font-family: var(--icen-font-mono);
245
- font-size: 11px;
258
+ font-size: var(--icen-density-font-size-xs);
259
+ min-height: 22px;
246
260
  cursor: pointer;
247
261
  }
248
262
  .icen-kb-layer-chip[data-icen-layer='pre'] { color: var(--icen-token-success); border-color: color-mix(in srgb, var(--icen-token-success) 45%, transparent); }
@@ -256,6 +270,16 @@
256
270
  .icen-kb-dot.is-live { animation: none; }
257
271
  }
258
272
 
273
+ /* 高对比模式:状态与证据结构不能只靠底色差 */
274
+ @media (forced-colors: active) {
275
+ .icen-kb-dot { border: 1px solid CanvasText; }
276
+ .icen-kb-badge,
277
+ .icen-kb-chip,
278
+ .icen-kb-key { border-color: CanvasText; }
279
+ .icen-kb-score-bar { border: 1px solid CanvasText; }
280
+ .icen-kb-quote::before { background: CanvasText; }
281
+ }
282
+
259
283
  /* ── RTL:方向性折叠 caret 镜像(▸ 收起态指向行进方向) ── */
260
284
  :is([dir='rtl']) .icen-kb-fold-caret { transform: scaleX(-1); }
261
285
  :is([dir='rtl']) .icen-kb-fold-head[aria-expanded='true'] .icen-kb-fold-caret { transform: rotate(90deg) scaleX(-1); }
@@ -0,0 +1,2 @@
1
+ // kit: kb 类型面(构建产物,勿手改)
2
+ export {};
@@ -0,0 +1,2 @@
1
+ // kit: kbd 类型面(构建产物,勿手改)
2
+ export {};
@@ -32,22 +32,22 @@
32
32
  .icen-stack--justify-evenly { justify-content: space-evenly; }
33
33
 
34
34
  /* ── Divider:分隔线 ── */
35
- .icen-divider { background: var(--icen-token-outline-soft); height: 1px; width: 100%; }
35
+ .icen-divider { background: var(--icen-token-separator-soft); height: 1px; width: 100%; }
36
36
  .icen-divider--vertical { width: 1px; height: 100%; align-self: stretch; }
37
37
 
38
- /* ── Surface:卡片容器(默认 inset 阴影 + density-space-lg padding) ── */
38
+ /* ── Surface:卡片容器(默认 hairline 表面,无内阴影) ── */
39
39
  .icen-surface {
40
- border-radius: var(--icen-radius-lg);
41
- background: var(--icen-token-card);
42
- border: 1px solid var(--icen-token-outline-soft);
43
- box-shadow: var(--icen-token-shadow-inset);
40
+ border-radius: var(--icen-control-radius-lg);
41
+ background: var(--icen-token-surface);
42
+ border: 1px solid var(--icen-token-separator-soft);
43
+ box-shadow: none;
44
44
  padding: var(--icen-density-space-lg);
45
45
  }
46
46
  .icen-surface--elevated { box-shadow: var(--icen-token-shadow-card); }
47
47
  .icen-surface--overlay {
48
- background: var(--icen-token-card-strong);
49
- border-color: var(--icen-token-outline);
50
- box-shadow: var(--icen-token-shadow-overlay);
48
+ background: var(--icen-token-surface);
49
+ border-color: var(--icen-token-material-edge);
50
+ box-shadow: var(--icen-token-material-light), var(--icen-token-shadow-overlay);
51
51
  }
52
52
  .icen-surface--p-none { padding: 0; }
53
53
  .icen-surface--p-sm { padding: var(--icen-density-space-md); }
@@ -64,7 +64,7 @@
64
64
  .icen-text--2xl { font-size: var(--icen-density-font-size-2xl); }
65
65
  .icen-text--muted { color: var(--icen-token-text-muted); }
66
66
  .icen-text--faint { color: var(--icen-token-text-faint); }
67
- .icen-text--accent { color: var(--icen-token-accent-text, var(--icen-token-accent-deep, var(--icen-token-accent))); }
67
+ .icen-text--accent { color: var(--icen-token-accent-text); }
68
68
  .icen-text--success { color: var(--icen-token-success); }
69
69
  .icen-text--warning { color: var(--icen-token-warning); }
70
70
  .icen-text--error { color: var(--icen-token-error); }
@@ -0,0 +1,2 @@
1
+ // kit: layout 类型面(构建产物,勿手改)
2
+ export {};
@@ -0,0 +1,2 @@
1
+ // kit: list 类型面(构建产物,勿手改)
2
+ export {};
@@ -2,6 +2,8 @@
2
2
  /* 中式 material adapter. DOM contract: html[data-icen-style="chinese"] with
3
3
  * existing ICEN components or [data-icen-material="content|chrome|floating"].
4
4
  * No additional wrappers, decorative pseudo-elements or JavaScript required.
5
+ * 分层登记(guard: tier-direction 白名单):横切材料适配引用 Beta 类名
6
+ * .icen-ai-composer-popup,理由同 material.css 头注释。
5
7
  */
6
8
  :root[data-icen-style="chinese"] {
7
9
  --icen-press: scale(.995);
@@ -59,6 +61,14 @@
59
61
  @media (prefers-reduced-motion: reduce) {
60
62
  :root[data-icen-style="chinese"] { --icen-press: none; --icen-press-soft: none; }
61
63
  }
64
+ /* 减少透明偏好:玻璃面回落实底,文字不叠在内容上 */
65
+ @media (prefers-reduced-transparency: reduce) {
66
+ :root[data-icen-style="chinese"] :is(.icen-card--glass, [data-icen-material="floating"], .icen-command-palette) {
67
+ background: var(--icen-token-surface-raised);
68
+ -webkit-backdrop-filter: none;
69
+ backdrop-filter: none;
70
+ }
71
+ }
62
72
  @media (forced-colors: active) {
63
73
  :root[data-icen-style="chinese"] :is([data-icen-material],.icen-card,.icen-panel,.icen-menu,.icen-popover,.icen-select-panel,.icen-date-picker-panel,.icen-autocomplete-panel,.icen-cascader-panel,.icen-tree-select-panel,.icen-mentions-panel,.icen-ai-composer-popup,.icen-command-palette,.icen-modal,.icen-nav) {
64
74
  background: Canvas;
@@ -2,6 +2,8 @@
2
2
  /* 苏式 material adapter. DOM contract: html[data-icen-style="soviet"] with
3
3
  * existing ICEN components or [data-icen-material="content|chrome|floating"].
4
4
  * Structural emphasis belongs to frame/header/action, not long-form text.
5
+ * 分层登记(guard: tier-direction 白名单):横切材料适配引用 Beta 类名
6
+ * .icen-ai-composer-popup,理由同 material.css 头注释。
5
7
  */
6
8
  :root[data-icen-style="soviet"] {
7
9
  --icen-press: translateY(1px);
@@ -61,6 +63,14 @@
61
63
  @media (prefers-reduced-motion: reduce) {
62
64
  :root[data-icen-style="soviet"] { --icen-press: none; --icen-press-soft: none; }
63
65
  }
66
+ /* 减少透明偏好:玻璃面回落实底,文字不叠在内容上 */
67
+ @media (prefers-reduced-transparency: reduce) {
68
+ :root[data-icen-style="soviet"] :is(.icen-card--glass, [data-icen-material="floating"], .icen-command-palette) {
69
+ background: var(--icen-token-surface-raised);
70
+ -webkit-backdrop-filter: none;
71
+ backdrop-filter: none;
72
+ }
73
+ }
64
74
  @media (forced-colors: active) {
65
75
  :root[data-icen-style="soviet"] :is([data-icen-material],.icen-card,.icen-panel,.icen-menu,.icen-popover,.icen-select-panel,.icen-date-picker-panel,.icen-autocomplete-panel,.icen-cascader-panel,.icen-tree-select-panel,.icen-mentions-panel,.icen-ai-composer-popup,.icen-command-palette,.icen-modal,.icen-nav) {
66
76
  background: Canvas;
@@ -1,17 +1,21 @@
1
1
  @layer icen.components {
2
2
  /* Material contract (default 现代 primitive; theme via data-icen-preset):
3
3
  * <section data-icen-material="content|chrome|floating">arbitrary content</section>
4
- * content = opaque reading; chrome = translucent navigation; floating = temporary
4
+ * content = opaque reading; chrome = navigation; floating = temporary
5
5
  * operations. HTML primitives need no JS. Existing components consume the same
6
6
  * recipes automatically. Force opaque via html[data-icen-transparency="reduced"].
7
7
  * This file ships with tokens.css as well as ui.css; kit consumers need no extras.
8
+ *
9
+ * 分层登记(guard: tier-direction 文件级白名单):材料适配是横切层——选中态/磨砂
10
+ * 配方覆盖 .icen-ai-composer-popup* 与 .icen-kb-checkpoint-menu-item 等 Beta 类名;
11
+ * Beta 类名变更对本文件仅静默降级,不破坏 Core 用户,故允许 Core 引用 Beta。
8
12
  */
9
13
  /* The base layer also defines interaction defaults. Keep the primitive's
10
14
  * interaction recipe in the components layer so separately imported base.css
11
15
  * cannot quietly restore a different press/focus model. */
12
16
  :root:where(:not([data-icen-style]),[data-icen-style="modern"]) {
13
17
  --icen-press: scale(.985);
14
- --icen-press-soft: scale(.99);
18
+ --icen-press-soft: none;
15
19
  --icen-hover-border: var(--icen-token-line);
16
20
  --icen-hover-border-strong: var(--icen-token-line-strong);
17
21
  --icen-ring: 0 0 0 2px var(--icen-token-surface), 0 0 0 4px var(--icen-token-accent);
@@ -123,23 +127,21 @@
123
127
  }
124
128
  :root .icen-nav { box-shadow: var(--icen-token-material-light); }
125
129
  :root .icen-btn {
126
- --btn-border-hover: var(--icen-token-line);
127
- gap: var(--icen-density-space-sm);
128
- border-radius: var(--icen-radius-md);
129
- letter-spacing: 0;
130
+ --btn-border-hover: var(--icen-hover-border);
131
+ gap: var(--icen-control-gap);
132
+ border-radius: var(--icen-control-radius);
133
+ letter-spacing: var(--icen-letter-spacing-control);
130
134
  }
131
135
  :root .icen-btn-primary { --btn-border-hover: var(--icen-token-accent-strong); }
132
136
  :root :is(.icen-btn-ghost,.icen-btn-link) { --btn-border-hover: transparent; }
133
137
  :root .icen-btn-link { --btn-fg: var(--icen-token-accent-text); }
134
- :root .icen-btn-primary:hover:not(:focus-visible) { box-shadow: none; }
135
- :root .icen-btn:active:not(:disabled):not([aria-disabled="true"]):not([data-icen-disabled]):not(.is-loading) { transform: var(--icen-press-soft); }
136
- :root .icen-btn-danger:hover { color: var(--icen-token-error); background: var(--icen-token-error-muted); }
137
- :root .icen-segmented { padding: var(--icen-density-space-xs); gap: var(--icen-density-space-xs); }
138
- :root .icen-segmented-item { border-radius: max(0px, calc(var(--icen-radius-md) - var(--icen-density-space-xs) - 1px)); }
138
+ :root .icen-btn-danger:hover:not(:disabled) { color: var(--icen-token-error); background: var(--icen-token-error-muted); }
139
+ :root .icen-segmented { padding: 3px; gap: 2px; }
140
+ :root .icen-segmented-item { border-radius: max(0px, calc(var(--icen-radius-md) - 4px)); }
139
141
  :root :is(.icen-segmented-item.is-active,.icen-segmented-item[aria-checked="true"],.icen-toggle-group-btn.is-active) {
140
142
  background: var(--icen-token-surface);
141
143
  color: var(--icen-token-text);
142
- box-shadow: var(--icen-token-shadow-card);
144
+ box-shadow: var(--icen-token-shadow-control);
143
145
  }
144
146
  :root :is(.icen-menu,.icen-popover,.icen-select-panel) { border-radius: var(--icen-radius-lg); }
145
147
  :root .icen-modal {
@@ -152,33 +154,74 @@
152
154
  -webkit-backdrop-filter: none;
153
155
  }
154
156
  :root .icen-card--elevated { box-shadow: var(--icen-token-shadow-card); }
155
- :root .icen-card--interactive:hover { transform: none; border-color: var(--icen-token-line); }
157
+ :root .icen-card--interactive:hover { transform: none; border-color: var(--icen-token-control-border-hover); }
156
158
  :root .icen-card--interactive:focus-within { box-shadow: var(--icen-ring); }
157
- :root .icen-switch-thumb { background: var(--icen-token-text-muted); }
158
- :root .icen-switch[aria-checked="true"] .icen-switch-thumb { background: var(--icen-token-on-accent); }
159
- :root .icen-input-wrap--sm { padding-inline: var(--icen-density-space-sm); }
160
159
  /* 现代: small controls have a legible edge and a quiet, tactile surface. Keep
161
160
  * these optical refinements local to the default primitive; other primitives
162
161
  * supply their own surface physics without fighting a global component rule. */
163
162
  :root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-btn:not(.icen-btn-ghost):not(.icen-btn-link) {
164
- box-shadow: inset 0 1px 0 color-mix(in srgb, var(--icen-token-top-highlight) 45%, transparent), 0 1px 2px color-mix(in srgb, var(--icen-design-shadow-color) calc(var(--icen-design-shadow-strength) * .35), transparent);
163
+ background-image: linear-gradient(
164
+ to bottom,
165
+ color-mix(in srgb, var(--icen-token-top-highlight) 32%, transparent),
166
+ transparent 52%
167
+ );
168
+ box-shadow: var(--icen-token-shadow-control);
169
+ }
170
+ :root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-btn-primary {
171
+ background-image: linear-gradient(
172
+ to bottom,
173
+ color-mix(in srgb, var(--icen-token-top-highlight) 16%, transparent),
174
+ transparent 58%
175
+ );
165
176
  }
166
177
  :root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-btn:focus-visible {
167
178
  box-shadow: var(--icen-ring);
168
179
  }
180
+ /* Stable opaque planes keep content readable over any application backdrop. */
181
+ :root:where(:not([data-icen-style]),[data-icen-style="modern"]) :is([data-icen-material],.icen-menu,.icen-popover,.icen-select-panel,.icen-date-picker-panel,.icen-autocomplete-panel,.icen-cascader-panel,.icen-tree-select-panel,.icen-mentions-panel,.icen-ai-composer-popup,.icen-command-palette,.icen-card--glass,.icen-nav,.icen-toast,.icen-notification,.icen-chart-tooltip,.icen-back-top,.icen-carousel-arrow) {
182
+ background: var(--icen-token-surface);
183
+ backdrop-filter: none;
184
+ -webkit-backdrop-filter: none;
185
+ }
186
+ :root:where(:not([data-icen-style]),[data-icen-style="modern"]) [data-icen-material="chrome"] {
187
+ background: var(--icen-token-surface-toolbar);
188
+ }
189
+ :root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-nav.is-scrolled {
190
+ background: var(--icen-token-surface-toolbar);
191
+ }
192
+ :root:where(:not([data-icen-style]),[data-icen-style="modern"]) :is(.icen-card-tag,.icen-media-card-overlay,.icen-carousel-dot,.icen-carousel-index,.icen-spinner-overlay) {
193
+ backdrop-filter: none;
194
+ -webkit-backdrop-filter: none;
195
+ }
169
196
  :root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-btn:active:not(:disabled):not([aria-disabled="true"]):not([data-icen-disabled]):not(.is-loading) {
197
+ background-image: none;
170
198
  box-shadow: var(--icen-token-shadow-inset);
171
199
  }
172
200
  :root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-btn:active:focus-visible {
173
201
  box-shadow: var(--icen-token-shadow-inset), var(--icen-ring);
174
202
  }
175
203
  :root:where(:not([data-icen-style]),[data-icen-style="modern"]) :is(.icen-input-wrap,.icen-textarea-wrap) {
176
- padding-inline: var(--icen-density-space-md);
204
+ padding-inline: var(--icen-field-padding-inline);
205
+ padding-block: 0;
177
206
  }
178
207
  :root:where(:not([data-icen-style]),[data-icen-style="modern"]) :is(.icen-input,.icen-textarea)::placeholder {
179
208
  color: var(--icen-token-text-faint);
180
209
  opacity: 1;
181
210
  }
211
+ :root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-segmented {
212
+ background: var(--icen-token-surface-raised);
213
+ border-color: var(--icen-token-line-soft);
214
+ box-shadow: none;
215
+ }
216
+ :root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-segmented-item.is-active,
217
+ :root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-segmented-item[aria-checked="true"] {
218
+ border: 1px solid color-mix(in srgb, var(--icen-token-line) 72%, transparent);
219
+ margin: -1px;
220
+ }
221
+ :root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-toggle-group {
222
+ background: var(--icen-token-surface-raised);
223
+ border-color: var(--icen-token-line-soft);
224
+ }
182
225
  /* Data readability is explicit, never applied to every numeral in prose. */
183
226
  :root :is(.icen-numeric,.icen-table,.icen-datatable,.icen-stat-num) { font-variant-numeric: lining-nums tabular-nums; }
184
227
  /* Any translucent material has an opaque alternative, including native controls. */
@@ -0,0 +1,2 @@
1
+ // kit: media-card 类型面(构建产物,勿手改)
2
+ export {};
@@ -6,9 +6,7 @@
6
6
  * 规格源自 opengal data/display.tsx 的 Avatar、data/cartridge-card.tsx 的 hover overlay、
7
7
  * data/exhibit.tsx 的 Carousel 与 Rating。
8
8
  *
9
- * 例外声明(deliberate exception):carousel-thumbs 隐藏滚动条是有意设计
10
- * (缩略图条视觉纯净,滚动仍可用)。违反「组件不写滚动条样式」纪律仅此处,
11
- * 先例参照 scroll-area.css 的尺寸变体。
9
+ * 滚动条沿用全局策略,缩略图容器可使用 data-icen-scrollbars 局部定制。
12
10
  */
13
11
 
14
12
  /* ══════════════ avatar · 头像 ══════════════ */
@@ -19,8 +17,9 @@
19
17
  justify-content: center;
20
18
  overflow: hidden;
21
19
  border-radius: var(--icen-radius-full);
20
+ /* 首字母是文字:承文本须用 accent-text 档(accent 亮档只做图形,契约见 design.css) */
22
21
  background: var(--icen-token-accent-subtle);
23
- color: var(--icen-token-accent);
22
+ color: var(--icen-token-accent-text);
24
23
  font-weight: 600;
25
24
  width: 36px;
26
25
  height: 36px;
@@ -104,19 +103,17 @@
104
103
  .icen-media-card {
105
104
  position: relative;
106
105
  overflow: hidden;
107
- border-radius: var(--icen-radius-lg);
108
- background: var(--icen-token-bg-soft);
106
+ border-radius: var(--icen-control-radius-lg);
107
+ background: var(--icen-token-surface-raised);
109
108
  transition:
110
109
  transform var(--icen-tx-slow),
111
110
  box-shadow var(--icen-tx-slow);
112
111
  }
113
- /* hover 抬升仅可悬停设备生效(触屏关闭,AGENTS 动效守卫) */
112
+ /* hover 只给接触影,不做位移(媒体内容本身已经在动) */
114
113
  @media (hover: hover) and (pointer: fine) {
115
114
  .icen-media-card:hover {
116
- transform: translateY(-6px);
117
- box-shadow:
118
- var(--icen-token-shadow-overlay),
119
- 0 0 20px var(--icen-token-accent-glow);
115
+ transform: none;
116
+ box-shadow: var(--icen-token-shadow-card);
120
117
  }
121
118
  }
122
119
  .icen-media-card-cover {
@@ -143,15 +140,15 @@
143
140
  pointer-events: none;
144
141
  /* 下圆角自带:backdrop-filter 在部分 Chromium 不被祖先 overflow+radius 裁切(直角戳出圆角),
145
142
  不赌浏览器行为,overlay 底部两角与卡同弧度 */
146
- border-end-start-radius: var(--icen-radius-lg);
147
- border-end-end-radius: var(--icen-radius-lg);
143
+ border-end-start-radius: var(--icen-control-radius-lg);
144
+ border-end-end-radius: var(--icen-control-radius-lg);
148
145
  }
149
146
  .icen-media-card:hover .icen-media-card-overlay {
150
147
  transform: translateY(0);
151
148
  transition-delay: var(--media-overlay-delay, 80ms);
152
149
  }
153
150
  .icen-media-card-overlay-title {
154
- font-size: var(--icen-density-font-size-md);
151
+ font-size: var(--icen-font-size-control);
155
152
  font-weight: 600;
156
153
  margin: 0;
157
154
  }
@@ -279,7 +276,7 @@
279
276
  .icen-carousel {
280
277
  position: relative;
281
278
  overflow: hidden;
282
- border-radius: var(--icen-radius-lg);
279
+ border-radius: var(--icen-control-radius-lg);
283
280
  background: var(--icen-token-control);
284
281
  }
285
282
  .icen-carousel-track {
@@ -294,17 +291,17 @@
294
291
  position: absolute;
295
292
  top: 50%;
296
293
  transform: translateY(-50%);
297
- width: 32px;
298
- height: 32px;
294
+ width: 28px;
295
+ height: 28px;
299
296
  border-radius: var(--icen-radius-full);
300
- background: color-mix(in srgb, var(--icen-token-card) 78%, transparent);
301
- border: 1px solid var(--icen-token-outline-soft);
297
+ background: color-mix(in srgb, var(--icen-token-surface) 88%, transparent);
298
+ border: 1px solid var(--icen-token-material-edge);
302
299
  color: var(--icen-token-text);
303
300
  display: flex;
304
301
  align-items: center;
305
302
  justify-content: center;
306
- backdrop-filter: blur(4px);
307
- -webkit-backdrop-filter: blur(4px);
303
+ backdrop-filter: blur(12px) saturate(1.3);
304
+ -webkit-backdrop-filter: blur(12px) saturate(1.3);
308
305
  box-shadow: var(--icen-token-shadow-card);
309
306
  cursor: pointer;
310
307
  z-index: 2;
@@ -314,14 +311,14 @@
314
311
  opacity var(--icen-tx-fast);
315
312
  }
316
313
  .icen-carousel-arrow:hover {
317
- background: var(--icen-token-card-strong);
314
+ background: var(--icen-token-surface);
318
315
  }
319
316
  .icen-carousel-arrow:focus-visible {
320
317
  outline: none;
321
318
  box-shadow: var(--icen-ring), var(--icen-token-shadow-card);
322
319
  }
323
320
  .icen-carousel-arrow:active {
324
- transform: translateY(-50%) scale(0.95);
321
+ transform: translateY(-50%) scale(0.96);
325
322
  }
326
323
  .icen-carousel-arrow:disabled,
327
324
  .icen-carousel-arrow[aria-disabled='true'] {
@@ -398,16 +395,14 @@
398
395
  transition: width var(--icen-tx-slow);
399
396
  }
400
397
 
401
- /* 缩略图导航条(deliberate exception:隐藏滚动条是设计意图,见文件头注释) */
398
+ /* Thumbnail navigation shares the global scrollbar policy. */
402
399
  .icen-carousel-thumbs {
403
400
  display: flex;
404
401
  gap: var(--icen-density-space-xs);
405
402
  margin-top: var(--icen-density-space-sm);
406
403
  padding: var(--icen-density-space-xs);
407
404
  overflow-x: auto;
408
- scrollbar-width: none;
409
405
  }
410
- .icen-carousel-thumbs::-webkit-scrollbar { display: none; }
411
406
  .icen-carousel-thumb {
412
407
  flex-shrink: 0;
413
408
  width: 56px;
@@ -450,7 +445,7 @@
450
445
 
451
446
  /* 渐入动画 */
452
447
  .icen-carousel-slide {
453
- animation: carousel-slide-fade var(--icen-tx-normal) var(--icen-ease-out);
448
+ animation: carousel-slide-fade var(--icen-duration-normal) var(--icen-ease-out);
454
449
  }
455
450
  @keyframes carousel-slide-fade {
456
451
  from { opacity: 0.6; }