opencode-replay 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,3384 @@
1
+ /**
2
+ * OpenCode Replay - Main Stylesheet
3
+ * Clean, professional design for session transcripts
4
+ */
5
+
6
+ /* ============================================================================
7
+ CSS Variables / Theme - LIGHT MODE (Default)
8
+ ============================================================================ */
9
+
10
+ :root {
11
+ /* Color scheme declaration */
12
+ color-scheme: light dark;
13
+
14
+ /* Colors */
15
+ --color-bg: #ffffff;
16
+ --color-bg-secondary: #f8f9fa;
17
+ --color-bg-tertiary: #f1f3f5;
18
+ --color-text: #212529;
19
+ --color-text-secondary: #6c757d;
20
+ --color-text-muted: #adb5bd;
21
+ --color-border: #dee2e6;
22
+ --color-border-light: #e9ecef;
23
+
24
+ /* Message backgrounds */
25
+ --user-bg: #e3f2fd;
26
+ --user-border: #90caf9;
27
+ --assistant-bg: #f5f5f5;
28
+ --assistant-border: #e0e0e0;
29
+ --tool-bg: #fff8e1;
30
+ --tool-border: #ffecb3;
31
+ --error-bg: #ffebee;
32
+ --error-border: #ffcdd2;
33
+ --reasoning-bg: #fff3e0;
34
+ --reasoning-border: #ffe0b2;
35
+
36
+ /* Tool-specific colors */
37
+ --bash-bg: #f3e5f5;
38
+ --bash-border: #ce93d8;
39
+ --read-bg: #e8eaf6;
40
+ --read-border: #9fa8da;
41
+ --write-bg: #e8f5e9;
42
+ --write-border: #a5d6a7;
43
+ --edit-bg: #fff3e0;
44
+ --edit-border: #ffcc80;
45
+
46
+ /* Status colors */
47
+ --color-success: #28a745;
48
+ --color-error: #dc3545;
49
+ --color-warning: #ffc107;
50
+ --color-info: #17a2b8;
51
+
52
+ /* Code */
53
+ --code-bg: #f6f8fa;
54
+ --code-border: #e1e4e8;
55
+ --code-text: #24292e;
56
+
57
+ /* Typography */
58
+ --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
59
+ --font-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
60
+ --font-size-base: 16px;
61
+ --font-size-sm: 14px;
62
+ --font-size-xs: 12px;
63
+ --font-size-lg: 18px;
64
+ --line-height: 1.6;
65
+
66
+ /* Spacing */
67
+ --spacing-xs: 4px;
68
+ --spacing-sm: 8px;
69
+ --spacing-md: 16px;
70
+ --spacing-lg: 24px;
71
+ --spacing-xl: 32px;
72
+
73
+ /* Border radius */
74
+ --radius-sm: 4px;
75
+ --radius-md: 8px;
76
+ --radius-lg: 12px;
77
+
78
+ /* Shadows */
79
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
80
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);
81
+
82
+ /* Scrollbar */
83
+ --scrollbar-track: #f1f1f1;
84
+ --scrollbar-thumb: #c1c1c1;
85
+
86
+ /* Container */
87
+ --container-max-width: 900px;
88
+ }
89
+
90
+ /* ============================================================================
91
+ DARK MODE - Automatic (OS Preference)
92
+ ============================================================================ */
93
+
94
+ @media (prefers-color-scheme: dark) {
95
+ :root:not([data-theme="light"]) {
96
+ color-scheme: dark;
97
+
98
+ /* Core Colors */
99
+ --color-bg: #0d1117;
100
+ --color-bg-secondary: #161b22;
101
+ --color-bg-tertiary: #21262d;
102
+ --color-text: #e6edf3;
103
+ --color-text-secondary: #8b949e;
104
+ --color-text-muted: #6e7681;
105
+ --color-border: #30363d;
106
+ --color-border-light: #21262d;
107
+
108
+ /* Message backgrounds */
109
+ --user-bg: #1c3a5e;
110
+ --user-border: #2d5a8b;
111
+ --assistant-bg: #21262d;
112
+ --assistant-border: #30363d;
113
+ --tool-bg: #2d2006;
114
+ --tool-border: #4a3c1a;
115
+ --error-bg: #3d1418;
116
+ --error-border: #5c2125;
117
+ --reasoning-bg: #2d2006;
118
+ --reasoning-border: #4a3c1a;
119
+
120
+ /* Tool-specific colors */
121
+ --bash-bg: #2a1f35;
122
+ --bash-border: #4a3860;
123
+ --read-bg: #1a2340;
124
+ --read-border: #2d3a5a;
125
+ --write-bg: #1a2e1a;
126
+ --write-border: #2d4a2d;
127
+ --edit-bg: #2d2006;
128
+ --edit-border: #4a3c1a;
129
+
130
+ /* Status colors */
131
+ --color-success: #3fb950;
132
+ --color-error: #f85149;
133
+ --color-warning: #d29922;
134
+ --color-info: #58a6ff;
135
+
136
+ /* Code */
137
+ --code-bg: #161b22;
138
+ --code-border: #30363d;
139
+ --code-text: #e6edf3;
140
+
141
+ /* Shadows - darker for dark mode */
142
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
143
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.4);
144
+
145
+ /* Scrollbar */
146
+ --scrollbar-track: #21262d;
147
+ --scrollbar-thumb: #484f58;
148
+ }
149
+ }
150
+
151
+ /* ============================================================================
152
+ DARK MODE - Manual Override via data-theme attribute
153
+ ============================================================================ */
154
+
155
+ :root[data-theme="dark"] {
156
+ color-scheme: dark;
157
+
158
+ /* Core Colors */
159
+ --color-bg: #0d1117;
160
+ --color-bg-secondary: #161b22;
161
+ --color-bg-tertiary: #21262d;
162
+ --color-text: #e6edf3;
163
+ --color-text-secondary: #8b949e;
164
+ --color-text-muted: #6e7681;
165
+ --color-border: #30363d;
166
+ --color-border-light: #21262d;
167
+
168
+ /* Message backgrounds */
169
+ --user-bg: #1c3a5e;
170
+ --user-border: #2d5a8b;
171
+ --assistant-bg: #21262d;
172
+ --assistant-border: #30363d;
173
+ --tool-bg: #2d2006;
174
+ --tool-border: #4a3c1a;
175
+ --error-bg: #3d1418;
176
+ --error-border: #5c2125;
177
+ --reasoning-bg: #2d2006;
178
+ --reasoning-border: #4a3c1a;
179
+
180
+ /* Tool-specific colors */
181
+ --bash-bg: #2a1f35;
182
+ --bash-border: #4a3860;
183
+ --read-bg: #1a2340;
184
+ --read-border: #2d3a5a;
185
+ --write-bg: #1a2e1a;
186
+ --write-border: #2d4a2d;
187
+ --edit-bg: #2d2006;
188
+ --edit-border: #4a3c1a;
189
+
190
+ /* Status colors */
191
+ --color-success: #3fb950;
192
+ --color-error: #f85149;
193
+ --color-warning: #d29922;
194
+ --color-info: #58a6ff;
195
+
196
+ /* Code */
197
+ --code-bg: #161b22;
198
+ --code-border: #30363d;
199
+ --code-text: #e6edf3;
200
+
201
+ /* Shadows - darker for dark mode */
202
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
203
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.4);
204
+
205
+ /* Scrollbar */
206
+ --scrollbar-track: #21262d;
207
+ --scrollbar-thumb: #484f58;
208
+ }
209
+
210
+ /* Force light mode when explicitly set */
211
+ :root[data-theme="light"] {
212
+ color-scheme: light;
213
+ /* All light mode values are already the default in :root */
214
+ }
215
+
216
+ /* ============================================================================
217
+ Reset & Base Styles
218
+ ============================================================================ */
219
+
220
+ *,
221
+ *::before,
222
+ *::after {
223
+ box-sizing: border-box;
224
+ }
225
+
226
+ html {
227
+ font-size: var(--font-size-base);
228
+ line-height: var(--line-height);
229
+ }
230
+
231
+ body {
232
+ margin: 0;
233
+ padding: 0;
234
+ font-family: var(--font-sans);
235
+ color: var(--color-text);
236
+ background-color: var(--color-bg);
237
+ }
238
+
239
+ a {
240
+ color: var(--color-info);
241
+ text-decoration: none;
242
+ }
243
+
244
+ a:hover {
245
+ text-decoration: underline;
246
+ }
247
+
248
+ h1, h2, h3, h4, h5, h6 {
249
+ margin-top: 0;
250
+ margin-bottom: var(--spacing-md);
251
+ font-weight: 600;
252
+ line-height: 1.3;
253
+ }
254
+
255
+ h1 { font-size: 2rem; }
256
+ h2 { font-size: 1.5rem; }
257
+ h3 { font-size: 1.25rem; }
258
+
259
+ p {
260
+ margin-top: 0;
261
+ margin-bottom: var(--spacing-md);
262
+ }
263
+
264
+ code {
265
+ font-family: var(--font-mono);
266
+ font-size: 0.9em;
267
+ padding: 2px 6px;
268
+ background: var(--code-bg);
269
+ border: 1px solid var(--code-border);
270
+ border-radius: var(--radius-sm);
271
+ }
272
+
273
+ pre {
274
+ margin: 0;
275
+ padding: var(--spacing-md);
276
+ overflow-x: auto;
277
+ background: var(--code-bg);
278
+ border: 1px solid var(--code-border);
279
+ border-radius: var(--radius-md);
280
+ }
281
+
282
+ pre code {
283
+ padding: 0;
284
+ background: none;
285
+ border: none;
286
+ font-size: var(--font-size-sm);
287
+ }
288
+
289
+ /* ============================================================================
290
+ Container & Layout
291
+ ============================================================================ */
292
+
293
+ .container {
294
+ max-width: var(--container-max-width);
295
+ margin: 0 auto;
296
+ padding: var(--spacing-lg);
297
+ }
298
+
299
+ /* ============================================================================
300
+ Page Header
301
+ ============================================================================ */
302
+
303
+ .page-header {
304
+ margin-bottom: var(--spacing-xl);
305
+ padding-bottom: var(--spacing-lg);
306
+ border-bottom: 1px solid var(--color-border);
307
+ }
308
+
309
+ .page-header h1 {
310
+ margin-bottom: var(--spacing-sm);
311
+ }
312
+
313
+ .page-header .subtitle {
314
+ color: var(--color-text-secondary);
315
+ margin-bottom: var(--spacing-md);
316
+ }
317
+
318
+ /* Breadcrumbs */
319
+ .breadcrumbs {
320
+ margin-bottom: var(--spacing-md);
321
+ font-size: var(--font-size-sm);
322
+ }
323
+
324
+ .breadcrumb-item {
325
+ color: var(--color-text-secondary);
326
+ }
327
+
328
+ .breadcrumb-item.current {
329
+ color: var(--color-text);
330
+ }
331
+
332
+ .breadcrumb-separator {
333
+ margin: 0 var(--spacing-sm);
334
+ color: var(--color-text-muted);
335
+ }
336
+
337
+ /* Search trigger */
338
+ .search-container {
339
+ margin-top: var(--spacing-md);
340
+ }
341
+
342
+ .search-trigger {
343
+ display: inline-flex;
344
+ align-items: center;
345
+ gap: var(--spacing-sm);
346
+ padding: var(--spacing-sm) var(--spacing-md);
347
+ background: var(--color-bg-secondary);
348
+ border: 1px solid var(--color-border);
349
+ border-radius: var(--radius-md);
350
+ cursor: pointer;
351
+ font-size: var(--font-size-sm);
352
+ color: var(--color-text-secondary);
353
+ transition: border-color 0.2s;
354
+ }
355
+
356
+ .search-trigger:hover {
357
+ border-color: var(--color-text-muted);
358
+ }
359
+
360
+ .search-trigger kbd {
361
+ padding: 2px 6px;
362
+ background: var(--color-bg);
363
+ border: 1px solid var(--color-border);
364
+ border-radius: var(--radius-sm);
365
+ font-family: var(--font-sans);
366
+ font-size: var(--font-size-xs);
367
+ }
368
+
369
+ /* ============================================================================
370
+ Page Footer
371
+ ============================================================================ */
372
+
373
+ .page-footer {
374
+ margin-top: var(--spacing-xl);
375
+ padding-top: var(--spacing-lg);
376
+ border-top: 1px solid var(--color-border);
377
+ text-align: center;
378
+ font-size: var(--font-size-sm);
379
+ color: var(--color-text-secondary);
380
+ }
381
+
382
+ /* ============================================================================
383
+ Session Cards (Index Page)
384
+ ============================================================================ */
385
+
386
+ .session-list {
387
+ display: flex;
388
+ flex-direction: column;
389
+ gap: var(--spacing-md);
390
+ }
391
+
392
+ .session-card {
393
+ display: block;
394
+ padding: var(--spacing-lg);
395
+ background: var(--color-bg);
396
+ border: 1px solid var(--color-border);
397
+ border-radius: var(--radius-md);
398
+ transition: box-shadow 0.2s, border-color 0.2s;
399
+ text-decoration: none;
400
+ color: inherit;
401
+ }
402
+
403
+ .session-card:hover {
404
+ border-color: var(--color-text-muted);
405
+ box-shadow: var(--shadow-md);
406
+ text-decoration: none;
407
+ }
408
+
409
+ .session-card .session-title {
410
+ font-size: var(--font-size-lg);
411
+ font-weight: 600;
412
+ margin-bottom: var(--spacing-sm);
413
+ color: var(--color-text);
414
+ }
415
+
416
+ .session-card .session-meta {
417
+ display: flex;
418
+ flex-wrap: wrap;
419
+ gap: var(--spacing-md);
420
+ font-size: var(--font-size-sm);
421
+ color: var(--color-text-secondary);
422
+ margin-bottom: var(--spacing-sm);
423
+ }
424
+
425
+ .session-card .session-summary {
426
+ font-size: var(--font-size-sm);
427
+ color: var(--color-text-secondary);
428
+ margin-bottom: var(--spacing-sm);
429
+ display: -webkit-box;
430
+ -webkit-line-clamp: 2;
431
+ -webkit-box-orient: vertical;
432
+ overflow: hidden;
433
+ }
434
+
435
+ .session-card .session-stats {
436
+ display: flex;
437
+ gap: var(--spacing-md);
438
+ font-size: var(--font-size-xs);
439
+ color: var(--color-text-muted);
440
+ }
441
+
442
+ .session-card .stat-additions {
443
+ color: var(--color-success);
444
+ }
445
+
446
+ .session-card .stat-deletions {
447
+ color: var(--color-error);
448
+ }
449
+
450
+ /* ============================================================================
451
+ Messages
452
+ ============================================================================ */
453
+
454
+ .messages {
455
+ display: flex;
456
+ flex-direction: column;
457
+ gap: var(--spacing-lg);
458
+ }
459
+
460
+ .message {
461
+ border-radius: var(--radius-md);
462
+ overflow: hidden;
463
+ }
464
+
465
+ .message-header {
466
+ display: flex;
467
+ align-items: center;
468
+ gap: var(--spacing-md);
469
+ padding: var(--spacing-sm) var(--spacing-md);
470
+ font-size: var(--font-size-sm);
471
+ }
472
+
473
+ .message-role {
474
+ font-weight: 600;
475
+ text-transform: uppercase;
476
+ font-size: var(--font-size-xs);
477
+ letter-spacing: 0.5px;
478
+ }
479
+
480
+ .message-time {
481
+ color: var(--color-text-secondary);
482
+ }
483
+
484
+ .message-model {
485
+ color: var(--color-text-muted);
486
+ margin-left: auto;
487
+ }
488
+
489
+ .message-content {
490
+ padding: var(--spacing-md);
491
+ }
492
+
493
+ .message-stats {
494
+ display: flex;
495
+ gap: var(--spacing-md);
496
+ padding: var(--spacing-sm) var(--spacing-md);
497
+ font-size: var(--font-size-xs);
498
+ color: var(--color-text-secondary);
499
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
500
+ }
501
+
502
+ /* User message */
503
+ .message-user {
504
+ background: var(--user-bg);
505
+ border: 1px solid var(--user-border);
506
+ }
507
+
508
+ .message-user .message-role {
509
+ color: #1565c0;
510
+ }
511
+
512
+ /* Assistant message */
513
+ .message-assistant {
514
+ background: var(--assistant-bg);
515
+ border: 1px solid var(--assistant-border);
516
+ }
517
+
518
+ .message-assistant .message-role {
519
+ color: #424242;
520
+ }
521
+
522
+ /* ============================================================================
523
+ Tool Calls
524
+ ============================================================================ */
525
+
526
+ .tool-call {
527
+ margin: var(--spacing-md) 0;
528
+ border-radius: var(--radius-md);
529
+ overflow: hidden;
530
+ font-size: var(--font-size-sm);
531
+ }
532
+
533
+ .tool-header {
534
+ display: flex;
535
+ align-items: center;
536
+ gap: var(--spacing-sm);
537
+ padding: var(--spacing-sm) var(--spacing-md);
538
+ cursor: pointer;
539
+ user-select: none;
540
+ }
541
+
542
+ .tool-header:hover {
543
+ filter: brightness(0.98);
544
+ }
545
+
546
+ .tool-icon {
547
+ font-size: var(--font-size-lg);
548
+ }
549
+
550
+ .tool-name {
551
+ font-weight: 600;
552
+ }
553
+
554
+ .tool-title {
555
+ color: var(--color-text-secondary);
556
+ flex: 1;
557
+ overflow: hidden;
558
+ text-overflow: ellipsis;
559
+ white-space: nowrap;
560
+ }
561
+
562
+ .tool-toggle {
563
+ padding: 2px 6px;
564
+ background: none;
565
+ border: none;
566
+ cursor: pointer;
567
+ font-size: var(--font-size-xs);
568
+ color: var(--color-text-muted);
569
+ }
570
+
571
+ .tool-body {
572
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
573
+ }
574
+
575
+ .tool-body.collapsed {
576
+ display: none;
577
+ }
578
+
579
+ .tool-input,
580
+ .tool-output {
581
+ padding: var(--spacing-md);
582
+ }
583
+
584
+ .tool-input {
585
+ background: rgba(255, 255, 255, 0.5);
586
+ }
587
+
588
+ .tool-output {
589
+ background: rgba(0, 0, 0, 0.02);
590
+ }
591
+
592
+ /* Tool-specific styling */
593
+ .tool-bash {
594
+ background: var(--bash-bg);
595
+ border: 1px solid var(--bash-border);
596
+ }
597
+
598
+ .tool-read {
599
+ background: var(--read-bg);
600
+ border: 1px solid var(--read-border);
601
+ }
602
+
603
+ .tool-write {
604
+ background: var(--write-bg);
605
+ border: 1px solid var(--write-border);
606
+ }
607
+
608
+ .tool-edit {
609
+ background: var(--edit-bg);
610
+ border: 1px solid var(--edit-border);
611
+ }
612
+
613
+ .tool-glob,
614
+ .tool-grep {
615
+ background: var(--read-bg);
616
+ border: 1px solid var(--read-border);
617
+ }
618
+
619
+ .tool-task {
620
+ background: var(--tool-bg);
621
+ border: 1px solid var(--tool-border);
622
+ }
623
+
624
+ /* Tool status indicators */
625
+ .tool-call[data-status="error"] {
626
+ background: var(--error-bg);
627
+ border-color: var(--error-border);
628
+ }
629
+
630
+ .tool-call[data-status="running"] {
631
+ opacity: 0.8;
632
+ }
633
+
634
+ /* Command styling for bash */
635
+ .tool-command {
636
+ font-family: var(--font-mono);
637
+ background: rgba(0, 0, 0, 0.05);
638
+ padding: 2px 6px;
639
+ border-radius: var(--radius-sm);
640
+ }
641
+
642
+ .bash-command {
643
+ font-family: var(--font-mono);
644
+ font-size: var(--font-size-sm);
645
+ background: rgba(0, 0, 0, 0.08);
646
+ padding: 4px 8px;
647
+ border-radius: var(--radius-sm);
648
+ flex: 1;
649
+ overflow: hidden;
650
+ text-overflow: ellipsis;
651
+ white-space: nowrap;
652
+ }
653
+
654
+ .bash-description {
655
+ color: var(--color-text-secondary);
656
+ font-size: var(--font-size-sm);
657
+ margin-left: var(--spacing-sm);
658
+ }
659
+
660
+ .bash-workdir {
661
+ font-family: var(--font-mono);
662
+ font-size: var(--font-size-xs);
663
+ color: var(--color-text-muted);
664
+ background: rgba(0, 0, 0, 0.05);
665
+ padding: 2px 6px;
666
+ border-radius: var(--radius-sm);
667
+ }
668
+
669
+ .bash-output {
670
+ padding: var(--spacing-md);
671
+ background: #1e1e1e;
672
+ max-height: 400px;
673
+ overflow: auto;
674
+ }
675
+
676
+ .bash-output pre {
677
+ margin: 0;
678
+ padding: 0;
679
+ background: transparent;
680
+ border: none;
681
+ }
682
+
683
+ .bash-output code {
684
+ color: #d4d4d4;
685
+ font-size: var(--font-size-sm);
686
+ background: transparent;
687
+ border: none;
688
+ padding: 0;
689
+ white-space: pre-wrap;
690
+ word-break: break-all;
691
+ }
692
+
693
+ .bash-error {
694
+ padding: var(--spacing-md);
695
+ background: var(--error-bg);
696
+ border-top: 1px solid var(--error-border);
697
+ }
698
+
699
+ .bash-error pre {
700
+ margin: 0;
701
+ padding: 0;
702
+ background: transparent;
703
+ border: none;
704
+ }
705
+
706
+ .bash-error code {
707
+ color: var(--color-error);
708
+ font-size: var(--font-size-sm);
709
+ background: transparent;
710
+ border: none;
711
+ padding: 0;
712
+ }
713
+
714
+ /* Read tool styling */
715
+ .read-file-path {
716
+ font-family: var(--font-mono);
717
+ font-size: var(--font-size-sm);
718
+ font-weight: 600;
719
+ color: var(--color-text);
720
+ }
721
+
722
+ .read-full-path {
723
+ font-family: var(--font-mono);
724
+ font-size: var(--font-size-xs);
725
+ color: var(--color-text-muted);
726
+ overflow: hidden;
727
+ text-overflow: ellipsis;
728
+ white-space: nowrap;
729
+ flex: 1;
730
+ }
731
+
732
+ .read-range {
733
+ font-size: var(--font-size-xs);
734
+ color: var(--color-text-secondary);
735
+ background: rgba(0, 0, 0, 0.05);
736
+ padding: 2px 6px;
737
+ border-radius: var(--radius-sm);
738
+ }
739
+
740
+ .read-lines {
741
+ font-size: var(--font-size-xs);
742
+ color: var(--color-text-muted);
743
+ }
744
+
745
+ .read-content {
746
+ padding: var(--spacing-md);
747
+ background: var(--code-bg);
748
+ max-height: 500px;
749
+ overflow: auto;
750
+ }
751
+
752
+ .read-content pre {
753
+ margin: 0;
754
+ padding: 0;
755
+ background: transparent;
756
+ border: none;
757
+ }
758
+
759
+ .read-content code {
760
+ font-size: var(--font-size-sm);
761
+ background: transparent;
762
+ border: none;
763
+ padding: 0;
764
+ white-space: pre;
765
+ }
766
+
767
+ .read-error {
768
+ display: flex;
769
+ align-items: center;
770
+ gap: var(--spacing-sm);
771
+ padding: var(--spacing-md);
772
+ background: var(--error-bg);
773
+ color: var(--color-error);
774
+ font-size: var(--font-size-sm);
775
+ }
776
+
777
+ .read-error .error-icon {
778
+ font-size: var(--font-size-lg);
779
+ }
780
+
781
+ /* Write tool styling */
782
+ .write-file-path {
783
+ font-family: var(--font-mono);
784
+ font-size: var(--font-size-sm);
785
+ font-weight: 600;
786
+ color: var(--color-text);
787
+ }
788
+
789
+ .write-full-path {
790
+ font-family: var(--font-mono);
791
+ font-size: var(--font-size-xs);
792
+ color: var(--color-text-muted);
793
+ overflow: hidden;
794
+ text-overflow: ellipsis;
795
+ white-space: nowrap;
796
+ flex: 1;
797
+ }
798
+
799
+ .write-badge {
800
+ font-size: var(--font-size-xs);
801
+ font-weight: 600;
802
+ padding: 2px 8px;
803
+ border-radius: var(--radius-sm);
804
+ background: var(--color-bg-secondary);
805
+ color: var(--color-text-secondary);
806
+ }
807
+
808
+ .write-badge.badge-success {
809
+ background: #e8f5e9;
810
+ color: var(--color-success);
811
+ }
812
+
813
+ .write-badge.badge-error {
814
+ background: var(--error-bg);
815
+ color: var(--color-error);
816
+ }
817
+
818
+ .write-lines,
819
+ .write-chars {
820
+ font-size: var(--font-size-xs);
821
+ color: var(--color-text-muted);
822
+ }
823
+
824
+ .write-content {
825
+ padding: var(--spacing-md);
826
+ background: var(--code-bg);
827
+ max-height: 500px;
828
+ overflow: auto;
829
+ }
830
+
831
+ .write-content pre {
832
+ margin: 0;
833
+ padding: 0;
834
+ background: transparent;
835
+ border: none;
836
+ }
837
+
838
+ .write-content code {
839
+ font-size: var(--font-size-sm);
840
+ background: transparent;
841
+ border: none;
842
+ padding: 0;
843
+ white-space: pre;
844
+ }
845
+
846
+ .write-error {
847
+ display: flex;
848
+ align-items: center;
849
+ gap: var(--spacing-sm);
850
+ padding: var(--spacing-md);
851
+ background: var(--error-bg);
852
+ color: var(--color-error);
853
+ font-size: var(--font-size-sm);
854
+ }
855
+
856
+ .write-error .error-icon {
857
+ font-size: var(--font-size-lg);
858
+ }
859
+
860
+ /* Edit tool styling */
861
+ .edit-file-path {
862
+ font-family: var(--font-mono);
863
+ font-size: var(--font-size-sm);
864
+ font-weight: 600;
865
+ color: var(--color-text);
866
+ }
867
+
868
+ .edit-full-path {
869
+ font-family: var(--font-mono);
870
+ font-size: var(--font-size-xs);
871
+ color: var(--color-text-muted);
872
+ overflow: hidden;
873
+ text-overflow: ellipsis;
874
+ white-space: nowrap;
875
+ flex: 1;
876
+ }
877
+
878
+ .edit-replace-all {
879
+ font-size: var(--font-size-xs);
880
+ font-weight: 500;
881
+ padding: 2px 6px;
882
+ border-radius: var(--radius-sm);
883
+ background: #fff3e0;
884
+ color: #e65100;
885
+ }
886
+
887
+ .edit-stats {
888
+ display: flex;
889
+ align-items: center;
890
+ gap: var(--spacing-xs);
891
+ font-size: var(--font-size-xs);
892
+ font-family: var(--font-mono);
893
+ color: var(--color-text-muted);
894
+ }
895
+
896
+ .edit-old-lines {
897
+ color: var(--color-error);
898
+ }
899
+
900
+ .edit-arrow {
901
+ color: var(--color-text-muted);
902
+ }
903
+
904
+ .edit-new-lines {
905
+ color: var(--color-success);
906
+ }
907
+
908
+ .edit-diff {
909
+ display: grid;
910
+ grid-template-columns: 1fr 1fr;
911
+ gap: 1px;
912
+ background: var(--color-border);
913
+ }
914
+
915
+ .edit-diff .diff-old,
916
+ .edit-diff .diff-new {
917
+ padding: var(--spacing-md);
918
+ background: var(--color-bg);
919
+ overflow: auto;
920
+ max-height: 400px;
921
+ }
922
+
923
+ .edit-diff .diff-old {
924
+ background: #fff5f5;
925
+ }
926
+
927
+ .edit-diff .diff-new {
928
+ background: #f0fff4;
929
+ }
930
+
931
+ .edit-diff .diff-label {
932
+ font-size: var(--font-size-xs);
933
+ font-weight: 600;
934
+ text-transform: uppercase;
935
+ margin-bottom: var(--spacing-sm);
936
+ }
937
+
938
+ .edit-diff .diff-old .diff-label {
939
+ color: var(--color-error);
940
+ }
941
+
942
+ .edit-diff .diff-new .diff-label {
943
+ color: var(--color-success);
944
+ }
945
+
946
+ .edit-diff pre {
947
+ margin: 0;
948
+ padding: 0;
949
+ background: transparent;
950
+ border: none;
951
+ }
952
+
953
+ .edit-diff code {
954
+ font-size: var(--font-size-sm);
955
+ background: transparent;
956
+ border: none;
957
+ padding: 0;
958
+ white-space: pre-wrap;
959
+ word-break: break-word;
960
+ }
961
+
962
+ .edit-diff code.diff-removed {
963
+ background: transparent;
964
+ }
965
+
966
+ .edit-diff code.diff-added {
967
+ background: transparent;
968
+ }
969
+
970
+ /* Long diff styling */
971
+ .edit-diff-long {
972
+ padding: var(--spacing-md);
973
+ }
974
+
975
+ .edit-diff-long .diff-section {
976
+ margin-bottom: var(--spacing-md);
977
+ border: 1px solid var(--color-border);
978
+ border-radius: var(--radius-md);
979
+ overflow: hidden;
980
+ }
981
+
982
+ .edit-diff-long .diff-section:last-child {
983
+ margin-bottom: 0;
984
+ }
985
+
986
+ .edit-diff-long .diff-label {
987
+ display: block;
988
+ padding: var(--spacing-sm) var(--spacing-md);
989
+ background: var(--color-bg-secondary);
990
+ cursor: pointer;
991
+ font-size: var(--font-size-sm);
992
+ font-weight: 500;
993
+ }
994
+
995
+ .edit-diff-long .diff-old-section .diff-label {
996
+ color: var(--color-error);
997
+ background: #fff5f5;
998
+ }
999
+
1000
+ .edit-diff-long .diff-new-section .diff-label {
1001
+ color: var(--color-success);
1002
+ background: #f0fff4;
1003
+ }
1004
+
1005
+ .edit-diff-long pre {
1006
+ margin: 0;
1007
+ padding: var(--spacing-md);
1008
+ background: var(--code-bg);
1009
+ border: none;
1010
+ border-radius: 0;
1011
+ max-height: 400px;
1012
+ overflow: auto;
1013
+ }
1014
+
1015
+ .edit-diff-long code {
1016
+ font-size: var(--font-size-sm);
1017
+ background: transparent;
1018
+ border: none;
1019
+ padding: 0;
1020
+ }
1021
+
1022
+ .edit-error {
1023
+ display: flex;
1024
+ align-items: center;
1025
+ gap: var(--spacing-sm);
1026
+ padding: var(--spacing-md);
1027
+ background: var(--error-bg);
1028
+ color: var(--color-error);
1029
+ font-size: var(--font-size-sm);
1030
+ }
1031
+
1032
+ .edit-error .error-icon {
1033
+ font-size: var(--font-size-lg);
1034
+ }
1035
+
1036
+ /* Responsive: stack diff on mobile */
1037
+ @media (max-width: 768px) {
1038
+ .edit-diff {
1039
+ grid-template-columns: 1fr;
1040
+ }
1041
+ }
1042
+
1043
+ /* Glob tool styling */
1044
+ .glob-pattern {
1045
+ font-family: var(--font-mono);
1046
+ font-size: var(--font-size-sm);
1047
+ font-weight: 600;
1048
+ background: rgba(0, 0, 0, 0.05);
1049
+ padding: 2px 8px;
1050
+ border-radius: var(--radius-sm);
1051
+ }
1052
+
1053
+ .glob-path {
1054
+ font-family: var(--font-mono);
1055
+ font-size: var(--font-size-xs);
1056
+ color: var(--color-text-muted);
1057
+ flex: 1;
1058
+ overflow: hidden;
1059
+ text-overflow: ellipsis;
1060
+ white-space: nowrap;
1061
+ }
1062
+
1063
+ .glob-count {
1064
+ font-size: var(--font-size-xs);
1065
+ color: var(--color-text-secondary);
1066
+ background: var(--color-bg-secondary);
1067
+ padding: 2px 8px;
1068
+ border-radius: var(--radius-sm);
1069
+ }
1070
+
1071
+ .glob-file-list {
1072
+ list-style: none;
1073
+ padding: 0;
1074
+ margin: 0;
1075
+ max-height: 400px;
1076
+ overflow-y: auto;
1077
+ }
1078
+
1079
+ .glob-file-item {
1080
+ display: flex;
1081
+ align-items: center;
1082
+ gap: var(--spacing-sm);
1083
+ padding: var(--spacing-xs) var(--spacing-md);
1084
+ border-bottom: 1px solid var(--color-border-light);
1085
+ font-family: var(--font-mono);
1086
+ font-size: var(--font-size-sm);
1087
+ }
1088
+
1089
+ .glob-file-item:last-child {
1090
+ border-bottom: none;
1091
+ }
1092
+
1093
+ .glob-file-item:hover {
1094
+ background: var(--color-bg-secondary);
1095
+ }
1096
+
1097
+ .glob-file-icon {
1098
+ flex-shrink: 0;
1099
+ }
1100
+
1101
+ .glob-file-name {
1102
+ overflow: hidden;
1103
+ text-overflow: ellipsis;
1104
+ white-space: nowrap;
1105
+ }
1106
+
1107
+ .glob-no-matches {
1108
+ padding: var(--spacing-lg);
1109
+ text-align: center;
1110
+ color: var(--color-text-muted);
1111
+ font-size: var(--font-size-sm);
1112
+ }
1113
+
1114
+ .glob-error {
1115
+ display: flex;
1116
+ align-items: center;
1117
+ gap: var(--spacing-sm);
1118
+ padding: var(--spacing-md);
1119
+ background: var(--error-bg);
1120
+ color: var(--color-error);
1121
+ font-size: var(--font-size-sm);
1122
+ }
1123
+
1124
+ /* Grep tool styling */
1125
+ .grep-pattern {
1126
+ font-family: var(--font-mono);
1127
+ font-size: var(--font-size-sm);
1128
+ font-weight: 600;
1129
+ background: rgba(0, 0, 0, 0.05);
1130
+ padding: 2px 8px;
1131
+ border-radius: var(--radius-sm);
1132
+ }
1133
+
1134
+ .grep-include {
1135
+ font-family: var(--font-mono);
1136
+ font-size: var(--font-size-xs);
1137
+ color: var(--color-info);
1138
+ background: #e3f2fd;
1139
+ padding: 2px 6px;
1140
+ border-radius: var(--radius-sm);
1141
+ }
1142
+
1143
+ .grep-path {
1144
+ font-family: var(--font-mono);
1145
+ font-size: var(--font-size-xs);
1146
+ color: var(--color-text-muted);
1147
+ flex: 1;
1148
+ overflow: hidden;
1149
+ text-overflow: ellipsis;
1150
+ white-space: nowrap;
1151
+ }
1152
+
1153
+ .grep-count {
1154
+ font-size: var(--font-size-xs);
1155
+ color: var(--color-text-secondary);
1156
+ background: var(--color-bg-secondary);
1157
+ padding: 2px 8px;
1158
+ border-radius: var(--radius-sm);
1159
+ }
1160
+
1161
+ .grep-matches {
1162
+ list-style: none;
1163
+ padding: 0;
1164
+ margin: 0;
1165
+ max-height: 400px;
1166
+ overflow-y: auto;
1167
+ }
1168
+
1169
+ .grep-match {
1170
+ display: flex;
1171
+ align-items: baseline;
1172
+ gap: var(--spacing-xs);
1173
+ padding: var(--spacing-xs) var(--spacing-md);
1174
+ border-bottom: 1px solid var(--color-border-light);
1175
+ font-family: var(--font-mono);
1176
+ font-size: var(--font-size-sm);
1177
+ }
1178
+
1179
+ .grep-match:last-child {
1180
+ border-bottom: none;
1181
+ }
1182
+
1183
+ .grep-match:hover {
1184
+ background: var(--color-bg-secondary);
1185
+ }
1186
+
1187
+ .grep-match-file {
1188
+ color: var(--color-info);
1189
+ flex-shrink: 0;
1190
+ }
1191
+
1192
+ .grep-match-line {
1193
+ color: var(--color-text-muted);
1194
+ flex-shrink: 0;
1195
+ }
1196
+
1197
+ .grep-match-content {
1198
+ color: var(--color-text);
1199
+ overflow: hidden;
1200
+ text-overflow: ellipsis;
1201
+ white-space: nowrap;
1202
+ flex: 1;
1203
+ }
1204
+
1205
+ .grep-no-matches {
1206
+ padding: var(--spacing-lg);
1207
+ text-align: center;
1208
+ color: var(--color-text-muted);
1209
+ font-size: var(--font-size-sm);
1210
+ }
1211
+
1212
+ .grep-error {
1213
+ display: flex;
1214
+ align-items: center;
1215
+ gap: var(--spacing-sm);
1216
+ padding: var(--spacing-md);
1217
+ background: var(--error-bg);
1218
+ color: var(--color-error);
1219
+ font-size: var(--font-size-sm);
1220
+ }
1221
+
1222
+ /* Task tool styling */
1223
+ .task-agent-badge {
1224
+ font-size: var(--font-size-xs);
1225
+ font-weight: 600;
1226
+ padding: 2px 8px;
1227
+ border-radius: var(--radius-sm);
1228
+ }
1229
+
1230
+ .task-description {
1231
+ font-weight: 500;
1232
+ flex: 1;
1233
+ overflow: hidden;
1234
+ text-overflow: ellipsis;
1235
+ white-space: nowrap;
1236
+ }
1237
+
1238
+ .task-command {
1239
+ display: flex;
1240
+ align-items: center;
1241
+ gap: var(--spacing-sm);
1242
+ padding: var(--spacing-sm) var(--spacing-md);
1243
+ background: var(--color-bg-secondary);
1244
+ border-bottom: 1px solid var(--color-border-light);
1245
+ font-size: var(--font-size-sm);
1246
+ }
1247
+
1248
+ .task-command-label {
1249
+ color: var(--color-text-muted);
1250
+ }
1251
+
1252
+ .task-command code {
1253
+ font-size: var(--font-size-sm);
1254
+ }
1255
+
1256
+ .task-prompt,
1257
+ .task-result {
1258
+ border-bottom: 1px solid var(--color-border-light);
1259
+ }
1260
+
1261
+ .task-prompt:last-child,
1262
+ .task-result:last-child {
1263
+ border-bottom: none;
1264
+ }
1265
+
1266
+ .task-prompt-label,
1267
+ .task-result-label {
1268
+ display: block;
1269
+ padding: var(--spacing-sm) var(--spacing-md);
1270
+ background: var(--color-bg-secondary);
1271
+ cursor: pointer;
1272
+ font-size: var(--font-size-sm);
1273
+ font-weight: 500;
1274
+ }
1275
+
1276
+ .task-prompt-label:hover,
1277
+ .task-result-label:hover {
1278
+ background: var(--color-border-light);
1279
+ }
1280
+
1281
+ .task-prompt pre,
1282
+ .task-result pre {
1283
+ margin: 0;
1284
+ padding: var(--spacing-md);
1285
+ background: var(--code-bg);
1286
+ border: none;
1287
+ border-radius: 0;
1288
+ max-height: 400px;
1289
+ overflow: auto;
1290
+ }
1291
+
1292
+ .task-prompt code,
1293
+ .task-result code {
1294
+ font-size: var(--font-size-sm);
1295
+ background: transparent;
1296
+ border: none;
1297
+ padding: 0;
1298
+ white-space: pre-wrap;
1299
+ }
1300
+
1301
+ .task-error {
1302
+ display: flex;
1303
+ align-items: center;
1304
+ gap: var(--spacing-sm);
1305
+ padding: var(--spacing-md);
1306
+ background: var(--error-bg);
1307
+ color: var(--color-error);
1308
+ font-size: var(--font-size-sm);
1309
+ }
1310
+
1311
+ /* TodoWrite tool styling */
1312
+ .tool-todowrite {
1313
+ background: #f3f4f6;
1314
+ border: 1px solid #d1d5db;
1315
+ }
1316
+
1317
+ .todo-summary {
1318
+ font-weight: 600;
1319
+ color: var(--color-text);
1320
+ }
1321
+
1322
+ .todo-stats {
1323
+ display: flex;
1324
+ gap: var(--spacing-sm);
1325
+ font-size: var(--font-size-xs);
1326
+ flex: 1;
1327
+ }
1328
+
1329
+ .todo-stat-progress {
1330
+ color: var(--color-info);
1331
+ }
1332
+
1333
+ .todo-stat-pending {
1334
+ color: var(--color-text-muted);
1335
+ }
1336
+
1337
+ .todo-stat-cancelled {
1338
+ color: var(--color-error);
1339
+ }
1340
+
1341
+ .tool-todowrite .todo-list {
1342
+ padding: var(--spacing-md);
1343
+ }
1344
+
1345
+ .todo-empty {
1346
+ padding: var(--spacing-lg);
1347
+ text-align: center;
1348
+ color: var(--color-text-muted);
1349
+ font-size: var(--font-size-sm);
1350
+ }
1351
+
1352
+ .todo-error {
1353
+ display: flex;
1354
+ align-items: center;
1355
+ gap: var(--spacing-sm);
1356
+ padding: var(--spacing-md);
1357
+ background: var(--error-bg);
1358
+ color: var(--color-error);
1359
+ font-size: var(--font-size-sm);
1360
+ }
1361
+
1362
+ /* WebFetch tool styling */
1363
+ .tool-webfetch {
1364
+ background: #e0f7fa;
1365
+ border: 1px solid #80deea;
1366
+ }
1367
+
1368
+ .webfetch-url {
1369
+ font-family: var(--font-mono);
1370
+ font-size: var(--font-size-sm);
1371
+ color: var(--color-info);
1372
+ flex: 1;
1373
+ overflow: hidden;
1374
+ text-overflow: ellipsis;
1375
+ white-space: nowrap;
1376
+ }
1377
+
1378
+ .webfetch-url:hover {
1379
+ text-decoration: underline;
1380
+ }
1381
+
1382
+ .webfetch-format {
1383
+ font-size: var(--font-size-xs);
1384
+ font-weight: 500;
1385
+ padding: 2px 6px;
1386
+ border-radius: var(--radius-sm);
1387
+ background: rgba(0, 0, 0, 0.1);
1388
+ color: var(--color-text-secondary);
1389
+ }
1390
+
1391
+ .webfetch-size {
1392
+ font-size: var(--font-size-xs);
1393
+ color: var(--color-text-muted);
1394
+ }
1395
+
1396
+ .webfetch-content {
1397
+ padding: var(--spacing-md);
1398
+ background: var(--code-bg);
1399
+ max-height: 500px;
1400
+ overflow: auto;
1401
+ }
1402
+
1403
+ .webfetch-content pre {
1404
+ margin: 0;
1405
+ padding: 0;
1406
+ background: transparent;
1407
+ border: none;
1408
+ }
1409
+
1410
+ .webfetch-content code {
1411
+ font-size: var(--font-size-sm);
1412
+ background: transparent;
1413
+ border: none;
1414
+ padding: 0;
1415
+ white-space: pre-wrap;
1416
+ }
1417
+
1418
+ .webfetch-error {
1419
+ display: flex;
1420
+ align-items: center;
1421
+ gap: var(--spacing-sm);
1422
+ padding: var(--spacing-md);
1423
+ background: var(--error-bg);
1424
+ color: var(--color-error);
1425
+ font-size: var(--font-size-sm);
1426
+ }
1427
+
1428
+ /* Generic tool styling (fallback for unknown tools) */
1429
+ .tool-generic {
1430
+ background: var(--tool-bg);
1431
+ border: 1px solid var(--tool-border);
1432
+ }
1433
+
1434
+ .tool-input-label,
1435
+ .tool-output-label {
1436
+ font-size: var(--font-size-xs);
1437
+ font-weight: 600;
1438
+ text-transform: uppercase;
1439
+ color: var(--color-text-muted);
1440
+ margin-bottom: var(--spacing-xs);
1441
+ }
1442
+
1443
+ .tool-error {
1444
+ display: flex;
1445
+ align-items: center;
1446
+ gap: var(--spacing-sm);
1447
+ padding: var(--spacing-md);
1448
+ background: var(--error-bg);
1449
+ color: var(--color-error);
1450
+ font-size: var(--font-size-sm);
1451
+ }
1452
+
1453
+ .tool-error .error-icon {
1454
+ font-size: var(--font-size-lg);
1455
+ }
1456
+
1457
+ /* Batch tool styling */
1458
+ .tool-batch {
1459
+ background: #fafafa;
1460
+ border: 1px solid #e0e0e0;
1461
+ }
1462
+
1463
+ .batch-title {
1464
+ font-weight: 600;
1465
+ }
1466
+
1467
+ .batch-summary {
1468
+ font-size: var(--font-size-xs);
1469
+ color: var(--color-text-muted);
1470
+ flex: 1;
1471
+ overflow: hidden;
1472
+ text-overflow: ellipsis;
1473
+ white-space: nowrap;
1474
+ }
1475
+
1476
+ .batch-tool-list {
1477
+ list-style: none;
1478
+ padding: 0;
1479
+ margin: 0;
1480
+ border-bottom: 1px solid var(--color-border-light);
1481
+ }
1482
+
1483
+ .batch-tool-item {
1484
+ display: flex;
1485
+ align-items: center;
1486
+ gap: var(--spacing-sm);
1487
+ padding: var(--spacing-sm) var(--spacing-md);
1488
+ border-bottom: 1px solid var(--color-border-light);
1489
+ font-size: var(--font-size-sm);
1490
+ }
1491
+
1492
+ .batch-tool-item:last-child {
1493
+ border-bottom: none;
1494
+ }
1495
+
1496
+ .batch-tool-item:hover {
1497
+ background: var(--color-bg-secondary);
1498
+ }
1499
+
1500
+ .batch-tool-index {
1501
+ width: 20px;
1502
+ height: 20px;
1503
+ display: flex;
1504
+ align-items: center;
1505
+ justify-content: center;
1506
+ background: var(--color-bg-secondary);
1507
+ border-radius: 50%;
1508
+ font-size: var(--font-size-xs);
1509
+ color: var(--color-text-muted);
1510
+ flex-shrink: 0;
1511
+ }
1512
+
1513
+ .batch-tool-icon {
1514
+ flex-shrink: 0;
1515
+ }
1516
+
1517
+ .batch-tool-name {
1518
+ font-weight: 500;
1519
+ flex-shrink: 0;
1520
+ }
1521
+
1522
+ .batch-tool-info {
1523
+ font-family: var(--font-mono);
1524
+ font-size: var(--font-size-xs);
1525
+ color: var(--color-text-muted);
1526
+ overflow: hidden;
1527
+ text-overflow: ellipsis;
1528
+ white-space: nowrap;
1529
+ flex: 1;
1530
+ }
1531
+
1532
+ .batch-empty {
1533
+ padding: var(--spacing-lg);
1534
+ text-align: center;
1535
+ color: var(--color-text-muted);
1536
+ font-size: var(--font-size-sm);
1537
+ }
1538
+
1539
+ .batch-output {
1540
+ border-top: 1px solid var(--color-border-light);
1541
+ }
1542
+
1543
+ .batch-output-label {
1544
+ display: block;
1545
+ padding: var(--spacing-sm) var(--spacing-md);
1546
+ background: var(--color-bg-secondary);
1547
+ cursor: pointer;
1548
+ font-size: var(--font-size-sm);
1549
+ font-weight: 500;
1550
+ }
1551
+
1552
+ .batch-output pre {
1553
+ margin: 0;
1554
+ padding: var(--spacing-md);
1555
+ background: var(--code-bg);
1556
+ border: none;
1557
+ border-radius: 0;
1558
+ max-height: 400px;
1559
+ overflow: auto;
1560
+ }
1561
+
1562
+ .batch-output code {
1563
+ font-size: var(--font-size-sm);
1564
+ background: transparent;
1565
+ border: none;
1566
+ padding: 0;
1567
+ }
1568
+
1569
+ .batch-error {
1570
+ display: flex;
1571
+ align-items: center;
1572
+ gap: var(--spacing-sm);
1573
+ padding: var(--spacing-md);
1574
+ background: var(--error-bg);
1575
+ color: var(--color-error);
1576
+ font-size: var(--font-size-sm);
1577
+ }
1578
+
1579
+ /* File path styling */
1580
+ .tool-file {
1581
+ font-family: var(--font-mono);
1582
+ font-size: var(--font-size-sm);
1583
+ }
1584
+
1585
+ /* ============================================================================
1586
+ Diff View (for edit tool)
1587
+ ============================================================================ */
1588
+
1589
+ .tool-diff {
1590
+ display: grid;
1591
+ grid-template-columns: 1fr 1fr;
1592
+ gap: 1px;
1593
+ background: var(--color-border);
1594
+ }
1595
+
1596
+ .diff-old,
1597
+ .diff-new {
1598
+ padding: var(--spacing-md);
1599
+ background: var(--color-bg);
1600
+ }
1601
+
1602
+ .diff-label {
1603
+ font-size: var(--font-size-xs);
1604
+ font-weight: 600;
1605
+ text-transform: uppercase;
1606
+ margin-bottom: var(--spacing-sm);
1607
+ }
1608
+
1609
+ .diff-old .diff-label {
1610
+ color: var(--color-error);
1611
+ }
1612
+
1613
+ .diff-new .diff-label {
1614
+ color: var(--color-success);
1615
+ }
1616
+
1617
+ .diff-removed {
1618
+ background: #ffeef0;
1619
+ }
1620
+
1621
+ .diff-added {
1622
+ background: #e6ffed;
1623
+ }
1624
+
1625
+ /* ============================================================================
1626
+ Todo List (for todowrite tool)
1627
+ ============================================================================ */
1628
+
1629
+ .todo-list {
1630
+ list-style: none;
1631
+ padding: 0;
1632
+ margin: 0;
1633
+ }
1634
+
1635
+ .todo-item {
1636
+ display: flex;
1637
+ align-items: flex-start;
1638
+ gap: var(--spacing-sm);
1639
+ padding: var(--spacing-sm) 0;
1640
+ border-bottom: 1px solid var(--color-border-light);
1641
+ }
1642
+
1643
+ .todo-item:last-child {
1644
+ border-bottom: none;
1645
+ }
1646
+
1647
+ .todo-status {
1648
+ flex-shrink: 0;
1649
+ width: 20px;
1650
+ text-align: center;
1651
+ }
1652
+
1653
+ .todo-completed .todo-status {
1654
+ color: var(--color-success);
1655
+ }
1656
+
1657
+ .todo-in-progress .todo-status {
1658
+ color: var(--color-info);
1659
+ }
1660
+
1661
+ .todo-pending .todo-status {
1662
+ color: var(--color-text-muted);
1663
+ }
1664
+
1665
+ .todo-cancelled .todo-status {
1666
+ color: var(--color-error);
1667
+ }
1668
+
1669
+ .todo-content {
1670
+ flex: 1;
1671
+ }
1672
+
1673
+ .todo-completed .todo-content {
1674
+ text-decoration: line-through;
1675
+ color: var(--color-text-secondary);
1676
+ }
1677
+
1678
+ .todo-priority {
1679
+ font-size: var(--font-size-xs);
1680
+ padding: 2px 6px;
1681
+ border-radius: var(--radius-sm);
1682
+ background: var(--color-bg-secondary);
1683
+ }
1684
+
1685
+ .priority-high {
1686
+ background: #ffebee;
1687
+ color: var(--color-error);
1688
+ }
1689
+
1690
+ .priority-medium {
1691
+ background: #fff8e1;
1692
+ color: #f57c00;
1693
+ }
1694
+
1695
+ .priority-low {
1696
+ background: #e8f5e9;
1697
+ color: var(--color-success);
1698
+ }
1699
+
1700
+ /* ============================================================================
1701
+ Reasoning (Extended Thinking)
1702
+ ============================================================================ */
1703
+
1704
+ .reasoning {
1705
+ margin: var(--spacing-md) 0;
1706
+ padding: var(--spacing-md);
1707
+ background: var(--reasoning-bg);
1708
+ border: 1px solid var(--reasoning-border);
1709
+ border-radius: var(--radius-md);
1710
+ font-size: var(--font-size-sm);
1711
+ }
1712
+
1713
+ .reasoning-header {
1714
+ display: flex;
1715
+ align-items: center;
1716
+ gap: var(--spacing-sm);
1717
+ margin-bottom: var(--spacing-sm);
1718
+ font-weight: 600;
1719
+ color: #e65100;
1720
+ }
1721
+
1722
+ .reasoning-content {
1723
+ color: var(--color-text-secondary);
1724
+ font-style: italic;
1725
+ }
1726
+
1727
+ /* ============================================================================
1728
+ Pagination
1729
+ ============================================================================ */
1730
+
1731
+ .pagination {
1732
+ display: flex;
1733
+ justify-content: center;
1734
+ align-items: center;
1735
+ gap: var(--spacing-sm);
1736
+ margin-top: var(--spacing-xl);
1737
+ padding-top: var(--spacing-lg);
1738
+ border-top: 1px solid var(--color-border);
1739
+ }
1740
+
1741
+ .pagination a,
1742
+ .pagination span {
1743
+ padding: var(--spacing-sm) var(--spacing-md);
1744
+ border: 1px solid var(--color-border);
1745
+ border-radius: var(--radius-sm);
1746
+ font-size: var(--font-size-sm);
1747
+ }
1748
+
1749
+ .pagination a:hover {
1750
+ background: var(--color-bg-secondary);
1751
+ text-decoration: none;
1752
+ }
1753
+
1754
+ .pagination .current {
1755
+ background: var(--color-info);
1756
+ color: white;
1757
+ border-color: var(--color-info);
1758
+ }
1759
+
1760
+ .pagination .disabled {
1761
+ color: var(--color-text-muted);
1762
+ cursor: not-allowed;
1763
+ }
1764
+
1765
+ .pagination-ellipsis {
1766
+ border: none;
1767
+ padding: var(--spacing-sm) var(--spacing-xs);
1768
+ color: var(--color-text-secondary);
1769
+ cursor: default;
1770
+ }
1771
+
1772
+ /* ============================================================================
1773
+ Timeline (Session Overview)
1774
+ ============================================================================ */
1775
+
1776
+ .session-timeline {
1777
+ position: relative;
1778
+ padding-left: var(--spacing-xl);
1779
+ }
1780
+
1781
+ .session-timeline::before {
1782
+ content: "";
1783
+ position: absolute;
1784
+ left: 10px;
1785
+ top: 0;
1786
+ bottom: 0;
1787
+ width: 2px;
1788
+ background: var(--color-border);
1789
+ }
1790
+
1791
+ .timeline-entry {
1792
+ position: relative;
1793
+ margin-bottom: var(--spacing-lg);
1794
+ }
1795
+
1796
+ .timeline-marker {
1797
+ position: absolute;
1798
+ left: calc(-1 * var(--spacing-xl) + 2px);
1799
+ width: 18px;
1800
+ height: 18px;
1801
+ background: var(--color-info);
1802
+ border-radius: 50%;
1803
+ color: white;
1804
+ font-size: var(--font-size-xs);
1805
+ font-weight: 600;
1806
+ display: flex;
1807
+ align-items: center;
1808
+ justify-content: center;
1809
+ }
1810
+
1811
+ .timeline-content {
1812
+ padding: var(--spacing-md);
1813
+ background: var(--color-bg-secondary);
1814
+ border-radius: var(--radius-md);
1815
+ }
1816
+
1817
+ .timeline-content a {
1818
+ display: block;
1819
+ font-weight: 500;
1820
+ margin-bottom: var(--spacing-sm);
1821
+ }
1822
+
1823
+ .timeline-stats {
1824
+ display: flex;
1825
+ gap: var(--spacing-md);
1826
+ font-size: var(--font-size-xs);
1827
+ color: var(--color-text-muted);
1828
+ }
1829
+
1830
+ /* ============================================================================
1831
+ Git Commit Cards
1832
+ ============================================================================ */
1833
+
1834
+ .commit-cards {
1835
+ margin-top: var(--spacing-md);
1836
+ display: flex;
1837
+ flex-direction: column;
1838
+ gap: var(--spacing-sm);
1839
+ }
1840
+
1841
+ .commit-card {
1842
+ display: flex;
1843
+ align-items: flex-start;
1844
+ gap: var(--spacing-sm);
1845
+ padding: var(--spacing-sm) var(--spacing-md);
1846
+ background: linear-gradient(135deg, #fff8e1, #ffe0b2);
1847
+ border: 1px solid #ffcc80;
1848
+ border-radius: var(--radius-md);
1849
+ border-left: 3px solid #ff9800;
1850
+ }
1851
+
1852
+ .commit-icon {
1853
+ flex-shrink: 0;
1854
+ color: #e65100;
1855
+ margin-top: 2px;
1856
+ }
1857
+
1858
+ .commit-icon svg {
1859
+ display: block;
1860
+ }
1861
+
1862
+ .commit-content {
1863
+ flex: 1;
1864
+ min-width: 0;
1865
+ }
1866
+
1867
+ .commit-header {
1868
+ display: flex;
1869
+ align-items: center;
1870
+ gap: var(--spacing-sm);
1871
+ flex-wrap: wrap;
1872
+ margin-bottom: 2px;
1873
+ }
1874
+
1875
+ .commit-hash {
1876
+ font-family: var(--font-mono);
1877
+ font-size: var(--font-size-sm);
1878
+ font-weight: 600;
1879
+ color: #e65100;
1880
+ text-decoration: none;
1881
+ }
1882
+
1883
+ .commit-hash:hover {
1884
+ text-decoration: underline;
1885
+ }
1886
+
1887
+ a.commit-hash {
1888
+ color: #bf360c;
1889
+ }
1890
+
1891
+ a.commit-hash:hover {
1892
+ color: #e65100;
1893
+ }
1894
+
1895
+ .commit-branch {
1896
+ font-family: var(--font-mono);
1897
+ font-size: var(--font-size-xs);
1898
+ padding: 1px 6px;
1899
+ background: rgba(255, 152, 0, 0.2);
1900
+ border-radius: var(--radius-sm);
1901
+ color: #e65100;
1902
+ }
1903
+
1904
+ .commit-time {
1905
+ font-size: var(--font-size-xs);
1906
+ color: var(--color-text-muted);
1907
+ }
1908
+
1909
+ .commit-message {
1910
+ font-size: var(--font-size-sm);
1911
+ color: var(--color-text);
1912
+ word-break: break-word;
1913
+ }
1914
+
1915
+ /* Dark mode for commit cards */
1916
+ :root[data-theme="dark"] .commit-card {
1917
+ background: linear-gradient(135deg, #3d2800, #2d1a00);
1918
+ border-color: #5d3a00;
1919
+ }
1920
+
1921
+ :root[data-theme="dark"] .commit-icon {
1922
+ color: #ffb74d;
1923
+ }
1924
+
1925
+ :root[data-theme="dark"] .commit-hash {
1926
+ color: #ffb74d;
1927
+ }
1928
+
1929
+ :root[data-theme="dark"] a.commit-hash {
1930
+ color: #ffa726;
1931
+ }
1932
+
1933
+ :root[data-theme="dark"] a.commit-hash:hover {
1934
+ color: #ffb74d;
1935
+ }
1936
+
1937
+ :root[data-theme="dark"] .commit-branch {
1938
+ background: rgba(255, 167, 38, 0.2);
1939
+ color: #ffb74d;
1940
+ }
1941
+
1942
+ @media (prefers-color-scheme: dark) {
1943
+ :root:not([data-theme="light"]) .commit-card {
1944
+ background: linear-gradient(135deg, #3d2800, #2d1a00);
1945
+ border-color: #5d3a00;
1946
+ }
1947
+
1948
+ :root:not([data-theme="light"]) .commit-icon {
1949
+ color: #ffb74d;
1950
+ }
1951
+
1952
+ :root:not([data-theme="light"]) .commit-hash {
1953
+ color: #ffb74d;
1954
+ }
1955
+
1956
+ :root:not([data-theme="light"]) a.commit-hash {
1957
+ color: #ffa726;
1958
+ }
1959
+
1960
+ :root:not([data-theme="light"]) a.commit-hash:hover {
1961
+ color: #ffb74d;
1962
+ }
1963
+
1964
+ :root:not([data-theme="light"]) .commit-branch {
1965
+ background: rgba(255, 167, 38, 0.2);
1966
+ color: #ffb74d;
1967
+ }
1968
+ }
1969
+
1970
+ /* ============================================================================
1971
+ Stats & Badges
1972
+ ============================================================================ */
1973
+
1974
+ .stats {
1975
+ display: flex;
1976
+ flex-wrap: wrap;
1977
+ gap: var(--spacing-lg);
1978
+ margin-bottom: var(--spacing-md);
1979
+ }
1980
+
1981
+ .stat {
1982
+ display: flex;
1983
+ flex-direction: column;
1984
+ gap: 2px;
1985
+ }
1986
+
1987
+ .stat-label {
1988
+ font-size: var(--font-size-xs);
1989
+ color: var(--color-text-muted);
1990
+ text-transform: uppercase;
1991
+ letter-spacing: 0.5px;
1992
+ }
1993
+
1994
+ .stat-value {
1995
+ font-size: var(--font-size-lg);
1996
+ font-weight: 600;
1997
+ }
1998
+
1999
+ .badge {
2000
+ display: inline-block;
2001
+ padding: 2px 8px;
2002
+ font-size: var(--font-size-xs);
2003
+ font-weight: 500;
2004
+ border-radius: var(--radius-sm);
2005
+ background: var(--color-bg-secondary);
2006
+ color: var(--color-text-secondary);
2007
+ }
2008
+
2009
+ .badge-success {
2010
+ background: #e8f5e9;
2011
+ color: var(--color-success);
2012
+ }
2013
+
2014
+ .badge-error {
2015
+ background: #ffebee;
2016
+ color: var(--color-error);
2017
+ }
2018
+
2019
+ .badge-info {
2020
+ background: #e3f2fd;
2021
+ color: var(--color-info);
2022
+ }
2023
+
2024
+ /* ============================================================================
2025
+ Search Modal
2026
+ ============================================================================ */
2027
+
2028
+ /* Dialog element reset */
2029
+ .search-modal {
2030
+ padding: 0;
2031
+ border: none;
2032
+ background: transparent;
2033
+ max-width: none;
2034
+ max-height: none;
2035
+ position: fixed;
2036
+ inset: 0;
2037
+ z-index: 1000;
2038
+ }
2039
+
2040
+ .search-modal::backdrop {
2041
+ background: rgba(0, 0, 0, 0.5);
2042
+ }
2043
+
2044
+ .search-modal[open] {
2045
+ display: flex;
2046
+ align-items: flex-start;
2047
+ justify-content: center;
2048
+ padding-top: 10vh;
2049
+ }
2050
+
2051
+ .search-modal-content {
2052
+ width: 90%;
2053
+ max-width: 700px;
2054
+ background: var(--color-bg);
2055
+ border-radius: var(--radius-lg);
2056
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
2057
+ overflow: hidden;
2058
+ display: flex;
2059
+ flex-direction: column;
2060
+ max-height: 70vh;
2061
+ }
2062
+
2063
+ .search-modal-header {
2064
+ display: flex;
2065
+ align-items: center;
2066
+ gap: var(--spacing-sm);
2067
+ padding: var(--spacing-md);
2068
+ border-bottom: 1px solid var(--color-border);
2069
+ }
2070
+
2071
+ .search-input-wrapper {
2072
+ display: flex;
2073
+ align-items: center;
2074
+ flex: 1;
2075
+ gap: var(--spacing-sm);
2076
+ }
2077
+
2078
+ .search-input-icon {
2079
+ font-size: var(--font-size-lg);
2080
+ color: var(--color-text-muted);
2081
+ }
2082
+
2083
+ .search-modal-header input {
2084
+ flex: 1;
2085
+ padding: var(--spacing-sm);
2086
+ border: none;
2087
+ font-size: var(--font-size-lg);
2088
+ background: transparent;
2089
+ color: var(--color-text);
2090
+ outline: none;
2091
+ }
2092
+
2093
+ .search-modal-header input::placeholder {
2094
+ color: var(--color-text-muted);
2095
+ }
2096
+
2097
+ .search-modal-close {
2098
+ display: flex;
2099
+ align-items: center;
2100
+ justify-content: center;
2101
+ width: 32px;
2102
+ height: 32px;
2103
+ padding: 0;
2104
+ background: var(--color-bg-secondary);
2105
+ border: 1px solid var(--color-border);
2106
+ border-radius: var(--radius-sm);
2107
+ font-size: var(--font-size-lg);
2108
+ cursor: pointer;
2109
+ color: var(--color-text-secondary);
2110
+ transition: background-color 0.15s, border-color 0.15s;
2111
+ }
2112
+
2113
+ .search-modal-close:hover {
2114
+ background: var(--color-bg-tertiary);
2115
+ border-color: var(--color-text-muted);
2116
+ }
2117
+
2118
+ .search-status {
2119
+ padding: var(--spacing-sm) var(--spacing-md);
2120
+ font-size: var(--font-size-sm);
2121
+ color: var(--color-text-secondary);
2122
+ border-bottom: 1px solid var(--color-border-light);
2123
+ background: var(--color-bg-secondary);
2124
+ }
2125
+
2126
+ .search-results {
2127
+ flex: 1;
2128
+ overflow-y: auto;
2129
+ min-height: 0;
2130
+ }
2131
+
2132
+ .search-result {
2133
+ display: block;
2134
+ padding: var(--spacing-md);
2135
+ border-bottom: 1px solid var(--color-border-light);
2136
+ text-decoration: none;
2137
+ color: inherit;
2138
+ transition: background-color 0.15s;
2139
+ }
2140
+
2141
+ .search-result:hover {
2142
+ background: var(--color-bg-secondary);
2143
+ text-decoration: none;
2144
+ }
2145
+
2146
+ .search-result:last-child {
2147
+ border-bottom: none;
2148
+ }
2149
+
2150
+ .search-result-header {
2151
+ display: flex;
2152
+ align-items: center;
2153
+ gap: var(--spacing-sm);
2154
+ margin-bottom: var(--spacing-xs);
2155
+ }
2156
+
2157
+ .search-result-role {
2158
+ font-size: var(--font-size-xs);
2159
+ font-weight: 600;
2160
+ padding: 2px 8px;
2161
+ border-radius: var(--radius-sm);
2162
+ text-transform: uppercase;
2163
+ letter-spacing: 0.5px;
2164
+ }
2165
+
2166
+ .search-result-role-user {
2167
+ background: var(--user-bg);
2168
+ color: #1565c0;
2169
+ }
2170
+
2171
+ .search-result-role-assistant {
2172
+ background: var(--assistant-bg);
2173
+ color: #424242;
2174
+ }
2175
+
2176
+ .search-result-role-session {
2177
+ background: var(--color-info);
2178
+ color: white;
2179
+ }
2180
+
2181
+ .search-result-page {
2182
+ font-size: var(--font-size-xs);
2183
+ color: var(--color-text-muted);
2184
+ font-family: var(--font-mono);
2185
+ }
2186
+
2187
+ .search-result-title {
2188
+ font-weight: 500;
2189
+ margin-bottom: var(--spacing-xs);
2190
+ color: var(--color-text);
2191
+ }
2192
+
2193
+ .search-result-preview {
2194
+ font-size: var(--font-size-sm);
2195
+ color: var(--color-text-secondary);
2196
+ overflow: hidden;
2197
+ display: -webkit-box;
2198
+ -webkit-line-clamp: 3;
2199
+ -webkit-box-orient: vertical;
2200
+ line-height: 1.5;
2201
+ }
2202
+
2203
+ /* Search highlight */
2204
+ .search-result mark,
2205
+ mark {
2206
+ background: #fff59d;
2207
+ color: inherit;
2208
+ padding: 1px 2px;
2209
+ border-radius: 2px;
2210
+ }
2211
+
2212
+ .search-no-results {
2213
+ padding: var(--spacing-xl);
2214
+ text-align: center;
2215
+ color: var(--color-text-secondary);
2216
+ font-size: var(--font-size-sm);
2217
+ }
2218
+
2219
+ /* ============================================================================
2220
+ Responsive Design
2221
+ ============================================================================ */
2222
+
2223
+ @media (max-width: 768px) {
2224
+ :root {
2225
+ --container-max-width: 100%;
2226
+ }
2227
+
2228
+ .container {
2229
+ padding: var(--spacing-md);
2230
+ }
2231
+
2232
+ .tool-diff {
2233
+ grid-template-columns: 1fr;
2234
+ }
2235
+
2236
+ .search-modal[open] {
2237
+ padding-top: var(--spacing-md);
2238
+ align-items: flex-start;
2239
+ }
2240
+
2241
+ .search-modal-content {
2242
+ width: calc(100% - var(--spacing-md) * 2);
2243
+ max-height: calc(100vh - var(--spacing-xl));
2244
+ }
2245
+
2246
+ .search-trigger kbd {
2247
+ display: none;
2248
+ }
2249
+ }
2250
+
2251
+ /* ============================================================================
2252
+ Theme Toggle Button
2253
+ ============================================================================ */
2254
+
2255
+ .theme-toggle {
2256
+ display: flex;
2257
+ align-items: center;
2258
+ justify-content: center;
2259
+ width: 36px;
2260
+ height: 36px;
2261
+ padding: 0;
2262
+ border: 1px solid var(--color-border);
2263
+ border-radius: var(--radius-md);
2264
+ background-color: var(--color-bg-secondary);
2265
+ color: var(--color-text-secondary);
2266
+ cursor: pointer;
2267
+ transition:
2268
+ background-color 0.2s ease,
2269
+ border-color 0.2s ease,
2270
+ color 0.2s ease,
2271
+ transform 0.15s ease;
2272
+ }
2273
+
2274
+ .theme-toggle:hover {
2275
+ background-color: var(--color-bg-tertiary);
2276
+ border-color: var(--color-text-muted);
2277
+ color: var(--color-text);
2278
+ }
2279
+
2280
+ .theme-toggle:active {
2281
+ transform: scale(0.95);
2282
+ }
2283
+
2284
+ .theme-toggle:focus-visible {
2285
+ outline: 2px solid var(--color-info);
2286
+ outline-offset: 2px;
2287
+ }
2288
+
2289
+ .theme-toggle svg {
2290
+ width: 18px;
2291
+ height: 18px;
2292
+ }
2293
+
2294
+ /* Icon visibility - light mode shows moon, dark mode shows sun */
2295
+ .theme-toggle .icon-sun {
2296
+ display: none;
2297
+ }
2298
+
2299
+ .theme-toggle .icon-moon {
2300
+ display: block;
2301
+ }
2302
+
2303
+ :root[data-theme="dark"] .theme-toggle .icon-sun {
2304
+ display: block;
2305
+ }
2306
+
2307
+ :root[data-theme="dark"] .theme-toggle .icon-moon {
2308
+ display: none;
2309
+ }
2310
+
2311
+ /* Auto dark mode icon states */
2312
+ @media (prefers-color-scheme: dark) {
2313
+ :root:not([data-theme="light"]) .theme-toggle .icon-sun {
2314
+ display: block;
2315
+ }
2316
+ :root:not([data-theme="light"]) .theme-toggle .icon-moon {
2317
+ display: none;
2318
+ }
2319
+ }
2320
+
2321
+ /* ============================================================================
2322
+ Header Layout - Updated for Theme Toggle
2323
+ ============================================================================ */
2324
+
2325
+ .header-top {
2326
+ display: flex;
2327
+ justify-content: space-between;
2328
+ align-items: flex-start;
2329
+ margin-bottom: var(--spacing-md);
2330
+ }
2331
+
2332
+ .header-actions {
2333
+ display: flex;
2334
+ align-items: center;
2335
+ gap: var(--spacing-sm);
2336
+ flex-shrink: 0;
2337
+ }
2338
+
2339
+ /* ============================================================================
2340
+ Dark Mode Element Overrides
2341
+ ============================================================================ */
2342
+
2343
+ /* User message role color */
2344
+ :root[data-theme="dark"] .message-user .message-role {
2345
+ color: #58a6ff;
2346
+ }
2347
+
2348
+ @media (prefers-color-scheme: dark) {
2349
+ :root:not([data-theme="light"]) .message-user .message-role {
2350
+ color: #58a6ff;
2351
+ }
2352
+ }
2353
+
2354
+ /* Assistant message role color */
2355
+ :root[data-theme="dark"] .message-assistant .message-role {
2356
+ color: #8b949e;
2357
+ }
2358
+
2359
+ @media (prefers-color-scheme: dark) {
2360
+ :root:not([data-theme="light"]) .message-assistant .message-role {
2361
+ color: #8b949e;
2362
+ }
2363
+ }
2364
+
2365
+ /* Bash output - keep dark in both modes, but adjust */
2366
+ :root[data-theme="dark"] .bash-output {
2367
+ background: #0d1117;
2368
+ }
2369
+
2370
+ @media (prefers-color-scheme: dark) {
2371
+ :root:not([data-theme="light"]) .bash-output {
2372
+ background: #0d1117;
2373
+ }
2374
+ }
2375
+
2376
+ /* Edit diff colors */
2377
+ :root[data-theme="dark"] .edit-diff .diff-old,
2378
+ :root[data-theme="dark"] .diff-old {
2379
+ background: #3d1418;
2380
+ }
2381
+
2382
+ :root[data-theme="dark"] .edit-diff .diff-new,
2383
+ :root[data-theme="dark"] .diff-new {
2384
+ background: #1a2e1a;
2385
+ }
2386
+
2387
+ @media (prefers-color-scheme: dark) {
2388
+ :root:not([data-theme="light"]) .edit-diff .diff-old,
2389
+ :root:not([data-theme="light"]) .diff-old {
2390
+ background: #3d1418;
2391
+ }
2392
+ :root:not([data-theme="light"]) .edit-diff .diff-new,
2393
+ :root:not([data-theme="light"]) .diff-new {
2394
+ background: #1a2e1a;
2395
+ }
2396
+ }
2397
+
2398
+ /* Edit diff long styling */
2399
+ :root[data-theme="dark"] .edit-diff-long .diff-old-section .diff-label {
2400
+ background: #3d1418;
2401
+ }
2402
+
2403
+ :root[data-theme="dark"] .edit-diff-long .diff-new-section .diff-label {
2404
+ background: #1a2e1a;
2405
+ }
2406
+
2407
+ @media (prefers-color-scheme: dark) {
2408
+ :root:not([data-theme="light"]) .edit-diff-long .diff-old-section .diff-label {
2409
+ background: #3d1418;
2410
+ }
2411
+ :root:not([data-theme="light"]) .edit-diff-long .diff-new-section .diff-label {
2412
+ background: #1a2e1a;
2413
+ }
2414
+ }
2415
+
2416
+ /* Diff removed/added backgrounds */
2417
+ :root[data-theme="dark"] .diff-removed {
2418
+ background: #3d1418;
2419
+ }
2420
+
2421
+ :root[data-theme="dark"] .diff-added {
2422
+ background: #1a2e1a;
2423
+ }
2424
+
2425
+ @media (prefers-color-scheme: dark) {
2426
+ :root:not([data-theme="light"]) .diff-removed {
2427
+ background: #3d1418;
2428
+ }
2429
+ :root:not([data-theme="light"]) .diff-added {
2430
+ background: #1a2e1a;
2431
+ }
2432
+ }
2433
+
2434
+ /* Priority badges */
2435
+ :root[data-theme="dark"] .priority-high {
2436
+ background: #5c2125;
2437
+ color: #f85149;
2438
+ }
2439
+
2440
+ :root[data-theme="dark"] .priority-medium {
2441
+ background: #3d2e06;
2442
+ color: #d29922;
2443
+ }
2444
+
2445
+ :root[data-theme="dark"] .priority-low {
2446
+ background: #1a2e1a;
2447
+ color: #3fb950;
2448
+ }
2449
+
2450
+ @media (prefers-color-scheme: dark) {
2451
+ :root:not([data-theme="light"]) .priority-high {
2452
+ background: #5c2125;
2453
+ color: #f85149;
2454
+ }
2455
+ :root:not([data-theme="light"]) .priority-medium {
2456
+ background: #3d2e06;
2457
+ color: #d29922;
2458
+ }
2459
+ :root:not([data-theme="light"]) .priority-low {
2460
+ background: #1a2e1a;
2461
+ color: #3fb950;
2462
+ }
2463
+ }
2464
+
2465
+ /* Search modal */
2466
+ :root[data-theme="dark"] .search-modal::backdrop {
2467
+ background: rgba(0, 0, 0, 0.7);
2468
+ }
2469
+
2470
+ :root[data-theme="dark"] .search-modal-content {
2471
+ background: var(--color-bg-secondary);
2472
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
2473
+ }
2474
+
2475
+ :root[data-theme="dark"] .search-result-role-user {
2476
+ color: #58a6ff;
2477
+ }
2478
+
2479
+ :root[data-theme="dark"] .search-result-role-assistant {
2480
+ color: #8b949e;
2481
+ }
2482
+
2483
+ :root[data-theme="dark"] mark,
2484
+ :root[data-theme="dark"] .search-result mark {
2485
+ background: #634c00;
2486
+ color: #fff;
2487
+ }
2488
+
2489
+ @media (prefers-color-scheme: dark) {
2490
+ :root:not([data-theme="light"]) .search-modal::backdrop {
2491
+ background: rgba(0, 0, 0, 0.7);
2492
+ }
2493
+ :root:not([data-theme="light"]) .search-modal-content {
2494
+ background: var(--color-bg-secondary);
2495
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
2496
+ }
2497
+ :root:not([data-theme="light"]) .search-result-role-user {
2498
+ color: #58a6ff;
2499
+ }
2500
+ :root:not([data-theme="light"]) .search-result-role-assistant {
2501
+ color: #8b949e;
2502
+ }
2503
+ :root:not([data-theme="light"]) mark,
2504
+ :root:not([data-theme="light"]) .search-result mark {
2505
+ background: #634c00;
2506
+ color: #fff;
2507
+ }
2508
+ }
2509
+
2510
+ /* Session card hover */
2511
+ :root[data-theme="dark"] .session-card:hover {
2512
+ border-color: #484f58;
2513
+ }
2514
+
2515
+ @media (prefers-color-scheme: dark) {
2516
+ :root:not([data-theme="light"]) .session-card:hover {
2517
+ border-color: #484f58;
2518
+ }
2519
+ }
2520
+
2521
+ /* WebFetch tool */
2522
+ :root[data-theme="dark"] .tool-webfetch {
2523
+ background: #0a2540;
2524
+ border-color: #1a4060;
2525
+ }
2526
+
2527
+ @media (prefers-color-scheme: dark) {
2528
+ :root:not([data-theme="light"]) .tool-webfetch {
2529
+ background: #0a2540;
2530
+ border-color: #1a4060;
2531
+ }
2532
+ }
2533
+
2534
+ /* TodoWrite tool */
2535
+ :root[data-theme="dark"] .tool-todowrite {
2536
+ background: #21262d;
2537
+ border-color: #30363d;
2538
+ }
2539
+
2540
+ @media (prefers-color-scheme: dark) {
2541
+ :root:not([data-theme="light"]) .tool-todowrite {
2542
+ background: #21262d;
2543
+ border-color: #30363d;
2544
+ }
2545
+ }
2546
+
2547
+ /* Batch tool */
2548
+ :root[data-theme="dark"] .tool-batch {
2549
+ background: #161b22;
2550
+ border-color: #30363d;
2551
+ }
2552
+
2553
+ @media (prefers-color-scheme: dark) {
2554
+ :root:not([data-theme="light"]) .tool-batch {
2555
+ background: #161b22;
2556
+ border-color: #30363d;
2557
+ }
2558
+ }
2559
+
2560
+ /* Edit replace all badge */
2561
+ :root[data-theme="dark"] .edit-replace-all {
2562
+ background: #3d2e06;
2563
+ color: #d29922;
2564
+ }
2565
+
2566
+ @media (prefers-color-scheme: dark) {
2567
+ :root:not([data-theme="light"]) .edit-replace-all {
2568
+ background: #3d2e06;
2569
+ color: #d29922;
2570
+ }
2571
+ }
2572
+
2573
+ /* Write badge success */
2574
+ :root[data-theme="dark"] .write-badge.badge-success {
2575
+ background: #1a2e1a;
2576
+ color: #3fb950;
2577
+ }
2578
+
2579
+ @media (prefers-color-scheme: dark) {
2580
+ :root:not([data-theme="light"]) .write-badge.badge-success {
2581
+ background: #1a2e1a;
2582
+ color: #3fb950;
2583
+ }
2584
+ }
2585
+
2586
+ /* Grep include badge */
2587
+ :root[data-theme="dark"] .grep-include {
2588
+ background: #1a3a5c;
2589
+ color: #58a6ff;
2590
+ }
2591
+
2592
+ @media (prefers-color-scheme: dark) {
2593
+ :root:not([data-theme="light"]) .grep-include {
2594
+ background: #1a3a5c;
2595
+ color: #58a6ff;
2596
+ }
2597
+ }
2598
+
2599
+ /* Badges */
2600
+ :root[data-theme="dark"] .badge-success {
2601
+ background: #1a2e1a;
2602
+ color: #3fb950;
2603
+ }
2604
+
2605
+ :root[data-theme="dark"] .badge-error {
2606
+ background: #3d1418;
2607
+ color: #f85149;
2608
+ }
2609
+
2610
+ :root[data-theme="dark"] .badge-info {
2611
+ background: #1a3a5c;
2612
+ color: #58a6ff;
2613
+ }
2614
+
2615
+ @media (prefers-color-scheme: dark) {
2616
+ :root:not([data-theme="light"]) .badge-success {
2617
+ background: #1a2e1a;
2618
+ color: #3fb950;
2619
+ }
2620
+ :root:not([data-theme="light"]) .badge-error {
2621
+ background: #3d1418;
2622
+ color: #f85149;
2623
+ }
2624
+ :root:not([data-theme="light"]) .badge-info {
2625
+ background: #1a3a5c;
2626
+ color: #58a6ff;
2627
+ }
2628
+ }
2629
+
2630
+ /* Reasoning header color */
2631
+ :root[data-theme="dark"] .reasoning-header {
2632
+ color: #d29922;
2633
+ }
2634
+
2635
+ @media (prefers-color-scheme: dark) {
2636
+ :root:not([data-theme="light"]) .reasoning-header {
2637
+ color: #d29922;
2638
+ }
2639
+ }
2640
+
2641
+ /* Tool input/output backgrounds */
2642
+ :root[data-theme="dark"] .tool-input {
2643
+ background: rgba(0, 0, 0, 0.2);
2644
+ }
2645
+
2646
+ :root[data-theme="dark"] .tool-output {
2647
+ background: rgba(0, 0, 0, 0.1);
2648
+ }
2649
+
2650
+ @media (prefers-color-scheme: dark) {
2651
+ :root:not([data-theme="light"]) .tool-input {
2652
+ background: rgba(0, 0, 0, 0.2);
2653
+ }
2654
+ :root:not([data-theme="light"]) .tool-output {
2655
+ background: rgba(0, 0, 0, 0.1);
2656
+ }
2657
+ }
2658
+
2659
+ /* Message stats border */
2660
+ :root[data-theme="dark"] .message-stats {
2661
+ border-top-color: rgba(255, 255, 255, 0.1);
2662
+ }
2663
+
2664
+ @media (prefers-color-scheme: dark) {
2665
+ :root:not([data-theme="light"]) .message-stats {
2666
+ border-top-color: rgba(255, 255, 255, 0.1);
2667
+ }
2668
+ }
2669
+
2670
+ /* Tool body border */
2671
+ :root[data-theme="dark"] .tool-body {
2672
+ border-top-color: rgba(255, 255, 255, 0.1);
2673
+ }
2674
+
2675
+ @media (prefers-color-scheme: dark) {
2676
+ :root:not([data-theme="light"]) .tool-body {
2677
+ border-top-color: rgba(255, 255, 255, 0.1);
2678
+ }
2679
+ }
2680
+
2681
+ /* ============================================================================
2682
+ Theme Transitions
2683
+ ============================================================================ */
2684
+
2685
+ body,
2686
+ .container,
2687
+ .message,
2688
+ .tool-call,
2689
+ .session-card,
2690
+ pre,
2691
+ code,
2692
+ .page-header,
2693
+ .page-footer,
2694
+ .search-modal-content,
2695
+ .theme-toggle {
2696
+ transition:
2697
+ background-color 0.2s ease,
2698
+ border-color 0.2s ease,
2699
+ color 0.2s ease,
2700
+ box-shadow 0.2s ease;
2701
+ }
2702
+
2703
+ /* Respect reduced motion preference */
2704
+ @media (prefers-reduced-motion: reduce) {
2705
+ *,
2706
+ *::before,
2707
+ *::after {
2708
+ transition-duration: 0.01ms !important;
2709
+ animation-duration: 0.01ms !important;
2710
+ }
2711
+ }
2712
+
2713
+ /* ============================================================================
2714
+ Scrollbar Styling
2715
+ ============================================================================ */
2716
+
2717
+ /* Webkit scrollbars */
2718
+ ::-webkit-scrollbar {
2719
+ width: 10px;
2720
+ height: 10px;
2721
+ }
2722
+
2723
+ ::-webkit-scrollbar-track {
2724
+ background: var(--scrollbar-track);
2725
+ }
2726
+
2727
+ ::-webkit-scrollbar-thumb {
2728
+ background: var(--scrollbar-thumb);
2729
+ border-radius: 5px;
2730
+ }
2731
+
2732
+ ::-webkit-scrollbar-thumb:hover {
2733
+ background: var(--color-text-muted);
2734
+ }
2735
+
2736
+ /* Firefox scrollbar */
2737
+ * {
2738
+ scrollbar-width: thin;
2739
+ scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
2740
+ }
2741
+
2742
+ /* ============================================================================
2743
+ Part Type Renderers - Phase 5
2744
+ ============================================================================ */
2745
+
2746
+ /* ----------------------------------------------------------------------------
2747
+ Text Parts - Enhanced with Prism.js support
2748
+ ---------------------------------------------------------------------------- */
2749
+
2750
+ .part-text {
2751
+ line-height: 1.7;
2752
+ }
2753
+
2754
+ .part-text p:last-child {
2755
+ margin-bottom: 0;
2756
+ }
2757
+
2758
+ /* Prism.js code block container */
2759
+ .part-text pre[class*="language-"] {
2760
+ margin: var(--spacing-md) 0;
2761
+ border-radius: var(--radius-md);
2762
+ position: relative;
2763
+ }
2764
+
2765
+ /* Language label for code blocks */
2766
+ .code-block-wrapper {
2767
+ position: relative;
2768
+ margin: var(--spacing-md) 0;
2769
+ }
2770
+
2771
+ .code-block-wrapper .code-language {
2772
+ position: absolute;
2773
+ top: 0;
2774
+ right: 0;
2775
+ padding: 2px 8px;
2776
+ font-size: var(--font-size-xs);
2777
+ font-family: var(--font-sans);
2778
+ background: var(--color-bg-tertiary);
2779
+ border-bottom-left-radius: var(--radius-sm);
2780
+ border-top-right-radius: var(--radius-md);
2781
+ color: var(--color-text-muted);
2782
+ text-transform: uppercase;
2783
+ letter-spacing: 0.5px;
2784
+ }
2785
+
2786
+ .code-block-wrapper pre {
2787
+ margin: 0;
2788
+ }
2789
+
2790
+ /* ----------------------------------------------------------------------------
2791
+ Reasoning Parts - Enhanced with collapsible and timing
2792
+ ---------------------------------------------------------------------------- */
2793
+
2794
+ .reasoning {
2795
+ margin: var(--spacing-md) 0;
2796
+ border-radius: var(--radius-md);
2797
+ overflow: hidden;
2798
+ }
2799
+
2800
+ .reasoning-header {
2801
+ display: flex;
2802
+ align-items: center;
2803
+ gap: var(--spacing-sm);
2804
+ padding: var(--spacing-sm) var(--spacing-md);
2805
+ background: var(--reasoning-bg);
2806
+ border: 1px solid var(--reasoning-border);
2807
+ border-bottom: none;
2808
+ border-radius: var(--radius-md) var(--radius-md) 0 0;
2809
+ cursor: pointer;
2810
+ user-select: none;
2811
+ }
2812
+
2813
+ .reasoning-header:hover {
2814
+ filter: brightness(0.98);
2815
+ }
2816
+
2817
+ .reasoning-icon {
2818
+ font-size: var(--font-size-lg);
2819
+ }
2820
+
2821
+ .reasoning-label {
2822
+ font-weight: 600;
2823
+ color: #e65100;
2824
+ }
2825
+
2826
+ .reasoning-duration {
2827
+ font-size: var(--font-size-xs);
2828
+ color: var(--color-text-muted);
2829
+ margin-left: auto;
2830
+ }
2831
+
2832
+ .reasoning-toggle {
2833
+ font-size: var(--font-size-xs);
2834
+ color: var(--color-text-muted);
2835
+ padding: 2px 6px;
2836
+ }
2837
+
2838
+ .reasoning-content {
2839
+ padding: var(--spacing-md);
2840
+ background: var(--reasoning-bg);
2841
+ border: 1px solid var(--reasoning-border);
2842
+ border-top: none;
2843
+ border-radius: 0 0 var(--radius-md) var(--radius-md);
2844
+ color: var(--color-text-secondary);
2845
+ font-style: italic;
2846
+ white-space: pre-wrap;
2847
+ max-height: 500px;
2848
+ overflow-y: auto;
2849
+ }
2850
+
2851
+ .reasoning-content.collapsed {
2852
+ display: none;
2853
+ }
2854
+
2855
+ /* ----------------------------------------------------------------------------
2856
+ File Parts - Enhanced with image preview
2857
+ ---------------------------------------------------------------------------- */
2858
+
2859
+ .part-file {
2860
+ padding: var(--spacing-md);
2861
+ background: var(--color-bg-secondary);
2862
+ border: 1px solid var(--color-border);
2863
+ border-radius: var(--radius-md);
2864
+ margin: var(--spacing-md) 0;
2865
+ }
2866
+
2867
+ .file-header {
2868
+ display: flex;
2869
+ align-items: center;
2870
+ gap: var(--spacing-sm);
2871
+ }
2872
+
2873
+ .file-icon {
2874
+ font-size: var(--font-size-lg);
2875
+ flex-shrink: 0;
2876
+ }
2877
+
2878
+ .file-info {
2879
+ flex: 1;
2880
+ min-width: 0;
2881
+ }
2882
+
2883
+ .file-name {
2884
+ font-family: var(--font-mono);
2885
+ font-size: var(--font-size-sm);
2886
+ font-weight: 500;
2887
+ overflow: hidden;
2888
+ text-overflow: ellipsis;
2889
+ white-space: nowrap;
2890
+ }
2891
+
2892
+ .file-meta {
2893
+ display: flex;
2894
+ gap: var(--spacing-md);
2895
+ font-size: var(--font-size-xs);
2896
+ color: var(--color-text-muted);
2897
+ margin-top: 2px;
2898
+ }
2899
+
2900
+ .file-mime {
2901
+ font-size: var(--font-size-xs);
2902
+ padding: 2px 6px;
2903
+ background: var(--color-bg-tertiary);
2904
+ border-radius: var(--radius-sm);
2905
+ color: var(--color-text-secondary);
2906
+ }
2907
+
2908
+ .file-size {
2909
+ color: var(--color-text-muted);
2910
+ }
2911
+
2912
+ .file-preview {
2913
+ margin-top: var(--spacing-md);
2914
+ padding: var(--spacing-md);
2915
+ background: var(--color-bg);
2916
+ border: 1px solid var(--color-border);
2917
+ border-radius: var(--radius-md);
2918
+ text-align: center;
2919
+ }
2920
+
2921
+ .file-preview img {
2922
+ max-width: 100%;
2923
+ max-height: 400px;
2924
+ border-radius: var(--radius-sm);
2925
+ }
2926
+
2927
+ .file-preview-link {
2928
+ display: inline-flex;
2929
+ align-items: center;
2930
+ gap: var(--spacing-xs);
2931
+ font-size: var(--font-size-sm);
2932
+ color: var(--color-info);
2933
+ }
2934
+
2935
+ .file-preview-link:hover {
2936
+ text-decoration: underline;
2937
+ }
2938
+
2939
+ /* ----------------------------------------------------------------------------
2940
+ Snapshot Parts - Undo/Redo markers
2941
+ ---------------------------------------------------------------------------- */
2942
+
2943
+ .part-snapshot {
2944
+ display: flex;
2945
+ align-items: center;
2946
+ gap: var(--spacing-sm);
2947
+ padding: var(--spacing-sm) var(--spacing-md);
2948
+ background: linear-gradient(90deg, var(--color-bg-secondary), transparent);
2949
+ border-left: 3px solid var(--color-info);
2950
+ margin: var(--spacing-md) 0;
2951
+ font-size: var(--font-size-sm);
2952
+ }
2953
+
2954
+ .snapshot-icon {
2955
+ font-size: var(--font-size-lg);
2956
+ color: var(--color-info);
2957
+ }
2958
+
2959
+ .snapshot-label {
2960
+ font-weight: 500;
2961
+ color: var(--color-text-secondary);
2962
+ }
2963
+
2964
+ .snapshot-id {
2965
+ font-family: var(--font-mono);
2966
+ font-size: var(--font-size-xs);
2967
+ color: var(--color-text-muted);
2968
+ background: var(--color-bg-tertiary);
2969
+ padding: 2px 6px;
2970
+ border-radius: var(--radius-sm);
2971
+ }
2972
+
2973
+ /* ----------------------------------------------------------------------------
2974
+ Patch Parts - File changes checkpoint
2975
+ ---------------------------------------------------------------------------- */
2976
+
2977
+ .part-patch {
2978
+ margin: var(--spacing-md) 0;
2979
+ border: 1px solid var(--color-border);
2980
+ border-radius: var(--radius-md);
2981
+ overflow: hidden;
2982
+ }
2983
+
2984
+ .patch-header {
2985
+ display: flex;
2986
+ align-items: center;
2987
+ gap: var(--spacing-sm);
2988
+ padding: var(--spacing-sm) var(--spacing-md);
2989
+ background: var(--color-bg-secondary);
2990
+ border-bottom: 1px solid var(--color-border-light);
2991
+ }
2992
+
2993
+ .patch-icon {
2994
+ font-size: var(--font-size-lg);
2995
+ color: var(--color-success);
2996
+ }
2997
+
2998
+ .patch-label {
2999
+ font-weight: 500;
3000
+ color: var(--color-text);
3001
+ }
3002
+
3003
+ .patch-hash {
3004
+ font-family: var(--font-mono);
3005
+ font-size: var(--font-size-xs);
3006
+ color: var(--color-text-muted);
3007
+ background: var(--color-bg-tertiary);
3008
+ padding: 2px 6px;
3009
+ border-radius: var(--radius-sm);
3010
+ margin-left: auto;
3011
+ }
3012
+
3013
+ .patch-file-count {
3014
+ font-size: var(--font-size-xs);
3015
+ color: var(--color-text-secondary);
3016
+ }
3017
+
3018
+ .patch-files {
3019
+ list-style: none;
3020
+ padding: 0;
3021
+ margin: 0;
3022
+ max-height: 200px;
3023
+ overflow-y: auto;
3024
+ }
3025
+
3026
+ .patch-file-item {
3027
+ display: flex;
3028
+ align-items: center;
3029
+ gap: var(--spacing-sm);
3030
+ padding: var(--spacing-xs) var(--spacing-md);
3031
+ font-family: var(--font-mono);
3032
+ font-size: var(--font-size-sm);
3033
+ border-bottom: 1px solid var(--color-border-light);
3034
+ }
3035
+
3036
+ .patch-file-item:last-child {
3037
+ border-bottom: none;
3038
+ }
3039
+
3040
+ .patch-file-item:hover {
3041
+ background: var(--color-bg-secondary);
3042
+ }
3043
+
3044
+ .patch-file-icon {
3045
+ color: var(--color-success);
3046
+ }
3047
+
3048
+ /* ----------------------------------------------------------------------------
3049
+ Agent Parts - Sub-agent invocations
3050
+ ---------------------------------------------------------------------------- */
3051
+
3052
+ .part-agent {
3053
+ display: flex;
3054
+ align-items: center;
3055
+ gap: var(--spacing-sm);
3056
+ padding: var(--spacing-sm) var(--spacing-md);
3057
+ background: linear-gradient(90deg, #e8f5e9, transparent);
3058
+ border-left: 3px solid var(--color-success);
3059
+ margin: var(--spacing-md) 0;
3060
+ font-size: var(--font-size-sm);
3061
+ }
3062
+
3063
+ .agent-icon {
3064
+ font-size: var(--font-size-lg);
3065
+ }
3066
+
3067
+ .agent-label {
3068
+ font-weight: 500;
3069
+ color: var(--color-text-secondary);
3070
+ }
3071
+
3072
+ .agent-name-badge {
3073
+ font-size: var(--font-size-xs);
3074
+ font-weight: 600;
3075
+ padding: 2px 8px;
3076
+ border-radius: var(--radius-sm);
3077
+ background: var(--color-success);
3078
+ color: white;
3079
+ }
3080
+
3081
+ .agent-source {
3082
+ font-family: var(--font-mono);
3083
+ font-size: var(--font-size-xs);
3084
+ color: var(--color-text-muted);
3085
+ margin-left: auto;
3086
+ max-width: 300px;
3087
+ overflow: hidden;
3088
+ text-overflow: ellipsis;
3089
+ white-space: nowrap;
3090
+ }
3091
+
3092
+ /* ----------------------------------------------------------------------------
3093
+ Compaction Parts - Context compaction markers
3094
+ ---------------------------------------------------------------------------- */
3095
+
3096
+ .part-compaction {
3097
+ display: flex;
3098
+ align-items: center;
3099
+ justify-content: center;
3100
+ gap: var(--spacing-sm);
3101
+ padding: var(--spacing-sm) var(--spacing-md);
3102
+ margin: var(--spacing-lg) 0;
3103
+ position: relative;
3104
+ }
3105
+
3106
+ .part-compaction::before,
3107
+ .part-compaction::after {
3108
+ content: "";
3109
+ flex: 1;
3110
+ height: 1px;
3111
+ background: linear-gradient(90deg, transparent, var(--color-border), transparent);
3112
+ }
3113
+
3114
+ .compaction-badge {
3115
+ display: flex;
3116
+ align-items: center;
3117
+ gap: var(--spacing-xs);
3118
+ padding: var(--spacing-xs) var(--spacing-md);
3119
+ background: var(--color-bg-secondary);
3120
+ border: 1px solid var(--color-border);
3121
+ border-radius: var(--radius-lg);
3122
+ font-size: var(--font-size-xs);
3123
+ color: var(--color-text-secondary);
3124
+ }
3125
+
3126
+ .compaction-icon {
3127
+ font-size: var(--font-size-sm);
3128
+ }
3129
+
3130
+ .compaction-type {
3131
+ font-weight: 500;
3132
+ }
3133
+
3134
+ /* ----------------------------------------------------------------------------
3135
+ Subtask Parts - Task metadata
3136
+ ---------------------------------------------------------------------------- */
3137
+
3138
+ .part-subtask {
3139
+ margin: var(--spacing-md) 0;
3140
+ border: 1px solid var(--tool-border);
3141
+ border-radius: var(--radius-md);
3142
+ overflow: hidden;
3143
+ background: var(--tool-bg);
3144
+ }
3145
+
3146
+ .subtask-header {
3147
+ display: flex;
3148
+ align-items: center;
3149
+ gap: var(--spacing-sm);
3150
+ padding: var(--spacing-sm) var(--spacing-md);
3151
+ background: rgba(0, 0, 0, 0.02);
3152
+ }
3153
+
3154
+ .subtask-icon {
3155
+ font-size: var(--font-size-lg);
3156
+ }
3157
+
3158
+ .subtask-label {
3159
+ font-weight: 500;
3160
+ color: var(--color-text-secondary);
3161
+ }
3162
+
3163
+ .subtask-agent-badge {
3164
+ font-size: var(--font-size-xs);
3165
+ font-weight: 600;
3166
+ padding: 2px 8px;
3167
+ border-radius: var(--radius-sm);
3168
+ }
3169
+
3170
+ .subtask-description {
3171
+ font-weight: 500;
3172
+ flex: 1;
3173
+ overflow: hidden;
3174
+ text-overflow: ellipsis;
3175
+ white-space: nowrap;
3176
+ }
3177
+
3178
+ .subtask-body {
3179
+ border-top: 1px solid var(--color-border-light);
3180
+ }
3181
+
3182
+ .subtask-command {
3183
+ display: flex;
3184
+ align-items: center;
3185
+ gap: var(--spacing-sm);
3186
+ padding: var(--spacing-sm) var(--spacing-md);
3187
+ background: var(--color-bg-secondary);
3188
+ font-size: var(--font-size-sm);
3189
+ }
3190
+
3191
+ .subtask-command-label {
3192
+ color: var(--color-text-muted);
3193
+ }
3194
+
3195
+ .subtask-prompt {
3196
+ padding: var(--spacing-md);
3197
+ }
3198
+
3199
+ .subtask-prompt-label {
3200
+ font-size: var(--font-size-xs);
3201
+ font-weight: 600;
3202
+ text-transform: uppercase;
3203
+ color: var(--color-text-muted);
3204
+ margin-bottom: var(--spacing-xs);
3205
+ }
3206
+
3207
+ .subtask-prompt-text {
3208
+ font-size: var(--font-size-sm);
3209
+ color: var(--color-text-secondary);
3210
+ white-space: pre-wrap;
3211
+ max-height: 200px;
3212
+ overflow-y: auto;
3213
+ }
3214
+
3215
+ /* ----------------------------------------------------------------------------
3216
+ Retry Parts - Error and retry markers
3217
+ ---------------------------------------------------------------------------- */
3218
+
3219
+ .part-retry {
3220
+ margin: var(--spacing-md) 0;
3221
+ border: 1px solid var(--error-border);
3222
+ border-radius: var(--radius-md);
3223
+ overflow: hidden;
3224
+ background: var(--error-bg);
3225
+ }
3226
+
3227
+ .retry-header {
3228
+ display: flex;
3229
+ align-items: center;
3230
+ gap: var(--spacing-sm);
3231
+ padding: var(--spacing-sm) var(--spacing-md);
3232
+ }
3233
+
3234
+ .retry-icon {
3235
+ font-size: var(--font-size-lg);
3236
+ color: var(--color-warning);
3237
+ }
3238
+
3239
+ .retry-label {
3240
+ font-weight: 600;
3241
+ color: var(--color-warning);
3242
+ }
3243
+
3244
+ .retry-attempt {
3245
+ font-size: var(--font-size-xs);
3246
+ font-weight: 600;
3247
+ padding: 2px 8px;
3248
+ border-radius: var(--radius-sm);
3249
+ background: var(--color-warning);
3250
+ color: white;
3251
+ }
3252
+
3253
+ .retry-error {
3254
+ padding: var(--spacing-md);
3255
+ border-top: 1px solid var(--error-border);
3256
+ }
3257
+
3258
+ .retry-error-name {
3259
+ font-weight: 600;
3260
+ color: var(--color-error);
3261
+ margin-bottom: var(--spacing-xs);
3262
+ }
3263
+
3264
+ .retry-error-message {
3265
+ font-size: var(--font-size-sm);
3266
+ color: var(--color-text-secondary);
3267
+ white-space: pre-wrap;
3268
+ }
3269
+
3270
+ .retry-error-code {
3271
+ margin-top: var(--spacing-sm);
3272
+ font-family: var(--font-mono);
3273
+ font-size: var(--font-size-xs);
3274
+ color: var(--color-text-muted);
3275
+ background: var(--color-bg);
3276
+ padding: 2px 6px;
3277
+ border-radius: var(--radius-sm);
3278
+ display: inline-block;
3279
+ }
3280
+
3281
+ /* ----------------------------------------------------------------------------
3282
+ Generic Part Fallback
3283
+ ---------------------------------------------------------------------------- */
3284
+
3285
+ .part-generic {
3286
+ display: flex;
3287
+ align-items: center;
3288
+ gap: var(--spacing-sm);
3289
+ padding: var(--spacing-sm) var(--spacing-md);
3290
+ background: var(--color-bg-secondary);
3291
+ border: 1px dashed var(--color-border);
3292
+ border-radius: var(--radius-md);
3293
+ margin: var(--spacing-md) 0;
3294
+ font-size: var(--font-size-sm);
3295
+ }
3296
+
3297
+ .part-type {
3298
+ font-family: var(--font-mono);
3299
+ font-size: var(--font-size-xs);
3300
+ padding: 2px 6px;
3301
+ background: var(--color-bg-tertiary);
3302
+ border-radius: var(--radius-sm);
3303
+ color: var(--color-text-muted);
3304
+ }
3305
+
3306
+ /* ============================================================================
3307
+ Phase 5 - Dark Mode Overrides
3308
+ ============================================================================ */
3309
+
3310
+ /* Reasoning */
3311
+ :root[data-theme="dark"] .reasoning-label {
3312
+ color: #d29922;
3313
+ }
3314
+
3315
+ @media (prefers-color-scheme: dark) {
3316
+ :root:not([data-theme="light"]) .reasoning-label {
3317
+ color: #d29922;
3318
+ }
3319
+ }
3320
+
3321
+ /* Agent part */
3322
+ :root[data-theme="dark"] .part-agent {
3323
+ background: linear-gradient(90deg, #1a2e1a, transparent);
3324
+ }
3325
+
3326
+ @media (prefers-color-scheme: dark) {
3327
+ :root:not([data-theme="light"]) .part-agent {
3328
+ background: linear-gradient(90deg, #1a2e1a, transparent);
3329
+ }
3330
+ }
3331
+
3332
+ /* Snapshot part */
3333
+ :root[data-theme="dark"] .part-snapshot {
3334
+ background: linear-gradient(90deg, #1a3a5c, transparent);
3335
+ }
3336
+
3337
+ @media (prefers-color-scheme: dark) {
3338
+ :root:not([data-theme="light"]) .part-snapshot {
3339
+ background: linear-gradient(90deg, #1a3a5c, transparent);
3340
+ }
3341
+ }
3342
+
3343
+ /* Subtask agent badges - same as task tool */
3344
+ .subtask-agent-badge.agent-general {
3345
+ background: var(--color-info);
3346
+ color: white;
3347
+ }
3348
+
3349
+ .subtask-agent-badge.agent-explore {
3350
+ background: #9c27b0;
3351
+ color: white;
3352
+ }
3353
+
3354
+ .subtask-agent-badge.agent-reviewer {
3355
+ background: #ff9800;
3356
+ color: white;
3357
+ }
3358
+
3359
+ .subtask-agent-badge.agent-docs {
3360
+ background: var(--color-success);
3361
+ color: white;
3362
+ }
3363
+
3364
+ /* ============================================================================
3365
+ Print Styles
3366
+ ============================================================================ */
3367
+
3368
+ @media print {
3369
+ .search-container,
3370
+ .search-modal,
3371
+ .pagination,
3372
+ .theme-toggle,
3373
+ .header-actions {
3374
+ display: none;
3375
+ }
3376
+
3377
+ .container {
3378
+ max-width: 100%;
3379
+ }
3380
+
3381
+ .tool-body.collapsed {
3382
+ display: block;
3383
+ }
3384
+ }