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

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,1682 @@
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
+ justify-content: space-between;
566
+ gap: 15px;
567
+ padding: 16px 0;
568
+ border-top: 1px solid var(--line);
569
+ }
570
+
571
+ .overview-item:first-child {
572
+ border-top: 0;
573
+ }
574
+
575
+ .overview-item small {
576
+ display: block;
577
+ margin-top: 6px;
578
+ color: var(--muted);
579
+ font-size: 12px;
580
+ }
581
+
582
+ .tag {
583
+ display: inline-block;
584
+ padding: 3px 8px;
585
+ border-radius: 999px;
586
+ background: var(--accent-soft);
587
+ color: var(--accent);
588
+ font-size: 11px;
589
+ line-height: 1.5;
590
+ overflow-wrap: anywhere;
591
+ }
592
+
593
+ .tag.warn {
594
+ background: var(--warning-bg);
595
+ color: var(--warn);
596
+ }
597
+
598
+ .split {
599
+ display: grid;
600
+ grid-template-columns: minmax(240px, 0.7fr) minmax(0, 1.5fr);
601
+ align-items: start;
602
+ gap: 22px;
603
+ }
604
+
605
+ .split:has(.side-panel[hidden]) {
606
+ grid-template-columns: 1fr;
607
+ }
608
+
609
+ .side-panel {
610
+ padding: 0;
611
+ border: 0;
612
+ background: transparent;
613
+ }
614
+
615
+ .conn-list,
616
+ .tpl-list {
617
+ display: grid;
618
+ gap: 14px;
619
+ }
620
+
621
+ .conn-card,
622
+ .tpl-card {
623
+ min-width: 0;
624
+ padding: 18px 20px;
625
+ border: 1px solid var(--line);
626
+ border-radius: 10px;
627
+ background: var(--panel);
628
+ }
629
+
630
+ .conn-card h3,
631
+ .tpl-card h3 {
632
+ margin-bottom: 8px;
633
+ font-size: 16px;
634
+ }
635
+
636
+ .conn-card p,
637
+ .tpl-card p {
638
+ margin-bottom: 12px;
639
+ color: var(--muted);
640
+ font-size: 12px;
641
+ overflow-wrap: anywhere;
642
+ }
643
+
644
+ .card-actions {
645
+ display: flex;
646
+ flex-wrap: wrap;
647
+ gap: 7px;
648
+ margin-top: 15px;
649
+ }
650
+
651
+ .card-actions button {
652
+ min-height: 34px;
653
+ padding: 6px 10px;
654
+ font-size: 12px;
655
+ }
656
+
657
+ .tpl-list {
658
+ grid-template-columns: repeat(auto-fit, minmax(270px, 1fr));
659
+ }
660
+
661
+ .tpl-card .tag {
662
+ margin-right: 5px;
663
+ }
664
+
665
+ /* Forms */
666
+
667
+ .field {
668
+ display: flex;
669
+ flex-direction: column;
670
+ gap: 6px;
671
+ min-width: 0;
672
+ margin-bottom: 16px;
673
+ font-size: 12px;
674
+ font-weight: 600;
675
+ }
676
+
677
+ .field input,
678
+ .field select,
679
+ .field textarea {
680
+ width: 100%;
681
+ min-width: 0;
682
+ max-width: 100%;
683
+ min-height: 38px;
684
+ padding: 9px 11px;
685
+ border: 1px solid var(--input-border);
686
+ border-radius: 6px;
687
+ background: var(--input);
688
+ color: var(--ink);
689
+ font-size: 13px;
690
+ line-height: 1.45;
691
+ }
692
+
693
+ .field textarea {
694
+ min-height: 82px;
695
+ resize: vertical;
696
+ }
697
+
698
+ .field input:focus,
699
+ .field select:focus,
700
+ .field textarea:focus {
701
+ border-color: var(--accent);
702
+ outline: none;
703
+ box-shadow: 0 0 0 3px var(--focus-ring);
704
+ }
705
+
706
+ .field input::placeholder,
707
+ .field textarea::placeholder,
708
+ .hdr-table input::placeholder,
709
+ .hdr-table textarea::placeholder {
710
+ color: var(--placeholder);
711
+ }
712
+
713
+ .grid2,
714
+ .grid3 {
715
+ display: grid;
716
+ grid-template-columns: repeat(2, minmax(0, 1fr));
717
+ gap: 0 16px;
718
+ }
719
+
720
+ .grid3 {
721
+ grid-template-columns: repeat(3, minmax(0, 1fr));
722
+ }
723
+
724
+ .group {
725
+ min-width: 0;
726
+ margin: 0 0 20px;
727
+ padding: 18px;
728
+ border: 1px solid var(--line);
729
+ border-radius: 8px;
730
+ }
731
+
732
+ .group legend {
733
+ padding: 0 7px;
734
+ font-size: 13px;
735
+ font-weight: 650;
736
+ }
737
+
738
+ .check {
739
+ display: flex;
740
+ align-items: center;
741
+ gap: 9px;
742
+ margin: 8px 0 14px;
743
+ font-size: 12px;
744
+ line-height: 1.8;
745
+ }
746
+
747
+ .check input {
748
+ flex-shrink: 0;
749
+ width: 16px;
750
+ height: 16px;
751
+ accent-color: var(--accent);
752
+ }
753
+
754
+ .check-list {
755
+ display: grid;
756
+ gap: 5px;
757
+ max-height: 220px;
758
+ overflow: auto;
759
+ }
760
+
761
+ .check-list label {
762
+ display: flex;
763
+ align-items: center;
764
+ gap: 10px;
765
+ padding: 7px;
766
+ font-size: 13px;
767
+ }
768
+
769
+ .check-inline {
770
+ align-self: center;
771
+ }
772
+
773
+ .more {
774
+ margin: 5px 0;
775
+ padding: 15px 0;
776
+ border-top: 1px solid var(--line);
777
+ }
778
+
779
+ summary {
780
+ cursor: pointer;
781
+ font-size: 12px;
782
+ font-weight: 600;
783
+ line-height: 1.7;
784
+ }
785
+
786
+ details[open] > summary {
787
+ margin-bottom: 14px;
788
+ }
789
+
790
+ .form-actions {
791
+ padding-top: 16px;
792
+ border-top: 1px solid var(--line);
793
+ }
794
+
795
+ .form-error {
796
+ color: var(--danger);
797
+ font-size: 12px;
798
+ line-height: 1.7;
799
+ white-space: pre-wrap;
800
+ }
801
+
802
+ .form-error:empty {
803
+ display: none;
804
+ }
805
+
806
+ /* Alerts */
807
+
808
+ .pro-alert,
809
+ .pro-pending {
810
+ margin-bottom: 20px;
811
+ padding: 14px 16px;
812
+ border: 1px solid var(--error-border);
813
+ border-radius: 8px;
814
+ background: var(--error-bg);
815
+ color: var(--danger);
816
+ font-size: 13px;
817
+ line-height: 1.7;
818
+ white-space: pre-wrap;
819
+ }
820
+
821
+ .pro-pending {
822
+ border-color: var(--warning-border);
823
+ background: var(--warning-bg);
824
+ color: var(--warn);
825
+ }
826
+
827
+ .pro-pending p {
828
+ margin-bottom: 10px;
829
+ }
830
+
831
+ /* Template editor */
832
+
833
+ .tpl-editor {
834
+ min-width: 0;
835
+ border: 1px solid var(--line);
836
+ border-radius: 10px;
837
+ background: var(--panel);
838
+ }
839
+
840
+ .tpl-head {
841
+ padding: 20px 24px;
842
+ border-bottom: 1px solid var(--line);
843
+ }
844
+
845
+ .tpl-head-main {
846
+ display: flex;
847
+ align-items: center;
848
+ flex-wrap: wrap;
849
+ gap: 25px;
850
+ }
851
+
852
+ .tpl-name-field {
853
+ flex: 1;
854
+ min-width: 180px;
855
+ margin-bottom: 0;
856
+ }
857
+
858
+ .tpl-meta {
859
+ display: flex;
860
+ flex-wrap: wrap;
861
+ gap: 24px;
862
+ font-size: 11px;
863
+ line-height: 1.8;
864
+ }
865
+
866
+ .readonly-note {
867
+ display: flex;
868
+ align-items: center;
869
+ flex-wrap: wrap;
870
+ gap: 12px;
871
+ margin: 15px 0 0;
872
+ color: var(--muted);
873
+ font-size: 12px;
874
+ }
875
+
876
+ .tpl-body {
877
+ display: grid;
878
+ grid-template-columns: minmax(0, 1fr) 270px;
879
+ gap: 0;
880
+ }
881
+
882
+ .tpl-sections {
883
+ min-width: 0;
884
+ padding: 22px;
885
+ }
886
+
887
+ .tpl-preview {
888
+ min-width: 0;
889
+ padding: 22px;
890
+ border-left: 1px solid var(--line);
891
+ background: var(--canvas);
892
+ }
893
+
894
+ .tpl-preview h3 {
895
+ font-size: 12px;
896
+ }
897
+
898
+ .code-block {
899
+ max-height: 500px;
900
+ margin: 0;
901
+ padding: 12px;
902
+ overflow: auto;
903
+ border: 1px solid var(--line);
904
+ border-radius: 6px;
905
+ background: var(--input);
906
+ font-size: 11px;
907
+ line-height: 1.7;
908
+ white-space: pre-wrap;
909
+ overflow-wrap: anywhere;
910
+ }
911
+
912
+ .diff-list {
913
+ margin-bottom: 25px;
914
+ color: var(--muted);
915
+ font-size: 11px;
916
+ overflow-wrap: anywhere;
917
+ }
918
+
919
+ .diff-line {
920
+ padding: 7px 0;
921
+ border-bottom: 1px solid var(--line);
922
+ }
923
+
924
+ .chips {
925
+ display: flex;
926
+ flex-wrap: wrap;
927
+ gap: 7px;
928
+ }
929
+
930
+ .chips label {
931
+ display: flex;
932
+ align-items: center;
933
+ gap: 6px;
934
+ padding: 6px 9px;
935
+ border: 1px solid var(--line);
936
+ border-radius: 6px;
937
+ background: var(--input);
938
+ font-size: 11px;
939
+ }
940
+
941
+ .chips input {
942
+ accent-color: var(--accent);
943
+ }
944
+
945
+ /* Header table */
946
+
947
+ .hdr-scroll {
948
+ position: relative;
949
+ max-width: 100%;
950
+ margin-bottom: 12px;
951
+ overflow: auto;
952
+ border: 1px solid var(--line);
953
+ border-radius: 6px;
954
+ }
955
+
956
+ .hdr-table {
957
+ width: 100%;
958
+ min-width: 820px;
959
+ border-collapse: collapse;
960
+ table-layout: fixed;
961
+ }
962
+
963
+ .hdr-table .c-on {
964
+ width: 50px;
965
+ }
966
+
967
+ .hdr-table .c-name {
968
+ width: 160px;
969
+ }
970
+
971
+ .hdr-table .c-action {
972
+ width: 120px;
973
+ }
974
+
975
+ .hdr-table .c-value {
976
+ width: 220px;
977
+ }
978
+
979
+ .hdr-table .c-when {
980
+ width: 105px;
981
+ }
982
+
983
+ .hdr-table .c-ops {
984
+ width: 140px;
985
+ }
986
+
987
+ .hdr-table .c-row {
988
+ width: 48px;
989
+ }
990
+
991
+ .hdr-table th {
992
+ padding: 10px 7px;
993
+ background: var(--table-head);
994
+ color: var(--muted);
995
+ font-size: 10px;
996
+ text-align: left;
997
+ }
998
+
999
+ .hdr-table td {
1000
+ padding: 8px 6px;
1001
+ border-top: 1px solid var(--line);
1002
+ vertical-align: top;
1003
+ }
1004
+
1005
+ .hdr-table input:not([type=checkbox]),
1006
+ .hdr-table select,
1007
+ .hdr-table textarea {
1008
+ width: 100%;
1009
+ min-width: 0;
1010
+ padding: 7px;
1011
+ border: 1px solid var(--input-border);
1012
+ border-radius: 5px;
1013
+ background: var(--input);
1014
+ color: var(--ink);
1015
+ font-size: 11px;
1016
+ line-height: 1.5;
1017
+ }
1018
+
1019
+ .hdr-table textarea {
1020
+ min-height: 64px;
1021
+ resize: vertical;
1022
+ }
1023
+
1024
+ .hdr-table button {
1025
+ min-height: 32px;
1026
+ padding: 4px 7px;
1027
+ }
1028
+
1029
+ .tpl-actions {
1030
+ position: sticky;
1031
+ bottom: 0;
1032
+ z-index: 3;
1033
+ display: flex;
1034
+ align-items: center;
1035
+ flex-wrap: wrap;
1036
+ gap: 8px;
1037
+ padding: 14px 22px;
1038
+ border-top: 1px solid var(--line);
1039
+ background: var(--panel);
1040
+ box-shadow: 0 -5px 18px var(--shade);
1041
+ }
1042
+
1043
+ .tpl-dirty {
1044
+ flex: 1;
1045
+ min-width: 120px;
1046
+ color: var(--muted);
1047
+ font-size: 12px;
1048
+ }
1049
+
1050
+ #tpl-error {
1051
+ padding: 0 22px;
1052
+ }
1053
+
1054
+ /* Tests */
1055
+
1056
+ .test-plan {
1057
+ min-width: 0;
1058
+ padding: 14px;
1059
+ margin: 16px 0;
1060
+ border: 1px solid var(--line);
1061
+ border-radius: 8px;
1062
+ background: var(--canvas);
1063
+ }
1064
+
1065
+ .test-plan .panel-head { margin-bottom: 8px; }
1066
+ .test-plan h3 { margin: 0; }
1067
+ .test-plan p:last-child { margin-bottom: 0; }
1068
+ .test-plan-url {
1069
+ display: block;
1070
+ padding: 8px 0;
1071
+ font-family: Consolas, "Cascadia Code", monospace;
1072
+ font-size: 12px;
1073
+ color: var(--ink);
1074
+ white-space: pre-wrap;
1075
+ overflow-wrap: anywhere;
1076
+ }
1077
+
1078
+ .test-result-column { min-width: 0; }
1079
+ .test-result-stale,
1080
+ .test-sample-notice,
1081
+ .test-diagnostic {
1082
+ padding: 13px 15px;
1083
+ margin: 12px 0;
1084
+ border: 1px solid var(--warning-border);
1085
+ border-radius: 8px;
1086
+ background: var(--warning-bg);
1087
+ color: var(--warn);
1088
+ font-size: 12px;
1089
+ line-height: 1.7;
1090
+ overflow-wrap: anywhere;
1091
+ }
1092
+ .test-result-stale { margin-top: 0; }
1093
+ .test-sample-notice p,
1094
+ .test-diagnostic p:last-child { margin-bottom: 8px; }
1095
+ .result[data-stale=true] { border-style: dashed; }
1096
+ .test-plan[data-valid=false] { border-color: var(--error-border); }
1097
+
1098
+ .tests-split {
1099
+ grid-template-columns: minmax(300px, 0.8fr) minmax(0, 1fr);
1100
+ }
1101
+
1102
+ .test-model-picker {
1103
+ display: grid;
1104
+ grid-template-columns: 1fr;
1105
+ align-items: stretch;
1106
+ gap: 8px;
1107
+ min-width: 0;
1108
+ margin-bottom: 16px;
1109
+ }
1110
+
1111
+ .test-model-picker .field {
1112
+ min-width: 0;
1113
+ margin-bottom: 0;
1114
+ }
1115
+
1116
+ .test-model-picker label {
1117
+ min-width: 0;
1118
+ }
1119
+
1120
+ .test-model-picker select,
1121
+ .test-model-picker input {
1122
+ min-width: 0;
1123
+ max-width: 100%;
1124
+ }
1125
+
1126
+ .test-model-select,
1127
+ .test-model-manual input {
1128
+ width: 100%;
1129
+ min-width: 0;
1130
+ max-width: 100%;
1131
+ min-height: 38px;
1132
+ padding: 9px 10px;
1133
+ border: 1px solid var(--input-border);
1134
+ border-radius: 6px;
1135
+ background: var(--input);
1136
+ color: var(--ink);
1137
+ font-size: 13px;
1138
+ line-height: 1.45;
1139
+ }
1140
+
1141
+ .test-model-manual input {
1142
+ font-family: Consolas, "Cascadia Code", monospace;
1143
+ font-size: 12px;
1144
+ }
1145
+
1146
+ .pro-side-copy {
1147
+ margin: 0;
1148
+ padding: 0 2px;
1149
+ color: var(--muted);
1150
+ font-size: 12px;
1151
+ line-height: 1.8;
1152
+ }
1153
+
1154
+ .pro-local-note dt {
1155
+ color: var(--ink);
1156
+ font-weight: 650;
1157
+ }
1158
+
1159
+ .pro-local-note dt::before {
1160
+ display: inline-block;
1161
+ width: 5px;
1162
+ height: 5px;
1163
+ margin-right: 7px;
1164
+ border-radius: 50%;
1165
+ background: var(--accent);
1166
+ vertical-align: middle;
1167
+ content: "";
1168
+ }
1169
+
1170
+ .pro-local-note dd {
1171
+ margin-top: 5px;
1172
+ color: var(--muted);
1173
+ }
1174
+
1175
+ .test-model-picker > .link {
1176
+ justify-self: start;
1177
+ min-height: 32px;
1178
+ padding-top: 3px;
1179
+ padding-bottom: 3px;
1180
+ }
1181
+
1182
+ .test-model-select:focus,
1183
+ .test-model-manual input:focus {
1184
+ border-color: var(--accent);
1185
+ outline: none;
1186
+ box-shadow: 0 0 0 3px var(--focus-ring);
1187
+ }
1188
+
1189
+ .test-model-actions {
1190
+ display: flex;
1191
+ align-items: center;
1192
+ justify-content: space-between;
1193
+ flex-wrap: wrap;
1194
+ gap: 8px;
1195
+ min-width: 0;
1196
+ margin-top: 4px;
1197
+ }
1198
+
1199
+ .test-model-actions .hint {
1200
+ margin: 0;
1201
+ }
1202
+
1203
+ .test-model-status {
1204
+ min-width: 0;
1205
+ margin: 8px 0 0;
1206
+ color: var(--muted);
1207
+ font-size: 12px;
1208
+ line-height: 1.6;
1209
+ overflow-wrap: anywhere;
1210
+ }
1211
+
1212
+ .test-model-status[data-state=ok],
1213
+ .test-model-status.success {
1214
+ color: var(--success);
1215
+ }
1216
+
1217
+ .test-model-status[data-state=error],
1218
+ .test-model-status.error {
1219
+ color: var(--danger);
1220
+ }
1221
+
1222
+ .test-step-meta {
1223
+ display: flex;
1224
+ flex-wrap: wrap;
1225
+ gap: 4px 14px;
1226
+ min-width: 0;
1227
+ margin: 6px 0 16px;
1228
+ color: var(--muted);
1229
+ font-size: 11px;
1230
+ line-height: 1.6;
1231
+ }
1232
+
1233
+ .test-step-meta span,
1234
+ .test-step-meta > div {
1235
+ min-width: 0;
1236
+ overflow-wrap: anywhere;
1237
+ }
1238
+
1239
+ .result {
1240
+ overflow-wrap: anywhere;
1241
+ }
1242
+
1243
+ .result h2 {
1244
+ font-size: 19px;
1245
+ }
1246
+
1247
+ .result .result-state {
1248
+ color: var(--success);
1249
+ font-size: 13px;
1250
+ font-weight: 650;
1251
+ }
1252
+
1253
+ .result .result-state.failed {
1254
+ color: var(--danger);
1255
+ }
1256
+
1257
+ .result pre {
1258
+ margin-top: 12px;
1259
+ }
1260
+
1261
+ .result dl,
1262
+ .kv {
1263
+ display: grid;
1264
+ gap: 10px;
1265
+ font-size: 12px;
1266
+ }
1267
+
1268
+ .kv > div {
1269
+ display: grid;
1270
+ grid-template-columns: 120px minmax(0, 1fr);
1271
+ gap: 12px;
1272
+ line-height: 1.7;
1273
+ }
1274
+
1275
+ /* Settings and dialogs */
1276
+
1277
+ .settings-grid {
1278
+ display: grid;
1279
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1280
+ gap: 20px;
1281
+ }
1282
+
1283
+ .wide {
1284
+ grid-column: 1 / -1;
1285
+ }
1286
+
1287
+ .settings-grid .panel {
1288
+ margin: 0;
1289
+ }
1290
+
1291
+ .settings-grid select {
1292
+ padding: 9px 10px;
1293
+ border: 1px solid var(--input-border);
1294
+ border-radius: 6px;
1295
+ background: var(--input);
1296
+ color: var(--ink);
1297
+ }
1298
+
1299
+ .dialog {
1300
+ width: calc(100% - 32px);
1301
+ max-width: 560px;
1302
+ padding: 24px;
1303
+ border: 1px solid var(--line);
1304
+ border-radius: 12px;
1305
+ background: var(--panel);
1306
+ color: var(--ink);
1307
+ box-shadow: 0 20px 60px var(--shade);
1308
+ }
1309
+
1310
+ .dialog::backdrop {
1311
+ background: var(--backdrop);
1312
+ }
1313
+
1314
+ .dialog-wide {
1315
+ max-width: 900px;
1316
+ }
1317
+
1318
+ .dialog-head {
1319
+ display: flex;
1320
+ align-items: center;
1321
+ justify-content: space-between;
1322
+ gap: 15px;
1323
+ }
1324
+
1325
+ .history-body {
1326
+ max-height: 45vh;
1327
+ overflow: auto;
1328
+ }
1329
+
1330
+ .history-row {
1331
+ display: flex;
1332
+ align-items: center;
1333
+ justify-content: space-between;
1334
+ gap: 10px;
1335
+ padding: 12px 0;
1336
+ border-top: 1px solid var(--line);
1337
+ font-size: 12px;
1338
+ }
1339
+
1340
+ .history-diff {
1341
+ max-height: 30vh;
1342
+ overflow: auto;
1343
+ }
1344
+
1345
+ .sr-only {
1346
+ position: absolute;
1347
+ width: 1px;
1348
+ height: 1px;
1349
+ padding: 0;
1350
+ margin: -1px;
1351
+ overflow: hidden;
1352
+ clip: rect(0, 0, 0, 0);
1353
+ white-space: nowrap;
1354
+ border: 0;
1355
+ }
1356
+
1357
+ /* Model fetching */
1358
+
1359
+ .model-fetch-actions {
1360
+ display: flex;
1361
+ align-items: center;
1362
+ justify-content: space-between;
1363
+ flex-wrap: wrap;
1364
+ gap: 12px;
1365
+ margin-top: 4px;
1366
+ }
1367
+
1368
+ .model-fetch-actions > .field-label {
1369
+ font-size: 12px;
1370
+ font-weight: 600;
1371
+ }
1372
+
1373
+ .model-fetch-result {
1374
+ min-width: 0;
1375
+ margin: 12px 0 18px;
1376
+ padding: 14px;
1377
+ border: 1px solid var(--line);
1378
+ border-radius: 7px;
1379
+ background: var(--canvas);
1380
+ }
1381
+
1382
+ .model-fetch-result select {
1383
+ width: 100%;
1384
+ min-width: 0;
1385
+ max-width: 100%;
1386
+ padding: 8px;
1387
+ border: 1px solid var(--input-border);
1388
+ border-radius: 6px;
1389
+ background: var(--input);
1390
+ color: var(--ink);
1391
+ font-family: Consolas, monospace;
1392
+ font-size: 12px;
1393
+ line-height: 1.6;
1394
+ }
1395
+
1396
+ .model-fetch-result .row-actions {
1397
+ margin-top: 12px;
1398
+ }
1399
+
1400
+ #conn-model-status {
1401
+ margin-top: 8px;
1402
+ overflow-wrap: anywhere;
1403
+ }
1404
+
1405
+ #conn-model-cancel {
1406
+ color: var(--muted);
1407
+ }
1408
+
1409
+ /* Narrow desktop */
1410
+
1411
+ @media (max-width: 1180px) {
1412
+ .pro-shell {
1413
+ grid-template-columns: 220px minmax(0, 1fr);
1414
+ }
1415
+
1416
+ .pro-main {
1417
+ padding: 24px 24px 44px;
1418
+ }
1419
+
1420
+ .pro-brand-text small {
1421
+ max-width: 110px;
1422
+ line-height: 1.6;
1423
+ }
1424
+
1425
+ .tpl-body {
1426
+ grid-template-columns: 1fr;
1427
+ }
1428
+
1429
+ .tpl-preview {
1430
+ border-top: 1px solid var(--line);
1431
+ border-left: 0;
1432
+ }
1433
+
1434
+ .tpl-preview .code-block {
1435
+ max-height: 240px;
1436
+ }
1437
+
1438
+ .split,
1439
+ .tests-split {
1440
+ grid-template-columns: 1fr;
1441
+ }
1442
+
1443
+ .grid3 {
1444
+ grid-template-columns: 1fr;
1445
+ }
1446
+
1447
+ .conn-list {
1448
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
1449
+ }
1450
+ }
1451
+
1452
+ /* Phone */
1453
+
1454
+ @media (max-width: 700px) {
1455
+ .pro-shell {
1456
+ display: block;
1457
+ }
1458
+
1459
+ .pro-side {
1460
+ position: static;
1461
+ height: auto;
1462
+ overflow: visible;
1463
+ padding: 16px;
1464
+ border-right: 0;
1465
+ border-bottom: 1px solid var(--line);
1466
+ gap: 16px;
1467
+ }
1468
+
1469
+ .pro-brand-text small {
1470
+ max-width: none;
1471
+ }
1472
+
1473
+ .pro-side-meta {
1474
+ display: none;
1475
+ }
1476
+
1477
+ .pro-nav {
1478
+ flex-direction: row;
1479
+ gap: 4px;
1480
+ min-width: 0;
1481
+ overflow: auto;
1482
+ }
1483
+
1484
+ .pro-nav a {
1485
+ flex: 0 0 auto;
1486
+ min-height: 44px;
1487
+ padding: 10px 12px;
1488
+ font-size: 12px;
1489
+ white-space: nowrap;
1490
+ }
1491
+
1492
+ .pro-nav a[data-leave] {
1493
+ margin-top: 0;
1494
+ }
1495
+
1496
+ .pro-nav a[data-leave]::before {
1497
+ display: none;
1498
+ }
1499
+
1500
+ .nav-ext {
1501
+ display: none;
1502
+ }
1503
+
1504
+ .pro-main {
1505
+ padding: 20px 16px 44px;
1506
+ }
1507
+
1508
+ .pro-head {
1509
+ flex-direction: column;
1510
+ align-items: stretch;
1511
+ gap: 12px;
1512
+ }
1513
+
1514
+ .pro-head h1 {
1515
+ font-size: 22px;
1516
+ }
1517
+
1518
+ .pro-head-actions {
1519
+ justify-content: flex-start;
1520
+ gap: 6px;
1521
+ }
1522
+
1523
+ .pro-head-actions button {
1524
+ min-height: 44px;
1525
+ padding: 8px 11px;
1526
+ font-size: 12px;
1527
+ }
1528
+
1529
+ .metrics {
1530
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1531
+ gap: 8px;
1532
+ }
1533
+
1534
+ .metric {
1535
+ padding: 12px 10px;
1536
+ }
1537
+
1538
+ .metric strong {
1539
+ font-size: 23px;
1540
+ }
1541
+
1542
+ .metric span {
1543
+ font-size: 10px;
1544
+ }
1545
+
1546
+ .toolbar {
1547
+ flex-direction: column;
1548
+ align-items: flex-start;
1549
+ gap: 12px;
1550
+ }
1551
+
1552
+ .toolbar p {
1553
+ font-size: 12px;
1554
+ }
1555
+
1556
+ .toolbar-actions {
1557
+ flex-shrink: 0;
1558
+ }
1559
+
1560
+ .panel,
1561
+ .conn-card,
1562
+ .tpl-card,
1563
+ .empty {
1564
+ padding: 16px;
1565
+ }
1566
+
1567
+ .grid2,
1568
+ .settings-grid {
1569
+ grid-template-columns: 1fr;
1570
+ }
1571
+
1572
+ .field input,
1573
+ .field select,
1574
+ .field textarea {
1575
+ min-width: 0;
1576
+ min-height: 44px;
1577
+ font-size: 16px;
1578
+ }
1579
+
1580
+ .group {
1581
+ padding: 14px;
1582
+ }
1583
+
1584
+ .tpl-head,
1585
+ .tpl-sections,
1586
+ .tpl-preview {
1587
+ padding: 17px;
1588
+ }
1589
+
1590
+ .tpl-meta {
1591
+ gap: 15px;
1592
+ }
1593
+
1594
+ .tpl-head-main {
1595
+ gap: 8px;
1596
+ }
1597
+
1598
+ .tpl-actions {
1599
+ gap: 7px;
1600
+ padding: 12px 16px;
1601
+ }
1602
+
1603
+ .tpl-actions button {
1604
+ min-height: 44px;
1605
+ font-size: 12px;
1606
+ }
1607
+
1608
+ .tpl-dirty {
1609
+ flex-basis: 100%;
1610
+ }
1611
+
1612
+ .kv > div {
1613
+ grid-template-columns: 100px minmax(0, 1fr);
1614
+ }
1615
+
1616
+ .overview-item {
1617
+ flex-direction: column;
1618
+ gap: 8px;
1619
+ }
1620
+
1621
+ .history-row {
1622
+ flex-wrap: wrap;
1623
+ }
1624
+
1625
+ .dialog {
1626
+ padding: 18px;
1627
+ }
1628
+
1629
+ .form-actions button {
1630
+ min-height: 44px;
1631
+ }
1632
+
1633
+ .code-block {
1634
+ font-size: 11px;
1635
+ }
1636
+
1637
+ .pro-brand strong {
1638
+ font-size: 17px;
1639
+ }
1640
+
1641
+ .test-model-picker {
1642
+ grid-template-columns: 1fr;
1643
+ align-items: stretch;
1644
+ }
1645
+
1646
+ .test-model-actions button {
1647
+ min-height: 44px;
1648
+ }
1649
+
1650
+ .test-model-select,
1651
+ .test-model-manual {
1652
+ min-height: 44px;
1653
+ font-size: 16px;
1654
+ }
1655
+
1656
+ .test-step-meta {
1657
+ font-size: 12px;
1658
+ }
1659
+
1660
+ .model-fetch-actions button,
1661
+ .model-fetch-result button {
1662
+ min-height: 44px;
1663
+ }
1664
+
1665
+ .model-fetch-result {
1666
+ padding: 10px;
1667
+ }
1668
+
1669
+ .model-fetch-result select {
1670
+ font-size: 16px;
1671
+ }
1672
+ }
1673
+
1674
+ @media (prefers-reduced-motion: reduce) {
1675
+ *,
1676
+ *::before,
1677
+ *::after {
1678
+ scroll-behavior: auto!important;
1679
+ transition: none!important;
1680
+ animation: none!important;
1681
+ }
1682
+ }