mdv-live 0.3.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,1026 @@
1
+ /**
2
+ * MDV - Markdown Viewer Styles
3
+ */
4
+
5
+ /* ============================================================
6
+ CSS Variables (Theme)
7
+ ============================================================ */
8
+
9
+ :root {
10
+ --bg-primary: #1e1e2e;
11
+ --bg-secondary: #181825;
12
+ --bg-tertiary: #313244;
13
+ --text-primary: #cdd6f4;
14
+ --text-secondary: #a6adc8;
15
+ --text-muted: #6c7086;
16
+ --accent: #89b4fa;
17
+ --accent-hover: #b4befe;
18
+ --border: #45475a;
19
+ --scrollbar: #45475a;
20
+ --scrollbar-hover: #585b70;
21
+ --tab-active: #313244;
22
+ --tab-hover: #262637;
23
+ }
24
+
25
+ [data-theme="light"] {
26
+ --bg-primary: #ffffff;
27
+ --bg-secondary: #f5f5f5;
28
+ --bg-tertiary: #e8e8e8;
29
+ --text-primary: #1a1a1a;
30
+ --text-secondary: #4a4a4a;
31
+ --text-muted: #6a6a6a;
32
+ --accent: #0066cc;
33
+ --accent-hover: #0052a3;
34
+ --border: #d0d0d0;
35
+ --scrollbar: #c0c0c0;
36
+ --scrollbar-hover: #a0a0a0;
37
+ --tab-active: #ffffff;
38
+ --tab-hover: #e8e8e8;
39
+ }
40
+
41
+ /* ============================================================
42
+ Base Styles
43
+ ============================================================ */
44
+
45
+ * {
46
+ margin: 0;
47
+ padding: 0;
48
+ box-sizing: border-box;
49
+ }
50
+
51
+ body {
52
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
53
+ background: var(--bg-primary);
54
+ color: var(--text-primary);
55
+ height: 100vh;
56
+ overflow: hidden;
57
+ transition: background 0.2s, color 0.2s;
58
+ }
59
+
60
+ .container {
61
+ display: flex;
62
+ height: 100vh;
63
+ }
64
+
65
+ /* ============================================================
66
+ Sidebar
67
+ ============================================================ */
68
+
69
+ .sidebar {
70
+ width: 280px;
71
+ min-width: 0;
72
+ max-width: 500px;
73
+ background: var(--bg-secondary);
74
+ display: flex;
75
+ flex-direction: column;
76
+ overflow: hidden;
77
+ transition: width 0.2s, background 0.2s;
78
+ }
79
+
80
+ .sidebar.collapsed {
81
+ width: 0 !important;
82
+ border-right: none;
83
+ }
84
+
85
+ .sidebar-header {
86
+ padding: 8px 16px;
87
+ font-weight: 600;
88
+ font-size: 14px;
89
+ color: var(--text-secondary);
90
+ display: flex;
91
+ align-items: center;
92
+ gap: 8px;
93
+ white-space: nowrap;
94
+ min-height: 45px;
95
+ }
96
+
97
+ .sidebar-header svg {
98
+ width: 18px;
99
+ height: 18px;
100
+ flex-shrink: 0;
101
+ }
102
+
103
+ /* ============================================================
104
+ File Tree
105
+ ============================================================ */
106
+
107
+ .file-tree {
108
+ flex: 1;
109
+ overflow-y: auto;
110
+ overflow-x: hidden;
111
+ padding: 8px 0;
112
+ }
113
+
114
+ .file-tree::-webkit-scrollbar { width: 8px; }
115
+ .file-tree::-webkit-scrollbar-track { background: transparent; }
116
+ .file-tree::-webkit-scrollbar-thumb { background: var(--scrollbar); border-radius: 4px; }
117
+ .file-tree::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-hover); }
118
+
119
+ .tree-item { user-select: none; }
120
+
121
+ .tree-item-content {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 6px;
125
+ padding: 6px 12px;
126
+ cursor: pointer;
127
+ font-size: 13px;
128
+ color: var(--text-secondary);
129
+ transition: background 0.1s, color 0.1s;
130
+ white-space: nowrap;
131
+ }
132
+
133
+ .tree-item-content:hover {
134
+ background: var(--bg-tertiary);
135
+ color: var(--text-primary);
136
+ }
137
+
138
+ .tree-item-content.active {
139
+ background: var(--bg-tertiary);
140
+ color: var(--accent);
141
+ }
142
+
143
+ .tree-item-content svg { width: 16px; height: 16px; flex-shrink: 0; }
144
+ .tree-item-content .name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
145
+ .tree-children { padding-left: 16px; }
146
+ .tree-children.collapsed { display: none; }
147
+ .chevron { transition: transform 0.15s; }
148
+ .chevron.expanded { transform: rotate(90deg); }
149
+ .chevron.loading { animation: spin 0.6s linear infinite; }
150
+ @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
151
+
152
+ /* ============================================================
153
+ Resize Handle
154
+ ============================================================ */
155
+
156
+ .resize-handle {
157
+ width: 6px;
158
+ cursor: col-resize;
159
+ background: var(--bg-secondary);
160
+ border-right: 1px solid var(--border);
161
+ transition: background 0.2s;
162
+ }
163
+
164
+ .resize-handle:hover, .resize-handle.active {
165
+ background: var(--accent);
166
+ }
167
+
168
+ /* ============================================================
169
+ Main Content Area
170
+ ============================================================ */
171
+
172
+ .main {
173
+ flex: 1;
174
+ display: flex;
175
+ flex-direction: column;
176
+ overflow: hidden;
177
+ }
178
+
179
+ /* ============================================================
180
+ Toolbar
181
+ ============================================================ */
182
+
183
+ .toolbar {
184
+ padding: 8px 16px;
185
+ border-bottom: 1px solid var(--border);
186
+ display: flex;
187
+ align-items: center;
188
+ gap: 8px;
189
+ background: var(--bg-secondary);
190
+ min-height: 37px;
191
+ }
192
+
193
+ .toolbar-btn {
194
+ background: none;
195
+ border: 1px solid var(--border);
196
+ border-radius: 6px;
197
+ padding: 6px 10px;
198
+ cursor: pointer;
199
+ color: var(--text-secondary);
200
+ font-size: 12px;
201
+ display: flex;
202
+ align-items: center;
203
+ gap: 6px;
204
+ transition: all 0.2s;
205
+ }
206
+
207
+ .toolbar-btn:hover {
208
+ background: var(--bg-tertiary);
209
+ color: var(--text-primary);
210
+ }
211
+
212
+ .toolbar-btn svg { width: 14px; height: 14px; }
213
+
214
+ .toolbar-btn.active {
215
+ background: var(--accent);
216
+ color: white;
217
+ border-color: var(--accent);
218
+ }
219
+
220
+ .toolbar-spacer { flex: 1; }
221
+
222
+ .status {
223
+ display: flex;
224
+ align-items: center;
225
+ gap: 6px;
226
+ font-size: 12px;
227
+ color: var(--text-muted);
228
+ }
229
+
230
+ .status-dot {
231
+ width: 8px;
232
+ height: 8px;
233
+ border-radius: 50%;
234
+ background: #a6e3a1;
235
+ }
236
+
237
+ .status-dot.disconnected { background: #f38ba8; }
238
+
239
+ .shutdown-btn {
240
+ background: none;
241
+ border: none;
242
+ padding: 4px;
243
+ cursor: pointer;
244
+ color: var(--text-muted);
245
+ display: flex;
246
+ align-items: center;
247
+ justify-content: center;
248
+ border-radius: 4px;
249
+ transition: color 0.2s, background 0.2s;
250
+ margin-left: 8px;
251
+ flex-shrink: 0;
252
+ }
253
+
254
+ .shutdown-btn svg {
255
+ width: 16px;
256
+ height: 16px;
257
+ flex-shrink: 0;
258
+ }
259
+
260
+ .shutdown-btn:hover {
261
+ color: #f38ba8;
262
+ background: rgba(243, 139, 168, 0.1);
263
+ }
264
+
265
+ /* ============================================================
266
+ Tab Bar
267
+ ============================================================ */
268
+
269
+ .tab-bar {
270
+ display: flex;
271
+ background: var(--bg-secondary);
272
+ border-bottom: 1px solid var(--border);
273
+ overflow-x: auto;
274
+ }
275
+
276
+ .tab-bar:empty {
277
+ display: none;
278
+ }
279
+
280
+ .tab-bar::-webkit-scrollbar { height: 4px; }
281
+ .tab-bar::-webkit-scrollbar-thumb { background: var(--scrollbar); }
282
+
283
+ .tab {
284
+ display: flex;
285
+ align-items: center;
286
+ gap: 8px;
287
+ padding: 8px 16px;
288
+ font-size: 13px;
289
+ color: var(--text-muted);
290
+ background: transparent;
291
+ border: none;
292
+ border-top: 1px solid var(--border);
293
+ border-right: 1px solid var(--border);
294
+ cursor: pointer;
295
+ white-space: nowrap;
296
+ transition: all 0.1s;
297
+ }
298
+
299
+ .tab:first-child {
300
+ border-left: 1px solid var(--border);
301
+ }
302
+
303
+ .tab:hover {
304
+ background: var(--tab-hover);
305
+ color: var(--text-secondary);
306
+ }
307
+
308
+ .tab.active {
309
+ background: var(--tab-active);
310
+ color: var(--text-primary);
311
+ border-bottom: 2px solid var(--accent);
312
+ }
313
+
314
+ .tab-close {
315
+ display: flex;
316
+ align-items: center;
317
+ justify-content: center;
318
+ width: 16px;
319
+ height: 16px;
320
+ border-radius: 3px;
321
+ opacity: 0.5;
322
+ transition: all 0.1s;
323
+ }
324
+
325
+ .tab-close:hover {
326
+ opacity: 1;
327
+ background: var(--bg-tertiary);
328
+ }
329
+
330
+ .tab-close svg { width: 12px; height: 12px; }
331
+
332
+ /* ============================================================
333
+ Content Area
334
+ ============================================================ */
335
+
336
+ .content {
337
+ flex: 1;
338
+ overflow-y: auto;
339
+ padding: 32px 48px;
340
+ }
341
+
342
+ .content::-webkit-scrollbar { width: 10px; }
343
+ .content::-webkit-scrollbar-track { background: var(--bg-primary); }
344
+ .content::-webkit-scrollbar-thumb { background: var(--scrollbar); border-radius: 5px; }
345
+ .content::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-hover); }
346
+
347
+ /* ============================================================
348
+ Markdown Body
349
+ ============================================================ */
350
+
351
+ .markdown-body {
352
+ max-width: 900px;
353
+ line-height: 1.7;
354
+ }
355
+
356
+ .markdown-body h1, .markdown-body h2, .markdown-body h3,
357
+ .markdown-body h4, .markdown-body h5, .markdown-body h6 {
358
+ margin-top: 24px;
359
+ margin-bottom: 16px;
360
+ font-weight: 600;
361
+ line-height: 1.25;
362
+ color: var(--text-primary);
363
+ }
364
+
365
+ .markdown-body h1 { font-size: 2em; padding-bottom: 0.3em; border-bottom: 1px solid var(--border); }
366
+ .markdown-body h2 { font-size: 1.5em; padding-bottom: 0.3em; border-bottom: 1px solid var(--border); }
367
+ .markdown-body h3 { font-size: 1.25em; }
368
+ .markdown-body h4 { font-size: 1em; }
369
+ .markdown-body h5 { font-size: 0.875em; }
370
+ .markdown-body h6 { font-size: 0.85em; color: var(--text-muted); }
371
+ .markdown-body p { margin-top: 0; margin-bottom: 16px; }
372
+ .markdown-body a { color: var(--accent); text-decoration: none; }
373
+ .markdown-body a:hover { text-decoration: underline; }
374
+ .markdown-body ul, .markdown-body ol { margin-top: 0; margin-bottom: 16px; padding-left: 2em; }
375
+ .markdown-body li { margin-bottom: 4px; }
376
+ .markdown-body li + li { margin-top: 4px; }
377
+ .markdown-body li > p { margin-bottom: 0; }
378
+ .markdown-body li > p:first-child { margin-top: 0; }
379
+ .markdown-body blockquote { margin: 0 0 16px; padding: 0 1em; color: var(--text-muted); border-left: 4px solid var(--border); }
380
+
381
+ .markdown-body code {
382
+ padding: 0.2em 0.4em;
383
+ margin: 0;
384
+ font-size: 85%;
385
+ background: var(--bg-tertiary);
386
+ border-radius: 4px;
387
+ font-family: 'SF Mono', 'Fira Code', 'Monaco', monospace;
388
+ }
389
+
390
+ .markdown-body pre {
391
+ margin-top: 0;
392
+ margin-bottom: 16px;
393
+ padding: 16px;
394
+ overflow: auto;
395
+ font-size: 85%;
396
+ line-height: 1.45;
397
+ background: var(--bg-secondary);
398
+ border-radius: 8px;
399
+ border: 1px solid var(--border);
400
+ }
401
+
402
+ .markdown-body pre code { padding: 0; margin: 0; font-size: 100%; background: transparent; border-radius: 0; white-space: pre; }
403
+
404
+ /* Full-page code view (non-markdown files) */
405
+ .code-view-container {
406
+ max-width: 100%;
407
+ }
408
+
409
+ .markdown-body table { margin-bottom: 16px; border-collapse: collapse; width: 100%; }
410
+ .markdown-body table th, .markdown-body table td { padding: 8px 16px; border: 1px solid var(--border); }
411
+ .markdown-body table th { background: var(--bg-secondary); font-weight: 600; }
412
+ .markdown-body table tr:nth-child(even) { background: var(--bg-secondary); }
413
+ .markdown-body hr { height: 1px; margin: 24px 0; background: var(--border); border: 0; }
414
+ .markdown-body img { max-width: 100%; border-radius: 8px; }
415
+
416
+ /* Task List (Checkbox) */
417
+ .markdown-body .task-list-item {
418
+ list-style-type: none;
419
+ margin-left: -1.5em;
420
+ }
421
+ .markdown-body .task-list-item input[type="checkbox"] {
422
+ margin-right: 0.5em;
423
+ vertical-align: middle;
424
+ width: 16px;
425
+ height: 16px;
426
+ accent-color: var(--accent);
427
+ }
428
+
429
+ /* Plain Text */
430
+ .markdown-body pre.plain-text {
431
+ white-space: pre-wrap;
432
+ word-wrap: break-word;
433
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
434
+ font-size: 14px;
435
+ line-height: 1.6;
436
+ background: var(--bg-secondary);
437
+ padding: 16px;
438
+ border-radius: 8px;
439
+ }
440
+
441
+ /* ============================================================
442
+ Image Preview
443
+ ============================================================ */
444
+
445
+ .image-preview {
446
+ display: flex;
447
+ flex-direction: column;
448
+ align-items: center;
449
+ gap: 16px;
450
+ padding: 32px;
451
+ }
452
+
453
+ .image-preview img {
454
+ max-width: 100%;
455
+ max-height: 70vh;
456
+ border-radius: 8px;
457
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
458
+ }
459
+
460
+ .image-preview .image-info {
461
+ font-size: 13px;
462
+ color: var(--text-muted);
463
+ }
464
+
465
+ /* ============================================================
466
+ PDF Viewer
467
+ ============================================================ */
468
+
469
+ .pdf-viewer {
470
+ display: flex;
471
+ flex-direction: column;
472
+ height: 100%;
473
+ width: 100%;
474
+ }
475
+
476
+ .pdf-viewer iframe {
477
+ flex: 1;
478
+ width: 100%;
479
+ height: 100%;
480
+ border: none;
481
+ border-radius: 8px;
482
+ background: var(--bg-secondary);
483
+ }
484
+
485
+ .pdf-viewer .pdf-info {
486
+ padding: 8px 16px;
487
+ font-size: 13px;
488
+ color: var(--text-muted);
489
+ text-align: center;
490
+ }
491
+
492
+ /* ============================================================
493
+ Editor Mode
494
+ ============================================================ */
495
+
496
+ .editor-container {
497
+ display: flex;
498
+ flex-direction: column;
499
+ height: 100%;
500
+ }
501
+
502
+ .editor-textarea {
503
+ flex: 1;
504
+ width: 100%;
505
+ padding: 16px;
506
+ font-family: 'SF Mono', 'Fira Code', 'Monaco', monospace;
507
+ font-size: 14px;
508
+ line-height: 1.6;
509
+ background: var(--bg-primary);
510
+ color: var(--text-primary);
511
+ border: none;
512
+ resize: none;
513
+ outline: none;
514
+ }
515
+
516
+ .editor-toolbar {
517
+ display: flex;
518
+ align-items: center;
519
+ gap: 8px;
520
+ padding: 8px 16px;
521
+ background: var(--bg-secondary);
522
+ border-top: 1px solid var(--border);
523
+ }
524
+
525
+ .editor-status {
526
+ font-size: 12px;
527
+ color: var(--text-muted);
528
+ }
529
+
530
+ .editor-status.modified {
531
+ color: #f9e2af;
532
+ }
533
+
534
+ .editor-status.saved {
535
+ color: #a6e3a1;
536
+ }
537
+
538
+ /* ============================================================
539
+ File Icons
540
+ ============================================================ */
541
+
542
+ .icon-markdown { color: #519aba; }
543
+ .icon-python { color: #3572A5; }
544
+ .icon-javascript { color: #f1e05a; }
545
+ .icon-typescript { color: #3178c6; }
546
+ .icon-json { color: #cbcb41; }
547
+ .icon-yaml { color: #cb171e; }
548
+ .icon-html { color: #e34c26; }
549
+ .icon-css { color: #563d7c; }
550
+ .icon-image { color: #a074c4; }
551
+ .icon-pdf { color: #e74c3c; }
552
+ .icon-text { color: var(--text-muted); }
553
+ .icon-config { color: #6d8086; }
554
+ .icon-shell { color: #89e051; }
555
+ .icon-database { color: #e38c00; }
556
+ .icon-react { color: #61dafb; }
557
+ .icon-vue { color: #42b883; }
558
+
559
+ /* ============================================================
560
+ Welcome Screen
561
+ ============================================================ */
562
+
563
+ .welcome {
564
+ display: flex;
565
+ flex-direction: column;
566
+ align-items: center;
567
+ justify-content: center;
568
+ height: 100%;
569
+ color: var(--text-muted);
570
+ text-align: center;
571
+ }
572
+
573
+ .welcome svg { width: 64px; height: 64px; margin-bottom: 16px; opacity: 0.5; }
574
+ .welcome h2 { font-size: 18px; margin-bottom: 8px; color: var(--text-secondary); }
575
+ .welcome p { font-size: 14px; margin-bottom: 8px; }
576
+ .welcome kbd { background: var(--bg-tertiary); padding: 2px 6px; border-radius: 4px; font-size: 12px; }
577
+
578
+ /* ============================================================
579
+ Mermaid Diagrams
580
+ ============================================================ */
581
+
582
+ .mermaid { background: var(--bg-secondary); padding: 16px; border-radius: 8px; margin-bottom: 16px; }
583
+
584
+ /* ============================================================
585
+ Context Menu
586
+ ============================================================ */
587
+
588
+ .context-menu {
589
+ position: fixed;
590
+ background: var(--bg-secondary);
591
+ border: 1px solid var(--border);
592
+ border-radius: 8px;
593
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
594
+ min-width: 160px;
595
+ z-index: 1000;
596
+ padding: 4px 0;
597
+ }
598
+ .context-menu.hidden { display: none; }
599
+ .context-menu-item {
600
+ display: flex;
601
+ align-items: center;
602
+ gap: 8px;
603
+ padding: 8px 16px;
604
+ cursor: pointer;
605
+ font-size: 13px;
606
+ color: var(--text-secondary);
607
+ }
608
+ .context-menu-item:hover {
609
+ background: var(--bg-tertiary);
610
+ color: var(--text-primary);
611
+ }
612
+ .context-menu-item.danger { color: #f38ba8; }
613
+ .context-menu-item.danger:hover { background: rgba(243, 139, 168, 0.1); }
614
+ .context-menu-separator {
615
+ height: 1px;
616
+ background: var(--border);
617
+ margin: 4px 0;
618
+ }
619
+
620
+ /* ============================================================
621
+ Dialog
622
+ ============================================================ */
623
+
624
+ .dialog-overlay {
625
+ position: fixed;
626
+ top: 0; left: 0; right: 0; bottom: 0;
627
+ background: rgba(0, 0, 0, 0.5);
628
+ display: flex;
629
+ align-items: center;
630
+ justify-content: center;
631
+ z-index: 2000;
632
+ }
633
+ .dialog-overlay.hidden { display: none; }
634
+ .dialog-content {
635
+ background: var(--bg-secondary);
636
+ padding: 24px;
637
+ border-radius: 12px;
638
+ min-width: 320px;
639
+ max-width: 90%;
640
+ }
641
+ .dialog-content h3 {
642
+ margin-bottom: 16px;
643
+ color: var(--text-primary);
644
+ font-size: 16px;
645
+ }
646
+ .dialog-content input {
647
+ width: 100%;
648
+ padding: 10px 12px;
649
+ background: var(--bg-primary);
650
+ border: 1px solid var(--border);
651
+ border-radius: 6px;
652
+ color: var(--text-primary);
653
+ font-size: 14px;
654
+ outline: none;
655
+ }
656
+ .dialog-content input:focus { border-color: var(--accent); }
657
+ .dialog-actions {
658
+ display: flex;
659
+ justify-content: flex-end;
660
+ gap: 8px;
661
+ margin-top: 20px;
662
+ }
663
+ .dialog-actions button {
664
+ padding: 8px 16px;
665
+ border-radius: 6px;
666
+ border: none;
667
+ cursor: pointer;
668
+ font-size: 13px;
669
+ }
670
+ .btn-cancel { background: var(--bg-tertiary); color: var(--text-secondary); }
671
+ .btn-cancel:hover { background: var(--border); }
672
+ .btn-confirm { background: var(--accent); color: white; }
673
+ .btn-confirm:hover { opacity: 0.9; }
674
+ .btn-danger { background: #f38ba8; color: white; }
675
+ .btn-danger:hover { opacity: 0.9; }
676
+
677
+ /* ============================================================
678
+ Drag & Drop
679
+ ============================================================ */
680
+
681
+ .tree-item-content.drag-over {
682
+ background: var(--accent) !important;
683
+ color: white !important;
684
+ }
685
+ .file-tree.drag-over {
686
+ background: rgba(137, 180, 250, 0.1);
687
+ border: 2px dashed var(--accent);
688
+ border-radius: 8px;
689
+ }
690
+
691
+ /* ============================================================
692
+ Video/Audio Preview
693
+ ============================================================ */
694
+
695
+ .video-preview, .audio-preview {
696
+ display: flex;
697
+ flex-direction: column;
698
+ align-items: center;
699
+ gap: 16px;
700
+ padding: 32px;
701
+ }
702
+ .video-preview video {
703
+ max-width: 100%;
704
+ max-height: 70vh;
705
+ border-radius: 8px;
706
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
707
+ }
708
+ .audio-preview audio { width: 100%; max-width: 500px; }
709
+ .media-info { font-size: 13px; color: var(--text-muted); }
710
+
711
+ .binary-preview {
712
+ display: flex;
713
+ flex-direction: column;
714
+ align-items: center;
715
+ justify-content: center;
716
+ gap: 16px;
717
+ padding: 48px;
718
+ height: 100%;
719
+ color: var(--text-muted);
720
+ }
721
+ .binary-icon svg {
722
+ width: 64px;
723
+ height: 64px;
724
+ }
725
+ .binary-info { font-size: 16px; }
726
+
727
+ /* ============================================================
728
+ Upload Progress
729
+ ============================================================ */
730
+
731
+ .upload-progress-overlay {
732
+ position: fixed;
733
+ top: 0; left: 0; right: 0; bottom: 0;
734
+ background: rgba(0, 0, 0, 0.5);
735
+ display: flex;
736
+ align-items: center;
737
+ justify-content: center;
738
+ z-index: 2000;
739
+ }
740
+ .upload-progress-overlay.hidden { display: none; }
741
+ .upload-progress-box {
742
+ background: var(--bg-secondary);
743
+ padding: 24px 32px;
744
+ border-radius: 12px;
745
+ min-width: 300px;
746
+ text-align: center;
747
+ }
748
+ .upload-progress-bar {
749
+ height: 8px;
750
+ background: var(--bg-tertiary);
751
+ border-radius: 4px;
752
+ margin: 12px 0;
753
+ overflow: hidden;
754
+ }
755
+ .upload-progress-fill {
756
+ height: 100%;
757
+ background: var(--accent);
758
+ width: 0%;
759
+ transition: width 0.2s;
760
+ }
761
+
762
+ /* ============================================================
763
+ Print Styles
764
+ ============================================================ */
765
+
766
+ @media print {
767
+ @page {
768
+ margin: 15mm;
769
+ }
770
+
771
+ * {
772
+ box-sizing: border-box !important;
773
+ }
774
+
775
+ html, body {
776
+ width: 100% !important;
777
+ margin: 0 !important;
778
+ padding: 0 !important;
779
+ }
780
+
781
+ .sidebar, .resize-handle, .toolbar, .tab-bar { display: none !important; }
782
+
783
+ body {
784
+ height: auto !important;
785
+ overflow: visible !important;
786
+ background: white !important;
787
+ color: black !important;
788
+ }
789
+
790
+ .container {
791
+ height: auto !important;
792
+ overflow: visible !important;
793
+ display: block !important;
794
+ margin: 0 !important;
795
+ padding: 0 !important;
796
+ }
797
+
798
+ .main {
799
+ width: 100% !important;
800
+ height: auto !important;
801
+ overflow: visible !important;
802
+ display: block !important;
803
+ padding: 0 !important;
804
+ margin: 0 !important;
805
+ }
806
+
807
+ .content {
808
+ height: auto !important;
809
+ overflow: visible !important;
810
+ flex: none !important;
811
+ padding: 0 !important;
812
+ margin: 0 !important;
813
+ }
814
+
815
+ .markdown-body {
816
+ max-width: 100% !important;
817
+ padding: 0 !important;
818
+ margin: 0 !important;
819
+ }
820
+
821
+ .markdown-body img {
822
+ max-width: 100% !important;
823
+ }
824
+
825
+ .markdown-body code { background: #f0f0f0 !important; }
826
+ .markdown-body pre { background: #f8f8f8 !important; border: 1px solid #ddd !important; }
827
+
828
+ /* Page Break Control */
829
+ .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4 {
830
+ page-break-after: avoid;
831
+ }
832
+ .markdown-body pre, .markdown-body table, .markdown-body img,
833
+ .markdown-body ul, .markdown-body ol, .markdown-body li, .markdown-body p {
834
+ page-break-inside: avoid;
835
+ }
836
+ }
837
+
838
+ /* ============================================================
839
+ Marp Presentation Viewer
840
+ ============================================================ */
841
+
842
+ .marp-viewer {
843
+ padding: 0 !important;
844
+ height: 100%;
845
+ overflow: hidden;
846
+ }
847
+
848
+ .marp-presentation {
849
+ height: 100%;
850
+ position: relative;
851
+ }
852
+
853
+ .marp-slide {
854
+ display: none;
855
+ width: 100%;
856
+ height: 100%;
857
+ padding: 48px 64px;
858
+ box-sizing: border-box;
859
+ overflow-y: auto;
860
+ }
861
+
862
+ .marp-slide.active {
863
+ display: flex;
864
+ flex-direction: column;
865
+ justify-content: center;
866
+ }
867
+
868
+ /* Slide Typography */
869
+ .marp-slide h1 {
870
+ font-size: 2.5em;
871
+ margin-bottom: 24px;
872
+ color: var(--text-primary);
873
+ border-bottom: none;
874
+ padding-bottom: 0;
875
+ }
876
+
877
+ .marp-slide h2 {
878
+ font-size: 2em;
879
+ margin-top: 16px;
880
+ margin-bottom: 16px;
881
+ color: var(--text-primary);
882
+ border-bottom: none;
883
+ padding-bottom: 0;
884
+ }
885
+
886
+ .marp-slide h3 {
887
+ font-size: 1.5em;
888
+ margin-top: 12px;
889
+ margin-bottom: 12px;
890
+ }
891
+
892
+ .marp-slide p {
893
+ font-size: 1.25em;
894
+ line-height: 1.6;
895
+ margin-bottom: 16px;
896
+ }
897
+
898
+ .marp-slide ul, .marp-slide ol {
899
+ font-size: 1.25em;
900
+ line-height: 1.6;
901
+ margin-bottom: 16px;
902
+ }
903
+
904
+ .marp-slide li {
905
+ margin-bottom: 8px;
906
+ }
907
+
908
+ .marp-slide pre {
909
+ font-size: 0.9em;
910
+ max-width: 100%;
911
+ }
912
+
913
+ .marp-slide code {
914
+ font-size: 0.95em;
915
+ }
916
+
917
+ .marp-slide img {
918
+ max-width: 100%;
919
+ max-height: 60vh;
920
+ }
921
+
922
+ /* Mermaid in slides */
923
+ .marp-slide .mermaid {
924
+ margin: 16px 0;
925
+ }
926
+
927
+ /* Navigation Controls */
928
+ .marp-nav {
929
+ position: absolute;
930
+ bottom: 24px;
931
+ right: 24px;
932
+ display: flex;
933
+ align-items: center;
934
+ gap: 12px;
935
+ z-index: 100;
936
+ background: var(--bg-secondary);
937
+ padding: 8px 16px;
938
+ border-radius: 8px;
939
+ border: 1px solid var(--border);
940
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
941
+ }
942
+
943
+ .marp-nav button {
944
+ width: 32px;
945
+ height: 32px;
946
+ display: flex;
947
+ align-items: center;
948
+ justify-content: center;
949
+ background: var(--bg-tertiary);
950
+ border: 1px solid var(--border);
951
+ border-radius: 6px;
952
+ color: var(--text-secondary);
953
+ cursor: pointer;
954
+ transition: all 0.15s;
955
+ }
956
+
957
+ .marp-nav button:hover:not(:disabled) {
958
+ background: var(--accent);
959
+ color: white;
960
+ border-color: var(--accent);
961
+ }
962
+
963
+ .marp-nav button:disabled {
964
+ opacity: 0.3;
965
+ cursor: not-allowed;
966
+ }
967
+
968
+ .marp-nav button svg {
969
+ width: 16px;
970
+ height: 16px;
971
+ }
972
+
973
+ .marp-nav .slide-counter {
974
+ font-size: 13px;
975
+ color: var(--text-secondary);
976
+ min-width: 60px;
977
+ text-align: center;
978
+ }
979
+
980
+ /* Keyboard hint */
981
+ .marp-nav .keyboard-hint {
982
+ font-size: 11px;
983
+ color: var(--text-muted);
984
+ margin-left: 8px;
985
+ }
986
+
987
+ /* Print styles for Marp */
988
+ @media print {
989
+ .marp-nav { display: none !important; }
990
+
991
+ .marpit {
992
+ padding: 0 !important;
993
+ background: transparent !important;
994
+ }
995
+
996
+ .marpit > svg[data-marpit-svg] {
997
+ display: block !important;
998
+ width: 100% !important;
999
+ height: auto !important;
1000
+ max-width: none !important;
1001
+ box-shadow: none !important;
1002
+ border-radius: 0 !important;
1003
+ page-break-after: always;
1004
+ page-break-inside: avoid;
1005
+ }
1006
+
1007
+ .marpit > svg[data-marpit-svg]:last-child {
1008
+ page-break-after: avoid;
1009
+ }
1010
+
1011
+ /* Legacy class support */
1012
+ .marp-presentation {
1013
+ height: auto !important;
1014
+ }
1015
+
1016
+ .marp-slide {
1017
+ display: block !important;
1018
+ page-break-after: always;
1019
+ height: auto !important;
1020
+ min-height: 100vh;
1021
+ }
1022
+
1023
+ .marp-slide:last-child {
1024
+ page-break-after: avoid;
1025
+ }
1026
+ }