@swimmingliu/autovpn 1.4.2 → 1.5.1

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,2010 @@
1
+ :root {
2
+ color-scheme: light;
3
+ --bg: #f5f7ff;
4
+ --surface: #ffffff;
5
+ --surface-soft: #f8faff;
6
+ --surface-muted: #f2f5ff;
7
+ --border: #dfe5f5;
8
+ --border-strong: #cfd7ef;
9
+ --text: #1e2746;
10
+ --text-soft: #6d7794;
11
+ --accent: #5b5ce2;
12
+ --accent-strong: #4b4dcc;
13
+ --accent-soft: #eeedff;
14
+ --success: #2db36a;
15
+ --success-soft: #e8faf0;
16
+ --warning: #ff9b2f;
17
+ --warning-soft: #fff4e8;
18
+ --danger: #f05b69;
19
+ --danger-soft: #ffecef;
20
+ --terminal: #111826;
21
+ --terminal-soft: #1b2436;
22
+ --terminal-text: #d6e2ff;
23
+ --shadow: 0 20px 44px rgba(29, 39, 71, 0.08);
24
+ }
25
+
26
+ * {
27
+ box-sizing: border-box;
28
+ }
29
+
30
+ html,
31
+ body {
32
+ height: 100%;
33
+ }
34
+
35
+ body {
36
+ margin: 0;
37
+ overflow: hidden;
38
+ font-family: Inter, "SF Pro Display", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
39
+ color: var(--text);
40
+ background:
41
+ radial-gradient(circle at top left, rgba(91, 92, 226, 0.08), transparent 24%),
42
+ linear-gradient(180deg, #fbfcff 0%, var(--bg) 100%);
43
+ }
44
+
45
+ button,
46
+ input,
47
+ select,
48
+ textarea {
49
+ font: inherit;
50
+ }
51
+
52
+ button {
53
+ border: 0;
54
+ background: none;
55
+ cursor: pointer;
56
+ }
57
+
58
+ input,
59
+ select,
60
+ textarea {
61
+ width: 100%;
62
+ min-height: 46px;
63
+ border: 1px solid var(--border);
64
+ border-radius: 14px;
65
+ background: #fff;
66
+ color: var(--text);
67
+ padding: 0 14px;
68
+ outline: none;
69
+ }
70
+
71
+ input:focus,
72
+ select:focus,
73
+ textarea:focus {
74
+ border-color: rgba(91, 92, 226, 0.45);
75
+ box-shadow: 0 0 0 4px rgba(91, 92, 226, 0.12);
76
+ }
77
+
78
+ .sr-only {
79
+ position: absolute;
80
+ width: 1px;
81
+ height: 1px;
82
+ padding: 0;
83
+ margin: -1px;
84
+ overflow: hidden;
85
+ clip: rect(0, 0, 0, 0);
86
+ white-space: nowrap;
87
+ border: 0;
88
+ }
89
+
90
+ .app-frame {
91
+ display: grid;
92
+ grid-template-rows: 38px minmax(0, 1fr);
93
+ height: 100%;
94
+ min-height: 0;
95
+ }
96
+
97
+ .window-titlebar {
98
+ -webkit-app-region: drag;
99
+ user-select: none;
100
+ background: rgba(255, 255, 255, 0.78);
101
+ border-bottom: 1px solid rgba(207, 215, 239, 0.72);
102
+ backdrop-filter: blur(16px);
103
+ }
104
+
105
+ .app-content-shell {
106
+ min-height: 0;
107
+ overflow: hidden;
108
+ }
109
+
110
+ .workspace-shell {
111
+ display: grid;
112
+ grid-template-columns: 248px minmax(0, 1fr);
113
+ height: 100%;
114
+ min-height: 0;
115
+ }
116
+
117
+ .sidebar {
118
+ display: grid;
119
+ grid-template-rows: auto minmax(0, 1fr);
120
+ gap: 28px;
121
+ padding: 24px 18px 20px;
122
+ background: rgba(255, 255, 255, 0.88);
123
+ border-right: 1px solid var(--border);
124
+ backdrop-filter: blur(16px);
125
+ overflow: hidden;
126
+ }
127
+
128
+ .sidebar-brand {
129
+ display: flex;
130
+ align-items: center;
131
+ gap: 14px;
132
+ padding: 8px 10px;
133
+ }
134
+
135
+ .brand-mark,
136
+ .about-logo {
137
+ display: block;
138
+ width: 52px;
139
+ height: 52px;
140
+ border-radius: 18px;
141
+ object-fit: contain;
142
+ flex: none;
143
+ }
144
+
145
+ .sidebar-title {
146
+ font-size: 18px;
147
+ font-weight: 800;
148
+ letter-spacing: -0.02em;
149
+ }
150
+
151
+ .sidebar-version {
152
+ margin-top: 4px;
153
+ font-size: 14px;
154
+ color: var(--text-soft);
155
+ }
156
+
157
+ .sidebar-nav {
158
+ min-height: 0;
159
+ overflow: auto;
160
+ display: grid;
161
+ gap: 10px;
162
+ align-content: start;
163
+ scrollbar-width: none;
164
+ }
165
+
166
+ .sidebar-nav::-webkit-scrollbar {
167
+ width: 0;
168
+ height: 0;
169
+ }
170
+
171
+ .nav-item {
172
+ display: flex;
173
+ align-items: center;
174
+ gap: 14px;
175
+ min-height: 58px;
176
+ padding: 0 14px;
177
+ border-radius: 18px;
178
+ color: var(--text-soft);
179
+ text-align: left;
180
+ transition: background 0.18s ease, color 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
181
+ }
182
+
183
+ .nav-item:hover,
184
+ .nav-item.active {
185
+ background: rgba(91, 92, 226, 0.1);
186
+ color: var(--accent);
187
+ box-shadow: inset 0 0 0 1px rgba(91, 92, 226, 0.08);
188
+ }
189
+
190
+ .nav-icon {
191
+ flex: none;
192
+ display: inline-flex;
193
+ align-items: center;
194
+ justify-content: center;
195
+ min-width: 46px;
196
+ height: 46px;
197
+ border-radius: 14px;
198
+ background: var(--surface-muted);
199
+ border: 1px solid rgba(91, 92, 226, 0.14);
200
+ font-size: 18px;
201
+ font-weight: 800;
202
+ letter-spacing: 0.08em;
203
+ }
204
+
205
+ .nav-copy {
206
+ font-size: 17px;
207
+ font-weight: 700;
208
+ }
209
+
210
+ .status-card,
211
+ .page-header-card,
212
+ .panel,
213
+ .topbar {
214
+ background: rgba(255, 255, 255, 0.94);
215
+ border: 1px solid var(--border);
216
+ box-shadow: var(--shadow);
217
+ }
218
+
219
+ .status-card {
220
+ border-radius: 20px;
221
+ padding: 16px;
222
+ }
223
+
224
+ .status-card-head {
225
+ display: flex;
226
+ align-items: center;
227
+ justify-content: space-between;
228
+ gap: 12px;
229
+ }
230
+
231
+ .status-card-head h2 {
232
+ margin: 0;
233
+ font-size: 15px;
234
+ }
235
+
236
+ .status-card-body {
237
+ margin-top: 14px;
238
+ display: grid;
239
+ gap: 12px;
240
+ }
241
+
242
+ .status-row,
243
+ .status-footnote {
244
+ display: flex;
245
+ justify-content: space-between;
246
+ gap: 10px;
247
+ align-items: baseline;
248
+ }
249
+
250
+ .status-row-label,
251
+ .status-footnote span {
252
+ color: var(--text-soft);
253
+ font-size: 13px;
254
+ }
255
+
256
+ .status-row-value,
257
+ .status-footnote strong {
258
+ font-size: 14px;
259
+ font-weight: 700;
260
+ }
261
+
262
+ .status-divider {
263
+ height: 1px;
264
+ background: var(--border);
265
+ }
266
+
267
+ .main-shell {
268
+ min-width: 0;
269
+ min-height: 0;
270
+ display: grid;
271
+ grid-template-rows: auto minmax(0, 1fr);
272
+ gap: 16px;
273
+ padding: 14px 18px 14px;
274
+ }
275
+
276
+ .topbar {
277
+ border-radius: 28px;
278
+ padding: 18px 22px;
279
+ display: grid;
280
+ grid-template-columns: minmax(260px, 1fr) auto;
281
+ gap: 16px;
282
+ align-items: start;
283
+ }
284
+
285
+ .topbar-heading h1 {
286
+ margin: 0;
287
+ font-size: 34px;
288
+ line-height: 1.05;
289
+ letter-spacing: -0.05em;
290
+ }
291
+
292
+ .page-title-row {
293
+ display: flex;
294
+ align-items: center;
295
+ gap: 12px;
296
+ flex-wrap: wrap;
297
+ }
298
+
299
+ .topbar-heading p {
300
+ margin: 10px 0 0;
301
+ color: var(--text-soft);
302
+ line-height: 1.55;
303
+ font-size: 14px;
304
+ }
305
+
306
+ .topbar-actions {
307
+ display: flex;
308
+ align-items: flex-end;
309
+ gap: 10px;
310
+ flex-wrap: wrap;
311
+ justify-content: flex-end;
312
+ }
313
+
314
+ .language-control {
315
+ min-width: 132px;
316
+ display: grid;
317
+ gap: 5px;
318
+ }
319
+
320
+ .language-control span {
321
+ font-size: 12px;
322
+ color: var(--text-soft);
323
+ }
324
+
325
+ .btn {
326
+ min-height: 46px;
327
+ padding: 0 16px;
328
+ border-radius: 14px;
329
+ font-weight: 750;
330
+ transition: box-shadow 0.18s ease, border-color 0.18s ease, background 0.18s ease, color 0.18s ease;
331
+ }
332
+
333
+ .btn:hover {
334
+ box-shadow: 0 10px 22px rgba(29, 39, 71, 0.12);
335
+ }
336
+
337
+ .btn:disabled {
338
+ opacity: 0.55;
339
+ cursor: default;
340
+ box-shadow: none;
341
+ }
342
+
343
+ .btn.small {
344
+ min-height: 38px;
345
+ padding: 0 14px;
346
+ font-size: 13px;
347
+ }
348
+
349
+ .btn-primary {
350
+ color: #fff;
351
+ background: linear-gradient(135deg, var(--accent), #7274f0);
352
+ box-shadow: 0 14px 30px rgba(91, 92, 226, 0.26);
353
+ }
354
+
355
+ .btn-secondary {
356
+ color: var(--text);
357
+ background: #fff;
358
+ border: 1px solid var(--border);
359
+ }
360
+
361
+ .btn-danger {
362
+ color: var(--danger);
363
+ background: var(--danger-soft);
364
+ border: 1px solid rgba(240, 91, 105, 0.18);
365
+ }
366
+
367
+ .ghost-fill {
368
+ justify-content: center;
369
+ }
370
+
371
+ .badge {
372
+ display: inline-flex;
373
+ align-items: center;
374
+ min-height: 28px;
375
+ padding: 0 12px;
376
+ border-radius: 999px;
377
+ font-size: 12px;
378
+ font-weight: 750;
379
+ }
380
+
381
+ .badge.neutral {
382
+ background: #eef2fb;
383
+ color: var(--text-soft);
384
+ }
385
+
386
+ .badge.accent {
387
+ background: var(--accent-soft);
388
+ color: var(--accent);
389
+ }
390
+
391
+ .badge.success {
392
+ background: var(--success-soft);
393
+ color: var(--success);
394
+ }
395
+
396
+ .badge.warning {
397
+ background: var(--warning-soft);
398
+ color: var(--warning);
399
+ }
400
+
401
+ .badge.danger {
402
+ background: var(--danger-soft);
403
+ color: var(--danger);
404
+ }
405
+
406
+ .page-content {
407
+ min-height: 0;
408
+ overflow: auto;
409
+ padding-right: 2px;
410
+ }
411
+
412
+ body[data-page="logs"] .page-content {
413
+ overflow: hidden;
414
+ }
415
+
416
+ .page-shell {
417
+ min-width: 0;
418
+ display: grid;
419
+ gap: 16px;
420
+ }
421
+
422
+ .page-header-card {
423
+ border-radius: 26px;
424
+ padding: 20px 24px;
425
+ display: flex;
426
+ align-items: center;
427
+ gap: 16px;
428
+ }
429
+
430
+ .page-index-badge {
431
+ flex: none;
432
+ display: inline-flex;
433
+ align-items: center;
434
+ justify-content: center;
435
+ width: 56px;
436
+ height: 56px;
437
+ border-radius: 18px;
438
+ background: linear-gradient(135deg, var(--accent), #7172ef);
439
+ color: #fff;
440
+ font-size: 23px;
441
+ font-weight: 800;
442
+ }
443
+
444
+ .page-header-copy h2 {
445
+ margin: 0;
446
+ font-size: 26px;
447
+ letter-spacing: -0.04em;
448
+ }
449
+
450
+ .page-header-copy p {
451
+ margin: 8px 0 0;
452
+ color: var(--text-soft);
453
+ line-height: 1.5;
454
+ }
455
+
456
+ .page-title-with-tag {
457
+ display: flex;
458
+ align-items: center;
459
+ gap: 12px;
460
+ flex-wrap: wrap;
461
+ }
462
+
463
+ .page-grid {
464
+ min-width: 0;
465
+ display: grid;
466
+ gap: 16px;
467
+ }
468
+
469
+ .dashboard-grid,
470
+ .logs-grid,
471
+ .results-grid,
472
+ .subscriptions-grid {
473
+ grid-template-columns: minmax(0, 1fr) minmax(320px, 0.78fr);
474
+ }
475
+
476
+ .settings-grid {
477
+ grid-template-columns: 1fr;
478
+ }
479
+
480
+ .runs-grid {
481
+ grid-template-columns: minmax(300px, 0.82fr) minmax(360px, 1fr);
482
+ }
483
+
484
+ .wide-panel {
485
+ grid-column: 1 / -1;
486
+ }
487
+
488
+ .slim-panel {
489
+ min-height: fit-content;
490
+ }
491
+
492
+ .panel {
493
+ min-width: 0;
494
+ border-radius: 26px;
495
+ padding: 18px 20px;
496
+ }
497
+
498
+ .panel.inset-panel {
499
+ border-radius: 20px;
500
+ background: var(--surface-soft);
501
+ box-shadow: none;
502
+ }
503
+
504
+ .flow-panel {
505
+ grid-column: 1 / 2;
506
+ }
507
+
508
+ .status-hero-card,
509
+ .artifact-card,
510
+ .subscription-meta,
511
+ .about-card {
512
+ display: flex;
513
+ justify-content: space-between;
514
+ align-items: center;
515
+ gap: 18px;
516
+ }
517
+
518
+ .status-hero-card h3 {
519
+ margin: 8px 0 6px;
520
+ font-size: 34px;
521
+ color: var(--success);
522
+ }
523
+
524
+ .status-hero-card p {
525
+ margin: 0;
526
+ color: var(--text-soft);
527
+ }
528
+
529
+ .status-orb {
530
+ display: inline-flex;
531
+ align-items: center;
532
+ justify-content: center;
533
+ width: 76px;
534
+ height: 76px;
535
+ border-radius: 999px;
536
+ background: var(--success-soft);
537
+ color: var(--success);
538
+ font-size: 34px;
539
+ font-weight: 900;
540
+ }
541
+
542
+ .note-strip {
543
+ display: flex;
544
+ align-items: center;
545
+ gap: 10px;
546
+ flex-wrap: wrap;
547
+ background: #fff9e8;
548
+ }
549
+
550
+ .design-note {
551
+ display: inline-flex;
552
+ align-items: center;
553
+ min-height: 30px;
554
+ padding: 0 12px;
555
+ border-radius: 999px;
556
+ background: rgba(255, 155, 47, 0.12);
557
+ color: #9a5a08;
558
+ font-size: 13px;
559
+ font-weight: 700;
560
+ }
561
+
562
+ .panel-headline {
563
+ display: flex;
564
+ justify-content: space-between;
565
+ align-items: start;
566
+ gap: 14px;
567
+ margin-bottom: 16px;
568
+ }
569
+
570
+ .panel-headline h3 {
571
+ margin: 0;
572
+ font-size: 24px;
573
+ letter-spacing: -0.04em;
574
+ }
575
+
576
+ .panel-subcopy {
577
+ color: var(--text-soft);
578
+ font-size: 13px;
579
+ line-height: 1.45;
580
+ }
581
+
582
+ .flow-steps {
583
+ display: grid;
584
+ grid-template-columns: repeat(7, minmax(0, 1fr));
585
+ gap: 12px;
586
+ }
587
+
588
+ .flow-step {
589
+ position: relative;
590
+ padding: 14px 10px;
591
+ border-radius: 20px;
592
+ border: 1px solid var(--border);
593
+ background: var(--surface-soft);
594
+ text-align: center;
595
+ }
596
+
597
+ .flow-icon {
598
+ display: inline-flex;
599
+ align-items: center;
600
+ justify-content: center;
601
+ width: 52px;
602
+ height: 52px;
603
+ border-radius: 50%;
604
+ margin-bottom: 12px;
605
+ border: 1px solid var(--border-strong);
606
+ background: #fff;
607
+ font-size: 15px;
608
+ font-weight: 800;
609
+ }
610
+
611
+ .flow-icon.success {
612
+ background: var(--success-soft);
613
+ color: var(--success);
614
+ }
615
+
616
+ .flow-icon.running {
617
+ background: var(--warning-soft);
618
+ color: var(--warning);
619
+ }
620
+
621
+ .flow-icon.pending {
622
+ background: var(--surface-muted);
623
+ color: var(--text-soft);
624
+ }
625
+
626
+ .flow-name {
627
+ font-size: 15px;
628
+ font-weight: 700;
629
+ }
630
+
631
+ .flow-detail {
632
+ margin-top: 6px;
633
+ font-size: 12px;
634
+ line-height: 1.45;
635
+ color: var(--text-soft);
636
+ }
637
+
638
+ .key-value-list {
639
+ display: grid;
640
+ gap: 12px;
641
+ }
642
+
643
+ .key-value-row {
644
+ display: flex;
645
+ justify-content: space-between;
646
+ gap: 12px;
647
+ align-items: baseline;
648
+ }
649
+
650
+ .key-value-row span {
651
+ color: var(--text-soft);
652
+ font-size: 13px;
653
+ }
654
+
655
+ .key-value-row strong {
656
+ text-align: right;
657
+ font-size: 14px;
658
+ }
659
+
660
+ .compact-form-grid {
661
+ display: grid;
662
+ grid-template-columns: repeat(3, 1fr);
663
+ gap: 12px;
664
+ }
665
+
666
+ .field {
667
+ display: grid;
668
+ gap: 8px;
669
+ }
670
+
671
+ .field.compact input {
672
+ min-height: 32px;
673
+ font-size: 13px;
674
+ padding: 4px 8px;
675
+ }
676
+
677
+ .field span {
678
+ color: var(--text-soft);
679
+ font-size: 13px;
680
+ }
681
+
682
+ .inline-metrics {
683
+ display: grid;
684
+ grid-template-columns: repeat(2, minmax(0, 1fr));
685
+ gap: 12px;
686
+ }
687
+
688
+ .mini-stat {
689
+ padding: 14px;
690
+ border-radius: 16px;
691
+ border: 1px solid var(--border);
692
+ background: var(--surface-soft);
693
+ }
694
+
695
+ .mini-stat span {
696
+ color: var(--text-soft);
697
+ font-size: 12px;
698
+ }
699
+
700
+ .mini-stat strong {
701
+ display: block;
702
+ margin-top: 8px;
703
+ font-size: 18px;
704
+ }
705
+
706
+ .metric-grid {
707
+ display: grid;
708
+ grid-template-columns: repeat(3, minmax(0, 1fr));
709
+ gap: 14px;
710
+ }
711
+
712
+ .metric-grid.compact {
713
+ grid-template-columns: repeat(2, minmax(0, 1fr));
714
+ }
715
+
716
+ .metric-grid.four {
717
+ grid-template-columns: repeat(4, minmax(0, 1fr));
718
+ }
719
+
720
+ .three-columns {
721
+ display: grid;
722
+ grid-template-columns: repeat(3, minmax(0, 1fr));
723
+ gap: 14px;
724
+ }
725
+
726
+ .metric-card {
727
+ padding: 16px;
728
+ border-radius: 18px;
729
+ border: 1px solid var(--border);
730
+ background: var(--surface-soft);
731
+ }
732
+
733
+ .metric-card span {
734
+ display: block;
735
+ color: var(--text-soft);
736
+ font-size: 13px;
737
+ }
738
+
739
+ .metric-card strong {
740
+ display: block;
741
+ margin-top: 10px;
742
+ font-size: 34px;
743
+ line-height: 1;
744
+ letter-spacing: -0.05em;
745
+ }
746
+
747
+ .metric-card small {
748
+ display: block;
749
+ margin-top: 8px;
750
+ color: var(--text-soft);
751
+ font-size: 12px;
752
+ }
753
+
754
+ .metric-source-list {
755
+ display: flex;
756
+ flex-wrap: wrap;
757
+ gap: 6px;
758
+ margin-top: 12px;
759
+ }
760
+
761
+ .metric-source-chip {
762
+ display: inline-flex;
763
+ align-items: center;
764
+ min-height: 24px;
765
+ padding: 0 8px;
766
+ border-radius: 999px;
767
+ background: #fff;
768
+ border: 1px solid rgba(91, 92, 226, 0.14);
769
+ color: var(--text-soft);
770
+ font-size: 11px;
771
+ font-weight: 750;
772
+ }
773
+
774
+ .metric-card.accent {
775
+ background: linear-gradient(180deg, #f6f5ff 0%, #fff 100%);
776
+ }
777
+
778
+ .metric-card.success {
779
+ background: linear-gradient(180deg, #f1fff7 0%, #fff 100%);
780
+ }
781
+
782
+ .metric-card.warning {
783
+ background: linear-gradient(180deg, #fff8ef 0%, #fff 100%);
784
+ }
785
+
786
+ .metric-card.danger {
787
+ background: linear-gradient(180deg, #fff2f4 0%, #fff 100%);
788
+ }
789
+
790
+ .subscription-inline {
791
+ margin-top: 16px;
792
+ display: flex;
793
+ justify-content: space-between;
794
+ gap: 14px;
795
+ align-items: center;
796
+ }
797
+
798
+ .run-control-panel {
799
+ display: grid;
800
+ grid-template-columns: repeat(3, minmax(160px, 1fr));
801
+ align-items: center;
802
+ gap: 14px;
803
+ }
804
+
805
+ .retry-control-card {
806
+ grid-column: 1 / -1;
807
+ display: grid;
808
+ grid-template-columns: minmax(320px, 1.8fr) minmax(180px, 0.8fr) minmax(220px, 1fr);
809
+ gap: 12px;
810
+ align-items: end;
811
+ padding: 14px;
812
+ border-radius: 18px;
813
+ border: 1px solid var(--border);
814
+ background: var(--surface-soft);
815
+ }
816
+
817
+ .retry-artifact-field {
818
+ align-self: start;
819
+ }
820
+
821
+ .retry-field select {
822
+ width: 100%;
823
+ min-height: 38px;
824
+ padding: 0 12px;
825
+ border-radius: 12px;
826
+ border: 1px solid var(--border);
827
+ background: #fff;
828
+ color: var(--text-main);
829
+ }
830
+
831
+ .retry-stage-button {
832
+ min-height: 38px;
833
+ }
834
+
835
+ .retry-summary-card {
836
+ grid-column: 1 / -1;
837
+ display: grid;
838
+ gap: 8px;
839
+ padding: 14px;
840
+ border-radius: 14px;
841
+ border: 1px solid var(--border);
842
+ background: #fff;
843
+ }
844
+
845
+ .retry-summary-head {
846
+ display: flex;
847
+ align-items: center;
848
+ justify-content: space-between;
849
+ gap: 10px;
850
+ }
851
+
852
+ .retry-summary-meta {
853
+ display: grid;
854
+ gap: 4px;
855
+ color: var(--text-soft);
856
+ font-size: 12px;
857
+ line-height: 1.45;
858
+ }
859
+
860
+ .retry-help {
861
+ grid-column: 1 / -1;
862
+ margin: 0;
863
+ color: var(--text-soft);
864
+ font-size: 12px;
865
+ line-height: 1.5;
866
+ }
867
+
868
+ .run-big {
869
+ min-height: 58px;
870
+ font-size: 16px;
871
+ }
872
+
873
+ .run-options,
874
+ .format-row {
875
+ grid-column: 1 / -1;
876
+ display: flex;
877
+ flex-wrap: wrap;
878
+ gap: 8px;
879
+ }
880
+
881
+ .toast-root {
882
+ position: fixed;
883
+ top: 58px;
884
+ right: 28px;
885
+ z-index: 40;
886
+ display: grid;
887
+ gap: 8px;
888
+ pointer-events: none;
889
+ }
890
+
891
+ .toast {
892
+ min-width: 220px;
893
+ max-width: 420px;
894
+ padding: 12px 14px;
895
+ border-radius: 14px;
896
+ border: 1px solid var(--border);
897
+ background: rgba(255, 255, 255, 0.96);
898
+ box-shadow: var(--shadow);
899
+ color: var(--text);
900
+ font-size: 14px;
901
+ line-height: 1.45;
902
+ }
903
+
904
+ .toast.success {
905
+ border-color: rgba(45, 179, 106, 0.24);
906
+ background: rgba(232, 250, 240, 0.98);
907
+ }
908
+
909
+ .toast.danger {
910
+ border-color: rgba(240, 91, 105, 0.26);
911
+ background: rgba(255, 236, 239, 0.98);
912
+ }
913
+
914
+ .checkbox-chip {
915
+ display: inline-flex;
916
+ align-items: center;
917
+ gap: 8px;
918
+ min-height: 38px;
919
+ padding: 0 12px;
920
+ border-radius: 999px;
921
+ border: 1px solid var(--border);
922
+ background: var(--surface-soft);
923
+ color: var(--text-soft);
924
+ font-weight: 650;
925
+ }
926
+
927
+ .checkbox-chip input,
928
+ .settings-source-table input[type="checkbox"] {
929
+ width: auto;
930
+ min-height: auto;
931
+ }
932
+
933
+ .timeline-panel {
934
+ grid-row: span 2;
935
+ }
936
+
937
+ .timeline-index {
938
+ position: relative;
939
+ }
940
+
941
+ .timeline-index::after {
942
+ content: '';
943
+ width: 10px;
944
+ height: 10px;
945
+ border-radius: 999px;
946
+ background: currentColor;
947
+ }
948
+
949
+ .artifact-card strong,
950
+ .subscription-primary {
951
+ display: block;
952
+ margin-top: 8px;
953
+ padding: 12px 14px;
954
+ border-radius: 16px;
955
+ background: var(--surface-soft);
956
+ border: 1px solid var(--border);
957
+ }
958
+
959
+ .result-actions,
960
+ .log-actions {
961
+ margin-top: 16px;
962
+ }
963
+
964
+ .compact-result-table {
965
+ min-width: 560px;
966
+ }
967
+
968
+ .decoded-node-table {
969
+ min-width: 760px;
970
+ }
971
+
972
+ .mono {
973
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
974
+ overflow-wrap: anywhere;
975
+ }
976
+
977
+ .terminal-panel {
978
+ background: linear-gradient(180deg, #172033 0%, var(--terminal) 100%);
979
+ color: var(--terminal-text);
980
+ border-color: #27324a;
981
+ }
982
+
983
+ .terminal-panel .panel-headline h3,
984
+ .terminal-panel .panel-subcopy {
985
+ color: #fff;
986
+ }
987
+
988
+ .log-stack,
989
+ .terminal-output {
990
+ min-height: 240px;
991
+ border-radius: 18px;
992
+ border: 1px solid rgba(128, 152, 196, 0.22);
993
+ background: linear-gradient(180deg, #0a101b 0%, #131c2b 100%);
994
+ padding: 16px;
995
+ overflow: auto;
996
+ font: 13px/1.65 ui-monospace, SFMono-Regular, Menlo, monospace;
997
+ white-space: pre-wrap;
998
+ word-break: break-word;
999
+ }
1000
+
1001
+ .log-stream {
1002
+ min-height: 0;
1003
+ }
1004
+
1005
+ body[data-page="logs"] .page-shell,
1006
+ body[data-page="logs"] .logs-grid,
1007
+ body[data-page="logs"] #logsWorkspace,
1008
+ body[data-page="logs"] #logsWorkspace > .panel {
1009
+ min-height: 0;
1010
+ height: 100%;
1011
+ }
1012
+
1013
+ body[data-page="logs"] #logsWorkspace > .panel {
1014
+ display: grid;
1015
+ grid-template-rows: auto minmax(0, 1fr);
1016
+ }
1017
+
1018
+ body[data-page="logs"] #logCenterTable {
1019
+ min-height: 0;
1020
+ height: 100%;
1021
+ overflow: auto;
1022
+ }
1023
+
1024
+ .log-line {
1025
+ padding: 3px 0;
1026
+ }
1027
+
1028
+ .log-line.success {
1029
+ color: #77e7a4;
1030
+ }
1031
+
1032
+ .log-line.warning {
1033
+ color: #ffd087;
1034
+ }
1035
+
1036
+ .log-line.danger {
1037
+ color: #ff8794;
1038
+ font-weight: 800;
1039
+ }
1040
+
1041
+ .log-group + .log-group {
1042
+ margin-top: 18px;
1043
+ }
1044
+
1045
+ .log-group-title {
1046
+ margin-bottom: 10px;
1047
+ color: #c9d8ff;
1048
+ font-size: 12px;
1049
+ font-weight: 800;
1050
+ letter-spacing: 0.08em;
1051
+ text-transform: uppercase;
1052
+ }
1053
+
1054
+ .center-copy {
1055
+ text-align: center;
1056
+ }
1057
+
1058
+ .action-grid {
1059
+ display: grid;
1060
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1061
+ gap: 16px;
1062
+ }
1063
+
1064
+ .subscriptions-primary-panel {
1065
+ display: flex;
1066
+ flex-direction: column;
1067
+ justify-content: space-between;
1068
+ gap: 20px;
1069
+ padding: 26px 28px;
1070
+ }
1071
+
1072
+ .subscription-primary-stack {
1073
+ display: grid;
1074
+ gap: 18px;
1075
+ align-content: space-between;
1076
+ flex: 1;
1077
+ }
1078
+
1079
+ .subscriptions-primary-panel .subscription-primary {
1080
+ margin: 0;
1081
+ padding: 18px;
1082
+ }
1083
+
1084
+ .subscription-tab-scroller {
1085
+ display: flex;
1086
+ gap: 8px;
1087
+ margin-bottom: 12px;
1088
+ padding: 8px;
1089
+ overflow-x: auto;
1090
+ border-radius: 16px;
1091
+ border: 1px solid var(--border);
1092
+ background: var(--surface-soft);
1093
+ scroll-snap-type: x proximity;
1094
+ }
1095
+
1096
+ .subscription-tab-scroller .subtab {
1097
+ flex: 0 0 auto;
1098
+ scroll-snap-align: start;
1099
+ transition: background 0.18s ease, color 0.18s ease, box-shadow 0.18s ease;
1100
+ }
1101
+
1102
+ .subscription-tab-scroller .subtab.active {
1103
+ background: #fff;
1104
+ box-shadow: 0 10px 22px rgba(91, 92, 226, 0.14);
1105
+ }
1106
+
1107
+ .action-grid.four {
1108
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1109
+ }
1110
+
1111
+ .country-grid {
1112
+ display: grid;
1113
+ grid-template-columns: repeat(5, minmax(0, 1fr));
1114
+ gap: 12px;
1115
+ }
1116
+
1117
+ .country-card {
1118
+ padding: 14px;
1119
+ border-radius: 18px;
1120
+ border: 1px solid var(--border);
1121
+ background: var(--surface-soft);
1122
+ text-align: center;
1123
+ }
1124
+
1125
+ .country-card strong {
1126
+ display: block;
1127
+ font-size: 16px;
1128
+ }
1129
+
1130
+ .country-card span,
1131
+ .country-card small {
1132
+ display: block;
1133
+ margin-top: 6px;
1134
+ }
1135
+
1136
+ .region-stat-grid {
1137
+ display: grid;
1138
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
1139
+ gap: 12px;
1140
+ }
1141
+
1142
+ .region-stat-card {
1143
+ padding: 16px;
1144
+ border-radius: 18px;
1145
+ border: 1px solid var(--border);
1146
+ background: linear-gradient(180deg, #f6f5ff 0%, #fff 100%);
1147
+ }
1148
+
1149
+ .region-stat-card span {
1150
+ color: var(--text-soft);
1151
+ font-size: 13px;
1152
+ font-weight: 800;
1153
+ }
1154
+
1155
+ .region-stat-card strong {
1156
+ display: block;
1157
+ margin-top: 8px;
1158
+ font-size: 30px;
1159
+ line-height: 1;
1160
+ }
1161
+
1162
+ .toolbar-row {
1163
+ display: grid;
1164
+ grid-template-columns: minmax(200px, 1fr) repeat(2, 160px) minmax(240px, 1fr) auto;
1165
+ gap: 12px;
1166
+ margin-bottom: 16px;
1167
+ }
1168
+
1169
+ .toolbar-row.log-toolbar {
1170
+ display: flex;
1171
+ flex-wrap: wrap;
1172
+ align-items: center;
1173
+ justify-content: space-between;
1174
+ }
1175
+
1176
+ .toolbar-left,
1177
+ .toolbar-right {
1178
+ display: flex;
1179
+ align-items: center;
1180
+ gap: 8px;
1181
+ flex-wrap: wrap;
1182
+ }
1183
+
1184
+ .toolbar-input {
1185
+ color: var(--text-soft);
1186
+ }
1187
+
1188
+ .table-wrap {
1189
+ overflow: auto;
1190
+ border-radius: 18px;
1191
+ border: 1px solid var(--border);
1192
+ }
1193
+
1194
+ .compact-table {
1195
+ margin-top: 12px;
1196
+ }
1197
+
1198
+ .data-table {
1199
+ width: 100%;
1200
+ border-collapse: collapse;
1201
+ min-width: 720px;
1202
+ background: #fff;
1203
+ }
1204
+
1205
+ .data-table th,
1206
+ .data-table td {
1207
+ padding: 14px 16px;
1208
+ border-bottom: 1px solid var(--border);
1209
+ text-align: left;
1210
+ font-size: 14px;
1211
+ vertical-align: top;
1212
+ overflow-wrap: anywhere;
1213
+ }
1214
+
1215
+ .data-table thead th {
1216
+ background: #f7f9ff;
1217
+ color: var(--text-soft);
1218
+ font-size: 13px;
1219
+ font-weight: 700;
1220
+ }
1221
+
1222
+ .settings-source-table input,
1223
+ .availability-target-table input {
1224
+ min-height: 36px;
1225
+ border-radius: 10px;
1226
+ }
1227
+
1228
+ .settings-source-table,
1229
+ .availability-target-table {
1230
+ table-layout: fixed;
1231
+ }
1232
+
1233
+ .settings-source-name {
1234
+ display: inline-block;
1235
+ white-space: nowrap;
1236
+ font-size: 13px;
1237
+ }
1238
+
1239
+ .table-textarea {
1240
+ min-height: 72px;
1241
+ padding: 10px 12px;
1242
+ border-radius: 12px;
1243
+ line-height: 1.45;
1244
+ resize: vertical;
1245
+ }
1246
+
1247
+ .settings-col-enabled,
1248
+ .availability-col-enabled {
1249
+ width: 78px;
1250
+ }
1251
+
1252
+ .settings-col-name,
1253
+ .availability-col-name {
1254
+ width: 142px;
1255
+ }
1256
+
1257
+ .settings-col-url {
1258
+ width: 44%;
1259
+ }
1260
+
1261
+ .settings-col-key {
1262
+ width: 28%;
1263
+ }
1264
+
1265
+ .availability-col-url {
1266
+ width: auto;
1267
+ }
1268
+
1269
+ .availability-col-actions {
1270
+ width: 104px;
1271
+ }
1272
+
1273
+ .source-drawer-settings {
1274
+ display: grid;
1275
+ grid-template-columns: repeat(3, minmax(160px, 1fr));
1276
+ gap: 12px;
1277
+ }
1278
+
1279
+ .settings-overview-panel {
1280
+ position: relative;
1281
+ }
1282
+
1283
+ .settings-overview-grid {
1284
+ display: grid;
1285
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1286
+ gap: 16px;
1287
+ }
1288
+
1289
+ .settings-overview-card {
1290
+ min-height: 148px;
1291
+ padding: 18px;
1292
+ border-radius: 22px;
1293
+ border: 1px solid var(--border);
1294
+ background: linear-gradient(180deg, #ffffff 0%, #f8faff 100%);
1295
+ text-align: left;
1296
+ display: grid;
1297
+ gap: 10px;
1298
+ box-shadow: 0 14px 28px rgba(29, 39, 71, 0.06);
1299
+ }
1300
+
1301
+ .settings-overview-card:hover {
1302
+ border-color: rgba(91, 92, 226, 0.24);
1303
+ box-shadow: 0 18px 30px rgba(29, 39, 71, 0.08);
1304
+ }
1305
+
1306
+ .settings-card-kicker {
1307
+ color: var(--text-soft);
1308
+ font-size: 12px;
1309
+ font-weight: 700;
1310
+ letter-spacing: 0.08em;
1311
+ text-transform: uppercase;
1312
+ }
1313
+
1314
+ .settings-card-summary {
1315
+ font-size: 20px;
1316
+ line-height: 1.35;
1317
+ letter-spacing: -0.03em;
1318
+ }
1319
+
1320
+ .settings-card-detail {
1321
+ color: var(--text-soft);
1322
+ font-size: 13px;
1323
+ line-height: 1.55;
1324
+ }
1325
+
1326
+ .settings-drawer-shell {
1327
+ position: fixed;
1328
+ inset: 0;
1329
+ display: flex;
1330
+ align-items: center;
1331
+ justify-content: center;
1332
+ padding: 24px;
1333
+ z-index: 30;
1334
+ }
1335
+
1336
+ .settings-drawer-shell[data-open="false"] {
1337
+ pointer-events: none;
1338
+ }
1339
+
1340
+ .settings-drawer-shell[data-open="true"] {
1341
+ pointer-events: auto;
1342
+ }
1343
+
1344
+ .settings-drawer-backdrop {
1345
+ background: rgba(17, 24, 38, 0.22);
1346
+ opacity: 0;
1347
+ transition: opacity 0.18s ease;
1348
+ }
1349
+
1350
+ .settings-drawer-shell[data-open="true"] .settings-drawer-backdrop {
1351
+ opacity: 1;
1352
+ }
1353
+
1354
+ .settings-drawer-panel {
1355
+ width: min(1320px, calc(100vw - 48px));
1356
+ max-width: 1320px;
1357
+ max-height: min(88vh, 960px);
1358
+ padding: 26px 26px 24px;
1359
+ background: rgba(255, 255, 255, 0.96);
1360
+ border: 1px solid var(--border);
1361
+ border-radius: 26px;
1362
+ box-shadow: 0 16px 48px rgba(29, 39, 71, 0.16);
1363
+ display: grid;
1364
+ grid-template-rows: auto minmax(0, 1fr) auto;
1365
+ gap: 18px;
1366
+ transform: scale(0.95) translateY(20px);
1367
+ opacity: 0;
1368
+ transition: transform 0.2s ease, opacity 0.2s ease;
1369
+ position: relative;
1370
+ }
1371
+
1372
+ .settings-drawer-shell[data-section="availability_targets"] .settings-drawer-panel {
1373
+ width: min(960px, calc(100vw - 48px));
1374
+ max-width: 960px;
1375
+ }
1376
+
1377
+ .settings-drawer-shell[data-open="true"] .settings-drawer-panel {
1378
+ transform: scale(1) translateY(0);
1379
+ opacity: 1;
1380
+ }
1381
+
1382
+ .settings-drawer-head {
1383
+ display: flex;
1384
+ align-items: flex-start;
1385
+ justify-content: space-between;
1386
+ gap: 12px;
1387
+ cursor: grab;
1388
+ }
1389
+
1390
+ .settings-drawer-head:active {
1391
+ cursor: grabbing;
1392
+ }
1393
+
1394
+ .settings-drawer-head h3 {
1395
+ margin: 6px 0 0;
1396
+ font-size: 28px;
1397
+ letter-spacing: -0.04em;
1398
+ }
1399
+
1400
+ .settings-drawer-body {
1401
+ min-height: 0;
1402
+ overflow: auto;
1403
+ display: grid;
1404
+ gap: 16px;
1405
+ padding-right: 6px;
1406
+ }
1407
+
1408
+ .settings-drawer-actions {
1409
+ display: flex;
1410
+ justify-content: flex-end;
1411
+ gap: 12px;
1412
+ }
1413
+
1414
+ .settings-layout {
1415
+ display: grid;
1416
+ grid-template-columns: minmax(0, 1fr);
1417
+ gap: 18px;
1418
+ }
1419
+
1420
+ .settings-groups {
1421
+ display: flex;
1422
+ flex-direction: column;
1423
+ gap: 10px;
1424
+ }
1425
+
1426
+ .settings-main,
1427
+ .settings-section {
1428
+ display: grid;
1429
+ gap: 16px;
1430
+ }
1431
+
1432
+ .settings-section + .settings-section {
1433
+ margin-top: 18px;
1434
+ }
1435
+
1436
+ .settings-section-title {
1437
+ grid-column: 1 / -1;
1438
+ margin: 0;
1439
+ font-size: 18px;
1440
+ }
1441
+
1442
+ .inline-state {
1443
+ display: inline-flex;
1444
+ align-items: center;
1445
+ min-height: 28px;
1446
+ padding: 0 10px;
1447
+ border-radius: 999px;
1448
+ font-size: 12px;
1449
+ font-weight: 700;
1450
+ }
1451
+
1452
+ .inline-state.success {
1453
+ background: var(--success-soft);
1454
+ color: var(--success);
1455
+ }
1456
+
1457
+ .inline-state.warning {
1458
+ background: var(--warning-soft);
1459
+ color: var(--warning);
1460
+ }
1461
+
1462
+ .inline-state.danger {
1463
+ background: var(--danger-soft);
1464
+ color: var(--danger);
1465
+ }
1466
+
1467
+ .selected-row {
1468
+ background: rgba(91, 92, 226, 0.06);
1469
+ }
1470
+
1471
+ .subtab-row {
1472
+ display: flex;
1473
+ flex-wrap: wrap;
1474
+ gap: 10px;
1475
+ margin-bottom: 18px;
1476
+ }
1477
+
1478
+ .subtab {
1479
+ min-height: 34px;
1480
+ padding: 0 12px;
1481
+ border-radius: 12px;
1482
+ color: var(--text-soft);
1483
+ border: 1px solid transparent;
1484
+ font-size: 14px;
1485
+ font-weight: 700;
1486
+ }
1487
+
1488
+ .subtab.active {
1489
+ color: var(--accent);
1490
+ background: rgba(91, 92, 226, 0.08);
1491
+ border-color: rgba(91, 92, 226, 0.12);
1492
+ }
1493
+
1494
+ .form-grid.two-columns {
1495
+ display: grid;
1496
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1497
+ gap: 18px;
1498
+ }
1499
+
1500
+ .form-column {
1501
+ display: grid;
1502
+ gap: 14px;
1503
+ }
1504
+
1505
+ .form-column h3 {
1506
+ margin: 0 0 4px;
1507
+ font-size: 22px;
1508
+ letter-spacing: -0.04em;
1509
+ }
1510
+
1511
+ .notice-card {
1512
+ padding: 16px;
1513
+ border-radius: 18px;
1514
+ background: rgba(91, 92, 226, 0.08);
1515
+ border: 1px solid rgba(91, 92, 226, 0.14);
1516
+ }
1517
+
1518
+ .notice-card p {
1519
+ margin: 8px 0 0;
1520
+ color: var(--text-soft);
1521
+ line-height: 1.55;
1522
+ }
1523
+
1524
+ .page-actions {
1525
+ display: flex;
1526
+ justify-content: space-between;
1527
+ gap: 12px;
1528
+ flex-wrap: wrap;
1529
+ }
1530
+
1531
+ .page-actions.stacked {
1532
+ margin-top: 18px;
1533
+ flex-direction: column;
1534
+ }
1535
+
1536
+ .result-summary {
1537
+ display: grid;
1538
+ gap: 12px;
1539
+ }
1540
+
1541
+ .sparkline-wrap {
1542
+ height: 90px;
1543
+ }
1544
+
1545
+ .sparkline {
1546
+ width: 100%;
1547
+ height: 100%;
1548
+ }
1549
+
1550
+ .bullet-list,
1551
+ .number-list {
1552
+ margin: 0;
1553
+ padding-left: 20px;
1554
+ display: grid;
1555
+ gap: 10px;
1556
+ line-height: 1.55;
1557
+ }
1558
+
1559
+ .run-hero {
1560
+ display: flex;
1561
+ align-items: center;
1562
+ gap: 14px;
1563
+ margin-bottom: 16px;
1564
+ }
1565
+
1566
+ .run-icon {
1567
+ display: inline-flex;
1568
+ align-items: center;
1569
+ justify-content: center;
1570
+ width: 52px;
1571
+ height: 52px;
1572
+ border-radius: 18px;
1573
+ background: rgba(91, 92, 226, 0.08);
1574
+ color: var(--accent);
1575
+ font-weight: 800;
1576
+ }
1577
+
1578
+ .run-meta {
1579
+ margin-top: 6px;
1580
+ color: var(--text-soft);
1581
+ }
1582
+
1583
+ .progress-track {
1584
+ height: 10px;
1585
+ border-radius: 999px;
1586
+ background: #ebeffa;
1587
+ overflow: hidden;
1588
+ margin-bottom: 16px;
1589
+ }
1590
+
1591
+ .progress-fill {
1592
+ height: 100%;
1593
+ border-radius: inherit;
1594
+ background: linear-gradient(90deg, var(--accent), #8587f7);
1595
+ }
1596
+
1597
+ .timeline {
1598
+ display: grid;
1599
+ gap: 10px;
1600
+ }
1601
+
1602
+ .timeline-row {
1603
+ display: grid;
1604
+ grid-template-columns: 34px minmax(0, 1fr) auto;
1605
+ align-items: center;
1606
+ gap: 12px;
1607
+ }
1608
+
1609
+ .timeline-index {
1610
+ display: inline-flex;
1611
+ align-items: center;
1612
+ justify-content: center;
1613
+ width: 34px;
1614
+ height: 34px;
1615
+ border-radius: 999px;
1616
+ background: var(--surface-muted);
1617
+ color: var(--text-soft);
1618
+ font-weight: 800;
1619
+ }
1620
+
1621
+ .timeline-index.success {
1622
+ background: var(--success-soft);
1623
+ color: var(--success);
1624
+ }
1625
+
1626
+ .timeline-index.running {
1627
+ background: var(--warning-soft);
1628
+ color: var(--warning);
1629
+ }
1630
+
1631
+ .timeline-copy {
1632
+ font-weight: 650;
1633
+ }
1634
+
1635
+ .radio-stack {
1636
+ display: grid;
1637
+ gap: 10px;
1638
+ margin-bottom: 14px;
1639
+ }
1640
+
1641
+ .radio-row {
1642
+ display: flex;
1643
+ align-items: center;
1644
+ gap: 10px;
1645
+ font-weight: 600;
1646
+ }
1647
+
1648
+ .file-list {
1649
+ display: grid;
1650
+ gap: 10px;
1651
+ }
1652
+
1653
+ .file-row {
1654
+ display: grid;
1655
+ grid-template-columns: minmax(0, 1fr) auto auto;
1656
+ gap: 10px;
1657
+ align-items: center;
1658
+ padding: 12px 14px;
1659
+ border-radius: 16px;
1660
+ border: 1px solid var(--border);
1661
+ background: var(--surface-soft);
1662
+ }
1663
+
1664
+ .file-state.success {
1665
+ color: var(--success);
1666
+ }
1667
+
1668
+ .file-state.neutral {
1669
+ color: var(--text-soft);
1670
+ }
1671
+
1672
+ .subscription-card-list {
1673
+ display: grid;
1674
+ gap: 14px;
1675
+ }
1676
+
1677
+ .subscription-card {
1678
+ display: flex;
1679
+ justify-content: space-between;
1680
+ gap: 14px;
1681
+ align-items: center;
1682
+ padding: 16px;
1683
+ border-radius: 18px;
1684
+ border: 1px solid var(--border);
1685
+ background: var(--surface-soft);
1686
+ }
1687
+
1688
+ .subscription-actions {
1689
+ display: flex;
1690
+ align-items: center;
1691
+ gap: 10px;
1692
+ }
1693
+
1694
+ .icon-btn {
1695
+ width: 40px;
1696
+ height: 40px;
1697
+ border-radius: 12px;
1698
+ border: 1px solid var(--border);
1699
+ background: #fff;
1700
+ font-size: 12px;
1701
+ font-weight: 800;
1702
+ color: var(--accent);
1703
+ }
1704
+
1705
+ .qr-block {
1706
+ display: flex;
1707
+ justify-content: center;
1708
+ margin-bottom: 18px;
1709
+ }
1710
+
1711
+ .qr-image {
1712
+ width: 192px;
1713
+ height: 192px;
1714
+ border-radius: 14px;
1715
+ border: 1px solid var(--border);
1716
+ }
1717
+
1718
+ .qr-loading,
1719
+ .empty-state {
1720
+ color: var(--text-soft);
1721
+ font-weight: 650;
1722
+ }
1723
+
1724
+ .qr-grid {
1725
+ width: 162px;
1726
+ display: grid;
1727
+ grid-template-columns: repeat(9, 1fr);
1728
+ gap: 4px;
1729
+ }
1730
+
1731
+ .qr-cell {
1732
+ aspect-ratio: 1;
1733
+ border-radius: 2px;
1734
+ background: #eef2fa;
1735
+ }
1736
+
1737
+ .qr-cell.filled {
1738
+ background: #111826;
1739
+ }
1740
+
1741
+ .alert-list {
1742
+ display: grid;
1743
+ gap: 10px;
1744
+ }
1745
+
1746
+ .alert-row {
1747
+ display: grid;
1748
+ gap: 4px;
1749
+ padding: 12px 14px;
1750
+ border-radius: 16px;
1751
+ border: 1px solid var(--border);
1752
+ background: var(--surface-soft);
1753
+ }
1754
+
1755
+ .alert-row.danger {
1756
+ border-color: rgba(240, 91, 105, 0.22);
1757
+ }
1758
+
1759
+ .alert-row.warning {
1760
+ border-color: rgba(255, 155, 47, 0.22);
1761
+ }
1762
+
1763
+ .stat-panel {
1764
+ min-height: 0;
1765
+ }
1766
+
1767
+ .stat-value {
1768
+ display: block;
1769
+ margin-top: 6px;
1770
+ font-size: 34px;
1771
+ line-height: 1;
1772
+ letter-spacing: -0.04em;
1773
+ }
1774
+
1775
+ .toggle-row {
1776
+ display: flex;
1777
+ align-items: center;
1778
+ justify-content: space-between;
1779
+ gap: 14px;
1780
+ min-height: 46px;
1781
+ }
1782
+
1783
+ .toggle-pill {
1784
+ position: relative;
1785
+ flex: none;
1786
+ width: 50px;
1787
+ height: 30px;
1788
+ border-radius: 999px;
1789
+ background: #d9deef;
1790
+ transition: background 0.18s ease;
1791
+ }
1792
+
1793
+ .toggle-pill.checked {
1794
+ background: rgba(91, 92, 226, 0.9);
1795
+ }
1796
+
1797
+ .toggle-knob {
1798
+ position: absolute;
1799
+ top: 3px;
1800
+ left: 4px;
1801
+ width: 24px;
1802
+ height: 24px;
1803
+ border-radius: 999px;
1804
+ background: #fff;
1805
+ box-shadow: 0 4px 12px rgba(27, 38, 70, 0.2);
1806
+ }
1807
+
1808
+ .toggle-pill.checked .toggle-knob {
1809
+ left: 22px;
1810
+ }
1811
+
1812
+ .architecture-diagram {
1813
+ display: grid;
1814
+ gap: 18px;
1815
+ }
1816
+
1817
+ .architecture-row {
1818
+ display: flex;
1819
+ justify-content: center;
1820
+ gap: 16px;
1821
+ flex-wrap: wrap;
1822
+ }
1823
+
1824
+ .architecture-block {
1825
+ min-width: 180px;
1826
+ padding: 16px;
1827
+ border-radius: 18px;
1828
+ border: 1px solid rgba(91, 92, 226, 0.24);
1829
+ background: linear-gradient(180deg, #f7f6ff 0%, #fff 100%);
1830
+ text-align: center;
1831
+ }
1832
+
1833
+ .architecture-block strong {
1834
+ display: block;
1835
+ margin-bottom: 6px;
1836
+ }
1837
+
1838
+ .release-list {
1839
+ display: grid;
1840
+ gap: 12px;
1841
+ }
1842
+
1843
+ .release-card {
1844
+ padding: 14px;
1845
+ border-radius: 16px;
1846
+ border: 1px solid var(--border);
1847
+ background: var(--surface-soft);
1848
+ }
1849
+
1850
+ .release-card strong {
1851
+ font-size: 18px;
1852
+ }
1853
+
1854
+ .release-card span {
1855
+ display: inline-block;
1856
+ margin-left: 8px;
1857
+ color: var(--text-soft);
1858
+ }
1859
+
1860
+ .json-block {
1861
+ margin: 18px 0 0;
1862
+ padding: 14px;
1863
+ border-radius: 16px;
1864
+ background: #f7f9ff;
1865
+ border: 1px solid var(--border);
1866
+ font: 12px/1.6 ui-monospace, SFMono-Regular, Menlo, monospace;
1867
+ color: var(--text);
1868
+ white-space: pre-wrap;
1869
+ }
1870
+
1871
+ .chart-bars {
1872
+ display: grid;
1873
+ grid-template-columns: repeat(7, minmax(0, 1fr));
1874
+ gap: 12px;
1875
+ align-items: end;
1876
+ min-height: 220px;
1877
+ }
1878
+
1879
+ .bar-card {
1880
+ display: grid;
1881
+ justify-items: center;
1882
+ gap: 10px;
1883
+ }
1884
+
1885
+ .bar-fill {
1886
+ width: 72px;
1887
+ border-radius: 18px 18px 6px 6px;
1888
+ background: linear-gradient(180deg, #7d7df5 0%, var(--accent) 100%);
1889
+ }
1890
+
1891
+ .sparkline-large {
1892
+ height: 220px;
1893
+ }
1894
+
1895
+ @media (max-width: 1440px) {
1896
+ .topbar {
1897
+ grid-template-columns: 1fr;
1898
+ }
1899
+
1900
+ .shortcut-strip {
1901
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1902
+ }
1903
+
1904
+ .dashboard-grid,
1905
+ .runs-grid,
1906
+ .logs-grid,
1907
+ .results-grid,
1908
+ .subscriptions-grid,
1909
+ .settings-layout {
1910
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1911
+ }
1912
+
1913
+ .slim-panel {
1914
+ grid-column: auto;
1915
+ }
1916
+ }
1917
+
1918
+ @media (max-width: 1180px) {
1919
+ .workspace-shell {
1920
+ grid-template-columns: 90px minmax(0, 1fr);
1921
+ }
1922
+
1923
+ .sidebar-title,
1924
+ .sidebar-version,
1925
+ .nav-copy,
1926
+ .status-card {
1927
+ display: none;
1928
+ }
1929
+
1930
+ .sidebar {
1931
+ padding-inline: 10px;
1932
+ }
1933
+
1934
+ .sidebar-brand {
1935
+ justify-content: center;
1936
+ padding-inline: 0;
1937
+ }
1938
+
1939
+ .nav-item {
1940
+ justify-content: center;
1941
+ padding: 0;
1942
+ }
1943
+
1944
+ .nav-icon {
1945
+ min-width: 40px;
1946
+ }
1947
+
1948
+ .form-grid.two-columns,
1949
+ .three-columns,
1950
+ .settings-layout {
1951
+ grid-template-columns: 1fr;
1952
+ }
1953
+ }
1954
+
1955
+ @media (max-width: 960px) {
1956
+ body {
1957
+ overflow: auto;
1958
+ }
1959
+
1960
+ .workspace-shell {
1961
+ grid-template-columns: 1fr;
1962
+ height: auto;
1963
+ min-height: 100%;
1964
+ }
1965
+
1966
+ .sidebar {
1967
+ grid-template-rows: auto;
1968
+ border-right: 0;
1969
+ border-bottom: 1px solid var(--border);
1970
+ }
1971
+
1972
+ .sidebar-nav {
1973
+ grid-auto-flow: column;
1974
+ grid-auto-columns: max-content;
1975
+ overflow: auto;
1976
+ padding-bottom: 4px;
1977
+ }
1978
+
1979
+ .main-shell {
1980
+ min-height: calc(100vh - 132px);
1981
+ }
1982
+
1983
+ .dashboard-grid,
1984
+ .runs-grid,
1985
+ .logs-grid,
1986
+ .results-grid,
1987
+ .subscriptions-grid,
1988
+ .settings-layout {
1989
+ grid-template-columns: 1fr;
1990
+ }
1991
+
1992
+ .metric-grid,
1993
+ .metric-grid.four,
1994
+ .country-grid,
1995
+ .action-grid,
1996
+ .action-grid.four,
1997
+ .toolbar-row,
1998
+ .chart-bars {
1999
+ grid-template-columns: 1fr;
2000
+ }
2001
+
2002
+ .flow-steps {
2003
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2004
+ }
2005
+
2006
+ .subscription-inline {
2007
+ flex-direction: column;
2008
+ align-items: flex-start;
2009
+ }
2010
+ }