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