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