@longshot/cli 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2088 @@
1
+ *, *::before, *::after {
2
+ box-sizing: border-box;
3
+ margin: 0;
4
+ padding: 0;
5
+ }
6
+
7
+ :root {
8
+ --bg: #1a1a2e;
9
+ --bg-surface: #16213e;
10
+ --bg-elevated: #0f3460;
11
+ --text: #e0e0e0;
12
+ --text-muted: #8a8a9a;
13
+ --accent: #e94560;
14
+ --accent-green: #4ade80;
15
+ --accent-red: #f87171;
16
+ --accent-blue: #60a5fa;
17
+ --accent-yellow: #fbbf24;
18
+ --border: #2a2a4a;
19
+ --radius: 8px;
20
+ }
21
+
22
+ html, body {
23
+ height: 100%;
24
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
25
+ font-size: 16px;
26
+ line-height: 1.5;
27
+ color: var(--text);
28
+ background: var(--bg);
29
+ -webkit-text-size-adjust: 100%;
30
+ }
31
+
32
+ /* Nav */
33
+ .nav {
34
+ position: sticky;
35
+ top: 0;
36
+ z-index: 100;
37
+ display: flex;
38
+ background: var(--bg-surface);
39
+ border-bottom: 1px solid var(--border);
40
+ }
41
+
42
+ .nav-tab {
43
+ flex: 1;
44
+ padding: 12px 8px;
45
+ text-align: center;
46
+ text-decoration: none;
47
+ color: var(--text-muted);
48
+ font-weight: 500;
49
+ font-size: 14px;
50
+ transition: color 0.2s, border-color 0.2s;
51
+ border-bottom: 2px solid transparent;
52
+ }
53
+
54
+ .nav-tab.active {
55
+ color: var(--accent);
56
+ border-bottom-color: var(--accent);
57
+ }
58
+
59
+ /* Main */
60
+ .main {
61
+ height: calc(100vh - 49px);
62
+ overflow: hidden;
63
+ }
64
+
65
+ /* Chat */
66
+ .chat-container {
67
+ display: flex;
68
+ flex-direction: column;
69
+ height: 100%;
70
+ }
71
+
72
+ .messages {
73
+ flex: 1;
74
+ overflow-y: auto;
75
+ padding: 16px;
76
+ -webkit-overflow-scrolling: touch;
77
+ box-shadow: inset 0 8px 6px -6px rgba(0, 0, 0, 0.4);
78
+ }
79
+
80
+ .message {
81
+ margin-bottom: 16px;
82
+ padding: 12px;
83
+ border-radius: var(--radius);
84
+ }
85
+
86
+ .message-user {
87
+ background: var(--bg-elevated);
88
+ border-left: 3px solid var(--accent-blue);
89
+ }
90
+
91
+ .message-assistant {
92
+ background: var(--bg-surface);
93
+ border-left: 3px solid var(--accent);
94
+ }
95
+
96
+ .message-role {
97
+ font-size: 12px;
98
+ font-weight: 600;
99
+ color: var(--text-muted);
100
+ text-transform: uppercase;
101
+ letter-spacing: 0.5px;
102
+ margin-bottom: 4px;
103
+ }
104
+
105
+ .message-content {
106
+ word-wrap: break-word;
107
+ overflow-wrap: break-word;
108
+ }
109
+
110
+ .message-content p { margin-bottom: 8px; }
111
+ .message-content p:last-child { margin-bottom: 0; }
112
+ .message-content pre {
113
+ background: var(--bg);
114
+ padding: 12px;
115
+ border-radius: var(--radius);
116
+ overflow-x: auto;
117
+ font-size: 13px;
118
+ margin: 8px 0;
119
+ }
120
+ .message-content code {
121
+ background: var(--bg);
122
+ padding: 2px 6px;
123
+ border-radius: 4px;
124
+ font-size: 14px;
125
+ }
126
+ .message-content pre code {
127
+ background: none;
128
+ padding: 0;
129
+ }
130
+
131
+ /* Chat input */
132
+ .chat-input {
133
+ display: flex;
134
+ gap: 8px;
135
+ padding: 12px 16px;
136
+ }
137
+
138
+ .chat-input textarea {
139
+ flex: 1;
140
+ padding: 10px 12px;
141
+ border: 1px solid var(--border);
142
+ border-radius: var(--radius);
143
+ background: var(--bg);
144
+ color: var(--text);
145
+ font-family: inherit;
146
+ font-size: 16px;
147
+ resize: none;
148
+ line-height: 1.4;
149
+ }
150
+
151
+ .chat-input textarea:focus {
152
+ outline: none;
153
+ border-color: var(--accent);
154
+ }
155
+
156
+ .chat-input button {
157
+ padding: 10px 20px;
158
+ background: var(--accent);
159
+ color: white;
160
+ border: none;
161
+ border-radius: var(--radius);
162
+ font-size: 16px;
163
+ font-weight: 600;
164
+ cursor: pointer;
165
+ min-width: 70px;
166
+ }
167
+
168
+ .chat-input button:disabled {
169
+ opacity: 0.5;
170
+ }
171
+
172
+ /* Tool calls in chat */
173
+ .tool-call {
174
+ padding: 6px 10px;
175
+ margin: 8px 0;
176
+ background: var(--bg);
177
+ border-radius: var(--radius);
178
+ border-left: 3px solid var(--accent-yellow);
179
+ font-size: 13px;
180
+ }
181
+
182
+ .tool-name {
183
+ font-weight: 600;
184
+ color: var(--accent-yellow);
185
+ word-break: break-all;
186
+ }
187
+
188
+ .agent-status-indicator {
189
+ color: var(--accent-yellow);
190
+ font-style: italic;
191
+ animation: pulse 2s infinite;
192
+ }
193
+
194
+ .agent-done {
195
+ margin-top: 12px;
196
+ padding: 8px 12px;
197
+ background: var(--accent-green);
198
+ color: var(--bg);
199
+ font-weight: 700;
200
+ border-radius: var(--radius);
201
+ text-align: center;
202
+ }
203
+
204
+ @keyframes pulse {
205
+ 0%, 100% { opacity: 1; }
206
+ 50% { opacity: 0.5; }
207
+ }
208
+
209
+ .tool-result {
210
+ margin: 4px 0 8px 0;
211
+ }
212
+
213
+ .tool-result pre {
214
+ background: var(--bg);
215
+ padding: 8px 10px;
216
+ border-radius: var(--radius);
217
+ font-size: 12px;
218
+ max-height: 200px;
219
+ overflow-y: auto;
220
+ color: var(--text-muted);
221
+ }
222
+
223
+ /* Agent output */
224
+ .agent-output {
225
+ margin: 12px 0;
226
+ border: 1px solid var(--border);
227
+ border-radius: var(--radius);
228
+ overflow: hidden;
229
+ }
230
+
231
+ .agent-header {
232
+ padding: 8px 12px;
233
+ background: var(--bg-elevated);
234
+ font-size: 13px;
235
+ font-weight: 600;
236
+ cursor: pointer;
237
+ color: var(--accent-blue);
238
+ }
239
+
240
+ .agent-content {
241
+ padding: 8px 12px;
242
+ font-size: 13px;
243
+ max-height: 300px;
244
+ overflow-y: auto;
245
+ background: var(--bg);
246
+ }
247
+
248
+ .agent-output.collapsed .agent-content {
249
+ display: none;
250
+ }
251
+
252
+ .agent-tool {
253
+ padding: 4px 8px;
254
+ margin: 4px 0;
255
+ background: var(--bg-surface);
256
+ border-radius: 4px;
257
+ font-size: 12px;
258
+ color: var(--accent-yellow);
259
+ }
260
+
261
+ /* Approval cards */
262
+ .approval-card {
263
+ margin: 12px 0;
264
+ padding: 16px;
265
+ background: var(--bg-elevated);
266
+ border: 1px solid var(--accent-blue);
267
+ border-radius: var(--radius);
268
+ }
269
+
270
+ .approval-header {
271
+ font-weight: 700;
272
+ font-size: 14px;
273
+ color: var(--accent-blue);
274
+ margin-bottom: 8px;
275
+ }
276
+
277
+ .approval-reason {
278
+ font-size: 15px;
279
+ margin-bottom: 8px;
280
+ }
281
+
282
+ .approval-details {
283
+ font-size: 13px;
284
+ color: var(--text-muted);
285
+ margin-bottom: 12px;
286
+ }
287
+
288
+ .approval-details div {
289
+ margin-bottom: 4px;
290
+ }
291
+
292
+ .approval-actions {
293
+ display: flex;
294
+ gap: 12px;
295
+ }
296
+
297
+ .approval-card.approved {
298
+ border-color: var(--accent-green);
299
+ opacity: 0.7;
300
+ }
301
+
302
+ .approval-card.rejected {
303
+ border-color: var(--accent-red);
304
+ opacity: 0.7;
305
+ }
306
+
307
+ /* Review card */
308
+ .review-card {
309
+ margin: 16px 0;
310
+ padding: 20px;
311
+ text-align: center;
312
+ background: var(--bg-elevated);
313
+ border: 2px solid var(--accent-green);
314
+ border-radius: var(--radius);
315
+ }
316
+
317
+ .review-header {
318
+ font-size: 18px;
319
+ font-weight: 700;
320
+ color: var(--accent-green);
321
+ margin-bottom: 8px;
322
+ }
323
+
324
+ .review-summary {
325
+ margin-bottom: 8px;
326
+ color: var(--text-secondary);
327
+ }
328
+
329
+ .review-files, .review-spec {
330
+ font-size: 14px;
331
+ color: var(--text-secondary);
332
+ margin-bottom: 4px;
333
+ }
334
+
335
+ .btn-review {
336
+ display: block;
337
+ margin-top: 12px;
338
+ padding: 14px 24px;
339
+ background: var(--accent-green);
340
+ color: var(--bg);
341
+ font-size: 18px;
342
+ font-weight: 700;
343
+ }
344
+
345
+ /* Buttons */
346
+ .btn {
347
+ display: inline-block;
348
+ padding: 10px 20px;
349
+ border: none;
350
+ border-radius: var(--radius);
351
+ font-size: 16px;
352
+ font-weight: 600;
353
+ cursor: pointer;
354
+ text-decoration: none;
355
+ text-align: center;
356
+ min-height: 44px;
357
+ }
358
+
359
+ .btn-primary {
360
+ background: var(--accent);
361
+ color: white;
362
+ }
363
+
364
+ .btn-approve {
365
+ background: var(--accent-green);
366
+ color: #1a1a2e;
367
+ flex: 1;
368
+ }
369
+
370
+ .btn-reject {
371
+ background: var(--accent-red);
372
+ color: white;
373
+ flex: 1;
374
+ }
375
+
376
+ .btn-small {
377
+ padding: 6px 12px;
378
+ font-size: 13px;
379
+ background: var(--bg-elevated);
380
+ color: var(--text);
381
+ border: 1px solid var(--border);
382
+ min-height: auto;
383
+ }
384
+
385
+ /* Spec page */
386
+ .spec-container {
387
+ height: 100%;
388
+ overflow-y: auto;
389
+ padding: 16px;
390
+ -webkit-overflow-scrolling: touch;
391
+ }
392
+
393
+ .spec-header {
394
+ display: flex;
395
+ justify-content: space-between;
396
+ align-items: center;
397
+ margin-bottom: 16px;
398
+ }
399
+
400
+ .spec-header h1 {
401
+ font-size: 20px;
402
+ }
403
+
404
+ .spec-content {
405
+ line-height: 1.7;
406
+ }
407
+
408
+ .spec-content h1 { font-size: 22px; margin: 24px 0 12px; }
409
+ .spec-content h2 { font-size: 18px; margin: 20px 0 10px; color: var(--accent); }
410
+ .spec-content h3 { font-size: 16px; margin: 16px 0 8px; }
411
+ .spec-content p { margin-bottom: 12px; }
412
+ .spec-content ul, .spec-content ol { padding-left: 20px; margin-bottom: 12px; }
413
+ .spec-content li { margin-bottom: 4px; }
414
+ .spec-content pre {
415
+ background: var(--bg-surface);
416
+ padding: 12px;
417
+ border-radius: var(--radius);
418
+ overflow-x: auto;
419
+ margin: 12px 0;
420
+ font-size: 13px;
421
+ }
422
+ .spec-content code {
423
+ background: var(--bg-surface);
424
+ padding: 2px 6px;
425
+ border-radius: 4px;
426
+ font-size: 14px;
427
+ }
428
+ .spec-content pre code { background: none; padding: 0; }
429
+
430
+ /* Diff page */
431
+ .diff-container {
432
+ height: 100%;
433
+ overflow-y: auto;
434
+ padding: 16px;
435
+ -webkit-overflow-scrolling: touch;
436
+ }
437
+
438
+ .diff-header {
439
+ margin-bottom: 12px;
440
+ }
441
+
442
+ .diff-header h1 {
443
+ font-size: 20px;
444
+ }
445
+
446
+ .diff-task {
447
+ color: var(--text-muted);
448
+ font-size: 14px;
449
+ margin-top: 4px;
450
+ }
451
+
452
+ .diff-actions {
453
+ display: flex;
454
+ gap: 12px;
455
+ margin: 12px 0;
456
+ }
457
+
458
+ .diff-content {
459
+ overflow-x: auto;
460
+ font-size: 13px;
461
+ -webkit-overflow-scrolling: touch;
462
+ }
463
+
464
+ /* Diff acceptance criteria */
465
+ .diff-criteria {
466
+ margin: 12px 0;
467
+ background: var(--bg-surface);
468
+ border: 1px solid var(--border);
469
+ border-radius: var(--radius);
470
+ }
471
+
472
+ .diff-criteria summary {
473
+ cursor: pointer;
474
+ font-weight: 600;
475
+ font-size: 14px;
476
+ color: var(--accent-blue);
477
+ padding: 10px 12px;
478
+ user-select: none;
479
+ }
480
+
481
+ .diff-criteria-content {
482
+ padding: 0 12px 12px;
483
+ }
484
+
485
+ .diff-criteria-content ul {
486
+ list-style: none;
487
+ padding-left: 0;
488
+ }
489
+
490
+ .diff-criteria-content li {
491
+ margin-bottom: 6px;
492
+ font-size: 14px;
493
+ }
494
+
495
+ /* Diff change summary */
496
+ .diff-summary {
497
+ padding: 12px;
498
+ margin-bottom: 12px;
499
+ background: var(--bg-surface);
500
+ border: 1px solid var(--border);
501
+ border-radius: var(--radius);
502
+ }
503
+
504
+ .diff-summary-text {
505
+ font-size: 15px;
506
+ margin-bottom: 8px;
507
+ }
508
+
509
+ .diff-summary-files {
510
+ display: flex;
511
+ flex-wrap: wrap;
512
+ gap: 4px;
513
+ margin-bottom: 8px;
514
+ }
515
+
516
+ .diff-summary-file {
517
+ display: inline-block;
518
+ padding: 2px 8px;
519
+ background: var(--bg);
520
+ border-radius: 4px;
521
+ font-family: 'SF Mono', 'Menlo', 'Monaco', 'Consolas', monospace;
522
+ font-size: 12px;
523
+ color: var(--text-muted);
524
+ }
525
+
526
+ .diff-summary-actions {
527
+ margin: 0;
528
+ padding-left: 16px;
529
+ font-size: 13px;
530
+ color: var(--text-muted);
531
+ }
532
+
533
+ .diff-summary-actions li {
534
+ margin-bottom: 2px;
535
+ }
536
+
537
+ /* Diff checks section */
538
+ .diff-checks {
539
+ margin: 12px 0;
540
+ background: var(--bg-surface);
541
+ border: 1px solid var(--border);
542
+ border-radius: var(--radius);
543
+ }
544
+
545
+ .diff-checks summary {
546
+ cursor: pointer;
547
+ font-weight: 600;
548
+ font-size: 14px;
549
+ color: var(--accent-blue);
550
+ padding: 10px 12px;
551
+ user-select: none;
552
+ }
553
+
554
+ .diff-checks-content {
555
+ padding: 0 12px 12px;
556
+ }
557
+
558
+ .diff-check-item {
559
+ display: flex;
560
+ align-items: center;
561
+ gap: 8px;
562
+ font-size: 14px;
563
+ margin-bottom: 8px;
564
+ }
565
+
566
+ .diff-check-indicator {
567
+ display: inline-block;
568
+ padding: 2px 8px;
569
+ border-radius: 4px;
570
+ font-size: 12px;
571
+ font-weight: 700;
572
+ letter-spacing: 0.5px;
573
+ }
574
+
575
+ .diff-check-indicator.check-pass {
576
+ background: rgba(74, 222, 128, 0.2);
577
+ color: var(--accent-green);
578
+ }
579
+
580
+ .diff-check-indicator.check-fail {
581
+ background: rgba(248, 113, 113, 0.2);
582
+ color: var(--accent-red);
583
+ }
584
+
585
+ .diff-check-todos {
586
+ display: flex;
587
+ flex-direction: column;
588
+ gap: 4px;
589
+ }
590
+
591
+ .diff-check-todo {
592
+ display: flex;
593
+ align-items: flex-start;
594
+ gap: 6px;
595
+ font-size: 13px;
596
+ color: var(--text-muted);
597
+ }
598
+
599
+ .diff-check-todo.todo-done {
600
+ color: var(--text);
601
+ }
602
+
603
+ .todo-check {
604
+ flex-shrink: 0;
605
+ width: 16px;
606
+ text-align: center;
607
+ font-size: 12px;
608
+ }
609
+
610
+ .diff-check-todo.todo-done .todo-check {
611
+ color: var(--accent-green);
612
+ }
613
+
614
+ /* diff2html dark mode — built-in d2h-dark-color-scheme handles colors, these are structural + integration tweaks */
615
+ .diff-content .d2h-wrapper {
616
+ border: none;
617
+ }
618
+
619
+ .diff-content .d2h-file-wrapper {
620
+ border-color: var(--border);
621
+ margin-bottom: 12px;
622
+ border-radius: var(--radius);
623
+ overflow: hidden;
624
+ }
625
+
626
+ .diff-content .d2h-file-header {
627
+ position: sticky;
628
+ top: 0;
629
+ z-index: 1;
630
+ }
631
+
632
+ .diff-content .d2h-file-collapse,
633
+ .diff-content .d2h-file-switch { display: none; }
634
+
635
+ .diff-content .d2h-diff-table {
636
+ border-collapse: collapse;
637
+ font-family: 'SF Mono', 'Menlo', 'Monaco', 'Consolas', monospace;
638
+ }
639
+
640
+ .diff-content .d2h-code-line-ctn {
641
+ white-space: pre;
642
+ word-wrap: normal;
643
+ }
644
+
645
+ /* File list (top summary) */
646
+ .diff-content .d2h-file-list-wrapper {
647
+ margin-bottom: 16px;
648
+ border-color: var(--border);
649
+ border-radius: var(--radius);
650
+ }
651
+
652
+ /* Mobile diff optimizations */
653
+ @media (max-width: 600px) {
654
+ .diff-content .d2h-code-line {
655
+ padding-left: 4em;
656
+ padding-right: 0.5em;
657
+ font-size: 12px;
658
+ }
659
+ .diff-content .d2h-code-linenumber {
660
+ width: 3em;
661
+ min-width: 3em;
662
+ padding: 0 4px;
663
+ font-size: 11px;
664
+ }
665
+ .diff-content .d2h-file-name-wrapper {
666
+ font-size: 12px;
667
+ padding: 4px 8px;
668
+ }
669
+ .diff-content .d2h-tag {
670
+ font-size: 9px;
671
+ padding: 1px 4px;
672
+ }
673
+ .diff-content .d2h-diff-table {
674
+ font-size: 12px;
675
+ }
676
+ }
677
+
678
+ /* History page */
679
+ .history-container {
680
+ height: 100%;
681
+ overflow-y: auto;
682
+ padding: 16px;
683
+ -webkit-overflow-scrolling: touch;
684
+ }
685
+
686
+ .history-header {
687
+ display: flex;
688
+ justify-content: space-between;
689
+ align-items: center;
690
+ margin-bottom: 16px;
691
+ }
692
+
693
+ .history-header h1 {
694
+ font-size: 20px;
695
+ }
696
+
697
+ .history-timeline {
698
+ border-left: 2px solid var(--border);
699
+ margin-left: 16px;
700
+ padding-left: 0;
701
+ }
702
+
703
+ .history-entry {
704
+ display: flex;
705
+ gap: 12px;
706
+ margin-bottom: 16px;
707
+ margin-left: -11px;
708
+ }
709
+
710
+ .history-marker {
711
+ width: 20px;
712
+ height: 20px;
713
+ border-radius: 50%;
714
+ display: flex;
715
+ align-items: center;
716
+ justify-content: center;
717
+ font-size: 9px;
718
+ font-weight: 700;
719
+ flex-shrink: 0;
720
+ background: var(--bg-elevated);
721
+ border: 2px solid var(--border);
722
+ color: var(--text-muted);
723
+ }
724
+
725
+ .history-marker.type-spec { border-color: var(--accent-blue); color: var(--accent-blue); }
726
+ .history-marker.type-agent { border-color: var(--accent-yellow); color: var(--accent-yellow); }
727
+ .history-marker.type-checkpoint { border-color: var(--accent-green); color: var(--accent-green); }
728
+ .history-marker.type-rejection { border-color: var(--accent-red); color: var(--accent-red); }
729
+ .history-marker.type-action { border-color: var(--text-muted); }
730
+
731
+ .history-body {
732
+ flex: 1;
733
+ min-width: 0;
734
+ }
735
+
736
+ .history-summary {
737
+ font-size: 14px;
738
+ font-weight: 500;
739
+ }
740
+
741
+ .history-time {
742
+ font-size: 12px;
743
+ color: var(--text-muted);
744
+ margin-top: 2px;
745
+ }
746
+
747
+ .history-details {
748
+ font-size: 12px;
749
+ color: var(--text-muted);
750
+ margin-top: 4px;
751
+ white-space: pre-wrap;
752
+ word-break: break-all;
753
+ }
754
+
755
+ /* Tasks */
756
+ .tasks-container {
757
+ height: 100%;
758
+ overflow-y: auto;
759
+ padding: 16px;
760
+ -webkit-overflow-scrolling: touch;
761
+ }
762
+
763
+ .tasks-header {
764
+ display: flex;
765
+ justify-content: space-between;
766
+ align-items: center;
767
+ margin-bottom: 16px;
768
+ }
769
+
770
+ .tasks-header h1 { font-size: 20px; }
771
+
772
+ .tasks-section { margin-bottom: 24px; }
773
+ .tasks-section h2 {
774
+ font-size: 14px;
775
+ text-transform: uppercase;
776
+ letter-spacing: 0.5px;
777
+ color: var(--text-muted);
778
+ margin-bottom: 8px;
779
+ }
780
+
781
+ .task-list {
782
+ display: flex;
783
+ flex-direction: column;
784
+ gap: 8px;
785
+ }
786
+
787
+ .task-card {
788
+ display: block;
789
+ padding: 12px;
790
+ background: var(--bg-surface);
791
+ border-radius: var(--radius);
792
+ border-left: 3px solid var(--border);
793
+ text-decoration: none;
794
+ color: var(--text);
795
+ }
796
+
797
+ .task-card.status-drafting { border-left-color: var(--text-muted); }
798
+ .task-card.status-ready { border-left-color: var(--accent-blue); }
799
+ .task-card.status-progress { border-left-color: var(--accent-yellow); }
800
+ .task-card.status-complete { border-left-color: var(--accent-green); opacity: 0.7; }
801
+ .task-card.status-rejected { border-left-color: var(--accent-red); opacity: 0.7; }
802
+ .task-card.status-queued { border-left-color: #f97316; }
803
+ .task-card.status-approved { border-left-color: var(--accent-green); }
804
+ .task-card.status-refining { border-left-color: var(--text-muted); }
805
+ .task-card.status-fixing { border-left-color: #f97316; }
806
+ .task-card.status-conflict { border-left-color: var(--accent-red); }
807
+
808
+ .task-card-top {
809
+ display: flex;
810
+ align-items: center;
811
+ justify-content: space-between;
812
+ margin-bottom: 6px;
813
+ }
814
+
815
+ .task-status-badge {
816
+ display: inline-block;
817
+ padding: 4px 12px;
818
+ border-radius: 20px;
819
+ font-size: 13px;
820
+ font-weight: 700;
821
+ text-transform: uppercase;
822
+ letter-spacing: 0.5px;
823
+ background: var(--border);
824
+ color: var(--text-muted);
825
+ }
826
+
827
+ .task-status-badge.status-drafting {
828
+ background: rgba(138, 138, 154, 0.2);
829
+ color: var(--text-muted);
830
+ }
831
+
832
+ .task-status-badge.status-ready {
833
+ background: rgba(96, 165, 250, 0.2);
834
+ color: var(--accent-blue);
835
+ }
836
+
837
+ .task-status-badge.status-progress {
838
+ background: rgba(251, 191, 36, 0.2);
839
+ color: var(--accent-yellow);
840
+ }
841
+
842
+ .task-status-badge.status-complete {
843
+ background: rgba(74, 222, 128, 0.2);
844
+ color: var(--accent-green);
845
+ }
846
+
847
+ .task-status-badge.status-rejected {
848
+ background: rgba(248, 113, 113, 0.2);
849
+ color: var(--accent-red);
850
+ }
851
+
852
+ .task-status-badge.status-queued {
853
+ background: rgba(249, 115, 22, 0.2);
854
+ color: #f97316;
855
+ }
856
+
857
+ .task-status-badge.status-approved {
858
+ background: rgba(74, 222, 128, 0.2);
859
+ color: var(--accent-green);
860
+ }
861
+
862
+ .task-status-badge.status-refining {
863
+ background: rgba(138, 138, 154, 0.2);
864
+ color: var(--text-muted);
865
+ }
866
+
867
+ .task-status-badge.status-fixing {
868
+ background: rgba(249, 115, 22, 0.2);
869
+ color: #f97316;
870
+ }
871
+
872
+ .task-status-badge.status-conflict {
873
+ background: rgba(248, 113, 113, 0.2);
874
+ color: var(--accent-red);
875
+ }
876
+
877
+ .task-title {
878
+ font-weight: 600;
879
+ font-size: 15px;
880
+ margin-bottom: 4px;
881
+ }
882
+
883
+ .task-card-actions {
884
+ display: flex;
885
+ gap: 8px;
886
+ margin-top: 10px;
887
+ }
888
+
889
+ .btn-task-action {
890
+ padding: 8px 16px;
891
+ font-size: 14px;
892
+ font-weight: 600;
893
+ min-height: 44px;
894
+ flex: 1;
895
+ text-align: center;
896
+ }
897
+
898
+ .btn-task-progress {
899
+ background: var(--accent-yellow);
900
+ color: var(--bg);
901
+ animation: pulse 2s infinite;
902
+ }
903
+
904
+ .task-meta {
905
+ display: flex;
906
+ gap: 12px;
907
+ font-size: 12px;
908
+ color: var(--text-muted);
909
+ }
910
+
911
+ .task-status {
912
+ text-transform: uppercase;
913
+ font-weight: 600;
914
+ letter-spacing: 0.3px;
915
+ }
916
+
917
+ .task-detail {
918
+ height: 100%;
919
+ overflow-y: auto;
920
+ padding: 16px;
921
+ -webkit-overflow-scrolling: touch;
922
+ }
923
+
924
+ .task-detail-header {
925
+ margin-bottom: 16px;
926
+ }
927
+
928
+ .task-detail-header h1 {
929
+ font-size: 20px;
930
+ margin: 4px 0 8px;
931
+ }
932
+
933
+ .back-link {
934
+ font-size: 13px;
935
+ color: var(--accent);
936
+ text-decoration: none;
937
+ }
938
+
939
+ .task-actions {
940
+ display: flex;
941
+ gap: 8px;
942
+ margin-bottom: 16px;
943
+ }
944
+
945
+ /* Conflict resolution section */
946
+ .conflict-section {
947
+ background: rgba(248, 113, 113, 0.1);
948
+ border: 1px solid rgba(248, 113, 113, 0.3);
949
+ border-radius: 8px;
950
+ padding: 16px;
951
+ margin-bottom: 16px;
952
+ }
953
+
954
+ .conflict-error {
955
+ margin-bottom: 12px;
956
+ }
957
+
958
+ .conflict-error strong {
959
+ color: var(--accent-red);
960
+ font-size: 16px;
961
+ }
962
+
963
+ .conflict-error p {
964
+ color: var(--text-muted);
965
+ font-size: 13px;
966
+ margin-top: 6px;
967
+ word-break: break-word;
968
+ }
969
+
970
+ .conflict-actions {
971
+ display: flex;
972
+ gap: 8px;
973
+ flex-wrap: wrap;
974
+ }
975
+
976
+ .conflict-actions .btn {
977
+ flex: 1;
978
+ min-width: 100px;
979
+ }
980
+
981
+ /* Empty state */
982
+ .empty-state {
983
+ text-align: center;
984
+ color: var(--text-muted);
985
+ padding: 40px 20px;
986
+ font-size: 15px;
987
+ }
988
+
989
+ /* Review card details */
990
+ .review-summary {
991
+ font-weight: 600;
992
+ margin-bottom: 8px;
993
+ }
994
+
995
+ .review-files {
996
+ font-size: 13px;
997
+ color: var(--accent-yellow);
998
+ margin-bottom: 4px;
999
+ }
1000
+
1001
+ .review-spec {
1002
+ font-size: 13px;
1003
+ color: var(--accent-blue);
1004
+ margin-bottom: 8px;
1005
+ }
1006
+
1007
+ /* Status card (no file changes) */
1008
+ .status-card {
1009
+ margin: 12px 0;
1010
+ padding: 12px;
1011
+ background: var(--bg-surface);
1012
+ border-left: 3px solid var(--accent-blue);
1013
+ border-radius: var(--radius);
1014
+ font-size: 14px;
1015
+ }
1016
+
1017
+ /* Error */
1018
+ .error {
1019
+ color: var(--accent-red);
1020
+ padding: 8px;
1021
+ background: rgba(248, 113, 113, 0.1);
1022
+ border-radius: var(--radius);
1023
+ margin: 8px 0;
1024
+ }
1025
+
1026
+ /* History run links */
1027
+ .history-run-link {
1028
+ display: inline-block;
1029
+ margin-top: 4px;
1030
+ font-size: 12px;
1031
+ color: var(--accent-blue);
1032
+ text-decoration: none;
1033
+ }
1034
+
1035
+ .history-run-link:hover {
1036
+ text-decoration: underline;
1037
+ }
1038
+
1039
+ /* Run log page */
1040
+ .run-container {
1041
+ height: 100%;
1042
+ overflow-y: auto;
1043
+ padding: 16px;
1044
+ -webkit-overflow-scrolling: touch;
1045
+ }
1046
+
1047
+ .run-header {
1048
+ margin-bottom: 16px;
1049
+ }
1050
+
1051
+ .run-header h1 {
1052
+ font-size: 20px;
1053
+ }
1054
+
1055
+ .run-id {
1056
+ font-size: 12px;
1057
+ color: var(--text-muted);
1058
+ font-family: monospace;
1059
+ margin-top: 4px;
1060
+ }
1061
+
1062
+ .run-timeline {
1063
+ display: flex;
1064
+ flex-direction: column;
1065
+ gap: 8px;
1066
+ }
1067
+
1068
+ .run-event {
1069
+ display: flex;
1070
+ gap: 10px;
1071
+ padding: 8px;
1072
+ border-radius: var(--radius);
1073
+ background: var(--bg-surface);
1074
+ }
1075
+
1076
+ .run-event-marker {
1077
+ width: 24px;
1078
+ height: 24px;
1079
+ border-radius: 50%;
1080
+ display: flex;
1081
+ align-items: center;
1082
+ justify-content: center;
1083
+ font-size: 11px;
1084
+ font-weight: 700;
1085
+ flex-shrink: 0;
1086
+ background: var(--bg-elevated);
1087
+ border: 2px solid var(--border);
1088
+ color: var(--text-muted);
1089
+ }
1090
+
1091
+ .run-event-user .run-event-marker { border-color: var(--accent-blue); color: var(--accent-blue); }
1092
+ .run-event-text .run-event-marker { border-color: var(--text-muted); }
1093
+ .run-event-tool-use .run-event-marker { border-color: var(--accent-yellow); color: var(--accent-yellow); }
1094
+ .run-event-tool-result .run-event-marker { border-color: var(--accent-green); color: var(--accent-green); }
1095
+ .run-event-error .run-event-marker { border-color: var(--accent-red); color: var(--accent-red); }
1096
+ .run-event-done .run-event-marker { border-color: var(--accent-green); color: var(--accent-green); }
1097
+
1098
+ .run-event-body {
1099
+ flex: 1;
1100
+ min-width: 0;
1101
+ }
1102
+
1103
+ .run-event-label {
1104
+ font-size: 13px;
1105
+ font-weight: 600;
1106
+ }
1107
+
1108
+ .run-event-time {
1109
+ font-weight: 400;
1110
+ color: var(--text-muted);
1111
+ font-size: 11px;
1112
+ }
1113
+
1114
+ .run-event-content {
1115
+ font-size: 13px;
1116
+ color: var(--text-muted);
1117
+ margin-top: 4px;
1118
+ white-space: pre-wrap;
1119
+ word-break: break-word;
1120
+ }
1121
+
1122
+ .run-event-details {
1123
+ margin-top: 4px;
1124
+ }
1125
+
1126
+ .run-event-details summary {
1127
+ font-size: 12px;
1128
+ color: var(--accent-blue);
1129
+ cursor: pointer;
1130
+ }
1131
+
1132
+ .run-event-details pre {
1133
+ background: var(--bg);
1134
+ padding: 8px;
1135
+ border-radius: var(--radius);
1136
+ font-size: 11px;
1137
+ max-height: 200px;
1138
+ overflow-y: auto;
1139
+ margin-top: 4px;
1140
+ white-space: pre-wrap;
1141
+ word-break: break-word;
1142
+ color: var(--text-muted);
1143
+ }
1144
+
1145
+ .run-footer {
1146
+ margin-top: 16px;
1147
+ padding-top: 12px;
1148
+ border-top: 1px solid var(--border);
1149
+ }
1150
+
1151
+ /* Agent banner */
1152
+ .agent-banner {
1153
+ display: block;
1154
+ padding: 10px 16px;
1155
+ background: var(--accent-yellow);
1156
+ color: var(--bg);
1157
+ font-weight: 600;
1158
+ font-size: 14px;
1159
+ text-align: center;
1160
+ text-decoration: none;
1161
+ animation: pulse 2s infinite;
1162
+ }
1163
+
1164
+ /* Activity feed */
1165
+ .activity-feed {
1166
+ padding: 8px 16px;
1167
+ background: var(--bg-surface);
1168
+ border-bottom: 1px solid var(--border);
1169
+ }
1170
+
1171
+ .activity-header {
1172
+ font-size: 13px;
1173
+ font-weight: 600;
1174
+ color: var(--text-muted);
1175
+ text-transform: uppercase;
1176
+ letter-spacing: 0.5px;
1177
+ cursor: pointer;
1178
+ padding: 4px 0;
1179
+ user-select: none;
1180
+ }
1181
+
1182
+ .activity-list {
1183
+ display: flex;
1184
+ flex-direction: column;
1185
+ gap: 2px;
1186
+ padding-top: 6px;
1187
+ }
1188
+
1189
+ .activity-item {
1190
+ display: flex;
1191
+ align-items: center;
1192
+ gap: 6px;
1193
+ padding: 4px 0;
1194
+ font-size: 13px;
1195
+ }
1196
+
1197
+ .activity-icon {
1198
+ flex-shrink: 0;
1199
+ width: 18px;
1200
+ text-align: center;
1201
+ }
1202
+
1203
+ .activity-summary {
1204
+ flex: 1;
1205
+ min-width: 0;
1206
+ overflow: hidden;
1207
+ text-overflow: ellipsis;
1208
+ white-space: nowrap;
1209
+ }
1210
+
1211
+ .activity-link {
1212
+ color: var(--accent-blue);
1213
+ text-decoration: none;
1214
+ }
1215
+
1216
+ .activity-time {
1217
+ flex-shrink: 0;
1218
+ font-size: 11px;
1219
+ color: var(--text-muted);
1220
+ }
1221
+
1222
+ /* Draft Task button */
1223
+ .chat-input-area {
1224
+ background: var(--bg-surface);
1225
+ border-top: 1px solid var(--border);
1226
+ }
1227
+
1228
+ .chat-busy {
1229
+ padding: 16px;
1230
+ text-align: center;
1231
+ color: var(--text-muted);
1232
+ font-size: 14px;
1233
+ }
1234
+
1235
+ .chat-busy a {
1236
+ color: var(--accent-blue);
1237
+ }
1238
+
1239
+ .draft-task-btn {
1240
+ display: block;
1241
+ width: calc(100% - 32px);
1242
+ margin: 0 16px 12px;
1243
+ padding: 10px;
1244
+ background: var(--bg-elevated);
1245
+ color: var(--accent-blue);
1246
+ border: 1px solid var(--accent-blue);
1247
+ border-radius: var(--radius);
1248
+ font-size: 14px;
1249
+ font-weight: 600;
1250
+ cursor: pointer;
1251
+ }
1252
+
1253
+ .draft-task-btn:disabled {
1254
+ opacity: 0.5;
1255
+ cursor: not-allowed;
1256
+ }
1257
+
1258
+ /* Agent progress done section */
1259
+ .agent-progress-done {
1260
+ margin-top: 16px;
1261
+ padding: 20px;
1262
+ text-align: center;
1263
+ }
1264
+
1265
+ /* Verification */
1266
+ .verify-container {
1267
+ height: 100%;
1268
+ overflow-y: auto;
1269
+ padding: 16px;
1270
+ -webkit-overflow-scrolling: touch;
1271
+ }
1272
+
1273
+ .verify-header {
1274
+ margin-bottom: 16px;
1275
+ }
1276
+
1277
+ .verify-header h1 {
1278
+ font-size: 20px;
1279
+ margin: 4px 0;
1280
+ }
1281
+
1282
+ .verify-task-summary {
1283
+ color: var(--text-muted);
1284
+ font-size: 14px;
1285
+ }
1286
+
1287
+ .verify-launch {
1288
+ margin-bottom: 20px;
1289
+ }
1290
+
1291
+ .verify-launch textarea {
1292
+ width: 100%;
1293
+ padding: 10px 12px;
1294
+ border: 1px solid var(--border);
1295
+ border-radius: var(--radius);
1296
+ background: var(--bg);
1297
+ color: var(--text);
1298
+ font-family: inherit;
1299
+ font-size: 16px;
1300
+ resize: none;
1301
+ line-height: 1.4;
1302
+ margin-bottom: 8px;
1303
+ }
1304
+
1305
+ .verify-launch textarea:focus {
1306
+ outline: none;
1307
+ border-color: var(--accent-blue);
1308
+ }
1309
+
1310
+ .verify-launch .btn {
1311
+ width: 100%;
1312
+ }
1313
+
1314
+ .verify-results {
1315
+ display: flex;
1316
+ flex-direction: column;
1317
+ gap: 12px;
1318
+ margin-bottom: 16px;
1319
+ }
1320
+
1321
+ .verify-result {
1322
+ padding: 12px;
1323
+ background: var(--bg-surface);
1324
+ border-radius: var(--radius);
1325
+ border-left: 3px solid var(--border);
1326
+ }
1327
+
1328
+ .verify-result-pass { border-left-color: var(--accent-green); }
1329
+ .verify-result-fail { border-left-color: var(--accent-red); }
1330
+ .verify-result-error { border-left-color: var(--accent-red); }
1331
+ .verify-result-running { border-left-color: var(--accent-yellow); }
1332
+
1333
+ .verify-result-header {
1334
+ display: flex;
1335
+ align-items: center;
1336
+ gap: 8px;
1337
+ margin-bottom: 6px;
1338
+ }
1339
+
1340
+ .verify-run-num {
1341
+ font-weight: 700;
1342
+ font-size: 14px;
1343
+ color: var(--text-muted);
1344
+ }
1345
+
1346
+ .verify-status {
1347
+ font-size: 12px;
1348
+ font-weight: 700;
1349
+ letter-spacing: 0.5px;
1350
+ }
1351
+
1352
+ .verify-time {
1353
+ font-size: 12px;
1354
+ color: var(--text-muted);
1355
+ margin-left: auto;
1356
+ }
1357
+
1358
+ .verify-prompt {
1359
+ font-size: 13px;
1360
+ color: var(--text-muted);
1361
+ font-style: italic;
1362
+ margin-bottom: 6px;
1363
+ }
1364
+
1365
+ .verify-summary {
1366
+ font-size: 14px;
1367
+ margin-bottom: 8px;
1368
+ }
1369
+
1370
+ .verify-artifacts {
1371
+ display: flex;
1372
+ flex-direction: column;
1373
+ gap: 8px;
1374
+ margin-bottom: 8px;
1375
+ }
1376
+
1377
+ .verify-artifact {
1378
+ background: var(--bg);
1379
+ border-radius: var(--radius);
1380
+ padding: 8px;
1381
+ }
1382
+
1383
+ .verify-image {
1384
+ max-width: 100%;
1385
+ border-radius: 4px;
1386
+ }
1387
+
1388
+ .verify-artifact-name {
1389
+ font-size: 11px;
1390
+ color: var(--text-muted);
1391
+ margin-top: 4px;
1392
+ }
1393
+
1394
+ .verify-artifact-link {
1395
+ color: var(--accent-blue);
1396
+ font-size: 13px;
1397
+ text-decoration: none;
1398
+ }
1399
+
1400
+ .verify-log-link {
1401
+ font-size: 12px;
1402
+ color: var(--accent-blue);
1403
+ text-decoration: none;
1404
+ }
1405
+
1406
+ .verify-progress {
1407
+ font-size: 12px;
1408
+ color: var(--text-muted);
1409
+ font-style: italic;
1410
+ margin-top: 4px;
1411
+ }
1412
+
1413
+ .verify-actions {
1414
+ margin-top: 12px;
1415
+ }
1416
+
1417
+ .btn-verify {
1418
+ background: var(--accent-blue);
1419
+ color: white;
1420
+ flex: 1;
1421
+ }
1422
+
1423
+ /* Task chat */
1424
+ .task-chat {
1425
+ margin-top: 16px;
1426
+ border-top: 1px solid var(--border);
1427
+ display: flex;
1428
+ flex-direction: column;
1429
+ }
1430
+
1431
+ .task-chat .messages {
1432
+ max-height: 400px;
1433
+ overflow-y: auto;
1434
+ padding: 12px 0;
1435
+ }
1436
+
1437
+ .task-chat .chat-input-area {
1438
+ border-top: 1px solid var(--border);
1439
+ background: var(--bg-surface);
1440
+ padding: 0;
1441
+ }
1442
+
1443
+ .task-chat-buttons {
1444
+ display: flex;
1445
+ flex-direction: column;
1446
+ gap: 4px;
1447
+ }
1448
+
1449
+ .task-chat-buttons button {
1450
+ padding: 10px 16px;
1451
+ border: none;
1452
+ border-radius: var(--radius);
1453
+ font-size: 14px;
1454
+ font-weight: 600;
1455
+ cursor: pointer;
1456
+ min-width: 70px;
1457
+ }
1458
+
1459
+ .task-chat-buttons button:disabled {
1460
+ opacity: 0.5;
1461
+ }
1462
+
1463
+ #task-send-btn {
1464
+ background: var(--accent);
1465
+ color: white;
1466
+ }
1467
+
1468
+ #task-refine-btn {
1469
+ background: var(--accent-blue);
1470
+ color: white;
1471
+ font-size: 13px;
1472
+ padding: 8px 16px;
1473
+ }
1474
+
1475
+ /* Collapsible spec */
1476
+ .spec-collapsible {
1477
+ margin-bottom: 8px;
1478
+ }
1479
+
1480
+ .spec-collapsible summary {
1481
+ cursor: pointer;
1482
+ font-weight: 600;
1483
+ font-size: 14px;
1484
+ color: var(--accent-blue);
1485
+ padding: 8px 0;
1486
+ user-select: none;
1487
+ }
1488
+
1489
+ .spec-collapsible .spec-content {
1490
+ padding-top: 8px;
1491
+ }
1492
+
1493
+ /* Services */
1494
+ .services-container {
1495
+ height: 100%;
1496
+ overflow-y: auto;
1497
+ padding: 16px;
1498
+ -webkit-overflow-scrolling: touch;
1499
+ }
1500
+
1501
+ .services-header {
1502
+ display: flex;
1503
+ justify-content: space-between;
1504
+ align-items: center;
1505
+ margin-bottom: 16px;
1506
+ }
1507
+
1508
+ .services-header h1 { font-size: 20px; }
1509
+
1510
+ .service-list {
1511
+ display: flex;
1512
+ flex-direction: column;
1513
+ gap: 8px;
1514
+ }
1515
+
1516
+ .service-card {
1517
+ padding: 12px;
1518
+ background: var(--bg-surface);
1519
+ border-radius: var(--radius);
1520
+ border-left: 3px solid var(--border);
1521
+ }
1522
+
1523
+ .service-card.service-status-running { border-left-color: var(--accent-green); }
1524
+ .service-card.service-status-stopped { border-left-color: var(--text-muted); }
1525
+ .service-card.service-status-crashed { border-left-color: var(--accent-red); }
1526
+
1527
+ .service-card-top {
1528
+ display: flex;
1529
+ align-items: center;
1530
+ gap: 8px;
1531
+ margin-bottom: 6px;
1532
+ }
1533
+
1534
+ .service-dot {
1535
+ width: 10px;
1536
+ height: 10px;
1537
+ border-radius: 50%;
1538
+ display: inline-block;
1539
+ flex-shrink: 0;
1540
+ }
1541
+
1542
+ .service-name {
1543
+ font-weight: 600;
1544
+ font-size: 15px;
1545
+ }
1546
+
1547
+ .service-status-label {
1548
+ font-size: 12px;
1549
+ text-transform: uppercase;
1550
+ color: var(--text-muted);
1551
+ letter-spacing: 0.5px;
1552
+ }
1553
+
1554
+ .service-uptime {
1555
+ font-size: 12px;
1556
+ color: var(--accent-green);
1557
+ margin-left: auto;
1558
+ }
1559
+
1560
+ .service-exit-code {
1561
+ font-size: 12px;
1562
+ color: var(--accent-red);
1563
+ margin-left: auto;
1564
+ }
1565
+
1566
+ .service-command {
1567
+ font-size: 13px;
1568
+ color: var(--text-muted);
1569
+ font-family: monospace;
1570
+ margin-bottom: 8px;
1571
+ word-break: break-all;
1572
+ }
1573
+
1574
+ .service-actions {
1575
+ display: flex;
1576
+ gap: 6px;
1577
+ flex-wrap: wrap;
1578
+ }
1579
+
1580
+ .btn-service-start { color: var(--accent-green) !important; border-color: var(--accent-green) !important; }
1581
+ .btn-service-stop { color: var(--accent-red) !important; border-color: var(--accent-red) !important; }
1582
+ .btn-service-delete { color: var(--accent-red) !important; border-color: var(--accent-red) !important; }
1583
+
1584
+ /* Service form */
1585
+ .service-form {
1586
+ margin-bottom: 16px;
1587
+ padding: 12px;
1588
+ background: var(--bg-surface);
1589
+ border-radius: var(--radius);
1590
+ border: 1px solid var(--border);
1591
+ }
1592
+
1593
+ .service-input {
1594
+ display: block;
1595
+ width: 100%;
1596
+ padding: 10px 12px;
1597
+ margin-bottom: 8px;
1598
+ border: 1px solid var(--border);
1599
+ border-radius: var(--radius);
1600
+ background: var(--bg);
1601
+ color: var(--text);
1602
+ font-family: inherit;
1603
+ font-size: 16px;
1604
+ }
1605
+
1606
+ .service-input:focus {
1607
+ outline: none;
1608
+ border-color: var(--accent);
1609
+ }
1610
+
1611
+ .service-form-actions {
1612
+ display: flex;
1613
+ gap: 8px;
1614
+ }
1615
+
1616
+ /* Service log viewer */
1617
+ .service-logs-container {
1618
+ height: 100%;
1619
+ display: flex;
1620
+ flex-direction: column;
1621
+ padding: 16px;
1622
+ }
1623
+
1624
+ .service-logs-header {
1625
+ margin-bottom: 12px;
1626
+ }
1627
+
1628
+ .service-logs-header h1 {
1629
+ font-size: 18px;
1630
+ margin: 4px 0;
1631
+ }
1632
+
1633
+ .service-logs-meta {
1634
+ display: flex;
1635
+ align-items: center;
1636
+ gap: 8px;
1637
+ font-size: 13px;
1638
+ color: var(--text-muted);
1639
+ }
1640
+
1641
+ .service-command-small {
1642
+ font-family: monospace;
1643
+ font-size: 12px;
1644
+ }
1645
+
1646
+ .service-logs-actions {
1647
+ display: flex;
1648
+ align-items: center;
1649
+ gap: 12px;
1650
+ margin-bottom: 8px;
1651
+ }
1652
+
1653
+ .service-autoscroll-label {
1654
+ font-size: 13px;
1655
+ color: var(--text-muted);
1656
+ display: flex;
1657
+ align-items: center;
1658
+ gap: 4px;
1659
+ }
1660
+
1661
+ .service-logs {
1662
+ flex: 1;
1663
+ overflow-y: auto;
1664
+ background: var(--bg);
1665
+ border: 1px solid var(--border);
1666
+ border-radius: var(--radius);
1667
+ padding: 12px;
1668
+ font-size: 12px;
1669
+ font-family: 'SF Mono', 'Menlo', 'Monaco', 'Consolas', monospace;
1670
+ line-height: 1.5;
1671
+ white-space: pre-wrap;
1672
+ word-break: break-word;
1673
+ color: var(--text-muted);
1674
+ -webkit-overflow-scrolling: touch;
1675
+ }
1676
+
1677
+ /* Service status bar in chat */
1678
+ .service-status-bar {
1679
+ display: flex;
1680
+ gap: 4px;
1681
+ padding: 6px 12px;
1682
+ background: var(--bg-surface);
1683
+ border-bottom: 1px solid var(--border);
1684
+ overflow-x: auto;
1685
+ flex-wrap: wrap;
1686
+ }
1687
+
1688
+ .service-toggle {
1689
+ display: flex;
1690
+ align-items: center;
1691
+ gap: 4px;
1692
+ padding: 4px 10px;
1693
+ background: var(--bg);
1694
+ border: 1px solid var(--border);
1695
+ border-radius: 16px;
1696
+ color: var(--text);
1697
+ font-size: 12px;
1698
+ cursor: pointer;
1699
+ white-space: nowrap;
1700
+ }
1701
+
1702
+ .service-toggle:active {
1703
+ opacity: 0.7;
1704
+ }
1705
+
1706
+ /* Project selector */
1707
+ .project-selector {
1708
+ position: relative;
1709
+ display: flex;
1710
+ align-items: center;
1711
+ padding: 0 4px 0 8px;
1712
+ flex-shrink: 0;
1713
+ }
1714
+
1715
+ .project-selector-btn {
1716
+ background: var(--bg-elevated);
1717
+ color: var(--accent-blue);
1718
+ border: 1px solid var(--accent-blue);
1719
+ border-radius: var(--radius);
1720
+ padding: 6px 12px;
1721
+ font-size: 13px;
1722
+ font-weight: 600;
1723
+ cursor: pointer;
1724
+ white-space: nowrap;
1725
+ max-width: 120px;
1726
+ overflow: hidden;
1727
+ text-overflow: ellipsis;
1728
+ }
1729
+
1730
+ .project-dropdown {
1731
+ display: none;
1732
+ position: absolute;
1733
+ top: 100%;
1734
+ left: 8px;
1735
+ min-width: 200px;
1736
+ max-width: 280px;
1737
+ background: var(--bg-surface);
1738
+ border: 1px solid var(--border);
1739
+ border-radius: var(--radius);
1740
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
1741
+ z-index: 200;
1742
+ flex-direction: column;
1743
+ overflow: hidden;
1744
+ max-height: 60vh;
1745
+ overflow-y: auto;
1746
+ }
1747
+
1748
+ .project-dropdown.open {
1749
+ display: flex;
1750
+ }
1751
+
1752
+ .project-option {
1753
+ display: block;
1754
+ width: 100%;
1755
+ padding: 10px 14px;
1756
+ background: none;
1757
+ border: none;
1758
+ color: var(--text);
1759
+ font-size: 14px;
1760
+ text-align: left;
1761
+ cursor: pointer;
1762
+ }
1763
+
1764
+ .project-option:active,
1765
+ .project-option:hover {
1766
+ background: var(--bg-elevated);
1767
+ }
1768
+
1769
+ .project-option.active {
1770
+ color: var(--accent-blue);
1771
+ font-weight: 600;
1772
+ background: rgba(96, 165, 250, 0.1);
1773
+ }
1774
+
1775
+ .project-option-action {
1776
+ color: var(--accent-green);
1777
+ font-weight: 600;
1778
+ }
1779
+
1780
+ .project-dropdown-divider {
1781
+ height: 1px;
1782
+ background: var(--border);
1783
+ margin: 4px 0;
1784
+ }
1785
+
1786
+ .project-inline-form {
1787
+ padding: 8px 14px;
1788
+ display: flex;
1789
+ gap: 6px;
1790
+ align-items: center;
1791
+ }
1792
+
1793
+ .project-inline-input {
1794
+ flex: 1;
1795
+ padding: 6px 10px;
1796
+ border: 1px solid var(--border);
1797
+ border-radius: var(--radius);
1798
+ background: var(--bg);
1799
+ color: var(--text);
1800
+ font-family: inherit;
1801
+ font-size: 14px;
1802
+ }
1803
+
1804
+ .project-inline-input:focus {
1805
+ outline: none;
1806
+ border-color: var(--accent);
1807
+ }
1808
+
1809
+ .adopt-list {
1810
+ display: flex;
1811
+ flex-direction: column;
1812
+ }
1813
+
1814
+ .adopt-list .project-option {
1815
+ font-size: 13px;
1816
+ padding: 8px 14px;
1817
+ }
1818
+
1819
+ /* Git sync bar */
1820
+ .git-sync-bar {
1821
+ display: flex;
1822
+ align-items: center;
1823
+ justify-content: space-between;
1824
+ gap: 8px;
1825
+ padding: 10px 12px;
1826
+ margin-bottom: 12px;
1827
+ background: var(--bg-surface);
1828
+ border: 1px solid var(--border);
1829
+ border-radius: var(--radius);
1830
+ }
1831
+
1832
+ .git-sync-info {
1833
+ display: flex;
1834
+ gap: 12px;
1835
+ font-size: 13px;
1836
+ font-weight: 600;
1837
+ }
1838
+
1839
+ .git-ahead {
1840
+ color: var(--accent-blue);
1841
+ }
1842
+
1843
+ .git-behind {
1844
+ color: var(--accent-yellow);
1845
+ }
1846
+
1847
+ .git-sync-actions {
1848
+ display: flex;
1849
+ gap: 6px;
1850
+ flex-shrink: 0;
1851
+ }
1852
+
1853
+ .git-push-btn {
1854
+ color: var(--accent-blue) !important;
1855
+ border-color: var(--accent-blue) !important;
1856
+ }
1857
+
1858
+ .git-pull-btn {
1859
+ color: var(--accent-yellow) !important;
1860
+ border-color: var(--accent-yellow) !important;
1861
+ }
1862
+
1863
+ .git-sync-error {
1864
+ flex: 1;
1865
+ font-size: 12px;
1866
+ color: var(--accent-red);
1867
+ word-break: break-word;
1868
+ max-height: 60px;
1869
+ overflow-y: auto;
1870
+ }
1871
+
1872
+ /* Outgoing commits list */
1873
+ .git-ahead-toggle {
1874
+ cursor: pointer;
1875
+ -webkit-tap-highlight-color: transparent;
1876
+ text-decoration: underline;
1877
+ text-decoration-style: dotted;
1878
+ text-underline-offset: 3px;
1879
+ }
1880
+
1881
+ .git-commit-list {
1882
+ margin-bottom: 12px;
1883
+ background: var(--bg-surface);
1884
+ border: 1px solid var(--border);
1885
+ border-top: none;
1886
+ border-radius: 0 0 var(--radius) var(--radius);
1887
+ margin-top: -12px;
1888
+ padding-top: 4px;
1889
+ }
1890
+
1891
+ .git-commit-entries {
1892
+ padding: 4px 12px;
1893
+ }
1894
+
1895
+ .git-commit-entry {
1896
+ padding: 4px 0;
1897
+ font-size: 13px;
1898
+ line-height: 1.4;
1899
+ border-bottom: 1px solid rgba(42, 42, 74, 0.5);
1900
+ overflow: hidden;
1901
+ text-overflow: ellipsis;
1902
+ white-space: nowrap;
1903
+ }
1904
+
1905
+ .git-commit-entry:last-child {
1906
+ border-bottom: none;
1907
+ }
1908
+
1909
+ .git-commit-hash {
1910
+ font-family: 'SF Mono', 'Menlo', 'Monaco', 'Consolas', monospace;
1911
+ font-size: 12px;
1912
+ color: var(--accent-blue);
1913
+ }
1914
+
1915
+ .git-commit-subject {
1916
+ color: var(--text);
1917
+ }
1918
+
1919
+ .git-commit-list-actions {
1920
+ padding: 6px 12px 8px;
1921
+ display: flex;
1922
+ justify-content: flex-end;
1923
+ }
1924
+
1925
+ /* Chat action buttons row */
1926
+ .chat-action-buttons {
1927
+ display: flex;
1928
+ gap: 8px;
1929
+ padding: 0 16px 12px;
1930
+ }
1931
+
1932
+ .chat-action-buttons .draft-task-btn {
1933
+ flex: 1;
1934
+ width: auto;
1935
+ margin: 0;
1936
+ }
1937
+
1938
+ /* Branch indicator */
1939
+ .branch-indicator {
1940
+ display: block;
1941
+ padding: 6px 16px;
1942
+ background: var(--bg-surface);
1943
+ color: var(--text-muted);
1944
+ font-size: 13px;
1945
+ font-weight: 600;
1946
+ text-align: center;
1947
+ text-decoration: none;
1948
+ border-bottom: 1px solid var(--border);
1949
+ font-family: 'SF Mono', 'Menlo', 'Monaco', 'Consolas', monospace;
1950
+ }
1951
+
1952
+ .branch-indicator-feature {
1953
+ background: rgba(96, 165, 250, 0.1);
1954
+ color: var(--accent-blue);
1955
+ border-bottom-color: rgba(96, 165, 250, 0.3);
1956
+ }
1957
+
1958
+ .main-with-branch {
1959
+ height: calc(100vh - 49px - 33px);
1960
+ }
1961
+
1962
+ /* Branches page */
1963
+ .branches-container {
1964
+ height: 100%;
1965
+ overflow-y: auto;
1966
+ padding: 16px;
1967
+ -webkit-overflow-scrolling: touch;
1968
+ }
1969
+
1970
+ .branches-header {
1971
+ display: flex;
1972
+ justify-content: space-between;
1973
+ align-items: center;
1974
+ margin-bottom: 16px;
1975
+ }
1976
+
1977
+ .branches-header h1 { font-size: 20px; }
1978
+
1979
+ .branch-create-form {
1980
+ display: flex;
1981
+ gap: 8px;
1982
+ margin-bottom: 16px;
1983
+ }
1984
+
1985
+ .branch-input {
1986
+ flex: 1;
1987
+ padding: 10px 12px;
1988
+ border: 1px solid var(--border);
1989
+ border-radius: var(--radius);
1990
+ background: var(--bg);
1991
+ color: var(--text);
1992
+ font-family: 'SF Mono', 'Menlo', 'Monaco', 'Consolas', monospace;
1993
+ font-size: 14px;
1994
+ }
1995
+
1996
+ .branch-input:focus {
1997
+ outline: none;
1998
+ border-color: var(--accent);
1999
+ }
2000
+
2001
+ .branch-warning {
2002
+ padding: 10px 12px;
2003
+ margin-bottom: 12px;
2004
+ background: rgba(251, 191, 36, 0.1);
2005
+ border: 1px solid rgba(251, 191, 36, 0.3);
2006
+ border-radius: var(--radius);
2007
+ color: var(--accent-yellow);
2008
+ font-size: 13px;
2009
+ }
2010
+
2011
+ .branch-message {
2012
+ padding: 10px 12px;
2013
+ margin-bottom: 12px;
2014
+ border-radius: var(--radius);
2015
+ font-size: 13px;
2016
+ }
2017
+
2018
+ .branch-message-error {
2019
+ background: rgba(248, 113, 113, 0.1);
2020
+ border: 1px solid rgba(248, 113, 113, 0.3);
2021
+ color: var(--accent-red);
2022
+ }
2023
+
2024
+ .branch-message-success {
2025
+ background: rgba(74, 222, 128, 0.1);
2026
+ border: 1px solid rgba(74, 222, 128, 0.3);
2027
+ color: var(--accent-green);
2028
+ }
2029
+
2030
+ .branch-list {
2031
+ display: flex;
2032
+ flex-direction: column;
2033
+ gap: 8px;
2034
+ }
2035
+
2036
+ .branch-card {
2037
+ padding: 12px;
2038
+ background: var(--bg-surface);
2039
+ border-radius: var(--radius);
2040
+ border-left: 3px solid var(--text-muted);
2041
+ }
2042
+
2043
+ .branch-card.branch-current {
2044
+ border-left-color: var(--accent-blue);
2045
+ background: rgba(96, 165, 250, 0.05);
2046
+ }
2047
+
2048
+ .branch-card-top {
2049
+ display: flex;
2050
+ align-items: center;
2051
+ gap: 8px;
2052
+ margin-bottom: 4px;
2053
+ }
2054
+
2055
+ .branch-name {
2056
+ font-weight: 600;
2057
+ font-size: 15px;
2058
+ font-family: 'SF Mono', 'Menlo', 'Monaco', 'Consolas', monospace;
2059
+ }
2060
+
2061
+ .branch-current-label {
2062
+ display: inline-block;
2063
+ padding: 2px 8px;
2064
+ border-radius: 12px;
2065
+ font-size: 11px;
2066
+ font-weight: 700;
2067
+ text-transform: uppercase;
2068
+ background: rgba(96, 165, 250, 0.2);
2069
+ color: var(--accent-blue);
2070
+ }
2071
+
2072
+ .branch-meta {
2073
+ font-size: 12px;
2074
+ color: var(--text-muted);
2075
+ margin-bottom: 2px;
2076
+ }
2077
+
2078
+ .branch-actions {
2079
+ display: flex;
2080
+ gap: 6px;
2081
+ margin-top: 8px;
2082
+ flex-wrap: wrap;
2083
+ }
2084
+
2085
+ .btn-branch-switch { color: var(--accent-blue) !important; border-color: var(--accent-blue) !important; }
2086
+ .btn-branch-push { color: var(--accent-green) !important; border-color: var(--accent-green) !important; }
2087
+ .btn-branch-merge { color: var(--accent-yellow) !important; border-color: var(--accent-yellow) !important; }
2088
+ .btn-branch-delete { color: var(--accent-red) !important; border-color: var(--accent-red) !important; }