@kenjura/ursa 0.72.0 → 0.75.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/meta/default.css CHANGED
@@ -17,6 +17,8 @@ body {
17
17
  --bg-color: #121212;
18
18
  --text-color: #f2f2f2;
19
19
  --nav-top-bg: #242424;
20
+ --widget-bg: #242424;
21
+ --widget-border: #3a3a3a;
20
22
  }
21
23
  }
22
24
 
@@ -25,6 +27,8 @@ body {
25
27
  --bg-color: white;
26
28
  --text-color: black;
27
29
  --nav-top-bg: #f2f2f2;
30
+ --widget-bg: #f2f2f2;
31
+ --widget-border: #ddd;
28
32
  }
29
33
  }
30
34
 
@@ -54,7 +58,7 @@ nav#nav-global {
54
58
  left: 0;
55
59
  width: 100vw;
56
60
  display: grid;
57
- grid-template-columns: auto 1fr auto;
61
+ grid-template-columns: 1fr var(--article-width) 1fr;
58
62
  align-items: center;
59
63
  padding: 0 8px;
60
64
  box-sizing: border-box;
@@ -76,8 +80,7 @@ nav#nav-global {
76
80
 
77
81
  /* Center container for search and top menu */
78
82
  .nav-center {
79
- width: var(--article-width);
80
- max-width: calc(100% - 16px);
83
+ width: calc(var(--article-width) + 38px);
81
84
  justify-self: center;
82
85
  position: relative;
83
86
  }
@@ -121,19 +124,256 @@ nav#nav-global {
121
124
  .search-clear-button.hidden {
122
125
  display: none;
123
126
  }
127
+ }
124
128
 
125
- .avatar {
126
- font-size: 1.5rem;
127
- line-height: 1;
128
- padding: 8px;
129
- }
130
-
131
- /* When avatar is standalone (not in container), align to end */
132
- > .avatar {
133
- justify-self: end;
129
+ /* ==========================================
130
+ WIDGET SYSTEM STYLES
131
+ Right-side nav widgets (TOC, Search, Profile)
132
+ ========================================== */
133
+
134
+ /* Widget bar in the nav right column */
135
+ nav#nav-global .nav-right-controls {
136
+ display: flex;
137
+ align-items: center;
138
+ justify-self: end;
139
+ gap: 0;
140
+ }
141
+
142
+ .widget-bar {
143
+ display: flex;
144
+ align-items: center;
145
+ gap: 0;
146
+ }
147
+
148
+ .widget-button {
149
+ display: flex;
150
+ align-items: center;
151
+ justify-content: center;
152
+ background: none;
153
+ border: none;
154
+ color: var(--text-color);
155
+ font-size: 1.1rem;
156
+ width: var(--global-nav-height);
157
+ height: var(--global-nav-height);
158
+ cursor: pointer;
159
+ opacity: 0.7;
160
+ transition: opacity 0.15s ease, background-color 0.15s ease;
161
+ }
162
+
163
+ .widget-button:hover {
164
+ opacity: 1;
165
+ background-color: rgba(128, 128, 128, 0.15);
166
+ }
167
+
168
+ .widget-button.active {
169
+ opacity: 1;
170
+ background-color: var(--widget-bg);
171
+ }
172
+
173
+ .widget-icon {
174
+ pointer-events: none;
175
+ }
176
+
177
+ /* Widget dropdown panel */
178
+ .widget-dropdown {
179
+ position: fixed;
180
+ top: var(--global-nav-height);
181
+ right: 0;
182
+ width: min(420px, 100vw);
183
+ max-height: calc(100vh - var(--global-nav-height));
184
+ overflow-y: auto;
185
+ background: var(--widget-bg);
186
+ border-left: 1px solid var(--widget-border);
187
+ border-bottom: 1px solid var(--widget-border);
188
+ box-shadow: -2px 4px 12px rgba(0, 0, 0, 0.2);
189
+ z-index: 1100;
190
+ transition: opacity 0.15s ease;
191
+ }
192
+
193
+ .widget-dropdown.hidden {
194
+ display: none;
195
+ }
196
+
197
+ /* Widget content panels — only the active one is visible */
198
+ .widget-content {
199
+ display: none;
200
+ }
201
+
202
+ .widget-content.active {
203
+ display: block;
204
+ }
205
+
206
+ /* --- TOC Widget --- */
207
+ #widget-content-toc {
208
+ padding: 0.5rem 0;
209
+
210
+ ul {
211
+ list-style: none;
212
+ margin: 0;
213
+ padding: 0;
214
+
215
+ li {
216
+ margin-bottom: 0.15rem;
217
+ padding: 0;
218
+
219
+ > a {
220
+ text-decoration: none;
221
+ color: var(--text-color);
222
+ opacity: 0.75;
223
+ display: block;
224
+ padding: 0.3rem 1rem;
225
+ border-left: 2px solid transparent;
226
+ transition: all 0.2s ease;
227
+ font-size: 0.9rem;
228
+ }
229
+
230
+ > a:hover {
231
+ opacity: 1;
232
+ border-left-color: var(--text-color);
233
+ background-color: rgba(128, 128, 128, 0.1);
234
+ }
235
+
236
+ > a.active {
237
+ opacity: 1;
238
+ border-left-color: aqua;
239
+ background-color: rgba(0, 255, 255, 0.1);
240
+ }
241
+
242
+ /* Indent nested headings */
243
+ &.toc-h1 > a {
244
+ padding-left: 1rem;
245
+ font-weight: 600;
246
+ }
247
+
248
+ &.toc-h2 > a {
249
+ padding-left: 1.5rem;
250
+ font-size: 0.85rem;
251
+ }
252
+
253
+ &.toc-h3 > a {
254
+ padding-left: 2rem;
255
+ font-size: 0.8rem;
256
+ }
257
+ }
134
258
  }
135
259
  }
136
260
 
261
+ /* --- Search Widget --- */
262
+ .widget-search-wrapper {
263
+ padding: 0.5rem;
264
+ }
265
+
266
+ .widget-search-input {
267
+ width: 100%;
268
+ height: 40px;
269
+ border-radius: 5px;
270
+ background: rgba(0, 0, 0, 0.15);
271
+ color: var(--text-color);
272
+ border: 1px solid var(--widget-border);
273
+ padding: 0 1rem;
274
+ box-sizing: border-box;
275
+ font-size: 1rem;
276
+ }
277
+
278
+ .widget-search-input:focus {
279
+ outline: none;
280
+ border-color: aqua;
281
+ box-shadow: 0 0 0 2px rgba(0, 255, 255, 0.2);
282
+ }
283
+
284
+ .widget-search-results {
285
+ max-height: calc(100vh - var(--global-nav-height) - 80px);
286
+ overflow-y: auto;
287
+ }
288
+
289
+ .widget-search-results .search-result-item {
290
+ padding: 10px 12px;
291
+ border-bottom: 1px solid var(--widget-border);
292
+ cursor: pointer;
293
+ transition: background-color 0.15s ease;
294
+ }
295
+
296
+ .widget-search-results .search-result-item:last-child {
297
+ border-bottom: none;
298
+ }
299
+
300
+ .widget-search-results .search-result-item:hover,
301
+ .widget-search-results .search-result-item.selected {
302
+ background-color: rgba(128, 128, 128, 0.15);
303
+ }
304
+
305
+ .widget-search-results .search-result-title {
306
+ font-weight: 600;
307
+ margin-bottom: 2px;
308
+ color: var(--text-color);
309
+ font-size: 0.9rem;
310
+ }
311
+
312
+ .widget-search-results .search-result-path {
313
+ font-size: 0.8rem;
314
+ color: var(--text-color);
315
+ opacity: 0.6;
316
+ }
317
+
318
+ .widget-search-results .search-result-message {
319
+ padding: 12px;
320
+ text-align: center;
321
+ color: var(--text-color);
322
+ opacity: 0.6;
323
+ font-style: italic;
324
+ font-size: 0.85rem;
325
+ }
326
+
327
+ .widget-search-results .search-section-header {
328
+ padding: 6px 12px;
329
+ font-size: 0.7em;
330
+ font-weight: 600;
331
+ text-transform: uppercase;
332
+ letter-spacing: 0.5px;
333
+ color: var(--text-color);
334
+ opacity: 0.5;
335
+ background-color: rgba(128, 128, 128, 0.1);
336
+ border-bottom: 1px solid var(--widget-border);
337
+ }
338
+
339
+ /* --- Profile Widget --- */
340
+ .widget-profile-placeholder {
341
+ display: flex;
342
+ flex-direction: column;
343
+ align-items: center;
344
+ padding: 2rem 1rem;
345
+ text-align: center;
346
+ color: var(--text-color);
347
+ opacity: 0.7;
348
+ }
349
+
350
+ .widget-profile-avatar {
351
+ font-size: 3rem;
352
+ margin-bottom: 1rem;
353
+ }
354
+
355
+ .widget-profile-placeholder p {
356
+ margin: 0.5rem 0;
357
+ font-size: 0.9rem;
358
+ }
359
+
360
+ .widget-profile-signin {
361
+ margin-top: 0.5rem;
362
+ padding: 8px 24px;
363
+ background: var(--nav-top-bg);
364
+ border: 1px solid var(--widget-border);
365
+ color: var(--text-color);
366
+ border-radius: 4px;
367
+ cursor: not-allowed;
368
+ opacity: 0.5;
369
+ }
370
+
371
+ .widget-profile-note {
372
+ font-size: 0.75rem;
373
+ opacity: 0.5;
374
+ font-style: italic;
375
+ }
376
+
137
377
  /* Search functionality styles */
138
378
  .search-results {
139
379
  position: fixed;
@@ -246,16 +486,11 @@ body[data-menu-position="top"] nav#nav-main-top {
246
486
  align-items: center;
247
487
  }
248
488
 
249
- /* Hide search input when top menu is present - it moves to a button */
250
- body[data-menu-position="top"] nav#nav-global input#global-search {
489
+ /* Hide inline search when top menu is present widget handles search */
490
+ body[data-menu-position="top"] nav#nav-global .search-wrapper-inline {
251
491
  display: none;
252
492
  }
253
493
 
254
- /* Show search button instead when top menu is active */
255
- body[data-menu-position="top"] nav#nav-global .search-button {
256
- display: inline-flex;
257
- }
258
-
259
494
  /* Hide side nav when top menu is active */
260
495
  body[data-menu-position="top"] nav#nav-main {
261
496
  display: none;
@@ -269,7 +504,7 @@ body[data-menu-position="top"] article#main-content {
269
504
 
270
505
  /* Update nav-global grid to accommodate top menu - keep search+avatar together on right */
271
506
  body[data-menu-position="top"] nav#nav-global {
272
- grid-template-columns: auto 1fr auto;
507
+ grid-template-columns: 1fr var(--article-width) 1fr;
273
508
  }
274
509
 
275
510
  /* Top-level menu list */
@@ -285,11 +520,13 @@ nav#nav-main-top .top-menu-level {
285
520
  nav#nav-main-top .top-menu-item {
286
521
  position: relative;
287
522
  padding: 0;
523
+ margin: 0;
288
524
  }
289
525
 
290
526
  nav#nav-main-top .top-menu-label {
291
527
  display: block;
292
- padding: 8px 16px;
528
+ padding: 0px 16px;
529
+ line-height: var(--global-nav-height);
293
530
  color: var(--text-color);
294
531
  text-decoration: none;
295
532
  white-space: nowrap;
@@ -311,24 +548,23 @@ nav#nav-main-top .top-menu-item.has-dropdown > .top-menu-label::after {
311
548
  font-size: 0.4em;
312
549
  margin-left: 6px;
313
550
  opacity: 0.6;
314
- position: relative;
315
- top: -1px;
551
+ vertical-align: bottom;
316
552
  }
317
553
 
318
- /* Dropdown menu (first level of children) */
554
+ /* Use widget-bg for dropdown/flyout backgrounds (shared CSS var) */
319
555
  nav#nav-main-top .top-menu-dropdown {
320
556
  display: none;
321
557
  position: absolute;
322
558
  top: 100%;
323
559
  left: 0;
324
560
  min-width: 200px;
325
- background-color: var(--bg-color);
326
- border: 1px solid var(--nav-top-bg);
561
+ background-color: var(--widget-bg);
562
+ border: 1px solid var(--widget-border);
327
563
  border-radius: 4px;
328
564
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
329
565
  list-style: none;
330
566
  margin: 0;
331
- padding: 4px 0;
567
+ padding: 0;
332
568
  z-index: 1005;
333
569
  }
334
570
 
@@ -374,15 +610,15 @@ nav#nav-main-top .top-menu-flyout {
374
610
  display: none;
375
611
  position: absolute;
376
612
  left: 100%;
377
- top: 0;
613
+ top: -1px;
378
614
  min-width: 200px;
379
- background-color: var(--bg-color);
380
- border: 1px solid var(--nav-top-bg);
615
+ background-color: var(--widget-bg);
616
+ border: 1px solid var(--widget-border);
381
617
  border-radius: 4px;
382
618
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
383
619
  list-style: none;
384
620
  margin: 0;
385
- padding: 4px 0;
621
+ padding: 0;
386
622
  z-index: 1006;
387
623
  }
388
624
 
@@ -391,91 +627,6 @@ nav#nav-main-top .dropdown-item.has-flyout:hover > .top-menu-flyout {
391
627
  display: block;
392
628
  }
393
629
 
394
- /* Search button and avatar container (shown when top menu is active) */
395
- nav#nav-global .nav-right-controls {
396
- display: flex;
397
- align-items: center;
398
- gap: 4px;
399
- justify-self: end;
400
- }
401
-
402
- nav#nav-global .search-button {
403
- display: none;
404
- align-items: center;
405
- justify-content: center;
406
- background: none;
407
- border: none;
408
- color: var(--text-color);
409
- font-size: 1.25rem;
410
- padding: 8px 12px;
411
- cursor: pointer;
412
- opacity: 0.8;
413
- transition: opacity 0.2s ease;
414
- }
415
-
416
- nav#nav-global .search-button:hover {
417
- opacity: 1;
418
- }
419
-
420
- /* Search backdrop - just the dark overlay */
421
- body[data-menu-position="top"] .search-backdrop {
422
- display: none;
423
- position: fixed;
424
- top: 0;
425
- left: 0;
426
- right: 0;
427
- bottom: 0;
428
- background: rgba(0, 0, 0, 0.7);
429
- z-index: 1010;
430
- }
431
-
432
- body[data-menu-position="top"] .search-backdrop.active {
433
- display: block;
434
- }
435
-
436
- /* Floating search container - positioned above nav */
437
- body[data-menu-position="top"] .search-floating {
438
- display: none;
439
- position: fixed;
440
- top: 80px;
441
- left: 50%;
442
- transform: translateX(-50%);
443
- width: min(600px, calc(100vw - 32px));
444
- z-index: 1020;
445
- }
446
-
447
- body[data-menu-position="top"] .search-floating.active {
448
- display: block;
449
- }
450
-
451
- /* Style the search wrapper when inside floating container */
452
- body[data-menu-position="top"] .search-floating .search-wrapper {
453
- width: 100%;
454
- }
455
-
456
- body[data-menu-position="top"] .search-floating #global-search {
457
- width: 100%;
458
- height: 48px;
459
- font-size: 1.25rem;
460
- padding: 0 16px;
461
- border: 2px solid var(--nav-top-bg);
462
- border-radius: 8px;
463
- background: var(--bg-color);
464
- color: var(--text-color);
465
- }
466
-
467
- /* Search results inside floating container */
468
- body[data-menu-position="top"] .search-floating .search-results {
469
- position: relative;
470
- top: 4px;
471
- max-height: 60vh;
472
- overflow-y: auto;
473
- background: var(--bg-color);
474
- border: 1px solid var(--border-color);
475
- border-radius: 8px;
476
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
477
- }
478
-
479
630
  nav#nav-main {
480
631
  position: fixed;
481
632
  top: calc(var(--global-nav-height));
@@ -707,62 +858,6 @@ nav#nav-main {
707
858
  }
708
859
  }
709
860
 
710
- /* Table of Contents - Right side navigation */
711
- nav#nav-toc {
712
- position: fixed;
713
- top: calc(var(--global-nav-height));
714
- right: 0;
715
- max-width: calc(50vw - var(--article-width) / 2 - 2rem);
716
- max-height: calc(100vh - var(--global-nav-height));
717
- overflow-y: auto;
718
- z-index: 100;
719
- padding: 0.5rem 0;
720
-
721
- ul {
722
- list-style: none;
723
- margin: 0;
724
- padding: 0;
725
-
726
- li {
727
- margin-bottom: 0.25rem;
728
- padding: 0;
729
-
730
- > a {
731
- text-decoration: none;
732
- color: var(--text-color);
733
- opacity: 0.7;
734
- display: block;
735
- padding: 0.25rem 0.5rem;
736
- border-left: 2px solid transparent;
737
- transition: all 0.3s ease;
738
- font-size: 0.9rem;
739
- }
740
-
741
- > a:hover {
742
- opacity: 1;
743
- border-left-color: var(--text-color);
744
- }
745
-
746
- > a.active {
747
- opacity: 1;
748
- border-left-color: aqua;
749
- background-color: rgba(0, 255, 255, 0.1);
750
- }
751
-
752
- /* Indent nested headings */
753
- &.toc-h2 > a {
754
- padding-left: 1rem;
755
- font-size: 0.85rem;
756
- }
757
-
758
- &.toc-h3 > a {
759
- padding-left: 1.5rem;
760
- font-size: 0.8rem;
761
- }
762
- }
763
- }
764
- }
765
-
766
861
  article#main-content {
767
862
  width: var(--article-width);
768
863
  margin: calc(var(--global-nav-height) + 16px) auto 0 auto;
@@ -772,6 +867,39 @@ article#main-content {
772
867
  }
773
868
  }
774
869
 
870
+ /* Breadcrumb navigation */
871
+ .breadcrumbs {
872
+ display: flex;
873
+ align-items: center;
874
+ flex-wrap: wrap;
875
+ gap: 0;
876
+ font-size: 0.8rem;
877
+ margin-bottom: 0.25rem;
878
+ color: var(--text-color);
879
+ opacity: 0.55;
880
+ }
881
+
882
+ .breadcrumb-link {
883
+ color: var(--text-color);
884
+ text-decoration: none;
885
+ transition: opacity 0.15s ease;
886
+ }
887
+
888
+ .breadcrumb-link:hover {
889
+ opacity: 1;
890
+ text-decoration: underline;
891
+ }
892
+
893
+ .breadcrumb-sep {
894
+ margin: 0 0.4em;
895
+ opacity: 0.4;
896
+ font-size: 0.85em;
897
+ }
898
+
899
+ .breadcrumb-current {
900
+ font-weight: 500;
901
+ }
902
+
775
903
  /* Footer styles */
776
904
  footer#site-footer {
777
905
  width: var(--article-width);
@@ -831,22 +959,38 @@ footer#site-footer {
831
959
  h1 {
832
960
  font-size: 1.5rem;
833
961
  }
834
- nav#nav-toc {
962
+
963
+ /* On mobile, hide the top menu and show search inline instead */
964
+ body[data-menu-position="top"] nav#nav-main-top {
965
+ display: none !important;
966
+ }
967
+ body[data-menu-position="top"] nav#nav-global .search-wrapper-inline {
968
+ display: block !important;
969
+ }
970
+
971
+ /* Hide widget buttons on mobile — they're accessible via the inline search and mobile menu */
972
+ .widget-bar {
835
973
  display: none !important;
836
974
  }
975
+
976
+ /* Hide widget dropdown on mobile */
977
+ .widget-dropdown {
978
+ display: none !important;
979
+ }
980
+
837
981
  nav#nav-main {
838
982
  display: none !important;
839
983
  position: fixed;
840
984
  top: var(--global-nav-height);
841
985
  left: 0;
842
986
  width: 100vw;
843
- height: 100vh;
987
+ height: calc(100vh - var(--global-nav-height));
844
988
  max-width: none;
845
989
  background: var(--bg-color);
846
990
  z-index: 1000;
847
991
  overflow-y: auto;
848
992
  margin: 0;
849
- padding: calc(var(--global-nav-height) + 1rem) 0 2rem 0;
993
+ padding: 0;
850
994
  transform: none; /* Reset desktop transform */
851
995
  }
852
996
  nav#nav-main.active {
@@ -856,6 +1000,52 @@ footer#site-footer {
856
1000
  display: none !important;
857
1001
  transform: none;
858
1002
  }
1003
+
1004
+ /* Mobile menu list styles */
1005
+ nav#nav-main .mobile-menu-list {
1006
+ list-style: none;
1007
+ margin: 0;
1008
+ padding: 0;
1009
+ }
1010
+
1011
+ nav#nav-main .mobile-menu-item {
1012
+ border-bottom: 1px solid rgba(128, 128, 128, 0.15);
1013
+ }
1014
+
1015
+ nav#nav-main .mobile-menu-label {
1016
+ display: block;
1017
+ padding: 14px 20px;
1018
+ color: var(--text-color);
1019
+ text-decoration: none;
1020
+ font-size: 1rem;
1021
+ }
1022
+
1023
+ nav#nav-main a.mobile-menu-label:hover {
1024
+ background-color: rgba(128, 128, 128, 0.1);
1025
+ }
1026
+
1027
+ nav#nav-main span.mobile-menu-label {
1028
+ opacity: 0.5;
1029
+ }
1030
+
1031
+ /* Indent deeper levels */
1032
+ nav#nav-main .mobile-menu-depth-1 .mobile-menu-label { padding-left: 40px; font-size: 0.95rem; }
1033
+ nav#nav-main .mobile-menu-depth-2 .mobile-menu-label { padding-left: 56px; font-size: 0.9rem; }
1034
+ nav#nav-main .mobile-menu-depth-3 .mobile-menu-label { padding-left: 72px; font-size: 0.85rem; }
1035
+ nav#nav-main .mobile-menu-depth-4 .mobile-menu-label { padding-left: 88px; font-size: 0.85rem; }
1036
+
1037
+ /* Current page highlight in mobile menu */
1038
+ nav#nav-main .mobile-menu-current .mobile-menu-label {
1039
+ font-weight: 600;
1040
+ background-color: rgba(0, 255, 255, 0.1);
1041
+ }
1042
+
1043
+ /* Home item styling */
1044
+ nav#nav-main .mobile-menu-home .mobile-menu-label {
1045
+ font-weight: 600;
1046
+ border-bottom: 2px solid rgba(128, 128, 128, 0.25);
1047
+ }
1048
+
859
1049
  /* Override desktop indentation for mobile */
860
1050
  nav#nav-main > ul > li > ul > li > .menu-item-row,
861
1051
  nav#nav-main > ul > li > ul > li > ul > li > .menu-item-row,