difflicious 0.1.0__py3-none-any.whl

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,885 @@
1
+ /* Difflicious - Git Diff Visualization Styles */
2
+
3
+ :root {
4
+ --color-primary: #2563eb;
5
+ --color-primary-hover: #1d4ed8;
6
+ --color-success: #059669;
7
+ --color-danger: #dc2626;
8
+ --color-warning: #d97706;
9
+ --color-bg: #ffffff;
10
+ --color-bg-secondary: #f8fafc;
11
+ --color-bg-tertiary: #f1f5f9;
12
+ --color-text: #1e293b;
13
+ --color-text-secondary: #64748b;
14
+ --color-border: #e2e8f0;
15
+ --color-border-hover: #cbd5e1;
16
+
17
+ /* Diff-specific colors */
18
+ --color-diff-addition-bg: #bbf7d0;
19
+ --color-diff-addition-text: #059669;
20
+ --color-diff-deletion-bg: #fecaca;
21
+ --color-diff-deletion-text: #dc2626;
22
+ --color-diff-context-bg: #ffffff;
23
+ --color-diff-context-text: #64748b;
24
+ --color-expanded-context-bg: #f9fafb;
25
+
26
+ /* Neutral color variables for gray-* classes */
27
+ --color-neutral-50: #f9fafb;
28
+ --color-neutral-100: #f3f4f6;
29
+ --color-neutral-200: #e5e7eb;
30
+ --color-neutral-300: #d1d5db;
31
+ --color-neutral-400: #9ca3af;
32
+ --color-neutral-500: #6b7280;
33
+ --color-neutral-600: #4b5563;
34
+ --color-neutral-700: #374151;
35
+ --color-neutral-800: #1f2937;
36
+ --color-neutral-900: #111827;
37
+
38
+ /* Semantic color backgrounds */
39
+ --color-danger-bg: #fecaca;
40
+ --color-danger-bg-50: #fecaca;
41
+ --color-danger-bg-100: #fca5a5;
42
+ --color-danger-bg-200: #f87171;
43
+ --color-danger-bg-300: #ef4444;
44
+ --color-danger-text: #ef4444;
45
+ --color-danger-text-strong: #dc2626;
46
+ --color-danger-text-600: #dc2626;
47
+ --color-danger-text-500: #ef4444;
48
+ --color-danger-text-700: #b91c1c;
49
+ --color-success-bg: #bbf7d0;
50
+ --color-success-bg-50: #bbf7d0;
51
+ --color-success-bg-100: #86efac;
52
+ --color-success-bg-300: #4ade80;
53
+ --color-success-text: #059669;
54
+ --color-success-text-600: #059669;
55
+ --color-success-text-800: #065f46;
56
+ --color-warning-bg-100: #fef3c7;
57
+ --color-warning-text-800: #92400e;
58
+ --color-info-bg: #eff6ff;
59
+ --color-info-bg-50: #eff6ff;
60
+ --color-info-bg-100: #dbeafe;
61
+ --color-info-bg-200: #bfdbfe;
62
+ --color-info-text: #1e40af;
63
+ --color-info-text-600: #2563eb;
64
+ --color-info-text-800: #1e40af;
65
+
66
+ /* Focus and ring colors */
67
+ --color-focus-ring: #3b82f6;
68
+ --color-focus-border: #2563eb;
69
+
70
+ /* Additional info colors for expansion areas */
71
+ --color-info-bg-300: #93c5fd;
72
+
73
+ --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
74
+ --font-family-mono: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace;
75
+
76
+ --spacing-xs: 0.25rem;
77
+ --spacing-sm: 0.5rem;
78
+ --spacing-md: 1rem;
79
+ --spacing-lg: 1.5rem;
80
+ --spacing-xl: 2rem;
81
+
82
+ --border-radius: 0.5rem;
83
+ --border-radius-sm: 0.25rem;
84
+ --box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
85
+ }
86
+
87
+ /* Dark theme */
88
+ [data-theme="dark"] {
89
+ --color-primary: #3b82f6;
90
+ --color-primary-hover: #2563eb;
91
+ --color-success: #10b981;
92
+ --color-danger: #ef4444;
93
+ --color-warning: #f59e0b;
94
+ --color-bg: #0f172a;
95
+ --color-bg-secondary: #1e293b;
96
+ --color-bg-tertiary: #334155;
97
+ --color-text: #f1f5f9;
98
+ --color-text-secondary: #94a3b8;
99
+ --color-border: #334155;
100
+ --color-border-hover: #475569;
101
+
102
+ /* Diff-specific colors for dark mode */
103
+ --color-diff-addition-bg: #2e5e44;
104
+ --color-diff-addition-text: #4ade80;
105
+ --color-diff-deletion-bg: #4e2f44;
106
+ --color-diff-deletion-text: #f87171;
107
+ --color-diff-context-bg: #020408;
108
+ --color-diff-context-text: #94a3b8;
109
+ --color-expanded-context-bg: #1e293b;
110
+
111
+ /* Dark theme neutral colors */
112
+ --color-neutral-50: #1e293b;
113
+ --color-neutral-100: #334155;
114
+ --color-neutral-200: #475569;
115
+ --color-neutral-300: #64748b;
116
+ --color-neutral-400: #94a3b8;
117
+ --color-neutral-500: #64748b;
118
+ --color-neutral-600: #475569;
119
+ --color-neutral-700: #cbd5e1;
120
+ --color-neutral-800: #e2e8f0;
121
+ --color-neutral-900: #f1f5f9;
122
+
123
+ /* Dark theme semantic colors */
124
+ --color-danger-bg: #4e2f44;
125
+ --color-danger-bg-50: #4e2f44;
126
+ --color-danger-bg-100: #5e3f54;
127
+ --color-danger-bg-200: #6e4f64;
128
+ --color-danger-bg-300: #7e5f74;
129
+ --color-danger-text: #f87171;
130
+ --color-danger-text-strong: #fca5a5;
131
+ --color-danger-text-600: #f87171;
132
+ --color-danger-text-500: #f87171;
133
+ --color-danger-text-700: #fca5a5;
134
+ --color-success-bg: #2e5e44;
135
+ --color-success-bg-50: #2e5e44;
136
+ --color-success-bg-100: #3e6e54;
137
+ --color-success-bg-300: #4e7e64;
138
+ --color-success-text: #10b981;
139
+ --color-success-text-600: #10b981;
140
+ --color-success-text-800: #34d399;
141
+ --color-warning-bg-100: #fef3c7;
142
+ --color-warning-text-800: #ca8a04;
143
+ --color-info-bg: #1e293b;
144
+ --color-info-bg-50: #1e293b;
145
+ --color-info-bg-100: #334155;
146
+ --color-info-bg-200: #475569;
147
+ --color-info-text: #60a5fa;
148
+ --color-info-text-600: #3b82f6;
149
+ --color-info-text-800: #60a5fa;
150
+
151
+ /* Focus and ring colors for dark mode */
152
+ --color-focus-ring: #60a5fa;
153
+ --color-focus-border: #3b82f6;
154
+
155
+ /* Additional info colors for expansion areas in dark mode */
156
+ --color-info-bg-300: #64748b;
157
+ }
158
+
159
+ * {
160
+ box-sizing: border-box;
161
+ }
162
+
163
+ body {
164
+ margin: 0;
165
+ font-family: var(--font-family);
166
+ background-color: var(--color-bg);
167
+ color: var(--color-text);
168
+ line-height: 1.6;
169
+ }
170
+
171
+ .container {
172
+ max-width: 1200px;
173
+ margin: 0 auto;
174
+ padding: 0 var(--spacing-md);
175
+ }
176
+
177
+ /* Header */
178
+ .header {
179
+ background-color: var(--color-bg-secondary);
180
+ border-bottom: 1px solid var(--color-border);
181
+ padding: var(--spacing-md) 0;
182
+ }
183
+
184
+ .header .container {
185
+ display: flex;
186
+ justify-content: space-between;
187
+ align-items: center;
188
+ }
189
+
190
+ .logo {
191
+ margin: 0;
192
+ }
193
+
194
+ .logo-text {
195
+ font-size: 1.5rem;
196
+ font-weight: 700;
197
+ color: var(--color-primary);
198
+ }
199
+
200
+ .logo-subtitle {
201
+ font-size: 0.875rem;
202
+ color: var(--color-text-secondary);
203
+ font-weight: 400;
204
+ margin-left: var(--spacing-sm);
205
+ }
206
+
207
+ .status-bar {
208
+ display: flex;
209
+ gap: var(--spacing-lg);
210
+ }
211
+
212
+ .status-item {
213
+ display: flex;
214
+ gap: var(--spacing-xs);
215
+ align-items: center;
216
+ }
217
+
218
+ .status-label {
219
+ font-size: 0.875rem;
220
+ color: var(--color-text-secondary);
221
+ }
222
+
223
+ .status-value {
224
+ font-size: 0.875rem;
225
+ font-weight: 600;
226
+ color: var(--color-text);
227
+ font-family: var(--font-family-mono);
228
+ }
229
+
230
+ /* Main Content */
231
+ .main {
232
+ padding: var(--spacing-xl) 0;
233
+ }
234
+
235
+ /* Controls */
236
+ .controls {
237
+ display: flex;
238
+ gap: var(--spacing-lg);
239
+ align-items: center;
240
+ padding: var(--spacing-md);
241
+ background-color: var(--color-bg-secondary);
242
+ border: 1px solid var(--color-border);
243
+ border-radius: var(--border-radius);
244
+ margin-bottom: var(--spacing-lg);
245
+ }
246
+
247
+ .control-group {
248
+ display: flex;
249
+ align-items: center;
250
+ gap: var(--spacing-sm);
251
+ }
252
+
253
+ .control-label {
254
+ font-size: 0.875rem;
255
+ color: var(--color-text);
256
+ cursor: pointer;
257
+ display: flex;
258
+ align-items: center;
259
+ gap: var(--spacing-xs);
260
+ }
261
+
262
+ .search-input {
263
+ padding: var(--spacing-sm) var(--spacing-md);
264
+ border: 1px solid var(--color-border);
265
+ border-radius: var(--border-radius-sm);
266
+ font-size: 0.875rem;
267
+ min-width: 200px;
268
+ }
269
+
270
+ .search-input:focus {
271
+ outline: none;
272
+ border-color: var(--color-primary);
273
+ box-shadow: 0 0 0 3px rgb(37 99 235 / 0.1);
274
+ }
275
+
276
+ .btn {
277
+ padding: var(--spacing-sm) var(--spacing-md);
278
+ border: none;
279
+ border-radius: var(--border-radius-sm);
280
+ font-size: 0.875rem;
281
+ cursor: pointer;
282
+ display: inline-flex;
283
+ align-items: center;
284
+ gap: var(--spacing-xs);
285
+ transition: all 0.2s;
286
+ }
287
+
288
+ .btn-primary {
289
+ background-color: var(--color-primary);
290
+ color: white;
291
+ }
292
+
293
+ .btn-primary:hover {
294
+ background-color: var(--color-primary-hover);
295
+ }
296
+
297
+ /* Diff Container */
298
+ .diff-container {
299
+ border: 1px solid var(--color-border);
300
+ border-radius: var(--border-radius);
301
+ background-color: var(--color-bg);
302
+ overflow: hidden;
303
+ }
304
+
305
+ .loading-state,
306
+ .empty-state {
307
+ padding: var(--spacing-xl);
308
+ text-align: center;
309
+ color: var(--color-text-secondary);
310
+ }
311
+
312
+ .empty-state h2 {
313
+ margin: 0 0 var(--spacing-md) 0;
314
+ font-size: 1.25rem;
315
+ color: var(--color-text);
316
+ }
317
+
318
+ .empty-state p {
319
+ margin: var(--spacing-sm) 0;
320
+ }
321
+
322
+ /* Diff Files */
323
+ .diff-file {
324
+ border-bottom: 1px solid var(--color-border);
325
+ }
326
+
327
+ .diff-file:last-child {
328
+ border-bottom: none;
329
+ }
330
+
331
+ .diff-file-header {
332
+ padding: var(--spacing-md);
333
+ background-color: var(--color-bg-secondary);
334
+ cursor: pointer;
335
+ display: flex;
336
+ align-items: center;
337
+ justify-content: space-between;
338
+ transition: background-color 0.2s;
339
+ }
340
+
341
+ .diff-file-header:hover {
342
+ background-color: var(--color-bg-tertiary);
343
+ }
344
+
345
+ .diff-file-name {
346
+ font-family: var(--font-family-mono);
347
+ font-size: 0.875rem;
348
+ font-weight: 600;
349
+ }
350
+
351
+ .diff-file-stats {
352
+ display: flex;
353
+ gap: var(--spacing-sm);
354
+ font-family: var(--font-family-mono);
355
+ font-size: 0.75rem;
356
+ }
357
+
358
+ .additions {
359
+ color: var(--color-success);
360
+ font-weight: 600;
361
+ }
362
+
363
+ .deletions {
364
+ color: var(--color-danger);
365
+ font-weight: 600;
366
+ }
367
+
368
+ .expand-icon {
369
+ color: var(--color-text-secondary);
370
+ font-size: 0.75rem;
371
+ width: 1rem;
372
+ text-align: center;
373
+ }
374
+
375
+ .diff-content {
376
+ border-top: 1px solid var(--color-border);
377
+ }
378
+
379
+ .line-content {
380
+ /* Use normal whitespace; we explicitly emit NBSP for leading indent */
381
+ white-space: normal;
382
+ font-family: var(--font-family-mono);
383
+ line-height: 1.5;
384
+ min-height: 1.5rem;
385
+ }
386
+
387
+ /* Ensure consistent diff line heights and full background coverage */
388
+ .diff-line {
389
+ min-height: 1.875rem;
390
+ /* 30px at text-xs with padding */
391
+ align-items: stretch;
392
+ /* Ensure both flex children are same height */
393
+ }
394
+
395
+ .diff-line .line-left,
396
+ .diff-line .line-right {
397
+ display: flex;
398
+ flex-direction: column;
399
+ /* Ensure background colors fill full height */
400
+ min-height: 100%;
401
+ }
402
+
403
+ .diff-line .flex {
404
+ min-height: inherit;
405
+ flex: 1;
406
+ /* Ensure the inner flex container fills its parent completely */
407
+ height: 100%;
408
+ }
409
+
410
+ .diff-line .line-num {
411
+ line-height: 1.5;
412
+ /* Ensure line numbers stretch to fill their container */
413
+ display: flex;
414
+ align-items: center;
415
+ justify-content: flex-end;
416
+ }
417
+
418
+ .diff-line .line-content {
419
+ line-height: 1.5;
420
+ min-height: 1.875rem;
421
+ /* Match the diff-line min-height */
422
+ display: flex;
423
+ align-items: flex-start;
424
+ /* Ensure content area fills available space */
425
+ flex: 1;
426
+ /* Force equal height regardless of content */
427
+ height: 100%;
428
+ box-sizing: border-box;
429
+ }
430
+
431
+ .diff-code {
432
+ margin: 0;
433
+ padding: var(--spacing-md);
434
+ font-family: var(--font-family-mono);
435
+ font-size: 0.8125rem;
436
+ line-height: 1.5;
437
+ background-color: var(--color-bg);
438
+ overflow-x: auto;
439
+ white-space: pre;
440
+ }
441
+
442
+ /* Diff syntax highlighting */
443
+ .diff-addition {
444
+ background-color: var(--color-diff-addition-bg);
445
+ color: var(--color-diff-addition-text);
446
+ }
447
+
448
+ .diff-deletion {
449
+ background-color: var(--color-diff-deletion-bg);
450
+ color: var(--color-diff-deletion-text);
451
+ }
452
+
453
+ .diff-context {
454
+ color: var(--color-diff-context-text);
455
+ }
456
+
457
+ /* Dark theme: Make diff line backgrounds darker for better contrast */
458
+ [data-theme="dark"] .diff-line {
459
+ background-color: var(--color-diff-context-bg);
460
+ }
461
+
462
+ /* Don't set background on line-content - let parent elements handle it */
463
+
464
+ /* Dark theme: Make line numbers brighter version of diff line background */
465
+ [data-theme="dark"] .diff-line .line-num {
466
+ background-color: #1a2332 !important;
467
+ color: #94a3b8;
468
+ }
469
+
470
+ /* Simple highlight for filename search */
471
+ .search-highlight {
472
+ outline: 2px solid var(--color-primary);
473
+ box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.2);
474
+ }
475
+
476
+ /* Expanded Context Styles */
477
+ .expanded-context {
478
+ background-color: var(--color-expanded-context-bg);
479
+ opacity: 0.95;
480
+ }
481
+
482
+ .expanded-context .diff-line {
483
+ background-color: var(--color-expanded-context-bg);
484
+ }
485
+
486
+ .expanded-context .line-num {
487
+ background-color: var(--color-neutral-100) !important;
488
+ color: var(--color-neutral-500);
489
+ font-style: normal;
490
+ }
491
+
492
+ .expanded-context .line-content {
493
+ color: var(--color-neutral-700);
494
+ }
495
+
496
+ /* Expanded context animation - simple fade in */
497
+ .expanded-context {
498
+ animation: fadeIn 0.2s ease-out;
499
+ }
500
+
501
+ @keyframes fadeIn {
502
+ from {
503
+ opacity: 0;
504
+ }
505
+
506
+ to {
507
+ opacity: 0.95;
508
+ }
509
+ }
510
+
511
+ /* No newline indicator styles */
512
+ .no-newline-indicator {
513
+ color: var(--color-danger);
514
+ font-weight: 900;
515
+ margin-left: 0.25rem;
516
+ opacity: 1;
517
+ font-size: 1rem;
518
+ display: inline-block;
519
+ vertical-align: baseline;
520
+ text-shadow: 0 0 2px rgba(220, 38, 38, 0.5);
521
+ background-color: rgba(220, 38, 38, 0.1);
522
+ padding: 0.125rem 0.25rem;
523
+ border-radius: 0.25rem;
524
+ border: 1px solid rgba(220, 38, 38, 0.3);
525
+ }
526
+
527
+ .no-newline-indicator:hover {
528
+ opacity: 1;
529
+ background-color: rgba(220, 38, 38, 0.2);
530
+ transform: scale(1.1);
531
+ transition: all 0.2s ease;
532
+ }
533
+
534
+ /* Tooltip removed for accessibility. Using aria-label instead for better screen reader support. */
535
+
536
+ /* Dark theme syntax highlighting improvements */
537
+ [data-theme="dark"] .highlight {
538
+ background-color: var(--color-diff-context-bg) !important;
539
+ }
540
+
541
+ [data-theme="dark"] .highlight .hll {
542
+ background-color: #334155;
543
+ }
544
+
545
+ [data-theme="dark"] .highlight .c,
546
+ [data-theme="dark"] .highlight .cm,
547
+ [data-theme="dark"] .highlight .cp,
548
+ [data-theme="dark"] .highlight .c1,
549
+ [data-theme="dark"] .highlight .cs {
550
+ color: #64748b;
551
+ font-style: italic;
552
+ }
553
+
554
+ [data-theme="dark"] .highlight .k,
555
+ [data-theme="dark"] .highlight .kc,
556
+ [data-theme="dark"] .highlight .kd,
557
+ [data-theme="dark"] .highlight .kn,
558
+ [data-theme="dark"] .highlight .kp,
559
+ [data-theme="dark"] .highlight .kr,
560
+ [data-theme="dark"] .highlight .kt {
561
+ color: #f472b6;
562
+ font-weight: bold;
563
+ }
564
+
565
+ [data-theme="dark"] .highlight .s,
566
+ [data-theme="dark"] .highlight .sa,
567
+ [data-theme="dark"] .highlight .sb,
568
+ [data-theme="dark"] .highlight .sc,
569
+ [data-theme="dark"] .highlight .dl,
570
+ [data-theme="dark"] .highlight .s2,
571
+ [data-theme="dark"] .highlight .se,
572
+ [data-theme="dark"] .highlight .sh,
573
+ [data-theme="dark"] .highlight .si,
574
+ [data-theme="dark"] .highlight .sx,
575
+ [data-theme="dark"] .highlight .sr,
576
+ [data-theme="dark"] .highlight .s1,
577
+ [data-theme="dark"] .highlight .ss {
578
+ color: #a5f3fc;
579
+ }
580
+
581
+ [data-theme="dark"] .highlight .n,
582
+ [data-theme="dark"] .highlight .na,
583
+ [data-theme="dark"] .highlight .nb,
584
+ [data-theme="dark"] .highlight .bp,
585
+ [data-theme="dark"] .highlight .nc,
586
+ [data-theme="dark"] .highlight .no,
587
+ [data-theme="dark"] .highlight .nd,
588
+ [data-theme="dark"] .highlight .ni,
589
+ [data-theme="dark"] .highlight .ne,
590
+ [data-theme="dark"] .highlight .nf,
591
+ [data-theme="dark"] .highlight .nl,
592
+ [data-theme="dark"] .highlight .nn,
593
+ [data-theme="dark"] .highlight .nx,
594
+ [data-theme="dark"] .highlight .py,
595
+ [data-theme="dark"] .highlight .nt,
596
+ [data-theme="dark"] .highlight .nv,
597
+ [data-theme="dark"] .highlight .vc,
598
+ [data-theme="dark"] .highlight .vg,
599
+ [data-theme="dark"] .highlight .vi {
600
+ color: #f1f5f9;
601
+ }
602
+
603
+ [data-theme="dark"] .highlight .m,
604
+ [data-theme="dark"] .highlight .mb,
605
+ [data-theme="dark"] .highlight .mf,
606
+ [data-theme="dark"] .highlight .mh,
607
+ [data-theme="dark"] .highlight .mi,
608
+ [data-theme="dark"] .highlight .mo,
609
+ [data-theme="dark"] .highlight .il {
610
+ color: #fbbf24;
611
+ }
612
+
613
+ [data-theme="dark"] .highlight .o,
614
+ [data-theme="dark"] .highlight .ow {
615
+ color: #f1f5f9;
616
+ font-weight: bold;
617
+ }
618
+
619
+ [data-theme="dark"] .highlight .p {
620
+ color: #f1f5f9;
621
+ }
622
+
623
+ [data-theme="dark"] .highlight .err {
624
+ color: #f87171;
625
+ background-color: transparent;
626
+ }
627
+
628
+ [data-theme="dark"] .highlight .gd {
629
+ color: #f87171;
630
+ background-color: rgba(248, 113, 113, 0.1);
631
+ }
632
+
633
+ [data-theme="dark"] .highlight .ge {
634
+ color: #f1f5f9;
635
+ font-style: italic;
636
+ }
637
+
638
+ [data-theme="dark"] .highlight .gr {
639
+ color: #f87171;
640
+ }
641
+
642
+ [data-theme="dark"] .highlight .gh {
643
+ color: #94a3b8;
644
+ }
645
+
646
+ [data-theme="dark"] .highlight .gi {
647
+ color: #4ade80;
648
+ background-color: rgba(74, 222, 128, 0.1);
649
+ }
650
+
651
+ [data-theme="dark"] .highlight .go {
652
+ color: #64748b;
653
+ }
654
+
655
+ [data-theme="dark"] .highlight .gp {
656
+ color: #94a3b8;
657
+ }
658
+
659
+ [data-theme="dark"] .highlight .gs {
660
+ color: #f1f5f9;
661
+ font-weight: bold;
662
+ }
663
+
664
+ [data-theme="dark"] .highlight .gu {
665
+ color: #94a3b8;
666
+ }
667
+
668
+ [data-theme="dark"] .highlight .gt {
669
+ color: #f87171;
670
+ }
671
+
672
+ [data-theme="dark"] .highlight .kc,
673
+ [data-theme="dark"] .highlight .kd,
674
+ [data-theme="dark"] .highlight .kn,
675
+ [data-theme="dark"] .highlight .kp,
676
+ [data-theme="dark"] .highlight .kr,
677
+ [data-theme="dark"] .highlight .kt {
678
+ color: #f472b6;
679
+ font-weight: bold;
680
+ }
681
+
682
+ [data-theme="dark"] .highlight .na,
683
+ [data-theme="dark"] .highlight .nb,
684
+ [data-theme="dark"] .highlight .nc,
685
+ [data-theme="dark"] .highlight .no,
686
+ [data-theme="dark"] .highlight .nd,
687
+ [data-theme="dark"] .highlight .ni,
688
+ [data-theme="dark"] .highlight .ne,
689
+ [data-theme="dark"] .highlight .nf,
690
+ [data-theme="dark"] .highlight .nl,
691
+ [data-theme="dark"] .highlight .nn,
692
+ [data-theme="dark"] .highlight .nx,
693
+ [data-theme="dark"] .highlight .py,
694
+ [data-theme="dark"] .highlight .nt,
695
+ [data-theme="dark"] .highlight .nv,
696
+ [data-theme="dark"] .highlight .vc,
697
+ [data-theme="dark"] .highlight .vg,
698
+ [data-theme="dark"] .highlight .vi {
699
+ color: #60a5fa;
700
+ }
701
+
702
+ /* File header text truncation fixes */
703
+ .file-header {
704
+ min-width: 0;
705
+ overflow: hidden;
706
+ }
707
+
708
+ /* Force filename container to only take content width */
709
+ .file-header .flex-shrink {
710
+ flex-shrink: 1 !important;
711
+ max-width: fit-content !important;
712
+ flex-basis: auto !important;
713
+ }
714
+
715
+ .file-header .flex {
716
+ min-width: 0;
717
+ overflow: hidden;
718
+ }
719
+
720
+ .file-header .font-mono {
721
+ /* FIXME: Unsure where these came from, but they suck
722
+ overflow: hidden !important;
723
+ text-overflow: ellipsis !important;
724
+ white-space: nowrap !important;
725
+ */
726
+ display: block !important;
727
+ min-width: 0 !important;
728
+ }
729
+
730
+ /* Ensure navigation buttons stay visible */
731
+ .file-header .flex-shrink-0 {
732
+ flex-shrink: 0 !important;
733
+ min-width: fit-content !important;
734
+ }
735
+
736
+ /* Force truncation for hunk section headers */
737
+ .hunk-expansion .truncate {
738
+ overflow: hidden !important;
739
+ text-overflow: ellipsis !important;
740
+ white-space: nowrap !important;
741
+ display: block !important;
742
+ width: 100% !important;
743
+ }
744
+
745
+ .hunk-expansion .overflow-hidden {
746
+ overflow: hidden !important;
747
+ width: 100% !important;
748
+ }
749
+
750
+ /* Force proper flex behavior to match column structure */
751
+ .hunk-expansion .flex-1 {
752
+ flex: 1 1 0% !important;
753
+ min-width: 0 !important;
754
+ }
755
+
756
+ /* Add subtle highlight to expansion areas in dark mode */
757
+ [data-theme="dark"] .hunk-expansion {
758
+ background-color: #2d3748 !important;
759
+ border-top: 1px solid #4a5568 !important;
760
+ border-bottom: 1px solid #4a5568 !important;
761
+ }
762
+
763
+ [data-theme="dark"] .hunk-expansion .bg-info-bg-100 {
764
+ background-color: #374151 !important;
765
+ }
766
+
767
+ [data-theme="dark"] .hunk-expansion .bg-info-bg-200 {
768
+ background-color: #4b5563 !important;
769
+ }
770
+
771
+ /* Force diff colors to be more prominent */
772
+ .diff-line .line-left.bg-red-50 {
773
+ background-color: #fecaca !important;
774
+ }
775
+
776
+ .diff-line .line-right.bg-green-50 {
777
+ background-color: #bbf7d0 !important;
778
+ }
779
+
780
+ /* Dark theme: Force diff colors to override general background */
781
+ [data-theme="dark"] .diff-line .line-left.bg-red-50,
782
+ [data-theme="dark"] .diff-line .line-left.dark\\:bg-red-900\\/20 {
783
+ background-color: #4e2f44 !important;
784
+ }
785
+
786
+ [data-theme="dark"] .diff-line .line-right.bg-green-50,
787
+ [data-theme="dark"] .diff-line .line-right.dark\\:bg-green-900\\/20 {
788
+ background-color: #2e5e44 !important;
789
+ }
790
+
791
+ /* Additional dark mode diff color rules with higher specificity */
792
+ [data-theme="dark"] .diff-line .line-left[class*="bg-red"] {
793
+ background-color: #4e2f44 !important;
794
+ }
795
+
796
+ [data-theme="dark"] .diff-line .line-right[class*="bg-green"] {
797
+ background-color: #2e5e44 !important;
798
+ }
799
+
800
+ /* Direct targeting of the exact classes used in the template */
801
+ [data-theme="dark"] .line-left.dark\\:bg-red-900\\/20 {
802
+ background-color: #4e2f44 !important;
803
+ }
804
+
805
+ [data-theme="dark"] .line-right.dark\\:bg-green-900\\/20 {
806
+ background-color: #2e5e44 !important;
807
+ }
808
+
809
+
810
+
811
+
812
+
813
+ /* Most direct approach: override all dark mode backgrounds for diff lines */
814
+ [data-theme="dark"] .diff-line .line-left {
815
+ background-color: var(--color-diff-context-bg) !important;
816
+ }
817
+
818
+ [data-theme="dark"] .diff-line .line-right {
819
+ background-color: var(--color-diff-context-bg) !important;
820
+ }
821
+
822
+ /* Then force the specific colors for additions/deletions */
823
+ [data-theme="dark"] .diff-line .line-left.bg-red-50,
824
+ [data-theme="dark"] .diff-line .line-left.dark\\:bg-red-900\\/20,
825
+ [data-theme="dark"] .diff-line .line-left[class*="red"] {
826
+ background-color: #4e2f44 !important;
827
+ }
828
+
829
+ [data-theme="dark"] .diff-line .line-right.bg-green-50,
830
+ [data-theme="dark"] .diff-line .line-right.dark\\:bg-green-900\\/20,
831
+ [data-theme="dark"] .diff-line .line-right[class*="green"] {
832
+ background-color: #2e5e44 !important;
833
+ }
834
+
835
+ /* Strong colors for line numbers in dark mode */
836
+ [data-theme="dark"] .line-num[class*="bg-red"] {
837
+ background-color: #5e2f34 !important;
838
+ }
839
+
840
+ [data-theme="dark"] .line-num[class*="bg-green"] {
841
+ background-color: #3e6e54 !important;
842
+ }
843
+
844
+ /* Softer colors for content areas in dark mode */
845
+ [data-theme="dark"] .line-content[class*="bg-red"] {
846
+ background-color: #2a1f24 !important;
847
+ }
848
+
849
+ [data-theme="dark"] .line-content[class*="bg-green"] {
850
+ background-color: #2e3f34 !important;
851
+ }
852
+
853
+ /* Target specific line types based on content */
854
+ [data-theme="dark"] .diff-line.line-deletion .line-left {
855
+ background-color: #4e2f44 !important;
856
+ }
857
+
858
+ [data-theme="dark"] .diff-line.line-addition .line-right {
859
+ background-color: #2e5e44 !important;
860
+ }
861
+
862
+
863
+
864
+ /* Responsive Design */
865
+ @media (max-width: 768px) {
866
+ .header .container {
867
+ flex-direction: column;
868
+ gap: var(--spacing-md);
869
+ align-items: flex-start;
870
+ }
871
+
872
+ .controls {
873
+ flex-direction: column;
874
+ align-items: stretch;
875
+ }
876
+
877
+ .control-group {
878
+ justify-content: space-between;
879
+ }
880
+
881
+ .search-input {
882
+ min-width: auto;
883
+ flex: 1;
884
+ }
885
+ }