gh-here 3.0.3 → 3.1.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.
Files changed (41) hide show
  1. package/.env +0 -0
  2. package/.playwright-mcp/fixed-alignment.png +0 -0
  3. package/.playwright-mcp/fixed-layout.png +0 -0
  4. package/.playwright-mcp/gh-here-home-header-table.png +0 -0
  5. package/.playwright-mcp/gh-here-home.png +0 -0
  6. package/.playwright-mcp/line-selection-multiline.png +0 -0
  7. package/.playwright-mcp/line-selection-test-after.png +0 -0
  8. package/.playwright-mcp/line-selection-test-before.png +0 -0
  9. package/.playwright-mcp/page-2026-01-03T17-58-21-336Z.png +0 -0
  10. package/lib/constants.js +25 -15
  11. package/lib/content-search.js +212 -0
  12. package/lib/error-handler.js +39 -28
  13. package/lib/file-utils.js +438 -287
  14. package/lib/git.js +10 -54
  15. package/lib/gitignore.js +70 -41
  16. package/lib/renderers.js +15 -19
  17. package/lib/server.js +70 -193
  18. package/lib/symbol-parser.js +600 -0
  19. package/package.json +1 -1
  20. package/public/app.js +134 -68
  21. package/public/js/constants.js +50 -34
  22. package/public/js/content-search-handler.js +551 -0
  23. package/public/js/file-viewer.js +437 -0
  24. package/public/js/focus-mode.js +280 -0
  25. package/public/js/inline-search.js +659 -0
  26. package/public/js/modal-manager.js +14 -28
  27. package/public/js/symbol-outline.js +454 -0
  28. package/public/js/utils.js +152 -94
  29. package/public/styles.css +2049 -296
  30. package/.claude/settings.local.json +0 -30
  31. package/SAMPLE.md +0 -287
  32. package/lib/validation.js +0 -77
  33. package/public/app.js.backup +0 -1902
  34. package/public/js/draft-manager.js +0 -36
  35. package/public/js/editor-manager.js +0 -159
  36. package/test.js +0 -138
  37. package/tests/draftManager.test.js +0 -241
  38. package/tests/fileTypeDetection.test.js +0 -111
  39. package/tests/httpService.test.js +0 -268
  40. package/tests/languageDetection.test.js +0 -145
  41. package/tests/pathUtils.test.js +0 -136
package/public/styles.css CHANGED
@@ -1,29 +1,97 @@
1
1
  :root {
2
- /* GitHub Dark */
3
- --bg-primary: #0d1117;
4
- --bg-secondary: #161b22;
5
- --bg-tertiary: #21262d;
6
- --border-primary: #30363d;
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;
7
9
  --border-secondary: #21262d;
8
- --text-primary: #e6edf3;
9
- --text-secondary: #8b949e;
10
- --text-accent: #f0f6fc;
11
- --link-color: #58a6ff;
12
- --hover-bg: #161b22;
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;
13
59
  }
14
60
 
15
61
  [data-theme="light"] {
16
- /* GitHub Light */
62
+ /* Elite Light Theme - Beyond GitHub */
17
63
  --bg-primary: #ffffff;
18
- --bg-secondary: #f6f8fa;
19
- --bg-tertiary: #f1f3f4;
20
- --border-primary: #d1d9e0;
21
- --border-secondary: #d8dee4;
22
- --text-primary: #1f2328;
23
- --text-secondary: #656d76;
24
- --text-accent: #1f2328;
25
- --link-color: #0969da;
26
- --hover-bg: #f6f8fa;
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);
27
95
  }
28
96
 
29
97
  * {
@@ -34,12 +102,12 @@
34
102
 
35
103
  html {
36
104
  /* Set background on html to prevent flash during navigation */
37
- background-color: #0d1117; /* Default dark theme background */
105
+ background-color: var(--bg-primary);
38
106
  color-scheme: dark;
39
107
  }
40
108
 
41
109
  html[data-theme="light"] {
42
- background-color: #ffffff; /* Light theme background */
110
+ background-color: var(--bg-primary);
43
111
  color-scheme: light;
44
112
  }
45
113
 
@@ -73,8 +141,11 @@ body {
73
141
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
74
142
  background-color: var(--bg-primary);
75
143
  color: var(--text-primary);
76
- line-height: 1.5;
144
+ line-height: 1.6;
77
145
  min-height: 100vh;
146
+ -webkit-font-smoothing: antialiased;
147
+ -moz-osx-font-smoothing: grayscale;
148
+ text-rendering: optimizeLegibility;
78
149
  }
79
150
 
80
151
  /* Smooth content fades for navigation */
@@ -96,11 +167,32 @@ body {
96
167
  }
97
168
 
98
169
  header {
99
- background-color: var(--bg-secondary);
100
- border-bottom: 1px solid var(--border-primary);
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);
101
174
  position: sticky;
102
175
  top: 0;
103
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);
104
196
  }
105
197
 
106
198
  .header-content {
@@ -109,6 +201,7 @@ header {
109
201
  align-items: center;
110
202
  padding: 12px 32px;
111
203
  max-width: 100%;
204
+ gap: var(--space-lg);
112
205
  }
113
206
 
114
207
  .header-left {
@@ -116,20 +209,28 @@ header {
116
209
  }
117
210
 
118
211
  .header-left h1 {
119
- font-size: 20px;
120
- font-weight: 600;
212
+ font-size: 22px;
213
+ font-weight: 700;
121
214
  margin: 0;
122
215
  color: var(--text-primary);
123
- letter-spacing: 0.02em;
216
+ letter-spacing: -0.02em;
124
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);
125
223
  }
126
224
 
127
225
  .header-left h1::before {
128
226
  content: '$';
129
227
  color: var(--link-color);
130
- margin-right: 8px;
131
- opacity: 0.8;
132
- font-weight: 400;
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));
133
234
  }
134
235
 
135
236
  .header-path {
@@ -145,27 +246,45 @@ header {
145
246
  margin-left: auto;
146
247
  }
147
248
 
148
- /* GitHub-style White Canvas Section */
249
+ /* Elite Canvas Section - Beyond GitHub */
149
250
  .repo-canvas {
150
251
  background-color: var(--bg-primary);
151
252
  flex: 1;
152
253
  min-width: 0;
254
+ position: relative;
153
255
  }
154
256
 
155
257
  .repo-canvas-content {
156
- padding: 16px 24px;
157
- max-width: 1280px;
258
+ padding: var(--space-2xl) var(--space-3xl);
259
+ max-width: 1400px;
158
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
+ }
159
275
  }
160
276
 
161
277
  .breadcrumb-section {
162
- font-size: 20px;
163
- font-weight: 600;
278
+ font-size: 22px;
279
+ font-weight: 700;
164
280
  color: var(--text-primary);
165
- margin: 0 0 12px 0;
281
+ margin: 0 0 var(--space-lg) 0;
166
282
  display: flex;
167
283
  align-items: center;
168
284
  flex-wrap: wrap;
285
+ gap: var(--space-sm);
286
+ letter-spacing: -0.01em;
287
+ line-height: 1.4;
169
288
  }
170
289
 
171
290
  .repo-name {
@@ -186,16 +305,23 @@ header {
186
305
  align-items: center;
187
306
  justify-content: space-between;
188
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;
189
317
  }
190
318
 
191
319
  .repo-controls-left {
192
320
  display: flex;
193
321
  align-items: center;
194
322
  gap: 12px;
195
- }
196
-
197
- .repo-controls-left:empty {
198
- display: none;
323
+ flex-shrink: 0;
324
+ min-width: 0;
199
325
  }
200
326
 
201
327
  .repo-controls-right {
@@ -203,26 +329,64 @@ header {
203
329
  align-items: center;
204
330
  gap: 12px;
205
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;
206
345
  }
207
346
 
208
347
  .branch-button {
209
- display: flex;
348
+ display: inline-flex;
210
349
  align-items: center;
211
- gap: 6px;
212
- padding: 5px 12px;
213
- background: var(--bg-primary);
350
+ gap: 8px;
351
+ padding: 8px 16px;
352
+ background: linear-gradient(135deg, var(--bg-elevated) 0%, var(--bg-secondary) 100%);
214
353
  border: 1px solid var(--border-primary);
215
- border-radius: 6px;
354
+ border-radius: var(--radius-lg);
216
355
  color: var(--text-primary);
217
- font-size: 12px;
218
- font-weight: 500;
356
+ font-size: 13px;
357
+ font-weight: 600;
219
358
  cursor: pointer;
220
- transition: all 0.2s ease;
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%;
221
378
  }
222
379
 
223
380
  .branch-button:hover {
224
- background: var(--bg-secondary);
225
- border-color: var(--text-secondary);
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);
226
390
  }
227
391
 
228
392
  .branch-count,
@@ -262,52 +426,101 @@ header {
262
426
  position: relative;
263
427
  display: flex;
264
428
  align-items: center;
429
+ flex-shrink: 0;
430
+ min-width: 0;
265
431
  }
266
432
 
267
433
  .search-input {
268
- background: var(--bg-primary);
269
- border: 1px solid var(--border-primary);
270
- border-radius: 6px;
271
- padding: 6px 40px 6px 32px;
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;
272
440
  color: var(--text-primary);
273
441
  font-size: 14px;
274
- width: 300px;
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);
275
458
  }
276
459
 
277
460
  .search-input:focus {
278
461
  outline: none;
279
- border-color: #0969da;
280
- box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.3);
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);
281
475
  }
282
476
 
283
- /* Search results overlay */
477
+ /* Search results overlay - Enhanced */
284
478
  .search-results-overlay {
285
479
  position: absolute;
286
- top: calc(100% + 8px);
480
+ top: calc(100% + 10px);
287
481
  left: 0;
288
482
  right: 0;
289
483
  z-index: 1000;
290
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
+ }
291
497
  }
292
498
 
293
499
  .search-results-container {
294
- background: var(--bg-primary);
500
+ background: var(--bg-elevated);
295
501
  border: 1px solid var(--border-primary);
296
- border-radius: 6px;
297
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
502
+ border-radius: var(--radius-lg);
503
+ box-shadow: var(--shadow-xl);
298
504
  max-height: 400px;
299
505
  overflow: hidden;
300
506
  display: flex;
301
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);
302
514
  }
303
515
 
304
516
  .search-results-header {
305
- padding: 8px 12px;
306
- border-bottom: 1px solid var(--border-primary);
517
+ padding: 10px 16px;
518
+ border-bottom: 1px solid var(--border-subtle);
307
519
  background: var(--bg-secondary);
308
520
  font-size: 12px;
309
521
  font-weight: 600;
310
522
  color: var(--text-secondary);
523
+ letter-spacing: 0.01em;
311
524
  }
312
525
 
313
526
  .search-results-count {
@@ -322,13 +535,26 @@ header {
322
535
  .search-result-item {
323
536
  display: flex;
324
537
  align-items: center;
325
- gap: 10px;
326
- padding: 8px 12px;
327
- border-bottom: 1px solid var(--border-secondary);
538
+ gap: 12px;
539
+ padding: 10px 16px;
540
+ border-bottom: 1px solid var(--border-subtle);
328
541
  text-decoration: none;
329
542
  color: var(--text-primary);
330
- transition: background-color 0.15s ease;
543
+ transition: all var(--transition-base);
331
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);
332
558
  }
333
559
 
334
560
  .search-result-item:last-child {
@@ -336,7 +562,12 @@ header {
336
562
  }
337
563
 
338
564
  .search-result-item:hover {
339
- background-color: var(--hover-bg);
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;
340
571
  }
341
572
 
342
573
  .search-result-item .result-icon {
@@ -366,15 +597,17 @@ header {
366
597
  }
367
598
 
368
599
  .search-highlight {
369
- background-color: rgba(255, 200, 50, 0.3);
600
+ background: linear-gradient(120deg, rgba(255, 200, 50, 0.35) 0%, rgba(255, 200, 50, 0.25) 100%);
370
601
  color: var(--text-accent);
371
- border-radius: 2px;
372
- padding: 0 2px;
602
+ border-radius: 3px;
603
+ padding: 1px 3px;
373
604
  font-weight: 600;
605
+ box-shadow: 0 1px 2px rgba(255, 200, 50, 0.2);
374
606
  }
375
607
 
376
608
  [data-theme="light"] .search-highlight {
377
- background-color: rgba(255, 200, 50, 0.4);
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);
378
611
  }
379
612
 
380
613
  .search-icon {
@@ -388,58 +621,128 @@ header {
388
621
 
389
622
  .search-hotkey {
390
623
  position: absolute;
391
- right: 8px;
392
- background: var(--bg-tertiary);
393
- border: 1px solid var(--border-primary);
394
- border-radius: 3px;
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);
395
630
  padding: 2px 6px;
396
- font-size: 12px;
631
+ font-size: 11px;
397
632
  color: var(--text-secondary);
398
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);
399
643
  }
400
644
 
401
- /* GitHub-style Buttons */
645
+ /* Elite Buttons - Beyond GitHub */
402
646
  .btn {
403
- display: flex;
647
+ display: inline-flex;
404
648
  align-items: center;
405
- gap: 6px;
406
- padding: 5px 12px;
407
- border-radius: 6px;
408
- font-size: 12px;
409
- font-weight: 500;
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;
410
655
  cursor: pointer;
411
- transition: all 0.2s ease;
656
+ transition: all var(--transition-base);
412
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;
413
681
  }
414
682
 
415
683
  .btn-primary {
416
- background: var(--bg-primary);
684
+ background: linear-gradient(135deg,
685
+ var(--bg-elevated) 0%,
686
+ var(--bg-card) 100%);
417
687
  border-color: var(--border-primary);
418
688
  color: var(--text-primary);
419
689
  }
420
690
 
421
691
  .btn-primary:hover {
422
- background: var(--bg-secondary);
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);
423
703
  }
424
704
 
425
705
  .btn-outline {
426
- background: var(--bg-primary);
706
+ background: linear-gradient(135deg,
707
+ var(--bg-card) 0%,
708
+ var(--bg-elevated) 100%);
427
709
  border-color: var(--border-primary);
428
710
  color: var(--text-primary);
429
711
  }
430
712
 
431
713
  .btn-outline:hover {
432
- background: var(--bg-secondary);
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);
433
720
  }
434
721
 
435
722
  .btn-success {
436
- background: #238636;
437
- border-color: rgba(240, 246, 252, 0.1);
723
+ background: linear-gradient(135deg,
724
+ var(--accent-success) 0%,
725
+ #10b981 100%);
726
+ border-color: rgba(255, 255, 255, 0.1);
438
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);
439
731
  }
440
732
 
441
733
  .btn-success:hover {
442
- background: #2ea043;
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);
443
746
  }
444
747
 
445
748
  .btn-icon,
@@ -452,44 +755,59 @@ header {
452
755
  .theme-toggle,
453
756
  .gitignore-toggle,
454
757
  .edit-btn {
455
- background: var(--bg-primary);
456
- border: 1px solid var(--border-primary);
457
- border-radius: 6px;
458
- padding: 5px 12px;
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;
459
764
  cursor: pointer;
765
+ transition: all var(--transition-base);
766
+ box-shadow: var(--shadow-sm);
460
767
  color: var(--text-primary);
461
- transition: all 0.15s ease;
462
768
  display: flex;
463
769
  align-items: center;
464
770
  justify-content: center;
465
- height: 32px;
466
- min-width: 32px;
771
+ height: 36px;
772
+ min-width: 36px;
467
773
  margin: 0;
468
774
  font-size: 14px;
775
+ position: relative;
776
+ overflow: hidden;
777
+ backdrop-filter: blur(10px);
469
778
  }
470
779
 
471
780
  .theme-toggle:hover,
472
781
  .gitignore-toggle:hover,
473
782
  .edit-btn:hover {
474
- background-color: var(--bg-tertiary);
475
- border-color: var(--text-secondary);
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);
476
789
  }
477
790
 
478
791
  .theme-toggle:active,
479
792
  .gitignore-toggle:active,
480
793
  .edit-btn:active {
481
- background-color: var(--hover-bg);
482
- transform: scale(0.97);
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);
483
799
  }
484
800
 
485
801
  .gitignore-toggle.showing-ignored {
486
802
  color: var(--link-color);
487
803
  border-color: var(--link-color);
488
- background: rgba(88, 166, 255, 0.1);
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);
489
806
  }
490
807
 
491
808
  .gitignore-toggle.showing-ignored:hover {
492
- background-color: rgba(88, 166, 255, 0.15);
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);
493
811
  }
494
812
 
495
813
  .theme-icon,
@@ -503,40 +821,66 @@ header {
503
821
  .view-toggle {
504
822
  display: inline-flex;
505
823
  border: 1px solid var(--border-primary);
506
- border-radius: 6px;
824
+ border-radius: var(--radius-md);
507
825
  overflow: hidden;
508
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);
509
834
  }
510
835
 
511
836
  .view-btn {
512
837
  display: inline-flex;
513
838
  align-items: center;
514
839
  gap: 6px;
515
- padding: 6px 12px;
840
+ padding: 7px 14px;
516
841
  background: transparent;
517
842
  border: none;
518
843
  color: var(--text-secondary);
519
844
  text-decoration: none;
520
845
  font-size: 13px;
521
846
  font-weight: 500;
522
- transition: all 0.15s ease;
847
+ transition: all var(--transition-base);
523
848
  white-space: nowrap;
524
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);
525
860
  }
526
861
 
527
862
  .view-btn:hover {
528
- background-color: var(--hover-bg);
529
863
  color: var(--text-primary);
530
864
  }
531
865
 
866
+ .view-btn:hover::before {
867
+ opacity: 1;
868
+ }
869
+
532
870
  .view-btn.active {
533
- background-color: var(--link-color);
871
+ background: linear-gradient(135deg, var(--link-color) 0%, var(--link-hover) 100%);
534
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;
535
878
  }
536
879
 
537
880
  .view-btn.active:hover {
538
- background-color: var(--link-color);
539
- opacity: 0.9;
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);
540
884
  }
541
885
 
542
886
  .view-btn + .view-btn {
@@ -558,16 +902,37 @@ header {
558
902
  .breadcrumb-item a {
559
903
  color: var(--link-color);
560
904
  text-decoration: none;
561
- font-weight: 500;
562
- padding: 2px 6px;
563
- border-radius: 4px;
564
- transition: all 0.15s ease;
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);
565
925
  }
566
926
 
567
927
  .breadcrumb-item a:hover {
568
928
  text-decoration: none;
569
- color: var(--text-accent);
570
- background-color: var(--hover-bg);
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;
571
936
  }
572
937
 
573
938
  .breadcrumb-separator {
@@ -576,31 +941,64 @@ header {
576
941
  opacity: 0.7;
577
942
  }
578
943
 
579
- /* File Header */
944
+ /* File Header - Elite Design */
580
945
  .file-header {
581
946
  display: flex;
582
947
  justify-content: space-between;
583
948
  align-items: center;
584
- padding: 12px 16px;
585
- margin-bottom: 12px;
586
- background-color: var(--bg-secondary);
587
- border: 1px solid var(--border-primary);
588
- border-radius: 6px;
589
- gap: 16px;
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);
590
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;
591
963
  }
592
964
 
593
- .file-header-main {
594
- flex: 1;
595
- min-width: 0;
596
- display: flex;
597
- flex-direction: column;
598
- gap: 8px;
599
- }
600
-
601
- .file-path-info {
602
- display: flex;
603
- align-items: center;
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;
604
1002
  gap: 8px;
605
1003
  font-size: 14px;
606
1004
  }
@@ -615,19 +1013,28 @@ header {
615
1013
  display: inline-flex;
616
1014
  align-items: center;
617
1015
  justify-content: center;
618
- padding: 4px;
1016
+ padding: 5px;
619
1017
  background: transparent;
620
1018
  border: none;
621
- border-radius: 4px;
1019
+ border-radius: var(--radius-sm);
622
1020
  cursor: pointer;
623
1021
  color: var(--text-secondary);
624
- transition: all 0.15s ease;
1022
+ transition: all var(--transition-base);
625
1023
  flex-shrink: 0;
1024
+ opacity: 0.7;
1025
+ width: 24px;
1026
+ height: 24px;
626
1027
  }
627
1028
 
628
1029
  .file-path-copy-btn:hover {
629
1030
  background-color: var(--hover-bg);
630
- color: var(--text-primary);
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);
631
1038
  }
632
1039
 
633
1040
  .octicon-copy {
@@ -663,15 +1070,22 @@ header {
663
1070
  display: inline-flex;
664
1071
  background-color: var(--bg-primary);
665
1072
  border: 1px solid var(--border-primary);
666
- border-radius: 6px;
1073
+ border-radius: var(--radius-md);
667
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);
668
1082
  }
669
1083
 
670
1084
  .file-action-btn {
671
1085
  display: inline-flex;
672
1086
  align-items: center;
673
1087
  justify-content: center;
674
- padding: 6px 12px;
1088
+ padding: 7px 14px;
675
1089
  background: transparent;
676
1090
  border: none;
677
1091
  color: var(--text-secondary);
@@ -679,10 +1093,11 @@ header {
679
1093
  font-size: 12px;
680
1094
  font-weight: 500;
681
1095
  cursor: pointer;
682
- transition: all 0.15s ease;
1096
+ transition: all var(--transition-base);
683
1097
  white-space: nowrap;
684
1098
  gap: 6px;
685
1099
  border-right: 1px solid var(--border-primary);
1100
+ position: relative;
686
1101
  }
687
1102
 
688
1103
  .file-action-btn:last-child {
@@ -690,8 +1105,14 @@ header {
690
1105
  }
691
1106
 
692
1107
  .file-action-btn:hover {
693
- background-color: var(--hover-bg);
1108
+ background: linear-gradient(180deg, var(--hover-bg) 0%, var(--bg-tertiary) 100%);
694
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);
695
1116
  }
696
1117
 
697
1118
  .file-action-btn .file-action-label {
@@ -728,24 +1149,53 @@ main {
728
1149
  background: var(--bg-primary);
729
1150
  }
730
1151
 
731
- /* File Tree Sidebar */
1152
+ /* File Tree Sidebar - Elite Design */
732
1153
  .file-tree-sidebar {
733
- width: 280px;
734
- min-width: 280px;
735
- max-width: 280px;
1154
+ width: 300px;
1155
+ min-width: 300px;
1156
+ max-width: 300px;
736
1157
  flex-shrink: 0;
737
- border-right: 1px solid var(--border-primary);
1158
+ border-right: 1px solid var(--border-subtle);
738
1159
  overflow-y: auto;
739
1160
  overflow-x: hidden;
740
- background: var(--bg-secondary);
1161
+ background: linear-gradient(180deg,
1162
+ var(--bg-secondary) 0%,
1163
+ var(--bg-primary) 100%);
741
1164
  position: sticky;
742
1165
  top: 0;
743
1166
  height: 100vh;
744
1167
  max-height: 100vh;
745
1168
  align-self: stretch;
746
- transition: opacity 0.2s ease, visibility 0.2s ease;
1169
+ transition: all var(--transition-base);
747
1170
  display: flex;
748
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);
749
1199
  }
750
1200
 
751
1201
  .file-tree-sidebar.hidden {
@@ -755,16 +1205,27 @@ main {
755
1205
  .file-tree-header {
756
1206
  display: flex;
757
1207
  align-items: center;
758
- gap: 8px;
759
- padding: 12px 16px;
760
- border-bottom: 1px solid var(--border-primary);
761
- background: var(--bg-secondary);
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);
762
1215
  position: sticky;
763
1216
  top: 0;
764
1217
  z-index: 1;
765
- font-size: 14px;
766
- font-weight: 600;
1218
+ font-size: 15px;
1219
+ font-weight: 700;
767
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%);
768
1229
  }
769
1230
 
770
1231
  .files-icon {
@@ -773,12 +1234,21 @@ main {
773
1234
  }
774
1235
 
775
1236
  .sidebar-controls {
776
- padding: 12px 12px 8px;
777
- border-bottom: 1px solid var(--border-primary);
778
- background: var(--bg-secondary);
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%);
779
1242
  display: flex;
780
1243
  flex-direction: column;
781
- gap: 8px;
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%);
782
1252
  }
783
1253
 
784
1254
  .sidebar-branch {
@@ -810,18 +1280,46 @@ main {
810
1280
 
811
1281
  .sidebar-search {
812
1282
  width: 100%;
1283
+ flex-shrink: 0;
813
1284
  }
814
1285
 
815
1286
  .sidebar-search .search-input {
816
1287
  width: 100%;
817
1288
  font-size: 12px;
818
- padding: 5px 32px 5px 28px;
819
- height: 28px;
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);
820
1315
  }
821
1316
 
822
1317
  .sidebar-search .search-hotkey {
823
1318
  font-size: 10px;
824
- padding: 2px 4px;
1319
+ padding: 2px 5px;
1320
+ border-radius: var(--radius-sm);
1321
+ font-weight: 500;
1322
+ box-shadow: var(--shadow-sm);
825
1323
  }
826
1324
 
827
1325
  .file-tree-container {
@@ -832,24 +1330,63 @@ main {
832
1330
  .tree-item {
833
1331
  display: flex;
834
1332
  align-items: center;
835
- gap: 6px;
836
- padding: 4px 8px;
1333
+ gap: 8px;
1334
+ padding: 8px 14px;
1335
+ margin: 2px 6px;
837
1336
  cursor: pointer;
838
- font-size: 14px;
839
- line-height: 20px;
1337
+ font-size: 13px;
1338
+ line-height: 22px;
840
1339
  color: var(--text-primary);
841
- transition: background-color 0.1s ease;
1340
+ transition: all var(--transition-base);
842
1341
  user-select: none;
843
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);
844
1360
  }
845
1361
 
846
1362
  .tree-item:hover {
847
- background-color: var(--hover-bg);
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;
848
1370
  }
849
1371
 
850
1372
  .tree-item.active {
851
- background-color: var(--bg-tertiary);
1373
+ background: rgba(96, 165, 250, 0.12);
1374
+ border-left: 2px solid var(--link-color);
852
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);
853
1390
  }
854
1391
 
855
1392
  .tree-toggle {
@@ -949,16 +1486,16 @@ main {
949
1486
  }
950
1487
 
951
1488
  .main-content {
952
- max-width: 1200px;
1489
+ max-width: 1400px;
953
1490
  margin: 0 auto;
954
- padding: 16px 24px;
1491
+ padding: var(--space-xl) var(--space-2xl);
955
1492
  width: 100%;
956
1493
  }
957
1494
 
958
1495
  .directory-actions {
959
1496
  display: flex;
960
1497
  gap: 8px;
961
- margin-bottom: 16px;
1498
+ margin-bottom: 24px;
962
1499
  }
963
1500
 
964
1501
  .btn-icon {
@@ -971,46 +1508,149 @@ main {
971
1508
 
972
1509
  .file-table {
973
1510
  width: 100%;
974
- border-collapse: collapse;
975
- background-color: var(--bg-primary);
976
- border: 1px solid var(--border-primary);
977
- border-radius: 6px;
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);
978
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);
979
1527
  }
980
1528
 
981
1529
  .file-table thead {
982
- background-color: var(--bg-secondary);
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%);
983
1543
  }
984
1544
 
1545
+ /* Base header cell styling */
985
1546
  .file-table th {
986
- padding: 8px 16px;
1547
+ padding: 12px 16px;
987
1548
  text-align: left;
988
1549
  font-weight: 600;
989
1550
  font-size: 12px;
990
- color: var(--text-accent);
991
- border-bottom: 1px solid var(--border-primary);
992
- text-transform: uppercase;
993
- letter-spacing: 0.5px;
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;
994
1576
  }
995
1577
 
996
1578
  .file-table tbody tr {
997
- border-bottom: 1px solid var(--border-secondary);
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;
998
1595
  }
999
1596
 
1000
1597
  .file-table tbody tr:hover {
1001
- background-color: var(--hover-bg);
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;
1002
1628
  }
1003
1629
 
1004
1630
  .file-table td {
1005
- padding: 6px 16px;
1631
+ padding: 10px 16px;
1006
1632
  font-size: 14px;
1007
1633
  vertical-align: middle;
1634
+ transition: all var(--transition-base);
1008
1635
  }
1009
1636
 
1010
- .file-table .icon {
1011
- width: 24px;
1012
- text-align: center;
1013
- font-size: 16px;
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);
1014
1654
  }
1015
1655
 
1016
1656
  .octicon-file,
@@ -1075,20 +1715,59 @@ main {
1075
1715
  opacity: 0.7;
1076
1716
  }
1077
1717
 
1078
- .text-yellow { color: #f9c513; }
1079
- .text-blue { color: #0969da; }
1080
- .text-green { color: #1a7f37; }
1081
- .text-red { color: #cf222e; }
1082
- .text-orange { color: #fb8500; }
1083
- .text-purple { color: #8250df; }
1084
- .text-gray { color: var(--text-secondary); }
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
+ }
1085
1746
 
1086
- [data-theme="light"] .text-yellow { color: #dbab09; }
1087
- [data-theme="light"] .text-blue { color: #0550ae; }
1088
- [data-theme="light"] .text-green { color: #116329; }
1089
- [data-theme="light"] .text-red { color: #82071e; }
1090
- [data-theme="light"] .text-orange { color: #bc4c00; }
1091
- [data-theme="light"] .text-purple { color: #6f42c1; }
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
+ }
1092
1771
 
1093
1772
  /* Old search styles removed - using new GitHub-style search */
1094
1773
 
@@ -1096,64 +1775,102 @@ main {
1096
1775
  .language-stats {
1097
1776
  display: flex;
1098
1777
  align-items: center;
1099
- gap: 8px;
1100
- margin-left: 16px;
1101
- max-width: none; /* allow full content */
1102
- overflow: visible; /* avoid clipping at edges */
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);
1103
1789
  position: relative;
1104
- white-space: nowrap; /* keep in a single row like GitHub */
1790
+ overflow: visible;
1791
+ white-space: nowrap;
1792
+ backdrop-filter: blur(10px);
1793
+ flex-shrink: 1;
1794
+ min-width: 0;
1105
1795
  }
1106
1796
 
1107
1797
  .language-stats:hover {
1108
1798
  overflow: visible;
1109
1799
  z-index: 10;
1800
+ box-shadow: var(--shadow-md);
1801
+ border-color: var(--border-primary);
1802
+ transform: translateY(-1px);
1110
1803
  }
1111
1804
 
1112
1805
  .language-stats:hover::before {
1113
1806
  content: '';
1114
1807
  position: absolute;
1115
- top: -4px;
1116
- left: -8px;
1117
- right: -8px;
1118
- bottom: -4px;
1119
- background: var(--bg-secondary);
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%);
1120
1815
  border: 1px solid var(--border-primary);
1121
- border-radius: 6px;
1122
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1816
+ border-radius: var(--radius-xl);
1817
+ box-shadow: var(--shadow-lg);
1123
1818
  z-index: -1;
1124
1819
  pointer-events: none;
1125
1820
  }
1126
1821
 
1127
1822
  .lang-stat {
1128
- display: flex;
1823
+ display: inline-flex;
1129
1824
  align-items: center;
1130
- gap: 4px;
1131
- font-size: 11px;
1825
+ gap: 6px;
1826
+ font-size: 12px;
1132
1827
  color: var(--text-secondary);
1133
1828
  white-space: nowrap;
1134
1829
  flex-shrink: 0;
1135
- padding: 2px 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);
1136
1840
  }
1137
1841
 
1138
1842
  .lang-dot {
1139
- width: 8px;
1140
- height: 8px;
1843
+ width: 10px;
1844
+ height: 10px;
1141
1845
  border-radius: 50%;
1142
1846
  display: inline-block;
1143
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);
1144
1857
  }
1145
1858
 
1146
1859
  .lang-name {
1147
- font-weight: 500;
1860
+ font-weight: 600;
1148
1861
  color: var(--text-primary);
1862
+ letter-spacing: -0.01em;
1149
1863
  }
1150
1864
 
1151
1865
  .lang-percent {
1152
1866
  color: var(--text-secondary);
1867
+ font-weight: 500;
1868
+ font-variant-numeric: tabular-nums;
1153
1869
  }
1154
1870
 
1155
1871
  /* File table improvements */
1156
1872
  .file-table-container {
1873
+ margin-top: 0;
1157
1874
  margin-bottom: 24px;
1158
1875
  }
1159
1876
 
@@ -1255,35 +1972,47 @@ main {
1255
1972
  right: 8px;
1256
1973
  top: 50%;
1257
1974
  transform: translateY(-50%);
1258
- transition: opacity 0.2s ease;
1975
+ transition: all var(--transition-base);
1259
1976
  z-index: 10;
1977
+ background: var(--bg-secondary);
1978
+ padding: 2px;
1979
+ border-radius: var(--radius-sm);
1980
+ backdrop-filter: blur(8px);
1260
1981
  }
1261
1982
 
1262
1983
  .file-row:hover .quick-actions {
1263
1984
  opacity: 1;
1985
+ transform: translateY(-50%) scale(1);
1264
1986
  }
1265
1987
 
1266
1988
  .quick-btn {
1267
- background: var(--bg-secondary);
1989
+ background: var(--bg-primary);
1268
1990
  border: 1px solid var(--border-primary);
1269
- border-radius: 4px;
1270
- padding: 4px 6px;
1991
+ border-radius: var(--radius-sm);
1992
+ padding: 5px 7px;
1271
1993
  cursor: pointer;
1272
1994
  color: var(--text-secondary);
1273
- transition: all 0.15s ease;
1995
+ transition: all var(--transition-base);
1274
1996
  display: flex;
1275
1997
  align-items: center;
1276
1998
  justify-content: center;
1277
1999
  text-decoration: none;
1278
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
2000
+ box-shadow: var(--shadow-sm);
2001
+ width: 28px;
2002
+ height: 28px;
1279
2003
  }
1280
2004
 
1281
2005
  .quick-btn:hover {
1282
2006
  background: var(--hover-bg);
1283
2007
  color: var(--text-primary);
1284
- border-color: var(--text-secondary);
1285
- transform: translateY(-1px);
1286
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
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);
1287
2016
  }
1288
2017
 
1289
2018
  .quick-icon {
@@ -1292,50 +2021,64 @@ main {
1292
2021
  fill: currentColor;
1293
2022
  }
1294
2023
 
1295
- /* Improve name column to accommodate quick actions */
1296
- .file-table .name {
2024
+ /* Name column styling */
2025
+ .file-table .col-name {
1297
2026
  padding-right: 80px;
1298
2027
  min-width: 200px;
1299
2028
  }
1300
2029
 
1301
- .file-table .name a {
2030
+ .file-table .col-name a {
1302
2031
  display: block;
1303
2032
  overflow: hidden;
1304
2033
  text-overflow: ellipsis;
1305
2034
  white-space: nowrap;
1306
2035
  padding-right: 8px;
1307
- }
1308
-
1309
- .file-table .name a {
1310
2036
  color: var(--link-color);
1311
2037
  text-decoration: none;
1312
- font-weight: 600;
2038
+ font-weight: 500;
1313
2039
  }
1314
2040
 
1315
- .file-table .name a:hover {
2041
+ .file-table .col-name a:hover {
1316
2042
  text-decoration: underline;
1317
2043
  }
1318
2044
 
1319
- .file-table .size,
1320
- .file-table .modified {
1321
- color: var(--text-secondary);
1322
- font-size: 12px;
1323
- white-space: nowrap;
1324
- }
1325
-
1326
2045
  .file-content {
1327
- background-color: var(--bg-primary);
1328
- border: 1px solid var(--border-primary);
1329
- border-radius: 6px;
2046
+ background: var(--bg-card);
2047
+ border: 1px solid var(--border-subtle);
2048
+ border-radius: var(--radius-xl);
1330
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);
1331
2074
  }
1332
2075
 
1333
2076
  .file-content pre {
1334
2077
  margin: 0;
1335
- padding: 0;
2078
+ padding: 16px 0;
1336
2079
  overflow-x: auto;
1337
- font-size: 12px;
1338
- line-height: 20px;
2080
+ font-size: 13px;
2081
+ line-height: 22px;
1339
2082
  background-color: var(--bg-primary);
1340
2083
  }
1341
2084
 
@@ -1433,24 +2176,26 @@ main {
1433
2176
  .line-container {
1434
2177
  display: block;
1435
2178
  position: relative;
1436
- transition: background-color 0.12s ease;
2179
+ transition: all var(--transition-base);
1437
2180
  padding: 0;
1438
2181
  line-height: 20px;
1439
2182
  min-height: 20px;
2183
+ border-left: 2px solid transparent;
1440
2184
  }
1441
2185
 
1442
- /* Remove pseudo-newline that created extra blank lines */
1443
-
1444
2186
  .line-container:hover {
1445
- background-color: rgba(110, 118, 129, 0.1); /* subtle hover like GH */
2187
+ background-color: rgba(110, 118, 129, 0.08);
2188
+ border-left-color: var(--border-primary);
1446
2189
  }
1447
2190
 
1448
2191
  .line-container.selected {
1449
- background-color: #fffbdd; /* GH light selection */
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);
1450
2194
  }
1451
2195
 
1452
2196
  [data-theme="dark"] .line-container.selected {
1453
- background-color: rgba(187, 128, 9, 0.18); /* GH-ish dark yellow */
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);
1454
2199
  }
1455
2200
 
1456
2201
  /* Editor */
@@ -1623,11 +2368,16 @@ main {
1623
2368
  -webkit-user-select: none;
1624
2369
  text-decoration: none;
1625
2370
  cursor: pointer;
2371
+ transition: all var(--transition-base);
2372
+ opacity: 0.7;
1626
2373
  }
1627
2374
 
1628
2375
  .line-number:hover {
1629
2376
  color: var(--link-color);
1630
2377
  text-decoration: none;
2378
+ opacity: 1;
2379
+ background: rgba(88, 166, 255, 0.08);
2380
+ border-right-color: var(--link-color);
1631
2381
  }
1632
2382
 
1633
2383
  .line-content {
@@ -1641,7 +2391,7 @@ main {
1641
2391
  letter-spacing: normal;
1642
2392
  }
1643
2393
 
1644
- /* Keep gutter simple: only border-right, no per-line background */
2394
+ /* Code folding now handled by Monaco Editor - removed custom implementation */
1645
2395
 
1646
2396
  /* GitHub syntax highlighting - Dark theme */
1647
2397
  .hljs-comment,
@@ -1693,10 +2443,24 @@ main {
1693
2443
  color: #ff7b72;
1694
2444
  }
1695
2445
 
1696
- .hljs-function {
2446
+ .hljs-function,
2447
+ .hljs-function .hljs-title {
1697
2448
  color: #d2a8ff;
1698
2449
  }
1699
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
+
1700
2464
  .hljs-tag {
1701
2465
  color: #7ee787;
1702
2466
  }
@@ -1920,9 +2684,9 @@ main {
1920
2684
  }
1921
2685
 
1922
2686
  .markdown pre {
1923
- background-color: var(--bg-secondary);
2687
+ background-color: var(--bg-primary);
1924
2688
  padding: 16px;
1925
- border-radius: 8px;
2689
+ border-radius: 6px;
1926
2690
  overflow-x: auto;
1927
2691
  margin: 16px 0;
1928
2692
  border: 1px solid var(--border-primary);
@@ -1932,8 +2696,10 @@ main {
1932
2696
  background: none;
1933
2697
  padding: 0;
1934
2698
  border: none;
1935
- font-size: 14px;
2699
+ font-size: 12px;
2700
+ line-height: 20px;
1936
2701
  color: var(--text-primary);
2702
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
1937
2703
  }
1938
2704
 
1939
2705
  /* Other elements */
@@ -1997,8 +2763,8 @@ main {
1997
2763
  font-size: 14px;
1998
2764
  }
1999
2765
 
2000
- .file-table .size,
2001
- .file-table .modified {
2766
+ .file-table .col-size,
2767
+ .file-table .col-modified {
2002
2768
  display: none;
2003
2769
  }
2004
2770
 
@@ -2623,13 +3389,9 @@ main {
2623
3389
  font-style: italic;
2624
3390
  }
2625
3391
 
2626
- /* Git status column - minimal spacing */
2627
- .file-table .git-status-col {
2628
- width: 10px;
2629
- text-align: center;
2630
- padding: 0;
2631
- font-size: 16px;
2632
- vertical-align: middle;
3392
+ /* Git status indicator in icon cell */
3393
+ .file-table .col-icon .git-status {
3394
+ font-size: 12px;
2633
3395
  }
2634
3396
 
2635
3397
  /* Untracked file status styling */
@@ -2661,6 +3423,135 @@ main {
2661
3423
  position: relative !important;
2662
3424
  }
2663
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
+
2664
3555
  /* Monaco theme integration - match view/browse UI */
2665
3556
  .monaco-editor .monaco-editor-background {
2666
3557
  background-color: var(--bg-primary) !important;
@@ -2688,40 +3579,902 @@ main {
2688
3579
  background-color: var(--bg-primary) !important;
2689
3580
  }
2690
3581
 
2691
- /* Line number styling to match our theme */
2692
- .monaco-editor .margin-view-overlays .line-numbers {
2693
- color: var(--text-secondary) !important;
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;
2694
3600
  }
2695
3601
 
2696
- .monaco-editor .margin-view-overlays .line-numbers.active-line-number {
2697
- color: var(--text-primary) !important;
3602
+ [data-theme="light"] .inline-search-overlay {
3603
+ background-color: rgba(255, 255, 255, 0.98);
3604
+ box-shadow: var(--shadow-xl);
2698
3605
  }
2699
3606
 
2700
- /* Draft dialog styling */
2701
- .draft-modal {
2702
- max-width: 400px;
2703
- text-align: center;
3607
+ @keyframes slideInRight {
3608
+ from {
3609
+ opacity: 0;
3610
+ transform: translateX(20px);
3611
+ }
3612
+ to {
3613
+ opacity: 1;
3614
+ transform: translateX(0);
3615
+ }
2704
3616
  }
2705
3617
 
2706
- .draft-modal h3 {
2707
- margin: 0 0 12px 0;
2708
- color: var(--text-accent);
2709
- font-size: 18px;
3618
+ .inline-search-container {
3619
+ display: flex;
3620
+ flex-direction: column;
2710
3621
  }
2711
3622
 
2712
- .draft-modal p {
2713
- margin: 0 0 20px 0;
2714
- color: var(--text-secondary);
2715
- line-height: 1.5;
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);
2716
3630
  }
2717
3631
 
2718
- .draft-actions {
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 {
2719
3659
  display: flex;
2720
- gap: 8px;
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;
2721
3676
  justify-content: center;
3677
+ box-shadow: var(--shadow-sm);
2722
3678
  }
2723
3679
 
2724
- .draft-actions .btn {
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 {
2725
3714
  flex: 1;
2726
- max-width: 120px;
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
+ }
2727
4480
  }