@xihan-ui/styles 3.2.0 → 4.0.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 (232) hide show
  1. package/CHANGELOG.md +441 -0
  2. package/component-tokens.d.ts +229 -60
  3. package/components.tokens.json +5124 -1555
  4. package/css/accordion.css +47 -20
  5. package/css/alert.css +14 -15
  6. package/css/anchor.css +2 -2
  7. package/css/approval.css +37 -13
  8. package/css/avatar-group.css +9 -12
  9. package/css/avatar.css +20 -18
  10. package/css/back-top.css +21 -7
  11. package/css/badge.css +5 -5
  12. package/css/breadcrumb.css +18 -16
  13. package/css/button-group.css +4 -6
  14. package/css/button.css +4 -7
  15. package/css/calendar-picker.css +177 -94
  16. package/css/calendar-range-picker.css +206 -121
  17. package/css/card.css +34 -6
  18. package/css/carousel.css +65 -49
  19. package/css/cascader.css +41 -29
  20. package/css/checkbox-group.css +9 -6
  21. package/css/checkbox.css +5 -4
  22. package/css/citation.css +7 -2
  23. package/css/clipboard.css +20 -4
  24. package/css/collapsible.css +29 -14
  25. package/css/color-field.css +4 -4
  26. package/css/color-picker.css +77 -23
  27. package/css/color-slider.css +10 -8
  28. package/css/color-swatch-picker.css +5 -5
  29. package/css/combobox.css +14 -10
  30. package/css/command.css +13 -8
  31. package/css/context-menu.css +10 -5
  32. package/css/date-field.css +4 -4
  33. package/css/date-picker.css +165 -102
  34. package/css/date-range-picker.css +186 -123
  35. package/css/description.css +10 -6
  36. package/css/descriptions.css +47 -19
  37. package/css/dialog.css +50 -35
  38. package/css/drawer.css +75 -21
  39. package/css/editable.css +15 -41
  40. package/css/empty-state.css +21 -3
  41. package/css/field-array.css +4 -1
  42. package/css/field.css +17 -18
  43. package/css/fieldset.css +33 -13
  44. package/css/file-upload.css +65 -32
  45. package/css/float-button.css +25 -15
  46. package/css/floating-panel.css +1 -1
  47. package/css/form.css +24 -10
  48. package/css/grid-list.css +1 -1
  49. package/css/highlight.css +4 -4
  50. package/css/hover-card.css +19 -12
  51. package/css/image-viewer.css +77 -27
  52. package/css/image.css +12 -4
  53. package/css/infinite-scroll.css +8 -4
  54. package/css/input-group.css +74 -26
  55. package/css/kbd.css +1 -1
  56. package/css/label.css +27 -11
  57. package/css/layout.css +17 -10
  58. package/css/list.css +13 -9
  59. package/css/listbox.css +12 -7
  60. package/css/loading-bar.css +3 -0
  61. package/css/mention.css +10 -8
  62. package/css/menu.css +10 -5
  63. package/css/menubar.css +13 -8
  64. package/css/navigation-menu.css +2 -2
  65. package/css/notification.css +114 -31
  66. package/css/number-animation.css +2 -2
  67. package/css/number-field.css +60 -37
  68. package/css/page-header.css +63 -26
  69. package/css/pagination.css +35 -38
  70. package/css/password-input.css +10 -66
  71. package/css/pin-input.css +18 -26
  72. package/css/popconfirm.css +20 -11
  73. package/css/popover.css +18 -12
  74. package/css/progress.css +14 -13
  75. package/css/prompt-input.css +3 -3
  76. package/css/question-flow.css +33 -7
  77. package/css/radio-group.css +120 -55
  78. package/css/rating.css +31 -14
  79. package/css/select.css +14 -10
  80. package/css/separator.css +22 -4
  81. package/css/side-nav.css +16 -11
  82. package/css/signature-pad.css +23 -9
  83. package/css/skeleton.css +7 -7
  84. package/css/slider.css +71 -42
  85. package/css/sparkline.css +8 -2
  86. package/css/spinner.css +40 -20
  87. package/css/statistic.css +14 -14
  88. package/css/steps.css +115 -84
  89. package/css/switch.css +9 -7
  90. package/css/table.css +27 -10
  91. package/css/tabs.css +35 -12
  92. package/css/tag-group.css +17 -6
  93. package/css/tag.css +54 -29
  94. package/css/tags-input.css +38 -19
  95. package/css/text-field.css +5 -5
  96. package/css/time-field.css +4 -4
  97. package/css/time-picker.css +150 -64
  98. package/css/time-range-picker.css +91 -62
  99. package/css/timeline.css +37 -20
  100. package/css/timer.css +3 -3
  101. package/css/toggle-group.css +4 -4
  102. package/css/tool-call.css +6 -4
  103. package/css/toolbar.css +6 -5
  104. package/css/tooltip.css +15 -16
  105. package/css/tour.css +14 -7
  106. package/css/transfer.css +22 -16
  107. package/css/tree-select.css +10 -10
  108. package/css/tree.css +26 -25
  109. package/css/typography.css +28 -25
  110. package/dist/css/accordion.css +47 -20
  111. package/dist/css/alert.css +14 -15
  112. package/dist/css/anchor.css +2 -2
  113. package/dist/css/approval.css +37 -13
  114. package/dist/css/avatar-group.css +9 -12
  115. package/dist/css/avatar.css +20 -18
  116. package/dist/css/back-top.css +21 -7
  117. package/dist/css/badge.css +5 -5
  118. package/dist/css/breadcrumb.css +18 -16
  119. package/dist/css/button-group.css +4 -6
  120. package/dist/css/button.css +4 -7
  121. package/dist/css/calendar-picker.css +177 -94
  122. package/dist/css/calendar-range-picker.css +206 -121
  123. package/dist/css/card.css +34 -6
  124. package/dist/css/carousel.css +65 -49
  125. package/dist/css/cascader.css +41 -29
  126. package/dist/css/checkbox-group.css +9 -6
  127. package/dist/css/checkbox.css +5 -4
  128. package/dist/css/citation.css +7 -2
  129. package/dist/css/clipboard.css +20 -4
  130. package/dist/css/collapsible.css +29 -14
  131. package/dist/css/color-field.css +4 -4
  132. package/dist/css/color-picker.css +77 -23
  133. package/dist/css/color-slider.css +10 -8
  134. package/dist/css/color-swatch-picker.css +5 -5
  135. package/dist/css/combobox.css +14 -10
  136. package/dist/css/command.css +13 -8
  137. package/dist/css/context-menu.css +10 -5
  138. package/dist/css/date-field.css +4 -4
  139. package/dist/css/date-picker.css +165 -102
  140. package/dist/css/date-range-picker.css +186 -123
  141. package/dist/css/description.css +10 -6
  142. package/dist/css/descriptions.css +47 -19
  143. package/dist/css/dialog.css +50 -35
  144. package/dist/css/drawer.css +75 -21
  145. package/dist/css/editable.css +15 -41
  146. package/dist/css/empty-state.css +21 -3
  147. package/dist/css/field-array.css +4 -1
  148. package/dist/css/field.css +17 -18
  149. package/dist/css/fieldset.css +33 -13
  150. package/dist/css/file-upload.css +65 -32
  151. package/dist/css/float-button.css +25 -15
  152. package/dist/css/floating-panel.css +1 -1
  153. package/dist/css/form.css +24 -10
  154. package/dist/css/grid-list.css +1 -1
  155. package/dist/css/highlight.css +4 -4
  156. package/dist/css/hover-card.css +19 -12
  157. package/dist/css/image-viewer.css +77 -27
  158. package/dist/css/image.css +12 -4
  159. package/dist/css/infinite-scroll.css +8 -4
  160. package/dist/css/input-group.css +74 -26
  161. package/dist/css/kbd.css +1 -1
  162. package/dist/css/label.css +27 -11
  163. package/dist/css/layout.css +17 -10
  164. package/dist/css/list.css +13 -9
  165. package/dist/css/listbox.css +12 -7
  166. package/dist/css/loading-bar.css +3 -0
  167. package/dist/css/mention.css +10 -8
  168. package/dist/css/menu.css +10 -5
  169. package/dist/css/menubar.css +13 -8
  170. package/dist/css/navigation-menu.css +2 -2
  171. package/dist/css/notification.css +114 -31
  172. package/dist/css/number-animation.css +2 -2
  173. package/dist/css/number-field.css +60 -37
  174. package/dist/css/page-header.css +63 -26
  175. package/dist/css/pagination.css +35 -38
  176. package/dist/css/password-input.css +10 -66
  177. package/dist/css/pin-input.css +18 -26
  178. package/dist/css/popconfirm.css +20 -11
  179. package/dist/css/popover.css +18 -12
  180. package/dist/css/progress.css +14 -13
  181. package/dist/css/prompt-input.css +3 -3
  182. package/dist/css/question-flow.css +33 -7
  183. package/dist/css/radio-group.css +120 -55
  184. package/dist/css/rating.css +31 -14
  185. package/dist/css/select.css +14 -10
  186. package/dist/css/separator.css +22 -4
  187. package/dist/css/side-nav.css +16 -11
  188. package/dist/css/signature-pad.css +23 -9
  189. package/dist/css/skeleton.css +7 -7
  190. package/dist/css/slider.css +71 -42
  191. package/dist/css/sparkline.css +8 -2
  192. package/dist/css/spinner.css +40 -20
  193. package/dist/css/statistic.css +14 -14
  194. package/dist/css/steps.css +115 -84
  195. package/dist/css/switch.css +9 -7
  196. package/dist/css/table.css +27 -10
  197. package/dist/css/tabs.css +35 -12
  198. package/dist/css/tag-group.css +17 -6
  199. package/dist/css/tag.css +54 -29
  200. package/dist/css/tags-input.css +38 -19
  201. package/dist/css/text-field.css +5 -5
  202. package/dist/css/time-field.css +4 -4
  203. package/dist/css/time-picker.css +150 -64
  204. package/dist/css/time-range-picker.css +91 -62
  205. package/dist/css/timeline.css +37 -20
  206. package/dist/css/timer.css +3 -3
  207. package/dist/css/toggle-group.css +4 -4
  208. package/dist/css/tool-call.css +6 -4
  209. package/dist/css/toolbar.css +6 -5
  210. package/dist/css/tooltip.css +15 -16
  211. package/dist/css/tour.css +14 -7
  212. package/dist/css/transfer.css +22 -16
  213. package/dist/css/tree-select.css +10 -10
  214. package/dist/css/tree.css +26 -25
  215. package/dist/css/typography.css +28 -25
  216. package/dist/family/action-control.css +30 -24
  217. package/dist/family/chart.css +57 -0
  218. package/dist/family/collection-item.css +12 -8
  219. package/dist/family/field-chrome.css +28 -19
  220. package/dist/family/loading-ring.css +20 -13
  221. package/dist/family/swatch.css +4 -4
  222. package/dist/family/tag-list.css +6 -0
  223. package/family/action-control.css +30 -24
  224. package/family/chart.css +57 -0
  225. package/family/collection-item.css +12 -8
  226. package/family/field-chrome.css +28 -19
  227. package/family/loading-ring.css +20 -13
  228. package/family/swatch.css +4 -4
  229. package/family/tag-list.css +6 -0
  230. package/index.css +3580 -2060
  231. package/index.unlayered.css +3579 -2060
  232. package/package.json +2 -2
@@ -70,7 +70,6 @@
70
70
  --xh-_time-range-picker-control-px: var(--xh-control-px-md);
71
71
  --xh-_time-range-picker-gap: var(--xh-control-gap-md);
72
72
  --xh-_time-range-picker-font-size: var(--xh-control-font-md);
73
- --xh-_time-range-picker-item-py: var(--xh-list-option-py-md);
74
73
 
75
74
  /* 段位强调随语气走:当前段是「当前项」,淡底 + 淡底前景;对号使用普通表面上的前景色。
76
75
  没写 data-tone 时这几个 --xh-_tone* 没被声明,退回品牌色 */
@@ -103,7 +102,6 @@
103
102
  --xh-_time-range-picker-control-px: var(--xh-control-px-sm);
104
103
  --xh-_time-range-picker-gap: var(--xh-control-gap-sm);
105
104
  --xh-_time-range-picker-font-size: var(--xh-control-font-sm);
106
- --xh-_time-range-picker-item-py: var(--xh-list-option-py-sm);
107
105
  }
108
106
 
109
107
  .xh-scope-time-range-picker:is([data-part='root'], [data-part='positioner'])[data-size='lg'] {
@@ -112,7 +110,6 @@
112
110
  --xh-_time-range-picker-control-px: var(--xh-control-px-lg);
113
111
  --xh-_time-range-picker-gap: var(--xh-control-gap-lg);
114
112
  --xh-_time-range-picker-font-size: var(--xh-control-font-lg);
115
- --xh-_time-range-picker-item-py: var(--xh-list-option-py-lg);
116
113
  }
117
114
 
118
115
  /* 声明了 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去 */
@@ -121,14 +118,16 @@
121
118
  }
122
119
 
123
120
  .xh-scope-time-range-picker[data-part='label'] {
124
- color: var(--xh-time-range-picker-label-fg, var(--xh-fg-default));
121
+ /* 竖排时标签与控件之间的距离:根的 gap 之上补一段差值,--xh-time-range-picker-label-gap 给多少最终就是多少 */
122
+ margin-block-end: calc(var(--xh-time-range-picker-label-gap, var(--xh-space-2)) - var(--xh-time-range-picker-gap, var(--xh-space-1)));
123
+ color: var(--xh-time-range-picker-label-fg, var(--xh-fg-muted));
125
124
  font-size: var(--xh-time-range-picker-label-font-size, var(--xh-text-label-size));
126
125
  font-weight: var(--xh-time-range-picker-label-font-weight, var(--xh-text-label-weight));
127
126
  line-height: var(--xh-leading-none);
128
127
  }
129
128
 
130
129
  .xh-scope-time-range-picker[data-part='label'][data-disabled] {
131
- color: var(--xh-time-range-picker-label-fg-disabled, var(--xh-fg-subtle));
130
+ color: var(--xh-time-range-picker-label-fg-disabled, var(--xh-fg-muted));
132
131
  }
133
132
 
134
133
  /* 画成一个框的是 control:几段文字、展开按钮、清空按钮要看起来是一体的,
@@ -150,8 +149,6 @@
150
149
  --xh-field-border-hover: var(--xh-time-range-picker-control-border-hover, var(--xh-_field-variant-border-hover));
151
150
  --xh-field-border-focus: var(--xh-time-range-picker-control-border-focus, var(--xh-_field-variant-border-focus));
152
151
  --xh-field-border-invalid: var(--xh-time-range-picker-control-border-invalid, var(--xh-_field-variant-border-invalid));
153
- --xh-field-ring-focus: var(--xh-ring-focus);
154
- --xh-field-ring-invalid: var(--xh-ring-invalid);
155
152
  --xh-field-shadow-rest: var(--xh-time-range-picker-control-shadow, none);
156
153
  /* 段位靠键盘编辑,盒上不是文本光标 */
157
154
  --xh-field-cursor-rest: default;
@@ -325,21 +322,22 @@
325
322
  /* 几列并排:整体高度由列自己撑,滚动发生在列里而不是整个面板上——
326
323
  整面板滚会让时列与分列一起走,挑分的时候时就看不见了。
327
324
  含多列的锚定面板走 floating 材质:实体底 + --xh-border-default 描边 + --xh-elevation-floating 落影,
328
- 不透景、不画顶光 */
325
+ 不透景、不画顶光。面板自己不留内衬:各列与快捷选项列自带内衬,列间分隔线从面板顶边通到底边 */
329
326
  .xh-scope-time-range-picker[data-part='content'] {
330
327
  position: relative;
331
328
  display: flex;
332
329
  align-items: stretch;
333
- padding-block: var(--xh-time-range-picker-content-py, var(--xh-space-2));
334
- padding-inline: var(--xh-time-range-picker-content-px, var(--xh-space-2));
330
+ padding-block: var(--xh-time-range-picker-content-py, var(--xh-space-0));
331
+ padding-inline: var(--xh-time-range-picker-content-px, var(--xh-space-0));
335
332
  /* 行内轴的上限是落位后的可用宽度:两组时列并排,秒与上下午都开时八列合计会越过最窄视口,
336
333
  放不下时面板内自己横滚,每一列保持自己的宽度不被压 */
337
334
  max-inline-size: var(--xh-_time-range-picker-available-w);
338
335
  overflow-x: auto;
339
336
  /* 浮层滚动面:滚到头不把页面一起带走 */
340
337
  overscroll-behavior: contain;
341
- /* 列自己定高,面板整体不该再长过页内滚动面那一档 */
342
- max-block-size: var(--xh-time-range-picker-content-max-h, var(--xh-viewport-h-lg));
338
+ /* 两组时列都按 px 定高(列取 --xh-overlay-time-column-h),面板的天然高度就是它们的和,缺省不另设上限:
339
+ 按 rem 的滚动面档会随根字号缩小,根字号很小时面板出竖滚 */
340
+ max-block-size: var(--xh-time-range-picker-content-max-h, none);
343
341
  border: var(--xh-stroke-thin) solid var(--xh-time-range-picker-content-border, var(--xh-border-default));
344
342
  border-radius: var(--xh-time-range-picker-content-radius, var(--xh-shape-overlay));
345
343
  background: var(--xh-time-range-picker-content-bg, var(--xh-bg-surface));
@@ -373,60 +371,71 @@
373
371
  animation: xh-overlay-slide-out var(--xh-motion-duration-exit) var(--xh-motion-ease-exit) forwards;
374
372
  }
375
373
 
376
- /* 快捷选项也是一列,与时分秒那几列并排,排在行内起始一侧 */
374
+ /* 快捷选项也是一列,与时分秒那几列并排,排在行内起始一侧;限高与时间列同一档 */
377
375
  .xh-scope-time-range-picker[data-part='preset-group'] {
378
376
  display: flex;
379
377
  flex: none;
380
378
  flex-direction: column;
381
- gap: var(--xh-time-range-picker-preset-group-gap, var(--xh-list-option-gap));
382
- max-block-size: var(--xh-time-range-picker-preset-group-h, var(--xh-viewport-h-sm));
383
- padding-inline: var(--xh-time-range-picker-preset-group-px, var(--xh-space-1));
379
+ gap: var(--xh-time-range-picker-preset-group-gap, var(--xh-space-1));
380
+ max-block-size: var(--xh-time-range-picker-preset-group-h, var(--xh-overlay-time-column-h));
381
+ padding-block: var(--xh-time-range-picker-preset-group-py, var(--xh-space-2_5));
382
+ padding-inline: var(--xh-time-range-picker-preset-group-px, var(--xh-space-2));
384
383
  overflow-y: auto;
385
384
  /* 浮层滚动面:滚到头不把页面一起带走 */
386
385
  overscroll-behavior: contain;
387
- border-inline-end: var(--xh-stroke-thin) solid var(--xh-time-range-picker-column-divider, var(--xh-material-solid-separator));
386
+ border-inline-end: var(--xh-stroke-thin) solid var(--xh-time-range-picker-column-divider, var(--xh-material-solid-border));
388
387
  }
389
388
 
390
389
  .xh-scope-time-range-picker[data-part='preset-group'][hidden] {
391
390
  display: none;
392
391
  }
393
392
 
394
- /* 快捷选项:悬停 / 高亮 100、按下 200、禁用面由 Collection Item 家族按 overlay 语境给(选中 = 透明底 +
395
- 行尾对号,正文保持 rest 色与常规字重)。选项没有正文部件,匿名文本进不了家族网格的 text 列,
396
- 行保持块级排版,末端为对号预留固定轨 */
393
+ /* 快捷选项:每一项是一颗 24 高的淡底小钮——静息 100、悬停 / 高亮 200、按下 300(淡底承载阶梯),
394
+ 字取说明档 12px、次级前景;禁用面由 Collection Item 家族按 overlay 语境给。headless 把它投成 listbox 的
395
+ option、当前值落在哪一项就报 aria-selected,选中仍画行尾对号(面与字不变),对号是这条状态唯一的视觉通道。
396
+ 选项没有正文部件,匿名文本进不了家族网格的 text 列,行保持块级排版,末端为对号预留固定轨 */
397
397
  .xh-scope-time-range-picker[data-part='preset'] {
398
- --xh-collection-block-padding: var(--xh-time-range-picker-preset-py, var(--xh-space-1));
399
- --xh-collection-inline-padding: var(--xh-time-range-picker-preset-px, var(--xh-space-3));
400
- --xh-collection-font-size: var(--xh-text-secondary-size);
401
- --xh-collection-radius: var(--xh-time-range-picker-preset-radius, var(--xh-shape-inset));
402
- /* 面板是实体面(floating),正文取页面前景 */
403
- --xh-collection-fg-rest: var(--xh-time-range-picker-preset-fg, var(--xh-fg-default));
404
- --xh-collection-fg-hover: var(--xh-time-range-picker-preset-fg, var(--xh-fg-default));
405
- --xh-collection-fg-keyboard-highlight: var(--xh-time-range-picker-preset-fg, var(--xh-fg-default));
406
- --xh-collection-fg-pressed: var(--xh-time-range-picker-preset-fg, var(--xh-fg-default));
407
- --xh-collection-fg-selected: var(--xh-time-range-picker-preset-fg-checked, var(--xh-time-range-picker-preset-fg, var(--xh-fg-default)));
408
- --xh-collection-fg-selected-highlight: var(--xh-time-range-picker-preset-fg-checked, var(--xh-time-range-picker-preset-fg, var(--xh-fg-default)));
409
- --xh-collection-fg-selected-hover: var(--xh-time-range-picker-preset-fg-checked, var(--xh-time-range-picker-preset-fg, var(--xh-fg-default)));
410
- --xh-collection-fg-selected-pressed: var(--xh-time-range-picker-preset-fg-checked, var(--xh-time-range-picker-preset-fg, var(--xh-fg-default)));
398
+ --xh-collection-block-padding: 0;
399
+ --xh-collection-inline-padding: var(--xh-time-range-picker-preset-px, var(--xh-space-2));
400
+ --xh-collection-font-size: var(--xh-time-range-picker-preset-font-size, var(--xh-text-caption-size));
401
+ --xh-collection-radius: var(--xh-time-range-picker-preset-radius, var(--xh-shape-control));
402
+ --xh-collection-fg-rest: var(--xh-time-range-picker-preset-fg, var(--xh-fg-muted));
403
+ --xh-collection-fg-selected: var(--xh-time-range-picker-preset-fg, var(--xh-fg-muted));
404
+ /* 悬停 / 高亮 / 按下时字换正文色:底升到 200 / 300 之后,次级前景在暗色下不足 4.5:1 */
405
+ --xh-collection-fg-hover: var(--xh-time-range-picker-preset-fg-hover, var(--xh-fg-default));
406
+ --xh-collection-fg-keyboard-highlight: var(--xh-time-range-picker-preset-fg-hover, var(--xh-fg-default));
407
+ --xh-collection-fg-pressed: var(--xh-time-range-picker-preset-fg-hover, var(--xh-fg-default));
408
+ --xh-collection-fg-selected-highlight: var(--xh-time-range-picker-preset-fg-hover, var(--xh-fg-default));
409
+ --xh-collection-fg-selected-hover: var(--xh-time-range-picker-preset-fg-hover, var(--xh-fg-default));
410
+ --xh-collection-fg-selected-pressed: var(--xh-time-range-picker-preset-fg-hover, var(--xh-fg-default));
411
411
  --xh-collection-fg-disabled: var(--xh-time-range-picker-preset-fg-disabled, var(--xh-fg-disabled));
412
- --xh-collection-bg-hover: var(--xh-time-range-picker-preset-bg-hover, var(--xh-bg-subtle));
413
- --xh-collection-bg-keyboard-highlight: var(--xh-time-range-picker-preset-bg-hover, var(--xh-bg-subtle));
414
- --xh-collection-bg-selected-highlight: var(--xh-time-range-picker-preset-bg-hover, var(--xh-bg-subtle));
415
- --xh-collection-bg-selected-hover: var(--xh-time-range-picker-preset-bg-hover, var(--xh-bg-subtle));
416
- --xh-collection-bg-pressed: var(--xh-time-range-picker-preset-bg-pressed, var(--xh-bg-subtle-hover));
417
- --xh-collection-bg-selected-pressed: var(--xh-time-range-picker-preset-bg-pressed, var(--xh-bg-subtle-hover));
412
+ --xh-collection-font-weight-selected: var(--xh-font-weight-regular);
413
+ --xh-collection-font-weight-selected-highlight: var(--xh-font-weight-regular);
414
+ --xh-collection-font-weight-selected-hover: var(--xh-font-weight-regular);
415
+ --xh-collection-font-weight-selected-pressed: var(--xh-font-weight-regular);
416
+ --xh-collection-bg-rest: var(--xh-time-range-picker-preset-bg, var(--xh-bg-subtle));
417
+ --xh-collection-bg-selected: var(--xh-time-range-picker-preset-bg, var(--xh-bg-subtle));
418
+ --xh-collection-bg-hover: var(--xh-time-range-picker-preset-bg-hover, var(--xh-bg-subtle-hover));
419
+ --xh-collection-bg-keyboard-highlight: var(--xh-time-range-picker-preset-bg-hover, var(--xh-bg-subtle-hover));
420
+ --xh-collection-bg-selected-highlight: var(--xh-time-range-picker-preset-bg-hover, var(--xh-bg-subtle-hover));
421
+ --xh-collection-bg-selected-hover: var(--xh-time-range-picker-preset-bg-hover, var(--xh-bg-subtle-hover));
422
+ --xh-collection-bg-pressed: var(--xh-time-range-picker-preset-bg-pressed, var(--xh-bg-subtle-active));
423
+ --xh-collection-bg-selected-pressed: var(--xh-time-range-picker-preset-bg-pressed, var(--xh-bg-subtle-active));
418
424
  --xh-collection-outline-keyboard-highlight: transparent;
419
425
  --xh-collection-outline-selected-highlight: transparent;
420
426
 
421
427
  position: relative;
422
428
  display: block;
423
429
  flex: none;
430
+ block-size: var(--xh-time-range-picker-preset-h, var(--xh-control-action-size));
424
431
  /* 对号的末端轨始终留着,切换选中时文字与整列宽度都不移动。 */
425
432
  padding-inline-end: calc(
426
- var(--xh-time-range-picker-preset-px, var(--xh-space-3))
427
- + var(--xh-time-range-picker-preset-check-size, var(--xh-control-indicator-size))
433
+ var(--xh-time-range-picker-preset-px, var(--xh-space-2))
434
+ + var(--xh-time-range-picker-preset-check-size, var(--xh-control-indicator-sm))
428
435
  + var(--xh-space-1)
429
436
  );
437
+ /* 一行字在 24 高的钮里垂直居中 */
438
+ line-height: var(--xh-time-range-picker-preset-h, var(--xh-control-action-size));
430
439
  white-space: nowrap;
431
440
  user-select: none;
432
441
  }
@@ -444,9 +453,9 @@
444
453
  content: '';
445
454
  position: absolute;
446
455
  inset-block-start: 50%;
447
- inset-inline-end: var(--xh-time-range-picker-preset-px, var(--xh-space-3));
448
- inline-size: var(--xh-time-range-picker-preset-check-size, var(--xh-control-indicator-size));
449
- block-size: var(--xh-time-range-picker-preset-check-size, var(--xh-control-indicator-size));
456
+ inset-inline-end: var(--xh-time-range-picker-preset-px, var(--xh-space-2));
457
+ inline-size: var(--xh-time-range-picker-preset-check-size, var(--xh-control-indicator-sm));
458
+ block-size: var(--xh-time-range-picker-preset-check-size, var(--xh-control-indicator-sm));
450
459
  background-color: var(--xh-time-range-picker-preset-check-fg, var(--xh-_time-range-picker-check-fg));
451
460
  opacity: 0;
452
461
  translate: 0 -50%;
@@ -470,7 +479,7 @@
470
479
  background-color: var(--xh-time-range-picker-preset-fg-disabled, var(--xh-fg-disabled));
471
480
  }
472
481
 
473
- /* 一端的几列成组并排,小标题独占顶上一行;两组之间留一道更宽的分隔,眼睛先分起止、再分时分 */
482
+ /* 一端的几列成组并排,小标题独占顶上一行;两组之间不另留空当,只隔一道竖线,眼睛先分起止、再分时分 */
474
483
  .xh-scope-time-range-picker[data-part='column-group'] {
475
484
  --xh-_time-range-picker-column-group-label-py: var(
476
485
  --xh-time-range-picker-column-group-py,
@@ -499,9 +508,9 @@
499
508
  }
500
509
 
501
510
  .xh-scope-time-range-picker[data-part='column-group'] + .xh-scope-time-range-picker[data-part='column-group'] {
502
- margin-inline-start: var(--xh-time-range-picker-column-group-gap, var(--xh-space-2));
503
- padding-inline-start: var(--xh-time-range-picker-column-group-gap, var(--xh-space-2));
504
- border-inline-start: var(--xh-stroke-thin) solid var(--xh-time-range-picker-column-group-divider, var(--xh-material-solid-separator));
511
+ margin-inline-start: var(--xh-time-range-picker-column-group-gap, var(--xh-space-0));
512
+ padding-inline-start: var(--xh-time-range-picker-column-group-gap, var(--xh-space-0));
513
+ border-inline-start: var(--xh-stroke-thin) solid var(--xh-time-range-picker-column-group-divider, var(--xh-material-solid-border));
505
514
  }
506
515
 
507
516
  /* 组顶上的小标题:独占一行,字号走辅助文本档 */
@@ -527,15 +536,21 @@
527
536
  display: none;
528
537
  }
529
538
 
530
- /* 一列一个滚动区:列与列之间用细分隔线,视觉上"时 | 分 | 秒"三栏分明 */
539
+ /* 一列一个滚动区:列与列之间用细分隔线,视觉上"时 | 分 | 秒"三栏分明。列宽取时间列档(两位数字加两侧对号轨),
540
+ 列高是七格整行;列顶留 4,列底留出一截空白,末尾几格(23 时、55–59 分)也能滚到列顶,各列的选中落在同一行 */
531
541
  .xh-scope-time-range-picker[data-part='column'] {
542
+ --xh-_time-range-picker-column-h: var(--xh-time-range-picker-column-h, var(--xh-overlay-time-column-h));
543
+ --xh-_time-range-picker-column-py: var(--xh-time-range-picker-column-py, var(--xh-space-1));
544
+
532
545
  display: flex;
533
546
  flex: none;
534
547
  flex-direction: column;
535
- gap: var(--xh-time-range-picker-column-gap, 0);
536
- min-inline-size: var(--xh-time-range-picker-column-min-w, var(--xh-overlay-column-min-w));
548
+ gap: var(--xh-time-range-picker-column-gap, var(--xh-space-2));
549
+ min-inline-size: var(--xh-time-range-picker-column-min-w, var(--xh-overlay-time-column-w));
537
550
  /* 几列并排:定高而不是随内容收,否则时列与分列的可选值一多一少就错位 */
538
- block-size: var(--xh-time-range-picker-column-h, var(--xh-viewport-h-sm));
551
+ block-size: var(--xh-_time-range-picker-column-h);
552
+ padding-block: var(--xh-_time-range-picker-column-py)
553
+ calc(var(--xh-_time-range-picker-column-h) - var(--xh-time-range-picker-item-h, var(--xh-control-action-size)) - var(--xh-_time-range-picker-column-py));
539
554
  padding-inline: var(--xh-time-range-picker-column-px, 0);
540
555
  overflow-y: auto;
541
556
  /* 浮层滚动面:滚到头不把页面一起带走 */
@@ -543,6 +558,11 @@
543
558
  /* 滚动容器在某些浏览器里会被自动塞进 Tab 序列,是否画环见下方按 tabindex 分档的两条 */
544
559
  }
545
560
 
561
+ /* 组里的列顶画一道线:组顶小标题那一带与列分开,起止两组的线在组边接上 */
562
+ .xh-scope-time-range-picker[data-part='column-group'] > .xh-scope-time-range-picker[data-part='column'] {
563
+ border-block-start: var(--xh-stroke-thin) solid var(--xh-time-range-picker-column-divider, var(--xh-material-solid-border));
564
+ }
565
+
546
566
  /* granularity 关掉的列(精度不到秒时的秒列)由连接层打 hidden */
547
567
  .xh-scope-time-range-picker[data-part='column'][hidden] {
548
568
  display: none;
@@ -550,7 +570,7 @@
550
570
 
551
571
  /* 每列后面紧跟着它自己的贴层条子节点,相邻选择器接不到下一列,按「前面有过列」取第二列起 */
552
572
  .xh-scope-time-range-picker[data-part='column'] ~ .xh-scope-time-range-picker[data-part='column'] {
553
- border-inline-start: var(--xh-stroke-thin) solid var(--xh-time-range-picker-column-divider, var(--xh-material-solid-separator));
573
+ border-inline-start: var(--xh-stroke-thin) solid var(--xh-time-range-picker-column-divider, var(--xh-material-solid-border));
554
574
  }
555
575
 
556
576
  /* 焦点落在列上有两种情形:指针打开、这一段还空着、还没有任何格当锚点,或整列被界裁空。
@@ -564,8 +584,8 @@
564
584
  outline: none;
565
585
  }
566
586
 
567
- /* 时间格:悬停 / 高亮 100、按下 200 由 Collection Item 家族按 overlay 语境给,选中只留末端对号——
568
- 浮层瞬态集合的选中不上品牌淡底、不加粗、不变字色。格里只有数字、没有正文部件,保持自己的
587
+ /* 时间格:24 高的通栏条,列内间距 8 撑出 32 的行距;悬停 / 高亮 100、按下 200 由 Collection Item 家族按
588
+ overlay 语境给,选中透明底 + 中等字重 + 末端对号(对号集合的选中),不上品牌淡底、不变字色。格里只有数字、没有正文部件,保持自己的
569
589
  居中排版与等宽标记轨,家族只给状态面。行的字色与字重按值选择族的同一套映射写(--xh-time-range-picker-item-fg
570
590
  / -fg-selected / -font-weight-selected 使用者槽,缺省落家族配方的行字色 --xh-material-frosted-fg:
571
591
  它在各主题与 forced-colors 下都等于 --xh-fg-default,floating 面板上的面色仍由 content 自己给) */
@@ -574,11 +594,12 @@
574
594
  var(--xh-time-range-picker-item-px, var(--xh-space-0_5)),
575
595
  calc(var(--xh-time-range-picker-item-check-size, var(--xh-control-indicator-size)) + var(--xh-space-0_5))
576
596
  );
577
- --xh-collection-block-padding: var(--xh-time-range-picker-item-py, var(--xh-_time-range-picker-item-py));
597
+ --xh-collection-block-padding: 0;
578
598
  /* 两侧留同宽轨:对号绝对落在末端,数字仍在整格的数学中心。 */
579
599
  --xh-collection-inline-padding: var(--xh-_time-range-picker-item-rail);
580
600
  --xh-collection-font-size: var(--xh-time-range-picker-item-font-size, var(--xh-_time-range-picker-font-size));
581
- --xh-collection-radius: var(--xh-time-range-picker-item-radius, var(--xh-shape-inset));
601
+ /* 浮层里的列表是通栏行:格铺满列宽、不取圆角 */
602
+ --xh-collection-radius: var(--xh-time-range-picker-item-radius, 0);
582
603
  --xh-collection-fg-rest: var(--xh-time-range-picker-item-fg, var(--xh-material-frosted-fg));
583
604
  --xh-collection-fg-hover: var(--xh-time-range-picker-item-fg, var(--xh-material-frosted-fg));
584
605
  --xh-collection-fg-keyboard-highlight: var(--xh-time-range-picker-item-fg, var(--xh-material-frosted-fg));
@@ -587,10 +608,10 @@
587
608
  --xh-collection-fg-selected-highlight: var(--xh-time-range-picker-item-fg-selected, var(--xh-time-range-picker-item-fg, var(--xh-material-frosted-fg)));
588
609
  --xh-collection-fg-selected-hover: var(--xh-time-range-picker-item-fg-selected, var(--xh-time-range-picker-item-fg, var(--xh-material-frosted-fg)));
589
610
  --xh-collection-fg-selected-pressed: var(--xh-time-range-picker-item-fg-selected, var(--xh-time-range-picker-item-fg, var(--xh-material-frosted-fg)));
590
- --xh-collection-font-weight-selected: var(--xh-time-range-picker-item-font-weight-selected, var(--xh-font-weight-regular));
591
- --xh-collection-font-weight-selected-highlight: var(--xh-time-range-picker-item-font-weight-selected, var(--xh-font-weight-regular));
592
- --xh-collection-font-weight-selected-hover: var(--xh-time-range-picker-item-font-weight-selected, var(--xh-font-weight-regular));
593
- --xh-collection-font-weight-selected-pressed: var(--xh-time-range-picker-item-font-weight-selected, var(--xh-font-weight-regular));
611
+ --xh-collection-font-weight-selected: var(--xh-time-range-picker-item-font-weight-selected, var(--xh-font-weight-medium));
612
+ --xh-collection-font-weight-selected-highlight: var(--xh-time-range-picker-item-font-weight-selected, var(--xh-font-weight-medium));
613
+ --xh-collection-font-weight-selected-hover: var(--xh-time-range-picker-item-font-weight-selected, var(--xh-font-weight-medium));
614
+ --xh-collection-font-weight-selected-pressed: var(--xh-time-range-picker-item-font-weight-selected, var(--xh-font-weight-medium));
594
615
  --xh-collection-bg-hover: var(--xh-time-range-picker-item-bg-hover, var(--xh-bg-subtle));
595
616
  --xh-collection-bg-keyboard-highlight: var(--xh-time-range-picker-item-bg-hover, var(--xh-bg-subtle));
596
617
  --xh-collection-bg-selected-highlight: var(--xh-time-range-picker-item-bg-hover, var(--xh-bg-subtle));
@@ -605,7 +626,7 @@
605
626
  flex: none;
606
627
  align-items: center;
607
628
  justify-content: center;
608
- block-size: var(--xh-time-range-picker-item-h, auto);
629
+ block-size: var(--xh-time-range-picker-item-h, var(--xh-control-action-size));
609
630
  /* 居中的单个数字格没有截断层,行高保持紧排,列内多露几格 */
610
631
  line-height: var(--xh-leading-normal);
611
632
  white-space: nowrap;
@@ -621,6 +642,14 @@
621
642
  }
622
643
 
623
644
  /* 作者自己藏掉某几格时要让位,有 display 就得补这条 */
645
+ /* 命中区向上下各补半个列内间距:两格之间那 8px 缝归上下两格各一半,指针落在缝里不落空 */
646
+ .xh-scope-time-range-picker[data-part='item']::before {
647
+ content: '';
648
+ position: absolute;
649
+ inset-block: calc(-0.5 * var(--xh-time-range-picker-column-gap, var(--xh-space-2)));
650
+ inset-inline: 0;
651
+ }
652
+
624
653
  .xh-scope-time-range-picker[data-part='item'][hidden] {
625
654
  display: none;
626
655
  }
@@ -14,14 +14,15 @@
14
14
  .xh-scope-timeline[data-part='root'] {
15
15
  /* 尺寸档只换这几个私有槽,条目、圆点与文字都从 root 继承它们,
16
16
  换档不必给每个部件各写一条选择器 */
17
- --xh-_timeline-dot-size: var(--xh-space-2_5);
18
- --xh-_timeline-gutter: var(--xh-space-3);
19
- --xh-_timeline-item-gap: var(--xh-space-5);
17
+ /* 圆点只标位置,6px 实心;圆点到内容 16px;条目之间 32px,事件一条条分得开 */
18
+ --xh-_timeline-dot-size: var(--xh-space-1_5);
19
+ --xh-_timeline-gutter: var(--xh-space-4);
20
+ --xh-_timeline-item-gap: var(--xh-space-8);
20
21
  --xh-_timeline-title-font-size: var(--xh-control-font-md);
21
22
  --xh-_timeline-caption-font-size: var(--xh-text-caption-size);
22
23
  /* 标题首行占多高。圆点按它居中下移,圆心才落在标题这一行的中线上 */
23
24
  --xh-_timeline-line-h: calc(
24
- var(--xh-timeline-title-font-size, var(--xh-_timeline-title-font-size)) * var(--xh-leading-tight)
25
+ var(--xh-timeline-title-font-size, var(--xh-_timeline-title-font-size)) * var(--xh-leading-normal)
25
26
  );
26
27
 
27
28
  /* 条目之间不设 gap:留白由 content 自己的边距撑出来,连线才连得到下一条的圆点。
@@ -51,17 +52,17 @@
51
52
  /* —— 尺寸 —— */
52
53
  /* 缺省档写在上面的基础规则里。圆点直径不在控件高度那把尺上,三档走空间尺相邻的三格 */
53
54
  .xh-scope-timeline[data-part='root'][data-size='sm'] {
54
- --xh-_timeline-dot-size: var(--xh-space-2);
55
- --xh-_timeline-gutter: var(--xh-space-2);
56
- --xh-_timeline-item-gap: var(--xh-space-4);
55
+ --xh-_timeline-dot-size: var(--xh-space-1);
56
+ --xh-_timeline-gutter: var(--xh-space-3);
57
+ --xh-_timeline-item-gap: var(--xh-space-6);
57
58
  --xh-_timeline-title-font-size: var(--xh-control-font-sm);
58
59
  /* 字号档最小就是 xs,时刻文本不再往下走,故不重声明 caption */
59
60
  }
60
61
 
61
62
  .xh-scope-timeline[data-part='root'][data-size='lg'] {
62
- --xh-_timeline-dot-size: var(--xh-space-3);
63
- --xh-_timeline-gutter: var(--xh-space-4);
64
- --xh-_timeline-item-gap: var(--xh-space-6);
63
+ --xh-_timeline-dot-size: var(--xh-space-2);
64
+ --xh-_timeline-gutter: var(--xh-space-5);
65
+ --xh-_timeline-item-gap: calc(var(--xh-space-8) + var(--xh-space-2));
65
66
  --xh-_timeline-title-font-size: var(--xh-control-font-lg);
66
67
  --xh-_timeline-caption-font-size: var(--xh-text-secondary-size);
67
68
  }
@@ -99,8 +100,8 @@
99
100
  inline-size: var(--xh-timeline-indicator-size, var(--xh-_timeline-dot-size));
100
101
  block-size: var(--xh-timeline-indicator-size, var(--xh-_timeline-dot-size));
101
102
  border-radius: var(--xh-timeline-indicator-radius, var(--xh-shape-circle));
102
- /* 使用者令牌排在语气之前;两者都没有时退回一个中性的实心点 */
103
- background: var(--xh-timeline-indicator-bg, var(--xh-_tone-soft, var(--xh-fg-muted)));
103
+ /* 使用者令牌排在语气之前;两者都没有时退回品牌色的实心点 */
104
+ background: var(--xh-timeline-indicator-bg, var(--xh-_tone-soft, var(--xh-fg-brand)));
104
105
  color: var(--xh-timeline-indicator-fg, var(--xh-_tone-on, var(--xh-fg-on-brand)));
105
106
  font-size: var(--xh-timeline-indicator-font-size, var(--xh-_timeline-caption-font-size));
106
107
  line-height: var(--xh-leading-none);
@@ -140,7 +141,7 @@
140
141
  grid-column: 1;
141
142
  grid-row: 2;
142
143
  justify-self: center;
143
- inline-size: var(--xh-timeline-connector-thickness, var(--xh-stroke-thick));
144
+ inline-size: var(--xh-timeline-connector-thickness, var(--xh-stroke-thin));
144
145
  min-block-size: var(--xh-timeline-connector-min-length, var(--xh-space-4));
145
146
  margin-block-start: var(--xh-space-1);
146
147
  }
@@ -223,7 +224,8 @@
223
224
  font-size: var(--xh-timeline-label-font-size, var(--xh-_timeline-caption-font-size));
224
225
  /* 等宽数字:日期里的 1 与 7 在比例字体里宽度不同,不定住会让整列坐标左右抖一格 */
225
226
  font-variant-numeric: tabular-nums;
226
- line-height: var(--xh-leading-tight);
227
+ /* 坐标的行盒与标题首行同高,小一号的坐标字落在标题那一行的中线上 */
228
+ line-height: var(--xh-_timeline-line-h);
227
229
  text-align: var(--xh-_timeline-label-align, end);
228
230
  }
229
231
 
@@ -311,17 +313,17 @@
311
313
  justify-self: stretch;
312
314
  inline-size: auto;
313
315
  min-inline-size: var(--xh-timeline-connector-min-length, var(--xh-space-4));
314
- block-size: var(--xh-timeline-connector-thickness, var(--xh-stroke-thick));
316
+ block-size: var(--xh-timeline-connector-thickness, var(--xh-stroke-thin));
315
317
  min-block-size: 0;
316
318
  margin-block-start: 0;
317
- margin-inline-start: var(--xh-space-1);
319
+ margin-inline: var(--xh-space-1_5) var(--xh-space-1);
318
320
  }
319
321
 
320
322
  .xh-scope-timeline[data-part='item'][data-orientation='horizontal'] .xh-scope-timeline[data-part='content'],
321
323
  .xh-scope-timeline[data-part='item'][data-orientation='horizontal']:has(> .xh-scope-timeline[data-part='label']) > .xh-scope-timeline[data-part='content'] {
322
324
  grid-column: 1 / -1;
323
325
  grid-row: 2;
324
- padding-block-start: var(--xh-timeline-content-pt, var(--xh-space-2));
326
+ padding-block-start: var(--xh-timeline-content-pt, var(--xh-space-4));
325
327
  padding-block-end: 0;
326
328
  padding-inline-end: var(--xh-timeline-item-gap, var(--xh-_timeline-item-gap));
327
329
  }
@@ -353,7 +355,7 @@
353
355
  grid-row: 1;
354
356
  align-self: end;
355
357
  padding-block-start: 0;
356
- padding-block-end: var(--xh-timeline-content-pb, var(--xh-space-2));
358
+ padding-block-end: var(--xh-timeline-content-pb, var(--xh-space-4));
357
359
  }
358
360
 
359
361
  .xh-scope-timeline[data-part='item'][data-orientation='horizontal'][data-placement='alternate'] {
@@ -374,7 +376,7 @@
374
376
  grid-row: 1;
375
377
  align-self: end;
376
378
  padding-block-start: 0;
377
- padding-block-end: var(--xh-timeline-content-pb, var(--xh-space-2));
379
+ padding-block-end: var(--xh-timeline-content-pb, var(--xh-space-4));
378
380
  }
379
381
  }
380
382
 
@@ -389,7 +391,7 @@
389
391
  color: var(--xh-timeline-title-fg, var(--xh-fg-default));
390
392
  font-size: var(--xh-timeline-title-font-size, var(--xh-_timeline-title-font-size));
391
393
  font-weight: var(--xh-timeline-title-font-weight, var(--xh-text-label-weight));
392
- line-height: var(--xh-leading-tight);
394
+ line-height: var(--xh-leading-normal);
393
395
  }
394
396
 
395
397
  .xh-scope-timeline[data-part='description'] {
@@ -411,6 +413,21 @@
411
413
  * 只剩几段没有次序的文字。两处都改由描边承载:圆点成一个空心圈,
412
414
  * 连线的两条边合起来就是那条线(线本身只有一个描边厚,两边各画一半正好填满)。
413
415
  */
416
+ /* 强制色:圆点与连线都是底色画的,系统会把底色换成 Canvas,整条轴就此消失。
417
+ 两处退出强制换色、直接写系统色;圆点里的序号字取 Canvas 压在 CanvasText 上 */
418
+ @media (forced-colors: active) {
419
+ .xh-scope-timeline[data-part='indicator'] {
420
+ forced-color-adjust: none;
421
+ background: CanvasText;
422
+ color: Canvas;
423
+ }
424
+
425
+ .xh-scope-timeline[data-part='connector'] {
426
+ forced-color-adjust: none;
427
+ background: CanvasText;
428
+ }
429
+ }
430
+
414
431
  @media print {
415
432
  .xh-scope-timeline[data-part='indicator'] {
416
433
  border: var(--xh-stroke-thick) solid currentColor;
@@ -17,7 +17,7 @@
17
17
  /* 三个尺寸档只换这两个私有槽,各部件从 root 继承它们,换档不必给每个部件各写一条选择器;
18
18
  起停钮的档位由连接层直接投给家族,这里不再中转 */
19
19
  .xh-scope-timer[data-part='root'] {
20
- --xh-_timer-digit-size: var(--xh-text-heading-2-size);
20
+ --xh-_timer-digit-size: var(--xh-text-heading-1-size);
21
21
  --xh-_timer-gap: var(--xh-space-3);
22
22
 
23
23
  display: inline-flex;
@@ -33,12 +33,12 @@
33
33
 
34
34
  /* —— 尺寸 —— */
35
35
  .xh-scope-timer[data-part='root'][data-size='sm'] {
36
- --xh-_timer-digit-size: var(--xh-text-heading-3-size);
36
+ --xh-_timer-digit-size: var(--xh-text-heading-2-size);
37
37
  --xh-_timer-gap: var(--xh-space-2);
38
38
  }
39
39
 
40
40
  .xh-scope-timer[data-part='root'][data-size='lg'] {
41
- --xh-_timer-digit-size: var(--xh-text-heading-1-size);
41
+ --xh-_timer-digit-size: var(--xh-text-display-size);
42
42
  --xh-_timer-gap: var(--xh-space-4);
43
43
  }
44
44
 
@@ -35,7 +35,7 @@
35
35
  --xh-_toggle-group-item-bg: var(--xh-bg-subtle);
36
36
  --xh-_toggle-group-item-bg-hover: var(--xh-bg-subtle-hover);
37
37
  --xh-_toggle-group-item-bg-active: var(--xh-bg-subtle-active);
38
- --xh-_toggle-group-item-fg: var(--xh-fg-default);
38
+ --xh-_toggle-group-item-fg: var(--xh-fg-muted);
39
39
  --xh-_toggle-group-item-border: transparent;
40
40
  --xh-_toggle-group-item-bg-on: var(--xh-_tone-subtle, var(--xh-bg-brand-subtle));
41
41
  --xh-_toggle-group-item-bg-on-hover: var(
@@ -86,7 +86,7 @@
86
86
  --xh-_toggle-group-item-bg: var(--xh-bg-subtle);
87
87
  --xh-_toggle-group-item-bg-hover: var(--xh-bg-subtle-hover);
88
88
  --xh-_toggle-group-item-bg-active: var(--xh-bg-subtle-active);
89
- --xh-_toggle-group-item-fg: var(--xh-fg-default);
89
+ --xh-_toggle-group-item-fg: var(--xh-fg-muted);
90
90
  --xh-_toggle-group-item-border: transparent;
91
91
  --xh-_toggle-group-item-bg-on: var(--xh-_tone-subtle, var(--xh-bg-brand-subtle));
92
92
  --xh-_toggle-group-item-bg-on-hover: var(--xh-_tone-subtle-hover, var(--xh-bg-brand-subtle-hover));
@@ -101,7 +101,7 @@
101
101
  --xh-_toggle-group-item-bg: transparent;
102
102
  --xh-_toggle-group-item-bg-hover: var(--xh-_tone-subtle, var(--xh-bg-subtle));
103
103
  --xh-_toggle-group-item-bg-active: var(--xh-_tone-subtle-hover, var(--xh-bg-subtle-hover));
104
- --xh-_toggle-group-item-fg: var(--xh-_tone-fg, var(--xh-fg-default));
104
+ --xh-_toggle-group-item-fg: var(--xh-_tone-fg, var(--xh-fg-muted));
105
105
  --xh-_toggle-group-item-border: transparent;
106
106
  --xh-_toggle-group-item-bg-on: var(--xh-_tone-subtle, var(--xh-bg-brand-subtle));
107
107
  --xh-_toggle-group-item-bg-on-hover: var(--xh-_tone-subtle-hover, var(--xh-bg-brand-subtle-hover));
@@ -129,7 +129,7 @@
129
129
  --xh-_toggle-group-item-bg: transparent;
130
130
  --xh-_toggle-group-item-bg-hover: var(--xh-_tone-subtle, var(--xh-bg-subtle));
131
131
  --xh-_toggle-group-item-bg-active: var(--xh-_tone-subtle-hover, var(--xh-bg-subtle-hover));
132
- --xh-_toggle-group-item-fg: var(--xh-_tone-fg, var(--xh-fg-default));
132
+ --xh-_toggle-group-item-fg: var(--xh-_tone-fg, var(--xh-fg-muted));
133
133
  --xh-_toggle-group-item-border: transparent;
134
134
  --xh-_toggle-group-item-bg-on: var(--xh-_tone-subtle, var(--xh-bg-brand-subtle));
135
135
  --xh-_toggle-group-item-bg-on-hover: var(--xh-_tone-subtle-hover, var(--xh-bg-brand-subtle-hover));
@@ -211,13 +211,15 @@
211
211
  display: none;
212
212
  }
213
213
 
214
- /* 三档落定的阶段收成状态 chip:几何与 Tag 的 sm 档同一把尺,淡底 + 同族可读字取连接层投影的语气。
215
- 在跑的两档不带底,让扫光自己说话 */
214
+ /* 三档落定的阶段收成状态 chip:与 Tag 的 sm 档同一副方签——control 圆角、块尺寸取 chip 档、竖向内衬为 0,
215
+ 淡底 + 同族可读字取连接层投影的语气。在跑的两档不带底,让扫光自己说话 */
216
216
  .xh-scope-tool-call[data-part='status'][data-tone] {
217
- padding-block: var(--xh-tool-call-status-py, var(--xh-space-0_5));
217
+ box-sizing: border-box;
218
+ min-block-size: var(--xh-tool-call-status-h, var(--xh-chip-h-sm));
219
+ padding-block: var(--xh-tool-call-status-py, 0);
218
220
  padding-inline: var(--xh-tool-call-status-px, var(--xh-space-1_5));
219
221
  border: var(--xh-stroke-thin) solid transparent;
220
- border-radius: var(--xh-tool-call-status-radius, var(--xh-shape-pill));
222
+ border-radius: var(--xh-tool-call-status-radius, var(--xh-shape-control));
221
223
  font-weight: var(--xh-font-weight-medium);
222
224
  line-height: var(--xh-control-indicator-md);
223
225
  }
@@ -149,7 +149,7 @@
149
149
  200 → 300);这里只把使用者槽映射到桥接槽(-gap / -h / -px / -radius / -bg / -bg-hover /
150
150
  -bg-active / -bg-disabled / -fg / -font-size 保留为第一参数)。作者仍可用类名或内联样式完整覆盖。 */
151
151
  .xh-scope-toolbar[data-part='item'] {
152
- --xh-action-gap: var(--xh-toolbar-item-gap, var(--xh-control-gap-sm));
152
+ --xh-action-gap: var(--xh-toolbar-item-gap, var(--xh-_action-profile-gap));
153
153
  --xh-action-visual-size: var(--xh-toolbar-item-h, var(--xh-_action-profile-visual-size));
154
154
  --xh-action-padding-inline: var(--xh-toolbar-item-px, var(--xh-_action-profile-padding-inline));
155
155
  --xh-action-radius: var(--xh-toolbar-item-radius, var(--xh-_action-profile-radius));
@@ -237,13 +237,14 @@
237
237
  inline-size: var(--xh-toolbar-separator-thickness, var(--xh-stroke-thin));
238
238
  block-size: var(--xh-_toolbar-separator-size);
239
239
  margin-block: var(--xh-toolbar-separator-inset, var(--xh-space-0));
240
- margin-inline: var(--xh-toolbar-separator-gap, var(--xh-space-0));
240
+ /* 散落的分隔线两侧各让出 12px,与工具条间距叠起来把前后两组分开 */
241
+ margin-inline: var(--xh-toolbar-separator-gap, var(--xh-space-3));
241
242
  }
242
243
 
243
244
  .xh-scope-toolbar[data-part='separator'][data-orientation='horizontal'] {
244
245
  block-size: var(--xh-toolbar-separator-thickness, var(--xh-stroke-thin));
245
246
  inline-size: var(--xh-_toolbar-separator-size);
246
- margin-block: var(--xh-toolbar-separator-gap, var(--xh-space-0));
247
+ margin-block: var(--xh-toolbar-separator-gap, var(--xh-space-3));
247
248
  margin-inline: var(--xh-toolbar-separator-inset, var(--xh-space-0));
248
249
  }
249
250
 
@@ -255,11 +256,11 @@
255
256
  }
256
257
 
257
258
  .xh-scope-toolbar[data-part='group'] > .xh-scope-toolbar[data-part='separator'][data-orientation='vertical'] {
258
- margin-inline-start: calc(-1 * var(--xh-toolbar-separator-thickness, var(--xh-stroke-thin)));
259
+ margin-inline: calc(-1 * var(--xh-toolbar-separator-thickness, var(--xh-stroke-thin))) 0;
259
260
  }
260
261
 
261
262
  .xh-scope-toolbar[data-part='group'] > .xh-scope-toolbar[data-part='separator'][data-orientation='horizontal'] {
262
- margin-block-start: calc(-1 * var(--xh-toolbar-separator-thickness, var(--xh-stroke-thin)));
263
+ margin-block: calc(-1 * var(--xh-toolbar-separator-thickness, var(--xh-stroke-thin))) 0;
263
264
  }
264
265
 
265
266
  /* —— 收纳 —— */