opencode-claude-code-ua 0.0.0-stage → 0.3.9

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.
package/ui/pro.css ADDED
@@ -0,0 +1,1683 @@
1
+ /* UA PRO — compact settings surface. Neutral black/white canvas, warm orange accent. */
2
+
3
+ :root {
4
+ color-scheme: light;
5
+ --ink: #171717;
6
+ --muted: #525252;
7
+ --canvas: #ffffff;
8
+ --paper: #ffffff;
9
+ --panel: #ffffff;
10
+ --line: #e5e5e5;
11
+ --accent: #b45a3c;
12
+ --accent-soft: #faf0eb;
13
+ --danger: #b13c45;
14
+ --warn: #795516;
15
+ --input: #ffffff;
16
+ --input-border: #d4d4d4;
17
+ --placeholder: #737373;
18
+ --focus: #b45a3c;
19
+ --focus-ring: #b45a3c33;
20
+ --button: #b45a3c;
21
+ --button-ink: #ffffff;
22
+ --button-hover: #96472e;
23
+ --brand-bg: #3b2b24;
24
+ --brand-ink: #ffffff;
25
+ --success: #28654d;
26
+ --error-bg: #fff5f5;
27
+ --error-border: #e8c9cc;
28
+ --warning-bg: #fffaf0;
29
+ --warning-border: #e7d8b8;
30
+ --table-head: #f5f5f5;
31
+ --shade: #00000014;
32
+ --backdrop: #00000066;
33
+ font-family: "Segoe UI", "Microsoft YaHei", sans-serif;
34
+ color: var(--ink);
35
+ background: var(--canvas);
36
+ font-synthesis: none;
37
+ }
38
+
39
+ :root[data-theme=dark] {
40
+ color-scheme: dark;
41
+ --ink: #ededed;
42
+ --muted: #a3a3a3;
43
+ --canvas: #000000;
44
+ --paper: #000000;
45
+ --panel: #0d0d0d;
46
+ --line: #262626;
47
+ --accent: #e6a184;
48
+ --accent-soft: #241813;
49
+ --danger: #f0a4ad;
50
+ --warn: #e3c286;
51
+ --input: #0d0d0d;
52
+ --input-border: #333333;
53
+ --placeholder: #8f8f8f;
54
+ --focus: #e6a184;
55
+ --focus-ring: #e6a18440;
56
+ --button: #9a5236;
57
+ --button-ink: #ffffff;
58
+ --button-hover: #ac6244;
59
+ --brand-bg: #3b2b24;
60
+ --brand-ink: #ffffff;
61
+ --success: #8fd4b5;
62
+ --error-bg: #1a0f11;
63
+ --error-border: #5a353b;
64
+ --warning-bg: #1a1409;
65
+ --warning-border: #5e4d2e;
66
+ --table-head: #0d0d0d;
67
+ --shade: #00000099;
68
+ --backdrop: #000000cc;
69
+ }
70
+
71
+ @media (prefers-color-scheme: dark) {
72
+ :root:not([data-theme=light]) {
73
+ color-scheme: dark;
74
+ --ink: #ededed;
75
+ --muted: #a3a3a3;
76
+ --canvas: #000000;
77
+ --paper: #000000;
78
+ --panel: #0d0d0d;
79
+ --line: #262626;
80
+ --accent: #e6a184;
81
+ --accent-soft: #241813;
82
+ --danger: #f0a4ad;
83
+ --warn: #e3c286;
84
+ --input: #0d0d0d;
85
+ --input-border: #333333;
86
+ --placeholder: #8f8f8f;
87
+ --focus: #e6a184;
88
+ --focus-ring: #e6a18440;
89
+ --button: #9a5236;
90
+ --button-ink: #ffffff;
91
+ --button-hover: #ac6244;
92
+ --brand-bg: #3b2b24;
93
+ --brand-ink: #ffffff;
94
+ --success: #8fd4b5;
95
+ --error-bg: #1a0f11;
96
+ --error-border: #5a353b;
97
+ --warning-bg: #1a1409;
98
+ --warning-border: #5e4d2e;
99
+ --table-head: #0d0d0d;
100
+ --shade: #00000099;
101
+ --backdrop: #000000cc;
102
+ }
103
+ }
104
+
105
+ /* Base */
106
+
107
+ * {
108
+ box-sizing: border-box;
109
+ }
110
+
111
+ body {
112
+ margin: 0;
113
+ min-height: 100vh;
114
+ overflow-x: clip;
115
+ background: var(--canvas);
116
+ color: var(--ink);
117
+ font-size: 14px;
118
+ line-height: 1.6;
119
+ }
120
+
121
+ button,
122
+ input,
123
+ select,
124
+ textarea {
125
+ font: inherit;
126
+ }
127
+
128
+ button,
129
+ a,
130
+ input,
131
+ select,
132
+ textarea {
133
+ outline-offset: 2px;
134
+ }
135
+
136
+ button:focus-visible,
137
+ a:focus-visible,
138
+ summary:focus-visible,
139
+ select:focus-visible,
140
+ input:focus-visible,
141
+ textarea:focus-visible {
142
+ outline: 2px solid var(--focus);
143
+ outline-offset: 2px;
144
+ }
145
+
146
+ [hidden] {
147
+ display: none !important;
148
+ }
149
+
150
+ h1,
151
+ h2,
152
+ h3,
153
+ p {
154
+ margin-top: 0;
155
+ }
156
+
157
+ h1 {
158
+ margin-bottom: 8px;
159
+ font-size: 25px;
160
+ line-height: 1.25;
161
+ letter-spacing: -0.3px;
162
+ }
163
+
164
+ h2 {
165
+ margin-bottom: 12px;
166
+ font-size: 18px;
167
+ line-height: 1.35;
168
+ }
169
+
170
+ h3 {
171
+ font-size: 15px;
172
+ line-height: 1.4;
173
+ }
174
+
175
+ p {
176
+ line-height: 1.65;
177
+ }
178
+
179
+ a {
180
+ color: var(--accent);
181
+ text-underline-offset: 2px;
182
+ }
183
+
184
+ a:hover {
185
+ color: var(--button-hover);
186
+ }
187
+
188
+ button,
189
+ .btn {
190
+ display: inline-flex;
191
+ align-items: center;
192
+ justify-content: center;
193
+ gap: 6px;
194
+ min-height: 38px;
195
+ padding: 8px 13px;
196
+ border: 1px solid var(--line);
197
+ border-radius: 7px;
198
+ background: var(--input);
199
+ color: var(--ink);
200
+ font-size: 13px;
201
+ font-weight: 550;
202
+ cursor: pointer;
203
+ text-decoration: none;
204
+ transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
205
+ }
206
+
207
+ button:hover:not(:disabled),
208
+ .btn:hover {
209
+ border-color: var(--line);
210
+ background: var(--accent-soft);
211
+ color: var(--accent);
212
+ }
213
+
214
+ button:disabled {
215
+ opacity: 0.48;
216
+ cursor: not-allowed;
217
+ }
218
+
219
+ .primary {
220
+ border-color: var(--button);
221
+ background: var(--button);
222
+ color: var(--button-ink);
223
+ font-weight: 650;
224
+ }
225
+
226
+ .primary:hover:not(:disabled) {
227
+ border-color: var(--button-hover);
228
+ background: var(--button-hover);
229
+ color: var(--button-ink);
230
+ }
231
+
232
+ .danger {
233
+ color: var(--danger);
234
+ }
235
+
236
+ .link {
237
+ border: 0;
238
+ background: transparent;
239
+ padding-left: 0;
240
+ color: var(--accent);
241
+ }
242
+
243
+ .mono,
244
+ .code,
245
+ code,
246
+ .code-block {
247
+ font-family: Consolas, "Cascadia Code", monospace;
248
+ font-size: 12px;
249
+ }
250
+
251
+ .spacer {
252
+ flex: 1;
253
+ }
254
+
255
+ .hint,
256
+ .note {
257
+ color: var(--muted);
258
+ font-size: 12px;
259
+ line-height: 1.7;
260
+ }
261
+
262
+ .note {
263
+ padding: 15px 0;
264
+ }
265
+
266
+ /* Shell and brand */
267
+
268
+ .pro-shell {
269
+ display: grid;
270
+ grid-template-columns: 232px minmax(0, 1fr);
271
+ min-height: 100vh;
272
+ max-width: 1640px;
273
+ margin: 0 auto;
274
+ background: var(--canvas);
275
+ }
276
+
277
+ .pro-side {
278
+ position: sticky;
279
+ top: 0;
280
+ display: flex;
281
+ flex-direction: column;
282
+ gap: 24px;
283
+ height: 100vh;
284
+ overflow: auto;
285
+ padding: 24px 18px;
286
+ border-right: 1px solid var(--line);
287
+ background: var(--canvas);
288
+ }
289
+
290
+ .pro-brand {
291
+ display: flex;
292
+ align-items: center;
293
+ gap: 11px;
294
+ min-width: 0;
295
+ padding: 2px;
296
+ border-radius: 8px;
297
+ color: var(--ink);
298
+ text-decoration: none;
299
+ }
300
+
301
+ .pro-mark {
302
+ display: grid;
303
+ place-items: center;
304
+ flex-shrink: 0;
305
+ width: 40px;
306
+ height: 40px;
307
+ overflow: hidden;
308
+ border-radius: 12px;
309
+ background: var(--brand-bg);
310
+ color: var(--brand-ink);
311
+ font-size: 0;
312
+ font-weight: 750;
313
+ }
314
+
315
+ .pro-mark svg,
316
+ .pro-mark img {
317
+ display: block;
318
+ width: 40px;
319
+ height: 40px;
320
+ max-width: 100%;
321
+ }
322
+
323
+ .pro-brand-text {
324
+ min-width: 0;
325
+ }
326
+
327
+ .pro-eyebrow {
328
+ display: block;
329
+ margin-bottom: 3px;
330
+ color: var(--muted);
331
+ font-size: 9px;
332
+ font-weight: 700;
333
+ line-height: 1.2;
334
+ letter-spacing: 0.16em;
335
+ text-transform: uppercase;
336
+ }
337
+
338
+ .pro-brand-text strong {
339
+ display: block;
340
+ font-size: 18px;
341
+ line-height: 1.15;
342
+ letter-spacing: 0.5px;
343
+ white-space: nowrap;
344
+ }
345
+
346
+ .pro-brand-text small {
347
+ display: block;
348
+ margin-top: 4px;
349
+ color: var(--muted);
350
+ font-size: 10px;
351
+ line-height: 1.45;
352
+ overflow-wrap: anywhere;
353
+ }
354
+
355
+ .pro-nav {
356
+ display: flex;
357
+ flex-direction: column;
358
+ gap: 4px;
359
+ }
360
+
361
+ .pro-nav a {
362
+ display: flex;
363
+ align-items: center;
364
+ justify-content: space-between;
365
+ gap: 8px;
366
+ min-height: 38px;
367
+ padding: 9px 11px;
368
+ border-radius: 7px;
369
+ color: var(--muted);
370
+ font-size: 13.5px;
371
+ font-weight: 550;
372
+ text-decoration: none;
373
+ }
374
+
375
+ .pro-nav a:hover,
376
+ .pro-nav a[aria-current=page] {
377
+ background: var(--accent-soft);
378
+ color: var(--accent);
379
+ }
380
+
381
+ .pro-nav a[aria-current=page] {
382
+ font-weight: 650;
383
+ }
384
+
385
+ .pro-nav a[data-leave] {
386
+ position: relative;
387
+ margin-top: 10px;
388
+ }
389
+
390
+ .pro-nav a[data-leave]::before {
391
+ position: absolute;
392
+ top: -6px;
393
+ right: 0;
394
+ left: 0;
395
+ border-top: 1px solid var(--line);
396
+ content: "";
397
+ }
398
+
399
+ .nav-ext {
400
+ align-self: center;
401
+ font-size: 10px;
402
+ }
403
+
404
+ .pro-side-meta {
405
+ margin-top: auto;
406
+ padding: 12px;
407
+ border: 1px solid var(--line);
408
+ border-radius: 9px;
409
+ background: var(--panel);
410
+ font-size: 11px;
411
+ line-height: 1.6;
412
+ }
413
+
414
+ .pro-side-meta > div {
415
+ padding: 8px 0;
416
+ border-top: 1px solid var(--line);
417
+ }
418
+
419
+ .pro-side-meta > div:first-child {
420
+ padding-top: 0;
421
+ border-top: 0;
422
+ }
423
+
424
+ .pro-side-meta > div:last-child {
425
+ padding-bottom: 0;
426
+ }
427
+
428
+ dt {
429
+ color: var(--muted);
430
+ }
431
+
432
+ dd {
433
+ margin: 0;
434
+ overflow-wrap: anywhere;
435
+ }
436
+
437
+ /* Main surface */
438
+
439
+ .pro-main {
440
+ min-width: 0;
441
+ padding: 28px 32px 56px;
442
+ background: var(--paper);
443
+ }
444
+
445
+ .pro-head {
446
+ display: flex;
447
+ align-items: flex-start;
448
+ justify-content: space-between;
449
+ gap: 20px;
450
+ margin-bottom: 24px;
451
+ padding-bottom: 18px;
452
+ border-bottom: 1px solid var(--line);
453
+ }
454
+
455
+ .pro-head p {
456
+ max-width: 70ch;
457
+ margin: 0;
458
+ color: var(--muted);
459
+ font-size: 12px;
460
+ }
461
+
462
+ .pro-head-actions,
463
+ .toolbar-actions,
464
+ .form-actions,
465
+ .row-actions,
466
+ .pending-actions,
467
+ .link-row {
468
+ display: flex;
469
+ align-items: center;
470
+ flex-wrap: wrap;
471
+ gap: 8px;
472
+ }
473
+
474
+ .toolbar {
475
+ display: flex;
476
+ align-items: center;
477
+ justify-content: space-between;
478
+ gap: 20px;
479
+ margin-bottom: 20px;
480
+ }
481
+
482
+ .toolbar p {
483
+ max-width: 60ch;
484
+ margin: 0;
485
+ color: var(--muted);
486
+ font-size: 13px;
487
+ }
488
+
489
+ /* Panels and cards */
490
+
491
+ .panel,
492
+ .side-panel,
493
+ .empty {
494
+ min-width: 0;
495
+ border: 1px solid var(--line);
496
+ border-radius: 10px;
497
+ background: var(--panel);
498
+ }
499
+
500
+ .panel {
501
+ padding: 24px;
502
+ margin-bottom: 20px;
503
+ }
504
+
505
+ .panel-head {
506
+ display: flex;
507
+ align-items: center;
508
+ justify-content: space-between;
509
+ gap: 12px;
510
+ margin-bottom: 16px;
511
+ }
512
+
513
+ .panel-head h2 {
514
+ margin: 0;
515
+ }
516
+
517
+ .metrics {
518
+ display: grid;
519
+ grid-template-columns: repeat(3, minmax(0, 1fr));
520
+ gap: 16px;
521
+ margin-bottom: 24px;
522
+ }
523
+
524
+ .metric {
525
+ min-width: 0;
526
+ padding: 16px 18px;
527
+ border: 1px solid var(--line);
528
+ border-radius: 8px;
529
+ background: var(--panel);
530
+ }
531
+
532
+ .metric span {
533
+ display: block;
534
+ color: var(--muted);
535
+ font-size: 11px;
536
+ }
537
+
538
+ .metric strong {
539
+ display: block;
540
+ margin-top: 6px;
541
+ font-size: 27px;
542
+ line-height: 1.2;
543
+ letter-spacing: -0.4px;
544
+ }
545
+
546
+ .empty {
547
+ padding: 28px;
548
+ margin-bottom: 22px;
549
+ }
550
+
551
+ .empty p {
552
+ max-width: 70ch;
553
+ color: var(--muted);
554
+ font-size: 14px;
555
+ }
556
+
557
+ .empty-note {
558
+ padding: 12px 0;
559
+ color: var(--muted);
560
+ font-size: 13px;
561
+ }
562
+
563
+ .overview-item {
564
+ display: flex;
565
+ align-items: flex-start;
566
+ justify-content: space-between;
567
+ gap: 15px;
568
+ padding: 16px 0;
569
+ border-top: 1px solid var(--line);
570
+ }
571
+
572
+ .overview-item:first-child {
573
+ border-top: 0;
574
+ }
575
+
576
+ .overview-item small {
577
+ display: block;
578
+ margin-top: 6px;
579
+ color: var(--muted);
580
+ font-size: 12px;
581
+ }
582
+
583
+ .tag {
584
+ display: inline-block;
585
+ padding: 3px 8px;
586
+ border-radius: 999px;
587
+ background: var(--accent-soft);
588
+ color: var(--accent);
589
+ font-size: 11px;
590
+ line-height: 1.5;
591
+ overflow-wrap: anywhere;
592
+ }
593
+
594
+ .tag.warn {
595
+ background: var(--warning-bg);
596
+ color: var(--warn);
597
+ }
598
+
599
+ .split {
600
+ display: grid;
601
+ grid-template-columns: minmax(240px, 0.7fr) minmax(0, 1.5fr);
602
+ align-items: start;
603
+ gap: 22px;
604
+ }
605
+
606
+ .split:has(.side-panel[hidden]) {
607
+ grid-template-columns: 1fr;
608
+ }
609
+
610
+ .side-panel {
611
+ padding: 0;
612
+ border: 0;
613
+ background: transparent;
614
+ }
615
+
616
+ .conn-list,
617
+ .tpl-list {
618
+ display: grid;
619
+ gap: 14px;
620
+ }
621
+
622
+ .conn-card,
623
+ .tpl-card {
624
+ min-width: 0;
625
+ padding: 18px 20px;
626
+ border: 1px solid var(--line);
627
+ border-radius: 10px;
628
+ background: var(--panel);
629
+ }
630
+
631
+ .conn-card h3,
632
+ .tpl-card h3 {
633
+ margin-bottom: 8px;
634
+ font-size: 16px;
635
+ }
636
+
637
+ .conn-card p,
638
+ .tpl-card p {
639
+ margin-bottom: 12px;
640
+ color: var(--muted);
641
+ font-size: 12px;
642
+ overflow-wrap: anywhere;
643
+ }
644
+
645
+ .card-actions {
646
+ display: flex;
647
+ flex-wrap: wrap;
648
+ gap: 7px;
649
+ margin-top: 15px;
650
+ }
651
+
652
+ .card-actions button {
653
+ min-height: 34px;
654
+ padding: 6px 10px;
655
+ font-size: 12px;
656
+ }
657
+
658
+ .tpl-list {
659
+ grid-template-columns: repeat(auto-fit, minmax(270px, 1fr));
660
+ }
661
+
662
+ .tpl-card .tag {
663
+ margin-right: 5px;
664
+ }
665
+
666
+ /* Forms */
667
+
668
+ .field {
669
+ display: flex;
670
+ flex-direction: column;
671
+ gap: 6px;
672
+ min-width: 0;
673
+ margin-bottom: 16px;
674
+ font-size: 12px;
675
+ font-weight: 600;
676
+ }
677
+
678
+ .field input,
679
+ .field select,
680
+ .field textarea {
681
+ width: 100%;
682
+ min-width: 0;
683
+ max-width: 100%;
684
+ min-height: 38px;
685
+ padding: 9px 11px;
686
+ border: 1px solid var(--input-border);
687
+ border-radius: 6px;
688
+ background: var(--input);
689
+ color: var(--ink);
690
+ font-size: 13px;
691
+ line-height: 1.45;
692
+ }
693
+
694
+ .field textarea {
695
+ min-height: 82px;
696
+ resize: vertical;
697
+ }
698
+
699
+ .field input:focus,
700
+ .field select:focus,
701
+ .field textarea:focus {
702
+ border-color: var(--accent);
703
+ outline: none;
704
+ box-shadow: 0 0 0 3px var(--focus-ring);
705
+ }
706
+
707
+ .field input::placeholder,
708
+ .field textarea::placeholder,
709
+ .hdr-table input::placeholder,
710
+ .hdr-table textarea::placeholder {
711
+ color: var(--placeholder);
712
+ }
713
+
714
+ .grid2,
715
+ .grid3 {
716
+ display: grid;
717
+ grid-template-columns: repeat(2, minmax(0, 1fr));
718
+ gap: 0 16px;
719
+ }
720
+
721
+ .grid3 {
722
+ grid-template-columns: repeat(3, minmax(0, 1fr));
723
+ }
724
+
725
+ .group {
726
+ min-width: 0;
727
+ margin: 0 0 20px;
728
+ padding: 18px;
729
+ border: 1px solid var(--line);
730
+ border-radius: 8px;
731
+ }
732
+
733
+ .group legend {
734
+ padding: 0 7px;
735
+ font-size: 13px;
736
+ font-weight: 650;
737
+ }
738
+
739
+ .check {
740
+ display: flex;
741
+ align-items: center;
742
+ gap: 9px;
743
+ margin: 8px 0 14px;
744
+ font-size: 12px;
745
+ line-height: 1.8;
746
+ }
747
+
748
+ .check input {
749
+ flex-shrink: 0;
750
+ width: 16px;
751
+ height: 16px;
752
+ accent-color: var(--accent);
753
+ }
754
+
755
+ .check-list {
756
+ display: grid;
757
+ gap: 5px;
758
+ max-height: 220px;
759
+ overflow: auto;
760
+ }
761
+
762
+ .check-list label {
763
+ display: flex;
764
+ align-items: center;
765
+ gap: 10px;
766
+ padding: 7px;
767
+ font-size: 13px;
768
+ }
769
+
770
+ .check-inline {
771
+ align-self: center;
772
+ }
773
+
774
+ .more {
775
+ margin: 5px 0;
776
+ padding: 15px 0;
777
+ border-top: 1px solid var(--line);
778
+ }
779
+
780
+ summary {
781
+ cursor: pointer;
782
+ font-size: 12px;
783
+ font-weight: 600;
784
+ line-height: 1.7;
785
+ }
786
+
787
+ details[open] > summary {
788
+ margin-bottom: 14px;
789
+ }
790
+
791
+ .form-actions {
792
+ padding-top: 16px;
793
+ border-top: 1px solid var(--line);
794
+ }
795
+
796
+ .form-error {
797
+ color: var(--danger);
798
+ font-size: 12px;
799
+ line-height: 1.7;
800
+ white-space: pre-wrap;
801
+ }
802
+
803
+ .form-error:empty {
804
+ display: none;
805
+ }
806
+
807
+ /* Alerts */
808
+
809
+ .pro-alert,
810
+ .pro-pending {
811
+ margin-bottom: 20px;
812
+ padding: 14px 16px;
813
+ border: 1px solid var(--error-border);
814
+ border-radius: 8px;
815
+ background: var(--error-bg);
816
+ color: var(--danger);
817
+ font-size: 13px;
818
+ line-height: 1.7;
819
+ white-space: pre-wrap;
820
+ }
821
+
822
+ .pro-pending {
823
+ border-color: var(--warning-border);
824
+ background: var(--warning-bg);
825
+ color: var(--warn);
826
+ }
827
+
828
+ .pro-pending p {
829
+ margin-bottom: 10px;
830
+ }
831
+
832
+ /* Template editor */
833
+
834
+ .tpl-editor {
835
+ min-width: 0;
836
+ border: 1px solid var(--line);
837
+ border-radius: 10px;
838
+ background: var(--panel);
839
+ }
840
+
841
+ .tpl-head {
842
+ padding: 20px 24px;
843
+ border-bottom: 1px solid var(--line);
844
+ }
845
+
846
+ .tpl-head-main {
847
+ display: flex;
848
+ align-items: center;
849
+ flex-wrap: wrap;
850
+ gap: 25px;
851
+ }
852
+
853
+ .tpl-name-field {
854
+ flex: 1;
855
+ min-width: 180px;
856
+ margin-bottom: 0;
857
+ }
858
+
859
+ .tpl-meta {
860
+ display: flex;
861
+ flex-wrap: wrap;
862
+ gap: 24px;
863
+ font-size: 11px;
864
+ line-height: 1.8;
865
+ }
866
+
867
+ .readonly-note {
868
+ display: flex;
869
+ align-items: center;
870
+ flex-wrap: wrap;
871
+ gap: 12px;
872
+ margin: 15px 0 0;
873
+ color: var(--muted);
874
+ font-size: 12px;
875
+ }
876
+
877
+ .tpl-body {
878
+ display: grid;
879
+ grid-template-columns: minmax(0, 1fr) 270px;
880
+ gap: 0;
881
+ }
882
+
883
+ .tpl-sections {
884
+ min-width: 0;
885
+ padding: 22px;
886
+ }
887
+
888
+ .tpl-preview {
889
+ min-width: 0;
890
+ padding: 22px;
891
+ border-left: 1px solid var(--line);
892
+ background: var(--canvas);
893
+ }
894
+
895
+ .tpl-preview h3 {
896
+ font-size: 12px;
897
+ }
898
+
899
+ .code-block {
900
+ max-height: 500px;
901
+ margin: 0;
902
+ padding: 12px;
903
+ overflow: auto;
904
+ border: 1px solid var(--line);
905
+ border-radius: 6px;
906
+ background: var(--input);
907
+ font-size: 11px;
908
+ line-height: 1.7;
909
+ white-space: pre-wrap;
910
+ overflow-wrap: anywhere;
911
+ }
912
+
913
+ .diff-list {
914
+ margin-bottom: 25px;
915
+ color: var(--muted);
916
+ font-size: 11px;
917
+ overflow-wrap: anywhere;
918
+ }
919
+
920
+ .diff-line {
921
+ padding: 7px 0;
922
+ border-bottom: 1px solid var(--line);
923
+ }
924
+
925
+ .chips {
926
+ display: flex;
927
+ flex-wrap: wrap;
928
+ gap: 7px;
929
+ }
930
+
931
+ .chips label {
932
+ display: flex;
933
+ align-items: center;
934
+ gap: 6px;
935
+ padding: 6px 9px;
936
+ border: 1px solid var(--line);
937
+ border-radius: 6px;
938
+ background: var(--input);
939
+ font-size: 11px;
940
+ }
941
+
942
+ .chips input {
943
+ accent-color: var(--accent);
944
+ }
945
+
946
+ /* Header table */
947
+
948
+ .hdr-scroll {
949
+ position: relative;
950
+ max-width: 100%;
951
+ margin-bottom: 12px;
952
+ overflow: auto;
953
+ border: 1px solid var(--line);
954
+ border-radius: 6px;
955
+ }
956
+
957
+ .hdr-table {
958
+ width: 100%;
959
+ min-width: 820px;
960
+ border-collapse: collapse;
961
+ table-layout: fixed;
962
+ }
963
+
964
+ .hdr-table .c-on {
965
+ width: 50px;
966
+ }
967
+
968
+ .hdr-table .c-name {
969
+ width: 160px;
970
+ }
971
+
972
+ .hdr-table .c-action {
973
+ width: 120px;
974
+ }
975
+
976
+ .hdr-table .c-value {
977
+ width: 220px;
978
+ }
979
+
980
+ .hdr-table .c-when {
981
+ width: 105px;
982
+ }
983
+
984
+ .hdr-table .c-ops {
985
+ width: 140px;
986
+ }
987
+
988
+ .hdr-table .c-row {
989
+ width: 48px;
990
+ }
991
+
992
+ .hdr-table th {
993
+ padding: 10px 7px;
994
+ background: var(--table-head);
995
+ color: var(--muted);
996
+ font-size: 10px;
997
+ text-align: left;
998
+ }
999
+
1000
+ .hdr-table td {
1001
+ padding: 8px 6px;
1002
+ border-top: 1px solid var(--line);
1003
+ vertical-align: top;
1004
+ }
1005
+
1006
+ .hdr-table input:not([type=checkbox]),
1007
+ .hdr-table select,
1008
+ .hdr-table textarea {
1009
+ width: 100%;
1010
+ min-width: 0;
1011
+ padding: 7px;
1012
+ border: 1px solid var(--input-border);
1013
+ border-radius: 5px;
1014
+ background: var(--input);
1015
+ color: var(--ink);
1016
+ font-size: 11px;
1017
+ line-height: 1.5;
1018
+ }
1019
+
1020
+ .hdr-table textarea {
1021
+ min-height: 64px;
1022
+ resize: vertical;
1023
+ }
1024
+
1025
+ .hdr-table button {
1026
+ min-height: 32px;
1027
+ padding: 4px 7px;
1028
+ }
1029
+
1030
+ .tpl-actions {
1031
+ position: sticky;
1032
+ bottom: 0;
1033
+ z-index: 3;
1034
+ display: flex;
1035
+ align-items: center;
1036
+ flex-wrap: wrap;
1037
+ gap: 8px;
1038
+ padding: 14px 22px;
1039
+ border-top: 1px solid var(--line);
1040
+ background: var(--panel);
1041
+ box-shadow: 0 -5px 18px var(--shade);
1042
+ }
1043
+
1044
+ .tpl-dirty {
1045
+ flex: 1;
1046
+ min-width: 120px;
1047
+ color: var(--muted);
1048
+ font-size: 12px;
1049
+ }
1050
+
1051
+ #tpl-error {
1052
+ padding: 0 22px;
1053
+ }
1054
+
1055
+ /* Tests */
1056
+
1057
+ .test-plan {
1058
+ min-width: 0;
1059
+ padding: 14px;
1060
+ margin: 16px 0;
1061
+ border: 1px solid var(--line);
1062
+ border-radius: 8px;
1063
+ background: var(--canvas);
1064
+ }
1065
+
1066
+ .test-plan .panel-head { margin-bottom: 8px; }
1067
+ .test-plan h3 { margin: 0; }
1068
+ .test-plan p:last-child { margin-bottom: 0; }
1069
+ .test-plan-url {
1070
+ display: block;
1071
+ padding: 8px 0;
1072
+ font-family: Consolas, "Cascadia Code", monospace;
1073
+ font-size: 12px;
1074
+ color: var(--ink);
1075
+ white-space: pre-wrap;
1076
+ overflow-wrap: anywhere;
1077
+ }
1078
+
1079
+ .test-result-column { min-width: 0; }
1080
+ .test-result-stale,
1081
+ .test-sample-notice,
1082
+ .test-diagnostic {
1083
+ padding: 13px 15px;
1084
+ margin: 12px 0;
1085
+ border: 1px solid var(--warning-border);
1086
+ border-radius: 8px;
1087
+ background: var(--warning-bg);
1088
+ color: var(--warn);
1089
+ font-size: 12px;
1090
+ line-height: 1.7;
1091
+ overflow-wrap: anywhere;
1092
+ }
1093
+ .test-result-stale { margin-top: 0; }
1094
+ .test-sample-notice p,
1095
+ .test-diagnostic p:last-child { margin-bottom: 8px; }
1096
+ .result[data-stale=true] { border-style: dashed; }
1097
+ .test-plan[data-valid=false] { border-color: var(--error-border); }
1098
+
1099
+ .tests-split {
1100
+ grid-template-columns: minmax(300px, 0.8fr) minmax(0, 1fr);
1101
+ }
1102
+
1103
+ .test-model-picker {
1104
+ display: grid;
1105
+ grid-template-columns: 1fr;
1106
+ align-items: stretch;
1107
+ gap: 8px;
1108
+ min-width: 0;
1109
+ margin-bottom: 16px;
1110
+ }
1111
+
1112
+ .test-model-picker .field {
1113
+ min-width: 0;
1114
+ margin-bottom: 0;
1115
+ }
1116
+
1117
+ .test-model-picker label {
1118
+ min-width: 0;
1119
+ }
1120
+
1121
+ .test-model-picker select,
1122
+ .test-model-picker input {
1123
+ min-width: 0;
1124
+ max-width: 100%;
1125
+ }
1126
+
1127
+ .test-model-select,
1128
+ .test-model-manual input {
1129
+ width: 100%;
1130
+ min-width: 0;
1131
+ max-width: 100%;
1132
+ min-height: 38px;
1133
+ padding: 9px 10px;
1134
+ border: 1px solid var(--input-border);
1135
+ border-radius: 6px;
1136
+ background: var(--input);
1137
+ color: var(--ink);
1138
+ font-size: 13px;
1139
+ line-height: 1.45;
1140
+ }
1141
+
1142
+ .test-model-manual input {
1143
+ font-family: Consolas, "Cascadia Code", monospace;
1144
+ font-size: 12px;
1145
+ }
1146
+
1147
+ .pro-side-copy {
1148
+ margin: 0;
1149
+ padding: 0 2px;
1150
+ color: var(--muted);
1151
+ font-size: 12px;
1152
+ line-height: 1.8;
1153
+ }
1154
+
1155
+ .pro-local-note dt {
1156
+ color: var(--ink);
1157
+ font-weight: 650;
1158
+ }
1159
+
1160
+ .pro-local-note dt::before {
1161
+ display: inline-block;
1162
+ width: 5px;
1163
+ height: 5px;
1164
+ margin-right: 7px;
1165
+ border-radius: 50%;
1166
+ background: var(--accent);
1167
+ vertical-align: middle;
1168
+ content: "";
1169
+ }
1170
+
1171
+ .pro-local-note dd {
1172
+ margin-top: 5px;
1173
+ color: var(--muted);
1174
+ }
1175
+
1176
+ .test-model-picker > .link {
1177
+ justify-self: start;
1178
+ min-height: 32px;
1179
+ padding-top: 3px;
1180
+ padding-bottom: 3px;
1181
+ }
1182
+
1183
+ .test-model-select:focus,
1184
+ .test-model-manual input:focus {
1185
+ border-color: var(--accent);
1186
+ outline: none;
1187
+ box-shadow: 0 0 0 3px var(--focus-ring);
1188
+ }
1189
+
1190
+ .test-model-actions {
1191
+ display: flex;
1192
+ align-items: center;
1193
+ justify-content: space-between;
1194
+ flex-wrap: wrap;
1195
+ gap: 8px;
1196
+ min-width: 0;
1197
+ margin-top: 4px;
1198
+ }
1199
+
1200
+ .test-model-actions .hint {
1201
+ margin: 0;
1202
+ }
1203
+
1204
+ .test-model-status {
1205
+ min-width: 0;
1206
+ margin: 8px 0 0;
1207
+ color: var(--muted);
1208
+ font-size: 12px;
1209
+ line-height: 1.6;
1210
+ overflow-wrap: anywhere;
1211
+ }
1212
+
1213
+ .test-model-status[data-state=ok],
1214
+ .test-model-status.success {
1215
+ color: var(--success);
1216
+ }
1217
+
1218
+ .test-model-status[data-state=error],
1219
+ .test-model-status.error {
1220
+ color: var(--danger);
1221
+ }
1222
+
1223
+ .test-step-meta {
1224
+ display: flex;
1225
+ flex-wrap: wrap;
1226
+ gap: 4px 14px;
1227
+ min-width: 0;
1228
+ margin: 6px 0 16px;
1229
+ color: var(--muted);
1230
+ font-size: 11px;
1231
+ line-height: 1.6;
1232
+ }
1233
+
1234
+ .test-step-meta span,
1235
+ .test-step-meta > div {
1236
+ min-width: 0;
1237
+ overflow-wrap: anywhere;
1238
+ }
1239
+
1240
+ .result {
1241
+ overflow-wrap: anywhere;
1242
+ }
1243
+
1244
+ .result h2 {
1245
+ font-size: 19px;
1246
+ }
1247
+
1248
+ .result .result-state {
1249
+ color: var(--success);
1250
+ font-size: 13px;
1251
+ font-weight: 650;
1252
+ }
1253
+
1254
+ .result .result-state.failed {
1255
+ color: var(--danger);
1256
+ }
1257
+
1258
+ .result pre {
1259
+ margin-top: 12px;
1260
+ }
1261
+
1262
+ .result dl,
1263
+ .kv {
1264
+ display: grid;
1265
+ gap: 10px;
1266
+ font-size: 12px;
1267
+ }
1268
+
1269
+ .kv > div {
1270
+ display: grid;
1271
+ grid-template-columns: 120px minmax(0, 1fr);
1272
+ gap: 12px;
1273
+ line-height: 1.7;
1274
+ }
1275
+
1276
+ /* Settings and dialogs */
1277
+
1278
+ .settings-grid {
1279
+ display: grid;
1280
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1281
+ gap: 20px;
1282
+ }
1283
+
1284
+ .wide {
1285
+ grid-column: 1 / -1;
1286
+ }
1287
+
1288
+ .settings-grid .panel {
1289
+ margin: 0;
1290
+ }
1291
+
1292
+ .settings-grid select {
1293
+ padding: 9px 10px;
1294
+ border: 1px solid var(--input-border);
1295
+ border-radius: 6px;
1296
+ background: var(--input);
1297
+ color: var(--ink);
1298
+ }
1299
+
1300
+ .dialog {
1301
+ width: calc(100% - 32px);
1302
+ max-width: 560px;
1303
+ padding: 24px;
1304
+ border: 1px solid var(--line);
1305
+ border-radius: 12px;
1306
+ background: var(--panel);
1307
+ color: var(--ink);
1308
+ box-shadow: 0 20px 60px var(--shade);
1309
+ }
1310
+
1311
+ .dialog::backdrop {
1312
+ background: var(--backdrop);
1313
+ }
1314
+
1315
+ .dialog-wide {
1316
+ max-width: 900px;
1317
+ }
1318
+
1319
+ .dialog-head {
1320
+ display: flex;
1321
+ align-items: center;
1322
+ justify-content: space-between;
1323
+ gap: 15px;
1324
+ }
1325
+
1326
+ .history-body {
1327
+ max-height: 45vh;
1328
+ overflow: auto;
1329
+ }
1330
+
1331
+ .history-row {
1332
+ display: flex;
1333
+ align-items: center;
1334
+ justify-content: space-between;
1335
+ gap: 10px;
1336
+ padding: 12px 0;
1337
+ border-top: 1px solid var(--line);
1338
+ font-size: 12px;
1339
+ }
1340
+
1341
+ .history-diff {
1342
+ max-height: 30vh;
1343
+ overflow: auto;
1344
+ }
1345
+
1346
+ .sr-only {
1347
+ position: absolute;
1348
+ width: 1px;
1349
+ height: 1px;
1350
+ padding: 0;
1351
+ margin: -1px;
1352
+ overflow: hidden;
1353
+ clip: rect(0, 0, 0, 0);
1354
+ white-space: nowrap;
1355
+ border: 0;
1356
+ }
1357
+
1358
+ /* Model fetching */
1359
+
1360
+ .model-fetch-actions {
1361
+ display: flex;
1362
+ align-items: center;
1363
+ justify-content: space-between;
1364
+ flex-wrap: wrap;
1365
+ gap: 12px;
1366
+ margin-top: 4px;
1367
+ }
1368
+
1369
+ .model-fetch-actions > .field-label {
1370
+ font-size: 12px;
1371
+ font-weight: 600;
1372
+ }
1373
+
1374
+ .model-fetch-result {
1375
+ min-width: 0;
1376
+ margin: 12px 0 18px;
1377
+ padding: 14px;
1378
+ border: 1px solid var(--line);
1379
+ border-radius: 7px;
1380
+ background: var(--canvas);
1381
+ }
1382
+
1383
+ .model-fetch-result select {
1384
+ width: 100%;
1385
+ min-width: 0;
1386
+ max-width: 100%;
1387
+ padding: 8px;
1388
+ border: 1px solid var(--input-border);
1389
+ border-radius: 6px;
1390
+ background: var(--input);
1391
+ color: var(--ink);
1392
+ font-family: Consolas, monospace;
1393
+ font-size: 12px;
1394
+ line-height: 1.6;
1395
+ }
1396
+
1397
+ .model-fetch-result .row-actions {
1398
+ margin-top: 12px;
1399
+ }
1400
+
1401
+ #conn-model-status {
1402
+ margin-top: 8px;
1403
+ overflow-wrap: anywhere;
1404
+ }
1405
+
1406
+ #conn-model-cancel {
1407
+ color: var(--muted);
1408
+ }
1409
+
1410
+ /* Narrow desktop */
1411
+
1412
+ @media (max-width: 1180px) {
1413
+ .pro-shell {
1414
+ grid-template-columns: 220px minmax(0, 1fr);
1415
+ }
1416
+
1417
+ .pro-main {
1418
+ padding: 24px 24px 44px;
1419
+ }
1420
+
1421
+ .pro-brand-text small {
1422
+ max-width: 110px;
1423
+ line-height: 1.6;
1424
+ }
1425
+
1426
+ .tpl-body {
1427
+ grid-template-columns: 1fr;
1428
+ }
1429
+
1430
+ .tpl-preview {
1431
+ border-top: 1px solid var(--line);
1432
+ border-left: 0;
1433
+ }
1434
+
1435
+ .tpl-preview .code-block {
1436
+ max-height: 240px;
1437
+ }
1438
+
1439
+ .split,
1440
+ .tests-split {
1441
+ grid-template-columns: 1fr;
1442
+ }
1443
+
1444
+ .grid3 {
1445
+ grid-template-columns: 1fr;
1446
+ }
1447
+
1448
+ .conn-list {
1449
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
1450
+ }
1451
+ }
1452
+
1453
+ /* Phone */
1454
+
1455
+ @media (max-width: 700px) {
1456
+ .pro-shell {
1457
+ display: block;
1458
+ }
1459
+
1460
+ .pro-side {
1461
+ position: static;
1462
+ height: auto;
1463
+ overflow: visible;
1464
+ padding: 16px;
1465
+ border-right: 0;
1466
+ border-bottom: 1px solid var(--line);
1467
+ gap: 16px;
1468
+ }
1469
+
1470
+ .pro-brand-text small {
1471
+ max-width: none;
1472
+ }
1473
+
1474
+ .pro-side-meta {
1475
+ display: none;
1476
+ }
1477
+
1478
+ .pro-nav {
1479
+ flex-direction: row;
1480
+ gap: 4px;
1481
+ min-width: 0;
1482
+ overflow: auto;
1483
+ }
1484
+
1485
+ .pro-nav a {
1486
+ flex: 0 0 auto;
1487
+ min-height: 44px;
1488
+ padding: 10px 12px;
1489
+ font-size: 12px;
1490
+ white-space: nowrap;
1491
+ }
1492
+
1493
+ .pro-nav a[data-leave] {
1494
+ margin-top: 0;
1495
+ }
1496
+
1497
+ .pro-nav a[data-leave]::before {
1498
+ display: none;
1499
+ }
1500
+
1501
+ .nav-ext {
1502
+ display: none;
1503
+ }
1504
+
1505
+ .pro-main {
1506
+ padding: 20px 16px 44px;
1507
+ }
1508
+
1509
+ .pro-head {
1510
+ flex-direction: column;
1511
+ align-items: stretch;
1512
+ gap: 12px;
1513
+ }
1514
+
1515
+ .pro-head h1 {
1516
+ font-size: 22px;
1517
+ }
1518
+
1519
+ .pro-head-actions {
1520
+ justify-content: flex-start;
1521
+ gap: 6px;
1522
+ }
1523
+
1524
+ .pro-head-actions button {
1525
+ min-height: 44px;
1526
+ padding: 8px 11px;
1527
+ font-size: 12px;
1528
+ }
1529
+
1530
+ .metrics {
1531
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1532
+ gap: 8px;
1533
+ }
1534
+
1535
+ .metric {
1536
+ padding: 12px 10px;
1537
+ }
1538
+
1539
+ .metric strong {
1540
+ font-size: 23px;
1541
+ }
1542
+
1543
+ .metric span {
1544
+ font-size: 10px;
1545
+ }
1546
+
1547
+ .toolbar {
1548
+ flex-direction: column;
1549
+ align-items: flex-start;
1550
+ gap: 12px;
1551
+ }
1552
+
1553
+ .toolbar p {
1554
+ font-size: 12px;
1555
+ }
1556
+
1557
+ .toolbar-actions {
1558
+ flex-shrink: 0;
1559
+ }
1560
+
1561
+ .panel,
1562
+ .conn-card,
1563
+ .tpl-card,
1564
+ .empty {
1565
+ padding: 16px;
1566
+ }
1567
+
1568
+ .grid2,
1569
+ .settings-grid {
1570
+ grid-template-columns: 1fr;
1571
+ }
1572
+
1573
+ .field input,
1574
+ .field select,
1575
+ .field textarea {
1576
+ min-width: 0;
1577
+ min-height: 44px;
1578
+ font-size: 16px;
1579
+ }
1580
+
1581
+ .group {
1582
+ padding: 14px;
1583
+ }
1584
+
1585
+ .tpl-head,
1586
+ .tpl-sections,
1587
+ .tpl-preview {
1588
+ padding: 17px;
1589
+ }
1590
+
1591
+ .tpl-meta {
1592
+ gap: 15px;
1593
+ }
1594
+
1595
+ .tpl-head-main {
1596
+ gap: 8px;
1597
+ }
1598
+
1599
+ .tpl-actions {
1600
+ gap: 7px;
1601
+ padding: 12px 16px;
1602
+ }
1603
+
1604
+ .tpl-actions button {
1605
+ min-height: 44px;
1606
+ font-size: 12px;
1607
+ }
1608
+
1609
+ .tpl-dirty {
1610
+ flex-basis: 100%;
1611
+ }
1612
+
1613
+ .kv > div {
1614
+ grid-template-columns: 100px minmax(0, 1fr);
1615
+ }
1616
+
1617
+ .overview-item {
1618
+ flex-direction: column;
1619
+ gap: 8px;
1620
+ }
1621
+
1622
+ .history-row {
1623
+ flex-wrap: wrap;
1624
+ }
1625
+
1626
+ .dialog {
1627
+ padding: 18px;
1628
+ }
1629
+
1630
+ .form-actions button {
1631
+ min-height: 44px;
1632
+ }
1633
+
1634
+ .code-block {
1635
+ font-size: 11px;
1636
+ }
1637
+
1638
+ .pro-brand strong {
1639
+ font-size: 17px;
1640
+ }
1641
+
1642
+ .test-model-picker {
1643
+ grid-template-columns: 1fr;
1644
+ align-items: stretch;
1645
+ }
1646
+
1647
+ .test-model-actions button {
1648
+ min-height: 44px;
1649
+ }
1650
+
1651
+ .test-model-select,
1652
+ .test-model-manual {
1653
+ min-height: 44px;
1654
+ font-size: 16px;
1655
+ }
1656
+
1657
+ .test-step-meta {
1658
+ font-size: 12px;
1659
+ }
1660
+
1661
+ .model-fetch-actions button,
1662
+ .model-fetch-result button {
1663
+ min-height: 44px;
1664
+ }
1665
+
1666
+ .model-fetch-result {
1667
+ padding: 10px;
1668
+ }
1669
+
1670
+ .model-fetch-result select {
1671
+ font-size: 16px;
1672
+ }
1673
+ }
1674
+
1675
+ @media (prefers-reduced-motion: reduce) {
1676
+ *,
1677
+ *::before,
1678
+ *::after {
1679
+ scroll-behavior: auto!important;
1680
+ transition: none!important;
1681
+ animation: none!important;
1682
+ }
1683
+ }