codexmate 0.0.12 → 0.0.13

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.
@@ -1,2868 +0,0 @@
1
- @import url('https://fonts.googleapis.com/css2?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: #F6EFE6;
14
- --color-surface: #FFFDF9;
15
- --color-surface-alt: #FFF7F0;
16
- --color-surface-elevated: #FFFFFF;
17
- --color-surface-tint: rgba(255, 255, 255, 0.78);
18
- --color-text-primary: #1B1714;
19
- --color-text-secondary: #4B4038;
20
- --color-text-tertiary: #7A6A5D;
21
- --color-text-muted: #6C5B50;
22
- --color-border: #D8C9B8;
23
- --color-border-soft: rgba(216, 201, 184, 0.45);
24
- --color-border-strong: rgba(216, 201, 184, 0.8);
25
-
26
- --color-success: #4B8B6A;
27
- --color-error: #C44536;
28
-
29
- --bg-warm-gradient:
30
- radial-gradient(circle at 16% 10%, rgba(201, 94, 75, 0.18), transparent 45%),
31
- radial-gradient(circle at 90% 6%, rgba(255, 255, 255, 0.85), transparent 40%),
32
- linear-gradient(135deg, #F6EFE6 0%, #EFE1D4 45%, #F6EFE6 100%);
33
-
34
- /* 字体系统 */
35
- --font-family-body: 'Source Sans 3', 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif;
36
- --font-family-display: 'Space Grotesk', 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif;
37
- --font-family-mono: 'JetBrains Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', monospace;
38
- --font-family: var(--font-family-body);
39
-
40
- --font-size-display: 52px;
41
- --font-size-title: 18px;
42
- --font-size-body: 15px;
43
- --font-size-secondary: 13px;
44
- --font-size-caption: 11px;
45
-
46
- --font-weight-display: 600;
47
- --font-weight-title: 600;
48
- --font-weight-body: 400;
49
- --font-weight-secondary: 500;
50
- --font-weight-caption: 500;
51
-
52
- --line-height-tight: 1.12;
53
- --line-height-normal: 1.5;
54
-
55
- /* 间距系统 */
56
- --spacing-xs: 8px;
57
- --spacing-sm: 16px;
58
- --spacing-md: 24px;
59
- --spacing-lg: 40px;
60
- --spacing-xl: 64px;
61
-
62
- /* 圆角系统 */
63
- --radius-sm: 8px;
64
- --radius-lg: 12px;
65
- --radius-xl: 18px;
66
- --radius-full: 50px;
67
-
68
- /* 阴影系统 - 多层叠加提升真实感 */
69
- --shadow-subtle:
70
- 0 1px 2px rgba(31, 26, 23, 0.04),
71
- 0 1px 3px rgba(31, 26, 23, 0.02);
72
- --shadow-card:
73
- 0 1px 3px rgba(31, 26, 23, 0.04),
74
- 0 4px 12px rgba(31, 26, 23, 0.03);
75
- --shadow-card-hover:
76
- 0 2px 4px rgba(31, 26, 23, 0.04),
77
- 0 8px 20px rgba(31, 26, 23, 0.06);
78
- --shadow-float:
79
- 0 6px 16px rgba(31, 26, 23, 0.08),
80
- 0 18px 36px rgba(31, 26, 23, 0.06);
81
- --shadow-raised:
82
- 0 4px 12px rgba(31, 26, 23, 0.06),
83
- 0 12px 32px rgba(31, 26, 23, 0.04);
84
- --shadow-modal:
85
- 0 8px 24px rgba(31, 26, 23, 0.08),
86
- 0 24px 64px rgba(31, 26, 23, 0.06);
87
- --shadow-input-focus:
88
- 0 0 0 3px var(--color-brand-light),
89
- 0 1px 3px rgba(31, 26, 23, 0.04);
90
-
91
- /* 动画 - 更细腻的曲线 */
92
- --transition-instant: 100ms;
93
- --transition-fast: 150ms;
94
- --transition-normal: 250ms;
95
- --transition-slow: 350ms;
96
- --ease-spring: cubic-bezier(0.16, 1, 0.3, 1);
97
- --ease-spring-soft: cubic-bezier(0.25, 1, 0.5, 1);
98
- --ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);
99
- --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
100
- }
101
-
102
- /* ============================================
103
- 基础重置
104
- ============================================ */
105
- * {
106
- margin: 0;
107
- padding: 0;
108
- box-sizing: border-box;
109
- }
110
-
111
- /* 仅屏幕阅读器可见 */
112
- .sr-only {
113
- position: absolute;
114
- width: 1px;
115
- height: 1px;
116
- padding: 0;
117
- margin: -1px;
118
- overflow: hidden;
119
- clip: rect(0, 0, 0, 0);
120
- white-space: nowrap;
121
- border: 0;
122
- }
123
-
124
- body {
125
- font-family: var(--font-family-body);
126
- background-color: var(--color-bg);
127
- background: var(--bg-warm-gradient);
128
- color: var(--color-text-primary);
129
- display: flex;
130
- justify-content: center;
131
- align-items: center;
132
- min-height: 100vh;
133
- padding: var(--spacing-lg) var(--spacing-md);
134
- -webkit-font-smoothing: antialiased;
135
- -moz-osx-font-smoothing: grayscale;
136
- position: relative;
137
- overflow-x: hidden;
138
- }
139
-
140
- .fab-install {
141
- position: fixed;
142
- left: 16px;
143
- bottom: 16px;
144
- z-index: 90;
145
- padding: 12px 16px;
146
- border-radius: var(--radius-full);
147
- border: none;
148
- background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
149
- color: #fff;
150
- font-weight: var(--font-weight-secondary);
151
- letter-spacing: 0.02em;
152
- box-shadow: var(--shadow-float);
153
- cursor: pointer;
154
- transition: transform var(--transition-fast) var(--ease-spring), box-shadow var(--transition-fast) var(--ease-spring);
155
- }
156
-
157
- .fab-install:hover {
158
- transform: translateY(-2px);
159
- box-shadow: var(--shadow-raised);
160
- }
161
-
162
- .fab-install:active {
163
- transform: translateY(0);
164
- }
165
-
166
- @media (max-width: 640px) {
167
- .fab-install {
168
- left: 12px;
169
- bottom: 12px;
170
- padding: 10px 14px;
171
- font-size: var(--font-size-secondary);
172
- }
173
- }
174
-
175
- /* ============================================
176
- 容器
177
- ============================================ */
178
- body::before {
179
- content: "";
180
- position: fixed;
181
- inset: 0;
182
- background-image:
183
- radial-gradient(circle at 12% 18%, rgba(201, 94, 75, 0.1), transparent 38%),
184
- repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.4) 0 1px, transparent 1px 120px),
185
- repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.35) 0 1px, transparent 1px 120px);
186
- opacity: 0.45;
187
- pointer-events: none;
188
- z-index: 0;
189
- }
190
-
191
- /* 背景网格 */
192
- body::after {
193
- content: "";
194
- position: fixed;
195
- inset: 0;
196
- background-image:
197
- linear-gradient(90deg, rgba(255, 255, 255, 0.15) 1px, transparent 1px),
198
- linear-gradient(0deg, rgba(255, 255, 255, 0.12) 1px, transparent 1px);
199
- background-size: 120px 120px;
200
- opacity: 0.5;
201
- pointer-events: none;
202
- z-index: 0;
203
- }
204
-
205
- /* ============================================
206
- 容器
207
- ============================================ */
208
- .container {
209
- width: 100%;
210
- max-width: 1280px;
211
- margin: 0 auto;
212
- padding: 16px 12px 28px;
213
- position: relative;
214
- z-index: 1;
215
- }
216
-
217
- /* ============================================
218
- 布局:双列(侧栏 + 主区)
219
- ============================================ */
220
- .app-shell {
221
- display: grid;
222
- grid-template-columns: 320px minmax(0, 1fr);
223
- gap: var(--spacing-md);
224
- align-items: flex-start;
225
- }
226
-
227
- .app-shell.standalone {
228
- grid-template-columns: 1fr;
229
- }
230
-
231
- .side-rail {
232
- position: sticky;
233
- top: var(--spacing-md);
234
- align-self: start;
235
- display: flex;
236
- flex-direction: column;
237
- gap: var(--spacing-sm);
238
- padding: var(--spacing-md) var(--spacing-sm);
239
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.95) 0%, rgba(255, 250, 245, 0.9) 100%);
240
- border: 1px solid rgba(216, 201, 184, 0.65);
241
- border-radius: var(--radius-xl);
242
- box-shadow: var(--shadow-card);
243
- min-height: 420px;
244
- }
245
-
246
- .side-rail .brand-title {
247
- font-size: 24px;
248
- margin-bottom: 2px;
249
- }
250
-
251
- .side-section {
252
- display: flex;
253
- flex-direction: column;
254
- gap: 10px;
255
- }
256
-
257
- .side-section-title {
258
- font-size: var(--font-size-secondary);
259
- font-weight: var(--font-weight-secondary);
260
- color: var(--color-text-tertiary);
261
- letter-spacing: 0.01em;
262
- padding: 0 var(--spacing-xs);
263
- }
264
-
265
- .side-item {
266
- width: 100%;
267
- text-align: left;
268
- padding: 12px var(--spacing-sm);
269
- border-radius: var(--radius-lg);
270
- border: 1px solid var(--color-border-soft);
271
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 247, 240, 0.95) 100%);
272
- color: var(--color-text-secondary);
273
- cursor: pointer;
274
- transition: all var(--transition-normal) var(--ease-spring);
275
- display: flex;
276
- flex-direction: column;
277
- gap: 6px;
278
- box-shadow: var(--shadow-subtle);
279
- }
280
-
281
- .side-item:hover {
282
- border-color: var(--color-brand);
283
- color: var(--color-text-primary);
284
- transform: translateY(-1px);
285
- box-shadow: var(--shadow-card-hover);
286
- }
287
-
288
- .side-item.active {
289
- border-color: var(--color-brand);
290
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.14), rgba(255, 255, 255, 0.96));
291
- color: var(--color-text-primary);
292
- box-shadow: var(--shadow-float);
293
- }
294
-
295
- .side-item-title {
296
- font-size: var(--font-size-body);
297
- font-weight: var(--font-weight-secondary);
298
- letter-spacing: -0.01em;
299
- }
300
-
301
- .side-item-meta {
302
- font-size: var(--font-size-caption);
303
- color: var(--color-text-tertiary);
304
- display: flex;
305
- gap: 8px;
306
- flex-wrap: wrap;
307
- }
308
-
309
- .side-item-meta > span {
310
- min-width: 0;
311
- overflow-wrap: anywhere;
312
- word-break: break-word;
313
- }
314
-
315
- .top-tabs {
316
- display: none !important;
317
- }
318
-
319
- .brand-block {
320
- display: grid;
321
- grid-template-columns: 48px 1fr;
322
- grid-template-rows: auto auto;
323
- column-gap: var(--spacing-sm);
324
- row-gap: 2px;
325
- align-items: center;
326
- margin-bottom: var(--spacing-md);
327
- }
328
-
329
- .brand-logo-wrap {
330
- width: 48px;
331
- height: 48px;
332
- border-radius: 14px;
333
- background: rgba(208, 88, 58, 0.08);
334
- border: 1px solid var(--color-border-soft);
335
- display: grid;
336
- place-items: center;
337
- box-shadow: var(--shadow-subtle);
338
- flex-shrink: 0;
339
- grid-row: 1 / span 2;
340
- }
341
-
342
- .brand-logo {
343
- width: 34px;
344
- height: 34px;
345
- object-fit: contain;
346
- display: block;
347
- }
348
-
349
- .brand-title {
350
- font-size: 30px;
351
- line-height: 1.05;
352
- font-family: var(--font-family-display);
353
- color: var(--color-text-primary);
354
- letter-spacing: -0.02em;
355
- }
356
-
357
- .brand-title .accent {
358
- color: var(--color-brand);
359
- }
360
-
361
- .brand-subtitle {
362
- margin-top: 8px;
363
- font-size: var(--font-size-secondary);
364
- color: var(--color-text-tertiary);
365
- line-height: 1.45;
366
- }
367
-
368
- .main-tabs {
369
- display: flex;
370
- gap: 10px;
371
- }
372
-
373
- .main-tab-btn {
374
- flex: 1;
375
- text-align: center;
376
- border: 1px solid rgba(216, 201, 184, 0.55);
377
- background: rgba(255, 255, 255, 0.95);
378
- border-radius: var(--radius-lg);
379
- padding: 12px 14px;
380
- cursor: pointer;
381
- color: var(--color-text-secondary);
382
- font-size: var(--font-size-body);
383
- font-weight: var(--font-weight-secondary);
384
- box-shadow: var(--shadow-subtle);
385
- transition: all var(--transition-normal) var(--ease-spring);
386
- }
387
-
388
- .main-tab-btn:hover {
389
- border-color: var(--color-brand);
390
- color: var(--color-text-primary);
391
- transform: translateY(-1px);
392
- }
393
-
394
- .main-tab-btn.active {
395
- border-color: var(--color-brand);
396
- box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
397
- color: var(--color-text-primary);
398
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.12), rgba(255, 255, 255, 0.95));
399
- }
400
-
401
- .status-strip {
402
- display: flex;
403
- flex-wrap: wrap;
404
- gap: var(--spacing-xs);
405
- margin-bottom: var(--spacing-sm);
406
- margin-top: 6px;
407
- }
408
-
409
- .status-chip {
410
- min-width: 200px;
411
- padding: 10px 12px;
412
- border-radius: var(--radius-lg);
413
- border: 1px solid var(--color-border-soft);
414
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 247, 240, 0.96) 100%);
415
- box-shadow: var(--shadow-subtle);
416
- }
417
-
418
- .status-chip .label {
419
- display: block;
420
- font-size: var(--font-size-caption);
421
- color: var(--color-text-tertiary);
422
- margin-bottom: 4px;
423
- }
424
-
425
- .status-chip .value {
426
- font-size: var(--font-size-body);
427
- font-weight: var(--font-weight-secondary);
428
- color: var(--color-text-primary);
429
- letter-spacing: -0.01em;
430
- white-space: normal;
431
- overflow-wrap: anywhere;
432
- word-break: break-word;
433
- }
434
-
435
- .main-panel {
436
- min-width: 0;
437
- background: rgba(255, 255, 255, 0.9);
438
- border: 1px solid rgba(255, 255, 255, 0.65);
439
- border-radius: 18px;
440
- box-shadow: 0 12px 30px rgba(27, 23, 20, 0.08);
441
- padding: var(--spacing-md) var(--spacing-lg);
442
- backdrop-filter: blur(8px);
443
- position: relative;
444
- overflow-x: hidden;
445
- overflow-y: visible;
446
- }
447
-
448
- .panel-header {
449
- margin-bottom: 12px;
450
- text-align: left;
451
- }
452
-
453
- .hero {
454
- display: flex;
455
- align-items: center;
456
- gap: var(--spacing-sm);
457
- margin-bottom: var(--spacing-sm);
458
- }
459
-
460
- .hero-logo {
461
- display: none;
462
- width: 64px;
463
- height: 64px;
464
- border-radius: 18px;
465
- padding: 8px;
466
- background: var(--color-surface-elevated);
467
- border: 1px solid var(--color-border-soft);
468
- box-shadow: var(--shadow-card);
469
- object-fit: contain;
470
- }
471
-
472
- .hero-title {
473
- font-size: 48px;
474
- line-height: 1.05;
475
- font-family: var(--font-family-display);
476
- color: var(--color-text-primary);
477
- letter-spacing: -0.02em;
478
- }
479
-
480
- .hero-title .accent {
481
- color: var(--color-brand);
482
- }
483
-
484
- .hero-subtitle {
485
- margin-top: 8px;
486
- font-size: var(--font-size-body);
487
- color: var(--color-text-tertiary);
488
- line-height: 1.5;
489
- }
490
-
491
- .top-tabs {
492
- margin: 14px 0 18px;
493
- background: rgba(255, 255, 255, 0.92);
494
- border: 1px solid rgba(255, 255, 255, 0.7);
495
- border-radius: 14px;
496
- padding: 6px;
497
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.06);
498
- display: grid;
499
- grid-template-columns: repeat(4, 1fr);
500
- gap: 8px;
501
- backdrop-filter: blur(6px);
502
- }
503
-
504
- .top-tab {
505
- border: 1px solid rgba(216, 201, 184, 0.55);
506
- border-radius: 12px;
507
- background: rgba(255, 255, 255, 0.96);
508
- padding: 11px 10px;
509
- font-size: var(--font-size-body);
510
- color: var(--color-text-secondary);
511
- text-align: center;
512
- cursor: pointer;
513
- transition: all var(--transition-normal) var(--ease-spring);
514
- box-shadow: var(--shadow-subtle);
515
- }
516
-
517
- .top-tab:hover {
518
- border-color: var(--color-brand);
519
- color: var(--color-text-primary);
520
- transform: translateY(-1px);
521
- }
522
-
523
- .top-tab.active {
524
- border-color: var(--color-brand);
525
- color: var(--color-text-primary);
526
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.12), rgba(255, 255, 255, 0.95));
527
- box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
528
- }
529
-
530
- .config-subtabs {
531
- display: flex;
532
- gap: 8px;
533
- margin-bottom: 16px;
534
- padding: 6px;
535
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.85), rgba(255, 255, 255, 0.7));
536
- border-radius: var(--radius-lg);
537
- border: 1px solid rgba(255, 255, 255, 0.7);
538
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.05);
539
- }
540
-
541
- .config-subtab {
542
- border: 1px solid var(--color-border-soft);
543
- border-radius: var(--radius-lg);
544
- padding: 10px 14px;
545
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(255, 250, 245, 0.9));
546
- color: var(--color-text-secondary);
547
- cursor: pointer;
548
- font-size: var(--font-size-body);
549
- font-weight: var(--font-weight-secondary);
550
- transition: all var(--transition-normal) var(--ease-spring);
551
- box-shadow: var(--shadow-subtle);
552
- }
553
-
554
- .config-subtab:hover {
555
- border-color: var(--color-border-strong);
556
- color: var(--color-text-primary);
557
- }
558
-
559
- .config-subtab.active {
560
- border-color: var(--color-brand);
561
- color: var(--color-text-primary);
562
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.18), rgba(255, 255, 255, 0.95));
563
- box-shadow: var(--shadow-card);
564
- }
565
-
566
- .content-wrapper {
567
- background: rgba(255, 255, 255, 0.9);
568
- border: 1px solid rgba(255, 255, 255, 0.7);
569
- border-radius: var(--radius-lg);
570
- box-shadow: var(--shadow-card);
571
- padding: 0;
572
- }
573
-
574
- .mode-content {
575
- border-radius: var(--radius-lg);
576
- background: rgba(255, 255, 255, 0.85);
577
- box-shadow: var(--shadow-subtle);
578
- padding: 10px;
579
- }
580
-
581
- /* ============================================
582
- 主标题
583
- ============================================ */
584
- .main-title {
585
- font-size: var(--font-size-display);
586
- font-weight: var(--font-weight-display);
587
- line-height: var(--line-height-tight);
588
- letter-spacing: -0.03em;
589
- margin-bottom: 10px;
590
- color: var(--color-text-primary);
591
- font-family: var(--font-family-display);
592
- background: linear-gradient(135deg, var(--color-text-primary) 0%, rgba(27, 23, 20, 0.78) 100%);
593
- -webkit-background-clip: text;
594
- -webkit-text-fill-color: transparent;
595
- background-clip: text;
596
- }
597
-
598
- .main-title .accent {
599
- color: var(--color-brand);
600
- -webkit-text-fill-color: var(--color-brand);
601
- position: relative;
602
- }
603
-
604
- .subtitle {
605
- font-size: var(--font-size-body);
606
- color: var(--color-text-tertiary);
607
- line-height: var(--line-height-normal);
608
- margin-bottom: 20px;
609
- max-width: 640px;
610
- letter-spacing: 0.01em;
611
- }
612
-
613
- /* ============================================
614
- 模式切换器 - Segmented Control
615
- ============================================ */
616
- .segmented-control {
617
- display: flex;
618
- background: rgba(255, 255, 255, 0.92);
619
- border-radius: var(--radius-xl);
620
- padding: 6px;
621
- margin-bottom: 20px;
622
- position: relative;
623
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.06);
624
- border: 1px solid rgba(255, 255, 255, 0.7);
625
- backdrop-filter: blur(6px);
626
- }
627
-
628
- .segment {
629
- flex: 1;
630
- padding: 11px 16px;
631
- border: none;
632
- background: transparent;
633
- font-size: var(--font-size-body);
634
- font-weight: var(--font-weight-secondary);
635
- color: var(--color-text-secondary);
636
- cursor: pointer;
637
- border-radius: 10px;
638
- transition: all var(--transition-normal) var(--ease-spring);
639
- position: relative;
640
- z-index: 2;
641
- letter-spacing: 0.01em;
642
- }
643
-
644
- .segment:hover {
645
- color: var(--color-text-primary);
646
- }
647
-
648
- .segment.active {
649
- color: var(--color-text-primary);
650
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.8) 100%);
651
- box-shadow: var(--shadow-subtle), inset 0 1px 0 rgba(255, 255, 255, 0.85);
652
- }
653
-
654
- /* ============================================
655
- 卡片列表
656
- ============================================ */
657
- .card-list {
658
- display: flex;
659
- flex-direction: column;
660
- gap: 12px;
661
- margin-bottom: 12px;
662
- }
663
-
664
- /* ============================================
665
- 卡片
666
- ============================================ */
667
- .card {
668
- background: linear-gradient(180deg, #fffdf9 0%, #fff8f2 100%);
669
- border-radius: var(--radius-lg);
670
- padding: 10px;
671
- display: flex;
672
- align-items: center;
673
- justify-content: space-between;
674
- cursor: pointer;
675
- transition:
676
- transform var(--transition-normal) var(--ease-spring),
677
- box-shadow var(--transition-normal) var(--ease-spring),
678
- background-color var(--transition-fast) var(--ease-smooth);
679
- box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
680
- user-select: none;
681
- will-change: transform;
682
- border: 1px solid rgba(216, 201, 184, 0.55);
683
- position: relative;
684
- overflow: hidden;
685
- }
686
-
687
- .card:hover {
688
- transform: translateY(-2px) scale(1.005);
689
- box-shadow: 0 16px 32px rgba(27, 23, 20, 0.1);
690
- }
691
-
692
- .card::before,
693
- .card::after {
694
- content: "";
695
- position: absolute;
696
- pointer-events: none;
697
- }
698
-
699
- .card::before {
700
- left: 0;
701
- top: 10px;
702
- bottom: 10px;
703
- width: 3px;
704
- border-radius: 999px;
705
- background: transparent;
706
- transition: background var(--transition-fast) var(--ease-smooth);
707
- }
708
-
709
- .card::after {
710
- inset: 0;
711
- border-radius: inherit;
712
- background: linear-gradient(120deg, rgba(255, 255, 255, 0.7) 0%, transparent 55%);
713
- opacity: 0;
714
- transition: opacity var(--transition-normal) var(--ease-smooth);
715
- }
716
-
717
- .card:active {
718
- transform: translateY(0) scale(0.995);
719
- transition: transform var(--transition-instant) var(--ease-smooth);
720
- }
721
-
722
- .card.active {
723
- background: linear-gradient(to bottom, rgba(210, 107, 90, 0.14) 0%, rgba(255, 255, 255, 0.98) 100%);
724
- border-color: rgba(201, 94, 75, 0.55);
725
- box-shadow: 0 10px 28px rgba(210, 107, 90, 0.14);
726
- }
727
-
728
- .card.active::before {
729
- background: linear-gradient(180deg, rgba(201, 94, 75, 0.95) 0%, rgba(201, 94, 75, 0.35) 100%);
730
- }
731
-
732
- .card:hover::after {
733
- opacity: 0.6;
734
- }
735
-
736
- .card.active .card-icon {
737
- transform: scale(1.05);
738
- }
739
-
740
- .card-leading {
741
- display: flex;
742
- align-items: center;
743
- gap: var(--spacing-sm);
744
- flex: 1;
745
- min-width: 0;
746
- }
747
-
748
- .card-icon {
749
- width: 40px;
750
- height: 40px;
751
- border-radius: var(--radius-sm);
752
- background: linear-gradient(135deg, rgba(255, 255, 255, 0.9) 0%, rgba(247, 241, 232, 0.65) 100%);
753
- display: flex;
754
- align-items: center;
755
- justify-content: center;
756
- font-size: var(--font-size-title);
757
- font-weight: var(--font-weight-title);
758
- color: var(--color-text-secondary);
759
- flex-shrink: 0;
760
- transition: all var(--transition-normal) var(--ease-spring-soft);
761
- box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.7);
762
- }
763
-
764
- .card.active .card-icon {
765
- background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
766
- color: white;
767
- box-shadow: 0 2px 8px rgba(210, 107, 90, 0.3);
768
- }
769
-
770
- .card-content {
771
- display: flex;
772
- flex-direction: column;
773
- gap: 2px;
774
- min-width: 0;
775
- }
776
-
777
- .card-title {
778
- font-size: var(--font-size-body);
779
- font-weight: var(--font-weight-secondary);
780
- color: var(--color-text-primary);
781
- white-space: nowrap;
782
- overflow: hidden;
783
- text-overflow: ellipsis;
784
- letter-spacing: -0.01em;
785
- }
786
-
787
- .card-subtitle {
788
- font-size: var(--font-size-secondary);
789
- color: var(--color-text-tertiary);
790
- white-space: nowrap;
791
- overflow: hidden;
792
- text-overflow: ellipsis;
793
- opacity: 0.8;
794
- }
795
-
796
- .card-trailing {
797
- display: grid;
798
- grid-auto-flow: column;
799
- grid-auto-columns: max-content;
800
- column-gap: var(--spacing-xs);
801
- row-gap: 6px;
802
- align-items: center;
803
- justify-content: end;
804
- }
805
-
806
- .card-trailing .card-actions {
807
- margin-left: 0;
808
- justify-self: end;
809
- }
810
-
811
- .card-trailing .pill,
812
- .card-trailing .latency {
813
- justify-self: end;
814
- }
815
-
816
- /* 卡片操作按钮 - hover 显示 */
817
- .card-actions {
818
- display: flex;
819
- gap: 8px;
820
- opacity: 0;
821
- transform: translateX(4px);
822
- transition: all var(--transition-normal) var(--ease-spring);
823
- }
824
-
825
- .card:hover .card-actions {
826
- opacity: 1;
827
- transform: translateX(0);
828
- }
829
-
830
- .mode-cards .card-actions {
831
- opacity: 1;
832
- transform: translateX(0);
833
- }
834
-
835
- .card-action-btn {
836
- width: 40px;
837
- height: 40px;
838
- border-radius: 10px;
839
- border: 1px solid rgba(70, 86, 110, 0.22);
840
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.98), rgba(255, 255, 255, 0.9));
841
- color: var(--color-text-secondary);
842
- cursor: pointer;
843
- display: flex;
844
- align-items: center;
845
- justify-content: center;
846
- transition: all var(--transition-fast) var(--ease-spring);
847
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
848
- }
849
-
850
- .card-action-btn:hover {
851
- background: linear-gradient(135deg, rgba(210, 107, 90, 0.08) 0%, rgba(255, 255, 255, 0.95) 100%);
852
- color: var(--color-text-primary);
853
- transform: translateY(-1px);
854
- }
855
-
856
- .card-action-btn.delete:hover {
857
- background: linear-gradient(135deg, rgba(200, 74, 58, 0.1) 0%, rgba(200, 74, 58, 0.05) 100%);
858
- color: var(--color-error);
859
- }
860
-
861
- .card-action-btn svg {
862
- width: 18px;
863
- height: 18px;
864
- }
865
-
866
- /* ============================================
867
- 状态徽章
868
- ============================================ */
869
- .pill {
870
- padding: 5px 11px;
871
- border-radius: var(--radius-full);
872
- font-size: var(--font-size-caption);
873
- font-weight: var(--font-weight-caption);
874
- background-color: rgba(255, 255, 255, 0.8);
875
- color: var(--color-text-tertiary);
876
- text-transform: uppercase;
877
- letter-spacing: 0.06em;
878
- transition: all var(--transition-fast) var(--ease-smooth);
879
- box-shadow: inset 0 0.5px 1px rgba(0, 0, 0, 0.04);
880
- }
881
-
882
- .pill.configured {
883
- background: linear-gradient(135deg, rgba(90, 139, 106, 0.15) 0%, rgba(90, 139, 106, 0.08) 100%);
884
- color: var(--color-success);
885
- box-shadow: inset 0 0.5px 1px rgba(90, 139, 106, 0.2);
886
- }
887
-
888
- .pill.empty {
889
- background: linear-gradient(135deg, rgba(200, 74, 58, 0.1) 0%, rgba(200, 74, 58, 0.05) 100%);
890
- color: var(--color-error);
891
- box-shadow: inset 0 0.5px 1px rgba(200, 74, 58, 0.15);
892
- }
893
-
894
- .latency {
895
- padding: 4px 10px;
896
- border-radius: var(--radius-full);
897
- font-size: var(--font-size-caption);
898
- font-weight: var(--font-weight-caption);
899
- background: var(--color-bg);
900
- color: var(--color-text-tertiary);
901
- letter-spacing: 0.02em;
902
- min-width: 64px;
903
- text-align: center;
904
- display: inline-flex;
905
- align-items: center;
906
- justify-content: center;
907
- flex-shrink: 0;
908
- }
909
-
910
- .latency.ok {
911
- color: var(--color-success);
912
- background: rgba(90, 139, 106, 0.1);
913
- }
914
-
915
- .latency.error {
916
- color: var(--color-error);
917
- background: rgba(200, 74, 58, 0.08);
918
- }
919
-
920
- .card-action-btn.loading svg {
921
- animation: spin 0.9s linear infinite;
922
- }
923
-
924
- /* ============================================
925
- 图标 - SVG 优化
926
- ============================================ */
927
- .icon {
928
- width: 20px;
929
- height: 20px;
930
- flex-shrink: 0;
931
- stroke-linecap: round;
932
- stroke-linejoin: round;
933
- }
934
-
935
- .icon-chevron-right {
936
- color: var(--color-text-tertiary);
937
- opacity: 0.5;
938
- }
939
-
940
- /* ============================================
941
- 选择器 - 用于模型选择
942
- ============================================ */
943
- .selector-section {
944
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.92) 100%);
945
- border-radius: var(--radius-lg);
946
- padding: calc(var(--spacing-sm) + 2px);
947
- margin-bottom: 16px;
948
- box-shadow: var(--shadow-card);
949
- border: 1px solid var(--color-border-soft);
950
- }
951
-
952
- .selector-header {
953
- display: flex;
954
- justify-content: space-between;
955
- align-items: center;
956
- margin-bottom: var(--spacing-xs);
957
- }
958
-
959
- .selector-title {
960
- font-size: var(--font-size-caption);
961
- font-weight: var(--font-weight-secondary);
962
- color: var(--color-text-muted);
963
- text-transform: none;
964
- letter-spacing: 0.04em;
965
- opacity: 0.85;
966
- }
967
-
968
- .selector-actions {
969
- display: flex;
970
- gap: var(--spacing-xs);
971
- }
972
-
973
- .health-report {
974
- margin-top: 10px;
975
- padding: 10px 12px;
976
- border-radius: var(--radius-md);
977
- border: 1px solid var(--color-border-soft);
978
- background: var(--color-surface-alt);
979
- display: grid;
980
- gap: 8px;
981
- }
982
-
983
- .health-remote-toggle {
984
- display: inline-flex;
985
- align-items: center;
986
- gap: 8px;
987
- font-size: var(--font-size-caption);
988
- color: var(--color-text-secondary);
989
- }
990
-
991
- .health-remote-toggle input {
992
- accent-color: var(--color-brand);
993
- }
994
-
995
- .health-ok {
996
- color: var(--color-success);
997
- font-weight: var(--font-weight-secondary);
998
- }
999
-
1000
- .health-issue {
1001
- background: #fff6f5;
1002
- border-left: 3px solid var(--color-error);
1003
- padding: 8px 10px;
1004
- border-radius: 10px;
1005
- }
1006
-
1007
- .health-issue-title {
1008
- font-size: var(--font-size-caption);
1009
- font-weight: var(--font-weight-secondary);
1010
- color: var(--color-text-primary);
1011
- margin-bottom: 4px;
1012
- }
1013
-
1014
- .health-issue-suggestion {
1015
- font-size: var(--font-size-caption);
1016
- color: var(--color-text-secondary);
1017
- line-height: 1.4;
1018
- }
1019
-
1020
- .btn-icon {
1021
- width: 28px;
1022
- height: 28px;
1023
- border-radius: var(--radius-sm);
1024
- border: none;
1025
- background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
1026
- color: white;
1027
- cursor: pointer;
1028
- font-size: 16px;
1029
- display: flex;
1030
- align-items: center;
1031
- justify-content: center;
1032
- transition: all var(--transition-fast) var(--ease-spring);
1033
- box-shadow: 0 2px 4px rgba(210, 107, 90, 0.2);
1034
- }
1035
-
1036
- .btn-icon:hover {
1037
- transform: translateY(-1px) scale(1.05);
1038
- box-shadow: 0 4px 8px rgba(210, 107, 90, 0.25);
1039
- }
1040
-
1041
- .btn-icon:active {
1042
- transform: translateY(0) scale(0.98);
1043
- }
1044
-
1045
- .model-select {
1046
- width: 100%;
1047
- padding: 12px var(--spacing-sm);
1048
- padding-right: 40px;
1049
- border: 1px solid var(--color-border-soft);
1050
- border-radius: var(--radius-sm);
1051
- font-size: var(--font-size-body);
1052
- font-weight: var(--font-weight-body);
1053
- background-color: var(--color-surface-alt);
1054
- color: var(--color-text-primary);
1055
- outline: none;
1056
- cursor: pointer;
1057
- appearance: none;
1058
- 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");
1059
- background-repeat: no-repeat;
1060
- background-position: right 14px center;
1061
- background-size: 12px;
1062
- transition: all var(--transition-fast) var(--ease-smooth);
1063
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
1064
- }
1065
-
1066
- .model-select:hover {
1067
- border-color: var(--color-border-strong);
1068
- background-color: var(--color-surface);
1069
- }
1070
-
1071
- .model-select:focus {
1072
- background-color: var(--color-surface);
1073
- border-color: var(--color-brand);
1074
- box-shadow: var(--shadow-input-focus);
1075
- }
1076
-
1077
- .model-input {
1078
- width: 100%;
1079
- padding: 12px var(--spacing-sm);
1080
- border: 1px solid var(--color-border-soft);
1081
- border-radius: var(--radius-sm);
1082
- font-size: var(--font-size-body);
1083
- font-weight: var(--font-weight-body);
1084
- background-color: var(--color-surface-alt);
1085
- color: var(--color-text-primary);
1086
- outline: none;
1087
- transition: all var(--transition-fast) var(--ease-smooth);
1088
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
1089
- }
1090
-
1091
- .model-input:hover {
1092
- border-color: var(--color-border-strong);
1093
- background-color: var(--color-surface);
1094
- }
1095
-
1096
- .model-input:focus {
1097
- background-color: var(--color-surface);
1098
- border-color: var(--color-brand);
1099
- box-shadow: var(--shadow-input-focus);
1100
- }
1101
-
1102
- .config-template-hint {
1103
- margin-top: 8px;
1104
- margin-bottom: 10px;
1105
- font-size: var(--font-size-caption);
1106
- color: var(--color-text-tertiary);
1107
- line-height: 1.4;
1108
- }
1109
-
1110
- .btn-template-editor {
1111
- width: 100%;
1112
- margin-top: 2px;
1113
- }
1114
-
1115
- /* ============================================
1116
- 按钮
1117
- ============================================ */
1118
- .btn-add {
1119
- width: 100%;
1120
- padding: 14px var(--spacing-sm);
1121
- border: 1.5px dashed rgba(208, 196, 182, 0.6);
1122
- border-radius: var(--radius-lg);
1123
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0.15) 100%);
1124
- font-size: var(--font-size-body);
1125
- font-weight: var(--font-weight-secondary);
1126
- color: var(--color-text-tertiary);
1127
- cursor: pointer;
1128
- transition: all var(--transition-normal) var(--ease-spring);
1129
- display: flex;
1130
- align-items: center;
1131
- justify-content: center;
1132
- gap: var(--spacing-xs);
1133
- }
1134
-
1135
- .btn-add + .selector-section,
1136
- .selector-section + .btn-add,
1137
- .btn-add + .card-list,
1138
- .card-list + .btn-add {
1139
- margin-top: 12px;
1140
- }
1141
-
1142
- .btn-add:hover {
1143
- border-color: var(--color-brand);
1144
- color: var(--color-brand);
1145
- background: linear-gradient(to bottom, rgba(210, 107, 90, 0.05) 0%, rgba(210, 107, 90, 0.02) 100%);
1146
- transform: translateY(-1px);
1147
- }
1148
-
1149
- .btn-add:active {
1150
- transform: translateY(0) scale(0.99);
1151
- }
1152
-
1153
- .btn-add .icon {
1154
- width: 18px;
1155
- height: 18px;
1156
- transition: transform var(--transition-normal) var(--ease-spring);
1157
- }
1158
-
1159
- .btn-add:hover .icon {
1160
- transform: rotate(90deg);
1161
- }
1162
-
1163
- .btn-tool {
1164
- padding: 12px var(--spacing-sm);
1165
- border-radius: var(--radius-sm);
1166
- border: 1px solid var(--color-border-soft);
1167
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.85) 100%);
1168
- font-size: var(--font-size-body);
1169
- font-weight: var(--font-weight-secondary);
1170
- color: var(--color-text-secondary);
1171
- cursor: pointer;
1172
- transition: all var(--transition-fast) var(--ease-spring);
1173
- box-shadow: var(--shadow-subtle);
1174
- letter-spacing: -0.01em;
1175
- }
1176
-
1177
- .btn-tool:hover {
1178
- border-color: var(--color-brand);
1179
- color: var(--color-brand);
1180
- transform: translateY(-1px);
1181
- box-shadow: 0 4px 8px rgba(210, 107, 90, 0.12);
1182
- }
1183
-
1184
- .btn-tool-compact {
1185
- padding: 9px 12px;
1186
- font-size: var(--font-size-secondary);
1187
- }
1188
-
1189
- .selector-header .btn-tool-compact {
1190
- padding: 6px 10px;
1191
- font-size: var(--font-size-caption);
1192
- line-height: 1.1;
1193
- box-shadow: var(--shadow-subtle);
1194
- }
1195
-
1196
- .session-toolbar {
1197
- display: grid;
1198
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
1199
- gap: var(--spacing-xs);
1200
- margin-bottom: var(--spacing-sm);
1201
- align-items: end;
1202
- }
1203
-
1204
- .session-toolbar-group {
1205
- display: flex;
1206
- align-items: center;
1207
- gap: var(--spacing-xs);
1208
- flex-wrap: wrap;
1209
- min-width: 0;
1210
- }
1211
-
1212
- .session-toolbar-grow {
1213
- grid-column: span 2;
1214
- }
1215
-
1216
- .session-toolbar-actions {
1217
- justify-content: flex-end;
1218
- }
1219
-
1220
- .session-toolbar-footer {
1221
- display: flex;
1222
- align-items: center;
1223
- justify-content: flex-end;
1224
- gap: var(--spacing-xs);
1225
- margin-top: -2px;
1226
- padding-top: 6px;
1227
- margin-bottom: 12px;
1228
- border-top: 1px dashed var(--color-border-soft);
1229
- }
1230
-
1231
- .session-toolbar-footer .quick-option {
1232
- margin: 0;
1233
- padding: 6px 10px;
1234
- border-radius: var(--radius-sm);
1235
- border: 1px solid var(--color-border-soft);
1236
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.8) 100%);
1237
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
1238
- transition: all var(--transition-fast) var(--ease-spring);
1239
- line-height: 1.2;
1240
- }
1241
-
1242
- .session-toolbar-footer .quick-option:hover {
1243
- border-color: var(--color-border-strong);
1244
- }
1245
-
1246
- .session-source-select,
1247
- .session-path-select,
1248
- .session-query-input,
1249
- .session-role-select,
1250
- .session-time-select {
1251
- flex: 1;
1252
- min-width: 160px;
1253
- padding: 10px 12px;
1254
- border-radius: var(--radius-sm);
1255
- border: 1px solid var(--color-border-soft);
1256
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.92) 100%);
1257
- color: var(--color-text-secondary);
1258
- font-size: var(--font-size-body);
1259
- font-family: var(--font-family);
1260
- outline: none;
1261
- transition: all var(--transition-fast) var(--ease-spring);
1262
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
1263
- }
1264
-
1265
- .session-query-input {
1266
- flex: 2;
1267
- min-width: 220px;
1268
- }
1269
-
1270
- .session-source-select:hover,
1271
- .session-path-select:hover,
1272
- .session-query-input:hover,
1273
- .session-role-select:hover,
1274
- .session-time-select:hover {
1275
- border-color: var(--color-border-strong);
1276
- }
1277
-
1278
- .session-source-select:focus,
1279
- .session-path-select:focus,
1280
- .session-query-input:focus,
1281
- .session-role-select:focus,
1282
- .session-time-select:focus {
1283
- border-color: var(--color-brand);
1284
- box-shadow: var(--shadow-input-focus);
1285
- }
1286
-
1287
- .session-hint {
1288
- font-size: var(--font-size-secondary);
1289
- color: var(--color-text-tertiary);
1290
- margin-bottom: 12px;
1291
- line-height: 1.45;
1292
- }
1293
-
1294
- .session-card {
1295
- align-items: flex-start;
1296
- cursor: default;
1297
- }
1298
-
1299
- .session-card:hover {
1300
- transform: none;
1301
- box-shadow: var(--shadow-card);
1302
- }
1303
-
1304
- .session-card .card-leading {
1305
- align-items: flex-start;
1306
- }
1307
-
1308
- .session-meta {
1309
- margin-top: 6px;
1310
- font-size: var(--font-size-caption);
1311
- color: var(--color-text-tertiary);
1312
- line-height: 1.4;
1313
- word-break: break-all;
1314
- }
1315
-
1316
- .session-actions {
1317
- display: flex;
1318
- gap: var(--spacing-xs);
1319
- align-items: center;
1320
- margin-left: var(--spacing-sm);
1321
- flex-shrink: 0;
1322
- }
1323
-
1324
- .session-source {
1325
- font-size: var(--font-size-caption);
1326
- color: var(--color-brand);
1327
- border: 1px solid rgba(210, 107, 90, 0.25);
1328
- border-radius: 999px;
1329
- padding: 2px 8px;
1330
- background: rgba(210, 107, 90, 0.08);
1331
- white-space: nowrap;
1332
- }
1333
-
1334
- .session-count-badge {
1335
- display: inline-flex;
1336
- align-items: center;
1337
- justify-content: center;
1338
- min-width: 22px;
1339
- height: 22px;
1340
- padding: 0 7px;
1341
- border-radius: 999px;
1342
- background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
1343
- color: #fff;
1344
- font-size: var(--font-size-caption);
1345
- font-weight: var(--font-weight-secondary);
1346
- line-height: 1;
1347
- box-shadow: 0 4px 10px rgba(208, 88, 58, 0.16);
1348
- flex-shrink: 0;
1349
- }
1350
-
1351
- .btn-session-export,
1352
- .btn-session-open,
1353
- .btn-session-clone,
1354
- .btn-session-refresh {
1355
- border: 1px solid var(--color-border-soft);
1356
- border-radius: var(--radius-sm);
1357
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.9) 100%);
1358
- color: var(--color-text-secondary);
1359
- padding: 8px 12px;
1360
- font-size: var(--font-size-secondary);
1361
- font-weight: var(--font-weight-secondary);
1362
- cursor: pointer;
1363
- transition: all var(--transition-fast) var(--ease-spring);
1364
- white-space: nowrap;
1365
- box-shadow: var(--shadow-subtle);
1366
- letter-spacing: -0.01em;
1367
- }
1368
-
1369
- .btn-session-delete {
1370
- border: 1px solid rgba(189, 70, 68, 0.45);
1371
- border-radius: var(--radius-sm);
1372
- background: linear-gradient(to bottom, rgba(255, 245, 245, 0.95) 0%, rgba(255, 255, 255, 0.9) 100%);
1373
- color: #b74545;
1374
- padding: 8px 12px;
1375
- font-size: var(--font-size-secondary);
1376
- font-weight: var(--font-weight-secondary);
1377
- cursor: pointer;
1378
- transition: all var(--transition-fast) var(--ease-spring);
1379
- white-space: nowrap;
1380
- box-shadow: var(--shadow-subtle);
1381
- letter-spacing: -0.01em;
1382
- }
1383
-
1384
- .btn-session-refresh:hover {
1385
- border-color: var(--color-brand);
1386
- color: var(--color-brand);
1387
- transform: translateY(-1px);
1388
- }
1389
-
1390
- .btn-session-refresh:disabled {
1391
- opacity: 0.5;
1392
- cursor: not-allowed;
1393
- transform: none;
1394
- }
1395
-
1396
- .btn-session-export:hover,
1397
- .btn-session-open:hover {
1398
- border-color: var(--color-brand);
1399
- color: var(--color-brand);
1400
- transform: translateY(-1px);
1401
- }
1402
-
1403
- .btn-session-export:disabled,
1404
- .btn-session-open:disabled {
1405
- opacity: 0.5;
1406
- cursor: not-allowed;
1407
- transform: none;
1408
- }
1409
-
1410
- .btn-session-clone:hover {
1411
- border-color: var(--color-brand);
1412
- color: var(--color-brand);
1413
- transform: translateY(-1px);
1414
- }
1415
-
1416
- .btn-session-clone:disabled {
1417
- opacity: 0.5;
1418
- cursor: not-allowed;
1419
- transform: none;
1420
- }
1421
-
1422
- .btn-session-delete:hover {
1423
- border-color: rgba(189, 70, 68, 0.8);
1424
- color: #9f3b3b;
1425
- transform: translateY(-1px);
1426
- }
1427
-
1428
- .btn-session-delete:disabled {
1429
- opacity: 0.5;
1430
- cursor: not-allowed;
1431
- transform: none;
1432
- }
1433
-
1434
- .session-empty {
1435
- padding: 28px var(--spacing-sm);
1436
- text-align: center;
1437
- border: 1px dashed var(--color-border-soft);
1438
- border-radius: var(--radius-lg);
1439
- color: var(--color-text-tertiary);
1440
- background: var(--bg-warm-gradient);
1441
- position: relative;
1442
- box-shadow: var(--shadow-subtle);
1443
- }
1444
-
1445
- .session-empty::before {
1446
- content: "";
1447
- display: block;
1448
- width: 36px;
1449
- height: 36px;
1450
- border-radius: 50%;
1451
- margin: 0 auto 10px;
1452
- background: rgba(210, 107, 90, 0.12);
1453
- box-shadow: inset 0 0 0 6px rgba(255, 255, 255, 0.7);
1454
- }
1455
-
1456
- .session-layout {
1457
- display: grid;
1458
- grid-template-columns: minmax(215px, 295px) minmax(0, 1fr);
1459
- gap: var(--spacing-sm);
1460
- align-items: start;
1461
- height: min(72vh, 760px);
1462
- min-height: 520px;
1463
- }
1464
-
1465
- .session-layout.session-standalone {
1466
- grid-template-columns: minmax(0, 1fr);
1467
- }
1468
-
1469
- .session-standalone-page {
1470
- max-width: 960px;
1471
- margin: 0 auto;
1472
- padding: var(--spacing-sm) 0;
1473
- }
1474
-
1475
- .session-standalone-title {
1476
- font-size: var(--font-size-title);
1477
- font-weight: var(--font-weight-title);
1478
- color: var(--color-text-primary);
1479
- margin-bottom: var(--spacing-sm);
1480
- letter-spacing: -0.01em;
1481
- }
1482
-
1483
- .session-standalone-text {
1484
- white-space: pre-wrap;
1485
- font-family: var(--font-family-body);
1486
- font-size: var(--font-size-body);
1487
- line-height: 1.7;
1488
- color: var(--color-text-primary);
1489
- word-break: break-word;
1490
- }
1491
-
1492
- .session-list {
1493
- display: flex;
1494
- flex-direction: column;
1495
- gap: var(--spacing-xs);
1496
- position: sticky;
1497
- top: 12px;
1498
- height: 100%;
1499
- max-height: none;
1500
- overflow-y: auto;
1501
- overflow-x: hidden;
1502
- padding-right: 4px;
1503
- min-width: 0;
1504
- scrollbar-width: thin;
1505
- scrollbar-color: rgba(166, 149, 130, 0.85) transparent;
1506
- }
1507
-
1508
- .session-list::-webkit-scrollbar,
1509
- .session-preview-scroll::-webkit-scrollbar {
1510
- width: 10px;
1511
- height: 10px;
1512
- }
1513
-
1514
- .session-list::-webkit-scrollbar-track,
1515
- .session-preview-scroll::-webkit-scrollbar-track {
1516
- background: transparent;
1517
- border-radius: 999px;
1518
- }
1519
-
1520
- .session-list::-webkit-scrollbar-thumb,
1521
- .session-preview-scroll::-webkit-scrollbar-thumb {
1522
- background: linear-gradient(to bottom, rgba(191, 174, 154, 0.95) 0%, rgba(160, 141, 121, 0.95) 100%);
1523
- border-radius: 999px;
1524
- border: 2px solid rgba(255, 255, 255, 0.9);
1525
- }
1526
-
1527
- .session-list::-webkit-scrollbar-thumb:hover,
1528
- .session-preview-scroll::-webkit-scrollbar-thumb:hover {
1529
- background: linear-gradient(to bottom, rgba(175, 156, 136, 0.95) 0%, rgba(145, 126, 107, 0.95) 100%);
1530
- }
1531
-
1532
- .session-item {
1533
- border: 1px solid var(--color-border-soft);
1534
- border-radius: var(--radius-sm);
1535
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.92) 100%);
1536
- padding: 14px 16px;
1537
- cursor: pointer;
1538
- transition: all var(--transition-fast) var(--ease-spring);
1539
- user-select: none;
1540
- min-width: 0;
1541
- position: relative;
1542
- overflow: hidden;
1543
- min-height: 88px;
1544
- }
1545
-
1546
- .session-item-header {
1547
- display: flex;
1548
- align-items: center;
1549
- justify-content: space-between;
1550
- gap: 10px;
1551
- margin-bottom: 4px;
1552
- }
1553
-
1554
- .session-item-main {
1555
- min-width: 0;
1556
- flex: 1;
1557
- display: flex;
1558
- align-items: center;
1559
- gap: 8px;
1560
- }
1561
-
1562
- .session-item:hover {
1563
- border-color: var(--color-brand);
1564
- background: linear-gradient(to bottom, rgba(210, 107, 90, 0.08) 0%, rgba(255, 255, 255, 0.98) 100%);
1565
- transform: translateY(-1px);
1566
- }
1567
-
1568
- .session-item::before {
1569
- content: "";
1570
- position: absolute;
1571
- left: 0;
1572
- top: 10px;
1573
- bottom: 10px;
1574
- width: 3px;
1575
- border-radius: 999px;
1576
- background: rgba(210, 107, 90, 0.15);
1577
- transition: background var(--transition-fast) var(--ease-spring);
1578
- }
1579
-
1580
- .session-item:active {
1581
- transform: scale(0.99);
1582
- }
1583
-
1584
- .session-item.active {
1585
- border-color: var(--color-brand);
1586
- background: linear-gradient(to bottom, rgba(210, 107, 90, 0.1) 0%, rgba(255, 255, 255, 0.98) 100%);
1587
- box-shadow: 0 6px 16px rgba(210, 107, 90, 0.12);
1588
- }
1589
-
1590
- .session-item.active::before {
1591
- background: linear-gradient(180deg, rgba(201, 94, 75, 0.9), rgba(201, 94, 75, 0.4));
1592
- }
1593
-
1594
- .session-item-title {
1595
- font-size: var(--font-size-body);
1596
- font-weight: var(--font-weight-secondary);
1597
- color: var(--color-text-primary);
1598
- line-height: 1.5;
1599
- display: block;
1600
- white-space: nowrap;
1601
- overflow: hidden;
1602
- text-overflow: ellipsis;
1603
- flex: 1;
1604
- max-width: 75%;
1605
- }
1606
-
1607
- .session-item-actions {
1608
- display: inline-flex;
1609
- align-items: center;
1610
- gap: 6px;
1611
- flex-shrink: 0;
1612
- }
1613
-
1614
- .session-item-copy {
1615
- border: 1px solid rgba(70, 86, 110, 0.35);
1616
- background: rgba(70, 86, 110, 0.08);
1617
- color: var(--color-text-secondary);
1618
- width: 28px;
1619
- height: 28px;
1620
- border-radius: 8px;
1621
- display: inline-flex;
1622
- align-items: center;
1623
- justify-content: center;
1624
- cursor: pointer;
1625
- flex-shrink: 0;
1626
- transition: all var(--transition-fast) var(--ease-spring);
1627
- }
1628
-
1629
- .session-item-copy:hover {
1630
- border-color: rgba(70, 86, 110, 0.7);
1631
- background: rgba(70, 86, 110, 0.16);
1632
- color: var(--color-text-primary);
1633
- transform: translateY(-1px);
1634
- }
1635
-
1636
- .session-item-copy:disabled {
1637
- opacity: 0.5;
1638
- cursor: not-allowed;
1639
- transform: none;
1640
- }
1641
-
1642
- .session-item-copy svg {
1643
- width: 16px;
1644
- height: 16px;
1645
- }
1646
-
1647
- .session-item-sub {
1648
- font-size: var(--font-size-caption);
1649
- color: var(--color-text-tertiary);
1650
- line-height: 1.35;
1651
- white-space: nowrap;
1652
- overflow: hidden;
1653
- text-overflow: ellipsis;
1654
- }
1655
-
1656
- .session-item-sub.session-item-wrap {
1657
- white-space: normal;
1658
- }
1659
-
1660
- .session-item-meta {
1661
- display: flex;
1662
- flex-wrap: wrap;
1663
- align-items: center;
1664
- gap: 6px;
1665
- margin-top: 2px;
1666
- margin-bottom: 2px;
1667
- }
1668
-
1669
- .session-item-time {
1670
- font-size: var(--font-size-caption);
1671
- color: var(--color-text-tertiary);
1672
- white-space: nowrap;
1673
- }
1674
-
1675
- .session-preview {
1676
- border: 1px solid var(--color-border-soft);
1677
- border-radius: var(--radius-xl);
1678
- background: linear-gradient(to bottom, var(--color-surface-elevated) 0%, rgba(255, 255, 255, 0.96) 100%);
1679
- box-shadow: var(--shadow-card);
1680
- min-height: 0;
1681
- max-height: none;
1682
- height: 100%;
1683
- display: flex;
1684
- flex-direction: column;
1685
- overflow: hidden;
1686
- transform: translateX(4px);
1687
- transition: transform var(--transition-normal) var(--ease-spring-soft), box-shadow var(--transition-normal) var(--ease-spring-soft);
1688
- }
1689
-
1690
- .session-preview.active {
1691
- box-shadow: var(--shadow-float);
1692
- transform: translateX(0);
1693
- }
1694
-
1695
- .session-preview-scroll {
1696
- flex: 1;
1697
- min-height: 0;
1698
- overflow-y: auto;
1699
- overflow-x: hidden;
1700
- display: flex;
1701
- flex-direction: column;
1702
- scrollbar-width: thin;
1703
- scrollbar-color: rgba(166, 149, 130, 0.85) transparent;
1704
- }
1705
-
1706
- .session-preview-header {
1707
- padding: 12px var(--spacing-sm);
1708
- border-bottom: 1px solid var(--color-border-soft);
1709
- display: flex;
1710
- align-items: flex-start;
1711
- justify-content: space-between;
1712
- gap: var(--spacing-sm);
1713
- position: sticky;
1714
- top: 0;
1715
- z-index: 2;
1716
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.98) 0%, rgba(255, 255, 255, 0.92) 100%);
1717
- backdrop-filter: blur(6px);
1718
- }
1719
-
1720
- .session-preview-header > div:first-child {
1721
- min-width: 0;
1722
- flex: 1;
1723
- }
1724
-
1725
- .session-preview-title {
1726
- font-size: var(--font-size-body);
1727
- font-weight: var(--font-weight-title);
1728
- color: var(--color-text-primary);
1729
- line-height: 1.4;
1730
- display: -webkit-box;
1731
- -webkit-line-clamp: 2;
1732
- -webkit-box-orient: vertical;
1733
- overflow: hidden;
1734
- word-break: break-word;
1735
- }
1736
-
1737
- .session-preview-sub {
1738
- margin-top: 4px;
1739
- font-size: var(--font-size-caption);
1740
- color: var(--color-text-tertiary);
1741
- line-height: 1.35;
1742
- white-space: nowrap;
1743
- overflow: hidden;
1744
- text-overflow: ellipsis;
1745
- }
1746
-
1747
- .session-preview-meta {
1748
- display: flex;
1749
- flex-wrap: wrap;
1750
- align-items: center;
1751
- margin-top: 4px;
1752
- }
1753
-
1754
- .session-preview-meta-item {
1755
- font-size: var(--font-size-caption);
1756
- color: var(--color-text-tertiary);
1757
- line-height: 1.35;
1758
- white-space: nowrap;
1759
- overflow: hidden;
1760
- text-overflow: ellipsis;
1761
- }
1762
-
1763
- .session-preview-meta-item:not(:last-child)::after {
1764
- content: "·";
1765
- margin: 0 6px;
1766
- color: var(--color-text-tertiary);
1767
- opacity: 0.7;
1768
- }
1769
-
1770
- .session-actions {
1771
- display: flex;
1772
- align-items: center;
1773
- gap: 8px;
1774
- flex: 0 1 auto;
1775
- max-width: 100%;
1776
- margin-left: 0;
1777
- flex-wrap: wrap;
1778
- justify-content: flex-end;
1779
- }
1780
-
1781
- .session-preview-body {
1782
- flex: 1;
1783
- min-height: 0;
1784
- padding: var(--spacing-sm);
1785
- display: flex;
1786
- flex-direction: column;
1787
- gap: 10px;
1788
- }
1789
-
1790
- .session-msg {
1791
- border-radius: 10px;
1792
- padding: 10px 12px 10px 18px;
1793
- border: 1px solid rgba(208, 196, 182, 0.45);
1794
- background: rgba(255, 255, 255, 0.75);
1795
- position: relative;
1796
- box-shadow: 0 2px 6px rgba(31, 26, 23, 0.04);
1797
- }
1798
-
1799
- .session-msg.user {
1800
- border-color: rgba(210, 107, 90, 0.35);
1801
- background: rgba(210, 107, 90, 0.08);
1802
- }
1803
-
1804
- .session-msg::before {
1805
- content: "";
1806
- position: absolute;
1807
- left: 8px;
1808
- top: 10px;
1809
- bottom: 10px;
1810
- width: 3px;
1811
- border-radius: 999px;
1812
- background: rgba(139, 118, 104, 0.45);
1813
- }
1814
-
1815
- .session-msg.user::before {
1816
- background: rgba(210, 107, 90, 0.85);
1817
- }
1818
-
1819
- .session-msg.assistant::before {
1820
- background: rgba(90, 139, 106, 0.6);
1821
- }
1822
-
1823
- .session-msg-header {
1824
- display: flex;
1825
- align-items: flex-start;
1826
- justify-content: space-between;
1827
- gap: var(--spacing-xs);
1828
- margin-bottom: 6px;
1829
- font-size: var(--font-size-caption);
1830
- color: var(--color-text-tertiary);
1831
- }
1832
-
1833
- .session-msg-meta {
1834
- min-width: 0;
1835
- flex: 1;
1836
- display: flex;
1837
- align-items: center;
1838
- gap: 8px;
1839
- }
1840
-
1841
- .session-msg-role {
1842
- font-weight: var(--font-weight-secondary);
1843
- color: var(--color-text-secondary);
1844
- }
1845
-
1846
- .session-msg-time {
1847
- white-space: nowrap;
1848
- overflow: hidden;
1849
- text-overflow: ellipsis;
1850
- color: var(--color-text-tertiary);
1851
- }
1852
-
1853
- .session-msg-content {
1854
- font-size: var(--font-size-secondary);
1855
- line-height: 1.55;
1856
- color: var(--color-text-primary);
1857
- white-space: pre-wrap;
1858
- word-break: break-word;
1859
- }
1860
-
1861
- .session-preview-empty {
1862
- flex: 1;
1863
- display: flex;
1864
- align-items: center;
1865
- justify-content: center;
1866
- color: var(--color-text-tertiary);
1867
- font-size: var(--font-size-secondary);
1868
- padding: var(--spacing-md);
1869
- text-align: center;
1870
- flex-direction: column;
1871
- gap: 8px;
1872
- }
1873
-
1874
- .session-preview-empty::before {
1875
- content: "";
1876
- width: 34px;
1877
- height: 34px;
1878
- border-radius: 50%;
1879
- background: rgba(210, 107, 90, 0.12);
1880
- box-shadow: inset 0 0 0 6px rgba(255, 255, 255, 0.7);
1881
- }
1882
-
1883
- @media (max-width: 1100px) {
1884
- .session-layout {
1885
- grid-template-columns: 1fr;
1886
- height: auto;
1887
- min-height: 0;
1888
- }
1889
-
1890
- .session-toolbar {
1891
- grid-template-columns: 1fr;
1892
- }
1893
-
1894
- .session-toolbar-actions {
1895
- justify-content: flex-start;
1896
- }
1897
-
1898
- .session-toolbar-footer {
1899
- justify-content: flex-start;
1900
- }
1901
-
1902
- .session-list {
1903
- position: static;
1904
- max-height: 300px;
1905
- height: auto;
1906
- }
1907
-
1908
- .session-preview {
1909
- min-height: 360px;
1910
- max-height: none;
1911
- height: auto;
1912
- position: relative;
1913
- transform: none;
1914
- box-shadow: var(--shadow-card);
1915
- }
1916
-
1917
- .session-preview-header {
1918
- flex-direction: column;
1919
- align-items: stretch;
1920
- }
1921
-
1922
- .session-actions {
1923
- justify-content: flex-start;
1924
- }
1925
-
1926
- .session-preview.active {
1927
- box-shadow: var(--shadow-float);
1928
- }
1929
- }
1930
-
1931
- @media (max-width: 520px) {
1932
- .session-item-header {
1933
- flex-direction: column;
1934
- align-items: stretch;
1935
- }
1936
-
1937
- .session-item-actions {
1938
- justify-content: flex-end;
1939
- }
1940
-
1941
- .session-actions {
1942
- width: 100%;
1943
- flex-direction: column;
1944
- align-items: stretch;
1945
- }
1946
-
1947
- .btn-session-refresh,
1948
- .btn-session-export {
1949
- width: 100%;
1950
- }
1951
-
1952
- .session-toolbar-group.session-toolbar-actions {
1953
- flex-direction: column;
1954
- align-items: stretch;
1955
- }
1956
-
1957
- .session-toolbar-group.session-toolbar-actions .btn-tool {
1958
- width: 100%;
1959
- }
1960
- }
1961
-
1962
- .btn[disabled] {
1963
- opacity: 0.5;
1964
- cursor: not-allowed;
1965
- transform: none;
1966
- box-shadow: none;
1967
- }
1968
-
1969
- /* ============================================
1970
- 模态框
1971
- ============================================ */
1972
- .modal-overlay {
1973
- position: fixed;
1974
- top: 0;
1975
- left: 0;
1976
- right: 0;
1977
- bottom: 0;
1978
- background: linear-gradient(to bottom, rgba(31, 26, 23, 0.3) 0%, rgba(31, 26, 23, 0.5) 100%);
1979
- display: flex;
1980
- justify-content: center;
1981
- align-items: center;
1982
- z-index: 100;
1983
- backdrop-filter: blur(8px) saturate(180%);
1984
- -webkit-backdrop-filter: blur(8px) saturate(180%);
1985
- animation: fadeIn var(--transition-normal) var(--ease-out-expo);
1986
- }
1987
-
1988
- .modal {
1989
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.98) 100%);
1990
- width: 90%;
1991
- max-width: 400px;
1992
- max-height: 90vh;
1993
- overflow-y: auto;
1994
- overscroll-behavior: contain;
1995
- border-radius: var(--radius-lg);
1996
- padding: var(--spacing-md);
1997
- box-shadow: var(--shadow-modal);
1998
- border: 1px solid rgba(255, 255, 255, 0.8);
1999
- animation: slideUp var(--transition-slow) var(--ease-spring);
2000
- }
2001
-
2002
- .modal-wide {
2003
- max-width: 980px;
2004
- }
2005
-
2006
- .modal-title {
2007
- font-size: var(--font-size-title);
2008
- font-weight: var(--font-weight-title);
2009
- margin-bottom: var(--spacing-md);
2010
- color: var(--color-text-primary);
2011
- letter-spacing: -0.01em;
2012
- }
2013
-
2014
- .install-list {
2015
- display: flex;
2016
- flex-direction: column;
2017
- gap: var(--spacing-sm);
2018
- margin-top: var(--spacing-sm);
2019
- }
2020
-
2021
- .install-row {
2022
- display: flex;
2023
- align-items: center;
2024
- gap: var(--spacing-sm);
2025
- padding: 10px 12px;
2026
- border: 1px solid var(--color-border-soft);
2027
- border-radius: var(--radius-lg);
2028
- background: var(--color-surface-alt);
2029
- }
2030
-
2031
- .install-command {
2032
- flex: 1;
2033
- font-family: var(--font-family-mono);
2034
- font-size: var(--font-size-secondary);
2035
- color: var(--color-text-primary);
2036
- word-break: break-all;
2037
- background: rgba(255, 255, 255, 0.7);
2038
- padding: 8px 10px;
2039
- border-radius: var(--radius-sm);
2040
- border: 1px solid var(--color-border-soft);
2041
- }
2042
-
2043
- .install-row .btn-mini {
2044
- white-space: nowrap;
2045
- }
2046
-
2047
- .modal-header {
2048
- display: flex;
2049
- align-items: center;
2050
- justify-content: space-between;
2051
- gap: var(--spacing-sm);
2052
- margin-bottom: var(--spacing-md);
2053
- flex-wrap: wrap;
2054
- }
2055
-
2056
- .modal-header .modal-title {
2057
- margin-bottom: 0;
2058
- }
2059
-
2060
- .btn-modal-copy {
2061
- padding: 6px 12px;
2062
- white-space: nowrap;
2063
- flex-shrink: 0;
2064
- }
2065
-
2066
- .form-group {
2067
- margin-bottom: var(--spacing-sm);
2068
- }
2069
-
2070
- .form-label {
2071
- display: block;
2072
- font-size: var(--font-size-secondary);
2073
- font-weight: var(--font-weight-secondary);
2074
- color: var(--color-text-secondary);
2075
- margin-bottom: 7px;
2076
- letter-spacing: 0.01em;
2077
- }
2078
-
2079
- .form-input {
2080
- width: 100%;
2081
- padding: 13px var(--spacing-sm);
2082
- border: 1.5px solid var(--color-border-soft);
2083
- border-radius: var(--radius-sm);
2084
- font-size: var(--font-size-body);
2085
- background-color: var(--color-surface-alt);
2086
- color: var(--color-text-primary);
2087
- outline: none;
2088
- transition: all var(--transition-fast) var(--ease-spring);
2089
- font-family: var(--font-family-body);
2090
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
2091
- }
2092
-
2093
- .form-input:hover {
2094
- border-color: var(--color-border-strong);
2095
- }
2096
-
2097
- .form-input:focus {
2098
- border-color: var(--color-brand);
2099
- background-color: var(--color-surface);
2100
- box-shadow: var(--shadow-input-focus);
2101
- }
2102
-
2103
- .form-input::placeholder {
2104
- color: var(--color-text-tertiary);
2105
- opacity: 0.7;
2106
- }
2107
-
2108
- .template-editor {
2109
- min-height: min(60vh, 520px);
2110
- max-height: min(65vh, 620px);
2111
- resize: vertical;
2112
- overflow: auto;
2113
- white-space: pre;
2114
- font-family: var(--font-family-mono);
2115
- font-size: 13px;
2116
- line-height: 1.45;
2117
- }
2118
-
2119
- .template-editor-warning {
2120
- margin-top: 8px;
2121
- color: #8d5b31;
2122
- font-size: var(--font-size-caption);
2123
- line-height: 1.4;
2124
- }
2125
-
2126
- .form-input:disabled,
2127
- .form-input[readonly] {
2128
- background: linear-gradient(to right, var(--color-bg) 0%, rgba(247, 241, 232, 0.5) 100%);
2129
- color: var(--color-text-tertiary);
2130
- cursor: not-allowed;
2131
- border-color: transparent;
2132
- }
2133
-
2134
- .form-hint {
2135
- font-size: var(--font-size-caption);
2136
- color: var(--color-text-tertiary);
2137
- margin-top: 5px;
2138
- opacity: 0.8;
2139
- }
2140
-
2141
- .quick-section {
2142
- margin-top: var(--spacing-md);
2143
- padding: var(--spacing-sm);
2144
- border-radius: var(--radius-lg);
2145
- border: 1px solid var(--color-border-soft);
2146
- background: linear-gradient(140deg, rgba(255, 252, 247, 0.95), rgba(255, 255, 255, 0.6));
2147
- }
2148
-
2149
- .quick-header {
2150
- display: flex;
2151
- flex-wrap: wrap;
2152
- gap: var(--spacing-xs);
2153
- align-items: flex-start;
2154
- justify-content: space-between;
2155
- margin-bottom: var(--spacing-sm);
2156
- }
2157
-
2158
- .quick-title {
2159
- font-size: var(--font-size-secondary);
2160
- font-weight: var(--font-weight-secondary);
2161
- color: var(--color-text-secondary);
2162
- }
2163
-
2164
- .quick-actions {
2165
- display: flex;
2166
- flex-wrap: wrap;
2167
- gap: var(--spacing-xs);
2168
- }
2169
-
2170
- .quick-steps {
2171
- display: flex;
2172
- flex-wrap: wrap;
2173
- gap: var(--spacing-xs);
2174
- margin-bottom: var(--spacing-sm);
2175
- }
2176
-
2177
- .quick-step {
2178
- display: inline-flex;
2179
- align-items: center;
2180
- gap: 6px;
2181
- padding: 4px 10px;
2182
- border-radius: 999px;
2183
- border: 1px dashed var(--color-border-soft);
2184
- background: var(--color-surface);
2185
- font-size: var(--font-size-caption);
2186
- color: var(--color-text-secondary);
2187
- }
2188
-
2189
- .step-badge {
2190
- width: 20px;
2191
- height: 20px;
2192
- border-radius: 999px;
2193
- display: inline-flex;
2194
- align-items: center;
2195
- justify-content: center;
2196
- background: var(--color-brand);
2197
- color: #fff;
2198
- font-size: 12px;
2199
- font-weight: var(--font-weight-secondary);
2200
- }
2201
-
2202
- .quick-grid {
2203
- display: grid;
2204
- gap: var(--spacing-sm);
2205
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
2206
- }
2207
-
2208
- .quick-card {
2209
- background: var(--color-surface);
2210
- border: 1px solid var(--color-border-soft);
2211
- border-radius: var(--radius-sm);
2212
- padding: var(--spacing-sm);
2213
- box-shadow: var(--shadow-subtle);
2214
- }
2215
-
2216
- .quick-option {
2217
- display: flex;
2218
- align-items: center;
2219
- gap: 8px;
2220
- font-size: var(--font-size-caption);
2221
- color: var(--color-text-secondary);
2222
- margin-bottom: 6px;
2223
- }
2224
-
2225
- .quick-option input {
2226
- accent-color: var(--color-brand);
2227
- }
2228
-
2229
- .structured-section {
2230
- margin-top: var(--spacing-md);
2231
- padding: var(--spacing-sm);
2232
- border-radius: var(--radius-lg);
2233
- border: 1px solid var(--color-border-soft);
2234
- background: rgba(255, 255, 255, 0.6);
2235
- }
2236
-
2237
- .structured-header {
2238
- display: flex;
2239
- flex-wrap: wrap;
2240
- gap: var(--spacing-xs);
2241
- align-items: baseline;
2242
- justify-content: space-between;
2243
- margin-bottom: var(--spacing-sm);
2244
- }
2245
-
2246
- .structured-title {
2247
- font-size: var(--font-size-secondary);
2248
- font-weight: var(--font-weight-secondary);
2249
- color: var(--color-text-secondary);
2250
- }
2251
-
2252
- .structured-grid {
2253
- display: grid;
2254
- gap: var(--spacing-sm);
2255
- grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
2256
- }
2257
-
2258
- .structured-card {
2259
- background: var(--color-surface);
2260
- border: 1px solid var(--color-border-soft);
2261
- border-radius: var(--radius-sm);
2262
- padding: var(--spacing-sm);
2263
- box-shadow: var(--shadow-subtle);
2264
- }
2265
-
2266
- .structured-card-title {
2267
- font-size: var(--font-size-body);
2268
- font-weight: var(--font-weight-secondary);
2269
- color: var(--color-text-secondary);
2270
- margin-bottom: 8px;
2271
- }
2272
-
2273
- .provider-list {
2274
- display: flex;
2275
- flex-direction: column;
2276
- gap: var(--spacing-xs);
2277
- }
2278
-
2279
- .provider-item {
2280
- border: 1px dashed var(--color-border-soft);
2281
- border-radius: var(--radius-sm);
2282
- padding: var(--spacing-xs);
2283
- background: var(--color-surface-alt);
2284
- }
2285
-
2286
- .provider-header {
2287
- display: flex;
2288
- flex-wrap: wrap;
2289
- gap: var(--spacing-xs);
2290
- align-items: center;
2291
- margin-bottom: 6px;
2292
- }
2293
-
2294
- .provider-name {
2295
- font-weight: var(--font-weight-secondary);
2296
- color: var(--color-text-secondary);
2297
- }
2298
-
2299
- .provider-source {
2300
- font-size: var(--font-size-caption);
2301
- color: var(--color-text-tertiary);
2302
- }
2303
-
2304
- .provider-fields {
2305
- display: grid;
2306
- gap: 6px;
2307
- }
2308
-
2309
- .provider-field {
2310
- display: flex;
2311
- flex-wrap: wrap;
2312
- gap: 6px;
2313
- align-items: baseline;
2314
- }
2315
-
2316
- .provider-field-key {
2317
- font-family: var(--font-family-mono);
2318
- font-size: var(--font-size-caption);
2319
- color: var(--color-text-muted);
2320
- min-width: 110px;
2321
- }
2322
-
2323
- .provider-field-value {
2324
- font-family: var(--font-family-mono);
2325
- font-size: var(--font-size-caption);
2326
- color: var(--color-text-secondary);
2327
- word-break: break-all;
2328
- }
2329
-
2330
- .agent-list {
2331
- display: flex;
2332
- flex-direction: column;
2333
- gap: var(--spacing-xs);
2334
- }
2335
-
2336
- .agent-item {
2337
- border: 1px dashed var(--color-border-soft);
2338
- border-radius: var(--radius-sm);
2339
- padding: var(--spacing-xs);
2340
- background: var(--color-surface-alt);
2341
- }
2342
-
2343
- .agent-header {
2344
- display: flex;
2345
- flex-wrap: wrap;
2346
- gap: var(--spacing-xs);
2347
- align-items: center;
2348
- margin-bottom: 6px;
2349
- }
2350
-
2351
- .agent-name {
2352
- font-weight: var(--font-weight-secondary);
2353
- color: var(--color-text-secondary);
2354
- }
2355
-
2356
- .agent-id {
2357
- font-size: var(--font-size-caption);
2358
- color: var(--color-text-tertiary);
2359
- }
2360
-
2361
- .agent-meta {
2362
- display: flex;
2363
- flex-wrap: wrap;
2364
- gap: 8px;
2365
- font-size: var(--font-size-caption);
2366
- color: var(--color-text-secondary);
2367
- }
2368
-
2369
- .list-row {
2370
- display: flex;
2371
- flex-wrap: wrap;
2372
- gap: var(--spacing-xs);
2373
- align-items: center;
2374
- margin-bottom: var(--spacing-xs);
2375
- }
2376
-
2377
- .list-row:last-child {
2378
- margin-bottom: 0;
2379
- }
2380
-
2381
- .list-row .form-input {
2382
- flex: 1;
2383
- min-width: 140px;
2384
- }
2385
-
2386
- .btn-mini {
2387
- padding: 6px 10px;
2388
- border-radius: var(--radius-sm);
2389
- border: 1px solid var(--color-border-soft);
2390
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.85) 100%);
2391
- font-size: var(--font-size-caption);
2392
- font-weight: var(--font-weight-secondary);
2393
- color: var(--color-text-secondary);
2394
- cursor: pointer;
2395
- transition: all var(--transition-fast) var(--ease-spring);
2396
- box-shadow: var(--shadow-subtle);
2397
- }
2398
-
2399
- .btn-mini:hover {
2400
- border-color: var(--color-brand);
2401
- color: var(--color-brand);
2402
- transform: translateY(-1px);
2403
- }
2404
-
2405
- .btn-mini.delete {
2406
- color: var(--color-error);
2407
- border-color: rgba(193, 72, 59, 0.35);
2408
- }
2409
-
2410
- .btn-mini.delete:hover {
2411
- border-color: rgba(193, 72, 59, 0.7);
2412
- color: var(--color-error);
2413
- }
2414
-
2415
- .btn-group {
2416
- display: flex;
2417
- gap: var(--spacing-sm);
2418
- margin-top: var(--spacing-md);
2419
- }
2420
-
2421
- .btn {
2422
- flex: 1;
2423
- padding: 14px var(--spacing-sm);
2424
- border-radius: var(--radius-sm);
2425
- font-size: var(--font-size-body);
2426
- font-weight: var(--font-weight-secondary);
2427
- cursor: pointer;
2428
- transition: all var(--transition-fast) var(--ease-spring);
2429
- border: 1px solid var(--color-border-soft);
2430
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.95) 100%);
2431
- color: var(--color-text-secondary);
2432
- box-shadow: var(--shadow-subtle);
2433
- letter-spacing: -0.01em;
2434
- }
2435
-
2436
- .btn:active {
2437
- transform: scale(0.97);
2438
- }
2439
-
2440
- .btn-cancel {
2441
- background: linear-gradient(to bottom, var(--color-bg) 0%, rgba(247, 241, 232, 0.8) 100%);
2442
- color: var(--color-text-primary);
2443
- border: 1px solid var(--color-border-soft);
2444
- }
2445
-
2446
- .btn-cancel:hover {
2447
- background: linear-gradient(to bottom, var(--color-border) 0%, rgba(208, 196, 182, 0.5) 100%);
2448
- }
2449
-
2450
- .btn-confirm {
2451
- background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
2452
- color: white;
2453
- box-shadow: 0 2px 4px rgba(210, 107, 90, 0.2);
2454
- border: none;
2455
- }
2456
-
2457
- .btn-confirm:hover {
2458
- box-shadow: 0 4px 8px rgba(210, 107, 90, 0.25);
2459
- filter: brightness(1.05);
2460
- }
2461
-
2462
- .btn-confirm.secondary {
2463
- background: linear-gradient(135deg, var(--color-success) 0%, rgba(90, 139, 106, 0.85) 100%);
2464
- box-shadow: 0 2px 4px rgba(90, 139, 106, 0.2);
2465
- border: none;
2466
- }
2467
-
2468
- .btn-confirm.secondary:hover {
2469
- box-shadow: 0 4px 8px rgba(90, 139, 106, 0.25);
2470
- filter: brightness(1.05);
2471
- }
2472
-
2473
- /* ============================================
2474
- 模型列表
2475
- ============================================ */
2476
- .model-list {
2477
- max-height: 200px;
2478
- overflow-y: auto;
2479
- border: 1px solid rgba(208, 196, 182, 0.4);
2480
- border-radius: var(--radius-sm);
2481
- margin-bottom: var(--spacing-sm);
2482
- scrollbar-width: none;
2483
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.8) 100%);
2484
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.02);
2485
- }
2486
-
2487
- .model-list::-webkit-scrollbar {
2488
- display: none;
2489
- }
2490
-
2491
- .model-item {
2492
- display: flex;
2493
- justify-content: space-between;
2494
- align-items: center;
2495
- padding: 11px var(--spacing-sm);
2496
- border-bottom: 1px solid rgba(208, 196, 182, 0.3);
2497
- font-size: var(--font-size-body);
2498
- color: var(--color-text-primary);
2499
- transition: all var(--transition-fast) var(--ease-spring);
2500
- letter-spacing: -0.005em;
2501
- }
2502
-
2503
- .model-item:last-child {
2504
- border-bottom: none;
2505
- }
2506
-
2507
- .model-item:hover {
2508
- background: linear-gradient(to right, rgba(247, 241, 232, 0.6) 0%, rgba(247, 241, 232, 0.3) 100%);
2509
- }
2510
-
2511
- .btn-remove-model {
2512
- font-size: var(--font-size-caption);
2513
- font-weight: var(--font-weight-caption);
2514
- color: var(--color-text-tertiary);
2515
- cursor: pointer;
2516
- padding: 5px 10px;
2517
- border-radius: var(--radius-full);
2518
- transition: all var(--transition-fast) var(--ease-spring);
2519
- background: transparent;
2520
- border: 1px solid rgba(139, 118, 104, 0.2);
2521
- letter-spacing: 0.03em;
2522
- }
2523
-
2524
- .btn-remove-model:hover {
2525
- background: linear-gradient(135deg, var(--color-error) 0%, rgba(200, 74, 58, 0.9) 100%);
2526
- color: white;
2527
- transform: scale(1.08);
2528
- box-shadow: 0 2px 6px rgba(200, 74, 58, 0.25);
2529
- border-color: transparent;
2530
- }
2531
-
2532
- /* ============================================
2533
- Toast - 顶部横幅
2534
- ============================================ */
2535
- .toast {
2536
- position: fixed;
2537
- top: 16px;
2538
- left: 50%;
2539
- transform: translateX(-50%);
2540
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.95) 100%);
2541
- padding: 12px 24px;
2542
- border-radius: var(--radius-full);
2543
- box-shadow: var(--shadow-raised);
2544
- z-index: 200;
2545
- animation: slideDown var(--transition-slow) var(--ease-spring);
2546
- display: flex;
2547
- align-items: center;
2548
- gap: var(--spacing-xs);
2549
- font-size: var(--font-size-body);
2550
- font-weight: var(--font-weight-body);
2551
- border: 1px solid rgba(255, 255, 255, 0.8);
2552
- backdrop-filter: blur(8px);
2553
- -webkit-backdrop-filter: blur(8px);
2554
- }
2555
-
2556
- .toast.error {
2557
- border-left: 3px solid var(--color-error);
2558
- }
2559
-
2560
- .toast.success {
2561
- border-left: 3px solid var(--color-success);
2562
- }
2563
-
2564
- /* ============================================
2565
- 状态消息
2566
- ============================================ */
2567
- .state-message {
2568
- text-align: center;
2569
- padding: 60px var(--spacing-md);
2570
- color: var(--color-text-tertiary);
2571
- font-size: var(--font-size-body);
2572
- opacity: 0.7;
2573
- letter-spacing: -0.005em;
2574
- }
2575
-
2576
- .state-message.error {
2577
- color: var(--color-error);
2578
- }
2579
-
2580
- /* 空状态 */
2581
- .empty-state {
2582
- text-align: center;
2583
- padding: 48px var(--spacing-md);
2584
- color: var(--color-text-tertiary);
2585
- }
2586
-
2587
- .empty-state-icon {
2588
- width: 48px;
2589
- height: 48px;
2590
- margin: 0 auto var(--spacing-sm);
2591
- opacity: 0.3;
2592
- }
2593
-
2594
- .empty-state-title {
2595
- font-size: var(--font-size-body);
2596
- font-weight: var(--font-weight-secondary);
2597
- color: var(--color-text-secondary);
2598
- margin-bottom: 4px;
2599
- }
2600
-
2601
- .empty-state-subtitle {
2602
- font-size: var(--font-size-secondary);
2603
- color: var(--color-text-tertiary);
2604
- opacity: 0.8;
2605
- }
2606
-
2607
- /* ============================================
2608
- 动画
2609
- ============================================ */
2610
- @keyframes fadeIn {
2611
- from { opacity: 0; }
2612
- to { opacity: 1; }
2613
- }
2614
-
2615
- @keyframes slideUp {
2616
- from { transform: translateY(24px); opacity: 0; }
2617
- to { transform: translateY(0); opacity: 1; }
2618
- }
2619
-
2620
- @keyframes slideDown {
2621
- from { transform: translateX(-50%) translateY(-100%); opacity: 0; }
2622
- to { transform: translateX(-50%) translateY(0); opacity: 1; }
2623
- }
2624
-
2625
- @keyframes spin {
2626
- from { transform: rotate(0deg); }
2627
- to { transform: rotate(360deg); }
2628
- }
2629
-
2630
- [v-cloak] {
2631
- display: none !important;
2632
- }
2633
-
2634
- /* 模式内容容器 */
2635
- .mode-content {
2636
- animation: fadeIn var(--transition-normal) var(--ease-spring);
2637
- }
2638
-
2639
- /* 内容区域包裹器 - 稳定高度 */
2640
- .content-wrapper {
2641
- min-height: 300px;
2642
- position: relative;
2643
- }
2644
-
2645
- button:focus-visible,
2646
- select:focus-visible,
2647
- input:focus-visible,
2648
- textarea:focus-visible {
2649
- outline: 3px solid rgba(201, 94, 75, 0.25);
2650
- outline-offset: 2px;
2651
- }
2652
-
2653
- @media (max-width: 960px) {
2654
- .container {
2655
- padding: 12px;
2656
- }
2657
- .app-shell {
2658
- grid-template-columns: 1fr;
2659
- }
2660
- .side-rail {
2661
- display: none;
2662
- }
2663
- .hero-logo {
2664
- display: block;
2665
- }
2666
- .main-panel {
2667
- padding: var(--spacing-sm) var(--spacing-sm);
2668
- border-radius: 14px;
2669
- }
2670
- .top-tabs {
2671
- display: grid !important;
2672
- grid-template-columns: repeat(2, minmax(0, 1fr));
2673
- }
2674
- .status-strip {
2675
- gap: var(--spacing-sm);
2676
- margin-top: 4px;
2677
- }
2678
- .status-chip {
2679
- flex: 1 1 calc(50% - var(--spacing-sm));
2680
- min-width: 0;
2681
- }
2682
- }
2683
-
2684
- @media (max-width: 720px) {
2685
- .main-title {
2686
- font-size: 40px;
2687
- }
2688
-
2689
- .hero-title {
2690
- font-size: 32px;
2691
- }
2692
-
2693
- .subtitle {
2694
- font-size: var(--font-size-secondary);
2695
- margin-bottom: 16px;
2696
- }
2697
-
2698
- .segmented-control {
2699
- flex-direction: column;
2700
- gap: 6px;
2701
- }
2702
-
2703
- .status-strip {
2704
- flex-direction: row;
2705
- flex-wrap: wrap;
2706
- }
2707
-
2708
- .status-chip {
2709
- flex: 1 1 100%;
2710
- }
2711
- }
2712
-
2713
- @media (max-width: 540px) {
2714
- body {
2715
- padding: var(--spacing-md) var(--spacing-sm);
2716
- }
2717
- .container {
2718
- padding: 0 var(--spacing-sm) var(--spacing-md);
2719
- }
2720
- .hero-title {
2721
- font-size: 32px;
2722
- }
2723
- .hero-subtitle {
2724
- font-size: var(--font-size-secondary);
2725
- }
2726
- .top-tabs {
2727
- grid-template-columns: repeat(1, minmax(0, 1fr));
2728
- }
2729
- .main-panel {
2730
- padding: var(--spacing-sm);
2731
- }
2732
- .card {
2733
- padding: 12px;
2734
- }
2735
- .session-layout {
2736
- grid-template-columns: 1fr;
2737
- height: auto;
2738
- min-height: 0;
2739
- }
2740
-
2741
- .status-strip {
2742
- gap: var(--spacing-xs);
2743
- }
2744
-
2745
- .status-chip {
2746
- flex: 1 1 100%;
2747
- min-width: 100%;
2748
- }
2749
-
2750
- .btn-add,
2751
- .btn-tool,
2752
- .card-action-btn,
2753
- .btn-session-export,
2754
- .btn-session-open,
2755
- .btn-session-clone,
2756
- .btn-session-refresh,
2757
- .btn-session-delete,
2758
- .btn-icon,
2759
- .session-item-copy {
2760
- min-height: 44px;
2761
- padding-top: 12px;
2762
- padding-bottom: 12px;
2763
- }
2764
-
2765
- .btn-icon,
2766
- .session-item-copy {
2767
- min-width: 44px;
2768
- }
2769
-
2770
- .session-item {
2771
- min-height: 75px;
2772
- height: 75px;
2773
- padding: 12px 14px;
2774
- }
2775
-
2776
- .session-item-header {
2777
- flex-direction: row;
2778
- align-items: center;
2779
- gap: 8px;
2780
- }
2781
-
2782
- .session-item-main {
2783
- align-items: center;
2784
- }
2785
-
2786
- .session-item-copy {
2787
- width: 20px;
2788
- height: 20px;
2789
- min-width: 20px;
2790
- min-height: 20px;
2791
- border-radius: 6px;
2792
- padding: 2px;
2793
- display: inline-flex;
2794
- align-items: center;
2795
- justify-content: center;
2796
- transform: translate(-3px, 0);
2797
- }
2798
-
2799
- .session-item-copy svg {
2800
- width: 12px;
2801
- height: 12px;
2802
- }
2803
-
2804
- .session-item-title {
2805
- -webkit-line-clamp: 1;
2806
- max-height: none;
2807
- white-space: nowrap;
2808
- text-overflow: ellipsis;
2809
- overflow: hidden;
2810
- }
2811
-
2812
- .session-item-actions {
2813
- margin-top: 0;
2814
- }
2815
-
2816
- .session-item-meta {
2817
- margin-top: -2px;
2818
- margin-bottom: 0;
2819
- gap: 4px;
2820
- align-items: center;
2821
- }
2822
-
2823
- .card {
2824
- padding: 8px;
2825
- }
2826
-
2827
- .card-list {
2828
- gap: 4px;
2829
- margin-bottom: 4px;
2830
- }
2831
-
2832
- .card-actions {
2833
- gap: 8px;
2834
- }
2835
-
2836
- .card-action-btn {
2837
- width: 40px;
2838
- height: 40px;
2839
- border-radius: 10px;
2840
- }
2841
-
2842
- .card-action-btn svg {
2843
- width: 18px;
2844
- height: 18px;
2845
- }
2846
-
2847
- .card-trailing {
2848
- grid-auto-flow: row;
2849
- grid-auto-columns: 1fr;
2850
- justify-content: stretch;
2851
- justify-items: end;
2852
- }
2853
-
2854
- .card-trailing .card-actions {
2855
- width: 100%;
2856
- justify-content: flex-end;
2857
- justify-self: end;
2858
- }
2859
-
2860
- /* 移动端不显示配置状态 pill,节省空间 */
2861
- .card-trailing .pill {
2862
- display: none;
2863
- }
2864
-
2865
- .session-preview {
2866
- border-radius: var(--radius-lg);
2867
- }
2868
- }