filecat 7.9.0 → 7.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +173 -182
  3. package/build/dist/{4967.3fd3bd40a2b5a3b52428.js → 1060.198d91e2dfc174317c3a.js} +1 -1
  4. package/build/dist/1075.05eed88707339ca32044.js +1 -0
  5. package/build/dist/{1142.121454b1de53689b7367.js → 1142.bc43fae2e5e38d9359df.js} +1 -1
  6. package/build/dist/1384.edbad9c24d883a59724d.js +1 -0
  7. package/build/dist/1417.d390b18dd58ff5c28160.js +1 -0
  8. package/build/dist/1448.4db495e1389c0c8445b3.js +1 -0
  9. package/build/dist/{3324.22efcb1c431177b1cf5f.js → 1455.26a021eb94e5bdd5bec2.js} +1 -1
  10. package/build/dist/{1636.b6a17252dfd0d22f09a7.js → 1636.b80b1883358e132d3424.js} +1 -1
  11. package/build/dist/{1832.8ea5c3e8288df0b7fd5c.js → 1832.a01933ba5df99576ecc2.js} +1 -1
  12. package/build/dist/2300.c99b1dd4e752cdfd5e32.js +2 -0
  13. package/build/dist/{2300.9e1baa1c0368abe53d96.js.LICENSE.txt → 2300.c99b1dd4e752cdfd5e32.js.LICENSE.txt} +1 -1
  14. package/build/dist/239.f570f06d4b9c020f1013.js +1 -0
  15. package/build/dist/{2479.dcc88b3370f0f1d66e02.js → 2479.294792ef5d360ad64abc.js} +1 -1
  16. package/build/dist/2542.26cb302b60de23166227.js +1 -0
  17. package/build/dist/{259.81bb9e049e5ef587a96f.js → 259.3c0eb22e9b43ffb63c9c.js} +1 -1
  18. package/build/dist/2626.3bcfe1f26d9cb796a925.js +1 -0
  19. package/build/dist/2674.d1bf937289c51ddeceac.js +1 -0
  20. package/build/dist/3233.43bdd7c12ca829d56116.js +1 -0
  21. package/build/dist/3299.de79d172b41af93a8716.js +1 -0
  22. package/build/dist/{6992.f6a07311a638794c24f7.js → 3471.ef3b5dcfe37963034187.js} +1 -1
  23. package/build/dist/{3528.56eeefab6fca5884e2a6.js → 3528.0f8f34028d92fa87c518.js} +1 -1
  24. package/build/dist/{3659.8a31495bb8f38c0ffa7c.js → 3659.dd03dc2ac52a3ff19105.js} +1 -1
  25. package/build/dist/4004.f4c06b50348214eb2962.js +1 -0
  26. package/build/dist/{4560.8ef2e4b60cc86d019dd6.js → 4560.fd9f8cf2d6022b1d3a94.js} +1 -1
  27. package/build/dist/{4903.b5451ed0802b3f7c07b2.js → 4903.070aaa53a243baf05133.js} +1 -1
  28. package/build/dist/{4946.c95d4f426146e0180172.js → 4946.d578f6ba367a742d80bf.js} +2 -2
  29. package/build/dist/4986.f244efce9cf6be21f846.js +1 -0
  30. package/build/dist/5272.1f0dfac07ba202e7d323.js +1 -0
  31. package/build/dist/{5308.052f45c15785487b3766.js → 5308.d1e5ccb49396fc1b026d.js} +1 -1
  32. package/build/dist/{5516.645e4a900df9bdc1806c.js → 5516.88521f3a3c7101c46df3.js} +1 -1
  33. package/build/dist/5614.43bdd7c12ca829d56116.js +1 -0
  34. package/build/dist/{5139.adf9574d9b54a216e041.js → 5709.81f43e3c021fafdfe36f.js} +1 -1
  35. package/build/dist/{5744.e9f1efb88a617b05b709.js → 5744.0f8a0432b73b2eb0a7ff.js} +1 -1
  36. package/build/dist/{5877.ca081c4798194230243c.js → 5877.98d0475aaf4058b9a715.js} +1 -1
  37. package/build/dist/{6247.917e3fbef5dc5fbaf937.js → 6247.525b0b68872036ac2fa6.js} +1 -1
  38. package/build/dist/{7520.fbb0bc2a05cf94e15418.js → 6322.552511b5cb12cd0c821c.js} +1 -1
  39. package/build/dist/6492.17ecd8515fa512ce9306.js +1 -0
  40. package/build/dist/{676.a75318a8b598d8daadf0.js → 676.356039ef6f28f96b8c8b.js} +1 -1
  41. package/build/dist/{6805.bf0c964ab84f0fcc78be.js → 6805.373ac0e7d6555e4a6459.js} +1 -1
  42. package/build/dist/{6919.8cf13c01184b7148b28e.js → 6919.c7cc8617b658198d4924.js} +1 -1
  43. package/build/dist/{7038.4e4fc8e405c56d3080e2.js → 7038.166f915547d27e4dc5e4.js} +1 -1
  44. package/build/dist/{7759.0b68912ff9ef10869f59.js → 7759.7cd3fe8e5d37df25804c.js} +1 -1
  45. package/build/dist/7873.e3098bc6f510e5bea55f.js +1 -0
  46. package/build/dist/7923.d44556578af4d3d7cea3.js +2 -0
  47. package/build/dist/{7943.19d2de387eeb7f513d8e.js → 7943.acf25a5e98dd13290985.js} +1 -1
  48. package/build/dist/8090.8977224618a14ae42159.js +2 -0
  49. package/build/dist/8302.ce97557b7cf7c8387942.js +1 -0
  50. package/build/dist/8319.6a6b9651c87a1bb4cbb9.js +1 -0
  51. package/build/dist/{8603.4142ce42c1635f493eca.js → 8603.f1cbcfd64cde885f9809.js} +1 -1
  52. package/build/dist/8649.d6055ad75975b803bbc1.js +1 -0
  53. package/build/dist/{8727.3628c746061aed7a4077.js → 8727.8658835acb7e0b6e5acc.js} +1 -1
  54. package/build/dist/{8765.a5633d054abb67142fc3.js → 8765.8758c290a6b132f2ce7f.js} +1 -1
  55. package/build/dist/8772.2c35012c25ac9eb5f74d.js +2 -0
  56. package/build/dist/{8772.e8f9731c1c061f1cdf56.js.LICENSE.txt → 8772.2c35012c25ac9eb5f74d.js.LICENSE.txt} +1 -1
  57. package/build/dist/8781.6bd14487d172e004e3d3.js +1 -0
  58. package/build/dist/9299.76095cb6629c36ca3343.js +1 -0
  59. package/build/dist/9334.a25983aafdcbde63ae5e.js +1 -0
  60. package/build/dist/{9546.e7206c968e92371ae2b1.js → 9546.2cecad04cf676a6616cd.js} +1 -1
  61. package/build/dist/dark.css +839 -839
  62. package/build/dist/filerobot-image-editor.min.js +42445 -42445
  63. package/build/dist/google-dark.css +2032 -2032
  64. package/build/dist/google.css +1719 -1719
  65. package/build/dist/index.html +1 -1
  66. package/build/dist/main.26c2c54f6ab534513ebd.js +2 -0
  67. package/build/dist/{main.3a12152528aff6ae213a.js.LICENSE.txt → main.26c2c54f6ab534513ebd.js.LICENSE.txt} +1 -1
  68. package/build/dist/rle.js +17867 -17867
  69. package/build/main.js +1 -1
  70. package/build/plugin/core.type.d.ts +62 -0
  71. package/build/threads.work.filecat.js +1 -1
  72. package/env +26 -26
  73. package/package.json +211 -211
  74. package/shell/build.js +161 -161
  75. package/shell/config/.babelrc +14 -14
  76. package/shell/config/base.webpack.config.js +78 -78
  77. package/shell/config/common-bin.config.js +44 -44
  78. package/shell/config/env.js +10 -10
  79. package/shell/config/prebuild-file-path.js +17 -17
  80. package/shell/config/webpack.exe.config.js +36 -36
  81. package/shell/config/webpack.npm.config.js +44 -44
  82. package/shell/config/webpack.web.config.js +152 -152
  83. package/shell/dev.js +51 -51
  84. package/shell/docker-build.sh +2 -2
  85. package/shell/filecat +1 -1
  86. package/shell/filecat-watch +1 -1
  87. package/shell/install.js +48 -48
  88. package/shell/net-agent/git-clone.bat +23 -23
  89. package/shell/net-agent/git-pull.bat +17 -17
  90. package/shell/net-agent/git-push.bat +17 -17
  91. package/shell/pkg.ts +50 -50
  92. package/shell/postinstall-optional.js +29 -29
  93. package/shell/start/filecat-install.sh +22 -22
  94. package/shell/start/filecat-run.sh +2 -2
  95. package/shell/start/windows-install.js +178 -178
  96. package/shell/start/windows-uninstall.js +131 -131
  97. package/shell/util/file.js +46 -46
  98. package/build/dist/1075.40103ec059c6b23b056e.js +0 -1
  99. package/build/dist/1384.0d0fc5faa899c9eddcbe.js +0 -1
  100. package/build/dist/1417.7e511043474084a2a65b.js +0 -1
  101. package/build/dist/1448.0710f04bed1c52e6a5db.js +0 -1
  102. package/build/dist/2300.9e1baa1c0368abe53d96.js +0 -2
  103. package/build/dist/2542.23fb13b1623c9f7c3fc1.js +0 -1
  104. package/build/dist/2626.05d1faa293e0a3318b9b.js +0 -1
  105. package/build/dist/2674.7fd28dae86ccdb247851.js +0 -1
  106. package/build/dist/2851.2195b5906b2c224c7bf7.js +0 -1
  107. package/build/dist/3140.794a212da633caf38b3a.js +0 -2
  108. package/build/dist/3233.fb6bffd5e097e4ac9423.js +0 -1
  109. package/build/dist/3299.f37767d30b6999df4014.js +0 -1
  110. package/build/dist/4004.5d68418ad5c2321cb11f.js +0 -1
  111. package/build/dist/4986.78047106f3a0d2d71199.js +0 -1
  112. package/build/dist/5272.0b70ee8ec5f083fb9f5b.js +0 -1
  113. package/build/dist/5614.fb6bffd5e097e4ac9423.js +0 -1
  114. package/build/dist/6492.3ee4060598de873d8e8f.js +0 -1
  115. package/build/dist/7756.2f851693ba030c42dde8.js +0 -1
  116. package/build/dist/7873.11d04b741d2b499d9cb9.js +0 -1
  117. package/build/dist/7923.861345fd55941e8089a1.js +0 -2
  118. package/build/dist/8014.28b5cf8c3787dc829aa4.js +0 -1
  119. package/build/dist/8302.5ae5bfe8baa0084204bb.js +0 -1
  120. package/build/dist/8319.c15a3674ec7abc493595.js +0 -1
  121. package/build/dist/8772.e8f9731c1c061f1cdf56.js +0 -2
  122. package/build/dist/8781.58f0c51870d3dd2689d7.js +0 -1
  123. package/build/dist/9299.6c06dad1abe098b61766.js +0 -1
  124. package/build/dist/main.3a12152528aff6ae213a.js +0 -2
  125. /package/build/dist/{4946.c95d4f426146e0180172.js.LICENSE.txt → 4946.d578f6ba367a742d80bf.js.LICENSE.txt} +0 -0
  126. /package/build/dist/{7923.861345fd55941e8089a1.js.LICENSE.txt → 7923.d44556578af4d3d7cea3.js.LICENSE.txt} +0 -0
  127. /package/build/dist/{3140.794a212da633caf38b3a.js.LICENSE.txt → 8090.8977224618a14ae42159.js.LICENSE.txt} +0 -0
@@ -1,839 +1,839 @@
1
- :root {
2
- /* 深色主题 - 现代化设计 */
3
- --background: #121212;
4
- --surfacePrimary: #1e1e1e;
5
- --surfaceSecondary: #2d2d2d;
6
- --divider: rgba(255, 255, 255, 0.12);
7
- --icon: #ffffff;
8
- --textPrimary: rgba(255, 255, 255, 0.87);
9
- --textSecondary: rgba(255, 255, 255, 0.6);
10
-
11
- /* 圆角设计 */
12
- --border-radius: 12px;
13
- --border-radius-sm: 8px;
14
- --border-radius-lg: 16px;
15
-
16
- /* 现代化阴影 (深色版本) */
17
- --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.15);
18
- --shadow-md: 0 1px 2px 0 rgba(0, 0, 0, 0.3), 0 2px 6px 2px rgba(0, 0, 0, 0.15);
19
- --shadow-lg: 0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 4px 8px 3px rgba(0, 0, 0, 0.15);
20
-
21
- /* 深色主题色彩 */
22
- --primary: #8ab4f8;
23
- --primary-light: #1a2a3a;
24
- --primary-dark: #4285f4;
25
- --secondary: #81c995;
26
- --secondary-light: #1a2e1a;
27
- --accent: #f28b82;
28
- --accent-light: #2e1a1a;
29
- --warning: #fdd663;
30
- --warning-light: #2e2a1a;
31
-
32
- /* 渐变色 */
33
- --gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
34
- --gradient-secondary: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
35
- --gradient-accent: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
36
-
37
- /* 现代化图标颜色 (深色适配) */
38
- --icon-blue: #8ab4f8;
39
- --icon-green: #81c995;
40
- --icon-yellow: #fdd663;
41
- --icon-red: #f28b82;
42
- --icon-purple: #d7aefb;
43
- --icon-teal: #78d9ec;
44
- }
45
-
46
- body {
47
- background: var(--background);
48
- color: var(--textPrimary);
49
- font-family: 'Google Sans', 'Segoe UI', Roboto, sans-serif;
50
- }
51
-
52
- #loading {
53
- background: var(--background);
54
- }
55
- #loading .spinner div, main .spinner div {
56
- background: var(--icon);
57
- }
58
-
59
- #login {
60
- background: var(--background);
61
- }
62
-
63
- .header {
64
- background: var(--surfacePrimary);
65
- border-radius: 0 0 var(--border-radius-lg) var(--border-radius-lg);
66
- box-shadow: var(--shadow-sm);
67
- }
68
-
69
- .filecat-search-box__inner {
70
- background: var(--surfaceSecondary);
71
- border-color: var(--divider);
72
- border-radius: var(--border-radius);
73
- }
74
- .filecat-search-box__inner input::placeholder {
75
- color: var(--textSecondary);
76
- }
77
-
78
- .action {
79
- color: var(--textPrimary) !important;
80
- border-radius: var(--border-radius-sm);
81
- /*transition: all 0.2s ease;*/
82
- }
83
- .action:hover {
84
- background-color: var(--primary-light);
85
- /*transform: translateY(-1px);*/
86
- }
87
- .action i,.material-icons.icon {
88
- color: var(--icon) ;
89
- }
90
- .action .counter {
91
- border-color: var(--divider);
92
- background: var(--accent-light);
93
- color: var(--accent);
94
- }
95
-
96
- nav > div {
97
- border-color: var(--divider);
98
- }
99
-
100
- .breadcrumbs {
101
- border-color: var(--divider);
102
- color: var(--textPrimary) !important;
103
- }
104
- .breadcrumbs span {
105
- color: var(--textPrimary) !important;
106
- }
107
- .breadcrumbs a:hover {
108
- background-color: var(--primary-light);
109
- border-radius: var(--border-radius-sm);
110
- }
111
-
112
- #listing .item {
113
- background: var(--surfacePrimary);
114
- color: var(--textSecondary);
115
- border-color: var(--divider) !important;
116
- border-radius: var(--border-radius);
117
- box-shadow: var(--shadow-sm);
118
- /*transition: all 0.2s ease;*/
119
- }
120
- #listing .item:hover {
121
- box-shadow: var(--shadow-md);
122
- /*transform: translateY(-2px);*/
123
- }
124
- /*#listing .item i {*/
125
- /* color: var(--icon);*/
126
- /*}*/
127
- #listing .item .modified {
128
- color: var(--textSecondary);
129
- }
130
- #listing h2,
131
- #listing.list .header span {
132
- color: var(--textPrimary) !important;
133
- }
134
- #listing.list .header span {
135
- color: var(--textPrimary);
136
- }
137
- #listing.list .header i {
138
- color: var(--icon-blue);
139
- }
140
- #listing.list .item.header {
141
- background: var(--background);
142
- box-shadow: none;
143
- }
144
-
145
- .message {
146
- color: var(--textPrimary);
147
- }
148
-
149
- .card {
150
- background: var(--surfacePrimary);
151
- color: var(--textPrimary);
152
- border-radius: var(--border-radius);
153
- box-shadow: var(--shadow-sm);
154
- }
155
- .button--flat:hover {
156
- background: var(--primary-light);
157
- border-radius: var(--border-radius-sm);
158
- }
159
-
160
- .dashboard #nav ul li {
161
- color: var(--textSecondary);
162
- }
163
- .dashboard #nav ul li:hover {
164
- background: var(--surfaceSecondary);
165
- }
166
-
167
- .card h3,
168
- .dashboard #nav,
169
- .dashboard p label {
170
- color: var(--textPrimary);
171
- }
172
-
173
- td .input {
174
- background: transparent;
175
- border: 0px ;
176
- }
177
- td .input:focus {
178
- background: var(--surfaceSecondary);
179
- }
180
-
181
- .select_dropdown,
182
- .card#share input,
183
- .card#share select,
184
- .input {
185
- background: var(--surfaceSecondary);
186
- color: var(--textPrimary);
187
- border: 1px solid var(--divider);
188
- border-radius: var(--border-radius-sm);
189
- }
190
- .input:hover,
191
- .input:focus {
192
- border-color: var(--primary);
193
- box-shadow: 0 0 0 2px var(--primary-light);
194
- }
195
- .input--red {
196
- background: var(--accent-light);
197
- color: var(--accent);
198
- }
199
-
200
- .input--green {
201
- background: var(--secondary-light);
202
- color: var(--secondary);
203
- }
204
-
205
- .select_option:hover {
206
- background: var(--surfacePrimary);
207
- }
208
-
209
- .select_option--selected {
210
- background: var(--surfacePrimary);
211
- }
212
-
213
-
214
- .dashboard #nav .wrapper,
215
- .collapsible {
216
- border-color: var(--divider);
217
- }
218
- .collapsible > label * {
219
- color: var(--textPrimary);
220
- }
221
-
222
- table th {
223
- color: var(--textSecondary);
224
- }
225
-
226
- .file-list li:hover {
227
- background: var(--primary-light);
228
- border-radius: var(--border-radius-sm);
229
- }
230
- .file-list li:before {
231
- color: var(--textSecondary);
232
- }
233
- .file-list li[aria-selected=true]:before {
234
- color: var(--icon-blue);
235
- }
236
-
237
- .shell {
238
- background: var(--surfacePrimary);
239
- color: var(--textPrimary);
240
- border-radius: var(--border-radius);
241
- }
242
- .shell__divider {
243
- background: var(--divider);
244
- border-radius: 2px;
245
- }
246
- .shell__divider:hover {
247
- background: var(--primary);
248
- }
249
- .shell__result {
250
- border-top: 1px solid var(--divider);
251
- }
252
- .xterm-screen {
253
- background: var(--surfacePrimary);
254
- border-radius: var(--border-radius);
255
- }
256
-
257
-
258
- #editor-container {
259
- background: var(--background) !important;
260
- }
261
-
262
- #editor-container .bar {
263
- background: var(--surfacePrimary);
264
- border-radius: var(--border-radius) var(--border-radius) 0 0;
265
- }
266
-
267
- @media (max-width: 736px) {
268
- #file-selection {
269
- background: var(--surfaceSecondary) !important;
270
- border-radius: var(--border-radius);
271
- }
272
- #file-selection span {
273
- color: var(--textPrimary) !important;
274
- }
275
- nav {
276
- background: var(--surfaceSecondary) !important;
277
- border-radius: var(--border-radius);
278
- }
279
- #dropdown {
280
- background: var(--surfaceSecondary) !important;
281
- border-radius: var(--border-radius);
282
- }
283
- }
284
-
285
- .share__box {
286
- background: var(--surfacePrimary) !important;
287
- color: var(--textPrimary);
288
- border-radius: var(--border-radius);
289
- box-shadow: var(--shadow-md);
290
- }
291
-
292
- .share__box__element {
293
- border-top-color: var(--divider);
294
- }
295
-
296
- .dropdown_item {
297
- background: var(--surfacePrimary);
298
- margin: 0;
299
- /*border-radius: var(--border-radius-sm);*/
300
- }
301
- .dropdown > div:hover {
302
- background: var(--primary-light);
303
- }
304
- .menu ul li:hover {
305
- background: var(--primary-light);
306
- /*border-radius: var(--border-radius-sm);*/
307
- }
308
- .md-context div{
309
- background: var(--surfaceSecondary);
310
- color: var(--textPrimary);
311
- border-radius: var(--border-radius-sm);
312
- }
313
- #md-container .md-context{
314
- background: var(--surfacePrimary);
315
- border-radius: var(--border-radius);
316
- }
317
- .card-content textarea {
318
- background: var(--surfacePrimary);
319
- color: var(--textPrimary);
320
- border-radius: var(--border-radius-sm);
321
- }
322
-
323
- .nav_list_a,.nav_list_a a {
324
- background: var(--surfacePrimary);
325
- border-radius: var(--border-radius);
326
- }
327
-
328
- .studio .studio-nav,.studio-nav div,.studio-body {
329
- background: var(--surfacePrimary) !important;
330
- border-radius: var(--border-radius);
331
- }
332
-
333
- .studio-item-title:hover * {
334
- color: var(--primary);
335
- }
336
-
337
- .chat-message.bot{
338
- background: var(--primary-light);
339
- border-radius: var(--border-radius);
340
- color: var(--textPrimary);
341
- border-bottom: 1px solid var(--divider);
342
- }
343
- .chat-message.user {
344
- background: #1a2a3a;
345
- color: var(--textPrimary);
346
- border-bottom: none;
347
- }
348
- .chat-message.bot::before {
349
- background: var(--primary);
350
- opacity: 0.6;
351
- transition: opacity 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;
352
- }
353
-
354
-
355
- /* 暗黑模式 - AI 执行中最后一个气泡头像呼吸 */
356
- [data-sending="true"] .chat-message.bot:last-of-type::before {
357
- opacity: 1;
358
- background: var(--primary);
359
- box-shadow: 0 0 10px 3px var(--primary-light);
360
- animation: ai-avatar-pulse-dark 1.5s ease-in-out infinite;
361
- }
362
-
363
- @keyframes ai-avatar-pulse-dark {
364
- 0%, 100% {
365
- box-shadow: 0 0 8px 2px var(--primary-light);
366
- transform: scale(1);
367
- }
368
- 50% {
369
- box-shadow: 0 0 18px 6px var(--primary-light);
370
- transform: scale(1.15);
371
- }
372
- }
373
-
374
- /* 暗黑模式 - 工具调用中头像橙色旋转 */
375
- [data-sending="true"] .chat-message.bot.tool-info:last-of-type::before {
376
- background: #f59e0b;
377
- box-shadow: 0 0 10px 3px rgba(245, 158, 11, 0.5);
378
- animation: ai-avatar-spin-dark 1.5s linear infinite;
379
- }
380
-
381
- @keyframes ai-avatar-spin-dark {
382
- 0% {
383
- box-shadow: 0 0 10px 3px rgba(245, 158, 11, 0.5);
384
- transform: rotate(0deg) scale(1.1);
385
- }
386
- 100% {
387
- box-shadow: 0 0 16px 5px rgba(245, 158, 11, 0.7);
388
- transform: rotate(360deg) scale(1.1);
389
- }
390
- }
391
-
392
- .chat-input-area textarea,
393
- .chat-input-area .ace-input-container.chat-input .ace_editor,
394
- .chat-input-area .rich-textarea.chat-input {
395
- background: var(--surfacePrimary);
396
- border-radius: var(--border-radius);
397
- color: var(--textPrimary);
398
- border-color: var(--divider);
399
- }
400
- .chat-input-area textarea:focus,
401
- .chat-input-area .rich-textarea.chat-input:focus {
402
- border-color: var(--primary);
403
- background: var(--surfaceSecondary);
404
- box-shadow: 0 0 0 3px var(--primary-light);
405
- }
406
-
407
- .chat-input-area {
408
- background: var(--background);
409
- border-top: 1px solid var(--divider);
410
- }
411
-
412
- .chat-main {
413
- background: var(--background);
414
- }
415
-
416
- .chat-header {
417
- background: var(--background);
418
- color: var(--textPrimary);
419
- }
420
-
421
- .chat-messages {
422
- background: var(--background);
423
- }
424
-
425
- .common-box {
426
- background: var(--background);
427
- }
428
-
429
- .chat-header ,.chat-input-area {
430
- background: var(--background);
431
- }
432
-
433
- .dashboard,.full_screen_context {
434
- background: var(--background);
435
- }
436
-
437
- .site_edit {
438
- background: var(--background);
439
- }
440
-
441
- .chat-session-list {
442
- background: var(--background);
443
- }
444
-
445
- .chat-session-item {
446
- background: var(--surfacePrimary);
447
- border-radius: var(--border-radius-sm);
448
- color: var(--textPrimary);
449
- }
450
-
451
- .chat-session-search-input {
452
- background: var(--surfaceSecondary);
453
- border-color: var(--divider);
454
- color: var(--textPrimary);
455
- }
456
-
457
- .chat-session-search-input::placeholder {
458
- color: var(--textSecondary);
459
- }
460
-
461
- .chat-session-search-input:focus {
462
- border-color: var(--primary);
463
- box-shadow: 0 0 0 2px var(--primary-light);
464
- }
465
- .chat-session-item.active,
466
- .chat-session-item:hover {
467
- background: var(--primary-light);
468
- }
469
-
470
- /* ===== 暗黑模式 - AI 加载气泡 ===== */
471
- .ai-loading-bubble .ai-loading-text {
472
- color: var(--textSecondary);
473
- }
474
- .ai-loading-dot {
475
- background-color: var(--textSecondary);
476
- }
477
-
478
- /* ===== 暗黑模式 - 工具调用状态气泡 ===== */
479
- .tool-status-bubble {
480
- background: var(--surfacePrimary);
481
- border-color: var(--borderPrimary);
482
- color: var(--textPrimary);
483
- }
484
-
485
- /* ===== 暗黑模式 - 输入区迷你指示器 ===== */
486
- .ai-thinking-mini {
487
- background: var(--surfacePrimary);
488
- }
489
- .ai-thinking-mini .ai-thinking-dot {
490
- background-color: var(--textSecondary);
491
- }
492
-
493
- /* ===== 暗黑模式 - 消息操作按钮 ===== */
494
- .message-actions button {
495
- border-color: var(--borderPrimary);
496
- background: var(--surfacePrimary);
497
- color: var(--textSecondary);
498
- box-shadow: 0 1px 2px rgba(0,0,0,0.3);
499
- }
500
- .message-actions button:hover {
501
- color: var(--textPrimary);
502
- border-color: var(--borderSecondary);
503
- background: var(--surfaceSecondary);
504
- box-shadow: 0 1px 3px rgba(0,0,0,0.4);
505
- }
506
-
507
- /* ===== 暗黑模式 - 附件 ===== */
508
- .chat-attachment-chip {
509
- border-color: var(--divider);
510
- background: var(--surfaceSecondary);
511
- color: var(--textPrimary);
512
- }
513
- .chat-attachment-chip button {
514
- color: var(--textSecondary);
515
- }
516
- .chat-attach-button {
517
- border-color: var(--divider);
518
- background: var(--surfacePrimary);
519
- color: var(--textSecondary);
520
- }
521
- .chat-attach-button:hover {
522
- background: var(--primary-light);
523
- }
524
-
525
- .chat-message-attachment {
526
- background: var(--surfaceSecondary);
527
- }
528
-
529
- /* ===== 暗黑模式 - AI思考指示器 ===== */
530
- .ai-thinking-indicator {
531
- border-color: var(--divider);
532
- background: var(--surfacePrimary);
533
- }
534
-
535
- .ai-thinking-spinner {
536
- border-color: var(--divider);
537
- background: var(--surfacePrimary);
538
- }
539
- .ai-thinking-spinner::after {
540
- border-color: var(--divider);
541
- border-top-color: var(--primary);
542
- }
543
-
544
- .chat-session-item small {
545
- color: var(--textSecondary);
546
- }
547
- .chat-session-source {
548
- color: var(--icon-purple);
549
- }
550
-
551
- /* ===== 暗黑模式 - 模型选择器 ===== */
552
- .model-selector-dropdown {
553
- border-color: var(--divider);
554
- background: var(--surfacePrimary);
555
- color: var(--textPrimary);
556
- }
557
- .model-selector-dropdown:focus {
558
- border-color: var(--primary);
559
- box-shadow: 0 0 0 2px var(--primary-light);
560
- }
561
-
562
- /* ===== 暗黑模式 - 用量统计弹框 ===== */
563
- .usage-stats-popup {
564
- background: var(--surfacePrimary);
565
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
566
- }
567
- .usage-stats-header {
568
- border-color: var(--divider);
569
- }
570
- .usage-stats-header h3 {
571
- color: var(--textPrimary);
572
- }
573
- .usage-stats-close {
574
- color: var(--textSecondary);
575
- }
576
- .usage-stats-close:hover {
577
- background: var(--primary-light);
578
- color: var(--textPrimary);
579
- }
580
- .usage-stats-loading,
581
- .usage-stats-empty {
582
- color: var(--textSecondary);
583
- }
584
- .usage-stats-row {
585
- background: var(--background);
586
- }
587
- .usage-stats-row:nth-child(even) {
588
- background: var(--surfaceSecondary);
589
- }
590
- .usage-stats-label {
591
- color: var(--textSecondary);
592
- }
593
- .usage-stats-value {
594
- color: var(--textPrimary);
595
- }
596
- .usage-stats-total {
597
- background: var(--primary-light) !important;
598
- border-color: var(--primary);
599
- }
600
- .usage-stats-total .usage-stats-label,
601
- .usage-stats-total .usage-stats-value {
602
- color: var(--primary);
603
- }
604
-
605
- /* ===== 暗黑模式 - 工具调用列表 ===== */
606
- .chat-message-call-list {
607
- border-color: var(--divider);
608
- background: rgba(255,255,255,0.03);
609
- }
610
- .call-list-header {
611
- color: var(--textSecondary);
612
- background: rgba(255,255,255,0.02);
613
- }
614
- .call-list-header:hover {
615
- background: rgba(255,255,255,0.05);
616
- }
617
- .call-list-item.call-success {
618
- border-color: rgba(34,197,94,0.25);
619
- background: rgba(34,197,94,0.08);
620
- }
621
- .call-list-item.call-fail {
622
- border-color: rgba(239,68,68,0.25);
623
- background: rgba(239,68,68,0.08);
624
- }
625
- .call-list-tool-name {
626
- color: var(--textPrimary);
627
- }
628
- .call-list-duration {
629
- color: var(--textSecondary);
630
- }
631
- .call-list-details summary {
632
- color: var(--textSecondary);
633
- }
634
- .call-list-details summary:hover {
635
- background: rgba(255,255,255,0.04);
636
- }
637
- .call-list-pre {
638
- background: rgba(255,255,255,0.04);
639
- }
640
- .call-list-error-text {
641
- color: var(--accent);
642
- }
643
-
644
- .chat-header-model {
645
- color: var(--textSecondary);
646
- }
647
-
648
- .menu-select-popup {
649
- background: var(--surfacePrimary);
650
- border-radius: var(--border-radius);
651
- box-shadow: var(--shadow-lg);
652
- }
653
-
654
- .menu-select-item:hover {
655
- background:var(--primary-light);
656
- border-radius: var(--border-radius-sm);
657
- }
658
-
659
- .usage-stats-popup {
660
- background: var(--surfacePrimary);
661
- border-radius: var(--border-radius);
662
- box-shadow: var(--shadow-lg);
663
- }
664
-
665
- .usage-stats-header {
666
- border-color: var(--divider);
667
- }
668
-
669
- .usage-stats-header h3 {
670
- color: var(--textPrimary);
671
- }
672
-
673
- .usage-stats-close {
674
- color: var(--textSecondary);
675
- border-radius: 50%;
676
- }
677
-
678
- .usage-stats-close:hover {
679
- color: var(--textPrimary);
680
- background: var(--primary-light);
681
- }
682
-
683
- .usage-stats-loading,
684
- .usage-stats-empty {
685
- color: var(--textSecondary);
686
- }
687
-
688
- .usage-stats-row {
689
- background: var(--background);
690
- border-radius: var(--border-radius-sm);
691
- }
692
-
693
- .usage-stats-row:nth-child(even) {
694
- background: var(--surfaceSecondary);
695
- }
696
-
697
- .usage-stats-label {
698
- color: var(--textSecondary);
699
- }
700
-
701
- .usage-stats-value {
702
- color: var(--textPrimary);
703
- }
704
-
705
- .usage-stats-total {
706
- background: var(--primary-light) !important;
707
- border-color: var(--primary);
708
- border-radius: var(--border-radius);
709
- }
710
-
711
- .usage-stats-total .usage-stats-label,
712
- .usage-stats-total .usage-stats-value {
713
- color: var(--primary);
714
- }
715
-
716
- /* 移除硬编码颜色,改用 CSS 变量 */
717
- nav .nav_2 {
718
- /*transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); !* 使用更柔和的缓动曲线 *!*/
719
- border-radius: var(--border-radius-lg); /* 使用你定义的圆角变量 */
720
- /*margin: 4px 8px; !* 给菜单项之间留出空间 *!*/
721
- width: auto;
722
- }
723
-
724
- /* 现代悬停态 */
725
- nav .nav_2:hover {
726
- background-color: var(--surfaceSecondary);
727
- /*transform: scale(1.02); !* 轻微放大,提供物理反馈 *!*/
728
- }
729
-
730
- /* 现代激活态 */
731
- nav .nav_2_active {
732
- background-color: var(--primary-light) !important;
733
- color: var(--primary) !important;
734
- /*font-weight: 500;*/
735
- }
736
-
737
- /* 激活态图标颜色 */
738
- nav .nav_2_active i {
739
- color: var(--primary);
740
- }
741
-
742
- /* 整体悬停时,图标也会有一个微小的放大或颜色变化 */
743
- nav .nav_2:hover i {
744
- color: var(--textPrimary);
745
- /*transition: color 0.2s;*/
746
- }
747
-
748
- .nav_list_a {
749
- background: transparent; /* 默认透明 */
750
- border-radius: var(--border-radius-lg);
751
- /*transition: all 0.25s ease;*/
752
- border: 1px solid transparent; /* 预留边框,防止 Hover 时布局抖动 */
753
- color: var(--background);
754
- }
755
-
756
- .nav_list_a:hover {
757
- background: var(--surfacePrimary);
758
- box-shadow: var(--shadow-sm); /* 悬停时浮起 */
759
- border-color: var(--divider);
760
- }
761
-
762
- /* 激活时呈现边框高亮 */
763
- .nav_list_a.active {
764
- background: var(--primary-light);
765
- color: var(--primary);
766
- }
767
-
768
- nav {
769
- /*border-right: 1px solid var(--divider); !* 增加右侧分割线 *!*/
770
- background: var(--background);
771
- }
772
-
773
- /* 滚动条隐藏但在悬停时可见(增强交互感) */
774
- nav::-webkit-scrollbar {
775
- width: 6px;
776
- }
777
- nav:hover::-webkit-scrollbar-thumb {
778
- background: var(--divider);
779
- border-radius: 4px;
780
- }
781
-
782
- .dashboard label, .dashboard_label {
783
- color: var(--textPrimary);
784
- }
785
- /* ===== 暗黑模式 - 后台进程面板 ===== */
786
- .chat-bg-process-panel {
787
- background: var(--background);
788
- border-left-color: var(--divider);
789
- }
790
- .chat-bg-process-header {
791
- border-bottom-color: var(--divider);
792
- }
793
- .chat-bg-process-title {
794
- color: var(--textPrimary);
795
- }
796
- .chat-bg-process-toolbar {
797
- border-bottom-color: var(--divider);
798
- }
799
- .chat-bg-process-count {
800
- color: var(--textSecondary);
801
- }
802
- .chat-bg-process-empty {
803
- color: var(--textSecondary);
804
- }
805
- .chat-bg-process-item:hover,
806
- .chat-bg-process-item.active {
807
- background: var(--surfacePrimary);
808
- border-color: var(--divider);
809
- }
810
- .chat-bg-process-pid {
811
- color: var(--textPrimary);
812
- }
813
- .chat-bg-process-cmd {
814
- color: var(--textSecondary);
815
- }
816
- .chat-bg-process-time,
817
- .chat-bg-process-exit-code {
818
- color: var(--textSecondary);
819
- }
820
- .chat-bg-process-output {
821
- border-top-color: var(--divider);
822
- }
823
- .chat-bg-process-output-header {
824
- border-bottom-color: var(--divider);
825
- color: var(--textPrimary);
826
- }
827
- .chat-bg-process-output-pre {
828
- background: #0d0d0d;
829
- color: #d4d4d4;
830
- }
831
-
832
- table tr {
833
- border-bottom: 1px solid var(--surfaceSecondary);
834
- }
835
-
836
- .chat-session-actions {
837
- border-top: 1px solid var(--surfaceSecondary);
838
- }
839
-
1
+ :root {
2
+ /* 深色主题 - 现代化设计 */
3
+ --background: #121212;
4
+ --surfacePrimary: #1e1e1e;
5
+ --surfaceSecondary: #2d2d2d;
6
+ --divider: rgba(255, 255, 255, 0.12);
7
+ --icon: #ffffff;
8
+ --textPrimary: rgba(255, 255, 255, 0.87);
9
+ --textSecondary: rgba(255, 255, 255, 0.6);
10
+
11
+ /* 圆角设计 */
12
+ --border-radius: 12px;
13
+ --border-radius-sm: 8px;
14
+ --border-radius-lg: 16px;
15
+
16
+ /* 现代化阴影 (深色版本) */
17
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.15);
18
+ --shadow-md: 0 1px 2px 0 rgba(0, 0, 0, 0.3), 0 2px 6px 2px rgba(0, 0, 0, 0.15);
19
+ --shadow-lg: 0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 4px 8px 3px rgba(0, 0, 0, 0.15);
20
+
21
+ /* 深色主题色彩 */
22
+ --primary: #8ab4f8;
23
+ --primary-light: #1a2a3a;
24
+ --primary-dark: #4285f4;
25
+ --secondary: #81c995;
26
+ --secondary-light: #1a2e1a;
27
+ --accent: #f28b82;
28
+ --accent-light: #2e1a1a;
29
+ --warning: #fdd663;
30
+ --warning-light: #2e2a1a;
31
+
32
+ /* 渐变色 */
33
+ --gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
34
+ --gradient-secondary: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
35
+ --gradient-accent: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
36
+
37
+ /* 现代化图标颜色 (深色适配) */
38
+ --icon-blue: #8ab4f8;
39
+ --icon-green: #81c995;
40
+ --icon-yellow: #fdd663;
41
+ --icon-red: #f28b82;
42
+ --icon-purple: #d7aefb;
43
+ --icon-teal: #78d9ec;
44
+ }
45
+
46
+ body {
47
+ background: var(--background);
48
+ color: var(--textPrimary);
49
+ font-family: 'Google Sans', 'Segoe UI', Roboto, sans-serif;
50
+ }
51
+
52
+ #loading {
53
+ background: var(--background);
54
+ }
55
+ #loading .spinner div, main .spinner div {
56
+ background: var(--icon);
57
+ }
58
+
59
+ #login {
60
+ background: var(--background);
61
+ }
62
+
63
+ .header {
64
+ background: var(--surfacePrimary);
65
+ border-radius: 0 0 var(--border-radius-lg) var(--border-radius-lg);
66
+ box-shadow: var(--shadow-sm);
67
+ }
68
+
69
+ .filecat-search-box__inner {
70
+ background: var(--surfaceSecondary);
71
+ border-color: var(--divider);
72
+ border-radius: var(--border-radius);
73
+ }
74
+ .filecat-search-box__inner input::placeholder {
75
+ color: var(--textSecondary);
76
+ }
77
+
78
+ .action {
79
+ color: var(--textPrimary) !important;
80
+ border-radius: var(--border-radius-sm);
81
+ /*transition: all 0.2s ease;*/
82
+ }
83
+ .action:hover {
84
+ background-color: var(--primary-light);
85
+ /*transform: translateY(-1px);*/
86
+ }
87
+ .action i,.material-icons.icon {
88
+ color: var(--icon) ;
89
+ }
90
+ .action .counter {
91
+ border-color: var(--divider);
92
+ background: var(--accent-light);
93
+ color: var(--accent);
94
+ }
95
+
96
+ nav > div {
97
+ border-color: var(--divider);
98
+ }
99
+
100
+ .breadcrumbs {
101
+ border-color: var(--divider);
102
+ color: var(--textPrimary) !important;
103
+ }
104
+ .breadcrumbs span {
105
+ color: var(--textPrimary) !important;
106
+ }
107
+ .breadcrumbs a:hover {
108
+ background-color: var(--primary-light);
109
+ border-radius: var(--border-radius-sm);
110
+ }
111
+
112
+ #listing .item {
113
+ background: var(--surfacePrimary);
114
+ color: var(--textSecondary);
115
+ border-color: var(--divider) !important;
116
+ border-radius: var(--border-radius);
117
+ box-shadow: var(--shadow-sm);
118
+ /*transition: all 0.2s ease;*/
119
+ }
120
+ #listing .item:hover {
121
+ box-shadow: var(--shadow-md);
122
+ /*transform: translateY(-2px);*/
123
+ }
124
+ /*#listing .item i {*/
125
+ /* color: var(--icon);*/
126
+ /*}*/
127
+ #listing .item .modified {
128
+ color: var(--textSecondary);
129
+ }
130
+ #listing h2,
131
+ #listing.list .header span {
132
+ color: var(--textPrimary) !important;
133
+ }
134
+ #listing.list .header span {
135
+ color: var(--textPrimary);
136
+ }
137
+ #listing.list .header i {
138
+ color: var(--icon-blue);
139
+ }
140
+ #listing.list .item.header {
141
+ background: var(--background);
142
+ box-shadow: none;
143
+ }
144
+
145
+ .message {
146
+ color: var(--textPrimary);
147
+ }
148
+
149
+ .card {
150
+ background: var(--surfacePrimary);
151
+ color: var(--textPrimary);
152
+ border-radius: var(--border-radius);
153
+ box-shadow: var(--shadow-sm);
154
+ }
155
+ .button--flat:hover {
156
+ background: var(--primary-light);
157
+ border-radius: var(--border-radius-sm);
158
+ }
159
+
160
+ .dashboard #nav ul li {
161
+ color: var(--textSecondary);
162
+ }
163
+ .dashboard #nav ul li:hover {
164
+ background: var(--surfaceSecondary);
165
+ }
166
+
167
+ .card h3,
168
+ .dashboard #nav,
169
+ .dashboard p label {
170
+ color: var(--textPrimary);
171
+ }
172
+
173
+ td .input {
174
+ background: transparent;
175
+ border: 0px ;
176
+ }
177
+ td .input:focus {
178
+ background: var(--surfaceSecondary);
179
+ }
180
+
181
+ .select_dropdown,
182
+ .card#share input,
183
+ .card#share select,
184
+ .input {
185
+ background: var(--surfaceSecondary);
186
+ color: var(--textPrimary);
187
+ border: 1px solid var(--divider);
188
+ border-radius: var(--border-radius-sm);
189
+ }
190
+ .input:hover,
191
+ .input:focus {
192
+ border-color: var(--primary);
193
+ box-shadow: 0 0 0 2px var(--primary-light);
194
+ }
195
+ .input--red {
196
+ background: var(--accent-light);
197
+ color: var(--accent);
198
+ }
199
+
200
+ .input--green {
201
+ background: var(--secondary-light);
202
+ color: var(--secondary);
203
+ }
204
+
205
+ .select_option:hover {
206
+ background: var(--surfacePrimary);
207
+ }
208
+
209
+ .select_option--selected {
210
+ background: var(--surfacePrimary);
211
+ }
212
+
213
+
214
+ .dashboard #nav .wrapper,
215
+ .collapsible {
216
+ border-color: var(--divider);
217
+ }
218
+ .collapsible > label * {
219
+ color: var(--textPrimary);
220
+ }
221
+
222
+ table th {
223
+ color: var(--textSecondary);
224
+ }
225
+
226
+ .file-list li:hover {
227
+ background: var(--primary-light);
228
+ border-radius: var(--border-radius-sm);
229
+ }
230
+ .file-list li:before {
231
+ color: var(--textSecondary);
232
+ }
233
+ .file-list li[aria-selected=true]:before {
234
+ color: var(--icon-blue);
235
+ }
236
+
237
+ .shell {
238
+ background: var(--surfacePrimary);
239
+ color: var(--textPrimary);
240
+ border-radius: var(--border-radius);
241
+ }
242
+ .shell__divider {
243
+ background: var(--divider);
244
+ border-radius: 2px;
245
+ }
246
+ .shell__divider:hover {
247
+ background: var(--primary);
248
+ }
249
+ .shell__result {
250
+ border-top: 1px solid var(--divider);
251
+ }
252
+ .xterm-screen {
253
+ background: var(--surfacePrimary);
254
+ border-radius: var(--border-radius);
255
+ }
256
+
257
+
258
+ #editor-container {
259
+ background: var(--background) !important;
260
+ }
261
+
262
+ #editor-container .bar {
263
+ background: var(--surfacePrimary);
264
+ border-radius: var(--border-radius) var(--border-radius) 0 0;
265
+ }
266
+
267
+ @media (max-width: 736px) {
268
+ #file-selection {
269
+ background: var(--surfaceSecondary) !important;
270
+ border-radius: var(--border-radius);
271
+ }
272
+ #file-selection span {
273
+ color: var(--textPrimary) !important;
274
+ }
275
+ nav {
276
+ background: var(--surfaceSecondary) !important;
277
+ border-radius: var(--border-radius);
278
+ }
279
+ #dropdown {
280
+ background: var(--surfaceSecondary) !important;
281
+ border-radius: var(--border-radius);
282
+ }
283
+ }
284
+
285
+ .share__box {
286
+ background: var(--surfacePrimary) !important;
287
+ color: var(--textPrimary);
288
+ border-radius: var(--border-radius);
289
+ box-shadow: var(--shadow-md);
290
+ }
291
+
292
+ .share__box__element {
293
+ border-top-color: var(--divider);
294
+ }
295
+
296
+ .dropdown_item {
297
+ background: var(--surfacePrimary);
298
+ margin: 0;
299
+ /*border-radius: var(--border-radius-sm);*/
300
+ }
301
+ .dropdown > div:hover {
302
+ background: var(--primary-light);
303
+ }
304
+ .menu ul li:hover {
305
+ background: var(--primary-light);
306
+ /*border-radius: var(--border-radius-sm);*/
307
+ }
308
+ .md-context div{
309
+ background: var(--surfaceSecondary);
310
+ color: var(--textPrimary);
311
+ border-radius: var(--border-radius-sm);
312
+ }
313
+ #md-container .md-context{
314
+ background: var(--surfacePrimary);
315
+ border-radius: var(--border-radius);
316
+ }
317
+ .card-content textarea {
318
+ background: var(--surfacePrimary);
319
+ color: var(--textPrimary);
320
+ border-radius: var(--border-radius-sm);
321
+ }
322
+
323
+ .nav_list_a,.nav_list_a a {
324
+ background: var(--surfacePrimary);
325
+ border-radius: var(--border-radius);
326
+ }
327
+
328
+ .studio .studio-nav,.studio-nav div,.studio-body {
329
+ background: var(--surfacePrimary) !important;
330
+ border-radius: var(--border-radius);
331
+ }
332
+
333
+ .studio-item-title:hover * {
334
+ color: var(--primary);
335
+ }
336
+
337
+ .chat-message.bot{
338
+ background: var(--primary-light);
339
+ border-radius: var(--border-radius);
340
+ color: var(--textPrimary);
341
+ border-bottom: 1px solid var(--divider);
342
+ }
343
+ .chat-message.user {
344
+ background: #1a2a3a;
345
+ color: var(--textPrimary);
346
+ border-bottom: none;
347
+ }
348
+ .chat-message.bot::before {
349
+ background: var(--primary);
350
+ opacity: 0.6;
351
+ transition: opacity 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;
352
+ }
353
+
354
+
355
+ /* 暗黑模式 - AI 执行中最后一个气泡头像呼吸 */
356
+ [data-sending="true"] .chat-message.bot:last-of-type::before {
357
+ opacity: 1;
358
+ background: var(--primary);
359
+ box-shadow: 0 0 10px 3px var(--primary-light);
360
+ animation: ai-avatar-pulse-dark 1.5s ease-in-out infinite;
361
+ }
362
+
363
+ @keyframes ai-avatar-pulse-dark {
364
+ 0%, 100% {
365
+ box-shadow: 0 0 8px 2px var(--primary-light);
366
+ transform: scale(1);
367
+ }
368
+ 50% {
369
+ box-shadow: 0 0 18px 6px var(--primary-light);
370
+ transform: scale(1.15);
371
+ }
372
+ }
373
+
374
+ /* 暗黑模式 - 工具调用中头像橙色旋转 */
375
+ [data-sending="true"] .chat-message.bot.tool-info:last-of-type::before {
376
+ background: #f59e0b;
377
+ box-shadow: 0 0 10px 3px rgba(245, 158, 11, 0.5);
378
+ animation: ai-avatar-spin-dark 1.5s linear infinite;
379
+ }
380
+
381
+ @keyframes ai-avatar-spin-dark {
382
+ 0% {
383
+ box-shadow: 0 0 10px 3px rgba(245, 158, 11, 0.5);
384
+ transform: rotate(0deg) scale(1.1);
385
+ }
386
+ 100% {
387
+ box-shadow: 0 0 16px 5px rgba(245, 158, 11, 0.7);
388
+ transform: rotate(360deg) scale(1.1);
389
+ }
390
+ }
391
+
392
+ .chat-input-area textarea,
393
+ .chat-input-area .ace-input-container.chat-input .ace_editor,
394
+ .chat-input-area .rich-textarea.chat-input {
395
+ background: var(--surfacePrimary);
396
+ border-radius: var(--border-radius);
397
+ color: var(--textPrimary);
398
+ border-color: var(--divider);
399
+ }
400
+ .chat-input-area textarea:focus,
401
+ .chat-input-area .rich-textarea.chat-input:focus {
402
+ border-color: var(--primary);
403
+ background: var(--surfaceSecondary);
404
+ box-shadow: 0 0 0 3px var(--primary-light);
405
+ }
406
+
407
+ .chat-input-area {
408
+ background: var(--background);
409
+ border-top: 1px solid var(--divider);
410
+ }
411
+
412
+ .chat-main {
413
+ background: var(--background);
414
+ }
415
+
416
+ .chat-header {
417
+ background: var(--background);
418
+ color: var(--textPrimary);
419
+ }
420
+
421
+ .chat-messages {
422
+ background: var(--background);
423
+ }
424
+
425
+ .common-box {
426
+ background: var(--background);
427
+ }
428
+
429
+ .chat-header ,.chat-input-area {
430
+ background: var(--background);
431
+ }
432
+
433
+ .dashboard,.full_screen_context {
434
+ background: var(--background);
435
+ }
436
+
437
+ .site_edit {
438
+ background: var(--background);
439
+ }
440
+
441
+ .chat-session-list {
442
+ background: var(--background);
443
+ }
444
+
445
+ .chat-session-item {
446
+ background: var(--surfacePrimary);
447
+ border-radius: var(--border-radius-sm);
448
+ color: var(--textPrimary);
449
+ }
450
+
451
+ .chat-session-search-input {
452
+ background: var(--surfaceSecondary);
453
+ border-color: var(--divider);
454
+ color: var(--textPrimary);
455
+ }
456
+
457
+ .chat-session-search-input::placeholder {
458
+ color: var(--textSecondary);
459
+ }
460
+
461
+ .chat-session-search-input:focus {
462
+ border-color: var(--primary);
463
+ box-shadow: 0 0 0 2px var(--primary-light);
464
+ }
465
+ .chat-session-item.active,
466
+ .chat-session-item:hover {
467
+ background: var(--primary-light);
468
+ }
469
+
470
+ /* ===== 暗黑模式 - AI 加载气泡 ===== */
471
+ .ai-loading-bubble .ai-loading-text {
472
+ color: var(--textSecondary);
473
+ }
474
+ .ai-loading-dot {
475
+ background-color: var(--textSecondary);
476
+ }
477
+
478
+ /* ===== 暗黑模式 - 工具调用状态气泡 ===== */
479
+ .tool-status-bubble {
480
+ background: var(--surfacePrimary);
481
+ border-color: var(--borderPrimary);
482
+ color: var(--textPrimary);
483
+ }
484
+
485
+ /* ===== 暗黑模式 - 输入区迷你指示器 ===== */
486
+ .ai-thinking-mini {
487
+ background: var(--surfacePrimary);
488
+ }
489
+ .ai-thinking-mini .ai-thinking-dot {
490
+ background-color: var(--textSecondary);
491
+ }
492
+
493
+ /* ===== 暗黑模式 - 消息操作按钮 ===== */
494
+ .message-actions button {
495
+ border-color: var(--borderPrimary);
496
+ background: var(--surfacePrimary);
497
+ color: var(--textSecondary);
498
+ box-shadow: 0 1px 2px rgba(0,0,0,0.3);
499
+ }
500
+ .message-actions button:hover {
501
+ color: var(--textPrimary);
502
+ border-color: var(--borderSecondary);
503
+ background: var(--surfaceSecondary);
504
+ box-shadow: 0 1px 3px rgba(0,0,0,0.4);
505
+ }
506
+
507
+ /* ===== 暗黑模式 - 附件 ===== */
508
+ .chat-attachment-chip {
509
+ border-color: var(--divider);
510
+ background: var(--surfaceSecondary);
511
+ color: var(--textPrimary);
512
+ }
513
+ .chat-attachment-chip button {
514
+ color: var(--textSecondary);
515
+ }
516
+ .chat-attach-button {
517
+ border-color: var(--divider);
518
+ background: var(--surfacePrimary);
519
+ color: var(--textSecondary);
520
+ }
521
+ .chat-attach-button:hover {
522
+ background: var(--primary-light);
523
+ }
524
+
525
+ .chat-message-attachment {
526
+ background: var(--surfaceSecondary);
527
+ }
528
+
529
+ /* ===== 暗黑模式 - AI思考指示器 ===== */
530
+ .ai-thinking-indicator {
531
+ border-color: var(--divider);
532
+ background: var(--surfacePrimary);
533
+ }
534
+
535
+ .ai-thinking-spinner {
536
+ border-color: var(--divider);
537
+ background: var(--surfacePrimary);
538
+ }
539
+ .ai-thinking-spinner::after {
540
+ border-color: var(--divider);
541
+ border-top-color: var(--primary);
542
+ }
543
+
544
+ .chat-session-item small {
545
+ color: var(--textSecondary);
546
+ }
547
+ .chat-session-source {
548
+ color: var(--icon-purple);
549
+ }
550
+
551
+ /* ===== 暗黑模式 - 模型选择器 ===== */
552
+ .model-selector-dropdown {
553
+ border-color: var(--divider);
554
+ background: var(--surfacePrimary);
555
+ color: var(--textPrimary);
556
+ }
557
+ .model-selector-dropdown:focus {
558
+ border-color: var(--primary);
559
+ box-shadow: 0 0 0 2px var(--primary-light);
560
+ }
561
+
562
+ /* ===== 暗黑模式 - 用量统计弹框 ===== */
563
+ .usage-stats-popup {
564
+ background: var(--surfacePrimary);
565
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
566
+ }
567
+ .usage-stats-header {
568
+ border-color: var(--divider);
569
+ }
570
+ .usage-stats-header h3 {
571
+ color: var(--textPrimary);
572
+ }
573
+ .usage-stats-close {
574
+ color: var(--textSecondary);
575
+ }
576
+ .usage-stats-close:hover {
577
+ background: var(--primary-light);
578
+ color: var(--textPrimary);
579
+ }
580
+ .usage-stats-loading,
581
+ .usage-stats-empty {
582
+ color: var(--textSecondary);
583
+ }
584
+ .usage-stats-row {
585
+ background: var(--background);
586
+ }
587
+ .usage-stats-row:nth-child(even) {
588
+ background: var(--surfaceSecondary);
589
+ }
590
+ .usage-stats-label {
591
+ color: var(--textSecondary);
592
+ }
593
+ .usage-stats-value {
594
+ color: var(--textPrimary);
595
+ }
596
+ .usage-stats-total {
597
+ background: var(--primary-light) !important;
598
+ border-color: var(--primary);
599
+ }
600
+ .usage-stats-total .usage-stats-label,
601
+ .usage-stats-total .usage-stats-value {
602
+ color: var(--primary);
603
+ }
604
+
605
+ /* ===== 暗黑模式 - 工具调用列表 ===== */
606
+ .chat-message-call-list {
607
+ border-color: var(--divider);
608
+ background: rgba(255,255,255,0.03);
609
+ }
610
+ .call-list-header {
611
+ color: var(--textSecondary);
612
+ background: rgba(255,255,255,0.02);
613
+ }
614
+ .call-list-header:hover {
615
+ background: rgba(255,255,255,0.05);
616
+ }
617
+ .call-list-item.call-success {
618
+ border-color: rgba(34,197,94,0.25);
619
+ background: rgba(34,197,94,0.08);
620
+ }
621
+ .call-list-item.call-fail {
622
+ border-color: rgba(239,68,68,0.25);
623
+ background: rgba(239,68,68,0.08);
624
+ }
625
+ .call-list-tool-name {
626
+ color: var(--textPrimary);
627
+ }
628
+ .call-list-duration {
629
+ color: var(--textSecondary);
630
+ }
631
+ .call-list-details summary {
632
+ color: var(--textSecondary);
633
+ }
634
+ .call-list-details summary:hover {
635
+ background: rgba(255,255,255,0.04);
636
+ }
637
+ .call-list-pre {
638
+ background: rgba(255,255,255,0.04);
639
+ }
640
+ .call-list-error-text {
641
+ color: var(--accent);
642
+ }
643
+
644
+ .chat-header-model {
645
+ color: var(--textSecondary);
646
+ }
647
+
648
+ .menu-select-popup {
649
+ background: var(--surfacePrimary);
650
+ border-radius: var(--border-radius);
651
+ box-shadow: var(--shadow-lg);
652
+ }
653
+
654
+ .menu-select-item:hover {
655
+ background:var(--primary-light);
656
+ border-radius: var(--border-radius-sm);
657
+ }
658
+
659
+ .usage-stats-popup {
660
+ background: var(--surfacePrimary);
661
+ border-radius: var(--border-radius);
662
+ box-shadow: var(--shadow-lg);
663
+ }
664
+
665
+ .usage-stats-header {
666
+ border-color: var(--divider);
667
+ }
668
+
669
+ .usage-stats-header h3 {
670
+ color: var(--textPrimary);
671
+ }
672
+
673
+ .usage-stats-close {
674
+ color: var(--textSecondary);
675
+ border-radius: 50%;
676
+ }
677
+
678
+ .usage-stats-close:hover {
679
+ color: var(--textPrimary);
680
+ background: var(--primary-light);
681
+ }
682
+
683
+ .usage-stats-loading,
684
+ .usage-stats-empty {
685
+ color: var(--textSecondary);
686
+ }
687
+
688
+ .usage-stats-row {
689
+ background: var(--background);
690
+ border-radius: var(--border-radius-sm);
691
+ }
692
+
693
+ .usage-stats-row:nth-child(even) {
694
+ background: var(--surfaceSecondary);
695
+ }
696
+
697
+ .usage-stats-label {
698
+ color: var(--textSecondary);
699
+ }
700
+
701
+ .usage-stats-value {
702
+ color: var(--textPrimary);
703
+ }
704
+
705
+ .usage-stats-total {
706
+ background: var(--primary-light) !important;
707
+ border-color: var(--primary);
708
+ border-radius: var(--border-radius);
709
+ }
710
+
711
+ .usage-stats-total .usage-stats-label,
712
+ .usage-stats-total .usage-stats-value {
713
+ color: var(--primary);
714
+ }
715
+
716
+ /* 移除硬编码颜色,改用 CSS 变量 */
717
+ nav .nav_2 {
718
+ /*transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); !* 使用更柔和的缓动曲线 *!*/
719
+ border-radius: var(--border-radius-lg); /* 使用你定义的圆角变量 */
720
+ /*margin: 4px 8px; !* 给菜单项之间留出空间 *!*/
721
+ width: auto;
722
+ }
723
+
724
+ /* 现代悬停态 */
725
+ nav .nav_2:hover {
726
+ background-color: var(--surfaceSecondary);
727
+ /*transform: scale(1.02); !* 轻微放大,提供物理反馈 *!*/
728
+ }
729
+
730
+ /* 现代激活态 */
731
+ nav .nav_2_active {
732
+ background-color: var(--primary-light) !important;
733
+ color: var(--primary) !important;
734
+ /*font-weight: 500;*/
735
+ }
736
+
737
+ /* 激活态图标颜色 */
738
+ nav .nav_2_active i {
739
+ color: var(--primary);
740
+ }
741
+
742
+ /* 整体悬停时,图标也会有一个微小的放大或颜色变化 */
743
+ nav .nav_2:hover i {
744
+ color: var(--textPrimary);
745
+ /*transition: color 0.2s;*/
746
+ }
747
+
748
+ .nav_list_a {
749
+ background: transparent; /* 默认透明 */
750
+ border-radius: var(--border-radius-lg);
751
+ /*transition: all 0.25s ease;*/
752
+ border: 1px solid transparent; /* 预留边框,防止 Hover 时布局抖动 */
753
+ color: var(--background);
754
+ }
755
+
756
+ .nav_list_a:hover {
757
+ background: var(--surfacePrimary);
758
+ box-shadow: var(--shadow-sm); /* 悬停时浮起 */
759
+ border-color: var(--divider);
760
+ }
761
+
762
+ /* 激活时呈现边框高亮 */
763
+ .nav_list_a.active {
764
+ background: var(--primary-light);
765
+ color: var(--primary);
766
+ }
767
+
768
+ nav {
769
+ /*border-right: 1px solid var(--divider); !* 增加右侧分割线 *!*/
770
+ background: var(--background);
771
+ }
772
+
773
+ /* 滚动条隐藏但在悬停时可见(增强交互感) */
774
+ nav::-webkit-scrollbar {
775
+ width: 6px;
776
+ }
777
+ nav:hover::-webkit-scrollbar-thumb {
778
+ background: var(--divider);
779
+ border-radius: 4px;
780
+ }
781
+
782
+ .dashboard label, .dashboard_label {
783
+ color: var(--textPrimary);
784
+ }
785
+ /* ===== 暗黑模式 - 后台进程面板 ===== */
786
+ .chat-bg-process-panel {
787
+ background: var(--background);
788
+ border-left-color: var(--divider);
789
+ }
790
+ .chat-bg-process-header {
791
+ border-bottom-color: var(--divider);
792
+ }
793
+ .chat-bg-process-title {
794
+ color: var(--textPrimary);
795
+ }
796
+ .chat-bg-process-toolbar {
797
+ border-bottom-color: var(--divider);
798
+ }
799
+ .chat-bg-process-count {
800
+ color: var(--textSecondary);
801
+ }
802
+ .chat-bg-process-empty {
803
+ color: var(--textSecondary);
804
+ }
805
+ .chat-bg-process-item:hover,
806
+ .chat-bg-process-item.active {
807
+ background: var(--surfacePrimary);
808
+ border-color: var(--divider);
809
+ }
810
+ .chat-bg-process-pid {
811
+ color: var(--textPrimary);
812
+ }
813
+ .chat-bg-process-cmd {
814
+ color: var(--textSecondary);
815
+ }
816
+ .chat-bg-process-time,
817
+ .chat-bg-process-exit-code {
818
+ color: var(--textSecondary);
819
+ }
820
+ .chat-bg-process-output {
821
+ border-top-color: var(--divider);
822
+ }
823
+ .chat-bg-process-output-header {
824
+ border-bottom-color: var(--divider);
825
+ color: var(--textPrimary);
826
+ }
827
+ .chat-bg-process-output-pre {
828
+ background: #0d0d0d;
829
+ color: #d4d4d4;
830
+ }
831
+
832
+ table tr {
833
+ border-bottom: 1px solid var(--surfaceSecondary);
834
+ }
835
+
836
+ .chat-session-actions {
837
+ border-top: 1px solid var(--surfaceSecondary);
838
+ }
839
+