@lemoncat7/dsh-theme-xiaohei 0.3.0-alpha.23 → 0.3.2

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 (222) hide show
  1. package/README.md +39 -17
  2. package/THIRD_PARTY_NOTICES.md +41 -0
  3. package/lib/appearance.js +26 -10
  4. package/lib/blink.js +3 -3
  5. package/lib/bloub-heixiu/ambient.d.ts +3 -0
  6. package/lib/bloub-heixiu/ambient.js +12 -0
  7. package/lib/bloub-heixiu/character.d.ts +33 -0
  8. package/lib/bloub-heixiu/character.js +124 -0
  9. package/lib/bloub-heixiu/effects.d.ts +4 -0
  10. package/lib/bloub-heixiu/effects.js +91 -0
  11. package/lib/bloub-heixiu/flight.d.ts +15 -0
  12. package/lib/bloub-heixiu/flight.js +66 -0
  13. package/lib/bloub-heixiu/follow.d.ts +13 -0
  14. package/lib/bloub-heixiu/follow.js +23 -0
  15. package/lib/bloub-heixiu/layout.d.ts +18 -0
  16. package/lib/bloub-heixiu/layout.js +12 -0
  17. package/lib/bloub-heixiu/renderer.d.ts +16 -0
  18. package/lib/bloub-heixiu/renderer.js +94 -0
  19. package/lib/bloub-heixiu/runtime.d.ts +6 -0
  20. package/lib/bloub-heixiu/runtime.js +395 -0
  21. package/lib/bloub-heixiu/signals.d.ts +17 -0
  22. package/lib/bloub-heixiu/signals.js +53 -0
  23. package/lib/bloub-heixiu/styles.d.ts +2 -0
  24. package/lib/bloub-heixiu/styles.js +98 -0
  25. package/lib/chrome/accessibility.d.ts +1 -1
  26. package/lib/chrome/accessibility.js +5 -13
  27. package/lib/chrome/composer-avatar.d.ts +10 -0
  28. package/lib/chrome/composer-avatar.js +599 -0
  29. package/lib/chrome/composer-send-heixiu.d.ts +3 -0
  30. package/lib/chrome/composer-send-heixiu.js +143 -0
  31. package/lib/chrome/composer.d.ts +2 -2
  32. package/lib/chrome/composer.js +84 -95
  33. package/lib/chrome/controls.d.ts +8 -0
  34. package/lib/chrome/controls.js +348 -0
  35. package/lib/chrome/conversation-messages.d.ts +1 -1
  36. package/lib/chrome/conversation-messages.js +207 -9
  37. package/lib/chrome/conversation.d.ts +1 -1
  38. package/lib/chrome/conversation.js +6 -0
  39. package/lib/chrome/identity.js +4 -18
  40. package/lib/chrome/portal.d.ts +1 -1
  41. package/lib/chrome/portal.js +1 -1
  42. package/lib/chrome/sidebar.d.ts +1 -1
  43. package/lib/chrome/sidebar.js +134 -153
  44. package/lib/chrome/tokens.d.ts +1 -1
  45. package/lib/chrome/tokens.js +121 -68
  46. package/lib/chrome/workspace.d.ts +2 -2
  47. package/lib/chrome/workspace.js +35 -254
  48. package/lib/chrome.js +4 -0
  49. package/lib/client.d.ts +5 -12
  50. package/lib/client.js +6262 -4455
  51. package/lib/composer-avatar.d.ts +18 -0
  52. package/lib/composer-avatar.js +441 -0
  53. package/lib/composer-send-heixiu.d.ts +8 -0
  54. package/lib/composer-send-heixiu.js +133 -0
  55. package/lib/gaze.js +3 -3
  56. package/lib/generated-backgrounds.d.ts +14 -0
  57. package/lib/generated-backgrounds.js +14 -0
  58. package/lib/generated-character-motion.d.ts +4 -0
  59. package/lib/generated-character-motion.js +2 -0
  60. package/lib/generated-identity.d.ts +1 -0
  61. package/lib/generated-identity.js +1 -0
  62. package/lib/generated-keyart.d.ts +18 -3
  63. package/lib/generated-keyart.js +18 -3
  64. package/lib/host-contract.d.ts +9 -0
  65. package/lib/host-contract.js +13 -0
  66. package/lib/host-dom.d.ts +11 -0
  67. package/lib/host-dom.js +60 -0
  68. package/lib/loading-heixiu.js +3 -3
  69. package/lib/metallic-brand-mark.d.ts +10 -0
  70. package/lib/metallic-brand-mark.js +323 -0
  71. package/lib/plugin.d.ts +1 -1
  72. package/lib/plugin.js +31 -16
  73. package/lib/portal.js +11 -10
  74. package/lib/reactions.js +3 -3
  75. package/lib/scene/avatar-model.d.ts +6 -0
  76. package/lib/scene/avatar-model.js +646 -0
  77. package/lib/scene/avatar-motion.d.ts +3 -0
  78. package/lib/scene/avatar-motion.js +799 -0
  79. package/lib/scene/character-idle.d.ts +17 -0
  80. package/lib/scene/character-idle.js +65 -0
  81. package/lib/scene/character-layout.d.ts +24 -0
  82. package/lib/scene/character-layout.js +51 -0
  83. package/lib/scene/character-motion-clock.d.ts +18 -0
  84. package/lib/scene/character-motion-clock.js +57 -0
  85. package/lib/scene/character-motion-types.d.ts +12 -0
  86. package/lib/scene/character-motion-types.js +2 -0
  87. package/lib/scene/character-motion.d.ts +6 -0
  88. package/lib/scene/character-motion.js +126 -0
  89. package/lib/scene/character-poses.d.ts +26 -0
  90. package/lib/scene/character-poses.js +11 -0
  91. package/lib/scene/character-rig-renderer.d.ts +4 -0
  92. package/lib/scene/character-rig-renderer.js +85 -0
  93. package/lib/scene/character-rig.d.ts +20 -0
  94. package/lib/scene/character-rig.js +53 -0
  95. package/lib/scene/heixiu-feedback.d.ts +1 -1
  96. package/lib/scene/heixiu-feedback.js +0 -17
  97. package/lib/scene/pointer-bridge.d.ts +21 -0
  98. package/lib/scene/pointer-bridge.js +155 -0
  99. package/lib/scene/runtime.d.ts +12 -0
  100. package/lib/scene/runtime.js +87 -0
  101. package/lib/scene/styles.d.ts +7 -0
  102. package/lib/scene/styles.js +75 -0
  103. package/lib/scene/sylva-performance.d.ts +11 -0
  104. package/lib/scene/sylva-performance.js +58 -0
  105. package/lib/scene/wallpaper-character-styles.d.ts +3 -0
  106. package/lib/scene/wallpaper-character-styles.js +53 -0
  107. package/lib/scene/wallpaper-character.d.ts +4 -0
  108. package/lib/scene/wallpaper-character.js +213 -0
  109. package/lib/scene.d.ts +7 -13
  110. package/lib/scene.js +7 -1023
  111. package/lib/sidebar-glass.js +99 -36
  112. package/lib/sidebar-heixiu-roaming.js +5 -5
  113. package/lib/sidebar-reveal.d.ts +8 -0
  114. package/lib/sidebar-reveal.js +51 -0
  115. package/lib/state.d.ts +14 -2
  116. package/lib/state.js +12 -4
  117. package/lib/theme.js +2 -2
  118. package/lib/vendor/bloub/decor.d.ts +114 -0
  119. package/lib/vendor/bloub/decor.js +198 -0
  120. package/lib/vendor/bloub/engine.d.ts +213 -0
  121. package/lib/vendor/bloub/engine.js +452 -0
  122. package/lib/vendor/bloub/expressions.d.ts +35 -0
  123. package/lib/vendor/bloub/expressions.js +143 -0
  124. package/lib/vendor/bloub/eyefit.d.ts +75 -0
  125. package/lib/vendor/bloub/eyefit.js +393 -0
  126. package/lib/vendor/bloub/face.d.ts +63 -0
  127. package/lib/vendor/bloub/face.js +106 -0
  128. package/lib/vendor/bloub/math.d.ts +22 -0
  129. package/lib/vendor/bloub/math.js +36 -0
  130. package/lib/vendor/bloub/profiles.d.ts +8 -0
  131. package/lib/vendor/bloub/profiles.js +20 -0
  132. package/lib/vendor/bloub/repere.d.ts +30 -0
  133. package/lib/vendor/bloub/repere.js +32 -0
  134. package/lib/vendor/bloub/shape.d.ts +80 -0
  135. package/lib/vendor/bloub/shape.js +268 -0
  136. package/lib/vendor/bloub/skins.d.ts +36 -0
  137. package/lib/vendor/bloub/skins.js +74 -0
  138. package/lib/vendor/bloub/states.d.ts +87 -0
  139. package/lib/vendor/bloub/states.js +468 -0
  140. package/package.json +23 -6
  141. package/lib/appearance.d.ts.map +0 -1
  142. package/lib/appearance.js.map +0 -1
  143. package/lib/blink.d.ts.map +0 -1
  144. package/lib/blink.js.map +0 -1
  145. package/lib/boot-appearance.d.ts.map +0 -1
  146. package/lib/boot-appearance.js.map +0 -1
  147. package/lib/boot-loader.d.ts.map +0 -1
  148. package/lib/boot-loader.js.map +0 -1
  149. package/lib/chrome/accessibility.d.ts.map +0 -1
  150. package/lib/chrome/accessibility.js.map +0 -1
  151. package/lib/chrome/blink.d.ts.map +0 -1
  152. package/lib/chrome/blink.js.map +0 -1
  153. package/lib/chrome/composer.d.ts.map +0 -1
  154. package/lib/chrome/composer.js.map +0 -1
  155. package/lib/chrome/conversation-messages.d.ts.map +0 -1
  156. package/lib/chrome/conversation-messages.js.map +0 -1
  157. package/lib/chrome/conversation.d.ts.map +0 -1
  158. package/lib/chrome/conversation.js.map +0 -1
  159. package/lib/chrome/frames.d.ts.map +0 -1
  160. package/lib/chrome/frames.js.map +0 -1
  161. package/lib/chrome/gaze.d.ts.map +0 -1
  162. package/lib/chrome/gaze.js.map +0 -1
  163. package/lib/chrome/identity.d.ts.map +0 -1
  164. package/lib/chrome/identity.js.map +0 -1
  165. package/lib/chrome/overlays.d.ts.map +0 -1
  166. package/lib/chrome/overlays.js.map +0 -1
  167. package/lib/chrome/portal.d.ts.map +0 -1
  168. package/lib/chrome/portal.js.map +0 -1
  169. package/lib/chrome/reactions.d.ts.map +0 -1
  170. package/lib/chrome/reactions.js.map +0 -1
  171. package/lib/chrome/sidebar.d.ts.map +0 -1
  172. package/lib/chrome/sidebar.js.map +0 -1
  173. package/lib/chrome/tokens.d.ts.map +0 -1
  174. package/lib/chrome/tokens.js.map +0 -1
  175. package/lib/chrome/workspace.d.ts.map +0 -1
  176. package/lib/chrome/workspace.js.map +0 -1
  177. package/lib/chrome.d.ts.map +0 -1
  178. package/lib/chrome.js.map +0 -1
  179. package/lib/client.d.ts.map +0 -1
  180. package/lib/client.js.map +0 -7
  181. package/lib/gaze.d.ts.map +0 -1
  182. package/lib/gaze.js.map +0 -1
  183. package/lib/generated-identity.d.ts.map +0 -1
  184. package/lib/generated-identity.js.map +0 -1
  185. package/lib/generated-keyart.d.ts.map +0 -1
  186. package/lib/generated-keyart.js.map +0 -1
  187. package/lib/generated-loading-assets.d.ts.map +0 -1
  188. package/lib/generated-loading-assets.js.map +0 -1
  189. package/lib/generated-sidebar-assets.d.ts +0 -4
  190. package/lib/generated-sidebar-assets.d.ts.map +0 -1
  191. package/lib/generated-sidebar-assets.js +0 -4
  192. package/lib/generated-sidebar-assets.js.map +0 -1
  193. package/lib/heixiu-interactions.d.ts.map +0 -1
  194. package/lib/heixiu-interactions.js.map +0 -1
  195. package/lib/index.d.ts.map +0 -1
  196. package/lib/index.js.map +0 -1
  197. package/lib/loading-heixiu.d.ts.map +0 -1
  198. package/lib/loading-heixiu.js.map +0 -1
  199. package/lib/plugin.d.ts.map +0 -1
  200. package/lib/plugin.js.map +0 -1
  201. package/lib/portal.d.ts.map +0 -1
  202. package/lib/portal.js.map +0 -1
  203. package/lib/reactions.d.ts.map +0 -1
  204. package/lib/reactions.js.map +0 -1
  205. package/lib/scene/heixiu-feedback.d.ts.map +0 -1
  206. package/lib/scene/heixiu-feedback.js.map +0 -1
  207. package/lib/scene/heixiu-interactions.d.ts.map +0 -1
  208. package/lib/scene/heixiu-interactions.js.map +0 -1
  209. package/lib/scene/state-transitions.d.ts.map +0 -1
  210. package/lib/scene/state-transitions.js.map +0 -1
  211. package/lib/scene.d.ts.map +0 -1
  212. package/lib/scene.js.map +0 -1
  213. package/lib/sidebar-glass.d.ts.map +0 -1
  214. package/lib/sidebar-glass.js.map +0 -1
  215. package/lib/sidebar-heixiu-escape.d.ts.map +0 -1
  216. package/lib/sidebar-heixiu-escape.js.map +0 -1
  217. package/lib/sidebar-heixiu-roaming.d.ts.map +0 -1
  218. package/lib/sidebar-heixiu-roaming.js.map +0 -1
  219. package/lib/state.d.ts.map +0 -1
  220. package/lib/state.js.map +0 -1
  221. package/lib/theme.d.ts.map +0 -1
  222. package/lib/theme.js.map +0 -1
@@ -0,0 +1,348 @@
1
+ /**
2
+ * Browser-independent control primitives.
3
+ *
4
+ * This layer owns only the shared native-control contract. Feature chrome is
5
+ * composed after it and remains free to define geometry or stronger states.
6
+ */
7
+ export const XIAOHEI_CONTROL_PRIMITIVES_CSS = `
8
+ html {
9
+ color-scheme: dark;
10
+ accent-color: var(--xiaohei-spirit);
11
+ font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC",
12
+ "Microsoft YaHei", "Segoe UI", sans-serif;
13
+ font-synthesis: none;
14
+ text-rendering: optimizeLegibility;
15
+ -webkit-font-smoothing: antialiased;
16
+ -moz-osx-font-smoothing: grayscale;
17
+ }
18
+
19
+ html[data-xiaohei-appearance='light'] {
20
+ color-scheme: light;
21
+ }
22
+
23
+ #root,
24
+ :where(#root) :where(button, input, textarea, select) {
25
+ font: inherit;
26
+ letter-spacing: inherit;
27
+ }
28
+
29
+ :where(#root) :where(button, input, textarea, select) {
30
+ box-sizing: border-box;
31
+ color: inherit;
32
+ -webkit-tap-highlight-color: transparent;
33
+ }
34
+
35
+ :where(#root) :where(button, select, input[type='button'], input[type='submit'], input[type='reset']) {
36
+ -webkit-appearance: none;
37
+ appearance: none;
38
+ }
39
+
40
+ :where(#root) :where(button, input[type='button'], input[type='submit'], input[type='reset']) {
41
+ margin: 0;
42
+ border: 1px solid transparent;
43
+ border-radius: var(--xiaohei-radius-small);
44
+ color: var(--dsw-alias-label-primary);
45
+ background: transparent;
46
+ cursor: pointer;
47
+ transition:
48
+ color var(--xiaohei-motion-fast) ease,
49
+ border-color var(--xiaohei-motion-fast) ease,
50
+ background-color var(--xiaohei-motion-fast) ease,
51
+ transform var(--xiaohei-motion-fast) var(--xiaohei-motion-curve);
52
+ }
53
+
54
+ :where(#root) :where(button, input[type='button'], input[type='submit'], input[type='reset']):not(:disabled):hover {
55
+ border-color: var(--xiaohei-edge);
56
+ background-color: var(--xiaohei-spirit-soft);
57
+ }
58
+
59
+ :where(#root) :where(button, input[type='button'], input[type='submit'], input[type='reset']):not(:disabled):active {
60
+ transform: translateY(1px) scale(.98);
61
+ }
62
+
63
+ :where(#root) :where(button, input[type='button'], input[type='submit'], input[type='reset']):disabled {
64
+ cursor: not-allowed;
65
+ opacity: .48;
66
+ }
67
+
68
+ :where(#root) :where(input:not([type='checkbox']):not([type='radio']):not([type='range']):not([type='file']), textarea, select) {
69
+ border: 1px solid var(--xiaohei-edge);
70
+ border-radius: var(--xiaohei-radius-control);
71
+ color: var(--dsw-alias-label-primary);
72
+ background-color: var(--xiaohei-plugin-control-fill);
73
+ box-shadow: inset 0 1px var(--xiaohei-layer-content-highlight);
74
+ transition:
75
+ border-color var(--xiaohei-motion-fast) ease,
76
+ background-color var(--xiaohei-motion-fast) ease,
77
+ box-shadow var(--xiaohei-motion-fast) ease;
78
+ }
79
+
80
+ :where(#root) :where(input, textarea)::placeholder {
81
+ color: var(--dsw-alias-label-tertiary);
82
+ opacity: 1;
83
+ }
84
+
85
+ :where(#root) :where(input[type='search'])::-webkit-search-cancel-button,
86
+ :where(#root) :where(input[type='search'])::-webkit-search-decoration {
87
+ -webkit-appearance: none;
88
+ appearance: none;
89
+ }
90
+
91
+ :where(#root) :where(input[type='number']) {
92
+ -moz-appearance: textfield;
93
+ }
94
+
95
+ :where(#root) :where(input[type='number'])::-webkit-inner-spin-button,
96
+ :where(#root) :where(input[type='number'])::-webkit-outer-spin-button {
97
+ margin: 0;
98
+ -webkit-appearance: none;
99
+ appearance: none;
100
+ }
101
+
102
+ :where(#root) :where(textarea) {
103
+ resize: vertical;
104
+ }
105
+
106
+ :where(#root) :where(select) {
107
+ padding-inline-end: 30px;
108
+ background-image:
109
+ linear-gradient(45deg, transparent 50%, currentColor 50%),
110
+ linear-gradient(135deg, currentColor 50%, transparent 50%);
111
+ background-position:
112
+ calc(100% - 15px) 50%,
113
+ calc(100% - 10px) 50%;
114
+ background-repeat: no-repeat;
115
+ background-size: 5px 5px, 5px 5px;
116
+ }
117
+
118
+ :where(#root) :where(select)::-ms-expand {
119
+ display: none;
120
+ }
121
+
122
+ :where(#root) :where(option, optgroup) {
123
+ color: var(--dsw-alias-label-primary);
124
+ background: var(--xiaohei-surface-raised);
125
+ }
126
+
127
+ :where(#root) :where(input[type='checkbox'], input[type='radio']) {
128
+ -webkit-appearance: none;
129
+ appearance: none;
130
+ display: inline-grid;
131
+ place-content: center;
132
+ width: 16px;
133
+ height: 16px;
134
+ margin: 0;
135
+ border: 1px solid var(--xiaohei-edge-strong);
136
+ color: var(--xiaohei-frame-ink);
137
+ background: var(--xiaohei-plugin-control-fill);
138
+ box-shadow: inset 0 1px var(--xiaohei-layer-content-highlight);
139
+ cursor: pointer;
140
+ transition:
141
+ border-color var(--xiaohei-motion-fast) ease,
142
+ background-color var(--xiaohei-motion-fast) ease,
143
+ box-shadow var(--xiaohei-motion-fast) ease;
144
+ }
145
+
146
+ :where(#root) :where(input[type='checkbox']) {
147
+ border-radius: 5px;
148
+ }
149
+
150
+ :where(#root) :where(input[type='radio']) {
151
+ border-radius: 50%;
152
+ }
153
+
154
+ :where(#root) :where(input[type='checkbox'], input[type='radio'])::before {
155
+ content: '';
156
+ width: 8px;
157
+ height: 8px;
158
+ background: currentColor;
159
+ opacity: 0;
160
+ transform: scale(.5);
161
+ transition:
162
+ opacity var(--xiaohei-motion-fast) ease,
163
+ transform var(--xiaohei-motion-fast) var(--xiaohei-motion-curve);
164
+ }
165
+
166
+ :where(#root) :where(input[type='checkbox'])::before {
167
+ clip-path: polygon(14% 44%, 0 62%, 40% 100%, 100% 20%, 82% 5%, 38% 70%);
168
+ }
169
+
170
+ :where(#root) :where(input[type='radio'])::before {
171
+ border-radius: 50%;
172
+ }
173
+
174
+ :where(#root) :where(input[type='checkbox'], input[type='radio']):checked {
175
+ border-color: var(--xiaohei-spirit-strong);
176
+ background: var(--xiaohei-spirit);
177
+ box-shadow: 0 0 0 3px var(--xiaohei-spirit-faint);
178
+ }
179
+
180
+ :where(#root) :where(input[type='checkbox'], input[type='radio']):checked::before {
181
+ opacity: 1;
182
+ transform: scale(1);
183
+ }
184
+
185
+ :where(#root) :where(input[type='checkbox'], input[type='radio']):disabled {
186
+ cursor: not-allowed;
187
+ opacity: .48;
188
+ }
189
+
190
+ :where(#root) :where(input[type='range']) {
191
+ -webkit-appearance: none;
192
+ appearance: none;
193
+ height: 16px;
194
+ margin: 0;
195
+ background: transparent;
196
+ cursor: pointer;
197
+ }
198
+
199
+ :where(#root) :where(input[type='range'])::-webkit-slider-runnable-track {
200
+ height: 4px;
201
+ border-radius: 999px;
202
+ background: var(--xiaohei-surface-muted);
203
+ box-shadow: inset 0 0 0 1px var(--xiaohei-edge);
204
+ }
205
+
206
+ :where(#root) :where(input[type='range'])::-webkit-slider-thumb {
207
+ width: 14px;
208
+ height: 14px;
209
+ margin-top: -5px;
210
+ border: 2px solid var(--xiaohei-surface-raised);
211
+ border-radius: 50%;
212
+ background: var(--xiaohei-spirit);
213
+ box-shadow: 0 2px 6px var(--xiaohei-shadow);
214
+ -webkit-appearance: none;
215
+ appearance: none;
216
+ }
217
+
218
+ :where(#root) :where(input[type='range'])::-moz-range-track {
219
+ height: 4px;
220
+ border: 0;
221
+ border-radius: 999px;
222
+ background: var(--xiaohei-surface-muted);
223
+ box-shadow: inset 0 0 0 1px var(--xiaohei-edge);
224
+ }
225
+
226
+ :where(#root) :where(input[type='range'])::-moz-range-progress {
227
+ height: 4px;
228
+ border-radius: 999px;
229
+ background: var(--xiaohei-spirit);
230
+ }
231
+
232
+ :where(#root) :where(input[type='range'])::-moz-range-thumb {
233
+ width: 10px;
234
+ height: 10px;
235
+ border: 2px solid var(--xiaohei-surface-raised);
236
+ border-radius: 50%;
237
+ background: var(--xiaohei-spirit);
238
+ box-shadow: 0 2px 6px var(--xiaohei-shadow);
239
+ }
240
+
241
+ :where(#root) :where(input[type='range']):disabled {
242
+ cursor: not-allowed;
243
+ opacity: .48;
244
+ }
245
+
246
+ :where(#root) :where(input[type='file'])::file-selector-button {
247
+ margin-inline-end: 10px;
248
+ padding: 6px 10px;
249
+ border: 1px solid var(--xiaohei-edge);
250
+ border-radius: var(--xiaohei-radius-small);
251
+ color: var(--dsw-alias-label-primary);
252
+ background: var(--xiaohei-plugin-control-fill);
253
+ font: inherit;
254
+ cursor: pointer;
255
+ }
256
+
257
+ :where(#root) :where(progress) {
258
+ overflow: hidden;
259
+ border: 0;
260
+ border-radius: 999px;
261
+ color: var(--xiaohei-spirit);
262
+ background: var(--xiaohei-surface-muted);
263
+ accent-color: var(--xiaohei-spirit);
264
+ }
265
+
266
+ :where(#root) :where(progress)::-webkit-progress-bar {
267
+ background: var(--xiaohei-surface-muted);
268
+ }
269
+
270
+ :where(#root) :where(progress)::-webkit-progress-value {
271
+ background: var(--xiaohei-spirit);
272
+ }
273
+
274
+ :where(#root) :where(progress)::-moz-progress-bar {
275
+ background: var(--xiaohei-spirit);
276
+ }
277
+
278
+ :where(#root) :where(fieldset) {
279
+ min-width: 0;
280
+ margin: 0;
281
+ padding: 0;
282
+ border: 0;
283
+ }
284
+
285
+ :where(#root) :where(legend) {
286
+ padding: 0;
287
+ color: var(--dsw-alias-label-secondary);
288
+ }
289
+
290
+ :where(#root) :where(summary) {
291
+ cursor: pointer;
292
+ }
293
+
294
+ :where(#root) :where(a) {
295
+ color: var(--xiaohei-spirit-strong);
296
+ text-decoration-color: var(--xiaohei-edge-strong);
297
+ text-underline-offset: .18em;
298
+ }
299
+
300
+ :where(#root) :where(a):hover {
301
+ text-decoration-color: currentColor;
302
+ }
303
+
304
+ #root {
305
+ scrollbar-width: thin;
306
+ scrollbar-color: transparent transparent;
307
+ }
308
+
309
+ #root:hover,
310
+ #root:focus-within {
311
+ scrollbar-color: var(--dsw-alias-scrollbar-bg-l1) transparent;
312
+ }
313
+
314
+ #root ::-webkit-scrollbar {
315
+ width: 6px;
316
+ height: 6px;
317
+ }
318
+
319
+ #root ::-webkit-scrollbar-track,
320
+ #root ::-webkit-scrollbar-corner {
321
+ background: transparent;
322
+ }
323
+
324
+ #root ::-webkit-scrollbar-thumb {
325
+ min-width: 28px;
326
+ min-height: 28px;
327
+ border: 2px solid transparent;
328
+ border-radius: 999px;
329
+ background: transparent;
330
+ background-clip: padding-box;
331
+ }
332
+
333
+ #root:hover ::-webkit-scrollbar-thumb,
334
+ #root:focus-within ::-webkit-scrollbar-thumb {
335
+ background-color: var(--dsw-alias-scrollbar-bg-l1);
336
+ }
337
+
338
+ #root ::-webkit-scrollbar-thumb:hover {
339
+ background-color: var(--dsw-alias-scrollbar-hover-l1);
340
+ }
341
+
342
+ @media (forced-colors: active) {
343
+ :where(#root) :where(input, textarea, select, button, progress) {
344
+ forced-color-adjust: auto;
345
+ }
346
+ }
347
+ `;
348
+ //# sourceMappingURL=controls.js.map
@@ -1,3 +1,3 @@
1
1
  /** Native conversation messages restyled without changing their DOM contract. */
2
- export declare const XIAOHEI_CONVERSATION_MESSAGES_CSS = "\n/* Keep DSH's native max width; only tune vertical reading rhythm. */\n#root [data-chat-flow] {\n gap: 18px;\n}\n\n#root [data-chat-flow-kind='assistant-step'] {\n color: var(--xiaohei-conversation-text);\n}\n\n#root [data-chat-flow-kind='assistant-step'] > div {\n color: var(--xiaohei-conversation-text) !important;\n background: transparent !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n\n#root [data-chat-flow-kind='assistant-step'] :is(p, li, h1, h2, h3, h4, h5, h6) {\n color: var(--xiaohei-conversation-text);\n}\n\n/* User and steering prose keep a light bubble; image-only rows stay untouched. */\n#root [data-chat-flow-kind='user'] [data-time-hover-root]\n > div:first-child > div:last-child:not(:has(img)),\n#root [data-pending-steering]\n > div:first-child > div:last-child:not(:has(img)) {\n color: var(--xiaohei-conversation-text) !important;\n border: 1px solid var(--xiaohei-conversation-user-edge);\n border-radius: 18px;\n background: var(--xiaohei-conversation-user) !important;\n box-shadow: none !important;\n}\n\n/* Context, recall, compaction and tool rows stay readable but subordinate. */\n#root [data-chat-flow-kind='context'],\n#root [data-chat-flow-kind='manual-compaction'],\n#root [data-chat-flow-kind='command'] > div,\n#root [data-context-injection-body],\n#root [data-context-source],\n#root [data-context-summary],\n#root [data-turn-tail] [role='status'] {\n color: var(--xiaohei-conversation-meta);\n}\n\n#root [data-chat-flow-kind='context'],\n#root [data-chat-flow-kind='manual-compaction'] {\n font-size: 13px;\n}\n\n#root [data-chat-flow-kind='command'] > div {\n opacity: 0.82;\n transition: opacity var(--xiaohei-motion-fast) ease;\n}\n\n#root [data-chat-flow-kind='command']:hover > div,\n#root [data-chat-flow-kind='command']:focus-within > div {\n opacity: 1;\n}\n\n#root [data-context-injection-body] {\n border: 1px solid rgb(111 153 148 / 8%);\n background: rgb(111 153 148 / 5%) !important;\n}\n\n/* Copy, branch, retry and plugin-provided message actions stay quiet at rest. */\n#root [data-time-hover-root] button,\n#root [data-turn-tail] button {\n opacity: 0.38;\n transition:\n color var(--xiaohei-motion-fast) ease,\n background-color var(--xiaohei-motion-fast) ease,\n opacity var(--xiaohei-motion-fast) ease;\n}\n\n#root [data-time-hover-root]:hover button,\n#root [data-time-hover-root]:focus-within button,\n#root [data-turn-tail]:hover button,\n#root [data-turn-tail]:focus-within button {\n opacity: 0.82;\n}\n\nhtml[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='assistant-step'] > div,\nhtml[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='assistant-step'] :is(p, li, h1, h2, h3, h4, h5, h6) {\n color: #343B3A !important;\n}\n\n@media (prefers-contrast: more), (forced-colors: active) {\n #root [data-time-hover-root] button,\n #root [data-turn-tail] button,\n #root [data-chat-flow-kind='command'] > div {\n opacity: 1;\n }\n}\n";
2
+ export declare const XIAOHEI_CONVERSATION_MESSAGES_CSS: string;
3
3
  //# sourceMappingURL=conversation-messages.d.ts.map
@@ -1,3 +1,4 @@
1
+ import { XIAOHEI_AVATAR_2D_FRONT } from '../generated-keyart.js';
1
2
  /** Native conversation messages restyled without changing their DOM contract. */
2
3
  export const XIAOHEI_CONVERSATION_MESSAGES_CSS = `
3
4
  /* Keep DSH's native max width; only tune vertical reading rhythm. */
@@ -9,7 +10,82 @@ export const XIAOHEI_CONVERSATION_MESSAGES_CSS = `
9
10
  color: var(--xiaohei-conversation-text);
10
11
  }
11
12
 
12
- #root [data-chat-flow-kind='assistant-step'] > div {
13
+ /* Message portraits are deliberately static and only identify the speaker. */
14
+ #root [data-chat-flow-kind='assistant-step'],
15
+ #root [data-chat-flow-kind='user'] {
16
+ position: relative;
17
+ overflow: visible;
18
+ }
19
+
20
+ #root [data-chat-flow-kind='assistant-step']::before,
21
+ #root [data-chat-flow-kind='user']::after {
22
+ position: absolute;
23
+ inset-block-start: 2px;
24
+ z-index: 2;
25
+ display: grid;
26
+ place-items: center;
27
+ box-sizing: border-box;
28
+ inline-size: 40px;
29
+ block-size: 44px;
30
+ border: 1px solid rgb(235 240 242 / 13%);
31
+ border-radius: 13px 13px 15px 15px;
32
+ color: rgb(225 231 232 / 78%);
33
+ background-color: rgb(18 23 25 / 76%);
34
+ background-repeat: no-repeat;
35
+ box-shadow:
36
+ inset 0 1px 0 rgb(255 255 255 / 9%),
37
+ 0 6px 16px rgb(0 0 0 / 16%);
38
+ pointer-events: none;
39
+ }
40
+
41
+ #root [data-chat-flow-kind='assistant-step']::before {
42
+ content: '';
43
+ inset-inline-start: -50px;
44
+ background-image:
45
+ url("${XIAOHEI_AVATAR_2D_FRONT}"),
46
+ linear-gradient(145deg, rgb(255 255 255 / 7%), transparent 56%);
47
+ background-position: center -1px, center;
48
+ background-size: 76px auto, auto;
49
+ }
50
+
51
+ #root [data-chat-flow-kind='user']::after {
52
+ content: '我';
53
+ inset-inline-end: -50px;
54
+ block-size: 40px;
55
+ border-radius: 13px;
56
+ font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
57
+ font-size: 13px;
58
+ font-weight: 650;
59
+ letter-spacing: .02em;
60
+ background-image:
61
+ linear-gradient(145deg, rgb(255 255 255 / 8%), transparent 58%),
62
+ linear-gradient(160deg, rgb(34 40 43 / 84%), rgb(20 25 27 / 76%));
63
+ }
64
+
65
+ /* The slot outlet itself uses display:contents, so the box must live on its
66
+ native AssistantMarkdown child. This keeps the semantic row untouched. */
67
+ #root [data-chat-flow-kind='assistant-step']
68
+ > [data-slot='conversation.chat.node']
69
+ > div:first-child {
70
+ box-sizing: border-box;
71
+ inline-size: fit-content;
72
+ max-inline-size: 100%;
73
+ padding: 16px 28px !important;
74
+ border: 1px solid var(--xiaohei-conversation-edge) !important;
75
+ border-radius: 9px 18px 18px 18px;
76
+ background: var(--xiaohei-conversation-assistant) !important;
77
+ box-shadow:
78
+ inset 0 1px 0 var(--xiaohei-conversation-highlight),
79
+ inset 1px 0 0 color-mix(in srgb, var(--xiaohei-conversation-highlight) 42%, transparent),
80
+ 0 7px 22px var(--xiaohei-conversation-shadow) !important;
81
+ -webkit-backdrop-filter: blur(var(--xiaohei-conversation-blur)) saturate(124%);
82
+ backdrop-filter: blur(var(--xiaohei-conversation-blur)) saturate(124%);
83
+ overflow-wrap: anywhere;
84
+ }
85
+
86
+ #root [data-chat-flow-kind='assistant-step']
87
+ > [data-slot='conversation.chat.node']
88
+ > div:first-child > div {
13
89
  color: var(--xiaohei-conversation-text) !important;
14
90
  background: transparent !important;
15
91
  border: 0 !important;
@@ -20,19 +96,30 @@ export const XIAOHEI_CONVERSATION_MESSAGES_CSS = `
20
96
  color: var(--xiaohei-conversation-text);
21
97
  }
22
98
 
23
- /* User and steering prose keep a light bubble; image-only rows stay untouched. */
99
+ /* User and steering prose use a slightly denser companion bubble; image-only rows stay untouched. */
100
+ #root [data-chat-flow-kind='user'] > [data-slot='conversation.chat.node']
101
+ > div:first-child > div:first-child > div:last-child:not([data-slot]):not(:has(img)),
24
102
  #root [data-chat-flow-kind='user'] [data-time-hover-root]
25
103
  > div:first-child > div:last-child:not(:has(img)),
26
104
  #root [data-pending-steering]
27
105
  > div:first-child > div:last-child:not(:has(img)) {
106
+ box-sizing: border-box;
107
+ padding: 14px 28px !important;
28
108
  color: var(--xiaohei-conversation-text) !important;
29
- border: 1px solid var(--xiaohei-conversation-user-edge);
30
- border-radius: 18px;
109
+ border: 1px solid var(--xiaohei-conversation-edge);
110
+ border-radius: 18px 9px 18px 18px;
31
111
  background: var(--xiaohei-conversation-user) !important;
32
- box-shadow: none !important;
112
+ box-shadow:
113
+ inset 0 1px 0 var(--xiaohei-conversation-highlight),
114
+ inset -1px 0 0 color-mix(in srgb, var(--xiaohei-conversation-highlight) 42%, transparent),
115
+ 0 7px 22px var(--xiaohei-conversation-shadow) !important;
116
+ -webkit-backdrop-filter: blur(var(--xiaohei-conversation-blur)) saturate(124%);
117
+ backdrop-filter: blur(var(--xiaohei-conversation-blur)) saturate(124%);
118
+ overflow-wrap: anywhere;
33
119
  }
34
120
 
35
- /* Context, recall, compaction and tool rows stay readable but subordinate. */
121
+ /* Context, recall, compaction and tool rows use the same ink-and-silver family,
122
+ but at a lower contrast than actual conversation bubbles. */
36
123
  #root [data-chat-flow-kind='context'],
37
124
  #root [data-chat-flow-kind='manual-compaction'],
38
125
  #root [data-chat-flow-kind='command'] > div,
@@ -43,6 +130,38 @@ export const XIAOHEI_CONVERSATION_MESSAGES_CSS = `
43
130
  color: var(--xiaohei-conversation-meta);
44
131
  }
45
132
 
133
+ #root :is(
134
+ [data-chat-flow-kind='context'],
135
+ [data-chat-flow-kind='manual-compaction'],
136
+ [data-chat-flow-kind='tool-call'],
137
+ [data-chat-flow-kind='command']
138
+ ) > [data-slot='conversation.chat.node'] > div:first-child {
139
+ box-sizing: border-box;
140
+ inline-size: fit-content;
141
+ max-inline-size: 100%;
142
+ padding: 6px 14px;
143
+ border: 1px solid var(--xiaohei-conversation-meta-edge);
144
+ border-radius: 11px;
145
+ background: var(--xiaohei-conversation-meta-surface) !important;
146
+ box-shadow:
147
+ inset 0 1px 0 color-mix(in srgb, var(--xiaohei-conversation-highlight) 52%, transparent),
148
+ 0 4px 14px color-mix(in srgb, var(--xiaohei-conversation-shadow) 58%, transparent);
149
+ -webkit-backdrop-filter: blur(12px) saturate(118%);
150
+ backdrop-filter: blur(12px) saturate(118%);
151
+ overflow: hidden;
152
+ }
153
+
154
+ #root [data-chat-flow-kind='turn-tail'] .dsh-knowledge-writeback-status {
155
+ box-sizing: border-box;
156
+ padding: 6px 14px;
157
+ border: 1px solid var(--xiaohei-conversation-meta-edge);
158
+ border-radius: 9px;
159
+ background: var(--xiaohei-conversation-meta-surface) !important;
160
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--xiaohei-conversation-highlight) 48%, transparent);
161
+ -webkit-backdrop-filter: blur(10px) saturate(116%);
162
+ backdrop-filter: blur(10px) saturate(116%);
163
+ }
164
+
46
165
  #root [data-chat-flow-kind='context'],
47
166
  #root [data-chat-flow-kind='manual-compaction'] {
48
167
  font-size: 13px;
@@ -59,8 +178,8 @@ export const XIAOHEI_CONVERSATION_MESSAGES_CSS = `
59
178
  }
60
179
 
61
180
  #root [data-context-injection-body] {
62
- border: 1px solid rgb(111 153 148 / 8%);
63
- background: rgb(111 153 148 / 5%) !important;
181
+ border: 1px solid rgb(132 138 143 / 8%);
182
+ background: rgb(132 138 143 / 5%) !important;
64
183
  }
65
184
 
66
185
  /* Copy, branch, retry and plugin-provided message actions stay quiet at rest. */
@@ -80,12 +199,91 @@ export const XIAOHEI_CONVERSATION_MESSAGES_CSS = `
80
199
  opacity: 0.82;
81
200
  }
82
201
 
83
- html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='assistant-step'] > div,
202
+ html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='assistant-step']
203
+ > [data-slot='conversation.chat.node']
204
+ > div:first-child,
84
205
  html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='assistant-step'] :is(p, li, h1, h2, h3, h4, h5, h6) {
85
206
  color: #343B3A !important;
86
207
  }
87
208
 
209
+ html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='assistant-step']::before,
210
+ html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='user']::after {
211
+ border-color: rgb(42 48 52 / 11%);
212
+ color: rgb(48 54 58 / 72%);
213
+ background-color: rgb(239 242 243 / 78%);
214
+ box-shadow:
215
+ inset 0 1px 0 rgb(255 255 255 / 76%),
216
+ 0 6px 16px rgb(34 40 43 / 9%);
217
+ }
218
+
219
+ html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='user']::after {
220
+ background-image:
221
+ linear-gradient(145deg, rgb(255 255 255 / 74%), transparent 58%),
222
+ linear-gradient(160deg, rgb(242 244 245 / 86%), rgb(222 226 228 / 76%));
223
+ }
224
+
225
+ @media (width <= 760px) {
226
+ #root [data-chat-flow-kind='assistant-step'] {
227
+ box-sizing: border-box;
228
+ padding-inline-start: 38px;
229
+ }
230
+
231
+ #root [data-chat-flow-kind='user'] {
232
+ box-sizing: border-box;
233
+ padding-inline-end: 38px;
234
+ }
235
+
236
+ #root [data-chat-flow-kind='assistant-step']::before,
237
+ #root [data-chat-flow-kind='user']::after {
238
+ inline-size: 32px;
239
+ block-size: 36px;
240
+ border-radius: 11px 11px 13px 13px;
241
+ }
242
+
243
+ #root [data-chat-flow-kind='assistant-step']::before {
244
+ inset-inline-start: 0;
245
+ background-size: 62px auto, auto;
246
+ }
247
+
248
+ #root [data-chat-flow-kind='user']::after {
249
+ inset-inline-end: 0;
250
+ block-size: 32px;
251
+ border-radius: 11px;
252
+ font-size: 11px;
253
+ }
254
+
255
+ #root [data-chat-flow-kind='assistant-step']
256
+ > [data-slot='conversation.chat.node']
257
+ > div:first-child {
258
+ padding: 12px 20px !important;
259
+ border-radius: 8px 16px 16px 16px;
260
+ }
261
+
262
+ #root [data-chat-flow-kind='user'] > [data-slot='conversation.chat.node']
263
+ > div:first-child > div:first-child > div:last-child:not([data-slot]):not(:has(img)),
264
+ #root [data-chat-flow-kind='user'] [data-time-hover-root]
265
+ > div:first-child > div:last-child:not(:has(img)),
266
+ #root [data-pending-steering]
267
+ > div:first-child > div:last-child:not(:has(img)) {
268
+ padding-inline: 20px !important;
269
+ }
270
+
271
+ #root :is(
272
+ [data-chat-flow-kind='context'],
273
+ [data-chat-flow-kind='manual-compaction'],
274
+ [data-chat-flow-kind='tool-call'],
275
+ [data-chat-flow-kind='command']
276
+ ) > [data-slot='conversation.chat.node'] > div:first-child {
277
+ border-radius: 10px;
278
+ }
279
+ }
280
+
88
281
  @media (prefers-contrast: more), (forced-colors: active) {
282
+ #root [data-chat-flow-kind='assistant-step']::before,
283
+ #root [data-chat-flow-kind='user']::after {
284
+ display: none;
285
+ }
286
+
89
287
  #root [data-time-hover-root] button,
90
288
  #root [data-turn-tail] button,
91
289
  #root [data-chat-flow-kind='command'] > div {
@@ -1,3 +1,3 @@
1
1
  /** Conversation-level controls and quiet Xiaohei identity details. */
2
- export declare const XIAOHEI_CONVERSATION_CSS = "\n#root [data-slot='conversation.composer'] button[aria-label='\u9009\u62E9\u5DE5\u4F5C\u533A'],\n#root [data-slot='conversation.composer'] button[aria-label='Select workspace'] {\n min-height: 32px;\n padding-inline: 10px;\n border: 1px solid transparent;\n border-radius: var(--xiaohei-radius-control);\n color: var(--dsw-alias-label-primary);\n background: var(--xiaohei-surface-muted);\n box-shadow: inset 0 1px rgb(255 255 255 / 5%);\n transition:\n color var(--xiaohei-motion-fast) ease,\n background-color var(--xiaohei-motion-base) ease,\n border-color var(--xiaohei-motion-base) ease,\n box-shadow var(--xiaohei-motion-base) ease;\n}\n\n#root [data-slot='conversation.composer'] button[aria-label='\u9009\u62E9\u5DE5\u4F5C\u533A']:hover,\n#root [data-slot='conversation.composer'] button[aria-label='Select workspace']:hover,\n#root [data-slot='conversation.composer'] button[aria-label='\u9009\u62E9\u5DE5\u4F5C\u533A'][aria-expanded='true'],\n#root [data-slot='conversation.composer'] button[aria-label='Select workspace'][aria-expanded='true'] {\n color: var(--xiaohei-spirit-strong);\n border-color: var(--xiaohei-edge);\n background: var(--xiaohei-spirit-soft);\n box-shadow: inset 3px 0 var(--xiaohei-spirit);\n}\n\n#root [data-slot='conversation.session.header'] button,\n#root [data-slot='conversation.input.plan'] button,\n#root [data-slot='conversation.input.model'] button,\n#root [data-slot='conversation.hero.agentPreset'] button {\n border: 1px solid transparent;\n border-radius: var(--xiaohei-radius-small);\n transition:\n color var(--xiaohei-motion-fast) ease,\n background-color var(--xiaohei-motion-fast) ease,\n border-color var(--xiaohei-motion-fast) ease;\n}\n\n#root [data-slot='conversation.session.header'] button:hover,\n#root [data-slot='conversation.input.plan'] button:hover,\n#root [data-slot='conversation.input.model'] button:hover,\n#root [data-slot='conversation.hero.agentPreset'] button:hover {\n color: var(--xiaohei-spirit-strong);\n border-color: var(--xiaohei-edge);\n background: var(--xiaohei-spirit-soft);\n}\n\n#root [data-slot='conversation.session'] [role='status'],\n#root [data-slot='conversation.composer'] [role='status'] {\n color: var(--dsw-alias-label-secondary);\n}\n\nhtml[data-xiaohei-appearance='light'] #root [data-slot='conversation.composer'] button[aria-label='\u9009\u62E9\u5DE5\u4F5C\u533A'],\nhtml[data-xiaohei-appearance='light'] #root [data-slot='conversation.composer'] button[aria-label='Select workspace'] {\n background: rgb(246 249 247 / 70%);\n box-shadow: inset 0 1px rgb(255 255 255 / 74%);\n}\n";
2
+ export declare const XIAOHEI_CONVERSATION_CSS = "\n/* Identify the resident conversation root through the host's stable scroll\n contract, without coupling the theme to generated CSS-module class names. */\n#root :has(> [data-conversation-scroll]) {\n background: transparent;\n}\n\n#root [data-slot='conversation.composer'] button[aria-label='\u9009\u62E9\u5DE5\u4F5C\u533A'],\n#root [data-slot='conversation.composer'] button[aria-label='Select workspace'] {\n min-height: 32px;\n padding-inline: 10px;\n border: 1px solid transparent;\n border-radius: var(--xiaohei-radius-control);\n color: var(--dsw-alias-label-primary);\n background: var(--xiaohei-surface-muted);\n box-shadow: inset 0 1px rgb(255 255 255 / 5%);\n transition:\n color var(--xiaohei-motion-fast) ease,\n background-color var(--xiaohei-motion-base) ease,\n border-color var(--xiaohei-motion-base) ease,\n box-shadow var(--xiaohei-motion-base) ease;\n}\n\n#root [data-slot='conversation.composer'] button[aria-label='\u9009\u62E9\u5DE5\u4F5C\u533A']:hover,\n#root [data-slot='conversation.composer'] button[aria-label='Select workspace']:hover,\n#root [data-slot='conversation.composer'] button[aria-label='\u9009\u62E9\u5DE5\u4F5C\u533A'][aria-expanded='true'],\n#root [data-slot='conversation.composer'] button[aria-label='Select workspace'][aria-expanded='true'] {\n color: var(--xiaohei-spirit-strong);\n border-color: var(--xiaohei-edge);\n background: var(--xiaohei-spirit-soft);\n box-shadow: inset 3px 0 var(--xiaohei-spirit);\n}\n\n#root [data-slot='conversation.session.header'] button,\n#root [data-slot='conversation.input.plan'] button,\n#root [data-slot='conversation.input.model'] button,\n#root [data-slot='conversation.hero.agentPreset'] button {\n border: 1px solid transparent;\n border-radius: var(--xiaohei-radius-small);\n transition:\n color var(--xiaohei-motion-fast) ease,\n background-color var(--xiaohei-motion-fast) ease,\n border-color var(--xiaohei-motion-fast) ease;\n}\n\n#root [data-slot='conversation.session.header'] button:hover,\n#root [data-slot='conversation.input.plan'] button:hover,\n#root [data-slot='conversation.input.model'] button:hover,\n#root [data-slot='conversation.hero.agentPreset'] button:hover {\n color: var(--xiaohei-spirit-strong);\n border-color: var(--xiaohei-edge);\n background: var(--xiaohei-spirit-soft);\n}\n\n#root [data-slot='conversation.session'] [role='status'],\n#root [data-slot='conversation.composer'] [role='status'] {\n color: var(--dsw-alias-label-secondary);\n}\n\nhtml[data-xiaohei-appearance='light'] #root [data-slot='conversation.composer'] button[aria-label='\u9009\u62E9\u5DE5\u4F5C\u533A'],\nhtml[data-xiaohei-appearance='light'] #root [data-slot='conversation.composer'] button[aria-label='Select workspace'] {\n background: rgb(246 249 247 / 70%);\n box-shadow: inset 0 1px rgb(255 255 255 / 74%);\n}\n";
3
3
  //# sourceMappingURL=conversation.d.ts.map
@@ -1,5 +1,11 @@
1
1
  /** Conversation-level controls and quiet Xiaohei identity details. */
2
2
  export const XIAOHEI_CONVERSATION_CSS = `
3
+ /* Identify the resident conversation root through the host's stable scroll
4
+ contract, without coupling the theme to generated CSS-module class names. */
5
+ #root :has(> [data-conversation-scroll]) {
6
+ background: transparent;
7
+ }
8
+
3
9
  #root [data-slot='conversation.composer'] button[aria-label='选择工作区'],
4
10
  #root [data-slot='conversation.composer'] button[aria-label='Select workspace'] {
5
11
  min-height: 32px;