@huyooo/file-explorer-frontend-vue 0.4.12 → 0.4.15

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.
@@ -157,7 +157,7 @@ const handleClose = () => {
157
157
  .progress-dialog-overlay {
158
158
  position: fixed;
159
159
  inset: 0;
160
- background: rgba(0, 0, 0, 0.5);
160
+ background: var(--huyooo-overlay);
161
161
  display: flex;
162
162
  align-items: center;
163
163
  justify-content: center;
@@ -165,9 +165,9 @@ const handleClose = () => {
165
165
  }
166
166
 
167
167
  .progress-dialog {
168
- background: white;
168
+ background: var(--huyooo-panel-bg);
169
169
  border-radius: 12px;
170
- box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2);
170
+ box-shadow: var(--huyooo-shadow-lg);
171
171
  width: 380px;
172
172
  max-width: 90vw;
173
173
  overflow: hidden;
@@ -180,7 +180,7 @@ const handleClose = () => {
180
180
  align-items: center;
181
181
  justify-content: space-between;
182
182
  padding: 16px 20px;
183
- border-bottom: 1px solid rgb(229, 231, 233);
183
+ border-bottom: 1px solid var(--huyooo-border);
184
184
  }
185
185
 
186
186
  .progress-dialog-title {
@@ -189,7 +189,7 @@ const handleClose = () => {
189
189
  gap: 10px;
190
190
  font-weight: 600;
191
191
  font-size: 16px;
192
- color: rgb(17, 24, 39);
192
+ color: var(--huyooo-text);
193
193
  }
194
194
 
195
195
  .progress-dialog-close {
@@ -197,7 +197,7 @@ const handleClose = () => {
197
197
  border: none;
198
198
  padding: 4px;
199
199
  cursor: pointer;
200
- color: rgb(107, 114, 128);
200
+ color: var(--huyooo-text-muted);
201
201
  border-radius: 4px;
202
202
  display: flex;
203
203
  align-items: center;
@@ -205,8 +205,8 @@ const handleClose = () => {
205
205
  }
206
206
 
207
207
  .progress-dialog-close:hover {
208
- background: rgb(243, 244, 246);
209
- color: rgb(55, 65, 81);
208
+ background: var(--huyooo-muted);
209
+ color: var(--huyooo-text);
210
210
  }
211
211
 
212
212
  .progress-dialog-content {
@@ -218,7 +218,7 @@ const handleClose = () => {
218
218
 
219
219
  .progress-dialog-status {
220
220
  font-size: 14px;
221
- color: rgb(55, 65, 81);
221
+ color: var(--huyooo-text);
222
222
  text-align: center;
223
223
  }
224
224
 
@@ -231,14 +231,14 @@ const handleClose = () => {
231
231
  .progress-dialog-bar {
232
232
  flex: 1;
233
233
  height: 8px;
234
- background: rgb(229, 231, 233);
234
+ background: var(--huyooo-border);
235
235
  border-radius: 4px;
236
236
  overflow: hidden;
237
237
  }
238
238
 
239
239
  .progress-dialog-bar-fill {
240
240
  height: 100%;
241
- background: rgb(59, 130, 246);
241
+ background: var(--huyooo-primary);
242
242
  border-radius: 4px;
243
243
  transition: width 0.3s ease;
244
244
  }
@@ -246,14 +246,14 @@ const handleClose = () => {
246
246
  .progress-dialog-percent {
247
247
  font-size: 13px;
248
248
  font-weight: 500;
249
- color: rgb(55, 65, 81);
249
+ color: var(--huyooo-text);
250
250
  min-width: 40px;
251
251
  text-align: right;
252
252
  }
253
253
 
254
254
  .progress-dialog-current-file {
255
255
  font-size: 12px;
256
- color: rgb(107, 114, 128);
256
+ color: var(--huyooo-text-muted);
257
257
  text-align: center;
258
258
  white-space: nowrap;
259
259
  overflow: hidden;
@@ -262,23 +262,23 @@ const handleClose = () => {
262
262
 
263
263
  .progress-dialog-count {
264
264
  font-size: 12px;
265
- color: rgb(107, 114, 128);
265
+ color: var(--huyooo-text-muted);
266
266
  text-align: center;
267
267
  }
268
268
 
269
269
  .progress-dialog-error {
270
270
  padding: 12px;
271
- background: rgb(254, 242, 242);
272
- border: 1px solid rgb(254, 202, 202);
271
+ background: var(--huyooo-danger-bg);
272
+ border: 1px solid var(--huyooo-danger-border);
273
273
  border-radius: 6px;
274
- color: rgb(185, 28, 28);
274
+ color: var(--huyooo-danger);
275
275
  font-size: 13px;
276
276
  }
277
277
 
278
278
  .progress-dialog-output {
279
279
  padding: 12px;
280
- background: rgb(240, 253, 244);
281
- border: 1px solid rgb(187, 247, 208);
280
+ background: var(--huyooo-success-bg);
281
+ border: 1px solid var(--huyooo-success-border);
282
282
  border-radius: 6px;
283
283
  font-size: 12px;
284
284
  display: flex;
@@ -287,12 +287,12 @@ const handleClose = () => {
287
287
  }
288
288
 
289
289
  .progress-dialog-output-label {
290
- color: rgb(22, 101, 52);
290
+ color: var(--huyooo-success);
291
291
  font-weight: 500;
292
292
  }
293
293
 
294
294
  .progress-dialog-output-path {
295
- color: rgb(21, 128, 61);
295
+ color: var(--huyooo-success);
296
296
  word-break: break-all;
297
297
  }
298
298
 
@@ -301,7 +301,7 @@ const handleClose = () => {
301
301
  justify-content: flex-end;
302
302
  gap: 12px;
303
303
  padding: 16px 20px;
304
- border-top: 1px solid rgb(229, 231, 233);
304
+ border-top: 1px solid var(--huyooo-border);
305
305
  }
306
306
 
307
307
  .progress-dialog-btn {
@@ -317,39 +317,39 @@ const handleClose = () => {
317
317
  }
318
318
 
319
319
  .progress-dialog-btn-cancel {
320
- background: white;
321
- border: 1px solid rgb(209, 213, 219);
322
- color: rgb(55, 65, 81);
320
+ background: var(--huyooo-surface-2);
321
+ border: 1px solid var(--huyooo-border);
322
+ color: var(--huyooo-text);
323
323
  }
324
324
 
325
325
  .progress-dialog-btn-cancel:hover {
326
- background: rgb(249, 250, 251);
326
+ background: var(--huyooo-surface);
327
327
  }
328
328
 
329
329
  .progress-dialog-btn-folder {
330
- background: rgb(240, 253, 244);
331
- border: 1px solid rgb(187, 247, 208);
332
- color: rgb(22, 101, 52);
330
+ background: var(--huyooo-success-bg);
331
+ border: 1px solid var(--huyooo-success-border);
332
+ color: var(--huyooo-success);
333
333
  }
334
334
 
335
335
  .progress-dialog-btn-folder:hover {
336
- background: rgb(220, 252, 231);
336
+ background: color-mix(in srgb, var(--huyooo-success-bg) 75%, var(--huyooo-success) 25%);
337
337
  }
338
338
 
339
339
  .progress-dialog-btn-close {
340
- background: rgb(59, 130, 246);
341
- border: 1px solid rgb(59, 130, 246);
340
+ background: var(--huyooo-primary);
341
+ border: 1px solid var(--huyooo-primary);
342
342
  color: white;
343
343
  }
344
344
 
345
345
  .progress-dialog-btn-close:hover {
346
- background: rgb(37, 99, 235);
346
+ background: var(--huyooo-primary-hover, var(--huyooo-primary));
347
347
  }
348
348
 
349
349
  /* 旋转动画 */
350
350
  .progress-dialog-icon-spin {
351
351
  animation: spin 1s linear infinite;
352
- color: rgb(59, 130, 246);
352
+ color: var(--huyooo-primary);
353
353
  }
354
354
 
355
355
  @keyframes spin {
@@ -358,11 +358,11 @@ const handleClose = () => {
358
358
  }
359
359
 
360
360
  .progress-dialog-icon-success {
361
- color: rgb(34, 197, 94);
361
+ color: var(--huyooo-success);
362
362
  }
363
363
 
364
364
  .progress-dialog-icon-error {
365
- color: rgb(239, 68, 68);
365
+ color: var(--huyooo-danger);
366
366
  }
367
367
  </style>
368
368
 
@@ -17,6 +17,6 @@ defineProps<{
17
17
  margin-left: 4px;
18
18
  display: inline-flex;
19
19
  align-items: center;
20
- color: rgb(59, 130, 246);
20
+ color: var(--huyooo-primary);
21
21
  }
22
22
  </style>
@@ -23,14 +23,14 @@ withDefaults(defineProps<{
23
23
  <style scoped>
24
24
  .file-status-bar {
25
25
  height: 1.5rem;
26
- background-color: rgb(249, 250, 251);
27
- border-top: 1px solid rgb(229, 231, 233);
26
+ background-color: var(--huyooo-surface-2);
27
+ border-top: 1px solid var(--huyooo-border);
28
28
  display: flex;
29
29
  align-items: center;
30
30
  justify-content: center;
31
31
  padding: 0 8px;
32
32
  font-size: 10px;
33
- color: rgb(107, 114, 128);
33
+ color: var(--huyooo-text-muted);
34
34
  user-select: none;
35
35
  flex-shrink: 0;
36
36
  z-index: 20;
@@ -121,9 +121,9 @@ const emit = defineEmits<{
121
121
  <style scoped>
122
122
  .file-toolbar {
123
123
  height: 3rem;
124
- background: rgba(249, 250, 251, 0.9);
124
+ background: var(--huyooo-surface);
125
125
  backdrop-filter: blur(12px);
126
- border-bottom: 1px solid rgb(229, 231, 233);
126
+ border-bottom: 1px solid var(--huyooo-border);
127
127
  display: flex;
128
128
  align-items: center;
129
129
  padding: 0 1rem;
@@ -140,8 +140,8 @@ const emit = defineEmits<{
140
140
  .file-toolbar-nav {
141
141
  display: flex;
142
142
  align-items: center;
143
- color: rgb(75, 85, 99);
144
- background: rgba(229, 231, 233, 0.5);
143
+ color: var(--huyooo-text-muted);
144
+ background: var(--huyooo-muted);
145
145
  border-radius: 0.5rem;
146
146
  padding: 0.125rem;
147
147
  flex-shrink: 0;
@@ -158,22 +158,22 @@ const emit = defineEmits<{
158
158
  display: flex;
159
159
  align-items: center;
160
160
  justify-content: center;
161
- color: rgb(31, 41, 55);
161
+ color: var(--huyooo-text);
162
162
  }
163
163
 
164
164
  .file-toolbar-button:hover:not(:disabled) {
165
- background: rgb(209, 213, 219);
165
+ background: var(--huyooo-muted-hover);
166
166
  }
167
167
 
168
168
  .file-toolbar-button:disabled {
169
- color: rgb(156, 163, 175);
169
+ color: var(--huyooo-text-disabled);
170
170
  cursor: default;
171
171
  }
172
172
 
173
173
  .file-toolbar-button--active {
174
- background: white;
175
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
176
- color: rgb(31, 41, 55);
174
+ background: var(--huyooo-surface-2);
175
+ box-shadow: var(--huyooo-shadow-sm);
176
+ color: var(--huyooo-text);
177
177
  }
178
178
 
179
179
  .file-toolbar-breadcrumb {
@@ -200,6 +200,39 @@ const emit = defineEmits<{
200
200
  -webkit-app-region: no-drag;
201
201
  }
202
202
 
203
+ /**
204
+ * 重要:Toolbar 的样式是 scoped,slot 传入的内容不会自动命中 `.file-toolbar-button`。
205
+ * 为了让宿主(example / 业务方)在 #actions 插槽里复用同名 class 时样式一致,
206
+ * 这里用 :deep() 补齐一份(对齐 React 版的表现)。
207
+ */
208
+ .file-toolbar-actions :deep(.file-toolbar-button) {
209
+ padding: 0.25rem;
210
+ border-radius: 0.375rem;
211
+ transition: all 200ms;
212
+ border: none;
213
+ background: transparent;
214
+ cursor: pointer;
215
+ display: flex;
216
+ align-items: center;
217
+ justify-content: center;
218
+ color: var(--huyooo-text);
219
+ }
220
+
221
+ .file-toolbar-actions :deep(.file-toolbar-button:hover:not(:disabled)) {
222
+ background: var(--huyooo-muted-hover);
223
+ }
224
+
225
+ .file-toolbar-actions :deep(.file-toolbar-button:disabled) {
226
+ color: var(--huyooo-text-disabled);
227
+ cursor: default;
228
+ }
229
+
230
+ .file-toolbar-actions :deep(.file-toolbar-button--active) {
231
+ background: var(--huyooo-surface-2);
232
+ box-shadow: var(--huyooo-shadow-sm);
233
+ color: var(--huyooo-text);
234
+ }
235
+
203
236
  .file-toolbar-search {
204
237
  position: relative;
205
238
  display: none;
@@ -216,16 +249,16 @@ const emit = defineEmits<{
216
249
  left: 0.625rem;
217
250
  top: 50%;
218
251
  transform: translateY(-50%);
219
- color: rgb(156, 163, 175);
252
+ color: var(--huyooo-text-disabled);
220
253
  transition: color 200ms;
221
254
  }
222
255
 
223
256
  .file-toolbar-search:focus-within .file-toolbar-search-icon {
224
- color: rgb(59, 130, 246);
257
+ color: var(--huyooo-primary);
225
258
  }
226
259
 
227
260
  .file-toolbar-search-input {
228
- background: rgb(243, 244, 246);
261
+ background: var(--huyooo-muted);
229
262
  border: 1px solid transparent;
230
263
  border-radius: 0.375rem;
231
264
  padding-left: 2rem;
@@ -236,36 +269,36 @@ const emit = defineEmits<{
236
269
  outline: none;
237
270
  transition: all 200ms;
238
271
  width: 8rem;
239
- color: rgb(55, 65, 81);
272
+ color: var(--huyooo-text);
240
273
  }
241
274
 
242
275
  .file-toolbar-search-input::placeholder {
243
- color: rgb(156, 163, 175);
276
+ color: var(--huyooo-text-disabled);
244
277
  }
245
278
 
246
279
  .file-toolbar-search-input:focus {
247
- background: white;
248
- border-color: rgb(96, 165, 250);
249
- box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);
280
+ background: var(--huyooo-surface-2);
281
+ border-color: var(--huyooo-primary);
282
+ box-shadow: 0 0 0 2px var(--huyooo-focus-ring);
250
283
  width: 12rem;
251
284
  }
252
285
 
253
286
  .file-toolbar-view-toggle {
254
287
  display: flex;
255
288
  align-items: center;
256
- background: rgba(229, 231, 233, 0.5);
289
+ background: var(--huyooo-muted);
257
290
  border-radius: 0.5rem;
258
291
  padding: 0.125rem;
259
- color: rgb(75, 85, 99);
292
+ color: var(--huyooo-text-muted);
260
293
  }
261
294
 
262
295
  .file-toolbar-view-toggle .file-toolbar-button--active {
263
- background: white;
264
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
265
- color: rgb(31, 41, 55);
296
+ background: var(--huyooo-surface-2);
297
+ box-shadow: var(--huyooo-shadow-sm);
298
+ color: var(--huyooo-text);
266
299
  }
267
300
 
268
301
  .file-toolbar-view-toggle .file-toolbar-button:not(.file-toolbar-button--active):hover {
269
- background: rgba(209, 213, 219, 0.5);
302
+ background: var(--huyooo-muted-hover);
270
303
  }
271
304
  </style>
@@ -317,7 +317,7 @@ onMounted(() => {
317
317
  position: fixed;
318
318
  inset: 0;
319
319
  z-index: 100;
320
- background: rgba(0, 0, 0, 0.3);
320
+ background: var(--huyooo-overlay);
321
321
  animation: fade-in 200ms ease-out;
322
322
  display: flex;
323
323
  align-items: center;
@@ -328,10 +328,10 @@ onMounted(() => {
328
328
  position: absolute;
329
329
  display: flex;
330
330
  flex-direction: column;
331
- background: rgba(255, 255, 255, 0.95);
331
+ background: var(--huyooo-panel-bg);
332
332
  backdrop-filter: blur(24px);
333
- border: 1px solid rgb(229, 231, 233);
334
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
333
+ border: 1px solid var(--huyooo-border);
334
+ box-shadow: var(--huyooo-shadow-lg);
335
335
  border-radius: 0.5rem;
336
336
  overflow: hidden;
337
337
  animation: window-fade-in 200ms ease-out;
@@ -343,10 +343,10 @@ onMounted(() => {
343
343
  align-items: center;
344
344
  justify-content: space-between;
345
345
  padding: 0 0.75rem;
346
- border-bottom: 1px solid rgb(229, 231, 233);
346
+ border-bottom: 1px solid var(--huyooo-border);
347
347
  flex-shrink: 0;
348
348
  user-select: none;
349
- background: rgba(249, 250, 251, 0.8);
349
+ background: var(--huyooo-surface);
350
350
  z-index: 20;
351
351
  cursor: grab;
352
352
  }
@@ -369,7 +369,7 @@ onMounted(() => {
369
369
  align-items: center;
370
370
  justify-content: center;
371
371
  border: 1px solid;
372
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
372
+ box-shadow: var(--huyooo-shadow-sm);
373
373
  outline: none;
374
374
  cursor: pointer;
375
375
  padding: 0;
@@ -393,22 +393,22 @@ onMounted(() => {
393
393
  }
394
394
 
395
395
  .window-control-button--close {
396
- background-color: rgb(255, 95, 87);
397
- border-color: rgb(224, 68, 62);
396
+ background-color: var(--huyooo-window-close-bg);
397
+ border-color: var(--huyooo-window-close-border);
398
398
  }
399
399
 
400
400
  .window-control-button--minimize {
401
- background-color: rgb(254, 188, 46);
402
- border-color: rgb(216, 158, 36);
401
+ background-color: var(--huyooo-window-minimize-bg);
402
+ border-color: var(--huyooo-window-minimize-border);
403
403
  }
404
404
 
405
405
  .window-control-button--maximize {
406
- background-color: rgb(40, 200, 64);
407
- border-color: rgb(26, 171, 41);
406
+ background-color: var(--huyooo-window-maximize-bg);
407
+ border-color: var(--huyooo-window-maximize-border);
408
408
  }
409
409
 
410
410
  .window-control-icon {
411
- color: rgba(0, 0, 0, 0.5);
411
+ color: var(--huyooo-window-control-icon);
412
412
  opacity: 0;
413
413
  transition: opacity 200ms;
414
414
  width: 7px;
@@ -421,15 +421,15 @@ onMounted(() => {
421
421
  }
422
422
 
423
423
  .window-control-button--close:hover {
424
- background-color: rgba(255, 95, 87, 0.8);
424
+ background-color: color-mix(in srgb, var(--huyooo-window-close-bg) 80%, transparent);
425
425
  }
426
426
 
427
427
  .window-control-button--minimize:hover {
428
- background-color: rgba(254, 188, 46, 0.8);
428
+ background-color: color-mix(in srgb, var(--huyooo-window-minimize-bg) 80%, transparent);
429
429
  }
430
430
 
431
431
  .window-control-button--maximize:hover {
432
- background-color: rgba(40, 200, 64, 0.8);
432
+ background-color: color-mix(in srgb, var(--huyooo-window-maximize-bg) 80%, transparent);
433
433
  }
434
434
 
435
435
  .window-title-info {
@@ -446,7 +446,7 @@ onMounted(() => {
446
446
  .window-title-text {
447
447
  font-weight: 500;
448
448
  font-size: 0.75rem;
449
- color: rgb(75, 85, 99);
449
+ color: var(--huyooo-text-muted);
450
450
  overflow: hidden;
451
451
  text-overflow: ellipsis;
452
452
  white-space: nowrap;
package/src/index.ts CHANGED
@@ -1,3 +1,6 @@
1
+ // 主题 token(全局 CSS 变量)
2
+ import './styles.css';
3
+
1
4
  // Types
2
5
  export * from './types';
3
6
 
package/src/styles.css ADDED
@@ -0,0 +1,149 @@
1
+ /**
2
+ * File Explorer Frontend - 全局主题 token
3
+ *
4
+ * 主题协议(跨项目统一):
5
+ * - 使用 document.documentElement 的 data-theme = light | dark
6
+ * - 默认跟随系统 prefers-color-scheme
7
+ *
8
+ * 说明:
9
+ * - 组件样式尽量使用 var(--huyooo-*),避免硬编码颜色
10
+ */
11
+
12
+ :root {
13
+ color-scheme: light;
14
+
15
+ --huyooo-bg: #ffffff;
16
+ --huyooo-surface: rgba(249, 250, 251, 0.9);
17
+ --huyooo-surface-2: #ffffff;
18
+ --huyooo-muted: rgba(229, 231, 233, 0.5);
19
+ --huyooo-muted-hover: rgba(209, 213, 219, 0.8);
20
+ --huyooo-border: rgb(229, 231, 233);
21
+ --huyooo-text: rgb(31, 41, 55);
22
+ --huyooo-text-muted: rgb(75, 85, 99);
23
+ --huyooo-text-disabled: rgb(156, 163, 175);
24
+ --huyooo-primary: rgb(59, 130, 246);
25
+ --huyooo-focus-ring: rgba(59, 130, 246, 0.12);
26
+ --huyooo-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
27
+ --huyooo-scrollbar: rgba(0, 0, 0, 0.2);
28
+ --huyooo-scrollbar-hover: rgba(0, 0, 0, 0.3);
29
+ --huyooo-danger: rgb(220, 38, 38);
30
+ --huyooo-success: rgb(22, 163, 74);
31
+ --huyooo-warning: rgb(245, 158, 11);
32
+ --huyooo-danger-bg: rgba(254, 242, 242, 0.9);
33
+ --huyooo-danger-border: rgba(254, 202, 202, 0.9);
34
+ --huyooo-success-bg: rgba(240, 253, 244, 0.9);
35
+ --huyooo-success-border: rgba(187, 247, 208, 0.9);
36
+ --huyooo-warning-bg: rgba(255, 251, 235, 0.92);
37
+ --huyooo-warning-border: rgba(253, 230, 138, 0.9);
38
+ --huyooo-overlay: rgba(0, 0, 0, 0.5);
39
+ --huyooo-panel-bg: rgba(255, 255, 255, 0.95);
40
+ --huyooo-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
41
+ --huyooo-code-bg: #111827;
42
+ --huyooo-code-text: #e5e7eb;
43
+ --huyooo-menu-bg: rgba(255, 255, 255, 0.95);
44
+ --huyooo-menu-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.15), 0 4px 6px -2px rgba(0, 0, 0, 0.1);
45
+
46
+ /* on-primary text colors (selected state etc.) */
47
+ --huyooo-on-primary: #ffffff;
48
+ --huyooo-on-primary-muted: rgba(255, 255, 255, 0.8);
49
+
50
+ /* filetype colors (FileInfoDialog / FileIcon) */
51
+ --huyooo-filetype-folder: #dcb67a;
52
+ --huyooo-filetype-image: #7ec699;
53
+ --huyooo-filetype-video: #c678dd;
54
+ --huyooo-filetype-music: #e06c75;
55
+ --huyooo-filetype-document: #61afef;
56
+ --huyooo-filetype-code: #98c379;
57
+ --huyooo-filetype-archive: #d19a66;
58
+ --huyooo-filetype-file: #abb2bf;
59
+
60
+ /* macOS window control colors (for Window component) */
61
+ --huyooo-window-close-bg: rgb(255, 95, 87);
62
+ --huyooo-window-close-border: rgb(224, 68, 62);
63
+ --huyooo-window-minimize-bg: rgb(254, 188, 46);
64
+ --huyooo-window-minimize-border: rgb(216, 158, 36);
65
+ --huyooo-window-maximize-bg: rgb(40, 200, 64);
66
+ --huyooo-window-maximize-border: rgb(26, 171, 41);
67
+ --huyooo-window-control-icon: rgba(0, 0, 0, 0.5);
68
+
69
+ /* media overlay helpers */
70
+ --huyooo-overlay-strong: rgba(0, 0, 0, 0.85);
71
+ }
72
+
73
+ @media (prefers-color-scheme: dark) {
74
+ :root {
75
+ color-scheme: dark;
76
+
77
+ /* 暗色:统一采用 ai-chat 的经典暗色配色(更耐看) */
78
+ --huyooo-bg: #27292c;
79
+ --huyooo-surface: #27292c;
80
+ --huyooo-surface-2: #252526;
81
+ --huyooo-muted: #2d2d2d;
82
+ --huyooo-muted-hover: #3c3c3c;
83
+ --huyooo-border: #333;
84
+ --huyooo-text: #ccc;
85
+ --huyooo-text-muted: #888;
86
+ --huyooo-text-disabled: #666;
87
+ --huyooo-primary: #2563eb;
88
+ --huyooo-focus-ring: rgba(37, 99, 235, 0.18);
89
+ --huyooo-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.35);
90
+ --huyooo-scrollbar: rgba(255, 255, 255, 0.2);
91
+ --huyooo-scrollbar-hover: rgba(255, 255, 255, 0.3);
92
+ --huyooo-danger: #ef4444;
93
+ --huyooo-success: #22c55e;
94
+ --huyooo-warning: #f59e0b;
95
+ --huyooo-danger-bg: rgba(239, 68, 68, 0.12);
96
+ --huyooo-danger-border: rgba(239, 68, 68, 0.25);
97
+ --huyooo-success-bg: rgba(34, 197, 94, 0.12);
98
+ --huyooo-success-border: rgba(34, 197, 94, 0.25);
99
+ --huyooo-warning-bg: rgba(245, 158, 11, 0.12);
100
+ --huyooo-warning-border: rgba(245, 158, 11, 0.25);
101
+ --huyooo-overlay: rgba(0, 0, 0, 0.6);
102
+ --huyooo-panel-bg: #252526;
103
+ --huyooo-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
104
+ --huyooo-code-bg: #1f2937;
105
+ --huyooo-code-text: #e5e7eb;
106
+ --huyooo-menu-bg: #252526;
107
+ --huyooo-menu-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.45), 0 4px 6px -2px rgba(0, 0, 0, 0.35);
108
+ }
109
+ }
110
+
111
+ :root[data-theme="light"] {
112
+ color-scheme: light;
113
+ }
114
+
115
+ :root[data-theme="dark"] {
116
+ color-scheme: dark;
117
+
118
+ /* 暗色:统一采用 ai-chat 的经典暗色配色(更耐看) */
119
+ --huyooo-bg: #27292c;
120
+ --huyooo-surface: #27292c;
121
+ --huyooo-surface-2: #252526;
122
+ --huyooo-muted: #2d2d2d;
123
+ --huyooo-muted-hover: #3c3c3c;
124
+ --huyooo-border: #333;
125
+ --huyooo-text: #ccc;
126
+ --huyooo-text-muted: #888;
127
+ --huyooo-text-disabled: #666;
128
+ --huyooo-primary: #2563eb;
129
+ --huyooo-focus-ring: rgba(37, 99, 235, 0.18);
130
+ --huyooo-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.35);
131
+ --huyooo-scrollbar: rgba(255, 255, 255, 0.2);
132
+ --huyooo-scrollbar-hover: rgba(255, 255, 255, 0.3);
133
+ --huyooo-danger: #ef4444;
134
+ --huyooo-success: #22c55e;
135
+ --huyooo-warning: #f59e0b;
136
+ --huyooo-danger-bg: rgba(239, 68, 68, 0.12);
137
+ --huyooo-danger-border: rgba(239, 68, 68, 0.25);
138
+ --huyooo-success-bg: rgba(34, 197, 94, 0.12);
139
+ --huyooo-success-border: rgba(34, 197, 94, 0.25);
140
+ --huyooo-warning-bg: rgba(245, 158, 11, 0.12);
141
+ --huyooo-warning-border: rgba(245, 158, 11, 0.25);
142
+ --huyooo-overlay: rgba(0, 0, 0, 0.6);
143
+ --huyooo-panel-bg: #252526;
144
+ --huyooo-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
145
+ --huyooo-code-bg: #1f2937;
146
+ --huyooo-code-text: #e5e7eb;
147
+ --huyooo-menu-bg: #252526;
148
+ --huyooo-menu-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.45), 0 4px 6px -2px rgba(0, 0, 0, 0.35);
149
+ }