mdbrowse-cli 0.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.
@@ -0,0 +1,879 @@
1
+ /* ── Theme Variables ── */
2
+ :root {
3
+ --bg: #ffffff;
4
+ --bg-secondary: #f6f8fa;
5
+ --bg-tertiary: #eaeef2;
6
+ --text: #1f2328;
7
+ --text-secondary: #656d76;
8
+ --text-muted: #8b949e;
9
+ --border: #d0d7de;
10
+ --border-light: #e8ebef;
11
+ --accent: #0969da;
12
+ --accent-subtle: #ddf4ff;
13
+ --sidebar-bg: #f6f8fa;
14
+ --sidebar-hover: #eaeef2;
15
+ --sidebar-active: #ddf4ff;
16
+ --code-bg: #f6f8fa;
17
+ --scrollbar-thumb: #c5cad0;
18
+ --scrollbar-track: transparent;
19
+ --shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
20
+ --shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.1);
21
+ --fm-bg: #f0f6ff;
22
+ --fm-border: #b6d4fe;
23
+ --fm-key: #0550ae;
24
+ }
25
+
26
+ .dark {
27
+ --bg: #0d1117;
28
+ --bg-secondary: #161b22;
29
+ --bg-tertiary: #21262d;
30
+ --text: #e6edf3;
31
+ --text-secondary: #8b949e;
32
+ --text-muted: #6e7681;
33
+ --border: #30363d;
34
+ --border-light: #21262d;
35
+ --accent: #58a6ff;
36
+ --accent-subtle: #1a2332;
37
+ --sidebar-bg: #161b22;
38
+ --sidebar-hover: #21262d;
39
+ --sidebar-active: #1a2332;
40
+ --code-bg: #161b22;
41
+ --scrollbar-thumb: #484f58;
42
+ --scrollbar-track: transparent;
43
+ --shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
44
+ --shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.4);
45
+ --fm-bg: #1a2332;
46
+ --fm-border: #2d4a7a;
47
+ --fm-key: #79c0ff;
48
+ }
49
+
50
+ @media (prefers-color-scheme: dark) {
51
+ :root:not(.light) {
52
+ --bg: #0d1117;
53
+ --bg-secondary: #161b22;
54
+ --bg-tertiary: #21262d;
55
+ --text: #e6edf3;
56
+ --text-secondary: #8b949e;
57
+ --text-muted: #6e7681;
58
+ --border: #30363d;
59
+ --border-light: #21262d;
60
+ --accent: #58a6ff;
61
+ --accent-subtle: #1a2332;
62
+ --sidebar-bg: #161b22;
63
+ --sidebar-hover: #21262d;
64
+ --sidebar-active: #1a2332;
65
+ --code-bg: #161b22;
66
+ --scrollbar-thumb: #484f58;
67
+ --scrollbar-track: transparent;
68
+ --shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
69
+ --shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.4);
70
+ --fm-bg: #1a2332;
71
+ --fm-border: #2d4a7a;
72
+ --fm-key: #79c0ff;
73
+ }
74
+ }
75
+
76
+ /* ── Reset ── */
77
+ *, *::before, *::after {
78
+ box-sizing: border-box;
79
+ margin: 0;
80
+ padding: 0;
81
+ }
82
+
83
+ /* ── Base ── */
84
+ html, body {
85
+ height: 100%;
86
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
87
+ font-size: 15px;
88
+ line-height: 1.6;
89
+ color: var(--text);
90
+ background: var(--bg);
91
+ transition: background-color 0.2s ease, color 0.2s ease;
92
+ -webkit-font-smoothing: antialiased;
93
+ }
94
+
95
+ /* ── Scrollbar ── */
96
+ ::-webkit-scrollbar { width: 6px; height: 6px; }
97
+ ::-webkit-scrollbar-track { background: var(--scrollbar-track); }
98
+ ::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border-radius: 3px; }
99
+ ::-webkit-scrollbar-thumb:hover { background: var(--text-muted); }
100
+
101
+ /* Firefox */
102
+ * {
103
+ scrollbar-width: thin;
104
+ scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
105
+ }
106
+
107
+ /* ── Layout ── */
108
+ #app {
109
+ display: flex;
110
+ height: 100vh;
111
+ overflow: hidden;
112
+ }
113
+
114
+ /* ── Sidebar ── */
115
+ #sidebar {
116
+ width: 280px;
117
+ min-width: 280px;
118
+ height: 100vh;
119
+ background: var(--sidebar-bg);
120
+ border-right: 1px solid var(--border);
121
+ display: flex;
122
+ flex-direction: column;
123
+ overflow: hidden;
124
+ transition: transform 0.25s ease, background-color 0.2s ease;
125
+ z-index: 10;
126
+ }
127
+
128
+ .sidebar-header {
129
+ display: flex;
130
+ align-items: center;
131
+ justify-content: space-between;
132
+ padding: 16px 16px 12px;
133
+ border-bottom: 1px solid var(--border);
134
+ }
135
+
136
+ .logo {
137
+ font-size: 15px;
138
+ font-weight: 600;
139
+ color: var(--text);
140
+ letter-spacing: -0.01em;
141
+ }
142
+
143
+ #theme-toggle {
144
+ display: flex;
145
+ align-items: center;
146
+ justify-content: center;
147
+ width: 32px;
148
+ height: 32px;
149
+ border: 1px solid var(--border);
150
+ border-radius: 6px;
151
+ background: var(--bg);
152
+ color: var(--text-secondary);
153
+ cursor: pointer;
154
+ transition: all 0.15s ease;
155
+ }
156
+
157
+ #theme-toggle:hover {
158
+ background: var(--bg-tertiary);
159
+ color: var(--text);
160
+ }
161
+
162
+ /* Show sun in dark mode, moon in light mode */
163
+ .icon-moon { display: block; }
164
+ .icon-sun { display: none; }
165
+ .dark .icon-moon { display: none; }
166
+ .dark .icon-sun { display: block; }
167
+ @media (prefers-color-scheme: dark) {
168
+ :root:not(.light) .icon-moon { display: none; }
169
+ :root:not(.light) .icon-sun { display: block; }
170
+ }
171
+
172
+ /* ── Search ── */
173
+ #search-container {
174
+ position: relative;
175
+ padding: 8px 12px;
176
+ border-bottom: 1px solid var(--border);
177
+ flex-shrink: 0;
178
+ }
179
+
180
+ #search-input {
181
+ width: 100%;
182
+ padding: 6px 28px 6px 10px;
183
+ font-size: 13px;
184
+ font-family: inherit;
185
+ color: var(--text);
186
+ background: var(--bg);
187
+ border: 1px solid var(--border);
188
+ border-radius: 6px;
189
+ outline: none;
190
+ transition: border-color 0.15s ease;
191
+ }
192
+
193
+ #search-input:focus {
194
+ border-color: var(--accent);
195
+ }
196
+
197
+ #search-input::placeholder {
198
+ color: var(--text-muted);
199
+ }
200
+
201
+ #search-clear {
202
+ position: absolute;
203
+ right: 16px;
204
+ top: 50%;
205
+ transform: translateY(-50%);
206
+ background: none;
207
+ border: none;
208
+ color: var(--text-muted);
209
+ cursor: pointer;
210
+ font-size: 14px;
211
+ padding: 2px 4px;
212
+ line-height: 1;
213
+ }
214
+
215
+ #search-clear:hover {
216
+ color: var(--text);
217
+ }
218
+
219
+ /* ── Search Results ── */
220
+ .search-results {
221
+ flex: 1;
222
+ overflow-y: auto;
223
+ padding: 8px 0;
224
+ }
225
+
226
+ .search-file-group {
227
+ margin-bottom: 4px;
228
+ }
229
+
230
+ .search-file-header {
231
+ display: flex;
232
+ align-items: center;
233
+ gap: 6px;
234
+ padding: 6px 12px;
235
+ font-size: 12px;
236
+ font-weight: 600;
237
+ color: var(--text-secondary);
238
+ font-family: 'SF Mono', 'Fira Code', 'JetBrains Mono', 'Cascadia Code', Consolas, monospace;
239
+ overflow: hidden;
240
+ text-overflow: ellipsis;
241
+ white-space: nowrap;
242
+ cursor: pointer;
243
+ }
244
+
245
+ .search-file-header:hover {
246
+ background: var(--sidebar-hover);
247
+ color: var(--text);
248
+ }
249
+
250
+ .search-match {
251
+ display: flex;
252
+ align-items: baseline;
253
+ gap: 8px;
254
+ padding: 3px 12px 3px 24px;
255
+ font-size: 12px;
256
+ color: var(--text-secondary);
257
+ cursor: pointer;
258
+ line-height: 1.5;
259
+ }
260
+
261
+ .search-match:hover {
262
+ background: var(--sidebar-hover);
263
+ color: var(--text);
264
+ }
265
+
266
+ .search-line-num {
267
+ flex-shrink: 0;
268
+ color: var(--text-muted);
269
+ font-family: 'SF Mono', 'Fira Code', 'JetBrains Mono', 'Cascadia Code', Consolas, monospace;
270
+ font-size: 11px;
271
+ min-width: 24px;
272
+ text-align: right;
273
+ }
274
+
275
+ .search-line-text {
276
+ overflow: hidden;
277
+ text-overflow: ellipsis;
278
+ white-space: nowrap;
279
+ font-family: 'SF Mono', 'Fira Code', 'JetBrains Mono', 'Cascadia Code', Consolas, monospace;
280
+ }
281
+
282
+ .search-line-text mark {
283
+ background: var(--accent-subtle);
284
+ color: var(--accent);
285
+ border-radius: 2px;
286
+ padding: 0 1px;
287
+ }
288
+
289
+ .search-empty {
290
+ padding: 24px 16px;
291
+ text-align: center;
292
+ color: var(--text-muted);
293
+ font-size: 13px;
294
+ }
295
+
296
+ /* ── File Tree ── */
297
+ #file-tree {
298
+ flex: 1;
299
+ overflow-y: auto;
300
+ padding: 8px 0;
301
+ }
302
+
303
+ .tree-item {
304
+ display: flex;
305
+ align-items: center;
306
+ gap: 6px;
307
+ padding: 5px 12px 5px calc(12px + var(--depth, 0) * 16px);
308
+ cursor: pointer;
309
+ color: var(--text-secondary);
310
+ font-size: 13px;
311
+ line-height: 1.5;
312
+ text-decoration: none;
313
+ border-radius: 6px;
314
+ margin: 1px 6px;
315
+ transition: background-color 0.15s ease, color 0.15s ease;
316
+ user-select: none;
317
+ }
318
+
319
+ .tree-item:hover {
320
+ background: var(--sidebar-hover);
321
+ color: var(--text);
322
+ }
323
+
324
+ .tree-item.active {
325
+ background: var(--sidebar-active);
326
+ color: var(--accent);
327
+ font-weight: 600;
328
+ }
329
+
330
+ .tree-icon {
331
+ flex-shrink: 0;
332
+ width: 16px;
333
+ height: 16px;
334
+ display: flex;
335
+ align-items: center;
336
+ justify-content: center;
337
+ font-size: 12px;
338
+ color: var(--text-muted);
339
+ transition: transform 0.15s ease;
340
+ }
341
+
342
+ .tree-item.active .tree-icon {
343
+ color: var(--accent);
344
+ }
345
+
346
+ .tree-dir > .tree-icon {
347
+ color: var(--accent);
348
+ }
349
+
350
+ .tree-chevron {
351
+ transition: transform 0.15s ease;
352
+ }
353
+
354
+ .tree-dir.collapsed .tree-chevron {
355
+ transform: rotate(-90deg);
356
+ }
357
+
358
+ .tree-children {
359
+ overflow: hidden;
360
+ transition: opacity 0.15s ease;
361
+ }
362
+
363
+ .tree-children.hidden {
364
+ display: none;
365
+ }
366
+
367
+ .tree-name {
368
+ overflow: hidden;
369
+ text-overflow: ellipsis;
370
+ white-space: nowrap;
371
+ }
372
+
373
+ /* ── Content Toolbar ── */
374
+ #content-toolbar {
375
+ display: flex;
376
+ align-items: center;
377
+ gap: 8px;
378
+ padding: 8px 48px;
379
+ max-width: 780px;
380
+ margin: 0 auto;
381
+ }
382
+
383
+ #content-toolbar button {
384
+ display: inline-flex;
385
+ align-items: center;
386
+ gap: 4px;
387
+ padding: 5px 12px;
388
+ font-size: 13px;
389
+ font-family: inherit;
390
+ border: 1px solid var(--border);
391
+ border-radius: 6px;
392
+ background: var(--bg-secondary);
393
+ color: var(--text-secondary);
394
+ cursor: pointer;
395
+ transition: all 0.15s ease;
396
+ }
397
+
398
+ #content-toolbar button:hover {
399
+ background: var(--bg-tertiary);
400
+ color: var(--text);
401
+ border-color: var(--text-muted);
402
+ }
403
+
404
+ #content-toolbar button:disabled {
405
+ opacity: 0.5;
406
+ cursor: not-allowed;
407
+ }
408
+
409
+ #save-btn:hover {
410
+ border-color: var(--accent);
411
+ color: var(--accent);
412
+ }
413
+
414
+ #save-btn.unsaved {
415
+ background: #e3790c;
416
+ border-color: #e3790c;
417
+ color: #fff;
418
+ }
419
+
420
+ #save-btn.unsaved:hover {
421
+ background: #c96a0a;
422
+ border-color: #c96a0a;
423
+ color: #fff;
424
+ }
425
+
426
+ /* ── Editor Textarea ── */
427
+ #editor {
428
+ display: block;
429
+ width: 100%;
430
+ min-height: calc(100vh - 200px);
431
+ padding: 16px;
432
+ font-family: 'SF Mono', 'Fira Code', 'JetBrains Mono', 'Cascadia Code', Consolas, monospace;
433
+ font-size: 13px;
434
+ line-height: 1.5;
435
+ color: var(--text);
436
+ background: var(--code-bg);
437
+ border: 1px solid var(--border);
438
+ border-radius: 8px;
439
+ resize: none;
440
+ overflow: hidden;
441
+ tab-size: 2;
442
+ outline: none;
443
+ transition: border-color 0.15s ease;
444
+ }
445
+
446
+ #editor:focus {
447
+ border-color: var(--accent);
448
+ }
449
+
450
+ /* ── Main Content ── */
451
+ #content {
452
+ flex: 1;
453
+ overflow-y: auto;
454
+ background: var(--bg);
455
+ transition: background-color 0.2s ease;
456
+ }
457
+
458
+ #content-inner {
459
+ max-width: 780px;
460
+ margin: 0 auto;
461
+ padding: 40px 48px 80px;
462
+ }
463
+
464
+ /* ── Welcome ── */
465
+ #welcome {
466
+ display: flex;
467
+ flex-direction: column;
468
+ align-items: center;
469
+ justify-content: center;
470
+ min-height: 60vh;
471
+ text-align: center;
472
+ color: var(--text-muted);
473
+ }
474
+
475
+ #welcome h1 {
476
+ font-size: 28px;
477
+ font-weight: 600;
478
+ color: var(--text);
479
+ margin-bottom: 8px;
480
+ }
481
+
482
+ #welcome p {
483
+ font-size: 15px;
484
+ }
485
+
486
+ /* ── Markdown Content ── */
487
+ .markdown-body {
488
+ color: var(--text);
489
+ word-wrap: break-word;
490
+ }
491
+
492
+ .markdown-body h1,
493
+ .markdown-body h2,
494
+ .markdown-body h3,
495
+ .markdown-body h4,
496
+ .markdown-body h5,
497
+ .markdown-body h6 {
498
+ margin-top: 24px;
499
+ margin-bottom: 16px;
500
+ font-weight: 600;
501
+ line-height: 1.25;
502
+ color: var(--text);
503
+ }
504
+
505
+ .markdown-body h1 { font-size: 2em; padding-bottom: 0.3em; border-bottom: 1px solid var(--border); }
506
+ .markdown-body h2 { font-size: 1.5em; padding-bottom: 0.3em; border-bottom: 1px solid var(--border); }
507
+ .markdown-body h3 { font-size: 1.25em; }
508
+ .markdown-body h4 { font-size: 1em; }
509
+
510
+ .markdown-body p {
511
+ margin-bottom: 16px;
512
+ }
513
+
514
+ .markdown-body a {
515
+ color: var(--accent);
516
+ text-decoration: none;
517
+ transition: color 0.15s ease;
518
+ }
519
+
520
+ .markdown-body a:hover {
521
+ text-decoration: underline;
522
+ text-underline-offset: 2px;
523
+ }
524
+
525
+ .markdown-body strong { font-weight: 600; }
526
+
527
+ .markdown-body ul, .markdown-body ol {
528
+ padding-left: 2em;
529
+ margin-bottom: 16px;
530
+ }
531
+
532
+ .markdown-body li + li {
533
+ margin-top: 4px;
534
+ }
535
+
536
+ .markdown-body blockquote {
537
+ padding: 2px 1em;
538
+ margin-bottom: 16px;
539
+ color: var(--text-secondary);
540
+ border-left: 3px solid var(--accent);
541
+ font-style: italic;
542
+ }
543
+
544
+ .markdown-body hr {
545
+ height: 0.25em;
546
+ padding: 0;
547
+ margin: 24px 0;
548
+ background-color: var(--border);
549
+ border: 0;
550
+ border-radius: 2px;
551
+ }
552
+
553
+ .markdown-body table {
554
+ border-collapse: collapse;
555
+ width: 100%;
556
+ margin-bottom: 16px;
557
+ overflow: auto;
558
+ }
559
+
560
+ .markdown-body table th,
561
+ .markdown-body table td {
562
+ padding: 8px 12px;
563
+ border: 1px solid var(--border);
564
+ }
565
+
566
+ .markdown-body table th {
567
+ font-weight: 600;
568
+ background: var(--bg-tertiary);
569
+ }
570
+
571
+ .markdown-body table tr:nth-child(2n) {
572
+ background: var(--bg-secondary);
573
+ }
574
+
575
+ .markdown-body img {
576
+ max-width: 100%;
577
+ border-radius: 6px;
578
+ }
579
+
580
+ /* ── Code ── */
581
+ .markdown-body code {
582
+ padding: 0.2em 0.4em;
583
+ font-size: 85%;
584
+ background: var(--code-bg);
585
+ border: 1px solid var(--border-light);
586
+ border-radius: 4px;
587
+ font-family: 'SF Mono', 'Fira Code', 'JetBrains Mono', 'Cascadia Code', Consolas, monospace;
588
+ }
589
+
590
+ .markdown-body pre {
591
+ padding: 16px;
592
+ overflow: auto;
593
+ font-size: 13px;
594
+ line-height: 1.5;
595
+ background: var(--code-bg);
596
+ border-radius: 8px;
597
+ border: 1px solid var(--border-light);
598
+ margin-bottom: 16px;
599
+ }
600
+
601
+ .markdown-body pre code {
602
+ padding: 0;
603
+ background: transparent;
604
+ border: none;
605
+ font-size: 100%;
606
+ border-radius: 0;
607
+ }
608
+
609
+ /* Shiki dual-theme support */
610
+ .shiki,
611
+ .shiki span {
612
+ color: var(--shiki-light) !important;
613
+ background-color: transparent !important;
614
+ }
615
+
616
+ .dark .shiki,
617
+ .dark .shiki span {
618
+ color: var(--shiki-dark) !important;
619
+ background-color: transparent !important;
620
+ }
621
+
622
+ @media (prefers-color-scheme: dark) {
623
+ :root:not(.light) .shiki,
624
+ :root:not(.light) .shiki span {
625
+ color: var(--shiki-dark) !important;
626
+ background-color: transparent !important;
627
+ }
628
+ }
629
+
630
+ pre.shiki {
631
+ padding: 16px;
632
+ border-radius: 8px;
633
+ border: 1px solid var(--border-light);
634
+ margin-bottom: 16px;
635
+ overflow: auto;
636
+ font-size: 13px;
637
+ line-height: 1.5;
638
+ background: var(--code-bg) !important;
639
+ }
640
+
641
+ /* Code file view (non-markdown) */
642
+ .code-view pre.shiki {
643
+ border-radius: 8px;
644
+ margin: 0;
645
+ }
646
+
647
+ /* ── Task Lists ── */
648
+ .markdown-body .contains-task-list {
649
+ list-style: none;
650
+ padding-left: 0;
651
+ }
652
+
653
+ .markdown-body .task-list-item {
654
+ display: flex;
655
+ align-items: baseline;
656
+ gap: 8px;
657
+ list-style: none;
658
+ }
659
+
660
+ .markdown-body input[type="checkbox"] {
661
+ appearance: none;
662
+ -webkit-appearance: none;
663
+ width: 16px;
664
+ height: 16px;
665
+ border: 2px solid var(--border);
666
+ border-radius: 4px;
667
+ background: var(--bg);
668
+ cursor: pointer;
669
+ flex-shrink: 0;
670
+ position: relative;
671
+ top: 2px;
672
+ transition: background-color 0.15s ease, border-color 0.15s ease;
673
+ }
674
+
675
+ .markdown-body input[type="checkbox"]:checked {
676
+ background: var(--accent);
677
+ border-color: var(--accent);
678
+ }
679
+
680
+ .markdown-body input[type="checkbox"]:checked::after {
681
+ content: '';
682
+ position: absolute;
683
+ left: 3px;
684
+ top: 0px;
685
+ width: 5px;
686
+ height: 9px;
687
+ border: solid #fff;
688
+ border-width: 0 2px 2px 0;
689
+ transform: rotate(45deg);
690
+ }
691
+
692
+ /* ── Frontmatter ── */
693
+ .frontmatter {
694
+ background: var(--fm-bg);
695
+ border: 1px solid var(--fm-border);
696
+ border-radius: 8px;
697
+ padding: 12px 16px;
698
+ margin-bottom: 24px;
699
+ font-size: 13px;
700
+ }
701
+
702
+ .frontmatter table {
703
+ width: auto;
704
+ border: none;
705
+ border-collapse: collapse;
706
+ }
707
+
708
+ .frontmatter td {
709
+ border: none;
710
+ padding: 2px 12px 2px 0;
711
+ }
712
+
713
+ .fm-key {
714
+ font-weight: 600;
715
+ color: var(--fm-key);
716
+ white-space: nowrap;
717
+ }
718
+
719
+ .fm-value {
720
+ color: var(--text-secondary);
721
+ }
722
+
723
+ /* ── File path header ── */
724
+ .file-path-header {
725
+ display: flex;
726
+ align-items: center;
727
+ gap: 8px;
728
+ padding-bottom: 12px;
729
+ margin-bottom: 24px;
730
+ border-bottom: 1px solid var(--border-light);
731
+ font-size: 12px;
732
+ color: var(--text-muted);
733
+ font-family: 'SF Mono', 'Fira Code', 'JetBrains Mono', 'Cascadia Code', Consolas, monospace;
734
+ letter-spacing: 0.01em;
735
+ }
736
+
737
+ /* ── Sidebar Toggle (mobile) ── */
738
+ #sidebar-toggle {
739
+ display: none;
740
+ position: fixed;
741
+ top: 12px;
742
+ left: 12px;
743
+ z-index: 20;
744
+ width: 36px;
745
+ height: 36px;
746
+ align-items: center;
747
+ justify-content: center;
748
+ background: var(--bg-secondary);
749
+ border: 1px solid var(--border);
750
+ border-radius: 8px;
751
+ color: var(--text);
752
+ cursor: pointer;
753
+ box-shadow: var(--shadow);
754
+ }
755
+
756
+ /* ── Mobile sidebar backdrop ── */
757
+ .sidebar-backdrop {
758
+ display: none;
759
+ position: fixed;
760
+ inset: 0;
761
+ background: rgba(0, 0, 0, 0.5);
762
+ z-index: 9;
763
+ opacity: 0;
764
+ transition: opacity 0.25s ease;
765
+ }
766
+
767
+ .sidebar-backdrop.visible {
768
+ display: block;
769
+ opacity: 1;
770
+ }
771
+
772
+ /* ── Responsive ── */
773
+ @media (max-width: 768px) {
774
+ #sidebar {
775
+ position: fixed;
776
+ left: 0;
777
+ top: 0;
778
+ transform: translateX(-100%);
779
+ box-shadow: var(--shadow-lg);
780
+ }
781
+
782
+ #sidebar.open {
783
+ transform: translateX(0);
784
+ }
785
+
786
+ #sidebar-toggle {
787
+ display: flex;
788
+ }
789
+
790
+ #content-inner {
791
+ padding: 24px 16px 60px;
792
+ }
793
+
794
+ #content-toolbar {
795
+ padding: 8px 16px;
796
+ }
797
+
798
+ .markdown-body h1 { font-size: 1.6em; }
799
+ .markdown-body h2 { font-size: 1.3em; }
800
+
801
+ .markdown-body pre {
802
+ border-radius: 6px;
803
+ font-size: 12px;
804
+ }
805
+ }
806
+
807
+ /* ── Loading Skeleton ── */
808
+ .loading-skeleton {
809
+ padding: 0;
810
+ }
811
+
812
+ .loading-skeleton .skeleton-line {
813
+ height: 14px;
814
+ background: var(--bg-tertiary);
815
+ border-radius: 4px;
816
+ margin-bottom: 12px;
817
+ animation: skeleton-pulse 1.5s ease-in-out infinite;
818
+ }
819
+
820
+ .loading-skeleton .skeleton-line:nth-child(1) { width: 35%; height: 24px; margin-bottom: 24px; }
821
+ .loading-skeleton .skeleton-line:nth-child(2) { width: 100%; }
822
+ .loading-skeleton .skeleton-line:nth-child(3) { width: 92%; }
823
+ .loading-skeleton .skeleton-line:nth-child(4) { width: 85%; }
824
+ .loading-skeleton .skeleton-line:nth-child(5) { width: 96%; }
825
+ .loading-skeleton .skeleton-line:nth-child(6) { width: 70%; }
826
+
827
+ @keyframes skeleton-pulse {
828
+ 0%, 100% { opacity: 0.4; }
829
+ 50% { opacity: 1; }
830
+ }
831
+
832
+ /* ── Connection status ── */
833
+ .ws-status {
834
+ position: fixed;
835
+ bottom: 12px;
836
+ right: 12px;
837
+ font-size: 11px;
838
+ padding: 4px 10px;
839
+ border-radius: 12px;
840
+ background: var(--bg-tertiary);
841
+ color: var(--text-muted);
842
+ opacity: 0;
843
+ transition: opacity 0.3s ease;
844
+ pointer-events: none;
845
+ }
846
+
847
+ .ws-status.visible {
848
+ opacity: 1;
849
+ }
850
+
851
+ .ws-status.connected {
852
+ background: #1a7f37;
853
+ color: #fff;
854
+ }
855
+
856
+ /* ── File notices (binary, too large) ── */
857
+ .file-notice {
858
+ display: flex;
859
+ align-items: center;
860
+ justify-content: center;
861
+ min-height: 200px;
862
+ color: var(--text-muted);
863
+ font-size: 15px;
864
+ }
865
+
866
+ /* ── Image preview ── */
867
+ .image-preview {
868
+ display: flex;
869
+ align-items: center;
870
+ justify-content: center;
871
+ padding: 24px 0;
872
+ }
873
+
874
+ .image-preview img {
875
+ max-width: 100%;
876
+ max-height: 80vh;
877
+ border-radius: 8px;
878
+ box-shadow: var(--shadow);
879
+ }