gh-here 2.1.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/public/styles.css CHANGED
@@ -35,39 +35,92 @@
35
35
  html {
36
36
  /* Set background on html to prevent flash during navigation */
37
37
  background-color: #0d1117; /* Default dark theme background */
38
+ color-scheme: dark;
38
39
  }
39
40
 
40
- [data-theme="light"] html {
41
+ html[data-theme="light"] {
41
42
  background-color: #ffffff; /* Light theme background */
43
+ color-scheme: light;
44
+ }
45
+
46
+ /* View Transitions API animations */
47
+ ::view-transition-old(root),
48
+ ::view-transition-new(root) {
49
+ animation-duration: 0.2s;
50
+ }
51
+
52
+ ::view-transition-old(root) {
53
+ animation-name: fade-out;
54
+ }
55
+
56
+ ::view-transition-new(root) {
57
+ animation-name: fade-in;
58
+ }
59
+
60
+ @keyframes fade-out {
61
+ to {
62
+ opacity: 0;
63
+ }
64
+ }
65
+
66
+ @keyframes fade-in {
67
+ from {
68
+ opacity: 0;
69
+ }
42
70
  }
43
71
 
44
72
  body {
45
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
73
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
46
74
  background-color: var(--bg-primary);
47
75
  color: var(--text-primary);
48
76
  line-height: 1.5;
49
- min-height: 100vh; /* Ensure full height */
77
+ min-height: 100vh;
78
+ }
79
+
80
+ /* Smooth content fades for navigation */
81
+ .main-content-wrapper {
82
+ transition: opacity 160ms ease;
83
+ will-change: opacity;
84
+ }
85
+
86
+ /* During navigation transition: fade out and disable clicks to prevent race conditions */
87
+ .main-content-wrapper.navigating {
88
+ opacity: 0.5;
89
+ pointer-events: none; /* Prevents clicks during transition - will be removed when navigation completes */
90
+ }
91
+
92
+ @media (prefers-reduced-motion: reduce) {
93
+ .main-content-wrapper {
94
+ transition: none;
95
+ }
50
96
  }
51
97
 
52
98
  header {
53
99
  background-color: var(--bg-secondary);
54
100
  border-bottom: 1px solid var(--border-primary);
101
+ position: sticky;
102
+ top: 0;
103
+ z-index: 100;
55
104
  }
56
105
 
57
106
  .header-content {
58
107
  display: flex;
59
108
  justify-content: space-between;
60
- align-items: flex-start;
61
- max-width: 900px;
62
- margin: 0 auto;
63
- padding: 16px 24px;
109
+ align-items: center;
110
+ padding: 12px 32px;
111
+ max-width: 100%;
112
+ }
113
+
114
+ .header-left {
115
+ flex: 0 0 auto;
64
116
  }
65
117
 
66
118
  .header-left h1 {
67
119
  font-size: 20px;
68
120
  font-weight: 600;
69
121
  margin: 0;
70
- color: var(--text-accent);
122
+ color: var(--text-primary);
123
+ letter-spacing: -0.01em;
71
124
  }
72
125
 
73
126
  .header-path {
@@ -79,18 +132,21 @@ header {
79
132
  .header-right {
80
133
  display: flex;
81
134
  align-items: center;
82
- gap: 12px;
135
+ gap: 8px;
136
+ margin-left: auto;
83
137
  }
84
138
 
85
139
  /* GitHub-style White Canvas Section */
86
140
  .repo-canvas {
87
141
  background-color: var(--bg-primary);
142
+ flex: 1;
143
+ min-width: 0;
88
144
  }
89
145
 
90
146
  .repo-canvas-content {
91
- max-width: 900px;
92
- margin: 0 auto;
93
147
  padding: 16px 24px;
148
+ max-width: 1280px;
149
+ margin: 0 auto;
94
150
  }
95
151
 
96
152
  .breadcrumb-section {
@@ -120,17 +176,24 @@ header {
120
176
  display: flex;
121
177
  align-items: center;
122
178
  justify-content: space-between;
179
+ min-height: 40px;
123
180
  }
124
181
 
125
182
  .repo-controls-left {
126
183
  display: flex;
127
184
  align-items: center;
185
+ gap: 12px;
186
+ }
187
+
188
+ .repo-controls-left:empty {
189
+ display: none;
128
190
  }
129
191
 
130
192
  .repo-controls-right {
131
193
  display: flex;
132
194
  align-items: center;
133
195
  gap: 12px;
196
+ margin-left: auto;
134
197
  }
135
198
 
136
199
  .branch-button {
@@ -142,7 +205,7 @@ header {
142
205
  border: 1px solid var(--border-primary);
143
206
  border-radius: 6px;
144
207
  color: var(--text-primary);
145
- font-size: 14px;
208
+ font-size: 12px;
146
209
  font-weight: 500;
147
210
  cursor: pointer;
148
211
  transition: all 0.2s ease;
@@ -175,8 +238,9 @@ header {
175
238
  }
176
239
 
177
240
  .branch-name {
178
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
241
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
179
242
  font-weight: 600;
243
+ font-size: 12px;
180
244
  }
181
245
 
182
246
  .octicon-chevron {
@@ -207,6 +271,103 @@ header {
207
271
  box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.3);
208
272
  }
209
273
 
274
+ /* Search results overlay */
275
+ .search-results-overlay {
276
+ position: absolute;
277
+ top: calc(100% + 8px);
278
+ left: 0;
279
+ right: 0;
280
+ z-index: 1000;
281
+ min-width: 400px;
282
+ }
283
+
284
+ .search-results-container {
285
+ background: var(--bg-primary);
286
+ border: 1px solid var(--border-primary);
287
+ border-radius: 6px;
288
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
289
+ max-height: 400px;
290
+ overflow: hidden;
291
+ display: flex;
292
+ flex-direction: column;
293
+ }
294
+
295
+ .search-results-header {
296
+ padding: 8px 12px;
297
+ border-bottom: 1px solid var(--border-primary);
298
+ background: var(--bg-secondary);
299
+ font-size: 12px;
300
+ font-weight: 600;
301
+ color: var(--text-secondary);
302
+ }
303
+
304
+ .search-results-count {
305
+ color: var(--text-secondary);
306
+ }
307
+
308
+ .search-results-list {
309
+ overflow-y: auto;
310
+ max-height: 350px;
311
+ }
312
+
313
+ .search-result-item {
314
+ display: flex;
315
+ align-items: center;
316
+ gap: 10px;
317
+ padding: 8px 12px;
318
+ border-bottom: 1px solid var(--border-secondary);
319
+ text-decoration: none;
320
+ color: var(--text-primary);
321
+ transition: background-color 0.15s ease;
322
+ cursor: pointer;
323
+ }
324
+
325
+ .search-result-item:last-child {
326
+ border-bottom: none;
327
+ }
328
+
329
+ .search-result-item:hover {
330
+ background-color: var(--hover-bg);
331
+ }
332
+
333
+ .search-result-item .result-icon {
334
+ flex-shrink: 0;
335
+ fill: var(--text-secondary);
336
+ }
337
+
338
+ .search-result-item .result-icon.file-icon {
339
+ opacity: 0.7;
340
+ }
341
+
342
+ .search-result-content {
343
+ flex: 1;
344
+ min-width: 0;
345
+ display: flex;
346
+ flex-direction: column;
347
+ gap: 2px;
348
+ }
349
+
350
+ .search-result-path {
351
+ font-size: 13px;
352
+ color: var(--text-primary);
353
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
354
+ overflow: hidden;
355
+ text-overflow: ellipsis;
356
+ white-space: nowrap;
357
+ }
358
+
359
+ .search-highlight {
360
+ background-color: rgba(255, 200, 50, 0.3);
361
+ color: var(--text-accent);
362
+ border-radius: 2px;
363
+ padding: 0 2px;
364
+ font-weight: 600;
365
+ }
366
+
367
+ [data-theme="light"] .search-highlight {
368
+ background-color: rgba(255, 200, 50, 0.4);
369
+ }
370
+
210
371
  .search-icon {
211
372
  position: absolute;
212
373
  left: 8px;
@@ -233,9 +394,9 @@ header {
233
394
  display: flex;
234
395
  align-items: center;
235
396
  gap: 6px;
236
- padding: 6px 12px;
397
+ padding: 5px 12px;
237
398
  border-radius: 6px;
238
- font-size: 14px;
399
+ font-size: 12px;
239
400
  font-weight: 500;
240
401
  cursor: pointer;
241
402
  transition: all 0.2s ease;
@@ -282,62 +443,76 @@ header {
282
443
  .theme-toggle,
283
444
  .gitignore-toggle,
284
445
  .edit-btn {
285
- background: none;
446
+ background: var(--bg-primary);
286
447
  border: 1px solid var(--border-primary);
287
448
  border-radius: 6px;
288
- padding: 8px;
449
+ padding: 5px 12px;
289
450
  cursor: pointer;
290
- color: var(--text-secondary);
291
- transition: all 0.2s ease;
451
+ color: var(--text-primary);
452
+ transition: all 0.15s ease;
292
453
  display: flex;
293
454
  align-items: center;
294
455
  justify-content: center;
295
- min-width: 40px;
296
- min-height: 40px;
297
- margin-left: 8px;
456
+ height: 32px;
457
+ min-width: 32px;
458
+ margin: 0;
459
+ font-size: 14px;
298
460
  }
299
461
 
300
462
  .theme-toggle:hover,
301
463
  .gitignore-toggle:hover,
302
464
  .edit-btn:hover {
303
- background-color: var(--hover-bg);
465
+ background-color: var(--bg-tertiary);
304
466
  border-color: var(--text-secondary);
305
467
  }
306
468
 
469
+ .theme-toggle:active,
470
+ .gitignore-toggle:active,
471
+ .edit-btn:active {
472
+ background-color: var(--hover-bg);
473
+ transform: scale(0.97);
474
+ }
475
+
307
476
  .gitignore-toggle.showing-ignored {
308
477
  color: var(--link-color);
309
478
  border-color: var(--link-color);
479
+ background: rgba(88, 166, 255, 0.1);
310
480
  }
311
481
 
312
482
  .gitignore-toggle.showing-ignored:hover {
313
- background-color: rgba(88, 166, 255, 0.1);
314
- }
315
-
316
- .edit-btn {
317
- margin-right: 8px;
483
+ background-color: rgba(88, 166, 255, 0.15);
318
484
  }
319
485
 
320
- .theme-icon {
321
- font-size: 16px;
486
+ .theme-icon,
487
+ .gitignore-icon,
488
+ .edit-icon {
489
+ width: 16px;
490
+ height: 16px;
491
+ fill: currentColor;
322
492
  }
323
493
 
324
494
  .view-toggle {
325
- display: flex;
495
+ display: inline-flex;
326
496
  border: 1px solid var(--border-primary);
327
497
  border-radius: 6px;
328
498
  overflow: hidden;
499
+ background: var(--bg-primary);
329
500
  }
330
501
 
331
502
  .view-btn {
332
- padding: 8px 12px;
333
- background: none;
503
+ display: inline-flex;
504
+ align-items: center;
505
+ gap: 6px;
506
+ padding: 6px 12px;
507
+ background: transparent;
334
508
  border: none;
335
509
  color: var(--text-secondary);
336
510
  text-decoration: none;
337
- font-size: 12px;
511
+ font-size: 13px;
338
512
  font-weight: 500;
339
- transition: all 0.2s ease;
513
+ transition: all 0.15s ease;
340
514
  white-space: nowrap;
515
+ cursor: pointer;
341
516
  }
342
517
 
343
518
  .view-btn:hover {
@@ -350,10 +525,22 @@ header {
350
525
  color: white;
351
526
  }
352
527
 
528
+ .view-btn.active:hover {
529
+ background-color: var(--link-color);
530
+ opacity: 0.9;
531
+ }
532
+
353
533
  .view-btn + .view-btn {
354
534
  border-left: 1px solid var(--border-primary);
355
535
  }
356
536
 
537
+ .view-icon {
538
+ width: 16px;
539
+ height: 16px;
540
+ fill: currentColor;
541
+ flex-shrink: 0;
542
+ }
543
+
357
544
  .breadcrumb-item {
358
545
  display: inline-flex;
359
546
  align-items: center;
@@ -363,7 +550,7 @@ header {
363
550
  color: var(--link-color);
364
551
  text-decoration: none;
365
552
  font-weight: 500;
366
- padding: 4px 8px;
553
+ padding: 2px 6px;
367
554
  border-radius: 4px;
368
555
  transition: all 0.15s ease;
369
556
  }
@@ -380,72 +567,441 @@ header {
380
567
  opacity: 0.7;
381
568
  }
382
569
 
383
- main {
384
- padding: 0;
570
+ /* File Header */
571
+ .file-header {
572
+ display: flex;
573
+ justify-content: space-between;
574
+ align-items: center;
575
+ padding: 12px 16px;
576
+ margin-bottom: 12px;
577
+ background-color: var(--bg-secondary);
578
+ border: 1px solid var(--border-primary);
579
+ border-radius: 6px;
580
+ gap: 16px;
581
+ flex-wrap: wrap;
385
582
  }
386
583
 
387
- .main-content {
388
- max-width: 900px;
389
- margin: 0 auto;
390
- padding: 16px 24px;
584
+ .file-header-main {
585
+ flex: 1;
586
+ min-width: 0;
587
+ display: flex;
588
+ flex-direction: column;
589
+ gap: 8px;
391
590
  }
392
591
 
393
- .directory-actions {
592
+ .file-path-info {
394
593
  display: flex;
594
+ align-items: center;
395
595
  gap: 8px;
396
- margin-bottom: 16px;
596
+ font-size: 14px;
397
597
  }
398
598
 
399
- .btn-icon {
400
- width: 14px;
401
- height: 14px;
402
- fill: currentColor;
403
- margin-right: 6px;
404
- vertical-align: text-bottom;
599
+ .file-path-text {
600
+ color: var(--link-color);
601
+ font-weight: 500;
602
+ word-break: break-all;
405
603
  }
406
604
 
407
- .file-table {
408
- width: 100%;
409
- border-collapse: collapse;
410
- background-color: var(--bg-primary);
411
- border: 1px solid var(--border-primary);
412
- border-radius: 6px;
413
- overflow: hidden;
605
+ .file-path-copy-btn {
606
+ display: inline-flex;
607
+ align-items: center;
608
+ justify-content: center;
609
+ padding: 4px;
610
+ background: transparent;
611
+ border: none;
612
+ border-radius: 4px;
613
+ cursor: pointer;
614
+ color: var(--text-secondary);
615
+ transition: all 0.15s ease;
616
+ flex-shrink: 0;
414
617
  }
415
618
 
416
- .file-table thead {
417
- background-color: var(--bg-secondary);
619
+ .file-path-copy-btn:hover {
620
+ background-color: var(--hover-bg);
621
+ color: var(--text-primary);
418
622
  }
419
623
 
420
- .file-table th {
421
- padding: 8px 16px;
422
- text-align: left;
423
- font-weight: 600;
424
- font-size: 12px;
425
- color: var(--text-accent);
426
- border-bottom: 1px solid var(--border-primary);
427
- text-transform: uppercase;
428
- letter-spacing: 0.5px;
624
+ .octicon-copy {
625
+ fill: currentColor;
429
626
  }
430
627
 
431
- .file-table tbody tr {
432
- border-bottom: 1px solid var(--border-secondary);
628
+ .file-stats {
629
+ display: flex;
630
+ align-items: center;
631
+ gap: 4px;
632
+ font-size: 12px;
633
+ color: var(--text-secondary);
433
634
  }
434
635
 
435
- .file-table tbody tr:hover {
436
- background-color: var(--hover-bg);
636
+ .file-stat {
637
+ color: var(--text-secondary);
437
638
  }
438
639
 
439
- .file-table td {
440
- padding: 8px 16px;
441
- font-size: 14px;
442
- vertical-align: middle;
640
+ .file-stat-separator {
641
+ color: var(--text-secondary);
642
+ opacity: 0.5;
443
643
  }
444
644
 
445
- .file-table .icon {
446
- width: 24px;
447
- text-align: center;
448
- font-size: 16px;
645
+ .file-header-actions {
646
+ flex-shrink: 0;
647
+ display: flex;
648
+ gap: 8px;
649
+ align-items: center;
650
+ flex-wrap: wrap;
651
+ }
652
+
653
+ .file-action-group {
654
+ display: inline-flex;
655
+ background-color: var(--bg-primary);
656
+ border: 1px solid var(--border-primary);
657
+ border-radius: 6px;
658
+ overflow: hidden;
659
+ }
660
+
661
+ .file-action-btn {
662
+ display: inline-flex;
663
+ align-items: center;
664
+ justify-content: center;
665
+ padding: 6px 12px;
666
+ background: transparent;
667
+ border: none;
668
+ color: var(--text-secondary);
669
+ text-decoration: none;
670
+ font-size: 12px;
671
+ font-weight: 500;
672
+ cursor: pointer;
673
+ transition: all 0.15s ease;
674
+ white-space: nowrap;
675
+ gap: 6px;
676
+ border-right: 1px solid var(--border-primary);
677
+ }
678
+
679
+ .file-action-btn:last-child {
680
+ border-right: none;
681
+ }
682
+
683
+ .file-action-btn:hover {
684
+ background-color: var(--hover-bg);
685
+ color: var(--text-primary);
686
+ }
687
+
688
+ .file-action-btn .file-action-label {
689
+ color: inherit;
690
+ }
691
+
692
+ .file-action-icon {
693
+ fill: currentColor;
694
+ flex-shrink: 0;
695
+ }
696
+
697
+ .copy-raw-btn {
698
+ padding: 6px;
699
+ }
700
+
701
+ .file-action-btn:first-child {
702
+ border-radius: 6px 0 0 6px;
703
+ }
704
+
705
+ .file-action-btn:last-child {
706
+ border-radius: 0 6px 6px 0;
707
+ }
708
+
709
+ /* Single button case */
710
+ .file-action-group:has(.file-action-btn:only-child) .file-action-btn {
711
+ border-radius: 6px;
712
+ border-right: none;
713
+ }
714
+
715
+ main {
716
+ padding: 0;
717
+ display: flex;
718
+ min-height: calc(100vh - 57px);
719
+ background: var(--bg-primary);
720
+ }
721
+
722
+ /* File Tree Sidebar */
723
+ .file-tree-sidebar {
724
+ width: 280px;
725
+ min-width: 280px;
726
+ max-width: 280px;
727
+ flex-shrink: 0;
728
+ border-right: 1px solid var(--border-primary);
729
+ overflow-y: auto;
730
+ overflow-x: hidden;
731
+ background: var(--bg-secondary);
732
+ position: sticky;
733
+ top: 0;
734
+ height: 100vh;
735
+ max-height: 100vh;
736
+ align-self: stretch;
737
+ transition: opacity 0.2s ease, visibility 0.2s ease;
738
+ display: flex;
739
+ flex-direction: column;
740
+ }
741
+
742
+ .file-tree-sidebar.hidden {
743
+ display: none;
744
+ }
745
+
746
+ .file-tree-header {
747
+ display: flex;
748
+ align-items: center;
749
+ gap: 8px;
750
+ padding: 12px 16px;
751
+ border-bottom: 1px solid var(--border-primary);
752
+ background: var(--bg-secondary);
753
+ position: sticky;
754
+ top: 0;
755
+ z-index: 1;
756
+ font-size: 14px;
757
+ font-weight: 600;
758
+ color: var(--text-primary);
759
+ }
760
+
761
+ .files-icon {
762
+ fill: var(--text-secondary);
763
+ flex-shrink: 0;
764
+ }
765
+
766
+ .sidebar-controls {
767
+ padding: 12px 12px 8px;
768
+ border-bottom: 1px solid var(--border-primary);
769
+ background: var(--bg-secondary);
770
+ display: flex;
771
+ flex-direction: column;
772
+ gap: 8px;
773
+ }
774
+
775
+ .sidebar-branch {
776
+ width: 100%;
777
+ justify-content: flex-start;
778
+ font-size: 12px;
779
+ }
780
+
781
+ .btn-sidebar {
782
+ width: 100%;
783
+ padding: 5px 12px;
784
+ background: var(--bg-primary);
785
+ border: 1px solid var(--border-primary);
786
+ border-radius: 6px;
787
+ cursor: pointer;
788
+ color: var(--text-primary);
789
+ transition: all 0.15s ease;
790
+ display: flex;
791
+ align-items: center;
792
+ justify-content: center;
793
+ height: 28px;
794
+ font-size: 14px;
795
+ }
796
+
797
+ .btn-sidebar:hover {
798
+ background-color: var(--bg-tertiary);
799
+ border-color: var(--text-secondary);
800
+ }
801
+
802
+ .sidebar-search {
803
+ width: 100%;
804
+ }
805
+
806
+ .sidebar-search .search-input {
807
+ width: 100%;
808
+ font-size: 12px;
809
+ padding: 5px 32px 5px 28px;
810
+ height: 28px;
811
+ }
812
+
813
+ .sidebar-search .search-hotkey {
814
+ font-size: 10px;
815
+ padding: 2px 4px;
816
+ }
817
+
818
+ .file-tree-container {
819
+ padding: 8px 0;
820
+ background: var(--bg-secondary);
821
+ }
822
+
823
+ .tree-item {
824
+ display: flex;
825
+ align-items: center;
826
+ gap: 6px;
827
+ padding: 4px 8px;
828
+ cursor: pointer;
829
+ font-size: 14px;
830
+ line-height: 20px;
831
+ color: var(--text-primary);
832
+ transition: background-color 0.1s ease;
833
+ user-select: none;
834
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
835
+ }
836
+
837
+ .tree-item:hover {
838
+ background-color: var(--hover-bg);
839
+ }
840
+
841
+ .tree-item.active {
842
+ background-color: var(--bg-tertiary);
843
+ font-weight: 600;
844
+ }
845
+
846
+ .tree-toggle {
847
+ font-size: 10px;
848
+ color: var(--text-secondary);
849
+ width: 12px;
850
+ display: inline-block;
851
+ text-align: center;
852
+ flex-shrink: 0;
853
+ }
854
+
855
+ .tree-spacer {
856
+ width: 12px;
857
+ flex-shrink: 0;
858
+ }
859
+
860
+ .tree-icon {
861
+ flex-shrink: 0;
862
+ fill: var(--text-secondary);
863
+ }
864
+
865
+ .tree-icon.file-icon {
866
+ fill: var(--text-secondary);
867
+ opacity: 0.7;
868
+ }
869
+
870
+ .tree-item .tree-icon:not(.file-icon) {
871
+ fill: #7dd3fc;
872
+ }
873
+
874
+ [data-theme="light"] .tree-item .tree-icon:not(.file-icon) {
875
+ fill: #54adf5;
876
+ }
877
+
878
+ .tree-label {
879
+ flex: 1;
880
+ overflow: hidden;
881
+ text-overflow: ellipsis;
882
+ white-space: nowrap;
883
+ font-weight: 400;
884
+ letter-spacing: normal;
885
+ }
886
+
887
+ .tree-children {
888
+ transition: none;
889
+ }
890
+
891
+ /* File tree loading skeleton */
892
+ .tree-skeleton {
893
+ padding: 8px;
894
+ }
895
+
896
+ .skeleton-item {
897
+ height: 28px;
898
+ background: linear-gradient(
899
+ 90deg,
900
+ var(--bg-secondary) 0%,
901
+ var(--hover-bg) 50%,
902
+ var(--bg-secondary) 100%
903
+ );
904
+ background-size: 200% 100%;
905
+ animation: skeleton-loading 1.5s ease-in-out infinite;
906
+ border-radius: 4px;
907
+ margin-bottom: 4px;
908
+ }
909
+
910
+ .skeleton-indent {
911
+ margin-left: 20px;
912
+ width: calc(100% - 20px);
913
+ }
914
+
915
+ @keyframes skeleton-loading {
916
+ 0% {
917
+ background-position: 200% 0;
918
+ }
919
+ 100% {
920
+ background-position: -200% 0;
921
+ }
922
+ }
923
+
924
+ .main-content-wrapper {
925
+ flex: 1;
926
+ min-width: 0;
927
+ display: flex;
928
+ flex-direction: column;
929
+ transition: opacity 0.15s ease;
930
+ }
931
+
932
+ .main-content-wrapper.no-sidebar {
933
+ width: 100%;
934
+ max-width: 1280px;
935
+ margin: 0 auto;
936
+ }
937
+
938
+ .main-content-wrapper.no-sidebar .repo-canvas-content {
939
+ max-width: 980px;
940
+ }
941
+
942
+ .main-content {
943
+ max-width: 1200px;
944
+ margin: 0 auto;
945
+ padding: 16px 24px;
946
+ width: 100%;
947
+ }
948
+
949
+ .directory-actions {
950
+ display: flex;
951
+ gap: 8px;
952
+ margin-bottom: 16px;
953
+ }
954
+
955
+ .btn-icon {
956
+ width: 14px;
957
+ height: 14px;
958
+ fill: currentColor;
959
+ margin-right: 6px;
960
+ vertical-align: text-bottom;
961
+ }
962
+
963
+ .file-table {
964
+ width: 100%;
965
+ border-collapse: collapse;
966
+ background-color: var(--bg-primary);
967
+ border: 1px solid var(--border-primary);
968
+ border-radius: 6px;
969
+ overflow: hidden;
970
+ }
971
+
972
+ .file-table thead {
973
+ background-color: var(--bg-secondary);
974
+ }
975
+
976
+ .file-table th {
977
+ padding: 8px 16px;
978
+ text-align: left;
979
+ font-weight: 600;
980
+ font-size: 12px;
981
+ color: var(--text-accent);
982
+ border-bottom: 1px solid var(--border-primary);
983
+ text-transform: uppercase;
984
+ letter-spacing: 0.5px;
985
+ }
986
+
987
+ .file-table tbody tr {
988
+ border-bottom: 1px solid var(--border-secondary);
989
+ }
990
+
991
+ .file-table tbody tr:hover {
992
+ background-color: var(--hover-bg);
993
+ }
994
+
995
+ .file-table td {
996
+ padding: 6px 16px;
997
+ font-size: 14px;
998
+ vertical-align: middle;
999
+ }
1000
+
1001
+ .file-table .icon {
1002
+ width: 24px;
1003
+ text-align: center;
1004
+ font-size: 16px;
449
1005
  }
450
1006
 
451
1007
  .octicon-file,
@@ -462,13 +1018,41 @@ main {
462
1018
  vertical-align: text-bottom;
463
1019
  }
464
1020
 
465
- /* GitHub-style baby blue folder icons */
1021
+ /* Brighter, meaningful colors */
1022
+ /* Folders: GitHub-style baby blue */
466
1023
  .octicon-directory {
467
1024
  fill: #7dd3fc;
468
- }
1025
+ color: #7dd3fc;
1026
+ }
1027
+ [data-theme="dark"] .file-row--added .icon .octicon-directory,
1028
+ [data-theme="dark"] .file-row--added .icon .octicon-file { color: #2ea043; fill: #2ea043; }
1029
+ [data-theme="dark"] .file-row--deleted .icon .octicon-directory,
1030
+ [data-theme="dark"] .file-row--deleted .icon .octicon-file { color: #f85149; fill: #f85149; }
1031
+ [data-theme="dark"] .file-row--modified .icon .octicon-directory,
1032
+ [data-theme="dark"] .file-row--modified .icon .octicon-file { color: #d29922; fill: #d29922; }
1033
+ [data-theme="dark"] .file-row--renamed .icon .octicon-directory,
1034
+ [data-theme="dark"] .file-row--renamed .icon .octicon-file { color: #1f6feb; fill: #1f6feb; }
1035
+ [data-theme="dark"] .file-row--untracked .icon .octicon-directory,
1036
+ [data-theme="dark"] .file-row--untracked .icon .octicon-file { color: #a371f7; fill: #a371f7; }
1037
+ [data-theme="dark"] .file-row--mixed .icon .octicon-directory,
1038
+ [data-theme="dark"] .file-row--mixed .icon .octicon-file { color: #db6d28; fill: #db6d28; }
1039
+
1040
+ [data-theme="light"] .file-row--added .icon .octicon-directory,
1041
+ [data-theme="light"] .file-row--added .icon .octicon-file { color: #1a7f37; fill: #1a7f37; }
1042
+ [data-theme="light"] .file-row--deleted .icon .octicon-directory,
1043
+ [data-theme="light"] .file-row--deleted .icon .octicon-file { color: #cf222e; fill: #cf222e; }
1044
+ [data-theme="light"] .file-row--modified .icon .octicon-directory,
1045
+ [data-theme="light"] .file-row--modified .icon .octicon-file { color: #bf8700; fill: #bf8700; }
1046
+ [data-theme="light"] .file-row--renamed .icon .octicon-directory,
1047
+ [data-theme="light"] .file-row--renamed .icon .octicon-file { color: #0969da; fill: #0969da; }
1048
+ [data-theme="light"] .file-row--untracked .icon .octicon-directory,
1049
+ [data-theme="light"] .file-row--untracked .icon .octicon-file { color: #8250df; fill: #8250df; }
1050
+ [data-theme="light"] .file-row--mixed .icon .octicon-directory,
1051
+ [data-theme="light"] .file-row--mixed .icon .octicon-file { color: #9a6700; fill: #9a6700; }
469
1052
 
470
1053
  [data-theme="light"] .octicon-directory {
471
1054
  fill: #54adf5;
1055
+ color: #54adf5;
472
1056
  }
473
1057
 
474
1058
  .octicon-home {
@@ -505,9 +1089,10 @@ main {
505
1089
  align-items: center;
506
1090
  gap: 8px;
507
1091
  margin-left: 16px;
508
- max-width: 300px;
509
- overflow: hidden;
1092
+ max-width: none; /* allow full content */
1093
+ overflow: visible; /* avoid clipping at edges */
510
1094
  position: relative;
1095
+ white-space: nowrap; /* keep in a single row like GitHub */
511
1096
  }
512
1097
 
513
1098
  .language-stats:hover {
@@ -592,7 +1177,9 @@ main {
592
1177
  color: rgba(255, 255, 255, 0.9);
593
1178
  }
594
1179
 
595
- .file-row.hidden {
1180
+ .file-row.hidden,
1181
+ .tree-item.hidden,
1182
+ .tree-children.hidden {
596
1183
  display: none;
597
1184
  }
598
1185
 
@@ -628,7 +1215,7 @@ main {
628
1215
  }
629
1216
 
630
1217
  .readme-content {
631
- padding: 48px;
1218
+ padding: 32px;
632
1219
  max-height: none;
633
1220
  overflow-y: visible;
634
1221
  }
@@ -713,7 +1300,7 @@ main {
713
1300
  .file-table .name a {
714
1301
  color: var(--link-color);
715
1302
  text-decoration: none;
716
- font-weight: 500;
1303
+ font-weight: 600;
717
1304
  }
718
1305
 
719
1306
  .file-table .name a:hover {
@@ -731,20 +1318,22 @@ main {
731
1318
  background-color: var(--bg-primary);
732
1319
  border: 1px solid var(--border-primary);
733
1320
  border-radius: 6px;
734
- overflow: hidden;
1321
+ overflow: auto;
735
1322
  }
736
1323
 
737
1324
  .file-content pre {
738
1325
  margin: 0;
739
- padding: 20px;
1326
+ padding: 0;
740
1327
  overflow-x: auto;
741
1328
  font-size: 12px;
742
- line-height: 1.5;
1329
+ line-height: 20px;
743
1330
  background-color: var(--bg-primary);
744
1331
  }
745
1332
 
746
1333
  .file-content code {
747
- font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
1334
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
1335
+ font-size: 12px;
1336
+ font-weight: 400;
748
1337
  }
749
1338
 
750
1339
  /* Image viewing styles */
@@ -828,31 +1417,31 @@ main {
828
1417
  .with-line-numbers {
829
1418
  counter-reset: line;
830
1419
  display: block;
1420
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
1421
+ font-weight: 400;
831
1422
  }
832
1423
 
833
1424
  .line-container {
834
1425
  display: block;
835
1426
  position: relative;
836
- transition: background-color 0.15s ease;
837
- padding: 2px 0;
838
- line-height: 1.5;
1427
+ transition: background-color 0.12s ease;
1428
+ padding: 0;
1429
+ line-height: 20px;
1430
+ min-height: 20px;
839
1431
  }
840
1432
 
841
- .line-container::after {
842
- content: '\A';
843
- white-space: pre;
844
- }
1433
+ /* Remove pseudo-newline that created extra blank lines */
845
1434
 
846
1435
  .line-container:hover {
847
- background-color: var(--hover-bg);
1436
+ background-color: rgba(110, 118, 129, 0.1); /* subtle hover like GH */
848
1437
  }
849
1438
 
850
1439
  .line-container.selected {
851
- background-color: #fff5b4;
1440
+ background-color: #fffbdd; /* GH light selection */
852
1441
  }
853
1442
 
854
1443
  [data-theme="dark"] .line-container.selected {
855
- background-color: #1c4532;
1444
+ background-color: rgba(187, 128, 9, 0.18); /* GH-ish dark yellow */
856
1445
  }
857
1446
 
858
1447
  /* Editor */
@@ -1006,20 +1595,21 @@ main {
1006
1595
  gap: 8px;
1007
1596
  }
1008
1597
 
1009
- .new-file-editor {
1010
- /* No additional styling needed - uses existing .file-editor */
1011
- }
1598
+
1012
1599
 
1013
1600
  .line-number {
1014
1601
  display: inline-block;
1015
- width: 40px;
1602
+ width: 56px;
1016
1603
  text-align: right;
1017
- margin-right: 16px;
1018
- padding-right: 8px;
1604
+ margin-right: 0;
1605
+ padding: 0 10px;
1019
1606
  color: var(--text-secondary);
1020
- border-right: 1px solid var(--border-secondary);
1607
+ background: transparent;
1608
+ border-right: 1px solid var(--border-primary);
1021
1609
  font-size: 12px;
1022
- line-height: 1.5;
1610
+ line-height: 20px;
1611
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
1612
+ font-weight: 400;
1023
1613
  user-select: none;
1024
1614
  -webkit-user-select: none;
1025
1615
  text-decoration: none;
@@ -1033,8 +1623,17 @@ main {
1033
1623
 
1034
1624
  .line-content {
1035
1625
  white-space: pre;
1626
+ display: inline-block;
1627
+ padding: 0 10px;
1628
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
1629
+ font-size: 12px;
1630
+ line-height: 20px;
1631
+ font-weight: 400;
1632
+ letter-spacing: normal;
1036
1633
  }
1037
1634
 
1635
+ /* Keep gutter simple: only border-right, no per-line background */
1636
+
1038
1637
  /* GitHub syntax highlighting - Dark theme */
1039
1638
  .hljs-comment,
1040
1639
  .hljs-quote {
@@ -1306,7 +1905,7 @@ main {
1306
1905
  padding: 3px 6px;
1307
1906
  border-radius: 6px;
1308
1907
  font-size: 85%;
1309
- font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
1908
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
1310
1909
  color: var(--text-accent);
1311
1910
  border: 1px solid var(--border-primary);
1312
1911
  }
@@ -1376,47 +1975,45 @@ main {
1376
1975
  .main-content {
1377
1976
  padding: 12px 16px;
1378
1977
  }
1379
-
1978
+
1380
1979
  .repo-canvas-content {
1381
1980
  padding: 12px 16px;
1382
1981
  }
1383
-
1982
+
1384
1983
  .header-content {
1385
- padding: 12px 16px;
1386
- flex-direction: column;
1387
- gap: 12px;
1984
+ padding: 8px 16px;
1985
+ }
1986
+
1987
+ .header-left h1 {
1988
+ font-size: 14px;
1388
1989
  }
1389
-
1990
+
1390
1991
  .file-table .size,
1391
1992
  .file-table .modified {
1392
1993
  display: none;
1393
1994
  }
1394
-
1995
+
1395
1996
  .repo-controls {
1396
1997
  flex-direction: column;
1397
1998
  gap: 12px;
1398
1999
  align-items: stretch;
1399
2000
  }
1400
-
2001
+
1401
2002
  .repo-controls-right {
1402
2003
  flex-direction: column;
1403
2004
  gap: 8px;
1404
2005
  }
1405
-
1406
- .header-right {
1407
- align-self: flex-end;
1408
- }
1409
-
2006
+
1410
2007
  .keyboard-help-content {
1411
2008
  margin: 20px;
1412
2009
  max-width: calc(100% - 40px);
1413
2010
  }
1414
-
2011
+
1415
2012
  .keyboard-shortcuts-grid {
1416
2013
  grid-template-columns: 1fr;
1417
2014
  gap: 24px;
1418
2015
  }
1419
-
2016
+
1420
2017
  .keyboard-help-body {
1421
2018
  padding: 20px;
1422
2019
  }
@@ -1573,7 +2170,7 @@ main {
1573
2170
  border-radius: 4px;
1574
2171
  padding: 4px 8px;
1575
2172
  font-size: 11px;
1576
- font-family: 'SFMono-Regular', 'Monaco', 'Inconsolata', 'Fira Mono', monospace;
2173
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
1577
2174
  color: var(--text-primary);
1578
2175
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
1579
2176
  white-space: nowrap;
@@ -1628,52 +2225,53 @@ main {
1628
2225
  vertical-align: middle;
1629
2226
  }
1630
2227
 
2228
+ /* Git status colors - brighter palette */
1631
2229
  .git-status-M {
1632
- color: #fb8500;
2230
+ color: #d29922; /* modified - amber */
1633
2231
  }
1634
2232
 
1635
2233
  .git-status-A {
1636
- color: #28a745;
2234
+ color: #2ea043; /* added - green */
1637
2235
  }
1638
2236
 
1639
2237
  .git-status-D {
1640
- color: #dc3545;
2238
+ color: #f85149; /* deleted - red */
1641
2239
  }
1642
2240
 
1643
2241
  .git-status-R {
1644
- color: #17a2b8;
2242
+ color: #1f6feb; /* renamed - blue */
1645
2243
  }
1646
2244
 
1647
- .git-status-?? {
1648
- color: var(--text-secondary);
2245
+ .git-status-\?\? {
2246
+ color: #a371f7; /* untracked - purple */
1649
2247
  }
1650
2248
 
1651
2249
  .git-status-MM,
1652
2250
  .git-status-AM,
1653
2251
  .git-status-AD {
1654
- color: #ffc107;
2252
+ color: #db6d28; /* mixed - orange */
1655
2253
  }
1656
2254
 
1657
2255
  [data-theme="light"] .git-status-M {
1658
- color: #bc4c00;
2256
+ color: #bf8700;
1659
2257
  }
1660
2258
 
1661
2259
  [data-theme="light"] .git-status-A {
1662
- color: #116329;
2260
+ color: #1a7f37;
1663
2261
  }
1664
2262
 
1665
2263
  [data-theme="light"] .git-status-D {
1666
- color: #82071e;
2264
+ color: #cf222e;
1667
2265
  }
1668
2266
 
1669
2267
  [data-theme="light"] .git-status-R {
1670
- color: #0550ae;
2268
+ color: #0969da;
1671
2269
  }
1672
2270
 
1673
2271
  [data-theme="light"] .git-status-MM,
1674
2272
  [data-theme="light"] .git-status-AM,
1675
2273
  [data-theme="light"] .git-status-AD {
1676
- color: #bf8700;
2274
+ color: #9a6700;
1677
2275
  }
1678
2276
 
1679
2277
  /* Git Diff Viewer */
@@ -1775,9 +2373,10 @@ main {
1775
2373
  .diff-side-content {
1776
2374
  flex: 1;
1777
2375
  overflow: auto;
1778
- font-family: 'SFMono-Regular', monospace;
2376
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
1779
2377
  font-size: 12px;
1780
- line-height: 1.4;
2378
+ line-height: 20px;
2379
+ font-weight: 400;
1781
2380
  }
1782
2381
 
1783
2382
  .diff-line {
@@ -1798,517 +2397,221 @@ main {
1798
2397
  }
1799
2398
 
1800
2399
  .diff-line-content {
1801
- padding: 0 8px;
1802
- flex: 1;
1803
- overflow-x: auto;
1804
- }
1805
-
1806
- .diff-line-added {
1807
- background: #0f5132;
1808
- color: #75b798;
1809
- }
1810
-
1811
- .diff-line-added .diff-line-number {
1812
- background: #0a4027;
1813
- }
1814
-
1815
- .diff-line-removed {
1816
- background: #67060c;
1817
- color: #f8d7da;
1818
- }
1819
-
1820
- .diff-line-removed .diff-line-number {
1821
- background: #4a0409;
1822
- }
1823
-
1824
- .diff-line-context {
1825
- background: var(--bg-primary);
1826
- color: var(--text-primary);
1827
- }
1828
-
1829
- [data-theme="light"] .diff-line-added {
1830
- background: #d1e7dd;
1831
- color: #055160;
1832
- }
1833
-
1834
- [data-theme="light"] .diff-line-added .diff-line-number {
1835
- background: #badbcc;
1836
- }
1837
-
1838
- [data-theme="light"] .diff-line-removed {
1839
- background: #f8d7da;
1840
- color: #721c24;
1841
- }
1842
-
1843
- [data-theme="light"] .diff-line-removed .diff-line-number {
1844
- background: #f1aeb5;
1845
- }
1846
-
1847
- .diff-stats {
1848
- display: flex;
1849
- gap: 16px;
1850
- align-items: center;
1851
- font-size: 12px;
1852
- }
1853
-
1854
- .diff-stat {
1855
- display: flex;
1856
- align-items: center;
1857
- gap: 4px;
1858
- }
1859
-
1860
- .diff-stat-added {
1861
- color: #28a745;
1862
- }
1863
-
1864
- .diff-stat-removed {
1865
- color: #dc3545;
1866
- }
1867
-
1868
- /* Beautiful raw diff styles */
1869
- .diff-container {
1870
- max-width: 100%;
1871
- margin: 0;
1872
- padding: 0;
1873
- background: var(--bg-primary);
1874
- border-radius: 8px;
1875
- border: 1px solid var(--border-primary);
1876
- overflow: hidden;
1877
- }
1878
-
1879
- .diff-content {
1880
- padding: 0;
1881
- }
1882
-
1883
- .raw-diff-container {
1884
- font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
1885
- font-size: 14px;
1886
- line-height: 1.5;
1887
- overflow-x: auto;
1888
- }
1889
-
1890
- .diff-line {
1891
- display: flex;
1892
- align-items: stretch;
1893
- min-height: 24px;
1894
- border-bottom: 1px solid rgba(0, 0, 0, 0.03);
1895
- transition: background-color 0.1s ease;
1896
- }
1897
-
1898
- .diff-line:hover {
1899
- background-color: rgba(255, 255, 255, 0.02) !important;
1900
- }
1901
-
1902
- .diff-line-number {
1903
- padding: 4px 12px;
1904
- background: var(--bg-secondary);
1905
- color: var(--text-secondary);
1906
- text-align: right;
1907
- min-width: 60px;
1908
- user-select: none;
1909
- border-right: 1px solid var(--border-primary);
1910
- flex-shrink: 0;
1911
- font-size: 12px;
1912
- display: flex;
1913
- align-items: center;
1914
- justify-content: flex-end;
1915
- }
1916
-
1917
- .diff-line-content {
1918
- padding: 4px 16px;
1919
- flex: 1;
1920
- white-space: pre;
1921
- overflow-x: auto;
1922
- display: flex;
1923
- align-items: center;
1924
- }
1925
-
1926
- /* Different line types */
1927
- .diff-line-added {
1928
- background: rgba(46, 160, 67, 0.12);
1929
- border-left: 3px solid #2ea043;
1930
- }
1931
-
1932
- .diff-line-added .diff-line-number {
1933
- background: rgba(46, 160, 67, 0.2);
1934
- color: #2ea043;
1935
- font-weight: 600;
1936
- }
1937
-
1938
- .diff-line-removed {
1939
- background: rgba(248, 81, 73, 0.12);
1940
- border-left: 3px solid #f85149;
1941
- }
1942
-
1943
- .diff-line-removed .diff-line-number {
1944
- background: rgba(248, 81, 73, 0.2);
1945
- color: #f85149;
1946
- font-weight: 600;
1947
- }
1948
-
1949
- .diff-line-context {
1950
- background: var(--bg-primary);
1951
- color: var(--text-primary);
1952
- }
1953
-
1954
- .diff-line-hunk {
1955
- background: rgba(88, 166, 255, 0.08);
1956
- border-left: 3px solid #58a6ff;
1957
- font-weight: 600;
1958
- }
1959
-
1960
- .diff-line-hunk .diff-line-number {
1961
- background: rgba(88, 166, 255, 0.2);
1962
- color: #58a6ff;
1963
- }
1964
-
1965
- .diff-line-hunk .diff-line-content {
1966
- color: #58a6ff;
1967
- }
1968
-
1969
- .diff-line-header {
1970
- background: var(--bg-secondary);
1971
- color: var(--text-secondary);
1972
- font-weight: 500;
1973
- border-left: 3px solid var(--text-secondary);
1974
- opacity: 0.8;
1975
- }
1976
-
1977
- .diff-line-header .diff-line-number {
1978
- background: var(--bg-tertiary);
1979
- }
1980
-
1981
- /* Light theme adjustments */
1982
- [data-theme="light"] .diff-line-added {
1983
- background: rgba(46, 160, 67, 0.1);
1984
- }
1985
-
1986
- [data-theme="light"] .diff-line-removed {
1987
- background: rgba(248, 81, 73, 0.1);
1988
- }
1989
-
1990
- [data-theme="light"] .diff-line-hunk {
1991
- background: rgba(9, 105, 218, 0.1);
1992
- border-left-color: #0969da;
1993
- }
1994
-
1995
- [data-theme="light"] .diff-line-hunk .diff-line-number {
1996
- background: rgba(9, 105, 218, 0.15);
1997
- color: #0969da;
1998
- }
1999
-
2000
- [data-theme="light"] .diff-line-hunk .diff-line-content {
2001
- color: #0969da;
2002
- }
2003
-
2004
- .no-changes {
2005
- padding: 40px;
2006
- text-align: center;
2007
- color: var(--text-secondary);
2008
- font-style: italic;
2400
+ padding: 0 8px;
2401
+ flex: 1;
2402
+ overflow-x: auto;
2009
2403
  }
2010
2404
 
2011
- /* Simple commit button */
2012
- .commit-btn {
2013
- background: var(--bg-tertiary);
2014
- color: var(--text-primary);
2015
- border: 1px solid var(--border-primary);
2016
- border-radius: 6px;
2017
- padding: 6px 12px;
2018
- font-size: 13px;
2019
- font-weight: 500;
2020
- cursor: pointer;
2021
- transition: all 0.15s ease;
2022
- display: flex;
2023
- align-items: center;
2024
- gap: 4px;
2025
- margin-right: 8px;
2405
+ .diff-line-added {
2406
+ background: #0f5132;
2407
+ color: #75b798;
2026
2408
  }
2027
2409
 
2028
- .commit-btn:hover {
2029
- background: var(--hover-bg);
2030
- border-color: var(--text-secondary);
2410
+ .diff-line-added .diff-line-number {
2411
+ background: #0a4027;
2031
2412
  }
2032
2413
 
2033
- .commit-icon {
2034
- width: 14px;
2035
- height: 14px;
2414
+ .diff-line-removed {
2415
+ background: #67060c;
2416
+ color: #f8d7da;
2036
2417
  }
2037
2418
 
2038
- /* General modal overlay */
2039
- .modal-overlay {
2040
- position: fixed;
2041
- top: 0;
2042
- left: 0;
2043
- right: 0;
2044
- bottom: 0;
2045
- background: rgba(0, 0, 0, 0.7);
2046
- display: flex;
2047
- align-items: center;
2048
- justify-content: center;
2049
- z-index: 1000;
2419
+ .diff-line-removed .diff-line-number {
2420
+ background: #4a0409;
2050
2421
  }
2051
2422
 
2052
- .modal-content {
2423
+ .diff-line-context {
2053
2424
  background: var(--bg-primary);
2054
- border: 1px solid var(--border-primary);
2055
- border-radius: 8px;
2056
- box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5);
2057
- padding: 20px;
2058
- max-width: 90vw;
2059
- max-height: 90vh;
2060
- overflow-y: auto;
2425
+ color: var(--text-primary);
2061
2426
  }
2062
2427
 
2063
- /* Clean commit modal */
2064
- .commit-modal-overlay {
2065
- position: fixed;
2066
- top: 0;
2067
- left: 0;
2068
- right: 0;
2069
- bottom: 0;
2070
- background: rgba(0, 0, 0, 0.7);
2071
- display: flex;
2072
- align-items: center;
2073
- justify-content: center;
2074
- z-index: 1000;
2428
+ [data-theme="light"] .diff-line-added {
2429
+ background: #d1e7dd;
2430
+ color: #055160;
2075
2431
  }
2076
2432
 
2077
- .commit-modal {
2078
- background: var(--bg-primary);
2079
- border: 1px solid var(--border-primary);
2080
- border-radius: 8px;
2081
- width: 500px;
2082
- max-width: 90vw;
2083
- max-height: 80vh;
2084
- overflow: hidden;
2085
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
2433
+ [data-theme="light"] .diff-line-added .diff-line-number {
2434
+ background: #badbcc;
2086
2435
  }
2087
2436
 
2088
- .commit-modal-header {
2089
- padding: 16px 20px;
2090
- border-bottom: 1px solid var(--border-primary);
2091
- background: var(--bg-secondary);
2092
- display: flex;
2093
- align-items: center;
2094
- justify-content: space-between;
2437
+ [data-theme="light"] .diff-line-removed {
2438
+ background: #f8d7da;
2439
+ color: #721c24;
2095
2440
  }
2096
2441
 
2097
- .commit-modal-header h3 {
2098
- margin: 0;
2099
- font-size: 16px;
2100
- font-weight: 600;
2101
- color: var(--text-primary);
2442
+ [data-theme="light"] .diff-line-removed .diff-line-number {
2443
+ background: #f1aeb5;
2102
2444
  }
2103
2445
 
2104
- .modal-close {
2105
- background: none;
2106
- border: none;
2107
- font-size: 20px;
2108
- color: var(--text-secondary);
2109
- cursor: pointer;
2110
- padding: 0;
2111
- width: 24px;
2112
- height: 24px;
2446
+ .diff-stats {
2113
2447
  display: flex;
2448
+ gap: 16px;
2114
2449
  align-items: center;
2115
- justify-content: center;
2116
- border-radius: 4px;
2450
+ font-size: 12px;
2117
2451
  }
2118
2452
 
2119
- .modal-close:hover {
2120
- background: var(--bg-tertiary);
2121
- color: var(--text-primary);
2453
+ .diff-stat {
2454
+ display: flex;
2455
+ align-items: center;
2456
+ gap: 4px;
2122
2457
  }
2123
2458
 
2124
- .commit-modal-body {
2125
- padding: 20px;
2126
- max-height: 50vh;
2127
- overflow-y: auto;
2459
+ .diff-stat-added {
2460
+ color: #28a745;
2128
2461
  }
2129
2462
 
2130
- .changed-files h4 {
2131
- margin: 0 0 12px 0;
2132
- font-size: 14px;
2133
- font-weight: 600;
2134
- color: var(--text-primary);
2463
+ .diff-stat-removed {
2464
+ color: #dc3545;
2135
2465
  }
2136
2466
 
2137
- .file-list {
2138
- list-style: none;
2139
- margin: 0 0 20px 0;
2467
+ /* Clean GitHub-style diff */
2468
+ .diff-container {
2469
+ width: 100%;
2470
+ margin: 0;
2140
2471
  padding: 0;
2141
- border: 1px solid var(--border-primary);
2142
- border-radius: 6px;
2143
- overflow: hidden;
2472
+ background: var(--bg-primary);
2473
+ overflow-x: auto;
2474
+ overflow-y: visible;
2144
2475
  }
2145
2476
 
2146
- .file-item {
2477
+ .diff-content {
2147
2478
  padding: 0;
2148
- border-bottom: 1px solid var(--border-secondary);
2149
- font-size: 13px;
2479
+ min-width: 100%;
2480
+ display: block;
2150
2481
  }
2151
2482
 
2152
- .file-item:last-child {
2153
- border-bottom: none;
2483
+ .raw-diff-container {
2484
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
2485
+ font-size: 12px;
2486
+ line-height: 20px;
2487
+ font-weight: 400;
2488
+ min-width: max-content;
2154
2489
  }
2155
2490
 
2156
- .file-checkbox-label {
2491
+ /* Diff line with two line number columns + content */
2492
+ .diff-line {
2157
2493
  display: flex;
2158
- align-items: center;
2159
- gap: 8px;
2160
- padding: 8px 12px;
2161
- cursor: pointer;
2162
- transition: background-color 0.15s ease;
2494
+ min-height: 20px;
2495
+ line-height: 20px;
2496
+ color: var(--text-primary);
2497
+ transition: background-color 0.1s ease;
2498
+ align-items: stretch;
2163
2499
  }
2164
2500
 
2165
- .file-checkbox-label:hover {
2166
- background: var(--bg-tertiary);
2501
+ .diff-line:hover {
2502
+ background-color: var(--hover-bg);
2167
2503
  }
2168
2504
 
2169
- .file-checkbox {
2170
- appearance: none;
2171
- width: 16px;
2172
- height: 16px;
2173
- border: 2px solid var(--border-primary);
2174
- border-radius: 3px;
2175
- background: var(--bg-primary);
2176
- cursor: pointer;
2177
- position: relative;
2178
- transition: all 0.15s ease;
2505
+ /* Line number columns - two side by side */
2506
+ .diff-line-number {
2179
2507
  display: inline-block;
2180
- vertical-align: middle;
2181
- }
2182
-
2183
- .file-checkbox:hover {
2184
- border-color: var(--link-color);
2508
+ min-width: 50px;
2509
+ max-width: 50px;
2510
+ padding: 0 8px;
2511
+ text-align: right;
2512
+ color: var(--text-secondary);
2185
2513
  background: var(--bg-secondary);
2514
+ user-select: none;
2515
+ flex-shrink: 0;
2516
+ font-variant-numeric: tabular-nums;
2517
+ border-right: 1px solid var(--border-primary);
2186
2518
  }
2187
2519
 
2188
- .file-checkbox:focus {
2189
- outline: 2px solid var(--link-color);
2190
- outline-offset: 2px;
2520
+ .diff-line-number.old {
2521
+ border-right: none;
2191
2522
  }
2192
2523
 
2193
- .file-checkbox:checked {
2194
- background: var(--link-color);
2195
- border-color: var(--link-color);
2524
+ .diff-line-number.new {
2525
+ border-right: 1px solid var(--border-primary);
2196
2526
  }
2197
2527
 
2198
- .file-checkbox:checked::after {
2199
- content: '';
2200
- position: absolute;
2201
- left: 50%;
2202
- top: 50%;
2203
- transform: translate(-50%, -50%) rotate(45deg);
2204
- width: 3px;
2205
- height: 6px;
2206
- border: solid white;
2207
- border-width: 0 2px 2px 0;
2208
- display: block;
2528
+ /* Empty line numbers for headers/hunks */
2529
+ .diff-line-number:empty::before {
2530
+ content: '\00a0'; /* Non-breaking space to maintain height */
2209
2531
  }
2210
2532
 
2211
- .file-status {
2212
- font-weight: 600;
2213
- color: var(--text-secondary);
2214
- min-width: 80px;
2533
+ /* Content area - takes remaining space */
2534
+ .diff-line-content {
2535
+ padding: 0 10px;
2536
+ white-space: pre;
2537
+ overflow-x: auto;
2538
+ flex: 1;
2539
+ min-width: 0;
2215
2540
  }
2216
2541
 
2217
- .file-name {
2218
- color: var(--text-primary);
2219
- font-family: ui-monospace, monospace;
2220
- flex: 1;
2542
+ /* Different line types - GitHub-style subtle backgrounds */
2543
+ .diff-line-added {
2544
+ background: rgba(46, 160, 67, 0.15);
2221
2545
  }
2222
2546
 
2223
- .directory-group {
2224
- padding: 8px 12px 4px;
2225
- background: var(--bg-secondary);
2226
- color: var(--text-primary);
2227
- font-size: 12px;
2228
- font-weight: 600;
2229
- border-bottom: none;
2547
+ .diff-line-added .diff-line-number {
2548
+ background: rgba(46, 160, 67, 0.1);
2230
2549
  }
2231
2550
 
2232
- .folder-icon {
2233
- width: 14px;
2234
- height: 14px;
2235
- margin-right: 6px;
2236
- vertical-align: middle;
2237
- fill: var(--text-secondary);
2551
+ .diff-line-removed {
2552
+ background: rgba(248, 81, 73, 0.15);
2238
2553
  }
2239
2554
 
2240
- .file-item.indented .file-checkbox-label {
2241
- padding-left: 24px;
2555
+ .diff-line-removed .diff-line-number {
2556
+ background: rgba(248, 81, 73, 0.1);
2242
2557
  }
2243
2558
 
2244
- #modal-commit-message {
2245
- width: 100%;
2246
- min-height: 80px;
2247
- padding: 12px;
2248
- border: 1px solid var(--border-primary);
2249
- border-radius: 6px;
2559
+ .diff-line-context {
2250
2560
  background: var(--bg-primary);
2251
- color: var(--text-primary);
2252
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
2253
- font-size: 14px;
2254
- line-height: 1.4;
2255
- resize: vertical;
2256
- box-sizing: border-box;
2257
2561
  }
2258
2562
 
2259
- #modal-commit-message:focus {
2260
- outline: none;
2261
- border-color: var(--link-color);
2262
- box-shadow: 0 0 0 3px rgba(88, 166, 255, 0.1);
2563
+ .diff-line-hunk {
2564
+ background: rgba(88, 166, 255, 0.1);
2565
+ font-weight: 600;
2566
+ color: #58a6ff;
2263
2567
  }
2264
2568
 
2265
- .commit-modal-footer {
2266
- padding: 16px 20px;
2267
- border-top: 1px solid var(--border-primary);
2569
+ .diff-line-hunk .diff-line-number {
2570
+ background: rgba(88, 166, 255, 0.05);
2571
+ }
2572
+
2573
+ .diff-line-header {
2268
2574
  background: var(--bg-secondary);
2269
- display: flex;
2270
- align-items: center;
2271
- justify-content: flex-end;
2272
- gap: 12px;
2575
+ color: var(--text-secondary);
2576
+ font-weight: 500;
2577
+ opacity: 0.9;
2273
2578
  }
2274
2579
 
2275
- .btn-cancel {
2276
- background: none;
2277
- border: 1px solid var(--border-primary);
2278
- color: var(--text-primary);
2279
- border-radius: 6px;
2280
- padding: 8px 16px;
2281
- font-size: 14px;
2282
- cursor: pointer;
2283
- transition: all 0.15s ease;
2580
+ .diff-line-header .diff-line-number {
2581
+ background: var(--bg-secondary);
2284
2582
  }
2285
2583
 
2286
- .btn-cancel:hover {
2287
- background: var(--bg-tertiary);
2584
+ /* Light theme adjustments */
2585
+ [data-theme="light"] .diff-line-added {
2586
+ background: rgba(46, 160, 67, 0.1);
2288
2587
  }
2289
2588
 
2290
- .btn-commit {
2291
- background: var(--bg-tertiary);
2292
- color: var(--text-primary);
2293
- border: 1px solid var(--border-primary);
2294
- border: none;
2295
- border-radius: 6px;
2296
- padding: 8px 16px;
2297
- font-size: 14px;
2298
- font-weight: 500;
2299
- cursor: pointer;
2300
- transition: all 0.15s ease;
2589
+ [data-theme="light"] .diff-line-added .diff-line-number {
2590
+ background: rgba(46, 160, 67, 0.08);
2301
2591
  }
2302
2592
 
2303
- .btn-commit:hover:not(:disabled) {
2304
- background: var(--hover-bg);
2305
- border-color: var(--text-secondary);
2593
+ [data-theme="light"] .diff-line-removed {
2594
+ background: rgba(248, 81, 73, 0.1);
2306
2595
  }
2307
2596
 
2308
- .btn-commit:disabled {
2309
- background: var(--bg-tertiary);
2597
+ [data-theme="light"] .diff-line-removed .diff-line-number {
2598
+ background: rgba(248, 81, 73, 0.08);
2599
+ }
2600
+
2601
+ [data-theme="light"] .diff-line-hunk {
2602
+ background: rgba(9, 105, 218, 0.1);
2603
+ color: #0969da;
2604
+ }
2605
+
2606
+ [data-theme="light"] .diff-line-hunk .diff-line-number {
2607
+ background: rgba(9, 105, 218, 0.05);
2608
+ }
2609
+
2610
+ .no-changes {
2611
+ padding: 40px;
2612
+ text-align: center;
2310
2613
  color: var(--text-secondary);
2311
- cursor: not-allowed;
2614
+ font-style: italic;
2312
2615
  }
2313
2616
 
2314
2617
  /* Git status column - minimal spacing */
@@ -2339,6 +2642,7 @@ main {
2339
2642
  position: relative !important;
2340
2643
  display: block !important;
2341
2644
  border-radius: 0 0 6px 6px;
2645
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
2342
2646
  }
2343
2647
 
2344
2648
  .monaco-editor-container .monaco-editor {