codexmate 0.0.19 → 0.0.20

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 (67) hide show
  1. package/README.en.md +8 -4
  2. package/README.md +8 -4
  3. package/cli/config-health.js +338 -0
  4. package/cli.js +1136 -584
  5. package/lib/cli-models-utils.js +186 -27
  6. package/lib/cli-network-utils.js +117 -101
  7. package/package.json +8 -1
  8. package/web-ui/app.js +381 -5532
  9. package/web-ui/index.html +15 -2231
  10. package/web-ui/logic.agents-diff.mjs +386 -0
  11. package/web-ui/logic.claude.mjs +108 -0
  12. package/web-ui/logic.mjs +5 -793
  13. package/web-ui/logic.runtime.mjs +124 -0
  14. package/web-ui/logic.sessions.mjs +263 -0
  15. package/web-ui/modules/api.mjs +69 -0
  16. package/web-ui/modules/app.computed.dashboard.mjs +113 -0
  17. package/web-ui/modules/app.computed.index.mjs +13 -0
  18. package/web-ui/modules/app.computed.session.mjs +141 -0
  19. package/web-ui/modules/app.constants.mjs +15 -0
  20. package/web-ui/modules/app.methods.agents.mjs +493 -0
  21. package/web-ui/modules/app.methods.claude-config.mjs +174 -0
  22. package/web-ui/modules/app.methods.codex-config.mjs +640 -0
  23. package/web-ui/modules/app.methods.index.mjs +86 -0
  24. package/web-ui/modules/app.methods.install.mjs +157 -0
  25. package/web-ui/modules/app.methods.navigation.mjs +478 -0
  26. package/web-ui/modules/app.methods.openclaw-core.mjs +514 -0
  27. package/web-ui/modules/app.methods.openclaw-editing.mjs +337 -0
  28. package/web-ui/modules/app.methods.openclaw-persist.mjs +251 -0
  29. package/web-ui/modules/app.methods.providers.mjs +265 -0
  30. package/web-ui/modules/app.methods.runtime.mjs +323 -0
  31. package/web-ui/modules/app.methods.session-actions.mjs +457 -0
  32. package/web-ui/modules/app.methods.session-browser.mjs +435 -0
  33. package/web-ui/modules/app.methods.session-timeline.mjs +441 -0
  34. package/web-ui/modules/app.methods.session-trash.mjs +419 -0
  35. package/web-ui/modules/app.methods.startup-claude.mjs +406 -0
  36. package/web-ui/partials/index/layout-footer.html +69 -0
  37. package/web-ui/partials/index/layout-header.html +337 -0
  38. package/web-ui/partials/index/modal-config-template-agents.html +125 -0
  39. package/web-ui/partials/index/modal-confirm-toast.html +32 -0
  40. package/web-ui/partials/index/modal-health-check.html +72 -0
  41. package/web-ui/partials/index/modal-openclaw-config.html +275 -0
  42. package/web-ui/partials/index/modal-skills.html +184 -0
  43. package/web-ui/partials/index/modals-basic.html +196 -0
  44. package/web-ui/partials/index/panel-config-claude.html +100 -0
  45. package/web-ui/partials/index/panel-config-codex.html +237 -0
  46. package/web-ui/partials/index/panel-config-openclaw.html +84 -0
  47. package/web-ui/partials/index/panel-market.html +174 -0
  48. package/web-ui/partials/index/panel-sessions.html +387 -0
  49. package/web-ui/partials/index/panel-settings.html +166 -0
  50. package/web-ui/source-bundle.cjs +233 -0
  51. package/web-ui/styles/base-theme.css +373 -0
  52. package/web-ui/styles/controls-forms.css +354 -0
  53. package/web-ui/styles/feedback.css +108 -0
  54. package/web-ui/styles/health-check-dialog.css +144 -0
  55. package/web-ui/styles/layout-shell.css +330 -0
  56. package/web-ui/styles/modals-core.css +449 -0
  57. package/web-ui/styles/navigation-panels.css +381 -0
  58. package/web-ui/styles/openclaw-structured.css +266 -0
  59. package/web-ui/styles/responsive.css +416 -0
  60. package/web-ui/styles/sessions-list.css +414 -0
  61. package/web-ui/styles/sessions-preview.css +405 -0
  62. package/web-ui/styles/sessions-toolbar-trash.css +243 -0
  63. package/web-ui/styles/sessions-usage.css +276 -0
  64. package/web-ui/styles/skills-list.css +298 -0
  65. package/web-ui/styles/skills-market.css +335 -0
  66. package/web-ui/styles/titles-cards.css +407 -0
  67. package/web-ui/styles.css +16 -4668
package/web-ui/styles.css CHANGED
@@ -1,4668 +1,16 @@
1
- @import url('https://fonts.googleapis.com/css2?family=Fira+Mono:wght@400;500&family=JetBrains+Mono:wght@400;500&family=Source+Sans+3:wght@400;500;600&family=Space+Grotesk:wght@400;500;600;700&display=swap');
2
-
3
- /* ============================================
4
- 设计系统 - Design Tokens
5
- ============================================ */
6
- :root {
7
- /* 色彩系统:去除杂纹,强调干净留白与温柔橙红 */
8
- --color-brand: #D0583A;
9
- --color-brand-dark: #B8442B;
10
- --color-brand-light: rgba(208, 88, 58, 0.14);
11
- --color-brand-subtle: rgba(201, 94, 75, 0.2);
12
-
13
- --color-bg: #F8F2EA;
14
- --color-surface: #FFFDFC;
15
- --color-surface-alt: #FFF8F2;
16
- --color-surface-elevated: #FFFFFF;
17
- --color-surface-tint: rgba(255, 255, 255, 0.84);
18
- --color-text-primary: #1B1714;
19
- --color-text-secondary: #473C34;
20
- --color-text-tertiary: #6F6054;
21
- --color-text-muted: #6C5B50;
22
- --color-border: #D8C9B8;
23
- --color-border-soft: rgba(216, 201, 184, 0.38);
24
- --color-border-strong: rgba(216, 201, 184, 0.68);
25
-
26
- --color-success: #4B8B6A;
27
- --color-error: #C44536;
28
-
29
- --bg-warm-gradient:
30
- linear-gradient(180deg, #F8F2EA 0%, #F8F2EA 100%);
31
-
32
- /* 字体系统 */
33
- --font-family-body: 'JetBrainsMono Nerd Font Mono', 'OPPO Sans 4.0', 'Fira Mono', 'JetBrains Mono', 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', monospace;
34
- --font-family-display: 'JetBrainsMono Nerd Font Mono', 'OPPO Sans 4.0', 'Fira Mono', 'JetBrains Mono', 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', monospace;
35
- --font-family-mono: 'JetBrainsMono Nerd Font Mono', 'OPPO Sans 4.0', 'Fira Mono', 'JetBrains Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', monospace;
36
- --font-family: var(--font-family-body);
37
-
38
- --font-size-display: 52px;
39
- --font-size-title: 18px;
40
- --font-size-large: 20px;
41
- --font-size-body: 15px;
42
- --font-size-secondary: 13px;
43
- --font-size-caption: 11px;
44
-
45
- --font-weight-display: 600;
46
- --font-weight-primary: 600;
47
- --font-weight-title: 600;
48
- --font-weight-body: 400;
49
- --font-weight-secondary: 500;
50
- --font-weight-caption: 500;
51
-
52
- --line-height-tight: 1.12;
53
- --line-height-normal: 1.5;
54
-
55
- /* 间距系统 */
56
- --spacing-xs: 8px;
57
- --spacing-sm: 16px;
58
- --spacing-md: 24px;
59
- --spacing-lg: 40px;
60
- --spacing-xl: 64px;
61
-
62
- /* 圆角系统 */
63
- --radius-sm: 8px;
64
- --radius-md: 10px;
65
- --radius-lg: 12px;
66
- --radius-xl: 18px;
67
- --radius-full: 50px;
68
-
69
- /* 阴影系统 - 多层叠加提升真实感 */
70
- --shadow-subtle: 0 1px 2px rgba(31, 26, 23, 0.03);
71
- --shadow-card: 0 6px 18px rgba(31, 26, 23, 0.06);
72
- --shadow-card-hover: 0 10px 24px rgba(31, 26, 23, 0.08);
73
- --shadow-float: 0 12px 26px rgba(31, 26, 23, 0.12);
74
- --shadow-raised: 0 10px 20px rgba(31, 26, 23, 0.1);
75
- --shadow-modal:
76
- 0 8px 24px rgba(31, 26, 23, 0.08),
77
- 0 24px 64px rgba(31, 26, 23, 0.06);
78
- --shadow-input-focus:
79
- 0 0 0 3px var(--color-brand-light),
80
- 0 1px 3px rgba(31, 26, 23, 0.04);
81
-
82
- /* 动画 - 更细腻的曲线 */
83
- --transition-instant: 100ms;
84
- --transition-fast: 120ms;
85
- --transition-normal: 200ms;
86
- --transition-slow: 300ms;
87
- --ease-spring: cubic-bezier(0.16, 1, 0.3, 1);
88
- --ease-spring-soft: cubic-bezier(0.25, 1, 0.5, 1);
89
- --ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);
90
- --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
91
- }
92
-
93
- /* ============================================
94
- 手机桌面 UA 兜底:触控设备强制紧凑排版
95
- ============================================ */
96
- body.force-compact {
97
- --font-size-title: 20px;
98
- --font-size-body: 16px;
99
- --font-size-secondary: 14px;
100
- --font-size-caption: 12px;
101
- }
102
-
103
- body.force-compact .container {
104
- max-width: 760px;
105
- padding: 10px 10px 16px;
106
- }
107
-
108
- body.force-compact .provider-fast-switch {
109
- position: sticky;
110
- top: 8px;
111
- z-index: 16;
112
- }
113
-
114
- body.force-compact .provider-fast-switch-select {
115
- min-height: 44px;
116
- font-size: 16px;
117
- }
118
-
119
- body.force-compact .app-shell {
120
- grid-template-columns: 1fr;
121
- gap: 12px;
122
- }
123
-
124
- body.force-compact .main-panel {
125
- position: relative;
126
- top: auto;
127
- align-self: stretch;
128
- width: 100%;
129
- height: auto;
130
- }
131
-
132
- body.force-compact .side-rail,
133
- body.force-compact .status-inspector {
134
- display: none;
135
- }
136
-
137
- body.force-compact .top-tabs {
138
- display: grid !important;
139
- grid-template-columns: repeat(1, minmax(0, 1fr));
140
- }
141
-
142
- @media (min-width: 541px) {
143
- body.force-compact .top-tabs {
144
- grid-template-columns: repeat(2, minmax(0, 1fr));
145
- }
146
- }
147
-
148
- body.force-compact .hero-logo {
149
- display: block;
150
- }
151
-
152
- body.force-compact .hero-github {
153
- display: flex;
154
- }
155
-
156
- body.force-compact .main-panel {
157
- padding: 14px 12px;
158
- }
159
-
160
- body.force-compact .hero-title {
161
- font-size: 34px;
162
- }
163
-
164
- body.force-compact .card {
165
- display: flex;
166
- flex-direction: column;
167
- align-items: flex-start;
168
- justify-content: flex-start;
169
- padding: 12px;
170
- gap: 8px;
171
- }
172
-
173
- body.force-compact .card-leading {
174
- align-items: flex-start;
175
- width: 100%;
176
- }
177
-
178
- body.force-compact .card-content {
179
- width: 100%;
180
- }
181
-
182
- body.force-compact .card-title,
183
- body.force-compact .card-title > span:first-child {
184
- white-space: normal;
185
- overflow: visible;
186
- text-overflow: clip;
187
- overflow-wrap: anywhere;
188
- }
189
-
190
- body.force-compact .card-subtitle {
191
- white-space: normal;
192
- overflow: hidden;
193
- text-overflow: clip;
194
- overflow-wrap: anywhere;
195
- display: -webkit-box;
196
- -webkit-line-clamp: 2;
197
- -webkit-box-orient: vertical;
198
- }
199
-
200
- body.force-compact .card-trailing {
201
- width: 100%;
202
- margin-top: 0;
203
- grid-auto-flow: row;
204
- grid-auto-columns: 1fr;
205
- justify-content: stretch;
206
- justify-items: end;
207
- }
208
-
209
- body.force-compact .card-trailing .card-actions {
210
- width: 100%;
211
- justify-content: flex-end;
212
- justify-self: stretch;
213
- flex-wrap: wrap;
214
- }
215
-
216
- body.force-compact .card-actions {
217
- opacity: 1;
218
- transform: none;
219
- }
220
-
221
- body.force-compact .card-trailing .pill,
222
- body.force-compact .card-trailing .latency {
223
- justify-self: end;
224
- }
225
-
226
- body.force-compact .btn-add,
227
- body.force-compact .btn-tool,
228
- body.force-compact .card-action-btn {
229
- min-height: 44px;
230
- }
231
-
232
- /* ============================================
233
- 基础重置
234
- ============================================ */
235
- * {
236
- margin: 0;
237
- padding: 0;
238
- box-sizing: border-box;
239
- }
240
-
241
- /* 仅屏幕阅读器可见 */
242
- .sr-only {
243
- position: absolute;
244
- width: 1px;
245
- height: 1px;
246
- padding: 0;
247
- margin: -1px;
248
- overflow: hidden;
249
- clip: rect(0, 0, 0, 0);
250
- white-space: nowrap;
251
- border: 0;
252
- }
253
-
254
- body {
255
- font-family: var(--font-family-body);
256
- background-color: var(--color-bg);
257
- background: var(--bg-warm-gradient);
258
- color: var(--color-text-primary);
259
- display: flex;
260
- justify-content: center;
261
- align-items: center;
262
- min-height: 100vh;
263
- padding: var(--spacing-lg) var(--spacing-md);
264
- -webkit-font-smoothing: antialiased;
265
- -moz-osx-font-smoothing: grayscale;
266
- position: relative;
267
- overflow-x: hidden;
268
- }
269
-
270
- .fab-install {
271
- position: fixed;
272
- left: 16px;
273
- bottom: calc(16px + env(safe-area-inset-bottom, 0px));
274
- z-index: 90;
275
- display: inline-grid;
276
- place-items: center;
277
- width: 50px;
278
- height: 50px;
279
- min-width: 44px;
280
- min-height: 44px;
281
- padding: 0;
282
- border-radius: var(--radius-full);
283
- border: 1px solid rgba(255, 255, 255, 0.28);
284
- background:
285
- linear-gradient(135deg, rgba(255, 255, 255, 0.18) 0%, rgba(255, 255, 255, 0.04) 100%),
286
- linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
287
- color: #fff;
288
- font-size: var(--font-size-secondary);
289
- font-weight: var(--font-weight-secondary);
290
- letter-spacing: 0.015em;
291
- box-shadow: var(--shadow-float);
292
- cursor: pointer;
293
- overflow: hidden;
294
- transition:
295
- transform var(--transition-fast) var(--ease-spring),
296
- box-shadow var(--transition-fast) var(--ease-spring),
297
- filter var(--transition-fast) var(--ease-smooth);
298
- animation: fabPulse 3.2s ease-in-out infinite;
299
- }
300
-
301
- .fab-install::after {
302
- content: "";
303
- position: absolute;
304
- inset: 1px;
305
- border-radius: inherit;
306
- border: 1px solid rgba(255, 255, 255, 0.12);
307
- pointer-events: none;
308
- }
309
-
310
- .fab-install-icon {
311
- width: 20px;
312
- height: 20px;
313
- display: inline-grid;
314
- place-items: center;
315
- color: #fff;
316
- background: transparent;
317
- box-shadow: none;
318
- flex-shrink: 0;
319
- }
320
-
321
- .fab-install-icon svg {
322
- width: 18px;
323
- height: 18px;
324
- }
325
-
326
- .fab-install:hover {
327
- transform: translateY(-1px);
328
- box-shadow: var(--shadow-raised);
329
- filter: saturate(1.04);
330
- }
331
-
332
- .fab-install:active {
333
- transform: translateY(0);
334
- filter: saturate(0.98);
335
- }
336
-
337
- @media (max-width: 640px) {
338
- .fab-install {
339
- left: 12px;
340
- bottom: calc(12px + env(safe-area-inset-bottom, 0px));
341
- width: 44px;
342
- height: 44px;
343
- padding: 0;
344
- font-size: var(--font-size-secondary);
345
- }
346
-
347
- .fab-install-icon {
348
- width: 18px;
349
- height: 18px;
350
- }
351
-
352
- .fab-install-icon svg {
353
- width: 16px;
354
- height: 16px;
355
- }
356
- }
357
-
358
- @keyframes fabPulse {
359
- 0%,
360
- 100% {
361
- box-shadow: var(--shadow-float);
362
- }
363
- 50% {
364
- box-shadow: 0 14px 30px rgba(31, 26, 23, 0.14);
365
- }
366
- }
367
-
368
- @media (prefers-reduced-motion: reduce) {
369
- .fab-install {
370
- animation: none;
371
- transition: none;
372
- }
373
- }
374
-
375
- /* ============================================
376
- 容器
377
- ============================================ */
378
- body::before {
379
- content: "";
380
- position: fixed;
381
- inset: 0;
382
- background-image:
383
- linear-gradient(180deg, rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0));
384
- opacity: 0.16;
385
- pointer-events: none;
386
- z-index: 0;
387
- }
388
-
389
- /* 背景网格 */
390
- body::after {
391
- content: "";
392
- position: fixed;
393
- inset: 0;
394
- background-image:
395
- linear-gradient(90deg, rgba(255, 255, 255, 0.08) 1px, transparent 1px),
396
- linear-gradient(0deg, rgba(255, 255, 255, 0.06) 1px, transparent 1px);
397
- background-size: 180px 180px;
398
- opacity: 0.08;
399
- pointer-events: none;
400
- z-index: 0;
401
- }
402
-
403
- /* ============================================
404
- 容器
405
- ============================================ */
406
- .container {
407
- width: 100%;
408
- max-width: 2200px;
409
- margin: 0 auto;
410
- padding: 16px 12px 28px;
411
- position: relative;
412
- z-index: 1;
413
- }
414
-
415
- /* ============================================
416
- 布局:三栏(侧栏 + 主区 + 状态检查器)
417
- ============================================ */
418
- .app-shell {
419
- display: grid;
420
- grid-template-columns: 260px minmax(0, 1fr) 340px;
421
- gap: 16px;
422
- align-items: flex-start;
423
- }
424
-
425
- .app-shell.standalone {
426
- grid-template-columns: 1fr;
427
- }
428
-
429
- .side-rail {
430
- position: sticky;
431
- top: var(--spacing-md);
432
- align-self: start;
433
- display: flex;
434
- flex-direction: column;
435
- gap: var(--spacing-sm);
436
- padding: var(--spacing-md) var(--spacing-sm);
437
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.95) 0%, rgba(255, 250, 245, 0.9) 100%);
438
- border: 1px solid rgba(216, 201, 184, 0.65);
439
- border-radius: var(--radius-xl);
440
- box-shadow: var(--shadow-card);
441
- min-height: 420px;
442
- }
443
-
444
- .side-rail .brand-title {
445
- font-size: 24px;
446
- margin-bottom: 2px;
447
- }
448
-
449
- .side-section {
450
- display: flex;
451
- flex-direction: column;
452
- gap: 10px;
453
- }
454
-
455
- .side-section-title {
456
- font-size: var(--font-size-secondary);
457
- font-weight: var(--font-weight-secondary);
458
- color: var(--color-text-tertiary);
459
- letter-spacing: 0.01em;
460
- padding: 0 var(--spacing-xs);
461
- }
462
-
463
- .side-item {
464
- width: 100%;
465
- text-align: left;
466
- padding: 12px var(--spacing-sm);
467
- border-radius: var(--radius-lg);
468
- border: 1px solid var(--color-border-soft);
469
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 247, 240, 0.95) 100%);
470
- color: var(--color-text-secondary);
471
- cursor: pointer;
472
- transition: none;
473
- display: flex;
474
- flex-direction: column;
475
- gap: 6px;
476
- box-shadow: var(--shadow-subtle);
477
- }
478
-
479
- .side-item:hover {
480
- border-color: var(--color-brand);
481
- color: var(--color-text-primary);
482
- transform: translateY(-1px);
483
- box-shadow: var(--shadow-card-hover);
484
- }
485
-
486
- .side-item.active {
487
- border-color: var(--color-brand);
488
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.14), rgba(255, 255, 255, 0.96));
489
- color: var(--color-text-primary);
490
- box-shadow: var(--shadow-float);
491
- }
492
-
493
- .side-item.nav-intent-active {
494
- border-color: var(--color-brand);
495
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.14), rgba(255, 255, 255, 0.96));
496
- color: var(--color-text-primary);
497
- box-shadow: var(--shadow-float);
498
- }
499
-
500
- .side-item.nav-intent-inactive,
501
- .side-item.active.nav-intent-inactive {
502
- border-color: var(--color-border-soft);
503
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 247, 240, 0.95) 100%);
504
- color: var(--color-text-secondary);
505
- box-shadow: var(--shadow-subtle);
506
- }
507
-
508
- .side-item-title {
509
- font-size: var(--font-size-body);
510
- font-weight: var(--font-weight-secondary);
511
- letter-spacing: -0.01em;
512
- }
513
-
514
- .side-item-meta {
515
- font-size: var(--font-size-caption);
516
- color: var(--color-text-tertiary);
517
- display: flex;
518
- gap: 8px;
519
- flex-wrap: wrap;
520
- }
521
-
522
- .side-item-meta > span {
523
- min-width: 0;
524
- overflow-wrap: anywhere;
525
- word-break: break-word;
526
- }
527
-
528
- .top-tabs {
529
- display: none !important;
530
- }
531
-
532
- .brand-block {
533
- display: grid;
534
- grid-template-columns: 48px 1fr;
535
- grid-template-rows: auto auto;
536
- column-gap: var(--spacing-sm);
537
- row-gap: 2px;
538
- align-items: center;
539
- margin-bottom: var(--spacing-md);
540
- }
541
-
542
- .brand-logo-wrap {
543
- width: 48px;
544
- height: 48px;
545
- border-radius: 14px;
546
- background: rgba(208, 88, 58, 0.08);
547
- border: 1px solid var(--color-border-soft);
548
- display: grid;
549
- place-items: center;
550
- box-shadow: var(--shadow-subtle);
551
- flex-shrink: 0;
552
- grid-row: 1 / span 2;
553
- }
554
-
555
- .brand-logo {
556
- width: 34px;
557
- height: 34px;
558
- object-fit: contain;
559
- display: block;
560
- }
561
-
562
- .brand-title {
563
- font-size: 30px;
564
- line-height: 1.05;
565
- font-family: var(--font-family-display);
566
- color: var(--color-text-primary);
567
- letter-spacing: -0.02em;
568
- }
569
-
570
- .brand-title .accent {
571
- color: var(--color-brand);
572
- }
573
-
574
- .brand-subtitle {
575
- margin-top: 8px;
576
- font-size: var(--font-size-secondary);
577
- color: var(--color-text-tertiary);
578
- line-height: 1.45;
579
- }
580
-
581
- .github-badge {
582
- grid-column: 2;
583
- display: inline-flex;
584
- align-items: center;
585
- justify-content: space-between;
586
- gap: 10px;
587
- margin-top: 6px;
588
- padding: 6px 10px;
589
- border-radius: 999px;
590
- border: 1px solid var(--color-border-soft);
591
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0.72) 100%);
592
- color: var(--color-text-secondary);
593
- font-size: var(--font-size-caption);
594
- text-decoration: none;
595
- box-shadow: var(--shadow-subtle);
596
- transition: all var(--transition-fast) var(--ease-spring);
597
- min-width: 0;
598
- }
599
-
600
- .github-badge-rail {
601
- width: 100%;
602
- align-items: center;
603
- justify-content: flex-start;
604
- gap: 8px;
605
- padding: 6px 8px;
606
- border-radius: 10px;
607
- background: rgba(255, 255, 255, 0.8);
608
- border: 1px solid rgba(216, 201, 184, 0.5);
609
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7);
610
- }
611
-
612
- .github-badge:hover {
613
- border-color: rgba(201, 94, 75, 0.5);
614
- color: var(--color-text-primary);
615
- transform: translateY(-1px);
616
- box-shadow: 0 6px 12px rgba(27, 23, 20, 0.08);
617
- }
618
-
619
- .github-badge-icon {
620
- width: 16px;
621
- height: 16px;
622
- flex-shrink: 0;
623
- }
624
-
625
- .github-badge-left {
626
- display: inline-flex;
627
- align-items: center;
628
- gap: 6px;
629
- flex-shrink: 0;
630
- }
631
-
632
- .github-badge-label {
633
- font-size: var(--font-size-caption);
634
- font-weight: var(--font-weight-secondary);
635
- color: var(--color-text-secondary);
636
- }
637
-
638
- .github-badge-text {
639
- min-width: 0;
640
- font-family: var(--font-family-mono);
641
- font-size: var(--font-size-caption);
642
- color: var(--color-text-tertiary);
643
- line-height: 1.3;
644
- display: inline-block;
645
- overflow: hidden;
646
- text-overflow: ellipsis;
647
- white-space: nowrap;
648
- }
649
-
650
- .github-badge-text > span {
651
- white-space: nowrap;
652
- }
653
-
654
- .github-owner {
655
- font-weight: 600;
656
- color: var(--color-text-secondary);
657
- }
658
-
659
- .github-sep {
660
- margin: 0 2px;
661
- color: var(--color-text-tertiary);
662
- }
663
-
664
- .github-repo {
665
- font-weight: 600;
666
- color: var(--color-text-primary);
667
- }
668
-
669
- .github-badge-rail .github-badge-text {
670
- display: flex;
671
- flex-direction: column;
672
- align-items: flex-start;
673
- gap: 2px;
674
- white-space: normal;
675
- overflow: visible;
676
- text-overflow: clip;
677
- color: var(--color-text-secondary);
678
- }
679
-
680
- .github-badge-rail .github-sep {
681
- display: none;
682
- }
683
-
684
- .github-badge-rail .github-owner,
685
- .github-badge-rail .github-repo {
686
- font-weight: 600;
687
- }
688
-
689
- .github-badge-rail .github-badge-left {
690
- padding: 4px;
691
- border-radius: 999px;
692
- background: rgba(201, 94, 75, 0.12);
693
- }
694
-
695
- .github-badge-rail .github-badge-label {
696
- display: none;
697
- }
698
-
699
- .github-badge-rail:hover {
700
- transform: translateY(-1px);
701
- border-color: rgba(201, 94, 75, 0.5);
702
- }
703
-
704
- .main-tabs {
705
- display: flex;
706
- gap: 10px;
707
- }
708
-
709
- .main-tab-btn {
710
- flex: 1;
711
- text-align: center;
712
- border: 1px solid rgba(216, 201, 184, 0.55);
713
- background: rgba(255, 255, 255, 0.95);
714
- border-radius: var(--radius-lg);
715
- padding: 12px 14px;
716
- cursor: pointer;
717
- color: var(--color-text-secondary);
718
- font-size: var(--font-size-body);
719
- font-weight: var(--font-weight-secondary);
720
- box-shadow: var(--shadow-subtle);
721
- transition: all var(--transition-normal) var(--ease-spring);
722
- }
723
-
724
- .main-tab-btn:hover {
725
- border-color: var(--color-brand);
726
- color: var(--color-text-primary);
727
- transform: translateY(-1px);
728
- }
729
-
730
- .main-tab-btn.active {
731
- border-color: var(--color-brand);
732
- box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
733
- color: var(--color-text-primary);
734
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.12), rgba(255, 255, 255, 0.95));
735
- }
736
-
737
- .status-strip {
738
- display: flex;
739
- flex-wrap: wrap;
740
- gap: var(--spacing-xs);
741
- margin-bottom: var(--spacing-sm);
742
- margin-top: 6px;
743
- }
744
-
745
- .status-chip {
746
- min-width: 200px;
747
- padding: 10px 12px;
748
- border-radius: var(--radius-lg);
749
- border: 1px solid var(--color-border-soft);
750
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.99) 0%, rgba(255, 250, 245, 0.97) 100%);
751
- box-shadow: var(--shadow-subtle);
752
- }
753
-
754
- .status-chip .label {
755
- display: block;
756
- font-size: var(--font-size-caption);
757
- color: var(--color-text-tertiary);
758
- margin-bottom: 4px;
759
- }
760
-
761
- .status-chip .value {
762
- font-size: var(--font-size-body);
763
- font-weight: var(--font-weight-secondary);
764
- color: var(--color-text-primary);
765
- letter-spacing: -0.01em;
766
- white-space: normal;
767
- overflow-wrap: anywhere;
768
- word-break: break-word;
769
- }
770
-
771
- .provider-fast-switch {
772
- margin: 0 0 var(--spacing-sm);
773
- padding: 10px 12px;
774
- border-radius: var(--radius-lg);
775
- border: 1px solid rgba(216, 201, 184, 0.6);
776
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 249, 243, 0.96) 100%);
777
- box-shadow: var(--shadow-subtle);
778
- display: grid;
779
- gap: 6px;
780
- }
781
-
782
- .provider-fast-switch-label {
783
- font-size: var(--font-size-caption);
784
- color: var(--color-text-tertiary);
785
- letter-spacing: 0.02em;
786
- }
787
-
788
- .provider-fast-switch-select {
789
- width: 100%;
790
- min-height: 40px;
791
- padding: 8px 12px;
792
- padding-right: 38px;
793
- border: 1px solid var(--color-border-soft);
794
- border-radius: var(--radius-sm);
795
- font-size: var(--font-size-body);
796
- color: var(--color-text-primary);
797
- background-color: var(--color-surface-alt);
798
- outline: none;
799
- cursor: pointer;
800
- appearance: none;
801
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23505A66' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");
802
- background-repeat: no-repeat;
803
- background-position: right 12px center;
804
- background-size: 12px;
805
- }
806
-
807
- .provider-fast-switch-select:focus {
808
- border-color: var(--color-brand);
809
- box-shadow: var(--shadow-input-focus);
810
- }
811
-
812
- .main-panel {
813
- min-width: 0;
814
- background: rgba(255, 255, 255, 0.95);
815
- border: 1px solid rgba(216, 201, 184, 0.48);
816
- border-radius: 18px;
817
- box-shadow: var(--shadow-card);
818
- padding: var(--spacing-md) var(--spacing-lg);
819
- backdrop-filter: blur(8px);
820
- position: relative;
821
- overflow-x: hidden;
822
- overflow-y: visible;
823
- }
824
-
825
- .status-inspector {
826
- position: sticky;
827
- top: 24px;
828
- align-self: start;
829
- height: calc(100vh - 48px);
830
- overflow: auto;
831
- padding: 16px;
832
- border-radius: var(--radius-xl);
833
- border: 1px solid var(--color-border-soft);
834
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(255, 248, 241, 0.92) 100%);
835
- box-shadow: var(--shadow-card);
836
- display: flex;
837
- flex-direction: column;
838
- gap: 12px;
839
- }
840
-
841
- .inspector-head {
842
- padding: 2px 2px 8px;
843
- border-bottom: 1px solid rgba(216, 201, 184, 0.35);
844
- }
845
-
846
- .inspector-title {
847
- font-size: 16px;
848
- line-height: 1.25;
849
- font-weight: 600;
850
- color: var(--color-text-primary);
851
- }
852
-
853
- .inspector-subtitle {
854
- margin-top: 4px;
855
- font-size: 12px;
856
- color: var(--color-text-tertiary);
857
- }
858
-
859
- .inspector-group {
860
- padding: 12px;
861
- border-radius: var(--radius-lg);
862
- border: 1px solid rgba(216, 201, 184, 0.34);
863
- background: rgba(255, 255, 255, 0.88);
864
- box-shadow: var(--shadow-subtle);
865
- }
866
-
867
- .inspector-group-title {
868
- font-size: 13px;
869
- font-weight: 600;
870
- color: var(--color-text-secondary);
871
- margin-bottom: 10px;
872
- }
873
-
874
- .inspector-kv {
875
- display: grid;
876
- grid-template-columns: 92px minmax(0, 1fr);
877
- gap: 8px 10px;
878
- align-items: start;
879
- }
880
-
881
- .inspector-kv .key {
882
- font-size: 11px;
883
- line-height: 1.4;
884
- color: var(--color-text-muted);
885
- letter-spacing: 0.01em;
886
- font-family: var(--font-family-mono);
887
- }
888
-
889
- .inspector-kv .value {
890
- font-size: 14px;
891
- line-height: 1.35;
892
- font-weight: 500;
893
- color: var(--color-text-primary);
894
- overflow-wrap: anywhere;
895
- word-break: break-word;
896
- }
897
-
898
- .inspector-kv .value.tone-ok {
899
- color: var(--color-success);
900
- }
901
-
902
- .inspector-kv .value.tone-warn {
903
- color: #8d5b31;
904
- }
905
-
906
- .inspector-kv .value.tone-error {
907
- color: var(--color-error);
908
- }
909
-
910
- .panel-header {
911
- margin-bottom: 12px;
912
- text-align: left;
913
- }
914
-
915
- .hero {
916
- display: flex;
917
- align-items: center;
918
- gap: var(--spacing-sm);
919
- margin-bottom: var(--spacing-sm);
920
- }
921
-
922
- .hero-logo {
923
- display: none;
924
- width: 64px;
925
- height: 64px;
926
- border-radius: 18px;
927
- padding: 8px;
928
- background: var(--color-surface-elevated);
929
- border: 1px solid var(--color-border-soft);
930
- box-shadow: var(--shadow-card);
931
- object-fit: contain;
932
- }
933
-
934
- .hero-title {
935
- font-size: 48px;
936
- line-height: 1.05;
937
- font-family: var(--font-family-display);
938
- color: var(--color-text-primary);
939
- letter-spacing: -0.02em;
940
- }
941
-
942
- .hero-title .accent {
943
- color: var(--color-brand);
944
- }
945
-
946
- .hero-subtitle {
947
- margin-top: 8px;
948
- font-size: var(--font-size-body);
949
- color: var(--color-text-tertiary);
950
- line-height: 1.5;
951
- }
952
-
953
- .hero-github {
954
- display: none;
955
- margin-bottom: var(--spacing-sm);
956
- }
957
-
958
- .top-tabs {
959
- margin: 14px 0 18px;
960
- background: rgba(255, 255, 255, 0.92);
961
- border: 1px solid rgba(255, 255, 255, 0.7);
962
- border-radius: 14px;
963
- padding: 6px;
964
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.06);
965
- display: grid;
966
- grid-template-columns: repeat(4, 1fr);
967
- gap: 8px;
968
- backdrop-filter: blur(6px);
969
- }
970
-
971
- .top-tab {
972
- border: 1px solid rgba(216, 201, 184, 0.55);
973
- border-radius: 12px;
974
- background: rgba(255, 255, 255, 0.96);
975
- padding: 11px 10px;
976
- font-size: var(--font-size-body);
977
- color: var(--color-text-secondary);
978
- text-align: center;
979
- cursor: pointer;
980
- transition: none;
981
- box-shadow: var(--shadow-subtle);
982
- }
983
-
984
- .top-tab:hover {
985
- border-color: var(--color-brand);
986
- color: var(--color-text-primary);
987
- transform: translateY(-1px);
988
- }
989
-
990
- .top-tab.active {
991
- border-color: var(--color-brand);
992
- color: var(--color-text-primary);
993
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.12), rgba(255, 255, 255, 0.95));
994
- box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
995
- }
996
-
997
- .top-tab.nav-intent-active {
998
- border-color: var(--color-brand);
999
- color: var(--color-text-primary);
1000
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.12), rgba(255, 255, 255, 0.95));
1001
- box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
1002
- }
1003
-
1004
- .top-tab.nav-intent-inactive,
1005
- .top-tab.active.nav-intent-inactive {
1006
- border-color: rgba(216, 201, 184, 0.55);
1007
- color: var(--color-text-secondary);
1008
- background: rgba(255, 255, 255, 0.96);
1009
- box-shadow: var(--shadow-subtle);
1010
- }
1011
-
1012
- #panel-sessions.session-panel-fast-hidden {
1013
- display: none !important;
1014
- }
1015
-
1016
- .config-subtabs {
1017
- display: flex;
1018
- gap: 8px;
1019
- margin-bottom: 16px;
1020
- padding: 6px;
1021
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.85), rgba(255, 255, 255, 0.7));
1022
- border-radius: var(--radius-lg);
1023
- border: 1px solid rgba(255, 255, 255, 0.7);
1024
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.05);
1025
- }
1026
-
1027
- .config-subtab {
1028
- border: 1px solid var(--color-border-soft);
1029
- border-radius: var(--radius-lg);
1030
- padding: 10px 14px;
1031
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(255, 250, 245, 0.9));
1032
- color: var(--color-text-secondary);
1033
- cursor: pointer;
1034
- font-size: var(--font-size-body);
1035
- font-weight: var(--font-weight-secondary);
1036
- transition: all var(--transition-normal) var(--ease-spring);
1037
- box-shadow: var(--shadow-subtle);
1038
- }
1039
-
1040
- .config-subtab:hover {
1041
- border-color: var(--color-border-strong);
1042
- color: var(--color-text-primary);
1043
- }
1044
-
1045
- .config-subtab.active {
1046
- border-color: var(--color-brand);
1047
- color: var(--color-text-primary);
1048
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.18), rgba(255, 255, 255, 0.95));
1049
- box-shadow: var(--shadow-card);
1050
- }
1051
-
1052
- .settings-subtabs {
1053
- margin-bottom: var(--spacing-sm);
1054
- }
1055
-
1056
- .settings-tab-badge {
1057
- display: inline-flex;
1058
- align-items: center;
1059
- justify-content: center;
1060
- min-width: 18px;
1061
- height: 18px;
1062
- margin-left: 6px;
1063
- padding: 0 6px;
1064
- border-radius: 999px;
1065
- background: rgba(210, 107, 90, 0.14);
1066
- color: var(--color-text-secondary);
1067
- font-size: 11px;
1068
- line-height: 1;
1069
- }
1070
-
1071
- .content-wrapper {
1072
- background: rgba(255, 255, 255, 0.94);
1073
- border: 1px solid rgba(216, 201, 184, 0.35);
1074
- border-radius: var(--radius-lg);
1075
- box-shadow: var(--shadow-subtle);
1076
- padding: 0;
1077
- }
1078
-
1079
- .mode-content {
1080
- border-radius: var(--radius-lg);
1081
- background: rgba(255, 255, 255, 0.9);
1082
- box-shadow: var(--shadow-subtle);
1083
- padding: 12px;
1084
- }
1085
-
1086
- /* ============================================
1087
- 主标题
1088
- ============================================ */
1089
- .main-title {
1090
- font-size: var(--font-size-display);
1091
- font-weight: var(--font-weight-display);
1092
- line-height: var(--line-height-tight);
1093
- letter-spacing: -0.03em;
1094
- margin-bottom: 10px;
1095
- color: var(--color-text-primary);
1096
- font-family: var(--font-family-display);
1097
- background: linear-gradient(135deg, var(--color-text-primary) 0%, rgba(27, 23, 20, 0.78) 100%);
1098
- -webkit-background-clip: text;
1099
- -webkit-text-fill-color: transparent;
1100
- background-clip: text;
1101
- }
1102
-
1103
- .main-title .accent {
1104
- color: var(--color-brand);
1105
- -webkit-text-fill-color: var(--color-brand);
1106
- position: relative;
1107
- }
1108
-
1109
- .subtitle {
1110
- font-size: var(--font-size-body);
1111
- color: var(--color-text-tertiary);
1112
- line-height: var(--line-height-normal);
1113
- margin-bottom: 20px;
1114
- max-width: 640px;
1115
- letter-spacing: 0.01em;
1116
- }
1117
-
1118
- /* ============================================
1119
- 模式切换器 - Segmented Control
1120
- ============================================ */
1121
- .segmented-control {
1122
- display: flex;
1123
- background: rgba(255, 255, 255, 0.92);
1124
- border-radius: var(--radius-xl);
1125
- padding: 6px;
1126
- margin-bottom: 20px;
1127
- position: relative;
1128
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.06);
1129
- border: 1px solid rgba(255, 255, 255, 0.7);
1130
- backdrop-filter: blur(6px);
1131
- }
1132
-
1133
- .segment {
1134
- flex: 1;
1135
- padding: 11px 16px;
1136
- border: none;
1137
- background: transparent;
1138
- font-size: var(--font-size-body);
1139
- font-weight: var(--font-weight-secondary);
1140
- color: var(--color-text-secondary);
1141
- cursor: pointer;
1142
- border-radius: 10px;
1143
- transition: all var(--transition-normal) var(--ease-spring);
1144
- position: relative;
1145
- z-index: 2;
1146
- letter-spacing: 0.01em;
1147
- }
1148
-
1149
- .segment:hover {
1150
- color: var(--color-text-primary);
1151
- }
1152
-
1153
- .segment.active {
1154
- color: var(--color-text-primary);
1155
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.8) 100%);
1156
- box-shadow: var(--shadow-subtle), inset 0 1px 0 rgba(255, 255, 255, 0.85);
1157
- }
1158
-
1159
- /* ============================================
1160
- 卡片列表
1161
- ============================================ */
1162
- .card-list {
1163
- display: flex;
1164
- flex-direction: column;
1165
- gap: 12px;
1166
- margin-bottom: 12px;
1167
- }
1168
-
1169
- /* ============================================
1170
- 卡片
1171
- ============================================ */
1172
- .card {
1173
- background: linear-gradient(180deg, #fffdf9 0%, #fff8f2 100%);
1174
- border-radius: var(--radius-lg);
1175
- padding: 10px;
1176
- display: flex;
1177
- align-items: center;
1178
- justify-content: space-between;
1179
- cursor: pointer;
1180
- transition:
1181
- transform var(--transition-normal) var(--ease-spring),
1182
- box-shadow var(--transition-normal) var(--ease-spring),
1183
- background-color var(--transition-fast) var(--ease-smooth);
1184
- box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
1185
- user-select: none;
1186
- will-change: transform;
1187
- border: 1px solid rgba(216, 201, 184, 0.55);
1188
- position: relative;
1189
- overflow: hidden;
1190
- }
1191
-
1192
- .card:hover {
1193
- transform: translateY(-1px);
1194
- box-shadow: var(--shadow-card-hover);
1195
- }
1196
-
1197
- .card::before,
1198
- .card::after {
1199
- content: "";
1200
- position: absolute;
1201
- pointer-events: none;
1202
- }
1203
-
1204
- .card::before {
1205
- left: 0;
1206
- top: 10px;
1207
- bottom: 10px;
1208
- width: 3px;
1209
- border-radius: 999px;
1210
- background: transparent;
1211
- transition: background var(--transition-fast) var(--ease-smooth);
1212
- }
1213
-
1214
- .card::after {
1215
- inset: 0;
1216
- border-radius: inherit;
1217
- background: linear-gradient(120deg, rgba(255, 255, 255, 0.7) 0%, transparent 55%);
1218
- opacity: 0;
1219
- transition: opacity var(--transition-normal) var(--ease-smooth);
1220
- }
1221
-
1222
- .card:active {
1223
- transform: translateY(0);
1224
- transition: transform var(--transition-instant) var(--ease-smooth);
1225
- }
1226
-
1227
- .card.active {
1228
- background: linear-gradient(to bottom, rgba(210, 107, 90, 0.14) 0%, rgba(255, 255, 255, 0.98) 100%);
1229
- border-color: rgba(201, 94, 75, 0.55);
1230
- box-shadow: 0 10px 28px rgba(210, 107, 90, 0.14);
1231
- }
1232
-
1233
- .card.active::before {
1234
- background: linear-gradient(180deg, rgba(201, 94, 75, 0.95) 0%, rgba(201, 94, 75, 0.35) 100%);
1235
- }
1236
-
1237
- .card:hover::after {
1238
- opacity: 0.6;
1239
- }
1240
-
1241
- .card.active .card-icon {
1242
- transform: scale(1.05);
1243
- }
1244
-
1245
- .card-leading {
1246
- display: flex;
1247
- align-items: center;
1248
- gap: var(--spacing-sm);
1249
- flex: 1;
1250
- min-width: 0;
1251
- }
1252
-
1253
- .card-icon {
1254
- width: 40px;
1255
- height: 40px;
1256
- border-radius: var(--radius-sm);
1257
- background: linear-gradient(135deg, rgba(255, 255, 255, 0.9) 0%, rgba(247, 241, 232, 0.65) 100%);
1258
- display: flex;
1259
- align-items: center;
1260
- justify-content: center;
1261
- font-size: var(--font-size-title);
1262
- font-weight: var(--font-weight-title);
1263
- color: var(--color-text-secondary);
1264
- flex-shrink: 0;
1265
- transition: all var(--transition-normal) var(--ease-spring-soft);
1266
- box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.7);
1267
- }
1268
-
1269
- .card.active .card-icon {
1270
- background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
1271
- color: white;
1272
- box-shadow: 0 2px 8px rgba(210, 107, 90, 0.3);
1273
- }
1274
-
1275
- .card-content {
1276
- display: flex;
1277
- flex-direction: column;
1278
- gap: 2px;
1279
- min-width: 0;
1280
- }
1281
-
1282
- .card-title {
1283
- display: flex;
1284
- align-items: center;
1285
- gap: 8px;
1286
- min-width: 0;
1287
- font-size: var(--font-size-body);
1288
- font-weight: var(--font-weight-secondary);
1289
- color: var(--color-text-primary);
1290
- white-space: nowrap;
1291
- overflow: hidden;
1292
- text-overflow: ellipsis;
1293
- letter-spacing: -0.01em;
1294
- }
1295
-
1296
- .card-title > span:first-child {
1297
- min-width: 0;
1298
- overflow: hidden;
1299
- text-overflow: ellipsis;
1300
- white-space: nowrap;
1301
- }
1302
-
1303
- .provider-readonly-badge {
1304
- display: inline-flex;
1305
- align-items: center;
1306
- justify-content: center;
1307
- padding: 2px 8px;
1308
- border-radius: var(--radius-full);
1309
- font-size: 11px;
1310
- line-height: 1;
1311
- color: #6f4b00;
1312
- background: linear-gradient(135deg, rgba(246, 211, 106, 0.32) 0%, rgba(246, 211, 106, 0.2) 100%);
1313
- border: 1px solid rgba(191, 151, 40, 0.35);
1314
- flex-shrink: 0;
1315
- }
1316
-
1317
- .card-subtitle {
1318
- font-size: var(--font-size-secondary);
1319
- color: var(--color-text-tertiary);
1320
- white-space: nowrap;
1321
- overflow: hidden;
1322
- text-overflow: ellipsis;
1323
- opacity: 0.8;
1324
- }
1325
-
1326
- .card-trailing {
1327
- display: grid;
1328
- grid-auto-flow: column;
1329
- grid-auto-columns: max-content;
1330
- column-gap: var(--spacing-xs);
1331
- row-gap: 6px;
1332
- align-items: center;
1333
- justify-content: end;
1334
- align-self: center;
1335
- }
1336
-
1337
- .card-trailing .card-actions {
1338
- margin-left: 0;
1339
- justify-self: end;
1340
- }
1341
-
1342
- .card-trailing .pill,
1343
- .card-trailing .latency {
1344
- justify-self: end;
1345
- }
1346
-
1347
- /* 卡片操作按钮 - hover 显示 */
1348
- .card-actions {
1349
- display: flex;
1350
- gap: 8px;
1351
- opacity: 0;
1352
- transform: translateX(4px);
1353
- transition: all var(--transition-normal) var(--ease-spring);
1354
- }
1355
-
1356
- .card:hover .card-actions {
1357
- opacity: 1;
1358
- transform: translateX(0);
1359
- }
1360
-
1361
- .mode-cards .card-actions {
1362
- opacity: 1;
1363
- transform: translateX(0);
1364
- }
1365
-
1366
- .card-action-btn {
1367
- width: 40px;
1368
- height: 40px;
1369
- border-radius: 10px;
1370
- border: 1px solid rgba(70, 86, 110, 0.22);
1371
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.98), rgba(255, 255, 255, 0.9));
1372
- color: var(--color-text-secondary);
1373
- cursor: pointer;
1374
- display: flex;
1375
- align-items: center;
1376
- justify-content: center;
1377
- transition: all var(--transition-fast) var(--ease-spring);
1378
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
1379
- }
1380
-
1381
- .card-action-btn:hover {
1382
- background: linear-gradient(135deg, rgba(210, 107, 90, 0.08) 0%, rgba(255, 255, 255, 0.95) 100%);
1383
- color: var(--color-text-primary);
1384
- transform: translateY(-1px);
1385
- }
1386
-
1387
- .card-action-btn.delete:hover {
1388
- background: linear-gradient(135deg, rgba(200, 74, 58, 0.1) 0%, rgba(200, 74, 58, 0.05) 100%);
1389
- color: var(--color-error);
1390
- }
1391
-
1392
- .card-action-btn:disabled,
1393
- .card-action-btn.disabled {
1394
- opacity: 0.45;
1395
- cursor: not-allowed;
1396
- transform: none;
1397
- filter: grayscale(0.1);
1398
- }
1399
-
1400
- .card-action-btn.delete:disabled:hover,
1401
- .card-action-btn.delete.disabled:hover {
1402
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.98), rgba(255, 255, 255, 0.9));
1403
- color: var(--color-text-secondary);
1404
- }
1405
-
1406
- .card-action-btn svg {
1407
- width: 18px;
1408
- height: 18px;
1409
- }
1410
-
1411
- /* ============================================
1412
- 状态徽章
1413
- ============================================ */
1414
- .pill {
1415
- padding: 5px 11px;
1416
- border-radius: var(--radius-full);
1417
- font-size: var(--font-size-caption);
1418
- font-weight: var(--font-weight-caption);
1419
- background-color: rgba(255, 255, 255, 0.8);
1420
- color: var(--color-text-tertiary);
1421
- text-transform: uppercase;
1422
- letter-spacing: 0.06em;
1423
- transition: all var(--transition-fast) var(--ease-smooth);
1424
- box-shadow: inset 0 0.5px 1px rgba(0, 0, 0, 0.04);
1425
- }
1426
-
1427
- .pill.configured {
1428
- background: linear-gradient(135deg, rgba(90, 139, 106, 0.15) 0%, rgba(90, 139, 106, 0.08) 100%);
1429
- color: var(--color-success);
1430
- box-shadow: inset 0 0.5px 1px rgba(90, 139, 106, 0.2);
1431
- }
1432
-
1433
- .pill.empty {
1434
- background: linear-gradient(135deg, rgba(200, 74, 58, 0.1) 0%, rgba(200, 74, 58, 0.05) 100%);
1435
- color: var(--color-error);
1436
- box-shadow: inset 0 0.5px 1px rgba(200, 74, 58, 0.15);
1437
- }
1438
-
1439
- .latency {
1440
- padding: 4px 10px;
1441
- border-radius: var(--radius-full);
1442
- font-size: var(--font-size-caption);
1443
- font-weight: var(--font-weight-caption);
1444
- background: var(--color-bg);
1445
- color: var(--color-text-tertiary);
1446
- letter-spacing: 0.02em;
1447
- min-width: 64px;
1448
- text-align: center;
1449
- display: inline-flex;
1450
- align-items: center;
1451
- justify-content: center;
1452
- flex-shrink: 0;
1453
- }
1454
-
1455
- .latency.ok {
1456
- color: var(--color-success);
1457
- background: rgba(90, 139, 106, 0.1);
1458
- }
1459
-
1460
- .latency.error {
1461
- color: var(--color-error);
1462
- background: rgba(200, 74, 58, 0.08);
1463
- }
1464
-
1465
- .card-action-btn.loading svg {
1466
- animation: spin 0.9s linear infinite;
1467
- }
1468
-
1469
- /* ============================================
1470
- 图标 - SVG 优化
1471
- ============================================ */
1472
- .icon {
1473
- width: 20px;
1474
- height: 20px;
1475
- flex-shrink: 0;
1476
- stroke-linecap: round;
1477
- stroke-linejoin: round;
1478
- }
1479
-
1480
- .icon-chevron-right {
1481
- color: var(--color-text-tertiary);
1482
- opacity: 0.5;
1483
- }
1484
-
1485
- /* ============================================
1486
- 选择器 - 用于模型选择
1487
- ============================================ */
1488
- .selector-section {
1489
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.92) 100%);
1490
- border-radius: var(--radius-lg);
1491
- padding: calc(var(--spacing-sm) + 2px);
1492
- margin-bottom: 16px;
1493
- box-shadow: var(--shadow-card);
1494
- border: 1px solid var(--color-border-soft);
1495
- display: flex;
1496
- flex-direction: column;
1497
- gap: var(--spacing-xs);
1498
- }
1499
-
1500
- .selector-header {
1501
- display: flex;
1502
- justify-content: space-between;
1503
- align-items: center;
1504
- margin-bottom: var(--spacing-xs);
1505
- }
1506
-
1507
- .settings-tab-header {
1508
- align-items: flex-start;
1509
- }
1510
-
1511
- .settings-tab-actions {
1512
- display: flex;
1513
- flex-wrap: wrap;
1514
- gap: 8px;
1515
- justify-content: flex-end;
1516
- }
1517
-
1518
- .settings-tab-actions .btn-tool,
1519
- .settings-tab-actions .btn-tool-compact {
1520
- width: auto;
1521
- }
1522
-
1523
- .selector-title {
1524
- font-size: var(--font-size-caption);
1525
- font-weight: var(--font-weight-secondary);
1526
- color: var(--color-text-muted);
1527
- text-transform: none;
1528
- letter-spacing: 0.04em;
1529
- opacity: 0.85;
1530
- }
1531
-
1532
- .selector-actions {
1533
- display: flex;
1534
- gap: var(--spacing-xs);
1535
- }
1536
-
1537
- .health-report {
1538
- margin-top: 10px;
1539
- padding: 10px 12px;
1540
- border-radius: var(--radius-md);
1541
- border: 1px solid var(--color-border-soft);
1542
- background: var(--color-surface-alt);
1543
- display: grid;
1544
- gap: 8px;
1545
- }
1546
-
1547
- .health-remote-toggle {
1548
- display: inline-flex;
1549
- align-items: center;
1550
- gap: 8px;
1551
- font-size: var(--font-size-caption);
1552
- color: var(--color-text-secondary);
1553
- }
1554
-
1555
- .health-remote-toggle input {
1556
- accent-color: var(--color-brand);
1557
- }
1558
-
1559
- .health-ok {
1560
- color: var(--color-success);
1561
- font-weight: var(--font-weight-secondary);
1562
- }
1563
-
1564
- .health-issue {
1565
- background: #fff6f5;
1566
- border-left: 3px solid var(--color-error);
1567
- padding: 8px 10px;
1568
- border-radius: 10px;
1569
- }
1570
-
1571
- .health-issue-title {
1572
- font-size: var(--font-size-caption);
1573
- font-weight: var(--font-weight-secondary);
1574
- color: var(--color-text-primary);
1575
- margin-bottom: 4px;
1576
- }
1577
-
1578
- .health-issue-suggestion {
1579
- font-size: var(--font-size-caption);
1580
- color: var(--color-text-secondary);
1581
- line-height: 1.4;
1582
- }
1583
-
1584
- .btn-icon {
1585
- width: 28px;
1586
- height: 28px;
1587
- border-radius: var(--radius-sm);
1588
- border: none;
1589
- background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
1590
- color: white;
1591
- cursor: pointer;
1592
- font-size: 16px;
1593
- display: flex;
1594
- align-items: center;
1595
- justify-content: center;
1596
- transition: all var(--transition-fast) var(--ease-spring);
1597
- box-shadow: 0 2px 4px rgba(210, 107, 90, 0.2);
1598
- }
1599
-
1600
- .btn-icon:hover {
1601
- transform: translateY(-1px) scale(1.05);
1602
- box-shadow: 0 4px 8px rgba(210, 107, 90, 0.25);
1603
- }
1604
-
1605
- .btn-icon:active {
1606
- transform: translateY(0) scale(0.98);
1607
- }
1608
-
1609
- .model-select {
1610
- width: 100%;
1611
- padding: 12px var(--spacing-sm);
1612
- padding-right: 40px;
1613
- border: 1px solid var(--color-border-soft);
1614
- border-radius: var(--radius-sm);
1615
- font-size: var(--font-size-body);
1616
- font-weight: var(--font-weight-body);
1617
- background-color: var(--color-surface-alt);
1618
- color: var(--color-text-primary);
1619
- outline: none;
1620
- cursor: pointer;
1621
- appearance: none;
1622
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23505A66' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");
1623
- background-repeat: no-repeat;
1624
- background-position: right 14px center;
1625
- background-size: 12px;
1626
- transition: all var(--transition-fast) var(--ease-smooth);
1627
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
1628
- }
1629
-
1630
- .model-select:hover {
1631
- border-color: var(--color-border-strong);
1632
- background-color: var(--color-surface);
1633
- }
1634
-
1635
- .model-select:focus {
1636
- background-color: var(--color-surface);
1637
- border-color: var(--color-brand);
1638
- box-shadow: var(--shadow-input-focus);
1639
- }
1640
-
1641
- .model-input {
1642
- width: 100%;
1643
- padding: 12px var(--spacing-sm);
1644
- border: 1px solid var(--color-border-soft);
1645
- border-radius: var(--radius-sm);
1646
- font-size: var(--font-size-body);
1647
- font-weight: var(--font-weight-body);
1648
- background-color: var(--color-surface-alt);
1649
- color: var(--color-text-primary);
1650
- outline: none;
1651
- transition: all var(--transition-fast) var(--ease-smooth);
1652
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
1653
- }
1654
-
1655
- .model-input:hover {
1656
- border-color: var(--color-border-strong);
1657
- background-color: var(--color-surface);
1658
- }
1659
-
1660
- .model-input:focus {
1661
- background-color: var(--color-surface);
1662
- border-color: var(--color-brand);
1663
- box-shadow: var(--shadow-input-focus);
1664
- }
1665
-
1666
- .config-template-hint {
1667
- margin-top: 8px;
1668
- margin-bottom: 10px;
1669
- font-size: var(--font-size-caption);
1670
- color: var(--color-text-tertiary);
1671
- line-height: 1.4;
1672
- }
1673
-
1674
- .btn-template-editor {
1675
- width: 100%;
1676
- margin-top: 2px;
1677
- }
1678
-
1679
- /* ============================================
1680
- 按钮
1681
- ============================================ */
1682
- .btn-add {
1683
- width: 100%;
1684
- padding: 14px var(--spacing-sm);
1685
- border: 1.5px dashed rgba(208, 196, 182, 0.6);
1686
- border-radius: var(--radius-lg);
1687
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0.15) 100%);
1688
- font-size: var(--font-size-body);
1689
- font-weight: var(--font-weight-secondary);
1690
- color: var(--color-text-tertiary);
1691
- cursor: pointer;
1692
- transition: all var(--transition-normal) var(--ease-spring);
1693
- display: flex;
1694
- align-items: center;
1695
- justify-content: center;
1696
- gap: var(--spacing-xs);
1697
- }
1698
-
1699
- .btn-add + .selector-section,
1700
- .selector-section + .btn-add,
1701
- .btn-add + .card-list,
1702
- .card-list + .btn-add {
1703
- margin-top: 12px;
1704
- }
1705
-
1706
- .btn-add:hover {
1707
- border-color: var(--color-brand);
1708
- color: var(--color-brand);
1709
- background: linear-gradient(to bottom, rgba(210, 107, 90, 0.05) 0%, rgba(210, 107, 90, 0.02) 100%);
1710
- transform: translateY(-1px);
1711
- }
1712
-
1713
- .btn-add:active {
1714
- transform: translateY(0) scale(0.99);
1715
- }
1716
-
1717
- .btn-add .icon {
1718
- width: 18px;
1719
- height: 18px;
1720
- transition: transform var(--transition-normal) var(--ease-spring);
1721
- }
1722
-
1723
- .btn-add:hover .icon {
1724
- transform: rotate(90deg);
1725
- }
1726
-
1727
- .btn-tool {
1728
- padding: 12px var(--spacing-sm);
1729
- border-radius: var(--radius-sm);
1730
- border: 1px solid var(--color-border-soft);
1731
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.85) 100%);
1732
- font-size: var(--font-size-body);
1733
- font-weight: var(--font-weight-secondary);
1734
- color: var(--color-text-secondary);
1735
- cursor: pointer;
1736
- transition: all var(--transition-fast) var(--ease-spring);
1737
- box-shadow: var(--shadow-subtle);
1738
- letter-spacing: -0.01em;
1739
- width: 100%;
1740
- text-align: center;
1741
- }
1742
-
1743
- .selector-section .btn-tool + .btn-tool {
1744
- margin-left: 0;
1745
- margin-top: var(--spacing-xs);
1746
- }
1747
-
1748
- .btn-tool:hover {
1749
- border-color: var(--color-brand);
1750
- color: var(--color-brand);
1751
- transform: translateY(-1px);
1752
- box-shadow: 0 4px 8px rgba(210, 107, 90, 0.12);
1753
- }
1754
-
1755
- .btn-tool-compact {
1756
- padding: 9px 12px;
1757
- font-size: var(--font-size-secondary);
1758
- }
1759
-
1760
- .selector-header .btn-tool-compact {
1761
- padding: 6px 10px;
1762
- font-size: var(--font-size-caption);
1763
- line-height: 1.1;
1764
- box-shadow: var(--shadow-subtle);
1765
- }
1766
-
1767
- .session-toolbar {
1768
- display: grid;
1769
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
1770
- gap: var(--spacing-xs);
1771
- margin-bottom: var(--spacing-sm);
1772
- align-items: end;
1773
- }
1774
-
1775
- .session-toolbar-group {
1776
- display: flex;
1777
- align-items: center;
1778
- gap: var(--spacing-xs);
1779
- flex-wrap: wrap;
1780
- min-width: 0;
1781
- }
1782
-
1783
- .session-toolbar-grow {
1784
- grid-column: span 2;
1785
- }
1786
-
1787
- .session-toolbar-actions {
1788
- justify-content: flex-end;
1789
- }
1790
-
1791
- .session-toolbar-footer {
1792
- display: flex;
1793
- align-items: center;
1794
- justify-content: flex-end;
1795
- gap: var(--spacing-xs);
1796
- margin-top: -2px;
1797
- padding-top: 6px;
1798
- margin-bottom: 12px;
1799
- border-top: 1px dashed var(--color-border-soft);
1800
- }
1801
-
1802
- .session-toolbar-footer .quick-option {
1803
- margin: 0;
1804
- padding: 6px 10px;
1805
- border-radius: var(--radius-sm);
1806
- border: 1px solid var(--color-border-soft);
1807
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.8) 100%);
1808
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
1809
- transition: all var(--transition-fast) var(--ease-spring);
1810
- line-height: 1.2;
1811
- }
1812
-
1813
- .session-toolbar-footer .quick-option:hover {
1814
- border-color: var(--color-border-strong);
1815
- }
1816
-
1817
- .session-source-select,
1818
- .session-path-select,
1819
- .session-query-input,
1820
- .session-role-select,
1821
- .session-time-select {
1822
- flex: 1;
1823
- min-width: 160px;
1824
- padding: 10px 12px;
1825
- border-radius: var(--radius-sm);
1826
- border: 1px solid var(--color-border-soft);
1827
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.92) 100%);
1828
- color: var(--color-text-secondary);
1829
- font-size: var(--font-size-body);
1830
- font-family: var(--font-family);
1831
- outline: none;
1832
- transition: all var(--transition-fast) var(--ease-spring);
1833
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
1834
- }
1835
-
1836
- .session-query-input {
1837
- flex: 2;
1838
- min-width: 220px;
1839
- }
1840
-
1841
- .session-source-select:hover,
1842
- .session-path-select:hover,
1843
- .session-query-input:hover,
1844
- .session-role-select:hover,
1845
- .session-time-select:hover {
1846
- border-color: var(--color-border-strong);
1847
- }
1848
-
1849
- .session-source-select:focus,
1850
- .session-path-select:focus,
1851
- .session-query-input:focus,
1852
- .session-role-select:focus,
1853
- .session-time-select:focus {
1854
- border-color: var(--color-brand);
1855
- box-shadow: var(--shadow-input-focus);
1856
- }
1857
-
1858
- .session-hint {
1859
- font-size: var(--font-size-secondary);
1860
- color: var(--color-text-tertiary);
1861
- margin-bottom: 12px;
1862
- line-height: 1.45;
1863
- }
1864
-
1865
- .session-card {
1866
- align-items: flex-start;
1867
- cursor: default;
1868
- }
1869
-
1870
- .session-card:hover {
1871
- transform: none;
1872
- box-shadow: var(--shadow-card);
1873
- }
1874
-
1875
- .session-card .card-leading {
1876
- align-items: flex-start;
1877
- }
1878
-
1879
- .session-meta {
1880
- margin-top: 6px;
1881
- font-size: var(--font-size-caption);
1882
- color: var(--color-text-tertiary);
1883
- line-height: 1.4;
1884
- word-break: break-all;
1885
- }
1886
-
1887
- .session-actions {
1888
- display: flex;
1889
- gap: var(--spacing-xs);
1890
- align-items: center;
1891
- margin-left: var(--spacing-sm);
1892
- flex-shrink: 0;
1893
- }
1894
-
1895
- .session-source {
1896
- font-size: var(--font-size-caption);
1897
- color: var(--color-text-tertiary);
1898
- border: 1px solid var(--color-border-soft);
1899
- border-radius: 999px;
1900
- padding: 2px 8px;
1901
- background: var(--color-surface-alt);
1902
- white-space: nowrap;
1903
- }
1904
-
1905
- .session-count-badge {
1906
- display: inline-flex;
1907
- align-items: center;
1908
- justify-content: center;
1909
- min-width: 22px;
1910
- height: 22px;
1911
- padding: 0 7px;
1912
- border-radius: 999px;
1913
- background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
1914
- color: #fff;
1915
- font-size: var(--font-size-caption);
1916
- font-weight: var(--font-weight-secondary);
1917
- line-height: 1;
1918
- box-shadow: 0 4px 10px rgba(208, 88, 58, 0.16);
1919
- flex-shrink: 0;
1920
- }
1921
-
1922
- .trash-list-footer {
1923
- display: flex;
1924
- justify-content: center;
1925
- margin-top: var(--spacing-sm);
1926
- }
1927
-
1928
- .btn-session-export,
1929
- .btn-session-open,
1930
- .btn-session-clone,
1931
- .btn-session-refresh {
1932
- border: 1px solid var(--color-border-soft);
1933
- border-radius: var(--radius-sm);
1934
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.9) 100%);
1935
- color: var(--color-text-secondary);
1936
- padding: 8px 12px;
1937
- font-size: var(--font-size-secondary);
1938
- font-weight: var(--font-weight-secondary);
1939
- cursor: pointer;
1940
- transition: all var(--transition-fast) var(--ease-spring);
1941
- white-space: nowrap;
1942
- box-shadow: var(--shadow-subtle);
1943
- letter-spacing: -0.01em;
1944
- }
1945
-
1946
- .btn-session-delete {
1947
- border: 1px solid rgba(189, 70, 68, 0.45);
1948
- border-radius: var(--radius-sm);
1949
- background: linear-gradient(to bottom, rgba(255, 245, 245, 0.95) 0%, rgba(255, 255, 255, 0.9) 100%);
1950
- color: #b74545;
1951
- padding: 8px 12px;
1952
- font-size: var(--font-size-secondary);
1953
- font-weight: var(--font-weight-secondary);
1954
- cursor: pointer;
1955
- transition: all var(--transition-fast) var(--ease-spring);
1956
- white-space: nowrap;
1957
- box-shadow: var(--shadow-subtle);
1958
- letter-spacing: -0.01em;
1959
- }
1960
-
1961
- .btn-session-refresh:hover {
1962
- border-color: var(--color-brand);
1963
- color: var(--color-brand);
1964
- transform: translateY(-1px);
1965
- }
1966
-
1967
- .btn-session-refresh:disabled {
1968
- opacity: 0.5;
1969
- cursor: not-allowed;
1970
- transform: none;
1971
- }
1972
-
1973
- .btn-session-export:hover,
1974
- .btn-session-open:hover {
1975
- border-color: var(--color-brand);
1976
- color: var(--color-brand);
1977
- transform: translateY(-1px);
1978
- }
1979
-
1980
- .btn-session-export:disabled,
1981
- .btn-session-open:disabled {
1982
- opacity: 0.5;
1983
- cursor: not-allowed;
1984
- transform: none;
1985
- }
1986
-
1987
- .btn-session-clone:hover {
1988
- border-color: var(--color-brand);
1989
- color: var(--color-brand);
1990
- transform: translateY(-1px);
1991
- }
1992
-
1993
- .btn-session-clone:disabled {
1994
- opacity: 0.5;
1995
- cursor: not-allowed;
1996
- transform: none;
1997
- }
1998
-
1999
- .btn-session-delete:hover {
2000
- border-color: rgba(189, 70, 68, 0.8);
2001
- color: #9f3b3b;
2002
- transform: translateY(-1px);
2003
- }
2004
-
2005
- .btn-session-delete:disabled {
2006
- opacity: 0.5;
2007
- cursor: not-allowed;
2008
- transform: none;
2009
- }
2010
-
2011
- .session-empty {
2012
- padding: 28px var(--spacing-sm);
2013
- text-align: center;
2014
- border: 1px dashed var(--color-border-soft);
2015
- border-radius: var(--radius-lg);
2016
- color: var(--color-text-tertiary);
2017
- background: var(--bg-warm-gradient);
2018
- position: relative;
2019
- box-shadow: var(--shadow-subtle);
2020
- }
2021
-
2022
- .session-empty::before {
2023
- content: "";
2024
- display: block;
2025
- width: 36px;
2026
- height: 36px;
2027
- border-radius: 50%;
2028
- margin: 0 auto 10px;
2029
- background: rgba(210, 107, 90, 0.12);
2030
- box-shadow: inset 0 0 0 6px rgba(255, 255, 255, 0.7);
2031
- }
2032
-
2033
- .trash-list {
2034
- display: grid;
2035
- gap: 12px;
2036
- margin-top: 12px;
2037
- }
2038
-
2039
- .trash-item.session-item {
2040
- min-height: auto;
2041
- height: auto;
2042
- cursor: default;
2043
- content-visibility: visible;
2044
- contain-intrinsic-size: auto;
2045
- }
2046
-
2047
- .trash-item.session-item:hover,
2048
- .trash-item.session-item:active {
2049
- transform: none;
2050
- border-color: var(--color-border-soft);
2051
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.92) 100%);
2052
- box-shadow: var(--shadow-subtle);
2053
- }
2054
-
2055
- .trash-item.session-item::before {
2056
- background: linear-gradient(180deg, rgba(70, 86, 110, 0.26), rgba(70, 86, 110, 0.08));
2057
- }
2058
-
2059
- .trash-item-main {
2060
- min-width: 0;
2061
- flex: 1;
2062
- }
2063
-
2064
- .trash-item-mainline {
2065
- display: flex;
2066
- align-items: flex-start;
2067
- gap: 8px;
2068
- }
2069
-
2070
- .trash-item-title {
2071
- flex: 1;
2072
- font-size: var(--font-size-body);
2073
- font-weight: var(--font-weight-secondary);
2074
- color: var(--color-text-primary);
2075
- line-height: 1.4;
2076
- display: -webkit-box;
2077
- -webkit-line-clamp: 2;
2078
- -webkit-box-orient: vertical;
2079
- white-space: normal;
2080
- overflow: hidden;
2081
- overflow-wrap: anywhere;
2082
- }
2083
-
2084
- .trash-item-meta {
2085
- margin-top: 6px;
2086
- }
2087
-
2088
- .trash-item-side {
2089
- display: flex;
2090
- flex-direction: column;
2091
- align-items: flex-end;
2092
- gap: 8px;
2093
- flex-shrink: 0;
2094
- min-width: 132px;
2095
- }
2096
-
2097
- .trash-item-actions {
2098
- display: flex;
2099
- align-self: flex-end;
2100
- justify-content: flex-end;
2101
- flex-wrap: wrap;
2102
- gap: 8px;
2103
- }
2104
-
2105
- .trash-item-time {
2106
- width: 100%;
2107
- text-align: right;
2108
- white-space: nowrap;
2109
- color: var(--color-text-tertiary);
2110
- }
2111
-
2112
- .trash-item-path {
2113
- margin-top: 8px;
2114
- display: grid;
2115
- grid-template-columns: 48px minmax(0, 1fr);
2116
- gap: 8px;
2117
- align-items: start;
2118
- white-space: normal;
2119
- overflow-wrap: anywhere;
2120
- }
2121
-
2122
- .trash-item-label {
2123
- display: inline-block;
2124
- color: var(--color-text-secondary);
2125
- font-weight: var(--font-weight-secondary);
2126
- }
2127
-
2128
- .trash-item-path span:last-child {
2129
- min-width: 0;
2130
- word-break: break-word;
2131
- }
2132
-
2133
- .trash-item .session-count-badge {
2134
- margin-top: 2px;
2135
- }
2136
-
2137
- .session-layout {
2138
- display: grid;
2139
- grid-template-columns: minmax(260px, 360px) minmax(0, 1fr);
2140
- gap: var(--spacing-sm);
2141
- align-items: start;
2142
- height: min(72vh, 760px);
2143
- min-height: 520px;
2144
- }
2145
-
2146
- .session-layout.session-standalone {
2147
- grid-template-columns: minmax(0, 1fr);
2148
- }
2149
-
2150
- .session-standalone-page {
2151
- max-width: 960px;
2152
- margin: 0 auto;
2153
- padding: var(--spacing-sm) 0;
2154
- }
2155
-
2156
- .session-standalone-title {
2157
- font-size: var(--font-size-title);
2158
- font-weight: var(--font-weight-title);
2159
- color: var(--color-text-primary);
2160
- margin-bottom: var(--spacing-sm);
2161
- letter-spacing: -0.01em;
2162
- }
2163
-
2164
- .session-standalone-text {
2165
- white-space: pre-wrap;
2166
- font-family: var(--font-family-body);
2167
- font-size: var(--font-size-body);
2168
- line-height: 1.7;
2169
- color: var(--color-text-primary);
2170
- word-break: break-word;
2171
- }
2172
-
2173
- .session-list {
2174
- display: flex;
2175
- flex-direction: column;
2176
- gap: var(--spacing-xs);
2177
- position: sticky;
2178
- top: 12px;
2179
- height: 100%;
2180
- max-height: none;
2181
- overflow-y: auto;
2182
- overflow-x: hidden;
2183
- padding-right: 4px;
2184
- min-width: 0;
2185
- scrollbar-width: thin;
2186
- scrollbar-color: rgba(166, 149, 130, 0.85) transparent;
2187
- }
2188
-
2189
- .session-list::-webkit-scrollbar,
2190
- .session-preview-scroll::-webkit-scrollbar {
2191
- width: 10px;
2192
- height: 10px;
2193
- }
2194
-
2195
- .session-list::-webkit-scrollbar-track,
2196
- .session-preview-scroll::-webkit-scrollbar-track {
2197
- background: transparent;
2198
- border-radius: 999px;
2199
- }
2200
-
2201
- .session-list::-webkit-scrollbar-thumb,
2202
- .session-preview-scroll::-webkit-scrollbar-thumb {
2203
- background: linear-gradient(to bottom, rgba(191, 174, 154, 0.95) 0%, rgba(160, 141, 121, 0.95) 100%);
2204
- border-radius: 999px;
2205
- border: 2px solid rgba(255, 255, 255, 0.9);
2206
- }
2207
-
2208
- .session-list::-webkit-scrollbar-thumb:hover,
2209
- .session-preview-scroll::-webkit-scrollbar-thumb:hover {
2210
- background: linear-gradient(to bottom, rgba(175, 156, 136, 0.95) 0%, rgba(145, 126, 107, 0.95) 100%);
2211
- }
2212
-
2213
- .session-item {
2214
- border: 1px solid var(--color-border-soft);
2215
- border-radius: var(--radius-sm);
2216
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.92) 100%);
2217
- padding: 16px;
2218
- cursor: pointer;
2219
- transition: all var(--transition-fast) var(--ease-spring);
2220
- user-select: none;
2221
- min-width: 0;
2222
- position: relative;
2223
- overflow: hidden;
2224
- min-height: 102px;
2225
- content-visibility: auto;
2226
- contain-intrinsic-size: 102px;
2227
- }
2228
-
2229
- .session-item-header {
2230
- display: flex;
2231
- align-items: center;
2232
- justify-content: space-between;
2233
- gap: 10px;
2234
- margin-bottom: 4px;
2235
- }
2236
-
2237
- .session-item-main {
2238
- min-width: 0;
2239
- flex: 1;
2240
- display: flex;
2241
- align-items: center;
2242
- gap: 8px;
2243
- }
2244
-
2245
- .session-item:hover {
2246
- border-color: var(--color-brand);
2247
- background: linear-gradient(to bottom, rgba(210, 107, 90, 0.08) 0%, rgba(255, 255, 255, 0.98) 100%);
2248
- transform: translateY(-1px);
2249
- }
2250
-
2251
- .session-item::before {
2252
- content: "";
2253
- position: absolute;
2254
- left: 0;
2255
- top: 10px;
2256
- bottom: 10px;
2257
- width: 3px;
2258
- border-radius: 999px;
2259
- background: rgba(210, 107, 90, 0.15);
2260
- transition: background var(--transition-fast) var(--ease-spring);
2261
- }
2262
-
2263
- .session-item:active {
2264
- transform: scale(0.99);
2265
- }
2266
-
2267
- .session-item.active {
2268
- border-color: var(--color-brand);
2269
- background: linear-gradient(to bottom, rgba(210, 107, 90, 0.1) 0%, rgba(255, 255, 255, 0.98) 100%);
2270
- box-shadow: 0 6px 16px rgba(210, 107, 90, 0.12);
2271
- }
2272
-
2273
- .session-item.pinned {
2274
- border-color: rgba(208, 88, 58, 0.42);
2275
- background: linear-gradient(to bottom, rgba(210, 107, 90, 0.12) 0%, rgba(255, 251, 247, 0.98) 100%);
2276
- box-shadow: 0 8px 18px rgba(210, 107, 90, 0.10);
2277
- }
2278
-
2279
- .session-item.pinned::before {
2280
- background: linear-gradient(180deg, rgba(201, 94, 75, 0.8), rgba(201, 94, 75, 0.32));
2281
- }
2282
-
2283
- .session-item.active::before {
2284
- background: linear-gradient(180deg, rgba(201, 94, 75, 0.9), rgba(201, 94, 75, 0.4));
2285
- }
2286
-
2287
- .session-item-title {
2288
- font-size: var(--font-size-body);
2289
- font-weight: var(--font-weight-secondary);
2290
- color: var(--color-text-primary);
2291
- line-height: 1.4;
2292
- display: -webkit-box;
2293
- -webkit-line-clamp: 2;
2294
- -webkit-box-orient: vertical;
2295
- white-space: normal;
2296
- overflow: hidden;
2297
- flex: 1;
2298
- max-width: none;
2299
- }
2300
-
2301
- .session-item-actions {
2302
- display: inline-flex;
2303
- align-items: center;
2304
- gap: 6px;
2305
- flex-shrink: 0;
2306
- }
2307
-
2308
- .session-item-copy {
2309
- border: 1px solid rgba(70, 86, 110, 0.35);
2310
- background: rgba(70, 86, 110, 0.08);
2311
- color: var(--color-text-secondary);
2312
- width: 28px;
2313
- height: 28px;
2314
- border-radius: 8px;
2315
- display: inline-flex;
2316
- align-items: center;
2317
- justify-content: center;
2318
- cursor: pointer;
2319
- flex-shrink: 0;
2320
- transition: all var(--transition-fast) var(--ease-spring);
2321
- }
2322
-
2323
- .session-item-copy:hover {
2324
- border-color: rgba(70, 86, 110, 0.7);
2325
- background: rgba(70, 86, 110, 0.16);
2326
- color: var(--color-text-primary);
2327
- transform: translateY(-1px);
2328
- }
2329
-
2330
- .session-item-copy:disabled {
2331
- opacity: 0.5;
2332
- cursor: not-allowed;
2333
- transform: none;
2334
- }
2335
-
2336
- .session-item-copy svg {
2337
- width: 16px;
2338
- height: 16px;
2339
- }
2340
-
2341
- .session-item-pin {
2342
- border-color: rgba(208, 88, 58, 0.24);
2343
- }
2344
-
2345
- .session-item-pin .pin-icon,
2346
- .session-item-pin svg {
2347
- color: rgba(208, 88, 58, 0.78);
2348
- }
2349
-
2350
- .session-item.pinned .session-item-pin {
2351
- background: rgba(208, 88, 58, 0.16);
2352
- border-color: rgba(208, 88, 58, 0.46);
2353
- box-shadow: inset 0 0 0 1px rgba(208, 88, 58, 0.08);
2354
- }
2355
-
2356
- .session-item.pinned .session-item-pin .pin-icon,
2357
- .session-item.pinned .session-item-pin svg {
2358
- color: var(--color-brand-dark);
2359
- }
2360
-
2361
- .session-item-sub.session-item-snippet,
2362
- .session-preview-meta,
2363
- .session-preview-title {
2364
- display: none !important;
2365
- }
2366
-
2367
- .session-item-sub {
2368
- font-size: var(--font-size-caption);
2369
- color: var(--color-text-tertiary);
2370
- line-height: 1.35;
2371
- white-space: nowrap;
2372
- overflow: hidden;
2373
- text-overflow: ellipsis;
2374
- }
2375
-
2376
- .session-item-sub.session-item-wrap {
2377
- white-space: normal;
2378
- }
2379
-
2380
- .session-item-meta {
2381
- display: flex;
2382
- flex-wrap: wrap;
2383
- align-items: center;
2384
- gap: 6px;
2385
- margin-top: 2px;
2386
- margin-bottom: 2px;
2387
- }
2388
-
2389
- .session-item-time {
2390
- font-size: var(--font-size-caption);
2391
- color: var(--color-text-tertiary);
2392
- white-space: nowrap;
2393
- }
2394
-
2395
- .session-preview {
2396
- border: 1px solid var(--color-border-soft);
2397
- border-radius: var(--radius-xl);
2398
- background: linear-gradient(to bottom, var(--color-surface-elevated) 0%, rgba(255, 255, 255, 0.96) 100%);
2399
- box-shadow: var(--shadow-card);
2400
- min-height: 0;
2401
- max-height: none;
2402
- height: 100%;
2403
- display: flex;
2404
- flex-direction: column;
2405
- overflow: hidden;
2406
- position: relative;
2407
- transform: translateX(4px);
2408
- transition: transform var(--transition-normal) var(--ease-spring-soft), box-shadow var(--transition-normal) var(--ease-spring-soft);
2409
- }
2410
-
2411
- .session-preview.active {
2412
- box-shadow: var(--shadow-float);
2413
- transform: translateX(0);
2414
- }
2415
-
2416
- .session-preview-scroll {
2417
- position: relative;
2418
- flex: 1;
2419
- min-height: 0;
2420
- overflow-y: auto;
2421
- overflow-x: hidden;
2422
- padding-right: 68px;
2423
- display: flex;
2424
- flex-direction: column;
2425
- scrollbar-width: thin;
2426
- scrollbar-color: rgba(166, 149, 130, 0.85) transparent;
2427
- }
2428
-
2429
- .session-preview-header {
2430
- padding: 12px var(--spacing-sm);
2431
- border-bottom: 1px solid var(--color-border-soft);
2432
- display: flex;
2433
- align-items: flex-start;
2434
- justify-content: space-between;
2435
- gap: var(--spacing-sm);
2436
- position: sticky;
2437
- top: 0;
2438
- z-index: 2;
2439
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.98) 0%, rgba(255, 255, 255, 0.92) 100%);
2440
- backdrop-filter: blur(6px);
2441
- }
2442
-
2443
- .session-preview-header > div:first-child {
2444
- min-width: 0;
2445
- flex: 1;
2446
- }
2447
-
2448
- .session-preview-title {
2449
- font-size: var(--font-size-body);
2450
- font-weight: var(--font-weight-title);
2451
- color: var(--color-text-primary);
2452
- line-height: 1.4;
2453
- display: -webkit-box;
2454
- -webkit-line-clamp: 2;
2455
- -webkit-box-orient: vertical;
2456
- overflow: hidden;
2457
- word-break: break-word;
2458
- }
2459
-
2460
- .session-preview-sub {
2461
- margin-top: 4px;
2462
- font-size: var(--font-size-caption);
2463
- color: var(--color-text-tertiary);
2464
- line-height: 1.35;
2465
- white-space: nowrap;
2466
- overflow: hidden;
2467
- text-overflow: ellipsis;
2468
- }
2469
-
2470
- .session-preview-meta {
2471
- display: flex;
2472
- flex-wrap: wrap;
2473
- align-items: center;
2474
- margin-top: 4px;
2475
- }
2476
-
2477
- .session-preview-meta-item {
2478
- font-size: var(--font-size-caption);
2479
- color: var(--color-text-tertiary);
2480
- line-height: 1.35;
2481
- white-space: nowrap;
2482
- overflow: hidden;
2483
- text-overflow: ellipsis;
2484
- }
2485
-
2486
- .session-preview-meta-item:not(:last-child)::after {
2487
- content: "·";
2488
- margin: 0 6px;
2489
- color: var(--color-text-tertiary);
2490
- opacity: 0.7;
2491
- }
2492
-
2493
- .session-actions {
2494
- display: flex;
2495
- align-items: center;
2496
- gap: 8px;
2497
- flex: 0 1 auto;
2498
- max-width: 100%;
2499
- margin-left: 0;
2500
- flex-wrap: wrap;
2501
- justify-content: flex-end;
2502
- }
2503
-
2504
- .session-preview-body {
2505
- flex: 1;
2506
- min-height: 0;
2507
- padding: var(--spacing-sm);
2508
- display: flex;
2509
- flex-direction: column;
2510
- gap: 10px;
2511
- }
2512
-
2513
- .session-preview-messages {
2514
- min-width: 0;
2515
- display: flex;
2516
- flex-direction: column;
2517
- gap: 10px;
2518
- contain: layout style;
2519
- }
2520
-
2521
- .session-timeline {
2522
- position: absolute;
2523
- top: var(--session-preview-header-offset, 72px);
2524
- right: 8px;
2525
- bottom: 12px;
2526
- width: 56px;
2527
- height: auto;
2528
- border-radius: 12px;
2529
- border: 1px solid rgba(208, 196, 182, 0.5);
2530
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.92) 0%, rgba(252, 246, 239, 0.94) 100%);
2531
- box-shadow: 0 4px 12px rgba(31, 26, 23, 0.06);
2532
- padding: 6px 4px 28px;
2533
- z-index: 3;
2534
- }
2535
-
2536
- .session-timeline-track {
2537
- position: absolute;
2538
- left: 50%;
2539
- top: 10px;
2540
- bottom: 32px;
2541
- width: 2px;
2542
- transform: translateX(-50%);
2543
- background: linear-gradient(to bottom, rgba(166, 149, 130, 0.3) 0%, rgba(166, 149, 130, 0.65) 100%);
2544
- border-radius: 999px;
2545
- }
2546
-
2547
- .session-timeline-node {
2548
- position: absolute;
2549
- left: 50%;
2550
- width: 10px;
2551
- height: 10px;
2552
- border-radius: 50%;
2553
- border: 1px solid rgba(139, 118, 104, 0.7);
2554
- background: rgba(255, 255, 255, 0.94);
2555
- transform: translate(-50%, -50%);
2556
- cursor: pointer;
2557
- padding: 0;
2558
- transition: none;
2559
- will-change: auto;
2560
- }
2561
-
2562
- .session-timeline-node:hover {
2563
- transform: translate(-50%, -50%);
2564
- border-color: rgba(201, 94, 75, 0.85);
2565
- background: rgba(255, 255, 255, 1);
2566
- box-shadow: none;
2567
- }
2568
-
2569
- .session-timeline-node.active {
2570
- transform: translate(-50%, -50%);
2571
- border-color: rgba(201, 94, 75, 0.95);
2572
- background: rgba(201, 94, 75, 0.95);
2573
- box-shadow: none;
2574
- }
2575
-
2576
- .session-timeline-current {
2577
- position: absolute;
2578
- left: 4px;
2579
- right: 4px;
2580
- bottom: 4px;
2581
- font-size: 10px;
2582
- line-height: 1.2;
2583
- color: var(--color-text-tertiary);
2584
- text-align: center;
2585
- white-space: nowrap;
2586
- overflow: hidden;
2587
- text-overflow: ellipsis;
2588
- }
2589
-
2590
- .session-msg {
2591
- border-radius: 10px;
2592
- padding: 10px 12px 10px 18px;
2593
- border: 1px solid rgba(208, 196, 182, 0.45);
2594
- background: rgba(255, 255, 255, 0.75);
2595
- position: relative;
2596
- box-shadow: 0 2px 6px rgba(31, 26, 23, 0.04);
2597
- contain: layout style paint;
2598
- }
2599
-
2600
- .session-msg.user {
2601
- border-color: rgba(210, 107, 90, 0.35);
2602
- background: rgba(210, 107, 90, 0.08);
2603
- }
2604
-
2605
- .session-msg::before {
2606
- content: "";
2607
- position: absolute;
2608
- left: 8px;
2609
- top: 10px;
2610
- bottom: 10px;
2611
- width: 3px;
2612
- border-radius: 999px;
2613
- background: rgba(139, 118, 104, 0.45);
2614
- }
2615
-
2616
- .session-msg.user::before {
2617
- background: rgba(210, 107, 90, 0.85);
2618
- }
2619
-
2620
- .session-msg.assistant::before {
2621
- background: rgba(90, 139, 106, 0.6);
2622
- }
2623
-
2624
- .session-msg-header {
2625
- display: flex;
2626
- align-items: flex-start;
2627
- justify-content: space-between;
2628
- gap: var(--spacing-xs);
2629
- margin-bottom: 6px;
2630
- font-size: var(--font-size-caption);
2631
- color: var(--color-text-tertiary);
2632
- }
2633
-
2634
- .session-msg-meta {
2635
- min-width: 0;
2636
- flex: 1;
2637
- display: flex;
2638
- align-items: center;
2639
- gap: 8px;
2640
- }
2641
-
2642
- .session-msg-role {
2643
- font-weight: var(--font-weight-secondary);
2644
- color: var(--color-text-secondary);
2645
- }
2646
-
2647
- .session-msg-time {
2648
- white-space: nowrap;
2649
- overflow: hidden;
2650
- text-overflow: ellipsis;
2651
- color: var(--color-text-tertiary);
2652
- }
2653
-
2654
- .session-msg-content {
2655
- font-size: var(--font-size-secondary);
2656
- line-height: 1.55;
2657
- color: var(--color-text-primary);
2658
- white-space: pre-wrap;
2659
- word-break: break-word;
2660
- }
2661
-
2662
- .session-preview-empty {
2663
- flex: 1;
2664
- display: flex;
2665
- align-items: center;
2666
- justify-content: center;
2667
- color: var(--color-text-tertiary);
2668
- font-size: var(--font-size-secondary);
2669
- padding: var(--spacing-md);
2670
- text-align: center;
2671
- flex-direction: column;
2672
- gap: 8px;
2673
- }
2674
-
2675
- .session-preview-empty::before {
2676
- content: "";
2677
- width: 34px;
2678
- height: 34px;
2679
- border-radius: 50%;
2680
- background: rgba(210, 107, 90, 0.12);
2681
- box-shadow: inset 0 0 0 6px rgba(255, 255, 255, 0.7);
2682
- }
2683
-
2684
- @media (max-width: 1100px) {
2685
- .session-layout {
2686
- grid-template-columns: 1fr;
2687
- height: auto;
2688
- min-height: 0;
2689
- }
2690
-
2691
- .session-toolbar {
2692
- grid-template-columns: 1fr;
2693
- }
2694
-
2695
- .session-toolbar-actions {
2696
- justify-content: flex-start;
2697
- }
2698
-
2699
- .session-toolbar-footer {
2700
- justify-content: flex-start;
2701
- }
2702
-
2703
- .session-list {
2704
- position: static;
2705
- max-height: 300px;
2706
- height: auto;
2707
- }
2708
-
2709
- .session-preview {
2710
- min-height: 360px;
2711
- max-height: none;
2712
- height: auto;
2713
- position: relative;
2714
- transform: none;
2715
- box-shadow: var(--shadow-card);
2716
- }
2717
-
2718
- .session-preview-scroll {
2719
- padding-right: 0;
2720
- }
2721
-
2722
- .session-timeline {
2723
- display: none;
2724
- }
2725
-
2726
- .session-preview-header {
2727
- flex-direction: column;
2728
- align-items: stretch;
2729
- }
2730
-
2731
- .session-actions {
2732
- justify-content: flex-start;
2733
- }
2734
-
2735
- .session-preview.active {
2736
- box-shadow: var(--shadow-float);
2737
- }
2738
- }
2739
-
2740
- @media (max-width: 520px) {
2741
- .session-item-header {
2742
- flex-direction: column;
2743
- align-items: stretch;
2744
- }
2745
-
2746
- .session-item-actions {
2747
- justify-content: flex-end;
2748
- }
2749
-
2750
- .session-actions {
2751
- width: 100%;
2752
- flex-direction: column;
2753
- align-items: stretch;
2754
- }
2755
-
2756
- .btn-session-refresh,
2757
- .btn-session-export {
2758
- width: 100%;
2759
- }
2760
-
2761
- .session-toolbar-group.session-toolbar-actions {
2762
- flex-direction: column;
2763
- align-items: stretch;
2764
- }
2765
-
2766
- .session-toolbar-group.session-toolbar-actions .btn-tool {
2767
- width: 100%;
2768
- }
2769
-
2770
- .trash-item-header {
2771
- flex-direction: column;
2772
- align-items: stretch;
2773
- gap: 10px;
2774
- }
2775
-
2776
- .trash-item-mainline {
2777
- flex-direction: column;
2778
- align-items: flex-start;
2779
- gap: 6px;
2780
- }
2781
-
2782
- .trash-item-side {
2783
- width: 100%;
2784
- min-width: 0;
2785
- align-items: stretch;
2786
- gap: 10px;
2787
- }
2788
-
2789
- .trash-item-actions {
2790
- display: grid;
2791
- grid-template-columns: repeat(2, minmax(0, 1fr));
2792
- justify-content: flex-start;
2793
- width: 100%;
2794
- }
2795
-
2796
- .trash-item-actions .btn-mini {
2797
- width: 100%;
2798
- min-height: 40px;
2799
- display: inline-flex;
2800
- align-items: center;
2801
- justify-content: center;
2802
- }
2803
-
2804
- .trash-item-time {
2805
- text-align: right;
2806
- }
2807
- }
2808
-
2809
- .btn[disabled] {
2810
- opacity: 0.5;
2811
- cursor: not-allowed;
2812
- transform: none;
2813
- box-shadow: none;
2814
- }
2815
-
2816
- /* ============================================
2817
- 模态框
2818
- ============================================ */
2819
- .modal-overlay {
2820
- position: fixed;
2821
- top: 0;
2822
- left: 0;
2823
- right: 0;
2824
- bottom: 0;
2825
- background: linear-gradient(to bottom, rgba(31, 26, 23, 0.3) 0%, rgba(31, 26, 23, 0.5) 100%);
2826
- display: flex;
2827
- justify-content: center;
2828
- align-items: center;
2829
- z-index: 100;
2830
- backdrop-filter: blur(8px) saturate(180%);
2831
- -webkit-backdrop-filter: blur(8px) saturate(180%);
2832
- animation: fadeIn var(--transition-normal) var(--ease-out-expo);
2833
- }
2834
-
2835
- .modal {
2836
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.98) 100%);
2837
- width: 90%;
2838
- max-width: 400px;
2839
- max-height: 90vh;
2840
- overflow-y: auto;
2841
- overscroll-behavior: contain;
2842
- border-radius: var(--radius-lg);
2843
- padding: var(--spacing-md);
2844
- box-shadow: var(--shadow-modal);
2845
- border: 1px solid rgba(255, 255, 255, 0.8);
2846
- animation: slideUp var(--transition-slow) var(--ease-spring);
2847
- }
2848
-
2849
- .modal-wide {
2850
- max-width: 980px;
2851
- }
2852
-
2853
- .modal-editor {
2854
- width: min(96vw, 980px);
2855
- max-height: calc(100vh - 24px);
2856
- display: flex;
2857
- flex-direction: column;
2858
- overflow: hidden;
2859
- padding: 0;
2860
- }
2861
-
2862
- .modal-editor-header {
2863
- margin-bottom: 0;
2864
- padding: var(--spacing-md) var(--spacing-md) 0;
2865
- }
2866
-
2867
- .modal-editor-body {
2868
- flex: 1;
2869
- min-height: 0;
2870
- overflow-y: auto;
2871
- padding: var(--spacing-sm) var(--spacing-md) 0;
2872
- }
2873
-
2874
- .modal-editor-footer {
2875
- margin-top: 0;
2876
- padding: var(--spacing-sm) var(--spacing-md) var(--spacing-md);
2877
- border-top: 1px solid var(--color-border-soft);
2878
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.82) 0%, rgba(255, 255, 255, 0.96) 100%);
2879
- backdrop-filter: blur(2px);
2880
- }
2881
-
2882
- .modal-title {
2883
- font-size: var(--font-size-title);
2884
- font-weight: var(--font-weight-title);
2885
- margin-bottom: var(--spacing-md);
2886
- color: var(--color-text-primary);
2887
- letter-spacing: -0.01em;
2888
- }
2889
-
2890
- .confirm-dialog {
2891
- max-width: 460px;
2892
- }
2893
-
2894
- .confirm-dialog-message {
2895
- font-size: var(--font-size-body);
2896
- line-height: 1.7;
2897
- color: var(--color-text-secondary);
2898
- white-space: pre-wrap;
2899
- }
2900
-
2901
- .confirm-dialog-actions {
2902
- margin-top: var(--spacing-lg);
2903
- justify-content: flex-end;
2904
- }
2905
-
2906
- .install-list {
2907
- display: flex;
2908
- flex-direction: column;
2909
- gap: var(--spacing-sm);
2910
- margin-top: var(--spacing-sm);
2911
- }
2912
-
2913
- .install-row {
2914
- display: flex;
2915
- align-items: center;
2916
- gap: var(--spacing-sm);
2917
- padding: 10px 12px;
2918
- border: 1px solid var(--color-border-soft);
2919
- border-radius: var(--radius-lg);
2920
- background: var(--color-surface-alt);
2921
- }
2922
-
2923
- .install-row-main {
2924
- flex: 1;
2925
- display: flex;
2926
- flex-direction: column;
2927
- gap: 6px;
2928
- }
2929
-
2930
- .install-row-title {
2931
- font-size: var(--font-size-secondary);
2932
- color: var(--color-text-secondary);
2933
- }
2934
-
2935
- .install-command {
2936
- flex: 1;
2937
- font-family: var(--font-family-mono);
2938
- font-size: var(--font-size-secondary);
2939
- color: var(--color-text-primary);
2940
- word-break: break-all;
2941
- background: rgba(255, 255, 255, 0.7);
2942
- padding: 8px 10px;
2943
- border-radius: var(--radius-sm);
2944
- border: 1px solid var(--color-border-soft);
2945
- }
2946
-
2947
- .install-row .btn-mini {
2948
- white-space: nowrap;
2949
- }
2950
-
2951
- .install-action-tabs {
2952
- display: flex;
2953
- gap: var(--spacing-xs);
2954
- flex-wrap: wrap;
2955
- }
2956
-
2957
- .install-action-tabs .btn-mini.active {
2958
- background: rgba(201, 94, 75, 0.16);
2959
- border-color: rgba(201, 94, 75, 0.32);
2960
- color: var(--color-text-primary);
2961
- }
2962
-
2963
- .install-registry-input {
2964
- width: 100%;
2965
- }
2966
-
2967
- .install-registry-hint {
2968
- width: 100%;
2969
- margin-top: 2px;
2970
- }
2971
-
2972
- .install-help {
2973
- margin-top: var(--spacing-sm);
2974
- border-top: 1px dashed var(--color-border-soft);
2975
- padding-top: var(--spacing-sm);
2976
- }
2977
-
2978
- .install-help-list {
2979
- margin: 6px 0 0;
2980
- padding-left: 18px;
2981
- color: var(--color-text-secondary);
2982
- font-size: var(--font-size-secondary);
2983
- }
2984
-
2985
- .install-help-list li + li {
2986
- margin-top: 4px;
2987
- }
2988
-
2989
- .modal-header {
2990
- display: flex;
2991
- align-items: center;
2992
- justify-content: space-between;
2993
- gap: var(--spacing-sm);
2994
- margin-bottom: var(--spacing-md);
2995
- flex-wrap: wrap;
2996
- }
2997
-
2998
- .modal-header .modal-title {
2999
- margin-bottom: 0;
3000
- }
3001
-
3002
- .modal-header-actions {
3003
- display: inline-flex;
3004
- align-items: center;
3005
- gap: 8px;
3006
- margin-left: auto;
3007
- }
3008
-
3009
- .btn-modal-copy {
3010
- padding: 6px 12px;
3011
- white-space: nowrap;
3012
- flex-shrink: 0;
3013
- }
3014
-
3015
- .form-group {
3016
- margin-bottom: var(--spacing-sm);
3017
- }
3018
-
3019
- .form-label {
3020
- display: block;
3021
- font-size: var(--font-size-secondary);
3022
- font-weight: var(--font-weight-secondary);
3023
- color: var(--color-text-secondary);
3024
- margin-bottom: 7px;
3025
- letter-spacing: 0.01em;
3026
- }
3027
-
3028
- .form-input {
3029
- width: 100%;
3030
- padding: 13px var(--spacing-sm);
3031
- border: 1.5px solid var(--color-border-soft);
3032
- border-radius: var(--radius-sm);
3033
- font-size: var(--font-size-body);
3034
- background-color: var(--color-surface-alt);
3035
- color: var(--color-text-primary);
3036
- outline: none;
3037
- transition: all var(--transition-fast) var(--ease-spring);
3038
- font-family: var(--font-family-body);
3039
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
3040
- }
3041
-
3042
- .form-input:hover {
3043
- border-color: var(--color-border-strong);
3044
- }
3045
-
3046
- .form-input:focus {
3047
- border-color: var(--color-brand);
3048
- background-color: var(--color-surface);
3049
- box-shadow: var(--shadow-input-focus);
3050
- }
3051
-
3052
- .form-input::placeholder {
3053
- color: var(--color-text-tertiary);
3054
- opacity: 0.7;
3055
- }
3056
-
3057
- .form-select {
3058
- width: 100%;
3059
- min-height: 44px;
3060
- padding: 10px 40px 10px 12px;
3061
- border: 1.5px solid var(--color-border-soft);
3062
- border-radius: var(--radius-sm);
3063
- font-size: var(--font-size-secondary);
3064
- font-weight: var(--font-weight-secondary);
3065
- background-color: var(--color-surface-alt);
3066
- color: var(--color-text-primary);
3067
- outline: none;
3068
- transition: all var(--transition-fast) var(--ease-spring);
3069
- font-family: var(--font-family-body);
3070
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
3071
- cursor: pointer;
3072
- appearance: none;
3073
- -webkit-appearance: none;
3074
- -moz-appearance: none;
3075
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23505A66' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");
3076
- background-repeat: no-repeat;
3077
- background-position: right 14px center;
3078
- background-size: 12px;
3079
- }
3080
-
3081
- .form-select:hover {
3082
- border-color: var(--color-border-strong);
3083
- background-color: var(--color-surface);
3084
- }
3085
-
3086
- .form-select:focus {
3087
- border-color: var(--color-brand);
3088
- background-color: var(--color-surface);
3089
- box-shadow: var(--shadow-input-focus);
3090
- }
3091
-
3092
- .form-select:disabled {
3093
- background: linear-gradient(to right, var(--color-bg) 0%, rgba(247, 241, 232, 0.5) 100%);
3094
- color: var(--color-text-tertiary);
3095
- cursor: not-allowed;
3096
- border-color: transparent;
3097
- }
3098
-
3099
- .template-editor {
3100
- min-height: min(60vh, 520px);
3101
- max-height: min(65vh, 620px);
3102
- resize: vertical;
3103
- overflow: auto;
3104
- white-space: pre;
3105
- font-family: var(--font-family-mono);
3106
- font-size: 13px;
3107
- line-height: 1.45;
3108
- }
3109
-
3110
- .template-editor-warning {
3111
- margin-top: 8px;
3112
- color: #8d5b31;
3113
- font-size: var(--font-size-caption);
3114
- line-height: 1.4;
3115
- }
3116
-
3117
-
3118
- .agents-diff-hint {
3119
- margin-top: 6px;
3120
- color: var(--color-text-tertiary);
3121
- font-size: var(--font-size-caption);
3122
- }
3123
-
3124
- .agents-diff-save-alert {
3125
- margin-bottom: 8px;
3126
- padding: 8px 10px;
3127
- border-radius: var(--radius-sm);
3128
- border: 1px solid rgba(238, 178, 90, 0.45);
3129
- background: rgba(255, 236, 204, 0.72);
3130
- color: #8d5b31;
3131
- font-size: var(--font-size-caption);
3132
- font-weight: var(--font-weight-secondary);
3133
- }
3134
-
3135
- .agents-diff-summary {
3136
- display: flex;
3137
- align-items: center;
3138
- gap: 8px;
3139
- margin-bottom: 8px;
3140
- font-size: var(--font-size-caption);
3141
- color: var(--color-text-tertiary);
3142
- }
3143
-
3144
- .agents-diff-stat {
3145
- display: inline-flex;
3146
- align-items: center;
3147
- gap: 4px;
3148
- padding: 2px 8px;
3149
- border-radius: 999px;
3150
- border: 1px solid transparent;
3151
- font-weight: var(--font-weight-secondary);
3152
- }
3153
-
3154
- .agents-diff-stat.add {
3155
- color: #2b6a3b;
3156
- background: rgba(57, 181, 97, 0.12);
3157
- border-color: rgba(57, 181, 97, 0.2);
3158
- }
3159
-
3160
- .agents-diff-stat.del {
3161
- color: #8a2f36;
3162
- background: rgba(220, 95, 108, 0.12);
3163
- border-color: rgba(220, 95, 108, 0.2);
3164
- }
3165
-
3166
-
3167
- .agents-diff-empty {
3168
- padding: 10px 12px;
3169
- font-size: var(--font-size-caption);
3170
- color: var(--color-text-tertiary);
3171
- border: 1px dashed var(--color-border-soft);
3172
- border-radius: var(--radius-sm);
3173
- background: rgba(255, 255, 255, 0.6);
3174
- }
3175
-
3176
- .agents-diff-view {
3177
- border: 1px solid var(--color-border-soft);
3178
- border-radius: var(--radius-sm);
3179
- background: rgba(255, 255, 255, 0.7);
3180
- font-family: var(--font-family-mono);
3181
- font-size: 12px;
3182
- line-height: 1.55;
3183
- max-height: min(32vh, 280px);
3184
- overflow: auto;
3185
- }
3186
-
3187
-
3188
- .agents-diff-editor {
3189
- min-height: min(60vh, 520px);
3190
- max-height: min(65vh, 620px);
3191
- }
3192
-
3193
- .agents-diff-line {
3194
- display: grid;
3195
- grid-template-columns: 16px 1fr;
3196
- gap: 8px;
3197
- padding: 2px 10px;
3198
- align-items: start;
3199
- }
3200
-
3201
- .agents-diff-line + .agents-diff-line {
3202
- border-top: none;
3203
- }
3204
-
3205
- .agents-diff-line.add {
3206
- background: rgba(57, 181, 97, 0.08);
3207
- }
3208
-
3209
- .agents-diff-line.del {
3210
- background: rgba(220, 95, 108, 0.1);
3211
- }
3212
-
3213
- .agents-diff-line.context {
3214
- background: transparent;
3215
- }
3216
-
3217
-
3218
- .agents-diff-line-sign {
3219
- text-align: center;
3220
- color: var(--color-text-tertiary);
3221
- min-height: 20px;
3222
- }
3223
-
3224
- .agents-diff-line-text {
3225
- white-space: pre-wrap;
3226
- word-break: break-word;
3227
- color: var(--color-text-primary);
3228
- }
3229
-
3230
- .form-input:disabled,
3231
- .form-input[readonly] {
3232
- background: linear-gradient(to right, var(--color-bg) 0%, rgba(247, 241, 232, 0.5) 100%);
3233
- color: var(--color-text-tertiary);
3234
- cursor: not-allowed;
3235
- border-color: transparent;
3236
- }
3237
-
3238
- .form-hint {
3239
- font-size: var(--font-size-caption);
3240
- color: var(--color-text-tertiary);
3241
- margin-top: 5px;
3242
- opacity: 0.8;
3243
- }
3244
-
3245
- .quick-section {
3246
- margin-top: var(--spacing-md);
3247
- padding: var(--spacing-sm);
3248
- border-radius: var(--radius-lg);
3249
- border: 1px solid var(--color-border-soft);
3250
- background: linear-gradient(140deg, rgba(255, 252, 247, 0.95), rgba(255, 255, 255, 0.6));
3251
- }
3252
-
3253
- .quick-header {
3254
- display: flex;
3255
- flex-wrap: wrap;
3256
- gap: var(--spacing-xs);
3257
- align-items: flex-start;
3258
- justify-content: space-between;
3259
- margin-bottom: var(--spacing-sm);
3260
- }
3261
-
3262
- .quick-title {
3263
- font-size: var(--font-size-secondary);
3264
- font-weight: var(--font-weight-secondary);
3265
- color: var(--color-text-secondary);
3266
- }
3267
-
3268
- .quick-actions {
3269
- display: flex;
3270
- flex-wrap: wrap;
3271
- gap: var(--spacing-xs);
3272
- }
3273
-
3274
- .quick-steps {
3275
- display: flex;
3276
- flex-wrap: wrap;
3277
- gap: var(--spacing-xs);
3278
- margin-bottom: var(--spacing-sm);
3279
- }
3280
-
3281
- .quick-step {
3282
- display: inline-flex;
3283
- align-items: center;
3284
- gap: 6px;
3285
- padding: 4px 10px;
3286
- border-radius: 999px;
3287
- border: 1px dashed var(--color-border-soft);
3288
- background: var(--color-surface);
3289
- font-size: var(--font-size-caption);
3290
- color: var(--color-text-secondary);
3291
- }
3292
-
3293
- .step-badge {
3294
- width: 20px;
3295
- height: 20px;
3296
- border-radius: 999px;
3297
- display: inline-flex;
3298
- align-items: center;
3299
- justify-content: center;
3300
- background: var(--color-brand);
3301
- color: #fff;
3302
- font-size: 12px;
3303
- font-weight: var(--font-weight-secondary);
3304
- }
3305
-
3306
- .quick-grid {
3307
- display: grid;
3308
- gap: var(--spacing-sm);
3309
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
3310
- }
3311
-
3312
- .quick-card {
3313
- background: var(--color-surface);
3314
- border: 1px solid var(--color-border-soft);
3315
- border-radius: var(--radius-sm);
3316
- padding: var(--spacing-sm);
3317
- box-shadow: var(--shadow-subtle);
3318
- }
3319
-
3320
- .quick-option {
3321
- display: flex;
3322
- align-items: center;
3323
- gap: 8px;
3324
- font-size: var(--font-size-caption);
3325
- color: var(--color-text-secondary);
3326
- margin-bottom: 6px;
3327
- }
3328
-
3329
- .quick-option input {
3330
- accent-color: var(--color-brand);
3331
- }
3332
-
3333
- .structured-section {
3334
- margin-top: var(--spacing-md);
3335
- padding: var(--spacing-sm);
3336
- border-radius: var(--radius-lg);
3337
- border: 1px solid var(--color-border-soft);
3338
- background: rgba(255, 255, 255, 0.6);
3339
- }
3340
-
3341
- .structured-header {
3342
- display: flex;
3343
- flex-wrap: wrap;
3344
- gap: var(--spacing-xs);
3345
- align-items: baseline;
3346
- justify-content: space-between;
3347
- margin-bottom: var(--spacing-sm);
3348
- }
3349
-
3350
- .structured-title {
3351
- font-size: var(--font-size-secondary);
3352
- font-weight: var(--font-weight-secondary);
3353
- color: var(--color-text-secondary);
3354
- }
3355
-
3356
- .structured-grid {
3357
- display: grid;
3358
- gap: var(--spacing-sm);
3359
- grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
3360
- }
3361
-
3362
- .structured-card {
3363
- background: var(--color-surface);
3364
- border: 1px solid var(--color-border-soft);
3365
- border-radius: var(--radius-sm);
3366
- padding: var(--spacing-sm);
3367
- box-shadow: var(--shadow-subtle);
3368
- }
3369
-
3370
- .structured-card-title {
3371
- font-size: var(--font-size-body);
3372
- font-weight: var(--font-weight-secondary);
3373
- color: var(--color-text-secondary);
3374
- margin-bottom: 8px;
3375
- }
3376
-
3377
- .provider-list {
3378
- display: flex;
3379
- flex-direction: column;
3380
- gap: var(--spacing-xs);
3381
- }
3382
-
3383
- .provider-item {
3384
- border: 1px dashed var(--color-border-soft);
3385
- border-radius: var(--radius-sm);
3386
- padding: var(--spacing-xs);
3387
- background: var(--color-surface-alt);
3388
- }
3389
-
3390
- .provider-header {
3391
- display: flex;
3392
- flex-wrap: wrap;
3393
- gap: var(--spacing-xs);
3394
- align-items: center;
3395
- margin-bottom: 6px;
3396
- }
3397
-
3398
- .provider-name {
3399
- font-weight: var(--font-weight-secondary);
3400
- color: var(--color-text-secondary);
3401
- }
3402
-
3403
- .provider-source {
3404
- font-size: var(--font-size-caption);
3405
- color: var(--color-text-tertiary);
3406
- }
3407
-
3408
- .provider-fields {
3409
- display: grid;
3410
- gap: 6px;
3411
- }
3412
-
3413
- .provider-field {
3414
- display: flex;
3415
- flex-wrap: wrap;
3416
- gap: 6px;
3417
- align-items: baseline;
3418
- }
3419
-
3420
- .provider-field-key {
3421
- font-family: var(--font-family-mono);
3422
- font-size: var(--font-size-caption);
3423
- color: var(--color-text-muted);
3424
- min-width: 110px;
3425
- }
3426
-
3427
- .provider-field-value {
3428
- font-family: var(--font-family-mono);
3429
- font-size: var(--font-size-caption);
3430
- color: var(--color-text-secondary);
3431
- word-break: break-all;
3432
- }
3433
-
3434
- .auth-profile-list {
3435
- display: flex;
3436
- flex-direction: column;
3437
- gap: var(--spacing-xs);
3438
- }
3439
-
3440
- .auth-profile-item {
3441
- border: 1px dashed var(--color-border-soft);
3442
- border-radius: var(--radius-sm);
3443
- padding: var(--spacing-sm);
3444
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.82) 0%, rgba(247, 241, 232, 0.4) 100%);
3445
- }
3446
-
3447
- .auth-profile-header {
3448
- display: flex;
3449
- align-items: flex-start;
3450
- justify-content: space-between;
3451
- gap: var(--spacing-sm);
3452
- }
3453
-
3454
- .auth-profile-main {
3455
- min-width: 0;
3456
- flex: 1;
3457
- display: flex;
3458
- flex-direction: column;
3459
- gap: 6px;
3460
- }
3461
-
3462
- .auth-profile-title {
3463
- font-size: var(--font-size-body);
3464
- font-weight: var(--font-weight-secondary);
3465
- color: var(--color-text-secondary);
3466
- letter-spacing: -0.01em;
3467
- word-break: break-all;
3468
- }
3469
-
3470
- .auth-profile-meta {
3471
- display: flex;
3472
- flex-wrap: wrap;
3473
- gap: 8px;
3474
- align-items: center;
3475
- }
3476
-
3477
- .auth-profile-actions {
3478
- display: flex;
3479
- flex-wrap: wrap;
3480
- gap: 8px;
3481
- justify-content: flex-end;
3482
- }
3483
-
3484
- .auth-profile-grid {
3485
- margin-top: 10px;
3486
- display: grid;
3487
- grid-template-columns: minmax(96px, 130px) minmax(0, 1fr);
3488
- gap: 8px 12px;
3489
- align-items: start;
3490
- }
3491
-
3492
- .auth-profile-row {
3493
- display: contents;
3494
- }
3495
-
3496
- .auth-profile-key {
3497
- font-family: var(--font-family-mono);
3498
- font-size: var(--font-size-caption);
3499
- color: var(--color-text-muted);
3500
- line-height: 1.4;
3501
- }
3502
-
3503
- .auth-profile-value {
3504
- font-family: var(--font-family-mono);
3505
- font-size: var(--font-size-caption);
3506
- color: var(--color-text-secondary);
3507
- line-height: 1.4;
3508
- word-break: break-all;
3509
- }
3510
-
3511
- .agent-list {
3512
- display: flex;
3513
- flex-direction: column;
3514
- gap: var(--spacing-xs);
3515
- }
3516
-
3517
- .agent-item {
3518
- border: 1px dashed var(--color-border-soft);
3519
- border-radius: var(--radius-sm);
3520
- padding: var(--spacing-xs);
3521
- background: var(--color-surface-alt);
3522
- }
3523
-
3524
- .agent-header {
3525
- display: flex;
3526
- flex-wrap: wrap;
3527
- gap: var(--spacing-xs);
3528
- align-items: center;
3529
- margin-bottom: 6px;
3530
- }
3531
-
3532
- .agent-name {
3533
- font-weight: var(--font-weight-secondary);
3534
- color: var(--color-text-secondary);
3535
- }
3536
-
3537
- .agent-id {
3538
- font-size: var(--font-size-caption);
3539
- color: var(--color-text-tertiary);
3540
- }
3541
-
3542
- .agent-meta {
3543
- display: flex;
3544
- flex-wrap: wrap;
3545
- gap: 8px;
3546
- font-size: var(--font-size-caption);
3547
- color: var(--color-text-secondary);
3548
- }
3549
-
3550
- .skill-toolbar {
3551
- display: flex;
3552
- align-items: center;
3553
- justify-content: space-between;
3554
- gap: var(--spacing-xs);
3555
- margin-bottom: 10px;
3556
- flex-wrap: wrap;
3557
- }
3558
-
3559
- .skill-select-all {
3560
- display: inline-flex;
3561
- align-items: center;
3562
- gap: 8px;
3563
- font-size: var(--font-size-secondary);
3564
- color: var(--color-text-secondary);
3565
- user-select: none;
3566
- }
3567
-
3568
- .skill-toolbar-count {
3569
- font-size: var(--font-size-caption);
3570
- color: var(--color-text-tertiary);
3571
- }
3572
-
3573
- .skills-modal {
3574
- width: min(96vw, 920px);
3575
- }
3576
-
3577
- .skills-modal-header {
3578
- align-items: flex-start;
3579
- margin-bottom: var(--spacing-xs);
3580
- }
3581
-
3582
- .skills-modal-subtitle {
3583
- margin-top: 6px;
3584
- font-size: var(--font-size-caption);
3585
- color: var(--color-text-tertiary);
3586
- line-height: 1.45;
3587
- }
3588
-
3589
- .skills-modal-actions {
3590
- display: flex;
3591
- flex-direction: row;
3592
- align-items: center;
3593
- gap: 8px;
3594
- }
3595
-
3596
- .skills-root-box {
3597
- border: 1px solid var(--color-border-soft);
3598
- border-radius: var(--radius-sm);
3599
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.86) 0%, rgba(255, 255, 255, 0.66) 100%);
3600
- padding: 10px 12px;
3601
- font-family: var(--font-family-mono);
3602
- font-size: var(--font-size-caption);
3603
- color: var(--color-text-secondary);
3604
- word-break: break-all;
3605
- }
3606
-
3607
- .skills-root-group {
3608
- margin-bottom: var(--spacing-xs);
3609
- }
3610
-
3611
- .skills-summary-strip {
3612
- display: grid;
3613
- grid-template-columns: repeat(4, minmax(0, 1fr));
3614
- gap: var(--spacing-xs);
3615
- margin-bottom: var(--spacing-sm);
3616
- }
3617
-
3618
- .skills-summary-item {
3619
- border: 1px solid rgba(160, 145, 130, 0.2);
3620
- border-radius: var(--radius-sm);
3621
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.93) 0%, rgba(255, 255, 255, 0.78) 100%);
3622
- padding: 10px 12px;
3623
- min-width: 0;
3624
- box-shadow: var(--shadow-subtle);
3625
- display: flex;
3626
- flex-direction: column;
3627
- gap: 2px;
3628
- }
3629
-
3630
- .skills-summary-label {
3631
- font-size: var(--font-size-caption);
3632
- color: var(--color-text-tertiary);
3633
- }
3634
-
3635
- .skills-summary-value {
3636
- font-size: var(--font-size-large);
3637
- color: var(--color-text-secondary);
3638
- line-height: 1.2;
3639
- }
3640
-
3641
- .skills-panel {
3642
- border: 1px solid rgba(160, 145, 130, 0.24);
3643
- border-radius: var(--radius-md);
3644
- padding: 12px;
3645
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.88) 0%, rgba(255, 255, 255, 0.72) 100%);
3646
- margin-bottom: var(--spacing-sm);
3647
- }
3648
-
3649
- .skills-panel-header {
3650
- display: flex;
3651
- justify-content: space-between;
3652
- align-items: flex-start;
3653
- gap: var(--spacing-xs);
3654
- margin-bottom: 10px;
3655
- }
3656
-
3657
- .skills-panel-title-wrap {
3658
- min-width: 0;
3659
- }
3660
-
3661
- .skills-panel-title {
3662
- font-size: var(--font-size-body);
3663
- font-weight: var(--font-weight-primary);
3664
- color: var(--color-text-secondary);
3665
- }
3666
-
3667
- .skills-panel-note {
3668
- margin-top: 4px;
3669
- font-size: var(--font-size-caption);
3670
- color: var(--color-text-tertiary);
3671
- line-height: 1.45;
3672
- }
3673
-
3674
- .market-overview-section {
3675
- margin-bottom: var(--spacing-sm);
3676
- }
3677
-
3678
- .market-overview-header {
3679
- gap: var(--spacing-sm);
3680
- align-items: flex-start;
3681
- }
3682
-
3683
- .market-header-actions {
3684
- flex-wrap: wrap;
3685
- }
3686
-
3687
- .market-target-switch {
3688
- display: flex;
3689
- flex-wrap: wrap;
3690
- gap: 8px;
3691
- margin-bottom: var(--spacing-sm);
3692
- }
3693
-
3694
- .market-target-switch-compact {
3695
- justify-content: flex-end;
3696
- margin-bottom: 0;
3697
- }
3698
-
3699
- .market-target-chip {
3700
- border: 1px solid rgba(160, 145, 130, 0.28);
3701
- border-radius: 999px;
3702
- background: rgba(255, 255, 255, 0.92);
3703
- color: var(--color-text-secondary);
3704
- padding: 8px 14px;
3705
- font-size: var(--font-size-caption);
3706
- font-weight: var(--font-weight-secondary);
3707
- cursor: pointer;
3708
- transition: border-color var(--transition-fast) var(--ease-smooth), background var(--transition-fast) var(--ease-smooth), color var(--transition-fast) var(--ease-smooth), box-shadow var(--transition-fast) var(--ease-smooth);
3709
- }
3710
-
3711
- .market-target-chip:disabled,
3712
- .market-target-chip[disabled] {
3713
- cursor: not-allowed;
3714
- opacity: 0.64;
3715
- pointer-events: none;
3716
- box-shadow: none;
3717
- }
3718
-
3719
- .market-target-chip.active {
3720
- border-color: rgba(208, 88, 58, 0.4);
3721
- background: linear-gradient(to bottom, rgba(255, 243, 236, 0.98) 0%, rgba(255, 232, 220, 0.86) 100%);
3722
- color: #8c3a1f;
3723
- box-shadow: var(--shadow-subtle);
3724
- }
3725
-
3726
- .market-root-box {
3727
- margin-bottom: var(--spacing-sm);
3728
- }
3729
-
3730
- .market-grid {
3731
- display: grid;
3732
- grid-template-columns: repeat(2, minmax(0, 1fr));
3733
- gap: var(--spacing-sm);
3734
- }
3735
-
3736
- .market-panel {
3737
- margin-bottom: 0;
3738
- min-width: 0;
3739
- }
3740
-
3741
- .market-actions-panel {
3742
- grid-column: 1 / -1;
3743
- }
3744
-
3745
- .market-panel-wide {
3746
- grid-column: 1 / -1;
3747
- }
3748
-
3749
- .market-preview-list {
3750
- display: grid;
3751
- gap: 10px;
3752
- }
3753
-
3754
- .market-preview-item {
3755
- display: flex;
3756
- align-items: flex-start;
3757
- justify-content: space-between;
3758
- gap: var(--spacing-xs);
3759
- padding: 10px 12px;
3760
- border: 1px solid rgba(160, 145, 130, 0.18);
3761
- border-radius: var(--radius-sm);
3762
- background: rgba(255, 255, 255, 0.64);
3763
- }
3764
-
3765
- .market-preview-main {
3766
- min-width: 0;
3767
- display: flex;
3768
- flex-direction: column;
3769
- gap: 4px;
3770
- }
3771
-
3772
- .market-preview-title {
3773
- font-size: var(--font-size-body);
3774
- font-weight: var(--font-weight-secondary);
3775
- color: var(--color-text-secondary);
3776
- overflow-wrap: anywhere;
3777
- }
3778
-
3779
- .market-preview-meta {
3780
- font-size: var(--font-size-caption);
3781
- color: var(--color-text-tertiary);
3782
- line-height: 1.45;
3783
- overflow-wrap: anywhere;
3784
- }
3785
-
3786
- .market-action-grid {
3787
- display: grid;
3788
- grid-template-columns: repeat(3, minmax(0, 1fr));
3789
- gap: var(--spacing-xs);
3790
- }
3791
-
3792
- .market-action-card {
3793
- border: 1px solid rgba(160, 145, 130, 0.24);
3794
- border-radius: var(--radius-sm);
3795
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.96) 0%, rgba(255, 248, 242, 0.84) 100%);
3796
- color: var(--color-text-secondary);
3797
- text-align: left;
3798
- padding: 14px;
3799
- display: flex;
3800
- flex-direction: column;
3801
- gap: 6px;
3802
- cursor: pointer;
3803
- transition: transform var(--transition-fast) var(--ease-smooth), box-shadow var(--transition-fast) var(--ease-smooth), border-color var(--transition-fast) var(--ease-smooth);
3804
- }
3805
-
3806
- .market-action-card:hover:not(:disabled) {
3807
- transform: translateY(-1px);
3808
- border-color: rgba(208, 88, 58, 0.34);
3809
- box-shadow: var(--shadow-subtle);
3810
- }
3811
-
3812
- .market-action-card:disabled {
3813
- cursor: not-allowed;
3814
- opacity: 0.64;
3815
- }
3816
-
3817
- .market-action-title {
3818
- font-size: var(--font-size-body);
3819
- font-weight: var(--font-weight-secondary);
3820
- }
3821
-
3822
- .market-action-copy {
3823
- font-size: var(--font-size-caption);
3824
- color: var(--color-text-tertiary);
3825
- line-height: 1.45;
3826
- }
3827
-
3828
- .skills-filter-row {
3829
- display: flex;
3830
- gap: var(--spacing-xs);
3831
- margin-bottom: 10px;
3832
- align-items: center;
3833
- flex-wrap: wrap;
3834
- }
3835
-
3836
- .skills-filter-row .form-input {
3837
- flex: 1;
3838
- min-width: 220px;
3839
- }
3840
-
3841
- .skills-status-select {
3842
- width: 210px;
3843
- flex: 0 0 auto;
3844
- }
3845
-
3846
- .skills-hint-line,
3847
- .hint-single-line {
3848
- display: block;
3849
- white-space: nowrap;
3850
- overflow: hidden;
3851
- text-overflow: ellipsis;
3852
- max-width: 100%;
3853
- }
3854
-
3855
- .skill-list {
3856
- display: flex;
3857
- flex-direction: column;
3858
- gap: var(--spacing-xs);
3859
- margin-bottom: var(--spacing-sm);
3860
- max-height: min(52vh, 440px);
3861
- overflow-y: auto;
3862
- padding-right: 2px;
3863
- scrollbar-width: thin;
3864
- scrollbar-color: rgba(166, 149, 130, 0.82) transparent;
3865
- }
3866
-
3867
- .skill-list::-webkit-scrollbar {
3868
- width: 6px;
3869
- height: 6px;
3870
- }
3871
-
3872
- .skill-list::-webkit-scrollbar-track {
3873
- background: transparent;
3874
- border-radius: 999px;
3875
- }
3876
-
3877
- .skill-list::-webkit-scrollbar-thumb {
3878
- background: linear-gradient(to bottom, rgba(191, 174, 154, 0.95) 0%, rgba(160, 141, 121, 0.9) 100%);
3879
- border-radius: 999px;
3880
- border: 1px solid rgba(255, 255, 255, 0.9);
3881
- }
3882
-
3883
- .skill-list::-webkit-scrollbar-thumb:hover {
3884
- background: linear-gradient(to bottom, rgba(176, 157, 137, 0.95) 0%, rgba(145, 126, 107, 0.92) 100%);
3885
- }
3886
-
3887
- .skill-item {
3888
- display: flex;
3889
- align-items: flex-start;
3890
- gap: var(--spacing-xs);
3891
- border: 1px dashed var(--color-border-soft);
3892
- border-radius: var(--radius-sm);
3893
- padding: var(--spacing-xs);
3894
- background: var(--color-surface-alt);
3895
- transition: border-color var(--transition-fast) var(--ease-spring), background-color var(--transition-fast) var(--ease-spring);
3896
- }
3897
-
3898
- .skill-item-main {
3899
- min-width: 0;
3900
- display: flex;
3901
- flex-direction: column;
3902
- gap: 6px;
3903
- flex: 1;
3904
- }
3905
-
3906
- .skill-item-title {
3907
- font-size: var(--font-size-secondary);
3908
- font-weight: var(--font-weight-secondary);
3909
- color: var(--color-text-secondary);
3910
- }
3911
-
3912
- .skill-item-description {
3913
- font-size: var(--font-size-caption);
3914
- line-height: 1.45;
3915
- color: var(--color-text-tertiary);
3916
- }
3917
-
3918
- .skill-item-meta {
3919
- display: flex;
3920
- flex-wrap: wrap;
3921
- gap: var(--spacing-xs);
3922
- align-items: center;
3923
- min-width: 0;
3924
- }
3925
-
3926
- .skill-item-path {
3927
- font-family: var(--font-family-mono);
3928
- font-size: var(--font-size-caption);
3929
- color: var(--color-text-tertiary);
3930
- word-break: break-all;
3931
- }
3932
-
3933
- .skill-item:hover {
3934
- border-color: rgba(201, 94, 75, 0.35);
3935
- }
3936
-
3937
- .skill-item.selected {
3938
- border-color: rgba(201, 94, 75, 0.55);
3939
- background: linear-gradient(to bottom, rgba(201, 94, 75, 0.10) 0%, rgba(201, 94, 75, 0.04) 100%);
3940
- }
3941
-
3942
- .skills-empty-state {
3943
- margin-bottom: var(--spacing-sm);
3944
- border: 1px dashed var(--color-border-soft);
3945
- border-radius: var(--radius-sm);
3946
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.78) 0%, rgba(255, 255, 255, 0.58) 100%);
3947
- color: var(--color-text-tertiary);
3948
- font-size: var(--font-size-secondary);
3949
- text-align: center;
3950
- padding: 18px 12px;
3951
- }
3952
-
3953
- .skills-import-block {
3954
- margin-bottom: var(--spacing-sm);
3955
- }
3956
-
3957
- .skills-import-title {
3958
- font-size: var(--font-size-body);
3959
- font-weight: var(--font-weight-secondary);
3960
- color: var(--color-text-secondary);
3961
- }
3962
-
3963
- .skills-import-list {
3964
- max-height: min(28vh, 260px);
3965
- }
3966
-
3967
- .skills-import-empty {
3968
- margin-bottom: 0;
3969
- }
3970
-
3971
- .list-row {
3972
- display: flex;
3973
- flex-wrap: wrap;
3974
- gap: var(--spacing-xs);
3975
- align-items: center;
3976
- margin-bottom: var(--spacing-xs);
3977
- }
3978
-
3979
- .list-row:last-child {
3980
- margin-bottom: 0;
3981
- }
3982
-
3983
- .list-row .form-input {
3984
- flex: 1;
3985
- min-width: 140px;
3986
- }
3987
-
3988
- .btn-mini {
3989
- padding: 6px 10px;
3990
- border-radius: var(--radius-sm);
3991
- border: 1px solid var(--color-border-soft);
3992
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.85) 100%);
3993
- font-size: var(--font-size-caption);
3994
- font-weight: var(--font-weight-secondary);
3995
- color: var(--color-text-secondary);
3996
- cursor: pointer;
3997
- transition: all var(--transition-fast) var(--ease-spring);
3998
- box-shadow: var(--shadow-subtle);
3999
- }
4000
-
4001
- .btn-mini:hover {
4002
- border-color: var(--color-brand);
4003
- color: var(--color-brand);
4004
- transform: translateY(-1px);
4005
- }
4006
-
4007
- .btn-mini.delete {
4008
- color: var(--color-error);
4009
- border-color: rgba(193, 72, 59, 0.35);
4010
- }
4011
-
4012
- .btn-mini.delete:hover {
4013
- border-color: rgba(193, 72, 59, 0.7);
4014
- color: var(--color-error);
4015
- }
4016
-
4017
- .btn-group {
4018
- display: flex;
4019
- gap: var(--spacing-sm);
4020
- margin-top: var(--spacing-md);
4021
- }
4022
-
4023
- .btn {
4024
- flex: 1;
4025
- padding: 14px var(--spacing-sm);
4026
- border-radius: var(--radius-sm);
4027
- font-size: var(--font-size-body);
4028
- font-weight: var(--font-weight-secondary);
4029
- cursor: pointer;
4030
- transition: all var(--transition-fast) var(--ease-spring);
4031
- border: 1px solid var(--color-border-soft);
4032
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.95) 100%);
4033
- color: var(--color-text-secondary);
4034
- box-shadow: var(--shadow-subtle);
4035
- letter-spacing: -0.01em;
4036
- }
4037
-
4038
- .btn:active {
4039
- transform: scale(0.985);
4040
- }
4041
-
4042
- .btn-cancel {
4043
- background: linear-gradient(to bottom, var(--color-bg) 0%, rgba(247, 241, 232, 0.8) 100%);
4044
- color: var(--color-text-primary);
4045
- border: 1px solid var(--color-border-soft);
4046
- }
4047
-
4048
- .btn-cancel:hover {
4049
- background: linear-gradient(to bottom, var(--color-border) 0%, rgba(208, 196, 182, 0.5) 100%);
4050
- }
4051
-
4052
- .btn-confirm {
4053
- background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
4054
- color: white;
4055
- box-shadow: 0 2px 4px rgba(210, 107, 90, 0.2);
4056
- border: none;
4057
- }
4058
-
4059
- .btn-confirm:hover {
4060
- box-shadow: 0 4px 8px rgba(210, 107, 90, 0.25);
4061
- filter: brightness(1.05);
4062
- }
4063
-
4064
- .btn-confirm.secondary {
4065
- background: linear-gradient(135deg, var(--color-success) 0%, rgba(90, 139, 106, 0.85) 100%);
4066
- box-shadow: 0 2px 4px rgba(90, 139, 106, 0.2);
4067
- border: none;
4068
- }
4069
-
4070
- .btn-confirm.secondary:hover {
4071
- box-shadow: 0 4px 8px rgba(90, 139, 106, 0.25);
4072
- filter: brightness(1.05);
4073
- }
4074
-
4075
- .btn-confirm.btn-danger {
4076
- background: linear-gradient(135deg, #c75642 0%, #9f392c 100%);
4077
- box-shadow: 0 2px 4px rgba(163, 51, 38, 0.24);
4078
- }
4079
-
4080
- .btn-confirm.btn-danger:hover {
4081
- box-shadow: 0 4px 10px rgba(163, 51, 38, 0.28);
4082
- filter: brightness(1.04);
4083
- }
4084
-
4085
- /* ============================================
4086
- 模型列表
4087
- ============================================ */
4088
- .model-list {
4089
- max-height: 200px;
4090
- overflow-y: auto;
4091
- border: 1px solid rgba(208, 196, 182, 0.4);
4092
- border-radius: var(--radius-sm);
4093
- margin-bottom: var(--spacing-sm);
4094
- scrollbar-width: none;
4095
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.8) 100%);
4096
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.02);
4097
- }
4098
-
4099
- .model-list::-webkit-scrollbar {
4100
- display: none;
4101
- }
4102
-
4103
- .model-item {
4104
- display: flex;
4105
- justify-content: space-between;
4106
- align-items: center;
4107
- padding: 11px var(--spacing-sm);
4108
- border-bottom: 1px solid rgba(208, 196, 182, 0.3);
4109
- font-size: var(--font-size-body);
4110
- color: var(--color-text-primary);
4111
- transition: all var(--transition-fast) var(--ease-spring);
4112
- letter-spacing: -0.005em;
4113
- }
4114
-
4115
- .model-item:last-child {
4116
- border-bottom: none;
4117
- }
4118
-
4119
- .model-item:hover {
4120
- background: linear-gradient(to right, rgba(247, 241, 232, 0.6) 0%, rgba(247, 241, 232, 0.3) 100%);
4121
- }
4122
-
4123
- .btn-remove-model {
4124
- font-size: var(--font-size-caption);
4125
- font-weight: var(--font-weight-caption);
4126
- color: var(--color-text-tertiary);
4127
- cursor: pointer;
4128
- padding: 5px 10px;
4129
- border-radius: var(--radius-full);
4130
- transition: all var(--transition-fast) var(--ease-spring);
4131
- background: transparent;
4132
- border: 1px solid rgba(139, 118, 104, 0.2);
4133
- letter-spacing: 0.03em;
4134
- }
4135
-
4136
- .btn-remove-model:hover {
4137
- background: linear-gradient(135deg, var(--color-error) 0%, rgba(200, 74, 58, 0.9) 100%);
4138
- color: white;
4139
- transform: scale(1.08);
4140
- box-shadow: 0 2px 6px rgba(200, 74, 58, 0.25);
4141
- border-color: transparent;
4142
- }
4143
-
4144
- /* ============================================
4145
- Toast - 顶部横幅
4146
- ============================================ */
4147
- .toast {
4148
- position: fixed;
4149
- top: 16px;
4150
- left: 50%;
4151
- transform: translateX(-50%);
4152
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.95) 100%);
4153
- padding: 12px 24px;
4154
- border-radius: var(--radius-full);
4155
- box-shadow: var(--shadow-raised);
4156
- z-index: 200;
4157
- animation: slideDown var(--transition-slow) var(--ease-spring);
4158
- display: flex;
4159
- align-items: center;
4160
- gap: var(--spacing-xs);
4161
- font-size: var(--font-size-body);
4162
- font-weight: var(--font-weight-body);
4163
- border: 1px solid rgba(255, 255, 255, 0.8);
4164
- backdrop-filter: blur(8px);
4165
- -webkit-backdrop-filter: blur(8px);
4166
- }
4167
-
4168
- .toast.error {
4169
- border-left: 3px solid var(--color-error);
4170
- }
4171
-
4172
- .toast.success {
4173
- border-left: 3px solid var(--color-success);
4174
- }
4175
-
4176
- /* ============================================
4177
- 状态消息
4178
- ============================================ */
4179
- .state-message {
4180
- text-align: center;
4181
- padding: 60px var(--spacing-md);
4182
- color: var(--color-text-tertiary);
4183
- font-size: var(--font-size-body);
4184
- opacity: 0.7;
4185
- letter-spacing: -0.005em;
4186
- }
4187
-
4188
- .state-message.error {
4189
- color: var(--color-error);
4190
- }
4191
-
4192
- /* 空状态 */
4193
- .empty-state {
4194
- text-align: center;
4195
- padding: 48px var(--spacing-md);
4196
- color: var(--color-text-tertiary);
4197
- }
4198
-
4199
- .empty-state-icon {
4200
- width: 48px;
4201
- height: 48px;
4202
- margin: 0 auto var(--spacing-sm);
4203
- opacity: 0.3;
4204
- }
4205
-
4206
- .empty-state-title {
4207
- font-size: var(--font-size-body);
4208
- font-weight: var(--font-weight-secondary);
4209
- color: var(--color-text-secondary);
4210
- margin-bottom: 4px;
4211
- }
4212
-
4213
- .empty-state-subtitle {
4214
- font-size: var(--font-size-secondary);
4215
- color: var(--color-text-tertiary);
4216
- opacity: 0.8;
4217
- }
4218
-
4219
- /* ============================================
4220
- 动画
4221
- ============================================ */
4222
- @keyframes fadeIn {
4223
- from { opacity: 0; }
4224
- to { opacity: 1; }
4225
- }
4226
-
4227
- @keyframes slideUp {
4228
- from { transform: translateY(24px); opacity: 0; }
4229
- to { transform: translateY(0); opacity: 1; }
4230
- }
4231
-
4232
- @keyframes slideDown {
4233
- from { transform: translateX(-50%) translateY(-100%); opacity: 0; }
4234
- to { transform: translateX(-50%) translateY(0); opacity: 1; }
4235
- }
4236
-
4237
- @keyframes spin {
4238
- from { transform: rotate(0deg); }
4239
- to { transform: rotate(360deg); }
4240
- }
4241
-
4242
- [v-cloak] {
4243
- display: none !important;
4244
- }
4245
-
4246
- /* 模式内容容器 */
4247
- .mode-content {
4248
- animation: fadeIn var(--transition-normal) var(--ease-spring);
4249
- }
4250
-
4251
- /* 内容区域包裹器 - 稳定高度 */
4252
- .content-wrapper {
4253
- min-height: 300px;
4254
- position: relative;
4255
- }
4256
-
4257
- button:focus-visible,
4258
- select:focus-visible,
4259
- input:focus-visible,
4260
- textarea:focus-visible {
4261
- outline: 3px solid rgba(201, 94, 75, 0.25);
4262
- outline-offset: 2px;
4263
- }
4264
-
4265
- @media (max-width: 1280px) {
4266
- .app-shell {
4267
- grid-template-columns: 240px minmax(0, 1fr) 300px;
4268
- gap: 14px;
4269
- }
4270
-
4271
- .status-inspector {
4272
- top: 16px;
4273
- height: calc(100vh - 32px);
4274
- }
4275
-
4276
- .main-panel {
4277
- padding: var(--spacing-sm) var(--spacing-md);
4278
- }
4279
- }
4280
-
4281
- @media (max-width: 960px) {
4282
- .container {
4283
- padding: 12px;
4284
- }
4285
- .app-shell {
4286
- grid-template-columns: 1fr;
4287
- }
4288
- .side-rail {
4289
- display: none;
4290
- }
4291
- .status-inspector {
4292
- display: none;
4293
- }
4294
- .hero-logo {
4295
- display: block;
4296
- }
4297
- .hero-github {
4298
- display: flex;
4299
- }
4300
- .github-badge-mobile {
4301
- width: 100%;
4302
- }
4303
- .github-badge-mobile .github-badge-text,
4304
- .github-badge-mobile .github-badge-label {
4305
- font-size: var(--font-size-secondary);
4306
- }
4307
- .main-panel {
4308
- padding: var(--spacing-sm) var(--spacing-sm);
4309
- border-radius: 14px;
4310
- }
4311
- .top-tabs {
4312
- display: grid !important;
4313
- grid-template-columns: repeat(2, minmax(0, 1fr));
4314
- }
4315
- .status-strip {
4316
- gap: var(--spacing-sm);
4317
- margin-top: 4px;
4318
- }
4319
- .status-chip {
4320
- flex: 1 1 calc(50% - var(--spacing-sm));
4321
- min-width: 0;
4322
- }
4323
-
4324
- .skills-summary-strip {
4325
- grid-template-columns: repeat(2, minmax(0, 1fr));
4326
- }
4327
-
4328
- .skills-panel-header {
4329
- flex-direction: column;
4330
- align-items: stretch;
4331
- }
4332
-
4333
- .skills-modal-actions {
4334
- align-items: flex-start;
4335
- }
4336
-
4337
- .market-target-switch-compact {
4338
- justify-content: flex-start;
4339
- }
4340
- }
4341
-
4342
- @media (max-width: 720px) {
4343
- .main-title {
4344
- font-size: 40px;
4345
- }
4346
-
4347
- .hero-title {
4348
- font-size: 32px;
4349
- }
4350
-
4351
- .subtitle {
4352
- font-size: var(--font-size-secondary);
4353
- margin-bottom: 16px;
4354
- }
4355
-
4356
- .segmented-control {
4357
- flex-direction: column;
4358
- gap: 6px;
4359
- }
4360
-
4361
- .status-strip {
4362
- flex-direction: row;
4363
- flex-wrap: wrap;
4364
- }
4365
-
4366
- .market-grid {
4367
- grid-template-columns: 1fr;
4368
- }
4369
-
4370
- .market-action-grid {
4371
- grid-template-columns: 1fr;
4372
- }
4373
-
4374
- .status-chip {
4375
- flex: 1 1 100%;
4376
- }
4377
- }
4378
-
4379
- @media (max-width: 540px) {
4380
- .session-item-copy.session-item-pin {
4381
- width: 44px;
4382
- height: 44px;
4383
- min-width: 44px;
4384
- min-height: 44px;
4385
- padding: 10px;
4386
- transform: none;
4387
- }
4388
-
4389
- .session-item-copy.session-item-pin svg,
4390
- .session-item-copy.session-item-pin .pin-icon {
4391
- width: 16px;
4392
- height: 16px;
4393
- }
4394
-
4395
- body {
4396
- padding: var(--spacing-md) var(--spacing-sm);
4397
- }
4398
- .container {
4399
- padding: 0 var(--spacing-sm) var(--spacing-md);
4400
- }
4401
- .hero-title {
4402
- font-size: 32px;
4403
- }
4404
- .hero-subtitle {
4405
- font-size: var(--font-size-secondary);
4406
- }
4407
- .top-tabs {
4408
- grid-template-columns: repeat(1, minmax(0, 1fr));
4409
- }
4410
- .main-panel {
4411
- padding: var(--spacing-sm);
4412
- }
4413
- .card {
4414
- padding: 12px;
4415
- }
4416
- .session-layout {
4417
- grid-template-columns: 1fr;
4418
- height: auto;
4419
- min-height: 0;
4420
- }
4421
-
4422
- .status-strip {
4423
- gap: var(--spacing-xs);
4424
- }
4425
-
4426
- .status-chip {
4427
- flex: 1 1 100%;
4428
- min-width: 100%;
4429
- }
4430
-
4431
- .btn-add,
4432
- .btn-tool,
4433
- .card-action-btn,
4434
- .btn-session-export,
4435
- .btn-session-open,
4436
- .btn-session-clone,
4437
- .btn-session-refresh,
4438
- .btn-session-delete,
4439
- .btn-icon,
4440
- .session-item-copy {
4441
- min-height: 44px;
4442
- padding-top: 12px;
4443
- padding-bottom: 12px;
4444
- }
4445
-
4446
- .btn-icon,
4447
- .session-item-copy {
4448
- min-width: 44px;
4449
- }
4450
-
4451
- .session-item {
4452
- min-height: 75px;
4453
- height: 75px;
4454
- contain-intrinsic-size: 75px;
4455
- padding: 12px 14px;
4456
- }
4457
-
4458
- .session-item-header {
4459
- flex-direction: row;
4460
- align-items: center;
4461
- gap: 8px;
4462
- }
4463
-
4464
- .session-item-main {
4465
- align-items: center;
4466
- }
4467
-
4468
- .session-item-copy {
4469
- width: 20px;
4470
- height: 20px;
4471
- min-width: 20px;
4472
- min-height: 20px;
4473
- border-radius: 6px;
4474
- padding: 2px;
4475
- display: inline-flex;
4476
- align-items: center;
4477
- justify-content: center;
4478
- transform: translate(-3px, 0);
4479
- }
4480
-
4481
- .session-item-copy svg {
4482
- width: 12px;
4483
- height: 12px;
4484
- }
4485
-
4486
- .session-item-title {
4487
- -webkit-line-clamp: 1;
4488
- max-height: none;
4489
- white-space: nowrap;
4490
- text-overflow: ellipsis;
4491
- overflow: hidden;
4492
- }
4493
-
4494
- .session-item-actions {
4495
- margin-top: 0;
4496
- }
4497
-
4498
- .session-item-meta {
4499
- margin-top: -2px;
4500
- margin-bottom: 0;
4501
- gap: 4px;
4502
- align-items: center;
4503
- }
4504
-
4505
- .trash-item.session-item {
4506
- min-height: auto;
4507
- height: auto;
4508
- contain-intrinsic-size: auto;
4509
- }
4510
-
4511
- .trash-item-header {
4512
- flex-direction: column;
4513
- align-items: stretch;
4514
- gap: 10px;
4515
- }
4516
-
4517
- .trash-item-mainline {
4518
- flex-direction: column;
4519
- align-items: flex-start;
4520
- gap: 6px;
4521
- }
4522
-
4523
- .trash-item-side {
4524
- width: 100%;
4525
- min-width: 0;
4526
- align-items: stretch;
4527
- gap: 10px;
4528
- padding-top: 8px;
4529
- border-top: 1px dashed rgba(216, 201, 184, 0.55);
4530
- }
4531
-
4532
- .trash-item-actions {
4533
- display: grid;
4534
- grid-template-columns: repeat(2, minmax(0, 1fr));
4535
- justify-content: flex-start;
4536
- width: 100%;
4537
- }
4538
-
4539
- .trash-item-actions .btn-mini {
4540
- width: 100%;
4541
- min-height: 44px;
4542
- display: inline-flex;
4543
- align-items: center;
4544
- justify-content: center;
4545
- }
4546
-
4547
- .trash-item .session-count-badge {
4548
- align-self: flex-start;
4549
- margin-top: 0;
4550
- }
4551
-
4552
- .trash-item-title {
4553
- -webkit-line-clamp: 3;
4554
- max-height: none;
4555
- white-space: normal;
4556
- text-overflow: clip;
4557
- overflow: hidden;
4558
- }
4559
-
4560
- .trash-item-meta {
4561
- margin-top: 6px;
4562
- margin-bottom: 0;
4563
- gap: 6px;
4564
- align-items: center;
4565
- }
4566
-
4567
- .trash-item-time {
4568
- padding-top: 2px;
4569
- line-height: 1.35;
4570
- text-align: right;
4571
- }
4572
-
4573
- .trash-item-path {
4574
- grid-template-columns: 1fr;
4575
- gap: 4px;
4576
- }
4577
-
4578
- .card {
4579
- padding: 8px;
4580
- }
4581
-
4582
- .card-list {
4583
- gap: 4px;
4584
- margin-bottom: 4px;
4585
- }
4586
-
4587
- .card-actions {
4588
- gap: 8px;
4589
- }
4590
-
4591
- .card-action-btn {
4592
- width: 40px;
4593
- height: 40px;
4594
- border-radius: 10px;
4595
- }
4596
-
4597
- .card-action-btn svg {
4598
- width: 18px;
4599
- height: 18px;
4600
- }
4601
-
4602
- .card-trailing {
4603
- grid-auto-flow: row;
4604
- grid-auto-columns: 1fr;
4605
- justify-content: stretch;
4606
- justify-items: end;
4607
- }
4608
-
4609
- .card-trailing .card-actions {
4610
- width: 100%;
4611
- justify-content: flex-end;
4612
- justify-self: end;
4613
- }
4614
-
4615
- /* 移动端不显示配置状态 pill,节省空间 */
4616
- .card-trailing .pill {
4617
- display: none;
4618
- }
4619
-
4620
- .auth-profile-item {
4621
- padding: 10px;
4622
- }
4623
-
4624
- .auth-profile-header {
4625
- flex-direction: column;
4626
- align-items: stretch;
4627
- gap: 10px;
4628
- }
4629
-
4630
- .auth-profile-actions {
4631
- justify-content: flex-start;
4632
- }
4633
-
4634
- .auth-profile-grid {
4635
- grid-template-columns: 1fr;
4636
- gap: 6px;
4637
- margin-top: 8px;
4638
- }
4639
-
4640
- .auth-profile-row {
4641
- display: flex;
4642
- flex-direction: column;
4643
- gap: 2px;
4644
- padding-bottom: 4px;
4645
- border-bottom: 1px dashed rgba(160, 145, 130, 0.25);
4646
- }
4647
-
4648
- .auth-profile-row:last-child {
4649
- border-bottom: none;
4650
- padding-bottom: 0;
4651
- }
4652
-
4653
- .session-preview {
4654
- border-radius: var(--radius-lg);
4655
- }
4656
-
4657
- .skills-summary-strip {
4658
- grid-template-columns: 1fr;
4659
- }
4660
-
4661
- .skills-panel {
4662
- padding: 10px;
4663
- }
4664
-
4665
- .skills-root-box {
4666
- font-size: 11px;
4667
- }
4668
- }
1
+ @import url('./styles/base-theme.css');
2
+ @import url('./styles/layout-shell.css');
3
+ @import url('./styles/navigation-panels.css');
4
+ @import url('./styles/titles-cards.css');
5
+ @import url('./styles/controls-forms.css');
6
+ @import url('./styles/sessions-toolbar-trash.css');
7
+ @import url('./styles/sessions-list.css');
8
+ @import url('./styles/sessions-preview.css');
9
+ @import url('./styles/sessions-usage.css');
10
+ @import url('./styles/modals-core.css');
11
+ @import url('./styles/health-check-dialog.css');
12
+ @import url('./styles/openclaw-structured.css');
13
+ @import url('./styles/skills-market.css');
14
+ @import url('./styles/skills-list.css');
15
+ @import url('./styles/feedback.css');
16
+ @import url('./styles/responsive.css');