@24vlh/vds 0.1.1 → 0.1.2

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 +1,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))}
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
+ }