@code-yeongyu/senpi 2026.5.20-2 → 2026.5.20-3

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,1108 @@
1
+ :root {
2
+ {{THEME_VARS}}
3
+ --body-bg: {{BODY_BG}};
4
+ --container-bg: {{CONTAINER_BG}};
5
+ --info-bg: {{INFO_BG}};
6
+ }
7
+
8
+ * { margin: 0; padding: 0; box-sizing: border-box; }
9
+
10
+ :root {
11
+ --line-height: 18px; /* 12px font * 1.5 */
12
+ --sidebar-width: 400px;
13
+ --sidebar-min-width: 240px;
14
+ --sidebar-max-width: 840px;
15
+ --sidebar-resizer-width: 6px;
16
+ }
17
+
18
+ body {
19
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace;
20
+ font-size: 12px;
21
+ line-height: var(--line-height);
22
+ color: var(--text);
23
+ background: var(--body-bg);
24
+ }
25
+
26
+ body.sidebar-resizing {
27
+ cursor: col-resize;
28
+ user-select: none;
29
+ }
30
+
31
+ #app {
32
+ display: flex;
33
+ min-height: 100vh;
34
+ }
35
+
36
+ /* Sidebar */
37
+ #sidebar {
38
+ width: var(--sidebar-width);
39
+ min-width: var(--sidebar-width);
40
+ max-width: var(--sidebar-width);
41
+ background: var(--container-bg);
42
+ flex-shrink: 0;
43
+ display: flex;
44
+ flex-direction: column;
45
+ position: sticky;
46
+ top: 0;
47
+ height: 100vh;
48
+ border-right: 1px solid var(--dim);
49
+ }
50
+
51
+ #sidebar-resizer {
52
+ width: var(--sidebar-resizer-width);
53
+ flex-shrink: 0;
54
+ position: sticky;
55
+ top: 0;
56
+ height: 100vh;
57
+ cursor: col-resize;
58
+ touch-action: none;
59
+ background: transparent;
60
+ border-right: 1px solid transparent;
61
+ }
62
+
63
+ #sidebar-resizer:hover,
64
+ body.sidebar-resizing #sidebar-resizer {
65
+ background: var(--selectedBg);
66
+ border-right-color: var(--dim);
67
+ }
68
+
69
+ .sidebar-header {
70
+ padding: 8px 12px;
71
+ flex-shrink: 0;
72
+ }
73
+
74
+ .sidebar-controls {
75
+ padding: 8px 8px 4px 8px;
76
+ }
77
+
78
+ .sidebar-search {
79
+ width: 100%;
80
+ box-sizing: border-box;
81
+ padding: 4px 8px;
82
+ font-size: 11px;
83
+ font-family: inherit;
84
+ background: var(--body-bg);
85
+ color: var(--text);
86
+ border: 1px solid var(--dim);
87
+ border-radius: 3px;
88
+ }
89
+
90
+ .sidebar-filters {
91
+ display: flex;
92
+ padding: 4px 8px 8px 8px;
93
+ gap: 4px;
94
+ align-items: center;
95
+ flex-wrap: wrap;
96
+ }
97
+
98
+ .sidebar-search:focus {
99
+ outline: none;
100
+ border-color: var(--accent);
101
+ }
102
+
103
+ .sidebar-search::placeholder {
104
+ color: var(--muted);
105
+ }
106
+
107
+ .filter-btn {
108
+ padding: 3px 8px;
109
+ font-size: 10px;
110
+ font-family: inherit;
111
+ background: transparent;
112
+ color: var(--muted);
113
+ border: 1px solid var(--dim);
114
+ border-radius: 3px;
115
+ cursor: pointer;
116
+ }
117
+
118
+ .filter-btn:hover {
119
+ color: var(--text);
120
+ border-color: var(--text);
121
+ }
122
+
123
+ .filter-btn.active {
124
+ background: var(--accent);
125
+ color: var(--body-bg);
126
+ border-color: var(--accent);
127
+ }
128
+
129
+ .sidebar-close {
130
+ display: none;
131
+ padding: 3px 8px;
132
+ font-size: 12px;
133
+ font-family: inherit;
134
+ background: transparent;
135
+ color: var(--muted);
136
+ border: 1px solid var(--dim);
137
+ border-radius: 3px;
138
+ cursor: pointer;
139
+ margin-left: auto;
140
+ }
141
+
142
+ .sidebar-close:hover {
143
+ color: var(--text);
144
+ border-color: var(--text);
145
+ }
146
+
147
+ .tree-container {
148
+ flex: 1;
149
+ overflow: auto;
150
+ padding: 4px 0;
151
+ }
152
+
153
+ .tree-node {
154
+ padding: 0 8px;
155
+ cursor: pointer;
156
+ display: flex;
157
+ align-items: baseline;
158
+ font-size: 11px;
159
+ line-height: 13px;
160
+ white-space: nowrap;
161
+ }
162
+
163
+ .tree-node:hover {
164
+ background: var(--selectedBg);
165
+ }
166
+
167
+ .tree-node.active {
168
+ background: var(--selectedBg);
169
+ }
170
+
171
+ .tree-node.active .tree-content {
172
+ font-weight: bold;
173
+ }
174
+
175
+ .tree-node.in-path {
176
+ background: color-mix(in srgb, var(--accent) 10%, transparent);
177
+ }
178
+
179
+ .tree-node:not(.in-path) {
180
+ opacity: 0.5;
181
+ }
182
+
183
+ .tree-node:not(.in-path):hover {
184
+ opacity: 1;
185
+ }
186
+
187
+ .tree-prefix {
188
+ color: var(--muted);
189
+ flex-shrink: 0;
190
+ font-family: monospace;
191
+ white-space: pre;
192
+ }
193
+
194
+ .tree-marker {
195
+ color: var(--accent);
196
+ flex-shrink: 0;
197
+ }
198
+
199
+ .tree-content {
200
+ color: var(--text);
201
+ }
202
+
203
+ .tree-role-user {
204
+ color: var(--accent);
205
+ }
206
+
207
+ .tree-role-skill {
208
+ color: var(--customMessageLabel);
209
+ }
210
+
211
+ .tree-role-assistant {
212
+ color: var(--success);
213
+ }
214
+
215
+ .tree-role-tool {
216
+ color: var(--muted);
217
+ }
218
+
219
+ .tree-muted {
220
+ color: var(--muted);
221
+ }
222
+
223
+ .tree-error {
224
+ color: var(--error);
225
+ }
226
+
227
+ .tree-compaction {
228
+ color: var(--borderAccent);
229
+ }
230
+
231
+ .tree-branch-summary {
232
+ color: var(--warning);
233
+ }
234
+
235
+ .tree-custom-message {
236
+ color: var(--customMessageLabel);
237
+ }
238
+
239
+ .tree-status {
240
+ padding: 4px 12px;
241
+ font-size: 10px;
242
+ color: var(--muted);
243
+ flex-shrink: 0;
244
+ }
245
+
246
+ /* Main content */
247
+ #content {
248
+ flex: 1;
249
+ min-width: 0;
250
+ overflow-y: auto;
251
+ padding: var(--line-height) calc(var(--line-height) * 2);
252
+ display: flex;
253
+ flex-direction: column;
254
+ align-items: center;
255
+ }
256
+
257
+ #content > * {
258
+ width: 100%;
259
+ max-width: 800px;
260
+ }
261
+
262
+ /* Help bar */
263
+ .help-bar {
264
+ font-size: 11px;
265
+ color: var(--warning);
266
+ margin-bottom: var(--line-height);
267
+ display: flex;
268
+ align-items: center;
269
+ justify-content: space-between;
270
+ flex-wrap: wrap;
271
+ gap: 12px;
272
+ }
273
+
274
+ .help-hint {
275
+ flex: 1 1 240px;
276
+ }
277
+
278
+ .help-actions {
279
+ display: flex;
280
+ align-items: center;
281
+ flex-wrap: wrap;
282
+ gap: 8px;
283
+ }
284
+
285
+ .header-toggle-btn,
286
+ .download-json-btn {
287
+ font-size: 10px;
288
+ padding: 2px 8px;
289
+ background: var(--container-bg);
290
+ border: 1px solid var(--border);
291
+ border-radius: 3px;
292
+ color: var(--text);
293
+ cursor: pointer;
294
+ font-family: inherit;
295
+ }
296
+
297
+ .header-toggle-btn:hover,
298
+ .download-json-btn:hover {
299
+ background: var(--hover);
300
+ border-color: var(--borderAccent);
301
+ }
302
+
303
+ /* Header */
304
+ .header {
305
+ background: var(--container-bg);
306
+ border-radius: 4px;
307
+ padding: var(--line-height);
308
+ margin-bottom: var(--line-height);
309
+ }
310
+
311
+ .header h1 {
312
+ font-size: 12px;
313
+ font-weight: bold;
314
+ color: var(--borderAccent);
315
+ margin-bottom: var(--line-height);
316
+ }
317
+
318
+ .header-info {
319
+ display: flex;
320
+ flex-direction: column;
321
+ gap: 0;
322
+ font-size: 11px;
323
+ }
324
+
325
+ .info-item {
326
+ color: var(--dim);
327
+ display: flex;
328
+ align-items: baseline;
329
+ }
330
+
331
+ .info-label {
332
+ font-weight: 600;
333
+ margin-right: 8px;
334
+ min-width: 100px;
335
+ }
336
+
337
+ .info-value {
338
+ color: var(--text);
339
+ flex: 1;
340
+ }
341
+
342
+ /* Messages */
343
+ #messages {
344
+ display: flex;
345
+ flex-direction: column;
346
+ gap: var(--line-height);
347
+ }
348
+
349
+ .message-timestamp {
350
+ font-size: 10px;
351
+ color: var(--dim);
352
+ opacity: 0.8;
353
+ }
354
+
355
+ .user-message {
356
+ background: var(--userMessageBg);
357
+ color: var(--userMessageText);
358
+ padding: var(--line-height);
359
+ border-radius: 4px;
360
+ position: relative;
361
+ }
362
+
363
+ .assistant-message {
364
+ padding: 0;
365
+ position: relative;
366
+ }
367
+
368
+ /* Copy link button - appears on hover */
369
+ .copy-link-btn {
370
+ position: absolute;
371
+ top: 8px;
372
+ right: 8px;
373
+ width: 28px;
374
+ height: 28px;
375
+ padding: 6px;
376
+ background: var(--container-bg);
377
+ border: 1px solid var(--dim);
378
+ border-radius: 4px;
379
+ color: var(--muted);
380
+ cursor: pointer;
381
+ opacity: 0;
382
+ transition: opacity 0.15s, background 0.15s, color 0.15s;
383
+ display: flex;
384
+ align-items: center;
385
+ justify-content: center;
386
+ z-index: 10;
387
+ }
388
+
389
+ .user-message:hover .copy-link-btn,
390
+ .assistant-message:hover .copy-link-btn,
391
+ .skill-user-entry:hover .copy-link-btn {
392
+ opacity: 1;
393
+ }
394
+
395
+ .copy-link-btn:hover {
396
+ background: var(--accent);
397
+ color: var(--body-bg);
398
+ border-color: var(--accent);
399
+ }
400
+
401
+ .copy-link-btn.copied {
402
+ background: var(--success, #22c55e);
403
+ color: white;
404
+ border-color: var(--success, #22c55e);
405
+ }
406
+
407
+ /* Highlight effect for deep-linked messages */
408
+ .user-message.highlight,
409
+ .assistant-message.highlight {
410
+ animation: highlight-pulse 2s ease-out;
411
+ }
412
+
413
+ @keyframes highlight-pulse {
414
+ 0% {
415
+ box-shadow: 0 0 0 3px var(--accent);
416
+ }
417
+ 100% {
418
+ box-shadow: 0 0 0 0 transparent;
419
+ }
420
+ }
421
+
422
+ .assistant-message > .message-timestamp {
423
+ padding-left: var(--line-height);
424
+ }
425
+
426
+ .assistant-text {
427
+ padding: var(--line-height);
428
+ padding-bottom: 0;
429
+ }
430
+
431
+ .message-timestamp + .assistant-text,
432
+ .message-timestamp + .thinking-block {
433
+ padding-top: 0;
434
+ }
435
+
436
+ .thinking-block + .assistant-text {
437
+ padding-top: 0;
438
+ }
439
+
440
+ .provider-native-block {
441
+ margin: var(--line-height);
442
+ color: var(--muted);
443
+ }
444
+
445
+ .message-timestamp + .provider-native-block {
446
+ margin-top: 0;
447
+ }
448
+
449
+ .provider-native-block summary {
450
+ cursor: pointer;
451
+ color: var(--muted);
452
+ list-style: none;
453
+ }
454
+
455
+ .provider-native-block summary::-webkit-details-marker {
456
+ display: none;
457
+ }
458
+
459
+ .provider-native-body {
460
+ margin: 8px 0 0 0;
461
+ padding: 8px;
462
+ border: 1px solid var(--dim);
463
+ border-radius: 4px;
464
+ background: var(--toolPendingBg);
465
+ color: var(--text);
466
+ white-space: pre-wrap;
467
+ overflow-wrap: anywhere;
468
+ }
469
+
470
+ .provider-native-full {
471
+ display: none;
472
+ }
473
+
474
+ .provider-native-block[open] .provider-native-collapsed {
475
+ display: none;
476
+ }
477
+
478
+ .provider-native-block[open] .provider-native-full {
479
+ display: block;
480
+ }
481
+
482
+ .thinking-text {
483
+ padding: var(--line-height);
484
+ color: var(--thinkingText);
485
+ font-style: italic;
486
+ white-space: pre-wrap;
487
+ }
488
+
489
+ .message-timestamp + .thinking-block .thinking-text,
490
+ .message-timestamp + .thinking-block .thinking-collapsed {
491
+ padding-top: 0;
492
+ }
493
+
494
+ .thinking-collapsed {
495
+ display: none;
496
+ padding: var(--line-height);
497
+ color: var(--thinkingText);
498
+ font-style: italic;
499
+ }
500
+
501
+ /* Tool execution */
502
+ .tool-execution {
503
+ padding: var(--line-height);
504
+ border-radius: 4px;
505
+ }
506
+
507
+ .tool-execution + .tool-execution {
508
+ margin-top: var(--line-height);
509
+ }
510
+
511
+ .assistant-text + .tool-execution {
512
+ margin-top: var(--line-height);
513
+ }
514
+
515
+ .tool-execution.pending { background: var(--toolPendingBg); }
516
+ .tool-execution.success { background: var(--toolSuccessBg); }
517
+ .tool-execution.error { background: var(--toolErrorBg); }
518
+
519
+ .tool-header, .tool-name {
520
+ font-weight: bold;
521
+ }
522
+
523
+ .tool-path {
524
+ color: var(--accent);
525
+ word-break: break-all;
526
+ }
527
+
528
+ .line-numbers {
529
+ color: var(--warning);
530
+ }
531
+
532
+ .line-count {
533
+ color: var(--dim);
534
+ }
535
+
536
+ .tool-command {
537
+ font-weight: bold;
538
+ white-space: pre-wrap;
539
+ word-wrap: break-word;
540
+ overflow-wrap: break-word;
541
+ word-break: break-word;
542
+ }
543
+
544
+ .tool-output {
545
+ margin-top: var(--line-height);
546
+ color: var(--toolOutput);
547
+ word-wrap: break-word;
548
+ overflow-wrap: break-word;
549
+ word-break: break-word;
550
+ font-family: inherit;
551
+ overflow-x: auto;
552
+ }
553
+
554
+ .tool-output > div,
555
+ .output-preview > div,
556
+ .output-full > div {
557
+ margin: 0;
558
+ padding: 0;
559
+ line-height: var(--line-height);
560
+ }
561
+
562
+ .tool-output > div:not(.output-preview):not(.output-full),
563
+ .output-preview > div:not(.expand-hint),
564
+ .output-full > div:not(.expand-hint) {
565
+ white-space: pre-wrap;
566
+ }
567
+
568
+ .tool-output pre {
569
+ margin: 0;
570
+ padding: 0;
571
+ font-family: inherit;
572
+ color: inherit;
573
+ white-space: pre-wrap;
574
+ word-wrap: break-word;
575
+ overflow-wrap: break-word;
576
+ }
577
+
578
+ .tool-output code {
579
+ padding: 0;
580
+ background: none;
581
+ color: var(--text);
582
+ }
583
+
584
+ .tool-output.expandable {
585
+ cursor: pointer;
586
+ }
587
+
588
+ .tool-output.expandable:hover {
589
+ opacity: 0.9;
590
+ }
591
+
592
+ .tool-output.expandable .output-full {
593
+ display: none;
594
+ }
595
+
596
+ .tool-output.expandable.expanded .output-preview {
597
+ display: none;
598
+ }
599
+
600
+ .tool-output.expandable.expanded .output-full {
601
+ display: block;
602
+ }
603
+
604
+ .ansi-line {
605
+ white-space: pre;
606
+ }
607
+
608
+ .tool-images {
609
+ }
610
+
611
+ .tool-image {
612
+ max-width: 100%;
613
+ max-height: 500px;
614
+ border-radius: 4px;
615
+ margin: var(--line-height) 0;
616
+ }
617
+
618
+ .expand-hint {
619
+ color: var(--toolOutput);
620
+ }
621
+
622
+ /* Diff */
623
+ .tool-diff {
624
+ font-size: 11px;
625
+ overflow-x: auto;
626
+ white-space: pre;
627
+ }
628
+
629
+ .diff-added { color: var(--toolDiffAdded); }
630
+ .diff-removed { color: var(--toolDiffRemoved); }
631
+ .diff-context { color: var(--toolDiffContext); }
632
+
633
+ /* Model change */
634
+ .model-change {
635
+ padding: 0 var(--line-height);
636
+ color: var(--dim);
637
+ font-size: 11px;
638
+ }
639
+
640
+ .model-name {
641
+ color: var(--borderAccent);
642
+ font-weight: bold;
643
+ }
644
+
645
+ /* Compaction / Branch Summary - matches customMessage colors from TUI */
646
+ .compaction {
647
+ background: var(--customMessageBg);
648
+ border-radius: 4px;
649
+ padding: var(--line-height);
650
+ cursor: pointer;
651
+ }
652
+
653
+ .compaction-label {
654
+ color: var(--customMessageLabel);
655
+ font-weight: bold;
656
+ }
657
+
658
+ .compaction-collapsed {
659
+ color: var(--customMessageText);
660
+ }
661
+
662
+ .compaction-content {
663
+ display: none;
664
+ color: var(--customMessageText);
665
+ white-space: pre-wrap;
666
+ margin-top: var(--line-height);
667
+ }
668
+
669
+ .compaction.expanded .compaction-collapsed {
670
+ display: none;
671
+ }
672
+
673
+ .compaction.expanded .compaction-content {
674
+ display: block;
675
+ }
676
+
677
+ /* System prompt */
678
+ .system-prompt {
679
+ background: var(--customMessageBg);
680
+ padding: var(--line-height);
681
+ border-radius: 4px;
682
+ margin-bottom: var(--line-height);
683
+ }
684
+
685
+ .system-prompt.expandable {
686
+ cursor: pointer;
687
+ }
688
+
689
+ .system-prompt-header {
690
+ font-weight: bold;
691
+ color: var(--customMessageLabel);
692
+ }
693
+
694
+ .system-prompt-preview {
695
+ color: var(--customMessageText);
696
+ white-space: pre-wrap;
697
+ word-wrap: break-word;
698
+ font-size: 11px;
699
+ margin-top: var(--line-height);
700
+ }
701
+
702
+ .system-prompt-expand-hint {
703
+ color: var(--muted);
704
+ font-style: italic;
705
+ margin-top: 4px;
706
+ }
707
+
708
+ .system-prompt-full {
709
+ display: none;
710
+ color: var(--customMessageText);
711
+ white-space: pre-wrap;
712
+ word-wrap: break-word;
713
+ font-size: 11px;
714
+ margin-top: var(--line-height);
715
+ }
716
+
717
+ .system-prompt.expanded .system-prompt-preview,
718
+ .system-prompt.expanded .system-prompt-expand-hint {
719
+ display: none;
720
+ }
721
+
722
+ .system-prompt.expanded .system-prompt-full {
723
+ display: block;
724
+ }
725
+
726
+ .system-prompt.provider-prompt {
727
+ border-left: 3px solid var(--warning);
728
+ }
729
+
730
+ .system-prompt-note {
731
+ font-size: 10px;
732
+ font-style: italic;
733
+ color: var(--muted);
734
+ margin-top: 4px;
735
+ }
736
+
737
+ /* Tools list */
738
+ .tools-list {
739
+ background: var(--customMessageBg);
740
+ padding: var(--line-height);
741
+ border-radius: 4px;
742
+ margin-bottom: var(--line-height);
743
+ }
744
+
745
+ .tools-header {
746
+ font-weight: bold;
747
+ color: var(--customMessageLabel);
748
+ margin-bottom: var(--line-height);
749
+ }
750
+
751
+ .tool-item {
752
+ font-size: 11px;
753
+ }
754
+
755
+ .tool-item-name {
756
+ font-weight: bold;
757
+ color: var(--text);
758
+ }
759
+
760
+ .tool-item-desc {
761
+ color: var(--dim);
762
+ }
763
+
764
+ .tool-params-hint {
765
+ color: var(--muted);
766
+ font-style: italic;
767
+ }
768
+
769
+ .tool-item:has(.tool-params-hint) {
770
+ cursor: pointer;
771
+ }
772
+
773
+ .tool-params-hint::after {
774
+ content: '[click to show parameters]';
775
+ }
776
+
777
+ .tool-item.params-expanded .tool-params-hint::after {
778
+ content: '[hide parameters]';
779
+ }
780
+
781
+ .tool-params-content {
782
+ display: none;
783
+ margin-top: 4px;
784
+ margin-left: 12px;
785
+ padding-left: 8px;
786
+ border-left: 1px solid var(--dim);
787
+ }
788
+
789
+ .tool-item.params-expanded .tool-params-content {
790
+ display: block;
791
+ }
792
+
793
+ .tool-param {
794
+ margin-bottom: 4px;
795
+ font-size: 11px;
796
+ }
797
+
798
+ .tool-param-name {
799
+ font-weight: bold;
800
+ color: var(--text);
801
+ }
802
+
803
+ .tool-param-type {
804
+ color: var(--dim);
805
+ font-style: italic;
806
+ }
807
+
808
+ .tool-param-required {
809
+ color: var(--warning, #e8a838);
810
+ font-size: 10px;
811
+ }
812
+
813
+ .tool-param-optional {
814
+ color: var(--dim);
815
+ font-size: 10px;
816
+ }
817
+
818
+ .tool-param-desc {
819
+ color: var(--dim);
820
+ margin-left: 8px;
821
+ }
822
+
823
+ /* Hook/custom messages */
824
+ .hook-message {
825
+ background: var(--customMessageBg);
826
+ color: var(--customMessageText);
827
+ padding: var(--line-height);
828
+ border-radius: 4px;
829
+ }
830
+
831
+ .hook-type {
832
+ color: var(--customMessageLabel);
833
+ font-weight: bold;
834
+ }
835
+
836
+ /* Skill invocation - matches compaction style (clickable, collapsed by default) */
837
+ .skill-invocation {
838
+ background: var(--customMessageBg);
839
+ border-radius: 4px;
840
+ padding: var(--line-height);
841
+ cursor: pointer;
842
+ }
843
+
844
+ .skill-invocation-label {
845
+ color: var(--customMessageLabel);
846
+ font-weight: bold;
847
+ }
848
+
849
+ .skill-invocation-collapsed {
850
+ color: var(--customMessageText);
851
+ }
852
+
853
+ .skill-invocation-content {
854
+ display: none;
855
+ color: var(--customMessageText);
856
+ margin-top: var(--line-height);
857
+ }
858
+
859
+ .skill-invocation.expanded .skill-invocation-collapsed {
860
+ display: none;
861
+ }
862
+
863
+ .skill-invocation.expanded .skill-invocation-content {
864
+ display: block;
865
+ }
866
+
867
+ .skill-invocation + .user-message {
868
+ margin-top: var(--line-height);
869
+ }
870
+
871
+ .skill-user-entry {
872
+ position: relative;
873
+ }
874
+
875
+ /* Branch summary */
876
+ .branch-summary {
877
+ background: var(--customMessageBg);
878
+ padding: var(--line-height);
879
+ border-radius: 4px;
880
+ }
881
+
882
+ .branch-summary-header {
883
+ font-weight: bold;
884
+ color: var(--borderAccent);
885
+ }
886
+
887
+ /* Error */
888
+ .error-text {
889
+ color: var(--error);
890
+ padding: 0 var(--line-height);
891
+ }
892
+ .tool-error {
893
+ color: var(--error);
894
+ }
895
+
896
+ /* Images */
897
+ .message-images {
898
+ margin-bottom: 12px;
899
+ }
900
+
901
+ .message-image {
902
+ max-width: 100%;
903
+ max-height: 400px;
904
+ border-radius: 4px;
905
+ margin: var(--line-height) 0;
906
+ }
907
+
908
+ /* Markdown content */
909
+ .markdown-content h1,
910
+ .markdown-content h2,
911
+ .markdown-content h3,
912
+ .markdown-content h4,
913
+ .markdown-content h5,
914
+ .markdown-content h6 {
915
+ color: var(--mdHeading);
916
+ margin: var(--line-height) 0 0 0;
917
+ font-weight: bold;
918
+ }
919
+
920
+ .markdown-content h1 { font-size: 1em; }
921
+ .markdown-content h2 { font-size: 1em; }
922
+ .markdown-content h3 { font-size: 1em; }
923
+ .markdown-content h4 { font-size: 1em; }
924
+ .markdown-content h5 { font-size: 1em; }
925
+ .markdown-content h6 { font-size: 1em; }
926
+ .markdown-content p { margin: 0; }
927
+ .markdown-content p + p { margin-top: var(--line-height); }
928
+
929
+ .markdown-content a {
930
+ color: var(--mdLink);
931
+ text-decoration: underline;
932
+ }
933
+
934
+ .markdown-content code {
935
+ background: rgba(128, 128, 128, 0.2);
936
+ color: var(--mdCode);
937
+ padding: 0 4px;
938
+ border-radius: 3px;
939
+ font-family: inherit;
940
+ }
941
+
942
+ .markdown-content pre {
943
+ background: transparent;
944
+ margin: var(--line-height) 0;
945
+ overflow-x: auto;
946
+ }
947
+
948
+ .markdown-content pre code {
949
+ display: block;
950
+ background: none;
951
+ color: var(--text);
952
+ }
953
+
954
+ .markdown-content blockquote {
955
+ border-left: 3px solid var(--mdQuoteBorder);
956
+ padding-left: var(--line-height);
957
+ margin: var(--line-height) 0;
958
+ color: var(--mdQuote);
959
+ font-style: italic;
960
+ }
961
+
962
+ .markdown-content ul,
963
+ .markdown-content ol {
964
+ margin: var(--line-height) 0;
965
+ padding-left: calc(var(--line-height) * 2);
966
+ }
967
+
968
+ .markdown-content li { margin: 0; }
969
+ .markdown-content li::marker { color: var(--mdListBullet); }
970
+
971
+ .markdown-content hr {
972
+ border: none;
973
+ border-top: 1px solid var(--mdHr);
974
+ margin: var(--line-height) 0;
975
+ }
976
+
977
+ .markdown-content table {
978
+ border-collapse: collapse;
979
+ margin: 0.5em 0;
980
+ width: 100%;
981
+ }
982
+
983
+ .markdown-content th,
984
+ .markdown-content td {
985
+ border: 1px solid var(--mdCodeBlockBorder);
986
+ padding: 6px 10px;
987
+ text-align: left;
988
+ }
989
+
990
+ .markdown-content th {
991
+ background: rgba(128, 128, 128, 0.1);
992
+ font-weight: bold;
993
+ }
994
+
995
+ .markdown-content img {
996
+ max-width: 100%;
997
+ border-radius: 4px;
998
+ }
999
+
1000
+ /* Syntax highlighting */
1001
+ .hljs { background: transparent; color: var(--text); }
1002
+ .hljs-comment, .hljs-quote { color: var(--syntaxComment); }
1003
+ .hljs-keyword, .hljs-selector-tag { color: var(--syntaxKeyword); }
1004
+ .hljs-number, .hljs-literal { color: var(--syntaxNumber); }
1005
+ .hljs-string, .hljs-doctag { color: var(--syntaxString); }
1006
+ /* Function names: hljs v11 uses .hljs-title.function_ compound class */
1007
+ .hljs-function, .hljs-title, .hljs-title.function_, .hljs-section, .hljs-name { color: var(--syntaxFunction); }
1008
+ /* Types: hljs v11 uses .hljs-title.class_ for class names */
1009
+ .hljs-type, .hljs-class, .hljs-title.class_, .hljs-built_in { color: var(--syntaxType); }
1010
+ .hljs-attr, .hljs-variable, .hljs-variable.language_, .hljs-params, .hljs-property { color: var(--syntaxVariable); }
1011
+ .hljs-meta, .hljs-meta .hljs-keyword, .hljs-meta .hljs-string { color: var(--syntaxKeyword); }
1012
+ .hljs-operator { color: var(--syntaxOperator); }
1013
+ .hljs-punctuation { color: var(--syntaxPunctuation); }
1014
+ .hljs-subst { color: var(--text); }
1015
+
1016
+ /* Footer */
1017
+ .footer {
1018
+ margin-top: 48px;
1019
+ padding: 20px;
1020
+ text-align: center;
1021
+ color: var(--dim);
1022
+ font-size: 10px;
1023
+ }
1024
+
1025
+ /* Mobile */
1026
+ #hamburger {
1027
+ display: none;
1028
+ position: fixed;
1029
+ top: 10px;
1030
+ left: 10px;
1031
+ z-index: 100;
1032
+ padding: 3px 8px;
1033
+ font-size: 12px;
1034
+ font-family: inherit;
1035
+ background: transparent;
1036
+ color: var(--muted);
1037
+ border: 1px solid var(--dim);
1038
+ border-radius: 3px;
1039
+ cursor: pointer;
1040
+ }
1041
+
1042
+ #hamburger:hover {
1043
+ color: var(--text);
1044
+ border-color: var(--text);
1045
+ }
1046
+
1047
+
1048
+
1049
+ #sidebar-overlay {
1050
+ display: none;
1051
+ position: fixed;
1052
+ top: 0;
1053
+ left: 0;
1054
+ right: 0;
1055
+ bottom: 0;
1056
+ background: rgba(0, 0, 0, 0.5);
1057
+ z-index: 98;
1058
+ }
1059
+
1060
+ @media (max-width: 900px) {
1061
+ #sidebar {
1062
+ position: fixed;
1063
+ left: 0;
1064
+ width: min(var(--sidebar-width), 100vw);
1065
+ min-width: min(var(--sidebar-width), 100vw);
1066
+ max-width: min(var(--sidebar-width), 100vw);
1067
+ top: 0;
1068
+ bottom: 0;
1069
+ height: 100vh;
1070
+ z-index: 99;
1071
+ transform: translateX(-100%);
1072
+ transition: transform 0.3s;
1073
+ }
1074
+
1075
+ #sidebar.open {
1076
+ transform: translateX(0);
1077
+ }
1078
+
1079
+ #sidebar-resizer {
1080
+ display: none;
1081
+ }
1082
+
1083
+ #sidebar-overlay.open {
1084
+ display: block;
1085
+ }
1086
+
1087
+ #hamburger {
1088
+ display: block;
1089
+ }
1090
+
1091
+ .sidebar-close {
1092
+ display: block;
1093
+ }
1094
+
1095
+ #content {
1096
+ padding: var(--line-height) 16px;
1097
+ }
1098
+
1099
+ #content > * {
1100
+ max-width: 100%;
1101
+ }
1102
+ }
1103
+
1104
+ @media print {
1105
+ #sidebar, #sidebar-resizer, #sidebar-toggle { display: none !important; }
1106
+ body { background: white; color: black; }
1107
+ #content { max-width: none; }
1108
+ }