maverick-wave 5.5.0 → 5.7.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 (39) hide show
  1. package/.claude/skills/mw-maverick-wave/SKILL.md +16 -13
  2. package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +2 -2
  3. package/.claude/skills/mw-maverick-wave/references/components.md +5 -2
  4. package/.claude/skills/mw-maverick-wave/references/forms.md +5 -5
  5. package/.claude/skills/mw-maverick-wave/references/theming.md +41 -0
  6. package/CHANGELOG.md +17 -0
  7. package/README.md +30 -5
  8. package/index.html +359 -4
  9. package/maverick-wave.min.css +5 -5
  10. package/package.json +2 -2
  11. package/src/partials/history-container.html +1 -1
  12. package/src/partials/palette-container.html +210 -0
  13. package/src/partials/typography-container.html +8 -9
  14. package/src/partials/utilities-container.html +48 -0
  15. package/src/scss/abstracts/_functions.scss +11 -2
  16. package/src/scss/abstracts/_mixins.scss +35 -3
  17. package/src/scss/abstracts/_variables.scss +8 -8
  18. package/src/scss/base/_base.scss +3 -0
  19. package/src/scss/components/_avatars.scss +33 -1
  20. package/src/scss/components/_blog-post.scss +2 -2
  21. package/src/scss/components/_button-bar.scss +1 -1
  22. package/src/scss/components/_buttons.scss +1 -1
  23. package/src/scss/components/_cards.scss +13 -22
  24. package/src/scss/components/_coming-soon.scss +1 -1
  25. package/src/scss/components/_info.scss +2 -2
  26. package/src/scss/components/_lists.scss +1 -1
  27. package/src/scss/components/_panels.scss +1 -1
  28. package/src/scss/components/_pricing.scss +1 -1
  29. package/src/scss/components/_techstack-bucket.scss +1 -1
  30. package/src/scss/components/_tiles.scss +1 -1
  31. package/src/scss/form-elements/_input.scss +1 -1
  32. package/src/scss/form-elements/_select.scss +1 -1
  33. package/src/scss/layout/_footer.scss +1 -1
  34. package/src/scss/layout/_header.scss +9 -1
  35. package/src/scss/layout/_main.scss +31 -2
  36. package/src/scss/utilities/_index.scss +1 -0
  37. package/src/scss/utilities/_reveal.scss +9 -2
  38. package/src/scss/utilities/_touch-targets.scss +1 -1
  39. package/src/scss/utilities/_variants.scss +120 -0
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "maverick-wave",
3
- "version": "5.5.0",
3
+ "version": "5.7.0",
4
4
  "config": {
5
- "version_short": "5.5"
5
+ "version_short": "5.7"
6
6
  },
7
7
  "description": "A lightweight, modern CSS framework for building responsive websites with elegance and speed.",
8
8
  "main": "src/js/main.js",
@@ -56,7 +56,7 @@
56
56
  <div class="mw-timeline-simple-date">2025-04-30</div>
57
57
  <div class="mw-timeline-simple-content">
58
58
  <div class="mw-card mw-card-simple">
59
- <h3 class="mw-card-title">v1.3.0</h3>
59
+ <h3 class="mw-card-title">v1.0.0</h3>
60
60
  <p>
61
61
  Let's say initial release - grid, header and a first handful of
62
62
  components, published as they were.
@@ -139,4 +139,214 @@
139
139
  <input type="color" id="palette-secondary" value="#bb5710" />
140
140
  </label>
141
141
  </div>
142
+
143
+ <h3 class="palette-heading palette-heading-split">Variants</h3>
144
+ <p class="palette-hint">
145
+ Every switch is one class on &lt;html&gt; or one custom property - no build,
146
+ no rebuild. The box at the bottom is what a project would carry, and it
147
+ reads back: paste someone else's setup in to see it.
148
+ </p>
149
+
150
+ <div id="variant-list">
151
+ <label class="variant-row">
152
+ <span class="variant-label">
153
+ Distinctive card corners
154
+ <small
155
+ >The arc across two corners that gives every surface its shape. Off
156
+ leaves an evenly rounded box.</small
157
+ >
158
+ </span>
159
+ <input
160
+ type="checkbox"
161
+ checked
162
+ data-variant-class="mw-corners-even"
163
+ data-variant-invert
164
+ />
165
+ </label>
166
+
167
+ <label class="variant-row">
168
+ <span class="variant-label">
169
+ Corner radius
170
+ <small
171
+ >How round every box is drawn, from hard edges to fully
172
+ rounded.</small
173
+ >
174
+ </span>
175
+ <select data-variant-prop="--mw-radius-scale">
176
+ <option value="0">Square</option>
177
+ <option value="" selected>Default</option>
178
+ <option value="1.7">Round</option>
179
+ </select>
180
+ </label>
181
+
182
+ <label class="variant-row">
183
+ <span class="variant-label">
184
+ Pill buttons
185
+ <small
186
+ >Buttons rounded all the way. Form fields keep their own shape.</small
187
+ >
188
+ </span>
189
+ <input type="checkbox" data-variant-class="mw-btn-pill" />
190
+ </label>
191
+
192
+ <label class="variant-row">
193
+ <span class="variant-label">
194
+ Glass buttons
195
+ <small
196
+ >Filled buttons become tinted glass - the colour drops to a
197
+ translucent wash with a lit top edge.</small
198
+ >
199
+ </span>
200
+ <input type="checkbox" data-variant-class="mw-btn-glass" />
201
+ </label>
202
+
203
+ <label class="variant-row">
204
+ <span class="variant-label">
205
+ Single accent color
206
+ <small
207
+ >Drop the second brand colour - hovers, tints and borders all come
208
+ from the first one.</small
209
+ >
210
+ </span>
211
+ <input type="checkbox" data-variant-class="mw-accent-single" />
212
+ </label>
213
+
214
+ <label class="variant-row">
215
+ <span class="variant-label">
216
+ Heading font
217
+ <small>The typeface for headlines. Body copy is unaffected.</small>
218
+ </span>
219
+ <select data-variant-prop="--mw-font-family-heading">
220
+ <option value="" selected>System</option>
221
+ <option value="Georgia, 'Times New Roman', serif">Serif</option>
222
+ <option
223
+ value="Optima, Candara, 'Gill Sans', 'Trebuchet MS', sans-serif"
224
+ >
225
+ Humanist
226
+ </option>
227
+ </select>
228
+ </label>
229
+
230
+ <label class="variant-row">
231
+ <span class="variant-label">
232
+ Uppercase headings
233
+ <small>Headlines set in capitals with wider letter spacing.</small>
234
+ </span>
235
+ <input type="checkbox" data-variant-class="mw-headings-caps" />
236
+ </label>
237
+
238
+ <label class="variant-row">
239
+ <span class="variant-label">
240
+ Flat surfaces
241
+ <small
242
+ >Cards and panels lose their shadow and sit flat on the page.
243
+ Dropdowns and dialogs still float.</small
244
+ >
245
+ </span>
246
+ <input type="checkbox" data-variant-class="mw-shadows-flat" />
247
+ </label>
248
+
249
+ <label class="variant-row">
250
+ <span class="variant-label">
251
+ Static on hover
252
+ <small
253
+ >Nothing lifts or zooms under the pointer. Colours and borders still
254
+ respond.</small
255
+ >
256
+ </span>
257
+ <input type="checkbox" data-variant-class="mw-hover-static" />
258
+ </label>
259
+
260
+ <label class="variant-row">
261
+ <span class="variant-label">
262
+ Scroll reveal
263
+ <small
264
+ >Cards and sections rise into place as they scroll in. Off has
265
+ everything sit where it lands.</small
266
+ >
267
+ </span>
268
+ <input
269
+ type="checkbox"
270
+ checked
271
+ data-variant-class="mw-scroll-static"
272
+ data-variant-invert
273
+ />
274
+ </label>
275
+
276
+ <label class="variant-row">
277
+ <span class="variant-label">
278
+ Sticky header
279
+ <small
280
+ >The bar stays put from the top instead of sliding in over the first
281
+ screen.</small
282
+ >
283
+ </span>
284
+ <input
285
+ type="checkbox"
286
+ data-variant-class="mw-header-reveal"
287
+ data-variant-target=".mw-header"
288
+ data-variant-invert
289
+ />
290
+ </label>
291
+
292
+ <label class="variant-row">
293
+ <span class="variant-label">
294
+ Alternating sections
295
+ <small>The fine diagonal hatch behind every second section.</small>
296
+ </span>
297
+ <input
298
+ type="checkbox"
299
+ checked
300
+ data-variant-class="mw-sections-plain"
301
+ data-variant-invert
302
+ />
303
+ </label>
304
+
305
+ <label class="variant-row">
306
+ <span class="variant-label">
307
+ Section spacing
308
+ <small
309
+ >How much air sits above and below each section of the page.</small
310
+ >
311
+ </span>
312
+ <select data-variant-prop="--mw-section-padding-block">
313
+ <option value="2rem">Compact</option>
314
+ <option value="" selected>Default</option>
315
+ <option value="5.5rem">Airy</option>
316
+ </select>
317
+ </label>
318
+
319
+ <label class="variant-row">
320
+ <span class="variant-label">
321
+ Page width
322
+ <small
323
+ >How wide the content runs before it stops growing on a large
324
+ screen.</small
325
+ >
326
+ </span>
327
+ <select data-variant-prop="--mw-container-width">
328
+ <option value="" selected>1200</option>
329
+ <option
330
+ value="min(1440px, calc(100% - 2 * var(--mw-container-gutter)))"
331
+ >
332
+ 1440
333
+ </option>
334
+ <option value="calc(100% - 2 * var(--mw-container-gutter))">
335
+ Full
336
+ </option>
337
+ </select>
338
+ </label>
339
+ </div>
340
+
341
+ <label class="variant-setup-label" for="variant-setup">
342
+ Setup - editable, paste one in to load it
343
+ </label>
344
+ <textarea
345
+ class="variant-setup"
346
+ id="variant-setup"
347
+ rows="4"
348
+ spellcheck="false"
349
+ autocapitalize="off"
350
+ autocorrect="off"
351
+ ></textarea>
142
352
  </div>
@@ -19,6 +19,14 @@
19
19
  <blockquote>
20
20
  In the complex world of code, simplicity is the ultimate sophistication.
21
21
  </blockquote>
22
+ <p>
23
+ <span class="mw-text-xs">Extra Small Text</span><br />
24
+ <span class="mw-text-sm">Small Text</span><br />
25
+ <span class="mw-text-base">Base Text</span><br />
26
+ <span class="mw-text-md">Medium Text</span><br />
27
+ <span class="mw-text-lg">Large Text</span><br />
28
+ <span class="mw-text-xl">Extra Large Text</span>
29
+ </p>
22
30
  </div>
23
31
 
24
32
  <div class="mw-grid-stack mw-gap-2">
@@ -59,14 +67,5 @@
59
67
  <p class="mw-text-color-light">
60
68
  This always remains the text color of the light theme.
61
69
  </p>
62
-
63
- <p>
64
- <span class="mw-text-xs">Extra Small Text</span><br />
65
- <span class="mw-text-sm">Small Text</span><br />
66
- <span class="mw-text-base">Base Text</span><br />
67
- <span class="mw-text-md">Medium Text</span><br />
68
- <span class="mw-text-lg">Large Text</span><br />
69
- <span class="mw-text-xl">Extra Large Text</span>
70
- </p>
71
70
  </div>
72
71
  </div>
@@ -423,3 +423,51 @@
423
423
  </p>
424
424
  </div>
425
425
  </div>
426
+
427
+ <h3 class="mw-mb-4 mw-mt-6">Site-wide Variants</h3>
428
+ <p class="mw-text-muted mw-text-measure">
429
+ Nine classes on <code>&lt;html&gt;</code> retune the whole look without
430
+ touching markup. They stack, and the palette button in the corner switches all
431
+ of them live - the box at the bottom of that panel prints the setup a project
432
+ would carry, and reads it back: paste one in to see someone else's.
433
+ </p>
434
+ <ul class="mw-list mw-list-dot mw-text-measure">
435
+ <li>
436
+ <code>mw-corners-even</code> - drops the surface signature; every panel
437
+ becomes an evenly rounded box
438
+ </li>
439
+ <li>
440
+ <code>mw-accent-single</code> - one brand colour instead of two,
441
+ <code>mw-btn-secondary</code> turns outline
442
+ </li>
443
+ <li>
444
+ <code>mw-shadows-flat</code> - elevation 1-3 to <code>none</code>, dropdown
445
+ and modal keep theirs
446
+ </li>
447
+ <li>
448
+ <code>mw-hover-static</code> - no hover travels; colour and border still
449
+ respond
450
+ </li>
451
+ <li>
452
+ <code>mw-scroll-static</code> - no scroll entrance;
453
+ <code>mw-reveal</code> blocks sit where they land
454
+ </li>
455
+ <li>
456
+ <code>mw-sections-plain</code> - the hatch behind
457
+ <code>mw-section-alternate</code> collapses into the page colour
458
+ </li>
459
+ <li><code>mw-headings-caps</code> - h1 to h3 in capitals</li>
460
+ <li>
461
+ <code>mw-btn-pill</code> - fully rounded buttons, form fields keep their
462
+ radius
463
+ </li>
464
+ <li>
465
+ <code>mw-btn-glass</code> - filled buttons become tinted glass with a lit
466
+ top edge
467
+ </li>
468
+ </ul>
469
+ <p class="mw-text-muted mw-text-measure">
470
+ Four properties do the rest: <code>--mw-radius-scale</code> multiplies every
471
+ radius, plus <code>--mw-font-family-heading</code>,
472
+ <code>--mw-container-width</code> and <code>--mw-section-padding-block</code>.
473
+ </p>
@@ -27,9 +27,18 @@
27
27
  @return map.get(v.$breakpoints, $key);
28
28
  }
29
29
 
30
- // Function to get a radius value from the radius map
30
+ // Emitted through --mw-radius-scale, so one number retunes every rounded box in
31
+ // the framework at once - 0 squares them off, above 1 rounds them further, and
32
+ // the corner arc follows. 'none' and 'full' pass through: a scaled 0 is still 0,
33
+ // and a circle has to stay a circle.
31
34
  @function radius($key) {
32
- @return map.get(v.$radius, $key);
35
+ $value: map.get(v.$radius, $key);
36
+
37
+ @if $key == 'none' or $key == 'full' {
38
+ @return $value;
39
+ }
40
+
41
+ @return calc(#{$value} * var(--mw-radius-scale, 1));
33
42
  }
34
43
 
35
44
  // Function to get a z-index value from the z-index map
@@ -129,6 +129,23 @@
129
129
  }
130
130
  }
131
131
 
132
+ // A hover that *travels*. Separate from `hover`, because movement has two more
133
+ // opt-outs than a colour change does: reduced motion, where a transform still
134
+ // jumps to its end position in one frame however short the duration is, and the
135
+ // static-hover variant. Colour and shadow belong in `hover` and stay either way.
136
+ //
137
+ // A tooltip trigger is a third: a transform makes the element a containing block
138
+ // for its own fixed-position descendants, and the tooltip is exactly that - so a
139
+ // lifted trigger drags the bubble down onto itself. The two cannot both happen,
140
+ // and a label that lands where it belongs beats two pixels of travel.
141
+ @mixin hover-move {
142
+ @media (hover: hover) and (pointer: fine) and (prefers-reduced-motion: no-preference) {
143
+ :root:not(.mw-hover-static) &:hover:not([data-tooltip]) {
144
+ @content;
145
+ }
146
+ }
147
+ }
148
+
132
149
  // No 300ms double-tap wait, no grey flash - the component draws its own :active
133
150
  @mixin tappable {
134
151
  touch-action: manipulation;
@@ -219,17 +236,32 @@
219
236
  &::after {
220
237
  @include corner-accent($border-width, $corners);
221
238
  }
239
+
240
+ // Site-wide opt-out for an even rounded box - .mw-corner-plain next door drops
241
+ // the arc on a single element, this drops the whole silhouette on all of them.
242
+ // Generated here and not as a list of the eleven callers, so a new caller is
243
+ // covered the day it is written.
244
+ :root.mw-corners-even & {
245
+ border-radius: radius('md');
246
+
247
+ &::after {
248
+ display: none;
249
+ }
250
+ }
222
251
  }
223
252
 
224
253
  // The arc alone, for a variant that redraws it without restating the shape
225
254
  @mixin corner-accent($border-width: 1px, $corners: 'both') {
226
- $sharp: radius('sm') - $border-width;
227
- $round: radius('xl') - $border-width;
255
+ // max(), not a bare subtraction: --mw-radius-scale can take the radius to 0,
256
+ // and while a negative border-radius is clamped for us, a negative circle in
257
+ // the mask below would throw the whole gradient away and lose the arc.
258
+ $sharp: max(0px, calc(#{radius('sm')} - #{$border-width}));
259
+ $round: max(0px, calc(#{radius('xl')} - #{$border-width}));
228
260
  // Opaque to where the curve ends, fading from there, so the arc runs into the
229
261
  // straight edge instead of stopping at the tangent. 1.8 is bounded by the
230
262
  // shortest surface: past about 2 the two arcs meet on a 50px box and read as
231
263
  // a frame.
232
- $reach: $round * 1.8;
264
+ $reach: calc(#{$round} * 1.8);
233
265
  $top: radial-gradient(circle $reach at 100% 0, #000 $round, transparent 100%);
234
266
  $bottom: radial-gradient(
235
267
  circle $reach at 0 100%,
@@ -86,17 +86,17 @@ $header-active-tint: 25% !default;
86
86
  $shadow-cast-dark: 0.3 !default;
87
87
  // Near (contact) and far (ambient) opacity. The dark theme's far layer is a light
88
88
  // rim, so it stays low - a glow carries further than a shadow at the same alpha.
89
- $shadow-near-dark: 55% !default;
90
- $shadow-far-dark: 13% !default;
91
- $shadow-near-light: 14% !default;
92
- $shadow-far-light: 10% !default;
89
+ $shadow-near-dark: 68% !default;
90
+ $shadow-far-dark: 16% !default;
91
+ $shadow-near-light: 21% !default;
92
+ $shadow-far-light: 14% !default;
93
93
 
94
- // Control sizes - 32 / 36 / 40px, shared by input, select, textarea and button so
94
+ // Control sizes - 30 / 34 / 38px, shared by input, select, textarea and button so
95
95
  // the row lines up. A minimum, not a fixed height, and it is what sets a field's
96
96
  // height: trimming `padding-block` moves the text inside the box, not the box.
97
- $control-height-sm: 2rem !default;
98
- $control-height: 2.25rem !default;
99
- $control-height-lg: 2.5rem !default;
97
+ $control-height-sm: 1.875rem !default;
98
+ $control-height: 2.125rem !default;
99
+ $control-height-lg: 2.375rem !default;
100
100
 
101
101
  // All three fields share it; buttons stay one step above, because a button
102
102
  // carries a label and a field carries what the user typed
@@ -88,6 +88,9 @@
88
88
  --mw-hero-pattern: #{$mw-hero-pattern};
89
89
  --mw-hero-text-color: #{$mw-hero-text-color};
90
90
 
91
+ // Read by every radius the framework draws - see the radius() function
92
+ --mw-radius-scale: 1;
93
+
91
94
  // header height
92
95
  --mw-header-height: #{$header-height};
93
96
 
@@ -22,6 +22,35 @@
22
22
  height: 100%;
23
23
  object-fit: cover;
24
24
  display: block;
25
+ transition: transform var(--mw-duration-slow) var(--mw-ease-out);
26
+ }
27
+
28
+ // `:has(img)` keeps the sweep off the initials variant, where it would just
29
+ // flash a white bar across the letters
30
+ &:has(img)::after {
31
+ content: '';
32
+ position: absolute;
33
+ inset: 0;
34
+ background: linear-gradient(
35
+ 115deg,
36
+ transparent 38%,
37
+ rgb(255 255 255 / 0.45) 50%,
38
+ transparent 62%
39
+ );
40
+ transform: translateX(-130%);
41
+ pointer-events: none;
42
+ }
43
+
44
+ @include hover-move {
45
+ img {
46
+ transform: scale(1.12);
47
+ }
48
+
49
+ // Transition only here, so the sweep resets instantly instead of travelling back
50
+ &:has(img)::after {
51
+ transform: translateX(130%);
52
+ transition: transform var(--mw-duration-slower) var(--mw-ease-out);
53
+ }
25
54
  }
26
55
 
27
56
  &-xs {
@@ -85,10 +114,13 @@
85
114
  transition: transform var(--mw-duration-base) var(--mw-ease-out);
86
115
 
87
116
  @include hover {
88
- transform: translateY(-3px);
89
117
  z-index: z-index('lift');
90
118
  }
91
119
 
120
+ @include hover-move {
121
+ transform: translateY(-3px);
122
+ }
123
+
92
124
  &:last-child {
93
125
  margin-right: spacing('0');
94
126
  }
@@ -274,14 +274,14 @@
274
274
  transition: var(--mw-transition);
275
275
  color: var(--mw-primary-text-color);
276
276
 
277
- &:hover {
277
+ @include hover-move {
278
278
  transform: translateX(-7px);
279
279
  }
280
280
 
281
281
  &.next {
282
282
  flex-direction: row-reverse;
283
283
 
284
- &:hover {
284
+ @include hover-move {
285
285
  transform: translateX(7px);
286
286
  }
287
287
  }
@@ -132,7 +132,7 @@
132
132
  gap: spacing('3');
133
133
 
134
134
  .mw-btn {
135
- padding: spacing('3') spacing('5');
135
+ padding: spacing('2') spacing('5');
136
136
  font-size: font-size('md');
137
137
  min-height: var(--mw-control-height-lg);
138
138
  }
@@ -242,7 +242,7 @@
242
242
  min-height: var(--mw-control-height-sm);
243
243
  }
244
244
  .mw-btn-lg {
245
- padding: spacing('3') spacing('5');
245
+ padding: spacing('2') spacing('5');
246
246
  font-size: font-size('md');
247
247
  min-height: var(--mw-control-height-lg);
248
248
  }
@@ -81,11 +81,10 @@
81
81
  --mw-corner-accent: var(--mw-corner-accent-hover);
82
82
  }
83
83
 
84
- // The lift moves the box, so it is guarded: on touch `:hover` latches after a
85
- // tap and the card stays raised, visibly out of line with the row it sits in.
86
- // The colour and shadow below are not - a latched border reads as "the one you
87
- // last touched", which is no worse than nothing.
88
- @include hover {
84
+ // Pointer-guarded, unlike the colour and shadow above: on touch `:hover`
85
+ // latches after a tap and the card would stay raised, visibly out of line
86
+ // with the row it sits in. A latched border is no worse than nothing.
87
+ @include hover-move {
89
88
  transform: translateY(-2px);
90
89
  }
91
90
 
@@ -145,7 +144,7 @@
145
144
  height: var(--mw-card-img-height, 210px);
146
145
  overflow: hidden;
147
146
  flex-shrink: 0;
148
- border-radius: (radius('sm') - 1px) (radius('xl') - 1px) 0 0;
147
+ border-radius: calc(#{radius('sm')} - 1px) calc(#{radius('xl')} - 1px) 0 0;
149
148
 
150
149
  img {
151
150
  width: 100%;
@@ -154,8 +153,10 @@
154
153
  transition: transform var(--mw-duration-zoom) var(--mw-ease-out);
155
154
  }
156
155
 
157
- &:hover img {
158
- transform: scale(1.05);
156
+ @include hover-move {
157
+ img {
158
+ transform: scale(1.05);
159
+ }
159
160
  }
160
161
  }
161
162
 
@@ -323,8 +324,10 @@
323
324
  font-size: font-size('md');
324
325
  }
325
326
 
326
- &:hover &-icon {
327
- transform: rotate(25deg);
327
+ @include hover-move {
328
+ .mw-card-stack-icon {
329
+ transform: rotate(25deg);
330
+ }
328
331
  }
329
332
 
330
333
  &-header {
@@ -427,16 +430,4 @@
427
430
  --mw-card-addon-text-color: var(--mw-#{$name}-accent-text-color);
428
431
  }
429
432
  }
430
-
431
- // Only the movement. The durations are already pinned to 1ms globally in
432
- // base/_base.scss; a hover that *travels* has to be taken away outright, or it
433
- // still jumps to its lifted position in one frame.
434
- @media (prefers-reduced-motion: reduce) {
435
- .mw-card:hover,
436
- .mw-card-img:hover img,
437
- .mw-card-img-contain:hover img,
438
- .mw-card-stack:hover .mw-card-stack-icon {
439
- transform: none;
440
- }
441
- }
442
433
  }
@@ -51,7 +51,7 @@
51
51
  transition: opacity var(--mw-duration-slower) var(--mw-ease-out);
52
52
  }
53
53
 
54
- @include hover {
54
+ @include hover-move {
55
55
  transform: translateY(-3px);
56
56
  }
57
57
 
@@ -24,7 +24,7 @@
24
24
  box-shadow: var(--mw-elevation-3);
25
25
  }
26
26
 
27
- @include hover {
27
+ @include hover-move {
28
28
  transform: translateY(-2px);
29
29
  }
30
30
 
@@ -74,7 +74,7 @@
74
74
  box-shadow: none;
75
75
  }
76
76
 
77
- @include hover {
77
+ @include hover-move {
78
78
  transform: none;
79
79
  }
80
80
 
@@ -239,7 +239,7 @@
239
239
  }
240
240
  }
241
241
 
242
- @include hover {
242
+ @include hover-move {
243
243
  transform: translateX(8px);
244
244
  }
245
245
  }
@@ -18,7 +18,7 @@
18
18
  justify-content: space-between;
19
19
  align-items: center;
20
20
  margin: spacing('0');
21
- border-radius: (radius('sm') - 2px) (radius('xl') - 2px) 0 0;
21
+ border-radius: calc(#{radius('sm')} - 2px) calc(#{radius('xl')} - 2px) 0 0;
22
22
  }
23
23
 
24
24
  &-body {
@@ -156,7 +156,7 @@
156
156
  gap: spacing('2');
157
157
  padding: spacing('6') spacing('5');
158
158
  // The card's own radius minus its border - the band sits inside it
159
- border-radius: (radius('sm') - 1px) (radius('xl') - 1px) 0 0;
159
+ border-radius: calc(#{radius('sm')} - 1px) calc(#{radius('xl')} - 1px) 0 0;
160
160
  background: var(--mw-card-addon-color, var(--mw-primary-color));
161
161
  color: var(
162
162
  --mw-card-addon-text-color,
@@ -33,7 +33,7 @@
33
33
  font-size: font-size('xs');
34
34
  }
35
35
 
36
- @include hover {
36
+ @include hover-move {
37
37
  transform: translateY(-2px);
38
38
  }
39
39
 
@@ -81,7 +81,7 @@
81
81
  --mw-corner-accent: var(--mw-corner-accent-hover);
82
82
  }
83
83
 
84
- @include hover {
84
+ @include hover-move {
85
85
  transform: translateY(-2px);
86
86
  }
87
87