maverick-wave 4.27.0 → 5.0.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 (140) hide show
  1. package/.claude/settings.local.json +29 -1
  2. package/.claude/skills/mw-maverick-wave/SKILL.md +42 -25
  3. package/.claude/skills/mw-maverick-wave/examples/angular-services.md +16 -4
  4. package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +13 -4
  5. package/.claude/skills/mw-maverick-wave/references/components.md +90 -5
  6. package/.claude/skills/mw-maverick-wave/references/forms.md +14 -2
  7. package/.claude/skills/mw-maverick-wave/references/javascript.md +18 -4
  8. package/.claude/skills/mw-maverick-wave/references/layout.md +53 -19
  9. package/.claude/skills/mw-maverick-wave/references/theming.md +38 -1
  10. package/.impeccable/config.local.json +5 -0
  11. package/.impeccable/hook.cache.json +1 -0
  12. package/CHANGELOG.md +17 -0
  13. package/CLAUDE.md +5 -5
  14. package/README.md +48 -4
  15. package/index.html +19 -38
  16. package/maverick-wave.min.css +14 -12
  17. package/maverick-wave.min.js +1 -1
  18. package/package.json +2 -2
  19. package/scripts/verify.js +27 -2
  20. package/src/js/main.js +266 -75
  21. package/src/partials/accordions-container.html +6 -10
  22. package/src/partials/alerts-container.html +6 -6
  23. package/src/partials/announcement-container.html +5 -5
  24. package/src/partials/avatars-container.html +85 -17
  25. package/src/partials/badges-container.html +6 -6
  26. package/src/partials/blog-posts-container.html +11 -12
  27. package/src/partials/buttons-container.html +3 -3
  28. package/src/partials/cards-container.html +26 -9
  29. package/src/partials/code-container.html +5 -5
  30. package/src/partials/content-slider-container.html +5 -4
  31. package/src/partials/divider-container.html +7 -7
  32. package/src/partials/dropdown-container.html +2 -2
  33. package/src/partials/empty-state-container.html +5 -5
  34. package/src/partials/footer-container.html +21 -18
  35. package/src/partials/form-elements-container.html +14 -14
  36. package/src/partials/gallery-container.html +16 -8
  37. package/src/partials/get-started-container.html +4 -8
  38. package/src/partials/header-container.html +18 -7
  39. package/src/partials/header-utilities-container.html +192 -5
  40. package/src/partials/home-container.html +10 -20
  41. package/src/partials/input-group-container.html +11 -2
  42. package/src/partials/kbd-container.html +1 -1
  43. package/src/partials/login-container.html +5 -1
  44. package/src/partials/media-container.html +2 -2
  45. package/src/partials/modals-container.html +22 -32
  46. package/src/partials/pricing-container.html +9 -9
  47. package/src/partials/skeleton-container.html +6 -6
  48. package/src/partials/stepper-container.html +2 -2
  49. package/src/partials/tables-container.html +12 -12
  50. package/src/partials/tabs-container.html +17 -27
  51. package/src/partials/tags-container.html +23 -17
  52. package/src/partials/techstack-bucket-container.html +13 -0
  53. package/src/partials/tiles-container.html +26 -9
  54. package/src/partials/typography-container.html +7 -6
  55. package/src/partials/utilities-container.html +35 -15
  56. package/src/scss/_layers.scss +10 -0
  57. package/src/scss/abstracts/_index.scss +6 -0
  58. package/src/scss/abstracts/_mixins.scss +61 -153
  59. package/src/scss/abstracts/_variables.scss +123 -319
  60. package/src/scss/base/_base.scss +170 -190
  61. package/src/scss/base/_reset.scss +106 -104
  62. package/src/scss/base/_typography.scss +153 -151
  63. package/src/scss/components/_accordions.scss +97 -97
  64. package/src/scss/components/_alerts.scss +71 -70
  65. package/src/scss/components/_announcement.scss +71 -70
  66. package/src/scss/components/_avatars.scss +130 -142
  67. package/src/scss/components/_badge.scss +131 -132
  68. package/src/scss/components/_blog-post.scss +223 -220
  69. package/src/scss/components/_breadcrumbs.scss +93 -92
  70. package/src/scss/components/_button-bar.scss +102 -110
  71. package/src/scss/components/_buttons.scss +319 -324
  72. package/src/scss/components/_calendar.scss +251 -252
  73. package/src/scss/components/_cards.scss +359 -386
  74. package/src/scss/components/_code.scss +190 -194
  75. package/src/scss/components/_coming-soon.scss +77 -75
  76. package/src/scss/components/_content-slider.scss +90 -89
  77. package/src/scss/components/_divider.scss +55 -53
  78. package/src/scss/components/_dropdown.scss +179 -185
  79. package/src/scss/components/_empty-state.scss +57 -57
  80. package/src/scss/components/_flag.scss +325 -0
  81. package/src/scss/components/_gallery.scss +131 -133
  82. package/src/scss/components/_index.scss +2 -0
  83. package/src/scss/components/_info.scss +151 -167
  84. package/src/scss/components/_kanban.scss +332 -341
  85. package/src/scss/components/_kbd.scss +40 -38
  86. package/src/scss/components/_lang-switch.scss +108 -0
  87. package/src/scss/components/_links.scss +21 -28
  88. package/src/scss/components/_lists.scss +510 -514
  89. package/src/scss/components/_localhost-indicator.scss +26 -24
  90. package/src/scss/components/_media.scss +22 -20
  91. package/src/scss/components/_meta-info.scss +35 -33
  92. package/src/scss/components/_modals.scss +277 -186
  93. package/src/scss/components/_pagination.scss +81 -87
  94. package/src/scss/components/_panels.scss +99 -97
  95. package/src/scss/components/_pricing.scss +183 -241
  96. package/src/scss/components/_progress.scss +112 -89
  97. package/src/scss/components/_prose.scss +35 -33
  98. package/src/scss/components/_ratings.scss +40 -38
  99. package/src/scss/components/_segmented.scss +82 -84
  100. package/src/scss/components/_skeleton.scss +66 -72
  101. package/src/scss/components/_spinners.scss +155 -159
  102. package/src/scss/components/_stepper.scss +116 -116
  103. package/src/scss/components/_tables.scss +155 -148
  104. package/src/scss/components/_tabs.scss +232 -141
  105. package/src/scss/components/_tags.scss +109 -107
  106. package/src/scss/components/_techstack-bucket.scss +123 -122
  107. package/src/scss/components/_testimonial.scss +72 -70
  108. package/src/scss/components/_theme-toggle.scss +53 -51
  109. package/src/scss/components/_tiles.scss +174 -174
  110. package/src/scss/components/_timelines.scss +282 -280
  111. package/src/scss/components/_toasts.scss +66 -72
  112. package/src/scss/form-elements/_checkbox.scss +117 -132
  113. package/src/scss/form-elements/_form.scss +149 -115
  114. package/src/scss/form-elements/_input-group.scss +99 -103
  115. package/src/scss/form-elements/_input.scss +74 -74
  116. package/src/scss/form-elements/_login.scss +48 -48
  117. package/src/scss/form-elements/_prefilled.scss +53 -51
  118. package/src/scss/form-elements/_radio.scss +95 -107
  119. package/src/scss/form-elements/_select.scss +42 -42
  120. package/src/scss/form-elements/_slider.scss +117 -132
  121. package/src/scss/form-elements/_textarea.scss +68 -54
  122. package/src/scss/form-elements/_toggle.scss +127 -140
  123. package/src/scss/layout/_footer.scss +172 -171
  124. package/src/scss/layout/_grid.scss +268 -302
  125. package/src/scss/layout/_header.scss +426 -427
  126. package/src/scss/layout/_home.scss +28 -27
  127. package/src/scss/layout/_main.scss +275 -238
  128. package/src/scss/layout/_page-header.scss +38 -36
  129. package/src/scss/layout/_section.scss +150 -124
  130. package/src/scss/main.scss +1 -1
  131. package/src/scss/utilities/_accessibility.scss +46 -45
  132. package/src/scss/utilities/_aspect.scss +22 -20
  133. package/src/scss/utilities/_corner.scss +23 -5
  134. package/src/scss/utilities/_display.scss +76 -70
  135. package/src/scss/utilities/_elevation.scss +13 -11
  136. package/src/scss/utilities/_flex.scss +83 -85
  137. package/src/scss/utilities/_reveal.scss +40 -63
  138. package/src/scss/utilities/_spacing.scss +63 -64
  139. package/src/scss/utilities/_text.scss +139 -141
  140. package/src/scss/utilities/_touch-targets.scss +130 -147
@@ -1,97 +1,103 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Display utilities
4
- .mw-d {
5
- &-flex {
6
- display: flex;
7
- }
3
+ @layer mw.utilities {
4
+ .mw-d {
5
+ &-flex {
6
+ display: flex;
7
+ }
8
8
 
9
- &-inline-flex {
10
- display: inline-flex;
11
- }
9
+ &-inline-flex {
10
+ display: inline-flex;
11
+ }
12
12
 
13
- &-block {
14
- display: block;
15
- }
13
+ &-block {
14
+ display: block;
15
+ }
16
16
 
17
- &-inline {
18
- display: inline;
19
- }
17
+ &-inline {
18
+ display: inline;
19
+ }
20
20
 
21
- &-inline-block {
22
- display: inline-block;
23
- }
21
+ &-inline-block {
22
+ display: inline-block;
23
+ }
24
24
 
25
- &-grid {
26
- display: grid;
27
- }
25
+ &-grid {
26
+ display: grid;
27
+ }
28
28
 
29
- &-none {
30
- display: none;
31
- }
29
+ &-none {
30
+ display: none;
31
+ }
32
32
 
33
- // For a wrapper that must not become a flex/grid item itself - the element
34
- // generates no box, so its children take over the item role
35
- &-contents {
36
- display: contents;
33
+ // For a wrapper that must not become a flex/grid item itself - the element
34
+ // generates no box, so its children take over the item role
35
+ &-contents {
36
+ display: contents;
37
+ }
37
38
  }
38
- }
39
39
 
40
- // Border radius
41
- @each $key, $value in $radius {
42
- .mw-radius-#{$key} {
43
- border-radius: $value;
40
+ @each $key, $value in $radius {
41
+ .mw-radius-#{$key} {
42
+ border-radius: $value;
43
+ }
44
44
  }
45
- }
46
45
 
47
- // Responsive display
48
- $_mw-responsive-displays: (none, block, flex, inline-flex, grid, inline-block);
49
-
50
- @each $bp in ('sm', 'md', 'lg', 'xl') {
51
- @include media-up($bp) {
52
- @each $value in $_mw-responsive-displays {
53
- .mw-d-#{$bp}-#{$value} {
54
- display: #{$value};
46
+ $_mw-responsive-displays: (
47
+ none,
48
+ block,
49
+ flex,
50
+ inline-flex,
51
+ grid,
52
+ inline-block
53
+ );
54
+
55
+ @each $bp in ('sm', 'md', 'lg', 'xl') {
56
+ @include media-up($bp) {
57
+ @each $value in $_mw-responsive-displays {
58
+ .mw-d-#{$bp}-#{$value} {
59
+ display: #{$value};
60
+ }
55
61
  }
56
62
  }
57
63
  }
58
- }
59
64
 
60
- // The two everyone actually reaches for, spelled out. `md` is the divide: below
61
- // it a phone, at it and above a tablet with room for a second column.
62
- .mw-hide-mobile {
63
- @include media-down('md') {
64
- display: none !important;
65
+ // The two everyone actually reaches for, spelled out. `md` is the divide: below
66
+ // it a phone, at it and above a tablet with room for a second column.
67
+ .mw-hide-mobile {
68
+ @include media-down('md') {
69
+ display: none;
70
+ }
65
71
  }
66
- }
67
72
 
68
- .mw-hide-desktop {
69
- @include media-up('md') {
70
- display: none !important;
73
+ .mw-hide-desktop {
74
+ @include media-up('md') {
75
+ display: none;
76
+ }
71
77
  }
72
- }
73
78
 
74
- // Overflow, for the wrappers that hold something wider than the phone they are
75
- // being read on
76
- .mw-overflow-auto {
77
- overflow: auto;
78
- }
79
+ // Overflow, for the wrappers that hold something wider than the phone they are
80
+ // being read on
81
+ .mw-overflow-auto {
82
+ overflow: auto;
83
+ }
79
84
 
80
- .mw-overflow-x-auto {
81
- overflow-x: auto;
82
- overscroll-behavior-x: contain;
83
- }
85
+ .mw-overflow-x-auto {
86
+ overflow-x: auto;
87
+ overscroll-behavior-x: contain;
88
+ }
84
89
 
85
- .mw-overflow-hidden {
86
- overflow: hidden;
87
- }
90
+ .mw-overflow-hidden {
91
+ overflow: hidden;
92
+ }
88
93
 
89
- // Snap a horizontal strip so it comes to rest on an item instead of halfway
90
- // between two - a row of cards swiped through on a phone
91
- .mw-snap-x {
92
- scroll-snap-type: x mandatory;
94
+ // Snap a horizontal strip so it comes to rest on an item instead of halfway
95
+ // between two - a row of cards swiped through on a phone
96
+ .mw-snap-x {
97
+ scroll-snap-type: x mandatory;
93
98
 
94
- > * {
95
- scroll-snap-align: start;
99
+ > * {
100
+ scroll-snap-align: start;
101
+ }
96
102
  }
97
103
  }
@@ -1,16 +1,18 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // The elevation ramp as classes, for a surface a project draws itself. Same
4
- // five steps every component uses - see the elevation() function.
5
- //
6
- // 0 is not "no shadow it forgot to set", it is "explicitly flat": for taking a
7
- // component off the page it normally floats above.
8
- .mw-elevation-0 {
9
- box-shadow: none;
10
- }
3
+ @layer mw.utilities {
4
+ // The elevation ramp as classes, for a surface a project draws itself. Same
5
+ // five steps every component uses - see the elevation() function.
6
+ //
7
+ // 0 is not "no shadow it forgot to set", it is "explicitly flat": for taking a
8
+ // component off the page it normally floats above.
9
+ .mw-elevation-0 {
10
+ box-shadow: none;
11
+ }
11
12
 
12
- @for $level from 1 through 5 {
13
- .mw-elevation-#{$level} {
14
- box-shadow: var(--mw-elevation-#{$level});
13
+ @for $level from 1 through 5 {
14
+ .mw-elevation-#{$level} {
15
+ box-shadow: var(--mw-elevation-#{$level});
16
+ }
15
17
  }
16
18
  }
@@ -1,114 +1,112 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Flex utilities
4
- .mw-flex {
5
- &-row {
6
- flex-direction: row;
7
- }
3
+ @layer mw.utilities {
4
+ .mw-flex {
5
+ &-row {
6
+ flex-direction: row;
7
+ }
8
8
 
9
- &-column {
10
- flex-direction: column;
11
- }
9
+ &-column {
10
+ flex-direction: column;
11
+ }
12
12
 
13
- &-wrap {
14
- flex-wrap: wrap;
15
- }
13
+ &-wrap {
14
+ flex-wrap: wrap;
15
+ }
16
16
 
17
- &-nowrap {
18
- flex-wrap: nowrap;
19
- }
17
+ &-nowrap {
18
+ flex-wrap: nowrap;
19
+ }
20
20
 
21
- &-1 {
22
- flex: 1;
23
- }
21
+ &-1 {
22
+ flex: 1;
23
+ }
24
24
 
25
- &-grow-1 {
26
- flex-grow: 1;
27
- }
25
+ &-grow-1 {
26
+ flex-grow: 1;
27
+ }
28
28
 
29
- &-shrink-0 {
30
- flex-shrink: 0;
29
+ &-shrink-0 {
30
+ flex-shrink: 0;
31
+ }
31
32
  }
32
- }
33
33
 
34
- // Justify content
35
- .mw-justify {
36
- &-start {
37
- justify-content: flex-start;
38
- }
34
+ .mw-justify {
35
+ &-start {
36
+ justify-content: flex-start;
37
+ }
39
38
 
40
- &-end {
41
- justify-content: flex-end;
42
- }
39
+ &-end {
40
+ justify-content: flex-end;
41
+ }
43
42
 
44
- &-center {
45
- justify-content: center;
46
- }
43
+ &-center {
44
+ justify-content: center;
45
+ }
47
46
 
48
- &-between {
49
- justify-content: space-between;
50
- }
47
+ &-between {
48
+ justify-content: space-between;
49
+ }
51
50
 
52
- &-around {
53
- justify-content: space-around;
54
- }
51
+ &-around {
52
+ justify-content: space-around;
53
+ }
55
54
 
56
- &-evenly {
57
- justify-content: space-evenly;
55
+ &-evenly {
56
+ justify-content: space-evenly;
57
+ }
58
58
  }
59
- }
60
59
 
61
- // Align items
62
- .mw-items {
63
- &-start {
64
- align-items: flex-start;
65
- }
60
+ .mw-items {
61
+ &-start {
62
+ align-items: flex-start;
63
+ }
66
64
 
67
- &-end {
68
- align-items: flex-end;
69
- }
65
+ &-end {
66
+ align-items: flex-end;
67
+ }
70
68
 
71
- &-center {
72
- align-items: center;
73
- }
69
+ &-center {
70
+ align-items: center;
71
+ }
74
72
 
75
- &-stretch {
76
- align-items: stretch;
73
+ &-stretch {
74
+ align-items: stretch;
75
+ }
77
76
  }
78
- }
79
77
 
80
- // Align self - the per-item counterpart to .mw-items-*
81
- .mw-self {
82
- &-start {
83
- align-self: flex-start;
84
- }
78
+ .mw-self {
79
+ &-start {
80
+ align-self: flex-start;
81
+ }
85
82
 
86
- &-end {
87
- align-self: flex-end;
88
- }
83
+ &-end {
84
+ align-self: flex-end;
85
+ }
89
86
 
90
- &-center {
91
- align-self: center;
92
- }
87
+ &-center {
88
+ align-self: center;
89
+ }
93
90
 
94
- &-stretch {
95
- align-self: stretch;
91
+ &-stretch {
92
+ align-self: stretch;
93
+ }
96
94
  }
97
- }
98
95
 
99
- // The most common row in any app: what it is on the left, the value or the
100
- // action on the right, and on a narrow screen the right half drops below.
101
- // The `flex-wrap` is the part everyone forgets.
102
- .mw-row-split {
103
- display: flex;
104
- flex-wrap: wrap;
105
- align-items: baseline;
106
- justify-content: space-between;
107
- gap: spacing('2') spacing('5');
108
- }
96
+ // The most common row in any app: what it is on the left, the value or the
97
+ // action on the right, and on a narrow screen the right half drops below.
98
+ // The `flex-wrap` is the part everyone forgets.
99
+ .mw-row-split {
100
+ display: flex;
101
+ flex-wrap: wrap;
102
+ align-items: baseline;
103
+ justify-content: space-between;
104
+ gap: spacing('2') spacing('5');
105
+ }
109
106
 
110
- // Same row for content of unequal height - an icon beside text, a button
111
- // beside a heading. Baseline alignment would hang those off the text.
112
- .mw-row-split-center {
113
- align-items: center;
107
+ // Same row for content of unequal height - an icon beside text, a button
108
+ // beside a heading. Baseline alignment would hang those off the text.
109
+ .mw-row-split-center {
110
+ align-items: center;
111
+ }
114
112
  }
@@ -1,73 +1,50 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Scroll entrance: a block rises briefly as it scrolls into view. Driven by
4
- // the browser's scroll timeline - no JavaScript, no IntersectionObserver
5
- // recalculating on every scroll step.
6
- //
7
- // Both guards matter. `prefers-reduced-motion` is the obvious one. The
8
- // @supports guard is the safety net: a browser without scroll timelines would
9
- // otherwise apply the backwards fill on an animation that never runs and
10
- // leave the block invisible forever - guarded, it simply renders in place.
11
- //
12
- // The zone it plays in is the `reveal-range` mixin in abstracts/_mixins.scss:
13
- // from 8dvh above the bottom edge to 34dvh, measured in viewport lengths so
14
- // every block rises through the same region of the screen. Eased out rather
15
- // than linear against the scroll: the block covers most of its way at once
16
- // and settles, which reads as arriving instead of being dragged.
17
- //
18
- // `backwards`, not `both`: the fill only has to hide the block before its
19
- // entrance - the last frame is the block's own resting state anyway. A
20
- // forwards fill would keep that frame applied for good, and an animated
21
- // `transform` beats every author rule: a card would lose its hover lift, and
22
- // as a transformed box it stays a stacking context, so a dropdown opened
23
- // inside it paints under the next card in the row. Without the forwards fill
24
- // the animation lets go once the entrance is done.
25
- //
26
- // Longhands on purpose, never the animation shorthand: esbuild's CSS minifier
27
- // (Vite's default, so every SCSS consumer) collapses a shorthand plus
28
- // animation-timeline into one `animation:` declaration - which cannot carry a
29
- // timeline, so browsers drop the whole thing and the reveal silently dies.
30
- // Three longhands next to the timeline give it nothing to merge.
31
- @supports (animation-timeline: view()) {
32
- @media (prefers-reduced-motion: no-preference) {
33
- .mw-reveal,
34
- .mw-reveal-stagger > * {
35
- animation-name: mw-reveal;
36
- animation-timing-function: var(--mw-ease-out);
37
- animation-fill-mode: backwards;
38
- animation-timeline: view();
39
- @include reveal-range(1);
40
- }
3
+ @layer mw.utilities {
4
+ // Scroll entrance on the browser's own timeline - no observer. The zone is the
5
+ // `reveal-range` mixin. Without scroll timelines the backwards fill would hide
6
+ // the block forever, which is what the @supports guard is for.
7
+ //
8
+ // `backwards`, not `both`: a forwards fill keeps the transform applied, and that
9
+ // beats every author rule - the card loses its hover lift and stays a stacking
10
+ // context. Longhands and never the shorthand, which esbuild collapses into one
11
+ // `animation:` that cannot carry a timeline.
12
+ @supports (animation-timeline: view()) {
13
+ @media (prefers-reduced-motion: no-preference) {
14
+ .mw-reveal,
15
+ .mw-reveal-stagger > * {
16
+ animation-name: mw-reveal;
17
+ animation-timing-function: var(--mw-ease-out);
18
+ animation-fill-mode: backwards;
19
+ animation-timeline: view();
20
+ @include reveal-range(1);
21
+ }
41
22
 
42
- // A row of cards crosses the viewport edge on the same scroll step, so
43
- // mw-reveal on each of them rises as one slab. The stagger container
44
- // shifts the range of the second and third child of every three - a wave
45
- // across the row instead of a lift. One class on the grid, because the
46
- // grid decides the columns per breakpoint and the markup cannot.
47
- //
48
- // Cycles of three are only the fallback for a container that is not one of
49
- // the fixed grids - mw-columns-*, a project's own layout. mw-grid-2 to -5
50
- // and their -lg variants restate the cycle to their own column count at
51
- // every breakpoint (layout/_grid.scss), so the fourth card of a four-column
52
- // row is a beat behind the third, not level with the first.
53
- .mw-reveal-stagger > :nth-child(3n + 2) {
54
- @include reveal-range(2);
55
- }
23
+ // A row crosses the viewport edge on one scroll step, so mw-reveal on each
24
+ // card rises as one slab. This shifts every second and third child instead -
25
+ // a wave. On the grid and not the cards, because the grid knows the columns.
26
+ //
27
+ // Cycles of three are the fallback for anything that is not one of the fixed
28
+ // grids; mw-grid-2 to -5 restate the cycle to their own count in _grid.scss.
29
+ .mw-reveal-stagger > :nth-child(3n + 2) {
30
+ @include reveal-range(2);
31
+ }
56
32
 
57
- .mw-reveal-stagger > :nth-child(3n + 3) {
58
- @include reveal-range(3);
33
+ .mw-reveal-stagger > :nth-child(3n + 3) {
34
+ @include reveal-range(3);
35
+ }
59
36
  }
60
37
  }
61
- }
62
38
 
63
- @keyframes mw-reveal {
64
- from {
65
- opacity: 0;
66
- transform: translateY(40px);
67
- }
39
+ @keyframes mw-reveal {
40
+ from {
41
+ opacity: 0;
42
+ transform: translateY(40px);
43
+ }
68
44
 
69
- to {
70
- opacity: 1;
71
- transform: translateY(0);
45
+ to {
46
+ opacity: 1;
47
+ transform: translateY(0);
48
+ }
72
49
  }
73
50
  }
@@ -1,86 +1,85 @@
1
1
  @use 'sass:map';
2
2
  @use '../abstracts' as *;
3
3
 
4
- $_margin-values: map.merge(
5
- $spacing,
6
- (
7
- 'auto': auto,
8
- )
9
- );
10
-
11
- // Margin utilities
12
- @each $key, $value in $_margin-values {
13
- .mw-m-#{$key} {
14
- margin: $value;
15
- }
16
-
17
- .mw-mt-#{$key} {
18
- margin-top: $value;
19
- }
20
-
21
- .mw-mb-#{$key} {
22
- margin-bottom: $value;
23
- }
24
-
25
- .mw-ml-#{$key} {
26
- margin-left: $value;
27
- }
28
-
29
- .mw-mr-#{$key} {
30
- margin-right: $value;
31
- }
32
-
33
- .mw-mx-#{$key} {
34
- margin-left: $value;
35
- margin-right: $value;
36
- }
37
-
38
- .mw-my-#{$key} {
39
- margin-top: $value;
40
- margin-bottom: $value;
41
- }
42
- }
4
+ @layer mw.utilities {
5
+ $_margin-values: map.merge(
6
+ $spacing,
7
+ (
8
+ 'auto': auto,
9
+ )
10
+ );
11
+
12
+ @each $key, $value in $_margin-values {
13
+ .mw-m-#{$key} {
14
+ margin: $value;
15
+ }
43
16
 
44
- // Padding utilities
45
- @each $key, $value in $spacing {
46
- @if $value >= 0 {
47
- .mw-p-#{$key} {
48
- padding: $value;
17
+ .mw-mt-#{$key} {
18
+ margin-top: $value;
49
19
  }
50
20
 
51
- .mw-pt-#{$key} {
52
- padding-top: $value;
21
+ .mw-mb-#{$key} {
22
+ margin-bottom: $value;
53
23
  }
54
24
 
55
- .mw-pb-#{$key} {
56
- padding-bottom: $value;
25
+ .mw-ml-#{$key} {
26
+ margin-left: $value;
57
27
  }
58
28
 
59
- .mw-pl-#{$key} {
60
- padding-left: $value;
29
+ .mw-mr-#{$key} {
30
+ margin-right: $value;
61
31
  }
62
32
 
63
- .mw-pr-#{$key} {
64
- padding-right: $value;
33
+ .mw-mx-#{$key} {
34
+ margin-left: $value;
35
+ margin-right: $value;
65
36
  }
66
37
 
67
- .mw-px-#{$key} {
68
- padding-left: $value;
69
- padding-right: $value;
38
+ .mw-my-#{$key} {
39
+ margin-top: $value;
40
+ margin-bottom: $value;
70
41
  }
42
+ }
71
43
 
72
- .mw-py-#{$key} {
73
- padding-top: $value;
74
- padding-bottom: $value;
44
+ @each $key, $value in $spacing {
45
+ @if $value >= 0 {
46
+ .mw-p-#{$key} {
47
+ padding: $value;
48
+ }
49
+
50
+ .mw-pt-#{$key} {
51
+ padding-top: $value;
52
+ }
53
+
54
+ .mw-pb-#{$key} {
55
+ padding-bottom: $value;
56
+ }
57
+
58
+ .mw-pl-#{$key} {
59
+ padding-left: $value;
60
+ }
61
+
62
+ .mw-pr-#{$key} {
63
+ padding-right: $value;
64
+ }
65
+
66
+ .mw-px-#{$key} {
67
+ padding-left: $value;
68
+ padding-right: $value;
69
+ }
70
+
71
+ .mw-py-#{$key} {
72
+ padding-top: $value;
73
+ padding-bottom: $value;
74
+ }
75
75
  }
76
76
  }
77
- }
78
77
 
79
- // Gap utilities
80
- @each $key, $value in $spacing {
81
- @if $value >= 0 {
82
- .mw-gap-#{$key} {
83
- gap: $value;
78
+ @each $key, $value in $spacing {
79
+ @if $value >= 0 {
80
+ .mw-gap-#{$key} {
81
+ gap: $value;
82
+ }
84
83
  }
85
84
  }
86
85
  }