@24vlh/vds 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/LICENSE.txt +201 -0
  2. package/README.md +147 -0
  3. package/dist/components/accordion.css +170 -0
  4. package/dist/components/accordion.min.css +1 -0
  5. package/dist/components/authoring.css +332 -0
  6. package/dist/components/authoring.min.css +1 -0
  7. package/dist/components/buttons.css +683 -0
  8. package/dist/components/buttons.min.css +1 -0
  9. package/dist/components/charts.css +502 -0
  10. package/dist/components/charts.min.css +1 -0
  11. package/dist/components/command.css +521 -0
  12. package/dist/components/command.min.css +1 -0
  13. package/dist/components/content-blocks.css +944 -0
  14. package/dist/components/content-blocks.min.css +1 -0
  15. package/dist/components/doc-block.css +782 -0
  16. package/dist/components/doc-block.min.css +1 -0
  17. package/dist/components/feedback.css +657 -0
  18. package/dist/components/feedback.min.css +1 -0
  19. package/dist/components/flows.css +1101 -0
  20. package/dist/components/flows.min.css +1 -0
  21. package/dist/components/forms-advanced.css +462 -0
  22. package/dist/components/forms-advanced.min.css +1 -0
  23. package/dist/components/forms.css +1831 -0
  24. package/dist/components/forms.min.css +1 -0
  25. package/dist/components/header-footer.css +348 -0
  26. package/dist/components/header-footer.min.css +1 -0
  27. package/dist/components/hero.css +498 -0
  28. package/dist/components/hero.min.css +1 -0
  29. package/dist/components/icons.css +937 -0
  30. package/dist/components/icons.min.css +1 -0
  31. package/dist/components/navigation.css +900 -0
  32. package/dist/components/navigation.min.css +1 -0
  33. package/dist/components/overlays.css +498 -0
  34. package/dist/components/overlays.min.css +1 -0
  35. package/dist/components/sections.css +450 -0
  36. package/dist/components/sections.min.css +1 -0
  37. package/dist/components/skeleton.css +385 -0
  38. package/dist/components/skeleton.min.css +1 -0
  39. package/dist/components/tables.css +591 -0
  40. package/dist/components/tables.min.css +1 -0
  41. package/dist/components/tabs.css +307 -0
  42. package/dist/components/tabs.min.css +1 -0
  43. package/dist/components/toasts.css +421 -0
  44. package/dist/components/toasts.min.css +1 -0
  45. package/dist/components/tooltips-popovers.css +447 -0
  46. package/dist/components/tooltips-popovers.min.css +1 -0
  47. package/dist/components/typography.css +250 -0
  48. package/dist/components/typography.min.css +1 -0
  49. package/dist/components/utilities.css +3434 -0
  50. package/dist/components/utilities.min.css +1 -0
  51. package/dist/core.css +866 -0
  52. package/dist/core.min.css +1 -0
  53. package/dist/identity.css +266 -0
  54. package/dist/identity.min.css +1 -0
  55. package/dist/themes/carbon.css +658 -0
  56. package/dist/themes/carbon.min.css +1 -0
  57. package/dist/themes/graphite.css +658 -0
  58. package/dist/themes/graphite.min.css +1 -0
  59. package/dist/themes/navy.css +657 -0
  60. package/dist/themes/navy.min.css +1 -0
  61. package/dist/themes/slate.css +659 -0
  62. package/dist/themes/slate.min.css +1 -0
  63. package/dist/vds.css +20313 -0
  64. package/dist/vds.min.css +1 -0
  65. package/package.json +64 -0
package/dist/core.css ADDED
@@ -0,0 +1,866 @@
1
+ /************************************************************
2
+ * VLAH DESIGN SYSTEM (VDS) - Primitives Layer
3
+ *
4
+ * Responsibilities:
5
+ * - Define the neutral design tokens: typography, spacing,
6
+ * radii, borders, shadows, layout widths, icons, motion,
7
+ * easing, z-index, and accessibility foundations
8
+ * - Provide the root variable system used by all themes,
9
+ * components, utilities, and layout layers
10
+ * - Establish consistent scales, ratios, and naming patterns
11
+ * that remain invariant across themes and contexts
12
+ *
13
+ * System Notes:
14
+ * - Pure token layer; declares no rendering rules
15
+ * - MUST load before base.css, layout.css, utilities, components, and all themes
16
+ * - Breakpoints listed are reference-only and should be used
17
+ * by higher layers via min-width media queries
18
+ ************************************************************/
19
+
20
+ /* ---------------------------------------------------------
21
+ 1. ROOT TOKEN ARCHITECTURE (Neutral Layer)
22
+ --------------------------------------------------------- */
23
+
24
+ :root {
25
+
26
+ /* -----------------------------------------------------
27
+ TYPOGRAPHY - Families, Scale, Line Heights, Weights
28
+ ----------------------------------------------------- */
29
+ --font-family-sans: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont, "Segoe UI", sans-serif;
30
+ --font-family-mono: "JetBrains Mono", "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
31
+
32
+ --text-xxxs: 0.65rem;
33
+ --text-xxs: 0.75rem;
34
+ --text-xs: 0.8125rem;
35
+ --text-sm: 0.875rem;
36
+ --text-base: 1rem;
37
+ --text-md: 1.0625rem;
38
+ --text-lg: 1.125rem;
39
+ --text-xl: 1.25rem;
40
+ --text-2xl: 1.5rem;
41
+ --text-3xl: 1.875rem;
42
+ --text-4xl: 2.25rem;
43
+ --text-5xl: 3.25rem;
44
+
45
+ --line-height-xs-tight: 0.5;
46
+ --line-height-tight: 1.1;
47
+ --line-height-xl-tight: 1.2;
48
+ --line-height-snug: 1.25;
49
+ --line-height-normal: 1.5;
50
+ --line-height-relaxed: 1.7;
51
+
52
+ --font-weight-regular: 400;
53
+ --font-weight-medium: 500;
54
+ --font-weight-semibold: 600;
55
+ --font-weight-bold: 700;
56
+
57
+ --letter-tight: -0.015em;
58
+ --letter-normal: 0;
59
+ --letter-loose: 0.015em;
60
+
61
+ --footnote-font-size: var(--text-xs);
62
+
63
+ /* -----------------------------------------------------
64
+ SPACING SYSTEM - Space, Gap, Padding, Component Rhythm
65
+ ----------------------------------------------------- */
66
+ --space-0: 0;
67
+ --space-0_5: 0.125rem;
68
+ --space-1: 0.25rem;
69
+ --space-1_5: 0.375rem;
70
+ --space-2: 0.5rem;
71
+ --space-2_5: 0.625rem;
72
+ --space-3: 0.75rem;
73
+ --space-3_5: 0.875rem;
74
+ --space-4: 1rem;
75
+ --space-5: 1.25rem;
76
+ --space-5_5: 1.3125rem;
77
+ --space-6: 1.5rem;
78
+ --space-7: 1.75rem;
79
+ --space-8: 2rem;
80
+ --space-10: 2.5rem;
81
+ --space-12: 3rem;
82
+ --space-14: 3.5rem;
83
+ --space-16: 4rem;
84
+ --space-20: 5rem;
85
+ --space-24: 6rem;
86
+ --space-28: 7rem;
87
+ --space-32: 8rem;
88
+ --space-36: 9rem;
89
+ --space-40: 10rem;
90
+ --space-44: 11rem;
91
+ --space-48: 12rem;
92
+ --space-64: 16rem;
93
+
94
+ --section-spacing-xs: var(--space-6);
95
+ --section-spacing-sm: var(--space-8);
96
+ --section-spacing-md: var(--space-12);
97
+ --section-spacing-lg: var(--space-16);
98
+ --section-spacing-xl: var(--space-20);
99
+
100
+ --gap-xs: var(--space-2);
101
+ --gap-sm: var(--space-3);
102
+ --gap-md: var(--space-6);
103
+ --gap-lg: var(--space-8);
104
+ --gap-xl: var(--space-12);
105
+
106
+ --component-gap-xs: var(--space-2);
107
+ --component-gap-sm: var(--space-3);
108
+ --component-gap-md: var(--space-4);
109
+ --component-gap-lg: var(--space-6);
110
+ --component-gap-xl: var(--space-10);
111
+
112
+ /* -----------------------------------------------------
113
+ RADII, BORDERS, SHADOWS
114
+ ----------------------------------------------------- */
115
+ --radius-none: 0;
116
+ --radius-xs: 2px;
117
+ --radius-sm: 4px;
118
+ --radius-md: 8px;
119
+ --radius-lg: 12px;
120
+ --radius-xl: 18px;
121
+ --radius-full: 999px;
122
+ --radius-pill: 9999px;
123
+
124
+ --border-width: 1px;
125
+ --border-width-strong: 3px;
126
+ --tab-indicator-height: 2px;
127
+
128
+ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
129
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1);
130
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);
131
+ --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.15);
132
+ --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.2);
133
+
134
+ /* -----------------------------------------------------
135
+ LAYOUT - Widths, Containers, Structure
136
+ ----------------------------------------------------- */
137
+ --layout-max-width: 80rem;
138
+
139
+ --content-width-sm: 640px;
140
+ --content-width-md: 768px;
141
+ --content-width-lg: 1024px;
142
+ --content-width-xl: 1200px;
143
+ --content-width-2xl: 1440px;
144
+
145
+ --sidebar-width-md: 280px;
146
+
147
+ --grid-min: 16rem;
148
+
149
+ /* -----------------------------------------------------
150
+ ICONS & AVATARS
151
+ ----------------------------------------------------- */
152
+ --icon-xxs: 1rem;
153
+ --icon-xs: 1.15rem;
154
+ --icon-sm: 1.25rem;
155
+ --icon-md: 1.35rem;
156
+ --icon-lg: 1.75rem;
157
+ --icon-xl: 2.25rem;
158
+
159
+ --icon-container-sm: 1.75rem;
160
+ --icon-container-md: 2.25rem;
161
+ --icon-container-lg: 3rem;
162
+ --icon-container-xl: 3.75rem;
163
+
164
+ --icon-stroke-thin: 1.25;
165
+ --icon-stroke-regular: 1.75;
166
+ --icon-stroke-bold: 2.25;
167
+
168
+ --avatar-size-sm: var(--space-7);
169
+ --avatar-size-md: var(--space-10);
170
+ --avatar-size-lg: var(--space-16);
171
+ --avatar-status-size: var(--space-2);
172
+
173
+ /* -----------------------------------------------------
174
+ MOTION / TRANSITIONS / EASING
175
+ ----------------------------------------------------- */
176
+ --transition-fast: 120ms ease-out;
177
+ --transition-normal: 180ms ease-out;
178
+ --transition-slow: 260ms ease-out;
179
+
180
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
181
+ --ease-in: cubic-bezier(0.32, 0, 0.67, 0);
182
+ --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
183
+
184
+ --motion-none: 0ms;
185
+
186
+ /* -----------------------------------------------------
187
+ Z-INDEX STACK
188
+ ----------------------------------------------------- */
189
+ --z-negative: -1;
190
+ --z-base: 0;
191
+ --z-header: 10;
192
+ --z-backdrop: 80;
193
+ --z-modal: 90;
194
+ --z-drawer: 95;
195
+ --z-toast: 100;
196
+ --z-tooltip: 110;
197
+
198
+ --z-sticky: 40;
199
+ --z-sticky-col: 39;
200
+
201
+ /* -----------------------------------------------------
202
+ ACCESSIBILITY / FOCUS / SELECTION
203
+ ----------------------------------------------------- */
204
+ --focus-ring-width: 2px;
205
+ --focus-ring-offset: 2px;
206
+ }
207
+
208
+ /************************************************************
209
+ * VLAH DESIGN SYSTEM (VDS) - Base Layer
210
+ *
211
+ * Responsibilities:
212
+ * - Set global primitives: type scale, spacing, radii, motion,
213
+ * layout widths, and z-index hierarchy
214
+ * - Apply a modern reset / normalize across all HTML elements
215
+ * - Define structural layout primitives (page flex root, body flex)
216
+ * - Provide default link, list, table, and code behaviours
217
+ * consumed by all other VDS layers
218
+ *
219
+ * System Notes:
220
+ * - Pure CSS: no JS assumptions or behavioural dependencies
221
+ * - Typography, layout utilities, and component styles live in
222
+ * their own modules and layer on top of this
223
+ * - Base must load before themes and before any component CSS
224
+ ************************************************************/
225
+
226
+ /* ---------------------------------------------------------
227
+ 1. BASE TOKEN DEFINITIONS
228
+ --------------------------------------------------------- */
229
+
230
+ a {
231
+ --link-underline-thickness: 2px;
232
+ }
233
+
234
+ /* ---------------------------------------------------------
235
+ 2. MODERN RESET / NORMALIZE
236
+ --------------------------------------------------------- */
237
+
238
+ html {
239
+ box-sizing: border-box;
240
+ line-height: 1.5;
241
+ line-height: var(--line-height-normal);
242
+ -webkit-text-size-adjust: 100%;
243
+ -webkit-font-smoothing: antialiased;
244
+ -moz-osx-font-smoothing: grayscale;
245
+ font-feature-settings: "kern" 1, "liga" 1, "clig" 1, "calt" 1;
246
+ }
247
+
248
+ *, *::before, *::after {
249
+ box-sizing: inherit;
250
+ min-width: 0;
251
+ }
252
+
253
+ * {
254
+ scrollbar-width: thin;
255
+ scrollbar-color: var(--color-border-subtle) transparent;
256
+ -webkit-box-decoration-break: clone;
257
+ box-decoration-break: clone;
258
+ }
259
+
260
+ body {
261
+ margin: 0;
262
+ min-height: 100vh;
263
+ background: var(--color-bg);
264
+ color: var(--color-text);
265
+ font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont, "Segoe UI", sans-serif, sans-serif;
266
+ font-family: var(--font-family-sans), sans-serif;
267
+ font-size: 1rem;
268
+ font-size: var(--text-base);
269
+ text-rendering: optimizeLegibility;
270
+ }
271
+
272
+ img,
273
+ picture,
274
+ video,
275
+ canvas,
276
+ svg {
277
+ display: block;
278
+ max-width: 100%;
279
+ }
280
+
281
+ img {
282
+ height: auto;
283
+ }
284
+
285
+ button,
286
+ input,
287
+ textarea,
288
+ select {
289
+ font: inherit;
290
+ color: inherit;
291
+ margin: 0;
292
+ }
293
+
294
+ button {
295
+ border: none;
296
+ background: none;
297
+ padding: 0;
298
+ }
299
+
300
+ button,
301
+ [role="button"],
302
+ input[type="submit"],
303
+ input[type="button"] {
304
+ cursor: pointer;
305
+ }
306
+
307
+ input[type="number"]::-webkit-inner-spin-button,
308
+ input[type="number"]::-webkit-outer-spin-button {
309
+ -webkit-appearance: none;
310
+ margin: 0;
311
+ }
312
+
313
+ input[type="search"] {
314
+ -webkit-appearance: none;
315
+ outline-offset: -2px;
316
+ }
317
+
318
+ textarea {
319
+ resize: vertical;
320
+ }
321
+
322
+ input,
323
+ select,
324
+ textarea {
325
+ line-height: inherit;
326
+ }
327
+
328
+ fieldset {
329
+ border: 0;
330
+ margin: 0;
331
+ padding: 0;
332
+ }
333
+
334
+ legend {
335
+ padding: 0;
336
+ }
337
+
338
+ h1, h2, h3, h4, h5, h6,
339
+ p,
340
+ ul, ol,
341
+ figure,
342
+ blockquote,
343
+ dl, dd {
344
+ margin: 0;
345
+ }
346
+
347
+ h1, h2, h3, h4, h5, h6 {
348
+ padding: 0;
349
+ color: inherit;
350
+ }
351
+
352
+ p,
353
+ ul, ol,
354
+ figure,
355
+ blockquote {
356
+ padding: 0;
357
+ }
358
+
359
+ ul, ol {
360
+ padding-left: 1.5rem;
361
+ padding-left: var(--space-6);
362
+ }
363
+
364
+ ul ul,
365
+ ul ol,
366
+ ol ul,
367
+ ol ol {
368
+ margin: 0;
369
+ padding-left: 1rem;
370
+ padding-left: var(--space-4);
371
+ }
372
+
373
+ b,
374
+ strong {
375
+ font-weight: 700;
376
+ font-weight: var(--font-weight-bold);
377
+ }
378
+
379
+ hr {
380
+ margin: 1.5rem 0;
381
+ margin: var(--space-6) 0;
382
+ border: none;
383
+ border-top: 1px solid var(--color-border-subtle);
384
+ border-top: var(--border-width) solid var(--color-border-subtle);
385
+ }
386
+
387
+ a {
388
+ color: var(--link-text);
389
+ -webkit-text-decoration: none;
390
+ text-decoration: none;
391
+ transition: color 180ms ease-out;
392
+ transition: color var(--transition-normal);
393
+ }
394
+
395
+ a:hover {
396
+ color: var(--link-text-hover);
397
+ -webkit-text-decoration: underline;
398
+ text-decoration: underline;
399
+ -webkit-text-decoration-skip: ink;
400
+ text-decoration-skip-ink: auto;
401
+ text-decoration-thickness: 1px;
402
+ text-decoration-thickness: var(--link-underline-thickness, 1px);
403
+ }
404
+
405
+ a:active {
406
+ color: var(--link-text-active);
407
+ }
408
+
409
+ table {
410
+ border-collapse: collapse;
411
+ width: 100%;
412
+ }
413
+
414
+ :focus {
415
+ outline: 2px solid var(--focus-ring-color);
416
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
417
+ outline-offset: 2px;
418
+ outline-offset: var(--focus-ring-offset);
419
+ }
420
+
421
+ :focus:not(:focus-visible) {
422
+ outline: none;
423
+ }
424
+
425
+ :focus-visible {
426
+ outline: 2px solid var(--focus-ring-color);
427
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
428
+ outline-offset: 2px;
429
+ outline-offset: var(--focus-ring-offset);
430
+ }
431
+
432
+ ::-moz-selection {
433
+ background: var(--color-selection-bg);
434
+ color: var(--color-selection-text);
435
+ }
436
+
437
+ ::selection {
438
+ background: var(--color-selection-bg);
439
+ color: var(--color-selection-text);
440
+ }
441
+
442
+ @media (prefers-reduced-motion: reduce) {
443
+ :root {
444
+ --transition-fast: var(--motion-none);
445
+ --transition-normal: var(--motion-none);
446
+ --transition-slow: var(--motion-none);
447
+
448
+ --ease-out: linear;
449
+ --ease-in: linear;
450
+ --ease-in-out: linear;
451
+ }
452
+
453
+ * {
454
+ animation-duration: 0ms !important;
455
+ animation-iteration-count: 1 !important;
456
+ transition-duration: 0ms !important;
457
+ scroll-behavior: auto !important;
458
+ }
459
+
460
+ html {
461
+ scroll-behavior: auto;
462
+ }
463
+ }
464
+
465
+ @media (forced-colors: active) {
466
+ * {
467
+ forced-color-adjust: none;
468
+ }
469
+ }
470
+
471
+ /* ---------------------------------------------------------
472
+ 3. GLOBAL STRUCTURE
473
+ --------------------------------------------------------- */
474
+
475
+ html,
476
+ body {
477
+ width: 100%;
478
+ }
479
+
480
+ body {
481
+ display: flex;
482
+ flex-direction: column;
483
+ }
484
+
485
+ main {
486
+ flex: 1 0 auto;
487
+ }
488
+
489
+ footer {
490
+ flex-shrink: 0;
491
+ }
492
+
493
+ /* ---------------------------------------------------------
494
+ 4. CODE STYLES
495
+ --------------------------------------------------------- */
496
+
497
+ code {
498
+ font-family: "JetBrains Mono", "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace, monospace;
499
+ font-family: var(--font-family-mono), monospace;
500
+ font-size: 0.875em;
501
+ }
502
+
503
+ pre {
504
+ font-family: "JetBrains Mono", "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace, monospace;
505
+ font-family: var(--font-family-mono), monospace;
506
+ font-size: 0.875em;
507
+ background: var(--code-bg);
508
+ color: var(--color-text);
509
+ border: 1px solid var(--code-border);
510
+ overflow: auto;
511
+ white-space: pre-wrap;
512
+ word-break: break-word;
513
+ }
514
+
515
+ pre, code {
516
+ -moz-tab-size: 4;
517
+ -o-tab-size: 4;
518
+ tab-size: 4;
519
+ }
520
+
521
+ kbd,
522
+ samp {
523
+ font-family: "JetBrains Mono", "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace, monospace;
524
+ font-family: var(--font-family-mono), monospace;
525
+ }
526
+
527
+ #root, /* React, Vite */
528
+ #app, /* Vue, Svelte, Solid */
529
+ #__next, /* Next.js */
530
+ #__nuxt, /* Nuxt */
531
+ app-root, /* Angular */
532
+ svelte-root, /* Some Svelte starter kits */
533
+ astro-root, /* Astro hybrid apps */
534
+ [qwik-root], /* Qwik */
535
+ .app-root, /* Generic container */
536
+ [data-app-root], /* Custom micro-frontend root */
537
+ [data-spa-root] /* Universal custom attribute */
538
+ {
539
+ display: flex;
540
+ flex-direction: column;
541
+ min-height: 100vh;
542
+ width: 100%;
543
+ }
544
+
545
+ /************************************************************
546
+ * VLAH DESIGN SYSTEM (VDS) - Layout Layer
547
+ *
548
+ * Responsibilities:
549
+ * - Provide the global page-frame architecture (header, content, footer)
550
+ * - Define reusable interior content regions for any block or module
551
+ * - Implement the container system (narrow, normal, wide, tight, relaxed)
552
+ * - Establish the page section vertical rhythm (XS–XL)
553
+ * - Supply structural grid layouts (auto-fit, 2/3/4 column)
554
+ * - Define high-level layouts: sidebar, right-sidebar, split, split-reverse
555
+ *
556
+ * System Notes:
557
+ * - 100% token-driven: widths, gaps, section spacing, sidebar widths
558
+ * - Pure CSS; no JS positioning, no behavioural dependencies
559
+ * - Intended to sit above base.css and before content-blocks/components
560
+ * - Low-level spacing/flex utilities live in utilities.css, not here
561
+ ************************************************************/
562
+
563
+ /* ---------------------------------------------------------
564
+ 1. PAGE FRAME SYSTEM (single-instance)
565
+ --------------------------------------------------------- */
566
+
567
+ header.page-header {
568
+ width: 100%;
569
+ position: relative;
570
+ z-index: 10;
571
+ z-index: var(--z-header);
572
+ }
573
+
574
+ main.page-content {
575
+ width: 100%;
576
+ flex: 1 0 auto;
577
+ }
578
+
579
+ footer.page-footer {
580
+ width: 100%;
581
+ position: relative;
582
+ z-index: 0;
583
+ z-index: var(--z-base);
584
+ }
585
+
586
+ /* ---------------------------------------------------------
587
+ 2. CONTENT REGIONS (multi-instance, reusable)
588
+ --------------------------------------------------------- */
589
+
590
+ .content-header {
591
+ width: 100%;
592
+ }
593
+
594
+ .content-body {
595
+ width: 100%;
596
+ flex: 1 1 auto;
597
+ min-height: 0;
598
+ }
599
+
600
+ .content-footer {
601
+ width: 100%;
602
+ flex-shrink: 0;
603
+ }
604
+
605
+ /* ---------------------------------------------------------
606
+ 3. CONTAINER SYSTEM
607
+ --------------------------------------------------------- */
608
+
609
+ .container {
610
+ width: 100%;
611
+ max-width: 1200px;
612
+ max-width: var(--content-width-xl);
613
+ margin-left: auto;
614
+ margin-right: auto;
615
+ padding-left: 1rem;
616
+ padding-right: 1rem;
617
+ padding-left: var(--space-4);
618
+ padding-right: var(--space-4);
619
+ }
620
+
621
+ .container-wide {
622
+ width: 100%;
623
+ max-width: 1440px;
624
+ max-width: var(--content-width-2xl);
625
+ margin-left: auto;
626
+ margin-right: auto;
627
+ padding-left: 1rem;
628
+ padding-right: 1rem;
629
+ padding-left: var(--space-4);
630
+ padding-right: var(--space-4);
631
+ }
632
+
633
+ .container-narrow {
634
+ width: 100%;
635
+ max-width: 1024px;
636
+ max-width: var(--content-width-lg);
637
+ margin-left: auto;
638
+ margin-right: auto;
639
+ padding-left: 1rem;
640
+ padding-right: 1rem;
641
+ padding-left: var(--space-4);
642
+ padding-right: var(--space-4);
643
+ }
644
+
645
+ .container-tight {
646
+ width: 100%;
647
+ max-width: 768px;
648
+ max-width: var(--content-width-md);
649
+ margin-left: auto;
650
+ margin-right: auto;
651
+ padding-left: 1rem;
652
+ padding-right: 1rem;
653
+ padding-left: var(--space-4);
654
+ padding-right: var(--space-4);
655
+ }
656
+
657
+ .container-relaxed {
658
+ width: 100%;
659
+ max-width: 90ch;
660
+ margin-left: auto;
661
+ margin-right: auto;
662
+ padding-left: 1rem;
663
+ padding-right: 1rem;
664
+ padding-left: var(--space-4);
665
+ padding-right: var(--space-4);
666
+ }
667
+
668
+ @media (max-width: 768px) {
669
+ .container,
670
+ .container-wide,
671
+ .container-narrow,
672
+ .container-tight,
673
+ .container-relaxed {
674
+ padding-left: 0.75rem;
675
+ padding-right: 0.75rem;
676
+ padding-left: var(--space-3);
677
+ padding-right: var(--space-3);
678
+ }
679
+ }
680
+
681
+ .full-bleed {
682
+ width: 100%;
683
+ margin-left: 0;
684
+ margin-right: 0;
685
+ padding-left: 0;
686
+ padding-right: 0;
687
+ }
688
+
689
+ .section-bleed {
690
+ margin-left: calc(-1 * 1rem);
691
+ margin-right: calc(-1 * 1rem);
692
+ margin-left: calc(-1 * var(--space-4));
693
+ margin-right: calc(-1 * var(--space-4));
694
+ }
695
+
696
+ @media (max-width: 768px) {
697
+ .section-bleed {
698
+ margin-left: calc(-1 * 0.75rem);
699
+ margin-right: calc(-1 * 0.75rem);
700
+ margin-left: calc(-1 * var(--space-3));
701
+ margin-right: calc(-1 * var(--space-3));
702
+ }
703
+ }
704
+
705
+ /* ---------------------------------------------------------
706
+ 4. SECTION SPACING (vertical rhythm)
707
+ --------------------------------------------------------- */
708
+
709
+ .section-none {
710
+ padding-top: 0;
711
+ padding-bottom: 0;
712
+ }
713
+
714
+ .section-xs {
715
+ padding-top: 1.5rem;
716
+ padding-bottom: 1.5rem;
717
+ padding-top: var(--section-spacing-xs);
718
+ padding-bottom: var(--section-spacing-xs);
719
+ }
720
+
721
+ .section-sm {
722
+ padding-top: 2rem;
723
+ padding-bottom: 2rem;
724
+ padding-top: var(--section-spacing-sm);
725
+ padding-bottom: var(--section-spacing-sm);
726
+ }
727
+
728
+ .section {
729
+ padding-top: 3rem;
730
+ padding-bottom: 3rem;
731
+ padding-top: var(--section-spacing-md);
732
+ padding-bottom: var(--section-spacing-md);
733
+ }
734
+
735
+ .section-lg {
736
+ padding-top: 4rem;
737
+ padding-bottom: 4rem;
738
+ padding-top: var(--section-spacing-lg);
739
+ padding-bottom: var(--section-spacing-lg);
740
+ }
741
+
742
+ .section-xl {
743
+ padding-top: 5rem;
744
+ padding-bottom: 5rem;
745
+ padding-top: var(--section-spacing-xl);
746
+ padding-bottom: var(--section-spacing-xl);
747
+ }
748
+
749
+ /* ---------------------------------------------------------
750
+ 5. STRUCTURAL GRID LAYOUTS
751
+ --------------------------------------------------------- */
752
+
753
+ .layout-grid-auto {
754
+ display: grid;
755
+ grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
756
+ grid-template-columns: repeat(auto-fit, minmax(var(--grid-min), 1fr));
757
+ grid-gap: 2rem;
758
+ grid-gap: var(--gap-lg);
759
+ gap: 2rem;
760
+ gap: var(--gap-lg);
761
+ }
762
+
763
+ .layout-grid-2 {
764
+ display: grid;
765
+ grid-template-columns: repeat(2, 1fr);
766
+ grid-gap: 2rem;
767
+ grid-gap: var(--gap-lg);
768
+ gap: 2rem;
769
+ gap: var(--gap-lg);
770
+ }
771
+
772
+ .layout-grid-3 {
773
+ display: grid;
774
+ grid-template-columns: repeat(3, 1fr);
775
+ grid-gap: 2rem;
776
+ grid-gap: var(--gap-lg);
777
+ gap: 2rem;
778
+ gap: var(--gap-lg);
779
+ }
780
+
781
+ .layout-grid-4 {
782
+ display: grid;
783
+ grid-template-columns: repeat(4, 1fr);
784
+ grid-gap: 2rem;
785
+ grid-gap: var(--gap-lg);
786
+ gap: 2rem;
787
+ gap: var(--gap-lg);
788
+ }
789
+
790
+ @media (max-width: 768px) {
791
+ .layout-grid-2,
792
+ .layout-grid-3,
793
+ .layout-grid-4 {
794
+ grid-template-columns: 1fr;
795
+ }
796
+ }
797
+
798
+ /* ---------------------------------------------------------
799
+ 6. HIGH-LEVEL SEMANTIC LAYOUTS
800
+ --------------------------------------------------------- */
801
+
802
+ .sidebar-layout {
803
+ display: grid;
804
+ grid-template-columns: 280px 1fr;
805
+ grid-template-columns: var(--sidebar-width-md) 1fr;
806
+ grid-gap: 2rem;
807
+ grid-gap: var(--gap-lg);
808
+ gap: 2rem;
809
+ gap: var(--gap-lg);
810
+ }
811
+
812
+ .sidebar-layout-right {
813
+ display: grid;
814
+ grid-template-columns: 1fr 280px;
815
+ grid-template-columns: 1fr var(--sidebar-width-md);
816
+ grid-gap: 2rem;
817
+ grid-gap: var(--gap-lg);
818
+ gap: 2rem;
819
+ gap: var(--gap-lg);
820
+ }
821
+
822
+ @media (max-width: 1024px) {
823
+ .sidebar-layout,
824
+ .sidebar-layout-right {
825
+ grid-template-columns: 1fr;
826
+ }
827
+ }
828
+
829
+ .split {
830
+ display: grid;
831
+ grid-template-columns: 1fr 1fr;
832
+ grid-gap: 2rem;
833
+ grid-gap: var(--gap-lg);
834
+ gap: 2rem;
835
+ gap: var(--gap-lg);
836
+ }
837
+
838
+ .split-reverse {
839
+ display: grid;
840
+ grid-template-columns: 1fr 1fr;
841
+ grid-gap: 2rem;
842
+ grid-gap: var(--gap-lg);
843
+ gap: 2rem;
844
+ gap: var(--gap-lg);
845
+ }
846
+
847
+ .split-reverse > *:first-child {
848
+ order: 2;
849
+ }
850
+
851
+ .split-reverse > *:last-child {
852
+ order: 1;
853
+ }
854
+
855
+ @media (max-width: 768px) {
856
+ .split,
857
+ .split-reverse {
858
+ grid-template-columns: 1fr;
859
+ }
860
+ }
861
+
862
+ @media (min-width: 769px) {
863
+ .split-reverse > * {
864
+ order: initial;
865
+ }
866
+ }