@24vlh/vds 0.1.10 → 0.2.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.
Files changed (53) hide show
  1. package/dist/components/action-bar.css +111 -0
  2. package/dist/components/action-bar.min.css +1 -0
  3. package/dist/components/authoring.css +262 -42
  4. package/dist/components/authoring.min.css +1 -1
  5. package/dist/components/avatar.css +229 -0
  6. package/dist/components/avatar.min.css +1 -0
  7. package/dist/components/badge-tag.css +235 -0
  8. package/dist/components/badge-tag.min.css +1 -0
  9. package/dist/components/buttons.css +90 -98
  10. package/dist/components/buttons.min.css +1 -1
  11. package/dist/components/command.css +846 -2
  12. package/dist/components/command.min.css +1 -1
  13. package/dist/components/content-blocks.css +328 -6
  14. package/dist/components/content-blocks.min.css +1 -1
  15. package/dist/components/description-list.css +117 -0
  16. package/dist/components/description-list.min.css +1 -0
  17. package/dist/components/flows.css +60 -47
  18. package/dist/components/flows.min.css +1 -1
  19. package/dist/components/header-footer.css +178 -18
  20. package/dist/components/header-footer.min.css +1 -1
  21. package/dist/components/hero.css +148 -14
  22. package/dist/components/hero.min.css +1 -1
  23. package/dist/components/icons.css +23 -11
  24. package/dist/components/icons.min.css +1 -1
  25. package/dist/components/inbox.css +5 -0
  26. package/dist/components/inbox.min.css +1 -1
  27. package/dist/components/navigation.css +67 -7
  28. package/dist/components/navigation.min.css +1 -1
  29. package/dist/components/overlays.css +121 -19
  30. package/dist/components/overlays.min.css +1 -1
  31. package/dist/components/progress.css +322 -0
  32. package/dist/components/progress.min.css +1 -0
  33. package/dist/components/skeleton.css +22 -3
  34. package/dist/components/skeleton.min.css +1 -1
  35. package/dist/components/state.css +172 -0
  36. package/dist/components/state.min.css +1 -0
  37. package/dist/components/tables.css +93 -15
  38. package/dist/components/tables.min.css +1 -1
  39. package/dist/components/tabs.css +116 -4
  40. package/dist/components/tabs.min.css +1 -1
  41. package/dist/components/toasts.css +115 -41
  42. package/dist/components/toasts.min.css +1 -1
  43. package/dist/components/tooltips-popovers.css +135 -93
  44. package/dist/components/tooltips-popovers.min.css +1 -1
  45. package/dist/components/utilities.css +37 -3
  46. package/dist/components/utilities.min.css +1 -1
  47. package/dist/core.css +43 -21
  48. package/dist/core.min.css +1 -1
  49. package/dist/identity.css +107 -1
  50. package/dist/identity.min.css +1 -1
  51. package/dist/vds.css +5432 -1775
  52. package/dist/vds.min.css +1 -1
  53. package/package.json +1 -1
@@ -27,9 +27,19 @@
27
27
  --header-height: var(--space-16);
28
28
  --header-logo-height: var(--space-12);
29
29
  --header-toggle-size: var(--space-6);
30
+ --header-padding-inline: var(--space-6);
31
+ --header-gap: var(--space-6);
32
+ --header-max-width: var(--layout-max-width);
33
+ --header-panel-bg: var(--color-surface);
34
+ --header-panel-border: var(--color-border-subtle);
35
+ --header-panel-shadow: var(--shadow-1);
30
36
 
31
37
  --footer-logo-height: var(--space-8);
32
38
  --footer-col-min-width: var(--space-40);
39
+ --footer-padding-block: var(--space-10);
40
+ --footer-padding-inline: var(--space-6);
41
+ --footer-gap: var(--space-8);
42
+ --footer-max-width: var(--layout-max-width);
33
43
  }
34
44
 
35
45
  /* ---------------------------------------------------------
@@ -47,24 +57,77 @@
47
57
  .header--sticky {
48
58
  position: sticky;
49
59
  top: 0;
60
+ top: var(--header-sticky-offset, 0);
50
61
  }
51
62
 
52
63
  .header--elevated {
53
- box-shadow: var(--shadow-1);
64
+ box-shadow: var(--header-shadow, var(--shadow-1));
54
65
  }
55
66
 
56
67
  .header__inner {
57
68
  display: flex;
58
69
  align-items: center;
59
70
  justify-content: space-between;
71
+ gap: var(--header-gap);
60
72
 
61
73
  height: var(--header-height);
62
- padding: 0 var(--space-6);
74
+ padding: 0 var(--header-padding-inline);
63
75
 
64
- max-width: var(--layout-max-width);
76
+ max-width: var(--header-max-width);
65
77
  margin: 0 auto;
66
78
  }
67
79
 
80
+ .header--compact {
81
+ --header-height: var(--space-12);
82
+ --header-logo-height: var(--space-8);
83
+ }
84
+
85
+ .header--tall {
86
+ --header-height: var(--space-20);
87
+ --header-logo-height: var(--space-14);
88
+ }
89
+
90
+ .header--borderless {
91
+ border-bottom: none;
92
+ }
93
+
94
+ .header--transparent {
95
+ background-color: transparent;
96
+ }
97
+
98
+ .header__left,
99
+ .header__right,
100
+ .header__center {
101
+ display: flex;
102
+ align-items: center;
103
+ gap: var(--header-gap);
104
+ }
105
+
106
+ .header__right {
107
+ margin-left: auto;
108
+ }
109
+
110
+ .header__center {
111
+ margin: 0 auto;
112
+ }
113
+
114
+ .header__stack {
115
+ display: flex;
116
+ flex-direction: column;
117
+ gap: var(--space-1);
118
+ }
119
+
120
+ .header__actions {
121
+ display: inline-flex;
122
+ align-items: center;
123
+ gap: var(--space-3);
124
+ }
125
+
126
+ .header__meta {
127
+ font-size: var(--text-xs);
128
+ color: var(--color-text-muted);
129
+ }
130
+
68
131
  /* ---------------------------------------------------------
69
132
  3. LOGO HANDLING IN HEADER
70
133
  --------------------------------------------------------- */
@@ -98,7 +161,8 @@
98
161
  gap: var(--space-6);
99
162
  }
100
163
 
101
- .header .nav__item {
164
+ .header .nav__item,
165
+ .header .nav__link {
102
166
  font-size: var(--text-sm);
103
167
  color: var(--color-text);
104
168
  padding: var(--space-1) 0;
@@ -108,16 +172,19 @@
108
172
  position: relative;
109
173
  }
110
174
 
111
- .header .nav__item:hover {
175
+ .header .nav__item:hover,
176
+ .header .nav__link:hover {
112
177
  color: var(--color-text-muted);
113
178
  }
114
179
 
115
- .header .nav__item--active {
180
+ .header .nav__item--active,
181
+ .header .nav__link--active {
116
182
  color: var(--color-text);
117
183
  font-weight: 600;
118
184
  }
119
185
 
120
- .header .nav__item--active::after {
186
+ .header .nav__item--active::after,
187
+ .header .nav__link--active::after {
121
188
  content: "";
122
189
  position: absolute;
123
190
  left: 0;
@@ -128,13 +195,15 @@
128
195
  border-radius: var(--radius-pill, var(--radius-md));
129
196
  }
130
197
 
131
- .header .nav__item--disabled {
198
+ .header .nav__item--disabled,
199
+ .header .nav__link--disabled {
132
200
  opacity: 0.5;
133
201
  cursor: default;
134
202
  pointer-events: none;
135
203
  }
136
204
 
137
- .header .nav__item:focus-visible {
205
+ .header .nav__item:focus-visible,
206
+ .header .nav__link:focus-visible {
138
207
  outline: var(--border-width) solid var(--focus-ring-color);
139
208
  outline-offset: var(--space-1);
140
209
  border-radius: var(--radius-sm);
@@ -165,6 +234,30 @@
165
234
  outline-offset: var(--space-1);
166
235
  }
167
236
 
237
+ .header__panel {
238
+ display: none;
239
+ position: absolute;
240
+ top: var(--header-height);
241
+ left: 0;
242
+ right: 0;
243
+ max-height: calc(100vh - var(--header-height));
244
+ max-height: calc(100svh - var(--header-height));
245
+ max-height: calc(100dvh - var(--header-height));
246
+ overflow-y: auto;
247
+ padding: var(--space-6);
248
+ background-color: var(--header-panel-bg);
249
+ border-bottom: var(--border-width) solid var(--header-panel-border);
250
+ box-shadow: var(--header-panel-shadow);
251
+ z-index: var(--z-header);
252
+ }
253
+
254
+ .header__panel .nav {
255
+ display: flex;
256
+ flex-direction: column;
257
+ align-items: flex-start;
258
+ gap: var(--space-4);
259
+ }
260
+
168
261
  @media (max-width: 768px) {
169
262
 
170
263
  .header .nav {
@@ -184,23 +277,47 @@
184
277
 
185
278
  position: absolute;
186
279
  top: var(--header-height);
280
+ left: 0;
187
281
  right: 0;
188
282
  width: 100%;
189
283
 
190
284
  padding: var(--space-6);
191
- background-color: var(--color-surface);
192
- border-bottom: var(--border-width) solid var(--color-border-subtle);
285
+ background-color: var(--header-panel-bg);
286
+ border-bottom: var(--border-width) solid var(--header-panel-border);
287
+ box-shadow: var(--header-panel-shadow);
193
288
  }
194
289
 
195
290
  .header.header--nav-open .nav__item {
196
291
  padding: var(--space-1) 0;
197
292
  }
293
+
294
+ .header.header--nav-open .nav__link {
295
+ padding: var(--space-1) 0;
296
+ }
297
+
298
+ .header--nav-panel .header__inner .nav {
299
+ display: none;
300
+ }
301
+
302
+ .header--nav-panel.header--nav-open .header__panel {
303
+ display: block;
304
+ }
305
+
306
+ .header--nav-panel.header--nav-open .nav {
307
+ position: static;
308
+ width: auto;
309
+ padding: 0;
310
+ background-color: transparent;
311
+ border-bottom: none;
312
+ box-shadow: none;
313
+ }
198
314
  }
199
315
 
200
316
  /* ---------------------------------------------------------
201
317
  6. SKIP-LINK (ACCESSIBILITY)
202
318
  --------------------------------------------------------- */
203
319
 
320
+ .skip-link,
204
321
  .header .skip-link {
205
322
  position: absolute;
206
323
  left: var(--space-4);
@@ -216,7 +333,7 @@
216
333
  z-index: var(--z-header);
217
334
  }
218
335
 
219
- .header .skip-link:focus-visible {
336
+ .skip-link:focus-visible {
220
337
  transform: translateY(0);
221
338
  outline: var(--border-width) solid var(--focus-ring-color);
222
339
  outline-offset: var(--space-1);
@@ -231,21 +348,55 @@
231
348
  background-color: var(--color-footer-bg);
232
349
  color: var(--color-footer-text);
233
350
 
234
- padding-top: var(--space-10);
235
- padding-bottom: var(--space-10);
351
+ padding-top: var(--footer-padding-block);
352
+ padding-bottom: var(--footer-padding-block);
236
353
  border-top: var(--border-width) solid var(--color-border-strong);
237
354
  }
238
355
 
239
356
  .footer__inner {
240
- max-width: var(--layout-max-width);
357
+ max-width: var(--footer-max-width);
241
358
  margin: 0 auto;
242
359
 
243
360
  display: flex;
244
- flex-wrap: nowrap;
361
+ flex-wrap: wrap;
245
362
  justify-content: space-between;
246
363
  align-items: flex-start;
364
+ gap: var(--footer-gap);
365
+
366
+ padding: 0 var(--footer-padding-inline);
367
+ }
368
+
369
+ .footer--compact {
370
+ --footer-padding-block: var(--space-6);
371
+ }
247
372
 
248
- padding: 0 var(--space-6);
373
+ .footer--borderless {
374
+ border-top: none;
375
+ }
376
+
377
+ .footer__columns {
378
+ display: grid;
379
+ grid-template-columns: repeat(auto-fit, minmax(var(--footer-col-min-width), 1fr));
380
+ grid-gap: var(--footer-gap);
381
+ gap: var(--footer-gap);
382
+ width: 100%;
383
+ }
384
+
385
+ .footer__bottom {
386
+ margin-top: var(--space-8);
387
+ display: flex;
388
+ flex-wrap: wrap;
389
+ align-items: center;
390
+ justify-content: space-between;
391
+ gap: var(--space-4);
392
+ width: 100%;
393
+ }
394
+
395
+ .footer__actions {
396
+ display: flex;
397
+ flex-wrap: wrap;
398
+ align-items: center;
399
+ gap: var(--space-3);
249
400
  }
250
401
 
251
402
  /* ---------------------------------------------------------
@@ -257,6 +408,7 @@
257
408
  flex-direction: column;
258
409
  gap: var(--space-3);
259
410
  min-width: var(--footer-col-min-width);
411
+ flex: 1 1 var(--footer-col-min-width);
260
412
  }
261
413
 
262
414
  .footer__col-title {
@@ -328,6 +480,10 @@
328
480
  opacity: 0.75;
329
481
  }
330
482
 
483
+ .footer__bottom .footer__meta {
484
+ margin-top: 0;
485
+ }
486
+
331
487
  .footer__meta,
332
488
  .footer__meta p,
333
489
  .footer__meta a,
@@ -353,12 +509,16 @@
353
509
 
354
510
  .vds-shell {
355
511
  min-height: 100vh;
512
+ min-height: 100svh;
513
+ min-height: 100dvh;
356
514
  display: flex;
357
515
  flex-direction: column;
516
+ width: 100%;
358
517
  }
359
518
 
360
519
  .vds-shell__main {
361
- flex: 1 0 auto;
520
+ flex: 1 1 auto;
521
+ min-width: 0;
362
522
  }
363
523
 
364
524
  .vds-shell__footer {
@@ -1 +1 @@
1
- .vds-header-footer,[data-vds-header-footer]{--header-height:var(--space-16);--header-logo-height:var(--space-12);--header-toggle-size:var(--space-6);--footer-logo-height:var(--space-8);--footer-col-min-width:var(--space-40)}.header{background-color:var(--color-header-bg);border-bottom:var(--border-width) solid var(--color-header-border);position:relative;width:100%;z-index:var(--z-header)}.header--sticky{position:sticky;top:0}.header--elevated{box-shadow:var(--shadow-1)}.header__inner{align-items:center;display:flex;height:var(--header-height);justify-content:space-between;margin:0 auto;max-width:var(--layout-max-width);padding:0 var(--space-6)}.header .logo{align-items:center;display:inline-flex;height:100%;justify-content:center;margin-right:var(--space-6);padding:0}.header .logo svg{height:var(--header-logo-height);width:auto}.header .logo[href]:hover{opacity:.9}.header .nav{align-items:center;display:flex;gap:var(--space-6)}.header .nav__item{color:var(--color-text);font-size:var(--text-sm);padding:var(--space-1) 0;position:relative;-webkit-text-decoration:none;text-decoration:none;transition:color .15s ease}.header .nav__item:hover{color:var(--color-text-muted)}.header .nav__item--active{color:var(--color-text);font-weight:600}.header .nav__item--active:after{background-color:var(--color-accent);border-radius:var(--radius-pill,var(--radius-md));bottom:calc(var(--space-1)*-1);content:"";height:var(--border-width);left:0;position:absolute;right:0}.header .nav__item--disabled{cursor:default;opacity:.5;pointer-events:none}.header .nav__item:focus-visible{border-radius:var(--radius-sm);outline:var(--border-width) solid var(--focus-ring-color);outline-offset:var(--space-1)}.header .header__toggle{background-color:transparent;border:none;border-radius:var(--radius-sm);color:var(--color-text);cursor:pointer;display:none;padding:var(--space-2)}.header .header__toggle svg{stroke:currentColor;height:var(--header-toggle-size);width:var(--header-toggle-size)}.header .header__toggle:focus-visible{outline:var(--border-width) solid var(--focus-ring-color);outline-offset:var(--space-1)}@media (max-width:768px){.header .nav{display:none}.header .header__toggle{align-items:center;display:flex;justify-content:center}.header.header--nav-open .nav{background-color:var(--color-surface);border-bottom:var(--border-width) solid var(--color-border-subtle);display:flex;flex-direction:column;gap:var(--space-4);padding:var(--space-6);position:absolute;right:0;top:var(--header-height);width:100%}.header.header--nav-open .nav__item{padding:var(--space-1) 0}}.header .skip-link{background-color:var(--color-accent);border-radius:var(--radius-sm);color:var(--color-on-accent);left:var(--space-4);padding:var(--space-2) var(--space-3);position:absolute;-webkit-text-decoration:none;text-decoration:none;top:var(--space-4);transform:translateY(calc(var(--space-6)*-1));transition:transform .15s ease;z-index:var(--z-header)}.header .skip-link:focus-visible{outline:var(--border-width) solid var(--focus-ring-color);outline-offset:var(--space-1);transform:translateY(0)}.footer{background-color:var(--color-footer-bg);border-top:var(--border-width) solid var(--color-border-strong);color:var(--color-footer-text);padding-bottom:var(--space-10);padding-top:var(--space-10);width:100%}.footer__inner{align-items:flex-start;display:flex;flex-wrap:nowrap;justify-content:space-between;margin:0 auto;max-width:var(--layout-max-width);padding:0 var(--space-6)}.footer__col{display:flex;flex-direction:column;gap:var(--space-3);min-width:var(--footer-col-min-width)}.footer__col-title{font-size:var(--text-sm);font-weight:600;margin-bottom:var(--space-2)}.footer__link{color:var(--color-footer-text);font-size:var(--text-sm);opacity:.85;-webkit-text-decoration:none;text-decoration:none;transition:opacity .15s ease}.footer__link:hover{opacity:1}.footer__link:focus-visible{border-radius:var(--radius-sm);outline:var(--border-width) solid var(--focus-ring-color);outline-offset:var(--space-1)}@media (max-width:768px){.footer__inner{flex-direction:column;gap:var(--space-10)}}.footer .logo{align-items:center;display:inline-flex;justify-content:flex-start;margin-bottom:var(--space-6);padding:0}.footer .logo svg{height:var(--footer-logo-height);width:auto}.footer .logo-frame,.footer .logo-rail{stroke:var(--color-logo-ink-inverse)}.footer .logo-chevron{stroke:var(--color-logo-accent-inverse)}.footer__meta{font-size:var(--text-xs);margin-top:var(--space-8);opacity:.75}.footer__meta,.footer__meta a,.footer__meta p,.footer__meta small,.footer__meta span{color:var(--color-footer-text)}.footer__meta a{-webkit-text-decoration:none;text-decoration:none}.footer__meta a:focus-visible{border-radius:var(--radius-sm);outline:var(--border-width) solid var(--focus-ring-color);outline-offset:var(--space-1)}.vds-shell{display:flex;flex-direction:column;min-height:100vh}.vds-shell__main{flex:1 0 auto}.vds-shell__footer{margin-top:auto}
1
+ .vds-header-footer,[data-vds-header-footer]{--header-height:var(--space-16);--header-logo-height:var(--space-12);--header-toggle-size:var(--space-6);--header-padding-inline:var(--space-6);--header-gap:var(--space-6);--header-max-width:var(--layout-max-width);--header-panel-bg:var(--color-surface);--header-panel-border:var(--color-border-subtle);--header-panel-shadow:var(--shadow-1);--footer-logo-height:var(--space-8);--footer-col-min-width:var(--space-40);--footer-padding-block:var(--space-10);--footer-padding-inline:var(--space-6);--footer-gap:var(--space-8);--footer-max-width:var(--layout-max-width)}.header{background-color:var(--color-header-bg);border-bottom:var(--border-width) solid var(--color-header-border);position:relative;width:100%;z-index:var(--z-header)}.header--sticky{position:sticky;top:0;top:var(--header-sticky-offset,0)}.header--elevated{box-shadow:var(--header-shadow,var(--shadow-1))}.header__inner{align-items:center;display:flex;gap:var(--header-gap);height:var(--header-height);justify-content:space-between;margin:0 auto;max-width:var(--header-max-width);padding:0 var(--header-padding-inline)}.header--compact{--header-height:var(--space-12);--header-logo-height:var(--space-8)}.header--tall{--header-height:var(--space-20);--header-logo-height:var(--space-14)}.header--borderless{border-bottom:none}.header--transparent{background-color:transparent}.header__center,.header__left,.header__right{align-items:center;display:flex;gap:var(--header-gap)}.header__right{margin-left:auto}.header__center{margin:0 auto}.header__stack{display:flex;flex-direction:column;gap:var(--space-1)}.header__actions{align-items:center;display:inline-flex;gap:var(--space-3)}.header__meta{color:var(--color-text-muted);font-size:var(--text-xs)}.header .logo{align-items:center;display:inline-flex;height:100%;justify-content:center;margin-right:var(--space-6);padding:0}.header .logo svg{height:var(--header-logo-height);width:auto}.header .logo[href]:hover{opacity:.9}.header .nav{align-items:center;display:flex;gap:var(--space-6)}.header .nav__item,.header .nav__link{color:var(--color-text);font-size:var(--text-sm);padding:var(--space-1) 0;position:relative;-webkit-text-decoration:none;text-decoration:none;transition:color .15s ease}.header .nav__item:hover,.header .nav__link:hover{color:var(--color-text-muted)}.header .nav__item--active,.header .nav__link--active{color:var(--color-text);font-weight:600}.header .nav__item--active:after,.header .nav__link--active:after{background-color:var(--color-accent);border-radius:var(--radius-pill,var(--radius-md));bottom:calc(var(--space-1)*-1);content:"";height:var(--border-width);left:0;position:absolute;right:0}.header .nav__item--disabled,.header .nav__link--disabled{cursor:default;opacity:.5;pointer-events:none}.header .nav__item:focus-visible,.header .nav__link:focus-visible{border-radius:var(--radius-sm);outline:var(--border-width) solid var(--focus-ring-color);outline-offset:var(--space-1)}.header .header__toggle{background-color:transparent;border:none;border-radius:var(--radius-sm);color:var(--color-text);cursor:pointer;display:none;padding:var(--space-2)}.header .header__toggle svg{stroke:currentColor;height:var(--header-toggle-size);width:var(--header-toggle-size)}.header .header__toggle:focus-visible{outline:var(--border-width) solid var(--focus-ring-color);outline-offset:var(--space-1)}.header__panel{background-color:var(--header-panel-bg);border-bottom:var(--border-width) solid var(--header-panel-border);box-shadow:var(--header-panel-shadow);display:none;left:0;max-height:calc(100vh - var(--header-height));max-height:calc(100svh - var(--header-height));max-height:calc(100dvh - var(--header-height));overflow-y:auto;padding:var(--space-6);position:absolute;right:0;top:var(--header-height);z-index:var(--z-header)}.header__panel .nav{align-items:flex-start;display:flex;flex-direction:column;gap:var(--space-4)}@media (max-width:768px){.header .nav{display:none}.header .header__toggle{align-items:center;display:flex;justify-content:center}.header.header--nav-open .nav{background-color:var(--header-panel-bg);border-bottom:var(--border-width) solid var(--header-panel-border);box-shadow:var(--header-panel-shadow);display:flex;flex-direction:column;gap:var(--space-4);left:0;padding:var(--space-6);position:absolute;right:0;top:var(--header-height);width:100%}.header.header--nav-open .nav__item,.header.header--nav-open .nav__link{padding:var(--space-1) 0}.header--nav-panel .header__inner .nav{display:none}.header--nav-panel.header--nav-open .header__panel{display:block}.header--nav-panel.header--nav-open .nav{background-color:transparent;border-bottom:none;box-shadow:none;padding:0;position:static;width:auto}}.header .skip-link,.skip-link{background-color:var(--color-accent);border-radius:var(--radius-sm);color:var(--color-on-accent);left:var(--space-4);padding:var(--space-2) var(--space-3);position:absolute;-webkit-text-decoration:none;text-decoration:none;top:var(--space-4);transform:translateY(calc(var(--space-6)*-1));transition:transform .15s ease;z-index:var(--z-header)}.skip-link:focus-visible{outline:var(--border-width) solid var(--focus-ring-color);outline-offset:var(--space-1);transform:translateY(0)}.footer{background-color:var(--color-footer-bg);border-top:var(--border-width) solid var(--color-border-strong);color:var(--color-footer-text);padding-bottom:var(--footer-padding-block);padding-top:var(--footer-padding-block);width:100%}.footer__inner{align-items:flex-start;display:flex;flex-wrap:wrap;gap:var(--footer-gap);justify-content:space-between;margin:0 auto;max-width:var(--footer-max-width);padding:0 var(--footer-padding-inline)}.footer--compact{--footer-padding-block:var(--space-6)}.footer--borderless{border-top:none}.footer__columns{grid-gap:var(--footer-gap);display:grid;gap:var(--footer-gap);grid-template-columns:repeat(auto-fit,minmax(var(--footer-col-min-width),1fr));width:100%}.footer__bottom{gap:var(--space-4);justify-content:space-between;margin-top:var(--space-8);width:100%}.footer__actions,.footer__bottom{align-items:center;display:flex;flex-wrap:wrap}.footer__actions,.footer__col{gap:var(--space-3)}.footer__col{display:flex;flex:1 1 var(--footer-col-min-width);flex-direction:column;min-width:var(--footer-col-min-width)}.footer__col-title{font-size:var(--text-sm);font-weight:600;margin-bottom:var(--space-2)}.footer__link{color:var(--color-footer-text);font-size:var(--text-sm);opacity:.85;-webkit-text-decoration:none;text-decoration:none;transition:opacity .15s ease}.footer__link:hover{opacity:1}.footer__link:focus-visible{border-radius:var(--radius-sm);outline:var(--border-width) solid var(--focus-ring-color);outline-offset:var(--space-1)}@media (max-width:768px){.footer__inner{flex-direction:column;gap:var(--space-10)}}.footer .logo{align-items:center;display:inline-flex;justify-content:flex-start;margin-bottom:var(--space-6);padding:0}.footer .logo svg{height:var(--footer-logo-height);width:auto}.footer .logo-frame,.footer .logo-rail{stroke:var(--color-logo-ink-inverse)}.footer .logo-chevron{stroke:var(--color-logo-accent-inverse)}.footer__meta{font-size:var(--text-xs);margin-top:var(--space-8);opacity:.75}.footer__bottom .footer__meta{margin-top:0}.footer__meta,.footer__meta a,.footer__meta p,.footer__meta small,.footer__meta span{color:var(--color-footer-text)}.footer__meta a{-webkit-text-decoration:none;text-decoration:none}.footer__meta a:focus-visible{border-radius:var(--radius-sm);outline:var(--border-width) solid var(--focus-ring-color);outline-offset:var(--space-1)}.vds-shell{display:flex;flex-direction:column;min-height:100vh;min-height:100svh;min-height:100dvh;width:100%}.vds-shell__main{flex:1 1 auto;min-width:0}.vds-shell__footer{margin-top:auto}
@@ -26,6 +26,7 @@
26
26
  .vds-hero {
27
27
  --hero-skeleton-speed: 1.2s;
28
28
  --hero-eyebrow-letter-spacing: var(--letter-loose);
29
+ --hero-eyebrow-color: var(--color-text-muted);
29
30
 
30
31
  --hero-text-max-default: 60ch;
31
32
  --hero-text-max-a: 70ch;
@@ -34,10 +35,24 @@
34
35
 
35
36
  --hero-media-aspect-ratio: 16/9;
36
37
  --hero-media-max-width: 32rem;
38
+ --hero-media-radius: var(--radius-lg);
37
39
 
38
40
  --hero-metric-min-width: 11rem;
41
+ --hero-metric-bg: var(--color-surface-subtle);
42
+ --hero-metric-border: transparent;
39
43
 
40
44
  --hero-accent-line-thickness: 3px;
45
+ --hero-body-gap: var(--space-4);
46
+ --hero-actions-gap: var(--space-4);
47
+ --hero-actions-margin-top: var(--space-6);
48
+ --hero-meta-gap: var(--space-3);
49
+ --hero-meta-color: var(--color-text-muted);
50
+ --hero-badge-bg: var(--color-surface-subtle);
51
+ --hero-badge-border: var(--color-border-subtle);
52
+ --hero-badge-text: var(--color-text);
53
+ --hero-point-icon: var(--color-accent);
54
+ --hero-border-color: var(--color-border-subtle);
55
+ --hero-soft-bg: var(--color-surface-subtle);
41
56
 
42
57
  --hero-full-overlay: linear-gradient(to bottom, rgba(0,0,0,0.4), rgba(0,0,0,0.0));
43
58
  }
@@ -52,6 +67,8 @@
52
67
  color: var(--color-text);
53
68
  padding-top: var(--space-12);
54
69
  padding-bottom: var(--space-16);
70
+ padding-left: var(--hero-padding-inline, var(--space-6));
71
+ padding-right: var(--hero-padding-inline, var(--space-6));
55
72
  }
56
73
 
57
74
  .hero__inner {
@@ -68,7 +85,7 @@
68
85
  font-weight: var(--font-weight-semibold);
69
86
  text-transform: uppercase;
70
87
  letter-spacing: var(--hero-eyebrow-letter-spacing);
71
- color: var(--color-text-muted);
88
+ color: var(--hero-eyebrow-color);
72
89
  }
73
90
 
74
91
  .hero__title {
@@ -78,7 +95,15 @@
78
95
  line-height: 1.15;
79
96
  }
80
97
 
81
- .hero__desc {
98
+ .hero__body {
99
+ display: flex;
100
+ flex-direction: column;
101
+ gap: var(--hero-body-gap);
102
+ min-width: 0;
103
+ }
104
+
105
+ .hero__desc,
106
+ .hero__subtitle {
82
107
  font-size: var(--text-md);
83
108
  line-height: var(--line-height-normal);
84
109
  color: var(--color-text-muted);
@@ -87,9 +112,19 @@
87
112
 
88
113
  .hero__actions {
89
114
  display: flex;
90
- gap: var(--space-4);
115
+ gap: var(--hero-actions-gap);
91
116
  flex-wrap: wrap;
92
- margin-top: var(--space-6);
117
+ margin-top: var(--hero-actions-margin-top);
118
+ }
119
+
120
+ .hero__actions--stack {
121
+ flex-direction: column;
122
+ align-items: flex-start;
123
+ }
124
+
125
+ .hero__actions--center {
126
+ justify-content: center;
127
+ width: 100%;
93
128
  }
94
129
 
95
130
  .hero__text-pill {
@@ -97,77 +132,126 @@
97
132
  color: var(--color-text-on-strong);
98
133
  border-radius: var(--radius-sm);
99
134
  display: inline-block;
135
+ padding: var(--space-1) var(--space-3);
136
+ font-size: var(--text-xs);
137
+ align-self: flex-start;
138
+ }
139
+
140
+ .hero__badge {
141
+ display: inline-flex;
142
+ align-items: center;
143
+ gap: var(--space-2);
144
+ padding: var(--space-1) var(--space-3);
145
+ border-radius: 999px;
146
+ font-size: var(--text-xs);
147
+ border: var(--border-width) solid var(--hero-badge-border);
148
+ background: var(--hero-badge-bg);
149
+ color: var(--hero-badge-text);
150
+ align-self: flex-start;
151
+ }
152
+
153
+ .hero__meta {
154
+ display: flex;
155
+ flex-wrap: wrap;
156
+ gap: var(--hero-meta-gap);
157
+ font-size: var(--text-xs);
158
+ color: var(--hero-meta-color);
100
159
  }
101
160
 
102
161
  /*---------------------------------------------------------
103
162
  3. DENSITY VARIANTS (MUTUALLY EXCLUSIVE)
104
163
  ---------------------------------------------------------*/
105
164
 
165
+ .hero.hero--a,
106
166
  .hero--a .hero {
107
167
  padding-top: var(--space-20);
108
168
  padding-bottom: var(--space-24);
109
169
  }
110
170
 
171
+ .hero.hero--a .hero__title,
111
172
  .hero--a .hero__title {
112
173
  font-size: var(--text-5xl);
113
174
  max-width: var(--hero-text-max-a);
114
175
  }
115
176
 
116
- .hero--a .hero__desc {
177
+ .hero.hero--a .hero__desc,
178
+ .hero.hero--a .hero__subtitle,
179
+ .hero--a .hero__desc,
180
+ .hero--a .hero__subtitle {
117
181
  font-size: var(--text-lg);
118
182
  }
119
183
 
184
+ .hero.hero--b,
120
185
  .hero--b .hero {
121
186
  padding-top: var(--space-16);
122
187
  padding-bottom: var(--space-20);
123
188
  }
124
189
 
190
+ .hero.hero--b .hero__title,
125
191
  .hero--b .hero__title {
126
192
  font-size: var(--text-4xl);
127
193
  }
128
194
 
129
- .hero--b .hero__desc {
195
+ .hero.hero--b .hero__desc,
196
+ .hero.hero--b .hero__subtitle,
197
+ .hero--b .hero__desc,
198
+ .hero--b .hero__subtitle {
130
199
  font-size: var(--text-md);
131
200
  }
132
201
 
202
+ .hero.hero--c,
133
203
  .hero--c .hero {
134
204
  padding-top: var(--space-12);
135
205
  padding-bottom: var(--space-16);
136
206
  }
137
207
 
208
+ .hero.hero--c .hero__title,
138
209
  .hero--c .hero__title {
139
210
  font-size: var(--text-3xl);
140
211
  max-width: var(--hero-text-max-c);
141
212
  }
142
213
 
143
- .hero--c .hero__desc {
214
+ .hero.hero--c .hero__desc,
215
+ .hero.hero--c .hero__subtitle,
216
+ .hero--c .hero__desc,
217
+ .hero--c .hero__subtitle {
144
218
  font-size: var(--text-sm);
145
219
  }
146
220
 
221
+ .hero.hero--compact,
147
222
  .hero--compact .hero {
148
223
  padding-top: var(--space-10);
149
224
  padding-bottom: var(--space-12);
150
225
  }
151
226
 
227
+ .hero.hero--compact .hero__title,
152
228
  .hero--compact .hero__title {
153
229
  font-size: var(--text-2xl);
154
230
  max-width: var(--hero-text-max-compact);
155
231
  }
156
232
 
157
- .hero--compact .hero__desc {
233
+ .hero.hero--compact .hero__desc,
234
+ .hero.hero--compact .hero__subtitle,
235
+ .hero--compact .hero__desc,
236
+ .hero--compact .hero__subtitle {
158
237
  font-size: var(--text-sm);
159
238
  }
160
239
 
240
+ .hero.hero--minimal,
161
241
  .hero--minimal .hero {
162
242
  padding-top: var(--space-8);
163
243
  padding-bottom: var(--space-10);
164
244
  }
165
245
 
246
+ .hero.hero--minimal .hero__title,
166
247
  .hero--minimal .hero__title {
167
248
  font-size: var(--text-xl);
168
249
  }
169
250
 
170
- .hero--minimal .hero__desc {
251
+ .hero.hero--minimal .hero__desc,
252
+ .hero.hero--minimal .hero__subtitle,
253
+ .hero--minimal .hero__desc,
254
+ .hero--minimal .hero__subtitle {
171
255
  display: none;
172
256
  }
173
257
 
@@ -177,28 +261,57 @@
177
261
 
178
262
  .hero--split .hero__inner {
179
263
  display: grid;
180
- grid-template-columns: 1fr 1fr;
264
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
181
265
  grid-gap: var(--space-12);
182
266
  gap: var(--space-12);
183
267
  }
184
268
 
185
269
  .hero--with-media .hero__inner {
186
270
  display: grid;
187
- grid-template-columns: 1fr var(--hero-media-max-width);
271
+ grid-template-columns: minmax(0, 1fr) minmax(0, var(--hero-media-max-width));
188
272
  grid-gap: var(--space-12);
189
273
  gap: var(--space-12);
190
274
  }
191
275
 
276
+ .hero--with-media.hero--media-left .hero__media {
277
+ order: -1;
278
+ }
279
+
280
+ .hero--split.hero--split-reverse .hero__points {
281
+ order: -1;
282
+ }
283
+
284
+ .hero--center .hero__inner {
285
+ align-items: center;
286
+ text-align: center;
287
+ }
288
+
289
+ .hero--center .hero__actions,
290
+ .hero--center .hero__metrics,
291
+ .hero--center .hero__points {
292
+ justify-content: center;
293
+ }
294
+
295
+ .hero--soft {
296
+ background-color: var(--hero-soft-bg);
297
+ }
298
+
299
+ .hero--bordered {
300
+ border-top: var(--border-width) solid var(--hero-border-color);
301
+ border-bottom: var(--border-width) solid var(--hero-border-color);
302
+ }
303
+
192
304
  .hero__media {
193
305
  display: flex;
194
306
  justify-content: center;
195
307
  align-items: center;
308
+ min-width: 0;
196
309
  }
197
310
 
198
311
  .hero__media-inner {
199
312
  width: 100%;
200
313
  max-width: 100%;
201
- border-radius: var(--radius-lg);
314
+ border-radius: var(--hero-media-radius);
202
315
  overflow: hidden;
203
316
  display: flex;
204
317
  align-items: stretch;
@@ -217,7 +330,13 @@
217
330
  aspect-ratio: var(--hero-media-aspect-ratio);
218
331
  -o-object-fit: cover;
219
332
  object-fit: cover;
220
- border-radius: var(--radius-lg);
333
+ border-radius: var(--hero-media-radius);
334
+ }
335
+
336
+ .hero__media--bleed .hero__media-inner,
337
+ .hero__media--bleed img,
338
+ .hero__media--bleed picture {
339
+ border-radius: 0;
221
340
  }
222
341
 
223
342
  /*---------------------------------------------------------*
@@ -307,8 +426,13 @@
307
426
  margin-top: var(--space-8);
308
427
  }
309
428
 
429
+ .hero__metrics--compact {
430
+ gap: var(--space-4);
431
+ }
432
+
310
433
  .hero__metric {
311
434
  background-color: var(--hero-metric-bg);
435
+ border: var(--border-width) solid var(--hero-metric-border);
312
436
  padding: var(--space-4);
313
437
  border-radius: var(--radius-md);
314
438
  display: flex;
@@ -316,6 +440,10 @@
316
440
  gap: var(--space-2);
317
441
  }
318
442
 
443
+ .hero__metric--outline {
444
+ --hero-metric-border: var(--color-border-subtle);
445
+ }
446
+
319
447
  .hero__metric-value {
320
448
  font-size: var(--text-xl);
321
449
  font-weight: var(--font-weight-bold);
@@ -378,7 +506,13 @@
378
506
  height: var(--icon-sm);
379
507
  flex-shrink: 0;
380
508
  margin-top: 0.125rem;
381
- color: var(--color-accent);
509
+ color: var(--hero-point-icon);
510
+ }
511
+
512
+ .hero__row {
513
+ display: flex;
514
+ align-items: flex-start;
515
+ gap: var(--space-4);
382
516
  }
383
517
 
384
518
  /*---------------------------------------------------------*