@qiaolei81/copilot-session-viewer 0.3.9 → 0.4.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.
@@ -1,1705 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Session <%= sessionId %> - Vue Virtual Scroller</title>
7
-
8
- <!-- Vue 3 -->
9
- <script src="/public/vendor/vue.global.prod.min.js"></script>
10
-
11
- <!-- vue-virtual-scroller Vue 3 -->
12
- <link rel="stylesheet" href="/public/vendor/vue-virtual-scroller.css">
13
- <script src="/public/vendor/vue-virtual-scroller.min.js"></script>
14
-
15
- <!-- Markdown rendering -->
16
- <script src="/public/vendor/marked.umd.min.js"></script>
17
-
18
- <!-- DOMPurify for XSS protection -->
19
- <script src="/public/vendor/purify.min.js"></script>
20
-
21
- <%- include('telemetry-snippet') %>
22
-
23
- <style>
24
- * { margin: 0; padding: 0; box-sizing: border-box; }
25
- body {
26
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
27
- background: #0d1117;
28
- color: #c9d1d9;
29
- line-height: 1.5;
30
- overflow: hidden;
31
- }
32
- .container {
33
- max-width: 100%;
34
- height: 100vh;
35
- display: flex;
36
- flex-direction: column;
37
- padding: 0;
38
- }
39
-
40
- /* Focus indicators for accessibility */
41
- button:focus-visible,
42
- input:focus-visible,
43
- .turn-btn:focus-visible,
44
- .filter-dropdown-toggle:focus-visible {
45
- outline: 2px solid #58a6ff;
46
- outline-offset: 2px;
47
- box-shadow: 0 0 0 4px rgba(88, 166, 255, 0.2);
48
- }
49
-
50
- /* Header */
51
- .header {
52
- padding: 16px 20px;
53
- border-bottom: 1px solid #30363d;
54
- flex-shrink: 0;
55
- display: flex;
56
- align-items: center;
57
- gap: 16px;
58
- }
59
- .home-btn {
60
- padding: 6px 12px;
61
- background: #21262d;
62
- border: 1px solid #30363d;
63
- border-radius: 6px;
64
- color: #c9d1d9;
65
- text-decoration: none;
66
- font-size: 14px;
67
- transition: all 0.2s;
68
- }
69
- .home-btn:hover {
70
- background: #30363d;
71
- border-color: #58a6ff;
72
- }
73
- .time-analyze-btn {
74
- padding: 6px 12px;
75
- background: #1f6feb;
76
- border: 1px solid #388bfd;
77
- border-radius: 6px;
78
- color: #fff;
79
- text-decoration: none;
80
- font-size: 14px;
81
- font-weight: 500;
82
- transition: all 0.2s;
83
- white-space: nowrap;
84
- }
85
- .time-analyze-btn:hover {
86
- background: #388bfd;
87
- border-color: #58a6ff;
88
- }
89
- .export-btn {
90
- padding: 6px 12px;
91
- background: #238636;
92
- border: 1px solid #2ea043;
93
- border-radius: 6px;
94
- color: #fff;
95
- font-size: 14px;
96
- font-weight: 500;
97
- cursor: pointer;
98
- transition: all 0.2s;
99
- white-space: nowrap;
100
- }
101
- .export-btn:hover:not(:disabled) {
102
- background: #2ea043;
103
- border-color: #3fb950;
104
- }
105
- .export-btn:disabled {
106
- opacity: 0.6;
107
- cursor: not-allowed;
108
- }
109
- h1 {
110
- color: #58a6ff;
111
- font-size: 20px;
112
- margin: 0;
113
- flex: 1;
114
- }
115
-
116
- /* Main layout */
117
- .main-layout {
118
- display: flex;
119
- flex: 1;
120
- overflow: hidden;
121
- }
122
-
123
- /* Sidebar */
124
- .sidebar {
125
- width: 320px;
126
- flex-shrink: 0;
127
- background: #161b22;
128
- border-right: 1px solid #30363d;
129
- overflow-y: auto;
130
- padding: 16px;
131
- transition: all 0.3s ease;
132
- }
133
- .sidebar.collapsed {
134
- width: 0;
135
- padding: 0;
136
- border-right: none;
137
- overflow: hidden;
138
- }
139
-
140
- /* Sidebar toggle */
141
- .sidebar-toggle {
142
- background: #21262d;
143
- border: 1px solid #30363d;
144
- border-radius: 4px;
145
- color: #c9d1d9;
146
- cursor: pointer;
147
- padding: 4px 8px;
148
- font-size: 14px;
149
- transition: all 0.2s;
150
- }
151
- .sidebar-toggle:hover {
152
- background: #30363d;
153
- color: #58a6ff;
154
- }
155
-
156
- /* Sidebar sections */
157
- .sidebar-section {
158
- margin-bottom: 20px;
159
- }
160
- .sidebar-section-title {
161
- font-size: 12px;
162
- font-weight: 600;
163
- color: #c9d1d9;
164
- margin-bottom: 12px;
165
- text-transform: uppercase;
166
- letter-spacing: 0.5px;
167
- }
168
-
169
- /* Session Info */
170
- .session-info {
171
- font-size: 13px;
172
- }
173
-
174
- /* Session info table */
175
- .session-info-table {
176
- width: 100%;
177
- font-size: 12px;
178
- }
179
- .session-info-table td {
180
- padding: 6px 8px;
181
- border-bottom: 1px solid rgba(110, 118, 129, 0.15);
182
- vertical-align: top;
183
- }
184
- .session-info-table td:first-child {
185
- color: #8b949e;
186
- font-weight: 500;
187
- white-space: nowrap;
188
- width: 85px;
189
- }
190
- .session-info-table td:last-child {
191
- color: #c9d1d9;
192
- word-break: break-all;
193
- }
194
- .session-info-table tr:last-child td {
195
- border-bottom: none;
196
- }
197
-
198
- /* Source badges */
199
- .source-badge {
200
- display: inline-block;
201
- font-size: 11px;
202
- font-weight: 600;
203
- padding: 2px 8px;
204
- border-radius: 3px;
205
- text-transform: uppercase;
206
- letter-spacing: 0.5px;
207
- }
208
- .source-cli {
209
- background: rgba(35, 134, 54, 0.2);
210
- color: #3fb950;
211
- border: 1px solid rgba(35, 134, 54, 0.4);
212
- }
213
- .source-vscode {
214
- background: rgba(31, 111, 235, 0.2);
215
- color: #58a6ff;
216
- border: 1px solid rgba(31, 111, 235, 0.4);
217
- }
218
- .source-copilot {
219
- background: rgba(88, 166, 255, 0.2);
220
- color: #58a6ff;
221
- border: 1px solid rgba(88, 166, 255, 0.4);
222
- }
223
- .source-claude {
224
- background: rgba(210, 153, 34, 0.2);
225
- color: #d29922;
226
- border: 1px solid rgba(210, 153, 34, 0.4);
227
- }
228
- .source-pi-mono {
229
- background: rgba(138, 102, 204, 0.2);
230
- color: #a78bdb;
231
- border: 1px solid rgba(138, 102, 204, 0.4);
232
- }
233
- .source-modernize {
234
- background: rgba(76, 175, 80, 0.2);
235
- color: #66bb6a;
236
- border: 1px solid rgba(76, 175, 80, 0.4);
237
- }
238
- .source-vscode {
239
- background: rgba(0, 122, 204, 0.2);
240
- color: #4fc3f7;
241
- border: 1px solid rgba(0, 122, 204, 0.4);
242
- }
243
-
244
- /* Turn buttons */
245
- .turn-buttons {
246
- display: flex;
247
- flex-direction: column;
248
- gap: 6px;
249
- }
250
- .turn-btn {
251
- padding: 12px 10px;
252
- min-height: 44px;
253
- background: #21262d;
254
- border: 1px solid #30363d;
255
- border-radius: 4px;
256
- color: #c9d1d9;
257
- font-size: 13px;
258
- cursor: pointer;
259
- transition: all 0.2s;
260
- text-align: left;
261
- width: 100%;
262
- margin-bottom: 10px;
263
- }
264
- .turn-btn-id {
265
- font-weight: 600;
266
- color: #c9d1d9;
267
- font-size: 12px;
268
- }
269
- .turn-btn-message {
270
- font-size: 12px;
271
- color: #6e7681;
272
- overflow: hidden;
273
- text-overflow: ellipsis;
274
- white-space: nowrap;
275
- margin-top: 2px;
276
- }
277
- .turn-btn:hover {
278
- background: #30363d;
279
- border-color: #58a6ff;
280
- }
281
- .turn-btn:hover .turn-btn-id {
282
- color: #58a6ff;
283
- }
284
- .turn-btn.active {
285
- background: #1f6feb;
286
- border-color: #1f6feb;
287
- color: #fff;
288
- }
289
- .turn-btn.active .turn-btn-id,
290
- .turn-btn.active .turn-btn-message {
291
- color: #fff;
292
- }
293
-
294
- /* Event filters — removed from sidebar, now in unified toolbar */
295
-
296
- /* Session Tags */
297
- .session-tags-container {
298
- margin-top: 16px;
299
- }
300
- .tags-display {
301
- display: flex;
302
- flex-wrap: wrap;
303
- gap: 6px;
304
- min-height: 28px;
305
- align-items: flex-start;
306
- }
307
- .tag-label {
308
- display: inline-flex;
309
- align-items: center;
310
- gap: 4px;
311
- padding: 4px 10px;
312
- border-radius: 12px;
313
- font-size: 12px;
314
- font-weight: 500;
315
- color: #fff;
316
- cursor: default;
317
- transition: opacity 0.2s;
318
- }
319
- .tag-label:hover {
320
- opacity: 0.8;
321
- }
322
- .tag-remove {
323
- background: none;
324
- border: none;
325
- color: rgba(255, 255, 255, 0.7);
326
- cursor: pointer;
327
- font-size: 14px;
328
- line-height: 1;
329
- padding: 0;
330
- margin-left: 2px;
331
- transition: color 0.2s;
332
- }
333
- .tag-remove:hover {
334
- color: #fff;
335
- }
336
- .tags-edit-btn {
337
- background: none;
338
- border: 1px solid #30363d;
339
- border-radius: 4px;
340
- color: #8b949e;
341
- cursor: pointer;
342
- padding: 4px 8px;
343
- font-size: 12px;
344
- transition: all 0.2s;
345
- display: inline-flex;
346
- align-items: center;
347
- gap: 4px;
348
- }
349
- .tags-edit-btn:hover {
350
- border-color: #58a6ff;
351
- color: #58a6ff;
352
- }
353
- .tags-dropdown {
354
- position: relative;
355
- margin-top: 8px;
356
- }
357
- .tags-input-container {
358
- display: flex;
359
- flex-wrap: wrap;
360
- gap: 6px;
361
- padding: 8px;
362
- background: #161b22;
363
- border: 1px solid #30363d;
364
- border-radius: 6px;
365
- min-height: 38px;
366
- }
367
- .tags-input-container:focus-within {
368
- border-color: #58a6ff;
369
- }
370
- .tag-input-chip {
371
- display: inline-flex;
372
- align-items: center;
373
- gap: 4px;
374
- padding: 4px 8px;
375
- border-radius: 12px;
376
- font-size: 12px;
377
- font-weight: 500;
378
- color: #fff;
379
- }
380
- .tag-input-chip button {
381
- background: none;
382
- border: none;
383
- color: rgba(255, 255, 255, 0.7);
384
- cursor: pointer;
385
- font-size: 12px;
386
- padding: 0;
387
- margin-left: 2px;
388
- }
389
- .tag-input-chip button:hover {
390
- color: #fff;
391
- }
392
- .tags-text-input {
393
- flex: 1;
394
- min-width: 120px;
395
- background: transparent;
396
- border: none;
397
- outline: none;
398
- color: #c9d1d9;
399
- font-size: 13px;
400
- padding: 4px;
401
- }
402
- .tags-text-input::placeholder {
403
- color: #6e7681;
404
- }
405
- .tags-autocomplete {
406
- position: absolute;
407
- top: 100%;
408
- left: 0;
409
- right: 0;
410
- background: #161b22;
411
- border: 1px solid #30363d;
412
- border-radius: 6px;
413
- margin-top: 4px;
414
- max-height: 200px;
415
- overflow-y: auto;
416
- z-index: 100;
417
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
418
- }
419
- .tags-autocomplete-item {
420
- padding: 8px 12px;
421
- font-size: 13px;
422
- color: #c9d1d9;
423
- cursor: pointer;
424
- transition: background 0.2s;
425
- }
426
- .tags-autocomplete-item:hover {
427
- background: rgba(88, 166, 255, 0.15);
428
- }
429
- .tags-autocomplete-item.selected {
430
- background: rgba(88, 166, 255, 0.25);
431
- }
432
- .tags-error {
433
- margin-top: 6px;
434
- font-size: 12px;
435
- color: #f85149;
436
- }
437
-
438
- /* Usage Section */
439
- .usage-container {
440
- font-size: 12px;
441
- display: flex;
442
- flex-direction: column;
443
- gap: 12px;
444
- }
445
- .usage-summary {
446
- padding: 14px;
447
- background: linear-gradient(180deg, rgba(88, 166, 255, 0.16) 0%, rgba(22, 27, 34, 0.94) 100%);
448
- border: 1px solid rgba(88, 166, 255, 0.22);
449
- border-radius: 10px;
450
- color: #c9d1d9;
451
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
452
- }
453
- .usage-summary-eyebrow {
454
- font-size: 10px;
455
- font-weight: 700;
456
- color: #8b949e;
457
- text-transform: uppercase;
458
- letter-spacing: 0.7px;
459
- margin-bottom: 6px;
460
- }
461
- .usage-summary-total {
462
- font-size: 24px;
463
- line-height: 1;
464
- font-weight: 700;
465
- color: #e6edf3;
466
- display: flex;
467
- align-items: baseline;
468
- gap: 6px;
469
- }
470
- .usage-summary-total-unit {
471
- font-size: 11px;
472
- font-weight: 600;
473
- text-transform: uppercase;
474
- letter-spacing: 0.5px;
475
- color: #8b949e;
476
- }
477
- .usage-summary-caption {
478
- margin-top: 6px;
479
- font-size: 12px;
480
- color: #8b949e;
481
- }
482
- .usage-summary-metrics {
483
- display: grid;
484
- grid-template-columns: repeat(3, minmax(0, 1fr));
485
- gap: 8px;
486
- margin-top: 12px;
487
- }
488
- .usage-expanded {
489
- display: flex;
490
- flex-direction: column;
491
- gap: 12px;
492
- }
493
- .usage-section {
494
- padding: 12px;
495
- background: rgba(110, 118, 129, 0.05);
496
- border: 1px solid #30363d;
497
- border-radius: 10px;
498
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.02);
499
- }
500
- .usage-section-header {
501
- display: flex;
502
- align-items: center;
503
- justify-content: space-between;
504
- gap: 8px;
505
- margin-bottom: 10px;
506
- }
507
- .usage-section-title {
508
- font-size: 11px;
509
- font-weight: 600;
510
- color: #8b949e;
511
- text-transform: uppercase;
512
- letter-spacing: 0.5px;
513
- margin: 0;
514
- }
515
- .usage-section-badge {
516
- display: inline-flex;
517
- align-items: center;
518
- justify-content: center;
519
- min-width: 24px;
520
- padding: 2px 8px;
521
- border-radius: 999px;
522
- background: rgba(88, 166, 255, 0.12);
523
- border: 1px solid rgba(88, 166, 255, 0.22);
524
- color: #79c0ff;
525
- font-size: 10px;
526
- font-weight: 700;
527
- }
528
- .usage-model-list {
529
- display: flex;
530
- flex-direction: column;
531
- gap: 8px;
532
- }
533
- .usage-model {
534
- padding: 10px;
535
- background: linear-gradient(180deg, rgba(13, 17, 23, 0.96) 0%, rgba(22, 27, 34, 0.96) 100%);
536
- border: 1px solid rgba(48, 54, 61, 0.9);
537
- border-radius: 8px;
538
- }
539
- .usage-model-header {
540
- display: flex;
541
- flex-direction: column;
542
- align-items: stretch;
543
- gap: 8px;
544
- margin-bottom: 10px;
545
- }
546
- .usage-model-name {
547
- display: block;
548
- max-width: 100%;
549
- font-size: 11px;
550
- font-weight: 600;
551
- line-height: 1.35;
552
- color: #79c0ff;
553
- font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
554
- white-space: nowrap;
555
- word-break: normal;
556
- overflow-wrap: normal;
557
- overflow-x: auto;
558
- overflow-y: hidden;
559
- scrollbar-width: thin;
560
- scrollbar-color: rgba(110, 118, 129, 0.55) transparent;
561
- padding-bottom: 2px;
562
- }
563
- .usage-model-name::-webkit-scrollbar {
564
- height: 4px;
565
- }
566
- .usage-model-name::-webkit-scrollbar-thumb {
567
- background: rgba(110, 118, 129, 0.55);
568
- border-radius: 999px;
569
- }
570
- .usage-model-name::-webkit-scrollbar-track {
571
- background: transparent;
572
- }
573
- .usage-model-meta {
574
- display: flex;
575
- flex-wrap: wrap;
576
- justify-content: flex-start;
577
- gap: 6px;
578
- }
579
- .usage-meta-pill {
580
- display: inline-flex;
581
- align-items: center;
582
- padding: 2px 8px;
583
- border-radius: 999px;
584
- background: rgba(110, 118, 129, 0.12);
585
- border: 1px solid rgba(110, 118, 129, 0.2);
586
- color: #c9d1d9;
587
- font-size: 10px;
588
- font-weight: 600;
589
- }
590
- .usage-meta-pill-premium {
591
- color: #d29922;
592
- border-color: rgba(210, 153, 34, 0.25);
593
- background: rgba(210, 153, 34, 0.12);
594
- }
595
- .usage-meta-pill-cache {
596
- color: #3fb950;
597
- border-color: rgba(63, 185, 80, 0.25);
598
- background: rgba(63, 185, 80, 0.12);
599
- }
600
- .usage-metric-grid {
601
- display: grid;
602
- grid-template-columns: repeat(2, minmax(0, 1fr));
603
- gap: 8px;
604
- }
605
- .usage-metric-grid-compact {
606
- grid-template-columns: repeat(3, minmax(0, 1fr));
607
- }
608
- .usage-metric-card {
609
- display: flex;
610
- flex-direction: column;
611
- gap: 4px;
612
- min-width: 0;
613
- padding: 9px 10px;
614
- border-radius: 8px;
615
- border: 1px solid rgba(48, 54, 61, 0.8);
616
- background: rgba(13, 17, 23, 0.5);
617
- }
618
- .usage-metric-card-summary {
619
- background: rgba(13, 17, 23, 0.42);
620
- border-color: rgba(88, 166, 255, 0.14);
621
- }
622
- .usage-metric-label {
623
- font-size: 10px;
624
- font-weight: 700;
625
- color: #8b949e;
626
- text-transform: uppercase;
627
- letter-spacing: 0.5px;
628
- }
629
- .usage-metric-value {
630
- font-size: 14px;
631
- line-height: 1.2;
632
- font-weight: 700;
633
- color: #e6edf3;
634
- overflow-wrap: anywhere;
635
- }
636
- .usage-metric-value-added {
637
- color: #3fb950;
638
- }
639
- .usage-metric-value-removed {
640
- color: #f85149;
641
- }
642
-
643
- /* Tool Calling Summary */
644
- .tool-summary-list {
645
- display: flex;
646
- flex-direction: column;
647
- gap: 4px;
648
- }
649
- .tool-summary-item {
650
- position: relative;
651
- display: flex;
652
- justify-content: space-between;
653
- align-items: center;
654
- padding: 3px 6px;
655
- font-size: 12px;
656
- border-radius: 3px;
657
- overflow: hidden;
658
- }
659
- .tool-summary-bar {
660
- position: absolute;
661
- left: 0;
662
- top: 0;
663
- bottom: 0;
664
- background: rgba(158, 106, 3, 0.15);
665
- border-radius: 3px;
666
- transition: width 0.3s ease;
667
- }
668
- .tool-summary-name {
669
- position: relative;
670
- color: #c9d1d9;
671
- overflow: hidden;
672
- text-overflow: ellipsis;
673
- white-space: nowrap;
674
- min-width: 0;
675
- flex: 1;
676
- }
677
- .tool-summary-count {
678
- position: relative;
679
- color: #d29922;
680
- font-weight: 600;
681
- margin-left: 8px;
682
- flex-shrink: 0;
683
- }
684
-
685
- /* Content */
686
- .content {
687
- flex: 1;
688
- display: flex;
689
- flex-direction: column;
690
- overflow: hidden;
691
- position: relative;
692
- }
693
-
694
- .unified-filter-bar {
695
- background: #0d1117;
696
- border-bottom: 1px solid #30363d;
697
- flex-shrink: 0;
698
- }
699
- .filter-bar-row {
700
- display: flex;
701
- align-items: center;
702
- gap: 8px;
703
- padding: 8px 12px;
704
- flex-wrap: wrap;
705
- }
706
- .filter-bar-search {
707
- display: flex;
708
- align-items: center;
709
- gap: 4px;
710
- flex: 1;
711
- min-width: 160px;
712
- }
713
- .filter-bar-divider {
714
- width: 1px;
715
- height: 20px;
716
- background: #30363d;
717
- flex-shrink: 0;
718
- }
719
- /* Event type dropdown wrapper */
720
- .filter-type-wrapper {
721
- position: relative;
722
- }
723
- .filter-type-toggle {
724
- padding: 4px 10px;
725
- background: #161b22;
726
- border: 1px solid #30363d;
727
- border-radius: 6px;
728
- color: #c9d1d9;
729
- font-size: 13px;
730
- cursor: pointer;
731
- white-space: nowrap;
732
- transition: all 0.2s;
733
- }
734
- .filter-type-toggle:hover {
735
- border-color: #58a6ff;
736
- background: #0d1117;
737
- }
738
- .filter-type-toggle.active {
739
- border-color: #58a6ff;
740
- color: #58a6ff;
741
- background: rgba(88, 166, 255, 0.1);
742
- }
743
- .filter-type-menu {
744
- position: absolute;
745
- top: calc(100% + 4px);
746
- left: 0;
747
- background: #161b22;
748
- border: 1px solid #30363d;
749
- border-radius: 6px;
750
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
751
- min-width: 250px;
752
- z-index: 1000;
753
- }
754
- .filter-type-menu-header {
755
- padding: 8px 12px;
756
- border-bottom: 1px solid #30363d;
757
- font-size: 12px;
758
- font-weight: 600;
759
- color: #c9d1d9;
760
- }
761
- .filter-type-menu-options {
762
- max-height: 300px;
763
- overflow-y: auto;
764
- padding: 4px 0;
765
- }
766
- .filter-type-menu-item {
767
- display: flex;
768
- align-items: center;
769
- justify-content: space-between;
770
- padding: 6px 12px;
771
- cursor: pointer;
772
- transition: background 0.15s;
773
- font-size: 13px;
774
- color: #c9d1d9;
775
- }
776
- .filter-type-menu-item:hover {
777
- background: rgba(88, 166, 255, 0.1);
778
- }
779
- .filter-type-menu-item.active {
780
- background: rgba(88, 166, 255, 0.2);
781
- color: #58a6ff;
782
- }
783
- .filter-type-menu-label {
784
- flex: 1;
785
- overflow: hidden;
786
- text-overflow: ellipsis;
787
- white-space: nowrap;
788
- }
789
- .filter-type-menu-count {
790
- color: #7d8590;
791
- font-size: 12px;
792
- margin-left: 8px;
793
- flex-shrink: 0;
794
- }
795
- /* Active filter chips bar */
796
- .active-filters-bar {
797
- display: flex;
798
- align-items: center;
799
- gap: 6px;
800
- padding: 4px 12px 8px;
801
- flex-wrap: wrap;
802
- }
803
- .filter-chip {
804
- display: inline-flex;
805
- align-items: center;
806
- gap: 4px;
807
- padding: 2px 8px;
808
- background: rgba(88, 166, 255, 0.15);
809
- border: 1px solid rgba(88, 166, 255, 0.3);
810
- border-radius: 12px;
811
- font-size: 12px;
812
- color: #58a6ff;
813
- white-space: nowrap;
814
- }
815
- .filter-chip-remove {
816
- background: none;
817
- border: none;
818
- color: #58a6ff;
819
- cursor: pointer;
820
- font-size: 14px;
821
- padding: 0 2px;
822
- line-height: 1;
823
- opacity: 0.7;
824
- transition: opacity 0.15s;
825
- }
826
- .filter-chip-remove:hover {
827
- opacity: 1;
828
- }
829
- .clear-all-filters-btn {
830
- background: none;
831
- border: none;
832
- color: #f85149;
833
- cursor: pointer;
834
- font-size: 12px;
835
- padding: 2px 6px;
836
- border-radius: 3px;
837
- transition: background 0.2s;
838
- }
839
- .clear-all-filters-btn:hover {
840
- background: rgba(248, 81, 73, 0.1);
841
- }
842
-
843
- .subagent-selector {
844
- display: flex;
845
- align-items: center;
846
- gap: 8px;
847
- position: relative;
848
- }
849
-
850
- .subagent-dropdown-trigger {
851
- display: flex;
852
- align-items: center;
853
- gap: 6px;
854
- padding: 4px 10px;
855
- background: #161b22;
856
- border: 1px solid #30363d;
857
- border-radius: 6px;
858
- color: #c9d1d9;
859
- font-size: 13px;
860
- cursor: pointer;
861
- max-width: 280px;
862
- }
863
- .subagent-dropdown-trigger:hover { border-color: #58a6ff; }
864
- .subagent-trigger-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
865
- .subagent-trigger-arrow { font-size: 10px; opacity: 0.6; }
866
-
867
- .subagent-dropdown-panel {
868
- position: absolute;
869
- top: calc(100% + 4px);
870
- right: 0;
871
- z-index: 100;
872
- min-width: 320px;
873
- max-width: 420px;
874
- background: #161b22;
875
- border: 1px solid #30363d;
876
- border-radius: 8px;
877
- box-shadow: 0 8px 24px rgba(0,0,0,0.4);
878
- overflow: hidden;
879
- }
880
-
881
- .subagent-search-input {
882
- width: 100%;
883
- padding: 8px 12px;
884
- background: #0d1117;
885
- border: none;
886
- border-bottom: 1px solid #30363d;
887
- color: #c9d1d9;
888
- font-size: 13px;
889
- outline: none;
890
- box-sizing: border-box;
891
- }
892
- .subagent-search-input::placeholder { color: #484f58; }
893
-
894
- .subagent-dropdown-list {
895
- max-height: 320px;
896
- overflow-y: auto;
897
- }
898
-
899
- .subagent-dropdown-item {
900
- display: flex;
901
- align-items: flex-start;
902
- gap: 8px;
903
- padding: 8px 12px;
904
- cursor: pointer;
905
- border-bottom: 1px solid #21262d;
906
- }
907
- .subagent-dropdown-item:last-child { border-bottom: none; }
908
- .subagent-dropdown-item:hover { background: #1c2129; }
909
- .subagent-dropdown-item.active { background: rgba(88, 166, 255, 0.1); }
910
-
911
- .subagent-item-color {
912
- width: 4px;
913
- min-height: 20px;
914
- border-radius: 2px;
915
- flex-shrink: 0;
916
- margin-top: 2px;
917
- }
918
-
919
- .subagent-item-body { flex: 1; min-width: 0; }
920
-
921
- .subagent-item-name {
922
- font-size: 13px;
923
- color: #c9d1d9;
924
- font-weight: 500;
925
- white-space: nowrap;
926
- overflow: hidden;
927
- text-overflow: ellipsis;
928
- }
929
-
930
- .subagent-item-meta {
931
- display: flex;
932
- gap: 6px;
933
- margin-top: 2px;
934
- flex-wrap: wrap;
935
- }
936
-
937
- .subagent-meta-tag {
938
- font-size: 11px;
939
- color: #8b949e;
940
- background: #21262d;
941
- padding: 1px 6px;
942
- border-radius: 4px;
943
- }
944
- .subagent-meta-tag.dim { opacity: 0.7; }
945
-
946
- .subagent-item-desc {
947
- font-size: 11px;
948
- color: #6e7681;
949
- margin-top: 3px;
950
- line-height: 1.4;
951
- display: -webkit-box;
952
- -webkit-line-clamp: 2;
953
- -webkit-box-orient: vertical;
954
- overflow: hidden;
955
- }
956
-
957
- .subagent-dropdown-empty {
958
- padding: 12px;
959
- text-align: center;
960
- color: #484f58;
961
- font-size: 13px;
962
- }
963
-
964
- .subagent-usage-badge {
965
- font-size: 11px;
966
- color: #7d8590;
967
- white-space: nowrap;
968
- }
969
-
970
- .scroll-float-btns {
971
- position: fixed;
972
- bottom: 24px;
973
- right: 24px;
974
- display: flex;
975
- flex-direction: column;
976
- gap: 8px;
977
- z-index: 9999;
978
- }
979
- .scroll-edge-btn {
980
- background: #21262d;
981
- color: #c9d1d9;
982
- border: 1px solid #30363d;
983
- border-radius: 50%;
984
- width: 32px;
985
- height: 32px;
986
- font-size: 13px;
987
- cursor: pointer;
988
- display: flex;
989
- align-items: center;
990
- justify-content: center;
991
- box-shadow: 0 2px 8px rgba(0,0,0,0.4);
992
- transition: background 0.15s, transform 0.1s, opacity 0.15s;
993
- padding: 0;
994
- opacity: 0.3;
995
- }
996
- .scroll-edge-btn:hover {
997
- background: #388bfd;
998
- border-color: #388bfd;
999
- color: #fff;
1000
- transform: scale(1.1);
1001
- opacity: 1;
1002
- }
1003
- .search-input {
1004
- flex: 1;
1005
- min-width: 120px;
1006
- padding: 6px 12px;
1007
- background: #161b22;
1008
- border: 1px solid #30363d;
1009
- border-radius: 6px;
1010
- color: #c9d1d9;
1011
- font-size: 13px;
1012
- outline: none;
1013
- transition: border-color 0.2s;
1014
- }
1015
-
1016
- .search-input:focus {
1017
- border-color: #58a6ff;
1018
- background: #0d1117;
1019
- }
1020
-
1021
- .search-input::placeholder {
1022
- color: #6e7681;
1023
- }
1024
-
1025
- /* Search highlight */
1026
- .search-highlight {
1027
- background: #ffd33d;
1028
- color: #1f2328;
1029
- padding: 1px 2px;
1030
- border-radius: 2px;
1031
- font-weight: 500;
1032
- }
1033
-
1034
- /* Search result counter */
1035
- .search-result-count {
1036
- font-size: 12px;
1037
- color: #c9d1d9;
1038
- padding: 4px 8px;
1039
- background: #21262d;
1040
- border-radius: 4px;
1041
- white-space: nowrap;
1042
- }
1043
-
1044
- /* Turn navigation in toolbar */
1045
- .turn-dropdown {
1046
- padding: 6px 12px;
1047
- background: #161b22;
1048
- border: 1px solid #30363d;
1049
- border-radius: 6px;
1050
- color: #c9d1d9;
1051
- font-size: 13px;
1052
- cursor: pointer;
1053
- min-width: 260px;
1054
- transition: border-color 0.2s;
1055
- }
1056
-
1057
- .turn-dropdown:hover {
1058
- border-color: #58a6ff;
1059
- }
1060
-
1061
- .turn-dropdown:focus {
1062
- outline: none;
1063
- border-color: #58a6ff;
1064
- }
1065
-
1066
- .turn-dropdown optgroup {
1067
- font-weight: 600;
1068
- font-style: normal;
1069
- color: #e6edf3;
1070
- background: #21262d;
1071
- padding: 4px 0;
1072
- }
1073
-
1074
- .turn-dropdown option {
1075
- font-weight: 400;
1076
- color: #c9d1d9;
1077
- background: #161b22;
1078
- padding: 4px 8px;
1079
- }
1080
-
1081
- /* Virtual Scroller */
1082
- .vue-recycle-scroller {
1083
- flex: 1;
1084
- overflow-x: hidden !important;
1085
- padding-bottom: env(safe-area-inset-bottom, 0px);
1086
- }
1087
- .vue-recycle-scroller__item-wrapper {
1088
- overflow: visible !important;
1089
- }
1090
-
1091
- /* Events */
1092
- .event {
1093
- background: #161b22;
1094
- border-left: 3px solid #30363d;
1095
- padding: 6px 12px 6px 12px;
1096
- margin: 0;
1097
- border-radius: 0;
1098
- font-size: 13px;
1099
- }
1100
- .event:nth-child(even) {
1101
- background: #1c2128;
1102
- }
1103
- /* Separator inside event (properly measured by virtual scroller) */
1104
- .event-separator {
1105
- height: 1px;
1106
- background: #0d1117;
1107
- margin: 12px 0 0 0;
1108
- }
1109
- .event.turn-boundary {
1110
- background: #1c2128;
1111
- border-left: 4px solid #8250df;
1112
- padding: 8px 12px;
1113
- box-shadow: 0 0 8px rgba(130, 80, 223, 0.15);
1114
- }
1115
- .event-header {
1116
- display: flex;
1117
- align-items: center;
1118
- gap: 8px;
1119
- margin-bottom: 6px;
1120
- }
1121
- .event-badge {
1122
- padding: 2px 8px;
1123
- border-radius: 3px;
1124
- font-size: 12px;
1125
- font-weight: 600;
1126
- white-space: nowrap;
1127
- min-width: 90px;
1128
- text-align: center;
1129
- display: inline-block;
1130
- line-height: 1.4;
1131
- }
1132
- .badge-user { background: #1f6feb; color: #fff; }
1133
- .badge-assistant { background: #238636; color: #fff; }
1134
- .badge-reasoning { background: #a371f7; color: #fff; }
1135
- .badge-turn { background: #8250df; color: #fff; }
1136
- .badge-tool { background: #9e6a03; color: #fff; }
1137
- .badge-hook { background: #484f58; color: #c9d1d9; }
1138
- .badge-subagent { background: #8957e5; color: #fff; }
1139
- .badge-skill { background: #bf3989; color: #fff; }
1140
- .badge-session { background: #6e7681; color: #fff; }
1141
- .badge-system { background: #444c56; color: #adbac7; font-style: italic; }
1142
- .badge-truncation { background: #e5534b; color: #fff; }
1143
- .badge-compaction { background: #c2442d; color: #fff; }
1144
- .badge-error { background: #da3633; color: #fff; }
1145
- .badge-warning { background: #d29922; color: #000; }
1146
- .badge-info { background: #58a6ff; color: #fff; }
1147
-
1148
- .event-content {
1149
- color: #c9d1d9;
1150
- text-align: left;
1151
- font-size: 13px;
1152
- }
1153
- /* Model change styling */
1154
- .model-change-content {
1155
- margin-top: 6px;
1156
- }
1157
-
1158
- .model-change-text {
1159
- font-size: 13px;
1160
- color: #e6edf3;
1161
- }
1162
-
1163
- .model-name {
1164
- color: #58a6ff;
1165
- font-weight: 600;
1166
- font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
1167
- font-size: 13px;
1168
- }
1169
-
1170
- .model-arrow {
1171
- color: #7d8590;
1172
- margin: 0 8px;
1173
- }
1174
-
1175
- /* Markdown styling */
1176
- .event-content code {
1177
- background: #161b22;
1178
- padding: 2px 6px;
1179
- border-radius: 3px;
1180
- font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
1181
- font-size: 12px;
1182
- color: #f0883e;
1183
- }
1184
- .event-content pre {
1185
- background: #161b22;
1186
- padding: 12px;
1187
- border-radius: 6px;
1188
- overflow-x: auto;
1189
- margin: 8px 0;
1190
- border: 1px solid #30363d;
1191
- font-size: 13px;
1192
- }
1193
- .event-content pre code {
1194
- background: none;
1195
- padding: 0;
1196
- color: #e6edf3;
1197
- }
1198
- .event-content a {
1199
- color: #58a6ff;
1200
- text-decoration: none;
1201
- }
1202
- .event-content a:hover {
1203
- text-decoration: underline;
1204
- }
1205
- .event-content ul, .event-content ol {
1206
- padding-left: 24px;
1207
- margin: 8px 0;
1208
- }
1209
- .event-content li {
1210
- margin: 4px 0;
1211
- }
1212
- .event-content blockquote {
1213
- border-left: 3px solid #30363d;
1214
- padding-left: 12px;
1215
- margin: 8px 0;
1216
- color: #c9d1d9;
1217
- }
1218
- .event-content strong {
1219
- color: #e6edf3;
1220
- font-weight: 600;
1221
- }
1222
- .event-content em {
1223
- color: #e6edf3;
1224
- font-style: italic;
1225
- }
1226
- .event-content h1, .event-content h2, .event-content h3,
1227
- .event-content h4, .event-content h5, .event-content h6 {
1228
- color: #e6edf3;
1229
- margin: 12px 0 6px 0;
1230
- font-weight: 600;
1231
- }
1232
- .event-content h1 { font-size: 16px; }
1233
- .event-content h2 { font-size: 15px; }
1234
- .event-content h3 { font-size: 14px; }
1235
- .event-content h4 { font-size: 13px; }
1236
- .event-content p {
1237
- margin: 6px 0;
1238
- }
1239
-
1240
- /* Reasoning text: muted color — placed after .event-content markdown rules
1241
- so the higher-specificity selectors (0,2,1) override .event-content strong etc. (0,1,1) */
1242
- .reasoning-text-content.event-content,
1243
- .reasoning-text-content.event-content strong,
1244
- .reasoning-text-content.event-content em,
1245
- .reasoning-text-content.event-content h1,
1246
- .reasoning-text-content.event-content h2,
1247
- .reasoning-text-content.event-content h3,
1248
- .reasoning-text-content.event-content h4,
1249
- .reasoning-text-content.event-content h5,
1250
- .reasoning-text-content.event-content h6,
1251
- .reasoning-text-content.event-content code,
1252
- .reasoning-text-content.event-content a {
1253
- color: #7d8590;
1254
- }
1255
-
1256
- /* Markdown table styling */
1257
- .event-content table {
1258
- border-collapse: collapse;
1259
- width: 100%;
1260
- margin: 12px 0;
1261
- background: #161b22;
1262
- border: 1px solid #30363d;
1263
- border-radius: 6px;
1264
- overflow: hidden;
1265
- }
1266
- .event-content th {
1267
- background: #21262d;
1268
- padding: 8px 12px;
1269
- text-align: left;
1270
- font-weight: 600;
1271
- color: #e6edf3;
1272
- border-bottom: 1px solid #30363d;
1273
- }
1274
- .event-content td {
1275
- padding: 8px 12px;
1276
- border-bottom: 1px solid #30363d;
1277
- }
1278
- .event-content tr:last-child td {
1279
- border-bottom: none;
1280
- }
1281
- .event-content tbody tr:hover {
1282
- background: rgba(110, 118, 129, 0.1);
1283
- }
1284
-
1285
- .event-timestamp {
1286
- font-size: 12px;
1287
- color: #c9d1d9;
1288
- }
1289
-
1290
- /* Tool calls */
1291
- .tool-list {
1292
- margin-top: 6px;
1293
- padding-left: 0;
1294
- }
1295
- .tool-item {
1296
- padding: 2px 0;
1297
- }
1298
- .tool-header-line {
1299
- color: #c9d1d9;
1300
- font-size: 13px;
1301
- font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
1302
- cursor: pointer;
1303
- user-select: none;
1304
- line-height: 1.4;
1305
- display: flex;
1306
- align-items: baseline;
1307
- gap: 0;
1308
- padding: 2px 0;
1309
- flex-wrap: wrap;
1310
- }
1311
- .tool-header-line:hover {
1312
- color: #c9d1d9;
1313
- }
1314
- .tool-connector {
1315
- color: #6e7681;
1316
- margin-right: 0;
1317
- flex-shrink: 0;
1318
- line-height: 1;
1319
- }
1320
- .tool-expand-icon {
1321
- color: #6e7681;
1322
- margin: 0 4px;
1323
- display: inline-flex;
1324
- align-items: center;
1325
- justify-content: center;
1326
- width: 12px;
1327
- height: 12px;
1328
- flex-shrink: 0;
1329
- line-height: 1;
1330
- transform: translateY(-1px);
1331
- }
1332
- .tool-name {
1333
- color: #f0883e;
1334
- flex-shrink: 0;
1335
- margin-right: 4px;
1336
- }
1337
- .tool-status-success {
1338
- color: #238636;
1339
- }
1340
- .tool-status-error {
1341
- color: #da3633;
1342
- }
1343
- .tool-status-running {
1344
- color: #d29922;
1345
- }
1346
- .tool-detail {
1347
- margin-top: 4px;
1348
- padding: 8px;
1349
- background: rgba(110, 118, 129, 0.05);
1350
- border-radius: 3px;
1351
- border: 1px solid #30363d;
1352
- font-size: 12px;
1353
- }
1354
- .tool-detail-section {
1355
- margin-bottom: 6px;
1356
- }
1357
- .tool-detail-section:last-child {
1358
- margin-bottom: 0;
1359
- }
1360
- .tool-detail-title {
1361
- color: #7d8590;
1362
- margin-bottom: 2px;
1363
- font-weight: 600;
1364
- font-size: 12px;
1365
- }
1366
- .tool-detail-content pre {
1367
- margin: 0;
1368
- padding: 4px 6px;
1369
- background: #0d1117;
1370
- border-radius: 3px;
1371
- overflow-x: auto;
1372
- max-height: 200px;
1373
- font-size: 12px;
1374
- line-height: 1.3;
1375
- color: #e6edf3;
1376
- }
1377
- .tool-timing-line {
1378
- display: flex;
1379
- flex-wrap: wrap;
1380
- gap: 4px 16px;
1381
- }
1382
- .tool-timing-label {
1383
- color: #8b949e;
1384
- font-weight: 500;
1385
- margin-right: 3px;
1386
- }
1387
-
1388
- /* Hook event styles */
1389
- .hook-content { font-size: 13px; }
1390
- .hook-summary { color: #8b949e; }
1391
- .hook-section { margin-top: 4px; }
1392
- .hook-section-header {
1393
- cursor: pointer;
1394
- display: inline-flex;
1395
- align-items: center;
1396
- gap: 4px;
1397
- padding: 2px 0;
1398
- user-select: none;
1399
- }
1400
- .hook-section-header:hover { color: #c9d1d9; }
1401
- .hook-section-body {
1402
- margin-top: 2px;
1403
- padding: 6px 10px;
1404
- background: #161b22;
1405
- border: 1px solid #21262d;
1406
- border-radius: 4px;
1407
- overflow-x: auto;
1408
- }
1409
- .hook-section-body pre {
1410
- margin: 0;
1411
- font-size: 12px;
1412
- color: #c9d1d9;
1413
- white-space: pre-wrap;
1414
- word-break: break-word;
1415
- }
1416
-
1417
- /* Turn divider - Design 3: Slack Style (居中对称) */
1418
- .turn-divider {
1419
- display: flex;
1420
- align-items: center;
1421
- gap: 12px;
1422
- padding: 12px 12px;
1423
- margin: 0;
1424
- background: transparent;
1425
- }
1426
- .turn-divider::before,
1427
- .turn-divider::after {
1428
- content: '';
1429
- flex: 1;
1430
- height: 1px;
1431
- background: #30363d;
1432
- }
1433
- .turn-divider-text {
1434
- color: #7d8590;
1435
- font-size: 12px;
1436
- font-weight: 600;
1437
- text-transform: uppercase;
1438
- letter-spacing: 0.8px;
1439
- white-space: nowrap;
1440
- padding: 2px 8px;
1441
- background: #0d1117;
1442
- border-radius: 10px;
1443
- border: 1px solid #21262d;
1444
- margin: 0;
1445
- display: flex;
1446
- align-items: center;
1447
- gap: 6px;
1448
- }
1449
- .turn-time { color: #58a6ff; font-weight: 500; text-transform: none; letter-spacing: 0; }
1450
- .turn-duration { color: #3fb950; font-weight: 500; text-transform: none; letter-spacing: 0; }
1451
- .turn-duration::before { content: '⏱ '; }
1452
- .turn-divider-line-left,
1453
- .turn-divider-line-right {
1454
- display: none;
1455
- }
1456
-
1457
- /* Divider separator (for turn and subagent dividers) - HIDDEN */
1458
- .divider-separator {
1459
- display: none;
1460
- }
1461
-
1462
- /* Subagent divider - Slack Style (unified color) */
1463
- .subagent-divider {
1464
- display: flex;
1465
- align-items: center;
1466
- gap: 12px;
1467
- padding: 12px 12px;
1468
- margin: 0;
1469
- background: transparent;
1470
- }
1471
- .subagent-divider::before,
1472
- .subagent-divider::after {
1473
- content: '';
1474
- flex: 1;
1475
- height: 1px;
1476
- background: var(--sa-color, #58a6ff);
1477
- }
1478
- .subagent-divider-text {
1479
- font-size: 12px;
1480
- font-weight: 600;
1481
- white-space: nowrap;
1482
- letter-spacing: 0.8px;
1483
- padding: 2px 8px;
1484
- border-radius: 10px;
1485
- border: 1px solid #58a6ff;
1486
- margin: 0;
1487
- text-transform: uppercase;
1488
- color: #58a6ff;
1489
- background: rgba(88, 166, 255, 0.1);
1490
- }
1491
- .subagent-divider-model {
1492
- font-weight: 400;
1493
- opacity: 0.8;
1494
- font-size: 11px;
1495
- }
1496
- .subagent-divider-line-left,
1497
- .subagent-divider-line-right {
1498
- display: none;
1499
- }
1500
- .event.event-in-subagent { border-left-color: var(--subagent-border-color, #58a6ff); }
1501
- .subagent-owner-tag { font-size: 11px; padding: 1px 6px; border-radius: 8px; border: 1px solid; border-color: var(--subagent-color, #58a6ff); color: var(--subagent-color, #58a6ff); white-space: nowrap; opacity: 0.85; cursor: pointer; transition: opacity 0.15s; }
1502
- .subagent-owner-tag:hover { opacity: 1; background: var(--subagent-hover-bg, rgba(88, 166, 255, 0.15)); }
1503
- .subagent-name-badge { font-size: 11px; padding: 2px 8px; border-radius: 4px; border: 1px solid; white-space: nowrap; font-weight: 600; max-width: 280px; overflow: hidden; text-overflow: ellipsis; }
1504
-
1505
- /* Bottom spacer for last event visibility */
1506
- .scroller-bottom-spacer {
1507
- height: max(env(safe-area-inset-bottom, 0px), 16px);
1508
- flex-shrink: 0;
1509
- }
1510
-
1511
- /* Sidebar backdrop — hidden by default, shown via mobile media query */
1512
- .sidebar-backdrop {
1513
- display: none;
1514
- }
1515
-
1516
- /* ── Tablet responsive ─────────────────────────────────── */
1517
- @media (max-width: 768px) {
1518
- .filter-bar-search {
1519
- flex: 1 1 100%;
1520
- order: 1;
1521
- }
1522
- .filter-bar-row {
1523
- flex-wrap: wrap;
1524
- }
1525
- .filter-bar-divider {
1526
- display: none;
1527
- }
1528
- .subagent-usage-badge {
1529
- display: none;
1530
- }
1531
- }
1532
-
1533
- /* ── Mobile responsive ────────────────────────────────────── */
1534
- @media (max-width: 640px) {
1535
- /* Header: smaller, wrap if needed */
1536
- .header {
1537
- padding: 8px 12px;
1538
- flex-wrap: wrap;
1539
- gap: 8px;
1540
- }
1541
- .header-title {
1542
- font-size: 13px;
1543
- overflow: hidden;
1544
- text-overflow: ellipsis;
1545
- white-space: nowrap;
1546
- max-width: calc(100vw - 80px);
1547
- }
1548
- .time-analyze-btn,
1549
- .share-btn {
1550
- padding: 5px 8px;
1551
- font-size: 12px;
1552
- }
1553
-
1554
- /* Sidebar backdrop (mobile only) */
1555
- .sidebar-backdrop {
1556
- display: block;
1557
- position: fixed;
1558
- inset: 0;
1559
- background: rgba(0,0,0,0.5);
1560
- z-index: 999;
1561
- }
1562
-
1563
- /* Sidebar: hidden by default on mobile, overlay when open */
1564
- .sidebar {
1565
- position: fixed;
1566
- top: 0;
1567
- left: 0;
1568
- height: 100%;
1569
- width: 280px !important;
1570
- z-index: 1000;
1571
- box-shadow: 4px 0 16px rgba(0,0,0,0.6);
1572
- transform: translateX(-100%);
1573
- transition: transform 0.3s ease;
1574
- }
1575
- .sidebar:not(.collapsed) {
1576
- transform: translateX(0);
1577
- }
1578
- .sidebar.collapsed {
1579
- transform: translateX(-100%);
1580
- width: 280px !important;
1581
- padding: 16px !important;
1582
- border-right: 1px solid #30363d !important;
1583
- overflow-y: auto !important;
1584
- }
1585
-
1586
- /* Content: full width */
1587
- .content {
1588
- width: 100%;
1589
- }
1590
-
1591
- /* Toolbar: unified responsive layout */
1592
- .filter-bar-row {
1593
- flex-wrap: wrap;
1594
- gap: 4px;
1595
- padding: 6px 8px;
1596
- }
1597
- .filter-bar-search {
1598
- flex: 1 1 100%;
1599
- order: 1;
1600
- }
1601
- .sidebar-toggle {
1602
- order: 0;
1603
- }
1604
- .filter-bar-divider {
1605
- display: none;
1606
- }
1607
- .turn-dropdown {
1608
- order: 2;
1609
- flex: 1;
1610
- min-width: 0;
1611
- max-width: 140px;
1612
- font-size: 12px;
1613
- }
1614
- .subagent-selector {
1615
- order: 3;
1616
- }
1617
- .filter-type-wrapper {
1618
- order: 4;
1619
- }
1620
- .search-input {
1621
- flex: 1;
1622
- min-width: 0;
1623
- font-size: 12px;
1624
- }
1625
- .subagent-dropdown-trigger {
1626
- max-width: 160px;
1627
- font-size: 12px;
1628
- }
1629
- .subagent-dropdown-panel {
1630
- min-width: 260px;
1631
- max-width: calc(100vw - 32px);
1632
- right: 0;
1633
- left: auto;
1634
- }
1635
- .subagent-usage-badge {
1636
- display: none;
1637
- }
1638
-
1639
- .usage-summary {
1640
- padding: 12px;
1641
- }
1642
- .usage-summary-total {
1643
- font-size: 20px;
1644
- }
1645
- .usage-summary-metrics,
1646
- .usage-metric-grid-compact {
1647
- grid-template-columns: repeat(2, minmax(0, 1fr));
1648
- }
1649
- .usage-model-header {
1650
- gap: 6px;
1651
- }
1652
- .usage-model-meta {
1653
- justify-content: flex-start;
1654
- }
1655
-
1656
- /* Float buttons: slightly smaller, keep fixed */
1657
- .scroll-float-btns {
1658
- bottom: 16px;
1659
- right: 12px;
1660
- }
1661
-
1662
- /* Prevent content from stretching wider than viewport */
1663
- .event-card {
1664
- max-width: 100%;
1665
- overflow-x: hidden;
1666
- }
1667
- .event-content pre {
1668
- max-width: calc(100vw - 32px);
1669
- }
1670
- .tool-command {
1671
- word-break: break-all;
1672
- }
1673
- /* Tool command text wraps on mobile */
1674
- .tool-header-line {
1675
- overflow-wrap: anywhere;
1676
- word-break: break-all;
1677
- }
1678
- /* Extra bottom padding for mobile browser nav bar */
1679
- .vue-recycle-scroller {
1680
- padding-bottom: max(env(safe-area-inset-bottom, 0px), 80px);
1681
- }
1682
- .scroller-bottom-spacer {
1683
- height: max(env(safe-area-inset-bottom, 0px), 100px);
1684
- }
1685
- .scroll-edge-btn {
1686
- width: 28px;
1687
- height: 28px;
1688
- font-size: 12px;
1689
- }
1690
- }
1691
- </style>
1692
- </head>
1693
- <body>
1694
- <div id="app"></div>
1695
-
1696
- <script>
1697
- window.__PAGE_DATA = {
1698
- sessionId: "<%= sessionId %>",
1699
- events: <%- JSON.stringify(events) %>,
1700
- metadata: <%- JSON.stringify(metadata) %>
1701
- };
1702
- </script>
1703
- <script src="/public/js/session-detail.min.js"></script>
1704
- </body>
1705
- </html>