@henryavila/mdprobe 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,1243 @@
1
+ /* ==========================================================================
2
+ mdprobe — Catppuccin Theme System & Layout
3
+ ========================================================================== */
4
+
5
+ /* --------------------------------------------------------------------------
6
+ Theme: Mocha (default dark)
7
+ -------------------------------------------------------------------------- */
8
+ [data-theme="mocha"] {
9
+ --bg-primary: #1e1e2e;
10
+ --bg-secondary: #181825;
11
+ --bg-tertiary: #313244;
12
+ --text-primary: #cdd6f4;
13
+ --text-secondary: #a6adc8;
14
+ --text-muted: #6c7086;
15
+ --border: #45475a;
16
+ --border-subtle: #313244;
17
+ --accent: #89b4fa;
18
+ --accent-hover: #74c7ec;
19
+ --tag-bug: #f38ba8;
20
+ --tag-question: #89b4fa;
21
+ --tag-suggestion: #a6e3a1;
22
+ --tag-nitpick: #f9e2af;
23
+ --highlight-open: rgba(137, 180, 250, 0.2);
24
+ --highlight-resolved: rgba(166, 227, 161, 0.15);
25
+ --status-approved: #a6e3a1;
26
+ --status-rejected: #f38ba8;
27
+ --status-pending: #45475a;
28
+ --scrollbar-thumb: #45475a;
29
+ --scrollbar-track: #1e1e2e;
30
+ }
31
+
32
+ /* --------------------------------------------------------------------------
33
+ Theme: Macchiato
34
+ -------------------------------------------------------------------------- */
35
+ [data-theme="macchiato"] {
36
+ --bg-primary: #24273a;
37
+ --bg-secondary: #1e2030;
38
+ --bg-tertiary: #363a4f;
39
+ --text-primary: #cad3f5;
40
+ --text-secondary: #a5adcb;
41
+ --text-muted: #6e738d;
42
+ --border: #494d64;
43
+ --border-subtle: #363a4f;
44
+ --accent: #8aadf4;
45
+ --accent-hover: #7dc4e4;
46
+ --tag-bug: #ed8796;
47
+ --tag-question: #8aadf4;
48
+ --tag-suggestion: #a6da95;
49
+ --tag-nitpick: #eed49f;
50
+ --highlight-open: rgba(138, 173, 244, 0.2);
51
+ --highlight-resolved: rgba(166, 218, 149, 0.15);
52
+ --status-approved: #a6da95;
53
+ --status-rejected: #ed8796;
54
+ --status-pending: #494d64;
55
+ --scrollbar-thumb: #494d64;
56
+ --scrollbar-track: #24273a;
57
+ }
58
+
59
+ /* --------------------------------------------------------------------------
60
+ Theme: Frappe
61
+ -------------------------------------------------------------------------- */
62
+ [data-theme="frappe"] {
63
+ --bg-primary: #303446;
64
+ --bg-secondary: #292c3c;
65
+ --bg-tertiary: #414559;
66
+ --text-primary: #c6d0f5;
67
+ --text-secondary: #a5adce;
68
+ --text-muted: #737994;
69
+ --border: #51576d;
70
+ --border-subtle: #414559;
71
+ --accent: #8caaee;
72
+ --accent-hover: #85c1dc;
73
+ --tag-bug: #e78284;
74
+ --tag-question: #8caaee;
75
+ --tag-suggestion: #a6d189;
76
+ --tag-nitpick: #e5c890;
77
+ --highlight-open: rgba(140, 170, 238, 0.2);
78
+ --highlight-resolved: rgba(166, 209, 137, 0.15);
79
+ --status-approved: #a6d189;
80
+ --status-rejected: #e78284;
81
+ --status-pending: #51576d;
82
+ --scrollbar-thumb: #51576d;
83
+ --scrollbar-track: #303446;
84
+ }
85
+
86
+ /* --------------------------------------------------------------------------
87
+ Theme: Latte (light)
88
+ -------------------------------------------------------------------------- */
89
+ [data-theme="latte"] {
90
+ --bg-primary: #eff1f5;
91
+ --bg-secondary: #e6e9ef;
92
+ --bg-tertiary: #ccd0da;
93
+ --text-primary: #4c4f69;
94
+ --text-secondary: #5c5f77;
95
+ --text-muted: #9ca0b0;
96
+ --border: #bcc0cc;
97
+ --border-subtle: #ccd0da;
98
+ --accent: #1e66f5;
99
+ --accent-hover: #209fb5;
100
+ --tag-bug: #d20f39;
101
+ --tag-question: #1e66f5;
102
+ --tag-suggestion: #40a02b;
103
+ --tag-nitpick: #df8e1d;
104
+ --highlight-open: rgba(30, 102, 245, 0.15);
105
+ --highlight-resolved: rgba(64, 160, 43, 0.1);
106
+ --status-approved: #40a02b;
107
+ --status-rejected: #d20f39;
108
+ --status-pending: #ccd0da;
109
+ --scrollbar-thumb: #bcc0cc;
110
+ --scrollbar-track: #eff1f5;
111
+ }
112
+
113
+ /* --------------------------------------------------------------------------
114
+ Theme: Light (clean)
115
+ -------------------------------------------------------------------------- */
116
+ [data-theme="light"] {
117
+ --bg-primary: #ffffff;
118
+ --bg-secondary: #f8f9fa;
119
+ --bg-tertiary: #e9ecef;
120
+ --text-primary: #212529;
121
+ --text-secondary: #495057;
122
+ --text-muted: #adb5bd;
123
+ --border: #dee2e6;
124
+ --border-subtle: #e9ecef;
125
+ --accent: #0d6efd;
126
+ --accent-hover: #0b5ed7;
127
+ --tag-bug: #dc3545;
128
+ --tag-question: #0d6efd;
129
+ --tag-suggestion: #198754;
130
+ --tag-nitpick: #fd7e14;
131
+ --highlight-open: rgba(13, 110, 253, 0.12);
132
+ --highlight-resolved: rgba(25, 135, 84, 0.08);
133
+ --status-approved: #198754;
134
+ --status-rejected: #dc3545;
135
+ --status-pending: #e9ecef;
136
+ --scrollbar-thumb: #dee2e6;
137
+ --scrollbar-track: #ffffff;
138
+ }
139
+
140
+ /* --------------------------------------------------------------------------
141
+ Shared layout tokens
142
+ -------------------------------------------------------------------------- */
143
+ :root {
144
+ --panel-collapsed-width: 48px;
145
+ --panel-width: clamp(240px, 18vw, 380px);
146
+ }
147
+
148
+ /* --------------------------------------------------------------------------
149
+ Reset & base
150
+ -------------------------------------------------------------------------- */
151
+ *,
152
+ *::before,
153
+ *::after {
154
+ box-sizing: border-box;
155
+ margin: 0;
156
+ padding: 0;
157
+ }
158
+
159
+ html, body {
160
+ height: 100%;
161
+ }
162
+
163
+ body {
164
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
165
+ Oxygen, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;
166
+ -webkit-font-smoothing: antialiased;
167
+ -moz-osx-font-smoothing: grayscale;
168
+ }
169
+
170
+ /* --------------------------------------------------------------------------
171
+ App grid
172
+ -------------------------------------------------------------------------- */
173
+ #app {
174
+ display: grid;
175
+ grid-template-columns: auto 1fr auto;
176
+ grid-template-rows: 48px 1fr 32px;
177
+ height: 100vh;
178
+ background: var(--bg-primary);
179
+ color: var(--text-primary);
180
+ }
181
+
182
+ /* --------------------------------------------------------------------------
183
+ Header bar (row 1, spans all columns)
184
+ -------------------------------------------------------------------------- */
185
+ .header {
186
+ grid-column: 1 / -1;
187
+ display: flex;
188
+ align-items: center;
189
+ padding: 0 16px;
190
+ background: var(--bg-secondary);
191
+ border-bottom: 1px solid var(--border);
192
+ gap: 12px;
193
+ z-index: 10;
194
+ }
195
+
196
+ .header h1 {
197
+ font-size: 14px;
198
+ font-weight: 600;
199
+ white-space: nowrap;
200
+ }
201
+
202
+ /* --------------------------------------------------------------------------
203
+ Left panel
204
+ -------------------------------------------------------------------------- */
205
+ .left-panel {
206
+ width: var(--panel-width);
207
+ transition: width 0.2s ease;
208
+ overflow: hidden;
209
+ background: var(--bg-secondary);
210
+ border-right: 1px solid var(--border);
211
+ display: flex;
212
+ flex-direction: column;
213
+ }
214
+
215
+ .left-panel.collapsed {
216
+ width: var(--panel-collapsed-width);
217
+ }
218
+
219
+ .left-panel .panel-collapsed-indicator {
220
+ display: none;
221
+ width: var(--panel-collapsed-width);
222
+ align-items: center;
223
+ justify-content: center;
224
+ height: 100%;
225
+ cursor: pointer;
226
+ }
227
+
228
+ .left-panel.collapsed .panel-collapsed-indicator {
229
+ display: flex;
230
+ flex-direction: column;
231
+ gap: 8px;
232
+ font-size: 12px;
233
+ color: var(--text-muted);
234
+ }
235
+
236
+ .left-panel.collapsed .panel-content {
237
+ display: none;
238
+ }
239
+
240
+ /* --------------------------------------------------------------------------
241
+ Right panel
242
+ -------------------------------------------------------------------------- */
243
+ .right-panel {
244
+ width: var(--panel-width);
245
+ transition: width 0.2s ease;
246
+ overflow: hidden;
247
+ background: var(--bg-secondary);
248
+ border-left: 1px solid var(--border);
249
+ display: flex;
250
+ flex-direction: column;
251
+ }
252
+
253
+ .right-panel.collapsed {
254
+ width: var(--panel-collapsed-width);
255
+ }
256
+
257
+ .right-panel .panel-collapsed-indicator {
258
+ display: none;
259
+ width: var(--panel-collapsed-width);
260
+ align-items: center;
261
+ justify-content: center;
262
+ height: 100%;
263
+ cursor: pointer;
264
+ }
265
+
266
+ .right-panel.collapsed .panel-collapsed-indicator {
267
+ display: flex;
268
+ flex-direction: column;
269
+ gap: 8px;
270
+ font-size: 12px;
271
+ color: var(--text-muted);
272
+ }
273
+
274
+ .right-panel.collapsed .panel-content {
275
+ display: none;
276
+ }
277
+
278
+ /* --------------------------------------------------------------------------
279
+ Panel shared styles
280
+ -------------------------------------------------------------------------- */
281
+ .panel-header {
282
+ display: flex;
283
+ align-items: center;
284
+ justify-content: space-between;
285
+ padding: 12px 12px 8px;
286
+ font-size: 11px;
287
+ font-weight: 600;
288
+ text-transform: uppercase;
289
+ letter-spacing: 0.5px;
290
+ color: var(--text-muted);
291
+ }
292
+
293
+ .panel-content {
294
+ flex: 1;
295
+ overflow-y: auto;
296
+ padding: 4px 8px;
297
+ }
298
+
299
+ /* --------------------------------------------------------------------------
300
+ Content area
301
+ -------------------------------------------------------------------------- */
302
+ .content-area-wrapper {
303
+ overflow-y: auto;
304
+ min-width: 0;
305
+ }
306
+
307
+ .content-area {
308
+ padding: 32px clamp(24px, 3vw, 56px);
309
+ width: 100%;
310
+ line-height: 1.7;
311
+ }
312
+
313
+ /* --------------------------------------------------------------------------
314
+ Annotation highlights (inline in rendered markdown)
315
+ -------------------------------------------------------------------------- */
316
+ .annotation-highlight {
317
+ background: var(--highlight-open);
318
+ cursor: pointer;
319
+ border-radius: 2px;
320
+ padding: 0 2px;
321
+ transition: outline-color 0.15s;
322
+ }
323
+
324
+ .annotation-highlight.resolved {
325
+ background: var(--highlight-resolved);
326
+ opacity: 0.3;
327
+ }
328
+
329
+ .annotation-highlight.selected {
330
+ outline: 2px solid var(--accent);
331
+ outline-offset: 1px;
332
+ }
333
+
334
+ /* --------------------------------------------------------------------------
335
+ Tag badges
336
+ -------------------------------------------------------------------------- */
337
+ .tag {
338
+ display: inline-block;
339
+ padding: 2px 8px;
340
+ border-radius: 10px;
341
+ font-size: 11px;
342
+ font-weight: 600;
343
+ text-transform: uppercase;
344
+ letter-spacing: 0.5px;
345
+ line-height: 1.4;
346
+ }
347
+
348
+ .tag-bug { background: var(--tag-bug); color: white; }
349
+ .tag-question { background: var(--tag-question); color: white; }
350
+ .tag-suggestion { background: var(--tag-suggestion); color: white; }
351
+ .tag-nitpick { background: var(--tag-nitpick); color: white; }
352
+
353
+ /* --------------------------------------------------------------------------
354
+ Annotation cards
355
+ -------------------------------------------------------------------------- */
356
+ .annotation-card {
357
+ padding: 12px;
358
+ border-radius: 8px;
359
+ background: var(--bg-tertiary);
360
+ border: 1px solid var(--border-subtle);
361
+ margin-bottom: 8px;
362
+ cursor: pointer;
363
+ transition: border-color 0.15s, box-shadow 0.15s;
364
+ }
365
+
366
+ .annotation-card:hover {
367
+ border-color: var(--accent);
368
+ }
369
+
370
+ .annotation-card.selected {
371
+ border-color: var(--accent);
372
+ box-shadow: 0 0 0 1px var(--accent);
373
+ }
374
+
375
+ .annotation-card .meta {
376
+ display: flex;
377
+ align-items: center;
378
+ gap: 8px;
379
+ margin-bottom: 6px;
380
+ font-size: 12px;
381
+ color: var(--text-muted);
382
+ }
383
+
384
+ .annotation-card .quote {
385
+ font-style: italic;
386
+ color: var(--text-secondary);
387
+ border-left: 3px solid var(--accent);
388
+ padding-left: 8px;
389
+ margin: 8px 0;
390
+ font-size: 13px;
391
+ }
392
+
393
+ .annotation-card .body {
394
+ font-size: 13px;
395
+ color: var(--text-primary);
396
+ line-height: 1.5;
397
+ }
398
+
399
+ /* --------------------------------------------------------------------------
400
+ Section approval badges
401
+ -------------------------------------------------------------------------- */
402
+ .section-status {
403
+ display: inline-flex;
404
+ align-items: center;
405
+ gap: 4px;
406
+ padding: 2px 8px;
407
+ border-radius: 4px;
408
+ font-size: 11px;
409
+ font-weight: 500;
410
+ }
411
+
412
+ .section-status.approved { background: var(--status-approved); color: white; }
413
+ .section-status.rejected { background: var(--status-rejected); color: white; }
414
+ .section-status.pending { background: var(--status-pending); color: var(--text-secondary); }
415
+ .section-status.indeterminate {
416
+ background: var(--tag-nitpick);
417
+ color: var(--bg-primary);
418
+ opacity: 0.85;
419
+ }
420
+
421
+ /* --------------------------------------------------------------------------
422
+ Popover (draggable, no backdrop)
423
+ -------------------------------------------------------------------------- */
424
+ .popover {
425
+ position: fixed;
426
+ z-index: 101;
427
+ background: var(--bg-secondary);
428
+ border: 1px solid var(--border);
429
+ border-radius: 10px;
430
+ box-shadow:
431
+ 0 8px 32px rgba(0, 0, 0, 0.35),
432
+ 0 2px 8px rgba(0, 0, 0, 0.2);
433
+ min-width: 320px;
434
+ display: flex;
435
+ flex-direction: column;
436
+ }
437
+
438
+ .popover--enter {
439
+ animation: popover-in 150ms ease-out;
440
+ }
441
+
442
+ @keyframes popover-in {
443
+ from { opacity: 0; transform: translateY(4px) scale(0.97); }
444
+ to { opacity: 1; transform: translateY(0) scale(1); }
445
+ }
446
+
447
+ .popover__header {
448
+ display: flex;
449
+ align-items: center;
450
+ justify-content: space-between;
451
+ padding: 10px 14px;
452
+ border-bottom: 1px solid var(--border);
453
+ cursor: grab;
454
+ user-select: none;
455
+ border-radius: 10px 10px 0 0;
456
+ }
457
+
458
+ .popover__header:active {
459
+ cursor: grabbing;
460
+ }
461
+
462
+ .popover__title {
463
+ font-size: 13px;
464
+ font-weight: 600;
465
+ color: var(--text-primary);
466
+ letter-spacing: 0.01em;
467
+ }
468
+
469
+ .popover__close {
470
+ background: none;
471
+ border: none;
472
+ color: var(--text-muted);
473
+ font-size: 18px;
474
+ line-height: 1;
475
+ cursor: pointer;
476
+ padding: 2px 6px;
477
+ border-radius: 4px;
478
+ transition: all 0.15s;
479
+ }
480
+
481
+ .popover__close:hover {
482
+ background: var(--bg-tertiary);
483
+ color: var(--text-primary);
484
+ }
485
+
486
+ /* --------------------------------------------------------------------------
487
+ Annotation form
488
+ -------------------------------------------------------------------------- */
489
+ .annotation-form {
490
+ padding: 14px;
491
+ }
492
+
493
+ .annotation-form__quote {
494
+ font-style: italic;
495
+ color: var(--text-secondary);
496
+ border-left: 3px solid var(--accent);
497
+ padding: 6px 10px;
498
+ margin-bottom: 12px;
499
+ font-size: 13px;
500
+ line-height: 1.5;
501
+ max-height: 80px;
502
+ overflow-y: auto;
503
+ background: rgba(137, 180, 250, 0.05);
504
+ border-radius: 0 4px 4px 0;
505
+ }
506
+
507
+ .annotation-form__tags {
508
+ display: flex;
509
+ gap: 6px;
510
+ margin-bottom: 12px;
511
+ flex-wrap: wrap;
512
+ }
513
+
514
+ .tag-pill {
515
+ padding: 4px 12px;
516
+ border-radius: 20px;
517
+ border: 1px solid transparent;
518
+ font-size: 12px;
519
+ font-weight: 500;
520
+ cursor: pointer;
521
+ transition: all 0.15s;
522
+ background: var(--bg-tertiary);
523
+ color: var(--text-secondary);
524
+ line-height: 1.4;
525
+ }
526
+
527
+ .tag-pill:hover {
528
+ border-color: var(--border);
529
+ }
530
+
531
+ .tag-pill--active {
532
+ border-color: currentColor;
533
+ }
534
+
535
+ .tag-pill--question { color: var(--tag-question); }
536
+ .tag-pill--question.tag-pill--active { background: rgba(137, 180, 250, 0.15); }
537
+
538
+ .tag-pill--bug { color: var(--tag-bug); }
539
+ .tag-pill--bug.tag-pill--active { background: rgba(243, 139, 168, 0.15); }
540
+
541
+ .tag-pill--suggestion { color: var(--tag-suggestion); }
542
+ .tag-pill--suggestion.tag-pill--active { background: rgba(166, 227, 161, 0.15); }
543
+
544
+ .tag-pill--nitpick { color: var(--tag-nitpick); }
545
+ .tag-pill--nitpick.tag-pill--active { background: rgba(249, 226, 175, 0.15); }
546
+
547
+ .annotation-form textarea {
548
+ width: 100%;
549
+ min-height: 180px;
550
+ padding: 10px;
551
+ border: 1px solid var(--border);
552
+ border-radius: 6px;
553
+ background: var(--bg-primary);
554
+ color: var(--text-primary);
555
+ font-family: inherit;
556
+ font-size: 13px;
557
+ resize: vertical;
558
+ line-height: 1.5;
559
+ }
560
+
561
+ .annotation-form textarea:focus {
562
+ outline: none;
563
+ border-color: var(--accent);
564
+ box-shadow: 0 0 0 2px rgba(137, 180, 250, 0.25);
565
+ }
566
+
567
+ .annotation-form__actions {
568
+ display: flex;
569
+ align-items: center;
570
+ gap: 8px;
571
+ margin-top: 10px;
572
+ justify-content: flex-end;
573
+ }
574
+
575
+ .annotation-form__hint {
576
+ font-size: 11px;
577
+ color: var(--text-muted);
578
+ margin-right: auto;
579
+ }
580
+
581
+ /* --------------------------------------------------------------------------
582
+ Buttons
583
+ -------------------------------------------------------------------------- */
584
+ .btn {
585
+ padding: 6px 14px;
586
+ border-radius: 6px;
587
+ border: 1px solid var(--border);
588
+ background: var(--bg-tertiary);
589
+ color: var(--text-primary);
590
+ cursor: pointer;
591
+ font-family: inherit;
592
+ font-size: 13px;
593
+ font-weight: 500;
594
+ transition: all 0.15s;
595
+ line-height: 1.4;
596
+ white-space: nowrap;
597
+ }
598
+
599
+ .btn:hover {
600
+ background: var(--accent);
601
+ color: white;
602
+ border-color: var(--accent);
603
+ }
604
+
605
+ .btn:active {
606
+ transform: scale(0.97);
607
+ }
608
+
609
+ .btn:focus-visible {
610
+ outline: 2px solid var(--accent);
611
+ outline-offset: 2px;
612
+ }
613
+
614
+ .btn-primary,
615
+ .btn--primary {
616
+ background: var(--accent);
617
+ color: white;
618
+ border-color: var(--accent);
619
+ }
620
+
621
+ .btn-primary:hover,
622
+ .btn--primary:hover {
623
+ background: var(--accent-hover);
624
+ border-color: var(--accent-hover);
625
+ }
626
+
627
+ .btn-danger {
628
+ background: var(--tag-bug);
629
+ color: white;
630
+ border-color: var(--tag-bug);
631
+ }
632
+
633
+ .btn-danger:hover {
634
+ opacity: 0.9;
635
+ }
636
+
637
+ .btn-sm {
638
+ padding: 3px 8px;
639
+ font-size: 11px;
640
+ }
641
+
642
+ .btn-ghost,
643
+ .btn--ghost {
644
+ background: transparent;
645
+ border-color: transparent;
646
+ color: var(--text-secondary);
647
+ }
648
+
649
+ .btn-ghost:hover,
650
+ .btn--ghost:hover {
651
+ background: var(--bg-tertiary);
652
+ color: var(--text-primary);
653
+ border-color: transparent;
654
+ }
655
+
656
+ /* --------------------------------------------------------------------------
657
+ Status bar (row 3, spans all columns)
658
+ -------------------------------------------------------------------------- */
659
+ .status-bar {
660
+ grid-column: 1 / -1;
661
+ display: flex;
662
+ align-items: center;
663
+ padding: 0 16px;
664
+ gap: 16px;
665
+ font-size: 11px;
666
+ color: var(--text-muted);
667
+ background: var(--bg-secondary);
668
+ border-top: 1px solid var(--border);
669
+ z-index: 10;
670
+ }
671
+
672
+ .status-bar .separator {
673
+ width: 1px;
674
+ height: 14px;
675
+ background: var(--border);
676
+ }
677
+
678
+ /* --------------------------------------------------------------------------
679
+ Progress bar
680
+ -------------------------------------------------------------------------- */
681
+ .progress-bar {
682
+ height: 4px;
683
+ background: var(--bg-tertiary);
684
+ border-radius: 2px;
685
+ overflow: hidden;
686
+ }
687
+
688
+ .progress-bar .fill {
689
+ height: 100%;
690
+ background: var(--accent);
691
+ transition: width 0.3s ease;
692
+ border-radius: 2px;
693
+ }
694
+
695
+ /* --------------------------------------------------------------------------
696
+ TOC items
697
+ -------------------------------------------------------------------------- */
698
+ .toc-item {
699
+ padding: 4px 12px;
700
+ cursor: pointer;
701
+ font-size: 13px;
702
+ color: var(--text-secondary);
703
+ border-radius: 4px;
704
+ transition: background 0.1s, color 0.1s;
705
+ display: flex;
706
+ align-items: center;
707
+ gap: 4px;
708
+ line-height: 1.4;
709
+ }
710
+
711
+ .toc-item:hover {
712
+ background: var(--bg-tertiary);
713
+ color: var(--text-primary);
714
+ }
715
+
716
+ .toc-item.active {
717
+ color: var(--accent);
718
+ background: var(--bg-tertiary);
719
+ }
720
+
721
+ .toc-item .badge {
722
+ font-size: 10px;
723
+ background: var(--tag-question);
724
+ color: white;
725
+ border-radius: 8px;
726
+ padding: 1px 5px;
727
+ margin-left: 4px;
728
+ line-height: 1.4;
729
+ }
730
+
731
+ .toc-item.level-2 { padding-left: 24px; }
732
+ .toc-item.level-3 { padding-left: 36px; }
733
+ .toc-item.level-4 { padding-left: 48px; }
734
+ .toc-item.level-5 { padding-left: 60px; }
735
+ .toc-item.level-6 { padding-left: 72px; }
736
+
737
+ .toc-dot {
738
+ width: 6px;
739
+ height: 6px;
740
+ border-radius: 50%;
741
+ flex-shrink: 0;
742
+ }
743
+ .toc-dot.dot-approved { background: var(--status-approved); }
744
+ .toc-dot.dot-rejected { background: var(--status-rejected); }
745
+
746
+ .section-status-label.approved { color: var(--status-approved); }
747
+ .section-status-label.rejected { color: var(--status-rejected); }
748
+
749
+ /* --------------------------------------------------------------------------
750
+ File list items
751
+ -------------------------------------------------------------------------- */
752
+ .file-item {
753
+ padding: 6px 12px;
754
+ cursor: pointer;
755
+ font-size: 13px;
756
+ color: var(--text-secondary);
757
+ border-radius: 4px;
758
+ display: flex;
759
+ align-items: center;
760
+ gap: 8px;
761
+ transition: background 0.1s, color 0.1s;
762
+ }
763
+
764
+ .file-item:hover {
765
+ background: var(--bg-tertiary);
766
+ color: var(--text-primary);
767
+ }
768
+
769
+ .file-item.active {
770
+ background: var(--bg-tertiary);
771
+ color: var(--accent);
772
+ font-weight: 500;
773
+ }
774
+
775
+ .file-item .icon {
776
+ font-size: 14px;
777
+ flex-shrink: 0;
778
+ }
779
+
780
+ .file-item .name {
781
+ overflow: hidden;
782
+ text-overflow: ellipsis;
783
+ white-space: nowrap;
784
+ }
785
+
786
+ /* --------------------------------------------------------------------------
787
+ Reply thread
788
+ -------------------------------------------------------------------------- */
789
+ .reply {
790
+ padding: 8px 12px;
791
+ border-left: 2px solid var(--border);
792
+ margin-left: 12px;
793
+ margin-top: 8px;
794
+ }
795
+
796
+ .reply .author {
797
+ font-weight: 600;
798
+ font-size: 12px;
799
+ color: var(--text-secondary);
800
+ }
801
+
802
+ .reply .text {
803
+ font-size: 13px;
804
+ margin-top: 2px;
805
+ color: var(--text-primary);
806
+ line-height: 1.5;
807
+ }
808
+
809
+ .reply .timestamp {
810
+ font-size: 11px;
811
+ color: var(--text-muted);
812
+ margin-left: 8px;
813
+ font-weight: 400;
814
+ }
815
+
816
+ .reply-input {
817
+ display: flex;
818
+ gap: 8px;
819
+ margin-top: 8px;
820
+ margin-left: 12px;
821
+ }
822
+
823
+ .reply-input input {
824
+ flex: 1;
825
+ padding: 6px 8px;
826
+ border: 1px solid var(--border);
827
+ border-radius: 6px;
828
+ background: var(--bg-primary);
829
+ color: var(--text-primary);
830
+ font-family: inherit;
831
+ font-size: 13px;
832
+ }
833
+
834
+ .reply-input input:focus {
835
+ outline: none;
836
+ border-color: var(--accent);
837
+ box-shadow: 0 0 0 2px rgba(137, 180, 250, 0.25);
838
+ }
839
+
840
+ /* --------------------------------------------------------------------------
841
+ Markdown content styling (inside .content-area)
842
+ -------------------------------------------------------------------------- */
843
+ .content-area h1 {
844
+ font-size: 2em;
845
+ margin: 24px 0 16px;
846
+ border-bottom: 1px solid var(--border);
847
+ padding-bottom: 8px;
848
+ font-weight: 700;
849
+ }
850
+
851
+ .content-area h2 {
852
+ font-size: 1.5em;
853
+ margin: 20px 0 12px;
854
+ font-weight: 600;
855
+ }
856
+
857
+ .content-area h3 {
858
+ font-size: 1.2em;
859
+ margin: 16px 0 8px;
860
+ font-weight: 600;
861
+ }
862
+
863
+ .content-area h4 {
864
+ font-size: 1.05em;
865
+ margin: 14px 0 6px;
866
+ font-weight: 600;
867
+ }
868
+
869
+ .content-area p {
870
+ margin: 0 0 12px;
871
+ }
872
+
873
+ .content-area ul,
874
+ .content-area ol {
875
+ margin: 0 0 12px;
876
+ padding-left: 24px;
877
+ }
878
+
879
+ .content-area li {
880
+ margin-bottom: 4px;
881
+ }
882
+
883
+ .content-area li > ul,
884
+ .content-area li > ol {
885
+ margin-bottom: 0;
886
+ }
887
+
888
+ .content-area code {
889
+ background: var(--bg-tertiary);
890
+ padding: 2px 6px;
891
+ border-radius: 3px;
892
+ font-size: 0.9em;
893
+ font-family: 'SF Mono', 'Cascadia Code', 'Fira Code', Consolas, monospace;
894
+ }
895
+
896
+ .content-area pre {
897
+ background: var(--bg-tertiary);
898
+ padding: 16px;
899
+ border-radius: 8px;
900
+ overflow-x: auto;
901
+ margin: 0 0 16px;
902
+ line-height: 1.5;
903
+ }
904
+
905
+ .content-area pre code {
906
+ background: none;
907
+ padding: 0;
908
+ border-radius: 0;
909
+ font-size: 13px;
910
+ }
911
+
912
+ .content-area blockquote {
913
+ border-left: 4px solid var(--accent);
914
+ padding: 8px 16px;
915
+ margin: 0 0 12px;
916
+ color: var(--text-secondary);
917
+ background: var(--bg-tertiary);
918
+ border-radius: 0 8px 8px 0;
919
+ }
920
+
921
+ .content-area blockquote p:last-child {
922
+ margin-bottom: 0;
923
+ }
924
+
925
+ .content-area table {
926
+ border-collapse: collapse;
927
+ width: 100%;
928
+ margin: 0 0 16px;
929
+ }
930
+
931
+ .content-area th,
932
+ .content-area td {
933
+ border: 1px solid var(--border);
934
+ padding: 8px 12px;
935
+ text-align: left;
936
+ }
937
+
938
+ .content-area th {
939
+ background: var(--bg-secondary);
940
+ font-weight: 600;
941
+ }
942
+
943
+ .content-area img {
944
+ max-width: 100%;
945
+ border-radius: 8px;
946
+ }
947
+
948
+ .content-area a {
949
+ color: var(--accent);
950
+ text-decoration: none;
951
+ }
952
+
953
+ .content-area a:hover {
954
+ text-decoration: underline;
955
+ }
956
+
957
+ .content-area hr {
958
+ border: none;
959
+ height: 1px;
960
+ background: var(--border);
961
+ margin: 24px 0;
962
+ }
963
+
964
+ /* --------------------------------------------------------------------------
965
+ Keyboard shortcut modal
966
+ -------------------------------------------------------------------------- */
967
+ .shortcut-overlay {
968
+ position: fixed;
969
+ inset: 0;
970
+ background: rgba(0, 0, 0, 0.5);
971
+ z-index: 199;
972
+ }
973
+
974
+ .shortcut-modal {
975
+ position: fixed;
976
+ top: 50%;
977
+ left: 50%;
978
+ transform: translate(-50%, -50%);
979
+ z-index: 200;
980
+ background: var(--bg-secondary);
981
+ border: 1px solid var(--border);
982
+ border-radius: 12px;
983
+ padding: 24px;
984
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
985
+ min-width: 400px;
986
+ max-width: 520px;
987
+ max-height: 80vh;
988
+ overflow-y: auto;
989
+ }
990
+
991
+ .shortcut-modal h2 {
992
+ font-size: 16px;
993
+ font-weight: 600;
994
+ margin-bottom: 16px;
995
+ }
996
+
997
+ .shortcut-group {
998
+ margin-bottom: 16px;
999
+ }
1000
+
1001
+ .shortcut-group-title {
1002
+ font-size: 11px;
1003
+ font-weight: 600;
1004
+ text-transform: uppercase;
1005
+ letter-spacing: 0.5px;
1006
+ color: var(--text-muted);
1007
+ margin-bottom: 8px;
1008
+ }
1009
+
1010
+ .shortcut-row {
1011
+ display: flex;
1012
+ justify-content: space-between;
1013
+ align-items: center;
1014
+ padding: 6px 0;
1015
+ border-bottom: 1px solid var(--border-subtle);
1016
+ font-size: 13px;
1017
+ }
1018
+
1019
+ .shortcut-row:last-child {
1020
+ border-bottom: none;
1021
+ }
1022
+
1023
+ .shortcut-label {
1024
+ color: var(--text-secondary);
1025
+ }
1026
+
1027
+ .shortcut-key {
1028
+ display: inline-block;
1029
+ padding: 2px 8px;
1030
+ background: var(--bg-tertiary);
1031
+ border: 1px solid var(--border);
1032
+ border-radius: 4px;
1033
+ font-family: 'SF Mono', 'Cascadia Code', Consolas, monospace;
1034
+ font-size: 12px;
1035
+ min-width: 24px;
1036
+ text-align: center;
1037
+ line-height: 1.5;
1038
+ }
1039
+
1040
+ /* --------------------------------------------------------------------------
1041
+ Theme picker
1042
+ -------------------------------------------------------------------------- */
1043
+ .theme-picker {
1044
+ display: flex;
1045
+ gap: 6px;
1046
+ align-items: center;
1047
+ }
1048
+
1049
+ .theme-swatch {
1050
+ width: 24px;
1051
+ height: 24px;
1052
+ border-radius: 50%;
1053
+ cursor: pointer;
1054
+ border: 2px solid transparent;
1055
+ transition: border-color 0.15s, transform 0.15s;
1056
+ flex-shrink: 0;
1057
+ }
1058
+
1059
+ .theme-swatch:hover,
1060
+ .theme-swatch.active {
1061
+ border-color: var(--accent);
1062
+ transform: scale(1.1);
1063
+ }
1064
+
1065
+ /* --------------------------------------------------------------------------
1066
+ Export menu options
1067
+ -------------------------------------------------------------------------- */
1068
+ .export-option {
1069
+ display: block;
1070
+ width: 100%;
1071
+ padding: 8px 12px;
1072
+ text-align: left;
1073
+ border: none;
1074
+ background: none;
1075
+ color: var(--text-primary);
1076
+ cursor: pointer;
1077
+ font-size: 13px;
1078
+ font-family: inherit;
1079
+ }
1080
+
1081
+ .export-option:hover {
1082
+ background: var(--bg-tertiary);
1083
+ }
1084
+
1085
+ /* --------------------------------------------------------------------------
1086
+ Scrollbar styling
1087
+ -------------------------------------------------------------------------- */
1088
+ ::-webkit-scrollbar {
1089
+ width: 8px;
1090
+ height: 8px;
1091
+ }
1092
+
1093
+ ::-webkit-scrollbar-track {
1094
+ background: var(--scrollbar-track);
1095
+ }
1096
+
1097
+ ::-webkit-scrollbar-thumb {
1098
+ background: var(--scrollbar-thumb);
1099
+ border-radius: 4px;
1100
+ }
1101
+
1102
+ ::-webkit-scrollbar-thumb:hover {
1103
+ background: var(--text-muted);
1104
+ }
1105
+
1106
+ /* Firefox scrollbar */
1107
+ * {
1108
+ scrollbar-width: thin;
1109
+ scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
1110
+ }
1111
+
1112
+ /* --------------------------------------------------------------------------
1113
+ Drift warning banner
1114
+ -------------------------------------------------------------------------- */
1115
+ .drift-banner {
1116
+ padding: 8px 16px;
1117
+ background: var(--tag-question);
1118
+ color: white;
1119
+ font-size: 13px;
1120
+ display: flex;
1121
+ align-items: center;
1122
+ gap: 8px;
1123
+ grid-column: 1 / -1;
1124
+ }
1125
+
1126
+ .drift-banner .dismiss {
1127
+ margin-left: auto;
1128
+ cursor: pointer;
1129
+ opacity: 0.8;
1130
+ transition: opacity 0.15s;
1131
+ }
1132
+
1133
+ .drift-banner .dismiss:hover {
1134
+ opacity: 1;
1135
+ }
1136
+
1137
+ /* --------------------------------------------------------------------------
1138
+ Utility classes
1139
+ -------------------------------------------------------------------------- */
1140
+ .flex { display: flex; }
1141
+ .flex-col { flex-direction: column; }
1142
+ .items-center { align-items: center; }
1143
+ .justify-between { justify-content: space-between; }
1144
+ .gap-4 { gap: 4px; }
1145
+ .gap-8 { gap: 8px; }
1146
+ .gap-12 { gap: 12px; }
1147
+ .ml-auto { margin-left: auto; }
1148
+ .text-muted { color: var(--text-muted); }
1149
+ .text-sm { font-size: 12px; }
1150
+ .text-xs { font-size: 11px; }
1151
+ .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1152
+ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); border: 0; }
1153
+
1154
+ /* --------------------------------------------------------------------------
1155
+ Syntax highlighting — hljs token colors (Catppuccin-harmonized)
1156
+ -------------------------------------------------------------------------- */
1157
+ .content-area .hljs-keyword,
1158
+ .content-area .hljs-selector-tag,
1159
+ .content-area .hljs-built_in,
1160
+ .content-area .hljs-type { color: var(--tag-bug); }
1161
+
1162
+ .content-area .hljs-string,
1163
+ .content-area .hljs-attr,
1164
+ .content-area .hljs-symbol,
1165
+ .content-area .hljs-template-tag,
1166
+ .content-area .hljs-template-variable { color: var(--tag-suggestion); }
1167
+
1168
+ .content-area .hljs-number,
1169
+ .content-area .hljs-literal,
1170
+ .content-area .hljs-regexp { color: var(--tag-nitpick); }
1171
+
1172
+ .content-area .hljs-title,
1173
+ .content-area .hljs-title.function_,
1174
+ .content-area .hljs-title.class_ { color: var(--accent); }
1175
+
1176
+ .content-area .hljs-comment,
1177
+ .content-area .hljs-doctag { color: var(--text-muted); font-style: italic; }
1178
+
1179
+ .content-area .hljs-variable,
1180
+ .content-area .hljs-variable.language_,
1181
+ .content-area .hljs-params { color: var(--text-primary); }
1182
+
1183
+ .content-area .hljs-meta,
1184
+ .content-area .hljs-meta .hljs-keyword { color: var(--tag-question); }
1185
+
1186
+ .content-area .hljs-subst { color: var(--text-secondary); }
1187
+
1188
+ .content-area .hljs-addition { color: var(--tag-suggestion); background: rgba(166, 227, 161, 0.1); }
1189
+ .content-area .hljs-deletion { color: var(--tag-bug); background: rgba(243, 139, 168, 0.1); }
1190
+
1191
+ /* --------------------------------------------------------------------------
1192
+ Mermaid diagrams — fallback styling before CDN loads
1193
+ -------------------------------------------------------------------------- */
1194
+ .content-area .mermaid {
1195
+ background: var(--bg-tertiary);
1196
+ border: 1px dashed var(--border);
1197
+ border-radius: 8px;
1198
+ padding: 16px;
1199
+ text-align: center;
1200
+ font-family: inherit;
1201
+ white-space: pre-wrap;
1202
+ min-height: 60px;
1203
+ }
1204
+
1205
+ .content-area .mermaid svg {
1206
+ max-width: 100%;
1207
+ }
1208
+
1209
+ /* --------------------------------------------------------------------------
1210
+ Math — display and inline styling before KaTeX loads
1211
+ -------------------------------------------------------------------------- */
1212
+ .content-area .math-display {
1213
+ display: block;
1214
+ text-align: center;
1215
+ padding: 12px 16px;
1216
+ margin: 12px 0;
1217
+ background: var(--bg-tertiary);
1218
+ border-radius: 6px;
1219
+ font-family: 'KaTeX_Main', 'Times New Roman', serif;
1220
+ font-size: 1.1em;
1221
+ overflow-x: auto;
1222
+ }
1223
+
1224
+ .content-area .math-inline {
1225
+ font-family: 'KaTeX_Main', 'Times New Roman', serif;
1226
+ padding: 1px 4px;
1227
+ background: var(--bg-tertiary);
1228
+ border-radius: 3px;
1229
+ }
1230
+
1231
+ /* --------------------------------------------------------------------------
1232
+ Transitions & animations
1233
+ -------------------------------------------------------------------------- */
1234
+ @media (prefers-reduced-motion: reduce) {
1235
+ *,
1236
+ *::before,
1237
+ *::after {
1238
+ animation-duration: 0.01ms !important;
1239
+ animation-iteration-count: 1 !important;
1240
+ transition-duration: 0.01ms !important;
1241
+ scroll-behavior: auto !important;
1242
+ }
1243
+ }