@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,450 +1 @@
1
- /************************************************************
2
- * VLAH DESIGN SYSTEM (VDS) - Sections System
3
- *
4
- * Responsibilities:
5
- * - Provide the fundamental block-level layout system used across all
6
- * marketing, documentation, and application pages
7
- * - Define universal section spacing (XS–XL) with legacy A/B/C support
8
- * - Implement section headers (eyebrow, title, subtitle), alignment variants,
9
- * surfaces, alt backgrounds, and full divider patterns
10
- * - Supply grid utilities (2–6 columns + auto-fit), stacks (vertical /
11
- * horizontal), inset sections, split sections, and reversed split layouts
12
- *
13
- * System Notes:
14
- * - Fully token-driven: section-spacing-*, text scales, radius, surfaces,
15
- * border lanes, grid-min, and layout-max-width
16
- * - Pure CSS; responsive behaviour uses safe grid/flex reflow with no JS
17
- * - Namespaced to be compatible with legacy VDS layouts and new v1 rhythms
18
- ************************************************************/
19
-
20
- /* ---------------------------------------------------------
21
- 1. BASE SECTION CONTAINER
22
- --------------------------------------------------------- */
23
-
24
- .section {
25
- width: 100%;
26
- padding-top: var(--section-spacing-md);
27
- padding-bottom: var(--section-spacing-md);
28
- position: relative;
29
- background-color: var(--color-bg);
30
- }
31
-
32
- .section__inner {
33
- max-width: var(--layout-max-width);
34
- margin: 0 auto;
35
- padding: 0 var(--space-6);
36
-
37
- display: flex;
38
- flex-direction: column;
39
- gap: var(--space-6);
40
- }
41
-
42
- /* ---------------------------------------------------------
43
- 2. LEGACY DENSITY SYSTEM (A / B / C / FLUSH)
44
- --------------------------------------------------------- */
45
-
46
- .section--a {
47
- padding-top: var(--space-20);
48
- padding-bottom: var(--space-20);
49
- }
50
-
51
- .section--b {
52
- padding-top: var(--space-14);
53
- padding-bottom: var(--space-14);
54
- }
55
-
56
- .section--c {
57
- padding-top: var(--space-10);
58
- padding-bottom: var(--space-10);
59
- }
60
-
61
- .section--flush {
62
- padding-top: 0;
63
- padding-bottom: 0;
64
- }
65
-
66
- /* ---------------------------------------------------------
67
- 3. NEW UNIVERSAL SECTION RHYTHM (XS–XL)
68
- --------------------------------------------------------- */
69
-
70
- .section--xs {
71
- padding-top: var(--section-spacing-xs);
72
- padding-bottom: var(--section-spacing-xs);
73
- }
74
-
75
- .section--sm {
76
- padding-top: var(--section-spacing-sm);
77
- padding-bottom: var(--section-spacing-sm);
78
- }
79
-
80
- .section--md {
81
- padding-top: var(--section-spacing-md);
82
- padding-bottom: var(--section-spacing-md);
83
- }
84
-
85
- .section--lg {
86
- padding-top: var(--section-spacing-lg);
87
- padding-bottom: var(--section-spacing-lg);
88
- }
89
-
90
- .section--xl {
91
- padding-top: var(--section-spacing-xl);
92
- padding-bottom: var(--section-spacing-xl);
93
- }
94
-
95
- /* ---------------------------------------------------------
96
- 4. SECTION HEADER SYSTEM
97
- --------------------------------------------------------- */
98
-
99
- .section__header {
100
- display: flex;
101
- flex-direction: column;
102
- gap: var(--space-3);
103
- max-width: 70ch;
104
- }
105
-
106
- .section__eyebrow {
107
- font-size: var(--text-xs);
108
- font-weight: 600;
109
- letter-spacing: 0.05em;
110
- text-transform: uppercase;
111
- color: var(--section-brand-eyebrow, var(--color-text-muted));
112
- }
113
-
114
- .section__title {
115
- font-size: var(--text-2xl);
116
- font-weight: 600;
117
- line-height: 1.2;
118
- color: var(--section-brand-title, var(--color-text));
119
- }
120
-
121
- .section__subtitle {
122
- font-size: var(--text-sm);
123
- color: var(--section-brand-subtitle, var(--color-text-muted));
124
- max-width: 60ch;
125
- }
126
-
127
- .section--a .section__title {
128
- font-size: var(--text-3xl);
129
- }
130
-
131
- .section--b .section__title {
132
- font-size: var(--text-2xl);
133
- }
134
-
135
- .section--c .section__title {
136
- font-size: var(--text-xl);
137
- }
138
-
139
- .section--center .section__header {
140
- text-align: center;
141
- align-items: center;
142
- }
143
-
144
- .section--right .section__header {
145
- text-align: right;
146
- align-items: flex-end;
147
- }
148
-
149
- .section__header--tight {
150
- gap: var(--space-2);
151
- }
152
-
153
- .section__header--wide {
154
- gap: var(--space-6);
155
- }
156
-
157
- /* ---------------------------------------------------------
158
- 5. SECTION DIVIDERS
159
- --------------------------------------------------------- */
160
-
161
- .section--divided {
162
- border-top: 1px solid var(--color-border-subtle);
163
- }
164
-
165
- .section--divided + .section--divided {
166
- border-top: none;
167
- border-bottom: 1px solid var(--color-border-subtle);
168
- }
169
-
170
- .section--divided-x {
171
- border-left: 1px solid var(--color-border-subtle);
172
- border-right: 1px solid var(--color-border-subtle);
173
- }
174
-
175
- /* ---------------------------------------------------------
176
- 6. SURFACES (surface / subtle / brand)
177
- --------------------------------------------------------- */
178
-
179
- .section--surface {
180
- background-color: var(--color-surface);
181
- border: 1px solid var(--color-border-subtle);
182
- border-radius: var(--radius-md);
183
-
184
- padding-top: var(--section-spacing-lg);
185
- padding-bottom: var(--section-spacing-lg);
186
-
187
- transition: background-color 0.15s ease;
188
- }
189
-
190
- .section--surface:hover {
191
- background-color: var(--color-surface-hover);
192
- }
193
-
194
- .section--subtle {
195
- background-color: var(--color-surface-subtle);
196
- }
197
-
198
- .section--brand {
199
- background-color: var(--color-accent-soft);
200
- }
201
-
202
- /* ---------------------------------------------------------
203
- 7. ALTERNATE BACKGROUND
204
- --------------------------------------------------------- */
205
-
206
- .section--alt {
207
- background-color: var(--color-bg-soft);
208
- }
209
-
210
- /* ---------------------------------------------------------
211
- 8. SPLIT SECTIONS - CLEAN GRID REVERSAL
212
- --------------------------------------------------------- */
213
-
214
- .section--split .section__inner {
215
- display: grid;
216
- grid-template-columns: 1fr 1fr;
217
- grid-gap: var(--space-12);
218
- gap: var(--space-12);
219
- }
220
-
221
- .section--split-reverse .section__inner {
222
- display: grid;
223
- grid-template-columns: 1fr 1fr;
224
- grid-gap: var(--space-12);
225
- gap: var(--space-12);
226
- }
227
-
228
- .section--split-reverse .section__inner > :first-child {
229
- order: 2;
230
- }
231
-
232
- .section--split-reverse .section__inner > :last-child {
233
- order: 1;
234
- }
235
-
236
- /* ---------------------------------------------------------
237
- 9. INSET SECTIONS (Base + SM/LG)
238
- --------------------------------------------------------- */
239
-
240
- .section--inset .section__inner {
241
- background-color: var(--color-surface);
242
- border-radius: var(--radius-md);
243
- border: 1px solid var(--color-border-subtle);
244
- padding: var(--space-10);
245
- }
246
-
247
- .section--inset-sm .section__inner {
248
- padding: var(--space-6);
249
- }
250
-
251
- .section--inset-lg .section__inner {
252
- padding: var(--space-14);
253
- }
254
-
255
- /* ---------------------------------------------------------
256
- 10. COLUMN GRIDS (2/3/4/5/6/auto) + GAP VARIANTS
257
- --------------------------------------------------------- */
258
-
259
- .section__grid-2,
260
- .section__grid-3,
261
- .section__grid-4,
262
- .section__grid-5,
263
- .section__grid-6,
264
- .section__grid-auto {
265
- display: grid;
266
- grid-gap: var(--space-10);
267
- gap: var(--space-10);
268
- }
269
-
270
- .section__grid-2 {
271
- grid-template-columns: repeat(2, 1fr);
272
- }
273
-
274
- .section__grid-3 {
275
- grid-template-columns: repeat(3, 1fr);
276
- }
277
-
278
- .section__grid-4 {
279
- grid-template-columns: repeat(4, 1fr);
280
- }
281
-
282
- .section__grid-5 {
283
- grid-template-columns: repeat(5, 1fr);
284
- }
285
-
286
- .section__grid-6 {
287
- grid-template-columns: repeat(6, 1fr);
288
- }
289
-
290
- .section__grid-auto {
291
- grid-template-columns: repeat(auto-fit, minmax(var(--grid-min), 1fr));
292
- }
293
-
294
- .section__grid-sm {
295
- gap: var(--space-4);
296
- }
297
-
298
- .section__grid-md {
299
- gap: var(--space-6);
300
- }
301
-
302
- .section__grid-lg {
303
- gap: var(--space-14);
304
- }
305
-
306
- /* ---------------------------------------------------------
307
- 11. CONTENT STACKS (VERTICAL)
308
- --------------------------------------------------------- */
309
-
310
- .section__stack {
311
- display: flex;
312
- flex-direction: column;
313
- gap: var(--space-6);
314
- }
315
-
316
- .section__stack-sm {
317
- display: flex;
318
- flex-direction: column;
319
- gap: var(--space-4);
320
- }
321
-
322
- .section__stack-lg {
323
- display: flex;
324
- flex-direction: column;
325
- gap: var(--space-10);
326
- }
327
-
328
- /* ---------------------------------------------------------
329
- 12. INLINE STACKS (HORIZONTAL)
330
- --------------------------------------------------------- */
331
-
332
- .section__inline {
333
- display: flex;
334
- flex-direction: row;
335
- align-items: center;
336
- gap: var(--space-3);
337
- }
338
-
339
- .section__inline-sm {
340
- display: flex;
341
- flex-direction: row;
342
- align-items: center;
343
- gap: var(--space-2);
344
- }
345
-
346
- .section__inline-lg {
347
- display: flex;
348
- flex-direction: row;
349
- align-items: center;
350
- gap: var(--space-4);
351
- }
352
-
353
- /* ---------------------------------------------------------
354
- 13. VALUE / LIST SECTIONS
355
- --------------------------------------------------------- */
356
-
357
- .section__list {
358
- display: flex;
359
- flex-direction: column;
360
- gap: var(--space-3);
361
- }
362
-
363
- .section__list-item {
364
- display: flex;
365
- align-items: flex-start;
366
- gap: var(--space-3);
367
- font-size: var(--text-sm);
368
- color: var(--color-text);
369
- }
370
-
371
- .section__list-item svg {
372
- width: 1.25em;
373
- height: 1.25em;
374
- stroke: var(--color-accent);
375
- fill: none;
376
- flex-shrink: 0;
377
- }
378
-
379
- .section__list-item-title {
380
- font-weight: 600;
381
- color: var(--color-text);
382
- }
383
-
384
- .section__list-item-desc {
385
- font-size: var(--text-sm);
386
- color: var(--color-text-muted);
387
- }
388
-
389
- /* ---------------------------------------------------------
390
- 14. RESPONSIVE BEHAVIOUR
391
- --------------------------------------------------------- */
392
-
393
- @media (max-width: 1280px) {
394
- .section__grid-2,
395
- .section__grid-3,
396
- .section__grid-4,
397
- .section__grid-5,
398
- .section__grid-6,
399
- .section__grid-auto {
400
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
401
- }
402
- }
403
-
404
- @media (max-width: 1024px) {
405
- .section--split .section__inner,
406
- .section--split-reverse .section__inner {
407
- grid-template-columns: 1fr;
408
- }
409
-
410
- .section__grid-2,
411
- .section__grid-3,
412
- .section__grid-4,
413
- .section__grid-5,
414
- .section__grid-6,
415
- .section__grid-auto {
416
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
417
- }
418
- }
419
-
420
- @media (max-width: 768px) {
421
-
422
- .section,
423
- .section--a,
424
- .section--b,
425
- .section--c {
426
- padding-top: var(--space-10);
427
- padding-bottom: var(--space-10);
428
- }
429
-
430
- .section__grid-2,
431
- .section__grid-3,
432
- .section__grid-4,
433
- .section__grid-5,
434
- .section__grid-6,
435
- .section__grid-auto {
436
- grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
437
- }
438
-
439
- .section__title {
440
- font-size: var(--text-xl);
441
- }
442
-
443
- .section__subtitle {
444
- font-size: var(--text-sm);
445
- }
446
-
447
- .section--inset .section__inner {
448
- padding: var(--space-6);
449
- }
450
- }
1
+ .section{background-color:var(--color-bg);padding-bottom:var(--section-spacing-md);padding-top:var(--section-spacing-md);position:relative;width:100%}.section__inner{display:flex;flex-direction:column;gap:var(--space-6);margin:0 auto;max-width:var(--layout-max-width);padding:0 var(--space-6)}.section--a{padding-bottom:var(--space-20);padding-top:var(--space-20)}.section--b{padding-bottom:var(--space-14);padding-top:var(--space-14)}.section--c{padding-bottom:var(--space-10);padding-top:var(--space-10)}.section--flush{padding-bottom:0;padding-top:0}.section--xs{padding-bottom:var(--section-spacing-xs);padding-top:var(--section-spacing-xs)}.section--sm{padding-bottom:var(--section-spacing-sm);padding-top:var(--section-spacing-sm)}.section--md{padding-bottom:var(--section-spacing-md);padding-top:var(--section-spacing-md)}.section--lg{padding-bottom:var(--section-spacing-lg);padding-top:var(--section-spacing-lg)}.section--xl{padding-bottom:var(--section-spacing-xl);padding-top:var(--section-spacing-xl)}.section__header{display:flex;flex-direction:column;gap:var(--space-3);max-width:70ch}.section__eyebrow{color:var(--section-brand-eyebrow,var(--color-text-muted));font-size:var(--text-xs);font-weight:600;letter-spacing:.05em;text-transform:uppercase}.section__title{color:var(--section-brand-title,var(--color-text));font-size:var(--text-2xl);font-weight:600;line-height:1.2}.section__subtitle{color:var(--section-brand-subtitle,var(--color-text-muted));font-size:var(--text-sm);max-width:60ch}.section--a .section__title{font-size:var(--text-3xl)}.section--b .section__title{font-size:var(--text-2xl)}.section--c .section__title{font-size:var(--text-xl)}.section--center .section__header{align-items:center;text-align:center}.section--right .section__header{align-items:flex-end;text-align:right}.section__header--tight{gap:var(--space-2)}.section__header--wide{gap:var(--space-6)}.section--divided{border-top:1px solid var(--color-border-subtle)}.section--divided+.section--divided{border-bottom:1px solid var(--color-border-subtle);border-top:none}.section--divided-x{border-left:1px solid var(--color-border-subtle);border-right:1px solid var(--color-border-subtle)}.section--surface{background-color:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);padding-bottom:var(--section-spacing-lg);padding-top:var(--section-spacing-lg);transition:background-color .15s ease}.section--surface:hover{background-color:var(--color-surface-hover)}.section--subtle{background-color:var(--color-surface-subtle)}.section--brand{background-color:var(--color-accent-soft)}.section--alt{background-color:var(--color-bg-soft)}.section--split .section__inner,.section--split-reverse .section__inner{grid-gap:var(--space-12);display:grid;gap:var(--space-12);grid-template-columns:1fr 1fr}.section--split-reverse .section__inner>:first-child{order:2}.section--split-reverse .section__inner>:last-child{order:1}.section--inset .section__inner{background-color:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);padding:var(--space-10)}.section--inset-sm .section__inner{padding:var(--space-6)}.section--inset-lg .section__inner{padding:var(--space-14)}.section__grid-2,.section__grid-3,.section__grid-4,.section__grid-5,.section__grid-6,.section__grid-auto{grid-gap:var(--space-10);display:grid;gap:var(--space-10)}.section__grid-2{grid-template-columns:repeat(2,1fr)}.section__grid-3{grid-template-columns:repeat(3,1fr)}.section__grid-4{grid-template-columns:repeat(4,1fr)}.section__grid-5{grid-template-columns:repeat(5,1fr)}.section__grid-6{grid-template-columns:repeat(6,1fr)}.section__grid-auto{grid-template-columns:repeat(auto-fit,minmax(var(--grid-min),1fr))}.section__grid-sm{gap:var(--space-4)}.section__grid-md{gap:var(--space-6)}.section__grid-lg{gap:var(--space-14)}.section__stack{display:flex;flex-direction:column;gap:var(--space-6)}.section__stack-sm{display:flex;flex-direction:column;gap:var(--space-4)}.section__stack-lg{display:flex;flex-direction:column;gap:var(--space-10)}.section__inline{gap:var(--space-3)}.section__inline,.section__inline-sm{align-items:center;display:flex;flex-direction:row}.section__inline-sm{gap:var(--space-2)}.section__inline-lg{align-items:center;display:flex;flex-direction:row;gap:var(--space-4)}.section__list{display:flex;flex-direction:column;gap:var(--space-3)}.section__list-item{align-items:flex-start;color:var(--color-text);display:flex;font-size:var(--text-sm);gap:var(--space-3)}.section__list-item svg{stroke:var(--color-accent);fill:none;flex-shrink:0;height:1.25em;width:1.25em}.section__list-item-title{color:var(--color-text);font-weight:600}.section__list-item-desc{color:var(--color-text-muted);font-size:var(--text-sm)}@media (max-width:1280px){.section__grid-2,.section__grid-3,.section__grid-4,.section__grid-5,.section__grid-6,.section__grid-auto{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}}@media (max-width:1024px){.section--split .section__inner,.section--split-reverse .section__inner{grid-template-columns:1fr}.section__grid-2,.section__grid-3,.section__grid-4,.section__grid-5,.section__grid-6,.section__grid-auto{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}}@media (max-width:768px){.section,.section--a,.section--b,.section--c{padding-bottom:var(--space-10);padding-top:var(--space-10)}.section__grid-2,.section__grid-3,.section__grid-4,.section__grid-5,.section__grid-6,.section__grid-auto{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}.section__title{font-size:var(--text-xl)}.section__subtitle{font-size:var(--text-sm)}.section--inset .section__inner{padding:var(--space-6)}}