twskin 0.5.3

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 (65) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/CONTRIBUTING.md +37 -0
  3. package/LICENSE +21 -0
  4. package/README.md +104 -0
  5. package/SECURITY.md +28 -0
  6. package/dist/bin/twskin.d.ts +3 -0
  7. package/dist/bin/twskin.d.ts.map +1 -0
  8. package/dist/bin/twskin.js +4 -0
  9. package/dist/bin/twskin.js.map +1 -0
  10. package/dist/commands.d.ts +41 -0
  11. package/dist/commands.d.ts.map +1 -0
  12. package/dist/commands.js +421 -0
  13. package/dist/commands.js.map +1 -0
  14. package/dist/context.d.ts +14 -0
  15. package/dist/context.d.ts.map +1 -0
  16. package/dist/context.js +51 -0
  17. package/dist/context.js.map +1 -0
  18. package/dist/errors.d.ts +9 -0
  19. package/dist/errors.d.ts.map +1 -0
  20. package/dist/errors.js +20 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/lock.d.ts +3 -0
  23. package/dist/lock.d.ts.map +1 -0
  24. package/dist/lock.js +52 -0
  25. package/dist/lock.js.map +1 -0
  26. package/dist/main.d.ts +9 -0
  27. package/dist/main.d.ts.map +1 -0
  28. package/dist/main.js +92 -0
  29. package/dist/main.js.map +1 -0
  30. package/dist/output.d.ts +4 -0
  31. package/dist/output.d.ts.map +1 -0
  32. package/dist/output.js +27 -0
  33. package/dist/output.js.map +1 -0
  34. package/dist/persistent-cdp.d.ts +14 -0
  35. package/dist/persistent-cdp.d.ts.map +1 -0
  36. package/dist/persistent-cdp.js +140 -0
  37. package/dist/persistent-cdp.js.map +1 -0
  38. package/dist/system.d.ts +64 -0
  39. package/dist/system.d.ts.map +1 -0
  40. package/dist/system.js +234 -0
  41. package/dist/system.js.map +1 -0
  42. package/dist/theme-download.d.ts +9 -0
  43. package/dist/theme-download.d.ts.map +1 -0
  44. package/dist/theme-download.js +250 -0
  45. package/dist/theme-download.js.map +1 -0
  46. package/dist/themes.d.ts +9 -0
  47. package/dist/themes.d.ts.map +1 -0
  48. package/dist/themes.js +185 -0
  49. package/dist/themes.js.map +1 -0
  50. package/dist/types.d.ts +58 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +2 -0
  53. package/dist/types.js.map +1 -0
  54. package/docs/publishing.md +45 -0
  55. package/docs/theme-distribution.md +62 -0
  56. package/package.json +74 -0
  57. package/runtime/component-map.mjs +200 -0
  58. package/runtime/injector.mjs +705 -0
  59. package/runtime/manifest.json +47 -0
  60. package/runtime/restore.sh +33 -0
  61. package/runtime/skin.js +1133 -0
  62. package/runtime/start.sh +86 -0
  63. package/runtime/styles/base.css +687 -0
  64. package/runtime/styles/manager.css +346 -0
  65. package/runtime/token-map.mjs +432 -0
@@ -0,0 +1,687 @@
1
+ /* 背景层:CSS 变量驱动,切主题只改变量 */
2
+ html, body { background: transparent !important; }
3
+ body::before {
4
+ content: "" !important;
5
+ position: fixed !important;
6
+ inset: 0 !important;
7
+ z-index: -1 !important;
8
+ pointer-events: none !important;
9
+ background-color: var(--trae-skin-background-color, #10121a) !important;
10
+ background-image: var(--trae-skin-art) !important;
11
+ background-position: var(--trae-skin-background-position, center) !important;
12
+ background-size: var(--trae-skin-background-size, cover) !important;
13
+ background-repeat: var(--trae-skin-background-repeat, no-repeat) !important;
14
+ filter:
15
+ blur(var(--trae-skin-background-blur, 0px))
16
+ brightness(var(--trae-skin-background-brightness, 1))
17
+ saturate(var(--trae-skin-background-saturation, 1)) !important;
18
+ transform: scale(var(--trae-skin-background-scale, 1.01)) !important;
19
+ }
20
+ body::after {
21
+ content: "" !important;
22
+ position: fixed !important;
23
+ inset: 0 !important;
24
+ z-index: -1 !important;
25
+ pointer-events: none !important;
26
+ background-color: var(--trae-skin-background-overlay, transparent) !important;
27
+ background-image:
28
+ repeating-linear-gradient(
29
+ to bottom,
30
+ transparent 0,
31
+ transparent 3px,
32
+ var(--trae-skin-scanline-color, transparent) 3px,
33
+ var(--trae-skin-scanline-color, transparent) 4px
34
+ ),
35
+ linear-gradient(
36
+ to right,
37
+ var(--trae-skin-grid-color, transparent) 1px,
38
+ transparent 1px
39
+ ),
40
+ linear-gradient(
41
+ to bottom,
42
+ var(--trae-skin-grid-color, transparent) 1px,
43
+ transparent 1px
44
+ ) !important;
45
+ background-size: auto, 64px 64px, 64px 64px !important;
46
+ }
47
+ #root, #solo-lite-root, .solo-lite-layout {
48
+ background: transparent !important;
49
+ background-color: transparent !important;
50
+ }
51
+ /* 主内容面板:Work 聊天面板 + Code/Design 落地页面板,半透明 + 毛玻璃 */
52
+ .solo-lite-chat-panel-container,
53
+ .panel-container > .panel-content {
54
+ background: rgba(255, 255, 255, var(--trae-skin-surface-light, 0.78)) !important;
55
+ backdrop-filter: blur(var(--trae-skin-blur, 24px)) saturate(1.3) !important;
56
+ -webkit-backdrop-filter: blur(var(--trae-skin-blur, 24px)) saturate(1.3) !important;
57
+ }
58
+ .task-list-panel {
59
+ background: rgba(255, 255, 255, 0.55) !important;
60
+ backdrop-filter: blur(16px) !important;
61
+ -webkit-backdrop-filter: blur(16px) !important;
62
+ }
63
+ body.vs-dark .solo-lite-chat-panel-container,
64
+ body.vs-dark .panel-container > .panel-content {
65
+ background: rgba(16, 18, 32, var(--trae-skin-surface-dark, 0.72)) !important;
66
+ }
67
+ body.vs-dark .task-list-panel { background: rgba(10, 12, 24, 0.55) !important; }
68
+
69
+ /* Theme V2:每个主区域都有独立表面,不再只控制 background/blur */
70
+ body.trae-skin-v2 {
71
+ color: var(--trae-skin-text-primary, inherit);
72
+ font-family: var(--trae-skin-font-ui, inherit);
73
+ }
74
+ body.trae-skin-v2 .task-list-panel {
75
+ background-color: var(--trae-skin-left-surface) !important;
76
+ background-image: var(--trae-skin-left-art-layer, none) !important;
77
+ background-position: center, var(--trae-skin-left-art-position, center) !important;
78
+ background-size: cover, var(--trae-skin-left-art-size, cover) !important;
79
+ background-repeat: no-repeat !important;
80
+ border-right: 1px solid var(--trae-skin-divider) !important;
81
+ backdrop-filter:
82
+ blur(var(--trae-skin-left-blur))
83
+ saturate(var(--trae-skin-left-saturation)) !important;
84
+ -webkit-backdrop-filter:
85
+ blur(var(--trae-skin-left-blur))
86
+ saturate(var(--trae-skin-left-saturation)) !important;
87
+ }
88
+ body.trae-skin-v2 .solo-lite-chat-panel-container {
89
+ background: var(--trae-skin-chat-surface) !important;
90
+ border-right: 1px solid var(--trae-skin-divider) !important;
91
+ backdrop-filter:
92
+ blur(var(--trae-skin-chat-blur))
93
+ saturate(var(--trae-skin-chat-saturation)) !important;
94
+ -webkit-backdrop-filter:
95
+ blur(var(--trae-skin-chat-blur))
96
+ saturate(var(--trae-skin-chat-saturation)) !important;
97
+ }
98
+ body.trae-skin-v2 .solo-lite-main-area {
99
+ background-color: var(--trae-skin-main-surface) !important;
100
+ background-image: var(--trae-skin-right-art-layer, none) !important;
101
+ background-position: center, var(--trae-skin-right-art-position, right center) !important;
102
+ background-size: cover, var(--trae-skin-right-art-size, auto 100%) !important;
103
+ background-repeat: no-repeat !important;
104
+ backdrop-filter:
105
+ blur(var(--trae-skin-main-blur))
106
+ saturate(var(--trae-skin-main-saturation)) !important;
107
+ -webkit-backdrop-filter:
108
+ blur(var(--trae-skin-main-blur))
109
+ saturate(var(--trae-skin-main-saturation)) !important;
110
+ }
111
+ body.trae-skin-v2 .panel-container > .panel-content {
112
+ background: var(--trae-skin-landing-surface) !important;
113
+ backdrop-filter:
114
+ blur(var(--trae-skin-landing-blur))
115
+ saturate(var(--trae-skin-landing-saturation)) !important;
116
+ -webkit-backdrop-filter:
117
+ blur(var(--trae-skin-landing-blur))
118
+ saturate(var(--trae-skin-landing-saturation)) !important;
119
+ }
120
+
121
+ /* 主面板四周 8px 缝隙:做磨砂+淡色,避免直接露出原图深色边缘("黑条") */
122
+ .panel-container {
123
+ background: var(--trae-skin-layout-gap, rgba(255, 255, 255, 0.18)) !important;
124
+ backdrop-filter: blur(var(--trae-skin-blur, 24px)) !important;
125
+ -webkit-backdrop-filter: blur(var(--trae-skin-blur, 24px)) !important;
126
+ }
127
+ body.vs-dark:not(.trae-skin-v2) .panel-container { background: rgba(16, 18, 32, 0.18) !important; }
128
+
129
+ /* Code 模式内嵌 IDE workbench(打开文件夹后出现):各部件半透明 */
130
+ .monaco-workbench .part.sidebar,
131
+ .monaco-workbench .part.activitybar,
132
+ .monaco-workbench .part.panel,
133
+ .monaco-workbench .part.statusbar,
134
+ .monaco-workbench .part.titlebar {
135
+ background-color: rgba(255, 255, 255, 0.55) !important;
136
+ backdrop-filter: blur(16px) !important;
137
+ -webkit-backdrop-filter: blur(16px) !important;
138
+ }
139
+ .monaco-workbench .part.editor,
140
+ .monaco-workbench .monaco-editor-background,
141
+ .monaco-workbench .monaco-editor .margin {
142
+ background-color: rgba(255, 255, 255, 0.72) !important;
143
+ }
144
+ body.vs-dark .monaco-workbench .part.sidebar,
145
+ body.vs-dark .monaco-workbench .part.activitybar,
146
+ body.vs-dark .monaco-workbench .part.panel,
147
+ body.vs-dark .monaco-workbench .part.statusbar,
148
+ body.vs-dark .monaco-workbench .part.titlebar {
149
+ background-color: rgba(10, 12, 24, 0.55) !important;
150
+ }
151
+ body.vs-dark .monaco-workbench .part.editor,
152
+ body.vs-dark .monaco-workbench .monaco-editor-background,
153
+ body.vs-dark .monaco-workbench .monaco-editor .margin {
154
+ background-color: rgba(16, 18, 32, 0.72) !important;
155
+ }
156
+ body.trae-skin-v2 .monaco-workbench .part.sidebar,
157
+ body.trae-skin-v2 .monaco-workbench .part.activitybar,
158
+ body.trae-skin-v2 .monaco-workbench .part.titlebar,
159
+ body.trae-skin-v2 .monaco-workbench .part.statusbar {
160
+ background-color: var(--trae-skin-workbench-sidebar) !important;
161
+ }
162
+ body.trae-skin-v2 .monaco-workbench .part.panel {
163
+ background-color: var(--trae-skin-workbench-panel) !important;
164
+ }
165
+ body.trae-skin-v2 .monaco-workbench .part.editor,
166
+ body.trae-skin-v2 .monaco-workbench .monaco-editor-background,
167
+ body.trae-skin-v2 .monaco-workbench .monaco-editor .margin {
168
+ background-color: var(--trae-skin-workbench-editor) !important;
169
+ }
170
+ body.trae-skin-v2 .monaco-workbench {
171
+ --vscode-foreground: var(--trae-skin-text-primary) !important;
172
+ --vscode-descriptionForeground: var(--trae-skin-text-secondary) !important;
173
+ --vscode-disabledForeground: var(--trae-skin-text-disabled) !important;
174
+ --vscode-focusBorder: var(--trae-skin-accent) !important;
175
+ --vscode-selection-background: var(--trae-skin-accent-subtle) !important;
176
+ --vscode-textLink-foreground: var(--trae-skin-info) !important;
177
+ --vscode-textLink-activeForeground: var(--trae-skin-accent) !important;
178
+ --vscode-editor-foreground: var(--trae-skin-text-primary) !important;
179
+ --vscode-editor-background: transparent !important;
180
+ --vscode-editorCursor-foreground: var(--trae-skin-accent) !important;
181
+ --vscode-editorLineNumber-foreground: var(--trae-skin-text-tertiary) !important;
182
+ --vscode-editorLineNumber-activeForeground: var(--trae-skin-accent) !important;
183
+ --vscode-editor-selectionBackground: var(--trae-skin-accent-subtle) !important;
184
+ --vscode-editor-lineHighlightBorder: var(--trae-skin-border-subtle) !important;
185
+ --vscode-editorWidget-background: var(--trae-skin-menu) !important;
186
+ --vscode-editorWidget-border: var(--trae-skin-border-default) !important;
187
+ --vscode-input-background: var(--trae-skin-input) !important;
188
+ --vscode-input-foreground: var(--trae-skin-text-primary) !important;
189
+ --vscode-input-border: var(--trae-skin-border-default) !important;
190
+ --vscode-button-background: var(--trae-skin-accent) !important;
191
+ --vscode-button-foreground: var(--trae-skin-accent-on) !important;
192
+ --vscode-list-hoverBackground: var(--trae-skin-info-subtle) !important;
193
+ --vscode-list-activeSelectionBackground: var(--trae-skin-accent-subtle) !important;
194
+ --vscode-list-activeSelectionForeground: var(--trae-skin-text-primary) !important;
195
+ --vscode-panel-border: var(--trae-skin-border-default) !important;
196
+ --vscode-sideBar-border: var(--trae-skin-border-default) !important;
197
+ --vscode-tab-activeBorderTop: var(--trae-skin-accent) !important;
198
+ --vscode-terminal-foreground: var(--trae-skin-text-primary) !important;
199
+ }
200
+
201
+ /* Theme V2 组件细节 */
202
+ body.trae-skin-v2 ::selection {
203
+ color: var(--trae-skin-text-primary);
204
+ background: var(--trae-skin-accent-subtle);
205
+ }
206
+ body.trae-skin-v2 button:focus-visible,
207
+ body.trae-skin-v2 a[href]:focus-visible,
208
+ body.trae-skin-v2 input:focus-visible,
209
+ body.trae-skin-v2 select:focus-visible,
210
+ body.trae-skin-v2 textarea:focus-visible,
211
+ body.trae-skin-v2 [tabindex]:focus-visible:not([contenteditable="true"]):not([role="textbox"]) {
212
+ outline: none !important;
213
+ box-shadow: var(--trae-skin-focus-ring) !important;
214
+ }
215
+ body.trae-skin-v2 [contenteditable="true"]:focus-visible,
216
+ body.trae-skin-v2 [role="textbox"]:focus-visible {
217
+ outline: none !important;
218
+ box-shadow: none !important;
219
+ }
220
+ body.trae-skin-v2 button[role="tab"][aria-selected="true"] {
221
+ color: var(--trae-skin-accent) !important;
222
+ }
223
+ body.trae-skin-v2 .user-message__text-box {
224
+ background: var(--trae-skin-chat-user-bubble) !important;
225
+ border: 1px solid var(--trae-skin-chat-user-border) !important;
226
+ border-radius: var(--trae-skin-radius-large) !important;
227
+ box-shadow: var(--trae-skin-shadow-card) !important;
228
+ }
229
+ body.trae-skin-v2 .core-finish-card {
230
+ background: var(--trae-skin-chat-assistant-message) !important;
231
+ border-color: var(--trae-skin-chat-assistant-border) !important;
232
+ border-radius: var(--trae-skin-radius-medium) !important;
233
+ box-shadow: var(--trae-skin-chat-assistant-shadow) !important;
234
+ }
235
+ body.trae-skin-v2 .core-finish-card__code-card,
236
+ body.trae-skin-v2 [class*="recommendationCard"],
237
+ body.trae-skin-v2 [class*="card-QNuQ2F"] {
238
+ background: var(--trae-skin-chat-card) !important;
239
+ border-color: var(--trae-skin-border-subtle) !important;
240
+ border-radius: var(--trae-skin-radius-medium) !important;
241
+ box-shadow: var(--trae-skin-shadow-card) !important;
242
+ }
243
+ body.trae-skin-v2 [class*="messageInputContainer"],
244
+ body.trae-skin-v2 [class*="message-input"],
245
+ body.trae-skin-v2 [data-slate-editor="true"] {
246
+ border-color: var(--trae-skin-border-default) !important;
247
+ }
248
+ body.trae-skin-v2 .core-model-select-portal-content,
249
+ body.trae-skin-v2 [data-radix-popper-content-wrapper] > * {
250
+ color: var(--trae-skin-text-primary) !important;
251
+ background: var(--trae-skin-popover) !important;
252
+ border-color: var(--trae-skin-border-default) !important;
253
+ border-radius: var(--trae-skin-radius-large) !important;
254
+ box-shadow: var(--trae-skin-shadow-floating) !important;
255
+ }
256
+ body.trae-skin-v2 [role="option"][data-highlighted],
257
+ body.trae-skin-v2 [role="menuitem"][data-highlighted] {
258
+ background: var(--trae-skin-popover-hover) !important;
259
+ }
260
+ body.trae-skin-v2 [role="option"][aria-selected="true"],
261
+ body.trae-skin-v2 [role="menuitem"][data-state="checked"] {
262
+ color: var(--trae-skin-accent) !important;
263
+ background: var(--trae-skin-popover-selected) !important;
264
+ }
265
+
266
+ /* Account card:Trae Work 使用独立 CSS module,不走通用 popover。 */
267
+ body.trae-skin-v2 [class*="account-module__card___"],
268
+ body.trae-skin-v2 [class*="account-module__subMenuInner___"] {
269
+ color: var(--trae-skin-text-primary) !important;
270
+ background: var(--trae-skin-popover) !important;
271
+ border: 1px solid var(--trae-skin-border-default) !important;
272
+ box-shadow: var(--trae-skin-shadow-floating) !important;
273
+ }
274
+ body.trae-skin-v2 [class*="account-module__card___"] [class*="account-module__"] {
275
+ color: var(--trae-skin-text-primary) !important;
276
+ }
277
+ body.trae-skin-v2 [class*="account-module__card___"] [class*="menuItemIconLeft"],
278
+ body.trae-skin-v2 [class*="account-module__card___"] [class*="subMenuValue"] {
279
+ color: var(--trae-skin-text-secondary) !important;
280
+ }
281
+ body.trae-skin-v2 [class*="account-module__card___"] [class*="subMenuArrow"] {
282
+ color: var(--trae-skin-accent) !important;
283
+ }
284
+ body.trae-skin-v2 [class*="account-module__card___"] [class*="menuSectionDivider"] {
285
+ border-color: var(--trae-skin-border-subtle) !important;
286
+ }
287
+ body.trae-skin-v2 [class*="account-module__card___"] [class*="menuItem"]:hover,
288
+ body.trae-skin-v2 [class*="account-module__card___"] [class*="subMenu"]:hover,
289
+ body.trae-skin-v2 [class*="account-module__card___"] [class*="optionItem"]:hover {
290
+ background: var(--trae-skin-popover-hover) !important;
291
+ }
292
+ body.trae-skin-v2 [class*="account-module__logoutButton"] {
293
+ color: var(--trae-skin-text-primary) !important;
294
+ background: var(--trae-skin-popover-hover) !important;
295
+ border: 1px solid var(--trae-skin-border-subtle) !important;
296
+ }
297
+
298
+ /* Settings:外壳、侧栏、内容卡和控件均由 components.settings 驱动。 */
299
+ body.trae-skin-v2 .solo-lite-settings-overlay {
300
+ background: var(--trae-skin-settings-overlay) !important;
301
+ }
302
+ body.trae-skin-v2 .solo-lite-settings-content {
303
+ color: var(--trae-skin-text-primary) !important;
304
+ background: var(--trae-skin-settings-panel) !important;
305
+ border: 1px solid var(--trae-skin-border-default) !important;
306
+ border-radius: var(--trae-skin-radius-large) !important;
307
+ box-shadow: var(--trae-skin-shadow-floating) !important;
308
+ }
309
+ body.trae-skin-v2 .solo-lite-settings-content .icube-settings-sidebar-container {
310
+ color: var(--trae-skin-text-primary) !important;
311
+ background: var(--trae-skin-settings-sidebar) !important;
312
+ border-right: 1px solid var(--trae-skin-border-subtle) !important;
313
+ }
314
+ body.trae-skin-v2 .solo-lite-settings-content .icube-settings-content {
315
+ color: var(--trae-skin-text-primary) !important;
316
+ background: var(--trae-skin-settings-panel) !important;
317
+ }
318
+ body.trae-skin-v2 .solo-lite-settings-content .icu-settings-title,
319
+ body.trae-skin-v2 .solo-lite-settings-content .icu-settings-title-content,
320
+ body.trae-skin-v2 .solo-lite-settings-content .icb-setting-item-label,
321
+ body.trae-skin-v2 .solo-lite-settings-content .user-name,
322
+ body.trae-skin-v2 .solo-lite-settings-content .user-name-text {
323
+ color: var(--trae-skin-text-primary) !important;
324
+ }
325
+ body.trae-skin-v2 .solo-lite-settings-content .icb-setting-item-description,
326
+ body.trae-skin-v2 .solo-lite-settings-content .user-description,
327
+ body.trae-skin-v2 .solo-lite-settings-content .bytedance {
328
+ color: var(--trae-skin-text-secondary) !important;
329
+ }
330
+ body.trae-skin-v2 .solo-lite-settings-content .settings-sidebar-menu-item {
331
+ color: var(--trae-skin-text-secondary) !important;
332
+ background: transparent !important;
333
+ }
334
+ body.trae-skin-v2 .solo-lite-settings-content .settings-sidebar-menu-item .text,
335
+ body.trae-skin-v2 .solo-lite-settings-content .settings-sidebar-menu-item .prefix {
336
+ color: inherit !important;
337
+ }
338
+ body.trae-skin-v2 .solo-lite-settings-content .settings-sidebar-menu-item:hover {
339
+ color: var(--trae-skin-text-primary) !important;
340
+ background: var(--trae-skin-popover-hover) !important;
341
+ }
342
+ body.trae-skin-v2 .solo-lite-settings-content .settings-sidebar-menu-item.active {
343
+ color: var(--trae-skin-accent) !important;
344
+ background: var(--trae-skin-settings-active) !important;
345
+ }
346
+ body.trae-skin-v2 .solo-lite-settings-content .menu-divider {
347
+ background: var(--trae-skin-border-subtle) !important;
348
+ }
349
+ body.trae-skin-v2 .solo-lite-settings-content .icb-settings-container {
350
+ color: var(--trae-skin-text-primary) !important;
351
+ background: var(--trae-skin-settings-card) !important;
352
+ border-color: var(--trae-skin-border-subtle) !important;
353
+ }
354
+ body.trae-skin-v2 .solo-lite-settings-content .icube-settings-theme-menu-trigger,
355
+ body.trae-skin-v2 .solo-lite-settings-content .icube-setting-language-trigger,
356
+ body.trae-skin-v2 .solo-lite-settings-content .icd-btn,
357
+ body.trae-skin-v2 .solo-lite-settings-content .icd-btn-v2,
358
+ body.trae-skin-v2 .solo-lite-settings-content input,
359
+ body.trae-skin-v2 .solo-lite-settings-content textarea,
360
+ body.trae-skin-v2 .solo-lite-settings-content select {
361
+ color: var(--trae-skin-text-primary) !important;
362
+ background: var(--trae-skin-settings-control) !important;
363
+ border-color: var(--trae-skin-border-default) !important;
364
+ }
365
+ body.trae-skin-v2 .solo-lite-settings-content .icube-settings-theme-menu-trigger *,
366
+ body.trae-skin-v2 .solo-lite-settings-content .icube-setting-language-trigger *,
367
+ body.trae-skin-v2 .solo-lite-settings-content .icd-btn *,
368
+ body.trae-skin-v2 .solo-lite-settings-content .icd-btn-v2 * {
369
+ color: inherit !important;
370
+ }
371
+ body.trae-skin-v2 [role="listbox"] {
372
+ color: var(--trae-skin-text-primary) !important;
373
+ background: var(--trae-skin-popover) !important;
374
+ border-color: var(--trae-skin-border-default) !important;
375
+ box-shadow: var(--trae-skin-shadow-floating) !important;
376
+ }
377
+ body.trae-skin-v2 [role="option"]:hover {
378
+ background: var(--trae-skin-popover-hover) !important;
379
+ }
380
+ body.trae-skin-v2 [role="option"][aria-selected="true"] {
381
+ color: var(--trae-skin-accent) !important;
382
+ background: var(--trae-skin-popover-selected) !important;
383
+ }
384
+
385
+ /* V3 components.landing.banner — system-plate */
386
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"]:has(.messageInputContainer[data-mode="work"]) {
387
+ --trae-skin-banner-current-code: var(--trae-skin-banner-code-work);
388
+ --trae-skin-banner-current-label: var(--trae-skin-banner-label-work);
389
+ }
390
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"]:has(.messageInputContainer[data-mode="code"]) {
391
+ --trae-skin-banner-current-code: var(--trae-skin-banner-code-code);
392
+ --trae-skin-banner-current-label: var(--trae-skin-banner-label-code);
393
+ }
394
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"]:has(.messageInputContainer[data-mode="design"]) {
395
+ --trae-skin-banner-current-code: var(--trae-skin-banner-code-design);
396
+ --trae-skin-banner-current-label: var(--trae-skin-banner-label-design);
397
+ }
398
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"] .welcomeTitleWrapper {
399
+ margin-bottom: 30px !important;
400
+ padding: 0 24px !important;
401
+ box-sizing: border-box !important;
402
+ }
403
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"] .welcomeTitleWrapper [class*="traeWorkTitle-"] {
404
+ position: relative !important;
405
+ align-items: stretch !important;
406
+ box-sizing: border-box !important;
407
+ width: min(var(--trae-skin-banner-max-width), calc(100% - 24px)) !important;
408
+ max-width: var(--trae-skin-banner-max-width) !important;
409
+ padding: 30px 30px 22px !important;
410
+ color: var(--trae-skin-banner-text) !important;
411
+ background:
412
+ linear-gradient(90deg, var(--trae-skin-banner-border) 0 62%, transparent 62% 65%, var(--trae-skin-banner-accent) 65% 100%) top / 100% 2px no-repeat,
413
+ linear-gradient(90deg, var(--trae-skin-banner-accent) 0 22%, transparent 22% 25%, var(--trae-skin-banner-border) 25% 100%) bottom / 100% 2px no-repeat,
414
+ var(--trae-skin-banner-surface) !important;
415
+ border: 1px solid var(--trae-skin-banner-border) !important;
416
+ border-radius: 0 !important;
417
+ clip-path: polygon(
418
+ 0 var(--trae-skin-banner-corner-cut),
419
+ var(--trae-skin-banner-corner-cut) 0,
420
+ calc(100% - var(--trae-skin-banner-corner-cut)) 0,
421
+ 100% var(--trae-skin-banner-corner-cut),
422
+ 100% calc(100% - var(--trae-skin-banner-corner-cut)),
423
+ calc(100% - var(--trae-skin-banner-corner-cut)) 100%,
424
+ var(--trae-skin-banner-corner-cut) 100%,
425
+ 0 calc(100% - var(--trae-skin-banner-corner-cut))
426
+ ) !important;
427
+ box-shadow: var(--trae-skin-banner-shadow) !important;
428
+ }
429
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"] .welcomeTitleWrapper [class*="traeWorkTitle-"]::before {
430
+ content: var(--trae-skin-banner-current-code) " / " var(--trae-skin-banner-current-label);
431
+ position: absolute;
432
+ top: 9px;
433
+ left: 30px;
434
+ color: var(--trae-skin-banner-muted);
435
+ font: 700 9px/1 var(--trae-skin-font-code);
436
+ letter-spacing: 0.16em;
437
+ }
438
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"] .welcomeTitleWrapper [class*="traeWorkTitle-"]::after {
439
+ content: "● " var(--trae-skin-banner-status);
440
+ position: absolute;
441
+ top: 8px;
442
+ right: 30px;
443
+ color: var(--trae-skin-banner-status-color);
444
+ font: 700 9px/1 var(--trae-skin-font-code);
445
+ letter-spacing: 0.12em;
446
+ text-shadow: 0 0 9px color-mix(in srgb, var(--trae-skin-banner-status-color) 55%, transparent);
447
+ }
448
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"] .welcomeTitleWrapper [class*="animationContainer-"] {
449
+ align-items: stretch !important;
450
+ width: 100% !important;
451
+ }
452
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"] .welcomeTitleWrapper [class*="mainTextContainer-"] {
453
+ justify-content: flex-start !important;
454
+ width: 100% !important;
455
+ column-gap: 16px !important;
456
+ font-family: var(--trae-skin-font-heading) !important;
457
+ font-size: 30px !important;
458
+ font-weight: var(--trae-skin-heading-weight) !important;
459
+ letter-spacing: var(--trae-skin-heading-spacing) !important;
460
+ line-height: 1.1 !important;
461
+ }
462
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"] .welcomeTitleWrapper [class*="mainTextContainer-"] > [class*="icon-"] {
463
+ display: inline-grid !important;
464
+ flex: 0 0 var(--trae-skin-banner-icon-size) !important;
465
+ width: var(--trae-skin-banner-icon-size) !important;
466
+ height: var(--trae-skin-banner-icon-size) !important;
467
+ place-items: center !important;
468
+ color: var(--trae-skin-banner-accent) !important;
469
+ background: color-mix(in srgb, var(--trae-skin-banner-border) 24%, transparent) !important;
470
+ border: 1px solid var(--trae-skin-banner-border) !important;
471
+ clip-path: polygon(0 10px, 10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%) !important;
472
+ }
473
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"] .welcomeTitleWrapper [class*="mainTextContainer-"] > [class*="icon-"] svg {
474
+ width: 62% !important;
475
+ height: 62% !important;
476
+ }
477
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"] .welcomeTitleWrapper [class*="workText-"],
478
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"] .welcomeTitleWrapper [class*="codeText-"],
479
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"] .welcomeTitleWrapper [class*="designText-"] {
480
+ color: var(--trae-skin-banner-text) !important;
481
+ }
482
+ body.trae-skin-v3[data-trae-skin-landing-banner="system-plate"] .welcomeTitleWrapper [class*="withTraeText-"] {
483
+ align-self: flex-end !important;
484
+ margin-bottom: 4px !important;
485
+ color: var(--trae-skin-banner-muted) !important;
486
+ font: 600 11px/1 var(--trae-skin-font-code) !important;
487
+ letter-spacing: 0.12em !important;
488
+ text-transform: uppercase !important;
489
+ }
490
+
491
+ /* V3 components.navigation.modeTabs — launch-rail */
492
+ body.trae-skin-v3[data-trae-skin-mode-tabs="launch-rail"] .mode-switcher-btn {
493
+ box-sizing: border-box !important;
494
+ height: var(--trae-skin-mode-tabs-height) !important;
495
+ padding: 3px !important;
496
+ gap: var(--trae-skin-mode-tabs-gap) !important;
497
+ background: var(--trae-skin-mode-tabs-track) !important;
498
+ border: 1px solid var(--trae-skin-mode-tabs-border) !important;
499
+ border-radius: 0 !important;
500
+ clip-path: polygon(
501
+ 0 var(--trae-skin-mode-tabs-corner-cut),
502
+ var(--trae-skin-mode-tabs-corner-cut) 0,
503
+ calc(100% - var(--trae-skin-mode-tabs-corner-cut)) 0,
504
+ 100% var(--trae-skin-mode-tabs-corner-cut),
505
+ 100% 100%, 0 100%
506
+ ) !important;
507
+ box-shadow: var(--trae-skin-mode-tabs-shadow) !important;
508
+ }
509
+ body.trae-skin-v3[data-trae-skin-mode-tabs="launch-rail"] .mode-switcher-btn [class*="indicator-"] {
510
+ top: 3px !important;
511
+ left: 3px !important;
512
+ width: var(--trae-skin-mode-tabs-tab-width) !important;
513
+ height: calc(var(--trae-skin-mode-tabs-height) - 8px) !important;
514
+ background:
515
+ linear-gradient(110deg, var(--trae-skin-mode-tabs-indicator) 0 78%, var(--trae-skin-mode-tabs-accent) 78% 100%) !important;
516
+ border: 1px solid color-mix(in srgb, var(--trae-skin-mode-tabs-accent) 52%, var(--trae-skin-mode-tabs-border)) !important;
517
+ border-radius: 0 !important;
518
+ clip-path: polygon(0 7px, 7px 0, 100% 0, 100% calc(100% - 7px), calc(100% - 7px) 100%, 0 100%) !important;
519
+ box-shadow: inset 3px 0 var(--trae-skin-mode-tabs-accent) !important;
520
+ }
521
+ body.trae-skin-v3[data-trae-skin-mode-tabs="launch-rail"] .mode-switcher-btn:has(> span:nth-of-type(2) button[aria-selected="true"]) [class*="indicator-"] {
522
+ left: calc(3px + var(--trae-skin-mode-tabs-tab-width) + var(--trae-skin-mode-tabs-gap)) !important;
523
+ }
524
+ body.trae-skin-v3[data-trae-skin-mode-tabs="launch-rail"] .mode-switcher-btn:has(> span:nth-of-type(3) button[aria-selected="true"]) [class*="indicator-"] {
525
+ left: calc(3px + var(--trae-skin-mode-tabs-tab-width) + var(--trae-skin-mode-tabs-gap) + var(--trae-skin-mode-tabs-tab-width) + var(--trae-skin-mode-tabs-gap)) !important;
526
+ }
527
+ body.trae-skin-v3[data-trae-skin-mode-tabs="launch-rail"] .mode-switcher-btn > span {
528
+ flex: 0 0 var(--trae-skin-mode-tabs-tab-width) !important;
529
+ width: var(--trae-skin-mode-tabs-tab-width) !important;
530
+ }
531
+ body.trae-skin-v3[data-trae-skin-mode-tabs="launch-rail"] .mode-switcher-btn button[role="tab"] {
532
+ box-sizing: border-box !important;
533
+ flex: 0 0 var(--trae-skin-mode-tabs-tab-width) !important;
534
+ width: var(--trae-skin-mode-tabs-tab-width) !important;
535
+ height: calc(var(--trae-skin-mode-tabs-height) - 8px) !important;
536
+ padding: 2px 7px !important;
537
+ color: var(--trae-skin-mode-tabs-inactive-text) !important;
538
+ background: transparent !important;
539
+ border-radius: 0 !important;
540
+ font: 600 12px/1 var(--trae-skin-font-ui) !important;
541
+ letter-spacing: 0.01em !important;
542
+ transition: color 150ms ease, transform 150ms ease, background 150ms ease !important;
543
+ }
544
+ body.trae-skin-v3[data-trae-skin-mode-tabs="launch-rail"] .mode-switcher-btn button[role="tab"]:hover:not([aria-selected="true"]) {
545
+ color: var(--trae-skin-mode-tabs-active-text) !important;
546
+ background: var(--trae-skin-mode-tabs-hover) !important;
547
+ transform: translateY(-1px) !important;
548
+ }
549
+ body.trae-skin-v3[data-trae-skin-mode-tabs="launch-rail"] .mode-switcher-btn button[role="tab"][aria-selected="true"] {
550
+ color: var(--trae-skin-mode-tabs-active-text) !important;
551
+ background: transparent !important;
552
+ text-shadow: 0 0 8px color-mix(in srgb, var(--trae-skin-mode-tabs-accent) 48%, transparent) !important;
553
+ }
554
+ body.trae-skin-v3[data-trae-skin-mode-tab-icons="always"] .mode-switcher-btn [class*="tabIcon-"] {
555
+ width: 16px !important;
556
+ margin-right: 5px !important;
557
+ opacity: 0.68 !important;
558
+ transform: none !important;
559
+ }
560
+ body.trae-skin-v3[data-trae-skin-mode-tab-icons="always"] .mode-switcher-btn button[aria-selected="true"] [class*="tabIcon-"] {
561
+ color: var(--trae-skin-mode-tabs-accent) !important;
562
+ opacity: 1 !important;
563
+ }
564
+ body.trae-skin-v3[data-trae-skin-mode-tab-icons="never"] .mode-switcher-btn [class*="tabIcon-"] {
565
+ display: none !important;
566
+ }
567
+ body.trae-skin-v3[data-trae-skin-mode-tab-codes="true"] .mode-switcher-btn button[role="tab"]::after {
568
+ margin-left: 5px;
569
+ color: var(--trae-skin-mode-tabs-accent);
570
+ font: 700 7px/1 var(--trae-skin-font-code);
571
+ letter-spacing: 0.08em;
572
+ opacity: 0.72;
573
+ }
574
+ body.trae-skin-v3[data-trae-skin-mode-tab-codes="true"] .mode-switcher-btn > span:nth-of-type(1) button[role="tab"]::after { content: var(--trae-skin-mode-tabs-code-work); }
575
+ body.trae-skin-v3[data-trae-skin-mode-tab-codes="true"] .mode-switcher-btn > span:nth-of-type(2) button[role="tab"]::after { content: var(--trae-skin-mode-tabs-code-code); }
576
+ body.trae-skin-v3[data-trae-skin-mode-tab-codes="true"] .mode-switcher-btn > span:nth-of-type(3) button[role="tab"]::after { content: var(--trae-skin-mode-tabs-code-design); }
577
+
578
+ body.trae-skin-v2 [data-sonner-toast] {
579
+ color: var(--trae-skin-text-primary) !important;
580
+ background: var(--trae-skin-menu) !important;
581
+ border-color: var(--trae-skin-border-default) !important;
582
+ border-radius: var(--trae-skin-radius-medium) !important;
583
+ box-shadow: var(--trae-skin-shadow-floating) !important;
584
+ }
585
+ body.trae-skin-v2 code {
586
+ color: var(--trae-skin-text-secondary) !important;
587
+ background: var(--trae-skin-chat-code) !important;
588
+ border-color: var(--trae-skin-border-subtle) !important;
589
+ font-family: var(--trae-skin-font-code) !important;
590
+ }
591
+ body.trae-skin-v2 .markdown-renderer strong {
592
+ color: var(--trae-skin-text-primary) !important;
593
+ }
594
+ body.trae-skin-v2 .markdown-renderer a {
595
+ color: var(--trae-skin-info) !important;
596
+ }
597
+ body.trae-skin-v2 h1,
598
+ body.trae-skin-v2 h2,
599
+ body.trae-skin-v2 h3 {
600
+ font-family: var(--trae-skin-font-heading) !important;
601
+ font-weight: var(--trae-skin-heading-weight) !important;
602
+ letter-spacing: var(--trae-skin-heading-spacing) !important;
603
+ }
604
+ body.trae-skin-v2 * {
605
+ scrollbar-color: var(--trae-skin-scrollbar-thumb) var(--trae-skin-scrollbar-track);
606
+ scrollbar-width: thin;
607
+ }
608
+ body.trae-skin-v2 *::-webkit-scrollbar {
609
+ width: var(--trae-skin-scrollbar-width);
610
+ height: var(--trae-skin-scrollbar-width);
611
+ }
612
+ body.trae-skin-v2 *::-webkit-scrollbar-track {
613
+ background: var(--trae-skin-scrollbar-track);
614
+ }
615
+ body.trae-skin-v2 *::-webkit-scrollbar-thumb {
616
+ background: var(--trae-skin-scrollbar-thumb);
617
+ border-radius: var(--trae-skin-radius-pill);
618
+ }
619
+ body.trae-skin-v2 *::-webkit-scrollbar-thumb:hover {
620
+ background: var(--trae-skin-scrollbar-hover);
621
+ }
622
+
623
+ /* MAX 特效:只由明确开启 effects.mode=max 的主题使用 */
624
+ @keyframes trae-skin-scan {
625
+ from { background-position: 0 0, 0 0, 0 0; }
626
+ to { background-position: 0 16px, 64px 0, 0 64px; }
627
+ }
628
+ body.trae-skin-effects-max::after {
629
+ animation: trae-skin-scan 5s linear infinite;
630
+ }
631
+ body.trae-skin-effects-max .task-list-panel {
632
+ box-shadow:
633
+ inset -1px 0 var(--trae-skin-info),
634
+ inset 0 3px var(--trae-skin-accent),
635
+ var(--trae-skin-neon-glow) !important;
636
+ }
637
+ body.trae-skin-effects-max .solo-lite-chat-panel-container,
638
+ body.trae-skin-effects-max .panel-container > .panel-content,
639
+ body.trae-skin-effects-max .solo-lite-main-area {
640
+ box-shadow:
641
+ inset 0 1px var(--trae-skin-info),
642
+ inset 0 -1px var(--trae-skin-magenta),
643
+ var(--trae-skin-neon-glow) !important;
644
+ }
645
+ body.trae-skin-effects-max button[role="tab"][aria-selected="true"] {
646
+ color: var(--trae-skin-accent-on) !important;
647
+ background: var(--trae-skin-accent) !important;
648
+ border-color: var(--trae-skin-info) !important;
649
+ border-radius: 0 !important;
650
+ clip-path: polygon(0 0, calc(100% - 9px) 0, 100% 9px, 100% 100%, 9px 100%, 0 calc(100% - 9px));
651
+ box-shadow: 0 0 18px var(--trae-skin-accent) !important;
652
+ }
653
+ body.trae-skin-effects-max .user-message__text-box,
654
+ body.trae-skin-effects-max .core-finish-card,
655
+ body.trae-skin-effects-max [class*="messageInputContainer"] {
656
+ clip-path: polygon(0 0, calc(100% - 12px) 0, 100% 12px, 100% 100%, 12px 100%, 0 calc(100% - 12px));
657
+ }
658
+ body.trae-skin-effects-max .core-finish-card,
659
+ body.trae-skin-effects-max .core-finish-card__code-card {
660
+ border-left: 3px solid var(--trae-skin-accent) !important;
661
+ }
662
+ body.trae-skin-effects-max h1,
663
+ body.trae-skin-effects-max h2,
664
+ body.trae-skin-effects-max h3 {
665
+ color: var(--trae-skin-accent) !important;
666
+ text-shadow:
667
+ 1px 0 var(--trae-skin-info),
668
+ -1px 0 var(--trae-skin-magenta),
669
+ 0 0 16px #f4e90073;
670
+ }
671
+
672
+ body.trae-skin-blur-disabled .task-list-panel,
673
+ body.trae-skin-blur-disabled .solo-lite-chat-panel-container,
674
+ body.trae-skin-blur-disabled .solo-lite-main-area,
675
+ body.trae-skin-blur-disabled .panel-container,
676
+ body.trae-skin-blur-disabled .panel-container > .panel-content,
677
+ body.trae-skin-blur-disabled .monaco-workbench .part.sidebar,
678
+ body.trae-skin-blur-disabled .monaco-workbench .part.activitybar,
679
+ body.trae-skin-blur-disabled .monaco-workbench .part.panel,
680
+ body.trae-skin-blur-disabled .monaco-workbench .part.statusbar,
681
+ body.trae-skin-blur-disabled .monaco-workbench .part.titlebar {
682
+ backdrop-filter: none !important;
683
+ -webkit-backdrop-filter: none !important;
684
+ }
685
+ @media (prefers-reduced-motion: reduce) {
686
+ body.trae-skin-effects-max::after { animation: none; }
687
+ }