@24vlh/vds 0.1.0 → 0.1.1

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.
@@ -1,900 +1 @@
1
- /************************************************************
2
- * VLAH DESIGN SYSTEM (VDS) - Navigation
3
- *
4
- * Responsibilities:
5
- * - Provide the entire navigation architecture: primary/secondary nav,
6
- * mobile nav, vertical nav, sidebar, pills, tabs, pagination,
7
- * breadcrumbs, toolbars, and announcement bars
8
- * - Define interactive states: hover, active, disabled, focus-visible,
9
- * depth indentation, collapsed/expanded sections
10
- * - Expose brand/logo slots and action areas for headers & sidebars
11
- * - Supply panel + backdrop patterns for mobile overlay navigation
12
- *
13
- * System Notes:
14
- * - Fully token-driven: spacing, radii, borders, colours, z-index, motion
15
- * - Pure CSS; JS only toggles `.nav-panel--open` and `.nav-backdrop--visible`
16
- * - Safe namespacing: can embed in header/footer/sidebars without collisions
17
- ************************************************************/
18
-
19
- /* ---------------------------------------------------------
20
- 1. CORE NAV PRIMITIVES
21
- --------------------------------------------------------- */
22
-
23
- .nav {
24
- display: flex;
25
- align-items: center;
26
- gap: var(--space-6);
27
- }
28
-
29
- .nav__item,
30
- .nav__link {
31
- position: relative;
32
- display: inline-flex;
33
- align-items: center;
34
-
35
- font-size: var(--text-sm);
36
- color: var(--color-text);
37
- -webkit-text-decoration: none;
38
- text-decoration: none;
39
-
40
- padding: var(--space-1) 0;
41
- gap: var(--space-2);
42
-
43
- cursor: pointer;
44
-
45
- transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
46
- }
47
-
48
- .nav__item:hover,
49
- .nav__link:hover {
50
- color: var(--color-text-muted);
51
- }
52
-
53
- .nav__item:active,
54
- .nav__link:active {
55
- color: var(--color-text);
56
- background-color: var(--color-surface-subtle);
57
- }
58
-
59
- .nav__item:focus-visible,
60
- .nav__link:focus-visible {
61
- outline: none;
62
- box-shadow: 0 0 0 1px var(--color-surface),
63
- 0 0 0 3px var(--focus-ring-color);
64
- border-radius: var(--radius-sm);
65
- }
66
-
67
- .nav__item--active,
68
- .nav__link--active,
69
- .nav__item--active:hover,
70
- .nav__link--active:hover {
71
- font-weight: 600;
72
- color: var(--link-text-hover);
73
- -webkit-text-decoration: none;
74
- text-decoration: none;
75
- }
76
-
77
- .nav__item--disabled,
78
- .nav__link--disabled {
79
- opacity: 0.45;
80
- cursor: not-allowed;
81
- pointer-events: none;
82
- }
83
-
84
- .nav__item svg,
85
- .nav__link svg {
86
- width: 1em;
87
- height: 1em;
88
- stroke: currentColor;
89
- fill: currentColor;
90
- }
91
-
92
- .nav--a .nav__item,
93
- .nav--a .nav__link {
94
- padding: var(--space-2) var(--space-2);
95
- }
96
-
97
- .nav--b .nav__item,
98
- .nav--b .nav__link {
99
- padding: var(--space-1) var(--space-1);
100
- }
101
-
102
- .nav--c .nav__item,
103
- .nav--c .nav__link {
104
- padding: 0 var(--space-1);
105
- font-size: var(--text-xs);
106
- gap: var(--space-1);
107
- }
108
-
109
- .nav--c .nav__item svg,
110
- .nav--c .nav__link svg {
111
- width: 0.875em;
112
- height: 0.875em;
113
- }
114
-
115
- .nav-section {
116
- display: inline-flex;
117
- align-items: center;
118
- gap: var(--space-6);
119
- }
120
-
121
- /* ---------------------------------------------------------
122
- 2. BRAND / LOGO / ACTION SLOTS
123
- --------------------------------------------------------- */
124
-
125
- .nav__brand {
126
- display: inline-flex;
127
- align-items: center;
128
- gap: var(--space-3);
129
- }
130
-
131
- .nav__brand--compact {
132
- gap: var(--space-2);
133
- }
134
-
135
- .nav__logo {
136
- display: inline-flex;
137
- align-items: center;
138
- justify-content: center;
139
- }
140
-
141
- .nav__logo .logo {
142
- padding: 0;
143
- }
144
-
145
- .nav__actions {
146
- display: inline-flex;
147
- align-items: center;
148
- gap: var(--space-3);
149
- }
150
-
151
- /* ---------------------------------------------------------
152
- 3. NAV TOGGLE (MOBILE HAMBURGER)
153
- --------------------------------------------------------- */
154
-
155
- .nav__toggle {
156
- display: none;
157
- cursor: pointer;
158
- padding: var(--space-2);
159
- border-radius: var(--radius-sm);
160
-
161
- color: var(--color-text);
162
- background-color: transparent;
163
- border: var(--border-width) solid transparent;
164
-
165
- transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
166
- }
167
-
168
- .nav__toggle svg {
169
- width: 24px;
170
- height: 24px;
171
- stroke: currentColor;
172
- }
173
-
174
- .nav__toggle:hover {
175
- background-color: var(--color-surface-subtle);
176
- border-color: var(--color-border-subtle);
177
- }
178
-
179
- .nav__toggle:active {
180
- background-color: var(--color-muted-bg);
181
- }
182
-
183
- .nav__toggle:focus-visible {
184
- outline: none;
185
- box-shadow: 0 0 0 1px var(--color-surface),
186
- 0 0 0 3px var(--focus-ring-color);
187
- }
188
-
189
- .nav__toggle--active {
190
- background-color: var(--color-accent-soft);
191
- border-color: var(--color-accent);
192
- color: var(--color-text);
193
- }
194
-
195
- /* ---------------------------------------------------------
196
- 4. HORIZONTAL / PRIMARY NAV
197
- --------------------------------------------------------- */
198
-
199
- .nav--primary {
200
- display: flex;
201
- align-items: center;
202
- gap: var(--space-6);
203
- }
204
-
205
- .nav--primary .nav__item,
206
- .nav--primary .nav__link {
207
- padding: var(--space-2) var(--space-2);
208
- border-radius: var(--radius-sm);
209
- }
210
-
211
- .nav--primary .nav__item:hover,
212
- .nav--primary .nav__link:hover {
213
- background-color: var(--color-surface-subtle);
214
- }
215
-
216
- .nav--primary .nav__item--active,
217
- .nav--primary .nav__link--active {
218
- background-color: var(--color-accent-soft);
219
- color: var(--color-text);
220
- }
221
-
222
- /* ---------------------------------------------------------
223
- 5. SUB NAV (TABS) + PILL NAV
224
- --------------------------------------------------------- */
225
-
226
- .nav--sub {
227
- display: flex;
228
- gap: var(--space-6);
229
- border-bottom: var(--border-width) solid var(--color-border-subtle);
230
- padding-bottom: var(--space-2);
231
- margin-bottom: var(--space-8);
232
- }
233
-
234
- .nav--sub .nav__item,
235
- .nav--sub .nav__link {
236
- padding-bottom: var(--space-2);
237
- }
238
-
239
- .nav--sub .nav__item--active::after,
240
- .nav--sub .nav__link--active::after {
241
- content: "";
242
- position: absolute;
243
- bottom: calc(var(--border-width) * -1);
244
- left: 0;
245
- height: var(--tab-indicator-height);
246
- width: 100%;
247
- background-color: var(--color-accent);
248
- }
249
-
250
- .nav--sub .nav__item--disabled,
251
- .nav--sub .nav__link--disabled {
252
- opacity: 0.45;
253
- pointer-events: none;
254
- }
255
-
256
- .nav--sub .nav__item:focus-visible,
257
- .nav--sub .nav__link:focus-visible {
258
- outline: none;
259
- box-shadow: 0 0 0 1px var(--color-surface),
260
- 0 0 0 3px var(--focus-ring-color);
261
- border-radius: var(--radius-sm);
262
- }
263
-
264
- .nav--pills {
265
- display: flex;
266
- flex-wrap: wrap;
267
- gap: var(--space-2);
268
- }
269
-
270
- .nav--pills .nav__item,
271
- .nav--pills .nav__link {
272
- padding: var(--space-1) var(--space-3);
273
- border-radius: 999px;
274
- border: var(--border-width) solid var(--color-border-subtle);
275
- background-color: var(--color-surface);
276
- font-size: var(--text-xs);
277
- }
278
-
279
- .nav--pills .nav__item:hover,
280
- .nav--pills .nav__link:hover {
281
- background-color: var(--color-surface-subtle);
282
- border-color: var(--color-border-subtle);
283
- }
284
-
285
- .nav--pills .nav__item--active,
286
- .nav--pills .nav__link--active {
287
- border-color: var(--color-accent);
288
- background-color: var(--color-accent-soft);
289
- color: var(--color-text);
290
- }
291
-
292
- .nav--pills .nav__item--disabled,
293
- .nav--pills .nav__link--disabled {
294
- opacity: 0.45;
295
- pointer-events: none;
296
- }
297
-
298
- .nav--pills .nav__item:focus-visible,
299
- .nav--pills .nav__link:focus-visible {
300
- outline: none;
301
- box-shadow: 0 0 0 1px var(--color-surface),
302
- 0 0 0 3px var(--focus-ring-color);
303
- }
304
-
305
- /* ---------------------------------------------------------
306
- 6. VERTICAL NAV + SIDEBAR
307
- --------------------------------------------------------- */
308
-
309
- .nav--vertical {
310
- display: flex;
311
- flex-direction: column;
312
- gap: var(--space-2);
313
- }
314
-
315
- .nav--vertical .nav__item,
316
- .nav--vertical .nav__link {
317
- padding: var(--space-1) 0;
318
- }
319
-
320
- .nav--vertical .nav__item--depth-2,
321
- .nav--vertical .nav__link--depth-2 {
322
- padding-left: var(--space-4);
323
- }
324
-
325
- .nav--vertical .nav__item--depth-3,
326
- .nav--vertical .nav__link--depth-3 {
327
- padding-left: var(--space-6);
328
- }
329
-
330
- .sidebar {
331
- display: flex;
332
- flex-direction: column;
333
- gap: var(--space-4);
334
- }
335
-
336
- .sidebar__section {
337
- display: flex;
338
- flex-direction: column;
339
- gap: var(--space-2);
340
- }
341
-
342
- .sidebar__section--collapsible .sidebar__section-header {
343
- display: flex;
344
- align-items: center;
345
- justify-content: space-between;
346
- gap: var(--space-2);
347
- cursor: pointer;
348
- }
349
-
350
- .sidebar__section-title {
351
- font-size: var(--text-xs);
352
- text-transform: uppercase;
353
- letter-spacing: 0.04em;
354
- color: var(--color-text-muted);
355
- }
356
-
357
- .sidebar__section-toggle-icon {
358
- display: inline-flex;
359
- align-items: center;
360
- justify-content: center;
361
- transition: transform 0.15s ease;
362
- }
363
-
364
- .sidebar__section--expanded .sidebar__section-toggle-icon {
365
- transform: rotate(90deg);
366
- }
367
-
368
- .sidebar__section--collapsed .sidebar__nav {
369
- display: none;
370
- }
371
-
372
- .sidebar__nav {
373
- display: flex;
374
- flex-direction: column;
375
- gap: var(--space-1);
376
- }
377
-
378
- .sidebar__nav .nav__item,
379
- .sidebar__nav .nav__link {
380
- font-size: var(--text-sm);
381
- padding: var(--space-1) 0;
382
- border-radius: var(--radius-sm);
383
- cursor: pointer;
384
- -webkit-text-decoration: underline;
385
- text-decoration: underline;
386
- color: var(--color-text);
387
- }
388
-
389
- .sidebar__nav .nav__item:hover,
390
- .sidebar__nav .nav__link:hover {
391
- background-color: var(--color-surface-subtle);
392
- color: var(--color-text-muted);
393
- -webkit-text-decoration: none;
394
- text-decoration: none;
395
- }
396
-
397
- .sidebar__nav .nav__item--active,
398
- .sidebar__nav .nav__link--active {
399
- font-weight: 600;
400
- color: var(--color-accent);
401
- }
402
-
403
- .sidebar__section--collapsible .sidebar__section-header {
404
- cursor: pointer;
405
- }
406
-
407
- .sidebar__nav .nav__item:focus-visible,
408
- .sidebar__nav .nav__link:focus-visible {
409
- outline: 2px solid var(--focus-ring-color, var(--color-accent-soft));
410
- outline-offset: var(--space-1);
411
- }
412
-
413
- /* ---------------------------------------------------------
414
- 7. ANNOUNCEMENT BAR
415
- --------------------------------------------------------- */
416
-
417
- .announcement {
418
- width: 100%;
419
- background-color: var(--color-muted-bg);
420
- color: var(--color-text-muted);
421
- border-bottom: var(--border-width) solid var(--color-muted-border);
422
- padding: var(--space-2) 0;
423
- }
424
-
425
- .announcement__inner {
426
- max-width: var(--content-width-xl);
427
- margin: 0 auto;
428
- padding: 0 var(--space-6);
429
-
430
- display: flex;
431
- align-items: center;
432
- justify-content: space-between;
433
- gap: var(--space-4);
434
- }
435
-
436
- .announcement__content {
437
- display: flex;
438
- align-items: center;
439
- gap: var(--space-2);
440
- }
441
-
442
- .announcement__icon {
443
- display: inline-flex;
444
- align-items: center;
445
- justify-content: center;
446
- font-size: var(--text-sm);
447
- }
448
-
449
- .announcement__text {
450
- font-size: var(--text-xs);
451
- }
452
-
453
- .announcement__link {
454
- font-size: var(--text-xs);
455
- -webkit-text-decoration: none;
456
- text-decoration: none;
457
- color: var(--color-text);
458
- }
459
-
460
- .announcement__link:hover {
461
- -webkit-text-decoration: underline;
462
- text-decoration: underline;
463
- }
464
-
465
- .announcement__close {
466
- display: inline-flex;
467
- align-items: center;
468
- justify-content: center;
469
- cursor: pointer;
470
-
471
- border-radius: var(--radius-sm);
472
- padding: var(--space-1);
473
-
474
- border: var(--border-width) solid transparent;
475
- background-color: transparent;
476
-
477
- transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
478
- }
479
-
480
- .announcement__close:hover {
481
- background-color: var(--color-surface-subtle);
482
- border-color: var(--color-border-subtle);
483
- }
484
-
485
- .announcement__close:focus-visible {
486
- outline: none;
487
- box-shadow: 0 0 0 1px var(--color-surface),
488
- 0 0 0 3px var(--focus-ring-color);
489
- }
490
-
491
- .announcement--info {
492
- background-color: var(--color-info-soft);
493
- color: var(--color-info-strong);
494
- }
495
-
496
- .announcement--success {
497
- background-color: var(--color-success-soft);
498
- color: var(--color-success-strong);
499
- }
500
-
501
- .announcement--warning {
502
- background-color: var(--color-warning-soft);
503
- color: var(--color-warning-strong);
504
- }
505
-
506
- .announcement--danger {
507
- background-color: var(--color-danger-soft);
508
- color: var(--color-danger-strong);
509
- }
510
-
511
- /* ---------------------------------------------------------
512
- 8. BREADCRUMBS
513
- --------------------------------------------------------- */
514
-
515
- .breadcrumbs {
516
- display: flex;
517
- align-items: center;
518
- gap: var(--space-2);
519
- font-size: var(--text-xs);
520
- color: var(--color-text-muted);
521
- flex-wrap: wrap;
522
- }
523
-
524
- .breadcrumbs__item {
525
- display: inline-flex;
526
- align-items: center;
527
- gap: var(--space-1);
528
- max-width: 100%;
529
- }
530
-
531
- .breadcrumbs__link {
532
- color: var(--color-text);
533
- -webkit-text-decoration: underline;
534
- text-decoration: underline;
535
- max-width: 16rem;
536
- overflow: hidden;
537
- text-overflow: ellipsis;
538
- white-space: nowrap;
539
- }
540
-
541
- .breadcrumbs__link:hover {
542
- color: var(--color-text-muted);
543
- }
544
-
545
- .breadcrumbs__link:focus-visible {
546
- outline: none;
547
- box-shadow: 0 0 0 1px var(--color-surface),
548
- 0 0 0 3px var(--focus-ring-color);
549
- border-radius: var(--radius-sm);
550
- }
551
-
552
- .breadcrumbs__separator {
553
- color: var(--color-text-soft);
554
- }
555
-
556
- /* ---------------------------------------------------------
557
- 9. PAGINATION
558
- --------------------------------------------------------- */
559
-
560
- .pagination {
561
- display: inline-flex;
562
- align-items: center;
563
- gap: var(--space-1);
564
- font-size: var(--text-xs);
565
- }
566
-
567
- .pagination__item {
568
- min-width: 2rem;
569
- height: 2rem;
570
- padding: 0 var(--space-2);
571
-
572
- display: inline-flex;
573
- align-items: center;
574
- justify-content: center;
575
-
576
- border-radius: var(--radius-sm);
577
- border: var(--border-width) solid var(--color-border-subtle);
578
- background-color: var(--color-surface);
579
- color: var(--color-text);
580
-
581
- cursor: pointer;
582
- -webkit-text-decoration: none;
583
- text-decoration: none;
584
-
585
- transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
586
- }
587
-
588
- .pagination__item:hover {
589
- background-color: var(--color-surface-subtle);
590
- border-color: var(--color-border-subtle);
591
- color: var(--color-text);
592
- }
593
-
594
- .pagination__item:active {
595
- background-color: var(--color-muted-bg);
596
- }
597
-
598
- .pagination__item:focus-visible {
599
- outline: none;
600
- box-shadow: 0 0 0 1px var(--color-surface),
601
- 0 0 0 3px var(--focus-ring-color);
602
- }
603
-
604
- .pagination__item--active {
605
- border-color: var(--color-accent);
606
- background-color: var(--color-accent-soft);
607
- color: var(--color-text);
608
- }
609
-
610
- .pagination__item--disabled {
611
- opacity: 0.4;
612
- cursor: not-allowed;
613
- pointer-events: none;
614
- }
615
-
616
- .pagination__prev,
617
- .pagination__next {
618
- min-width: auto;
619
- padding: 0 var(--space-2);
620
- }
621
-
622
- .pagination__ellipsis {
623
- min-width: auto;
624
- border: none;
625
- background-color: transparent;
626
- cursor: default;
627
- }
628
-
629
- /* ---------------------------------------------------------
630
- 10. TOOLBAR
631
- --------------------------------------------------------- */
632
-
633
- .toolbar {
634
- display: flex;
635
- align-items: center;
636
- justify-content: space-between;
637
- gap: var(--space-4);
638
-
639
- padding: var(--space-3) var(--space-4);
640
- border-radius: var(--radius-md);
641
- background-color: var(--color-surface);
642
- border: var(--border-width) solid var(--color-border-subtle);
643
- }
644
-
645
- .toolbar--dense {
646
- padding: var(--space-2) var(--space-3);
647
- }
648
-
649
- .toolbar--spacious {
650
- padding: var(--space-4) var(--space-5);
651
- }
652
-
653
- .toolbar__section {
654
- display: flex;
655
- align-items: center;
656
- gap: var(--space-3);
657
- }
658
-
659
- .toolbar__title {
660
- font-size: var(--text-sm);
661
- font-weight: 500;
662
- }
663
-
664
- .toolbar__actions {
665
- display: inline-flex;
666
- align-items: center;
667
- gap: var(--space-3);
668
- }
669
-
670
- /* ---------------------------------------------------------
671
- 11. FOOTER NAV CONTEXT
672
- --------------------------------------------------------- */
673
-
674
- .footer .nav {
675
- display: flex;
676
- flex-direction: column;
677
- gap: var(--space-2);
678
- }
679
-
680
- .footer .nav.nav--vertical {
681
- align-items: flex-start;
682
- }
683
-
684
- .footer .nav__item,
685
- .footer .nav__link {
686
- color: var(--color-footer-text);
687
- opacity: 0.85;
688
- font-size: var(--text-sm);
689
- text-align: left;
690
- padding-left: 0;
691
- padding-right: 0;
692
- }
693
-
694
- .footer .nav__item:hover,
695
- .footer .nav__link:hover {
696
- opacity: 1;
697
- }
698
-
699
- .footer .nav__item--active,
700
- .footer .nav__link--active {
701
- opacity: 1;
702
- font-weight: 500;
703
- }
704
-
705
- /* ---------------------------------------------------------
706
- 12. MOBILE NAV (OVERLAY / PANEL PATTERN)
707
- --------------------------------------------------------- */
708
-
709
- .nav-panel {
710
- position: fixed;
711
- top: 0;
712
- right: 0;
713
- bottom: 0;
714
-
715
- width: 18rem;
716
- max-width: 100%;
717
-
718
- background-color: var(--color-bg-elevated);
719
- border-left: var(--border-width) solid var(--color-border-subtle);
720
- box-shadow: var(--shadow-2);
721
-
722
- transform: translateX(100%);
723
- opacity: 0;
724
- pointer-events: none;
725
-
726
- display: flex;
727
- flex-direction: column;
728
- gap: var(--space-4);
729
- padding: var(--space-4);
730
-
731
- transition: transform 0.2s ease, opacity 0.2s ease;
732
- z-index: 40;
733
- }
734
-
735
- .nav-panel--open {
736
- transform: translateX(0);
737
- opacity: 1;
738
- pointer-events: auto;
739
- }
740
-
741
- .nav-backdrop {
742
- position: fixed;
743
- top: 0;
744
- right: 0;
745
- bottom: 0;
746
- left: 0;
747
- background-color: var(--overlay-backdrop-default);
748
- opacity: 0;
749
- pointer-events: none;
750
- transition: opacity 0.2s ease;
751
- z-index: 30;
752
- }
753
-
754
- .nav-backdrop--visible {
755
- opacity: 1;
756
- pointer-events: auto;
757
- }
758
-
759
- .nav--mobile {
760
- display: flex;
761
- flex-direction: column;
762
- gap: var(--space-4);
763
- }
764
-
765
- .nav--mobile .nav__item,
766
- .nav--mobile .nav__link {
767
- font-size: var(--text-md);
768
- padding: var(--space-2) 0;
769
- }
770
-
771
- @media (max-width: 768px) {
772
- .nav__toggle {
773
- display: inline-flex;
774
- align-items: center;
775
- }
776
- }
777
-
778
- /* ---------------------------------------------------------
779
- TABS (Standalone Component)
780
- --------------------------------------------------------- */
781
-
782
- .nav-tabs {
783
- display: flex;
784
- align-items: center;
785
- gap: var(--space-6);
786
- border-bottom: var(--border-width) solid var(--color-border-subtle);
787
- padding-bottom: var(--space-2);
788
- }
789
-
790
- .nav-tabs__item {
791
- position: relative;
792
- display: inline-flex;
793
- align-items: center;
794
- justify-content: center;
795
-
796
- padding: var(--space-1) var(--space-2);
797
- font-size: var(--text-sm);
798
- font-weight: 500;
799
-
800
- background: none;
801
- border: none;
802
- cursor: pointer;
803
-
804
- color: var(--color-text);
805
- -webkit-text-decoration: none;
806
- text-decoration: none;
807
-
808
- transition: color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease;
809
- }
810
-
811
- .nav-tabs__item:hover {
812
- color: var(--color-text-muted);
813
- }
814
-
815
- .nav-tabs__item:focus-visible {
816
- outline: none;
817
- box-shadow: 0 0 0 1px var(--color-surface),
818
- 0 0 0 3px var(--focus-ring-color);
819
- border-radius: var(--radius-sm);
820
- }
821
-
822
- .nav-tabs__item--active,
823
- .nav-tabs__item[aria-selected="true"] {
824
- color: var(--color-text);
825
- font-weight: 600;
826
- }
827
-
828
- .nav-tabs__item--active::after,
829
- .nav-tabs__item[aria-selected="true"]::after {
830
- content: "";
831
- position: absolute;
832
- bottom: calc(var(--border-width) * -1);
833
- left: 0;
834
- width: 100%;
835
- height: var(--tab-indicator-height); /* already used in nav--sub */
836
- background-color: var(--color-accent);
837
- }
838
-
839
- .nav-tabs__item--disabled,
840
- .nav-tabs__item[disabled] {
841
- opacity: 0.45;
842
- cursor: not-allowed;
843
- pointer-events: none;
844
- }
845
-
846
- .nav-tabs__item:hover:not(.nav-tabs__item--active):not([aria-selected="true"]) {
847
- color: var(--color-text);
848
- background-color: var(--color-surface-subtle);
849
- border-radius: var(--radius-sm);
850
- }
851
-
852
- .nav-tabs--compact {
853
- gap: var(--space-4);
854
- padding-bottom: var(--space-1);
855
- }
856
-
857
- .nav-tabs--compact .nav-tabs__item {
858
- padding: var(--space-0_5) 0;
859
- font-size: var(--text-xs);
860
- }
861
-
862
- .nav-tabs__item {
863
- gap: var(--space-2);
864
- }
865
-
866
- .nav-tabs__icon {
867
- width: var(--icon-sm);
868
- height: var(--icon-sm);
869
- flex-shrink: 0;
870
- }
871
-
872
- .nav-tabs__badge {
873
- display: inline-flex;
874
- align-items: center;
875
- justify-content: center;
876
-
877
- min-width: 1.25rem;
878
- height: 1.25rem;
879
-
880
- padding-left: var(--space-1);
881
-
882
- padding-right: var(--space-1);
883
-
884
- background-color: var(--accent-soft-surface, var(--color-accent-soft));
885
- color: var(--accent-soft-on, var(--color-on-accent));
886
-
887
- font-size: var(--text-xs);
888
- font-weight: 500;
889
-
890
- border-radius: var(--radius-pill);
891
-
892
- line-height: 1;
893
- flex-shrink: 0;
894
- }
895
-
896
- .nav-tabs__item--active .nav-tabs__badge,
897
- .nav-tabs__item[aria-selected="true"] .nav-tabs__badge {
898
- background-color: var(--accent-soft-surface-strong, var(--accent-soft-surface));
899
- color: var(--accent-soft-on, var(--color-on-accent));
900
- }
1
+ .nav{align-items:center;display:flex;gap:var(--space-6)}.nav__item,.nav__link{align-items:center;color:var(--color-text);cursor:pointer;display:inline-flex;font-size:var(--text-sm);gap:var(--space-2);padding:var(--space-1) 0;position:relative;-webkit-text-decoration:none;text-decoration:none;transition:color .15s ease,background-color .15s ease,border-color .15s ease,box-shadow .15s ease}.nav__item:hover,.nav__link:hover{color:var(--color-text-muted)}.nav__item:active,.nav__link:active{background-color:var(--color-surface-subtle);color:var(--color-text)}.nav__item:focus-visible,.nav__link:focus-visible{border-radius:var(--radius-sm);box-shadow:0 0 0 1px var(--color-surface),0 0 0 3px var(--focus-ring-color);outline:none}.nav__item--active,.nav__item--active:hover,.nav__link--active,.nav__link--active:hover{color:var(--link-text-hover);font-weight:600;-webkit-text-decoration:none;text-decoration:none}.nav__item--disabled,.nav__link--disabled{cursor:not-allowed;opacity:.45;pointer-events:none}.nav__item svg,.nav__link svg{stroke:currentColor;fill:currentColor;height:1em;width:1em}.nav--a .nav__item,.nav--a .nav__link{padding:var(--space-2) var(--space-2)}.nav--b .nav__item,.nav--b .nav__link{padding:var(--space-1) var(--space-1)}.nav--c .nav__item,.nav--c .nav__link{font-size:var(--text-xs);gap:var(--space-1);padding:0 var(--space-1)}.nav--c .nav__item svg,.nav--c .nav__link svg{height:.875em;width:.875em}.nav-section{gap:var(--space-6)}.nav-section,.nav__brand{align-items:center;display:inline-flex}.nav__brand{gap:var(--space-3)}.nav__brand--compact{gap:var(--space-2)}.nav__logo{align-items:center;display:inline-flex;justify-content:center}.nav__logo .logo{padding:0}.nav__actions{align-items:center;display:inline-flex;gap:var(--space-3)}.nav__toggle{background-color:transparent;border:var(--border-width) solid transparent;border-radius:var(--radius-sm);color:var(--color-text);cursor:pointer;display:none;padding:var(--space-2);transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease}.nav__toggle svg{stroke:currentColor;height:24px;width:24px}.nav__toggle:hover{background-color:var(--color-surface-subtle);border-color:var(--color-border-subtle)}.nav__toggle:active{background-color:var(--color-muted-bg)}.nav__toggle:focus-visible{box-shadow:0 0 0 1px var(--color-surface),0 0 0 3px var(--focus-ring-color);outline:none}.nav__toggle--active{background-color:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-text)}.nav--primary{align-items:center;display:flex;gap:var(--space-6)}.nav--primary .nav__item,.nav--primary .nav__link{border-radius:var(--radius-sm);padding:var(--space-2) var(--space-2)}.nav--primary .nav__item:hover,.nav--primary .nav__link:hover{background-color:var(--color-surface-subtle)}.nav--primary .nav__item--active,.nav--primary .nav__link--active{background-color:var(--color-accent-soft);color:var(--color-text)}.nav--sub{border-bottom:var(--border-width) solid var(--color-border-subtle);display:flex;gap:var(--space-6);margin-bottom:var(--space-8)}.nav--sub,.nav--sub .nav__item,.nav--sub .nav__link{padding-bottom:var(--space-2)}.nav--sub .nav__item--active:after,.nav--sub .nav__link--active:after{background-color:var(--color-accent);bottom:calc(var(--border-width)*-1);content:"";height:var(--tab-indicator-height);left:0;position:absolute;width:100%}.nav--sub .nav__item--disabled,.nav--sub .nav__link--disabled{opacity:.45;pointer-events:none}.nav--sub .nav__item:focus-visible,.nav--sub .nav__link:focus-visible{border-radius:var(--radius-sm);box-shadow:0 0 0 1px var(--color-surface),0 0 0 3px var(--focus-ring-color);outline:none}.nav--pills{display:flex;flex-wrap:wrap;gap:var(--space-2)}.nav--pills .nav__item,.nav--pills .nav__link{background-color:var(--color-surface);border:var(--border-width) solid var(--color-border-subtle);border-radius:999px;font-size:var(--text-xs);padding:var(--space-1) var(--space-3)}.nav--pills .nav__item:hover,.nav--pills .nav__link:hover{background-color:var(--color-surface-subtle);border-color:var(--color-border-subtle)}.nav--pills .nav__item--active,.nav--pills .nav__link--active{background-color:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-text)}.nav--pills .nav__item--disabled,.nav--pills .nav__link--disabled{opacity:.45;pointer-events:none}.nav--pills .nav__item:focus-visible,.nav--pills .nav__link:focus-visible{box-shadow:0 0 0 1px var(--color-surface),0 0 0 3px var(--focus-ring-color);outline:none}.nav--vertical{display:flex;flex-direction:column;gap:var(--space-2)}.nav--vertical .nav__item,.nav--vertical .nav__link{padding:var(--space-1) 0}.nav--vertical .nav__item--depth-2,.nav--vertical .nav__link--depth-2{padding-left:var(--space-4)}.nav--vertical .nav__item--depth-3,.nav--vertical .nav__link--depth-3{padding-left:var(--space-6)}.sidebar{gap:var(--space-4)}.sidebar,.sidebar__section{display:flex;flex-direction:column}.sidebar__section{gap:var(--space-2)}.sidebar__section--collapsible .sidebar__section-header{align-items:center;display:flex;gap:var(--space-2);justify-content:space-between}.sidebar__section-title{color:var(--color-text-muted);font-size:var(--text-xs);letter-spacing:.04em;text-transform:uppercase}.sidebar__section-toggle-icon{align-items:center;display:inline-flex;justify-content:center;transition:transform .15s ease}.sidebar__section--expanded .sidebar__section-toggle-icon{transform:rotate(90deg)}.sidebar__section--collapsed .sidebar__nav{display:none}.sidebar__nav{display:flex;flex-direction:column;gap:var(--space-1)}.sidebar__nav .nav__item,.sidebar__nav .nav__link{border-radius:var(--radius-sm);color:var(--color-text);cursor:pointer;font-size:var(--text-sm);padding:var(--space-1) 0;-webkit-text-decoration:underline;text-decoration:underline}.sidebar__nav .nav__item:hover,.sidebar__nav .nav__link:hover{background-color:var(--color-surface-subtle);color:var(--color-text-muted);-webkit-text-decoration:none;text-decoration:none}.sidebar__nav .nav__item--active,.sidebar__nav .nav__link--active{color:var(--color-accent);font-weight:600}.sidebar__section--collapsible .sidebar__section-header{cursor:pointer}.sidebar__nav .nav__item:focus-visible,.sidebar__nav .nav__link:focus-visible{outline:2px solid var(--focus-ring-color,var(--color-accent-soft));outline-offset:var(--space-1)}.announcement{background-color:var(--color-muted-bg);border-bottom:var(--border-width) solid var(--color-muted-border);color:var(--color-text-muted);padding:var(--space-2) 0;width:100%}.announcement__inner{align-items:center;display:flex;gap:var(--space-4);justify-content:space-between;margin:0 auto;max-width:var(--content-width-xl);padding:0 var(--space-6)}.announcement__content{align-items:center;display:flex;gap:var(--space-2)}.announcement__icon{align-items:center;display:inline-flex;font-size:var(--text-sm);justify-content:center}.announcement__link,.announcement__text{font-size:var(--text-xs)}.announcement__link{color:var(--color-text);-webkit-text-decoration:none;text-decoration:none}.announcement__link:hover{-webkit-text-decoration:underline;text-decoration:underline}.announcement__close{align-items:center;background-color:transparent;border:var(--border-width) solid transparent;border-radius:var(--radius-sm);cursor:pointer;display:inline-flex;justify-content:center;padding:var(--space-1);transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease}.announcement__close:hover{background-color:var(--color-surface-subtle);border-color:var(--color-border-subtle)}.announcement__close:focus-visible{box-shadow:0 0 0 1px var(--color-surface),0 0 0 3px var(--focus-ring-color);outline:none}.announcement--info{background-color:var(--color-info-soft);color:var(--color-info-strong)}.announcement--success{background-color:var(--color-success-soft);color:var(--color-success-strong)}.announcement--warning{background-color:var(--color-warning-soft);color:var(--color-warning-strong)}.announcement--danger{background-color:var(--color-danger-soft);color:var(--color-danger-strong)}.breadcrumbs{align-items:center;color:var(--color-text-muted);display:flex;flex-wrap:wrap;font-size:var(--text-xs);gap:var(--space-2)}.breadcrumbs__item{align-items:center;display:inline-flex;gap:var(--space-1);max-width:100%}.breadcrumbs__link{color:var(--color-text);max-width:16rem;overflow:hidden;-webkit-text-decoration:underline;text-decoration:underline;text-overflow:ellipsis;white-space:nowrap}.breadcrumbs__link:hover{color:var(--color-text-muted)}.breadcrumbs__link:focus-visible{border-radius:var(--radius-sm);box-shadow:0 0 0 1px var(--color-surface),0 0 0 3px var(--focus-ring-color);outline:none}.breadcrumbs__separator{color:var(--color-text-soft)}.pagination{font-size:var(--text-xs);gap:var(--space-1)}.pagination,.pagination__item{align-items:center;display:inline-flex}.pagination__item{background-color:var(--color-surface);border:var(--border-width) solid var(--color-border-subtle);border-radius:var(--radius-sm);color:var(--color-text);cursor:pointer;height:2rem;justify-content:center;min-width:2rem;padding:0 var(--space-2);-webkit-text-decoration:none;text-decoration:none;transition:background-color .15s ease,border-color .15s ease,color .15s ease,box-shadow .15s ease}.pagination__item:hover{background-color:var(--color-surface-subtle);border-color:var(--color-border-subtle);color:var(--color-text)}.pagination__item:active{background-color:var(--color-muted-bg)}.pagination__item:focus-visible{box-shadow:0 0 0 1px var(--color-surface),0 0 0 3px var(--focus-ring-color);outline:none}.pagination__item--active{background-color:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-text)}.pagination__item--disabled{cursor:not-allowed;opacity:.4;pointer-events:none}.pagination__next,.pagination__prev{min-width:auto;padding:0 var(--space-2)}.pagination__ellipsis{background-color:transparent;border:none;cursor:default;min-width:auto}.toolbar{align-items:center;background-color:var(--color-surface);border:var(--border-width) solid var(--color-border-subtle);border-radius:var(--radius-md);display:flex;gap:var(--space-4);justify-content:space-between;padding:var(--space-3) var(--space-4)}.toolbar--dense{padding:var(--space-2) var(--space-3)}.toolbar--spacious{padding:var(--space-4) var(--space-5)}.toolbar__section{align-items:center;display:flex;gap:var(--space-3)}.toolbar__title{font-size:var(--text-sm);font-weight:500}.toolbar__actions{align-items:center;display:inline-flex;gap:var(--space-3)}.footer .nav{display:flex;flex-direction:column;gap:var(--space-2)}.footer .nav.nav--vertical{align-items:flex-start}.footer .nav__item,.footer .nav__link{color:var(--color-footer-text);font-size:var(--text-sm);opacity:.85;padding-left:0;padding-right:0;text-align:left}.footer .nav__item:hover,.footer .nav__link:hover{opacity:1}.footer .nav__item--active,.footer .nav__link--active{font-weight:500;opacity:1}.nav-panel{background-color:var(--color-bg-elevated);border-left:var(--border-width) solid var(--color-border-subtle);bottom:0;box-shadow:var(--shadow-2);display:flex;flex-direction:column;gap:var(--space-4);max-width:100%;opacity:0;padding:var(--space-4);pointer-events:none;position:fixed;right:0;top:0;transform:translateX(100%);transition:transform .2s ease,opacity .2s ease;width:18rem;z-index:40}.nav-panel--open{opacity:1;pointer-events:auto;transform:translateX(0)}.nav-backdrop{background-color:var(--overlay-backdrop-default);bottom:0;left:0;opacity:0;pointer-events:none;position:fixed;right:0;top:0;transition:opacity .2s ease;z-index:30}.nav-backdrop--visible{opacity:1;pointer-events:auto}.nav--mobile{display:flex;flex-direction:column;gap:var(--space-4)}.nav--mobile .nav__item,.nav--mobile .nav__link{font-size:var(--text-md);padding:var(--space-2) 0}@media (max-width:768px){.nav__toggle{align-items:center;display:inline-flex}}.nav-tabs{align-items:center;border-bottom:var(--border-width) solid var(--color-border-subtle);display:flex;gap:var(--space-6);padding-bottom:var(--space-2)}.nav-tabs__item{align-items:center;background:none;border:none;color:var(--color-text);cursor:pointer;display:inline-flex;font-size:var(--text-sm);font-weight:500;justify-content:center;padding:var(--space-1) var(--space-2);position:relative;-webkit-text-decoration:none;text-decoration:none;transition:color .15s ease,background-color .15s ease,box-shadow .15s ease}.nav-tabs__item:hover{color:var(--color-text-muted)}.nav-tabs__item:focus-visible{border-radius:var(--radius-sm);box-shadow:0 0 0 1px var(--color-surface),0 0 0 3px var(--focus-ring-color);outline:none}.nav-tabs__item--active,.nav-tabs__item[aria-selected=true]{color:var(--color-text);font-weight:600}.nav-tabs__item--active:after,.nav-tabs__item[aria-selected=true]:after{background-color:var(--color-accent);bottom:calc(var(--border-width)*-1);content:"";height:var(--tab-indicator-height);left:0;position:absolute;width:100%}.nav-tabs__item--disabled,.nav-tabs__item[disabled]{cursor:not-allowed;opacity:.45;pointer-events:none}.nav-tabs__item:hover:not(.nav-tabs__item--active):not([aria-selected=true]){background-color:var(--color-surface-subtle);border-radius:var(--radius-sm);color:var(--color-text)}.nav-tabs--compact{gap:var(--space-4);padding-bottom:var(--space-1)}.nav-tabs--compact .nav-tabs__item{font-size:var(--text-xs);padding:var(--space-0_5) 0}.nav-tabs__item{gap:var(--space-2)}.nav-tabs__icon{flex-shrink:0;height:var(--icon-sm);width:var(--icon-sm)}.nav-tabs__badge{align-items:center;background-color:var(--accent-soft-surface,var(--color-accent-soft));border-radius:var(--radius-pill);color:var(--accent-soft-on,var(--color-on-accent));display:inline-flex;flex-shrink:0;font-size:var(--text-xs);font-weight:500;height:1.25rem;justify-content:center;line-height:1;min-width:1.25rem;padding-left:var(--space-1);padding-right:var(--space-1)}.nav-tabs__item--active .nav-tabs__badge,.nav-tabs__item[aria-selected=true] .nav-tabs__badge{background-color:var(--accent-soft-surface-strong,var(--accent-soft-surface));color:var(--accent-soft-on,var(--color-on-accent))}