anygate 0.5.2 → 0.5.4

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,1751 +0,0 @@
1
- /* ─── Tokens ─────────────────────────────────────────────────────────────── */
2
- :root {
3
- /* Warm charcoal canvas — restrained, no saturated glow */
4
- --bg: oklch(18% 0.006 70);
5
- --sidebar-bg: oklch(15.5% 0.006 70);
6
- --surface: oklch(21% 0.006 70);
7
- --surface-2: oklch(25% 0.006 70);
8
- --surface-hover: oklch(27% 0.007 70);
9
- --border: oklch(30% 0.006 70);
10
- --border-bright: oklch(42% 0.008 70);
11
- --border-glow: oklch(75% 0.16 65 / 0.3);
12
-
13
- /* Accent — warm amber, single hue (no gradient slop) */
14
- --accent: oklch(75% 0.16 65);
15
- --accent-dim: oklch(62% 0.13 60);
16
- --accent-muted: oklch(75% 0.16 65 / 0.12);
17
- --accent-glow: oklch(75% 0.16 65 / 0.15);
18
- --accent-2: oklch(72% 0.14 55);
19
-
20
- /* Text */
21
- --text-1: oklch(96% 0.005 80);
22
- --text-2: oklch(72% 0.01 75);
23
- --text-3: oklch(52% 0.01 75);
24
-
25
- /* Semantic */
26
- --success: oklch(74% 0.16 150);
27
- --success-bg: oklch(74% 0.16 150 / 0.1);
28
- --error: oklch(66% 0.2 25);
29
- --error-bg: oklch(66% 0.2 25 / 0.1);
30
-
31
- /* Motion */
32
- --ease: cubic-bezier(0.16, 1, 0.3, 1);
33
- --dur-xs: 100ms;
34
- --dur-sm: 160ms;
35
- --dur-md: 240ms;
36
- --dur-lg: 380ms;
37
-
38
- /* Layout */
39
- --sidebar-w: 240px;
40
- --radius: 10px;
41
- --radius-sm: 7px;
42
- --radius-xs: 5px;
43
- }
44
-
45
- /* ─── Light mode overrides ───────────────────────────────────────────────── */
46
- html[data-theme="light"] {
47
- --bg: oklch(96% 0.004 75);
48
- --sidebar-bg: oklch(93% 0.005 75);
49
- --surface: oklch(100% 0 0);
50
- --surface-2: oklch(95% 0.004 75);
51
- --surface-hover: oklch(92% 0.005 75);
52
- --border: oklch(86% 0.006 75);
53
- --border-bright: oklch(72% 0.008 75);
54
- --text-1: oklch(22% 0.02 60);
55
- --text-2: oklch(42% 0.015 60);
56
- --text-3: oklch(58% 0.012 60);
57
- }
58
-
59
- html[data-theme="light"] body {
60
- background:
61
- radial-gradient(ellipse 120% 80% at 50% -20%, oklch(100% 0 0) 0%, transparent 55%),
62
- var(--bg);
63
- }
64
-
65
- /* ─── Reset ─────────────────────────────────────────────────────────────── */
66
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
67
- html { scroll-behavior: smooth; scroll-padding-top: 32px; }
68
-
69
- body {
70
- font-family: 'Inter', system-ui, -apple-system, sans-serif;
71
- font-size: 16px;
72
- line-height: 1.6;
73
- color: var(--text-1);
74
- background:
75
- radial-gradient(ellipse 120% 80% at 50% -20%, oklch(26% 0.008 70 / 0.6) 0%, transparent 55%),
76
- var(--bg);
77
- -webkit-font-smoothing: antialiased;
78
- min-height: 100dvh;
79
- overflow: hidden;
80
- }
81
-
82
- a { color: inherit; text-decoration: none; }
83
- button { font-family: inherit; cursor: pointer; border: none; background: none; }
84
- input { font-family: inherit; }
85
- :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: var(--radius-xs); }
86
- ::-webkit-scrollbar { width: 5px; }
87
- ::-webkit-scrollbar-track { background: transparent; }
88
- ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
89
-
90
- /* ─── App layout ─────────────────────────────────────────────────────────── */
91
- .layout {
92
- display: grid;
93
- grid-template-columns: var(--sidebar-w) 1fr;
94
- height: 100dvh;
95
- }
96
-
97
- /* ─── Sidebar ────────────────────────────────────────────────────────────── */
98
- .sidebar {
99
- background: var(--sidebar-bg);
100
- border-right: 1px solid var(--border);
101
- display: flex;
102
- flex-direction: column;
103
- padding: 0;
104
- overflow: hidden;
105
- position: relative;
106
- }
107
-
108
- .sidebar::after {
109
- content: '';
110
- position: absolute;
111
- top: 0; right: 0;
112
- width: 1px;
113
- height: 100%;
114
- background: linear-gradient(to bottom, var(--accent-dim), transparent 60%);
115
- opacity: 0.4;
116
- pointer-events: none;
117
- }
118
-
119
- /* Brand */
120
- .sidebar-brand {
121
- display: flex;
122
- align-items: center;
123
- gap: 12px;
124
- padding: 28px 24px 20px;
125
- }
126
-
127
- .brand-logo {
128
- width: 38px;
129
- height: 38px;
130
- border-radius: 10px;
131
- overflow: hidden;
132
- display: flex;
133
- align-items: center;
134
- justify-content: center;
135
- flex-shrink: 0;
136
- background: oklch(26% 0.01 70);
137
- box-shadow: 0 4px 14px var(--accent-glow);
138
- }
139
-
140
- .brand-monogram {
141
- font-family: 'Inter', system-ui, sans-serif;
142
- font-size: 21px;
143
- font-weight: 800;
144
- color: var(--accent);
145
- line-height: 1;
146
- letter-spacing: -0.02em;
147
- }
148
-
149
-
150
- .brand-meta {
151
- min-width: 0;
152
- }
153
-
154
- .brand-name {
155
- font-size: 22px;
156
- font-weight: 700;
157
- letter-spacing: -0.02em;
158
- color: var(--text-1);
159
- line-height: 1.1;
160
- }
161
-
162
- .brand-accent {
163
- color: var(--accent);
164
- }
165
-
166
- .brand-byline {
167
- font-size: 15px;
168
- color: var(--text-3);
169
- margin-top: 2px;
170
- letter-spacing: 0.01em;
171
- }
172
-
173
- /* Version badge */
174
- .sidebar-version-area {
175
- position: relative;
176
- margin: 0 24px 24px;
177
- width: fit-content;
178
- }
179
-
180
- .sidebar-version {
181
- display: inline-flex;
182
- align-items: center;
183
- padding: 3px 10px;
184
- border-radius: 20px;
185
- background: var(--accent-muted);
186
- border: 1px solid oklch(75% 0.16 65 / 0.25);
187
- font-size: 15px;
188
- font-weight: 600;
189
- color: var(--accent);
190
- letter-spacing: 0.03em;
191
- width: fit-content;
192
- }
193
-
194
- .update-indicator {
195
- display: flex;
196
- align-items: center;
197
- margin-top: 7px;
198
- padding: 4px 8px;
199
- border: 1px solid oklch(78% 0.18 85 / 0.4);
200
- border-radius: 7px;
201
- background: oklch(78% 0.18 85 / 0.12);
202
- color: oklch(82% 0.17 85);
203
- font: inherit;
204
- font-size: 11px;
205
- font-weight: 600;
206
- cursor: pointer;
207
- }
208
-
209
- .update-indicator:hover {
210
- background: oklch(78% 0.18 85 / 0.2);
211
- }
212
-
213
- .update-indicator[hidden],
214
- .update-popover[hidden] {
215
- display: none;
216
- }
217
-
218
- .update-popover {
219
- position: absolute;
220
- z-index: 30;
221
- top: calc(100% + 8px);
222
- left: 0;
223
- width: calc(var(--sidebar-w) - 32px);
224
- padding: 14px;
225
- border: 1px solid var(--border);
226
- border-radius: var(--radius-sm);
227
- background: var(--surface-2);
228
- box-shadow: 0 14px 40px oklch(5% 0.03 265 / 0.45);
229
- }
230
-
231
- .update-popover-title {
232
- margin-bottom: 10px;
233
- color: var(--text-1);
234
- font-size: 14px;
235
- font-weight: 700;
236
- }
237
-
238
- .update-version-row {
239
- display: flex;
240
- justify-content: space-between;
241
- gap: 16px;
242
- margin-top: 5px;
243
- color: var(--text-3);
244
- font-size: 12px;
245
- }
246
-
247
- .update-version-row strong {
248
- color: var(--text-1);
249
- font-weight: 600;
250
- }
251
-
252
- .update-command {
253
- display: block;
254
- margin-top: 12px;
255
- padding: 8px;
256
- border: 1px solid var(--border);
257
- border-radius: 6px;
258
- background: var(--surface);
259
- color: var(--text-2);
260
- font-size: 11px;
261
- line-height: 1.45;
262
- overflow-wrap: anywhere;
263
- }
264
-
265
- .update-copy-btn {
266
- width: 100%;
267
- margin-top: 10px;
268
- }
269
-
270
- /* Nav */
271
- .sidebar-nav {
272
- flex: 1;
273
- padding: 4px 12px;
274
- display: flex;
275
- flex-direction: column;
276
- gap: 2px;
277
- }
278
-
279
- .nav-item {
280
- display: flex;
281
- align-items: center;
282
- gap: 10px;
283
- padding: 10px 12px;
284
- border-radius: var(--radius-sm);
285
- font-size: 15px;
286
- font-weight: 500;
287
- color: var(--text-2);
288
- transition: background var(--dur-sm) var(--ease), color var(--dur-sm) var(--ease), transform var(--dur-sm) var(--ease);
289
- position: relative;
290
- }
291
-
292
- .nav-item:hover {
293
- background: var(--surface);
294
- color: var(--text-1);
295
- transform: translateX(2px);
296
- }
297
-
298
- .nav-item.active {
299
- background: var(--accent-muted);
300
- color: var(--accent);
301
- border: 1px solid oklch(75% 0.16 65 / 0.2);
302
- }
303
-
304
- .nav-item.active .nav-icon { color: var(--accent); }
305
-
306
- .nav-icon {
307
- display: flex;
308
- align-items: center;
309
- color: var(--text-3);
310
- flex-shrink: 0;
311
- transition: color var(--dur-sm) var(--ease);
312
- }
313
-
314
- .nav-item:hover .nav-icon { color: var(--text-2); }
315
-
316
- .nav-badge {
317
- margin-left: auto;
318
- font-size: 10px;
319
- font-weight: 600;
320
- font-variant-numeric: tabular-nums;
321
- padding: 1px 7px;
322
- border-radius: 10px;
323
- background: var(--surface-2);
324
- color: var(--text-3);
325
- border: 1px solid var(--border);
326
- transition: color var(--dur-sm) var(--ease), border-color var(--dur-sm) var(--ease), background var(--dur-sm) var(--ease);
327
- }
328
-
329
- .nav-badge.full {
330
- color: var(--accent);
331
- background: var(--accent-muted);
332
- border-color: oklch(75% 0.16 65 / 0.3);
333
- }
334
-
335
- /* Sidebar footer */
336
- .sidebar-footer {
337
- padding: 12px 12px 20px;
338
- border-top: 1px solid var(--border);
339
- display: flex;
340
- flex-direction: column;
341
- gap: 12px;
342
- }
343
-
344
- .btn-theme-full {
345
- display: flex;
346
- align-items: center;
347
- gap: 10px;
348
- width: 100%;
349
- padding: 9px 12px;
350
- border-radius: var(--radius-sm);
351
- border: 1px solid var(--border);
352
- background: transparent;
353
- color: var(--text-2);
354
- font-size: 14px;
355
- font-weight: 500;
356
- cursor: pointer;
357
- transition: background var(--dur-sm) var(--ease), color var(--dur-sm) var(--ease), border-color var(--dur-sm) var(--ease);
358
- text-align: left;
359
- }
360
-
361
- .btn-theme-full:hover {
362
- background: var(--surface-hover);
363
- color: var(--text-1);
364
- border-color: var(--border-bright);
365
- }
366
-
367
- .theme-icon {
368
- display: flex;
369
- align-items: center;
370
- flex-shrink: 0;
371
- }
372
-
373
- .sidebar-footer-text {
374
- font-size: 13px;
375
- color: var(--text-3);
376
- line-height: 1.7;
377
- padding: 0 4px;
378
- }
379
-
380
- .sidebar-footer-text code {
381
- font-family: 'SF Mono', 'Fira Code', ui-monospace, monospace;
382
- font-size: 11px;
383
- color: var(--text-2);
384
- }
385
-
386
- /* ─── Content ────────────────────────────────────────────────────────────── */
387
- .content {
388
- overflow-y: auto;
389
- height: 100dvh;
390
- padding: 0 48px 80px;
391
- }
392
-
393
- /* Brand hero */
394
- .app-hero {
395
- display: flex;
396
- flex-direction: column;
397
- gap: 10px;
398
- padding: 40px 0 28px;
399
- margin-bottom: 8px;
400
- border-bottom: 1px solid var(--border);
401
- }
402
-
403
- .app-hero-wordmark {
404
- display: inline-flex;
405
- align-items: center;
406
- gap: 14px;
407
- user-select: none;
408
- }
409
-
410
- .app-hero-wordmark .hero-text {
411
- font-size: 34px;
412
- font-weight: 800;
413
- letter-spacing: 0.02em;
414
- color: var(--text-1);
415
- line-height: 1;
416
- }
417
-
418
- .app-hero-sub {
419
- font-size: 15px;
420
- color: var(--text-3);
421
- letter-spacing: 0.01em;
422
- }
423
-
424
- /* ─── Section ────────────────────────────────────────────────────────────── */
425
- .section {
426
- padding-top: 52px;
427
- max-width: 680px;
428
- }
429
-
430
- .section + .section {
431
- padding-top: 64px;
432
- margin-top: 12px;
433
- border-top: 1px solid var(--border);
434
- }
435
-
436
- /* Section heading (now the direct first child of each section) */
437
- .section > .section-heading:first-child {
438
- margin-top: 0;
439
- padding-top: 4px;
440
- }
441
-
442
- .section-heading {
443
- font-size: 30px;
444
- font-weight: 700;
445
- letter-spacing: -0.025em;
446
- color: var(--text-1);
447
- line-height: 1.15;
448
- margin-bottom: 22px;
449
- }
450
-
451
- .heading-accent {
452
- color: var(--accent);
453
- }
454
-
455
- /* Favorites sub-panel grouping */
456
- .fav-subpanel {
457
- padding: 22px 0 8px;
458
- border-top: 1px solid var(--border);
459
- }
460
-
461
- .fav-subpanel:first-of-type {
462
- border-top: none;
463
- padding-top: 4px;
464
- }
465
-
466
- .subpanel-heading {
467
- font-size: 16px;
468
- font-weight: 700;
469
- letter-spacing: -0.01em;
470
- color: var(--text-1);
471
- margin-bottom: 14px;
472
- }
473
-
474
- .subpanel-heading .heading-accent {
475
- font-weight: 700;
476
- }
477
-
478
- .provider-stats {
479
- display: flex;
480
- gap: 20px;
481
- margin-top: 16px;
482
- }
483
-
484
- .provider-stat {
485
- display: flex;
486
- flex-direction: column;
487
- gap: 2px;
488
- }
489
-
490
- .provider-stat-value {
491
- font-size: 26px;
492
- font-weight: 700;
493
- color: var(--text-1);
494
- letter-spacing: -0.02em;
495
- line-height: 1;
496
- }
497
-
498
- .provider-stat-value span {
499
- color: var(--accent);
500
- }
501
-
502
- .provider-stat-label {
503
- font-size: 13px;
504
- color: var(--text-3);
505
- font-weight: 500;
506
- }
507
-
508
- /* ─── Search ─────────────────────────────────────────────────────────────── */
509
- .search-row {
510
- margin-bottom: 12px;
511
- display: flex;
512
- gap: 10px;
513
- align-items: center;
514
- flex-wrap: wrap;
515
- }
516
-
517
- .search-row .search-field {
518
- flex: 1;
519
- }
520
-
521
- .btn-refresh-all {
522
- display: flex;
523
- align-items: center;
524
- gap: 7px;
525
- white-space: nowrap;
526
- flex-shrink: 0;
527
- }
528
-
529
- .btn-refresh-all svg {
530
- flex-shrink: 0;
531
- }
532
-
533
- .free-only-toggle {
534
- min-height: 42px;
535
- display: inline-flex;
536
- align-items: center;
537
- gap: 8px;
538
- padding: 0 12px;
539
- border: 1px solid var(--border);
540
- border-radius: var(--radius);
541
- background: var(--surface);
542
- color: var(--text-2);
543
- font-size: 13px;
544
- font-weight: 600;
545
- white-space: nowrap;
546
- }
547
-
548
- .free-only-toggle input {
549
- width: 15px;
550
- height: 15px;
551
- accent-color: var(--accent);
552
- }
553
-
554
- .free-badge {
555
- display: inline-flex;
556
- align-items: center;
557
- min-height: 22px;
558
- padding: 0 7px;
559
- border: 1px solid oklch(73% 0.14 156 / 0.45);
560
- border-radius: 999px;
561
- background: oklch(93% 0.07 156 / 0.16);
562
- color: oklch(74% 0.14 156);
563
- font-size: 11px;
564
- font-weight: 700;
565
- white-space: nowrap;
566
- }
567
-
568
- .free-badge.dev-access {
569
- border-color: oklch(72% 0.13 232 / 0.45);
570
- background: oklch(91% 0.06 232 / 0.16);
571
- color: oklch(73% 0.13 232);
572
- }
573
-
574
- .btn-refresh-all.loading svg {
575
- animation: spin 1s linear infinite;
576
- }
577
-
578
- @keyframes spin {
579
- from { transform: rotate(0deg); }
580
- to { transform: rotate(360deg); }
581
- }
582
-
583
- .refresh-all-status {
584
- font-size: 15px;
585
- color: var(--text-2);
586
- padding: 10px 14px;
587
- background: var(--surface);
588
- border: 1px solid var(--border);
589
- border-radius: var(--radius);
590
- margin-bottom: 14px;
591
- line-height: 1.7;
592
- }
593
-
594
- .search-field {
595
- position: relative;
596
- }
597
-
598
- .search-icon {
599
- position: absolute;
600
- left: 14px;
601
- top: 50%;
602
- transform: translateY(-50%);
603
- color: var(--text-3);
604
- pointer-events: none;
605
- }
606
-
607
- .search-input {
608
- width: 100%;
609
- padding: 10px 16px 10px 40px;
610
- border-radius: var(--radius);
611
- border: 1px solid var(--border);
612
- background: var(--surface);
613
- color: var(--text-1);
614
- font-size: 15px;
615
- transition: border-color var(--dur-md) var(--ease), box-shadow var(--dur-md) var(--ease), background var(--dur-md) var(--ease);
616
- }
617
-
618
- .search-input::placeholder { color: var(--text-3); }
619
-
620
- .search-input:focus {
621
- border-color: var(--border-bright);
622
- background: var(--surface-2);
623
- box-shadow: 0 0 0 3px var(--accent-glow), inset 0 1px 2px oklch(0% 0 0 / 0.2);
624
- outline: none;
625
- }
626
-
627
- /* ─── Provider grid ──────────────────────────────────────────────────────── */
628
- .provider-grid {
629
- display: flex;
630
- flex-direction: column;
631
- gap: 8px;
632
- }
633
-
634
- .apps-group-heading {
635
- font-size: 13px;
636
- font-weight: 700;
637
- color: var(--text-3);
638
- text-transform: uppercase;
639
- letter-spacing: 0.05em;
640
- margin-top: 12px;
641
- }
642
-
643
- .apps-group-heading:first-child { margin-top: 0; }
644
-
645
- .apps-empty {
646
- font-size: 13px;
647
- color: var(--text-3);
648
- padding: 12px 0 4px;
649
- }
650
-
651
- /* Apps & Launch: CLI column on the left, desktop apps on the right */
652
- #apps.section {
653
- max-width: 1080px;
654
- }
655
-
656
- .apps-columns {
657
- display: grid;
658
- grid-template-columns: 1fr 1px 1fr;
659
- gap: 28px;
660
- align-items: start;
661
- }
662
-
663
- .apps-column {
664
- min-width: 0;
665
- }
666
-
667
- .apps-column-divider {
668
- align-self: stretch;
669
- background: var(--border);
670
- }
671
-
672
- @media (max-width: 860px) {
673
- .apps-columns {
674
- grid-template-columns: 1fr;
675
- }
676
-
677
- .apps-column-divider {
678
- display: none;
679
- }
680
- }
681
-
682
- /* Available providers section */
683
- .available-heading {
684
- display: flex;
685
- align-items: baseline;
686
- gap: 12px;
687
- margin: 28px 0 12px;
688
- padding-top: 20px;
689
- border-top: 1px solid var(--border);
690
- }
691
-
692
- .available-heading-label {
693
- font-size: 15px;
694
- font-weight: 600;
695
- color: var(--text-2);
696
- }
697
-
698
- .available-heading-hint {
699
- font-size: 14px;
700
- color: var(--text-3);
701
- }
702
-
703
- .provider-grid-available .provider-card {
704
- opacity: 0.72;
705
- transition: opacity var(--dur-sm) var(--ease), border-color var(--dur-sm) var(--ease), box-shadow var(--dur-sm) var(--ease);
706
- }
707
-
708
- .provider-grid-available .provider-card:hover {
709
- opacity: 1;
710
- }
711
-
712
- /* Provider card */
713
- .provider-card {
714
- border-radius: var(--radius);
715
- background: var(--surface);
716
- border: 1px solid var(--border);
717
- transition: border-color var(--dur-sm) var(--ease), box-shadow var(--dur-sm) var(--ease);
718
- }
719
-
720
- .provider-card:hover {
721
- border-color: var(--border-bright);
722
- box-shadow: 0 2px 12px oklch(0% 0 0 / 0.25);
723
- }
724
-
725
- .provider-card.open {
726
- border-color: var(--border-bright);
727
- box-shadow: 0 4px 20px oklch(0% 0 0 / 0.3);
728
- }
729
-
730
- .provider-card.launch-model-open {
731
- position: relative;
732
- z-index: 50;
733
- }
734
-
735
- .advanced-app-paths {
736
- margin-top: 18px;
737
- border: 1px solid var(--border);
738
- border-radius: var(--radius);
739
- background: var(--surface);
740
- overflow: hidden;
741
- }
742
-
743
- .advanced-app-paths summary {
744
- padding: 13px 16px;
745
- color: var(--text-2);
746
- font-size: 14px;
747
- font-weight: 600;
748
- cursor: pointer;
749
- user-select: none;
750
- }
751
-
752
- .advanced-app-paths[open] summary {
753
- border-bottom: 1px solid var(--border);
754
- background: var(--surface-2);
755
- }
756
-
757
- .app-paths-list {
758
- display: flex;
759
- flex-direction: column;
760
- gap: 1px;
761
- }
762
-
763
- .app-path-row {
764
- display: grid;
765
- grid-template-columns: minmax(150px, 220px) minmax(240px, 1fr) auto;
766
- gap: 10px;
767
- align-items: center;
768
- padding: 12px 16px;
769
- background: var(--surface);
770
- }
771
-
772
- .app-path-meta {
773
- min-width: 0;
774
- }
775
-
776
- .app-path-name {
777
- color: var(--text-1);
778
- font-size: 14px;
779
- font-weight: 600;
780
- margin-bottom: 4px;
781
- }
782
-
783
- .app-path-input {
784
- font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
785
- font-size: 13px;
786
- }
787
-
788
- .app-path-actions {
789
- display: flex;
790
- gap: 8px;
791
- }
792
-
793
- .app-path-actions .btn {
794
- height: 38px;
795
- padding-inline: 14px;
796
- }
797
-
798
- .advanced-empty {
799
- padding: 16px;
800
- color: var(--text-3);
801
- font-size: 14px;
802
- }
803
-
804
- .launch-model-picker,
805
- .launch-folder-control {
806
- display: flex;
807
- flex-direction: column;
808
- gap: 4px;
809
- }
810
-
811
- .launch-model-input-wrap {
812
- position: relative;
813
- }
814
-
815
- .launch-model-input,
816
- .launch-folder-input {
817
- height: 42px;
818
- padding-left: 14px;
819
- }
820
-
821
- .launch-model-menu {
822
- position: absolute;
823
- z-index: 60;
824
- top: calc(100% + 8px);
825
- left: 0;
826
- right: 0;
827
- max-height: 380px;
828
- overflow: auto;
829
- border: 1px solid var(--border-bright);
830
- border-radius: var(--radius);
831
- background: var(--surface);
832
- box-shadow: 0 18px 42px oklch(0% 0 0 / 0.25);
833
- padding: 8px;
834
- }
835
-
836
- .launch-model-quick {
837
- display: flex;
838
- gap: 8px;
839
- padding: 4px 4px 8px;
840
- border-bottom: 1px solid var(--border);
841
- margin-bottom: 8px;
842
- }
843
-
844
- .launch-model-quick button,
845
- .launch-model-row {
846
- border-radius: var(--radius-sm);
847
- color: var(--text-1);
848
- background: transparent;
849
- text-align: left;
850
- transition: background var(--dur-sm) var(--ease), color var(--dur-sm) var(--ease);
851
- }
852
-
853
- .launch-model-quick button {
854
- padding: 7px 10px;
855
- font-size: 13px;
856
- background: var(--surface-2);
857
- border: 1px solid var(--border);
858
- }
859
-
860
- .launch-model-quick button:hover,
861
- .launch-model-row:hover {
862
- background: var(--accent-muted);
863
- color: var(--text-1);
864
- }
865
-
866
- .launch-model-group {
867
- padding: 4px 0 8px;
868
- }
869
-
870
- .launch-model-group-heading {
871
- padding: 8px 10px 5px;
872
- color: var(--text-3);
873
- font-size: 12px;
874
- font-weight: 700;
875
- text-transform: uppercase;
876
- letter-spacing: 0.04em;
877
- }
878
-
879
- .launch-model-row {
880
- width: 100%;
881
- display: grid;
882
- grid-template-columns: minmax(0, 1fr) auto minmax(130px, 0.55fr);
883
- gap: 8px;
884
- align-items: center;
885
- padding: 9px 10px;
886
- font-size: 14px;
887
- }
888
-
889
- .launch-model-name,
890
- .launch-model-id {
891
- overflow: hidden;
892
- text-overflow: ellipsis;
893
- white-space: nowrap;
894
- }
895
-
896
- .launch-model-id {
897
- grid-column: 3;
898
- color: var(--text-3);
899
- font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
900
- font-size: 12px;
901
- }
902
-
903
- .launch-model-empty {
904
- padding: 16px 10px;
905
- color: var(--text-3);
906
- font-size: 14px;
907
- }
908
-
909
- .launch-folder-recents {
910
- display: flex;
911
- flex-wrap: wrap;
912
- gap: 6px;
913
- margin-top: 6px;
914
- }
915
-
916
- .launch-folder-chip {
917
- max-width: 100%;
918
- padding: 5px 8px;
919
- border-radius: var(--radius-xs);
920
- background: var(--surface-2);
921
- border: 1px solid var(--border);
922
- color: var(--text-2);
923
- font-size: 12px;
924
- overflow: hidden;
925
- text-overflow: ellipsis;
926
- white-space: nowrap;
927
- }
928
-
929
- .launch-folder-chip:hover {
930
- border-color: var(--border-bright);
931
- color: var(--text-1);
932
- }
933
-
934
- @media (max-width: 760px) {
935
- .app-path-row {
936
- grid-template-columns: 1fr;
937
- }
938
-
939
- .launch-model-row {
940
- grid-template-columns: 1fr;
941
- gap: 2px;
942
- }
943
-
944
- .launch-model-id {
945
- grid-column: auto;
946
- }
947
-
948
- .app-path-actions {
949
- justify-content: stretch;
950
- }
951
-
952
- .app-path-actions .btn {
953
- flex: 1;
954
- }
955
- }
956
-
957
- .provider-card-header {
958
- display: flex;
959
- align-items: center;
960
- gap: 14px;
961
- padding: 14px 18px;
962
- cursor: pointer;
963
- user-select: none;
964
- transition: background var(--dur-xs) var(--ease);
965
- border-top-left-radius: calc(var(--radius) - 1px);
966
- border-top-right-radius: calc(var(--radius) - 1px);
967
- border-bottom-left-radius: calc(var(--radius) - 1px);
968
- border-bottom-right-radius: calc(var(--radius) - 1px);
969
- }
970
-
971
- .provider-card-header:hover { background: var(--surface-hover); }
972
- .provider-card.open .provider-card-header {
973
- background: var(--surface-2);
974
- border-bottom-left-radius: 0;
975
- border-bottom-right-radius: 0;
976
- }
977
-
978
- /* Provider icon */
979
- .provider-logo-img {
980
- width: 22px;
981
- height: 22px;
982
- object-fit: contain;
983
- display: block;
984
- }
985
-
986
- /* Only apply white filter to Simple Icons SVGs (not ICO/PNG brand logos) */
987
- .provider-logo-img[src*="simpleicons.org"] {
988
- filter: brightness(0) invert(1);
989
- }
990
-
991
- .provider-logo-fallback {
992
- font-size: 19px;
993
- font-weight: 700;
994
- color: oklch(98% 0.003 265);
995
- line-height: 1;
996
- }
997
-
998
- .provider-icon {
999
- width: 44px;
1000
- height: 44px;
1001
- border-radius: 10px;
1002
- display: flex;
1003
- align-items: center;
1004
- justify-content: center;
1005
- font-size: 19px;
1006
- font-weight: 700;
1007
- color: oklch(98% 0.003 265);
1008
- flex-shrink: 0;
1009
- box-shadow: 0 2px 8px oklch(0% 0 0 / 0.3);
1010
- }
1011
-
1012
- .provider-info {
1013
- flex: 1;
1014
- min-width: 0;
1015
- }
1016
-
1017
- .provider-name {
1018
- font-size: 16px;
1019
- font-weight: 600;
1020
- color: var(--text-1);
1021
- }
1022
-
1023
- .provider-models-count {
1024
- font-size: 15px;
1025
- color: var(--text-3);
1026
- margin-top: 1px;
1027
- }
1028
-
1029
- .template-signup-link {
1030
- color: var(--accent-dim);
1031
- font-size: 13px;
1032
- margin-left: 6px;
1033
- transition: color var(--dur-sm) var(--ease);
1034
- }
1035
-
1036
- .template-signup-link:hover { color: var(--accent); }
1037
-
1038
- .provider-status {
1039
- display: flex;
1040
- align-items: center;
1041
- gap: 10px;
1042
- flex-shrink: 0;
1043
- }
1044
-
1045
- .status-chip {
1046
- font-size: 15px;
1047
- font-weight: 500;
1048
- padding: 3px 9px;
1049
- border-radius: 20px;
1050
- border: 1px solid transparent;
1051
- }
1052
-
1053
- .status-chip.has-key {
1054
- color: var(--success);
1055
- background: var(--success-bg);
1056
- border-color: oklch(74% 0.2 155 / 0.2);
1057
- }
1058
-
1059
- .status-chip.free-access {
1060
- color: oklch(75% 0.15 190);
1061
- background: oklch(75% 0.15 190 / 0.12);
1062
- border-color: oklch(75% 0.15 190 / 0.2);
1063
- }
1064
-
1065
- .status-chip.no-key {
1066
- color: var(--text-3);
1067
- background: var(--surface-2);
1068
- border-color: var(--border);
1069
- }
1070
-
1071
- .provider-chevron {
1072
- color: var(--text-3);
1073
- transition: transform var(--dur-md) var(--ease), color var(--dur-sm) var(--ease);
1074
- flex-shrink: 0;
1075
- }
1076
-
1077
- .provider-card.open .provider-chevron {
1078
- transform: rotate(180deg);
1079
- color: var(--accent);
1080
- }
1081
-
1082
- /* Provider body expand */
1083
- .provider-body {
1084
- display: grid;
1085
- grid-template-rows: 0fr;
1086
- transition: grid-template-rows var(--dur-md) var(--ease);
1087
- border-top: 1px solid transparent;
1088
- }
1089
-
1090
- .provider-card.open .provider-body {
1091
- grid-template-rows: 1fr;
1092
- border-top-color: var(--border);
1093
- }
1094
-
1095
- .provider-body-inner { overflow: hidden; }
1096
- .provider-card.open .provider-body-inner { overflow: visible; }
1097
-
1098
- .provider-body-content {
1099
- padding: 18px 18px 18px 70px;
1100
- display: flex;
1101
- flex-direction: column;
1102
- gap: 10px;
1103
- }
1104
-
1105
- /* Key input row */
1106
- .key-row {
1107
- display: flex;
1108
- gap: 8px;
1109
- align-items: center;
1110
- }
1111
-
1112
- .key-input-wrap { flex: 1; }
1113
-
1114
- .key-input {
1115
- width: 100%;
1116
- padding: 9px 13px;
1117
- border-radius: var(--radius-sm);
1118
- border: 1px solid var(--border);
1119
- background: var(--bg);
1120
- color: var(--text-1);
1121
- font-family: 'SF Mono', 'Fira Code', ui-monospace, monospace;
1122
- font-size: 16px;
1123
- transition: border-color var(--dur-md) var(--ease), box-shadow var(--dur-md) var(--ease);
1124
- }
1125
-
1126
- .key-input::placeholder { color: var(--text-3); font-family: 'Inter', system-ui, sans-serif; }
1127
-
1128
- .key-input:focus {
1129
- outline: none;
1130
- border-color: var(--border-bright);
1131
- box-shadow: 0 0 0 3px var(--accent-glow);
1132
- }
1133
-
1134
- /* Buttons */
1135
- .btn {
1136
- padding: 8px 16px;
1137
- border-radius: var(--radius-sm);
1138
- font-size: 15px;
1139
- font-weight: 500;
1140
- transition: all var(--dur-xs) var(--ease);
1141
- white-space: nowrap;
1142
- flex-shrink: 0;
1143
- }
1144
-
1145
- .btn-primary {
1146
- background: var(--accent);
1147
- color: oklch(22% 0.03 60);
1148
- box-shadow: 0 1px 2px oklch(0% 0 0 / 0.3);
1149
- }
1150
-
1151
- .btn-primary:hover { filter: brightness(1.06); transform: translateY(-1px); box-shadow: 0 2px 8px oklch(0% 0 0 / 0.35); }
1152
- .btn-primary:active { transform: translateY(0); }
1153
- .btn-primary:disabled { opacity: 0.45; cursor: not-allowed; transform: none; filter: none; box-shadow: none; }
1154
-
1155
- .btn-ghost {
1156
- background: var(--surface-2);
1157
- color: var(--text-2);
1158
- border: 1px solid var(--border);
1159
- }
1160
-
1161
- .btn-ghost:hover { background: var(--surface-hover); color: var(--text-1); border-color: var(--border-bright); }
1162
-
1163
- .key-feedback {
1164
- font-size: 16px;
1165
- min-height: 16px;
1166
- transition: opacity var(--dur-md) var(--ease);
1167
- }
1168
-
1169
- .key-feedback.success { color: var(--success); }
1170
- .key-feedback.error { color: var(--error); }
1171
- .key-feedback.muted { color: var(--text-3); }
1172
-
1173
- /* ─── Skeleton ───────────────────────────────────────────────────────────── */
1174
- .skeleton {
1175
- background: linear-gradient(90deg, var(--surface) 25%, var(--surface-2) 50%, var(--surface) 75%);
1176
- background-size: 200% 100%;
1177
- animation: shimmer 1.5s infinite linear;
1178
- border-radius: var(--radius);
1179
- }
1180
-
1181
- @keyframes shimmer {
1182
- from { background-position: 200% 0; }
1183
- to { background-position: -200% 0; }
1184
- }
1185
-
1186
- .skeleton-card { height: 66px; margin-bottom: 8px; }
1187
-
1188
- /* ─── Model results ──────────────────────────────────────────────────────── */
1189
- .model-results {
1190
- background: var(--surface);
1191
- border: 1px solid var(--border);
1192
- border-radius: var(--radius);
1193
- margin-bottom: 12px;
1194
- overflow: hidden;
1195
- }
1196
-
1197
- .model-results-empty, .model-results-error {
1198
- padding: 20px;
1199
- color: var(--text-3);
1200
- font-size: 15px;
1201
- text-align: center;
1202
- }
1203
-
1204
- .model-results-error { color: var(--error); text-align: left; display: flex; align-items: center; justify-content: space-between; gap: 12px; }
1205
-
1206
- .model-group-header {
1207
- display: flex;
1208
- align-items: center;
1209
- gap: 8px;
1210
- padding: 10px 16px 6px;
1211
- font-size: 10px;
1212
- font-weight: 600;
1213
- text-transform: uppercase;
1214
- letter-spacing: 0.1em;
1215
- color: var(--text-3);
1216
- border-top: 1px solid var(--border);
1217
- }
1218
-
1219
- .model-group-header:first-child { border-top: none; }
1220
-
1221
- .model-group-icon {
1222
- width: 16px;
1223
- height: 16px;
1224
- border-radius: 4px;
1225
- display: flex;
1226
- align-items: center;
1227
- justify-content: center;
1228
- font-size: 8px;
1229
- font-weight: 700;
1230
- color: oklch(98% 0.003 265);
1231
- }
1232
-
1233
- .model-result-row {
1234
- display: flex;
1235
- align-items: center;
1236
- gap: 10px;
1237
- padding: 9px 16px;
1238
- transition: background var(--dur-xs) var(--ease);
1239
- cursor: default;
1240
- }
1241
-
1242
- .model-result-row:hover { background: var(--surface-hover); }
1243
-
1244
- .model-result-id {
1245
- flex: 1;
1246
- font-size: 16px;
1247
- font-weight: 500;
1248
- color: var(--text-1);
1249
- overflow: hidden;
1250
- text-overflow: ellipsis;
1251
- white-space: nowrap;
1252
- }
1253
-
1254
- .model-result-ctx { font-size: 15px; color: var(--text-3); white-space: nowrap; flex-shrink: 0; }
1255
-
1256
- .btn-add {
1257
- width: 26px;
1258
- height: 26px;
1259
- border-radius: 50%;
1260
- display: flex;
1261
- align-items: center;
1262
- justify-content: center;
1263
- font-size: 17px;
1264
- line-height: 1;
1265
- color: var(--accent);
1266
- border: 1px solid oklch(75% 0.16 65 / 0.35);
1267
- background: var(--accent-muted);
1268
- flex-shrink: 0;
1269
- transition: all var(--dur-sm) var(--ease);
1270
- }
1271
-
1272
- .btn-add:hover { background: var(--accent); color: oklch(98% 0.003 265); transform: scale(1.12); box-shadow: 0 2px 8px var(--accent-glow); }
1273
- .btn-add:disabled { color: var(--text-3); border-color: var(--border); background: transparent; cursor: not-allowed; transform: none; }
1274
- .btn-add.already-added { color: var(--success); border-color: oklch(74% 0.2 155 / 0.3); background: var(--success-bg); font-size: 15px; }
1275
- .btn-add.already-added:hover { background: var(--success-bg); color: var(--success); transform: none; box-shadow: none; }
1276
-
1277
- /* ─── Antigravity slot bar ───────────────────────────────────────────────── */
1278
- .agy-slot-bar {
1279
- display: flex;
1280
- align-items: center;
1281
- gap: 14px;
1282
- padding: 14px 18px;
1283
- background: var(--surface);
1284
- border: 1px solid var(--border);
1285
- border-radius: var(--radius);
1286
- margin-bottom: 16px;
1287
- }
1288
-
1289
- .agy-slot-label {
1290
- font-size: 16px;
1291
- font-weight: 500;
1292
- color: var(--text-2);
1293
- flex-shrink: 0;
1294
- }
1295
-
1296
- .agy-slot-pips {
1297
- display: flex;
1298
- gap: 5px;
1299
- flex: 1;
1300
- }
1301
-
1302
- .agy-pip {
1303
- flex: 1;
1304
- height: 5px;
1305
- border-radius: 3px;
1306
- background: var(--border);
1307
- transition: background var(--dur-md) var(--ease), box-shadow var(--dur-md) var(--ease);
1308
- }
1309
-
1310
- .agy-pip.filled {
1311
- background: var(--accent);
1312
- box-shadow: 0 0 0 1px var(--accent-glow);
1313
- }
1314
-
1315
- .agy-slot-count {
1316
- font-size: 15px;
1317
- font-weight: 700;
1318
- color: var(--text-1);
1319
- font-variant-numeric: tabular-nums;
1320
- flex-shrink: 0;
1321
- }
1322
-
1323
- .agy-slot-max { font-size: 15px; font-weight: 400; color: var(--text-3); }
1324
-
1325
- /* ─── Favorites list ─────────────────────────────────────────────────────── */
1326
- .fav-list {
1327
- display: flex;
1328
- flex-direction: column;
1329
- gap: 6px;
1330
- min-height: 60px;
1331
- }
1332
-
1333
- .fav-empty {
1334
- padding: 32px 20px;
1335
- text-align: center;
1336
- color: var(--text-3);
1337
- font-size: 15px;
1338
- background: var(--surface);
1339
- border: 1px dashed var(--border);
1340
- border-radius: var(--radius);
1341
- }
1342
-
1343
- .fav-item {
1344
- display: flex;
1345
- align-items: center;
1346
- gap: 12px;
1347
- padding: 12px 16px;
1348
- border-radius: var(--radius);
1349
- background: var(--surface);
1350
- border: 1px solid var(--border);
1351
- transition: background var(--dur-xs) var(--ease), border-color var(--dur-sm) var(--ease),
1352
- transform var(--dur-md) var(--ease), box-shadow var(--dur-md) var(--ease);
1353
- cursor: default;
1354
- user-select: none;
1355
- }
1356
-
1357
- .fav-item:hover { background: var(--surface-2); border-color: var(--border-bright); }
1358
-
1359
- .fav-item.keyboard-focus { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent-glow); }
1360
-
1361
- .fav-item.dragging {
1362
- transform: scale(1.025) rotate(0.5deg);
1363
- box-shadow: 0 12px 32px oklch(0% 0 0 / 0.5), 0 0 0 1px var(--accent-dim);
1364
- border-color: var(--accent-dim);
1365
- background: var(--surface-2);
1366
- z-index: 10;
1367
- position: relative;
1368
- }
1369
-
1370
- .fav-item.drag-over {
1371
- border-color: var(--accent);
1372
- background: var(--accent-muted);
1373
- box-shadow: 0 0 0 2px var(--accent-glow);
1374
- }
1375
-
1376
- .fav-item.slide-in {
1377
- animation: fav-enter var(--dur-lg) var(--ease);
1378
- }
1379
-
1380
- @keyframes fav-enter {
1381
- from { opacity: 0; transform: translateY(-10px) scale(0.97); }
1382
- to { opacity: 1; transform: translateY(0) scale(1); }
1383
- }
1384
-
1385
- .drag-handle {
1386
- color: var(--text-3);
1387
- cursor: grab;
1388
- font-size: 15px;
1389
- flex-shrink: 0;
1390
- padding: 2px;
1391
- border-radius: 4px;
1392
- transition: color var(--dur-sm) var(--ease), background var(--dur-sm) var(--ease);
1393
- display: flex;
1394
- align-items: center;
1395
- }
1396
-
1397
- .drag-handle:hover { color: var(--accent); background: var(--accent-muted); }
1398
- .drag-handle:active { cursor: grabbing; }
1399
-
1400
- /* Fav item number badge */
1401
- .fav-rank {
1402
- width: 26px;
1403
- height: 26px;
1404
- border-radius: 7px;
1405
- border: 1px solid;
1406
- display: flex;
1407
- align-items: center;
1408
- justify-content: center;
1409
- font-size: 12px;
1410
- font-weight: 700;
1411
- flex-shrink: 0;
1412
- font-variant-numeric: tabular-nums;
1413
- letter-spacing: -0.01em;
1414
- }
1415
-
1416
- .fav-model-id {
1417
- flex: 1;
1418
- font-size: 15px;
1419
- font-weight: 500;
1420
- color: var(--text-1);
1421
- overflow: hidden;
1422
- text-overflow: ellipsis;
1423
- white-space: nowrap;
1424
- }
1425
-
1426
- .fav-provider-badge {
1427
- font-size: 15px;
1428
- font-weight: 600;
1429
- padding: 3px 10px;
1430
- border-radius: 20px;
1431
- border: 1px solid;
1432
- flex-shrink: 0;
1433
- letter-spacing: 0.01em;
1434
- white-space: nowrap;
1435
- }
1436
-
1437
- .btn-remove {
1438
- width: 24px;
1439
- height: 24px;
1440
- border-radius: 50%;
1441
- display: flex;
1442
- align-items: center;
1443
- justify-content: center;
1444
- font-size: 16px;
1445
- color: var(--text-3);
1446
- flex-shrink: 0;
1447
- transition: color var(--dur-sm) var(--ease), background var(--dur-sm) var(--ease);
1448
- }
1449
-
1450
- .btn-remove:hover { color: var(--error); background: var(--error-bg); }
1451
-
1452
- /* ─── Toast ──────────────────────────────────────────────────────────────── */
1453
- .toast-container {
1454
- position: fixed;
1455
- bottom: 24px;
1456
- right: 28px;
1457
- display: flex;
1458
- flex-direction: column;
1459
- gap: 8px;
1460
- z-index: 200;
1461
- pointer-events: none;
1462
- }
1463
-
1464
- .toast {
1465
- display: flex;
1466
- align-items: center;
1467
- gap: 10px;
1468
- padding: 11px 18px;
1469
- border-radius: var(--radius);
1470
- background: var(--surface-2);
1471
- border: 1px solid var(--border-bright);
1472
- box-shadow: 0 8px 24px oklch(0% 0 0 / 0.5), 0 0 0 1px oklch(42% 0.008 70 / 0.4);
1473
- font-size: 15px;
1474
- font-weight: 500;
1475
- pointer-events: all;
1476
- animation: toast-in var(--dur-md) var(--ease);
1477
- }
1478
-
1479
- .toast.out { animation: toast-out 150ms var(--ease) forwards; }
1480
-
1481
- @keyframes toast-in {
1482
- from { opacity: 0; transform: translateY(10px) scale(0.96); }
1483
- to { opacity: 1; transform: translateY(0) scale(1); }
1484
- }
1485
-
1486
- @keyframes toast-out {
1487
- to { opacity: 0; transform: translateY(-4px) scale(0.97); }
1488
- }
1489
-
1490
- .toast-msg { color: var(--text-1); }
1491
-
1492
- .btn-undo {
1493
- font-size: 16px;
1494
- font-weight: 600;
1495
- color: var(--accent);
1496
- padding: 2px 6px;
1497
- border-radius: 4px;
1498
- transition: opacity var(--dur-sm) var(--ease);
1499
- }
1500
-
1501
- .btn-undo:hover { opacity: 0.75; }
1502
-
1503
- /* ─── Server Gateway ─────────────────────────────────────────────────────── */
1504
-
1505
- .nav-badge-status {
1506
- color: var(--success);
1507
- background: var(--success-bg);
1508
- border-color: oklch(74% 0.2 155 / 0.25);
1509
- }
1510
-
1511
- .btn-sm { padding: 5px 11px; font-size: 13px; }
1512
-
1513
- .server-field { margin-bottom: 22px; }
1514
-
1515
- .server-field-label {
1516
- font-size: 13px;
1517
- font-weight: 600;
1518
- color: var(--text-2);
1519
- text-transform: uppercase;
1520
- letter-spacing: 0.05em;
1521
- margin-bottom: 10px;
1522
- }
1523
-
1524
- .server-field-hint {
1525
- font-size: 13px;
1526
- color: var(--text-3);
1527
- font-weight: 400;
1528
- text-transform: none;
1529
- letter-spacing: normal;
1530
- }
1531
-
1532
- .server-toggle-row {
1533
- display: flex;
1534
- align-items: center;
1535
- gap: 10px;
1536
- font-size: 15px;
1537
- color: var(--text-1);
1538
- cursor: pointer;
1539
- }
1540
-
1541
- .server-toggle-row input[type="checkbox"],
1542
- .server-provider-row input[type="checkbox"] {
1543
- width: 16px;
1544
- height: 16px;
1545
- accent-color: var(--accent);
1546
- cursor: pointer;
1547
- }
1548
-
1549
- .toggle-group {
1550
- display: inline-flex;
1551
- border: 1px solid var(--border);
1552
- border-radius: var(--radius-sm);
1553
- overflow: hidden;
1554
- }
1555
-
1556
- .toggle-option {
1557
- padding: 8px 16px;
1558
- font-size: 15px;
1559
- font-weight: 500;
1560
- color: var(--text-2);
1561
- background: var(--surface);
1562
- transition: background var(--dur-sm) var(--ease), color var(--dur-sm) var(--ease);
1563
- }
1564
-
1565
- .toggle-option + .toggle-option { border-left: 1px solid var(--border); }
1566
-
1567
- .toggle-option:hover { background: var(--surface-hover); color: var(--text-1); }
1568
-
1569
- .toggle-option.active {
1570
- background: var(--accent-muted);
1571
- color: var(--accent);
1572
- }
1573
-
1574
- .server-providers-picker, .server-network-options {
1575
- margin-top: 14px;
1576
- display: flex;
1577
- flex-direction: column;
1578
- gap: 10px;
1579
- }
1580
-
1581
- .server-provider-chips {
1582
- display: flex;
1583
- flex-wrap: wrap;
1584
- gap: 6px;
1585
- }
1586
-
1587
- .server-provider-chip {
1588
- display: inline-flex;
1589
- align-items: center;
1590
- gap: 6px;
1591
- padding: 4px 6px 4px 10px;
1592
- border-radius: 20px;
1593
- background: var(--accent-muted);
1594
- color: var(--accent);
1595
- font-size: 13px;
1596
- font-weight: 500;
1597
- border: 1px solid oklch(75% 0.16 65 / 0.25);
1598
- }
1599
-
1600
- .server-provider-chip button {
1601
- color: inherit;
1602
- font-size: 15px;
1603
- line-height: 1;
1604
- padding: 2px;
1605
- opacity: 0.7;
1606
- }
1607
-
1608
- .server-provider-chip button:hover { opacity: 1; }
1609
-
1610
- .server-provider-list {
1611
- max-height: 260px;
1612
- overflow-y: auto;
1613
- border: 1px solid var(--border);
1614
- border-radius: var(--radius-sm);
1615
- }
1616
-
1617
- .server-provider-row {
1618
- display: flex;
1619
- align-items: center;
1620
- gap: 10px;
1621
- padding: 10px 14px;
1622
- cursor: pointer;
1623
- border-bottom: 1px solid var(--border);
1624
- transition: background var(--dur-sm) var(--ease);
1625
- }
1626
-
1627
- .server-provider-row:last-child { border-bottom: none; }
1628
- .server-provider-row:hover { background: var(--surface-hover); }
1629
-
1630
- .server-provider-row-name { flex: 1; font-size: 15px; color: var(--text-1); }
1631
- .server-provider-row-count { font-size: 13px; color: var(--text-3); }
1632
-
1633
- .server-start-btn { width: 100%; height: 44px; font-size: 15px; font-weight: 600; margin-top: 4px; }
1634
-
1635
- .server-start-error { margin-bottom: 10px; }
1636
-
1637
- .server-status-row {
1638
- display: flex;
1639
- align-items: center;
1640
- justify-content: space-between;
1641
- margin-bottom: 14px;
1642
- }
1643
-
1644
- .server-status-badge {
1645
- display: inline-flex;
1646
- align-items: center;
1647
- gap: 8px;
1648
- font-size: 15px;
1649
- font-weight: 600;
1650
- color: var(--success);
1651
- }
1652
-
1653
- .server-status-dot {
1654
- width: 9px;
1655
- height: 9px;
1656
- border-radius: 50%;
1657
- background: var(--success);
1658
- box-shadow: 0 0 8px var(--success);
1659
- animation: server-pulse 2s infinite;
1660
- }
1661
-
1662
- @keyframes server-pulse {
1663
- 0%, 100% { opacity: 1; }
1664
- 50% { opacity: 0.4; }
1665
- }
1666
-
1667
- .server-stop-btn {
1668
- color: var(--error);
1669
- border-color: oklch(68% 0.22 25 / 0.4);
1670
- }
1671
-
1672
- .server-config-summary {
1673
- font-size: 14px;
1674
- color: var(--text-3);
1675
- margin-bottom: 20px;
1676
- }
1677
-
1678
- .url-card-grid {
1679
- display: flex;
1680
- flex-direction: column;
1681
- gap: 10px;
1682
- margin-bottom: 24px;
1683
- }
1684
-
1685
- .url-card {
1686
- display: flex;
1687
- align-items: center;
1688
- gap: 10px;
1689
- padding: 12px 14px;
1690
- background: var(--surface);
1691
- border: 1px solid var(--border);
1692
- border-radius: var(--radius-sm);
1693
- }
1694
-
1695
- .url-card-label {
1696
- font-size: 12px;
1697
- font-weight: 600;
1698
- color: var(--text-3);
1699
- text-transform: uppercase;
1700
- letter-spacing: 0.04em;
1701
- flex-shrink: 0;
1702
- width: 90px;
1703
- }
1704
-
1705
- .url-card-value {
1706
- flex: 1;
1707
- font-family: 'SF Mono', 'Fira Code', ui-monospace, monospace;
1708
- font-size: 13px;
1709
- color: var(--text-1);
1710
- overflow-wrap: anywhere;
1711
- }
1712
-
1713
- .url-card-value.masked { letter-spacing: 0.15em; }
1714
-
1715
- .server-model-table-wrap {
1716
- border: 1px solid var(--border);
1717
- border-radius: var(--radius-sm);
1718
- overflow: auto;
1719
- }
1720
-
1721
- .server-model-table {
1722
- width: 100%;
1723
- border-collapse: collapse;
1724
- font-size: 14px;
1725
- }
1726
-
1727
- .server-model-table th {
1728
- text-align: left;
1729
- padding: 10px 14px;
1730
- background: var(--surface-2);
1731
- color: var(--text-2);
1732
- font-weight: 600;
1733
- font-size: 12px;
1734
- text-transform: uppercase;
1735
- letter-spacing: 0.04em;
1736
- border-bottom: 1px solid var(--border);
1737
- }
1738
-
1739
- .server-model-table td {
1740
- padding: 9px 14px;
1741
- border-bottom: 1px solid var(--border);
1742
- color: var(--text-1);
1743
- }
1744
-
1745
- .server-model-table tr:last-child td { border-bottom: none; }
1746
-
1747
- .server-model-table code {
1748
- font-family: 'SF Mono', 'Fira Code', ui-monospace, monospace;
1749
- font-size: 12px;
1750
- color: var(--text-2);
1751
- }