@mineui/utils 0.0.1 → 0.0.3

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,2679 @@
1
+ // src/scss/utils.scss
2
+ //
3
+ // Made with ❤️ by Maysara.
4
+
5
+
6
+
7
+ @use "sass:math";
8
+ @use "sass:map";
9
+ @use "sass:list";
10
+
11
+
12
+
13
+ // Configuration Variables
14
+ // ============================================
15
+
16
+ $spacing-scale: (
17
+ 0: 0,
18
+ 1: 0.25rem,
19
+ 2: 0.5rem,
20
+ 3: 0.75rem,
21
+ 4: 1rem,
22
+ 5: 1.25rem,
23
+ 6: 1.5rem,
24
+ 8: 2rem,
25
+ 10: 2.5rem,
26
+ 12: 3rem,
27
+ 16: 4rem,
28
+ 20: 5rem,
29
+ 24: 6rem,
30
+ 32: 8rem,
31
+ 40: 10rem,
32
+ 48: 12rem,
33
+ 56: 14rem,
34
+ 64: 16rem
35
+ );
36
+
37
+ $colors: (
38
+ 'white': #ffffff,
39
+ 'black': #000000,
40
+ 'gray-50': #f9fafb,
41
+ 'gray-100': #f3f4f6,
42
+ 'gray-200': #e5e7eb,
43
+ 'gray-300': #d1d5db,
44
+ 'gray-400': #9ca3af,
45
+ 'gray-500': #6b7280,
46
+ 'gray-600': #4b5563,
47
+ 'gray-700': #374151,
48
+ 'gray-800': #1f2937,
49
+ 'gray-900': #111827,
50
+ 'red-50': #fef2f2,
51
+ 'red-100': #fee2e2,
52
+ 'red-500': #ef4444,
53
+ 'red-600': #dc2626,
54
+ 'red-700': #b91c1c,
55
+ 'orange-500': #f97316,
56
+ 'yellow-500': #eab308,
57
+ 'green-50': #f0fdf4,
58
+ 'green-500': #22c55e,
59
+ 'green-600': #16a34a,
60
+ 'blue-50': #eff6ff,
61
+ 'blue-500': #3b82f6,
62
+ 'blue-600': #2563eb,
63
+ 'blue-700': #1d4ed8,
64
+ 'indigo-500': #6366f1,
65
+ 'purple-500': #a855f7,
66
+ 'pink-500': #ec4899
67
+ );
68
+
69
+ $font-sizes: (
70
+ 'xs': 0.75rem,
71
+ 'sm': 0.875rem,
72
+ 'base': 1rem,
73
+ 'lg': 1.125rem,
74
+ 'xl': 1.25rem,
75
+ '2xl': 1.5rem,
76
+ '3xl': 1.875rem,
77
+ '4xl': 2.25rem,
78
+ '5xl': 3rem,
79
+ '6xl': 3.75rem,
80
+ '7xl': 4.5rem,
81
+ '8xl': 6rem,
82
+ '9xl': 8rem
83
+ );
84
+
85
+ $font-weights: (
86
+ 'thin': 100,
87
+ 'extralight': 200,
88
+ 'light': 300,
89
+ 'normal': 400,
90
+ 'medium': 500,
91
+ 'semibold': 600,
92
+ 'bold': 700,
93
+ 'extrabold': 800,
94
+ 'black': 900
95
+ );
96
+
97
+ $breakpoints: (
98
+ 'sm': 640px,
99
+ 'md': 768px,
100
+ 'lg': 1024px,
101
+ 'xl': 1280px,
102
+ 'xxl': 1536px
103
+ );
104
+
105
+ $shadows: (
106
+ 'sm': 0 1px 2px 0 rgb(0 0 0 / 0.05),
107
+ 'DEFAULT': 0 1px 3px 0 rgb(0 0 0 / 0.1),
108
+ 'md': 0 4px 6px -1px rgb(0 0 0 / 0.1),
109
+ 'lg': 0 10px 15px -3px rgb(0 0 0 / 0.1),
110
+ 'xl': 0 20px 25px -5px rgb(0 0 0 / 0.1),
111
+ '2xl': 0 25px 50px -12px rgb(0 0 0 / 0.25),
112
+ 'inner': inset 0 2px 4px 0 rgb(0 0 0 / 0.05),
113
+ 'none': none
114
+ );
115
+
116
+ // Reset & Base Styles
117
+ // ============================================
118
+
119
+ *,
120
+ *::before,
121
+ *::after {
122
+ box-sizing: border-box;
123
+ margin: 0;
124
+ padding: 0;
125
+ }
126
+
127
+ // Display Utilities
128
+ // ============================================
129
+
130
+ .block {
131
+ display: block;
132
+ }
133
+
134
+ .inline-block {
135
+ display: inline-block;
136
+ }
137
+
138
+ .inline {
139
+ display: inline;
140
+ }
141
+
142
+ .flex {
143
+ display: flex;
144
+ }
145
+
146
+ .inline-flex {
147
+ display: inline-flex;
148
+ }
149
+
150
+ .grid {
151
+ display: grid;
152
+ }
153
+
154
+ .inline-grid {
155
+ display: inline-grid;
156
+ }
157
+
158
+ .table {
159
+ display: table;
160
+ }
161
+
162
+ .table-row {
163
+ display: table-row;
164
+ }
165
+
166
+ .table-cell {
167
+ display: table-cell;
168
+ }
169
+
170
+ .hidden {
171
+ display: none;
172
+ }
173
+
174
+ .contents {
175
+ display: contents;
176
+ }
177
+
178
+ // Flexbox Utilities
179
+ // ============================================
180
+
181
+ .flex-row {
182
+ flex-direction: row;
183
+ }
184
+
185
+ .flex-row-reverse {
186
+ flex-direction: row-reverse;
187
+ }
188
+
189
+ .flex-col {
190
+ flex-direction: column;
191
+ }
192
+
193
+ .flex-col-reverse {
194
+ flex-direction: column-reverse;
195
+ }
196
+
197
+ .flex-wrap {
198
+ flex-wrap: wrap;
199
+ }
200
+
201
+ .flex-wrap-reverse {
202
+ flex-wrap: wrap-reverse;
203
+ }
204
+
205
+ .flex-nowrap {
206
+ flex-wrap: nowrap;
207
+ }
208
+
209
+ .items-start {
210
+ align-items: flex-start;
211
+ }
212
+
213
+ .items-center {
214
+ align-items: center;
215
+ }
216
+
217
+ .items-end {
218
+ align-items: flex-end;
219
+ }
220
+
221
+ .items-stretch {
222
+ align-items: stretch;
223
+ }
224
+
225
+ .items-baseline {
226
+ align-items: baseline;
227
+ }
228
+
229
+ .justify-start {
230
+ justify-content: flex-start;
231
+ }
232
+
233
+ .justify-center {
234
+ justify-content: center;
235
+ }
236
+
237
+ .justify-end {
238
+ justify-content: flex-end;
239
+ }
240
+
241
+ .justify-between {
242
+ justify-content: space-between;
243
+ }
244
+
245
+ .justify-around {
246
+ justify-content: space-around;
247
+ }
248
+
249
+ .justify-evenly {
250
+ justify-content: space-evenly;
251
+ }
252
+
253
+ .self-auto {
254
+ align-self: auto;
255
+ }
256
+
257
+ .self-start {
258
+ align-self: flex-start;
259
+ }
260
+
261
+ .self-center {
262
+ align-self: center;
263
+ }
264
+
265
+ .self-end {
266
+ align-self: flex-end;
267
+ }
268
+
269
+ .self-stretch {
270
+ align-self: stretch;
271
+ }
272
+
273
+ .flex-1 {
274
+ flex: 1 1 0%;
275
+ }
276
+
277
+ .flex-auto {
278
+ flex: 1 1 auto;
279
+ }
280
+
281
+ .flex-initial {
282
+ flex: 0 1 auto;
283
+ }
284
+
285
+ .flex-none {
286
+ flex: none;
287
+ }
288
+
289
+ .grow {
290
+ flex-grow: 1;
291
+ }
292
+
293
+ .grow-0 {
294
+ flex-grow: 0;
295
+ }
296
+
297
+ .shrink {
298
+ flex-shrink: 1;
299
+ }
300
+
301
+ .shrink-0 {
302
+ flex-shrink: 0;
303
+ }
304
+
305
+ .order-1 {
306
+ order: 1;
307
+ }
308
+
309
+ .order-2 {
310
+ order: 2;
311
+ }
312
+
313
+ .order-3 {
314
+ order: 3;
315
+ }
316
+
317
+ .order-first {
318
+ order: -9999;
319
+ }
320
+
321
+ .order-last {
322
+ order: 9999;
323
+ }
324
+
325
+ .order-none {
326
+ order: 0;
327
+ }
328
+
329
+ @each $key, $value in $spacing-scale {
330
+ .gap-#{$key} {
331
+ gap: $value;
332
+ }
333
+
334
+ .gap-x-#{$key} {
335
+ column-gap: $value;
336
+ }
337
+
338
+ .gap-y-#{$key} {
339
+ row-gap: $value;
340
+ }
341
+ }
342
+
343
+ // Grid Utilities
344
+ // ============================================
345
+
346
+ @for $i from 1 through 12 {
347
+ .grid-cols-#{$i} {
348
+ grid-template-columns: repeat($i, minmax(0, 1fr));
349
+ }
350
+
351
+ .col-span-#{$i} {
352
+ grid-column: span $i / span $i;
353
+ }
354
+
355
+ .col-start-#{$i} {
356
+ grid-column-start: $i;
357
+ }
358
+
359
+ .col-end-#{$i} {
360
+ grid-column-end: $i;
361
+ }
362
+
363
+ .grid-rows-#{$i} {
364
+ grid-template-rows: repeat($i, minmax(0, 1fr));
365
+ }
366
+
367
+ .row-span-#{$i} {
368
+ grid-row: span $i / span $i;
369
+ }
370
+
371
+ .row-start-#{$i} {
372
+ grid-row-start: $i;
373
+ }
374
+
375
+ .row-end-#{$i} {
376
+ grid-row-end: $i;
377
+ }
378
+ }
379
+
380
+ .col-auto {
381
+ grid-column: auto;
382
+ }
383
+
384
+ .row-auto {
385
+ grid-row: auto;
386
+ }
387
+
388
+ .place-items-start {
389
+ place-items: start;
390
+ }
391
+
392
+ .place-items-center {
393
+ place-items: center;
394
+ }
395
+
396
+ .place-items-end {
397
+ place-items: end;
398
+ }
399
+
400
+ .place-items-stretch {
401
+ place-items: stretch;
402
+ }
403
+
404
+ .place-content-start {
405
+ place-content: start;
406
+ }
407
+
408
+ .place-content-center {
409
+ place-content: center;
410
+ }
411
+
412
+ .place-content-end {
413
+ place-content: end;
414
+ }
415
+
416
+ .place-content-between {
417
+ place-content: space-between;
418
+ }
419
+
420
+ .place-content-around {
421
+ place-content: space-around;
422
+ }
423
+
424
+ // Spacing Utilities (Margin & Padding)
425
+ // ============================================
426
+
427
+ @each $key, $value in $spacing-scale {
428
+
429
+ // Margin - All sides
430
+ .m-#{$key} {
431
+ margin: $value;
432
+ }
433
+
434
+ .mt-#{$key} {
435
+ margin-top: $value;
436
+ }
437
+
438
+ .mr-#{$key} {
439
+ margin-right: $value;
440
+ }
441
+
442
+ .mb-#{$key} {
443
+ margin-bottom: $value;
444
+ }
445
+
446
+ .ml-#{$key} {
447
+ margin-left: $value;
448
+ }
449
+
450
+ .mx-#{$key} {
451
+ margin-left: $value;
452
+ margin-right: $value;
453
+ }
454
+
455
+ .my-#{$key} {
456
+ margin-top: $value;
457
+ margin-bottom: $value;
458
+ }
459
+
460
+ // Padding - All sides
461
+ .p-#{$key} {
462
+ padding: $value;
463
+ }
464
+
465
+ .pt-#{$key} {
466
+ padding-top: $value;
467
+ }
468
+
469
+ .pr-#{$key} {
470
+ padding-right: $value;
471
+ }
472
+
473
+ .pb-#{$key} {
474
+ padding-bottom: $value;
475
+ }
476
+
477
+ .pl-#{$key} {
478
+ padding-left: $value;
479
+ }
480
+
481
+ .px-#{$key} {
482
+ padding-left: $value;
483
+ padding-right: $value;
484
+ }
485
+
486
+ .py-#{$key} {
487
+ padding-top: $value;
488
+ padding-bottom: $value;
489
+ }
490
+
491
+ // Smart directional utilities (start/end for RTL support)
492
+ .ms-#{$key} {
493
+ margin-inline-start: $value;
494
+ }
495
+
496
+ .me-#{$key} {
497
+ margin-inline-end: $value;
498
+ }
499
+
500
+ .ps-#{$key} {
501
+ padding-inline-start: $value;
502
+ }
503
+
504
+ .pe-#{$key} {
505
+ padding-inline-end: $value;
506
+ }
507
+
508
+ // Negative margins
509
+ .-m-#{$key} {
510
+ margin: -$value;
511
+ }
512
+
513
+ .-mt-#{$key} {
514
+ margin-top: -$value;
515
+ }
516
+
517
+ .-mr-#{$key} {
518
+ margin-right: -$value;
519
+ }
520
+
521
+ .-mb-#{$key} {
522
+ margin-bottom: -$value;
523
+ }
524
+
525
+ .-ml-#{$key} {
526
+ margin-left: -$value;
527
+ }
528
+
529
+ .-mx-#{$key} {
530
+ margin-left: -$value;
531
+ margin-right: -$value;
532
+ }
533
+
534
+ .-my-#{$key} {
535
+ margin-top: -$value;
536
+ margin-bottom: -$value;
537
+ }
538
+
539
+ // Space between children
540
+ .space-x-#{$key}> :not([hidden])~ :not([hidden]) {
541
+ margin-left: $value;
542
+ }
543
+
544
+ .space-y-#{$key}> :not([hidden])~ :not([hidden]) {
545
+ margin-top: $value;
546
+ }
547
+ }
548
+
549
+ // Auto margins
550
+ .m-auto {
551
+ margin: auto;
552
+ }
553
+
554
+ .mx-auto {
555
+ margin-left: auto;
556
+ margin-right: auto;
557
+ }
558
+
559
+ .my-auto {
560
+ margin-top: auto;
561
+ margin-bottom: auto;
562
+ }
563
+
564
+ .mt-auto {
565
+ margin-top: auto;
566
+ }
567
+
568
+ .mr-auto {
569
+ margin-right: auto;
570
+ }
571
+
572
+ .mb-auto {
573
+ margin-bottom: auto;
574
+ }
575
+
576
+ .ml-auto {
577
+ margin-left: auto;
578
+ }
579
+
580
+ .ms-auto {
581
+ margin-inline-start: auto;
582
+ }
583
+
584
+ .me-auto {
585
+ margin-inline-end: auto;
586
+ }
587
+
588
+ // Width & Height Utilities
589
+ // ============================================
590
+
591
+ .w-auto {
592
+ width: auto;
593
+ }
594
+
595
+ .w-full {
596
+ width: 100%;
597
+ }
598
+
599
+ .w-screen {
600
+ width: 100vw;
601
+ }
602
+
603
+ .w-min {
604
+ width: min-content;
605
+ }
606
+
607
+ .w-max {
608
+ width: max-content;
609
+ }
610
+
611
+ .w-fit {
612
+ width: fit-content;
613
+ }
614
+
615
+ @for $i from 1 through 12 {
616
+ .w-#{$i}-12 {
617
+ width: math.percentage(math.div($i, 12));
618
+ }
619
+ }
620
+
621
+ .w-1-2 {
622
+ width: 50%;
623
+ }
624
+
625
+ .w-1-3 {
626
+ width: 33.333333%;
627
+ }
628
+
629
+ .w-2-3 {
630
+ width: 66.666667%;
631
+ }
632
+
633
+ .w-1-4 {
634
+ width: 25%;
635
+ }
636
+
637
+ .w-3-4 {
638
+ width: 75%;
639
+ }
640
+
641
+ .w-1-5 {
642
+ width: 20%;
643
+ }
644
+
645
+ .h-auto {
646
+ height: auto;
647
+ }
648
+
649
+ .h-full {
650
+ height: 100%;
651
+ }
652
+
653
+ .h-screen {
654
+ height: 100vh;
655
+ }
656
+
657
+ .h-min {
658
+ height: min-content;
659
+ }
660
+
661
+ .h-max {
662
+ height: max-content;
663
+ }
664
+
665
+ .h-fit {
666
+ height: fit-content;
667
+ }
668
+
669
+ @each $key, $value in $spacing-scale {
670
+ .w-#{$key} {
671
+ width: $value;
672
+ }
673
+
674
+ .h-#{$key} {
675
+ height: $value;
676
+ }
677
+ }
678
+
679
+ .min-w-0 {
680
+ min-width: 0;
681
+ }
682
+
683
+ .min-w-full {
684
+ min-width: 100%;
685
+ }
686
+
687
+ .min-w-min {
688
+ min-width: min-content;
689
+ }
690
+
691
+ .min-w-max {
692
+ min-width: max-content;
693
+ }
694
+
695
+ .min-h-0 {
696
+ min-height: 0;
697
+ }
698
+
699
+ .min-h-full {
700
+ min-height: 100%;
701
+ }
702
+
703
+ .min-h-screen {
704
+ min-height: 100vh;
705
+ }
706
+
707
+ .max-w-none {
708
+ max-width: none;
709
+ }
710
+
711
+ .max-w-xs {
712
+ max-width: 20rem;
713
+ }
714
+
715
+ .max-w-sm {
716
+ max-width: 24rem;
717
+ }
718
+
719
+ .max-w-md {
720
+ max-width: 28rem;
721
+ }
722
+
723
+ .max-w-lg {
724
+ max-width: 32rem;
725
+ }
726
+
727
+ .max-w-xl {
728
+ max-width: 36rem;
729
+ }
730
+
731
+ .max-w-2xl {
732
+ max-width: 42rem;
733
+ }
734
+
735
+ .max-w-3xl {
736
+ max-width: 48rem;
737
+ }
738
+
739
+ .max-w-4xl {
740
+ max-width: 56rem;
741
+ }
742
+
743
+ .max-w-5xl {
744
+ max-width: 64rem;
745
+ }
746
+
747
+ .max-w-6xl {
748
+ max-width: 72rem;
749
+ }
750
+
751
+ .max-w-7xl {
752
+ max-width: 80rem;
753
+ }
754
+
755
+ .max-w-full {
756
+ max-width: 100%;
757
+ }
758
+
759
+ .max-w-screen-sm {
760
+ max-width: map.get($breakpoints, 'sm');
761
+ }
762
+
763
+ .max-w-screen-md {
764
+ max-width: map.get($breakpoints, 'md');
765
+ }
766
+
767
+ .max-w-screen-lg {
768
+ max-width: map.get($breakpoints, 'lg');
769
+ }
770
+
771
+ .max-w-screen-xl {
772
+ max-width: map.get($breakpoints, 'xl');
773
+ }
774
+
775
+ .max-h-full {
776
+ max-height: 100%;
777
+ }
778
+
779
+ .max-h-screen {
780
+ max-height: 100vh;
781
+ }
782
+
783
+ // Typography Utilities
784
+ // ============================================
785
+
786
+ @each $key, $value in $font-sizes {
787
+ .text-#{$key} {
788
+ font-size: $value;
789
+ }
790
+ }
791
+
792
+ @each $key, $value in $font-weights {
793
+ .font-#{$key} {
794
+ font-weight: $value;
795
+ }
796
+ }
797
+
798
+ .text-left {
799
+ text-align: left;
800
+ }
801
+
802
+ .text-center {
803
+ text-align: center;
804
+ }
805
+
806
+ .text-right {
807
+ text-align: right;
808
+ }
809
+
810
+ .text-justify {
811
+ text-align: justify;
812
+ }
813
+
814
+ .text-start {
815
+ text-align: start;
816
+ }
817
+
818
+ .text-end {
819
+ text-align: end;
820
+ }
821
+
822
+ .uppercase {
823
+ text-transform: uppercase;
824
+ }
825
+
826
+ .lowercase {
827
+ text-transform: lowercase;
828
+ }
829
+
830
+ .capitalize {
831
+ text-transform: capitalize;
832
+ }
833
+
834
+ .normal-case {
835
+ text-transform: none;
836
+ }
837
+
838
+ .italic {
839
+ font-style: italic;
840
+ }
841
+
842
+ .not-italic {
843
+ font-style: normal;
844
+ }
845
+
846
+ .underline {
847
+ text-decoration: underline;
848
+ }
849
+
850
+ .line-through {
851
+ text-decoration: line-through;
852
+ }
853
+
854
+ .no-underline {
855
+ text-decoration: none;
856
+ }
857
+
858
+ .leading-none {
859
+ line-height: 1;
860
+ }
861
+
862
+ .leading-tight {
863
+ line-height: 1.25;
864
+ }
865
+
866
+ .leading-snug {
867
+ line-height: 1.375;
868
+ }
869
+
870
+ .leading-normal {
871
+ line-height: 1.5;
872
+ }
873
+
874
+ .leading-relaxed {
875
+ line-height: 1.625;
876
+ }
877
+
878
+ .leading-loose {
879
+ line-height: 2;
880
+ }
881
+
882
+ .tracking-tighter {
883
+ letter-spacing: -0.05em;
884
+ }
885
+
886
+ .tracking-tight {
887
+ letter-spacing: -0.025em;
888
+ }
889
+
890
+ .tracking-normal {
891
+ letter-spacing: 0;
892
+ }
893
+
894
+ .tracking-wide {
895
+ letter-spacing: 0.025em;
896
+ }
897
+
898
+ .tracking-wider {
899
+ letter-spacing: 0.05em;
900
+ }
901
+
902
+ .tracking-widest {
903
+ letter-spacing: 0.1em;
904
+ }
905
+
906
+ .truncate {
907
+ overflow: hidden;
908
+ text-overflow: ellipsis;
909
+ white-space: nowrap;
910
+ }
911
+
912
+ .text-ellipsis {
913
+ text-overflow: ellipsis;
914
+ }
915
+
916
+ .text-clip {
917
+ text-overflow: clip;
918
+ }
919
+
920
+ .break-normal {
921
+ overflow-wrap: normal;
922
+ word-break: normal;
923
+ }
924
+
925
+ .break-words {
926
+ overflow-wrap: break-word;
927
+ }
928
+
929
+ .break-all {
930
+ word-break: break-all;
931
+ }
932
+
933
+ .whitespace-normal {
934
+ white-space: normal;
935
+ }
936
+
937
+ .whitespace-nowrap {
938
+ white-space: nowrap;
939
+ }
940
+
941
+ .whitespace-pre {
942
+ white-space: pre;
943
+ }
944
+
945
+ .whitespace-pre-line {
946
+ white-space: pre-line;
947
+ }
948
+
949
+ .whitespace-pre-wrap {
950
+ white-space: pre-wrap;
951
+ }
952
+
953
+ // Color Utilities
954
+ // ============================================
955
+
956
+ @each $name, $color in $colors {
957
+ .text-#{$name} {
958
+ color: $color;
959
+ }
960
+
961
+ .bg-#{$name} {
962
+ background-color: $color;
963
+ }
964
+
965
+ .border-#{$name} {
966
+ border-color: $color;
967
+ }
968
+
969
+ .fill-#{$name} {
970
+ fill: $color;
971
+ }
972
+
973
+ .stroke-#{$name} {
974
+ stroke: $color;
975
+ }
976
+ }
977
+
978
+ .text-transparent {
979
+ color: transparent;
980
+ }
981
+
982
+ .bg-transparent {
983
+ background-color: transparent;
984
+ }
985
+
986
+ .text-current {
987
+ color: currentColor;
988
+ }
989
+
990
+ .bg-current {
991
+ background-color: currentColor;
992
+ }
993
+
994
+ // Border Utilities
995
+ // ============================================
996
+
997
+ .border {
998
+ border-width: 1px;
999
+ border-style: solid;
1000
+ }
1001
+
1002
+ .border-0 {
1003
+ border-width: 0;
1004
+ }
1005
+
1006
+ .border-2 {
1007
+ border-width: 2px;
1008
+ border-style: solid;
1009
+ }
1010
+
1011
+ .border-4 {
1012
+ border-width: 4px;
1013
+ border-style: solid;
1014
+ }
1015
+
1016
+ .border-8 {
1017
+ border-width: 8px;
1018
+ border-style: solid;
1019
+ }
1020
+
1021
+ .border-t {
1022
+ border-top-width: 1px;
1023
+ border-top-style: solid;
1024
+ }
1025
+
1026
+ .border-r {
1027
+ border-right-width: 1px;
1028
+ border-right-style: solid;
1029
+ }
1030
+
1031
+ .border-b {
1032
+ border-bottom-width: 1px;
1033
+ border-bottom-style: solid;
1034
+ }
1035
+
1036
+ .border-l {
1037
+ border-left-width: 1px;
1038
+ border-left-style: solid;
1039
+ }
1040
+
1041
+ .border-t-0 {
1042
+ border-top-width: 0;
1043
+ }
1044
+
1045
+ .border-r-0 {
1046
+ border-right-width: 0;
1047
+ }
1048
+
1049
+ .border-b-0 {
1050
+ border-bottom-width: 0;
1051
+ }
1052
+
1053
+ .border-l-0 {
1054
+ border-left-width: 0;
1055
+ }
1056
+
1057
+ .border-t-2 {
1058
+ border-top-width: 2px;
1059
+ border-top-style: solid;
1060
+ }
1061
+
1062
+ .border-r-2 {
1063
+ border-right-width: 2px;
1064
+ border-right-style: solid;
1065
+ }
1066
+
1067
+ .border-b-2 {
1068
+ border-bottom-width: 2px;
1069
+ border-bottom-style: solid;
1070
+ }
1071
+
1072
+ .border-l-2 {
1073
+ border-left-width: 2px;
1074
+ border-left-style: solid;
1075
+ }
1076
+
1077
+ // Smart directional borders (start/end)
1078
+ .border-s {
1079
+ border-inline-start-width: 1px;
1080
+ border-inline-start-style: solid;
1081
+ }
1082
+
1083
+ .border-e {
1084
+ border-inline-end-width: 1px;
1085
+ border-inline-end-style: solid;
1086
+ }
1087
+
1088
+ .border-s-0 {
1089
+ border-inline-start-width: 0;
1090
+ }
1091
+
1092
+ .border-e-0 {
1093
+ border-inline-end-width: 0;
1094
+ }
1095
+
1096
+ .border-solid {
1097
+ border-style: solid;
1098
+ }
1099
+
1100
+ .border-dashed {
1101
+ border-style: dashed;
1102
+ }
1103
+
1104
+ .border-dotted {
1105
+ border-style: dotted;
1106
+ }
1107
+
1108
+ .border-double {
1109
+ border-style: double;
1110
+ }
1111
+
1112
+ .border-none {
1113
+ border-style: none;
1114
+ }
1115
+
1116
+ .rounded-none {
1117
+ border-radius: 0;
1118
+ }
1119
+
1120
+ .rounded-sm {
1121
+ border-radius: 0.125rem;
1122
+ }
1123
+
1124
+ .rounded {
1125
+ border-radius: 0.25rem;
1126
+ }
1127
+
1128
+ .rounded-md {
1129
+ border-radius: 0.375rem;
1130
+ }
1131
+
1132
+ .rounded-lg {
1133
+ border-radius: 0.5rem;
1134
+ }
1135
+
1136
+ .rounded-xl {
1137
+ border-radius: 0.75rem;
1138
+ }
1139
+
1140
+ .rounded-2xl {
1141
+ border-radius: 1rem;
1142
+ }
1143
+
1144
+ .rounded-3xl {
1145
+ border-radius: 1.5rem;
1146
+ }
1147
+
1148
+ .rounded-full {
1149
+ border-radius: 9999px;
1150
+ }
1151
+
1152
+ .rounded-t-none {
1153
+ border-top-left-radius: 0;
1154
+ border-top-right-radius: 0;
1155
+ }
1156
+
1157
+ .rounded-r-none {
1158
+ border-top-right-radius: 0;
1159
+ border-bottom-right-radius: 0;
1160
+ }
1161
+
1162
+ .rounded-b-none {
1163
+ border-bottom-left-radius: 0;
1164
+ border-bottom-right-radius: 0;
1165
+ }
1166
+
1167
+ .rounded-l-none {
1168
+ border-top-left-radius: 0;
1169
+ border-bottom-left-radius: 0;
1170
+ }
1171
+
1172
+ .rounded-t {
1173
+ border-top-left-radius: 0.25rem;
1174
+ border-top-right-radius: 0.25rem;
1175
+ }
1176
+
1177
+ .rounded-r {
1178
+ border-top-right-radius: 0.25rem;
1179
+ border-bottom-right-radius: 0.25rem;
1180
+ }
1181
+
1182
+ .rounded-b {
1183
+ border-bottom-left-radius: 0.25rem;
1184
+ border-bottom-right-radius: 0.25rem;
1185
+ }
1186
+
1187
+ .rounded-l {
1188
+ border-top-left-radius: 0.25rem;
1189
+ border-bottom-left-radius: 0.25rem;
1190
+ }
1191
+
1192
+ .rounded-tl {
1193
+ border-top-left-radius: 0.25rem;
1194
+ }
1195
+
1196
+ .rounded-tr {
1197
+ border-top-right-radius: 0.25rem;
1198
+ }
1199
+
1200
+ .rounded-br {
1201
+ border-bottom-right-radius: 0.25rem;
1202
+ }
1203
+
1204
+ .rounded-bl {
1205
+ border-bottom-left-radius: 0.25rem;
1206
+ }
1207
+
1208
+ // Smart directional radius (start/end)
1209
+ .rounded-s {
1210
+ border-start-start-radius: 0.25rem;
1211
+ border-end-start-radius: 0.25rem;
1212
+ }
1213
+
1214
+ .rounded-e {
1215
+ border-start-end-radius: 0.25rem;
1216
+ border-end-end-radius: 0.25rem;
1217
+ }
1218
+
1219
+ // Outline Utilities
1220
+ // ============================================
1221
+
1222
+ .outline-none {
1223
+ outline: 2px solid transparent;
1224
+ outline-offset: 2px;
1225
+ }
1226
+
1227
+ .outline {
1228
+ outline-style: solid;
1229
+ }
1230
+
1231
+ .outline-dashed {
1232
+ outline-style: dashed;
1233
+ }
1234
+
1235
+ .outline-dotted {
1236
+ outline-style: dotted;
1237
+ }
1238
+
1239
+ .outline-0 {
1240
+ outline-width: 0;
1241
+ }
1242
+
1243
+ .outline-1 {
1244
+ outline-width: 1px;
1245
+ }
1246
+
1247
+ .outline-2 {
1248
+ outline-width: 2px;
1249
+ }
1250
+
1251
+ .outline-4 {
1252
+ outline-width: 4px;
1253
+ }
1254
+
1255
+ // Shadow Utilities
1256
+ // ============================================
1257
+
1258
+ @each $name, $shadow in $shadows {
1259
+ @if $name =='DEFAULT' {
1260
+ .shadow {
1261
+ box-shadow: $shadow;
1262
+ }
1263
+ }
1264
+
1265
+ @else {
1266
+ .shadow-#{$name} {
1267
+ box-shadow: $shadow;
1268
+ }
1269
+ }
1270
+ }
1271
+
1272
+ // Position Utilities
1273
+ // ============================================
1274
+
1275
+ .static {
1276
+ position: static;
1277
+ }
1278
+
1279
+ .fixed {
1280
+ position: fixed;
1281
+ }
1282
+
1283
+ .absolute {
1284
+ position: absolute;
1285
+ }
1286
+
1287
+ .relative {
1288
+ position: relative;
1289
+ }
1290
+
1291
+ .sticky {
1292
+ position: sticky;
1293
+ }
1294
+
1295
+ .inset-0 {
1296
+ top: 0;
1297
+ right: 0;
1298
+ bottom: 0;
1299
+ left: 0;
1300
+ }
1301
+
1302
+ .inset-x-0 {
1303
+ left: 0;
1304
+ right: 0;
1305
+ }
1306
+
1307
+ .inset-y-0 {
1308
+ top: 0;
1309
+ bottom: 0;
1310
+ }
1311
+
1312
+ .inset-auto {
1313
+ top: auto;
1314
+ right: auto;
1315
+ bottom: auto;
1316
+ left: auto;
1317
+ }
1318
+
1319
+ .top-0 {
1320
+ top: 0;
1321
+ }
1322
+
1323
+ .right-0 {
1324
+ right: 0;
1325
+ }
1326
+
1327
+ .bottom-0 {
1328
+ bottom: 0;
1329
+ }
1330
+
1331
+ .left-0 {
1332
+ left: 0;
1333
+ }
1334
+
1335
+ .top-auto {
1336
+ top: auto;
1337
+ }
1338
+
1339
+ .right-auto {
1340
+ right: auto;
1341
+ }
1342
+
1343
+ .bottom-auto {
1344
+ bottom: auto;
1345
+ }
1346
+
1347
+ .left-auto {
1348
+ left: auto;
1349
+ }
1350
+
1351
+ @each $key, $value in $spacing-scale {
1352
+ .top-#{$key} {
1353
+ top: $value;
1354
+ }
1355
+
1356
+ .right-#{$key} {
1357
+ right: $value;
1358
+ }
1359
+
1360
+ .bottom-#{$key} {
1361
+ bottom: $value;
1362
+ }
1363
+
1364
+ .left-#{$key} {
1365
+ left: $value;
1366
+ }
1367
+
1368
+ .inset-#{$key} {
1369
+ top: $value;
1370
+ right: $value;
1371
+ bottom: $value;
1372
+ left: $value;
1373
+ }
1374
+
1375
+ .-top-#{$key} {
1376
+ top: -$value;
1377
+ }
1378
+
1379
+ .-right-#{$key} {
1380
+ right: -$value;
1381
+ }
1382
+
1383
+ .-bottom-#{$key} {
1384
+ bottom: -$value;
1385
+ }
1386
+
1387
+ .-left-#{$key} {
1388
+ left: -$value;
1389
+ }
1390
+
1391
+ // Smart directional positioning
1392
+ .start-#{$key} {
1393
+ inset-inline-start: $value;
1394
+ }
1395
+
1396
+ .end-#{$key} {
1397
+ inset-inline-end: $value;
1398
+ }
1399
+ }
1400
+
1401
+ // Z-Index Utilities
1402
+ // ============================================
1403
+
1404
+ .z-0 {
1405
+ z-index: 0;
1406
+ }
1407
+
1408
+ .z-10 {
1409
+ z-index: 10;
1410
+ }
1411
+
1412
+ .z-20 {
1413
+ z-index: 20;
1414
+ }
1415
+
1416
+ .z-30 {
1417
+ z-index: 30;
1418
+ }
1419
+
1420
+ .z-40 {
1421
+ z-index: 40;
1422
+ }
1423
+
1424
+ .z-50 {
1425
+ z-index: 50;
1426
+ }
1427
+
1428
+ .z-60 {
1429
+ z-index: 60;
1430
+ }
1431
+
1432
+ .z-70 {
1433
+ z-index: 70;
1434
+ }
1435
+
1436
+ .z-auto {
1437
+ z-index: auto;
1438
+ }
1439
+
1440
+ // Opacity Utilities
1441
+ // ============================================
1442
+
1443
+ @for $i from 0 through 10 {
1444
+ .opacity-#{$i * 10} {
1445
+ opacity: $i * 0.1;
1446
+ }
1447
+ }
1448
+
1449
+ .opacity-5 {
1450
+ opacity: 0.05;
1451
+ }
1452
+
1453
+ .opacity-25 {
1454
+ opacity: 0.25;
1455
+ }
1456
+
1457
+ .opacity-75 {
1458
+ opacity: 0.75;
1459
+ }
1460
+
1461
+ .opacity-95 {
1462
+ opacity: 0.95;
1463
+ }
1464
+
1465
+ // Visibility Utilities
1466
+ // ============================================
1467
+
1468
+ .visible {
1469
+ visibility: visible;
1470
+ }
1471
+
1472
+ .invisible {
1473
+ visibility: hidden;
1474
+ }
1475
+
1476
+ .collapse {
1477
+ visibility: collapse;
1478
+ }
1479
+
1480
+ // Pointer Events
1481
+ // ============================================
1482
+
1483
+ .pointer-events-none {
1484
+ pointer-events: none;
1485
+ }
1486
+
1487
+ .pointer-events-auto {
1488
+ pointer-events: auto;
1489
+ }
1490
+
1491
+ // Cursor Utilities
1492
+ // ============================================
1493
+
1494
+ .cursor-auto {
1495
+ cursor: auto;
1496
+ }
1497
+
1498
+ .cursor-default {
1499
+ cursor: default;
1500
+ }
1501
+
1502
+ .cursor-pointer {
1503
+ cursor: pointer;
1504
+ }
1505
+
1506
+ .cursor-wait {
1507
+ cursor: wait;
1508
+ }
1509
+
1510
+ .cursor-text {
1511
+ cursor: text;
1512
+ }
1513
+
1514
+ .cursor-move {
1515
+ cursor: move;
1516
+ }
1517
+
1518
+ .cursor-help {
1519
+ cursor: help;
1520
+ }
1521
+
1522
+ .cursor-not-allowed {
1523
+ cursor: not-allowed;
1524
+ }
1525
+
1526
+ .cursor-grab {
1527
+ cursor: grab;
1528
+ }
1529
+
1530
+ .cursor-grabbing {
1531
+ cursor: grabbing;
1532
+ }
1533
+
1534
+ // User Select
1535
+ // ============================================
1536
+
1537
+ .select-none {
1538
+ user-select: none;
1539
+ }
1540
+
1541
+ .select-text {
1542
+ user-select: text;
1543
+ }
1544
+
1545
+ .select-all {
1546
+ user-select: all;
1547
+ }
1548
+
1549
+ .select-auto {
1550
+ user-select: auto;
1551
+ }
1552
+
1553
+ // Overflow Utilities
1554
+ // ============================================
1555
+
1556
+ .overflow-auto {
1557
+ overflow: auto;
1558
+ }
1559
+
1560
+ .overflow-hidden {
1561
+ overflow: hidden;
1562
+ }
1563
+
1564
+ .overflow-visible {
1565
+ overflow: visible;
1566
+ }
1567
+
1568
+ .overflow-scroll {
1569
+ overflow: scroll;
1570
+ }
1571
+
1572
+ .overflow-clip {
1573
+ overflow: clip;
1574
+ }
1575
+
1576
+ .overflow-x-auto {
1577
+ overflow-x: auto;
1578
+ }
1579
+
1580
+ .overflow-y-auto {
1581
+ overflow-y: auto;
1582
+ }
1583
+
1584
+ .overflow-x-hidden {
1585
+ overflow-x: hidden;
1586
+ }
1587
+
1588
+ .overflow-y-hidden {
1589
+ overflow-y: hidden;
1590
+ }
1591
+
1592
+ .overflow-x-scroll {
1593
+ overflow-x: scroll;
1594
+ }
1595
+
1596
+ .overflow-y-scroll {
1597
+ overflow-y: scroll;
1598
+ }
1599
+
1600
+ .overscroll-auto {
1601
+ overscroll-behavior: auto;
1602
+ }
1603
+
1604
+ .overscroll-contain {
1605
+ overscroll-behavior: contain;
1606
+ }
1607
+
1608
+ .overscroll-none {
1609
+ overscroll-behavior: none;
1610
+ }
1611
+
1612
+ // Object Fit & Position
1613
+ // ============================================
1614
+
1615
+ .object-contain {
1616
+ object-fit: contain;
1617
+ }
1618
+
1619
+ .object-cover {
1620
+ object-fit: cover;
1621
+ }
1622
+
1623
+ .object-fill {
1624
+ object-fit: fill;
1625
+ }
1626
+
1627
+ .object-none {
1628
+ object-fit: none;
1629
+ }
1630
+
1631
+ .object-scale-down {
1632
+ object-fit: scale-down;
1633
+ }
1634
+
1635
+ .object-center {
1636
+ object-position: center;
1637
+ }
1638
+
1639
+ .object-top {
1640
+ object-position: top;
1641
+ }
1642
+
1643
+ .object-right {
1644
+ object-position: right;
1645
+ }
1646
+
1647
+ .object-bottom {
1648
+ object-position: bottom;
1649
+ }
1650
+
1651
+ .object-left {
1652
+ object-position: left;
1653
+ }
1654
+
1655
+ // Aspect Ratio
1656
+ // ============================================
1657
+
1658
+ .aspect-auto {
1659
+ aspect-ratio: auto;
1660
+ }
1661
+
1662
+ .aspect-square {
1663
+ aspect-ratio: 1 / 1;
1664
+ }
1665
+
1666
+ .aspect-video {
1667
+ aspect-ratio: 16 / 9;
1668
+ }
1669
+
1670
+ // Transition Utilities
1671
+ // ============================================
1672
+
1673
+ .transition-none {
1674
+ transition-property: none;
1675
+ }
1676
+
1677
+ .transition-all {
1678
+ transition-property: all;
1679
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1680
+ transition-duration: 150ms;
1681
+ }
1682
+
1683
+ .transition {
1684
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform;
1685
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1686
+ transition-duration: 150ms;
1687
+ }
1688
+
1689
+ .transition-colors {
1690
+ transition-property: background-color, border-color, color, fill, stroke;
1691
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1692
+ transition-duration: 150ms;
1693
+ }
1694
+
1695
+ .transition-opacity {
1696
+ transition-property: opacity;
1697
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1698
+ transition-duration: 150ms;
1699
+ }
1700
+
1701
+ .transition-shadow {
1702
+ transition-property: box-shadow;
1703
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1704
+ transition-duration: 150ms;
1705
+ }
1706
+
1707
+ .transition-transform {
1708
+ transition-property: transform;
1709
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1710
+ transition-duration: 150ms;
1711
+ }
1712
+
1713
+ .duration-75 {
1714
+ transition-duration: 75ms;
1715
+ }
1716
+
1717
+ .duration-100 {
1718
+ transition-duration: 100ms;
1719
+ }
1720
+
1721
+ .duration-150 {
1722
+ transition-duration: 150ms;
1723
+ }
1724
+
1725
+ .duration-200 {
1726
+ transition-duration: 200ms;
1727
+ }
1728
+
1729
+ .duration-300 {
1730
+ transition-duration: 300ms;
1731
+ }
1732
+
1733
+ .duration-500 {
1734
+ transition-duration: 500ms;
1735
+ }
1736
+
1737
+ .duration-700 {
1738
+ transition-duration: 700ms;
1739
+ }
1740
+
1741
+ .duration-1000 {
1742
+ transition-duration: 1000ms;
1743
+ }
1744
+
1745
+ .ease-linear {
1746
+ transition-timing-function: linear;
1747
+ }
1748
+
1749
+ .ease-in {
1750
+ transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
1751
+ }
1752
+
1753
+ .ease-out {
1754
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
1755
+ }
1756
+
1757
+ .ease-in-out {
1758
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1759
+ }
1760
+
1761
+ .delay-75 {
1762
+ transition-delay: 75ms;
1763
+ }
1764
+
1765
+ .delay-100 {
1766
+ transition-delay: 100ms;
1767
+ }
1768
+
1769
+ .delay-150 {
1770
+ transition-delay: 150ms;
1771
+ }
1772
+
1773
+ .delay-200 {
1774
+ transition-delay: 200ms;
1775
+ }
1776
+
1777
+ .delay-300 {
1778
+ transition-delay: 300ms;
1779
+ }
1780
+
1781
+ // Animation Utilities
1782
+ // ============================================
1783
+
1784
+ @keyframes spin {
1785
+ from {
1786
+ transform: rotate(0deg);
1787
+ }
1788
+
1789
+ to {
1790
+ transform: rotate(360deg);
1791
+ }
1792
+ }
1793
+
1794
+ @keyframes ping {
1795
+
1796
+ 75%,
1797
+ 100% {
1798
+ transform: scale(2);
1799
+ opacity: 0;
1800
+ }
1801
+ }
1802
+
1803
+ @keyframes pulse {
1804
+
1805
+ 0%,
1806
+ 100% {
1807
+ opacity: 1;
1808
+ }
1809
+
1810
+ 50% {
1811
+ opacity: .5;
1812
+ }
1813
+ }
1814
+
1815
+ @keyframes bounce {
1816
+
1817
+ 0%,
1818
+ 100% {
1819
+ transform: translateY(-25%);
1820
+ animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
1821
+ }
1822
+
1823
+ 50% {
1824
+ transform: translateY(0);
1825
+ animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
1826
+ }
1827
+ }
1828
+
1829
+ .animate-spin {
1830
+ animation: spin 1s linear infinite;
1831
+ }
1832
+
1833
+ .animate-ping {
1834
+ animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
1835
+ }
1836
+
1837
+ .animate-pulse {
1838
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
1839
+ }
1840
+
1841
+ .animate-bounce {
1842
+ animation: bounce 1s infinite;
1843
+ }
1844
+
1845
+ .animate-none {
1846
+ animation: none;
1847
+ }
1848
+
1849
+ // Transform Utilities
1850
+ // ============================================
1851
+
1852
+ .transform {
1853
+ transform: translateX(var(--tw-translate-x, 0)) translateY(var(--tw-translate-y, 0)) rotate(var(--tw-rotate, 0)) skewX(var(--tw-skew-x, 0)) skewY(var(--tw-skew-y, 0)) scaleX(var(--tw-scale-x, 1)) scaleY(var(--tw-scale-y, 1));
1854
+ }
1855
+
1856
+ .transform-none {
1857
+ transform: none;
1858
+ }
1859
+
1860
+ .scale-0 {
1861
+ transform: scale(0);
1862
+ }
1863
+
1864
+ .scale-50 {
1865
+ transform: scale(0.5);
1866
+ }
1867
+
1868
+ .scale-75 {
1869
+ transform: scale(0.75);
1870
+ }
1871
+
1872
+ .scale-90 {
1873
+ transform: scale(0.9);
1874
+ }
1875
+
1876
+ .scale-95 {
1877
+ transform: scale(0.95);
1878
+ }
1879
+
1880
+ .scale-100 {
1881
+ transform: scale(1);
1882
+ }
1883
+
1884
+ .scale-105 {
1885
+ transform: scale(1.05);
1886
+ }
1887
+
1888
+ .scale-110 {
1889
+ transform: scale(1.1);
1890
+ }
1891
+
1892
+ .scale-125 {
1893
+ transform: scale(1.25);
1894
+ }
1895
+
1896
+ .scale-150 {
1897
+ transform: scale(1.5);
1898
+ }
1899
+
1900
+ .rotate-0 {
1901
+ transform: rotate(0deg);
1902
+ }
1903
+
1904
+ .rotate-45 {
1905
+ transform: rotate(45deg);
1906
+ }
1907
+
1908
+ .rotate-90 {
1909
+ transform: rotate(90deg);
1910
+ }
1911
+
1912
+ .rotate-180 {
1913
+ transform: rotate(180deg);
1914
+ }
1915
+
1916
+ .rotate-270 {
1917
+ transform: rotate(270deg);
1918
+ }
1919
+
1920
+ .-rotate-45 {
1921
+ transform: rotate(-45deg);
1922
+ }
1923
+
1924
+ .-rotate-90 {
1925
+ transform: rotate(-90deg);
1926
+ }
1927
+
1928
+ .-rotate-180 {
1929
+ transform: rotate(-180deg);
1930
+ }
1931
+
1932
+ .translate-x-0 {
1933
+ transform: translateX(0);
1934
+ }
1935
+
1936
+ .translate-x-1 {
1937
+ transform: translateX(0.25rem);
1938
+ }
1939
+
1940
+ .translate-x-2 {
1941
+ transform: translateX(0.5rem);
1942
+ }
1943
+
1944
+ .translate-x-4 {
1945
+ transform: translateX(1rem);
1946
+ }
1947
+
1948
+ .translate-x-full {
1949
+ transform: translateX(100%);
1950
+ }
1951
+
1952
+ .-translate-x-full {
1953
+ transform: translateX(-100%);
1954
+ }
1955
+
1956
+ .translate-y-0 {
1957
+ transform: translateY(0);
1958
+ }
1959
+
1960
+ .translate-y-1 {
1961
+ transform: translateY(0.25rem);
1962
+ }
1963
+
1964
+ .translate-y-2 {
1965
+ transform: translateY(0.5rem);
1966
+ }
1967
+
1968
+ .translate-y-4 {
1969
+ transform: translateY(1rem);
1970
+ }
1971
+
1972
+ .translate-y-full {
1973
+ transform: translateY(100%);
1974
+ }
1975
+
1976
+ .-translate-y-full {
1977
+ transform: translateY(-100%);
1978
+ }
1979
+
1980
+ .skew-x-0 {
1981
+ transform: skewX(0deg);
1982
+ }
1983
+
1984
+ .skew-x-3 {
1985
+ transform: skewX(3deg);
1986
+ }
1987
+
1988
+ .skew-x-6 {
1989
+ transform: skewX(6deg);
1990
+ }
1991
+
1992
+ .skew-x-12 {
1993
+ transform: skewX(12deg);
1994
+ }
1995
+
1996
+ .skew-y-0 {
1997
+ transform: skewY(0deg);
1998
+ }
1999
+
2000
+ .skew-y-3 {
2001
+ transform: skewY(3deg);
2002
+ }
2003
+
2004
+ .skew-y-6 {
2005
+ transform: skewY(6deg);
2006
+ }
2007
+
2008
+ .skew-y-12 {
2009
+ transform: skewY(12deg);
2010
+ }
2011
+
2012
+ .origin-center {
2013
+ transform-origin: center;
2014
+ }
2015
+
2016
+ .origin-top {
2017
+ transform-origin: top;
2018
+ }
2019
+
2020
+ .origin-top-right {
2021
+ transform-origin: top right;
2022
+ }
2023
+
2024
+ .origin-right {
2025
+ transform-origin: right;
2026
+ }
2027
+
2028
+ .origin-bottom-right {
2029
+ transform-origin: bottom right;
2030
+ }
2031
+
2032
+ .origin-bottom {
2033
+ transform-origin: bottom;
2034
+ }
2035
+
2036
+ .origin-bottom-left {
2037
+ transform-origin: bottom left;
2038
+ }
2039
+
2040
+ .origin-left {
2041
+ transform-origin: left;
2042
+ }
2043
+
2044
+ .origin-top-left {
2045
+ transform-origin: top left;
2046
+ }
2047
+
2048
+ // Filter Utilities
2049
+ // ============================================
2050
+
2051
+ .blur-none {
2052
+ filter: blur(0);
2053
+ }
2054
+
2055
+ .blur-sm {
2056
+ filter: blur(4px);
2057
+ }
2058
+
2059
+ .blur {
2060
+ filter: blur(8px);
2061
+ }
2062
+
2063
+ .blur-md {
2064
+ filter: blur(12px);
2065
+ }
2066
+
2067
+ .blur-lg {
2068
+ filter: blur(16px);
2069
+ }
2070
+
2071
+ .blur-xl {
2072
+ filter: blur(24px);
2073
+ }
2074
+
2075
+ .brightness-0 {
2076
+ filter: brightness(0);
2077
+ }
2078
+
2079
+ .brightness-50 {
2080
+ filter: brightness(0.5);
2081
+ }
2082
+
2083
+ .brightness-75 {
2084
+ filter: brightness(0.75);
2085
+ }
2086
+
2087
+ .brightness-100 {
2088
+ filter: brightness(1);
2089
+ }
2090
+
2091
+ .brightness-125 {
2092
+ filter: brightness(1.25);
2093
+ }
2094
+
2095
+ .brightness-150 {
2096
+ filter: brightness(1.5);
2097
+ }
2098
+
2099
+ .contrast-0 {
2100
+ filter: contrast(0);
2101
+ }
2102
+
2103
+ .contrast-50 {
2104
+ filter: contrast(0.5);
2105
+ }
2106
+
2107
+ .contrast-100 {
2108
+ filter: contrast(1);
2109
+ }
2110
+
2111
+ .contrast-125 {
2112
+ filter: contrast(1.25);
2113
+ }
2114
+
2115
+ .contrast-150 {
2116
+ filter: contrast(1.5);
2117
+ }
2118
+
2119
+ .grayscale-0 {
2120
+ filter: grayscale(0);
2121
+ }
2122
+
2123
+ .grayscale {
2124
+ filter: grayscale(100%);
2125
+ }
2126
+
2127
+ .invert-0 {
2128
+ filter: invert(0);
2129
+ }
2130
+
2131
+ .invert {
2132
+ filter: invert(100%);
2133
+ }
2134
+
2135
+ .saturate-0 {
2136
+ filter: saturate(0);
2137
+ }
2138
+
2139
+ .saturate-50 {
2140
+ filter: saturate(0.5);
2141
+ }
2142
+
2143
+ .saturate-100 {
2144
+ filter: saturate(1);
2145
+ }
2146
+
2147
+ .saturate-150 {
2148
+ filter: saturate(1.5);
2149
+ }
2150
+
2151
+ .saturate-200 {
2152
+ filter: saturate(2);
2153
+ }
2154
+
2155
+ .sepia-0 {
2156
+ filter: sepia(0);
2157
+ }
2158
+
2159
+ .sepia {
2160
+ filter: sepia(100%);
2161
+ }
2162
+
2163
+ // Backdrop Filter
2164
+ // ============================================
2165
+
2166
+ .backdrop-blur-none {
2167
+ backdrop-filter: blur(0);
2168
+ }
2169
+
2170
+ .backdrop-blur-sm {
2171
+ backdrop-filter: blur(4px);
2172
+ }
2173
+
2174
+ .backdrop-blur {
2175
+ backdrop-filter: blur(8px);
2176
+ }
2177
+
2178
+ .backdrop-blur-md {
2179
+ backdrop-filter: blur(12px);
2180
+ }
2181
+
2182
+ .backdrop-blur-lg {
2183
+ backdrop-filter: blur(16px);
2184
+ }
2185
+
2186
+ // Interactivity States (Hover, Focus, Active)
2187
+ // ============================================
2188
+
2189
+ @each $name, $color in $colors {
2190
+ .hover\:bg-#{$name}:hover {
2191
+ background-color: $color;
2192
+ }
2193
+
2194
+ .hover\:text-#{$name}:hover {
2195
+ color: $color;
2196
+ }
2197
+
2198
+ .hover\:border-#{$name}:hover {
2199
+ border-color: $color;
2200
+ }
2201
+
2202
+ .focus\:bg-#{$name}:focus {
2203
+ background-color: $color;
2204
+ }
2205
+
2206
+ .focus\:text-#{$name}:focus {
2207
+ color: $color;
2208
+ }
2209
+
2210
+ .focus\:border-#{$name}:focus {
2211
+ border-color: $color;
2212
+ }
2213
+
2214
+ .active\:bg-#{$name}:active {
2215
+ background-color: $color;
2216
+ }
2217
+
2218
+ .active\:text-#{$name}:active {
2219
+ color: $color;
2220
+ }
2221
+ }
2222
+
2223
+ .hover\:opacity-100:hover {
2224
+ opacity: 1;
2225
+ }
2226
+
2227
+ .hover\:opacity-90:hover {
2228
+ opacity: 0.9;
2229
+ }
2230
+
2231
+ .hover\:opacity-75:hover {
2232
+ opacity: 0.75;
2233
+ }
2234
+
2235
+ .hover\:opacity-50:hover {
2236
+ opacity: 0.5;
2237
+ }
2238
+
2239
+ .hover\:scale-105:hover {
2240
+ transform: scale(1.05);
2241
+ }
2242
+
2243
+ .hover\:scale-110:hover {
2244
+ transform: scale(1.1);
2245
+ }
2246
+
2247
+ .hover\:scale-95:hover {
2248
+ transform: scale(0.95);
2249
+ }
2250
+
2251
+ .hover\:shadow-sm:hover {
2252
+ box-shadow: map-get($shadows, 'sm');
2253
+ }
2254
+
2255
+ .hover\:shadow:hover {
2256
+ box-shadow: map-get($shadows, 'DEFAULT');
2257
+ }
2258
+
2259
+ .hover\:shadow-md:hover {
2260
+ box-shadow: map-get($shadows, 'md');
2261
+ }
2262
+
2263
+ .hover\:shadow-lg:hover {
2264
+ box-shadow: map-get($shadows, 'lg');
2265
+ }
2266
+
2267
+ .hover\:shadow-xl:hover {
2268
+ box-shadow: map-get($shadows, 'xl');
2269
+ }
2270
+
2271
+ .hover\:shadow-none:hover {
2272
+ box-shadow: none;
2273
+ }
2274
+
2275
+ .focus\:outline-none:focus {
2276
+ outline: 2px solid transparent;
2277
+ outline-offset: 2px;
2278
+ }
2279
+
2280
+ .focus\:ring:focus {
2281
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.5);
2282
+ }
2283
+
2284
+ .focus\:ring-2:focus {
2285
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.5);
2286
+ }
2287
+
2288
+ .focus\:ring-4:focus {
2289
+ box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.5);
2290
+ }
2291
+
2292
+ .focus-visible\:outline-none:focus-visible {
2293
+ outline: 2px solid transparent;
2294
+ outline-offset: 2px;
2295
+ }
2296
+
2297
+ .focus-visible\:ring:focus-visible {
2298
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.5);
2299
+ }
2300
+
2301
+ .disabled\:opacity-50:disabled {
2302
+ opacity: 0.5;
2303
+ }
2304
+
2305
+ .disabled\:cursor-not-allowed:disabled {
2306
+ cursor: not-allowed;
2307
+ }
2308
+
2309
+ // Group Hover (requires parent with .group class)
2310
+ // ============================================
2311
+
2312
+ @each $name, $color in $colors {
2313
+ .group:hover .group-hover\:bg-#{$name} {
2314
+ background-color: $color;
2315
+ }
2316
+
2317
+ .group:hover .group-hover\:text-#{$name} {
2318
+ color: $color;
2319
+ }
2320
+ }
2321
+
2322
+ .group:hover .group-hover\:opacity-100 {
2323
+ opacity: 1;
2324
+ }
2325
+
2326
+ .group:hover .group-hover\:scale-105 {
2327
+ transform: scale(1.05);
2328
+ }
2329
+
2330
+ // Responsive Utilities
2331
+ // ============================================
2332
+
2333
+ @each $breakpoint, $width in $breakpoints {
2334
+ @media (min-width: $width) {
2335
+
2336
+ // Display
2337
+ .#{$breakpoint}\:block {
2338
+ display: block;
2339
+ }
2340
+
2341
+ .#{$breakpoint}\:inline-block {
2342
+ display: inline-block;
2343
+ }
2344
+
2345
+ .#{$breakpoint}\:inline {
2346
+ display: inline;
2347
+ }
2348
+
2349
+ .#{$breakpoint}\:flex {
2350
+ display: flex;
2351
+ }
2352
+
2353
+ .#{$breakpoint}\:inline-flex {
2354
+ display: inline-flex;
2355
+ }
2356
+
2357
+ .#{$breakpoint}\:grid {
2358
+ display: grid;
2359
+ }
2360
+
2361
+ .#{$breakpoint}\:hidden {
2362
+ display: none;
2363
+ }
2364
+
2365
+ // Flex direction
2366
+ .#{$breakpoint}\:flex-row {
2367
+ flex-direction: row;
2368
+ }
2369
+
2370
+ .#{$breakpoint}\:flex-col {
2371
+ flex-direction: column;
2372
+ }
2373
+
2374
+ // Justify & Align
2375
+ .#{$breakpoint}\:justify-start {
2376
+ justify-content: flex-start;
2377
+ }
2378
+
2379
+ .#{$breakpoint}\:justify-center {
2380
+ justify-content: center;
2381
+ }
2382
+
2383
+ .#{$breakpoint}\:justify-end {
2384
+ justify-content: flex-end;
2385
+ }
2386
+
2387
+ .#{$breakpoint}\:justify-between {
2388
+ justify-content: space-between;
2389
+ }
2390
+
2391
+ .#{$breakpoint}\:items-start {
2392
+ align-items: flex-start;
2393
+ }
2394
+
2395
+ .#{$breakpoint}\:items-center {
2396
+ align-items: center;
2397
+ }
2398
+
2399
+ .#{$breakpoint}\:items-end {
2400
+ align-items: flex-end;
2401
+ }
2402
+
2403
+ // Grid
2404
+ @for $i from 1 through 12 {
2405
+ .#{$breakpoint}\:grid-cols-#{$i} {
2406
+ grid-template-columns: repeat($i, minmax(0, 1fr));
2407
+ }
2408
+
2409
+ .#{$breakpoint}\:col-span-#{$i} {
2410
+ grid-column: span $i / span $i;
2411
+ }
2412
+ }
2413
+
2414
+ // Spacing
2415
+ @each $key, $value in $spacing-scale {
2416
+ .#{$breakpoint}\:p-#{$key} {
2417
+ padding: $value;
2418
+ }
2419
+
2420
+ .#{$breakpoint}\:px-#{$key} {
2421
+ padding-left: $value;
2422
+ padding-right: $value;
2423
+ }
2424
+
2425
+ .#{$breakpoint}\:py-#{$key} {
2426
+ padding-top: $value;
2427
+ padding-bottom: $value;
2428
+ }
2429
+
2430
+ .#{$breakpoint}\:m-#{$key} {
2431
+ margin: $value;
2432
+ }
2433
+
2434
+ .#{$breakpoint}\:mx-#{$key} {
2435
+ margin-left: $value;
2436
+ margin-right: $value;
2437
+ }
2438
+
2439
+ .#{$breakpoint}\:my-#{$key} {
2440
+ margin-top: $value;
2441
+ margin-bottom: $value;
2442
+ }
2443
+
2444
+ .#{$breakpoint}\:gap-#{$key} {
2445
+ gap: $value;
2446
+ }
2447
+ }
2448
+
2449
+ // Width
2450
+ .#{$breakpoint}\:w-auto {
2451
+ width: auto;
2452
+ }
2453
+
2454
+ .#{$breakpoint}\:w-full {
2455
+ width: 100%;
2456
+ }
2457
+
2458
+ .#{$breakpoint}\:w-1\/2 {
2459
+ width: 50%;
2460
+ }
2461
+
2462
+ .#{$breakpoint}\:w-1\/3 {
2463
+ width: 33.333333%;
2464
+ }
2465
+
2466
+ .#{$breakpoint}\:w-2\/3 {
2467
+ width: 66.666667%;
2468
+ }
2469
+
2470
+ // Text alignment
2471
+ .#{$breakpoint}\:text-left {
2472
+ text-align: left;
2473
+ }
2474
+
2475
+ .#{$breakpoint}\:text-center {
2476
+ text-align: center;
2477
+ }
2478
+
2479
+ .#{$breakpoint}\:text-right {
2480
+ text-align: right;
2481
+ }
2482
+
2483
+ // Font sizes
2484
+ @each $size-key, $size-value in $font-sizes {
2485
+ .#{$breakpoint}\:text-#{$size-key} {
2486
+ font-size: $size-value;
2487
+ }
2488
+ }
2489
+ }
2490
+ }
2491
+
2492
+ // RTL Support Classes
2493
+ // ============================================
2494
+
2495
+ [dir="rtl"] {
2496
+ .rtl\:text-right {
2497
+ text-align: right;
2498
+ }
2499
+
2500
+ .rtl\:text-left {
2501
+ text-align: left;
2502
+ }
2503
+
2504
+ .rtl\:flex-row-reverse {
2505
+ flex-direction: row-reverse;
2506
+ }
2507
+ }
2508
+
2509
+ [dir="ltr"] {
2510
+ .ltr\:text-left {
2511
+ text-align: left;
2512
+ }
2513
+
2514
+ .ltr\:text-right {
2515
+ text-align: right;
2516
+ }
2517
+ }
2518
+
2519
+ // Print Utilities
2520
+ // ============================================
2521
+
2522
+ @media print {
2523
+ .print\:hidden {
2524
+ display: none;
2525
+ }
2526
+
2527
+ .print\:block {
2528
+ display: block;
2529
+ }
2530
+ }
2531
+
2532
+ // Dark Mode Utilities (requires .dark class on html/body)
2533
+ // ============================================
2534
+
2535
+ .dark {
2536
+ @each $name, $color in $colors {
2537
+ .dark\:bg-#{$name} {
2538
+ background-color: $color;
2539
+ }
2540
+
2541
+ .dark\:text-#{$name} {
2542
+ color: $color;
2543
+ }
2544
+
2545
+ .dark\:border-#{$name} {
2546
+ border-color: $color;
2547
+ }
2548
+ }
2549
+ }
2550
+
2551
+ // Utility Mixins
2552
+ // ============================================
2553
+
2554
+ @mixin flex-center {
2555
+ display: flex;
2556
+ align-items: center;
2557
+ justify-content: center;
2558
+ }
2559
+
2560
+ @mixin absolute-center {
2561
+ position: absolute;
2562
+ top: 50%;
2563
+ left: 50%;
2564
+ transform: translate(-50%, -50%);
2565
+ }
2566
+
2567
+ @mixin truncate {
2568
+ overflow: hidden;
2569
+ text-overflow: ellipsis;
2570
+ white-space: nowrap;
2571
+ }
2572
+
2573
+ @mixin aspect-ratio($width, $height) {
2574
+ aspect-ratio: $width / $height;
2575
+ }
2576
+
2577
+ @mixin container($max-width: 1200px) {
2578
+ width: 100%;
2579
+ max-width: $max-width;
2580
+ margin-left: auto;
2581
+ margin-right: auto;
2582
+ padding-left: 1rem;
2583
+ padding-right: 1rem;
2584
+ }
2585
+
2586
+ @mixin clearfix {
2587
+ &::after {
2588
+ content: "";
2589
+ display: table;
2590
+ clear: both;
2591
+ }
2592
+ }
2593
+
2594
+ @mixin visually-hidden {
2595
+ position: absolute;
2596
+ width: 1px;
2597
+ height: 1px;
2598
+ padding: 0;
2599
+ margin: -1px;
2600
+ overflow: hidden;
2601
+ clip: rect(0, 0, 0, 0);
2602
+ white-space: nowrap;
2603
+ border-width: 0;
2604
+ }
2605
+
2606
+ @mixin gradient($direction, $colors...) {
2607
+ background: linear-gradient($direction, $colors);
2608
+ }
2609
+
2610
+ // Accessibility
2611
+ // ============================================
2612
+
2613
+ .sr-only {
2614
+ position: absolute;
2615
+ width: 1px;
2616
+ height: 1px;
2617
+ padding: 0;
2618
+ margin: -1px;
2619
+ overflow: hidden;
2620
+ clip: rect(0, 0, 0, 0);
2621
+ white-space: nowrap;
2622
+ border-width: 0;
2623
+ }
2624
+
2625
+ .not-sr-only {
2626
+ position: static;
2627
+ width: auto;
2628
+ height: auto;
2629
+ padding: 0;
2630
+ margin: 0;
2631
+ overflow: visible;
2632
+ clip: auto;
2633
+ white-space: normal;
2634
+ }
2635
+
2636
+ .focus\:not-sr-only:focus {
2637
+ position: static;
2638
+ width: auto;
2639
+ height: auto;
2640
+ padding: 0;
2641
+ margin: 0;
2642
+ overflow: visible;
2643
+ clip: auto;
2644
+ white-space: normal;
2645
+ }
2646
+
2647
+ // Container
2648
+ // ============================================
2649
+
2650
+ .container {
2651
+ width: 100%;
2652
+ margin-left: auto;
2653
+ margin-right: auto;
2654
+ padding-left: 1rem;
2655
+ padding-right: 1rem;
2656
+
2657
+ @media (min-width: map-get($breakpoints, 'sm')) {
2658
+ max-width: map-get($breakpoints, 'sm');
2659
+ }
2660
+
2661
+ @media (min-width: map-get($breakpoints, 'md')) {
2662
+ max-width: map-get($breakpoints, 'md');
2663
+ }
2664
+
2665
+ @media (min-width: map-get($breakpoints, 'lg')) {
2666
+ max-width: map-get($breakpoints, 'lg');
2667
+ }
2668
+
2669
+ @media (min-width: map-get($breakpoints, 'xl')) {
2670
+ max-width: map-get($breakpoints, 'xl');
2671
+ }
2672
+
2673
+ @media (min-width: map-get($breakpoints, '2xl')) {
2674
+ max-width: map-get($breakpoints, '2xl');
2675
+ }
2676
+ }
2677
+
2678
+ // Export mixins for use in your components
2679
+ // Usage: @include flex-center;