maverick-wave 3.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 (141) hide show
  1. package/.claude/commands/mw.md +580 -0
  2. package/.claude/settings.local.json +11 -0
  3. package/.idea/codeStyles/Project.xml +59 -0
  4. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  5. package/.idea/maverick-wave.iml +12 -0
  6. package/.idea/modules.xml +8 -0
  7. package/.idea/prettier.xml +6 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/.prettierignore +6 -0
  10. package/.prettierrc.json +7 -0
  11. package/CHANGELOG.md +420 -0
  12. package/CLAUDE.md +53 -0
  13. package/LICENSE +21 -0
  14. package/README.md +191 -0
  15. package/gulpfile.js +158 -0
  16. package/index.html +472 -0
  17. package/maverick-wave.min.css +1 -0
  18. package/maverick-wave.min.js +1 -0
  19. package/package.json +52 -0
  20. package/release.sh +17 -0
  21. package/src/assets/favicon/android-chrome-192x192.png +0 -0
  22. package/src/assets/favicon/android-chrome-512x512.png +0 -0
  23. package/src/assets/favicon/apple-touch-icon.png +0 -0
  24. package/src/assets/favicon/favicon-16x16.png +0 -0
  25. package/src/assets/favicon/favicon-32x32.png +0 -0
  26. package/src/assets/favicon/site.webmanifest +1 -0
  27. package/src/assets/favicon.ico +0 -0
  28. package/src/assets/header-logo.svg +24 -0
  29. package/src/js/main.js +587 -0
  30. package/src/partials/accordions-container.html +163 -0
  31. package/src/partials/alerts-container.html +120 -0
  32. package/src/partials/avatars-container.html +84 -0
  33. package/src/partials/blog-posts-container.html +157 -0
  34. package/src/partials/breadcrumbs-container.html +126 -0
  35. package/src/partials/button-bar-container.html +168 -0
  36. package/src/partials/buttons-container.html +133 -0
  37. package/src/partials/cards-container.html +508 -0
  38. package/src/partials/code-container.html +194 -0
  39. package/src/partials/colors-container.html +125 -0
  40. package/src/partials/coming-soon-container.html +6 -0
  41. package/src/partials/content-slider-container.html +47 -0
  42. package/src/partials/divider-container.html +52 -0
  43. package/src/partials/documentation-container.html +161 -0
  44. package/src/partials/empty-state-container.html +74 -0
  45. package/src/partials/footer-container.html +113 -0
  46. package/src/partials/form-container.html +257 -0
  47. package/src/partials/form-elements-container.html +595 -0
  48. package/src/partials/form-field-container.html +141 -0
  49. package/src/partials/gallery-container.html +49 -0
  50. package/src/partials/get-started-container.html +294 -0
  51. package/src/partials/grid-container.html +171 -0
  52. package/src/partials/header-container.html +49 -0
  53. package/src/partials/header-utilities-container.html +80 -0
  54. package/src/partials/home-container.html +48 -0
  55. package/src/partials/html-lists-container.html +58 -0
  56. package/src/partials/info-container.html +87 -0
  57. package/src/partials/input-group-container.html +285 -0
  58. package/src/partials/item-lists-container.html +413 -0
  59. package/src/partials/login-container.html +61 -0
  60. package/src/partials/meta-info-container.html +16 -0
  61. package/src/partials/modals-container.html +136 -0
  62. package/src/partials/pagination-container.html +27 -0
  63. package/src/partials/panels-container.html +196 -0
  64. package/src/partials/progress-container.html +226 -0
  65. package/src/partials/ratings-container.html +104 -0
  66. package/src/partials/skeleton-container.html +82 -0
  67. package/src/partials/spinners-container.html +92 -0
  68. package/src/partials/stepper-container.html +107 -0
  69. package/src/partials/tables-container.html +120 -0
  70. package/src/partials/tabs-container.html +263 -0
  71. package/src/partials/tags-container.html +168 -0
  72. package/src/partials/techstack-bucket-container.html +174 -0
  73. package/src/partials/tiles-container.html +245 -0
  74. package/src/partials/timelines-container.html +196 -0
  75. package/src/partials/typography-container.html +66 -0
  76. package/src/partials/utilities-container.html +85 -0
  77. package/src/scss/abstracts/_functions.scss +37 -0
  78. package/src/scss/abstracts/_index.scss +3 -0
  79. package/src/scss/abstracts/_mixins.scss +45 -0
  80. package/src/scss/abstracts/_variables.scss +222 -0
  81. package/src/scss/base/_base.scss +165 -0
  82. package/src/scss/base/_index.scss +3 -0
  83. package/src/scss/base/_reset.scss +75 -0
  84. package/src/scss/base/_typography.scss +230 -0
  85. package/src/scss/components/_accordions.scss +91 -0
  86. package/src/scss/components/_alerts.scss +105 -0
  87. package/src/scss/components/_avatars.scss +123 -0
  88. package/src/scss/components/_blog-post.scss +268 -0
  89. package/src/scss/components/_breadcrumbs.scss +108 -0
  90. package/src/scss/components/_button-bar.scss +139 -0
  91. package/src/scss/components/_buttons.scss +164 -0
  92. package/src/scss/components/_cards.scss +316 -0
  93. package/src/scss/components/_code.scss +252 -0
  94. package/src/scss/components/_coming-soon.scss +92 -0
  95. package/src/scss/components/_content-slider.scss +119 -0
  96. package/src/scss/components/_divider.scss +70 -0
  97. package/src/scss/components/_empty-state.scss +73 -0
  98. package/src/scss/components/_gallery.scss +158 -0
  99. package/src/scss/components/_index.scss +33 -0
  100. package/src/scss/components/_info.scss +143 -0
  101. package/src/scss/components/_lists.scss +653 -0
  102. package/src/scss/components/_localhost-indicator.scss +29 -0
  103. package/src/scss/components/_meta-info.scss +34 -0
  104. package/src/scss/components/_modals.scss +118 -0
  105. package/src/scss/components/_pagination.scss +99 -0
  106. package/src/scss/components/_panels.scss +112 -0
  107. package/src/scss/components/_progress.scss +107 -0
  108. package/src/scss/components/_ratings.scss +47 -0
  109. package/src/scss/components/_skeleton.scss +90 -0
  110. package/src/scss/components/_spinners.scss +208 -0
  111. package/src/scss/components/_stepper.scss +145 -0
  112. package/src/scss/components/_tables.scss +127 -0
  113. package/src/scss/components/_tabs.scss +146 -0
  114. package/src/scss/components/_tags.scss +93 -0
  115. package/src/scss/components/_techstack-bucket.scss +145 -0
  116. package/src/scss/components/_theme-toggle.scss +50 -0
  117. package/src/scss/components/_tiles.scss +217 -0
  118. package/src/scss/components/_timelines.scss +339 -0
  119. package/src/scss/form-elements/_checkbox.scss +174 -0
  120. package/src/scss/form-elements/_form.scss +122 -0
  121. package/src/scss/form-elements/_index.scss +10 -0
  122. package/src/scss/form-elements/_input-group.scss +103 -0
  123. package/src/scss/form-elements/_input.scss +72 -0
  124. package/src/scss/form-elements/_login.scss +62 -0
  125. package/src/scss/form-elements/_radio.scss +144 -0
  126. package/src/scss/form-elements/_select.scss +56 -0
  127. package/src/scss/form-elements/_slider.scss +174 -0
  128. package/src/scss/form-elements/_textarea.scss +74 -0
  129. package/src/scss/form-elements/_toggle.scss +174 -0
  130. package/src/scss/layout/_footer.scss +214 -0
  131. package/src/scss/layout/_grid.scss +287 -0
  132. package/src/scss/layout/_header.scss +441 -0
  133. package/src/scss/layout/_home.scss +40 -0
  134. package/src/scss/layout/_index.scss +6 -0
  135. package/src/scss/layout/_main.scss +116 -0
  136. package/src/scss/layout/_section.scss +89 -0
  137. package/src/scss/main.scss +5 -0
  138. package/src/scss/utilities/_display.scss +35 -0
  139. package/src/scss/utilities/_flex.scss +66 -0
  140. package/src/scss/utilities/_index.scss +3 -0
  141. package/src/scss/utilities/_spacing.scss +78 -0
@@ -0,0 +1,174 @@
1
+ @use '../abstracts' as *;
2
+
3
+ $_mw-toggle-colors: (
4
+ primary: var(--mw-primary-color),
5
+ secondary: var(--mw-secondary-color),
6
+ success: var(--mw-success-color),
7
+ warning: var(--mw-warning-color),
8
+ danger: var(--mw-danger-color),
9
+ );
10
+
11
+ // Track dimensions
12
+ $_track-w: 44px;
13
+ $_track-h: 24px;
14
+ $_knob-size: 18px;
15
+ $_knob-offset: 3px;
16
+ $_knob-travel: calc(#{$_track-w} - #{$_knob-size} - #{$_knob-offset * 2});
17
+
18
+ $_track-w-sm: 34px;
19
+ $_track-h-sm: 18px;
20
+ $_knob-size-sm: 12px;
21
+ $_knob-travel-sm: calc(
22
+ #{$_track-w-sm} - #{$_knob-size-sm} - #{$_knob-offset * 2}
23
+ );
24
+
25
+ $_track-w-lg: 56px;
26
+ $_track-h-lg: 30px;
27
+ $_knob-size-lg: 22px;
28
+ $_knob-offset-lg: 4px;
29
+ $_knob-travel-lg: calc(
30
+ #{$_track-w-lg} - #{$_knob-size-lg} - #{$_knob-offset-lg * 2}
31
+ );
32
+
33
+ .mw-toggle {
34
+ display: inline-flex;
35
+ align-items: center;
36
+ gap: spacing('2');
37
+ cursor: pointer;
38
+ user-select: none;
39
+ position: relative;
40
+
41
+ // Hide native checkbox
42
+ input[type='checkbox'] {
43
+ position: absolute;
44
+ opacity: 0;
45
+ width: 0;
46
+ height: 0;
47
+ margin: spacing('0');
48
+ }
49
+
50
+ // The switch track
51
+ .mw-toggle-track {
52
+ --toggle-fill: var(--mw-primary-color);
53
+
54
+ position: relative;
55
+ width: $_track-w;
56
+ height: $_track-h;
57
+ background: var(--mw-border);
58
+ border-radius: radius('lg');
59
+ transition:
60
+ background 0.25s ease,
61
+ box-shadow 0.25s ease;
62
+ flex-shrink: 0;
63
+
64
+ // The sliding knob
65
+ &::after {
66
+ content: '';
67
+ position: absolute;
68
+ top: $_knob-offset;
69
+ left: $_knob-offset;
70
+ width: $_knob-size;
71
+ height: $_knob-size;
72
+ background: var(--mw-white-color);
73
+ border-radius: radius('full');
74
+ transition: transform 0.25s ease;
75
+ box-shadow: 0 1px 4px var(--mw-shadow);
76
+ }
77
+ }
78
+
79
+ input[type='checkbox']:checked + .mw-toggle-track {
80
+ background: var(--toggle-fill);
81
+
82
+ &::after {
83
+ transform: translateX($_knob-travel);
84
+ }
85
+ }
86
+
87
+ input[type='checkbox']:focus-visible + .mw-toggle-track {
88
+ box-shadow: 0 0 0 2px var(--mw-primary-background);
89
+ }
90
+
91
+ .mw-toggle-label {
92
+ font-size: font-size('sm');
93
+ color: var(--mw-text-color);
94
+ line-height: 1.3;
95
+ }
96
+
97
+ // Size variants
98
+ &-sm {
99
+ .mw-toggle-track {
100
+ width: $_track-w-sm;
101
+ height: $_track-h-sm;
102
+
103
+ &::after {
104
+ width: $_knob-size-sm;
105
+ height: $_knob-size-sm;
106
+ }
107
+ }
108
+
109
+ input[type='checkbox']:checked + .mw-toggle-track::after {
110
+ transform: translateX($_knob-travel-sm);
111
+ }
112
+
113
+ .mw-toggle-label {
114
+ font-size: font-size('xs');
115
+ }
116
+ }
117
+
118
+ &-lg {
119
+ .mw-toggle-track {
120
+ width: $_track-w-lg;
121
+ height: $_track-h-lg;
122
+
123
+ &::after {
124
+ top: $_knob-offset-lg;
125
+ left: $_knob-offset-lg;
126
+ width: $_knob-size-lg;
127
+ height: $_knob-size-lg;
128
+ }
129
+ }
130
+
131
+ input[type='checkbox']:checked + .mw-toggle-track::after {
132
+ transform: translateX($_knob-travel-lg);
133
+ }
134
+
135
+ .mw-toggle-label {
136
+ font-size: font-size('base');
137
+ }
138
+ }
139
+
140
+ // Color variants
141
+ @each $name, $col in $_mw-toggle-colors {
142
+ &-#{$name} .mw-toggle-track {
143
+ --toggle-fill: #{$col};
144
+ }
145
+ }
146
+
147
+ // Disabled
148
+ &-disabled {
149
+ cursor: not-allowed;
150
+ opacity: 0.45;
151
+
152
+ input[type='checkbox'] {
153
+ cursor: not-allowed;
154
+ }
155
+ }
156
+ }
157
+
158
+ // Group layout
159
+ .mw-toggle-group {
160
+ display: flex;
161
+ flex-direction: column;
162
+ gap: spacing('3');
163
+
164
+ &-inline {
165
+ flex-direction: row;
166
+ flex-wrap: wrap;
167
+ align-items: center;
168
+ gap: spacing('2') spacing('6');
169
+
170
+ @include media-down('sm') {
171
+ gap: spacing('2') spacing('4');
172
+ }
173
+ }
174
+ }
@@ -0,0 +1,214 @@
1
+ @use 'sass:map';
2
+ @use '../abstracts' as *;
3
+
4
+ .mw-footer {
5
+ background: var(--mw-footer-background);
6
+ padding: spacing('6') spacing('0') spacing('4') spacing('0');
7
+ margin-top: spacing('7');
8
+ border-top: 1px solid var(--mw-primary-color-hover);
9
+
10
+ &-top {
11
+ display: grid;
12
+ grid-template-columns: repeat(4, 1fr);
13
+ gap: spacing('6');
14
+ margin-bottom: spacing('6');
15
+
16
+ @include media-down('lg') {
17
+ grid-template-columns: repeat(2, 1fr);
18
+ }
19
+
20
+ @include media-down('sm') {
21
+ grid-template-columns: 1fr;
22
+ }
23
+ }
24
+
25
+ &-column {
26
+ h3 {
27
+ font-size: font-size('lg');
28
+ margin-bottom: spacing('4');
29
+ color: var(--mw-primary-color);
30
+ }
31
+
32
+ p {
33
+ color: var(--mw-text-muted-color);
34
+ margin-bottom: spacing('3');
35
+ }
36
+
37
+ ul {
38
+ padding: spacing('0');
39
+ margin: spacing('0');
40
+
41
+ li {
42
+ margin-bottom: spacing('2');
43
+
44
+ a {
45
+ display: inline-block;
46
+ position: relative;
47
+ color: var(--mw-text-muted-color);
48
+ text-decoration: none;
49
+ padding-bottom: 2px;
50
+
51
+ // subtle default underline via box‐shadow
52
+ &::after {
53
+ content: '';
54
+ position: absolute;
55
+ left: 0;
56
+ bottom: 1px;
57
+ width: 100%;
58
+ height: 1px;
59
+ background: currentColor;
60
+ opacity: 0.4;
61
+ transform: scaleX(1);
62
+ transform-origin: left;
63
+ transition:
64
+ transform 0.2s ease,
65
+ opacity 0.2s ease;
66
+ }
67
+
68
+ &:hover {
69
+ color: var(--mw-primary-color);
70
+
71
+ &::after {
72
+ opacity: 1;
73
+ height: 2px;
74
+ transform: scaleX(1.1);
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
81
+
82
+ .mw-social-links {
83
+ display: flex;
84
+ justify-content: center;
85
+ align-items: center;
86
+ column-gap: spacing('8');
87
+ row-gap: spacing('4');
88
+ margin: spacing('2') auto spacing('6') auto;
89
+
90
+ // modifier for more elements
91
+ &.mod-wrap {
92
+ flex-wrap: wrap;
93
+ width: 510px;
94
+ }
95
+
96
+ a {
97
+ position: relative;
98
+ display: flex;
99
+ align-items: center;
100
+ justify-content: center;
101
+ width: 48px;
102
+ height: 48px;
103
+ border-radius: radius('full');
104
+ background: var(--mw-card-background);
105
+ color: var(--mw-text-color);
106
+ font-size: font-size('xl');
107
+ transition: var(--mw-transition);
108
+ border: 1px solid var(--mw-primary-color-hover);
109
+ box-shadow: 0 3px 10px var(--mw-shadow);
110
+ text-decoration: none;
111
+
112
+ &:hover {
113
+ background: var(--mw-primary-color);
114
+ color: var(--mw-primary-text-color);
115
+ transform: translateY(-3px);
116
+ border-color: var(--mw-primary-color);
117
+ }
118
+ }
119
+ }
120
+
121
+ .mw-disclaimer {
122
+ text-align: center;
123
+ color: var(--mw-text-muted-color);
124
+ font-size: font-size('sm');
125
+ width: min(85%, 700px);
126
+ margin: spacing('0') auto spacing('3') auto;
127
+ line-height: 1.4;
128
+ }
129
+
130
+ .mw-copyright {
131
+ text-align: center;
132
+ color: var(--mw-text-muted-color);
133
+ font-size: font-size('sm');
134
+ padding-top: spacing('4');
135
+ margin: spacing('5') auto spacing('1') auto;
136
+ width: 85%;
137
+ border-top: 1px solid var(--mw-secondary-color);
138
+ }
139
+
140
+ .mw-last-updated {
141
+ text-align: center;
142
+ color: var(--mw-text-muted-color);
143
+ font-size: font-size('xs');
144
+ padding-top: spacing('0');
145
+ margin: spacing('1') auto spacing('0') auto;
146
+ }
147
+
148
+ @include media-down('lg') {
149
+ .mw-social-links {
150
+ &.mod-wrap {
151
+ width: 420px;
152
+ }
153
+ }
154
+ }
155
+
156
+ @include media-down('md') {
157
+ .mw-social-links {
158
+ column-gap: spacing('6');
159
+ row-gap: spacing('3');
160
+
161
+ &.mod-wrap {
162
+ width: 330px;
163
+ }
164
+
165
+ button {
166
+ width: 40px;
167
+ height: 40px;
168
+ font-size: font-size('md');
169
+ }
170
+ }
171
+ }
172
+
173
+ @include media-down('sm') {
174
+ &-column {
175
+ h3 {
176
+ font-size: font-size('md');
177
+ margin-bottom: spacing('3');
178
+ }
179
+
180
+ p {
181
+ margin-bottom: spacing('2');
182
+ }
183
+ }
184
+
185
+ .mw-social-links {
186
+ gap: spacing('3');
187
+
188
+ &.mod-wrap {
189
+ column-gap: spacing('6');
190
+ row-gap: spacing('3');
191
+ max-width: 100%;
192
+ padding: spacing('0') spacing('4');
193
+ }
194
+
195
+ button {
196
+ width: 33px;
197
+ height: 33px;
198
+ font-size: font-size('md');
199
+ }
200
+ }
201
+
202
+ .mw-copyright {
203
+ font-size: font-size('xs');
204
+ }
205
+
206
+ .mw-disclaimer {
207
+ font-size: font-size('xs');
208
+ }
209
+
210
+ .mw-last-updated {
211
+ font-size: font-size('2xs');
212
+ }
213
+ }
214
+ }
@@ -0,0 +1,287 @@
1
+ @use '../abstracts' as *;
2
+
3
+ // Base grid styles that apply to all grid types
4
+ %grid-base {
5
+ display: grid;
6
+ gap: spacing('5');
7
+ }
8
+
9
+ %grid-base-lg {
10
+ display: grid;
11
+ gap: spacing('8');
12
+ }
13
+
14
+ .mw-grid {
15
+ @extend %grid-base;
16
+ }
17
+
18
+ .mw-grid-1 {
19
+ @extend %grid-base;
20
+ grid-template-columns: 1fr;
21
+
22
+ justify-items: stretch;
23
+ > * {
24
+ width: 100% !important;
25
+ max-width: none !important;
26
+ }
27
+ }
28
+
29
+ .mw-grid-2 {
30
+ @extend %grid-base;
31
+ grid-template-columns: repeat(2, 1fr);
32
+
33
+ @include media-down('sm') {
34
+ grid-template-columns: 1fr;
35
+ }
36
+ }
37
+
38
+ .mw-grid-3 {
39
+ @extend %grid-base;
40
+ grid-template-columns: repeat(3, 1fr);
41
+
42
+ @include media-down('md') {
43
+ grid-template-columns: repeat(2, 1fr);
44
+ }
45
+
46
+ @include media-down('sm') {
47
+ grid-template-columns: 1fr;
48
+ }
49
+ }
50
+
51
+ .mw-grid-4 {
52
+ @extend %grid-base;
53
+ grid-template-columns: repeat(4, 1fr);
54
+
55
+ @include media-down('lg') {
56
+ grid-template-columns: repeat(2, 1fr);
57
+ }
58
+
59
+ @include media-down('sm') {
60
+ grid-template-columns: 1fr;
61
+ }
62
+ }
63
+
64
+ .mw-grid-5 {
65
+ @extend %grid-base;
66
+ grid-template-columns: repeat(5, 1fr);
67
+
68
+ @include media-down('lg') {
69
+ grid-template-columns: repeat(4, 1fr);
70
+ }
71
+
72
+ @include media-down('md') {
73
+ grid-template-columns: repeat(3, 1fr);
74
+ }
75
+
76
+ @include media-down('sm') {
77
+ grid-template-columns: repeat(2, 1fr);
78
+ }
79
+
80
+ @include media-down('xs') {
81
+ grid-template-columns: 1fr;
82
+ }
83
+ }
84
+
85
+ // flexible grid system with column spans
86
+ .mw-grid-flex {
87
+ @extend %grid-base;
88
+
89
+ // Default: 12-column grid (you can adjust this base)
90
+ grid-template-columns: repeat(12, 1fr);
91
+
92
+ // At MD breakpoint and below, force single column
93
+ @include media-down('md') {
94
+ grid-template-columns: 1fr;
95
+
96
+ // Reset all spans to full width
97
+ > * {
98
+ grid-column: 1 / -1 !important;
99
+ }
100
+ }
101
+ }
102
+
103
+ // Column span utilities
104
+ @for $i from 1 through 12 {
105
+ .mw-col-span-#{$i} {
106
+ grid-column: span #{$i};
107
+ }
108
+ }
109
+
110
+ // Responsive auto grid
111
+ .mw-grid-auto {
112
+ @extend %grid-base;
113
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
114
+
115
+ // Ensure children don't override the grid behavior
116
+ > * {
117
+ width: auto !important;
118
+ max-width: none !important;
119
+ min-width: 0;
120
+ }
121
+ }
122
+
123
+ // Alternative with different minimum widths
124
+ .mw-grid-auto-sm {
125
+ @extend %grid-base;
126
+ grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
127
+ }
128
+
129
+ .mw-grid-auto-lg {
130
+ @extend %grid-base;
131
+ grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
132
+ }
133
+
134
+ .mw-grid-lg {
135
+ @extend %grid-base-lg;
136
+ }
137
+
138
+ .mw-grid-1-lg {
139
+ @extend %grid-base-lg;
140
+ grid-template-columns: 1fr;
141
+ justify-items: stretch;
142
+ > * {
143
+ width: 100% !important;
144
+ max-width: none !important;
145
+ }
146
+ }
147
+
148
+ .mw-grid-2-lg {
149
+ @extend %grid-base-lg;
150
+ grid-template-columns: repeat(2, 1fr);
151
+ @include media-down('md') {
152
+ grid-template-columns: 1fr;
153
+ gap: spacing('5');
154
+ }
155
+ }
156
+
157
+ .mw-grid-3-lg {
158
+ @extend %grid-base-lg;
159
+ grid-template-columns: repeat(3, 1fr);
160
+ @include media-down('lg') {
161
+ grid-template-columns: repeat(2, 1fr);
162
+ }
163
+ @include media-down('sm') {
164
+ grid-template-columns: 1fr;
165
+ gap: spacing('5');
166
+ }
167
+ }
168
+
169
+ .mw-grid-4-lg {
170
+ @extend %grid-base-lg;
171
+ grid-template-columns: repeat(4, 1fr);
172
+ @include media-down('xl') {
173
+ grid-template-columns: repeat(2, 1fr);
174
+ }
175
+ @include media-down('sm') {
176
+ grid-template-columns: 1fr;
177
+ gap: spacing('5');
178
+ }
179
+ }
180
+
181
+ .mw-grid-5-lg {
182
+ @extend %grid-base-lg;
183
+ grid-template-columns: repeat(5, 1fr);
184
+ @include media-down('xl') {
185
+ grid-template-columns: repeat(4, 1fr);
186
+ }
187
+ @include media-down('lg') {
188
+ grid-template-columns: repeat(3, 1fr);
189
+ }
190
+ @include media-down('md') {
191
+ grid-template-columns: repeat(2, 1fr);
192
+ gap: spacing('6');
193
+ }
194
+ @include media-down('sm') {
195
+ grid-template-columns: 1fr;
196
+ gap: spacing('5');
197
+ }
198
+ }
199
+
200
+ .mw-grid-auto-lg {
201
+ @extend %grid-base-lg;
202
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
203
+ }
204
+
205
+ // Flexible grids with large spacing
206
+ .mw-grid-flex-lg {
207
+ @extend %grid-base-lg;
208
+ grid-template-columns: repeat(12, 1fr);
209
+
210
+ @include media-down('md') {
211
+ grid-template-columns: 1fr;
212
+ gap: spacing('5');
213
+ > * {
214
+ grid-column: 1 / -1 !important;
215
+ }
216
+ }
217
+ }
218
+
219
+ // Base stack - items keep their natural width
220
+ .mw-grid-stack {
221
+ @extend %grid-base;
222
+ grid-template-columns: 1fr;
223
+ justify-items: start; // Items keep natural width, aligned left
224
+
225
+ // Remove the forced width from grid-1
226
+ > * {
227
+ width: auto;
228
+ max-width: none;
229
+ }
230
+ }
231
+
232
+ // Stack variants with different alignments
233
+ .mw-grid-stack-center {
234
+ @extend %grid-base;
235
+ grid-template-columns: 1fr;
236
+ justify-items: center;
237
+
238
+ > * {
239
+ max-width: none;
240
+ }
241
+ }
242
+
243
+ .mw-grid-stack-end {
244
+ @extend %grid-base;
245
+ grid-template-columns: 1fr;
246
+ justify-items: end;
247
+
248
+ > * {
249
+ width: auto;
250
+ max-width: none;
251
+ }
252
+ }
253
+
254
+ .mw-grid-stack-stretch {
255
+ @extend %grid-base;
256
+ grid-template-columns: 1fr;
257
+ justify-items: stretch;
258
+
259
+ > * {
260
+ width: 100%;
261
+ max-width: none;
262
+ }
263
+ }
264
+
265
+ // Large spacing variants
266
+ .mw-grid-stack-lg {
267
+ @extend %grid-base-lg;
268
+ grid-template-columns: 1fr;
269
+ gap: spacing('5');
270
+ justify-items: start;
271
+
272
+ > * {
273
+ width: auto;
274
+ max-width: none;
275
+ }
276
+ }
277
+
278
+ .mw-grid-stack-center-lg {
279
+ @extend %grid-base-lg;
280
+ grid-template-columns: 1fr;
281
+ gap: spacing('5');
282
+ justify-items: center;
283
+
284
+ > * {
285
+ max-width: none;
286
+ }
287
+ }