acdev 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1870 @@
1
+ /* acdev — UI matching new_ui.html (DM Sans) */
2
+
3
+ :root,
4
+ [data-theme="light"] {
5
+ --bg: #f5f5f6;
6
+ --surface: #ffffff;
7
+ --surface-2: #f0f0f1;
8
+ --text: #18181b;
9
+ --text-muted: rgba(24, 24, 27, 0.55);
10
+ --border: rgba(24, 24, 27, 0.1);
11
+ --border-soft: rgba(24, 24, 27, 0.06);
12
+ --primary: #5b4fe8;
13
+ --primary-hover: #4c3fd9;
14
+ --primary-100: #ece9fd;
15
+ --accent: #dc4436;
16
+ --accent-100: #fdecea;
17
+ --accent-800: #a3372b;
18
+ --amber: #d97706;
19
+ --amber-100: #fdf1dc;
20
+ --amber-800: #8a5a0a;
21
+ --green: #16a34a;
22
+ --green-100: #e7f6ec;
23
+ --green-800: #0f7a38;
24
+ --slate: #5b6572;
25
+ --slate-100: #eef0f2;
26
+ --slate-800: #3a4149;
27
+ --nav-badge-bg: #e9e9eb;
28
+ --nav-badge-text: #55565c;
29
+ --shadow-sm: 0 1px 2px rgba(20, 20, 30, 0.05), 0 1px 1px rgba(20, 20, 30, 0.04);
30
+ --diff-del-bg: oklch(0.93 0.05 25);
31
+ --diff-del-fg: oklch(0.36 0.13 25);
32
+ --diff-add-bg: oklch(0.93 0.05 145);
33
+ --diff-add-fg: oklch(0.32 0.09 150);
34
+ --btn-on-primary: #fff;
35
+ }
36
+
37
+ [data-theme="dark"] {
38
+ --bg: #141316;
39
+ --surface: #1d1c20;
40
+ --surface-2: #242327;
41
+ --text: #f1f0f3;
42
+ --text-muted: rgba(241, 240, 243, 0.55);
43
+ --border: rgba(255, 255, 255, 0.1);
44
+ --border-soft: rgba(255, 255, 255, 0.06);
45
+ --primary: #8c80f5;
46
+ --primary-hover: #a196f7;
47
+ --primary-100: #2a2560;
48
+ --accent: #ea6b5f;
49
+ --accent-100: #3d201c;
50
+ --accent-800: #ffb3a8;
51
+ --amber: #f0ac4c;
52
+ --amber-100: #41300f;
53
+ --amber-800: #ffd898;
54
+ --green: #4fbf6c;
55
+ --green-100: #173a22;
56
+ --green-800: #a3e0ac;
57
+ --slate: #9aa1ab;
58
+ --slate-100: #2a2d30;
59
+ --slate-800: #ccd1d6;
60
+ --nav-badge-bg: #2c2b30;
61
+ --nav-badge-text: #c7c6cc;
62
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.4);
63
+ --diff-del-bg: oklch(0.28 0.06 25);
64
+ --diff-del-fg: oklch(0.82 0.08 25);
65
+ --diff-add-bg: oklch(0.28 0.05 145);
66
+ --diff-add-fg: oklch(0.82 0.07 150);
67
+ --btn-on-primary: #fff;
68
+ }
69
+
70
+ *,
71
+ *::before,
72
+ *::after {
73
+ box-sizing: border-box;
74
+ }
75
+
76
+ body {
77
+ margin: 0;
78
+ overflow: hidden;
79
+ background: var(--bg);
80
+ color: var(--text);
81
+ font-family: "DM Sans", system-ui, -apple-system, sans-serif;
82
+ font-size: 14px;
83
+ line-height: 1.5;
84
+ height: 100vh;
85
+ -webkit-font-smoothing: antialiased;
86
+ }
87
+
88
+ h1, h2, h3, p { margin: 0; }
89
+ button { font: inherit; cursor: pointer; }
90
+ a { color: var(--primary); text-underline-offset: 3px; }
91
+
92
+ .hidden { display: none !important; }
93
+ .mono { font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
94
+
95
+ .sr-only {
96
+ position: absolute;
97
+ width: 1px;
98
+ height: 1px;
99
+ padding: 0;
100
+ margin: -1px;
101
+ overflow: hidden;
102
+ clip: rect(0, 0, 0, 0);
103
+ white-space: nowrap;
104
+ border: 0;
105
+ }
106
+
107
+ :focus { outline: none; }
108
+ :focus-visible {
109
+ outline: 2px solid var(--primary);
110
+ outline-offset: 2px;
111
+ }
112
+
113
+ /* —— Shell —— */
114
+ .app {
115
+ display: flex;
116
+ min-height: 100vh;
117
+ height: 100vh;
118
+ background: var(--bg);
119
+ color: var(--text);
120
+ font-family: "DM Sans", system-ui, sans-serif;
121
+ }
122
+
123
+ /* —— Sidebar —— */
124
+ .sidebar {
125
+ width: 230px;
126
+ flex: none;
127
+ border-right: 1px solid var(--border);
128
+ display: flex;
129
+ flex-direction: column;
130
+ padding: 20px 14px;
131
+ background: var(--bg);
132
+ min-height: 0;
133
+ }
134
+
135
+ .sidebar-brand {
136
+ padding: 0 8px;
137
+ }
138
+
139
+ .brand-logo {
140
+ display: block;
141
+ height: 38px;
142
+ width: auto;
143
+ max-width: 100%;
144
+ object-fit: contain;
145
+ object-position: left center;
146
+ }
147
+
148
+ /* Wordmark uses dark fills — invert preserves purple via hue-rotate */
149
+ [data-theme="dark"] .brand-logo {
150
+ filter: invert(1) hue-rotate(180deg);
151
+ }
152
+
153
+ .brand-tagline {
154
+ font-size: 11px;
155
+ color: var(--text-muted);
156
+ margin-top: 6px;
157
+ }
158
+
159
+ .sidebar-nav {
160
+ display: flex;
161
+ flex-direction: column;
162
+ gap: 2px;
163
+ margin-top: 22px;
164
+ flex: 1;
165
+ min-height: 0;
166
+ overflow-y: auto;
167
+ }
168
+
169
+ .nav-item {
170
+ display: flex;
171
+ align-items: center;
172
+ gap: 10px;
173
+ width: 100%;
174
+ padding: 8px 10px;
175
+ border: none;
176
+ border-radius: 8px;
177
+ background: transparent;
178
+ color: var(--text);
179
+ font-size: 14px;
180
+ font-weight: 500;
181
+ text-align: left;
182
+ transition: background 0.12s ease, color 0.12s ease;
183
+ }
184
+
185
+ .nav-item:hover {
186
+ background: var(--surface-2);
187
+ }
188
+
189
+ .nav-item.active {
190
+ background: var(--primary-100);
191
+ color: var(--primary);
192
+ font-weight: 600;
193
+ }
194
+
195
+ .nav-icon {
196
+ width: 16px;
197
+ height: 16px;
198
+ flex: none;
199
+ display: inline-flex;
200
+ align-items: center;
201
+ justify-content: center;
202
+ }
203
+
204
+ .nav-label { flex: 1; min-width: 0; }
205
+
206
+ .nav-badge {
207
+ font-size: 11px;
208
+ font-weight: 700;
209
+ border-radius: 999px;
210
+ padding: 1px 8px;
211
+ background: var(--nav-badge-bg);
212
+ color: var(--nav-badge-text);
213
+ }
214
+
215
+ .nav-item.active .nav-badge {
216
+ background: var(--primary);
217
+ color: #fff;
218
+ }
219
+
220
+ .sidebar-footer {
221
+ margin-top: auto;
222
+ display: flex;
223
+ flex-direction: column;
224
+ gap: 12px;
225
+ }
226
+
227
+ .sidebar-divider {
228
+ height: 1px;
229
+ background: var(--border);
230
+ margin: 0 8px;
231
+ }
232
+
233
+ .model-block { padding: 0 8px; }
234
+
235
+ .model-label {
236
+ font-size: 10px;
237
+ letter-spacing: 0.08em;
238
+ text-transform: uppercase;
239
+ color: var(--text-muted);
240
+ margin-bottom: 8px;
241
+ }
242
+
243
+ .model-toggle {
244
+ display: flex;
245
+ gap: 6px;
246
+ }
247
+
248
+ .model-btn {
249
+ flex: 1;
250
+ padding: 8px 0;
251
+ font-size: 12px;
252
+ font-weight: 600;
253
+ border: none;
254
+ border-radius: 8px;
255
+ font-family: inherit;
256
+ background: var(--surface-2);
257
+ color: var(--text);
258
+ cursor: pointer;
259
+ }
260
+
261
+ .model-btn.active {
262
+ background: var(--primary);
263
+ color: var(--btn-on-primary);
264
+ }
265
+
266
+ .repo-meta {
267
+ padding: 0 8px;
268
+ font-size: 12px;
269
+ color: var(--text-muted);
270
+ }
271
+
272
+ .ticket-source-meta {
273
+ margin-top: 6px;
274
+ font-size: 11px;
275
+ color: var(--text-muted);
276
+ }
277
+
278
+ .repo-name {
279
+ color: var(--text);
280
+ font-weight: 500;
281
+ }
282
+
283
+ .repo-status {
284
+ display: flex;
285
+ align-items: center;
286
+ gap: 6px;
287
+ margin-top: 3px;
288
+ }
289
+
290
+ .repo-dot {
291
+ width: 6px;
292
+ height: 6px;
293
+ border-radius: 50%;
294
+ background: var(--green);
295
+ flex: none;
296
+ }
297
+
298
+ /* —— Main —— */
299
+ .main {
300
+ flex: 1;
301
+ display: flex;
302
+ flex-direction: column;
303
+ min-width: 0;
304
+ min-height: 0;
305
+ }
306
+
307
+ .header {
308
+ display: flex;
309
+ align-items: center;
310
+ justify-content: space-between;
311
+ padding: 22px 32px 20px;
312
+ border-bottom: 1px solid var(--border);
313
+ flex-shrink: 0;
314
+ }
315
+
316
+ .header-title {
317
+ font-size: 24px;
318
+ font-weight: 700;
319
+ letter-spacing: -0.01em;
320
+ }
321
+
322
+ .theme-toggle {
323
+ width: 34px;
324
+ height: 34px;
325
+ border-radius: 50%;
326
+ display: flex;
327
+ align-items: center;
328
+ justify-content: center;
329
+ border: 1px solid var(--border);
330
+ background: var(--surface);
331
+ color: var(--text);
332
+ padding: 0;
333
+ }
334
+
335
+ .theme-toggle:hover {
336
+ background: var(--surface-2);
337
+ }
338
+
339
+ .main-scroll {
340
+ flex: 1;
341
+ overflow: auto;
342
+ padding: 28px 32px;
343
+ min-height: 0;
344
+ }
345
+
346
+ .stack {
347
+ display: flex;
348
+ flex-direction: column;
349
+ gap: 12px;
350
+ }
351
+
352
+ .stack-lg { gap: 28px; }
353
+
354
+ .max-w-overview { max-width: 980px; }
355
+ .max-w-runs { max-width: 920px; }
356
+ .max-w-logs { max-width: 1000px; }
357
+ .max-w-settings { max-width: 720px; }
358
+
359
+ .section-label {
360
+ font-size: 11px;
361
+ font-weight: 600;
362
+ letter-spacing: 0.06em;
363
+ text-transform: uppercase;
364
+ color: var(--text-muted);
365
+ margin-bottom: 10px;
366
+ }
367
+
368
+ /* —— Cards / surfaces —— */
369
+ .card {
370
+ background: var(--surface);
371
+ border: 1px solid var(--border);
372
+ border-radius: 12px;
373
+ padding: 16px;
374
+ box-shadow: var(--shadow-sm);
375
+ }
376
+
377
+ .card-flush {
378
+ padding: 0;
379
+ overflow: hidden;
380
+ }
381
+
382
+ .card-success {
383
+ border-color: color-mix(in srgb, var(--green) 35%, var(--border));
384
+ background: color-mix(in srgb, var(--green-100) 60%, var(--surface));
385
+ }
386
+
387
+ .enqueue-card {
388
+ display: flex;
389
+ flex-direction: column;
390
+ gap: 12px;
391
+ }
392
+
393
+ .enqueue-footer {
394
+ display: flex;
395
+ align-items: center;
396
+ justify-content: space-between;
397
+ gap: 12px;
398
+ flex-wrap: wrap;
399
+ }
400
+
401
+ .hint {
402
+ font-size: 12px;
403
+ color: var(--text-muted);
404
+ flex: 1;
405
+ min-width: 160px;
406
+ }
407
+
408
+ .feedback {
409
+ font-size: 12px;
410
+ margin: 0;
411
+ flex: 1;
412
+ min-width: 140px;
413
+ }
414
+
415
+ .feedback.error { color: var(--accent); }
416
+ .feedback.warn { color: var(--amber); }
417
+ .feedback.ok { color: var(--green); }
418
+
419
+ /* —— Stats —— */
420
+ .stats-grid {
421
+ display: grid;
422
+ grid-template-columns: repeat(6, 1fr);
423
+ gap: 14px;
424
+ }
425
+
426
+ .stat-card {
427
+ background: var(--surface);
428
+ border: 1px solid var(--border);
429
+ border-radius: 12px;
430
+ padding: 16px;
431
+ box-shadow: var(--shadow-sm);
432
+ }
433
+
434
+ .stat-label {
435
+ display: flex;
436
+ align-items: center;
437
+ gap: 6px;
438
+ font-size: 11px;
439
+ font-weight: 600;
440
+ letter-spacing: 0.06em;
441
+ text-transform: uppercase;
442
+ }
443
+
444
+ .stat-dot {
445
+ width: 6px;
446
+ height: 6px;
447
+ border-radius: 50%;
448
+ flex: none;
449
+ }
450
+
451
+ .stat-value {
452
+ font-weight: 700;
453
+ font-size: 28px;
454
+ margin-top: 6px;
455
+ letter-spacing: -0.02em;
456
+ font-variant-numeric: tabular-nums;
457
+ }
458
+
459
+ .stat-value-sm {
460
+ font-size: 22px;
461
+ }
462
+
463
+ .stat-hint {
464
+ margin-top: 4px;
465
+ font-size: 11px;
466
+ color: var(--text-muted);
467
+ }
468
+
469
+ /* —— Job rows —— */
470
+ .item-stack {
471
+ display: flex;
472
+ flex-direction: column;
473
+ gap: 10px;
474
+ }
475
+
476
+ .job-row {
477
+ display: flex;
478
+ align-items: center;
479
+ gap: 16px;
480
+ background: var(--surface);
481
+ border: 1px solid var(--border);
482
+ border-radius: 12px;
483
+ padding: 14px 16px;
484
+ box-shadow: var(--shadow-sm);
485
+ }
486
+
487
+ .job-row-queue {
488
+ gap: 14px;
489
+ }
490
+
491
+ .step-dots {
492
+ display: flex;
493
+ gap: 3px;
494
+ flex: none;
495
+ }
496
+
497
+ .step-dot {
498
+ width: 14px;
499
+ height: 4px;
500
+ border-radius: 2px;
501
+ background: var(--border);
502
+ display: inline-block;
503
+ }
504
+
505
+ .step-dot.done { background: var(--green); }
506
+ .step-dot.active {
507
+ background: var(--amber);
508
+ animation: pulse 1.6s ease-in-out infinite;
509
+ }
510
+
511
+ @keyframes pulse {
512
+ 0%, 100% { opacity: 1; }
513
+ 50% { opacity: 0.35; }
514
+ }
515
+
516
+ .job-main { flex: 1; min-width: 0; }
517
+
518
+ .job-title {
519
+ font-size: 14px;
520
+ font-weight: 600;
521
+ overflow: hidden;
522
+ text-overflow: ellipsis;
523
+ white-space: nowrap;
524
+ }
525
+
526
+ .job-sub {
527
+ font-size: 12px;
528
+ color: var(--text-muted);
529
+ margin-top: 2px;
530
+ overflow: hidden;
531
+ text-overflow: ellipsis;
532
+ white-space: nowrap;
533
+ }
534
+
535
+ .job-pos {
536
+ font-size: 12px;
537
+ font-weight: 600;
538
+ width: 16px;
539
+ flex: none;
540
+ color: var(--text-muted);
541
+ }
542
+
543
+ .type-badge {
544
+ font-size: 11px;
545
+ font-weight: 600;
546
+ padding: 3px 10px;
547
+ border-radius: 999px;
548
+ flex: none;
549
+ }
550
+
551
+ .type-badge.bug,
552
+ .type-badge.fix {
553
+ background: var(--accent-100);
554
+ color: var(--accent-800);
555
+ }
556
+
557
+ .type-badge.feature,
558
+ .type-badge.feat {
559
+ background: var(--slate-100);
560
+ color: var(--slate-800);
561
+ }
562
+
563
+ .status-pill {
564
+ font-size: 11px;
565
+ font-weight: 600;
566
+ padding: 3px 10px;
567
+ border-radius: 999px;
568
+ flex: none;
569
+ display: inline-flex;
570
+ align-items: center;
571
+ gap: 5px;
572
+ }
573
+
574
+ .status-pill .dot {
575
+ width: 5px;
576
+ height: 5px;
577
+ border-radius: 50%;
578
+ background: currentColor;
579
+ display: inline-block;
580
+ }
581
+
582
+ .status-pill.running,
583
+ .status-pill.syncing,
584
+ .status-pill.preparing_worktree {
585
+ background: var(--amber-100);
586
+ color: var(--amber-800);
587
+ }
588
+
589
+ .status-pill.queued {
590
+ background: var(--slate-100);
591
+ color: var(--slate);
592
+ }
593
+
594
+ .status-pill.awaiting_review {
595
+ background: var(--primary-100);
596
+ color: var(--primary);
597
+ }
598
+
599
+ .status-pill.pr_opened {
600
+ background: var(--green-100);
601
+ color: var(--green-800);
602
+ }
603
+
604
+ .status-pill.failed {
605
+ background: var(--accent-100);
606
+ color: var(--accent-800);
607
+ }
608
+
609
+ .status-pill.discarded {
610
+ background: var(--slate-100);
611
+ color: var(--slate);
612
+ }
613
+
614
+ .elapsed {
615
+ font-size: 12px;
616
+ color: var(--text-muted);
617
+ flex: none;
618
+ font-variant-numeric: tabular-nums;
619
+ }
620
+
621
+ .usage-chip {
622
+ font-size: 12px;
623
+ color: var(--primary);
624
+ flex: none;
625
+ font-variant-numeric: tabular-nums;
626
+ font-family: 'DM Sans', system-ui, sans-serif;
627
+ white-space: nowrap;
628
+ }
629
+
630
+ .run-usage {
631
+ margin-top: 6px;
632
+ font-size: 12px;
633
+ color: var(--text);
634
+ font-variant-numeric: tabular-nums;
635
+ line-height: 1.4;
636
+ }
637
+
638
+ .run-usage.muted {
639
+ color: var(--text-muted);
640
+ }
641
+
642
+ .btn-remove {
643
+ width: 26px;
644
+ height: 26px;
645
+ flex: none;
646
+ border: none;
647
+ background: transparent;
648
+ cursor: pointer;
649
+ color: var(--text-muted);
650
+ display: flex;
651
+ align-items: center;
652
+ justify-content: center;
653
+ font-size: 15px;
654
+ border-radius: 6px;
655
+ }
656
+
657
+ .btn-remove:hover {
658
+ color: var(--accent);
659
+ background: var(--accent-100);
660
+ }
661
+
662
+ .empty-dashed {
663
+ border: 1px dashed var(--border);
664
+ border-radius: 12px;
665
+ padding: 28px;
666
+ text-align: center;
667
+ font-size: 13px;
668
+ color: var(--text-muted);
669
+ }
670
+
671
+ .empty-inline {
672
+ font-size: 13px;
673
+ color: var(--text-muted);
674
+ padding: 8px 0;
675
+ margin: 0;
676
+ }
677
+
678
+ /* —— Forms —— */
679
+ .input {
680
+ width: 100%;
681
+ min-height: 38px;
682
+ padding: 9px 11px;
683
+ font: inherit;
684
+ font-size: 14px;
685
+ color: var(--text);
686
+ background: var(--surface);
687
+ border: 1px solid var(--border);
688
+ border-radius: 8px;
689
+ transition: border-color 0.12s ease;
690
+ }
691
+
692
+ .input:hover { border-color: color-mix(in srgb, var(--text) 20%, var(--border)); }
693
+
694
+ .input:focus-visible {
695
+ border-color: var(--primary);
696
+ outline: 2px solid var(--primary);
697
+ outline-offset: 0;
698
+ }
699
+
700
+ .textarea {
701
+ min-height: 70px;
702
+ resize: vertical;
703
+ line-height: 1.5;
704
+ }
705
+
706
+ .textarea::placeholder { color: var(--text-muted); }
707
+
708
+ .input-title {
709
+ font-size: 15px;
710
+ font-weight: 600;
711
+ background: var(--surface-2);
712
+ }
713
+
714
+ .field-label {
715
+ font-size: 11px;
716
+ font-weight: 600;
717
+ letter-spacing: 0.06em;
718
+ text-transform: uppercase;
719
+ color: var(--text-muted);
720
+ margin-bottom: 6px;
721
+ }
722
+
723
+ .field-label-spaced { margin-top: 14px; }
724
+
725
+ .field-inline {
726
+ display: inline-flex;
727
+ align-items: center;
728
+ gap: 10px;
729
+ }
730
+
731
+ .field-inline-label {
732
+ font-size: 11px;
733
+ letter-spacing: 0.06em;
734
+ text-transform: uppercase;
735
+ color: var(--text-muted);
736
+ font-weight: 600;
737
+ }
738
+
739
+ .select-sm {
740
+ width: auto;
741
+ min-width: 180px;
742
+ background: var(--surface-2);
743
+ }
744
+
745
+ /* —— Buttons —— */
746
+ .btn {
747
+ display: inline-flex;
748
+ align-items: center;
749
+ justify-content: center;
750
+ gap: 6px;
751
+ text-decoration: none;
752
+ font-family: inherit;
753
+ font-weight: 600;
754
+ font-size: 14px;
755
+ line-height: 1.2;
756
+ border: none;
757
+ border-radius: 8px;
758
+ padding: 9px 16px;
759
+ min-height: 36px;
760
+ cursor: pointer;
761
+ transition: background 0.12s ease, border-color 0.12s ease, opacity 0.12s ease;
762
+ }
763
+
764
+ .btn:disabled {
765
+ opacity: 0.45;
766
+ cursor: not-allowed;
767
+ }
768
+
769
+ .btn-sm {
770
+ min-height: 32px;
771
+ padding: 6px 12px;
772
+ font-size: 12px;
773
+ }
774
+
775
+ .btn-primary {
776
+ background: var(--primary);
777
+ color: var(--btn-on-primary);
778
+ }
779
+
780
+ .btn-primary:hover:not(:disabled) {
781
+ background: var(--primary-hover);
782
+ }
783
+
784
+ .btn-secondary {
785
+ background: var(--surface);
786
+ border: 1px solid var(--border);
787
+ color: var(--text);
788
+ }
789
+
790
+ .btn-secondary:hover:not(:disabled) {
791
+ background: var(--surface-2);
792
+ }
793
+
794
+ .btn-warn {
795
+ background: var(--amber-100);
796
+ color: var(--amber-800);
797
+ }
798
+
799
+ .btn-danger-text {
800
+ background: transparent;
801
+ color: var(--accent);
802
+ padding: 10px 12px;
803
+ }
804
+
805
+ .btn-danger-text:hover:not(:disabled) {
806
+ background: var(--accent-100);
807
+ }
808
+
809
+ .btn-muted-text {
810
+ background: transparent;
811
+ color: var(--text-muted);
812
+ padding: 10px 12px;
813
+ }
814
+
815
+ .btn-muted-text:hover:not(:disabled) {
816
+ color: var(--text);
817
+ background: var(--surface-2);
818
+ }
819
+
820
+ .btn-link {
821
+ background: transparent;
822
+ border: none;
823
+ color: var(--primary);
824
+ font-size: 12px;
825
+ font-weight: 600;
826
+ cursor: pointer;
827
+ padding: 0;
828
+ min-height: auto;
829
+ }
830
+
831
+ .actions {
832
+ display: flex;
833
+ gap: 10px;
834
+ flex-wrap: wrap;
835
+ align-items: center;
836
+ }
837
+
838
+ /* —— Runs cards —— */
839
+ .run-card {
840
+ background: var(--surface);
841
+ border: 1px solid var(--border);
842
+ border-radius: 12px;
843
+ padding: 18px 20px;
844
+ box-shadow: var(--shadow-sm);
845
+ display: flex;
846
+ flex-direction: column;
847
+ gap: 12px;
848
+ cursor: pointer;
849
+ text-align: left;
850
+ width: 100%;
851
+ color: inherit;
852
+ font: inherit;
853
+ }
854
+
855
+ .run-card:hover {
856
+ border-color: color-mix(in srgb, var(--primary) 35%, var(--border));
857
+ }
858
+
859
+ .run-card.selected {
860
+ border-color: var(--primary);
861
+ box-shadow: 0 0 0 1px var(--primary), var(--shadow-sm);
862
+ }
863
+
864
+ .run-card-top {
865
+ display: flex;
866
+ align-items: center;
867
+ gap: 12px;
868
+ }
869
+
870
+ .run-now {
871
+ font-size: 13px;
872
+ padding: 8px 12px;
873
+ background: var(--surface-2);
874
+ border-radius: 8px;
875
+ display: flex;
876
+ align-items: center;
877
+ gap: 8px;
878
+ }
879
+
880
+ .run-now-label { color: var(--text-muted); }
881
+
882
+ .run-log-preview {
883
+ background: var(--surface-2);
884
+ border-radius: 8px;
885
+ padding: 10px 12px;
886
+ font-family: "JetBrains Mono", ui-monospace, monospace;
887
+ font-size: 12px;
888
+ line-height: 1.7;
889
+ color: var(--text-muted);
890
+ max-height: 110px;
891
+ overflow: auto;
892
+ }
893
+
894
+ .run-detail {
895
+ display: flex;
896
+ flex-direction: column;
897
+ gap: 12px;
898
+ border-top: 1px solid var(--border-soft);
899
+ padding-top: 12px;
900
+ }
901
+
902
+ .log-pane-wrap {
903
+ position: relative;
904
+ }
905
+
906
+ .log-pane {
907
+ background: var(--surface-2);
908
+ border-radius: 8px;
909
+ padding: 8px 10px;
910
+ max-height: 360px;
911
+ overflow-y: auto;
912
+ font-size: 12.5px;
913
+ line-height: 1.55;
914
+ }
915
+
916
+ .log-jump-latest {
917
+ position: absolute;
918
+ right: 12px;
919
+ bottom: 10px;
920
+ z-index: 1;
921
+ background: var(--surface);
922
+ border: 1px solid var(--border);
923
+ color: var(--text);
924
+ border-radius: 8px;
925
+ padding: 6px 12px;
926
+ font-family: inherit;
927
+ font-size: 12px;
928
+ font-weight: 600;
929
+ line-height: 1.2;
930
+ box-shadow: 0 4px 14px color-mix(in srgb, var(--text) 12%, transparent);
931
+ cursor: pointer;
932
+ transition: background 0.12s ease, border-color 0.12s ease;
933
+ }
934
+
935
+ .log-jump-latest:hover {
936
+ background: var(--surface-2);
937
+ }
938
+
939
+ .log-line {
940
+ display: grid;
941
+ grid-template-columns: 58px 1fr;
942
+ gap: 10px;
943
+ padding: 5px 6px;
944
+ border-radius: 6px;
945
+ border-left: 2px solid transparent;
946
+ }
947
+
948
+ .log-line:hover { background: color-mix(in srgb, var(--text) 3%, transparent); }
949
+
950
+ .log-ts {
951
+ color: var(--text-muted);
952
+ font-family: "JetBrains Mono", ui-monospace, monospace;
953
+ font-size: 11px;
954
+ font-variant-numeric: tabular-nums;
955
+ padding-top: 1px;
956
+ }
957
+
958
+ .log-body { min-width: 0; }
959
+
960
+ .log-primary {
961
+ display: flex;
962
+ flex-wrap: wrap;
963
+ align-items: baseline;
964
+ gap: 6px 10px;
965
+ }
966
+
967
+ .log-kind {
968
+ flex: none;
969
+ font-size: 10px;
970
+ font-weight: 600;
971
+ letter-spacing: 0.05em;
972
+ text-transform: uppercase;
973
+ color: var(--text-muted);
974
+ min-width: 4.5em;
975
+ }
976
+
977
+ .log-msg {
978
+ color: var(--text);
979
+ word-break: break-word;
980
+ flex: 1;
981
+ min-width: 0;
982
+ }
983
+
984
+ .log-line.is-tool { border-left-color: var(--amber); }
985
+ .log-line.is-tool .log-kind { color: var(--amber); }
986
+ .log-line.is-tool .log-msg {
987
+ font-family: "JetBrains Mono", ui-monospace, monospace;
988
+ font-size: 12px;
989
+ color: var(--amber-800);
990
+ }
991
+
992
+ .log-line.is-thinking { border-left-color: var(--slate); }
993
+ .log-line.is-thinking .log-msg {
994
+ color: var(--text-muted);
995
+ font-style: italic;
996
+ }
997
+
998
+ .log-line.is-result { border-left-color: var(--primary); }
999
+ .log-line.is-result .log-msg {
1000
+ font-family: "JetBrains Mono", ui-monospace, monospace;
1001
+ font-size: 12px;
1002
+ }
1003
+
1004
+ .log-line.is-success { border-left-color: var(--green); }
1005
+ .log-line.is-success .log-kind,
1006
+ .log-line.is-success .log-msg { color: var(--green-800); }
1007
+
1008
+ .log-line.is-error {
1009
+ border-left-color: var(--accent);
1010
+ background: var(--accent-100);
1011
+ }
1012
+ .log-line.is-error .log-kind,
1013
+ .log-line.is-error .log-msg { color: var(--accent-800); }
1014
+
1015
+ .log-raw { margin-top: 4px; }
1016
+
1017
+ .log-raw > summary {
1018
+ cursor: pointer;
1019
+ font-size: 11px;
1020
+ color: var(--text-muted);
1021
+ font-weight: 500;
1022
+ letter-spacing: 0.04em;
1023
+ text-transform: uppercase;
1024
+ list-style: none;
1025
+ user-select: none;
1026
+ width: fit-content;
1027
+ }
1028
+
1029
+ .log-raw > summary::-webkit-details-marker { display: none; }
1030
+ .log-raw > summary::before { content: "▸ "; }
1031
+ .log-raw[open] > summary::before { content: "▾ "; }
1032
+ .log-raw > summary:hover { color: var(--text); }
1033
+
1034
+ .log-raw-pre {
1035
+ margin: 6px 0 4px;
1036
+ padding: 10px 12px;
1037
+ background: var(--bg);
1038
+ border: 1px solid var(--border);
1039
+ border-radius: 6px;
1040
+ font-family: "JetBrains Mono", ui-monospace, monospace;
1041
+ font-size: 11px;
1042
+ line-height: 1.5;
1043
+ color: var(--text-muted);
1044
+ overflow: auto;
1045
+ max-height: 240px;
1046
+ white-space: pre-wrap;
1047
+ word-break: break-word;
1048
+ }
1049
+
1050
+ /* —— Review —— */
1051
+ .review-toolbar {
1052
+ display: flex;
1053
+ flex-wrap: wrap;
1054
+ align-items: center;
1055
+ gap: 12px 16px;
1056
+ margin-bottom: 16px;
1057
+ }
1058
+
1059
+ .review-filters {
1060
+ display: flex;
1061
+ flex-wrap: wrap;
1062
+ gap: 6px;
1063
+ }
1064
+
1065
+ .filter-chip {
1066
+ display: inline-flex;
1067
+ align-items: center;
1068
+ gap: 6px;
1069
+ border: 1px solid var(--border);
1070
+ background: var(--surface);
1071
+ color: var(--text-muted);
1072
+ font-family: inherit;
1073
+ font-size: 12px;
1074
+ font-weight: 600;
1075
+ padding: 6px 11px;
1076
+ border-radius: 999px;
1077
+ cursor: pointer;
1078
+ transition: background 0.12s ease, border-color 0.12s ease, color 0.12s ease;
1079
+ }
1080
+
1081
+ .filter-chip:hover {
1082
+ background: var(--surface-2);
1083
+ color: var(--text);
1084
+ }
1085
+
1086
+ .filter-chip[aria-selected="true"] {
1087
+ background: var(--primary-100);
1088
+ border-color: transparent;
1089
+ color: var(--primary);
1090
+ }
1091
+
1092
+ .filter-chip-count {
1093
+ font-variant-numeric: tabular-nums;
1094
+ font-weight: 600;
1095
+ opacity: 0.75;
1096
+ min-width: 0.75em;
1097
+ }
1098
+
1099
+ .filter-chip-count:empty {
1100
+ display: none;
1101
+ }
1102
+
1103
+ .review-search {
1104
+ flex: 1 1 200px;
1105
+ min-width: 180px;
1106
+ max-width: 320px;
1107
+ min-height: 34px;
1108
+ padding: 7px 11px;
1109
+ font-size: 13px;
1110
+ background: var(--surface);
1111
+ }
1112
+
1113
+ .review-layout {
1114
+ display: grid;
1115
+ grid-template-columns: 260px 1fr;
1116
+ gap: 20px;
1117
+ align-items: start;
1118
+ }
1119
+
1120
+ .review-sidebar {
1121
+ display: flex;
1122
+ flex-direction: column;
1123
+ gap: 8px;
1124
+ }
1125
+
1126
+ .review-pick {
1127
+ text-align: left;
1128
+ border: none;
1129
+ cursor: pointer;
1130
+ font-family: inherit;
1131
+ padding: 12px 14px;
1132
+ border-radius: 10px;
1133
+ background: transparent;
1134
+ color: var(--text);
1135
+ width: 100%;
1136
+ }
1137
+
1138
+ .review-pick:hover { background: var(--surface-2); }
1139
+
1140
+ .review-pick.selected { background: var(--surface-2); }
1141
+
1142
+ .review-pick-title {
1143
+ font-size: 13px;
1144
+ font-weight: 600;
1145
+ }
1146
+
1147
+ .review-pick-sub {
1148
+ font-size: 11px;
1149
+ color: var(--text-muted);
1150
+ margin-top: 3px;
1151
+ }
1152
+
1153
+ .review-detail {
1154
+ display: flex;
1155
+ flex-direction: column;
1156
+ gap: 20px;
1157
+ min-width: 0;
1158
+ }
1159
+
1160
+ .pr-opened-line {
1161
+ font-size: 14px;
1162
+ margin-bottom: 12px;
1163
+ }
1164
+
1165
+ /* —— Review file selection —— */
1166
+ .review-files-header {
1167
+ display: flex;
1168
+ align-items: baseline;
1169
+ justify-content: space-between;
1170
+ gap: 12px;
1171
+ flex-wrap: wrap;
1172
+ }
1173
+
1174
+ .review-files-header .field-label {
1175
+ margin: 0;
1176
+ }
1177
+
1178
+ .review-files-count {
1179
+ font-size: 12px;
1180
+ color: var(--text-muted);
1181
+ }
1182
+
1183
+ .review-files-toolbar {
1184
+ display: flex;
1185
+ gap: 4px;
1186
+ margin: 10px 0 8px;
1187
+ flex-wrap: wrap;
1188
+ }
1189
+
1190
+ .review-files-list {
1191
+ display: flex;
1192
+ flex-direction: column;
1193
+ gap: 6px;
1194
+ max-height: 220px;
1195
+ overflow-y: auto;
1196
+ }
1197
+
1198
+ .review-file-check {
1199
+ display: flex;
1200
+ align-items: flex-start;
1201
+ gap: 10px;
1202
+ padding: 8px 10px;
1203
+ border: 1px solid var(--border);
1204
+ border-radius: 8px;
1205
+ background: var(--surface-2);
1206
+ font-size: 12.5px;
1207
+ font-family: "JetBrains Mono", ui-monospace, monospace;
1208
+ cursor: pointer;
1209
+ user-select: none;
1210
+ word-break: break-all;
1211
+ }
1212
+
1213
+ .review-file-check:has(input:not(:checked)) {
1214
+ opacity: 0.55;
1215
+ }
1216
+
1217
+ .review-file-check:has(input:checked) {
1218
+ border-color: color-mix(in srgb, var(--primary) 40%, var(--border));
1219
+ }
1220
+
1221
+ .review-file-check input {
1222
+ accent-color: var(--primary);
1223
+ width: 14px;
1224
+ height: 14px;
1225
+ margin: 2px 0 0;
1226
+ flex-shrink: 0;
1227
+ }
1228
+
1229
+ .review-files-empty {
1230
+ font-size: 13px;
1231
+ color: var(--text-muted);
1232
+ padding: 8px 0;
1233
+ }
1234
+
1235
+ /* —— Diff (side-by-side, GitHub-style column panes) —— */
1236
+ .diff-viewer {
1237
+ border: 1px solid var(--border);
1238
+ border-radius: 10px;
1239
+ font-family: "JetBrains Mono", ui-monospace, monospace;
1240
+ font-size: 12.5px;
1241
+ overflow: hidden;
1242
+ max-height: min(48vh, 520px);
1243
+ overflow-y: auto;
1244
+ background: var(--surface);
1245
+ }
1246
+
1247
+ .diff-file + .diff-file {
1248
+ border-top: 1px solid var(--border);
1249
+ }
1250
+
1251
+ .diff-file-header {
1252
+ background: var(--surface-2);
1253
+ padding: 8px 12px;
1254
+ font-size: 12px;
1255
+ color: var(--text-muted);
1256
+ border-bottom: 1px solid var(--border);
1257
+ position: sticky;
1258
+ top: 0;
1259
+ z-index: 2;
1260
+ }
1261
+
1262
+ .diff-hunk-meta {
1263
+ color: var(--text-muted);
1264
+ padding: 4px 12px;
1265
+ background: var(--surface-2);
1266
+ font-size: 11px;
1267
+ border-bottom: 1px solid var(--border);
1268
+ }
1269
+
1270
+ /* Two columns: old (left) | new (right); each pane scrolls horizontally */
1271
+ .diff-split {
1272
+ display: flex;
1273
+ align-items: stretch;
1274
+ min-width: 0;
1275
+ }
1276
+
1277
+ .diff-pane {
1278
+ flex: 1 1 50%;
1279
+ min-width: 0;
1280
+ overflow-x: auto;
1281
+ overflow-y: hidden;
1282
+ }
1283
+
1284
+ .diff-pane-right {
1285
+ border-left: 1px solid var(--border);
1286
+ }
1287
+
1288
+ .diff-line {
1289
+ padding: 1px 8px;
1290
+ white-space: pre;
1291
+ min-height: 18px;
1292
+ line-height: 18px;
1293
+ box-sizing: border-box;
1294
+ width: max-content;
1295
+ min-width: 100%;
1296
+ }
1297
+
1298
+ .diff-line-empty {
1299
+ background: color-mix(in srgb, var(--surface-2) 40%, transparent);
1300
+ }
1301
+
1302
+ .diff-ln {
1303
+ opacity: 0.4;
1304
+ display: inline-block;
1305
+ width: 26px;
1306
+ user-select: none;
1307
+ }
1308
+
1309
+ .diff-line.del {
1310
+ background: var(--diff-del-bg);
1311
+ color: var(--diff-del-fg);
1312
+ }
1313
+
1314
+ .diff-line.add {
1315
+ background: var(--diff-add-bg);
1316
+ color: var(--diff-add-fg);
1317
+ }
1318
+
1319
+ .diff-unified .diff-line-u {
1320
+ display: flex;
1321
+ padding: 0 12px;
1322
+ white-space: pre;
1323
+ min-height: 18px;
1324
+ }
1325
+
1326
+ .diff-unified .diff-gutter {
1327
+ width: 18px;
1328
+ flex: none;
1329
+ color: var(--text-muted);
1330
+ user-select: none;
1331
+ }
1332
+
1333
+ .diff-unified .diff-add {
1334
+ background: var(--diff-add-bg);
1335
+ color: var(--diff-add-fg);
1336
+ }
1337
+
1338
+ .diff-unified .diff-del {
1339
+ background: var(--diff-del-bg);
1340
+ color: var(--diff-del-fg);
1341
+ }
1342
+
1343
+ .diff-unified .diff-meta { color: var(--text-muted); }
1344
+
1345
+ /* —— Review comments on diff —— */
1346
+ .diff-line.commentable {
1347
+ position: relative;
1348
+ padding-left: 22px;
1349
+ cursor: pointer;
1350
+ }
1351
+
1352
+ .diff-line.commentable:hover {
1353
+ outline: 1px solid color-mix(in srgb, var(--primary) 35%, transparent);
1354
+ outline-offset: -1px;
1355
+ z-index: 0;
1356
+ }
1357
+
1358
+ .diff-add-comment {
1359
+ position: absolute;
1360
+ left: 2px;
1361
+ top: 50%;
1362
+ transform: translateY(-50%);
1363
+ width: 16px;
1364
+ height: 16px;
1365
+ border: none;
1366
+ border-radius: 4px;
1367
+ background: var(--primary);
1368
+ color: #fff;
1369
+ font-size: 12px;
1370
+ font-weight: 700;
1371
+ line-height: 1;
1372
+ padding: 0;
1373
+ cursor: pointer;
1374
+ opacity: 0;
1375
+ display: flex;
1376
+ align-items: center;
1377
+ justify-content: center;
1378
+ font-family: inherit;
1379
+ }
1380
+
1381
+ .diff-line.commentable:hover .diff-add-comment,
1382
+ .diff-line.commentable:focus-within .diff-add-comment {
1383
+ opacity: 1;
1384
+ }
1385
+
1386
+ .diff-inline-thread {
1387
+ border-top: 1px solid var(--border);
1388
+ border-bottom: 1px solid var(--border);
1389
+ background: color-mix(in srgb, var(--primary-100) 55%, var(--surface));
1390
+ padding: 10px 12px;
1391
+ display: flex;
1392
+ flex-direction: column;
1393
+ gap: 8px;
1394
+ }
1395
+
1396
+ .diff-inline-meta {
1397
+ font-size: 11px;
1398
+ color: var(--text-muted);
1399
+ font-family: "DM Sans", system-ui, sans-serif;
1400
+ }
1401
+
1402
+ .diff-inline-form {
1403
+ display: flex;
1404
+ flex-direction: column;
1405
+ gap: 8px;
1406
+ }
1407
+
1408
+ .diff-inline-form textarea {
1409
+ min-height: 64px;
1410
+ font-family: "DM Sans", system-ui, sans-serif;
1411
+ font-size: 13px;
1412
+ }
1413
+
1414
+ .diff-inline-actions {
1415
+ display: flex;
1416
+ gap: 8px;
1417
+ flex-wrap: wrap;
1418
+ }
1419
+
1420
+ .diff-pending-chip {
1421
+ border: 1px solid color-mix(in srgb, var(--primary) 30%, var(--border));
1422
+ background: var(--surface);
1423
+ border-radius: 8px;
1424
+ padding: 8px 10px;
1425
+ font-family: "DM Sans", system-ui, sans-serif;
1426
+ font-size: 12px;
1427
+ }
1428
+
1429
+ .diff-pending-chip-path {
1430
+ font-weight: 600;
1431
+ color: var(--primary);
1432
+ margin-bottom: 4px;
1433
+ }
1434
+
1435
+ .diff-pending-chip-body {
1436
+ color: var(--text);
1437
+ white-space: pre-wrap;
1438
+ }
1439
+
1440
+ .diff-pending-chip-actions {
1441
+ margin-top: 6px;
1442
+ }
1443
+
1444
+ .review-pending-list {
1445
+ display: flex;
1446
+ flex-direction: column;
1447
+ gap: 8px;
1448
+ min-height: 28px;
1449
+ }
1450
+
1451
+ .review-pending-empty {
1452
+ font-size: 12px;
1453
+ color: var(--text-muted);
1454
+ }
1455
+
1456
+ .review-pending-item {
1457
+ display: flex;
1458
+ gap: 10px;
1459
+ align-items: flex-start;
1460
+ justify-content: space-between;
1461
+ border: 1px solid var(--border);
1462
+ border-radius: 8px;
1463
+ padding: 8px 10px;
1464
+ background: var(--surface-2);
1465
+ }
1466
+
1467
+ .review-pending-item-main {
1468
+ min-width: 0;
1469
+ flex: 1;
1470
+ }
1471
+
1472
+ .review-pending-item-loc {
1473
+ font-size: 11px;
1474
+ font-weight: 600;
1475
+ color: var(--primary);
1476
+ margin-bottom: 3px;
1477
+ font-family: "JetBrains Mono", ui-monospace, monospace;
1478
+ }
1479
+
1480
+ .review-pending-item-body {
1481
+ font-size: 13px;
1482
+ white-space: pre-wrap;
1483
+ word-break: break-word;
1484
+ }
1485
+
1486
+ /* —— Logs table —— */
1487
+ .log-table-card { overflow: hidden; }
1488
+
1489
+ .log-toolbar {
1490
+ padding: 12px 14px;
1491
+ border-bottom: 1px solid var(--border);
1492
+ }
1493
+
1494
+ .table-wrap { overflow: auto; }
1495
+
1496
+ .log-table {
1497
+ width: 100%;
1498
+ border-collapse: collapse;
1499
+ font-size: 13px;
1500
+ }
1501
+
1502
+ .log-table th {
1503
+ text-align: left;
1504
+ font-size: 11px;
1505
+ font-weight: 600;
1506
+ letter-spacing: 0.06em;
1507
+ text-transform: uppercase;
1508
+ color: var(--text-muted);
1509
+ padding: 10px 14px;
1510
+ border-bottom: 1px solid var(--border);
1511
+ }
1512
+
1513
+ .log-table td {
1514
+ padding: 10px 14px;
1515
+ border-bottom: 1px solid var(--border-soft);
1516
+ vertical-align: top;
1517
+ }
1518
+
1519
+ .log-table td.time {
1520
+ color: var(--text-muted);
1521
+ white-space: nowrap;
1522
+ font-variant-numeric: tabular-nums;
1523
+ }
1524
+
1525
+ .log-table td.job {
1526
+ font-family: "JetBrains Mono", ui-monospace, monospace;
1527
+ }
1528
+
1529
+ .log-table td.event { font-weight: 600; }
1530
+
1531
+ .log-table td.detail { color: var(--text-muted); max-width: 420px; }
1532
+
1533
+ /* —— Alerts —— */
1534
+ .alert-card {
1535
+ background: var(--surface);
1536
+ border: 1px solid var(--border);
1537
+ border-radius: 12px;
1538
+ padding: 16px 18px;
1539
+ box-shadow: var(--shadow-sm);
1540
+ display: flex;
1541
+ gap: 14px;
1542
+ align-items: flex-start;
1543
+ }
1544
+
1545
+ .alert-icon {
1546
+ color: var(--accent);
1547
+ flex: none;
1548
+ font-size: 18px;
1549
+ line-height: 1;
1550
+ }
1551
+
1552
+ .alert-body { flex: 1; min-width: 0; }
1553
+
1554
+ .alert-title {
1555
+ font-size: 14px;
1556
+ font-weight: 600;
1557
+ }
1558
+
1559
+ .alert-meta {
1560
+ font-size: 12px;
1561
+ color: var(--text-muted);
1562
+ margin-top: 2px;
1563
+ }
1564
+
1565
+ .alert-message {
1566
+ font-family: "JetBrains Mono", ui-monospace, monospace;
1567
+ font-size: 12px;
1568
+ margin-top: 8px;
1569
+ padding: 8px 10px;
1570
+ background: var(--surface-2);
1571
+ border-radius: 6px;
1572
+ word-break: break-word;
1573
+ }
1574
+
1575
+ .alert-actions {
1576
+ display: flex;
1577
+ gap: 8px;
1578
+ flex: none;
1579
+ flex-wrap: wrap;
1580
+ }
1581
+
1582
+ .error-banner {
1583
+ padding: 10px 12px;
1584
+ background: var(--accent-100);
1585
+ color: var(--accent-800);
1586
+ border-radius: 8px;
1587
+ font-size: 13px;
1588
+ }
1589
+
1590
+ .pr-banner {
1591
+ display: flex;
1592
+ align-items: center;
1593
+ justify-content: space-between;
1594
+ gap: 12px;
1595
+ flex-wrap: wrap;
1596
+ padding: 10px 12px;
1597
+ background: var(--green-100);
1598
+ color: var(--green-800);
1599
+ border-radius: 8px;
1600
+ font-size: 13px;
1601
+ }
1602
+
1603
+ /* —— Scrollbars —— */
1604
+ .amcp-scroll::-webkit-scrollbar { width: 8px; height: 8px; }
1605
+ .amcp-scroll::-webkit-scrollbar-thumb {
1606
+ background: var(--border);
1607
+ border-radius: 8px;
1608
+ }
1609
+
1610
+ /* —— Responsive —— */
1611
+ @media (max-width: 960px) {
1612
+ .app {
1613
+ flex-direction: column;
1614
+ height: auto;
1615
+ min-height: 100vh;
1616
+ overflow: auto;
1617
+ }
1618
+
1619
+ body { overflow: auto; }
1620
+
1621
+ .sidebar {
1622
+ width: 100%;
1623
+ border-right: none;
1624
+ border-bottom: 1px solid var(--border);
1625
+ padding: 14px;
1626
+ }
1627
+
1628
+ .sidebar-nav {
1629
+ flex-direction: row;
1630
+ flex-wrap: wrap;
1631
+ margin-top: 14px;
1632
+ }
1633
+
1634
+ .sidebar-footer {
1635
+ flex-direction: row;
1636
+ flex-wrap: wrap;
1637
+ align-items: center;
1638
+ gap: 16px;
1639
+ }
1640
+
1641
+ .sidebar-divider { display: none; }
1642
+
1643
+ .main-scroll { padding: 20px 16px; }
1644
+
1645
+ .header { padding: 16px; }
1646
+
1647
+ .stats-grid {
1648
+ grid-template-columns: repeat(3, 1fr);
1649
+ }
1650
+
1651
+ .review-layout {
1652
+ grid-template-columns: 1fr;
1653
+ }
1654
+
1655
+ .review-toolbar {
1656
+ flex-direction: column;
1657
+ align-items: stretch;
1658
+ }
1659
+
1660
+ .review-search {
1661
+ max-width: none;
1662
+ }
1663
+
1664
+ .job-row {
1665
+ flex-wrap: wrap;
1666
+ gap: 10px;
1667
+ }
1668
+ }
1669
+
1670
+ @media (max-width: 520px) {
1671
+ .stats-grid { grid-template-columns: repeat(2, 1fr); }
1672
+ }
1673
+
1674
+ /* —— Settings —— */
1675
+ .settings-lead {
1676
+ margin: 0 0 14px;
1677
+ font-size: 13px;
1678
+ color: var(--text-muted);
1679
+ line-height: 1.5;
1680
+ }
1681
+
1682
+ .settings-lead code,
1683
+ .field-hint code {
1684
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
1685
+ font-size: 12px;
1686
+ padding: 1px 5px;
1687
+ border-radius: 4px;
1688
+ background: var(--surface-2);
1689
+ }
1690
+
1691
+ .settings-card {
1692
+ display: flex;
1693
+ flex-direction: column;
1694
+ gap: 18px;
1695
+ }
1696
+
1697
+ .settings-grid {
1698
+ display: grid;
1699
+ grid-template-columns: 1fr 1fr;
1700
+ gap: 16px 18px;
1701
+ }
1702
+
1703
+ .settings-field-full {
1704
+ grid-column: 1 / -1;
1705
+ }
1706
+
1707
+ .field-hint {
1708
+ margin: 6px 0 0;
1709
+ font-size: 12px;
1710
+ color: var(--text-muted);
1711
+ line-height: 1.4;
1712
+ }
1713
+
1714
+ .tools-grid {
1715
+ display: flex;
1716
+ flex-wrap: wrap;
1717
+ gap: 8px;
1718
+ }
1719
+
1720
+ .tool-check {
1721
+ display: inline-flex;
1722
+ align-items: center;
1723
+ gap: 8px;
1724
+ padding: 8px 12px;
1725
+ border: 1px solid var(--border);
1726
+ border-radius: 8px;
1727
+ background: var(--surface-2);
1728
+ font-size: 13px;
1729
+ font-weight: 500;
1730
+ cursor: pointer;
1731
+ user-select: none;
1732
+ }
1733
+
1734
+ .tool-check:has(input:checked) {
1735
+ border-color: color-mix(in srgb, var(--primary) 45%, var(--border));
1736
+ background: var(--primary-100);
1737
+ color: var(--primary);
1738
+ }
1739
+
1740
+ .tool-check input {
1741
+ accent-color: var(--primary);
1742
+ width: 14px;
1743
+ height: 14px;
1744
+ margin: 0;
1745
+ }
1746
+
1747
+ .settings-footer {
1748
+ display: flex;
1749
+ align-items: center;
1750
+ justify-content: flex-end;
1751
+ gap: 14px;
1752
+ flex-wrap: wrap;
1753
+ }
1754
+
1755
+ .settings-footer .feedback {
1756
+ margin: 0;
1757
+ margin-right: auto;
1758
+ }
1759
+
1760
+ @media (max-width: 640px) {
1761
+ .settings-grid {
1762
+ grid-template-columns: 1fr;
1763
+ }
1764
+ }
1765
+
1766
+ /* Ticket source + Jira connect */
1767
+ .source-toggle {
1768
+ display: flex;
1769
+ gap: 6px;
1770
+ max-width: 360px;
1771
+ }
1772
+
1773
+ .source-btn {
1774
+ flex: 1;
1775
+ padding: 10px 12px;
1776
+ font-size: 13px;
1777
+ font-weight: 600;
1778
+ border: 1px solid var(--border);
1779
+ border-radius: 8px;
1780
+ font-family: inherit;
1781
+ background: var(--surface-2);
1782
+ color: var(--text);
1783
+ cursor: pointer;
1784
+ }
1785
+
1786
+ .source-btn.active {
1787
+ background: var(--primary);
1788
+ color: var(--btn-on-primary);
1789
+ border-color: var(--primary);
1790
+ }
1791
+
1792
+ .jira-panel {
1793
+ display: flex;
1794
+ flex-direction: column;
1795
+ gap: 16px;
1796
+ padding-top: 4px;
1797
+ border-top: 1px solid var(--border);
1798
+ }
1799
+
1800
+ .jira-panel.hidden {
1801
+ display: none;
1802
+ }
1803
+
1804
+ .jira-actions {
1805
+ display: flex;
1806
+ align-items: center;
1807
+ gap: 12px;
1808
+ flex-wrap: wrap;
1809
+ }
1810
+
1811
+ .jira-status {
1812
+ font-size: 13px;
1813
+ color: var(--text-muted);
1814
+ }
1815
+
1816
+ .jira-status.ok {
1817
+ color: var(--success, #1a7f4b);
1818
+ }
1819
+
1820
+ .jira-status.err {
1821
+ color: var(--danger, #b42318);
1822
+ }
1823
+
1824
+ .rules-heading {
1825
+ font-size: 12px;
1826
+ font-weight: 700;
1827
+ letter-spacing: 0.06em;
1828
+ text-transform: uppercase;
1829
+ color: var(--text-muted);
1830
+ }
1831
+
1832
+ .rules-block {
1833
+ display: flex;
1834
+ flex-direction: column;
1835
+ gap: 10px;
1836
+ padding-top: 4px;
1837
+ }
1838
+
1839
+ .rule-toggle {
1840
+ display: inline-flex;
1841
+ align-items: center;
1842
+ gap: 10px;
1843
+ font-size: 13px;
1844
+ font-weight: 500;
1845
+ color: var(--text);
1846
+ cursor: pointer;
1847
+ }
1848
+
1849
+ .rule-toggle input {
1850
+ width: 16px;
1851
+ height: 16px;
1852
+ accent-color: var(--primary);
1853
+ }
1854
+
1855
+ .issue-ref-badge {
1856
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
1857
+ font-size: 11px;
1858
+ font-weight: 500;
1859
+ padding: 2px 7px;
1860
+ border-radius: 6px;
1861
+ background: var(--surface-2);
1862
+ color: var(--text-muted);
1863
+ border: 1px solid var(--border);
1864
+ white-space: nowrap;
1865
+ }
1866
+
1867
+ .issue-ref-badge.jira {
1868
+ color: var(--primary);
1869
+ border-color: color-mix(in srgb, var(--primary) 35%, var(--border));
1870
+ }