gh-here 3.1.0 → 3.2.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 DELETED
@@ -1,4480 +0,0 @@
1
- :root {
2
- /* Elite Dark Theme - Beyond GitHub */
3
- --bg-primary: #0a0e14;
4
- --bg-secondary: #13171d;
5
- --bg-tertiary: #1a1f26;
6
- --bg-elevated: #1f252d;
7
- --bg-card: #161b22;
8
- --border-primary: #2d333b;
9
- --border-secondary: #21262d;
10
- --border-subtle: #1c2128;
11
- --text-primary: #eef2f6;
12
- --text-secondary: #9ca3af;
13
- --text-tertiary: #6b7280;
14
- --text-accent: #f8fafc;
15
- --link-color: #60a5fa;
16
- --link-hover: #93c5fd;
17
- --hover-bg: #1e242b;
18
- --hover-bg-strong: #252b33;
19
-
20
- /* Accent colors for status */
21
- --accent-success: #10b981;
22
- --accent-warning: #f59e0b;
23
- --accent-error: #ef4444;
24
- --accent-info: #3b82f6;
25
-
26
- /* Shadows - Enhanced depth system */
27
- --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
28
- --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.1);
29
- --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.15);
30
- --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.2);
31
- --shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.25);
32
- --shadow-2xl: 0 24px 64px rgba(0, 0, 0, 0.3);
33
- --shadow-inner: inset 0 1px 2px rgba(0, 0, 0, 0.1);
34
- --shadow-glow: 0 0 20px rgba(96, 165, 250, 0.15);
35
-
36
- /* Transitions - Refined timing */
37
- --transition-fast: 120ms cubic-bezier(0.4, 0, 0.2, 1);
38
- --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
39
- --transition-slow: 350ms cubic-bezier(0.4, 0, 0.2, 1);
40
- --transition-bounce: 400ms cubic-bezier(0.68, -0.55, 0.265, 1.55);
41
-
42
- /* Border radius - More generous */
43
- --radius-xs: 3px;
44
- --radius-sm: 6px;
45
- --radius-md: 8px;
46
- --radius-lg: 12px;
47
- --radius-xl: 16px;
48
- --radius-2xl: 20px;
49
- --radius-full: 9999px;
50
-
51
- /* Spacing scale - More generous */
52
- --space-xs: 4px;
53
- --space-sm: 8px;
54
- --space-md: 16px;
55
- --space-lg: 24px;
56
- --space-xl: 32px;
57
- --space-2xl: 48px;
58
- --space-3xl: 64px;
59
- }
60
-
61
- [data-theme="light"] {
62
- /* Elite Light Theme - Beyond GitHub */
63
- --bg-primary: #ffffff;
64
- --bg-secondary: #f8fafc;
65
- --bg-tertiary: #f1f5f9;
66
- --bg-elevated: #ffffff;
67
- --bg-card: #ffffff;
68
- --border-primary: #e2e8f0;
69
- --border-secondary: #cbd5e1;
70
- --border-subtle: #e2e8f0;
71
- --text-primary: #0f172a;
72
- --text-secondary: #64748b;
73
- --text-tertiary: #94a3b8;
74
- --text-accent: #020617;
75
- --link-color: #2563eb;
76
- --link-hover: #1d4ed8;
77
- --hover-bg: #f1f5f9;
78
- --hover-bg-strong: #e2e8f0;
79
-
80
- /* Accent colors */
81
- --accent-success: #059669;
82
- --accent-warning: #d97706;
83
- --accent-error: #dc2626;
84
- --accent-info: #2563eb;
85
-
86
- /* Shadows - Softer for light theme */
87
- --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.03);
88
- --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.05);
89
- --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08);
90
- --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.1);
91
- --shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.12);
92
- --shadow-2xl: 0 24px 64px rgba(0, 0, 0, 0.15);
93
- --shadow-inner: inset 0 1px 2px rgba(0, 0, 0, 0.03);
94
- --shadow-glow: 0 0 20px rgba(37, 99, 235, 0.1);
95
- }
96
-
97
- * {
98
- margin: 0;
99
- padding: 0;
100
- box-sizing: border-box;
101
- }
102
-
103
- html {
104
- /* Set background on html to prevent flash during navigation */
105
- background-color: var(--bg-primary);
106
- color-scheme: dark;
107
- }
108
-
109
- html[data-theme="light"] {
110
- background-color: var(--bg-primary);
111
- color-scheme: light;
112
- }
113
-
114
- /* View Transitions API animations */
115
- ::view-transition-old(root),
116
- ::view-transition-new(root) {
117
- animation-duration: 0.2s;
118
- }
119
-
120
- ::view-transition-old(root) {
121
- animation-name: fade-out;
122
- }
123
-
124
- ::view-transition-new(root) {
125
- animation-name: fade-in;
126
- }
127
-
128
- @keyframes fade-out {
129
- to {
130
- opacity: 0;
131
- }
132
- }
133
-
134
- @keyframes fade-in {
135
- from {
136
- opacity: 0;
137
- }
138
- }
139
-
140
- body {
141
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
142
- background-color: var(--bg-primary);
143
- color: var(--text-primary);
144
- line-height: 1.6;
145
- min-height: 100vh;
146
- -webkit-font-smoothing: antialiased;
147
- -moz-osx-font-smoothing: grayscale;
148
- text-rendering: optimizeLegibility;
149
- }
150
-
151
- /* Smooth content fades for navigation */
152
- .main-content-wrapper {
153
- transition: opacity 160ms ease;
154
- will-change: opacity;
155
- }
156
-
157
- /* During navigation transition: fade out and disable clicks to prevent race conditions */
158
- .main-content-wrapper.navigating {
159
- opacity: 0.5;
160
- pointer-events: none; /* Prevents clicks during transition - will be removed when navigation completes */
161
- }
162
-
163
- @media (prefers-reduced-motion: reduce) {
164
- .main-content-wrapper {
165
- transition: none;
166
- }
167
- }
168
-
169
- header {
170
- background: linear-gradient(180deg,
171
- rgba(19, 23, 29, 0.95) 0%,
172
- rgba(19, 23, 29, 0.85) 100%);
173
- border-bottom: 1px solid var(--border-subtle);
174
- position: sticky;
175
- top: 0;
176
- z-index: 100;
177
- backdrop-filter: blur(20px) saturate(180%);
178
- -webkit-backdrop-filter: blur(20px) saturate(180%);
179
- box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset, var(--shadow-md);
180
- transition: all var(--transition-base);
181
- }
182
-
183
- header:hover {
184
- box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset, var(--shadow-lg);
185
- }
186
-
187
- [data-theme="light"] header {
188
- background: linear-gradient(180deg,
189
- rgba(248, 250, 252, 0.95) 0%,
190
- rgba(248, 250, 252, 0.85) 100%);
191
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.05) inset, var(--shadow-md);
192
- }
193
-
194
- [data-theme="light"] header:hover {
195
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.05) inset, var(--shadow-lg);
196
- }
197
-
198
- .header-content {
199
- display: flex;
200
- justify-content: space-between;
201
- align-items: center;
202
- padding: 12px 32px;
203
- max-width: 100%;
204
- gap: var(--space-lg);
205
- }
206
-
207
- .header-left {
208
- flex: 0 0 auto;
209
- }
210
-
211
- .header-left h1 {
212
- font-size: 22px;
213
- font-weight: 700;
214
- margin: 0;
215
- color: var(--text-primary);
216
- letter-spacing: -0.02em;
217
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
218
- background: linear-gradient(135deg, var(--text-primary) 0%, var(--text-secondary) 100%);
219
- -webkit-background-clip: text;
220
- -webkit-text-fill-color: transparent;
221
- background-clip: text;
222
- transition: all var(--transition-base);
223
- }
224
-
225
- .header-left h1::before {
226
- content: '$';
227
- color: var(--link-color);
228
- margin-right: 10px;
229
- opacity: 1;
230
- font-weight: 500;
231
- display: inline-block;
232
- transform: scale(1.1);
233
- filter: drop-shadow(0 0 4px rgba(96, 165, 250, 0.4));
234
- }
235
-
236
- .header-path {
237
- display: flex;
238
- align-items: center;
239
- gap: 8px;
240
- }
241
-
242
- .header-right {
243
- display: flex;
244
- align-items: center;
245
- gap: 8px;
246
- margin-left: auto;
247
- }
248
-
249
- /* Elite Canvas Section - Beyond GitHub */
250
- .repo-canvas {
251
- background-color: var(--bg-primary);
252
- flex: 1;
253
- min-width: 0;
254
- position: relative;
255
- }
256
-
257
- .repo-canvas-content {
258
- padding: var(--space-2xl) var(--space-3xl);
259
- max-width: 1400px;
260
- margin: 0 auto;
261
- position: relative;
262
- z-index: 1;
263
- }
264
-
265
- @media (max-width: 1200px) {
266
- .repo-canvas-content {
267
- padding: var(--space-xl) var(--space-2xl);
268
- }
269
- }
270
-
271
- @media (max-width: 768px) {
272
- .repo-canvas-content {
273
- padding: var(--space-lg) var(--space-md);
274
- }
275
- }
276
-
277
- .breadcrumb-section {
278
- font-size: 22px;
279
- font-weight: 700;
280
- color: var(--text-primary);
281
- margin: 0 0 var(--space-lg) 0;
282
- display: flex;
283
- align-items: center;
284
- flex-wrap: wrap;
285
- gap: var(--space-sm);
286
- letter-spacing: -0.01em;
287
- line-height: 1.4;
288
- }
289
-
290
- .repo-name {
291
- font-size: 20px;
292
- font-weight: 600;
293
- color: var(--text-primary);
294
- margin: 0 0 12px 0;
295
- }
296
-
297
- .repo-divider {
298
- border: none;
299
- border-top: 1px solid var(--border-primary);
300
- margin: 0 0 12px 0;
301
- }
302
-
303
- .repo-controls {
304
- display: flex;
305
- align-items: center;
306
- justify-content: space-between;
307
- min-height: 40px;
308
- margin-bottom: var(--space-lg);
309
- padding: 8px 16px;
310
- background: var(--bg-card);
311
- border: 1px solid var(--border-subtle);
312
- border-radius: var(--radius-lg);
313
- box-shadow: var(--shadow-sm);
314
- transition: all var(--transition-base);
315
- gap: var(--space-md);
316
- overflow: hidden;
317
- }
318
-
319
- .repo-controls-left {
320
- display: flex;
321
- align-items: center;
322
- gap: 12px;
323
- flex-shrink: 0;
324
- min-width: 0;
325
- }
326
-
327
- .repo-controls-right {
328
- display: flex;
329
- align-items: center;
330
- gap: 12px;
331
- margin-left: auto;
332
- flex-shrink: 1;
333
- min-width: 0;
334
- max-width: 320px;
335
- }
336
-
337
- .repo-controls:hover {
338
- box-shadow: var(--shadow-md);
339
- border-color: var(--border-primary);
340
- transform: translateY(-1px);
341
- }
342
-
343
- .repo-controls-left:empty {
344
- display: none;
345
- }
346
-
347
- .branch-button {
348
- display: inline-flex;
349
- align-items: center;
350
- gap: 8px;
351
- padding: 8px 16px;
352
- background: linear-gradient(135deg, var(--bg-elevated) 0%, var(--bg-secondary) 100%);
353
- border: 1px solid var(--border-primary);
354
- border-radius: var(--radius-lg);
355
- color: var(--text-primary);
356
- font-size: 13px;
357
- font-weight: 600;
358
- cursor: pointer;
359
- transition: all var(--transition-base);
360
- box-shadow: var(--shadow-sm);
361
- position: relative;
362
- overflow: hidden;
363
- }
364
-
365
- .branch-button::before {
366
- content: '';
367
- position: absolute;
368
- top: 0;
369
- left: -100%;
370
- width: 100%;
371
- height: 100%;
372
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
373
- transition: left var(--transition-slow);
374
- }
375
-
376
- .branch-button:hover::before {
377
- left: 100%;
378
- }
379
-
380
- .branch-button:hover {
381
- background: linear-gradient(135deg, var(--hover-bg) 0%, var(--bg-elevated) 100%);
382
- border-color: var(--link-color);
383
- transform: translateY(-2px);
384
- box-shadow: var(--shadow-md), var(--shadow-glow);
385
- }
386
-
387
- .branch-button:active {
388
- transform: translateY(0);
389
- box-shadow: var(--shadow-sm);
390
- }
391
-
392
- .branch-count,
393
- .tag-count {
394
- color: var(--text-secondary);
395
- font-size: 14px;
396
- display: flex;
397
- align-items: center;
398
- gap: 6px;
399
- }
400
-
401
- .octicon-branch {
402
- width: 16px;
403
- height: 16px;
404
- fill: var(--text-secondary);
405
- }
406
-
407
- .octicon-small {
408
- width: 14px;
409
- height: 14px;
410
- fill: var(--text-secondary);
411
- }
412
-
413
- .branch-name {
414
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
415
- font-weight: 600;
416
- font-size: 12px;
417
- }
418
-
419
- .octicon-chevron {
420
- width: 12px;
421
- height: 12px;
422
- fill: var(--text-secondary);
423
- }
424
-
425
- .search-container {
426
- position: relative;
427
- display: flex;
428
- align-items: center;
429
- flex-shrink: 0;
430
- min-width: 0;
431
- }
432
-
433
- .search-input {
434
- background: linear-gradient(135deg,
435
- var(--bg-card) 0%,
436
- var(--bg-elevated) 100%);
437
- border: 1.5px solid var(--border-subtle);
438
- border-radius: var(--radius-lg);
439
- padding: 8px 38px 8px 36px;
440
- color: var(--text-primary);
441
- font-size: 14px;
442
- width: 280px;
443
- min-width: 280px;
444
- flex-shrink: 0;
445
- transition: all var(--transition-base);
446
- box-shadow: var(--shadow-sm);
447
- backdrop-filter: blur(10px);
448
- font-weight: 500;
449
- }
450
-
451
- .search-input:hover {
452
- border-color: var(--border-primary);
453
- background: linear-gradient(135deg,
454
- var(--bg-elevated) 0%,
455
- var(--bg-card) 100%);
456
- box-shadow: var(--shadow-md);
457
- transform: translateY(-1px);
458
- }
459
-
460
- .search-input:focus {
461
- outline: none;
462
- border-color: var(--link-color);
463
- background: linear-gradient(135deg,
464
- var(--bg-card) 0%,
465
- var(--bg-elevated) 100%);
466
- box-shadow: 0 0 0 3px rgba(96, 165, 250, 0.2),
467
- var(--shadow-md),
468
- var(--shadow-glow);
469
- transform: translateY(-1px);
470
- }
471
-
472
- [data-theme="light"] .search-input:focus {
473
- box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15),
474
- var(--shadow-md);
475
- }
476
-
477
- /* Search results overlay - Enhanced */
478
- .search-results-overlay {
479
- position: absolute;
480
- top: calc(100% + 10px);
481
- left: 0;
482
- right: 0;
483
- z-index: 1000;
484
- min-width: 400px;
485
- animation: slideDown 0.2s cubic-bezier(0.4, 0, 0.2, 1);
486
- }
487
-
488
- @keyframes slideDown {
489
- from {
490
- opacity: 0;
491
- transform: translateY(-10px);
492
- }
493
- to {
494
- opacity: 1;
495
- transform: translateY(0);
496
- }
497
- }
498
-
499
- .search-results-container {
500
- background: var(--bg-elevated);
501
- border: 1px solid var(--border-primary);
502
- border-radius: var(--radius-lg);
503
- box-shadow: var(--shadow-xl);
504
- max-height: 400px;
505
- overflow: hidden;
506
- display: flex;
507
- flex-direction: column;
508
- backdrop-filter: blur(20px);
509
- background-color: rgba(28, 33, 40, 0.98);
510
- }
511
-
512
- [data-theme="light"] .search-results-container {
513
- background-color: rgba(255, 255, 255, 0.98);
514
- }
515
-
516
- .search-results-header {
517
- padding: 10px 16px;
518
- border-bottom: 1px solid var(--border-subtle);
519
- background: var(--bg-secondary);
520
- font-size: 12px;
521
- font-weight: 600;
522
- color: var(--text-secondary);
523
- letter-spacing: 0.01em;
524
- }
525
-
526
- .search-results-count {
527
- color: var(--text-secondary);
528
- }
529
-
530
- .search-results-list {
531
- overflow-y: auto;
532
- max-height: 350px;
533
- }
534
-
535
- .search-result-item {
536
- display: flex;
537
- align-items: center;
538
- gap: 12px;
539
- padding: 10px 16px;
540
- border-bottom: 1px solid var(--border-subtle);
541
- text-decoration: none;
542
- color: var(--text-primary);
543
- transition: all var(--transition-base);
544
- cursor: pointer;
545
- position: relative;
546
- }
547
-
548
- .search-result-item::before {
549
- content: '';
550
- position: absolute;
551
- left: 0;
552
- top: 0;
553
- bottom: 0;
554
- width: 3px;
555
- background: var(--link-color);
556
- opacity: 0;
557
- transition: opacity var(--transition-base);
558
- }
559
-
560
- .search-result-item:last-child {
561
- border-bottom: none;
562
- }
563
-
564
- .search-result-item:hover {
565
- background: linear-gradient(90deg, var(--hover-bg) 0%, transparent 100%);
566
- padding-left: 20px;
567
- }
568
-
569
- .search-result-item:hover::before {
570
- opacity: 1;
571
- }
572
-
573
- .search-result-item .result-icon {
574
- flex-shrink: 0;
575
- fill: var(--text-secondary);
576
- }
577
-
578
- .search-result-item .result-icon.file-icon {
579
- opacity: 0.7;
580
- }
581
-
582
- .search-result-content {
583
- flex: 1;
584
- min-width: 0;
585
- display: flex;
586
- flex-direction: column;
587
- gap: 2px;
588
- }
589
-
590
- .search-result-path {
591
- font-size: 13px;
592
- color: var(--text-primary);
593
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
594
- overflow: hidden;
595
- text-overflow: ellipsis;
596
- white-space: nowrap;
597
- }
598
-
599
- .search-highlight {
600
- background: linear-gradient(120deg, rgba(255, 200, 50, 0.35) 0%, rgba(255, 200, 50, 0.25) 100%);
601
- color: var(--text-accent);
602
- border-radius: 3px;
603
- padding: 1px 3px;
604
- font-weight: 600;
605
- box-shadow: 0 1px 2px rgba(255, 200, 50, 0.2);
606
- }
607
-
608
- [data-theme="light"] .search-highlight {
609
- background: linear-gradient(120deg, rgba(255, 200, 50, 0.45) 0%, rgba(255, 200, 50, 0.35) 100%);
610
- box-shadow: 0 1px 2px rgba(255, 200, 50, 0.25);
611
- }
612
-
613
- .search-icon {
614
- position: absolute;
615
- left: 8px;
616
- width: 16px;
617
- height: 16px;
618
- fill: var(--text-secondary);
619
- pointer-events: none;
620
- }
621
-
622
- .search-hotkey {
623
- position: absolute;
624
- right: 12px;
625
- background: linear-gradient(135deg,
626
- var(--bg-elevated) 0%,
627
- var(--bg-tertiary) 100%);
628
- border: 1px solid var(--border-subtle);
629
- border-radius: var(--radius-sm);
630
- padding: 2px 6px;
631
- font-size: 11px;
632
- color: var(--text-secondary);
633
- font-family: ui-monospace, SFMono-Regular, monospace;
634
- font-weight: 600;
635
- box-shadow: var(--shadow-xs);
636
- transition: all var(--transition-base);
637
- }
638
-
639
- .search-input:focus ~ .search-hotkey {
640
- border-color: var(--link-color);
641
- color: var(--link-color);
642
- box-shadow: 0 0 0 1px rgba(96, 165, 250, 0.2);
643
- }
644
-
645
- /* Elite Buttons - Beyond GitHub */
646
- .btn {
647
- display: inline-flex;
648
- align-items: center;
649
- justify-content: center;
650
- gap: 8px;
651
- padding: 8px 18px;
652
- border-radius: var(--radius-lg);
653
- font-size: 13px;
654
- font-weight: 600;
655
- cursor: pointer;
656
- transition: all var(--transition-base);
657
- border: 1px solid;
658
- position: relative;
659
- overflow: hidden;
660
- box-shadow: var(--shadow-sm);
661
- letter-spacing: -0.01em;
662
- backdrop-filter: blur(10px);
663
- }
664
-
665
- .btn::before {
666
- content: '';
667
- position: absolute;
668
- top: 50%;
669
- left: 50%;
670
- width: 0;
671
- height: 0;
672
- border-radius: 50%;
673
- background: rgba(255, 255, 255, 0.1);
674
- transform: translate(-50%, -50%);
675
- transition: width 0.4s, height 0.4s;
676
- }
677
-
678
- .btn:hover::before {
679
- width: 300px;
680
- height: 300px;
681
- }
682
-
683
- .btn-primary {
684
- background: linear-gradient(135deg,
685
- var(--bg-elevated) 0%,
686
- var(--bg-card) 100%);
687
- border-color: var(--border-primary);
688
- color: var(--text-primary);
689
- }
690
-
691
- .btn-primary:hover {
692
- background: linear-gradient(135deg,
693
- var(--hover-bg) 0%,
694
- var(--bg-elevated) 100%);
695
- border-color: var(--link-color);
696
- transform: translateY(-2px);
697
- box-shadow: var(--shadow-md), var(--shadow-glow);
698
- }
699
-
700
- .btn-primary:active {
701
- transform: translateY(0);
702
- box-shadow: var(--shadow-sm);
703
- }
704
-
705
- .btn-outline {
706
- background: linear-gradient(135deg,
707
- var(--bg-card) 0%,
708
- var(--bg-elevated) 100%);
709
- border-color: var(--border-primary);
710
- color: var(--text-primary);
711
- }
712
-
713
- .btn-outline:hover {
714
- background: linear-gradient(135deg,
715
- var(--hover-bg) 0%,
716
- var(--bg-elevated) 100%);
717
- border-color: var(--link-color);
718
- transform: translateY(-2px);
719
- box-shadow: var(--shadow-md), var(--shadow-glow);
720
- }
721
-
722
- .btn-success {
723
- background: linear-gradient(135deg,
724
- var(--accent-success) 0%,
725
- #10b981 100%);
726
- border-color: rgba(255, 255, 255, 0.1);
727
- color: #ffffff;
728
- box-shadow: 0 2px 8px rgba(16, 185, 129, 0.3),
729
- 0 0 0 1px rgba(16, 185, 129, 0.1);
730
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
731
- }
732
-
733
- .btn-success:hover {
734
- background: linear-gradient(135deg,
735
- #10b981 0%,
736
- #34d399 100%);
737
- transform: translateY(-2px);
738
- box-shadow: 0 4px 16px rgba(16, 185, 129, 0.4),
739
- 0 0 0 1px rgba(16, 185, 129, 0.2),
740
- 0 0 20px rgba(16, 185, 129, 0.2);
741
- }
742
-
743
- .btn-success:active {
744
- transform: translateY(0);
745
- box-shadow: 0 2px 8px rgba(16, 185, 129, 0.3);
746
- }
747
-
748
- .btn-icon,
749
- .btn-chevron {
750
- width: 16px;
751
- height: 16px;
752
- fill: currentColor;
753
- }
754
-
755
- .theme-toggle,
756
- .gitignore-toggle,
757
- .edit-btn {
758
- background: linear-gradient(135deg,
759
- var(--bg-card) 0%,
760
- var(--bg-elevated) 100%);
761
- border: 1px solid var(--border-subtle);
762
- border-radius: var(--radius-lg);
763
- padding: 8px 14px;
764
- cursor: pointer;
765
- transition: all var(--transition-base);
766
- box-shadow: var(--shadow-sm);
767
- color: var(--text-primary);
768
- display: flex;
769
- align-items: center;
770
- justify-content: center;
771
- height: 36px;
772
- min-width: 36px;
773
- margin: 0;
774
- font-size: 14px;
775
- position: relative;
776
- overflow: hidden;
777
- backdrop-filter: blur(10px);
778
- }
779
-
780
- .theme-toggle:hover,
781
- .gitignore-toggle:hover,
782
- .edit-btn:hover {
783
- background: linear-gradient(135deg,
784
- var(--hover-bg) 0%,
785
- var(--bg-elevated) 100%);
786
- border-color: var(--link-color);
787
- transform: translateY(-2px);
788
- box-shadow: var(--shadow-md), var(--shadow-glow);
789
- }
790
-
791
- .theme-toggle:active,
792
- .gitignore-toggle:active,
793
- .edit-btn:active {
794
- background: linear-gradient(135deg,
795
- var(--hover-bg-strong) 0%,
796
- var(--hover-bg) 100%);
797
- transform: translateY(0) scale(0.98);
798
- box-shadow: var(--shadow-sm);
799
- }
800
-
801
- .gitignore-toggle.showing-ignored {
802
- color: var(--link-color);
803
- border-color: var(--link-color);
804
- background: linear-gradient(135deg, rgba(88, 166, 255, 0.12) 0%, rgba(88, 166, 255, 0.08) 100%);
805
- box-shadow: 0 0 0 1px rgba(88, 166, 255, 0.2);
806
- }
807
-
808
- .gitignore-toggle.showing-ignored:hover {
809
- background: linear-gradient(135deg, rgba(88, 166, 255, 0.18) 0%, rgba(88, 166, 255, 0.12) 100%);
810
- box-shadow: 0 0 0 1px rgba(88, 166, 255, 0.3), var(--shadow-md);
811
- }
812
-
813
- .theme-icon,
814
- .gitignore-icon,
815
- .edit-icon {
816
- width: 16px;
817
- height: 16px;
818
- fill: currentColor;
819
- }
820
-
821
- .view-toggle {
822
- display: inline-flex;
823
- border: 1px solid var(--border-primary);
824
- border-radius: var(--radius-md);
825
- overflow: hidden;
826
- background: var(--bg-primary);
827
- box-shadow: var(--shadow-sm);
828
- transition: all var(--transition-base);
829
- }
830
-
831
- .view-toggle:hover {
832
- box-shadow: var(--shadow-md);
833
- border-color: var(--border-secondary);
834
- }
835
-
836
- .view-btn {
837
- display: inline-flex;
838
- align-items: center;
839
- gap: 6px;
840
- padding: 7px 14px;
841
- background: transparent;
842
- border: none;
843
- color: var(--text-secondary);
844
- text-decoration: none;
845
- font-size: 13px;
846
- font-weight: 500;
847
- transition: all var(--transition-base);
848
- white-space: nowrap;
849
- cursor: pointer;
850
- position: relative;
851
- }
852
-
853
- .view-btn::before {
854
- content: '';
855
- position: absolute;
856
- inset: 0;
857
- background: var(--hover-bg);
858
- opacity: 0;
859
- transition: opacity var(--transition-base);
860
- }
861
-
862
- .view-btn:hover {
863
- color: var(--text-primary);
864
- }
865
-
866
- .view-btn:hover::before {
867
- opacity: 1;
868
- }
869
-
870
- .view-btn.active {
871
- background: linear-gradient(135deg, var(--link-color) 0%, var(--link-hover) 100%);
872
- color: white;
873
- box-shadow: 0 2px 4px rgba(88, 166, 255, 0.3);
874
- }
875
-
876
- .view-btn.active::before {
877
- display: none;
878
- }
879
-
880
- .view-btn.active:hover {
881
- background: linear-gradient(135deg, var(--link-hover) 0%, var(--link-color) 100%);
882
- box-shadow: 0 4px 8px rgba(88, 166, 255, 0.4);
883
- transform: translateY(-1px);
884
- }
885
-
886
- .view-btn + .view-btn {
887
- border-left: 1px solid var(--border-primary);
888
- }
889
-
890
- .view-icon {
891
- width: 16px;
892
- height: 16px;
893
- fill: currentColor;
894
- flex-shrink: 0;
895
- }
896
-
897
- .breadcrumb-item {
898
- display: inline-flex;
899
- align-items: center;
900
- }
901
-
902
- .breadcrumb-item a {
903
- color: var(--link-color);
904
- text-decoration: none;
905
- font-weight: 600;
906
- padding: 6px 12px;
907
- border-radius: var(--radius-md);
908
- transition: all var(--transition-base);
909
- display: inline-flex;
910
- align-items: center;
911
- gap: 6px;
912
- position: relative;
913
- overflow: hidden;
914
- }
915
-
916
- .breadcrumb-item a::before {
917
- content: '';
918
- position: absolute;
919
- inset: 0;
920
- background: linear-gradient(135deg,
921
- rgba(96, 165, 250, 0.1) 0%,
922
- rgba(96, 165, 250, 0.05) 100%);
923
- opacity: 0;
924
- transition: opacity var(--transition-base);
925
- }
926
-
927
- .breadcrumb-item a:hover {
928
- text-decoration: none;
929
- color: var(--link-hover);
930
- transform: translateY(-2px);
931
- box-shadow: var(--shadow-sm), var(--shadow-glow);
932
- }
933
-
934
- .breadcrumb-item a:hover::before {
935
- opacity: 1;
936
- }
937
-
938
- .breadcrumb-separator {
939
- color: var(--text-secondary);
940
- margin: 0 4px;
941
- opacity: 0.7;
942
- }
943
-
944
- /* File Header - Elite Design */
945
- .file-header {
946
- display: flex;
947
- justify-content: space-between;
948
- align-items: center;
949
- padding: 20px 28px;
950
- margin-bottom: var(--space-xl);
951
- background: linear-gradient(135deg,
952
- var(--bg-card) 0%,
953
- var(--bg-elevated) 100%);
954
- border: 1px solid var(--border-subtle);
955
- border-radius: var(--radius-xl);
956
- gap: var(--space-lg);
957
- flex-wrap: wrap;
958
- box-shadow: var(--shadow-md);
959
- transition: all var(--transition-base);
960
- backdrop-filter: blur(10px);
961
- position: relative;
962
- overflow: visible;
963
- }
964
-
965
- .file-header::before {
966
- content: '';
967
- position: absolute;
968
- top: 0;
969
- left: 0;
970
- right: 0;
971
- height: 2px;
972
- background: linear-gradient(90deg,
973
- transparent 0%,
974
- var(--link-color) 50%,
975
- transparent 100%);
976
- opacity: 0;
977
- transition: opacity var(--transition-base);
978
- border-radius: var(--radius-xl) var(--radius-xl) 0 0;
979
- }
980
-
981
- .file-header:hover {
982
- box-shadow: var(--shadow-xl);
983
- border-color: var(--border-primary);
984
- transform: translateY(-2px);
985
- }
986
-
987
- .file-header:hover::before {
988
- opacity: 1;
989
- }
990
-
991
- .file-header-main {
992
- flex: 1;
993
- min-width: 0;
994
- display: flex;
995
- flex-direction: column;
996
- gap: 8px;
997
- }
998
-
999
- .file-path-info {
1000
- display: flex;
1001
- align-items: center;
1002
- gap: 8px;
1003
- font-size: 14px;
1004
- }
1005
-
1006
- .file-path-text {
1007
- color: var(--link-color);
1008
- font-weight: 500;
1009
- word-break: break-all;
1010
- }
1011
-
1012
- .file-path-copy-btn {
1013
- display: inline-flex;
1014
- align-items: center;
1015
- justify-content: center;
1016
- padding: 5px;
1017
- background: transparent;
1018
- border: none;
1019
- border-radius: var(--radius-sm);
1020
- cursor: pointer;
1021
- color: var(--text-secondary);
1022
- transition: all var(--transition-base);
1023
- flex-shrink: 0;
1024
- opacity: 0.7;
1025
- width: 24px;
1026
- height: 24px;
1027
- }
1028
-
1029
- .file-path-copy-btn:hover {
1030
- background-color: var(--hover-bg);
1031
- color: var(--link-color);
1032
- opacity: 1;
1033
- transform: scale(1.1);
1034
- }
1035
-
1036
- .file-path-copy-btn:active {
1037
- transform: scale(0.95);
1038
- }
1039
-
1040
- .octicon-copy {
1041
- fill: currentColor;
1042
- }
1043
-
1044
- .file-stats {
1045
- display: flex;
1046
- align-items: center;
1047
- gap: 4px;
1048
- font-size: 12px;
1049
- color: var(--text-secondary);
1050
- }
1051
-
1052
- .file-stat {
1053
- color: var(--text-secondary);
1054
- }
1055
-
1056
- .file-stat-separator {
1057
- color: var(--text-secondary);
1058
- opacity: 0.5;
1059
- }
1060
-
1061
- .file-header-actions {
1062
- flex-shrink: 0;
1063
- display: flex;
1064
- gap: 8px;
1065
- align-items: center;
1066
- flex-wrap: wrap;
1067
- }
1068
-
1069
- .file-action-group {
1070
- display: inline-flex;
1071
- background-color: var(--bg-primary);
1072
- border: 1px solid var(--border-primary);
1073
- border-radius: var(--radius-md);
1074
- overflow: hidden;
1075
- box-shadow: var(--shadow-sm);
1076
- transition: all var(--transition-base);
1077
- }
1078
-
1079
- .file-action-group:hover {
1080
- box-shadow: var(--shadow-md);
1081
- border-color: var(--border-secondary);
1082
- }
1083
-
1084
- .file-action-btn {
1085
- display: inline-flex;
1086
- align-items: center;
1087
- justify-content: center;
1088
- padding: 7px 14px;
1089
- background: transparent;
1090
- border: none;
1091
- color: var(--text-secondary);
1092
- text-decoration: none;
1093
- font-size: 12px;
1094
- font-weight: 500;
1095
- cursor: pointer;
1096
- transition: all var(--transition-base);
1097
- white-space: nowrap;
1098
- gap: 6px;
1099
- border-right: 1px solid var(--border-primary);
1100
- position: relative;
1101
- }
1102
-
1103
- .file-action-btn:last-child {
1104
- border-right: none;
1105
- }
1106
-
1107
- .file-action-btn:hover {
1108
- background: linear-gradient(180deg, var(--hover-bg) 0%, var(--bg-tertiary) 100%);
1109
- color: var(--text-primary);
1110
- transform: translateY(-1px);
1111
- }
1112
-
1113
- .file-action-btn:active {
1114
- transform: translateY(0);
1115
- background: var(--hover-bg-strong);
1116
- }
1117
-
1118
- .file-action-btn .file-action-label {
1119
- color: inherit;
1120
- }
1121
-
1122
- .file-action-icon {
1123
- fill: currentColor;
1124
- flex-shrink: 0;
1125
- }
1126
-
1127
- .copy-raw-btn {
1128
- padding: 6px;
1129
- }
1130
-
1131
- .file-action-btn:first-child {
1132
- border-radius: 6px 0 0 6px;
1133
- }
1134
-
1135
- .file-action-btn:last-child {
1136
- border-radius: 0 6px 6px 0;
1137
- }
1138
-
1139
- /* Single button case */
1140
- .file-action-group:has(.file-action-btn:only-child) .file-action-btn {
1141
- border-radius: 6px;
1142
- border-right: none;
1143
- }
1144
-
1145
- main {
1146
- padding: 0;
1147
- display: flex;
1148
- min-height: calc(100vh - 57px);
1149
- background: var(--bg-primary);
1150
- }
1151
-
1152
- /* File Tree Sidebar - Elite Design */
1153
- .file-tree-sidebar {
1154
- width: 300px;
1155
- min-width: 300px;
1156
- max-width: 300px;
1157
- flex-shrink: 0;
1158
- border-right: 1px solid var(--border-subtle);
1159
- overflow-y: auto;
1160
- overflow-x: hidden;
1161
- background: linear-gradient(180deg,
1162
- var(--bg-secondary) 0%,
1163
- var(--bg-primary) 100%);
1164
- position: sticky;
1165
- top: 0;
1166
- height: 100vh;
1167
- max-height: 100vh;
1168
- align-self: stretch;
1169
- transition: all var(--transition-base);
1170
- display: flex;
1171
- flex-direction: column;
1172
- scrollbar-width: thin;
1173
- scrollbar-color: var(--border-primary) transparent;
1174
- box-shadow: 2px 0 8px rgba(0, 0, 0, 0.1);
1175
- }
1176
-
1177
- [data-theme="light"] .file-tree-sidebar {
1178
- background: linear-gradient(180deg,
1179
- var(--bg-secondary) 0%,
1180
- var(--bg-primary) 100%);
1181
- box-shadow: 2px 0 8px rgba(0, 0, 0, 0.05);
1182
- }
1183
-
1184
- .file-tree-sidebar::-webkit-scrollbar {
1185
- width: 6px;
1186
- }
1187
-
1188
- .file-tree-sidebar::-webkit-scrollbar-track {
1189
- background: transparent;
1190
- }
1191
-
1192
- .file-tree-sidebar::-webkit-scrollbar-thumb {
1193
- background: var(--border-primary);
1194
- border-radius: 3px;
1195
- }
1196
-
1197
- .file-tree-sidebar::-webkit-scrollbar-thumb:hover {
1198
- background: var(--text-secondary);
1199
- }
1200
-
1201
- .file-tree-sidebar.hidden {
1202
- display: none;
1203
- }
1204
-
1205
- .file-tree-header {
1206
- display: flex;
1207
- align-items: center;
1208
- gap: 12px;
1209
- padding: 18px 24px;
1210
- border-bottom: 1px solid var(--border-subtle);
1211
- background: linear-gradient(180deg,
1212
- rgba(19, 23, 29, 0.95) 0%,
1213
- rgba(19, 23, 29, 0.85) 100%);
1214
- backdrop-filter: blur(10px);
1215
- position: sticky;
1216
- top: 0;
1217
- z-index: 1;
1218
- font-size: 15px;
1219
- font-weight: 700;
1220
- color: var(--text-primary);
1221
- letter-spacing: -0.01em;
1222
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
1223
- }
1224
-
1225
- [data-theme="light"] .file-tree-header {
1226
- background: linear-gradient(180deg,
1227
- rgba(248, 250, 252, 0.95) 0%,
1228
- rgba(248, 250, 252, 0.85) 100%);
1229
- }
1230
-
1231
- .files-icon {
1232
- fill: var(--text-secondary);
1233
- flex-shrink: 0;
1234
- }
1235
-
1236
- .sidebar-controls {
1237
- padding: var(--space-lg) var(--space-lg) var(--space-md);
1238
- border-bottom: 1px solid var(--border-subtle);
1239
- background: linear-gradient(180deg,
1240
- rgba(19, 23, 29, 0.4) 0%,
1241
- transparent 100%);
1242
- display: flex;
1243
- flex-direction: column;
1244
- gap: var(--space-md);
1245
- backdrop-filter: blur(5px);
1246
- }
1247
-
1248
- [data-theme="light"] .sidebar-controls {
1249
- background: linear-gradient(180deg,
1250
- rgba(248, 250, 252, 0.6) 0%,
1251
- transparent 100%);
1252
- }
1253
-
1254
- .sidebar-branch {
1255
- width: 100%;
1256
- justify-content: flex-start;
1257
- font-size: 12px;
1258
- }
1259
-
1260
- .btn-sidebar {
1261
- width: 100%;
1262
- padding: 5px 12px;
1263
- background: var(--bg-primary);
1264
- border: 1px solid var(--border-primary);
1265
- border-radius: 6px;
1266
- cursor: pointer;
1267
- color: var(--text-primary);
1268
- transition: all 0.15s ease;
1269
- display: flex;
1270
- align-items: center;
1271
- justify-content: center;
1272
- height: 28px;
1273
- font-size: 14px;
1274
- }
1275
-
1276
- .btn-sidebar:hover {
1277
- background-color: var(--bg-tertiary);
1278
- border-color: var(--text-secondary);
1279
- }
1280
-
1281
- .sidebar-search {
1282
- width: 100%;
1283
- flex-shrink: 0;
1284
- }
1285
-
1286
- .sidebar-search .search-input {
1287
- width: 100%;
1288
- font-size: 12px;
1289
- padding: 6px 32px 6px 30px;
1290
- height: 32px;
1291
- border-radius: var(--radius-md);
1292
- box-shadow: var(--shadow-inner);
1293
- transition: all var(--transition-base);
1294
- min-width: 0;
1295
- }
1296
-
1297
- /* Search in repo-controls (not sidebar) */
1298
- .repo-controls .search-container:not(.sidebar-search) {
1299
- flex: 1;
1300
- min-width: 150px;
1301
- max-width: 300px;
1302
- }
1303
-
1304
- .repo-controls .search-container:not(.sidebar-search) .search-input {
1305
- width: 100%;
1306
- }
1307
-
1308
- .sidebar-search .search-input:hover {
1309
- border-color: var(--border-secondary);
1310
- background: var(--bg-elevated);
1311
- }
1312
-
1313
- .sidebar-search .search-input:focus {
1314
- box-shadow: 0 0 0 3px rgba(88, 166, 255, 0.15), var(--shadow-inner);
1315
- }
1316
-
1317
- .sidebar-search .search-hotkey {
1318
- font-size: 10px;
1319
- padding: 2px 5px;
1320
- border-radius: var(--radius-sm);
1321
- font-weight: 500;
1322
- box-shadow: var(--shadow-sm);
1323
- }
1324
-
1325
- .file-tree-container {
1326
- padding: 8px 0;
1327
- background: var(--bg-secondary);
1328
- }
1329
-
1330
- .tree-item {
1331
- display: flex;
1332
- align-items: center;
1333
- gap: 8px;
1334
- padding: 8px 14px;
1335
- margin: 2px 6px;
1336
- cursor: pointer;
1337
- font-size: 13px;
1338
- line-height: 22px;
1339
- color: var(--text-primary);
1340
- transition: all var(--transition-base);
1341
- user-select: none;
1342
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
1343
- border-radius: var(--radius-md);
1344
- position: relative;
1345
- font-weight: 500;
1346
- }
1347
-
1348
- .tree-item::before {
1349
- content: '';
1350
- position: absolute;
1351
- left: 0;
1352
- top: 50%;
1353
- transform: translateY(-50%);
1354
- width: 3px;
1355
- height: 0;
1356
- background: linear-gradient(180deg, var(--link-color) 0%, var(--link-hover) 100%);
1357
- border-radius: 0 3px 3px 0;
1358
- transition: all var(--transition-base);
1359
- box-shadow: 0 0 8px rgba(96, 165, 250, 0.4);
1360
- }
1361
-
1362
- .tree-item:hover {
1363
- background: rgba(96, 165, 250, 0.08);
1364
- border-left: 2px solid var(--link-color);
1365
- padding-left: 14px;
1366
- }
1367
-
1368
- .tree-item:hover::before {
1369
- display: none;
1370
- }
1371
-
1372
- .tree-item.active {
1373
- background: rgba(96, 165, 250, 0.12);
1374
- border-left: 2px solid var(--link-color);
1375
- font-weight: 600;
1376
- padding-left: 14px;
1377
- }
1378
-
1379
- .tree-item.active::before {
1380
- height: 85%;
1381
- opacity: 1;
1382
- box-shadow: 0 0 12px rgba(96, 165, 250, 0.6);
1383
- }
1384
-
1385
- [data-theme="light"] .tree-item.active {
1386
- background: linear-gradient(90deg,
1387
- rgba(37, 99, 235, 0.1) 0%,
1388
- rgba(37, 99, 235, 0.03) 100%);
1389
- border-color: rgba(37, 99, 235, 0.15);
1390
- }
1391
-
1392
- .tree-toggle {
1393
- font-size: 10px;
1394
- color: var(--text-secondary);
1395
- width: 12px;
1396
- display: inline-block;
1397
- text-align: center;
1398
- flex-shrink: 0;
1399
- }
1400
-
1401
- .tree-spacer {
1402
- width: 12px;
1403
- flex-shrink: 0;
1404
- }
1405
-
1406
- .tree-icon {
1407
- flex-shrink: 0;
1408
- fill: var(--text-secondary);
1409
- }
1410
-
1411
- .tree-icon.file-icon {
1412
- fill: var(--text-secondary);
1413
- opacity: 0.7;
1414
- }
1415
-
1416
- .tree-item .tree-icon:not(.file-icon) {
1417
- fill: #7dd3fc;
1418
- }
1419
-
1420
- [data-theme="light"] .tree-item .tree-icon:not(.file-icon) {
1421
- fill: #54adf5;
1422
- }
1423
-
1424
- .tree-label {
1425
- flex: 1;
1426
- overflow: hidden;
1427
- text-overflow: ellipsis;
1428
- white-space: nowrap;
1429
- font-weight: 400;
1430
- letter-spacing: normal;
1431
- }
1432
-
1433
- .tree-children {
1434
- transition: none;
1435
- }
1436
-
1437
- /* File tree loading skeleton */
1438
- .tree-skeleton {
1439
- padding: 8px;
1440
- }
1441
-
1442
- .skeleton-item {
1443
- height: 28px;
1444
- background: linear-gradient(
1445
- 90deg,
1446
- var(--bg-secondary) 0%,
1447
- var(--hover-bg) 50%,
1448
- var(--bg-secondary) 100%
1449
- );
1450
- background-size: 200% 100%;
1451
- animation: skeleton-loading 1.5s ease-in-out infinite;
1452
- border-radius: 4px;
1453
- margin-bottom: 4px;
1454
- }
1455
-
1456
- .skeleton-indent {
1457
- margin-left: 20px;
1458
- width: calc(100% - 20px);
1459
- }
1460
-
1461
- @keyframes skeleton-loading {
1462
- 0% {
1463
- background-position: 200% 0;
1464
- }
1465
- 100% {
1466
- background-position: -200% 0;
1467
- }
1468
- }
1469
-
1470
- .main-content-wrapper {
1471
- flex: 1;
1472
- min-width: 0;
1473
- display: flex;
1474
- flex-direction: column;
1475
- transition: opacity 0.15s ease;
1476
- }
1477
-
1478
- .main-content-wrapper.no-sidebar {
1479
- width: 100%;
1480
- max-width: 1280px;
1481
- margin: 0 auto;
1482
- }
1483
-
1484
- .main-content-wrapper.no-sidebar .repo-canvas-content {
1485
- max-width: 980px;
1486
- }
1487
-
1488
- .main-content {
1489
- max-width: 1400px;
1490
- margin: 0 auto;
1491
- padding: var(--space-xl) var(--space-2xl);
1492
- width: 100%;
1493
- }
1494
-
1495
- .directory-actions {
1496
- display: flex;
1497
- gap: 8px;
1498
- margin-bottom: 24px;
1499
- }
1500
-
1501
- .btn-icon {
1502
- width: 14px;
1503
- height: 14px;
1504
- fill: currentColor;
1505
- margin-right: 6px;
1506
- vertical-align: text-bottom;
1507
- }
1508
-
1509
- .file-table {
1510
- width: 100%;
1511
- border-collapse: separate;
1512
- border-spacing: 0;
1513
- background: var(--bg-card);
1514
- border: 1px solid var(--border-subtle);
1515
- border-radius: var(--radius-xl);
1516
- overflow: hidden;
1517
- box-shadow: var(--shadow-md);
1518
- transition: all var(--transition-base);
1519
- margin-top: 0;
1520
- backdrop-filter: blur(10px);
1521
- }
1522
-
1523
- .file-table:hover {
1524
- box-shadow: var(--shadow-xl);
1525
- border-color: var(--border-primary);
1526
- transform: translateY(-2px);
1527
- }
1528
-
1529
- .file-table thead {
1530
- background: linear-gradient(180deg,
1531
- rgba(19, 23, 29, 0.6) 0%,
1532
- rgba(19, 23, 29, 0.4) 100%);
1533
- backdrop-filter: blur(10px);
1534
- position: sticky;
1535
- top: 0;
1536
- z-index: 10;
1537
- }
1538
-
1539
- [data-theme="light"] .file-table thead {
1540
- background: linear-gradient(180deg,
1541
- rgba(248, 250, 252, 0.8) 0%,
1542
- rgba(248, 250, 252, 0.6) 100%);
1543
- }
1544
-
1545
- /* Base header cell styling */
1546
- .file-table th {
1547
- padding: 12px 16px;
1548
- text-align: left;
1549
- font-weight: 600;
1550
- font-size: 12px;
1551
- color: var(--text-secondary);
1552
- border-bottom: 1px solid var(--border-subtle);
1553
- }
1554
-
1555
- /* Column-specific styles for both th and td */
1556
- .file-table .col-icon {
1557
- width: 52px;
1558
- padding-left: 16px;
1559
- padding-right: 0;
1560
- text-align: center;
1561
- }
1562
-
1563
- .file-table .col-name {
1564
- text-align: left;
1565
- }
1566
-
1567
- .file-table .col-size {
1568
- width: 100px;
1569
- text-align: right;
1570
- }
1571
-
1572
- .file-table .col-modified {
1573
- width: 120px;
1574
- text-align: right;
1575
- padding-right: 16px;
1576
- }
1577
-
1578
- .file-table tbody tr {
1579
- border-bottom: 1px solid var(--border-subtle);
1580
- transition: all var(--transition-base);
1581
- position: relative;
1582
- }
1583
-
1584
- .file-table tbody tr::before {
1585
- content: '';
1586
- position: absolute;
1587
- left: 0;
1588
- top: 0;
1589
- bottom: 0;
1590
- width: 3px;
1591
- background: var(--link-color);
1592
- opacity: 0;
1593
- transition: opacity var(--transition-base);
1594
- border-radius: 0 2px 2px 0;
1595
- }
1596
-
1597
- .file-table tbody tr:hover {
1598
- background: linear-gradient(90deg,
1599
- var(--hover-bg) 0%,
1600
- rgba(30, 36, 43, 0.5) 50%,
1601
- transparent 100%);
1602
- transform: translateX(4px);
1603
- box-shadow: -4px 0 12px rgba(96, 165, 250, 0.1);
1604
- }
1605
-
1606
- .file-table tbody tr:hover::before {
1607
- opacity: 1;
1608
- }
1609
-
1610
- [data-theme="light"] .file-table tbody tr:hover {
1611
- background: linear-gradient(90deg,
1612
- var(--hover-bg) 0%,
1613
- rgba(241, 245, 249, 0.8) 50%,
1614
- transparent 100%);
1615
- box-shadow: -4px 0 12px rgba(37, 99, 235, 0.08);
1616
- }
1617
-
1618
- .file-table tbody tr:last-child {
1619
- border-bottom: none;
1620
- }
1621
-
1622
- .file-table tbody tr:first-child td {
1623
- padding-top: 16px;
1624
- }
1625
-
1626
- .file-table tbody tr:last-child td {
1627
- padding-bottom: 16px;
1628
- }
1629
-
1630
- .file-table td {
1631
- padding: 10px 16px;
1632
- font-size: 14px;
1633
- vertical-align: middle;
1634
- transition: all var(--transition-base);
1635
- }
1636
-
1637
- /* Icon cell with git status */
1638
- .file-table td.col-icon {
1639
- display: flex;
1640
- align-items: center;
1641
- gap: 8px;
1642
- }
1643
-
1644
- .file-table td.col-icon svg {
1645
- width: 16px;
1646
- height: 16px;
1647
- flex-shrink: 0;
1648
- }
1649
-
1650
- .file-table td.col-size,
1651
- .file-table td.col-modified {
1652
- white-space: nowrap;
1653
- color: var(--text-muted);
1654
- }
1655
-
1656
- .octicon-file,
1657
- .octicon-directory,
1658
- .octicon-breadcrumb,
1659
- .octicon-separator,
1660
- .octicon-home,
1661
- .theme-icon,
1662
- .view-icon,
1663
- .edit-icon {
1664
- width: 16px;
1665
- height: 16px;
1666
- fill: currentColor;
1667
- vertical-align: text-bottom;
1668
- }
1669
-
1670
- /* Brighter, meaningful colors */
1671
- /* Folders: GitHub-style baby blue */
1672
- .octicon-directory {
1673
- fill: #7dd3fc;
1674
- color: #7dd3fc;
1675
- }
1676
- [data-theme="dark"] .file-row--added .icon .octicon-directory,
1677
- [data-theme="dark"] .file-row--added .icon .octicon-file { color: #2ea043; fill: #2ea043; }
1678
- [data-theme="dark"] .file-row--deleted .icon .octicon-directory,
1679
- [data-theme="dark"] .file-row--deleted .icon .octicon-file { color: #f85149; fill: #f85149; }
1680
- [data-theme="dark"] .file-row--modified .icon .octicon-directory,
1681
- [data-theme="dark"] .file-row--modified .icon .octicon-file { color: #d29922; fill: #d29922; }
1682
- [data-theme="dark"] .file-row--renamed .icon .octicon-directory,
1683
- [data-theme="dark"] .file-row--renamed .icon .octicon-file { color: #1f6feb; fill: #1f6feb; }
1684
- [data-theme="dark"] .file-row--untracked .icon .octicon-directory,
1685
- [data-theme="dark"] .file-row--untracked .icon .octicon-file { color: #a371f7; fill: #a371f7; }
1686
- [data-theme="dark"] .file-row--mixed .icon .octicon-directory,
1687
- [data-theme="dark"] .file-row--mixed .icon .octicon-file { color: #db6d28; fill: #db6d28; }
1688
-
1689
- [data-theme="light"] .file-row--added .icon .octicon-directory,
1690
- [data-theme="light"] .file-row--added .icon .octicon-file { color: #1a7f37; fill: #1a7f37; }
1691
- [data-theme="light"] .file-row--deleted .icon .octicon-directory,
1692
- [data-theme="light"] .file-row--deleted .icon .octicon-file { color: #cf222e; fill: #cf222e; }
1693
- [data-theme="light"] .file-row--modified .icon .octicon-directory,
1694
- [data-theme="light"] .file-row--modified .icon .octicon-file { color: #bf8700; fill: #bf8700; }
1695
- [data-theme="light"] .file-row--renamed .icon .octicon-directory,
1696
- [data-theme="light"] .file-row--renamed .icon .octicon-file { color: #0969da; fill: #0969da; }
1697
- [data-theme="light"] .file-row--untracked .icon .octicon-directory,
1698
- [data-theme="light"] .file-row--untracked .icon .octicon-file { color: #8250df; fill: #8250df; }
1699
- [data-theme="light"] .file-row--mixed .icon .octicon-directory,
1700
- [data-theme="light"] .file-row--mixed .icon .octicon-file { color: #9a6700; fill: #9a6700; }
1701
-
1702
- [data-theme="light"] .octicon-directory {
1703
- fill: #54adf5;
1704
- color: #54adf5;
1705
- }
1706
-
1707
- .octicon-home {
1708
- margin-right: 8px;
1709
- }
1710
-
1711
- .octicon-separator {
1712
- width: 12px;
1713
- height: 12px;
1714
- margin: 0 4px;
1715
- opacity: 0.7;
1716
- }
1717
-
1718
- .text-yellow {
1719
- color: #f9c513;
1720
- fill: #f9c513;
1721
- }
1722
- .text-blue {
1723
- color: #0969da;
1724
- fill: #0969da;
1725
- }
1726
- .text-green {
1727
- color: #1a7f37;
1728
- fill: #1a7f37;
1729
- }
1730
- .text-red {
1731
- color: #cf222e;
1732
- fill: #cf222e;
1733
- }
1734
- .text-orange {
1735
- color: #fb8500;
1736
- fill: #fb8500;
1737
- }
1738
- .text-purple {
1739
- color: #8250df;
1740
- fill: #8250df;
1741
- }
1742
- .text-gray {
1743
- color: var(--text-secondary);
1744
- fill: var(--text-secondary);
1745
- }
1746
-
1747
- [data-theme="light"] .text-yellow {
1748
- color: #dbab09;
1749
- fill: #dbab09;
1750
- }
1751
- [data-theme="light"] .text-blue {
1752
- color: #0550ae;
1753
- fill: #0550ae;
1754
- }
1755
- [data-theme="light"] .text-green {
1756
- color: #116329;
1757
- fill: #116329;
1758
- }
1759
- [data-theme="light"] .text-red {
1760
- color: #82071e;
1761
- fill: #82071e;
1762
- }
1763
- [data-theme="light"] .text-orange {
1764
- color: #bc4c00;
1765
- fill: #bc4c00;
1766
- }
1767
- [data-theme="light"] .text-purple {
1768
- color: #6f42c1;
1769
- fill: #6f42c1;
1770
- }
1771
-
1772
- /* Old search styles removed - using new GitHub-style search */
1773
-
1774
- /* Language stats in control bar */
1775
- .language-stats {
1776
- display: flex;
1777
- align-items: center;
1778
- gap: var(--space-md);
1779
- margin-left: var(--space-lg);
1780
- max-width: 400px;
1781
- padding: var(--space-sm) var(--space-md);
1782
- background: linear-gradient(135deg,
1783
- var(--bg-card) 0%,
1784
- var(--bg-elevated) 100%);
1785
- border: 1px solid var(--border-subtle);
1786
- border-radius: var(--radius-lg);
1787
- box-shadow: var(--shadow-sm);
1788
- transition: all var(--transition-base);
1789
- position: relative;
1790
- overflow: visible;
1791
- white-space: nowrap;
1792
- backdrop-filter: blur(10px);
1793
- flex-shrink: 1;
1794
- min-width: 0;
1795
- }
1796
-
1797
- .language-stats:hover {
1798
- overflow: visible;
1799
- z-index: 10;
1800
- box-shadow: var(--shadow-md);
1801
- border-color: var(--border-primary);
1802
- transform: translateY(-1px);
1803
- }
1804
-
1805
- .language-stats:hover::before {
1806
- content: '';
1807
- position: absolute;
1808
- top: -6px;
1809
- left: -10px;
1810
- right: -10px;
1811
- bottom: -6px;
1812
- background: linear-gradient(135deg,
1813
- var(--bg-elevated) 0%,
1814
- var(--bg-card) 100%);
1815
- border: 1px solid var(--border-primary);
1816
- border-radius: var(--radius-xl);
1817
- box-shadow: var(--shadow-lg);
1818
- z-index: -1;
1819
- pointer-events: none;
1820
- }
1821
-
1822
- .lang-stat {
1823
- display: inline-flex;
1824
- align-items: center;
1825
- gap: 6px;
1826
- font-size: 12px;
1827
- color: var(--text-secondary);
1828
- white-space: nowrap;
1829
- flex-shrink: 0;
1830
- padding: 4px 8px;
1831
- border-radius: var(--radius-sm);
1832
- transition: all var(--transition-base);
1833
- position: relative;
1834
- }
1835
-
1836
- .lang-stat:hover {
1837
- background: var(--hover-bg);
1838
- color: var(--text-primary);
1839
- transform: scale(1.05);
1840
- }
1841
-
1842
- .lang-dot {
1843
- width: 10px;
1844
- height: 10px;
1845
- border-radius: 50%;
1846
- display: inline-block;
1847
- flex-shrink: 0;
1848
- box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.1),
1849
- 0 2px 4px rgba(0, 0, 0, 0.2);
1850
- transition: all var(--transition-base);
1851
- }
1852
-
1853
- .lang-stat:hover .lang-dot {
1854
- transform: scale(1.2);
1855
- box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.15),
1856
- 0 4px 8px rgba(0, 0, 0, 0.3);
1857
- }
1858
-
1859
- .lang-name {
1860
- font-weight: 600;
1861
- color: var(--text-primary);
1862
- letter-spacing: -0.01em;
1863
- }
1864
-
1865
- .lang-percent {
1866
- color: var(--text-secondary);
1867
- font-weight: 500;
1868
- font-variant-numeric: tabular-nums;
1869
- }
1870
-
1871
- /* File table improvements */
1872
- .file-table-container {
1873
- margin-top: 0;
1874
- margin-bottom: 24px;
1875
- }
1876
-
1877
- .file-row {
1878
- transition: all 0.15s ease;
1879
- cursor: pointer;
1880
- }
1881
-
1882
- .file-row:hover {
1883
- background-color: var(--hover-bg);
1884
- transform: translateX(2px);
1885
- }
1886
-
1887
- .file-row.focused {
1888
- background-color: var(--link-color);
1889
- color: white;
1890
- }
1891
-
1892
- .file-row.focused a {
1893
- color: white;
1894
- }
1895
-
1896
- .file-row.focused .text-yellow,
1897
- .file-row.focused .text-blue,
1898
- .file-row.focused .text-green,
1899
- .file-row.focused .text-red,
1900
- .file-row.focused .text-orange,
1901
- .file-row.focused .text-purple,
1902
- .file-row.focused .text-gray {
1903
- color: rgba(255, 255, 255, 0.9);
1904
- }
1905
-
1906
- .file-row.hidden,
1907
- .tree-item.hidden,
1908
- .tree-children.hidden {
1909
- display: none;
1910
- }
1911
-
1912
- /* README preview - GitHub style */
1913
- .readme-section {
1914
- margin-top: 32px;
1915
- border: 1px solid var(--border-primary);
1916
- border-radius: 8px;
1917
- overflow: hidden;
1918
- background: var(--bg-primary);
1919
- }
1920
-
1921
- .readme-header {
1922
- background: var(--bg-secondary);
1923
- border-bottom: 1px solid var(--border-primary);
1924
- padding: 12px 16px;
1925
- }
1926
-
1927
- .readme-header h2 {
1928
- font-size: 14px;
1929
- font-weight: 600;
1930
- color: var(--text-accent);
1931
- display: flex;
1932
- align-items: center;
1933
- margin: 0;
1934
- }
1935
-
1936
- .readme-icon {
1937
- width: 16px;
1938
- height: 16px;
1939
- fill: currentColor;
1940
- margin-right: 8px;
1941
- }
1942
-
1943
- .readme-content {
1944
- padding: 32px;
1945
- max-height: none;
1946
- overflow-y: visible;
1947
- }
1948
-
1949
- .readme-content .markdown {
1950
- padding: 0;
1951
- }
1952
-
1953
- /* Enhanced animations */
1954
-
1955
-
1956
- /* Loading states */
1957
-
1958
- /* Quick actions */
1959
- .name {
1960
- position: relative;
1961
- display: flex;
1962
- align-items: center;
1963
- gap: 4px;
1964
- flex-wrap: nowrap;
1965
- }
1966
-
1967
- .quick-actions {
1968
- opacity: 0;
1969
- display: flex;
1970
- gap: 4px;
1971
- position: absolute;
1972
- right: 8px;
1973
- top: 50%;
1974
- transform: translateY(-50%);
1975
- transition: all var(--transition-base);
1976
- z-index: 10;
1977
- background: var(--bg-secondary);
1978
- padding: 2px;
1979
- border-radius: var(--radius-sm);
1980
- backdrop-filter: blur(8px);
1981
- }
1982
-
1983
- .file-row:hover .quick-actions {
1984
- opacity: 1;
1985
- transform: translateY(-50%) scale(1);
1986
- }
1987
-
1988
- .quick-btn {
1989
- background: var(--bg-primary);
1990
- border: 1px solid var(--border-primary);
1991
- border-radius: var(--radius-sm);
1992
- padding: 5px 7px;
1993
- cursor: pointer;
1994
- color: var(--text-secondary);
1995
- transition: all var(--transition-base);
1996
- display: flex;
1997
- align-items: center;
1998
- justify-content: center;
1999
- text-decoration: none;
2000
- box-shadow: var(--shadow-sm);
2001
- width: 28px;
2002
- height: 28px;
2003
- }
2004
-
2005
- .quick-btn:hover {
2006
- background: var(--hover-bg);
2007
- color: var(--text-primary);
2008
- border-color: var(--border-secondary);
2009
- transform: translateY(-2px) scale(1.05);
2010
- box-shadow: var(--shadow-md);
2011
- }
2012
-
2013
- .quick-btn:active {
2014
- transform: translateY(0) scale(1);
2015
- box-shadow: var(--shadow-sm);
2016
- }
2017
-
2018
- .quick-icon {
2019
- width: 12px;
2020
- height: 12px;
2021
- fill: currentColor;
2022
- }
2023
-
2024
- /* Name column styling */
2025
- .file-table .col-name {
2026
- padding-right: 80px;
2027
- min-width: 200px;
2028
- }
2029
-
2030
- .file-table .col-name a {
2031
- display: block;
2032
- overflow: hidden;
2033
- text-overflow: ellipsis;
2034
- white-space: nowrap;
2035
- padding-right: 8px;
2036
- color: var(--link-color);
2037
- text-decoration: none;
2038
- font-weight: 500;
2039
- }
2040
-
2041
- .file-table .col-name a:hover {
2042
- text-decoration: underline;
2043
- }
2044
-
2045
- .file-content {
2046
- background: var(--bg-card);
2047
- border: 1px solid var(--border-subtle);
2048
- border-radius: var(--radius-xl);
2049
- overflow: auto;
2050
- box-shadow: var(--shadow-lg);
2051
- transition: all var(--transition-base);
2052
- backdrop-filter: blur(10px);
2053
- position: relative;
2054
- }
2055
-
2056
- .file-content::before {
2057
- content: '';
2058
- position: absolute;
2059
- top: 0;
2060
- left: 0;
2061
- right: 0;
2062
- height: 1px;
2063
- background: linear-gradient(90deg,
2064
- transparent 0%,
2065
- var(--link-color) 50%,
2066
- transparent 100%);
2067
- opacity: 0.3;
2068
- }
2069
-
2070
- .file-content:hover {
2071
- box-shadow: var(--shadow-xl);
2072
- border-color: var(--border-primary);
2073
- transform: translateY(-1px);
2074
- }
2075
-
2076
- .file-content pre {
2077
- margin: 0;
2078
- padding: 16px 0;
2079
- overflow-x: auto;
2080
- font-size: 13px;
2081
- line-height: 22px;
2082
- background-color: var(--bg-primary);
2083
- }
2084
-
2085
- .file-content code {
2086
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
2087
- font-size: 12px;
2088
- font-weight: 400;
2089
- }
2090
-
2091
- /* Image viewing styles */
2092
- .image-container {
2093
- padding: 20px;
2094
- text-align: center;
2095
- background-color: var(--bg-primary);
2096
- border-radius: 6px;
2097
- }
2098
-
2099
- .image-display {
2100
- max-width: 100%;
2101
- max-height: 80vh;
2102
- height: auto;
2103
- border-radius: 6px;
2104
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
2105
- background: var(--bg-secondary);
2106
- }
2107
-
2108
- [data-theme="light"] .image-display {
2109
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
2110
- }
2111
-
2112
- .image-info {
2113
- margin-top: 16px;
2114
- padding-top: 16px;
2115
- border-top: 1px solid var(--border-primary);
2116
- }
2117
-
2118
- .image-filename {
2119
- font-size: 14px;
2120
- font-weight: 600;
2121
- color: var(--text-primary);
2122
- }
2123
-
2124
- /* Binary file viewing styles */
2125
- .binary-file-container {
2126
- padding: 40px 20px;
2127
- text-align: center;
2128
- background-color: var(--bg-primary);
2129
- border-radius: 6px;
2130
- border: 1px solid var(--border-primary);
2131
- }
2132
-
2133
- .binary-file-info h3 {
2134
- font-size: 18px;
2135
- font-weight: 600;
2136
- color: var(--text-primary);
2137
- margin-bottom: 12px;
2138
- }
2139
-
2140
- .binary-file-info p {
2141
- font-size: 14px;
2142
- color: var(--text-secondary);
2143
- margin-bottom: 20px;
2144
- }
2145
-
2146
- .binary-file-info .btn {
2147
- display: inline-flex;
2148
- align-items: center;
2149
- gap: 8px;
2150
- padding: 8px 16px;
2151
- border-radius: 6px;
2152
- font-size: 14px;
2153
- font-weight: 500;
2154
- text-decoration: none;
2155
- border: 1px solid transparent;
2156
- cursor: pointer;
2157
- }
2158
-
2159
- .binary-file-info .btn-primary {
2160
- background-color: var(--link-color);
2161
- color: white;
2162
- }
2163
-
2164
- .binary-file-info .btn-primary:hover {
2165
- opacity: 0.9;
2166
- }
2167
-
2168
- /* Line numbers for code viewing */
2169
- .with-line-numbers {
2170
- counter-reset: line;
2171
- display: block;
2172
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
2173
- font-weight: 400;
2174
- }
2175
-
2176
- .line-container {
2177
- display: block;
2178
- position: relative;
2179
- transition: all var(--transition-base);
2180
- padding: 0;
2181
- line-height: 20px;
2182
- min-height: 20px;
2183
- border-left: 2px solid transparent;
2184
- }
2185
-
2186
- .line-container:hover {
2187
- background-color: rgba(110, 118, 129, 0.08);
2188
- border-left-color: var(--border-primary);
2189
- }
2190
-
2191
- .line-container.selected {
2192
- background: linear-gradient(90deg, rgba(255, 251, 221, 0.4) 0%, rgba(255, 251, 221, 0.2) 100%);
2193
- border-left-color: rgba(255, 235, 59, 0.6);
2194
- }
2195
-
2196
- [data-theme="dark"] .line-container.selected {
2197
- background: linear-gradient(90deg, rgba(187, 128, 9, 0.2) 0%, rgba(187, 128, 9, 0.1) 100%);
2198
- border-left-color: rgba(255, 235, 59, 0.5);
2199
- }
2200
-
2201
- /* Editor */
2202
- .editor-container {
2203
- border: 1px solid var(--border-primary);
2204
- border-radius: 6px;
2205
- margin: 0;
2206
- background: var(--bg-primary);
2207
- box-shadow: 0 1px 3px rgba(27, 31, 36, 0.12);
2208
- }
2209
-
2210
- .editor-header {
2211
- padding: 12px 16px;
2212
- border-bottom: 1px solid var(--border-primary);
2213
- background: var(--bg-secondary);
2214
- border-radius: 6px 6px 0 0;
2215
- display: flex;
2216
- justify-content: space-between;
2217
- align-items: center;
2218
- }
2219
-
2220
- .editor-title {
2221
- font-size: 14px;
2222
- font-weight: 600;
2223
- color: var(--text-accent);
2224
- display: flex;
2225
- align-items: center;
2226
- margin: 0;
2227
- }
2228
-
2229
- .editor-actions {
2230
- display: flex;
2231
- gap: 6px;
2232
- }
2233
-
2234
- .btn {
2235
- padding: 6px 12px;
2236
- border-radius: 6px;
2237
- font-size: 12px;
2238
- font-weight: 500;
2239
- cursor: pointer;
2240
- border: 1px solid var(--border-primary);
2241
- transition: all 0.15s ease;
2242
- white-space: nowrap;
2243
- }
2244
-
2245
- .btn-primary {
2246
- background: #2da44e;
2247
- color: white;
2248
- border-color: #1b6b32;
2249
- box-shadow: 0 1px 0 rgba(27, 31, 36, 0.04);
2250
- }
2251
-
2252
- .btn-primary:hover {
2253
- background: #2c974b;
2254
- border-color: #1a5d2e;
2255
- }
2256
-
2257
- .btn-secondary {
2258
- background: var(--bg-primary);
2259
- color: var(--text-primary);
2260
- border-color: var(--border-primary);
2261
- box-shadow: 0 1px 0 rgba(27, 31, 36, 0.04);
2262
- }
2263
-
2264
- .btn-secondary:hover {
2265
- background: var(--hover-bg);
2266
- border-color: var(--text-secondary);
2267
- }
2268
-
2269
-
2270
-
2271
-
2272
- /* Monaco editor container (current) */
2273
- #file-editor.monaco-editor {
2274
- height: 100% !important;
2275
- width: 100% !important;
2276
- padding: 0 !important;
2277
- border: none !important;
2278
- background: transparent !important;
2279
- flex: none !important;
2280
- }
2281
-
2282
- .editor-with-line-numbers:focus-within {
2283
- border-color: #0969da;
2284
- box-shadow: 0 0 0 0.2em rgba(9, 105, 218, 0.3);
2285
- }
2286
-
2287
- [data-theme="dark"] .editor-with-line-numbers:focus-within {
2288
- border-color: #58a6ff;
2289
- box-shadow: 0 0 0 0.2em rgba(88, 166, 255, 0.3);
2290
- }
2291
-
2292
- /* New file interface */
2293
- .new-file-container {
2294
- border: 1px solid var(--border-primary);
2295
- border-radius: 6px;
2296
- background: var(--bg-primary);
2297
- box-shadow: 0 1px 3px rgba(27, 31, 36, 0.12);
2298
- }
2299
-
2300
- .new-file-header {
2301
- padding: 16px;
2302
- border-bottom: 1px solid var(--border-primary);
2303
- background: var(--bg-secondary);
2304
- border-radius: 6px 6px 0 0;
2305
- display: flex;
2306
- justify-content: space-between;
2307
- align-items: center;
2308
- gap: 16px;
2309
- }
2310
-
2311
- .filename-section {
2312
- display: flex;
2313
- align-items: center;
2314
- gap: 12px;
2315
- flex: 1;
2316
- }
2317
-
2318
- .filename-label {
2319
- font-size: 14px;
2320
- font-weight: 600;
2321
- color: var(--text-primary);
2322
- white-space: nowrap;
2323
- }
2324
-
2325
- .new-filename-input {
2326
- flex: 1;
2327
- padding: 8px 12px;
2328
- font-size: 14px;
2329
- border: 1px solid var(--border-primary);
2330
- border-radius: 6px;
2331
- background: var(--bg-primary);
2332
- color: var(--text-primary);
2333
- outline: none;
2334
- transition: border-color 0.15s ease;
2335
- }
2336
-
2337
- .new-filename-input:focus {
2338
- border-color: #0969da;
2339
- box-shadow: 0 0 0 0.2em rgba(9, 105, 218, 0.3);
2340
- }
2341
-
2342
- [data-theme="dark"] .new-filename-input:focus {
2343
- border-color: #58a6ff;
2344
- box-shadow: 0 0 0 0.2em rgba(88, 166, 255, 0.3);
2345
- }
2346
-
2347
- .new-file-actions {
2348
- display: flex;
2349
- gap: 8px;
2350
- }
2351
-
2352
-
2353
-
2354
- .line-number {
2355
- display: inline-block;
2356
- width: 56px;
2357
- text-align: right;
2358
- margin-right: 0;
2359
- padding: 0 10px;
2360
- color: var(--text-secondary);
2361
- background: transparent;
2362
- border-right: 1px solid var(--border-primary);
2363
- font-size: 12px;
2364
- line-height: 20px;
2365
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
2366
- font-weight: 400;
2367
- user-select: none;
2368
- -webkit-user-select: none;
2369
- text-decoration: none;
2370
- cursor: pointer;
2371
- transition: all var(--transition-base);
2372
- opacity: 0.7;
2373
- }
2374
-
2375
- .line-number:hover {
2376
- color: var(--link-color);
2377
- text-decoration: none;
2378
- opacity: 1;
2379
- background: rgba(88, 166, 255, 0.08);
2380
- border-right-color: var(--link-color);
2381
- }
2382
-
2383
- .line-content {
2384
- white-space: pre;
2385
- display: inline;
2386
- padding: 0 10px;
2387
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
2388
- font-size: 12px;
2389
- line-height: 20px;
2390
- font-weight: 400;
2391
- letter-spacing: normal;
2392
- }
2393
-
2394
- /* Code folding now handled by Monaco Editor - removed custom implementation */
2395
-
2396
- /* GitHub syntax highlighting - Dark theme */
2397
- .hljs-comment,
2398
- .hljs-quote {
2399
- font-style: normal !important;
2400
- color: #8b949e;
2401
- }
2402
-
2403
- .hljs-keyword,
2404
- .hljs-selector-tag,
2405
- .hljs-literal,
2406
- .hljs-doctag {
2407
- color: #ff7b72;
2408
- }
2409
-
2410
- .hljs-number {
2411
- color: #79c0ff;
2412
- }
2413
-
2414
- .hljs-string,
2415
- .hljs-regexp {
2416
- color: #a5d6ff;
2417
- }
2418
-
2419
- .hljs-title,
2420
- .hljs-section {
2421
- color: #d2a8ff;
2422
- }
2423
-
2424
- .hljs-name,
2425
- .hljs-attribute {
2426
- color: #ffa657;
2427
- }
2428
-
2429
- .hljs-variable,
2430
- .hljs-template-variable {
2431
- color: #ffa657;
2432
- }
2433
-
2434
- .hljs-type,
2435
- .hljs-class .hljs-title {
2436
- color: #ffa657;
2437
- }
2438
-
2439
- .hljs-symbol,
2440
- .hljs-bullet,
2441
- .hljs-built_in,
2442
- .hljs-builtin-name {
2443
- color: #ff7b72;
2444
- }
2445
-
2446
- .hljs-function,
2447
- .hljs-function .hljs-title {
2448
- color: #d2a8ff;
2449
- }
2450
-
2451
- /* Enhanced semantic highlighting */
2452
- .hljs-title.function_ {
2453
- color: #d2a8ff;
2454
- }
2455
-
2456
- .hljs-title.class_ {
2457
- color: #ffa657;
2458
- }
2459
-
2460
- .hljs-title.method_ {
2461
- color: #79c0ff;
2462
- }
2463
-
2464
- .hljs-tag {
2465
- color: #7ee787;
2466
- }
2467
-
2468
- .hljs-meta {
2469
- color: #79c0ff;
2470
- }
2471
-
2472
- .hljs-deletion {
2473
- color: #ffa198;
2474
- background-color: #490202;
2475
- }
2476
-
2477
- .hljs-addition {
2478
- color: #aff5b4;
2479
- background-color: #033a16;
2480
- }
2481
-
2482
- .hljs-emphasis {
2483
- font-style: italic;
2484
- }
2485
-
2486
- .hljs-strong {
2487
- font-weight: bold;
2488
- }
2489
-
2490
- /* GitHub syntax highlighting - Light theme */
2491
- [data-theme="light"] .hljs-comment,
2492
- [data-theme="light"] .hljs-quote {
2493
- color: #656d76;
2494
- }
2495
-
2496
- [data-theme="light"] .hljs-keyword,
2497
- [data-theme="light"] .hljs-selector-tag,
2498
- [data-theme="light"] .hljs-literal,
2499
- [data-theme="light"] .hljs-doctag {
2500
- color: #cf222e;
2501
- }
2502
-
2503
- [data-theme="light"] .hljs-number {
2504
- color: #0550ae;
2505
- }
2506
-
2507
- [data-theme="light"] .hljs-string,
2508
- [data-theme="light"] .hljs-regexp {
2509
- color: #0a3069;
2510
- }
2511
-
2512
- [data-theme="light"] .hljs-title,
2513
- [data-theme="light"] .hljs-section {
2514
- color: #8250df;
2515
- }
2516
-
2517
- [data-theme="light"] .hljs-name,
2518
- [data-theme="light"] .hljs-attribute {
2519
- color: #953800;
2520
- }
2521
-
2522
- [data-theme="light"] .hljs-variable,
2523
- [data-theme="light"] .hljs-template-variable {
2524
- color: #953800;
2525
- }
2526
-
2527
- [data-theme="light"] .hljs-type,
2528
- [data-theme="light"] .hljs-class .hljs-title {
2529
- color: #953800;
2530
- }
2531
-
2532
- [data-theme="light"] .hljs-symbol,
2533
- [data-theme="light"] .hljs-bullet,
2534
- [data-theme="light"] .hljs-built_in,
2535
- [data-theme="light"] .hljs-builtin-name {
2536
- color: #cf222e;
2537
- }
2538
-
2539
- [data-theme="light"] .hljs-function {
2540
- color: #8250df;
2541
- }
2542
-
2543
- [data-theme="light"] .hljs-tag {
2544
- color: #116329;
2545
- }
2546
-
2547
- [data-theme="light"] .hljs-meta {
2548
- color: #0550ae;
2549
- }
2550
-
2551
- [data-theme="light"] .hljs-deletion {
2552
- color: #82071e;
2553
- background-color: #ffebe9;
2554
- }
2555
-
2556
- [data-theme="light"] .hljs-addition {
2557
- color: #116329;
2558
- background-color: #dafbe1;
2559
- }
2560
-
2561
- /* Beautiful markdown rendering for all contexts */
2562
- .markdown {
2563
- padding: 32px;
2564
- max-width: 100%;
2565
- font-size: 16px;
2566
- line-height: 1.6;
2567
- }
2568
-
2569
- /* Headings with proper hierarchy */
2570
- .markdown h1 {
2571
- font-size: 2rem;
2572
- font-weight: 600;
2573
- margin: 0 0 24px 0;
2574
- padding-bottom: 12px;
2575
- border-bottom: 1px solid var(--border-primary);
2576
- color: var(--text-accent);
2577
- line-height: 1.25;
2578
- }
2579
-
2580
- .markdown h2 {
2581
- font-size: 1.5rem;
2582
- font-weight: 600;
2583
- margin: 32px 0 16px 0;
2584
- color: var(--text-accent);
2585
- border-bottom: 1px solid var(--border-secondary);
2586
- padding-bottom: 8px;
2587
- line-height: 1.25;
2588
- }
2589
-
2590
- .markdown h3 {
2591
- font-size: 1.25rem;
2592
- font-weight: 600;
2593
- margin: 24px 0 16px 0;
2594
- color: var(--text-accent);
2595
- border: none;
2596
- line-height: 1.25;
2597
- }
2598
-
2599
- .markdown h4 {
2600
- font-size: 1rem;
2601
- font-weight: 600;
2602
- margin: 24px 0 16px 0;
2603
- color: var(--text-accent);
2604
- border: none;
2605
- line-height: 1.25;
2606
- }
2607
-
2608
- .markdown h5,
2609
- .markdown h6 {
2610
- font-size: 0.875rem;
2611
- font-weight: 600;
2612
- margin: 20px 0 12px 0;
2613
- color: var(--text-accent);
2614
- border: none;
2615
- line-height: 1.25;
2616
- }
2617
-
2618
- /* Paragraphs and text */
2619
- .markdown p {
2620
- margin-bottom: 16px;
2621
- color: var(--text-primary);
2622
- line-height: 1.6;
2623
- font-size: 16px;
2624
- }
2625
-
2626
- /* Lists with custom styling */
2627
- .markdown ul,
2628
- .markdown ol {
2629
- margin-bottom: 16px;
2630
- padding-left: 0;
2631
- list-style: none;
2632
- }
2633
-
2634
- .markdown li {
2635
- margin-bottom: 8px;
2636
- color: var(--text-primary);
2637
- line-height: 1.6;
2638
- font-size: 16px;
2639
- position: relative;
2640
- padding-left: 24px;
2641
- }
2642
-
2643
- .markdown ul li:before {
2644
- content: "•";
2645
- color: var(--text-secondary);
2646
- font-size: 18px;
2647
- position: absolute;
2648
- left: 0;
2649
- top: 0;
2650
- }
2651
-
2652
- .markdown ol {
2653
- counter-reset: item;
2654
- }
2655
-
2656
- .markdown ol li {
2657
- counter-increment: item;
2658
- padding-left: 32px;
2659
- }
2660
-
2661
- .markdown ol li:before {
2662
- content: counter(item) ".";
2663
- color: var(--text-secondary);
2664
- font-weight: 600;
2665
- position: absolute;
2666
- left: 0;
2667
- top: 0;
2668
- }
2669
-
2670
- .markdown li strong {
2671
- color: var(--text-accent);
2672
- font-weight: 600;
2673
- }
2674
-
2675
- /* Code styling */
2676
- .markdown code {
2677
- background-color: var(--bg-secondary);
2678
- padding: 3px 6px;
2679
- border-radius: 6px;
2680
- font-size: 85%;
2681
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
2682
- color: var(--text-accent);
2683
- border: 1px solid var(--border-primary);
2684
- }
2685
-
2686
- .markdown pre {
2687
- background-color: var(--bg-primary);
2688
- padding: 16px;
2689
- border-radius: 6px;
2690
- overflow-x: auto;
2691
- margin: 16px 0;
2692
- border: 1px solid var(--border-primary);
2693
- }
2694
-
2695
- .markdown pre code {
2696
- background: none;
2697
- padding: 0;
2698
- border: none;
2699
- font-size: 12px;
2700
- line-height: 20px;
2701
- color: var(--text-primary);
2702
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
2703
- }
2704
-
2705
- /* Other elements */
2706
- .markdown blockquote {
2707
- border-left: 4px solid var(--border-primary);
2708
- padding-left: 16px;
2709
- margin: 16px 0;
2710
- color: var(--text-secondary);
2711
- font-style: italic;
2712
- }
2713
-
2714
- .markdown a {
2715
- color: var(--link-color);
2716
- text-decoration: none;
2717
- }
2718
-
2719
- .markdown a:hover {
2720
- text-decoration: underline;
2721
- }
2722
-
2723
- .markdown table {
2724
- border-collapse: collapse;
2725
- margin-bottom: 16px;
2726
- width: 100%;
2727
- }
2728
-
2729
- .markdown table th,
2730
- .markdown table td {
2731
- border: 1px solid var(--border-primary);
2732
- padding: 8px 12px;
2733
- text-align: left;
2734
- }
2735
-
2736
- .markdown table th {
2737
- background-color: var(--bg-secondary);
2738
- font-weight: 600;
2739
- color: var(--text-accent);
2740
- }
2741
-
2742
- .markdown hr {
2743
- border: none;
2744
- border-top: 1px solid var(--border-primary);
2745
- margin: 24px 0;
2746
- }
2747
-
2748
-
2749
- @media (max-width: 768px) {
2750
- .main-content {
2751
- padding: 12px 16px;
2752
- }
2753
-
2754
- .repo-canvas-content {
2755
- padding: 12px 16px;
2756
- }
2757
-
2758
- .header-content {
2759
- padding: 8px 16px;
2760
- }
2761
-
2762
- .header-left h1 {
2763
- font-size: 14px;
2764
- }
2765
-
2766
- .file-table .col-size,
2767
- .file-table .col-modified {
2768
- display: none;
2769
- }
2770
-
2771
- .repo-controls {
2772
- flex-direction: column;
2773
- gap: 12px;
2774
- align-items: stretch;
2775
- }
2776
-
2777
- .repo-controls-right {
2778
- flex-direction: column;
2779
- gap: 8px;
2780
- }
2781
-
2782
- .keyboard-help-content {
2783
- margin: 20px;
2784
- max-width: calc(100% - 40px);
2785
- }
2786
-
2787
- .keyboard-shortcuts-grid {
2788
- grid-template-columns: 1fr;
2789
- gap: 24px;
2790
- }
2791
-
2792
- .keyboard-help-body {
2793
- padding: 20px;
2794
- }
2795
- }
2796
-
2797
- /* Notification System */
2798
- .notification {
2799
- position: fixed;
2800
- top: 20px;
2801
- right: 20px;
2802
- padding: 12px 16px;
2803
- border-radius: 6px;
2804
- color: white;
2805
- font-size: 14px;
2806
- font-weight: 500;
2807
- z-index: 10000;
2808
- max-width: 400px;
2809
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
2810
- backdrop-filter: blur(10px);
2811
- border: 1px solid rgba(255, 255, 255, 0.1);
2812
- transition: opacity 0.3s ease;
2813
- }
2814
-
2815
- .notification-success {
2816
- background: rgba(46, 160, 67, 0.9);
2817
- border-color: rgba(46, 160, 67, 0.5);
2818
- }
2819
-
2820
- .notification-error {
2821
- background: rgba(248, 81, 73, 0.9);
2822
- border-color: rgba(248, 81, 73, 0.5);
2823
- }
2824
-
2825
- .notification-info {
2826
- background: rgba(88, 166, 255, 0.9);
2827
- border-color: rgba(88, 166, 255, 0.5);
2828
- }
2829
-
2830
-
2831
-
2832
- /* Keyboard Help Overlay */
2833
- .keyboard-help-overlay {
2834
- position: fixed;
2835
- top: 0;
2836
- left: 0;
2837
- width: 100%;
2838
- height: 100%;
2839
- background: rgba(0, 0, 0, 0.8);
2840
- backdrop-filter: blur(4px);
2841
- z-index: 99999;
2842
- display: flex;
2843
- align-items: center;
2844
- justify-content: center;
2845
- animation: fadeIn 0.2s ease-out;
2846
- }
2847
-
2848
- .keyboard-help-content {
2849
- background: var(--bg-primary);
2850
- border: 1px solid var(--border-primary);
2851
- border-radius: 8px;
2852
- box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5);
2853
- max-width: 800px;
2854
- max-height: 80vh;
2855
- overflow-y: auto;
2856
- margin: 20px;
2857
- animation: slideUp 0.3s ease-out;
2858
- }
2859
-
2860
- .keyboard-help-header {
2861
- display: flex;
2862
- justify-content: space-between;
2863
- align-items: center;
2864
- padding: 24px 30px 16px;
2865
- border-bottom: 1px solid var(--border-primary);
2866
- background: var(--bg-secondary);
2867
- border-radius: 8px 8px 0 0;
2868
- }
2869
-
2870
- .keyboard-help-header h2 {
2871
- color: var(--text-primary);
2872
- font-size: 24px;
2873
- font-weight: 600;
2874
- margin: 0;
2875
- }
2876
-
2877
- .keyboard-help-close {
2878
- background: none;
2879
- border: none;
2880
- color: var(--text-secondary);
2881
- font-size: 24px;
2882
- cursor: pointer;
2883
- padding: 4px;
2884
- border-radius: 4px;
2885
- transition: color 0.2s ease;
2886
- }
2887
-
2888
- .keyboard-help-close:hover {
2889
- color: var(--text-primary);
2890
- background: var(--hover-bg);
2891
- }
2892
-
2893
- .keyboard-help-body {
2894
- padding: 0;
2895
- }
2896
-
2897
- .shortcuts-container {
2898
- display: grid;
2899
- grid-template-columns: 1fr 1fr;
2900
- gap: 0;
2901
- }
2902
-
2903
- .shortcut-section {
2904
- border-right: 1px solid var(--border-primary);
2905
- padding: 40px 50px;
2906
- }
2907
-
2908
- .shortcut-section:last-child {
2909
- border-right: none;
2910
- }
2911
-
2912
-
2913
- .shortcut-section h3 {
2914
- color: var(--text-primary);
2915
- font-size: 16px;
2916
- font-weight: 600;
2917
- margin: 0 0 24px 0;
2918
- }
2919
-
2920
- .shortcut-list {
2921
- display: flex;
2922
- flex-direction: column;
2923
- gap: 20px;
2924
- }
2925
-
2926
- .shortcut-item {
2927
- display: flex;
2928
- justify-content: space-between;
2929
- align-items: center;
2930
- padding: 0;
2931
- border-radius: 0;
2932
- transition: none;
2933
- }
2934
-
2935
-
2936
- .shortcut-keys {
2937
- display: flex;
2938
- gap: 6px;
2939
- align-items: center;
2940
- }
2941
-
2942
- .shortcut-keys kbd {
2943
- background: var(--bg-tertiary);
2944
- border: 1px solid var(--border-secondary);
2945
- border-radius: 4px;
2946
- padding: 4px 8px;
2947
- font-size: 11px;
2948
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
2949
- color: var(--text-primary);
2950
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
2951
- white-space: nowrap;
2952
- min-width: 20px;
2953
- text-align: center;
2954
- }
2955
-
2956
- .shortcut-desc {
2957
- color: var(--text-primary);
2958
- flex: 1;
2959
- text-align: left;
2960
- font-size: 14px;
2961
- }
2962
-
2963
- @keyframes fadeIn {
2964
- from {
2965
- opacity: 0;
2966
- }
2967
- to {
2968
- opacity: 1;
2969
- }
2970
- }
2971
-
2972
- @keyframes slideUp {
2973
- from {
2974
- opacity: 0;
2975
- transform: translateY(30px);
2976
- }
2977
- to {
2978
- opacity: 1;
2979
- transform: translateY(0);
2980
- }
2981
- }
2982
-
2983
- /* Git Integration */
2984
-
2985
- .git-status {
2986
- display: inline;
2987
- margin-left: 8px;
2988
- padding: 0;
2989
- border-radius: 4px;
2990
- opacity: 0.8;
2991
- vertical-align: middle;
2992
- line-height: inherit;
2993
- }
2994
-
2995
- .git-status-icon {
2996
- width: 10px;
2997
- height: 10px;
2998
- fill: currentColor;
2999
- display: inline;
3000
- vertical-align: middle;
3001
- }
3002
-
3003
- /* Git status colors - brighter palette */
3004
- .git-status-M {
3005
- color: #d29922; /* modified - amber */
3006
- }
3007
-
3008
- .git-status-A {
3009
- color: #2ea043; /* added - green */
3010
- }
3011
-
3012
- .git-status-D {
3013
- color: #f85149; /* deleted - red */
3014
- }
3015
-
3016
- .git-status-R {
3017
- color: #1f6feb; /* renamed - blue */
3018
- }
3019
-
3020
- .git-status-\?\? {
3021
- color: #a371f7; /* untracked - purple */
3022
- }
3023
-
3024
- .git-status-MM,
3025
- .git-status-AM,
3026
- .git-status-AD {
3027
- color: #db6d28; /* mixed - orange */
3028
- }
3029
-
3030
- [data-theme="light"] .git-status-M {
3031
- color: #bf8700;
3032
- }
3033
-
3034
- [data-theme="light"] .git-status-A {
3035
- color: #1a7f37;
3036
- }
3037
-
3038
- [data-theme="light"] .git-status-D {
3039
- color: #cf222e;
3040
- }
3041
-
3042
- [data-theme="light"] .git-status-R {
3043
- color: #0969da;
3044
- }
3045
-
3046
- [data-theme="light"] .git-status-MM,
3047
- [data-theme="light"] .git-status-AM,
3048
- [data-theme="light"] .git-status-AD {
3049
- color: #9a6700;
3050
- }
3051
-
3052
- /* Git Diff Viewer */
3053
- .diff-viewer-overlay {
3054
- position: fixed;
3055
- top: 0;
3056
- left: 0;
3057
- width: 100%;
3058
- height: 100%;
3059
- background: rgba(0, 0, 0, 0.8);
3060
- backdrop-filter: blur(4px);
3061
- z-index: 99999;
3062
- display: flex;
3063
- align-items: center;
3064
- justify-content: center;
3065
- animation: fadeIn 0.2s ease-out;
3066
- }
3067
-
3068
- .diff-viewer-modal {
3069
- background: var(--bg-primary);
3070
- border: 1px solid var(--border-primary);
3071
- border-radius: 8px;
3072
- box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5);
3073
- width: 90vw;
3074
- max-width: 1200px;
3075
- height: 80vh;
3076
- display: flex;
3077
- flex-direction: column;
3078
- animation: slideUp 0.3s ease-out;
3079
- }
3080
-
3081
- .diff-viewer-header {
3082
- display: flex;
3083
- justify-content: space-between;
3084
- align-items: center;
3085
- padding: 16px 20px;
3086
- border-bottom: 1px solid var(--border-primary);
3087
- background: var(--bg-secondary);
3088
- border-radius: 8px 8px 0 0;
3089
- }
3090
-
3091
- .diff-viewer-title {
3092
- color: var(--text-primary);
3093
- font-size: 16px;
3094
- font-weight: 600;
3095
- margin: 0;
3096
- display: flex;
3097
- align-items: center;
3098
- gap: 8px;
3099
- }
3100
-
3101
- .diff-close-btn {
3102
- background: none;
3103
- border: none;
3104
- color: var(--text-secondary);
3105
- font-size: 24px;
3106
- cursor: pointer;
3107
- padding: 4px;
3108
- border-radius: 4px;
3109
- transition: color 0.2s ease;
3110
- }
3111
-
3112
- .diff-close-btn:hover {
3113
- color: var(--text-primary);
3114
- background: var(--hover-bg);
3115
- }
3116
-
3117
- .diff-viewer-content {
3118
- flex: 1;
3119
- overflow: auto;
3120
- padding: 0;
3121
- }
3122
-
3123
- .diff-container {
3124
- display: flex;
3125
- height: 100%;
3126
- }
3127
-
3128
- .diff-side {
3129
- flex: 1;
3130
- border-right: 1px solid var(--border-primary);
3131
- display: flex;
3132
- flex-direction: column;
3133
- }
3134
-
3135
- .diff-side:last-child {
3136
- border-right: none;
3137
- }
3138
-
3139
- .diff-side-header {
3140
- background: var(--bg-secondary);
3141
- padding: 8px 16px;
3142
- border-bottom: 1px solid var(--border-primary);
3143
- font-size: 12px;
3144
- font-weight: 600;
3145
- color: var(--text-secondary);
3146
- }
3147
-
3148
- .diff-side-content {
3149
- flex: 1;
3150
- overflow: auto;
3151
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
3152
- font-size: 12px;
3153
- line-height: 20px;
3154
- font-weight: 400;
3155
- }
3156
-
3157
- .diff-line {
3158
- display: flex;
3159
- white-space: pre;
3160
- min-height: 1.4em;
3161
- }
3162
-
3163
- .diff-line-number {
3164
- background: var(--bg-secondary);
3165
- color: var(--text-secondary);
3166
- text-align: right;
3167
- padding: 0 8px;
3168
- border-right: 1px solid var(--border-primary);
3169
- min-width: 50px;
3170
- user-select: none;
3171
- flex-shrink: 0;
3172
- }
3173
-
3174
- .diff-line-content {
3175
- padding: 0 8px;
3176
- flex: 1;
3177
- overflow-x: auto;
3178
- }
3179
-
3180
- .diff-line-added {
3181
- background: #0f5132;
3182
- color: #75b798;
3183
- }
3184
-
3185
- .diff-line-added .diff-line-number {
3186
- background: #0a4027;
3187
- }
3188
-
3189
- .diff-line-removed {
3190
- background: #67060c;
3191
- color: #f8d7da;
3192
- }
3193
-
3194
- .diff-line-removed .diff-line-number {
3195
- background: #4a0409;
3196
- }
3197
-
3198
- .diff-line-context {
3199
- background: var(--bg-primary);
3200
- color: var(--text-primary);
3201
- }
3202
-
3203
- [data-theme="light"] .diff-line-added {
3204
- background: #d1e7dd;
3205
- color: #055160;
3206
- }
3207
-
3208
- [data-theme="light"] .diff-line-added .diff-line-number {
3209
- background: #badbcc;
3210
- }
3211
-
3212
- [data-theme="light"] .diff-line-removed {
3213
- background: #f8d7da;
3214
- color: #721c24;
3215
- }
3216
-
3217
- [data-theme="light"] .diff-line-removed .diff-line-number {
3218
- background: #f1aeb5;
3219
- }
3220
-
3221
- .diff-stats {
3222
- display: flex;
3223
- gap: 16px;
3224
- align-items: center;
3225
- font-size: 12px;
3226
- }
3227
-
3228
- .diff-stat {
3229
- display: flex;
3230
- align-items: center;
3231
- gap: 4px;
3232
- }
3233
-
3234
- .diff-stat-added {
3235
- color: #28a745;
3236
- }
3237
-
3238
- .diff-stat-removed {
3239
- color: #dc3545;
3240
- }
3241
-
3242
- /* Clean GitHub-style diff */
3243
- .diff-container {
3244
- width: 100%;
3245
- margin: 0;
3246
- padding: 0;
3247
- background: var(--bg-primary);
3248
- overflow-x: auto;
3249
- overflow-y: visible;
3250
- }
3251
-
3252
- .diff-content {
3253
- padding: 0;
3254
- min-width: 100%;
3255
- display: block;
3256
- }
3257
-
3258
- .raw-diff-container {
3259
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
3260
- font-size: 12px;
3261
- line-height: 20px;
3262
- font-weight: 400;
3263
- min-width: max-content;
3264
- }
3265
-
3266
- /* Diff line with two line number columns + content */
3267
- .diff-line {
3268
- display: flex;
3269
- min-height: 20px;
3270
- line-height: 20px;
3271
- color: var(--text-primary);
3272
- transition: background-color 0.1s ease;
3273
- align-items: stretch;
3274
- }
3275
-
3276
- .diff-line:hover {
3277
- background-color: var(--hover-bg);
3278
- }
3279
-
3280
- /* Line number columns - two side by side */
3281
- .diff-line-number {
3282
- display: inline-block;
3283
- min-width: 50px;
3284
- max-width: 50px;
3285
- padding: 0 8px;
3286
- text-align: right;
3287
- color: var(--text-secondary);
3288
- background: var(--bg-secondary);
3289
- user-select: none;
3290
- flex-shrink: 0;
3291
- font-variant-numeric: tabular-nums;
3292
- border-right: 1px solid var(--border-primary);
3293
- }
3294
-
3295
- .diff-line-number.old {
3296
- border-right: none;
3297
- }
3298
-
3299
- .diff-line-number.new {
3300
- border-right: 1px solid var(--border-primary);
3301
- }
3302
-
3303
- /* Empty line numbers for headers/hunks */
3304
- .diff-line-number:empty::before {
3305
- content: '\00a0'; /* Non-breaking space to maintain height */
3306
- }
3307
-
3308
- /* Content area - takes remaining space */
3309
- .diff-line-content {
3310
- padding: 0 10px;
3311
- white-space: pre;
3312
- overflow-x: auto;
3313
- flex: 1;
3314
- min-width: 0;
3315
- }
3316
-
3317
- /* Different line types - GitHub-style subtle backgrounds */
3318
- .diff-line-added {
3319
- background: rgba(46, 160, 67, 0.15);
3320
- }
3321
-
3322
- .diff-line-added .diff-line-number {
3323
- background: rgba(46, 160, 67, 0.1);
3324
- }
3325
-
3326
- .diff-line-removed {
3327
- background: rgba(248, 81, 73, 0.15);
3328
- }
3329
-
3330
- .diff-line-removed .diff-line-number {
3331
- background: rgba(248, 81, 73, 0.1);
3332
- }
3333
-
3334
- .diff-line-context {
3335
- background: var(--bg-primary);
3336
- }
3337
-
3338
- .diff-line-hunk {
3339
- background: rgba(88, 166, 255, 0.1);
3340
- font-weight: 600;
3341
- color: #58a6ff;
3342
- }
3343
-
3344
- .diff-line-hunk .diff-line-number {
3345
- background: rgba(88, 166, 255, 0.05);
3346
- }
3347
-
3348
- .diff-line-header {
3349
- background: var(--bg-secondary);
3350
- color: var(--text-secondary);
3351
- font-weight: 500;
3352
- opacity: 0.9;
3353
- }
3354
-
3355
- .diff-line-header .diff-line-number {
3356
- background: var(--bg-secondary);
3357
- }
3358
-
3359
- /* Light theme adjustments */
3360
- [data-theme="light"] .diff-line-added {
3361
- background: rgba(46, 160, 67, 0.1);
3362
- }
3363
-
3364
- [data-theme="light"] .diff-line-added .diff-line-number {
3365
- background: rgba(46, 160, 67, 0.08);
3366
- }
3367
-
3368
- [data-theme="light"] .diff-line-removed {
3369
- background: rgba(248, 81, 73, 0.1);
3370
- }
3371
-
3372
- [data-theme="light"] .diff-line-removed .diff-line-number {
3373
- background: rgba(248, 81, 73, 0.08);
3374
- }
3375
-
3376
- [data-theme="light"] .diff-line-hunk {
3377
- background: rgba(9, 105, 218, 0.1);
3378
- color: #0969da;
3379
- }
3380
-
3381
- [data-theme="light"] .diff-line-hunk .diff-line-number {
3382
- background: rgba(9, 105, 218, 0.05);
3383
- }
3384
-
3385
- .no-changes {
3386
- padding: 40px;
3387
- text-align: center;
3388
- color: var(--text-secondary);
3389
- font-style: italic;
3390
- }
3391
-
3392
- /* Git status indicator in icon cell */
3393
- .file-table .col-icon .git-status {
3394
- font-size: 12px;
3395
- }
3396
-
3397
- /* Untracked file status styling */
3398
- .git-status-untracked {
3399
- color: #7c3aed !important;
3400
- }
3401
-
3402
- [data-theme="light"] .git-status-untracked {
3403
- color: #8b5cf6 !important;
3404
- }
3405
-
3406
- /* Monaco Editor styling - inner container only */
3407
- .monaco-editor-container {
3408
- height: 600px !important;
3409
- width: 100% !important;
3410
- min-width: 400px !important;
3411
- overflow: hidden !important;
3412
- background: var(--bg-primary);
3413
- position: relative !important;
3414
- display: block !important;
3415
- border-radius: 0 0 6px 6px;
3416
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
3417
- }
3418
-
3419
- .monaco-editor-container .monaco-editor {
3420
- height: 600px !important;
3421
- width: 100% !important;
3422
- min-width: 400px !important;
3423
- position: relative !important;
3424
- }
3425
-
3426
- /* Monaco File Viewer - Elite code browsing */
3427
- .monaco-file-viewer {
3428
- width: 100%;
3429
- height: 100%;
3430
- min-height: 400px;
3431
- background: var(--bg-primary);
3432
- border-radius: var(--radius-lg);
3433
- overflow: hidden;
3434
- position: relative;
3435
- }
3436
-
3437
- .monaco-file-viewer .monaco-editor {
3438
- background: var(--bg-primary) !important;
3439
- }
3440
-
3441
- .monaco-file-viewer .monaco-editor .margin {
3442
- background: var(--bg-primary) !important;
3443
- }
3444
-
3445
- .monaco-file-viewer .monaco-editor .monaco-editor-background {
3446
- background: var(--bg-primary) !important;
3447
- }
3448
-
3449
- /* Match GitHub-style line number colors */
3450
- .monaco-file-viewer .monaco-editor .margin-view-overlays .line-numbers {
3451
- color: var(--text-secondary) !important;
3452
- opacity: 0.7;
3453
- transition: all var(--transition-base);
3454
- }
3455
-
3456
- .monaco-file-viewer .monaco-editor .margin-view-overlays .line-numbers:hover {
3457
- color: var(--link-color) !important;
3458
- opacity: 1;
3459
- }
3460
-
3461
- /* Folding controls styling */
3462
- .monaco-file-viewer .monaco-editor .folding {
3463
- color: var(--text-secondary) !important;
3464
- transition: color var(--transition-base);
3465
- }
3466
-
3467
- .monaco-file-viewer .monaco-editor .folding:hover {
3468
- color: var(--link-color) !important;
3469
- }
3470
-
3471
- /* Selection and highlight colors */
3472
- .monaco-file-viewer .monaco-editor .selected-text {
3473
- background-color: rgba(88, 166, 255, 0.2) !important;
3474
- }
3475
-
3476
- .monaco-file-viewer .monaco-editor .current-line {
3477
- background-color: rgba(110, 118, 129, 0.08) !important;
3478
- }
3479
-
3480
- /* Bracket matching */
3481
- .monaco-file-viewer .monaco-editor .bracket-match {
3482
- background-color: rgba(110, 118, 129, 0.2) !important;
3483
- border: 1px solid var(--border-primary) !important;
3484
- }
3485
-
3486
- /* Breadcrumbs styling */
3487
- .monaco-file-viewer .monaco-breadcrumbs {
3488
- background: var(--bg-secondary) !important;
3489
- border-bottom: 1px solid var(--border-subtle) !important;
3490
- }
3491
-
3492
- .monaco-file-viewer .monaco-breadcrumb-item {
3493
- color: var(--text-secondary) !important;
3494
- }
3495
-
3496
- .monaco-file-viewer .monaco-breadcrumb-item:hover {
3497
- color: var(--link-color) !important;
3498
- background: var(--hover-bg) !important;
3499
- }
3500
-
3501
- /* Minimap styling */
3502
- .monaco-file-viewer .minimap {
3503
- background: var(--bg-secondary) !important;
3504
- }
3505
-
3506
- .monaco-file-viewer .minimap .minimap-slider {
3507
- background: var(--border-primary) !important;
3508
- }
3509
-
3510
- .monaco-file-viewer .minimap .minimap-slider:hover {
3511
- background: var(--text-secondary) !important;
3512
- }
3513
-
3514
- /* Find widget styling */
3515
- .monaco-file-viewer .find-widget {
3516
- background: var(--bg-elevated) !important;
3517
- border: 1px solid var(--border-primary) !important;
3518
- border-radius: var(--radius-md) !important;
3519
- box-shadow: var(--shadow-lg) !important;
3520
- }
3521
-
3522
- /* Go to Symbol widget */
3523
- .monaco-file-viewer .quick-input-widget {
3524
- background: var(--bg-elevated) !important;
3525
- border: 1px solid var(--border-primary) !important;
3526
- border-radius: var(--radius-lg) !important;
3527
- box-shadow: var(--shadow-xl) !important;
3528
- }
3529
-
3530
- /* Scrollbar styling */
3531
- .monaco-file-viewer .monaco-scrollable-element > .scrollbar {
3532
- background: var(--bg-secondary) !important;
3533
- }
3534
-
3535
- .monaco-file-viewer .monaco-scrollable-element > .scrollbar > .slider {
3536
- background: var(--border-primary) !important;
3537
- border-radius: 5px !important;
3538
- }
3539
-
3540
- .monaco-file-viewer .monaco-scrollable-element > .scrollbar > .slider:hover {
3541
- background: var(--text-secondary) !important;
3542
- }
3543
-
3544
- /* Occurrence highlights */
3545
- .monaco-file-viewer .monaco-editor .word-highlight {
3546
- background-color: rgba(88, 166, 255, 0.15) !important;
3547
- border: 1px solid rgba(88, 166, 255, 0.3) !important;
3548
- }
3549
-
3550
- .monaco-file-viewer .monaco-editor .word-highlight.word-highlight-strong {
3551
- background-color: rgba(88, 166, 255, 0.25) !important;
3552
- border-color: rgba(88, 166, 255, 0.5) !important;
3553
- }
3554
-
3555
- /* Monaco theme integration - match view/browse UI */
3556
- .monaco-editor .monaco-editor-background {
3557
- background-color: var(--bg-primary) !important;
3558
- }
3559
-
3560
- .monaco-editor .monaco-editor .margin {
3561
- background-color: var(--bg-primary) !important;
3562
- }
3563
-
3564
- .monaco-editor .monaco-scrollable-element .scrollbar {
3565
- background: var(--bg-secondary) !important;
3566
- }
3567
-
3568
- .monaco-editor .monaco-scrollable-element .slider {
3569
- background: var(--border-primary) !important;
3570
- }
3571
-
3572
- .monaco-editor .monaco-scrollable-element .slider:hover {
3573
- background: var(--text-secondary) !important;
3574
- }
3575
-
3576
- /* Ensure Monaco editor integrates seamlessly with container */
3577
- .monaco-editor-container .monaco-editor .monaco-editor-background,
3578
- .monaco-editor-container .monaco-editor .margin-view-overlays .current-line {
3579
- background-color: var(--bg-primary) !important;
3580
- }
3581
-
3582
- /* In-file search overlay - Enhanced */
3583
- .inline-search-overlay {
3584
- position: fixed;
3585
- top: 70px;
3586
- right: 24px;
3587
- z-index: 1000;
3588
- background: linear-gradient(135deg,
3589
- rgba(28, 33, 40, 0.98) 0%,
3590
- rgba(22, 27, 34, 0.95) 100%);
3591
- border: 1px solid var(--border-primary);
3592
- border-radius: var(--radius-xl);
3593
- box-shadow: var(--shadow-2xl), var(--shadow-glow);
3594
- min-width: 320px;
3595
- max-width: 520px;
3596
- backdrop-filter: blur(24px) saturate(180%);
3597
- -webkit-backdrop-filter: blur(24px) saturate(180%);
3598
- animation: slideInRight 0.25s cubic-bezier(0.4, 0, 0.2, 1);
3599
- overflow: hidden;
3600
- }
3601
-
3602
- [data-theme="light"] .inline-search-overlay {
3603
- background-color: rgba(255, 255, 255, 0.98);
3604
- box-shadow: var(--shadow-xl);
3605
- }
3606
-
3607
- @keyframes slideInRight {
3608
- from {
3609
- opacity: 0;
3610
- transform: translateX(20px);
3611
- }
3612
- to {
3613
- opacity: 1;
3614
- transform: translateX(0);
3615
- }
3616
- }
3617
-
3618
- .inline-search-container {
3619
- display: flex;
3620
- flex-direction: column;
3621
- }
3622
-
3623
- .inline-search-input-wrapper {
3624
- display: flex;
3625
- align-items: center;
3626
- padding: 12px;
3627
- gap: 10px;
3628
- border-bottom: 1px solid var(--border-subtle);
3629
- background: var(--bg-secondary);
3630
- }
3631
-
3632
- .inline-search-input {
3633
- flex: 1;
3634
- padding: 8px 14px;
3635
- font-size: 13px;
3636
- border: 1px solid var(--border-primary);
3637
- border-radius: var(--radius-md);
3638
- background: var(--bg-primary);
3639
- color: var(--text-primary);
3640
- outline: none;
3641
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
3642
- transition: all var(--transition-base);
3643
- box-shadow: var(--shadow-inner);
3644
- }
3645
-
3646
- .inline-search-input:hover {
3647
- border-color: var(--border-secondary);
3648
- background: var(--bg-elevated);
3649
- }
3650
-
3651
- .inline-search-input:focus {
3652
- border-color: var(--link-color);
3653
- background: var(--bg-primary);
3654
- box-shadow: 0 0 0 3px rgba(88, 166, 255, 0.15), var(--shadow-inner);
3655
- outline: none;
3656
- }
3657
-
3658
- .inline-search-options {
3659
- display: flex;
3660
- gap: 4px;
3661
- }
3662
-
3663
- .inline-search-option {
3664
- padding: 6px 10px;
3665
- font-size: 11px;
3666
- font-weight: 500;
3667
- border: 1px solid var(--border-primary);
3668
- border-radius: var(--radius-sm);
3669
- background: var(--bg-primary);
3670
- color: var(--text-secondary);
3671
- cursor: pointer;
3672
- transition: all var(--transition-base);
3673
- min-width: 32px;
3674
- display: flex;
3675
- align-items: center;
3676
- justify-content: center;
3677
- box-shadow: var(--shadow-sm);
3678
- }
3679
-
3680
- .inline-search-option:hover {
3681
- background: var(--hover-bg);
3682
- border-color: var(--border-secondary);
3683
- color: var(--text-primary);
3684
- transform: translateY(-1px);
3685
- box-shadow: var(--shadow-md);
3686
- }
3687
-
3688
- .inline-search-option.active {
3689
- background: var(--link-color);
3690
- color: white;
3691
- border-color: var(--link-color);
3692
- box-shadow: 0 2px 4px rgba(88, 166, 255, 0.3);
3693
- }
3694
-
3695
- .inline-search-option.active:hover {
3696
- background: var(--link-hover);
3697
- border-color: var(--link-hover);
3698
- transform: translateY(-1px);
3699
- box-shadow: 0 4px 8px rgba(88, 166, 255, 0.4);
3700
- }
3701
-
3702
- .inline-search-info {
3703
- display: flex;
3704
- align-items: center;
3705
- justify-content: space-between;
3706
- padding: 10px 14px;
3707
- font-size: 12px;
3708
- color: var(--text-secondary);
3709
- background: var(--bg-secondary);
3710
- border-top: 1px solid var(--border-subtle);
3711
- }
3712
-
3713
- .inline-search-count {
3714
- flex: 1;
3715
- font-weight: 500;
3716
- letter-spacing: 0.01em;
3717
- }
3718
-
3719
- .inline-search-count.error {
3720
- color: #ff7b72;
3721
- font-weight: 600;
3722
- }
3723
-
3724
- .inline-search-close {
3725
- background: none;
3726
- border: none;
3727
- color: var(--text-secondary);
3728
- font-size: 18px;
3729
- line-height: 1;
3730
- cursor: pointer;
3731
- padding: 0;
3732
- width: 28px;
3733
- height: 28px;
3734
- display: flex;
3735
- align-items: center;
3736
- justify-content: center;
3737
- border-radius: var(--radius-sm);
3738
- transition: all var(--transition-base);
3739
- opacity: 0.7;
3740
- }
3741
-
3742
- .inline-search-close:hover {
3743
- background: var(--hover-bg-strong);
3744
- color: var(--text-primary);
3745
- opacity: 1;
3746
- transform: scale(1.1);
3747
- }
3748
-
3749
- .inline-search-close:active {
3750
- transform: scale(0.95);
3751
- }
3752
-
3753
- /* In-file search match highlighting - Enhanced */
3754
- .inline-search-match {
3755
- background: linear-gradient(120deg, rgba(255, 235, 59, 0.25) 0%, rgba(255, 235, 59, 0.15) 100%);
3756
- padding: 2px 2px;
3757
- border-radius: 3px;
3758
- font-weight: 500;
3759
- transition: all var(--transition-base);
3760
- box-shadow: 0 1px 2px rgba(255, 235, 59, 0.2);
3761
- }
3762
-
3763
- [data-theme="dark"] .inline-search-match {
3764
- background: linear-gradient(120deg, rgba(255, 235, 59, 0.2) 0%, rgba(255, 235, 59, 0.1) 100%);
3765
- box-shadow: 0 1px 2px rgba(255, 235, 59, 0.15);
3766
- }
3767
-
3768
- .inline-search-match.active {
3769
- background: linear-gradient(120deg, rgba(255, 235, 59, 0.5) 0%, rgba(255, 235, 59, 0.35) 100%);
3770
- outline: 2px solid rgba(255, 235, 59, 0.9);
3771
- outline-offset: 2px;
3772
- box-shadow: 0 2px 8px rgba(255, 235, 59, 0.4), 0 0 0 1px rgba(255, 235, 59, 0.2);
3773
- animation: pulse 1.5s ease-in-out infinite;
3774
- }
3775
-
3776
- [data-theme="dark"] .inline-search-match.active {
3777
- background: linear-gradient(120deg, rgba(255, 235, 59, 0.4) 0%, rgba(255, 235, 59, 0.25) 100%);
3778
- box-shadow: 0 2px 8px rgba(255, 235, 59, 0.3), 0 0 0 1px rgba(255, 235, 59, 0.15);
3779
- }
3780
-
3781
- @keyframes pulse {
3782
- 0%, 100% {
3783
- box-shadow: 0 2px 8px rgba(255, 235, 59, 0.4), 0 0 0 1px rgba(255, 235, 59, 0.2);
3784
- }
3785
- 50% {
3786
- box-shadow: 0 2px 12px rgba(255, 235, 59, 0.5), 0 0 0 2px rgba(255, 235, 59, 0.3);
3787
- }
3788
- }
3789
-
3790
- /* Focus mode - Enhanced */
3791
- body.focus-mode {
3792
- overflow: hidden;
3793
- }
3794
-
3795
- body.focus-mode header.focus-mode {
3796
- opacity: 0.25;
3797
- transition: opacity var(--transition-slow);
3798
- backdrop-filter: blur(8px);
3799
- }
3800
-
3801
- body.focus-mode header.focus-mode:hover {
3802
- opacity: 0.9;
3803
- }
3804
-
3805
- .main-content-wrapper.focus-mode {
3806
- max-width: 1200px;
3807
- margin: 0 auto;
3808
- padding: 48px 32px;
3809
- animation: focusFadeIn 0.4s cubic-bezier(0.4, 0, 0.2, 1);
3810
- }
3811
-
3812
- @keyframes focusFadeIn {
3813
- from {
3814
- opacity: 0;
3815
- transform: translateY(10px);
3816
- }
3817
- to {
3818
- opacity: 1;
3819
- transform: translateY(0);
3820
- }
3821
- }
3822
-
3823
- body.focus-mode .main-content-wrapper.focus-mode .main-content {
3824
- max-width: 100%;
3825
- }
3826
-
3827
- body.focus-mode .file-content {
3828
- max-width: 100%;
3829
- }
3830
-
3831
- /* Sidebar toggle state */
3832
- .main-content-wrapper.no-sidebar {
3833
- width: 100%;
3834
- }
3835
-
3836
- /* Content search overlay - Enhanced */
3837
- .content-search-overlay {
3838
- position: fixed;
3839
- top: 50%;
3840
- left: 50%;
3841
- transform: translate(-50%, -50%);
3842
- z-index: 2000;
3843
- background: linear-gradient(135deg,
3844
- rgba(28, 33, 40, 0.98) 0%,
3845
- rgba(22, 27, 34, 0.95) 100%);
3846
- border: 1px solid var(--border-primary);
3847
- border-radius: var(--radius-2xl);
3848
- box-shadow: var(--shadow-2xl),
3849
- 0 0 0 1px rgba(0, 0, 0, 0.1),
3850
- var(--shadow-glow);
3851
- width: 90%;
3852
- max-width: 840px;
3853
- max-height: 82vh;
3854
- display: flex;
3855
- flex-direction: column;
3856
- backdrop-filter: blur(24px) saturate(180%);
3857
- -webkit-backdrop-filter: blur(24px) saturate(180%);
3858
- animation: modalSlideIn 0.3s cubic-bezier(0.4, 0, 0.2, 1);
3859
- overflow: hidden;
3860
- }
3861
-
3862
- [data-theme="light"] .content-search-overlay {
3863
- background-color: rgba(255, 255, 255, 0.98);
3864
- box-shadow: var(--shadow-xl), 0 0 0 1px rgba(0, 0, 0, 0.05);
3865
- }
3866
-
3867
- @keyframes modalSlideIn {
3868
- from {
3869
- opacity: 0;
3870
- transform: translate(-50%, -48%);
3871
- }
3872
- to {
3873
- opacity: 1;
3874
- transform: translate(-50%, -50%);
3875
- }
3876
- }
3877
-
3878
- .content-search-container {
3879
- display: flex;
3880
- flex-direction: column;
3881
- height: 100%;
3882
- }
3883
-
3884
- .content-search-header {
3885
- display: flex;
3886
- align-items: center;
3887
- justify-content: space-between;
3888
- padding: 20px 24px;
3889
- border-bottom: 1px solid var(--border-subtle);
3890
- background: var(--bg-secondary);
3891
- }
3892
-
3893
- .content-search-header h3 {
3894
- margin: 0;
3895
- font-size: 17px;
3896
- font-weight: 600;
3897
- color: var(--text-primary);
3898
- letter-spacing: -0.01em;
3899
- }
3900
-
3901
- .content-search-close {
3902
- background: none;
3903
- border: none;
3904
- color: var(--text-secondary);
3905
- font-size: 20px;
3906
- line-height: 1;
3907
- cursor: pointer;
3908
- padding: 0;
3909
- width: 32px;
3910
- height: 32px;
3911
- display: flex;
3912
- align-items: center;
3913
- justify-content: center;
3914
- border-radius: var(--radius-md);
3915
- transition: all var(--transition-base);
3916
- opacity: 0.7;
3917
- }
3918
-
3919
- .content-search-close:hover {
3920
- background: var(--hover-bg-strong);
3921
- color: var(--text-primary);
3922
- opacity: 1;
3923
- transform: scale(1.1) rotate(90deg);
3924
- }
3925
-
3926
- .content-search-close:active {
3927
- transform: scale(0.95) rotate(90deg);
3928
- }
3929
-
3930
- .content-search-input-wrapper {
3931
- display: flex;
3932
- align-items: center;
3933
- padding: 18px 24px;
3934
- gap: 12px;
3935
- border-bottom: 1px solid var(--border-subtle);
3936
- background: var(--bg-secondary);
3937
- }
3938
-
3939
- .content-search-input {
3940
- flex: 1;
3941
- padding: 12px 16px;
3942
- font-size: 14px;
3943
- border: 1.5px solid var(--border-primary);
3944
- border-radius: var(--radius-md);
3945
- background: var(--bg-primary);
3946
- color: var(--text-primary);
3947
- outline: none;
3948
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
3949
- transition: all var(--transition-base);
3950
- box-shadow: var(--shadow-inner);
3951
- }
3952
-
3953
- .content-search-input:hover {
3954
- border-color: var(--border-secondary);
3955
- background: var(--bg-elevated);
3956
- }
3957
-
3958
- .content-search-input:focus {
3959
- border-color: var(--link-color);
3960
- background: var(--bg-primary);
3961
- box-shadow: 0 0 0 3px rgba(88, 166, 255, 0.15), var(--shadow-inner);
3962
- outline: none;
3963
- }
3964
-
3965
- .content-search-options {
3966
- display: flex;
3967
- gap: 6px;
3968
- }
3969
-
3970
- .content-search-option {
3971
- padding: 8px 12px;
3972
- font-size: 11px;
3973
- font-weight: 500;
3974
- border: 1px solid var(--border-primary);
3975
- border-radius: var(--radius-sm);
3976
- background: var(--bg-primary);
3977
- color: var(--text-secondary);
3978
- cursor: pointer;
3979
- transition: all var(--transition-base);
3980
- min-width: 36px;
3981
- display: flex;
3982
- align-items: center;
3983
- justify-content: center;
3984
- box-shadow: var(--shadow-sm);
3985
- }
3986
-
3987
- .content-search-option:hover {
3988
- background: var(--hover-bg);
3989
- border-color: var(--border-secondary);
3990
- color: var(--text-primary);
3991
- transform: translateY(-1px);
3992
- box-shadow: var(--shadow-md);
3993
- }
3994
-
3995
- .content-search-option.active {
3996
- background: var(--link-color);
3997
- color: white;
3998
- border-color: var(--link-color);
3999
- box-shadow: 0 2px 4px rgba(88, 166, 255, 0.3);
4000
- }
4001
-
4002
- .content-search-option.active:hover {
4003
- background: var(--link-hover);
4004
- border-color: var(--link-hover);
4005
- transform: translateY(-1px);
4006
- box-shadow: 0 4px 8px rgba(88, 166, 255, 0.4);
4007
- }
4008
-
4009
- .content-search-info {
4010
- padding: 14px 24px;
4011
- font-size: 12px;
4012
- font-weight: 500;
4013
- color: var(--text-secondary);
4014
- border-bottom: 1px solid var(--border-subtle);
4015
- background: var(--bg-secondary);
4016
- letter-spacing: 0.01em;
4017
- }
4018
-
4019
- .content-search-status.error {
4020
- color: #ff7b72;
4021
- font-weight: 600;
4022
- }
4023
-
4024
- .content-search-results {
4025
- flex: 1;
4026
- overflow-y: auto;
4027
- padding: 4px 0;
4028
- scrollbar-width: thin;
4029
- scrollbar-color: var(--border-primary) transparent;
4030
- }
4031
-
4032
- .content-search-results::-webkit-scrollbar {
4033
- width: 8px;
4034
- }
4035
-
4036
- .content-search-results::-webkit-scrollbar-track {
4037
- background: transparent;
4038
- }
4039
-
4040
- .content-search-results::-webkit-scrollbar-thumb {
4041
- background: var(--border-primary);
4042
- border-radius: 4px;
4043
- }
4044
-
4045
- .content-search-results::-webkit-scrollbar-thumb:hover {
4046
- background: var(--text-secondary);
4047
- }
4048
-
4049
- .content-search-result {
4050
- padding: 14px 24px;
4051
- cursor: pointer;
4052
- transition: all var(--transition-base);
4053
- border-bottom: 1px solid var(--border-subtle);
4054
- position: relative;
4055
- }
4056
-
4057
- .content-search-result::before {
4058
- content: '';
4059
- position: absolute;
4060
- left: 0;
4061
- top: 0;
4062
- bottom: 0;
4063
- width: 3px;
4064
- background: var(--link-color);
4065
- opacity: 0;
4066
- transition: opacity var(--transition-base);
4067
- }
4068
-
4069
- .content-search-result:hover {
4070
- background: var(--hover-bg);
4071
- padding-left: 28px;
4072
- }
4073
-
4074
- .content-search-result:hover::before {
4075
- opacity: 1;
4076
- }
4077
-
4078
- .content-search-result-header {
4079
- display: flex;
4080
- align-items: center;
4081
- justify-content: space-between;
4082
- margin-bottom: 10px;
4083
- gap: 12px;
4084
- }
4085
-
4086
- .result-path {
4087
- font-weight: 600;
4088
- color: var(--link-color);
4089
- font-size: 14px;
4090
- transition: color var(--transition-base);
4091
- flex: 1;
4092
- min-width: 0;
4093
- overflow: hidden;
4094
- text-overflow: ellipsis;
4095
- white-space: nowrap;
4096
- }
4097
-
4098
- .content-search-result:hover .result-path {
4099
- color: var(--link-hover);
4100
- text-decoration: underline;
4101
- }
4102
-
4103
- .result-count {
4104
- font-size: 11px;
4105
- font-weight: 500;
4106
- color: var(--text-secondary);
4107
- background: var(--bg-tertiary);
4108
- padding: 2px 8px;
4109
- border-radius: 10px;
4110
- white-space: nowrap;
4111
- flex-shrink: 0;
4112
- }
4113
-
4114
- .content-search-matches {
4115
- display: flex;
4116
- flex-direction: column;
4117
- gap: 4px;
4118
- }
4119
-
4120
- .content-search-match {
4121
- display: flex;
4122
- gap: 14px;
4123
- font-size: 12px;
4124
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
4125
- padding: 3px 0;
4126
- transition: all var(--transition-base);
4127
- border-radius: var(--radius-sm);
4128
- }
4129
-
4130
- .content-search-match:hover {
4131
- background: var(--bg-tertiary);
4132
- padding-left: 4px;
4133
- }
4134
-
4135
- .match-line-number {
4136
- color: var(--text-secondary);
4137
- min-width: 44px;
4138
- text-align: right;
4139
- user-select: none;
4140
- font-weight: 500;
4141
- opacity: 0.8;
4142
- transition: all var(--transition-base);
4143
- }
4144
-
4145
- .content-search-match:hover .match-line-number {
4146
- opacity: 1;
4147
- color: var(--link-color);
4148
- }
4149
-
4150
- .match-content {
4151
- color: var(--text-primary);
4152
- flex: 1;
4153
- overflow: hidden;
4154
- text-overflow: ellipsis;
4155
- white-space: nowrap;
4156
- font-weight: 400;
4157
- }
4158
-
4159
- .content-search-more {
4160
- font-size: 11px;
4161
- color: var(--text-secondary);
4162
- font-style: italic;
4163
- margin-top: 4px;
4164
- }
4165
-
4166
- .content-search-highlight {
4167
- background: linear-gradient(120deg, rgba(255, 235, 59, 0.3) 0%, rgba(255, 235, 59, 0.2) 100%);
4168
- padding: 2px 3px;
4169
- border-radius: 3px;
4170
- font-weight: 500;
4171
- box-shadow: 0 1px 2px rgba(255, 235, 59, 0.2);
4172
- }
4173
-
4174
- [data-theme="dark"] .content-search-highlight {
4175
- background: linear-gradient(120deg, rgba(255, 235, 59, 0.25) 0%, rgba(255, 235, 59, 0.15) 100%);
4176
- box-shadow: 0 1px 2px rgba(255, 235, 59, 0.15);
4177
- }
4178
-
4179
- /* Line number styling to match our theme */
4180
- .monaco-editor .margin-view-overlays .line-numbers {
4181
- color: var(--text-secondary) !important;
4182
- }
4183
-
4184
- .monaco-editor .margin-view-overlays .line-numbers.active-line-number {
4185
- color: var(--text-primary) !important;
4186
- }
4187
-
4188
- /* Draft dialog styling */
4189
- .draft-modal {
4190
- max-width: 400px;
4191
- text-align: center;
4192
- }
4193
-
4194
- .draft-modal h3 {
4195
- margin: 0 0 12px 0;
4196
- color: var(--text-accent);
4197
- font-size: 18px;
4198
- }
4199
-
4200
- .draft-modal p {
4201
- margin: 0 0 20px 0;
4202
- color: var(--text-secondary);
4203
- line-height: 1.5;
4204
- }
4205
-
4206
- .draft-actions {
4207
- display: flex;
4208
- gap: 8px;
4209
- justify-content: center;
4210
- }
4211
-
4212
- .draft-actions .btn {
4213
- flex: 1;
4214
- max-width: 120px;
4215
- }
4216
-
4217
- /* ========================================
4218
- Symbol Outline Panel
4219
- ======================================== */
4220
-
4221
- .symbol-outline-btn {
4222
- position: relative;
4223
- }
4224
-
4225
- .symbol-outline-btn.active {
4226
- background: var(--hover-bg);
4227
- color: var(--link-color);
4228
- }
4229
-
4230
- .symbol-outline-panel {
4231
- position: fixed;
4232
- width: 300px;
4233
- max-height: 400px;
4234
- background: var(--bg-card);
4235
- border: 1px solid var(--border-subtle);
4236
- border-radius: var(--radius-lg);
4237
- box-shadow: var(--shadow-xl);
4238
- z-index: 99999;
4239
- display: none;
4240
- flex-direction: column;
4241
- overflow: hidden;
4242
- }
4243
-
4244
- .symbol-outline-panel.open {
4245
- display: flex;
4246
- }
4247
-
4248
- .symbol-outline-header {
4249
- display: flex;
4250
- align-items: center;
4251
- justify-content: space-between;
4252
- padding: 12px 16px;
4253
- border-bottom: 1px solid var(--border-subtle);
4254
- background: var(--bg-secondary);
4255
- }
4256
-
4257
- .symbol-outline-title {
4258
- font-weight: 600;
4259
- font-size: 13px;
4260
- color: var(--text-primary);
4261
- }
4262
-
4263
- .symbol-outline-count {
4264
- font-size: 12px;
4265
- color: var(--text-muted);
4266
- }
4267
-
4268
- .symbol-outline-search {
4269
- padding: 8px 12px;
4270
- border-bottom: 1px solid var(--border-subtle);
4271
- }
4272
-
4273
- .symbol-search-input {
4274
- width: 100%;
4275
- padding: 8px 12px;
4276
- font-size: 13px;
4277
- background: var(--bg-primary);
4278
- border: 1px solid var(--border-subtle);
4279
- border-radius: var(--radius-md);
4280
- color: var(--text-primary);
4281
- outline: none;
4282
- transition: border-color var(--transition-base);
4283
- }
4284
-
4285
- .symbol-search-input:focus {
4286
- border-color: var(--link-color);
4287
- }
4288
-
4289
- .symbol-search-input::placeholder {
4290
- color: var(--text-muted);
4291
- }
4292
-
4293
- .symbol-outline-content {
4294
- flex: 1;
4295
- overflow-y: auto;
4296
- padding: 8px 0;
4297
- }
4298
-
4299
- .symbol-outline-loading,
4300
- .symbol-outline-empty,
4301
- .symbol-outline-error {
4302
- padding: 24px 16px;
4303
- text-align: center;
4304
- color: var(--text-muted);
4305
- font-size: 13px;
4306
- }
4307
-
4308
- .symbol-outline-error {
4309
- color: var(--text-danger, #f87171);
4310
- }
4311
-
4312
- /* Symbol Groups */
4313
- .symbol-group {
4314
- margin-bottom: 4px;
4315
- }
4316
-
4317
- .symbol-group-header {
4318
- display: flex;
4319
- align-items: center;
4320
- justify-content: space-between;
4321
- padding: 6px 16px;
4322
- font-size: 11px;
4323
- font-weight: 600;
4324
- color: var(--text-muted);
4325
- text-transform: uppercase;
4326
- letter-spacing: 0.5px;
4327
- }
4328
-
4329
- .symbol-group-count {
4330
- font-weight: 400;
4331
- color: var(--text-muted);
4332
- opacity: 0.7;
4333
- }
4334
-
4335
- .symbol-group-items {
4336
- display: flex;
4337
- flex-direction: column;
4338
- }
4339
-
4340
- /* Symbol Items */
4341
- .symbol-item {
4342
- display: flex;
4343
- align-items: center;
4344
- gap: 8px;
4345
- padding: 6px 16px;
4346
- cursor: pointer;
4347
- transition: background var(--transition-fast);
4348
- }
4349
-
4350
- .symbol-item:hover {
4351
- background: rgba(96, 165, 250, 0.08);
4352
- border-left: 2px solid var(--link-color);
4353
- padding-left: 14px;
4354
- }
4355
-
4356
- .symbol-item.selected {
4357
- background: rgba(96, 165, 250, 0.15);
4358
- border-left: 2px solid var(--link-color);
4359
- padding-left: 14px;
4360
- }
4361
-
4362
- .symbol-icon {
4363
- display: flex;
4364
- align-items: center;
4365
- justify-content: center;
4366
- width: 18px;
4367
- height: 18px;
4368
- font-size: 10px;
4369
- font-weight: 700;
4370
- font-family: ui-monospace, monospace;
4371
- border-radius: 3px;
4372
- flex-shrink: 0;
4373
- }
4374
-
4375
- /* Symbol icon colors by type */
4376
- .symbol-icon-function,
4377
- .symbol-icon-method {
4378
- background: rgba(139, 92, 246, 0.2);
4379
- color: #a78bfa;
4380
- }
4381
-
4382
- .symbol-icon-class {
4383
- background: rgba(251, 191, 36, 0.2);
4384
- color: #fbbf24;
4385
- }
4386
-
4387
- .symbol-icon-interface,
4388
- .symbol-icon-type {
4389
- background: rgba(34, 211, 238, 0.2);
4390
- color: #22d3ee;
4391
- }
4392
-
4393
- .symbol-icon-constant,
4394
- .symbol-icon-variable {
4395
- background: rgba(74, 222, 128, 0.2);
4396
- color: #4ade80;
4397
- }
4398
-
4399
- .symbol-icon-selector,
4400
- .symbol-icon-mixin,
4401
- .symbol-icon-keyframes,
4402
- .symbol-icon-media {
4403
- background: rgba(251, 113, 133, 0.2);
4404
- color: #fb7185;
4405
- }
4406
-
4407
- .symbol-name {
4408
- flex: 1;
4409
- font-size: 13px;
4410
- color: var(--text-primary);
4411
- overflow: hidden;
4412
- text-overflow: ellipsis;
4413
- white-space: nowrap;
4414
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
4415
- }
4416
-
4417
- .symbol-line {
4418
- font-size: 11px;
4419
- color: var(--text-muted);
4420
- font-family: ui-monospace, monospace;
4421
- }
4422
-
4423
- /* Line highlight flash animation */
4424
- .line-highlight-flash {
4425
- animation: lineFlash 2s ease-out;
4426
- }
4427
-
4428
- @keyframes lineFlash {
4429
- 0% {
4430
- background: rgba(96, 165, 250, 0.3);
4431
- }
4432
- 100% {
4433
- background: transparent;
4434
- }
4435
- }
4436
-
4437
- /* Light theme adjustments */
4438
- [data-theme="light"] .symbol-icon-function,
4439
- [data-theme="light"] .symbol-icon-method {
4440
- background: rgba(139, 92, 246, 0.15);
4441
- color: #7c3aed;
4442
- }
4443
-
4444
- [data-theme="light"] .symbol-icon-class {
4445
- background: rgba(217, 119, 6, 0.15);
4446
- color: #b45309;
4447
- }
4448
-
4449
- [data-theme="light"] .symbol-icon-interface,
4450
- [data-theme="light"] .symbol-icon-type {
4451
- background: rgba(6, 182, 212, 0.15);
4452
- color: #0891b2;
4453
- }
4454
-
4455
- [data-theme="light"] .symbol-icon-constant,
4456
- [data-theme="light"] .symbol-icon-variable {
4457
- background: rgba(22, 163, 74, 0.15);
4458
- color: #16a34a;
4459
- }
4460
-
4461
- [data-theme="light"] .symbol-icon-selector,
4462
- [data-theme="light"] .symbol-icon-mixin,
4463
- [data-theme="light"] .symbol-icon-keyframes,
4464
- [data-theme="light"] .symbol-icon-media {
4465
- background: rgba(225, 29, 72, 0.15);
4466
- color: #be123c;
4467
- }
4468
-
4469
- [data-theme="light"] .line-highlight-flash {
4470
- animation: lineFlashLight 2s ease-out;
4471
- }
4472
-
4473
- @keyframes lineFlashLight {
4474
- 0% {
4475
- background: rgba(37, 99, 235, 0.2);
4476
- }
4477
- 100% {
4478
- background: transparent;
4479
- }
4480
- }