@lemoncat7/dsh-theme-xiaohei 0.4.6 → 0.5.1

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/README.md +15 -9
  2. package/THIRD_PARTY_NOTICES.md +13 -1
  3. package/docs/dsh-021-compatibility.md +23 -0
  4. package/docs/releases/0.5.0.md +24 -0
  5. package/docs/rift-interaction.md +35 -0
  6. package/docs/rift-preview.md +39 -0
  7. package/lib/client.companion.js +3 -4
  8. package/lib/client.decorations.js +224 -51
  9. package/lib/client.js +534 -2405
  10. package/lib/index.d.ts +1 -2
  11. package/lib/index.js +395 -11
  12. package/lib/rift/boot.d.ts +6 -0
  13. package/package.json +29 -19
  14. package/lib/appearance.d.ts +0 -12
  15. package/lib/appearance.js +0 -42
  16. package/lib/blink.d.ts +0 -4
  17. package/lib/blink.js +0 -110
  18. package/lib/bloub-heixiu/ambient.d.ts +0 -3
  19. package/lib/bloub-heixiu/ambient.js +0 -12
  20. package/lib/bloub-heixiu/character.d.ts +0 -33
  21. package/lib/bloub-heixiu/character.js +0 -124
  22. package/lib/bloub-heixiu/effects.d.ts +0 -4
  23. package/lib/bloub-heixiu/effects.js +0 -91
  24. package/lib/bloub-heixiu/flight.d.ts +0 -15
  25. package/lib/bloub-heixiu/flight.js +0 -66
  26. package/lib/bloub-heixiu/follow.d.ts +0 -13
  27. package/lib/bloub-heixiu/follow.js +0 -23
  28. package/lib/bloub-heixiu/layout.d.ts +0 -34
  29. package/lib/bloub-heixiu/layout.js +0 -26
  30. package/lib/bloub-heixiu/renderer.d.ts +0 -16
  31. package/lib/bloub-heixiu/renderer.js +0 -94
  32. package/lib/bloub-heixiu/runtime.d.ts +0 -6
  33. package/lib/bloub-heixiu/runtime.js +0 -440
  34. package/lib/bloub-heixiu/signals.d.ts +0 -17
  35. package/lib/bloub-heixiu/signals.js +0 -55
  36. package/lib/bloub-heixiu/styles.d.ts +0 -2
  37. package/lib/bloub-heixiu/styles.js +0 -98
  38. package/lib/boot-appearance.d.ts +0 -10
  39. package/lib/boot-appearance.js +0 -47
  40. package/lib/boot-loader.d.ts +0 -5
  41. package/lib/boot-loader.js +0 -158
  42. package/lib/chrome/accessibility.d.ts +0 -3
  43. package/lib/chrome/accessibility.js +0 -69
  44. package/lib/chrome/blink.d.ts +0 -3
  45. package/lib/chrome/blink.js +0 -15
  46. package/lib/chrome/composer-avatar.d.ts +0 -10
  47. package/lib/chrome/composer-avatar.js +0 -599
  48. package/lib/chrome/composer-send-heixiu.d.ts +0 -3
  49. package/lib/chrome/composer-send-heixiu.js +0 -143
  50. package/lib/chrome/composer.d.ts +0 -3
  51. package/lib/chrome/composer.js +0 -135
  52. package/lib/chrome/controls.d.ts +0 -8
  53. package/lib/chrome/controls.js +0 -348
  54. package/lib/chrome/conversation-messages.d.ts +0 -3
  55. package/lib/chrome/conversation-messages.js +0 -329
  56. package/lib/chrome/conversation-submissions.d.ts +0 -3
  57. package/lib/chrome/conversation-submissions.js +0 -68
  58. package/lib/chrome/conversation.d.ts +0 -3
  59. package/lib/chrome/conversation.js +0 -67
  60. package/lib/chrome/frames.d.ts +0 -6
  61. package/lib/chrome/frames.js +0 -134
  62. package/lib/chrome/gaze.d.ts +0 -3
  63. package/lib/chrome/gaze.js +0 -103
  64. package/lib/chrome/identity.d.ts +0 -6
  65. package/lib/chrome/identity.js +0 -47
  66. package/lib/chrome/overlays.d.ts +0 -3
  67. package/lib/chrome/overlays.js +0 -104
  68. package/lib/chrome/portal.d.ts +0 -6
  69. package/lib/chrome/portal.js +0 -169
  70. package/lib/chrome/reactions.d.ts +0 -3
  71. package/lib/chrome/reactions.js +0 -85
  72. package/lib/chrome/sidebar.d.ts +0 -3
  73. package/lib/chrome/sidebar.js +0 -313
  74. package/lib/chrome/tokens.d.ts +0 -3
  75. package/lib/chrome/tokens.js +0 -224
  76. package/lib/chrome/workspace.d.ts +0 -3
  77. package/lib/chrome/workspace.js +0 -94
  78. package/lib/chrome.d.ts +0 -10
  79. package/lib/chrome.js +0 -46
  80. package/lib/client-entry.d.ts +0 -3
  81. package/lib/client-entry.js +0 -3
  82. package/lib/client.d.ts +0 -10
  83. package/lib/client.pose-chin-dark.js +0 -4
  84. package/lib/client.pose-chin-light.js +0 -4
  85. package/lib/client.pose-doze-dark.js +0 -4
  86. package/lib/client.pose-doze-light.js +0 -4
  87. package/lib/client.pose-halfpeek-dark.js +0 -4
  88. package/lib/client.pose-halfpeek-light.js +0 -4
  89. package/lib/client.pose-peek-dark.js +0 -4
  90. package/lib/client.pose-peek-light.js +0 -4
  91. package/lib/client.pose-seated-dark.js +0 -4
  92. package/lib/client.pose-seated-light.js +0 -4
  93. package/lib/client.rig-chin-dark.js +0 -4
  94. package/lib/client.rig-chin-light.js +0 -4
  95. package/lib/client.rig-halfpeek-dark.js +0 -4
  96. package/lib/client.rig-halfpeek-light.js +0 -4
  97. package/lib/client.rig-peek-dark.js +0 -4
  98. package/lib/client.rig-peek-light.js +0 -4
  99. package/lib/client.rig-seated-dark.js +0 -4
  100. package/lib/client.rig-seated-light.js +0 -4
  101. package/lib/companion-entry.d.ts +0 -3
  102. package/lib/companion-entry.js +0 -3
  103. package/lib/composer-avatar.d.ts +0 -18
  104. package/lib/composer-avatar.js +0 -441
  105. package/lib/composer-draft-preview.d.ts +0 -4
  106. package/lib/composer-draft-preview.js +0 -8
  107. package/lib/composer-send-heixiu.d.ts +0 -8
  108. package/lib/composer-send-heixiu.js +0 -133
  109. package/lib/current-session.d.ts +0 -6
  110. package/lib/current-session.js +0 -5
  111. package/lib/decorations-entry.d.ts +0 -3
  112. package/lib/decorations-entry.js +0 -18
  113. package/lib/deferred-companion.d.ts +0 -5
  114. package/lib/deferred-companion.js +0 -9
  115. package/lib/deferred-decorations.d.ts +0 -3
  116. package/lib/deferred-decorations.js +0 -51
  117. package/lib/gaze.d.ts +0 -4
  118. package/lib/gaze.js +0 -230
  119. package/lib/generated-backgrounds.d.ts +0 -14
  120. package/lib/generated-backgrounds.js +0 -14
  121. package/lib/generated-character-motion.d.ts +0 -4
  122. package/lib/generated-character-motion.js +0 -2
  123. package/lib/generated-identity.d.ts +0 -6
  124. package/lib/generated-identity.js +0 -6
  125. package/lib/generated-keyart.d.ts +0 -34
  126. package/lib/generated-keyart.js +0 -34
  127. package/lib/generated-loading-assets.d.ts +0 -4
  128. package/lib/generated-loading-assets.js +0 -4
  129. package/lib/heixiu-interactions.d.ts +0 -10
  130. package/lib/heixiu-interactions.js +0 -161
  131. package/lib/host-contract.d.ts +0 -9
  132. package/lib/host-contract.js +0 -13
  133. package/lib/host-dom.d.ts +0 -11
  134. package/lib/host-dom.js +0 -72
  135. package/lib/loading-heixiu.d.ts +0 -8
  136. package/lib/loading-heixiu.js +0 -287
  137. package/lib/metallic-brand-mark.d.ts +0 -10
  138. package/lib/metallic-brand-mark.js +0 -296
  139. package/lib/plugin.d.ts +0 -6
  140. package/lib/plugin.js +0 -60
  141. package/lib/portal.d.ts +0 -40
  142. package/lib/portal.js +0 -225
  143. package/lib/reactions.d.ts +0 -20
  144. package/lib/reactions.js +0 -380
  145. package/lib/scene/avatar-model.d.ts +0 -6
  146. package/lib/scene/avatar-model.js +0 -646
  147. package/lib/scene/avatar-motion.d.ts +0 -3
  148. package/lib/scene/avatar-motion.js +0 -799
  149. package/lib/scene/character-assets.d.ts +0 -13
  150. package/lib/scene/character-assets.js +0 -26
  151. package/lib/scene/character-expression.d.ts +0 -4
  152. package/lib/scene/character-expression.js +0 -15
  153. package/lib/scene/character-eye-material.d.ts +0 -13
  154. package/lib/scene/character-eye-material.js +0 -88
  155. package/lib/scene/character-eye-renderer.d.ts +0 -5
  156. package/lib/scene/character-eye-renderer.js +0 -80
  157. package/lib/scene/character-eye-rig.d.ts +0 -20
  158. package/lib/scene/character-eye-rig.js +0 -35
  159. package/lib/scene/character-gaze.d.ts +0 -16
  160. package/lib/scene/character-gaze.js +0 -36
  161. package/lib/scene/character-idle.d.ts +0 -17
  162. package/lib/scene/character-idle.js +0 -65
  163. package/lib/scene/character-layout.d.ts +0 -24
  164. package/lib/scene/character-layout.js +0 -51
  165. package/lib/scene/character-motion-clock.d.ts +0 -18
  166. package/lib/scene/character-motion-clock.js +0 -70
  167. package/lib/scene/character-motion-types.d.ts +0 -12
  168. package/lib/scene/character-motion-types.js +0 -2
  169. package/lib/scene/character-motion.d.ts +0 -6
  170. package/lib/scene/character-motion.js +0 -187
  171. package/lib/scene/character-poses.d.ts +0 -26
  172. package/lib/scene/character-poses.js +0 -11
  173. package/lib/scene/character-rig-renderer.d.ts +0 -5
  174. package/lib/scene/character-rig-renderer.js +0 -95
  175. package/lib/scene/character-rig.d.ts +0 -22
  176. package/lib/scene/character-rig.js +0 -61
  177. package/lib/scene/heixiu-feedback.d.ts +0 -3
  178. package/lib/scene/heixiu-feedback.js +0 -64
  179. package/lib/scene/heixiu-interactions.d.ts +0 -3
  180. package/lib/scene/heixiu-interactions.js +0 -92
  181. package/lib/scene/ids.d.ts +0 -5
  182. package/lib/scene/ids.js +0 -5
  183. package/lib/scene/pointer-bridge.d.ts +0 -21
  184. package/lib/scene/pointer-bridge.js +0 -155
  185. package/lib/scene/runtime.d.ts +0 -12
  186. package/lib/scene/runtime.js +0 -74
  187. package/lib/scene/state-transitions.d.ts +0 -3
  188. package/lib/scene/state-transitions.js +0 -37
  189. package/lib/scene/styles.d.ts +0 -5
  190. package/lib/scene/styles.js +0 -69
  191. package/lib/scene/sylva-performance.d.ts +0 -11
  192. package/lib/scene/sylva-performance.js +0 -58
  193. package/lib/scene/wallpaper-character-styles.d.ts +0 -3
  194. package/lib/scene/wallpaper-character-styles.js +0 -49
  195. package/lib/scene/wallpaper-character.d.ts +0 -5
  196. package/lib/scene/wallpaper-character.js +0 -222
  197. package/lib/scene.d.ts +0 -8
  198. package/lib/scene.js +0 -8
  199. package/lib/sidebar-glass.d.ts +0 -16
  200. package/lib/sidebar-glass.js +0 -168
  201. package/lib/sidebar-heixiu-escape.d.ts +0 -44
  202. package/lib/sidebar-heixiu-escape.js +0 -340
  203. package/lib/sidebar-heixiu-roaming.d.ts +0 -27
  204. package/lib/sidebar-heixiu-roaming.js +0 -310
  205. package/lib/sidebar-reveal.d.ts +0 -8
  206. package/lib/sidebar-reveal.js +0 -59
  207. package/lib/state.d.ts +0 -21
  208. package/lib/state.js +0 -123
  209. package/lib/theme.d.ts +0 -19
  210. package/lib/theme.js +0 -188
  211. package/lib/vendor/bloub/decor.d.ts +0 -114
  212. package/lib/vendor/bloub/decor.js +0 -198
  213. package/lib/vendor/bloub/engine.d.ts +0 -213
  214. package/lib/vendor/bloub/engine.js +0 -452
  215. package/lib/vendor/bloub/expressions.d.ts +0 -35
  216. package/lib/vendor/bloub/expressions.js +0 -143
  217. package/lib/vendor/bloub/eyefit.d.ts +0 -75
  218. package/lib/vendor/bloub/eyefit.js +0 -393
  219. package/lib/vendor/bloub/face.d.ts +0 -63
  220. package/lib/vendor/bloub/face.js +0 -106
  221. package/lib/vendor/bloub/math.d.ts +0 -22
  222. package/lib/vendor/bloub/math.js +0 -36
  223. package/lib/vendor/bloub/profiles.d.ts +0 -8
  224. package/lib/vendor/bloub/profiles.js +0 -20
  225. package/lib/vendor/bloub/repere.d.ts +0 -30
  226. package/lib/vendor/bloub/repere.js +0 -32
  227. package/lib/vendor/bloub/shape.d.ts +0 -80
  228. package/lib/vendor/bloub/shape.js +0 -268
  229. package/lib/vendor/bloub/skins.d.ts +0 -36
  230. package/lib/vendor/bloub/skins.js +0 -74
  231. package/lib/vendor/bloub/states.d.ts +0 -87
  232. package/lib/vendor/bloub/states.js +0 -468
@@ -1,329 +0,0 @@
1
- import { XIAOHEI_AVATAR_2D_FRONT } from '../generated-keyart.js';
2
- // AssistantMarkdown > body > ProcessReasoning > ReasoningRow. Require the
3
- // reasoning wrapper to be the only body child: mixed replies/images/interrupted
4
- // messages keep their bubble. No hashed classes or nested :has selectors.
5
- const thinkingOnlyRow = `#root [data-chat-flow-kind='assistant-step']:has(> [data-slot='conversation.chat.node'] > div:first-child > div:only-child > div:only-child > [data-variant='think']:only-child)`;
6
- /** Native conversation messages restyled without changing their DOM contract. */
7
- export const XIAOHEI_CONVERSATION_MESSAGES_CSS = `
8
- /* Keep DSH's native max width; only tune vertical reading rhythm. */
9
- #root [data-chat-flow] {
10
- gap: 18px;
11
- }
12
-
13
- #root [data-chat-flow-kind='assistant-step'] {
14
- color: var(--xiaohei-conversation-text);
15
- }
16
-
17
- ${thinkingOnlyRow} {
18
- padding-inline: 0 !important;
19
- }
20
-
21
- ${thinkingOnlyRow}::before {
22
- content: none !important;
23
- display: none !important;
24
- }
25
-
26
- ${thinkingOnlyRow} > [data-slot='conversation.chat.node'] > div:first-child {
27
- inline-size: 100% !important;
28
- padding: 0 !important;
29
- border: 0 !important;
30
- border-radius: 0 !important;
31
- background: transparent !important;
32
- box-shadow: none !important;
33
- }
34
-
35
- /* Message portraits are deliberately static and only identify the speaker. */
36
- #root [data-chat-flow-kind='assistant-step'],
37
- #root div[data-submission-echo],
38
- #root [data-chat-flow-kind='user'] {
39
- position: relative;
40
- overflow: visible;
41
- }
42
-
43
- #root [data-chat-flow-kind='assistant-step']::before,
44
- #root div[data-submission-echo]::after,
45
- #root [data-chat-flow-kind='user']::after {
46
- position: absolute;
47
- inset-block-start: 2px;
48
- z-index: 2;
49
- display: grid;
50
- place-items: center;
51
- box-sizing: border-box;
52
- inline-size: 40px;
53
- block-size: 44px;
54
- border: 1px solid rgb(235 240 242 / 13%);
55
- border-radius: 13px 13px 15px 15px;
56
- color: rgb(225 231 232 / 78%);
57
- background-color: rgb(18 23 25 / 76%);
58
- background-repeat: no-repeat;
59
- box-shadow:
60
- inset 0 1px 0 rgb(255 255 255 / 9%),
61
- 0 6px 16px rgb(0 0 0 / 16%);
62
- pointer-events: none;
63
- }
64
-
65
- #root [data-chat-flow-kind='assistant-step']::before {
66
- content: '';
67
- inset-inline-start: -50px;
68
- background-image:
69
- url("${XIAOHEI_AVATAR_2D_FRONT}"),
70
- linear-gradient(145deg, rgb(255 255 255 / 7%), transparent 56%);
71
- background-position: center -1px, center;
72
- background-size: 76px auto, auto;
73
- }
74
-
75
- #root div[data-submission-echo]::after,
76
- #root [data-chat-flow-kind='user']::after {
77
- content: '我';
78
- inset-inline-end: -50px;
79
- block-size: 40px;
80
- border-radius: 13px;
81
- font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
82
- font-size: 13px;
83
- font-weight: 650;
84
- letter-spacing: .02em;
85
- background-image:
86
- linear-gradient(145deg, rgb(255 255 255 / 8%), transparent 58%),
87
- linear-gradient(160deg, rgb(34 40 43 / 84%), rgb(20 25 27 / 76%));
88
- }
89
-
90
- /* The slot outlet itself uses display:contents, so the box must live on its
91
- native AssistantMarkdown child. This keeps the semantic row untouched. */
92
- #root [data-chat-flow-kind='assistant-step']
93
- > [data-slot='conversation.chat.node']
94
- > div:first-child {
95
- box-sizing: border-box;
96
- inline-size: fit-content;
97
- max-inline-size: 100%;
98
- padding: 16px 28px !important;
99
- border: 1px solid var(--xiaohei-conversation-edge) !important;
100
- border-radius: 9px 18px 18px 18px;
101
- background: var(--xiaohei-conversation-assistant) !important;
102
- box-shadow:
103
- inset 0 1px 0 var(--xiaohei-conversation-highlight),
104
- inset 1px 0 0 color-mix(in srgb, var(--xiaohei-conversation-highlight) 42%, transparent),
105
- 0 7px 22px var(--xiaohei-conversation-shadow) !important;
106
- -webkit-backdrop-filter: none;
107
- backdrop-filter: none;
108
- overflow-wrap: anywhere;
109
- }
110
-
111
- #root [data-chat-flow-kind='assistant-step']
112
- > [data-slot='conversation.chat.node']
113
- > div:first-child > div {
114
- color: var(--xiaohei-conversation-text) !important;
115
- background: transparent !important;
116
- border: 0 !important;
117
- box-shadow: none !important;
118
- }
119
-
120
- #root [data-chat-flow-kind='assistant-step'] :is(p, li, h1, h2, h3, h4, h5, h6) {
121
- color: var(--xiaohei-conversation-text);
122
- }
123
-
124
- /* User and steering prose use a slightly denser companion bubble; image-only rows stay untouched. */
125
- #root [data-chat-flow-kind='user'] > [data-slot='conversation.chat.node']
126
- > div:first-child > div:first-child > div:last-child:not([data-slot]):not(:has(img)),
127
- #root [data-chat-flow-kind='user'] [data-time-hover-root]
128
- > div:first-child > div:last-child:not(:has(img)),
129
- #root :is(div[data-submission-echo], [data-pending-steering])
130
- > div:first-child > div:first-child:not([data-message-attachments]),
131
- #root :is(div[data-submission-echo], [data-pending-steering])
132
- > div:first-child > [data-message-attachments] + div {
133
- box-sizing: border-box;
134
- padding: 14px 28px !important;
135
- color: var(--xiaohei-conversation-text) !important;
136
- border: 1px solid var(--xiaohei-conversation-edge);
137
- border-radius: 18px 9px 18px 18px;
138
- background: var(--xiaohei-conversation-user) !important;
139
- box-shadow:
140
- inset 0 1px 0 var(--xiaohei-conversation-highlight),
141
- inset -1px 0 0 color-mix(in srgb, var(--xiaohei-conversation-highlight) 42%, transparent),
142
- 0 7px 22px var(--xiaohei-conversation-shadow) !important;
143
- -webkit-backdrop-filter: none;
144
- backdrop-filter: none;
145
- overflow-wrap: anywhere;
146
- }
147
-
148
- /* Context, recall, compaction and tool rows use the same ink-and-silver family,
149
- but at a lower contrast than actual conversation bubbles. */
150
- #root [data-chat-flow-kind='context'],
151
- #root [data-chat-flow-kind='manual-compaction'],
152
- #root [data-chat-flow-kind='command'] > div,
153
- #root [data-context-injection-body],
154
- #root [data-context-source],
155
- #root [data-context-summary],
156
- #root [data-turn-tail] [role='status'] {
157
- color: var(--xiaohei-conversation-meta);
158
- }
159
-
160
- #root :is(
161
- [data-chat-flow-kind='context'],
162
- [data-chat-flow-kind='manual-compaction'],
163
- [data-chat-flow-kind='tool-call'],
164
- [data-chat-flow-kind='command']
165
- ) > [data-slot='conversation.chat.node'] > div:first-child {
166
- box-sizing: border-box;
167
- inline-size: fit-content;
168
- max-inline-size: 100%;
169
- padding: 6px 14px;
170
- border: 1px solid var(--xiaohei-conversation-meta-edge);
171
- border-radius: 11px;
172
- background: var(--xiaohei-conversation-meta-surface) !important;
173
- box-shadow:
174
- inset 0 1px 0 color-mix(in srgb, var(--xiaohei-conversation-highlight) 52%, transparent),
175
- 0 4px 14px color-mix(in srgb, var(--xiaohei-conversation-shadow) 58%, transparent);
176
- -webkit-backdrop-filter: none;
177
- backdrop-filter: none;
178
- overflow: hidden;
179
- }
180
-
181
- #root [data-chat-flow-kind='turn-tail'] .dsh-knowledge-writeback-status {
182
- box-sizing: border-box;
183
- padding: 6px 14px;
184
- border: 1px solid var(--xiaohei-conversation-meta-edge);
185
- border-radius: 9px;
186
- background: var(--xiaohei-conversation-meta-surface) !important;
187
- box-shadow: inset 0 1px 0 color-mix(in srgb, var(--xiaohei-conversation-highlight) 48%, transparent);
188
- -webkit-backdrop-filter: none;
189
- backdrop-filter: none;
190
- }
191
-
192
- #root [data-chat-flow-kind='context'],
193
- #root [data-chat-flow-kind='manual-compaction'] {
194
- font-size: 13px;
195
- }
196
-
197
- #root [data-chat-flow-kind='command'] > div {
198
- opacity: 0.82;
199
- transition: opacity var(--xiaohei-motion-fast) ease;
200
- }
201
-
202
- #root [data-chat-flow-kind='command']:hover > div,
203
- #root [data-chat-flow-kind='command']:focus-within > div {
204
- opacity: 1;
205
- }
206
-
207
- #root [data-context-injection-body] {
208
- border: 1px solid rgb(132 138 143 / 8%);
209
- background: rgb(132 138 143 / 5%) !important;
210
- }
211
-
212
- /* Copy, branch, retry and plugin-provided message actions stay quiet at rest. */
213
- #root [data-time-hover-root] button,
214
- #root [data-turn-tail] button {
215
- opacity: 0.38;
216
- transition:
217
- color var(--xiaohei-motion-fast) ease,
218
- background-color var(--xiaohei-motion-fast) ease,
219
- opacity var(--xiaohei-motion-fast) ease;
220
- }
221
-
222
- #root [data-time-hover-root]:hover button,
223
- #root [data-time-hover-root]:focus-within button,
224
- #root [data-turn-tail]:hover button,
225
- #root [data-turn-tail]:focus-within button {
226
- opacity: 0.82;
227
- }
228
-
229
- html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='assistant-step']
230
- > [data-slot='conversation.chat.node']
231
- > div:first-child,
232
- html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='assistant-step'] :is(p, li, h1, h2, h3, h4, h5, h6) {
233
- color: #343B3A !important;
234
- }
235
-
236
- html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='assistant-step']::before,
237
- html[data-xiaohei-appearance='light'] #root div[data-submission-echo]::after,
238
- html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='user']::after {
239
- border-color: rgb(42 48 52 / 11%);
240
- color: rgb(48 54 58 / 72%);
241
- background-color: rgb(239 242 243 / 78%);
242
- box-shadow:
243
- inset 0 1px 0 rgb(255 255 255 / 76%),
244
- 0 6px 16px rgb(34 40 43 / 9%);
245
- }
246
-
247
- html[data-xiaohei-appearance='light'] #root div[data-submission-echo]::after,
248
- html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='user']::after {
249
- background-image:
250
- linear-gradient(145deg, rgb(255 255 255 / 74%), transparent 58%),
251
- linear-gradient(160deg, rgb(242 244 245 / 86%), rgb(222 226 228 / 76%));
252
- }
253
-
254
- @media (width <= 760px) {
255
- #root [data-chat-flow-kind='assistant-step'] {
256
- box-sizing: border-box;
257
- padding-inline-start: 38px;
258
- }
259
-
260
- #root div[data-submission-echo],
261
- #root [data-chat-flow-kind='user'] {
262
- box-sizing: border-box;
263
- padding-inline-end: 38px;
264
- }
265
-
266
- #root [data-chat-flow-kind='assistant-step']::before,
267
- #root div[data-submission-echo]::after,
268
- #root [data-chat-flow-kind='user']::after {
269
- inline-size: 32px;
270
- block-size: 36px;
271
- border-radius: 11px 11px 13px 13px;
272
- }
273
-
274
- #root [data-chat-flow-kind='assistant-step']::before {
275
- inset-inline-start: 0;
276
- background-size: 62px auto, auto;
277
- }
278
-
279
- #root div[data-submission-echo]::after,
280
- #root [data-chat-flow-kind='user']::after {
281
- inset-inline-end: 0;
282
- block-size: 32px;
283
- border-radius: 11px;
284
- font-size: 11px;
285
- }
286
-
287
- #root [data-chat-flow-kind='assistant-step']
288
- > [data-slot='conversation.chat.node']
289
- > div:first-child {
290
- padding: 12px 20px !important;
291
- border-radius: 8px 16px 16px 16px;
292
- }
293
-
294
- #root [data-chat-flow-kind='user'] > [data-slot='conversation.chat.node']
295
- > div:first-child > div:first-child > div:last-child:not([data-slot]):not(:has(img)),
296
- #root [data-chat-flow-kind='user'] [data-time-hover-root]
297
- > div:first-child > div:last-child:not(:has(img)),
298
- #root :is(div[data-submission-echo], [data-pending-steering])
299
- > div:first-child > div:first-child:not([data-message-attachments]),
300
- #root :is(div[data-submission-echo], [data-pending-steering])
301
- > div:first-child > [data-message-attachments] + div {
302
- padding-inline: 20px !important;
303
- }
304
-
305
- #root :is(
306
- [data-chat-flow-kind='context'],
307
- [data-chat-flow-kind='manual-compaction'],
308
- [data-chat-flow-kind='tool-call'],
309
- [data-chat-flow-kind='command']
310
- ) > [data-slot='conversation.chat.node'] > div:first-child {
311
- border-radius: 10px;
312
- }
313
- }
314
-
315
- @media (prefers-contrast: more), (forced-colors: active) {
316
- #root [data-chat-flow-kind='assistant-step']::before,
317
- #root div[data-submission-echo]::after,
318
- #root [data-chat-flow-kind='user']::after {
319
- display: none;
320
- }
321
-
322
- #root [data-time-hover-root] button,
323
- #root [data-turn-tail] button,
324
- #root [data-chat-flow-kind='command'] > div {
325
- opacity: 1;
326
- }
327
- }
328
- `;
329
- //# sourceMappingURL=conversation-messages.js.map
@@ -1,3 +0,0 @@
1
- /** Local draft and native submission presentation; Host owns their lifetime. */
2
- export declare const XIAOHEI_CONVERSATION_SUBMISSIONS_CSS = "\n#root [data-xiaohei-draft-preview] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n box-sizing: border-box;\n inline-size: calc(100% - 2 * (var(--dsh-composer-side-clearance, 24px) + 16px));\n max-inline-size: var(--dsh-chat-content-width, 748px);\n margin-inline: auto;\n min-inline-size: 0;\n padding: 4px 0 8px;\n gap: 4px;\n color: var(--xiaohei-conversation-text);\n}\n#root .xiaohei-draft-label {\n font-size: 12px;\n padding-inline: 10px;\n}\n#root .xiaohei-draft-bubble {\n max-inline-size: min(calc(var(--dsh-chat-content-width, 748px) * .702), 82%);\n min-inline-size: 0;\n max-block-size: min(160px, 22dvh);\n overflow: auto;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n padding: 10px 14px;\n border: 1px dashed var(--xiaohei-conversation-edge);\n border-radius: 18px 9px 18px 18px;\n background: var(--xiaohei-conversation-user);\n font-size: 14px;\n line-height: 1.6;\n}\n#root .xiaohei-draft-bubble:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n}\n@media (width <= 760px) {\n #root [data-xiaohei-draft-preview] {\n padding-inline-end: 38px;\n }\n}\n\n#root :is(div[data-submission-echo], [data-pending-steering]) {\n min-inline-size: 0;\n color: var(--xiaohei-conversation-text);\n}\n\n/* Do not dim the whole row: text and attachments must remain readable while\n * the Host keeps edit/remove/steer disabled until its queue acknowledgement. */\n#root li[data-submission-echo] {\n opacity: 1;\n color: var(--xiaohei-conversation-text);\n background: var(--xiaohei-conversation-user);\n border-color: var(--xiaohei-conversation-edge);\n}\n\n#root [data-submission-echo] [role='status'] {\n color: var(--xiaohei-conversation-text);\n flex-shrink: 0;\n white-space: nowrap;\n}\n\n#root li[data-submission-echo] button:disabled {\n cursor: not-allowed;\n}\n";
3
- //# sourceMappingURL=conversation-submissions.d.ts.map
@@ -1,68 +0,0 @@
1
- /** Local draft and native submission presentation; Host owns their lifetime. */
2
- export const XIAOHEI_CONVERSATION_SUBMISSIONS_CSS = `
3
- #root [data-xiaohei-draft-preview] {
4
- display: flex;
5
- flex-direction: column;
6
- align-items: flex-end;
7
- box-sizing: border-box;
8
- inline-size: calc(100% - 2 * (var(--dsh-composer-side-clearance, 24px) + 16px));
9
- max-inline-size: var(--dsh-chat-content-width, 748px);
10
- margin-inline: auto;
11
- min-inline-size: 0;
12
- padding: 4px 0 8px;
13
- gap: 4px;
14
- color: var(--xiaohei-conversation-text);
15
- }
16
- #root .xiaohei-draft-label {
17
- font-size: 12px;
18
- padding-inline: 10px;
19
- }
20
- #root .xiaohei-draft-bubble {
21
- max-inline-size: min(calc(var(--dsh-chat-content-width, 748px) * .702), 82%);
22
- min-inline-size: 0;
23
- max-block-size: min(160px, 22dvh);
24
- overflow: auto;
25
- white-space: pre-wrap;
26
- overflow-wrap: anywhere;
27
- padding: 10px 14px;
28
- border: 1px dashed var(--xiaohei-conversation-edge);
29
- border-radius: 18px 9px 18px 18px;
30
- background: var(--xiaohei-conversation-user);
31
- font-size: 14px;
32
- line-height: 1.6;
33
- }
34
- #root .xiaohei-draft-bubble:focus-visible {
35
- outline: 2px solid currentColor;
36
- outline-offset: 2px;
37
- }
38
- @media (width <= 760px) {
39
- #root [data-xiaohei-draft-preview] {
40
- padding-inline-end: 38px;
41
- }
42
- }
43
-
44
- #root :is(div[data-submission-echo], [data-pending-steering]) {
45
- min-inline-size: 0;
46
- color: var(--xiaohei-conversation-text);
47
- }
48
-
49
- /* Do not dim the whole row: text and attachments must remain readable while
50
- * the Host keeps edit/remove/steer disabled until its queue acknowledgement. */
51
- #root li[data-submission-echo] {
52
- opacity: 1;
53
- color: var(--xiaohei-conversation-text);
54
- background: var(--xiaohei-conversation-user);
55
- border-color: var(--xiaohei-conversation-edge);
56
- }
57
-
58
- #root [data-submission-echo] [role='status'] {
59
- color: var(--xiaohei-conversation-text);
60
- flex-shrink: 0;
61
- white-space: nowrap;
62
- }
63
-
64
- #root li[data-submission-echo] button:disabled {
65
- cursor: not-allowed;
66
- }
67
- `;
68
- //# sourceMappingURL=conversation-submissions.js.map
@@ -1,3 +0,0 @@
1
- /** Conversation-level controls and quiet Xiaohei identity details. */
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
- //# sourceMappingURL=conversation.d.ts.map
@@ -1,67 +0,0 @@
1
- /** Conversation-level controls and quiet Xiaohei identity details. */
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
-
9
- #root [data-slot='conversation.composer'] button[aria-label='选择工作区'],
10
- #root [data-slot='conversation.composer'] button[aria-label='Select workspace'] {
11
- min-height: 32px;
12
- padding-inline: 10px;
13
- border: 1px solid transparent;
14
- border-radius: var(--xiaohei-radius-control);
15
- color: var(--dsw-alias-label-primary);
16
- background: var(--xiaohei-surface-muted);
17
- box-shadow: inset 0 1px rgb(255 255 255 / 5%);
18
- transition:
19
- color var(--xiaohei-motion-fast) ease,
20
- background-color var(--xiaohei-motion-base) ease,
21
- border-color var(--xiaohei-motion-base) ease,
22
- box-shadow var(--xiaohei-motion-base) ease;
23
- }
24
-
25
- #root [data-slot='conversation.composer'] button[aria-label='选择工作区']:hover,
26
- #root [data-slot='conversation.composer'] button[aria-label='Select workspace']:hover,
27
- #root [data-slot='conversation.composer'] button[aria-label='选择工作区'][aria-expanded='true'],
28
- #root [data-slot='conversation.composer'] button[aria-label='Select workspace'][aria-expanded='true'] {
29
- color: var(--xiaohei-spirit-strong);
30
- border-color: var(--xiaohei-edge);
31
- background: var(--xiaohei-spirit-soft);
32
- box-shadow: inset 3px 0 var(--xiaohei-spirit);
33
- }
34
-
35
- #root [data-slot='conversation.session.header'] button,
36
- #root [data-slot='conversation.input.plan'] button,
37
- #root [data-slot='conversation.input.model'] button,
38
- #root [data-slot='conversation.hero.agentPreset'] button {
39
- border: 1px solid transparent;
40
- border-radius: var(--xiaohei-radius-small);
41
- transition:
42
- color var(--xiaohei-motion-fast) ease,
43
- background-color var(--xiaohei-motion-fast) ease,
44
- border-color var(--xiaohei-motion-fast) ease;
45
- }
46
-
47
- #root [data-slot='conversation.session.header'] button:hover,
48
- #root [data-slot='conversation.input.plan'] button:hover,
49
- #root [data-slot='conversation.input.model'] button:hover,
50
- #root [data-slot='conversation.hero.agentPreset'] button:hover {
51
- color: var(--xiaohei-spirit-strong);
52
- border-color: var(--xiaohei-edge);
53
- background: var(--xiaohei-spirit-soft);
54
- }
55
-
56
- #root [data-slot='conversation.session'] [role='status'],
57
- #root [data-slot='conversation.composer'] [role='status'] {
58
- color: var(--dsw-alias-label-secondary);
59
- }
60
-
61
- html[data-xiaohei-appearance='light'] #root [data-slot='conversation.composer'] button[aria-label='选择工作区'],
62
- html[data-xiaohei-appearance='light'] #root [data-slot='conversation.composer'] button[aria-label='Select workspace'] {
63
- background: rgb(246 249 247 / 70%);
64
- box-shadow: inset 0 1px rgb(255 255 255 / 74%);
65
- }
66
- `;
67
- //# sourceMappingURL=conversation.js.map
@@ -1,6 +0,0 @@
1
- /**
2
- * Public frame contract for first-party chrome and future Xiaohei-aware tools.
3
- * Feature plugins opt in with data attributes; this layer never guesses their DOM.
4
- */
5
- export declare const XIAOHEI_FRAME_SYSTEM_CSS = "\n:where([data-xiaohei-surface='plugin-workspace']) {\n isolation: isolate;\n background-color: var(--xiaohei-plugin-workspace-fill) !important;\n -webkit-backdrop-filter:\n blur(var(--xiaohei-plugin-surface-blur))\n saturate(var(--xiaohei-plugin-surface-saturation));\n backdrop-filter:\n blur(var(--xiaohei-plugin-surface-blur))\n saturate(var(--xiaohei-plugin-surface-saturation));\n}\n\n:where([data-xiaohei-workspace-close]) {\n -webkit-appearance: none;\n appearance: none;\n display: grid;\n place-items: center;\n box-sizing: border-box;\n flex: none;\n width: 30px;\n height: 30px;\n margin: 0;\n padding: 0;\n border: 1px solid transparent;\n border-radius: var(--xiaohei-radius-small);\n color: var(--dsw-alias-label-secondary);\n background: transparent;\n font: inherit;\n line-height: 1;\n text-align: center;\n -webkit-tap-highlight-color: transparent;\n cursor: pointer;\n transition:\n color var(--xiaohei-motion-fast) ease,\n background var(--xiaohei-motion-fast) ease,\n border-color var(--xiaohei-motion-fast) ease,\n transform var(--xiaohei-motion-fast) var(--xiaohei-motion-curve);\n}\n\n:where([data-xiaohei-workspace-close]) > svg {\n display: block;\n flex: none;\n pointer-events: none;\n}\n\n:where([data-xiaohei-workspace-close]):hover {\n border-color: var(--xiaohei-workspace-control-edge);\n color: var(--dsw-alias-label-primary);\n background: var(--xiaohei-plugin-control-fill);\n}\n\n:where([data-xiaohei-workspace-close]):active {\n transform: scale(.96);\n}\n\n:where([data-xiaohei-workspace-close]):focus-visible {\n outline: 2px solid var(--xiaohei-spirit);\n outline-offset: 2px;\n}\n\n:where([data-xiaohei-frame='module'], [data-xiaohei-frame='compact']) {\n position: relative;\n box-sizing: border-box;\n border: 1px solid var(--xiaohei-frame-line);\n color: var(--dsw-alias-label-primary);\n background:\n linear-gradient(var(--xiaohei-frame-line-strong), var(--xiaohei-frame-line-strong)) 12px 0 / 28px 1px no-repeat,\n linear-gradient(var(--xiaohei-frame-line), var(--xiaohei-frame-line)) 0 12px / 1px 22px no-repeat,\n linear-gradient(var(--xiaohei-frame-line), var(--xiaohei-frame-line)) 100% calc(100% - 12px) / 1px 22px no-repeat,\n var(--xiaohei-frame-fill);\n box-shadow:\n inset 0 0 0 1px var(--xiaohei-frame-inner),\n 0 12px 30px var(--xiaohei-shadow);\n}\n\n:where([data-xiaohei-frame='module']) {\n border-radius: var(--xiaohei-radius-panel);\n}\n\n:where([data-xiaohei-frame='compact']) {\n border-radius: var(--xiaohei-radius-control);\n}\n\n:where([data-xiaohei-frame-header]) {\n min-height: 38px;\n border-bottom: 1px solid var(--xiaohei-frame-line);\n}\n\n:where([data-xiaohei-frame-actions]) {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n:where([data-xiaohei-module-kind]) {\n --xiaohei-module-accent: var(--xiaohei-spirit);\n}\n\n@media (forced-colors: active) {\n :where([data-xiaohei-frame], [data-xiaohei-surface='plugin-workspace']) {\n border-color: currentColor;\n background: Canvas;\n -webkit-backdrop-filter: none;\n backdrop-filter: none;\n box-shadow: none;\n }\n\n}\n\n@media (max-width: 700px) {\n :where([data-xiaohei-surface='plugin-workspace']) {\n --xiaohei-plugin-surface-blur: 22px;\n }\n}\n\n@media (prefers-reduced-transparency: reduce) {\n :where([data-xiaohei-surface='plugin-workspace']) {\n background-color: var(--xiaohei-surface-raised) !important;\n -webkit-backdrop-filter: none;\n backdrop-filter: none;\n }\n}\n\n@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {\n :where([data-xiaohei-surface='plugin-workspace']) {\n background-color: var(--xiaohei-surface-raised) !important;\n }\n}\n";
6
- //# sourceMappingURL=frames.d.ts.map
@@ -1,134 +0,0 @@
1
- /**
2
- * Public frame contract for first-party chrome and future Xiaohei-aware tools.
3
- * Feature plugins opt in with data attributes; this layer never guesses their DOM.
4
- */
5
- export const XIAOHEI_FRAME_SYSTEM_CSS = `
6
- :where([data-xiaohei-surface='plugin-workspace']) {
7
- isolation: isolate;
8
- background-color: var(--xiaohei-plugin-workspace-fill) !important;
9
- -webkit-backdrop-filter:
10
- blur(var(--xiaohei-plugin-surface-blur))
11
- saturate(var(--xiaohei-plugin-surface-saturation));
12
- backdrop-filter:
13
- blur(var(--xiaohei-plugin-surface-blur))
14
- saturate(var(--xiaohei-plugin-surface-saturation));
15
- }
16
-
17
- :where([data-xiaohei-workspace-close]) {
18
- -webkit-appearance: none;
19
- appearance: none;
20
- display: grid;
21
- place-items: center;
22
- box-sizing: border-box;
23
- flex: none;
24
- width: 30px;
25
- height: 30px;
26
- margin: 0;
27
- padding: 0;
28
- border: 1px solid transparent;
29
- border-radius: var(--xiaohei-radius-small);
30
- color: var(--dsw-alias-label-secondary);
31
- background: transparent;
32
- font: inherit;
33
- line-height: 1;
34
- text-align: center;
35
- -webkit-tap-highlight-color: transparent;
36
- cursor: pointer;
37
- transition:
38
- color var(--xiaohei-motion-fast) ease,
39
- background var(--xiaohei-motion-fast) ease,
40
- border-color var(--xiaohei-motion-fast) ease,
41
- transform var(--xiaohei-motion-fast) var(--xiaohei-motion-curve);
42
- }
43
-
44
- :where([data-xiaohei-workspace-close]) > svg {
45
- display: block;
46
- flex: none;
47
- pointer-events: none;
48
- }
49
-
50
- :where([data-xiaohei-workspace-close]):hover {
51
- border-color: var(--xiaohei-workspace-control-edge);
52
- color: var(--dsw-alias-label-primary);
53
- background: var(--xiaohei-plugin-control-fill);
54
- }
55
-
56
- :where([data-xiaohei-workspace-close]):active {
57
- transform: scale(.96);
58
- }
59
-
60
- :where([data-xiaohei-workspace-close]):focus-visible {
61
- outline: 2px solid var(--xiaohei-spirit);
62
- outline-offset: 2px;
63
- }
64
-
65
- :where([data-xiaohei-frame='module'], [data-xiaohei-frame='compact']) {
66
- position: relative;
67
- box-sizing: border-box;
68
- border: 1px solid var(--xiaohei-frame-line);
69
- color: var(--dsw-alias-label-primary);
70
- background:
71
- linear-gradient(var(--xiaohei-frame-line-strong), var(--xiaohei-frame-line-strong)) 12px 0 / 28px 1px no-repeat,
72
- linear-gradient(var(--xiaohei-frame-line), var(--xiaohei-frame-line)) 0 12px / 1px 22px no-repeat,
73
- linear-gradient(var(--xiaohei-frame-line), var(--xiaohei-frame-line)) 100% calc(100% - 12px) / 1px 22px no-repeat,
74
- var(--xiaohei-frame-fill);
75
- box-shadow:
76
- inset 0 0 0 1px var(--xiaohei-frame-inner),
77
- 0 12px 30px var(--xiaohei-shadow);
78
- }
79
-
80
- :where([data-xiaohei-frame='module']) {
81
- border-radius: var(--xiaohei-radius-panel);
82
- }
83
-
84
- :where([data-xiaohei-frame='compact']) {
85
- border-radius: var(--xiaohei-radius-control);
86
- }
87
-
88
- :where([data-xiaohei-frame-header]) {
89
- min-height: 38px;
90
- border-bottom: 1px solid var(--xiaohei-frame-line);
91
- }
92
-
93
- :where([data-xiaohei-frame-actions]) {
94
- display: flex;
95
- align-items: center;
96
- gap: 4px;
97
- }
98
-
99
- :where([data-xiaohei-module-kind]) {
100
- --xiaohei-module-accent: var(--xiaohei-spirit);
101
- }
102
-
103
- @media (forced-colors: active) {
104
- :where([data-xiaohei-frame], [data-xiaohei-surface='plugin-workspace']) {
105
- border-color: currentColor;
106
- background: Canvas;
107
- -webkit-backdrop-filter: none;
108
- backdrop-filter: none;
109
- box-shadow: none;
110
- }
111
-
112
- }
113
-
114
- @media (max-width: 700px) {
115
- :where([data-xiaohei-surface='plugin-workspace']) {
116
- --xiaohei-plugin-surface-blur: 22px;
117
- }
118
- }
119
-
120
- @media (prefers-reduced-transparency: reduce) {
121
- :where([data-xiaohei-surface='plugin-workspace']) {
122
- background-color: var(--xiaohei-surface-raised) !important;
123
- -webkit-backdrop-filter: none;
124
- backdrop-filter: none;
125
- }
126
- }
127
-
128
- @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
129
- :where([data-xiaohei-surface='plugin-workspace']) {
130
- background-color: var(--xiaohei-surface-raised) !important;
131
- }
132
- }
133
- `;
134
- //# sourceMappingURL=frames.js.map
@@ -1,3 +0,0 @@
1
- /** Visual geometry for Xiaohei's idle gaze. Behavior lives in ../gaze.ts. */
2
- export declare const XIAOHEI_GAZE_CSS = "\n.xiaohei-scene__mascot-blink {\n z-index: 3;\n}\n\n.xiaohei-gaze {\n --xiaohei-gaze-x: 0px;\n --xiaohei-gaze-y: 0px;\n position: absolute;\n inset: 0;\n z-index: 2;\n display: block;\n overflow: hidden;\n opacity: 0;\n pointer-events: none;\n transition: opacity 80ms ease-out;\n}\n\nhtml[data-xiaohei-state='idle'] .xiaohei-gaze {\n opacity: 1;\n}\n\n/* The complete blink frame owns eye occlusion; a second visibility clock can expose pupil-free frames. */\n\n.xiaohei-gaze__base {\n position: absolute;\n inset: 0;\n display: block;\n width: 100%;\n height: 100%;\n max-width: none;\n max-height: none;\n object-fit: contain;\n filter: brightness(1.32) contrast(1.02) saturate(1.04);\n}\n\nhtml[data-xiaohei-appearance='light'] .xiaohei-gaze__base {\n filter: brightness(1.02) contrast(1.07) saturate(0.9);\n}\n\n.xiaohei-gaze__eye {\n position: absolute;\n display: block;\n overflow: hidden;\n border-radius: 50%;\n pointer-events: none;\n}\n\n.xiaohei-gaze__eye--left {\n left: 22.65%;\n top: 34.35%;\n width: 9%;\n height: 13.7%;\n}\n\n.xiaohei-gaze__eye--right {\n left: 38.25%;\n top: 35.15%;\n width: 13.3%;\n height: 14.5%;\n}\n\n.xiaohei-gaze__pupil {\n position: absolute;\n display: block;\n border-radius: 48% 52% 49% 51%;\n background:\n radial-gradient(circle at 39% 27%, #F3F7F3 0 12%, transparent 15%),\n #020505;\n transform: translate3d(\n calc(-50% + var(--xiaohei-gaze-x)),\n calc(-50% + var(--xiaohei-gaze-y)),\n 0\n );\n transform-origin: 50% 50%;\n}\n\n.xiaohei-gaze[data-moving='true'] .xiaohei-gaze__pupil {\n will-change: transform;\n}\n\n.xiaohei-gaze__pupil--left {\n left: 50%;\n top: 49%;\n width: 57.25%;\n height: 67.5%;\n}\n\n.xiaohei-gaze__pupil--right {\n left: 33.5%;\n top: 48.7%;\n width: 40.25%;\n height: 65.2%;\n}\n\n@media (prefers-reduced-motion: reduce), (hover: none) and (pointer: coarse) {\n .xiaohei-gaze {\n display: none;\n }\n}\n";
3
- //# sourceMappingURL=gaze.d.ts.map