@kenjura/ursa 0.90.1 → 0.95.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.
- package/CHANGELOG.md +78 -0
- package/README.md +102 -0
- package/bin/ursa.js +14 -3
- package/meta/templates/default-template/default.css +1574 -1323
- package/meta/templates/default-template/index.html +175 -129
- package/meta/templates/default-template/lightbox.css +225 -216
- package/meta/templates/default-template/lightbox.js +3 -0
- package/meta/templates/default-template/menu.js +9 -6
- package/meta/templates/default-template/toc-generator.js +58 -0
- package/meta/templates/default-template/widgets.js +88 -15
- package/package.json +2 -1
- package/src/dev.js +30 -1
- package/src/helper/__test__/breadcrumbs.test.js +71 -0
- package/src/helper/__test__/contentHash.test.js +114 -0
- package/src/helper/__test__/folderConfig.test.js +89 -0
- package/src/helper/automenu.js +13 -91
- package/src/helper/breadcrumbs.js +21 -6
- package/src/helper/build/__test__/autoIndex.test.js +135 -1
- package/src/helper/build/autoIndex.js +115 -46
- package/src/helper/build/ursaMetadata.js +3 -26
- package/src/helper/contentHash.js +54 -1
- package/src/helper/folderConfig.js +34 -4
- package/src/helper/menuLabels.js +136 -0
- package/src/helper/ursaVersion.js +26 -0
- package/src/jobs/__test__/generateJsonOnly.test.js +154 -0
- package/src/jobs/generate.js +302 -181
- package/meta/default.css +0 -1206
- package/meta/menu.js +0 -898
- package/meta/sectionify.js +0 -46
|
@@ -1,1323 +1,1574 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
.
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
.
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
.
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
.
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
.
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
.search-results
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
.
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
.
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
}
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
.
|
|
658
|
-
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
.
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
}
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
}
|
|
800
|
-
|
|
801
|
-
/*
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
nav
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
}
|
|
895
|
-
|
|
896
|
-
/*
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
border-radius: 4px;
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
transform: translateX(-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
}
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
}
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
}
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
}
|
|
1
|
+
/* =============================================================================
|
|
2
|
+
Ursa's built-in stylesheet.
|
|
3
|
+
|
|
4
|
+
Everything here is scoped, layered, or both, so that a site's own CSS can
|
|
5
|
+
win without a specificity war:
|
|
6
|
+
|
|
7
|
+
@layer ursa.base – document defaults: :root tokens, html/body.
|
|
8
|
+
@scope (body) … – chrome (nav, menu, widgets, footer). The scope stops
|
|
9
|
+
at the article's children, so no rule below can reach
|
|
10
|
+
into a page's own content.
|
|
11
|
+
@layer ursa.content
|
|
12
|
+
+ @scope (article) – everything that styles the document body itself.
|
|
13
|
+
|
|
14
|
+
A site's style.css / style-ursa.css / _style.css is *unlayered*, and an
|
|
15
|
+
unlayered rule beats every layered rule no matter how specific, so a plain
|
|
16
|
+
`h1 { color: red }` in a site stylesheet now wins over anything Ursa sets on
|
|
17
|
+
article content — no `#main-content h1` escalation, no !important.
|
|
18
|
+
|
|
19
|
+
Chrome is deliberately *not* layered, so that a broad site rule (`a { … }`)
|
|
20
|
+
can't wreck the navigation. Its selectors are unchanged from before the
|
|
21
|
+
scopes were introduced, so a site restyling chrome overrides it the way it
|
|
22
|
+
always did — with a *more* specific selector, since a scoped rule wins a
|
|
23
|
+
specificity tie against an unscoped one. The breadcrumbs are Ursa's too,
|
|
24
|
+
and get the same treatment even though they render inside the article.
|
|
25
|
+
|
|
26
|
+
Anything inside an element with class `ursa-unstyled` is outside every
|
|
27
|
+
scope here: Ursa's CSS does not apply to it at all.
|
|
28
|
+
============================================================================= */
|
|
29
|
+
|
|
30
|
+
@layer ursa.base, ursa.content;
|
|
31
|
+
|
|
32
|
+
/* Global, because @keyframes are not scoped. */
|
|
33
|
+
@keyframes ursa-spin {
|
|
34
|
+
to { transform: rotate(360deg); }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Inactive/broken links. Ursa's own marker class, applied to menu links and
|
|
38
|
+
document links alike, so it is not layered: a site's
|
|
39
|
+
`a { text-decoration: none }` should not quietly un-strike a dead link.
|
|
40
|
+
Scoped only to keep it out of `.ursa-unstyled`. */
|
|
41
|
+
@scope (body) to (.ursa-unstyled) {
|
|
42
|
+
a.inactive {
|
|
43
|
+
filter: brightness(0.5);
|
|
44
|
+
cursor: not-allowed;
|
|
45
|
+
text-decoration: line-through;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
/* --------------------------------------------------------------------------
|
|
51
|
+
Document defaults. Layered, so a site stylesheet overrides them freely.
|
|
52
|
+
-------------------------------------------------------------------------- */
|
|
53
|
+
@layer ursa.base {
|
|
54
|
+
body, html {
|
|
55
|
+
margin: 0;
|
|
56
|
+
padding: 0;
|
|
57
|
+
}
|
|
58
|
+
body {
|
|
59
|
+
font-family: sans-serif;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
:root {
|
|
63
|
+
--article-width: 50rem;
|
|
64
|
+
--global-nav-height: 48px;
|
|
65
|
+
--twisty-size: 1.1rem;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@media (prefers-color-scheme: dark) {
|
|
69
|
+
:root {
|
|
70
|
+
--bg-color: #121212;
|
|
71
|
+
--text-color: #f2f2f2;
|
|
72
|
+
--nav-top-bg: #242424;
|
|
73
|
+
--widget-bg: #242424;
|
|
74
|
+
--widget-border: #3a3a3a;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@media (prefers-color-scheme: light) {
|
|
79
|
+
:root {
|
|
80
|
+
--bg-color: white;
|
|
81
|
+
--text-color: black;
|
|
82
|
+
--nav-top-bg: #f2f2f2;
|
|
83
|
+
--widget-bg: #f2f2f2;
|
|
84
|
+
--widget-border: #ddd;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
body {
|
|
89
|
+
background: var(--bg-color);
|
|
90
|
+
color: var(--text-color);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@media (max-width: 800px) {
|
|
94
|
+
html {
|
|
95
|
+
font-size: 18px;
|
|
96
|
+
/* Prevents zoomed out appearance on mobile */
|
|
97
|
+
-webkit-text-size-adjust: 100%;
|
|
98
|
+
text-size-adjust: 100%;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
/* --------------------------------------------------------------------------
|
|
105
|
+
Chrome: the frame Ursa puts around a document — top nav, side/top menus,
|
|
106
|
+
widgets, search, footer. Scoped to the page minus the article's contents,
|
|
107
|
+
so none of it can reach a document's own markup. `:scope` here is <body>.
|
|
108
|
+
-------------------------------------------------------------------------- */
|
|
109
|
+
@scope (body) to (#main-content > *, article > *, .ursa-unstyled) {
|
|
110
|
+
nav#nav-global {
|
|
111
|
+
background-color: var(--nav-top-bg);
|
|
112
|
+
height: var(--global-nav-height);
|
|
113
|
+
position: fixed;
|
|
114
|
+
top: 0;
|
|
115
|
+
left: 0;
|
|
116
|
+
width: 100vw;
|
|
117
|
+
display: grid;
|
|
118
|
+
grid-template-columns: 1fr var(--article-width) 1fr;
|
|
119
|
+
align-items: center;
|
|
120
|
+
padding: 0 8px;
|
|
121
|
+
box-sizing: border-box;
|
|
122
|
+
z-index: 1001;
|
|
123
|
+
|
|
124
|
+
button.menu-button {
|
|
125
|
+
display: flex;
|
|
126
|
+
align-items: center;
|
|
127
|
+
justify-content: center;
|
|
128
|
+
color: var(--text-color);
|
|
129
|
+
line-height: 1;
|
|
130
|
+
padding: 8px;
|
|
131
|
+
background: none;
|
|
132
|
+
border: none;
|
|
133
|
+
cursor: pointer;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* Three icons live in this button; menu.js says which one is showing by
|
|
137
|
+
putting its name in data-icon. The attribute is on the markup too, so the
|
|
138
|
+
hamburger is up before any script runs. */
|
|
139
|
+
button.menu-button > .ursa-icon {
|
|
140
|
+
display: none;
|
|
141
|
+
}
|
|
142
|
+
button.menu-button[data-icon="menu"] > .ursa-icon[data-icon="menu"],
|
|
143
|
+
button.menu-button[data-icon="close"] > .ursa-icon[data-icon="close"],
|
|
144
|
+
button.menu-button[data-icon="home"] > .ursa-icon[data-icon="home"] {
|
|
145
|
+
display: block;
|
|
146
|
+
}
|
|
147
|
+
button.menu-button:hover {
|
|
148
|
+
opacity: 0.7;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* Left controls: menu button + left-side widgets */
|
|
152
|
+
.nav-left-controls {
|
|
153
|
+
display: flex;
|
|
154
|
+
align-items: center;
|
|
155
|
+
justify-self: start;
|
|
156
|
+
gap: 0;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/* Center container for search and top menu */
|
|
160
|
+
.nav-center {
|
|
161
|
+
width: calc(var(--article-width) + 38px);
|
|
162
|
+
justify-self: center;
|
|
163
|
+
position: relative;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.search-wrapper {
|
|
167
|
+
position: relative;
|
|
168
|
+
width: 100%;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
input#global-search {
|
|
172
|
+
width: 100%;
|
|
173
|
+
height: calc(var(--global-nav-height) - 16px);
|
|
174
|
+
border-radius: 5px;
|
|
175
|
+
background: rgba(0,0,0,0.25);
|
|
176
|
+
color: var(--text-color);
|
|
177
|
+
border-width: 0px;
|
|
178
|
+
padding: 0 2.5rem 0 1rem;
|
|
179
|
+
box-sizing: border-box;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.search-clear-button {
|
|
183
|
+
position: absolute;
|
|
184
|
+
right: 8px;
|
|
185
|
+
top: 50%;
|
|
186
|
+
transform: translateY(-50%);
|
|
187
|
+
background: none;
|
|
188
|
+
border: none;
|
|
189
|
+
color: var(--text-color);
|
|
190
|
+
font-size: 1.25rem;
|
|
191
|
+
line-height: 1;
|
|
192
|
+
cursor: pointer;
|
|
193
|
+
padding: 4px 8px;
|
|
194
|
+
opacity: 0.6;
|
|
195
|
+
transition: opacity 0.2s ease;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.search-clear-button:hover {
|
|
199
|
+
opacity: 1;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.search-clear-button.hidden {
|
|
203
|
+
display: none;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/* ==========================================
|
|
208
|
+
WIDGET SYSTEM STYLES
|
|
209
|
+
Nav widgets (TOC, Search, Profile, Recent Activity)
|
|
210
|
+
========================================== */
|
|
211
|
+
|
|
212
|
+
/* Widget bar in the nav right column */
|
|
213
|
+
nav#nav-global .nav-right-controls {
|
|
214
|
+
display: flex;
|
|
215
|
+
align-items: center;
|
|
216
|
+
justify-self: end;
|
|
217
|
+
gap: 0;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.widget-bar {
|
|
221
|
+
display: flex;
|
|
222
|
+
align-items: center;
|
|
223
|
+
gap: 0;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/* Ursa update indicator (loading spinner in nav bar) */
|
|
227
|
+
.ursa-update-indicator {
|
|
228
|
+
display: none;
|
|
229
|
+
align-items: center;
|
|
230
|
+
justify-content: center;
|
|
231
|
+
width: var(--global-nav-height);
|
|
232
|
+
height: var(--global-nav-height);
|
|
233
|
+
opacity: 0.7;
|
|
234
|
+
}
|
|
235
|
+
.ursa-spinner {
|
|
236
|
+
width: 14px;
|
|
237
|
+
height: 14px;
|
|
238
|
+
border: 2px solid rgba(128, 128, 128, 0.3);
|
|
239
|
+
border-top-color: rgba(128, 128, 128, 0.8);
|
|
240
|
+
border-radius: 50%;
|
|
241
|
+
animation: ursa-spin 0.8s linear infinite;
|
|
242
|
+
}
|
|
243
|
+
.ursa-update-gray .ursa-spinner {
|
|
244
|
+
border-color: rgba(128, 128, 128, 0.3);
|
|
245
|
+
border-top-color: rgba(128, 128, 128, 0.8);
|
|
246
|
+
}
|
|
247
|
+
.ursa-update-green .ursa-spinner {
|
|
248
|
+
border-color: rgba(76, 175, 80, 0.3);
|
|
249
|
+
border-top-color: rgba(76, 175, 80, 0.9);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.widget-button {
|
|
253
|
+
display: flex;
|
|
254
|
+
align-items: center;
|
|
255
|
+
justify-content: center;
|
|
256
|
+
background: none;
|
|
257
|
+
border: none;
|
|
258
|
+
color: var(--text-color);
|
|
259
|
+
font-size: 1.1rem;
|
|
260
|
+
width: var(--global-nav-height);
|
|
261
|
+
height: var(--global-nav-height);
|
|
262
|
+
cursor: pointer;
|
|
263
|
+
opacity: 0.7;
|
|
264
|
+
transition: opacity 0.15s ease, background-color 0.15s ease;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.widget-button:hover {
|
|
268
|
+
opacity: 1;
|
|
269
|
+
background-color: rgba(128, 128, 128, 0.15);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.widget-button.active {
|
|
273
|
+
opacity: 1;
|
|
274
|
+
background-color: var(--widget-bg);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.widget-icon {
|
|
278
|
+
pointer-events: none;
|
|
279
|
+
display: flex;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/* Tabler's outline icons, inlined in index.html. Everything the whole set
|
|
283
|
+
shares is here rather than repeated as presentation attributes on each of
|
|
284
|
+
them — which also means a theme can restyle them as CSS, and that they take
|
|
285
|
+
their colour from whatever the button they sit in is using. */
|
|
286
|
+
.ursa-icon {
|
|
287
|
+
width: 20px;
|
|
288
|
+
height: 20px;
|
|
289
|
+
fill: none;
|
|
290
|
+
stroke: currentColor;
|
|
291
|
+
stroke-width: 2;
|
|
292
|
+
stroke-linecap: round;
|
|
293
|
+
stroke-linejoin: round;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/* Widget dropdown panel (right-side, default) */
|
|
297
|
+
.widget-dropdown {
|
|
298
|
+
position: fixed;
|
|
299
|
+
top: var(--global-nav-height);
|
|
300
|
+
right: 0;
|
|
301
|
+
width: min(420px, 100vw);
|
|
302
|
+
max-height: calc(100vh - var(--global-nav-height));
|
|
303
|
+
overflow-y: auto;
|
|
304
|
+
background: var(--widget-bg);
|
|
305
|
+
border-left: 1px solid var(--widget-border);
|
|
306
|
+
border-bottom: 1px solid var(--widget-border);
|
|
307
|
+
box-shadow: -2px 4px 12px rgba(0, 0, 0, 0.2);
|
|
308
|
+
z-index: 1100;
|
|
309
|
+
transition: opacity 0.15s ease;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/* Widget dropdown panel (left-side) */
|
|
313
|
+
.widget-dropdown.widget-dropdown-left {
|
|
314
|
+
right: auto;
|
|
315
|
+
left: 0;
|
|
316
|
+
border-left: none;
|
|
317
|
+
border-right: 1px solid var(--widget-border);
|
|
318
|
+
box-shadow: 2px 4px 12px rgba(0, 0, 0, 0.2);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.widget-dropdown.hidden {
|
|
322
|
+
display: none;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/* Widget header with title and close button */
|
|
326
|
+
.widget-header {
|
|
327
|
+
display: flex;
|
|
328
|
+
align-items: center;
|
|
329
|
+
justify-content: space-between;
|
|
330
|
+
padding: 0.5rem 0.75rem;
|
|
331
|
+
border-bottom: 1px solid var(--widget-border);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
.widget-header-title {
|
|
335
|
+
font-weight: 600;
|
|
336
|
+
font-size: 0.85rem;
|
|
337
|
+
text-transform: uppercase;
|
|
338
|
+
letter-spacing: 0.03em;
|
|
339
|
+
opacity: 0.7;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.widget-close-btn {
|
|
343
|
+
background: none;
|
|
344
|
+
border: none;
|
|
345
|
+
color: var(--text-color);
|
|
346
|
+
font-size: 1rem;
|
|
347
|
+
cursor: pointer;
|
|
348
|
+
opacity: 0.5;
|
|
349
|
+
padding: 4px 8px;
|
|
350
|
+
line-height: 1;
|
|
351
|
+
border-radius: 3px;
|
|
352
|
+
transition: opacity 0.15s ease, background-color 0.15s ease;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.widget-close-btn:hover {
|
|
356
|
+
opacity: 1;
|
|
357
|
+
background-color: rgba(128, 128, 128, 0.2);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/* Widget content panels — only the active one is visible */
|
|
361
|
+
.widget-content {
|
|
362
|
+
display: none;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.widget-content.active {
|
|
366
|
+
display: block;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/* The TOC panel.
|
|
370
|
+
|
|
371
|
+
Every other widget is a drawer: you pull it open, read it, and shut it
|
|
372
|
+
again, so an opaque slab pinned to the corner of the screen is the right
|
|
373
|
+
shape for one. The TOC is not that — it is open more or less permanently
|
|
374
|
+
(see defaultOpen in widgets.js), and a permanent opaque slab overlapping
|
|
375
|
+
the article is just a piece of the page missing.
|
|
376
|
+
|
|
377
|
+
So when the right-hand dropdown is showing the TOC it stops being a drawer
|
|
378
|
+
and becomes a panel standing in the margin beside the article: translucent,
|
|
379
|
+
hairline-bordered, and narrow enough that it never reaches the text.
|
|
380
|
+
|
|
381
|
+
The width is the margin itself, less a gutter at each end. `50%` on a fixed
|
|
382
|
+
element is half the viewport *excluding* the scrollbar, which is what the
|
|
383
|
+
centred article is centred in — 100vw includes the scrollbar and would put
|
|
384
|
+
the panel a few pixels into the text. --ursa-toc-max is only a ceiling, for
|
|
385
|
+
very wide screens where the whole margin would be an absurd measure to read
|
|
386
|
+
a list of headings across. */
|
|
387
|
+
.widget-dropdown[data-active-widget="toc"] {
|
|
388
|
+
--ursa-toc-gutter: 1rem;
|
|
389
|
+
--ursa-toc-max: 20rem;
|
|
390
|
+
|
|
391
|
+
top: calc(var(--global-nav-height) + var(--ursa-toc-gutter));
|
|
392
|
+
right: var(--ursa-toc-gutter);
|
|
393
|
+
width: min(
|
|
394
|
+
var(--ursa-toc-max),
|
|
395
|
+
calc(50% - var(--article-width) / 2 - var(--ursa-toc-gutter) * 2)
|
|
396
|
+
);
|
|
397
|
+
max-height: calc(100vh - var(--global-nav-height) - var(--ursa-toc-gutter) * 2);
|
|
398
|
+
|
|
399
|
+
/* A translucent version of whatever the theme's panel colour is, so a site
|
|
400
|
+
that sets --widget-bg gets its own tint here for free. */
|
|
401
|
+
background: color-mix(in srgb, var(--widget-bg) 48%, transparent);
|
|
402
|
+
backdrop-filter: blur(5px);
|
|
403
|
+
-webkit-backdrop-filter: blur(5px);
|
|
404
|
+
border: 1px solid var(--widget-border);
|
|
405
|
+
border-radius: 8px;
|
|
406
|
+
box-shadow: none;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/* Below this there is no margin worth standing in: a panel there would be a
|
|
410
|
+
column of broken words, or would have to sit on top of the article. So the
|
|
411
|
+
TOC changes shape instead of going away — the same list, laid on its side,
|
|
412
|
+
one line tall, along the bottom of the viewport. It is still the same
|
|
413
|
+
widget: the same button opens and closes it, and toc-generator.js is what
|
|
414
|
+
keeps the current section in the middle of it.
|
|
415
|
+
|
|
416
|
+
The figure is --article-width (50rem = 800px by default) plus room for a
|
|
417
|
+
usable panel either side of it. It has to be a plain length because media
|
|
418
|
+
queries cannot read custom properties; a site that moves --article-width
|
|
419
|
+
a long way will want to move this with it. */
|
|
420
|
+
@media (max-width: 1280px) {
|
|
421
|
+
.widget-dropdown[data-active-widget="toc"] {
|
|
422
|
+
/* How much of each end is fade rather than solid. The list carries the
|
|
423
|
+
same figure as padding, so at either extreme of the scroll the first
|
|
424
|
+
and last entries sit past the fade and are not dimmed by it — the fade
|
|
425
|
+
only ever covers the overrun. */
|
|
426
|
+
--ursa-toc-fade: 1.5rem;
|
|
427
|
+
|
|
428
|
+
top: auto;
|
|
429
|
+
bottom: 0;
|
|
430
|
+
left: 0;
|
|
431
|
+
right: 0;
|
|
432
|
+
width: auto;
|
|
433
|
+
max-height: none;
|
|
434
|
+
border: none;
|
|
435
|
+
border-top: 1px solid var(--widget-border);
|
|
436
|
+
border-radius: 0;
|
|
437
|
+
overflow: hidden;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/* The title and close button are drawer furniture; the strip is one line
|
|
441
|
+
tall and the nav button is what closes it. */
|
|
442
|
+
.widget-dropdown[data-active-widget="toc"] .widget-header {
|
|
443
|
+
display: none;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
.widget-dropdown[data-active-widget="toc"] #widget-content-toc {
|
|
447
|
+
padding: 0;
|
|
448
|
+
/* Scrolled by script, and by hand: a drag or a swipe along the strip
|
|
449
|
+
works, which is worth having on the touch screens this width mostly
|
|
450
|
+
means. The scrollbar itself would be half the height of the strip. */
|
|
451
|
+
overflow-x: auto;
|
|
452
|
+
overflow-y: hidden;
|
|
453
|
+
scrollbar-width: none;
|
|
454
|
+
-webkit-mask-image: linear-gradient(to right,
|
|
455
|
+
transparent 0,
|
|
456
|
+
#000 var(--ursa-toc-fade),
|
|
457
|
+
#000 calc(100% - var(--ursa-toc-fade)),
|
|
458
|
+
transparent 100%);
|
|
459
|
+
mask-image: linear-gradient(to right,
|
|
460
|
+
transparent 0,
|
|
461
|
+
#000 var(--ursa-toc-fade),
|
|
462
|
+
#000 calc(100% - var(--ursa-toc-fade)),
|
|
463
|
+
transparent 100%);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
.widget-dropdown[data-active-widget="toc"] #widget-content-toc::-webkit-scrollbar {
|
|
467
|
+
display: none;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
.widget-dropdown[data-active-widget="toc"] #widget-content-toc ul {
|
|
471
|
+
display: flex;
|
|
472
|
+
flex-wrap: nowrap;
|
|
473
|
+
width: max-content;
|
|
474
|
+
padding-inline: var(--ursa-toc-fade);
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
.widget-dropdown[data-active-widget="toc"] #widget-content-toc li {
|
|
478
|
+
margin-bottom: 0;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/* Every heading level is one entry in a line, so the left-hand indent that
|
|
482
|
+
shows depth in the panel has nothing to indent from here. Depth is told
|
|
483
|
+
by weight and size instead, and the active marker moves from the left
|
|
484
|
+
edge to underneath. */
|
|
485
|
+
.widget-dropdown[data-active-widget="toc"] #widget-content-toc li > a {
|
|
486
|
+
white-space: nowrap;
|
|
487
|
+
padding: 0.4rem 0.7rem;
|
|
488
|
+
border-left: none;
|
|
489
|
+
border-bottom: 2px solid transparent;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
.widget-dropdown[data-active-widget="toc"] #widget-content-toc li > a:hover {
|
|
493
|
+
border-left-color: transparent;
|
|
494
|
+
border-bottom-color: var(--text-color);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
.widget-dropdown[data-active-widget="toc"] #widget-content-toc li > a.active {
|
|
498
|
+
border-left-color: transparent;
|
|
499
|
+
border-bottom-color: aqua;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
.widget-dropdown[data-active-widget="toc"] #widget-content-toc li.toc-h1 > a { padding-left: 0.7rem; }
|
|
503
|
+
.widget-dropdown[data-active-widget="toc"] #widget-content-toc li.toc-h2 > a { padding-left: 0.7rem; }
|
|
504
|
+
.widget-dropdown[data-active-widget="toc"] #widget-content-toc li.toc-h3 > a { padding-left: 0.7rem; }
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/* --- TOC Widget --- */
|
|
508
|
+
#widget-content-toc {
|
|
509
|
+
padding: 0.5rem 0;
|
|
510
|
+
|
|
511
|
+
ul {
|
|
512
|
+
list-style: none;
|
|
513
|
+
margin: 0;
|
|
514
|
+
padding: 0;
|
|
515
|
+
|
|
516
|
+
li {
|
|
517
|
+
margin-bottom: 0.15rem;
|
|
518
|
+
padding: 0;
|
|
519
|
+
|
|
520
|
+
> a {
|
|
521
|
+
text-decoration: none;
|
|
522
|
+
color: var(--text-color);
|
|
523
|
+
opacity: 0.75;
|
|
524
|
+
display: block;
|
|
525
|
+
padding: 0.3rem 1rem;
|
|
526
|
+
border-left: 2px solid transparent;
|
|
527
|
+
transition: all 0.2s ease;
|
|
528
|
+
font-size: 0.9rem;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
> a:hover {
|
|
532
|
+
opacity: 1;
|
|
533
|
+
border-left-color: var(--text-color);
|
|
534
|
+
background-color: rgba(128, 128, 128, 0.1);
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
> a.active {
|
|
538
|
+
opacity: 1;
|
|
539
|
+
border-left-color: aqua;
|
|
540
|
+
background-color: rgba(0, 255, 255, 0.1);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/* Indent nested headings */
|
|
544
|
+
&.toc-h1 > a {
|
|
545
|
+
padding-left: 1rem;
|
|
546
|
+
font-weight: 600;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
&.toc-h2 > a {
|
|
550
|
+
padding-left: 1.5rem;
|
|
551
|
+
font-size: 0.85rem;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
&.toc-h3 > a {
|
|
555
|
+
padding-left: 2rem;
|
|
556
|
+
font-size: 0.8rem;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/* --- Search Widget --- */
|
|
563
|
+
.widget-search-wrapper {
|
|
564
|
+
padding: 0.5rem;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
.widget-search-input {
|
|
568
|
+
width: 100%;
|
|
569
|
+
height: 40px;
|
|
570
|
+
border-radius: 5px;
|
|
571
|
+
background: rgba(0, 0, 0, 0.15);
|
|
572
|
+
color: var(--text-color);
|
|
573
|
+
border: 1px solid var(--widget-border);
|
|
574
|
+
padding: 0 1rem;
|
|
575
|
+
box-sizing: border-box;
|
|
576
|
+
font-size: 1rem;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
.widget-search-input:focus {
|
|
580
|
+
outline: none;
|
|
581
|
+
border-color: aqua;
|
|
582
|
+
box-shadow: 0 0 0 2px rgba(0, 255, 255, 0.2);
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
.widget-search-results {
|
|
586
|
+
max-height: calc(100vh - var(--global-nav-height) - 80px);
|
|
587
|
+
overflow-y: auto;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
.widget-search-results .search-result-item {
|
|
591
|
+
padding: 10px 12px;
|
|
592
|
+
border-bottom: 1px solid var(--widget-border);
|
|
593
|
+
cursor: pointer;
|
|
594
|
+
transition: background-color 0.15s ease;
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
.widget-search-results .search-result-item:last-child {
|
|
598
|
+
border-bottom: none;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
.widget-search-results .search-result-item:hover,
|
|
602
|
+
.widget-search-results .search-result-item.selected {
|
|
603
|
+
background-color: rgba(128, 128, 128, 0.15);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
.widget-search-results .search-result-title {
|
|
607
|
+
font-weight: 600;
|
|
608
|
+
margin-bottom: 2px;
|
|
609
|
+
color: var(--text-color);
|
|
610
|
+
font-size: 0.9rem;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
.widget-search-results .search-result-path {
|
|
614
|
+
font-size: 0.8rem;
|
|
615
|
+
color: var(--text-color);
|
|
616
|
+
opacity: 0.6;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
.widget-search-results .search-result-message {
|
|
620
|
+
padding: 12px;
|
|
621
|
+
text-align: center;
|
|
622
|
+
color: var(--text-color);
|
|
623
|
+
opacity: 0.6;
|
|
624
|
+
font-style: italic;
|
|
625
|
+
font-size: 0.85rem;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
.widget-search-results .search-section-header {
|
|
629
|
+
padding: 6px 12px;
|
|
630
|
+
font-size: 0.7em;
|
|
631
|
+
font-weight: 600;
|
|
632
|
+
text-transform: uppercase;
|
|
633
|
+
letter-spacing: 0.5px;
|
|
634
|
+
color: var(--text-color);
|
|
635
|
+
opacity: 0.5;
|
|
636
|
+
background-color: rgba(128, 128, 128, 0.1);
|
|
637
|
+
border-bottom: 1px solid var(--widget-border);
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
/* --- Profile Widget --- */
|
|
641
|
+
.widget-profile-placeholder {
|
|
642
|
+
display: flex;
|
|
643
|
+
flex-direction: column;
|
|
644
|
+
align-items: center;
|
|
645
|
+
padding: 2rem 1rem;
|
|
646
|
+
text-align: center;
|
|
647
|
+
color: var(--text-color);
|
|
648
|
+
opacity: 0.7;
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
.widget-profile-avatar {
|
|
652
|
+
font-size: 3rem;
|
|
653
|
+
margin-bottom: 1rem;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
.widget-profile-placeholder p {
|
|
657
|
+
margin: 0.5rem 0;
|
|
658
|
+
font-size: 0.9rem;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
.widget-profile-signin {
|
|
662
|
+
margin-top: 0.5rem;
|
|
663
|
+
padding: 8px 24px;
|
|
664
|
+
background: var(--nav-top-bg);
|
|
665
|
+
border: 1px solid var(--widget-border);
|
|
666
|
+
color: var(--text-color);
|
|
667
|
+
border-radius: 4px;
|
|
668
|
+
cursor: not-allowed;
|
|
669
|
+
opacity: 0.5;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
.widget-profile-note {
|
|
673
|
+
font-size: 0.75rem;
|
|
674
|
+
opacity: 0.5;
|
|
675
|
+
font-style: italic;
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
/* --- Recent Activity Widget --- */
|
|
679
|
+
.recent-activity-list {
|
|
680
|
+
padding: 0;
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
.recent-activity-loading,
|
|
684
|
+
.recent-activity-empty {
|
|
685
|
+
padding: 1.5rem 1rem;
|
|
686
|
+
text-align: center;
|
|
687
|
+
color: var(--text-color);
|
|
688
|
+
opacity: 0.6;
|
|
689
|
+
font-style: italic;
|
|
690
|
+
font-size: 0.85rem;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
.recent-activity-items {
|
|
694
|
+
list-style: none;
|
|
695
|
+
margin: 0;
|
|
696
|
+
padding: 0;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
.recent-activity-item {
|
|
700
|
+
display: flex;
|
|
701
|
+
align-items: baseline;
|
|
702
|
+
justify-content: space-between;
|
|
703
|
+
gap: 0.75rem;
|
|
704
|
+
padding: 0.5rem 0.75rem;
|
|
705
|
+
border-bottom: 1px solid var(--widget-border);
|
|
706
|
+
transition: background-color 0.15s ease;
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
.recent-activity-item:last-child {
|
|
710
|
+
border-bottom: none;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
.recent-activity-item:hover {
|
|
714
|
+
background-color: rgba(128, 128, 128, 0.1);
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
.recent-activity-link {
|
|
718
|
+
color: var(--text-color);
|
|
719
|
+
text-decoration: none;
|
|
720
|
+
font-size: 0.9rem;
|
|
721
|
+
flex: 1;
|
|
722
|
+
min-width: 0;
|
|
723
|
+
overflow: hidden;
|
|
724
|
+
text-overflow: ellipsis;
|
|
725
|
+
white-space: nowrap;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
.recent-activity-link:hover {
|
|
729
|
+
text-decoration: underline;
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
.recent-activity-time {
|
|
733
|
+
font-size: 0.75rem;
|
|
734
|
+
color: var(--text-color);
|
|
735
|
+
opacity: 0.5;
|
|
736
|
+
white-space: nowrap;
|
|
737
|
+
flex-shrink: 0;
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
/* Suggested Content Widget Styles */
|
|
741
|
+
.suggested-content-list {
|
|
742
|
+
padding: 0;
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
.suggested-empty {
|
|
746
|
+
padding: 1rem 0.75rem;
|
|
747
|
+
text-align: center;
|
|
748
|
+
color: var(--text-color);
|
|
749
|
+
opacity: 0.6;
|
|
750
|
+
font-style: italic;
|
|
751
|
+
font-size: 0.85rem;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
.suggested-items {
|
|
755
|
+
list-style: none;
|
|
756
|
+
margin: 0;
|
|
757
|
+
padding: 0;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
.suggested-item {
|
|
761
|
+
display: flex;
|
|
762
|
+
align-items: baseline;
|
|
763
|
+
justify-content: space-between;
|
|
764
|
+
gap: 0.75rem;
|
|
765
|
+
padding: 0.5rem 0.75rem;
|
|
766
|
+
border-bottom: 1px solid var(--widget-border);
|
|
767
|
+
transition: background-color 0.15s ease;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
.suggested-item:last-child {
|
|
771
|
+
border-bottom: none;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.suggested-item:hover {
|
|
775
|
+
background-color: rgba(128, 128, 128, 0.1);
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
.suggested-link {
|
|
779
|
+
color: var(--text-color);
|
|
780
|
+
text-decoration: none;
|
|
781
|
+
font-size: 0.9rem;
|
|
782
|
+
flex: 1;
|
|
783
|
+
min-width: 0;
|
|
784
|
+
overflow: hidden;
|
|
785
|
+
text-overflow: ellipsis;
|
|
786
|
+
white-space: nowrap;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
.suggested-link:hover {
|
|
790
|
+
text-decoration: underline;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
.suggested-meta {
|
|
794
|
+
font-size: 0.75rem;
|
|
795
|
+
color: var(--text-color);
|
|
796
|
+
opacity: 0.5;
|
|
797
|
+
white-space: nowrap;
|
|
798
|
+
flex-shrink: 0;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
/* Search functionality styles */
|
|
802
|
+
.search-results {
|
|
803
|
+
position: fixed;
|
|
804
|
+
top: calc(var(--global-nav-height) + 4px);
|
|
805
|
+
left: 50%;
|
|
806
|
+
transform: translateX(-50%);
|
|
807
|
+
width: min(var(--article-width), calc(100vw - 100px));
|
|
808
|
+
background: var(--bg-color);
|
|
809
|
+
border: 1px solid var(--nav-top-bg);
|
|
810
|
+
border-radius: 5px;
|
|
811
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
812
|
+
max-height: 400px;
|
|
813
|
+
overflow-y: auto;
|
|
814
|
+
z-index: 1002;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
.search-results.hidden {
|
|
818
|
+
display: none;
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
.search-result-item {
|
|
822
|
+
padding: 12px 16px;
|
|
823
|
+
border-bottom: 1px solid var(--nav-top-bg);
|
|
824
|
+
cursor: pointer;
|
|
825
|
+
transition: background-color 0.2s ease;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
.search-result-item:last-child {
|
|
829
|
+
border-bottom: none;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
.search-result-item:hover,
|
|
833
|
+
.search-result-item.selected {
|
|
834
|
+
background-color: var(--nav-top-bg);
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
.search-result-title {
|
|
838
|
+
font-weight: 600;
|
|
839
|
+
margin-bottom: 4px;
|
|
840
|
+
color: var(--text-color);
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
.search-result-path {
|
|
844
|
+
font-size: 0.85em;
|
|
845
|
+
color: var(--text-color);
|
|
846
|
+
opacity: 0.7;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
.search-result-message {
|
|
850
|
+
padding: 16px;
|
|
851
|
+
text-align: center;
|
|
852
|
+
color: var(--text-color);
|
|
853
|
+
opacity: 0.7;
|
|
854
|
+
font-style: italic;
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
/* Search section styling (for combined path/full-text results) */
|
|
858
|
+
.search-section {
|
|
859
|
+
border-bottom: 1px solid var(--nav-top-bg);
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
.search-section:last-child {
|
|
863
|
+
border-bottom: none;
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
.search-section-header {
|
|
867
|
+
padding: 8px 16px;
|
|
868
|
+
font-size: 0.75em;
|
|
869
|
+
font-weight: 600;
|
|
870
|
+
text-transform: uppercase;
|
|
871
|
+
letter-spacing: 0.5px;
|
|
872
|
+
color: var(--text-color);
|
|
873
|
+
opacity: 0.6;
|
|
874
|
+
background-color: color-mix(in srgb, var(--nav-top-bg) 50%, transparent);
|
|
875
|
+
border-bottom: 1px solid var(--nav-top-bg);
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
.search-show-more {
|
|
879
|
+
display: block;
|
|
880
|
+
width: 100%;
|
|
881
|
+
padding: 8px 16px;
|
|
882
|
+
background: transparent;
|
|
883
|
+
border: none;
|
|
884
|
+
color: var(--link-color);
|
|
885
|
+
font-size: 0.85em;
|
|
886
|
+
cursor: pointer;
|
|
887
|
+
text-align: center;
|
|
888
|
+
transition: background-color 0.2s ease;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
.search-show-more:hover {
|
|
892
|
+
background-color: var(--nav-top-bg);
|
|
893
|
+
text-decoration: underline;
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
/* ==========================================
|
|
897
|
+
TOP NAVIGATION MENU STYLES
|
|
898
|
+
When body[data-menu-position="top"] is set
|
|
899
|
+
========================================== */
|
|
900
|
+
|
|
901
|
+
/* Top menu container - positioning handled by parent .nav-center */
|
|
902
|
+
nav#nav-main-top {
|
|
903
|
+
display: none;
|
|
904
|
+
width: 100%;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
/* Show top menu when position is top */
|
|
908
|
+
:scope[data-menu-position="top"] nav#nav-main-top {
|
|
909
|
+
display: flex;
|
|
910
|
+
align-items: center;
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
/* Hide inline search when top menu is present — widget handles search */
|
|
914
|
+
:scope[data-menu-position="top"] nav#nav-global .search-wrapper-inline {
|
|
915
|
+
display: none;
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
/* Hide side nav when top menu is active */
|
|
919
|
+
:scope[data-menu-position="top"] nav#nav-main {
|
|
920
|
+
display: none;
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
|
|
924
|
+
/* Update nav-global grid to accommodate top menu - keep search+avatar together on right */
|
|
925
|
+
:scope[data-menu-position="top"] nav#nav-global {
|
|
926
|
+
grid-template-columns: 1fr var(--article-width) 1fr;
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
/* Top-level menu list */
|
|
930
|
+
nav#nav-main-top .top-menu-level {
|
|
931
|
+
display: flex;
|
|
932
|
+
list-style: none;
|
|
933
|
+
margin: 0;
|
|
934
|
+
padding: 0;
|
|
935
|
+
gap: 0;
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
/* Top-level menu items */
|
|
939
|
+
nav#nav-main-top .top-menu-item {
|
|
940
|
+
position: relative;
|
|
941
|
+
padding: 0;
|
|
942
|
+
margin: 0;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
nav#nav-main-top .top-menu-label {
|
|
946
|
+
display: block;
|
|
947
|
+
padding: 0px 16px;
|
|
948
|
+
line-height: var(--global-nav-height);
|
|
949
|
+
color: var(--text-color);
|
|
950
|
+
text-decoration: none;
|
|
951
|
+
white-space: nowrap;
|
|
952
|
+
cursor: pointer;
|
|
953
|
+
transition: background-color 0.15s ease;
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
nav#nav-main-top .top-menu-label:hover {
|
|
957
|
+
background-color: rgba(255, 255, 255, 0.1);
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
nav#nav-main-top a.top-menu-label:hover {
|
|
961
|
+
text-decoration: none;
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
/* Dropdown indicator for items with children */
|
|
965
|
+
nav#nav-main-top .top-menu-item.has-dropdown > .top-menu-label::after {
|
|
966
|
+
content: '▼';
|
|
967
|
+
font-size: 0.4em;
|
|
968
|
+
margin-left: 6px;
|
|
969
|
+
opacity: 0.6;
|
|
970
|
+
vertical-align: bottom;
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
/* Use widget-bg for dropdown/flyout backgrounds (shared CSS var) */
|
|
974
|
+
nav#nav-main-top .top-menu-dropdown {
|
|
975
|
+
display: none;
|
|
976
|
+
position: absolute;
|
|
977
|
+
top: 100%;
|
|
978
|
+
left: 0;
|
|
979
|
+
min-width: 200px;
|
|
980
|
+
max-height: calc(100vh - var(--global-nav-height) - 20px);
|
|
981
|
+
overflow-y: auto;
|
|
982
|
+
background-color: var(--widget-bg);
|
|
983
|
+
border: 1px solid var(--widget-border);
|
|
984
|
+
border-radius: 4px;
|
|
985
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
|
986
|
+
list-style: none;
|
|
987
|
+
margin: 0;
|
|
988
|
+
padding: 0;
|
|
989
|
+
z-index: 1005;
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
/* Show dropdown on hover */
|
|
993
|
+
nav#nav-main-top .top-menu-item.has-dropdown:hover > .top-menu-dropdown {
|
|
994
|
+
display: block;
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
/* Dropdown items */
|
|
998
|
+
nav#nav-main-top .dropdown-item {
|
|
999
|
+
position: relative;
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
nav#nav-main-top .dropdown-label {
|
|
1003
|
+
display: flex;
|
|
1004
|
+
align-items: center;
|
|
1005
|
+
justify-content: space-between;
|
|
1006
|
+
padding: 8px 16px;
|
|
1007
|
+
color: var(--text-color);
|
|
1008
|
+
text-decoration: none;
|
|
1009
|
+
white-space: nowrap;
|
|
1010
|
+
cursor: pointer;
|
|
1011
|
+
transition: background-color 0.15s ease;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
nav#nav-main-top .dropdown-label:hover {
|
|
1015
|
+
background-color: rgba(255, 255, 255, 0.1);
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
nav#nav-main-top a.dropdown-label:hover {
|
|
1019
|
+
text-decoration: none;
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
/* Flyout indicator */
|
|
1023
|
+
nav#nav-main-top .flyout-indicator {
|
|
1024
|
+
font-size: 0.7em;
|
|
1025
|
+
opacity: 0.6;
|
|
1026
|
+
margin-left: 8px;
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
/* Flyout menu (nested children) - uses fixed positioning to avoid clipping by parent overflow */
|
|
1030
|
+
nav#nav-main-top .top-menu-flyout {
|
|
1031
|
+
display: none;
|
|
1032
|
+
position: fixed;
|
|
1033
|
+
min-width: 200px;
|
|
1034
|
+
max-height: calc(100vh - var(--global-nav-height) - 40px);
|
|
1035
|
+
overflow-y: auto;
|
|
1036
|
+
background-color: var(--widget-bg);
|
|
1037
|
+
border: 1px solid var(--widget-border);
|
|
1038
|
+
border-radius: 4px;
|
|
1039
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
|
1040
|
+
list-style: none;
|
|
1041
|
+
margin: 0;
|
|
1042
|
+
padding: 0;
|
|
1043
|
+
z-index: 1006;
|
|
1044
|
+
/* JS will set top/left via inline styles */
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
/* Show flyout on hover - JS handles positioning */
|
|
1048
|
+
nav#nav-main-top .dropdown-item.has-flyout:hover > .top-menu-flyout {
|
|
1049
|
+
display: block;
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
nav#nav-main {
|
|
1053
|
+
position: fixed;
|
|
1054
|
+
top: calc(var(--global-nav-height));
|
|
1055
|
+
left: 0;
|
|
1056
|
+
width: 260px;
|
|
1057
|
+
max-height: calc(100vh - var(--global-nav-height));
|
|
1058
|
+
overflow: hidden;
|
|
1059
|
+
padding: 0;
|
|
1060
|
+
font-size: 0.85rem;
|
|
1061
|
+
transition: transform 0.2s ease;
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
/* Collapsed state for desktop - slide off screen */
|
|
1065
|
+
nav#nav-main.collapsed {
|
|
1066
|
+
transform: translateX(-100%);
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
nav#nav-main {
|
|
1070
|
+
/* Column-based menu styles */
|
|
1071
|
+
|
|
1072
|
+
.menu-loading {
|
|
1073
|
+
padding: 1rem;
|
|
1074
|
+
opacity: 0.6;
|
|
1075
|
+
text-align: center;
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
/* Container that clips the columns */
|
|
1079
|
+
.menu-columns-container {
|
|
1080
|
+
width: 100%;
|
|
1081
|
+
height: calc(100vh - var(--global-nav-height) - 40px);
|
|
1082
|
+
overflow: hidden;
|
|
1083
|
+
position: relative;
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
/* Wrapper that holds all columns and transforms for scrolling */
|
|
1087
|
+
.menu-columns-wrapper {
|
|
1088
|
+
display: flex;
|
|
1089
|
+
height: 100%;
|
|
1090
|
+
min-height: 0; /* Allow flex children to shrink */
|
|
1091
|
+
transition: transform 0.25s ease-out;
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
/* Individual column */
|
|
1095
|
+
.menu-column {
|
|
1096
|
+
width: 130px;
|
|
1097
|
+
min-width: 130px;
|
|
1098
|
+
flex-shrink: 0;
|
|
1099
|
+
height: 100%;
|
|
1100
|
+
min-height: 0; /* Allow flex child to shrink and enable scrolling */
|
|
1101
|
+
overflow-y: auto;
|
|
1102
|
+
overflow-x: hidden;
|
|
1103
|
+
border-right: 1px solid rgba(128, 128, 128, 0.15);
|
|
1104
|
+
|
|
1105
|
+
/* Scrollbar styling */
|
|
1106
|
+
&::-webkit-scrollbar {
|
|
1107
|
+
width: 4px;
|
|
1108
|
+
}
|
|
1109
|
+
&::-webkit-scrollbar-track {
|
|
1110
|
+
background: transparent;
|
|
1111
|
+
}
|
|
1112
|
+
&::-webkit-scrollbar-thumb {
|
|
1113
|
+
background: rgba(128, 128, 128, 0.2);
|
|
1114
|
+
border-radius: 2px;
|
|
1115
|
+
}
|
|
1116
|
+
&::-webkit-scrollbar-thumb:hover {
|
|
1117
|
+
background: rgba(128, 128, 128, 0.4);
|
|
1118
|
+
}
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
.menu-column:last-child {
|
|
1122
|
+
border-right: none;
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
/* Column list */
|
|
1126
|
+
.menu-column-list {
|
|
1127
|
+
list-style: none;
|
|
1128
|
+
margin: 0;
|
|
1129
|
+
padding: 4px 0;
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
/* Column item */
|
|
1133
|
+
.menu-column-item {
|
|
1134
|
+
margin: 0;
|
|
1135
|
+
padding: 0;
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
.menu-column-item-row {
|
|
1139
|
+
display: flex;
|
|
1140
|
+
align-items: center;
|
|
1141
|
+
padding: 6px 8px;
|
|
1142
|
+
margin: 1px 4px;
|
|
1143
|
+
border-radius: 4px;
|
|
1144
|
+
cursor: pointer;
|
|
1145
|
+
transition: background-color 0.15s ease;
|
|
1146
|
+
gap: 4px;
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
.menu-column-item-row:hover {
|
|
1150
|
+
background-color: rgba(128, 128, 128, 0.15);
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
/* Label styling */
|
|
1154
|
+
.menu-column-label {
|
|
1155
|
+
flex: 1;
|
|
1156
|
+
text-decoration: none;
|
|
1157
|
+
color: var(--text-color);
|
|
1158
|
+
opacity: 0.85;
|
|
1159
|
+
white-space: nowrap;
|
|
1160
|
+
overflow: hidden;
|
|
1161
|
+
text-overflow: ellipsis;
|
|
1162
|
+
font-weight: 400;
|
|
1163
|
+
line-height: 1.3;
|
|
1164
|
+
text-transform: capitalize;
|
|
1165
|
+
font-size: 0.8rem;
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
.menu-column-item-row:hover .menu-column-label {
|
|
1169
|
+
opacity: 1;
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
/* Arrow for folders */
|
|
1173
|
+
.menu-column-arrow {
|
|
1174
|
+
opacity: 0.4;
|
|
1175
|
+
font-size: 12px;
|
|
1176
|
+
flex-shrink: 0;
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
.menu-column-item.has-children .menu-column-item-row:hover .menu-column-arrow {
|
|
1180
|
+
opacity: 0.8;
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
/* Selected item (on path to current doc) */
|
|
1184
|
+
.menu-column-item.selected > .menu-column-item-row {
|
|
1185
|
+
background-color: rgba(128, 128, 128, 0.2);
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
.menu-column-item.selected > .menu-column-item-row .menu-column-label {
|
|
1189
|
+
font-weight: 500;
|
|
1190
|
+
opacity: 1;
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
/* Current page item */
|
|
1194
|
+
.menu-column-item.current-page > .menu-column-item-row {
|
|
1195
|
+
background-color: rgba(0, 255, 255, 0.2);
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
.menu-column-item.current-page > .menu-column-item-row .menu-column-label {
|
|
1199
|
+
font-weight: 600;
|
|
1200
|
+
opacity: 1;
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
/* Index file styling - appears at top of menu with subtle emphasis */
|
|
1204
|
+
.menu-column-item.is-index > .menu-column-item-row {
|
|
1205
|
+
border-bottom: 1px solid rgba(128, 128, 128, 0.15);
|
|
1206
|
+
margin-bottom: 4px;
|
|
1207
|
+
padding-bottom: 8px;
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1210
|
+
.menu-column-item.is-index > .menu-column-item-row .menu-column-label {
|
|
1211
|
+
font-weight: 500;
|
|
1212
|
+
opacity: 0.95;
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
/* Scroll buttons */
|
|
1216
|
+
.menu-scroll-btn {
|
|
1217
|
+
position: absolute;
|
|
1218
|
+
top: 50%;
|
|
1219
|
+
transform: translateY(-50%);
|
|
1220
|
+
width: 24px;
|
|
1221
|
+
height: 48px;
|
|
1222
|
+
background: rgba(0, 0, 0, 0.4);
|
|
1223
|
+
border: none;
|
|
1224
|
+
color: var(--text-color);
|
|
1225
|
+
font-size: 18px;
|
|
1226
|
+
cursor: pointer;
|
|
1227
|
+
z-index: 10;
|
|
1228
|
+
border-radius: 4px;
|
|
1229
|
+
transition: all 0.2s ease;
|
|
1230
|
+
display: flex;
|
|
1231
|
+
align-items: center;
|
|
1232
|
+
justify-content: center;
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
.menu-scroll-btn:hover:not(:disabled) {
|
|
1236
|
+
background: rgba(0, 0, 0, 0.6);
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
.menu-scroll-btn:disabled {
|
|
1240
|
+
cursor: default;
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
.menu-scroll-btn.scroll-left {
|
|
1244
|
+
left: 2px;
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
.menu-scroll-btn.scroll-right {
|
|
1248
|
+
right: 2px;
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
/* Scroll indicator for current doc */
|
|
1252
|
+
.menu-scroll-indicator {
|
|
1253
|
+
position: absolute;
|
|
1254
|
+
bottom: 8px;
|
|
1255
|
+
left: 50%;
|
|
1256
|
+
transform: translateX(-50%);
|
|
1257
|
+
z-index: 10;
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
.menu-scroll-indicator .scroll-to-current {
|
|
1261
|
+
background: rgba(0, 255, 255, 0.3);
|
|
1262
|
+
border: 1px solid rgba(0, 255, 255, 0.5);
|
|
1263
|
+
color: var(--text-color);
|
|
1264
|
+
padding: 4px 12px;
|
|
1265
|
+
border-radius: 12px;
|
|
1266
|
+
font-size: 0.75rem;
|
|
1267
|
+
cursor: pointer;
|
|
1268
|
+
transition: all 0.2s ease;
|
|
1269
|
+
white-space: nowrap;
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1272
|
+
.menu-scroll-indicator .scroll-to-current:hover {
|
|
1273
|
+
background: rgba(0, 255, 255, 0.5);
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
/* Footer styles */
|
|
1278
|
+
footer#site-footer {
|
|
1279
|
+
width: var(--article-width);
|
|
1280
|
+
margin: 3rem auto 2rem auto;
|
|
1281
|
+
padding-top: 2rem;
|
|
1282
|
+
border-top: 1px solid rgba(128, 128, 128, 0.3);
|
|
1283
|
+
text-align: center;
|
|
1284
|
+
|
|
1285
|
+
.footer-content {
|
|
1286
|
+
margin-bottom: 1.5rem;
|
|
1287
|
+
font-size: 0.95rem;
|
|
1288
|
+
opacity: 0.85;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
.footer-meta {
|
|
1292
|
+
font-size: 0.8rem;
|
|
1293
|
+
opacity: 0.6;
|
|
1294
|
+
margin-bottom: 0.5rem;
|
|
1295
|
+
|
|
1296
|
+
a {
|
|
1297
|
+
color: inherit;
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
.footer-copyright {
|
|
1302
|
+
font-size: 0.8rem;
|
|
1303
|
+
opacity: 0.6;
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1307
|
+
@media (max-width: 800px) {
|
|
1308
|
+
footer#site-footer {
|
|
1309
|
+
width: calc(100vw - 2rem);
|
|
1310
|
+
margin: 3rem 1rem 2rem 1rem;
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1313
|
+
|
|
1314
|
+
@media (max-width: 800px) {
|
|
1315
|
+
nav#nav-global {
|
|
1316
|
+
display: flex;
|
|
1317
|
+
|
|
1318
|
+
.search-wrapper {
|
|
1319
|
+
flex: 1;
|
|
1320
|
+
width: auto;
|
|
1321
|
+
max-width: none;
|
|
1322
|
+
margin: 0 8px;
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1325
|
+
input#global-search {
|
|
1326
|
+
width: 100%;
|
|
1327
|
+
}
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
/* On mobile, hide the top menu and show search inline instead */
|
|
1331
|
+
:scope[data-menu-position="top"] nav#nav-main-top {
|
|
1332
|
+
display: none !important;
|
|
1333
|
+
}
|
|
1334
|
+
:scope[data-menu-position="top"] nav#nav-global .search-wrapper-inline {
|
|
1335
|
+
display: block !important;
|
|
1336
|
+
}
|
|
1337
|
+
|
|
1338
|
+
/* Hide widget buttons on mobile — they're accessible via the inline search
|
|
1339
|
+
and mobile menu. The TOC is the exception: its strip presentation was
|
|
1340
|
+
built for a viewport this narrow, so its button stays. An empty
|
|
1341
|
+
.widget-bar is a flex box with no children and takes up no room, so the
|
|
1342
|
+
left-hand bar needs no rule of its own. */
|
|
1343
|
+
.widget-button:not([data-widget="toc"]) {
|
|
1344
|
+
display: none !important;
|
|
1345
|
+
}
|
|
1346
|
+
|
|
1347
|
+
/* Hide widget dropdowns on mobile — except the TOC, which becomes the strip
|
|
1348
|
+
along the bottom of the viewport rather than a drawer over the article. */
|
|
1349
|
+
.widget-dropdown:not([data-active-widget="toc"]) {
|
|
1350
|
+
display: none !important;
|
|
1351
|
+
}
|
|
1352
|
+
|
|
1353
|
+
nav#nav-main {
|
|
1354
|
+
display: none !important;
|
|
1355
|
+
position: fixed;
|
|
1356
|
+
top: var(--global-nav-height);
|
|
1357
|
+
left: 0;
|
|
1358
|
+
width: 100vw;
|
|
1359
|
+
height: calc(100vh - var(--global-nav-height));
|
|
1360
|
+
max-width: none;
|
|
1361
|
+
background: var(--bg-color);
|
|
1362
|
+
z-index: 1000;
|
|
1363
|
+
overflow-y: auto;
|
|
1364
|
+
margin: 0;
|
|
1365
|
+
padding: 0;
|
|
1366
|
+
transform: none; /* Reset desktop transform */
|
|
1367
|
+
}
|
|
1368
|
+
nav#nav-main.active {
|
|
1369
|
+
display: block !important;
|
|
1370
|
+
}
|
|
1371
|
+
nav#nav-main.collapsed {
|
|
1372
|
+
display: none !important;
|
|
1373
|
+
transform: none;
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
/* Mobile menu list styles */
|
|
1377
|
+
nav#nav-main .mobile-menu-list {
|
|
1378
|
+
list-style: none;
|
|
1379
|
+
margin: 0;
|
|
1380
|
+
padding: 0;
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
nav#nav-main .mobile-menu-item {
|
|
1384
|
+
border-bottom: 1px solid rgba(128, 128, 128, 0.15);
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
nav#nav-main .mobile-menu-label {
|
|
1388
|
+
display: block;
|
|
1389
|
+
padding: 14px 20px;
|
|
1390
|
+
color: var(--text-color);
|
|
1391
|
+
text-decoration: none;
|
|
1392
|
+
font-size: 1rem;
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1395
|
+
nav#nav-main a.mobile-menu-label:hover {
|
|
1396
|
+
background-color: rgba(128, 128, 128, 0.1);
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1399
|
+
nav#nav-main span.mobile-menu-label {
|
|
1400
|
+
opacity: 0.5;
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
/* Indent deeper levels */
|
|
1404
|
+
nav#nav-main .mobile-menu-depth-1 .mobile-menu-label { padding-left: 40px; font-size: 0.95rem; }
|
|
1405
|
+
nav#nav-main .mobile-menu-depth-2 .mobile-menu-label { padding-left: 56px; font-size: 0.9rem; }
|
|
1406
|
+
nav#nav-main .mobile-menu-depth-3 .mobile-menu-label { padding-left: 72px; font-size: 0.85rem; }
|
|
1407
|
+
nav#nav-main .mobile-menu-depth-4 .mobile-menu-label { padding-left: 88px; font-size: 0.85rem; }
|
|
1408
|
+
|
|
1409
|
+
/* Current page highlight in mobile menu */
|
|
1410
|
+
nav#nav-main .mobile-menu-current .mobile-menu-label {
|
|
1411
|
+
font-weight: 600;
|
|
1412
|
+
background-color: rgba(0, 255, 255, 0.1);
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
/* Home item styling */
|
|
1416
|
+
nav#nav-main .mobile-menu-home .mobile-menu-label {
|
|
1417
|
+
font-weight: 600;
|
|
1418
|
+
border-bottom: 2px solid rgba(128, 128, 128, 0.25);
|
|
1419
|
+
}
|
|
1420
|
+
|
|
1421
|
+
/* Override desktop indentation for mobile */
|
|
1422
|
+
nav#nav-main > ul > li > ul > li > .menu-item-row,
|
|
1423
|
+
nav#nav-main > ul > li > ul > li > ul > li > .menu-item-row,
|
|
1424
|
+
nav#nav-main > ul > li > ul > li > ul > li > ul > li > .menu-item-row {
|
|
1425
|
+
padding-left: 8px;
|
|
1426
|
+
}
|
|
1427
|
+
}
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
|
|
1431
|
+
/* Breadcrumbs render inside the article but they are Ursa's, not the
|
|
1432
|
+
document's, so they get their own scope and stay out of the layer below:
|
|
1433
|
+
a site's `a { … }` should no more restyle them than it restyles the nav. */
|
|
1434
|
+
@scope (nav.breadcrumbs) {
|
|
1435
|
+
:scope {
|
|
1436
|
+
display: flex;
|
|
1437
|
+
align-items: center;
|
|
1438
|
+
flex-wrap: wrap;
|
|
1439
|
+
gap: 0;
|
|
1440
|
+
font-size: 0.8rem;
|
|
1441
|
+
margin-bottom: 0.25rem;
|
|
1442
|
+
color: var(--text-color);
|
|
1443
|
+
opacity: 0.55;
|
|
1444
|
+
}
|
|
1445
|
+
|
|
1446
|
+
.breadcrumb-link {
|
|
1447
|
+
color: var(--text-color);
|
|
1448
|
+
text-decoration: none;
|
|
1449
|
+
transition: opacity 0.15s ease;
|
|
1450
|
+
}
|
|
1451
|
+
|
|
1452
|
+
.breadcrumb-link:hover {
|
|
1453
|
+
opacity: 1;
|
|
1454
|
+
text-decoration: underline;
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
.breadcrumb-sep {
|
|
1458
|
+
margin: 0 0.4em;
|
|
1459
|
+
opacity: 0.4;
|
|
1460
|
+
font-size: 0.85em;
|
|
1461
|
+
}
|
|
1462
|
+
|
|
1463
|
+
.breadcrumb-current {
|
|
1464
|
+
font-weight: 500;
|
|
1465
|
+
}
|
|
1466
|
+
}
|
|
1467
|
+
|
|
1468
|
+
|
|
1469
|
+
/* --------------------------------------------------------------------------
|
|
1470
|
+
Document content. Layered *and* scoped: layered so site CSS always wins,
|
|
1471
|
+
scoped so these rules never touch the chrome.
|
|
1472
|
+
-------------------------------------------------------------------------- */
|
|
1473
|
+
@layer ursa.content {
|
|
1474
|
+
|
|
1475
|
+
/* Typography and flow for any template's article body. */
|
|
1476
|
+
@scope (article, #main-content) to (.ursa-unstyled) {
|
|
1477
|
+
h1 {
|
|
1478
|
+
max-width: var(--article-width);
|
|
1479
|
+
overflow: hidden ;
|
|
1480
|
+
text-overflow: ellipsis;
|
|
1481
|
+
}
|
|
1482
|
+
|
|
1483
|
+
h1,h2,h3 {
|
|
1484
|
+
clear: both;
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
figure {
|
|
1488
|
+
margin: 0.5rem 0;
|
|
1489
|
+
padding: 0;
|
|
1490
|
+
max-width: 300px;
|
|
1491
|
+
float: left;
|
|
1492
|
+
clear: both;
|
|
1493
|
+
margin-right: 1.5rem;
|
|
1494
|
+
margin-bottom: 0.5rem;
|
|
1495
|
+
|
|
1496
|
+
&:nth-of-type(even) {
|
|
1497
|
+
float: right;
|
|
1498
|
+
margin-left: 1.5rem;
|
|
1499
|
+
margin-right: 0;
|
|
1500
|
+
}
|
|
1501
|
+
}
|
|
1502
|
+
|
|
1503
|
+
@media (max-width: 800px) {
|
|
1504
|
+
h1 {
|
|
1505
|
+
font-size: 1.5rem;
|
|
1506
|
+
}
|
|
1507
|
+
}
|
|
1508
|
+
}
|
|
1509
|
+
|
|
1510
|
+
/* The default template's article: its box, its breadcrumbs, its sticky
|
|
1511
|
+
headings. `:scope` here is <article id="main-content">. */
|
|
1512
|
+
@scope (article#main-content) to (.ursa-unstyled) {
|
|
1513
|
+
:scope {
|
|
1514
|
+
width: var(--article-width);
|
|
1515
|
+
margin: calc(var(--global-nav-height) + 16px) auto 0 auto;
|
|
1516
|
+
}
|
|
1517
|
+
|
|
1518
|
+
img {
|
|
1519
|
+
max-width: 100%;
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1522
|
+
/* Full-width article when side nav is hidden */
|
|
1523
|
+
body[data-menu-position="top"] :scope {
|
|
1524
|
+
margin-left: auto;
|
|
1525
|
+
margin-right: auto;
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
/* When nav is collapsed, article can use full width */
|
|
1529
|
+
body:has(nav#nav-main.collapsed) :scope {
|
|
1530
|
+
margin-left: auto;
|
|
1531
|
+
margin-right: auto;
|
|
1532
|
+
}
|
|
1533
|
+
|
|
1534
|
+
@media (max-width: 800px) {
|
|
1535
|
+
:scope {
|
|
1536
|
+
width: calc(100vw - 2rem);
|
|
1537
|
+
margin: calc(var(--global-nav-height) + 16px) 1rem 0 1rem;
|
|
1538
|
+
}
|
|
1539
|
+
}
|
|
1540
|
+
|
|
1541
|
+
/* sticky unified header */
|
|
1542
|
+
h1, h2, h3 {
|
|
1543
|
+
position: sticky;
|
|
1544
|
+
z-index: 90;
|
|
1545
|
+
margin: 0;
|
|
1546
|
+
|
|
1547
|
+
&.stuck {
|
|
1548
|
+
background: var(--nav-top-bg);
|
|
1549
|
+
}
|
|
1550
|
+
}
|
|
1551
|
+
h1 {
|
|
1552
|
+
top: var(--global-nav-height);
|
|
1553
|
+
height: 3rem;
|
|
1554
|
+
line-height: 3rem;
|
|
1555
|
+
}
|
|
1556
|
+
h2 {
|
|
1557
|
+
top: calc(var(--global-nav-height) + 3rem);
|
|
1558
|
+
height: 2.25rem;
|
|
1559
|
+
line-height: 2.25rem;
|
|
1560
|
+
}
|
|
1561
|
+
h3 {
|
|
1562
|
+
top: calc(var(--global-nav-height) + 5.25rem);
|
|
1563
|
+
height: 1.75rem;
|
|
1564
|
+
line-height: 1.75rem;
|
|
1565
|
+
}
|
|
1566
|
+
|
|
1567
|
+
/* Hide stuck h2/h3 — the breadcrumb on the stuck h1 carries their text.
|
|
1568
|
+
Use visibility (not max-height/display) to preserve layout and avoid
|
|
1569
|
+
the flicker loop where collapsing the heading un-sticks it. */
|
|
1570
|
+
h2.stuck, h3.stuck {
|
|
1571
|
+
visibility: hidden;
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
}
|