anygate 0.1.0

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.
@@ -0,0 +1,1751 @@
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
+ }