dynamic-ds 1.0.4 → 1.0.6

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.
@@ -0,0 +1,924 @@
1
+ // ============================================================================
2
+ // SPACING & LAYOUT SYSTEM - Dynamic Design System
3
+ // ============================================================================
4
+ // Comprehensive spacing utilities with 4px base grid system
5
+ // ============================================================================
6
+
7
+ // ============================================================================
8
+ // 1. SPACING SCALE (Based on 4px grid)
9
+ // ============================================================================
10
+ $spacing-base: 4px;
11
+
12
+ $spacing-0: 0;
13
+ $spacing-px: 1px;
14
+ $spacing-0_5: $spacing-base * 0.5; // 2px
15
+ $spacing-1: $spacing-base; // 4px
16
+ $spacing-1_5: $spacing-base * 1.5; // 6px
17
+ $spacing-2: $spacing-base * 2; // 8px
18
+ $spacing-2_5: $spacing-base * 2.5; // 10px
19
+ $spacing-3: $spacing-base * 3; // 12px
20
+ $spacing-3_5: $spacing-base * 3.5; // 14px
21
+ $spacing-4: $spacing-base * 4; // 16px
22
+ $spacing-5: $spacing-base * 5; // 20px
23
+ $spacing-6: $spacing-base * 6; // 24px
24
+ $spacing-7: $spacing-base * 7; // 28px
25
+ $spacing-8: $spacing-base * 8; // 32px
26
+ $spacing-9: $spacing-base * 9; // 36px
27
+ $spacing-10: $spacing-base * 10; // 40px
28
+ $spacing-11: $spacing-base * 11; // 44px
29
+ $spacing-12: $spacing-base * 12; // 48px
30
+ $spacing-14: $spacing-base * 14; // 56px
31
+ $spacing-16: $spacing-base * 16; // 64px
32
+ $spacing-20: $spacing-base * 20; // 80px
33
+ $spacing-24: $spacing-base * 24; // 96px
34
+ $spacing-28: $spacing-base * 28; // 112px
35
+ $spacing-32: $spacing-base * 32; // 128px
36
+ $spacing-36: $spacing-base * 36; // 144px
37
+ $spacing-40: $spacing-base * 40; // 160px
38
+ $spacing-44: $spacing-base * 44; // 176px
39
+ $spacing-48: $spacing-base * 48; // 192px
40
+ $spacing-52: $spacing-base * 52; // 208px
41
+ $spacing-56: $spacing-base * 56; // 224px
42
+ $spacing-60: $spacing-base * 60; // 240px
43
+ $spacing-64: $spacing-base * 64; // 256px
44
+ $spacing-72: $spacing-base * 72; // 288px
45
+ $spacing-80: $spacing-base * 80; // 320px
46
+ $spacing-96: $spacing-base * 96; // 384px
47
+
48
+ $spacing-map: (
49
+ '0': $spacing-0,
50
+ 'px': $spacing-px,
51
+ '0\\.5': $spacing-0_5,
52
+ '1': $spacing-1,
53
+ '1\\.5': $spacing-1_5,
54
+ '2': $spacing-2,
55
+ '2\\.5': $spacing-2_5,
56
+ '3': $spacing-3,
57
+ '3\\.5': $spacing-3_5,
58
+ '4': $spacing-4,
59
+ '5': $spacing-5,
60
+ '6': $spacing-6,
61
+ '7': $spacing-7,
62
+ '8': $spacing-8,
63
+ '9': $spacing-9,
64
+ '10': $spacing-10,
65
+ '11': $spacing-11,
66
+ '12': $spacing-12,
67
+ '14': $spacing-14,
68
+ '16': $spacing-16,
69
+ '20': $spacing-20,
70
+ '24': $spacing-24,
71
+ '28': $spacing-28,
72
+ '32': $spacing-32,
73
+ '36': $spacing-36,
74
+ '40': $spacing-40,
75
+ '44': $spacing-44,
76
+ '48': $spacing-48,
77
+ '52': $spacing-52,
78
+ '56': $spacing-56,
79
+ '60': $spacing-60,
80
+ '64': $spacing-64,
81
+ '72': $spacing-72,
82
+ '80': $spacing-80,
83
+ '96': $spacing-96,
84
+ );
85
+
86
+ // CSS Custom Properties for spacing
87
+ :root {
88
+ --spacing-0: #{$spacing-0};
89
+ --spacing-px: #{$spacing-px};
90
+ --spacing-0_5: #{$spacing-0_5};
91
+ --spacing-1: #{$spacing-1};
92
+ --spacing-1_5: #{$spacing-1_5};
93
+ --spacing-2: #{$spacing-2};
94
+ --spacing-2_5: #{$spacing-2_5};
95
+ --spacing-3: #{$spacing-3};
96
+ --spacing-3_5: #{$spacing-3_5};
97
+ --spacing-4: #{$spacing-4};
98
+ --spacing-5: #{$spacing-5};
99
+ --spacing-6: #{$spacing-6};
100
+ --spacing-7: #{$spacing-7};
101
+ --spacing-8: #{$spacing-8};
102
+ --spacing-9: #{$spacing-9};
103
+ --spacing-10: #{$spacing-10};
104
+ --spacing-11: #{$spacing-11};
105
+ --spacing-12: #{$spacing-12};
106
+ --spacing-14: #{$spacing-14};
107
+ --spacing-16: #{$spacing-16};
108
+ --spacing-20: #{$spacing-20};
109
+ --spacing-24: #{$spacing-24};
110
+ --spacing-28: #{$spacing-28};
111
+ --spacing-32: #{$spacing-32};
112
+ --spacing-36: #{$spacing-36};
113
+ --spacing-40: #{$spacing-40};
114
+ --spacing-44: #{$spacing-44};
115
+ --spacing-48: #{$spacing-48};
116
+ --spacing-52: #{$spacing-52};
117
+ --spacing-56: #{$spacing-56};
118
+ --spacing-60: #{$spacing-60};
119
+ --spacing-64: #{$spacing-64};
120
+ --spacing-72: #{$spacing-72};
121
+ --spacing-80: #{$spacing-80};
122
+ --spacing-96: #{$spacing-96};
123
+ }
124
+
125
+ // ============================================================================
126
+ // 2. MARGIN UTILITIES
127
+ // ============================================================================
128
+ // All sides margin
129
+ @each $key, $value in $spacing-map {
130
+ .m-#{$key} { margin: $value !important; }
131
+ }
132
+ .m-auto { margin: auto !important; }
133
+
134
+ // Margin X (horizontal)
135
+ @each $key, $value in $spacing-map {
136
+ .mx-#{$key} {
137
+ margin-left: $value !important;
138
+ margin-right: $value !important;
139
+ }
140
+ }
141
+ .mx-auto {
142
+ margin-left: auto !important;
143
+ margin-right: auto !important;
144
+ }
145
+
146
+ // Margin Y (vertical)
147
+ @each $key, $value in $spacing-map {
148
+ .my-#{$key} {
149
+ margin-top: $value !important;
150
+ margin-bottom: $value !important;
151
+ }
152
+ }
153
+ .my-auto {
154
+ margin-top: auto !important;
155
+ margin-bottom: auto !important;
156
+ }
157
+
158
+ // Margin Top
159
+ @each $key, $value in $spacing-map {
160
+ .mt-#{$key} { margin-top: $value !important; }
161
+ }
162
+ .mt-auto { margin-top: auto !important; }
163
+
164
+ // Margin Right
165
+ @each $key, $value in $spacing-map {
166
+ .mr-#{$key} { margin-right: $value !important; }
167
+ }
168
+ .mr-auto { margin-right: auto !important; }
169
+
170
+ // Margin Bottom
171
+ @each $key, $value in $spacing-map {
172
+ .mb-#{$key} { margin-bottom: $value !important; }
173
+ }
174
+ .mb-auto { margin-bottom: auto !important; }
175
+
176
+ // Margin Left
177
+ @each $key, $value in $spacing-map {
178
+ .ml-#{$key} { margin-left: $value !important; }
179
+ }
180
+ .ml-auto { margin-left: auto !important; }
181
+
182
+ // Margin Start (logical)
183
+ @each $key, $value in $spacing-map {
184
+ .ms-#{$key} { margin-inline-start: $value !important; }
185
+ }
186
+ .ms-auto { margin-inline-start: auto !important; }
187
+
188
+ // Margin End (logical)
189
+ @each $key, $value in $spacing-map {
190
+ .me-#{$key} { margin-inline-end: $value !important; }
191
+ }
192
+ .me-auto { margin-inline-end: auto !important; }
193
+
194
+ // Negative margins
195
+ @each $key, $value in $spacing-map {
196
+ @if $key != '0' and $key != 'px' {
197
+ .-m-#{$key} { margin: -#{$value} !important; }
198
+ .-mx-#{$key} { margin-left: -#{$value} !important; margin-right: -#{$value} !important; }
199
+ .-my-#{$key} { margin-top: -#{$value} !important; margin-bottom: -#{$value} !important; }
200
+ .-mt-#{$key} { margin-top: -#{$value} !important; }
201
+ .-mr-#{$key} { margin-right: -#{$value} !important; }
202
+ .-mb-#{$key} { margin-bottom: -#{$value} !important; }
203
+ .-ml-#{$key} { margin-left: -#{$value} !important; }
204
+ }
205
+ }
206
+
207
+ // ============================================================================
208
+ // 3. PADDING UTILITIES
209
+ // ============================================================================
210
+ // All sides padding
211
+ @each $key, $value in $spacing-map {
212
+ .p-#{$key} { padding: $value !important; }
213
+ }
214
+
215
+ // Padding X (horizontal)
216
+ @each $key, $value in $spacing-map {
217
+ .px-#{$key} {
218
+ padding-left: $value !important;
219
+ padding-right: $value !important;
220
+ }
221
+ }
222
+
223
+ // Padding Y (vertical)
224
+ @each $key, $value in $spacing-map {
225
+ .py-#{$key} {
226
+ padding-top: $value !important;
227
+ padding-bottom: $value !important;
228
+ }
229
+ }
230
+
231
+ // Padding Top
232
+ @each $key, $value in $spacing-map {
233
+ .pt-#{$key} { padding-top: $value !important; }
234
+ }
235
+
236
+ // Padding Right
237
+ @each $key, $value in $spacing-map {
238
+ .pr-#{$key} { padding-right: $value !important; }
239
+ }
240
+
241
+ // Padding Bottom
242
+ @each $key, $value in $spacing-map {
243
+ .pb-#{$key} { padding-bottom: $value !important; }
244
+ }
245
+
246
+ // Padding Left
247
+ @each $key, $value in $spacing-map {
248
+ .pl-#{$key} { padding-left: $value !important; }
249
+ }
250
+
251
+ // Padding Start (logical)
252
+ @each $key, $value in $spacing-map {
253
+ .ps-#{$key} { padding-inline-start: $value !important; }
254
+ }
255
+
256
+ // Padding End (logical)
257
+ @each $key, $value in $spacing-map {
258
+ .pe-#{$key} { padding-inline-end: $value !important; }
259
+ }
260
+
261
+ // ============================================================================
262
+ // 4. GAP UTILITIES (for Flexbox/Grid)
263
+ // ============================================================================
264
+ @each $key, $value in $spacing-map {
265
+ .gap-#{$key} { gap: $value !important; }
266
+ .gap-x-#{$key} { column-gap: $value !important; }
267
+ .gap-y-#{$key} { row-gap: $value !important; }
268
+ }
269
+
270
+ // ============================================================================
271
+ // 5. WIDTH UTILITIES
272
+ // ============================================================================
273
+ // Fractional widths using hyphen separator (SCSS-compatible naming)
274
+ // Format: {numerator}-{denominator} e.g., 1-2 = 1/2 = 50%
275
+ $width-fractions: (
276
+ '1-2': 50%,
277
+ '1-3': 33.333333%,
278
+ '2-3': 66.666667%,
279
+ '1-4': 25%,
280
+ '2-4': 50%,
281
+ '3-4': 75%,
282
+ '1-5': 20%,
283
+ '2-5': 40%,
284
+ '3-5': 60%,
285
+ '4-5': 80%,
286
+ '1-6': 16.666667%,
287
+ '2-6': 33.333333%,
288
+ '3-6': 50%,
289
+ '4-6': 66.666667%,
290
+ '5-6': 83.333333%,
291
+ '1-12': 8.333333%,
292
+ '2-12': 16.666667%,
293
+ '3-12': 25%,
294
+ '4-12': 33.333333%,
295
+ '5-12': 41.666667%,
296
+ '6-12': 50%,
297
+ '7-12': 58.333333%,
298
+ '8-12': 66.666667%,
299
+ '9-12': 75%,
300
+ '10-12': 83.333333%,
301
+ '11-12': 91.666667%,
302
+ );
303
+
304
+ // Fixed widths
305
+ @each $key, $value in $spacing-map {
306
+ .w-#{$key} { width: $value !important; }
307
+ }
308
+
309
+ // Fraction widths
310
+ @each $key, $value in $width-fractions {
311
+ .w-#{$key} { width: $value !important; }
312
+ }
313
+
314
+ // Special widths
315
+ .w-auto { width: auto !important; }
316
+ .w-full { width: 100% !important; }
317
+ .w-screen { width: 100vw !important; }
318
+ .w-svw { width: 100svw !important; }
319
+ .w-lvw { width: 100lvw !important; }
320
+ .w-dvw { width: 100dvw !important; }
321
+ .w-min { width: min-content !important; }
322
+ .w-max { width: max-content !important; }
323
+ .w-fit { width: fit-content !important; }
324
+
325
+ // Min-width
326
+ .min-w-0 { min-width: 0 !important; }
327
+ .min-w-full { min-width: 100% !important; }
328
+ .min-w-min { min-width: min-content !important; }
329
+ .min-w-max { min-width: max-content !important; }
330
+ .min-w-fit { min-width: fit-content !important; }
331
+
332
+ // Max-width
333
+ .max-w-0 { max-width: 0 !important; }
334
+ .max-w-none { max-width: none !important; }
335
+ .max-w-xs { max-width: 20rem !important; } // 320px
336
+ .max-w-sm { max-width: 24rem !important; } // 384px
337
+ .max-w-md { max-width: 28rem !important; } // 448px
338
+ .max-w-lg { max-width: 32rem !important; } // 512px
339
+ .max-w-xl { max-width: 36rem !important; } // 576px
340
+ .max-w-2xl { max-width: 42rem !important; } // 672px
341
+ .max-w-3xl { max-width: 48rem !important; } // 768px
342
+ .max-w-4xl { max-width: 56rem !important; } // 896px
343
+ .max-w-5xl { max-width: 64rem !important; } // 1024px
344
+ .max-w-6xl { max-width: 72rem !important; } // 1152px
345
+ .max-w-7xl { max-width: 80rem !important; } // 1280px
346
+ .max-w-full { max-width: 100% !important; }
347
+ .max-w-min { max-width: min-content !important; }
348
+ .max-w-max { max-width: max-content !important; }
349
+ .max-w-fit { max-width: fit-content !important; }
350
+ .max-w-prose { max-width: 65ch !important; }
351
+ .max-w-screen-sm { max-width: 640px !important; }
352
+ .max-w-screen-md { max-width: 768px !important; }
353
+ .max-w-screen-lg { max-width: 1024px !important; }
354
+ .max-w-screen-xl { max-width: 1280px !important; }
355
+ .max-w-screen-2xl { max-width: 1536px !important; }
356
+
357
+ // ============================================================================
358
+ // 6. HEIGHT UTILITIES
359
+ // ============================================================================
360
+ // Fixed heights
361
+ @each $key, $value in $spacing-map {
362
+ .h-#{$key} { height: $value !important; }
363
+ }
364
+
365
+ // Fraction heights
366
+ @each $key, $value in $width-fractions {
367
+ .h-#{$key} { height: $value !important; }
368
+ }
369
+
370
+ // Special heights
371
+ .h-auto { height: auto !important; }
372
+ .h-full { height: 100% !important; }
373
+ .h-screen { height: 100vh !important; }
374
+ .h-svh { height: 100svh !important; }
375
+ .h-lvh { height: 100lvh !important; }
376
+ .h-dvh { height: 100dvh !important; }
377
+ .h-min { height: min-content !important; }
378
+ .h-max { height: max-content !important; }
379
+ .h-fit { height: fit-content !important; }
380
+
381
+ // Min-height
382
+ .min-h-0 { min-height: 0 !important; }
383
+ .min-h-full { min-height: 100% !important; }
384
+ .min-h-screen { min-height: 100vh !important; }
385
+ .min-h-svh { min-height: 100svh !important; }
386
+ .min-h-lvh { min-height: 100lvh !important; }
387
+ .min-h-dvh { min-height: 100dvh !important; }
388
+ .min-h-min { min-height: min-content !important; }
389
+ .min-h-max { min-height: max-content !important; }
390
+ .min-h-fit { min-height: fit-content !important; }
391
+
392
+ // Max-height
393
+ .max-h-0 { max-height: 0 !important; }
394
+ .max-h-none { max-height: none !important; }
395
+ .max-h-full { max-height: 100% !important; }
396
+ .max-h-screen { max-height: 100vh !important; }
397
+ .max-h-svh { max-height: 100svh !important; }
398
+ .max-h-lvh { max-height: 100lvh !important; }
399
+ .max-h-dvh { max-height: 100dvh !important; }
400
+ .max-h-min { max-height: min-content !important; }
401
+ .max-h-max { max-height: max-content !important; }
402
+ .max-h-fit { max-height: fit-content !important; }
403
+
404
+ // ============================================================================
405
+ // 7. SQUARE SIZE (width & height equal)
406
+ // ============================================================================
407
+ @each $key, $value in $spacing-map {
408
+ .size-#{$key} {
409
+ width: $value !important;
410
+ height: $value !important;
411
+ }
412
+ }
413
+ .size-auto { width: auto !important; height: auto !important; }
414
+ .size-full { width: 100% !important; height: 100% !important; }
415
+
416
+ // ============================================================================
417
+ // 8. FLEXBOX UTILITIES
418
+ // ============================================================================
419
+
420
+ // Display
421
+ .flex { display: flex !important; }
422
+ .inline-flex { display: inline-flex !important; }
423
+
424
+ // Flex Direction
425
+ .flex-row { flex-direction: row !important; }
426
+ .flex-row-reverse { flex-direction: row-reverse !important; }
427
+ .flex-col { flex-direction: column !important; }
428
+ .flex-col-reverse { flex-direction: column-reverse !important; }
429
+
430
+ // Flex Wrap
431
+ .flex-wrap { flex-wrap: wrap !important; }
432
+ .flex-wrap-reverse { flex-wrap: wrap-reverse !important; }
433
+ .flex-nowrap { flex-wrap: nowrap !important; }
434
+
435
+ // Flex
436
+ .flex-1 { flex: 1 1 0% !important; }
437
+ .flex-auto { flex: 1 1 auto !important; }
438
+ .flex-initial { flex: 0 1 auto !important; }
439
+ .flex-none { flex: none !important; }
440
+
441
+ // Flex Grow
442
+ .grow { flex-grow: 1 !important; }
443
+ .grow-0 { flex-grow: 0 !important; }
444
+
445
+ // Flex Shrink
446
+ .shrink { flex-shrink: 1 !important; }
447
+ .shrink-0 { flex-shrink: 0 !important; }
448
+
449
+ // Flex Basis
450
+ .basis-0 { flex-basis: 0 !important; }
451
+ .basis-1 { flex-basis: $spacing-1 !important; }
452
+ .basis-2 { flex-basis: $spacing-2 !important; }
453
+ .basis-4 { flex-basis: $spacing-4 !important; }
454
+ .basis-8 { flex-basis: $spacing-8 !important; }
455
+ .basis-12 { flex-basis: $spacing-12 !important; }
456
+ .basis-16 { flex-basis: $spacing-16 !important; }
457
+ .basis-auto { flex-basis: auto !important; }
458
+ .basis-full { flex-basis: 100% !important; }
459
+ @each $key, $value in $width-fractions {
460
+ .basis-#{$key} { flex-basis: $value !important; }
461
+ }
462
+
463
+ // Justify Content
464
+ .justify-start { justify-content: flex-start !important; }
465
+ .justify-end { justify-content: flex-end !important; }
466
+ .justify-center { justify-content: center !important; }
467
+ .justify-between { justify-content: space-between !important; }
468
+ .justify-around { justify-content: space-around !important; }
469
+ .justify-evenly { justify-content: space-evenly !important; }
470
+ .justify-stretch { justify-content: stretch !important; }
471
+
472
+ // Justify Items
473
+ .justify-items-start { justify-items: start !important; }
474
+ .justify-items-end { justify-items: end !important; }
475
+ .justify-items-center { justify-items: center !important; }
476
+ .justify-items-stretch { justify-items: stretch !important; }
477
+
478
+ // Justify Self
479
+ .justify-self-auto { justify-self: auto !important; }
480
+ .justify-self-start { justify-self: start !important; }
481
+ .justify-self-end { justify-self: end !important; }
482
+ .justify-self-center { justify-self: center !important; }
483
+ .justify-self-stretch { justify-self: stretch !important; }
484
+
485
+ // Align Content
486
+ .content-start { align-content: flex-start !important; }
487
+ .content-end { align-content: flex-end !important; }
488
+ .content-center { align-content: center !important; }
489
+ .content-between { align-content: space-between !important; }
490
+ .content-around { align-content: space-around !important; }
491
+ .content-evenly { align-content: space-evenly !important; }
492
+ .content-stretch { align-content: stretch !important; }
493
+ .content-baseline { align-content: baseline !important; }
494
+
495
+ // Align Items
496
+ .items-start { align-items: flex-start !important; }
497
+ .items-end { align-items: flex-end !important; }
498
+ .items-center { align-items: center !important; }
499
+ .items-baseline { align-items: baseline !important; }
500
+ .items-stretch { align-items: stretch !important; }
501
+
502
+ // Align Self
503
+ .self-auto { align-self: auto !important; }
504
+ .self-start { align-self: flex-start !important; }
505
+ .self-end { align-self: flex-end !important; }
506
+ .self-center { align-self: center !important; }
507
+ .self-baseline { align-self: baseline !important; }
508
+ .self-stretch { align-self: stretch !important; }
509
+
510
+ // Place Content
511
+ .place-content-start { place-content: start !important; }
512
+ .place-content-end { place-content: end !important; }
513
+ .place-content-center { place-content: center !important; }
514
+ .place-content-between { place-content: space-between !important; }
515
+ .place-content-around { place-content: space-around !important; }
516
+ .place-content-evenly { place-content: space-evenly !important; }
517
+ .place-content-stretch { place-content: stretch !important; }
518
+ .place-content-baseline { place-content: baseline !important; }
519
+
520
+ // Place Items
521
+ .place-items-start { place-items: start !important; }
522
+ .place-items-end { place-items: end !important; }
523
+ .place-items-center { place-items: center !important; }
524
+ .place-items-baseline { place-items: baseline !important; }
525
+ .place-items-stretch { place-items: stretch !important; }
526
+
527
+ // Place Self
528
+ .place-self-auto { place-self: auto !important; }
529
+ .place-self-start { place-self: start !important; }
530
+ .place-self-end { place-self: end !important; }
531
+ .place-self-center { place-self: center !important; }
532
+ .place-self-stretch { place-self: stretch !important; }
533
+
534
+ // ============================================================================
535
+ // 9. CSS GRID UTILITIES
536
+ // ============================================================================
537
+
538
+ // Display
539
+ .grid { display: grid !important; }
540
+ .inline-grid { display: inline-grid !important; }
541
+
542
+ // Grid Template Columns
543
+ .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)) !important; }
544
+ .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
545
+ .grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
546
+ .grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
547
+ .grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)) !important; }
548
+ .grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)) !important; }
549
+ .grid-cols-7 { grid-template-columns: repeat(7, minmax(0, 1fr)) !important; }
550
+ .grid-cols-8 { grid-template-columns: repeat(8, minmax(0, 1fr)) !important; }
551
+ .grid-cols-9 { grid-template-columns: repeat(9, minmax(0, 1fr)) !important; }
552
+ .grid-cols-10 { grid-template-columns: repeat(10, minmax(0, 1fr)) !important; }
553
+ .grid-cols-11 { grid-template-columns: repeat(11, minmax(0, 1fr)) !important; }
554
+ .grid-cols-12 { grid-template-columns: repeat(12, minmax(0, 1fr)) !important; }
555
+ .grid-cols-none { grid-template-columns: none !important; }
556
+ .grid-cols-subgrid { grid-template-columns: subgrid !important; }
557
+
558
+ // Grid Column Span
559
+ .col-auto { grid-column: auto !important; }
560
+ .col-span-1 { grid-column: span 1 / span 1 !important; }
561
+ .col-span-2 { grid-column: span 2 / span 2 !important; }
562
+ .col-span-3 { grid-column: span 3 / span 3 !important; }
563
+ .col-span-4 { grid-column: span 4 / span 4 !important; }
564
+ .col-span-5 { grid-column: span 5 / span 5 !important; }
565
+ .col-span-6 { grid-column: span 6 / span 6 !important; }
566
+ .col-span-7 { grid-column: span 7 / span 7 !important; }
567
+ .col-span-8 { grid-column: span 8 / span 8 !important; }
568
+ .col-span-9 { grid-column: span 9 / span 9 !important; }
569
+ .col-span-10 { grid-column: span 10 / span 10 !important; }
570
+ .col-span-11 { grid-column: span 11 / span 11 !important; }
571
+ .col-span-12 { grid-column: span 12 / span 12 !important; }
572
+ .col-span-full { grid-column: 1 / -1 !important; }
573
+
574
+ // Grid Column Start
575
+ .col-start-1 { grid-column-start: 1 !important; }
576
+ .col-start-2 { grid-column-start: 2 !important; }
577
+ .col-start-3 { grid-column-start: 3 !important; }
578
+ .col-start-4 { grid-column-start: 4 !important; }
579
+ .col-start-5 { grid-column-start: 5 !important; }
580
+ .col-start-6 { grid-column-start: 6 !important; }
581
+ .col-start-7 { grid-column-start: 7 !important; }
582
+ .col-start-8 { grid-column-start: 8 !important; }
583
+ .col-start-9 { grid-column-start: 9 !important; }
584
+ .col-start-10 { grid-column-start: 10 !important; }
585
+ .col-start-11 { grid-column-start: 11 !important; }
586
+ .col-start-12 { grid-column-start: 12 !important; }
587
+ .col-start-13 { grid-column-start: 13 !important; }
588
+ .col-start-auto { grid-column-start: auto !important; }
589
+
590
+ // Grid Column End
591
+ .col-end-1 { grid-column-end: 1 !important; }
592
+ .col-end-2 { grid-column-end: 2 !important; }
593
+ .col-end-3 { grid-column-end: 3 !important; }
594
+ .col-end-4 { grid-column-end: 4 !important; }
595
+ .col-end-5 { grid-column-end: 5 !important; }
596
+ .col-end-6 { grid-column-end: 6 !important; }
597
+ .col-end-7 { grid-column-end: 7 !important; }
598
+ .col-end-8 { grid-column-end: 8 !important; }
599
+ .col-end-9 { grid-column-end: 9 !important; }
600
+ .col-end-10 { grid-column-end: 10 !important; }
601
+ .col-end-11 { grid-column-end: 11 !important; }
602
+ .col-end-12 { grid-column-end: 12 !important; }
603
+ .col-end-13 { grid-column-end: 13 !important; }
604
+ .col-end-auto { grid-column-end: auto !important; }
605
+
606
+ // Grid Template Rows
607
+ .grid-rows-1 { grid-template-rows: repeat(1, minmax(0, 1fr)) !important; }
608
+ .grid-rows-2 { grid-template-rows: repeat(2, minmax(0, 1fr)) !important; }
609
+ .grid-rows-3 { grid-template-rows: repeat(3, minmax(0, 1fr)) !important; }
610
+ .grid-rows-4 { grid-template-rows: repeat(4, minmax(0, 1fr)) !important; }
611
+ .grid-rows-5 { grid-template-rows: repeat(5, minmax(0, 1fr)) !important; }
612
+ .grid-rows-6 { grid-template-rows: repeat(6, minmax(0, 1fr)) !important; }
613
+ .grid-rows-none { grid-template-rows: none !important; }
614
+ .grid-rows-subgrid { grid-template-rows: subgrid !important; }
615
+
616
+ // Grid Row Span
617
+ .row-auto { grid-row: auto !important; }
618
+ .row-span-1 { grid-row: span 1 / span 1 !important; }
619
+ .row-span-2 { grid-row: span 2 / span 2 !important; }
620
+ .row-span-3 { grid-row: span 3 / span 3 !important; }
621
+ .row-span-4 { grid-row: span 4 / span 4 !important; }
622
+ .row-span-5 { grid-row: span 5 / span 5 !important; }
623
+ .row-span-6 { grid-row: span 6 / span 6 !important; }
624
+ .row-span-full { grid-row: 1 / -1 !important; }
625
+
626
+ // Grid Row Start
627
+ .row-start-1 { grid-row-start: 1 !important; }
628
+ .row-start-2 { grid-row-start: 2 !important; }
629
+ .row-start-3 { grid-row-start: 3 !important; }
630
+ .row-start-4 { grid-row-start: 4 !important; }
631
+ .row-start-5 { grid-row-start: 5 !important; }
632
+ .row-start-6 { grid-row-start: 6 !important; }
633
+ .row-start-7 { grid-row-start: 7 !important; }
634
+ .row-start-auto { grid-row-start: auto !important; }
635
+
636
+ // Grid Row End
637
+ .row-end-1 { grid-row-end: 1 !important; }
638
+ .row-end-2 { grid-row-end: 2 !important; }
639
+ .row-end-3 { grid-row-end: 3 !important; }
640
+ .row-end-4 { grid-row-end: 4 !important; }
641
+ .row-end-5 { grid-row-end: 5 !important; }
642
+ .row-end-6 { grid-row-end: 6 !important; }
643
+ .row-end-7 { grid-row-end: 7 !important; }
644
+ .row-end-auto { grid-row-end: auto !important; }
645
+
646
+ // Grid Auto Flow
647
+ .grid-flow-row { grid-auto-flow: row !important; }
648
+ .grid-flow-col { grid-auto-flow: column !important; }
649
+ .grid-flow-dense { grid-auto-flow: dense !important; }
650
+ .grid-flow-row-dense { grid-auto-flow: row dense !important; }
651
+ .grid-flow-col-dense { grid-auto-flow: column dense !important; }
652
+
653
+ // Grid Auto Columns
654
+ .auto-cols-auto { grid-auto-columns: auto !important; }
655
+ .auto-cols-min { grid-auto-columns: min-content !important; }
656
+ .auto-cols-max { grid-auto-columns: max-content !important; }
657
+ .auto-cols-fr { grid-auto-columns: minmax(0, 1fr) !important; }
658
+
659
+ // Grid Auto Rows
660
+ .auto-rows-auto { grid-auto-rows: auto !important; }
661
+ .auto-rows-min { grid-auto-rows: min-content !important; }
662
+ .auto-rows-max { grid-auto-rows: max-content !important; }
663
+ .auto-rows-fr { grid-auto-rows: minmax(0, 1fr) !important; }
664
+
665
+ // ============================================================================
666
+ // 10. ORDER UTILITIES
667
+ // ============================================================================
668
+ .order-first { order: -9999 !important; }
669
+ .order-last { order: 9999 !important; }
670
+ .order-none { order: 0 !important; }
671
+ .order-1 { order: 1 !important; }
672
+ .order-2 { order: 2 !important; }
673
+ .order-3 { order: 3 !important; }
674
+ .order-4 { order: 4 !important; }
675
+ .order-5 { order: 5 !important; }
676
+ .order-6 { order: 6 !important; }
677
+ .order-7 { order: 7 !important; }
678
+ .order-8 { order: 8 !important; }
679
+ .order-9 { order: 9 !important; }
680
+ .order-10 { order: 10 !important; }
681
+ .order-11 { order: 11 !important; }
682
+ .order-12 { order: 12 !important; }
683
+
684
+ // ============================================================================
685
+ // 11. DISPLAY UTILITIES
686
+ // ============================================================================
687
+ .block { display: block !important; }
688
+ .inline-block { display: inline-block !important; }
689
+ .inline { display: inline !important; }
690
+ .hidden { display: none !important; }
691
+ .contents { display: contents !important; }
692
+ .flow-root { display: flow-root !important; }
693
+ .list-item { display: list-item !important; }
694
+
695
+ // Table display
696
+ .table { display: table !important; }
697
+ .inline-table { display: inline-table !important; }
698
+ .table-caption { display: table-caption !important; }
699
+ .table-cell { display: table-cell !important; }
700
+ .table-column { display: table-column !important; }
701
+ .table-column-group { display: table-column-group !important; }
702
+ .table-footer-group { display: table-footer-group !important; }
703
+ .table-header-group { display: table-header-group !important; }
704
+ .table-row-group { display: table-row-group !important; }
705
+ .table-row { display: table-row !important; }
706
+
707
+ // ============================================================================
708
+ // 12. POSITION UTILITIES
709
+ // ============================================================================
710
+ .static { position: static !important; }
711
+ .fixed { position: fixed !important; }
712
+ .absolute { position: absolute !important; }
713
+ .relative { position: relative !important; }
714
+ .sticky { position: sticky !important; }
715
+
716
+ // Top/Right/Bottom/Left
717
+ $inset-values: (
718
+ '0': 0,
719
+ 'px': 1px,
720
+ '0\\.5': $spacing-0_5,
721
+ '1': $spacing-1,
722
+ '2': $spacing-2,
723
+ '3': $spacing-3,
724
+ '4': $spacing-4,
725
+ '5': $spacing-5,
726
+ '6': $spacing-6,
727
+ '8': $spacing-8,
728
+ '10': $spacing-10,
729
+ '12': $spacing-12,
730
+ '16': $spacing-16,
731
+ '20': $spacing-20,
732
+ '24': $spacing-24,
733
+ '1\\/2': 50%,
734
+ '1\\/3': 33.333333%,
735
+ '2\\/3': 66.666667%,
736
+ '1\\/4': 25%,
737
+ '3\\/4': 75%,
738
+ 'full': 100%,
739
+ 'auto': auto,
740
+ );
741
+
742
+ @each $key, $value in $inset-values {
743
+ .inset-#{$key} { inset: $value !important; }
744
+ .inset-x-#{$key} { left: $value !important; right: $value !important; }
745
+ .inset-y-#{$key} { top: $value !important; bottom: $value !important; }
746
+ .top-#{$key} { top: $value !important; }
747
+ .right-#{$key} { right: $value !important; }
748
+ .bottom-#{$key} { bottom: $value !important; }
749
+ .left-#{$key} { left: $value !important; }
750
+ .start-#{$key} { inset-inline-start: $value !important; }
751
+ .end-#{$key} { inset-inline-end: $value !important; }
752
+
753
+ // Negative values
754
+ @if $value != auto and $key != '0' {
755
+ .-inset-#{$key} { inset: -#{$value} !important; }
756
+ .-inset-x-#{$key} { left: -#{$value} !important; right: -#{$value} !important; }
757
+ .-inset-y-#{$key} { top: -#{$value} !important; bottom: -#{$value} !important; }
758
+ .-top-#{$key} { top: -#{$value} !important; }
759
+ .-right-#{$key} { right: -#{$value} !important; }
760
+ .-bottom-#{$key} { bottom: -#{$value} !important; }
761
+ .-left-#{$key} { left: -#{$value} !important; }
762
+ }
763
+ }
764
+
765
+ // ============================================================================
766
+ // 13. Z-INDEX UTILITIES
767
+ // ============================================================================
768
+ .z-0 { z-index: 0 !important; }
769
+ .z-10 { z-index: 10 !important; }
770
+ .z-20 { z-index: 20 !important; }
771
+ .z-30 { z-index: 30 !important; }
772
+ .z-40 { z-index: 40 !important; }
773
+ .z-50 { z-index: 50 !important; }
774
+ .z-auto { z-index: auto !important; }
775
+ .-z-10 { z-index: -10 !important; }
776
+
777
+ // ============================================================================
778
+ // 14. OVERFLOW UTILITIES
779
+ // ============================================================================
780
+ .overflow-auto { overflow: auto !important; }
781
+ .overflow-hidden { overflow: hidden !important; }
782
+ .overflow-clip { overflow: clip !important; }
783
+ .overflow-visible { overflow: visible !important; }
784
+ .overflow-scroll { overflow: scroll !important; }
785
+
786
+ .overflow-x-auto { overflow-x: auto !important; }
787
+ .overflow-x-hidden { overflow-x: hidden !important; }
788
+ .overflow-x-clip { overflow-x: clip !important; }
789
+ .overflow-x-visible { overflow-x: visible !important; }
790
+ .overflow-x-scroll { overflow-x: scroll !important; }
791
+
792
+ .overflow-y-auto { overflow-y: auto !important; }
793
+ .overflow-y-hidden { overflow-y: hidden !important; }
794
+ .overflow-y-clip { overflow-y: clip !important; }
795
+ .overflow-y-visible { overflow-y: visible !important; }
796
+ .overflow-y-scroll { overflow-y: scroll !important; }
797
+
798
+ // ============================================================================
799
+ // 15. VISIBILITY UTILITIES
800
+ // ============================================================================
801
+ .visible { visibility: visible !important; }
802
+ .invisible { visibility: hidden !important; }
803
+ .collapse { visibility: collapse !important; }
804
+
805
+ // ============================================================================
806
+ // 16. ASPECT RATIO UTILITIES
807
+ // ============================================================================
808
+ .aspect-auto { aspect-ratio: auto !important; }
809
+ .aspect-square { aspect-ratio: 1 / 1 !important; }
810
+ .aspect-video { aspect-ratio: 16 / 9 !important; }
811
+ .aspect-4\\/3 { aspect-ratio: 4 / 3 !important; }
812
+ .aspect-3\\/2 { aspect-ratio: 3 / 2 !important; }
813
+ .aspect-2\\/1 { aspect-ratio: 2 / 1 !important; }
814
+
815
+ // ============================================================================
816
+ // 17. OBJECT FIT & POSITION UTILITIES
817
+ // ============================================================================
818
+ .object-contain { object-fit: contain !important; }
819
+ .object-cover { object-fit: cover !important; }
820
+ .object-fill { object-fit: fill !important; }
821
+ .object-none { object-fit: none !important; }
822
+ .object-scale-down { object-fit: scale-down !important; }
823
+
824
+ .object-bottom { object-position: bottom !important; }
825
+ .object-center { object-position: center !important; }
826
+ .object-left { object-position: left !important; }
827
+ .object-left-bottom { object-position: left bottom !important; }
828
+ .object-left-top { object-position: left top !important; }
829
+ .object-right { object-position: right !important; }
830
+ .object-right-bottom { object-position: right bottom !important; }
831
+ .object-right-top { object-position: right top !important; }
832
+ .object-top { object-position: top !important; }
833
+
834
+ // ============================================================================
835
+ // 18. FLOAT & CLEAR UTILITIES
836
+ // ============================================================================
837
+ .float-start { float: inline-start !important; }
838
+ .float-end { float: inline-end !important; }
839
+ .float-left { float: left !important; }
840
+ .float-right { float: right !important; }
841
+ .float-none { float: none !important; }
842
+
843
+ .clear-left { clear: left !important; }
844
+ .clear-right { clear: right !important; }
845
+ .clear-both { clear: both !important; }
846
+ .clear-none { clear: none !important; }
847
+ .clear-start { clear: inline-start !important; }
848
+ .clear-end { clear: inline-end !important; }
849
+
850
+ // ============================================================================
851
+ // 19. CONTAINER UTILITY
852
+ // ============================================================================
853
+ .container {
854
+ width: 100%;
855
+ margin-left: auto;
856
+ margin-right: auto;
857
+ padding-left: var(--spacing-4);
858
+ padding-right: var(--spacing-4);
859
+
860
+ @media (min-width: 640px) {
861
+ max-width: 640px;
862
+ }
863
+ @media (min-width: 768px) {
864
+ max-width: 768px;
865
+ }
866
+ @media (min-width: 1024px) {
867
+ max-width: 1024px;
868
+ }
869
+ @media (min-width: 1280px) {
870
+ max-width: 1280px;
871
+ }
872
+ @media (min-width: 1536px) {
873
+ max-width: 1536px;
874
+ }
875
+ }
876
+
877
+ .container-fluid {
878
+ width: 100%;
879
+ padding-left: var(--spacing-4);
880
+ padding-right: var(--spacing-4);
881
+ }
882
+
883
+ // ============================================================================
884
+ // 20. BOX SIZING UTILITIES
885
+ // ============================================================================
886
+ .box-border { box-sizing: border-box !important; }
887
+ .box-content { box-sizing: content-box !important; }
888
+
889
+ // ============================================================================
890
+ // 21. ISOLATION UTILITIES
891
+ // ============================================================================
892
+ .isolate { isolation: isolate !important; }
893
+ .isolation-auto { isolation: auto !important; }
894
+
895
+ // ============================================================================
896
+ // 22. SCROLLBAR UTILITIES
897
+ // ============================================================================
898
+ .scrollbar-auto { scrollbar-width: auto !important; }
899
+ .scrollbar-thin { scrollbar-width: thin !important; }
900
+ .scrollbar-none { scrollbar-width: none !important; }
901
+
902
+ // Overscroll behavior
903
+ .overscroll-auto { overscroll-behavior: auto !important; }
904
+ .overscroll-contain { overscroll-behavior: contain !important; }
905
+ .overscroll-none { overscroll-behavior: none !important; }
906
+ .overscroll-x-auto { overscroll-behavior-x: auto !important; }
907
+ .overscroll-x-contain { overscroll-behavior-x: contain !important; }
908
+ .overscroll-x-none { overscroll-behavior-x: none !important; }
909
+ .overscroll-y-auto { overscroll-behavior-y: auto !important; }
910
+ .overscroll-y-contain { overscroll-behavior-y: contain !important; }
911
+ .overscroll-y-none { overscroll-behavior-y: none !important; }
912
+
913
+ // Scroll snap
914
+ .snap-start { scroll-snap-align: start !important; }
915
+ .snap-end { scroll-snap-align: end !important; }
916
+ .snap-center { scroll-snap-align: center !important; }
917
+ .snap-align-none { scroll-snap-align: none !important; }
918
+
919
+ .snap-none { scroll-snap-type: none !important; }
920
+ .snap-x { scroll-snap-type: x var(--snap-strictness, mandatory) !important; }
921
+ .snap-y { scroll-snap-type: y var(--snap-strictness, mandatory) !important; }
922
+ .snap-both { scroll-snap-type: both var(--snap-strictness, mandatory) !important; }
923
+ .snap-mandatory { --snap-strictness: mandatory; }
924
+ .snap-proximity { --snap-strictness: proximity; }