@lemoncat7/dsh-theme-xiaohei 0.3.0-alpha.22

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 (164) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/cordis.patch.yml +4 -0
  4. package/lib/appearance.d.ts +12 -0
  5. package/lib/appearance.d.ts.map +1 -0
  6. package/lib/appearance.js +26 -0
  7. package/lib/appearance.js.map +1 -0
  8. package/lib/blink.d.ts +4 -0
  9. package/lib/blink.d.ts.map +1 -0
  10. package/lib/blink.js +110 -0
  11. package/lib/blink.js.map +1 -0
  12. package/lib/boot-appearance.d.ts +10 -0
  13. package/lib/boot-appearance.d.ts.map +1 -0
  14. package/lib/boot-appearance.js +47 -0
  15. package/lib/boot-appearance.js.map +1 -0
  16. package/lib/boot-loader.d.ts +5 -0
  17. package/lib/boot-loader.d.ts.map +1 -0
  18. package/lib/boot-loader.js +158 -0
  19. package/lib/boot-loader.js.map +1 -0
  20. package/lib/chrome/accessibility.d.ts +3 -0
  21. package/lib/chrome/accessibility.d.ts.map +1 -0
  22. package/lib/chrome/accessibility.js +77 -0
  23. package/lib/chrome/accessibility.js.map +1 -0
  24. package/lib/chrome/blink.d.ts +3 -0
  25. package/lib/chrome/blink.d.ts.map +1 -0
  26. package/lib/chrome/blink.js +15 -0
  27. package/lib/chrome/blink.js.map +1 -0
  28. package/lib/chrome/composer.d.ts +3 -0
  29. package/lib/chrome/composer.d.ts.map +1 -0
  30. package/lib/chrome/composer.js +146 -0
  31. package/lib/chrome/composer.js.map +1 -0
  32. package/lib/chrome/conversation-messages.d.ts +3 -0
  33. package/lib/chrome/conversation-messages.d.ts.map +1 -0
  34. package/lib/chrome/conversation-messages.js +96 -0
  35. package/lib/chrome/conversation-messages.js.map +1 -0
  36. package/lib/chrome/conversation.d.ts +3 -0
  37. package/lib/chrome/conversation.d.ts.map +1 -0
  38. package/lib/chrome/conversation.js +61 -0
  39. package/lib/chrome/conversation.js.map +1 -0
  40. package/lib/chrome/frames.d.ts +6 -0
  41. package/lib/chrome/frames.d.ts.map +1 -0
  42. package/lib/chrome/frames.js +120 -0
  43. package/lib/chrome/frames.js.map +1 -0
  44. package/lib/chrome/gaze.d.ts +3 -0
  45. package/lib/chrome/gaze.d.ts.map +1 -0
  46. package/lib/chrome/gaze.js +103 -0
  47. package/lib/chrome/gaze.js.map +1 -0
  48. package/lib/chrome/identity.d.ts +6 -0
  49. package/lib/chrome/identity.d.ts.map +1 -0
  50. package/lib/chrome/identity.js +61 -0
  51. package/lib/chrome/identity.js.map +1 -0
  52. package/lib/chrome/overlays.d.ts +3 -0
  53. package/lib/chrome/overlays.d.ts.map +1 -0
  54. package/lib/chrome/overlays.js +104 -0
  55. package/lib/chrome/overlays.js.map +1 -0
  56. package/lib/chrome/portal.d.ts +6 -0
  57. package/lib/chrome/portal.d.ts.map +1 -0
  58. package/lib/chrome/portal.js +169 -0
  59. package/lib/chrome/portal.js.map +1 -0
  60. package/lib/chrome/reactions.d.ts +3 -0
  61. package/lib/chrome/reactions.d.ts.map +1 -0
  62. package/lib/chrome/reactions.js +85 -0
  63. package/lib/chrome/reactions.js.map +1 -0
  64. package/lib/chrome/sidebar.d.ts +3 -0
  65. package/lib/chrome/sidebar.d.ts.map +1 -0
  66. package/lib/chrome/sidebar.js +305 -0
  67. package/lib/chrome/sidebar.js.map +1 -0
  68. package/lib/chrome/tokens.d.ts +3 -0
  69. package/lib/chrome/tokens.d.ts.map +1 -0
  70. package/lib/chrome/tokens.js +171 -0
  71. package/lib/chrome/tokens.js.map +1 -0
  72. package/lib/chrome/workspace.d.ts +3 -0
  73. package/lib/chrome/workspace.d.ts.map +1 -0
  74. package/lib/chrome/workspace.js +313 -0
  75. package/lib/chrome/workspace.js.map +1 -0
  76. package/lib/chrome.d.ts +10 -0
  77. package/lib/chrome.d.ts.map +1 -0
  78. package/lib/chrome.js +40 -0
  79. package/lib/chrome.js.map +1 -0
  80. package/lib/client.d.ts +17 -0
  81. package/lib/client.d.ts.map +1 -0
  82. package/lib/client.js +5505 -0
  83. package/lib/client.js.map +7 -0
  84. package/lib/gaze.d.ts +4 -0
  85. package/lib/gaze.d.ts.map +1 -0
  86. package/lib/gaze.js +217 -0
  87. package/lib/gaze.js.map +1 -0
  88. package/lib/generated-identity.d.ts +5 -0
  89. package/lib/generated-identity.d.ts.map +1 -0
  90. package/lib/generated-identity.js +5 -0
  91. package/lib/generated-identity.js.map +1 -0
  92. package/lib/generated-keyart.d.ts +19 -0
  93. package/lib/generated-keyart.d.ts.map +1 -0
  94. package/lib/generated-keyart.js +19 -0
  95. package/lib/generated-keyart.js.map +1 -0
  96. package/lib/generated-loading-assets.d.ts +4 -0
  97. package/lib/generated-loading-assets.d.ts.map +1 -0
  98. package/lib/generated-loading-assets.js +4 -0
  99. package/lib/generated-loading-assets.js.map +1 -0
  100. package/lib/generated-sidebar-assets.d.ts +4 -0
  101. package/lib/generated-sidebar-assets.d.ts.map +1 -0
  102. package/lib/generated-sidebar-assets.js +4 -0
  103. package/lib/generated-sidebar-assets.js.map +1 -0
  104. package/lib/heixiu-interactions.d.ts +10 -0
  105. package/lib/heixiu-interactions.d.ts.map +1 -0
  106. package/lib/heixiu-interactions.js +161 -0
  107. package/lib/heixiu-interactions.js.map +1 -0
  108. package/lib/index.d.ts +8 -0
  109. package/lib/index.d.ts.map +1 -0
  110. package/lib/index.js +11 -0
  111. package/lib/index.js.map +1 -0
  112. package/lib/loading-heixiu.d.ts +8 -0
  113. package/lib/loading-heixiu.d.ts.map +1 -0
  114. package/lib/loading-heixiu.js +287 -0
  115. package/lib/loading-heixiu.js.map +1 -0
  116. package/lib/plugin.d.ts +6 -0
  117. package/lib/plugin.d.ts.map +1 -0
  118. package/lib/plugin.js +38 -0
  119. package/lib/plugin.js.map +1 -0
  120. package/lib/portal.d.ts +40 -0
  121. package/lib/portal.d.ts.map +1 -0
  122. package/lib/portal.js +224 -0
  123. package/lib/portal.js.map +1 -0
  124. package/lib/reactions.d.ts +20 -0
  125. package/lib/reactions.d.ts.map +1 -0
  126. package/lib/reactions.js +380 -0
  127. package/lib/reactions.js.map +1 -0
  128. package/lib/scene/heixiu-feedback.d.ts +3 -0
  129. package/lib/scene/heixiu-feedback.d.ts.map +1 -0
  130. package/lib/scene/heixiu-feedback.js +81 -0
  131. package/lib/scene/heixiu-feedback.js.map +1 -0
  132. package/lib/scene/heixiu-interactions.d.ts +3 -0
  133. package/lib/scene/heixiu-interactions.d.ts.map +1 -0
  134. package/lib/scene/heixiu-interactions.js +92 -0
  135. package/lib/scene/heixiu-interactions.js.map +1 -0
  136. package/lib/scene/state-transitions.d.ts +3 -0
  137. package/lib/scene/state-transitions.d.ts.map +1 -0
  138. package/lib/scene/state-transitions.js +37 -0
  139. package/lib/scene/state-transitions.js.map +1 -0
  140. package/lib/scene.d.ts +14 -0
  141. package/lib/scene.d.ts.map +1 -0
  142. package/lib/scene.js +1024 -0
  143. package/lib/scene.js.map +1 -0
  144. package/lib/sidebar-glass.d.ts +16 -0
  145. package/lib/sidebar-glass.d.ts.map +1 -0
  146. package/lib/sidebar-glass.js +105 -0
  147. package/lib/sidebar-glass.js.map +1 -0
  148. package/lib/sidebar-heixiu-escape.d.ts +44 -0
  149. package/lib/sidebar-heixiu-escape.d.ts.map +1 -0
  150. package/lib/sidebar-heixiu-escape.js +340 -0
  151. package/lib/sidebar-heixiu-escape.js.map +1 -0
  152. package/lib/sidebar-heixiu-roaming.d.ts +27 -0
  153. package/lib/sidebar-heixiu-roaming.d.ts.map +1 -0
  154. package/lib/sidebar-heixiu-roaming.js +310 -0
  155. package/lib/sidebar-heixiu-roaming.js.map +1 -0
  156. package/lib/state.d.ts +9 -0
  157. package/lib/state.d.ts.map +1 -0
  158. package/lib/state.js +114 -0
  159. package/lib/state.js.map +1 -0
  160. package/lib/theme.d.ts +19 -0
  161. package/lib/theme.d.ts.map +1 -0
  162. package/lib/theme.js +188 -0
  163. package/lib/theme.js.map +1 -0
  164. package/package.json +74 -0
@@ -0,0 +1,15 @@
1
+ /** Atomic blink rendering: one state hides live eyes and reveals the complete closed frame. */
2
+ export const XIAOHEI_BLINK_CSS = `
3
+ .xiaohei-scene__mascot-blink {
4
+ animation: none;
5
+ }
6
+
7
+ .xiaohei-scene__mascot[data-xiaohei-blink='closed'] .xiaohei-scene__mascot-blink {
8
+ opacity: 1;
9
+ }
10
+
11
+ .xiaohei-scene__mascot[data-xiaohei-blink='closed'] .xiaohei-gaze__eye {
12
+ visibility: hidden;
13
+ }
14
+ `;
15
+ //# sourceMappingURL=blink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blink.js","sourceRoot":"","sources":["../../src/chrome/blink.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;CAYhC,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Conversation composer, command affordances, and send action. */
2
+ export declare const XIAOHEI_COMPOSER_CSS = "\n#root [data-composer-card='true'] {\n position: relative;\n isolation: isolate;\n overflow: visible;\n border: 1px solid var(--xiaohei-layer-content-edge) !important;\n border-radius: 8px !important;\n background:\n linear-gradient(\n 90deg,\n transparent,\n transparent 18%,\n var(--xiaohei-spirit-faint) 52%,\n transparent\n ) 18px 0 / 104px 1px no-repeat,\n linear-gradient(180deg, var(--xiaohei-layer-content-highlight), transparent 34%),\n var(--xiaohei-layer-content) !important;\n box-shadow:\n inset 0 0 0 1px var(--xiaohei-frame-inner),\n inset 0 1px rgb(255 255 255 / 7%),\n inset 0 -1px var(--xiaohei-layer-panel-edge),\n 0 8px 22px var(--xiaohei-shadow) !important;\n transition:\n border-color var(--xiaohei-motion-base) ease,\n box-shadow var(--xiaohei-motion-base) ease;\n}\n\n#root [data-composer-card='true']:focus-within {\n border-color: var(--xiaohei-edge-strong) !important;\n box-shadow:\n inset 0 1px rgb(255 255 255 / 9%),\n 0 10px 26px var(--xiaohei-shadow),\n 0 0 0 4px var(--xiaohei-focus-shadow) !important;\n}\n\n#root [data-composer-card='true'] textarea {\n color: var(--dsw-alias-label-primary) !important;\n caret-color: var(--xiaohei-spirit-strong);\n}\n\n#root [data-composer-card='true'] textarea::placeholder {\n color: var(--dsw-alias-label-tertiary) !important;\n opacity: 0.92;\n}\n\n#root [data-composer-card='true'] [data-input-backdrop='true'] {\n border-color: transparent !important;\n background: transparent !important;\n}\n\n#root [data-composer-card='true'] button {\n min-width: 28px;\n min-height: 28px;\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 transform var(--xiaohei-motion-fast) var(--xiaohei-motion-curve);\n}\n\n#root [data-composer-card='true'] button:not(:disabled):hover {\n color: var(--xiaohei-spirit-strong);\n border-color: var(--xiaohei-edge);\n background: var(--xiaohei-spirit-soft);\n}\n\n#root [data-composer-card='true'] button:not(:disabled):active {\n transform: translateY(1px) scale(0.98);\n}\n\n#root button[aria-label='\u53D1\u9001\u6D88\u606F'],\n#root button[aria-label='Send message'] {\n position: relative;\n isolation: isolate;\n border: 1px solid var(--xiaohei-edge-strong) !important;\n border-radius: 50% !important;\n color: var(--dsw-alias-brand-primary-invert) !important;\n background:\n radial-gradient(circle at 36% 27%, rgb(255 255 255 / 36%) 0 7%, transparent 9%),\n linear-gradient(145deg, var(--xiaohei-spirit), var(--dsw-alias-button-primary-fill)) !important;\n box-shadow:\n inset 0 1px rgb(255 255 255 / 34%),\n inset 0 -2px rgb(4 25 31 / 18%),\n 0 6px 16px var(--xiaohei-focus-shadow) !important;\n transition:\n transform var(--xiaohei-motion-fast) var(--xiaohei-motion-curve),\n box-shadow var(--xiaohei-motion-base) ease,\n filter var(--xiaohei-motion-base) ease;\n}\n\n#root button[aria-label='\u53D1\u9001\u6D88\u606F']::after,\n#root button[aria-label='Send message']::after {\n content: '';\n position: absolute;\n inset: 3px;\n border: 1px solid rgb(238 253 255 / 28%);\n border-radius: inherit;\n pointer-events: none;\n opacity: 0.58;\n transition: opacity var(--xiaohei-motion-fast) ease, transform 220ms var(--xiaohei-motion-curve);\n}\n\n#root button[aria-label='\u53D1\u9001\u6D88\u606F']:not(:disabled):hover,\n#root button[aria-label='Send message']:not(:disabled):hover {\n filter: brightness(1.05) saturate(1.03);\n box-shadow:\n inset 0 1px rgb(255 255 255 / 42%),\n inset 0 -2px rgb(4 25 31 / 16%),\n 0 8px 20px var(--xiaohei-focus-shadow) !important;\n}\n\n#root button[aria-label='\u53D1\u9001\u6D88\u606F']:not(:disabled):active,\n#root button[aria-label='Send message']:not(:disabled):active {\n transform: translateY(1px) scale(0.96);\n}\n\n#root button[aria-label='\u53D1\u9001\u6D88\u606F']:not(:disabled):active::after,\n#root button[aria-label='Send message']:not(:disabled):active::after {\n opacity: 0.86;\n transform: scale(0.76);\n}\n\n#root button[aria-label='\u53D1\u9001\u6D88\u606F']:disabled,\n#root button[aria-label='Send message']:disabled {\n border-color: var(--xiaohei-edge) !important;\n color: var(--dsw-alias-label-dimmed) !important;\n background: var(--xiaohei-surface-muted) !important;\n filter: saturate(0.42);\n box-shadow: inset 0 1px rgb(255 255 255 / 8%) !important;\n}\n\n#root button[aria-label='\u53D1\u9001\u6D88\u606F']:disabled::after,\n#root button[aria-label='Send message']:disabled::after {\n opacity: 0.12;\n}\n\n@media (max-width: 700px) {\n #root [data-composer-card='true'] {\n border-radius: 7px !important;\n }\n}\n";
3
+ //# sourceMappingURL=composer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../src/chrome/composer.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,svJA+IhC,CAAA"}
@@ -0,0 +1,146 @@
1
+ /** Conversation composer, command affordances, and send action. */
2
+ export const XIAOHEI_COMPOSER_CSS = `
3
+ #root [data-composer-card='true'] {
4
+ position: relative;
5
+ isolation: isolate;
6
+ overflow: visible;
7
+ border: 1px solid var(--xiaohei-layer-content-edge) !important;
8
+ border-radius: 8px !important;
9
+ background:
10
+ linear-gradient(
11
+ 90deg,
12
+ transparent,
13
+ transparent 18%,
14
+ var(--xiaohei-spirit-faint) 52%,
15
+ transparent
16
+ ) 18px 0 / 104px 1px no-repeat,
17
+ linear-gradient(180deg, var(--xiaohei-layer-content-highlight), transparent 34%),
18
+ var(--xiaohei-layer-content) !important;
19
+ box-shadow:
20
+ inset 0 0 0 1px var(--xiaohei-frame-inner),
21
+ inset 0 1px rgb(255 255 255 / 7%),
22
+ inset 0 -1px var(--xiaohei-layer-panel-edge),
23
+ 0 8px 22px var(--xiaohei-shadow) !important;
24
+ transition:
25
+ border-color var(--xiaohei-motion-base) ease,
26
+ box-shadow var(--xiaohei-motion-base) ease;
27
+ }
28
+
29
+ #root [data-composer-card='true']:focus-within {
30
+ border-color: var(--xiaohei-edge-strong) !important;
31
+ box-shadow:
32
+ inset 0 1px rgb(255 255 255 / 9%),
33
+ 0 10px 26px var(--xiaohei-shadow),
34
+ 0 0 0 4px var(--xiaohei-focus-shadow) !important;
35
+ }
36
+
37
+ #root [data-composer-card='true'] textarea {
38
+ color: var(--dsw-alias-label-primary) !important;
39
+ caret-color: var(--xiaohei-spirit-strong);
40
+ }
41
+
42
+ #root [data-composer-card='true'] textarea::placeholder {
43
+ color: var(--dsw-alias-label-tertiary) !important;
44
+ opacity: 0.92;
45
+ }
46
+
47
+ #root [data-composer-card='true'] [data-input-backdrop='true'] {
48
+ border-color: transparent !important;
49
+ background: transparent !important;
50
+ }
51
+
52
+ #root [data-composer-card='true'] button {
53
+ min-width: 28px;
54
+ min-height: 28px;
55
+ border: 1px solid transparent;
56
+ border-radius: var(--xiaohei-radius-small);
57
+ transition:
58
+ color var(--xiaohei-motion-fast) ease,
59
+ background-color var(--xiaohei-motion-fast) ease,
60
+ border-color var(--xiaohei-motion-fast) ease,
61
+ transform var(--xiaohei-motion-fast) var(--xiaohei-motion-curve);
62
+ }
63
+
64
+ #root [data-composer-card='true'] button:not(:disabled):hover {
65
+ color: var(--xiaohei-spirit-strong);
66
+ border-color: var(--xiaohei-edge);
67
+ background: var(--xiaohei-spirit-soft);
68
+ }
69
+
70
+ #root [data-composer-card='true'] button:not(:disabled):active {
71
+ transform: translateY(1px) scale(0.98);
72
+ }
73
+
74
+ #root button[aria-label='发送消息'],
75
+ #root button[aria-label='Send message'] {
76
+ position: relative;
77
+ isolation: isolate;
78
+ border: 1px solid var(--xiaohei-edge-strong) !important;
79
+ border-radius: 50% !important;
80
+ color: var(--dsw-alias-brand-primary-invert) !important;
81
+ background:
82
+ radial-gradient(circle at 36% 27%, rgb(255 255 255 / 36%) 0 7%, transparent 9%),
83
+ linear-gradient(145deg, var(--xiaohei-spirit), var(--dsw-alias-button-primary-fill)) !important;
84
+ box-shadow:
85
+ inset 0 1px rgb(255 255 255 / 34%),
86
+ inset 0 -2px rgb(4 25 31 / 18%),
87
+ 0 6px 16px var(--xiaohei-focus-shadow) !important;
88
+ transition:
89
+ transform var(--xiaohei-motion-fast) var(--xiaohei-motion-curve),
90
+ box-shadow var(--xiaohei-motion-base) ease,
91
+ filter var(--xiaohei-motion-base) ease;
92
+ }
93
+
94
+ #root button[aria-label='发送消息']::after,
95
+ #root button[aria-label='Send message']::after {
96
+ content: '';
97
+ position: absolute;
98
+ inset: 3px;
99
+ border: 1px solid rgb(238 253 255 / 28%);
100
+ border-radius: inherit;
101
+ pointer-events: none;
102
+ opacity: 0.58;
103
+ transition: opacity var(--xiaohei-motion-fast) ease, transform 220ms var(--xiaohei-motion-curve);
104
+ }
105
+
106
+ #root button[aria-label='发送消息']:not(:disabled):hover,
107
+ #root button[aria-label='Send message']:not(:disabled):hover {
108
+ filter: brightness(1.05) saturate(1.03);
109
+ box-shadow:
110
+ inset 0 1px rgb(255 255 255 / 42%),
111
+ inset 0 -2px rgb(4 25 31 / 16%),
112
+ 0 8px 20px var(--xiaohei-focus-shadow) !important;
113
+ }
114
+
115
+ #root button[aria-label='发送消息']:not(:disabled):active,
116
+ #root button[aria-label='Send message']:not(:disabled):active {
117
+ transform: translateY(1px) scale(0.96);
118
+ }
119
+
120
+ #root button[aria-label='发送消息']:not(:disabled):active::after,
121
+ #root button[aria-label='Send message']:not(:disabled):active::after {
122
+ opacity: 0.86;
123
+ transform: scale(0.76);
124
+ }
125
+
126
+ #root button[aria-label='发送消息']:disabled,
127
+ #root button[aria-label='Send message']:disabled {
128
+ border-color: var(--xiaohei-edge) !important;
129
+ color: var(--dsw-alias-label-dimmed) !important;
130
+ background: var(--xiaohei-surface-muted) !important;
131
+ filter: saturate(0.42);
132
+ box-shadow: inset 0 1px rgb(255 255 255 / 8%) !important;
133
+ }
134
+
135
+ #root button[aria-label='发送消息']:disabled::after,
136
+ #root button[aria-label='Send message']:disabled::after {
137
+ opacity: 0.12;
138
+ }
139
+
140
+ @media (max-width: 700px) {
141
+ #root [data-composer-card='true'] {
142
+ border-radius: 7px !important;
143
+ }
144
+ }
145
+ `;
146
+ //# sourceMappingURL=composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer.js","sourceRoot":"","sources":["../../src/chrome/composer.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+InC,CAAA"}
@@ -0,0 +1,3 @@
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";
3
+ //# sourceMappingURL=conversation-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-messages.d.ts","sourceRoot":"","sources":["../../src/chrome/conversation-messages.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,eAAO,MAAM,iCAAiC,g7FA6F7C,CAAA"}
@@ -0,0 +1,96 @@
1
+ /** Native conversation messages restyled without changing their DOM contract. */
2
+ export const XIAOHEI_CONVERSATION_MESSAGES_CSS = `
3
+ /* Keep DSH's native max width; only tune vertical reading rhythm. */
4
+ #root [data-chat-flow] {
5
+ gap: 18px;
6
+ }
7
+
8
+ #root [data-chat-flow-kind='assistant-step'] {
9
+ color: var(--xiaohei-conversation-text);
10
+ }
11
+
12
+ #root [data-chat-flow-kind='assistant-step'] > div {
13
+ color: var(--xiaohei-conversation-text) !important;
14
+ background: transparent !important;
15
+ border: 0 !important;
16
+ box-shadow: none !important;
17
+ }
18
+
19
+ #root [data-chat-flow-kind='assistant-step'] :is(p, li, h1, h2, h3, h4, h5, h6) {
20
+ color: var(--xiaohei-conversation-text);
21
+ }
22
+
23
+ /* User and steering prose keep a light bubble; image-only rows stay untouched. */
24
+ #root [data-chat-flow-kind='user'] [data-time-hover-root]
25
+ > div:first-child > div:last-child:not(:has(img)),
26
+ #root [data-pending-steering]
27
+ > div:first-child > div:last-child:not(:has(img)) {
28
+ color: var(--xiaohei-conversation-text) !important;
29
+ border: 1px solid var(--xiaohei-conversation-user-edge);
30
+ border-radius: 18px;
31
+ background: var(--xiaohei-conversation-user) !important;
32
+ box-shadow: none !important;
33
+ }
34
+
35
+ /* Context, recall, compaction and tool rows stay readable but subordinate. */
36
+ #root [data-chat-flow-kind='context'],
37
+ #root [data-chat-flow-kind='manual-compaction'],
38
+ #root [data-chat-flow-kind='command'] > div,
39
+ #root [data-context-injection-body],
40
+ #root [data-context-source],
41
+ #root [data-context-summary],
42
+ #root [data-turn-tail] [role='status'] {
43
+ color: var(--xiaohei-conversation-meta);
44
+ }
45
+
46
+ #root [data-chat-flow-kind='context'],
47
+ #root [data-chat-flow-kind='manual-compaction'] {
48
+ font-size: 13px;
49
+ }
50
+
51
+ #root [data-chat-flow-kind='command'] > div {
52
+ opacity: 0.82;
53
+ transition: opacity var(--xiaohei-motion-fast) ease;
54
+ }
55
+
56
+ #root [data-chat-flow-kind='command']:hover > div,
57
+ #root [data-chat-flow-kind='command']:focus-within > div {
58
+ opacity: 1;
59
+ }
60
+
61
+ #root [data-context-injection-body] {
62
+ border: 1px solid rgb(111 153 148 / 8%);
63
+ background: rgb(111 153 148 / 5%) !important;
64
+ }
65
+
66
+ /* Copy, branch, retry and plugin-provided message actions stay quiet at rest. */
67
+ #root [data-time-hover-root] button,
68
+ #root [data-turn-tail] button {
69
+ opacity: 0.38;
70
+ transition:
71
+ color var(--xiaohei-motion-fast) ease,
72
+ background-color var(--xiaohei-motion-fast) ease,
73
+ opacity var(--xiaohei-motion-fast) ease;
74
+ }
75
+
76
+ #root [data-time-hover-root]:hover button,
77
+ #root [data-time-hover-root]:focus-within button,
78
+ #root [data-turn-tail]:hover button,
79
+ #root [data-turn-tail]:focus-within button {
80
+ opacity: 0.82;
81
+ }
82
+
83
+ html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='assistant-step'] > div,
84
+ html[data-xiaohei-appearance='light'] #root [data-chat-flow-kind='assistant-step'] :is(p, li, h1, h2, h3, h4, h5, h6) {
85
+ color: #343B3A !important;
86
+ }
87
+
88
+ @media (prefers-contrast: more), (forced-colors: active) {
89
+ #root [data-time-hover-root] button,
90
+ #root [data-turn-tail] button,
91
+ #root [data-chat-flow-kind='command'] > div {
92
+ opacity: 1;
93
+ }
94
+ }
95
+ `;
96
+ //# sourceMappingURL=conversation-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-messages.js","sourceRoot":"","sources":["../../src/chrome/conversation-messages.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,iCAAiC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6FhD,CAAA"}
@@ -0,0 +1,3 @@
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";
3
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/chrome/conversation.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,eAAO,MAAM,wBAAwB,kkFA0DpC,CAAA"}
@@ -0,0 +1,61 @@
1
+ /** Conversation-level controls and quiet Xiaohei identity details. */
2
+ export const XIAOHEI_CONVERSATION_CSS = `
3
+ #root [data-slot='conversation.composer'] button[aria-label='选择工作区'],
4
+ #root [data-slot='conversation.composer'] button[aria-label='Select workspace'] {
5
+ min-height: 32px;
6
+ padding-inline: 10px;
7
+ border: 1px solid transparent;
8
+ border-radius: var(--xiaohei-radius-control);
9
+ color: var(--dsw-alias-label-primary);
10
+ background: var(--xiaohei-surface-muted);
11
+ box-shadow: inset 0 1px rgb(255 255 255 / 5%);
12
+ transition:
13
+ color var(--xiaohei-motion-fast) ease,
14
+ background-color var(--xiaohei-motion-base) ease,
15
+ border-color var(--xiaohei-motion-base) ease,
16
+ box-shadow var(--xiaohei-motion-base) ease;
17
+ }
18
+
19
+ #root [data-slot='conversation.composer'] button[aria-label='选择工作区']:hover,
20
+ #root [data-slot='conversation.composer'] button[aria-label='Select workspace']:hover,
21
+ #root [data-slot='conversation.composer'] button[aria-label='选择工作区'][aria-expanded='true'],
22
+ #root [data-slot='conversation.composer'] button[aria-label='Select workspace'][aria-expanded='true'] {
23
+ color: var(--xiaohei-spirit-strong);
24
+ border-color: var(--xiaohei-edge);
25
+ background: var(--xiaohei-spirit-soft);
26
+ box-shadow: inset 3px 0 var(--xiaohei-spirit);
27
+ }
28
+
29
+ #root [data-slot='conversation.session.header'] button,
30
+ #root [data-slot='conversation.input.plan'] button,
31
+ #root [data-slot='conversation.input.model'] button,
32
+ #root [data-slot='conversation.hero.agentPreset'] button {
33
+ border: 1px solid transparent;
34
+ border-radius: var(--xiaohei-radius-small);
35
+ transition:
36
+ color var(--xiaohei-motion-fast) ease,
37
+ background-color var(--xiaohei-motion-fast) ease,
38
+ border-color var(--xiaohei-motion-fast) ease;
39
+ }
40
+
41
+ #root [data-slot='conversation.session.header'] button:hover,
42
+ #root [data-slot='conversation.input.plan'] button:hover,
43
+ #root [data-slot='conversation.input.model'] button:hover,
44
+ #root [data-slot='conversation.hero.agentPreset'] button:hover {
45
+ color: var(--xiaohei-spirit-strong);
46
+ border-color: var(--xiaohei-edge);
47
+ background: var(--xiaohei-spirit-soft);
48
+ }
49
+
50
+ #root [data-slot='conversation.session'] [role='status'],
51
+ #root [data-slot='conversation.composer'] [role='status'] {
52
+ color: var(--dsw-alias-label-secondary);
53
+ }
54
+
55
+ html[data-xiaohei-appearance='light'] #root [data-slot='conversation.composer'] button[aria-label='选择工作区'],
56
+ html[data-xiaohei-appearance='light'] #root [data-slot='conversation.composer'] button[aria-label='Select workspace'] {
57
+ background: rgb(246 249 247 / 70%);
58
+ box-shadow: inset 0 1px rgb(255 255 255 / 74%);
59
+ }
60
+ `;
61
+ //# sourceMappingURL=conversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/chrome/conversation.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DvC,CAAA"}
@@ -0,0 +1,6 @@
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 display: grid;\n place-items: center;\n flex: none;\n width: 30px;\n height: 30px;\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 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]):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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.d.ts","sourceRoot":"","sources":["../../src/chrome/frames.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,wBAAwB,g4GAkHpC,CAAA"}
@@ -0,0 +1,120 @@
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
+ display: grid;
19
+ place-items: center;
20
+ flex: none;
21
+ width: 30px;
22
+ height: 30px;
23
+ padding: 0;
24
+ border: 1px solid transparent;
25
+ border-radius: var(--xiaohei-radius-small);
26
+ color: var(--dsw-alias-label-secondary);
27
+ background: transparent;
28
+ cursor: pointer;
29
+ transition:
30
+ color var(--xiaohei-motion-fast) ease,
31
+ background var(--xiaohei-motion-fast) ease,
32
+ border-color var(--xiaohei-motion-fast) ease,
33
+ transform var(--xiaohei-motion-fast) var(--xiaohei-motion-curve);
34
+ }
35
+
36
+ :where([data-xiaohei-workspace-close]):hover {
37
+ border-color: var(--xiaohei-workspace-control-edge);
38
+ color: var(--dsw-alias-label-primary);
39
+ background: var(--xiaohei-plugin-control-fill);
40
+ }
41
+
42
+ :where([data-xiaohei-workspace-close]):active {
43
+ transform: scale(.96);
44
+ }
45
+
46
+ :where([data-xiaohei-workspace-close]):focus-visible {
47
+ outline: 2px solid var(--xiaohei-spirit);
48
+ outline-offset: 2px;
49
+ }
50
+
51
+ :where([data-xiaohei-frame='module'], [data-xiaohei-frame='compact']) {
52
+ position: relative;
53
+ box-sizing: border-box;
54
+ border: 1px solid var(--xiaohei-frame-line);
55
+ color: var(--dsw-alias-label-primary);
56
+ background:
57
+ linear-gradient(var(--xiaohei-frame-line-strong), var(--xiaohei-frame-line-strong)) 12px 0 / 28px 1px no-repeat,
58
+ linear-gradient(var(--xiaohei-frame-line), var(--xiaohei-frame-line)) 0 12px / 1px 22px no-repeat,
59
+ linear-gradient(var(--xiaohei-frame-line), var(--xiaohei-frame-line)) 100% calc(100% - 12px) / 1px 22px no-repeat,
60
+ var(--xiaohei-frame-fill);
61
+ box-shadow:
62
+ inset 0 0 0 1px var(--xiaohei-frame-inner),
63
+ 0 12px 30px var(--xiaohei-shadow);
64
+ }
65
+
66
+ :where([data-xiaohei-frame='module']) {
67
+ border-radius: var(--xiaohei-radius-panel);
68
+ }
69
+
70
+ :where([data-xiaohei-frame='compact']) {
71
+ border-radius: var(--xiaohei-radius-control);
72
+ }
73
+
74
+ :where([data-xiaohei-frame-header]) {
75
+ min-height: 38px;
76
+ border-bottom: 1px solid var(--xiaohei-frame-line);
77
+ }
78
+
79
+ :where([data-xiaohei-frame-actions]) {
80
+ display: flex;
81
+ align-items: center;
82
+ gap: 4px;
83
+ }
84
+
85
+ :where([data-xiaohei-module-kind]) {
86
+ --xiaohei-module-accent: var(--xiaohei-spirit);
87
+ }
88
+
89
+ @media (forced-colors: active) {
90
+ :where([data-xiaohei-frame], [data-xiaohei-surface='plugin-workspace']) {
91
+ border-color: currentColor;
92
+ background: Canvas;
93
+ -webkit-backdrop-filter: none;
94
+ backdrop-filter: none;
95
+ box-shadow: none;
96
+ }
97
+
98
+ }
99
+
100
+ @media (max-width: 700px) {
101
+ :where([data-xiaohei-surface='plugin-workspace']) {
102
+ --xiaohei-plugin-surface-blur: 22px;
103
+ }
104
+ }
105
+
106
+ @media (prefers-reduced-transparency: reduce) {
107
+ :where([data-xiaohei-surface='plugin-workspace']) {
108
+ background-color: var(--xiaohei-surface-raised) !important;
109
+ -webkit-backdrop-filter: none;
110
+ backdrop-filter: none;
111
+ }
112
+ }
113
+
114
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
115
+ :where([data-xiaohei-surface='plugin-workspace']) {
116
+ background-color: var(--xiaohei-surface-raised) !important;
117
+ }
118
+ }
119
+ `;
120
+ //# sourceMappingURL=frames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.js","sourceRoot":"","sources":["../../src/chrome/frames.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkHvC,CAAA"}
@@ -0,0 +1,3 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gaze.d.ts","sourceRoot":"","sources":["../../src/chrome/gaze.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,y6DAoG5B,CAAA"}
@@ -0,0 +1,103 @@
1
+ /** Visual geometry for Xiaohei's idle gaze. Behavior lives in ../gaze.ts. */
2
+ export const XIAOHEI_GAZE_CSS = `
3
+ .xiaohei-scene__mascot-blink {
4
+ z-index: 3;
5
+ }
6
+
7
+ .xiaohei-gaze {
8
+ --xiaohei-gaze-x: 0px;
9
+ --xiaohei-gaze-y: 0px;
10
+ position: absolute;
11
+ inset: 0;
12
+ z-index: 2;
13
+ display: block;
14
+ overflow: hidden;
15
+ opacity: 0;
16
+ pointer-events: none;
17
+ transition: opacity 80ms ease-out;
18
+ }
19
+
20
+ html[data-xiaohei-state='idle'] .xiaohei-gaze {
21
+ opacity: 1;
22
+ }
23
+
24
+ /* The complete blink frame owns eye occlusion; a second visibility clock can expose pupil-free frames. */
25
+
26
+ .xiaohei-gaze__base {
27
+ position: absolute;
28
+ inset: 0;
29
+ display: block;
30
+ width: 100%;
31
+ height: 100%;
32
+ max-width: none;
33
+ max-height: none;
34
+ object-fit: contain;
35
+ filter: brightness(1.32) contrast(1.02) saturate(1.04);
36
+ }
37
+
38
+ html[data-xiaohei-appearance='light'] .xiaohei-gaze__base {
39
+ filter: brightness(1.02) contrast(1.07) saturate(0.9);
40
+ }
41
+
42
+ .xiaohei-gaze__eye {
43
+ position: absolute;
44
+ display: block;
45
+ overflow: hidden;
46
+ border-radius: 50%;
47
+ pointer-events: none;
48
+ }
49
+
50
+ .xiaohei-gaze__eye--left {
51
+ left: 22.65%;
52
+ top: 34.35%;
53
+ width: 9%;
54
+ height: 13.7%;
55
+ }
56
+
57
+ .xiaohei-gaze__eye--right {
58
+ left: 38.25%;
59
+ top: 35.15%;
60
+ width: 13.3%;
61
+ height: 14.5%;
62
+ }
63
+
64
+ .xiaohei-gaze__pupil {
65
+ position: absolute;
66
+ display: block;
67
+ border-radius: 48% 52% 49% 51%;
68
+ background:
69
+ radial-gradient(circle at 39% 27%, #F3F7F3 0 12%, transparent 15%),
70
+ #020505;
71
+ transform: translate3d(
72
+ calc(-50% + var(--xiaohei-gaze-x)),
73
+ calc(-50% + var(--xiaohei-gaze-y)),
74
+ 0
75
+ );
76
+ transform-origin: 50% 50%;
77
+ }
78
+
79
+ .xiaohei-gaze[data-moving='true'] .xiaohei-gaze__pupil {
80
+ will-change: transform;
81
+ }
82
+
83
+ .xiaohei-gaze__pupil--left {
84
+ left: 50%;
85
+ top: 49%;
86
+ width: 57.25%;
87
+ height: 67.5%;
88
+ }
89
+
90
+ .xiaohei-gaze__pupil--right {
91
+ left: 33.5%;
92
+ top: 48.7%;
93
+ width: 40.25%;
94
+ height: 65.2%;
95
+ }
96
+
97
+ @media (prefers-reduced-motion: reduce), (hover: none) and (pointer: coarse) {
98
+ .xiaohei-gaze {
99
+ display: none;
100
+ }
101
+ }
102
+ `;
103
+ //# sourceMappingURL=gaze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gaze.js","sourceRoot":"","sources":["../../src/chrome/gaze.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoG/B,CAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Xiaohei ornaments shared by native DSH chrome and opt-in feature plugins.
3
+ * Frames own geometry and headings; this layer owns generated hanging art only.
4
+ */
5
+ export declare const XIAOHEI_IDENTITY_CSS: string;
6
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/chrome/identity.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAsDhC,CAAA"}