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.
- package/.claude/skills/mw-maverick-wave/SKILL.md +16 -13
- package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +2 -2
- package/.claude/skills/mw-maverick-wave/references/components.md +5 -2
- package/.claude/skills/mw-maverick-wave/references/forms.md +5 -5
- package/.claude/skills/mw-maverick-wave/references/theming.md +41 -0
- package/CHANGELOG.md +17 -0
- package/README.md +30 -5
- package/index.html +359 -4
- package/maverick-wave.min.css +5 -5
- package/package.json +2 -2
- package/src/partials/history-container.html +1 -1
- package/src/partials/palette-container.html +210 -0
- package/src/partials/typography-container.html +8 -9
- package/src/partials/utilities-container.html +48 -0
- package/src/scss/abstracts/_functions.scss +11 -2
- package/src/scss/abstracts/_mixins.scss +35 -3
- package/src/scss/abstracts/_variables.scss +8 -8
- package/src/scss/base/_base.scss +3 -0
- package/src/scss/components/_avatars.scss +33 -1
- package/src/scss/components/_blog-post.scss +2 -2
- package/src/scss/components/_button-bar.scss +1 -1
- package/src/scss/components/_buttons.scss +1 -1
- package/src/scss/components/_cards.scss +13 -22
- package/src/scss/components/_coming-soon.scss +1 -1
- package/src/scss/components/_info.scss +2 -2
- package/src/scss/components/_lists.scss +1 -1
- package/src/scss/components/_panels.scss +1 -1
- package/src/scss/components/_pricing.scss +1 -1
- package/src/scss/components/_techstack-bucket.scss +1 -1
- package/src/scss/components/_tiles.scss +1 -1
- package/src/scss/form-elements/_input.scss +1 -1
- package/src/scss/form-elements/_select.scss +1 -1
- package/src/scss/layout/_footer.scss +1 -1
- package/src/scss/layout/_header.scss +9 -1
- package/src/scss/layout/_main.scss +31 -2
- package/src/scss/utilities/_index.scss +1 -0
- package/src/scss/utilities/_reveal.scss +9 -2
- package/src/scss/utilities/_touch-targets.scss +1 -1
- 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.
|
|
3
|
+
"version": "5.7.0",
|
|
4
4
|
"config": {
|
|
5
|
-
"version_short": "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.
|
|
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 <html> 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><html></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
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
227
|
-
|
|
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:
|
|
90
|
-
$shadow-far-dark:
|
|
91
|
-
$shadow-near-light:
|
|
92
|
-
$shadow-far-light:
|
|
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 -
|
|
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:
|
|
98
|
-
$control-height: 2.
|
|
99
|
-
$control-height-lg: 2.
|
|
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
|
package/src/scss/base/_base.scss
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
284
|
+
@include hover-move {
|
|
285
285
|
transform: translateX(7px);
|
|
286
286
|
}
|
|
287
287
|
}
|
|
@@ -81,11 +81,10 @@
|
|
|
81
81
|
--mw-corner-accent: var(--mw-corner-accent-hover);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
//
|
|
85
|
-
// tap and the card
|
|
86
|
-
//
|
|
87
|
-
|
|
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
|
-
|
|
158
|
-
|
|
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
|
-
|
|
327
|
-
|
|
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
|
}
|
|
@@ -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
|
|
|
@@ -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,
|