@dzhechkov/p-replicator 1.5.6 → 1.5.7

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,804 @@
1
+ /* ============================================================
2
+ P-Replicator docs — vanilla CSS, light + dark, mobile-first
3
+ ============================================================ */
4
+
5
+ /* ─── CSS Custom Properties (light + dark) ───────────────── */
6
+
7
+ :root {
8
+ --header-h: 56px;
9
+ --sidebar-w: 280px;
10
+ --content-max: 820px;
11
+ --radius: 6px;
12
+ --radius-lg: 10px;
13
+ --transition: 0.18s ease;
14
+
15
+ /* Light theme as default */
16
+ color-scheme: light;
17
+ --bg: #ffffff;
18
+ --bg-secondary: #f6f8fa;
19
+ --bg-elevated: #ffffff;
20
+ --text: #1f2328;
21
+ --text-muted: #6e7781;
22
+ --accent: #0969da;
23
+ --accent-bg: rgba(9, 105, 218, 0.08);
24
+ --accent-bg-strong: rgba(9, 105, 218, 0.15);
25
+ --border: #d0d7de;
26
+ --border-muted: #eaeef2;
27
+ --code-bg: #f6f8fa;
28
+ --code-text: #1f2328;
29
+ --kbd-bg: #f6f8fa;
30
+ --shadow: 0 1px 3px rgba(31, 35, 40, 0.06), 0 4px 12px rgba(31, 35, 40, 0.04);
31
+ --shadow-strong: 0 4px 16px rgba(31, 35, 40, 0.12);
32
+ --mark-bg: #fff8c5;
33
+ --mark-color: #1f2328;
34
+
35
+ /* Syntax */
36
+ --syn-keyword: #cf222e;
37
+ --syn-string: #0a3069;
38
+ --syn-comment: #6e7781;
39
+ --syn-number: #0550ae;
40
+ --syn-function: #8250df;
41
+ --syn-tag: #116329;
42
+ --syn-attr: #0550ae;
43
+ }
44
+
45
+ :root[data-theme="dark"] {
46
+ color-scheme: dark;
47
+ --bg: #0d1117;
48
+ --bg-secondary: #161b22;
49
+ --bg-elevated: #161b22;
50
+ --text: #e6edf3;
51
+ --text-muted: #8b949e;
52
+ --accent: #58a6ff;
53
+ --accent-bg: rgba(56, 139, 253, 0.10);
54
+ --accent-bg-strong: rgba(56, 139, 253, 0.20);
55
+ --border: #30363d;
56
+ --border-muted: #21262d;
57
+ --code-bg: #1c2128;
58
+ --code-text: #e6edf3;
59
+ --kbd-bg: #21262d;
60
+ --shadow: 0 1px 3px rgba(0, 0, 0, 0.35), 0 4px 12px rgba(0, 0, 0, 0.20);
61
+ --shadow-strong: 0 4px 16px rgba(0, 0, 0, 0.4);
62
+ --mark-bg: rgba(187, 128, 9, 0.4);
63
+ --mark-color: #e6edf3;
64
+
65
+ --syn-keyword: #ff7b72;
66
+ --syn-string: #a5d6ff;
67
+ --syn-comment: #8b949e;
68
+ --syn-number: #79c0ff;
69
+ --syn-function: #d2a8ff;
70
+ --syn-tag: #7ee787;
71
+ --syn-attr: #79c0ff;
72
+ }
73
+
74
+ @media (prefers-color-scheme: dark) {
75
+ :root:not([data-theme="light"]) {
76
+ color-scheme: dark;
77
+ --bg: #0d1117;
78
+ --bg-secondary: #161b22;
79
+ --bg-elevated: #161b22;
80
+ --text: #e6edf3;
81
+ --text-muted: #8b949e;
82
+ --accent: #58a6ff;
83
+ --accent-bg: rgba(56, 139, 253, 0.10);
84
+ --accent-bg-strong: rgba(56, 139, 253, 0.20);
85
+ --border: #30363d;
86
+ --border-muted: #21262d;
87
+ --code-bg: #1c2128;
88
+ --code-text: #e6edf3;
89
+ --kbd-bg: #21262d;
90
+ --shadow: 0 1px 3px rgba(0, 0, 0, 0.35), 0 4px 12px rgba(0, 0, 0, 0.20);
91
+ --shadow-strong: 0 4px 16px rgba(0, 0, 0, 0.4);
92
+ --mark-bg: rgba(187, 128, 9, 0.4);
93
+ --mark-color: #e6edf3;
94
+ --syn-keyword: #ff7b72;
95
+ --syn-string: #a5d6ff;
96
+ --syn-comment: #8b949e;
97
+ --syn-number: #79c0ff;
98
+ --syn-function: #d2a8ff;
99
+ --syn-tag: #7ee787;
100
+ --syn-attr: #79c0ff;
101
+ }
102
+ }
103
+
104
+ /* ─── Reset / base ────────────────────────────────────────── */
105
+
106
+ *, *::before, *::after { box-sizing: border-box; }
107
+
108
+ html {
109
+ scroll-behavior: smooth;
110
+ scroll-padding-top: calc(var(--header-h) + 16px);
111
+ -webkit-text-size-adjust: 100%;
112
+ text-rendering: optimizeLegibility;
113
+ }
114
+
115
+ body {
116
+ margin: 0;
117
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue",
118
+ "Inter", "Roboto", Arial, sans-serif;
119
+ font-size: clamp(15px, 0.96vw + 12px, 17px);
120
+ line-height: 1.65;
121
+ background: var(--bg);
122
+ color: var(--text);
123
+ transition: background-color var(--transition), color var(--transition);
124
+ min-height: 100vh;
125
+ }
126
+
127
+ /* Skip to content (a11y) */
128
+ .skip-to-content {
129
+ position: absolute;
130
+ top: -100px;
131
+ left: 8px;
132
+ background: var(--accent);
133
+ color: white;
134
+ padding: 12px 16px;
135
+ z-index: 1001;
136
+ text-decoration: none;
137
+ border-radius: var(--radius);
138
+ font-weight: 600;
139
+ transition: top 0.18s;
140
+ }
141
+ .skip-to-content:focus { top: 8px; }
142
+
143
+ /* ─── Reading progress bar ────────────────────────────────── */
144
+
145
+ .progress-bar {
146
+ position: fixed;
147
+ top: 0;
148
+ left: 0;
149
+ height: 3px;
150
+ width: 0;
151
+ background: linear-gradient(90deg, var(--accent), #79c0ff);
152
+ z-index: 999;
153
+ transition: width 0.08s ease-out;
154
+ }
155
+
156
+ /* ─── Header ──────────────────────────────────────────────── */
157
+
158
+ .site-header {
159
+ position: sticky;
160
+ top: 0;
161
+ height: var(--header-h);
162
+ background: var(--bg-elevated);
163
+ border-bottom: 1px solid var(--border);
164
+ display: flex;
165
+ align-items: center;
166
+ padding: 0 16px;
167
+ z-index: 100;
168
+ gap: 12px;
169
+ backdrop-filter: blur(8px);
170
+ }
171
+
172
+ .site-title {
173
+ display: flex;
174
+ gap: 8px;
175
+ align-items: baseline;
176
+ text-decoration: none;
177
+ color: var(--text);
178
+ font-size: 1.05em;
179
+ }
180
+ .site-title strong { font-weight: 700; }
181
+ .site-title:hover { color: var(--accent); }
182
+
183
+ .version {
184
+ color: var(--text-muted);
185
+ font-size: 0.82em;
186
+ font-weight: 500;
187
+ padding: 2px 8px;
188
+ background: var(--bg-secondary);
189
+ border: 1px solid var(--border-muted);
190
+ border-radius: 999px;
191
+ }
192
+
193
+ .header-nav {
194
+ margin-left: auto;
195
+ display: flex;
196
+ gap: 8px;
197
+ align-items: center;
198
+ }
199
+ .header-nav a {
200
+ color: var(--text-muted);
201
+ text-decoration: none;
202
+ padding: 6px 12px;
203
+ border-radius: var(--radius);
204
+ transition: background-color var(--transition), color var(--transition);
205
+ font-size: 0.93em;
206
+ font-weight: 500;
207
+ }
208
+ .header-nav a:hover {
209
+ color: var(--accent);
210
+ background: var(--accent-bg);
211
+ }
212
+
213
+ .menu-toggle, .theme-toggle {
214
+ background: none;
215
+ border: 1px solid var(--border-muted);
216
+ border-radius: var(--radius);
217
+ cursor: pointer;
218
+ font-size: 1.15em;
219
+ width: 36px;
220
+ height: 36px;
221
+ display: flex;
222
+ align-items: center;
223
+ justify-content: center;
224
+ color: var(--text);
225
+ transition: background-color var(--transition), border-color var(--transition);
226
+ }
227
+ .menu-toggle:hover, .theme-toggle:hover {
228
+ background: var(--bg-secondary);
229
+ border-color: var(--border);
230
+ }
231
+ .menu-toggle { display: none; }
232
+
233
+ /* ─── Main layout ─────────────────────────────────────────── */
234
+
235
+ .layout {
236
+ display: grid;
237
+ grid-template-columns: var(--sidebar-w) 1fr;
238
+ max-width: 1400px;
239
+ margin: 0 auto;
240
+ }
241
+
242
+ /* ─── Sidebar ─────────────────────────────────────────────── */
243
+
244
+ .sidebar {
245
+ position: sticky;
246
+ top: var(--header-h);
247
+ height: calc(100vh - var(--header-h));
248
+ overflow-y: auto;
249
+ padding: 20px 16px 60px;
250
+ border-right: 1px solid var(--border);
251
+ background: var(--bg);
252
+ scrollbar-gutter: stable;
253
+ }
254
+
255
+ .search-wrap {
256
+ position: relative;
257
+ margin-bottom: 12px;
258
+ }
259
+ .search-input {
260
+ width: 100%;
261
+ padding: 9px 36px 9px 12px;
262
+ border: 1px solid var(--border);
263
+ border-radius: var(--radius);
264
+ background: var(--bg);
265
+ color: var(--text);
266
+ font-size: 14px;
267
+ font-family: inherit;
268
+ transition: border-color var(--transition), box-shadow var(--transition);
269
+ }
270
+ .search-input:focus {
271
+ outline: none;
272
+ border-color: var(--accent);
273
+ box-shadow: 0 0 0 3px var(--accent-bg-strong);
274
+ }
275
+ .search-kbd {
276
+ position: absolute;
277
+ right: 8px;
278
+ top: 50%;
279
+ transform: translateY(-50%);
280
+ background: var(--kbd-bg);
281
+ border: 1px solid var(--border-muted);
282
+ border-radius: 4px;
283
+ padding: 2px 6px;
284
+ font-size: 11px;
285
+ font-family: ui-monospace, "SF Mono", Menlo, monospace;
286
+ color: var(--text-muted);
287
+ pointer-events: none;
288
+ user-select: none;
289
+ }
290
+
291
+ .search-results {
292
+ margin-bottom: 16px;
293
+ border: 1px solid var(--border);
294
+ border-radius: var(--radius);
295
+ background: var(--bg-elevated);
296
+ max-height: 50vh;
297
+ overflow-y: auto;
298
+ box-shadow: var(--shadow);
299
+ }
300
+ .search-result {
301
+ display: block;
302
+ padding: 10px 12px;
303
+ border-bottom: 1px solid var(--border-muted);
304
+ text-decoration: none;
305
+ color: var(--text);
306
+ cursor: pointer;
307
+ transition: background-color var(--transition);
308
+ }
309
+ .search-result:last-child { border-bottom: none; }
310
+ .search-result:hover, .search-result:focus {
311
+ background: var(--accent-bg);
312
+ outline: none;
313
+ }
314
+ .search-result-section {
315
+ font-size: 11px;
316
+ color: var(--text-muted);
317
+ text-transform: uppercase;
318
+ letter-spacing: 0.5px;
319
+ margin-bottom: 2px;
320
+ }
321
+ .search-result-title {
322
+ font-weight: 600;
323
+ color: var(--accent);
324
+ margin-bottom: 4px;
325
+ font-size: 14px;
326
+ }
327
+ .search-result-snippet {
328
+ font-size: 12.5px;
329
+ color: var(--text-muted);
330
+ line-height: 1.5;
331
+ word-break: break-word;
332
+ }
333
+ .search-result mark {
334
+ background: var(--mark-bg);
335
+ color: var(--mark-color);
336
+ padding: 0 2px;
337
+ border-radius: 2px;
338
+ font-weight: 600;
339
+ }
340
+ .search-empty {
341
+ padding: 16px;
342
+ text-align: center;
343
+ color: var(--text-muted);
344
+ font-size: 14px;
345
+ }
346
+
347
+ .toc ul {
348
+ list-style: none;
349
+ padding-left: 0;
350
+ margin: 0;
351
+ }
352
+ .toc > ul > li {
353
+ margin-bottom: 4px;
354
+ }
355
+ .toc ul ul {
356
+ margin-top: 2px;
357
+ padding-left: 14px;
358
+ border-left: 1px solid var(--border-muted);
359
+ font-size: 13.5px;
360
+ }
361
+ .toc ul ul li { margin-bottom: 1px; }
362
+
363
+ .toc a {
364
+ display: block;
365
+ padding: 5px 10px;
366
+ color: var(--text);
367
+ text-decoration: none;
368
+ border-radius: var(--radius);
369
+ transition: background-color var(--transition), color var(--transition);
370
+ word-break: break-word;
371
+ line-height: 1.4;
372
+ }
373
+ .toc a:hover {
374
+ background: var(--bg-secondary);
375
+ color: var(--accent);
376
+ }
377
+ .toc a.active {
378
+ background: var(--accent-bg-strong);
379
+ color: var(--accent);
380
+ font-weight: 600;
381
+ }
382
+ .toc-section { font-weight: 600; }
383
+
384
+ /* ─── Main content ────────────────────────────────────────── */
385
+
386
+ .main-content {
387
+ padding: 32px 40px 80px;
388
+ max-width: var(--content-max);
389
+ width: 100%;
390
+ margin: 0 auto;
391
+ }
392
+
393
+ .section {
394
+ padding: 24px 0;
395
+ scroll-margin-top: calc(var(--header-h) + 12px);
396
+ }
397
+ .section + .section {
398
+ border-top: 1px solid var(--border-muted);
399
+ }
400
+
401
+ /* Headings */
402
+ h1, h2, h3, h4, h5, h6 {
403
+ margin: 1.5em 0 0.6em;
404
+ line-height: 1.3;
405
+ font-weight: 700;
406
+ }
407
+ h1 {
408
+ font-size: clamp(1.6em, 2.4vw + 0.5em, 2.1em);
409
+ margin-top: 0.4em;
410
+ padding-bottom: 0.3em;
411
+ border-bottom: 1px solid var(--border);
412
+ }
413
+ h2 {
414
+ font-size: clamp(1.3em, 1.6vw + 0.4em, 1.6em);
415
+ padding-bottom: 0.25em;
416
+ border-bottom: 1px solid var(--border-muted);
417
+ margin-top: 2em;
418
+ }
419
+ h3 { font-size: 1.2em; margin-top: 1.6em; }
420
+ h4 { font-size: 1.05em; margin-top: 1.3em; }
421
+ h2[id], h3[id], h4[id] {
422
+ scroll-margin-top: calc(var(--header-h) + 16px);
423
+ }
424
+
425
+ p { margin: 0.8em 0; }
426
+
427
+ /* Links */
428
+ a { color: var(--accent); }
429
+ a:hover { text-decoration: underline; }
430
+ a:focus-visible {
431
+ outline: 2px solid var(--accent);
432
+ outline-offset: 2px;
433
+ border-radius: 2px;
434
+ }
435
+
436
+ /* Lists */
437
+ ul, ol { padding-left: 1.5em; margin: 0.8em 0; }
438
+ li { margin: 0.3em 0; }
439
+ li > ul, li > ol { margin: 0.3em 0; }
440
+
441
+ /* Code */
442
+ pre {
443
+ background: var(--code-bg);
444
+ border: 1px solid var(--border-muted);
445
+ padding: 14px 16px;
446
+ border-radius: var(--radius-lg);
447
+ overflow-x: auto;
448
+ font-size: 0.88em;
449
+ line-height: 1.55;
450
+ position: relative;
451
+ margin: 16px 0;
452
+ }
453
+ pre::-webkit-scrollbar { height: 8px; }
454
+ pre::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
455
+ pre code {
456
+ background: none;
457
+ padding: 0;
458
+ color: var(--code-text);
459
+ font-size: inherit;
460
+ }
461
+ code {
462
+ background: var(--code-bg);
463
+ padding: 1.5px 6px;
464
+ border-radius: 3px;
465
+ font-family: ui-monospace, "SF Mono", "Cascadia Mono", Menlo, Consolas, monospace;
466
+ font-size: 0.88em;
467
+ color: var(--code-text);
468
+ border: 1px solid var(--border-muted);
469
+ }
470
+ pre code { border: none; }
471
+
472
+ .copy-btn {
473
+ position: absolute;
474
+ top: 8px;
475
+ right: 8px;
476
+ background: var(--bg-elevated);
477
+ border: 1px solid var(--border);
478
+ border-radius: var(--radius);
479
+ padding: 4px 8px;
480
+ cursor: pointer;
481
+ font-size: 12px;
482
+ color: var(--text-muted);
483
+ opacity: 0;
484
+ transition: opacity var(--transition), color var(--transition);
485
+ }
486
+ pre:hover .copy-btn, pre:focus-within .copy-btn { opacity: 1; }
487
+ .copy-btn:hover { color: var(--accent); }
488
+ .copy-btn[data-state="copied"] { color: #1f883d; }
489
+
490
+ /* Tables */
491
+ .table-wrap {
492
+ overflow-x: auto;
493
+ margin: 16px 0;
494
+ border-radius: var(--radius-lg);
495
+ border: 1px solid var(--border-muted);
496
+ }
497
+ table {
498
+ border-collapse: collapse;
499
+ width: 100%;
500
+ font-size: 0.93em;
501
+ }
502
+ th, td {
503
+ border-bottom: 1px solid var(--border-muted);
504
+ border-right: 1px solid var(--border-muted);
505
+ padding: 8px 12px;
506
+ text-align: left;
507
+ vertical-align: top;
508
+ }
509
+ th:last-child, td:last-child { border-right: none; }
510
+ tr:last-child td { border-bottom: none; }
511
+ th {
512
+ background: var(--bg-secondary);
513
+ font-weight: 600;
514
+ position: sticky;
515
+ top: 0;
516
+ }
517
+ tbody tr:hover { background: var(--bg-secondary); }
518
+
519
+ /* Blockquote */
520
+ blockquote {
521
+ border-left: 4px solid var(--accent);
522
+ padding: 8px 16px;
523
+ background: var(--accent-bg);
524
+ border-radius: 0 var(--radius) var(--radius) 0;
525
+ color: var(--text);
526
+ margin: 16px 0;
527
+ }
528
+ blockquote p:first-child { margin-top: 0; }
529
+ blockquote p:last-child { margin-bottom: 0; }
530
+
531
+ /* HR */
532
+ hr {
533
+ border: none;
534
+ border-top: 1px solid var(--border);
535
+ margin: 32px 0;
536
+ }
537
+
538
+ /* Strong / em */
539
+ strong { font-weight: 700; }
540
+ em { font-style: italic; }
541
+
542
+ /* ─── Section nav (prev/next) ─────────────────────────────── */
543
+
544
+ .section-nav {
545
+ display: flex;
546
+ justify-content: space-between;
547
+ align-items: stretch;
548
+ gap: 12px;
549
+ margin-top: 56px;
550
+ padding-top: 24px;
551
+ border-top: 1px solid var(--border);
552
+ }
553
+ .section-nav > a {
554
+ flex: 1 1 calc(50% - 6px);
555
+ text-decoration: none;
556
+ display: flex;
557
+ align-items: center;
558
+ gap: 12px;
559
+ padding: 14px 18px;
560
+ background: var(--bg-secondary);
561
+ border: 1px solid var(--border);
562
+ border-radius: var(--radius-lg);
563
+ color: var(--text);
564
+ transition: background-color var(--transition), border-color var(--transition), transform var(--transition);
565
+ min-width: 0;
566
+ }
567
+ .section-nav > a:hover {
568
+ background: var(--accent-bg);
569
+ border-color: var(--accent);
570
+ transform: translateY(-1px);
571
+ text-decoration: none;
572
+ }
573
+ .section-nav .nav-arrow {
574
+ font-size: 1.4em;
575
+ color: var(--accent);
576
+ flex-shrink: 0;
577
+ }
578
+ .section-nav .nav-text {
579
+ display: flex;
580
+ flex-direction: column;
581
+ gap: 2px;
582
+ min-width: 0;
583
+ }
584
+ .section-nav .nav-label {
585
+ font-size: 11px;
586
+ text-transform: uppercase;
587
+ letter-spacing: 0.5px;
588
+ color: var(--text-muted);
589
+ font-weight: 600;
590
+ }
591
+ .section-nav .nav-title {
592
+ font-weight: 600;
593
+ white-space: nowrap;
594
+ overflow: hidden;
595
+ text-overflow: ellipsis;
596
+ }
597
+ .section-nav .next { justify-content: flex-end; text-align: right; margin-left: auto; }
598
+ .section-nav .prev { justify-content: flex-start; }
599
+ .section-nav .next .nav-text { align-items: flex-end; }
600
+ .section-nav > span:empty { flex: 1 1 calc(50% - 6px); }
601
+
602
+ /* ─── Footer ──────────────────────────────────────────────── */
603
+
604
+ .site-footer {
605
+ margin-top: 80px;
606
+ padding: 32px 0 0;
607
+ border-top: 1px solid var(--border);
608
+ color: var(--text-muted);
609
+ font-size: 14px;
610
+ }
611
+ .footer-row { margin: 6px 0; }
612
+ .footer-muted { color: var(--text-muted); }
613
+ .footer-row code {
614
+ font-size: 0.92em;
615
+ padding: 1px 6px;
616
+ }
617
+ .footer-links a {
618
+ color: var(--text-muted);
619
+ text-decoration: none;
620
+ margin: 0 4px;
621
+ }
622
+ .footer-links a:hover { color: var(--accent); }
623
+
624
+ /* ─── Sidebar overlay (mobile) ────────────────────────────── */
625
+
626
+ .sidebar-overlay {
627
+ display: none;
628
+ position: fixed;
629
+ inset: 0;
630
+ background: rgba(0, 0, 0, 0.5);
631
+ z-index: 50;
632
+ animation: fade-in 0.18s ease;
633
+ }
634
+ .sidebar-overlay.active { display: block; }
635
+
636
+ @keyframes fade-in {
637
+ from { opacity: 0; }
638
+ to { opacity: 1; }
639
+ }
640
+
641
+ /* ─── Back to top ─────────────────────────────────────────── */
642
+
643
+ .back-to-top {
644
+ position: fixed;
645
+ bottom: 24px;
646
+ right: 24px;
647
+ width: 48px;
648
+ height: 48px;
649
+ border: 1px solid var(--border);
650
+ border-radius: 50%;
651
+ background: var(--bg-elevated);
652
+ color: var(--text);
653
+ font-size: 22px;
654
+ cursor: pointer;
655
+ box-shadow: var(--shadow-strong);
656
+ z-index: 99;
657
+ transition: opacity var(--transition), transform var(--transition);
658
+ display: flex;
659
+ align-items: center;
660
+ justify-content: center;
661
+ }
662
+ .back-to-top:hover {
663
+ background: var(--accent);
664
+ color: white;
665
+ border-color: var(--accent);
666
+ transform: translateY(-2px);
667
+ }
668
+
669
+ /* ─── Mark (search highlight) ─────────────────────────────── */
670
+
671
+ mark {
672
+ background: var(--mark-bg);
673
+ color: var(--mark-color);
674
+ padding: 0 2px;
675
+ border-radius: 2px;
676
+ }
677
+
678
+ /* ─── Syntax highlighting tokens ──────────────────────────── */
679
+
680
+ .tk-keyword { color: var(--syn-keyword); font-weight: 600; }
681
+ .tk-string { color: var(--syn-string); }
682
+ .tk-comment { color: var(--syn-comment); font-style: italic; }
683
+ .tk-number { color: var(--syn-number); }
684
+ .tk-function{ color: var(--syn-function); }
685
+ .tk-tag { color: var(--syn-tag); }
686
+ .tk-attr { color: var(--syn-attr); }
687
+ .tk-flag { color: var(--syn-function); font-weight: 600; }
688
+
689
+ /* ─── Responsive breakpoints ──────────────────────────────── */
690
+
691
+ /* Tablet & mobile: collapsible sidebar */
692
+ @media (max-width: 1023px) {
693
+ .layout {
694
+ grid-template-columns: 1fr;
695
+ }
696
+ .sidebar {
697
+ position: fixed;
698
+ top: var(--header-h);
699
+ left: 0;
700
+ width: min(85vw, 320px);
701
+ max-width: 100vw;
702
+ height: calc(100vh - var(--header-h));
703
+ background: var(--bg);
704
+ border-right: 1px solid var(--border);
705
+ box-shadow: var(--shadow-strong);
706
+ transform: translateX(-105%);
707
+ transition: transform 0.22s ease;
708
+ z-index: 60;
709
+ }
710
+ .sidebar.open { transform: translateX(0); }
711
+ .menu-toggle { display: flex; }
712
+ .main-content {
713
+ padding: 24px 20px 60px;
714
+ }
715
+ .section {
716
+ padding: 16px 0;
717
+ }
718
+ }
719
+
720
+ /* Mobile: tighter content + smaller header nav */
721
+ @media (max-width: 767px) {
722
+ :root { --header-h: 52px; }
723
+ .header-nav {
724
+ gap: 4px;
725
+ }
726
+ .header-nav a {
727
+ padding: 5px 8px;
728
+ font-size: 0.85em;
729
+ }
730
+ .site-title { font-size: 1em; }
731
+ .main-content { padding: 16px 14px 60px; }
732
+ .section { padding: 12px 0; }
733
+ h1 { font-size: 1.5em; }
734
+ h2 { font-size: 1.25em; }
735
+ h3 { font-size: 1.1em; }
736
+ pre { padding: 12px; font-size: 0.85em; }
737
+ th, td { padding: 6px 8px; font-size: 0.88em; }
738
+ .section-nav {
739
+ flex-direction: column;
740
+ gap: 10px;
741
+ margin-top: 36px;
742
+ }
743
+ .section-nav > a { flex: 0 0 auto; }
744
+ .back-to-top {
745
+ bottom: 16px; right: 16px;
746
+ width: 44px; height: 44px;
747
+ font-size: 20px;
748
+ }
749
+ .version { display: none; }
750
+ }
751
+
752
+ @media (max-width: 480px) {
753
+ .header-nav a { padding: 4px 6px; font-size: 0.8em; }
754
+ }
755
+
756
+ /* ─── Print stylesheet ────────────────────────────────────── */
757
+
758
+ @media print {
759
+ .site-header, .sidebar, .sidebar-overlay, .back-to-top,
760
+ .progress-bar, .section-nav, .copy-btn, .skip-to-content,
761
+ .search-results, .search-wrap {
762
+ display: none !important;
763
+ }
764
+ .layout { display: block; }
765
+ .main-content {
766
+ padding: 0;
767
+ max-width: none;
768
+ width: 100%;
769
+ }
770
+ body {
771
+ background: white !important;
772
+ color: black !important;
773
+ font-size: 11pt;
774
+ }
775
+ pre, code {
776
+ background: #f6f8fa !important;
777
+ color: #1f2328 !important;
778
+ border: 1px solid #d0d7de !important;
779
+ }
780
+ pre { white-space: pre-wrap; word-wrap: break-word; }
781
+ a { color: #0969da !important; text-decoration: underline; }
782
+ .section { page-break-before: always; }
783
+ .section:first-child { page-break-before: auto; }
784
+ h2, h3 { page-break-after: avoid; }
785
+ table { page-break-inside: avoid; }
786
+ }
787
+
788
+ /* ─── Reduced motion ──────────────────────────────────────── */
789
+
790
+ @media (prefers-reduced-motion: reduce) {
791
+ * {
792
+ animation-duration: 0.01ms !important;
793
+ animation-iteration-count: 1 !important;
794
+ transition-duration: 0.01ms !important;
795
+ scroll-behavior: auto !important;
796
+ }
797
+ }
798
+
799
+ /* ─── Focus visible ──────────────────────────────────────── */
800
+
801
+ button:focus-visible, .toc a:focus-visible, .search-input:focus-visible {
802
+ outline: 2px solid var(--accent);
803
+ outline-offset: 2px;
804
+ }