maverick-wave 4.9.0 → 4.9.2
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/maverick-wave/references/layout.md +21 -3
- package/.claude/skills/maverick-wave/references/theming.md +61 -36
- package/CHANGELOG.md +20 -0
- package/README.md +5 -4
- package/maverick-wave.min.css +3 -3
- package/package.json +2 -2
- package/src/scss/abstracts/_variables.scss +48 -14
- package/src/scss/base/_base.scss +2 -1
- package/src/scss/layout/_main.scss +13 -15
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "maverick-wave",
|
|
3
|
-
"version": "4.9.
|
|
3
|
+
"version": "4.9.2",
|
|
4
4
|
"config": {
|
|
5
5
|
"version_short": "4.9"
|
|
6
6
|
},
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"bugs": {
|
|
25
25
|
"url": "https://github.com/m1well/maverick-wave/issues"
|
|
26
26
|
},
|
|
27
|
-
"homepage": "https://
|
|
27
|
+
"homepage": "https://maverick-wave.m1well.com/",
|
|
28
28
|
"author": "m1well",
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"keywords": [
|
|
@@ -4,6 +4,14 @@ $mw-theme-mode: 'switchable' !default; // 'dark', 'light', or 'switchable'
|
|
|
4
4
|
|
|
5
5
|
$mw-hero-image: url('https://images.unsplash.com/photo-1591638462868-19cfad9c49d1?q=80&w=1300&auto=format&fit=crop') !default;
|
|
6
6
|
|
|
7
|
+
// Ink on the hero image. The photo behind it is the same picture in both themes,
|
|
8
|
+
// so the text on top cannot follow the theme: --mw-text-color would go dark the
|
|
9
|
+
// moment the light theme is on, over a photo that stayed exactly as dark as it
|
|
10
|
+
// was. Fixed to the light end of the palette instead, because a hero image is
|
|
11
|
+
// usually the dark one. Set it to var(--mw-light-text-color) for a bright photo,
|
|
12
|
+
// or to any color of your own.
|
|
13
|
+
$mw-hero-text-color: var(--mw-dark-text-color) !default;
|
|
14
|
+
|
|
7
15
|
// ---------------------------------------------------------------------------
|
|
8
16
|
// Root colors
|
|
9
17
|
//
|
|
@@ -73,12 +81,28 @@ $muted-tint: 23% !default;
|
|
|
73
81
|
// room for a low card factor.
|
|
74
82
|
$card-surface-dark: 0.85 !default;
|
|
75
83
|
$card-surface-light: 1.05 !default;
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
//
|
|
84
|
+
// The footer band. In the dark theme it steps further out than the card, in the
|
|
85
|
+
// light theme it steps the other way, so the band under the page reads as chrome
|
|
86
|
+
// and not as another card. The header is not part of this - see below.
|
|
79
87
|
$footer-surface-dark: 0.75 !default;
|
|
80
88
|
$footer-surface-light: 0.95 !default;
|
|
81
89
|
|
|
90
|
+
// The header bar. It stays dark in both themes, so it cannot be part of the
|
|
91
|
+
// surface stack above: a project that only ever shows the light theme would be
|
|
92
|
+
// styling its header through a dark page color it never configured, and the bar
|
|
93
|
+
// would keep the framework default no matter what the palette says.
|
|
94
|
+
//
|
|
95
|
+
// It is built from the primary color instead - the one token every palette has
|
|
96
|
+
// to set - darkened straight toward black, which is the ramp every color tool
|
|
97
|
+
// shows as a color's shades. Kept well past the bottom of that ramp on purpose:
|
|
98
|
+
// this deep the brand hue is a tint on near-black rather than a color of its
|
|
99
|
+
// own, which is what keeps the bar reading as chrome behind the page.
|
|
100
|
+
//
|
|
101
|
+
// Lower it for a darker bar. The ink on the bar is near-white, so going far up
|
|
102
|
+
// means overriding --mw-header-text-color and
|
|
103
|
+
// --mw-header-navbar-list-active-color with it.
|
|
104
|
+
$header-surface: 16% !default;
|
|
105
|
+
|
|
82
106
|
// ---------------------------------------------------------------------------
|
|
83
107
|
// Derivation helpers
|
|
84
108
|
//
|
|
@@ -123,6 +147,17 @@ $footer-surface-light: 0.95 !default;
|
|
|
123
147
|
);
|
|
124
148
|
}
|
|
125
149
|
|
|
150
|
+
// Darkened straight toward black in sRGB - the ramp a color tool prints as a
|
|
151
|
+
// color's shades, where $amount is how much of the color survives. shade()
|
|
152
|
+
// cannot stand in for it: mixing in hsl scales saturation along with lightness
|
|
153
|
+
// and hands back a washed-out tone, which is what a hover state wants and what
|
|
154
|
+
// a surface meant to still read as the brand color does not.
|
|
155
|
+
@function deepen($name, $amount) {
|
|
156
|
+
@return string.unquote(
|
|
157
|
+
'color-mix(in srgb, var(--mw-#{$name}) #{$amount}, black)'
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
|
|
126
161
|
// The two ink variants. They clamp lightness in OKLch and keep hue and chroma,
|
|
127
162
|
// which is what makes them palette-agnostic: the same expression lifts a very
|
|
128
163
|
// dark color, deepens a very light one and leaves everything in between alone.
|
|
@@ -252,7 +287,6 @@ $status-colors: (
|
|
|
252
287
|
// Dark theme colors. Emitted as --mw-dark-<key>, hence the prefixed references.
|
|
253
288
|
$dark-theme-colors: (
|
|
254
289
|
'page-background': $dark-background,
|
|
255
|
-
'hero-overlay-background': fade('dark-page-background', 10%),
|
|
256
290
|
// The surface stack - the card and footer factors and the reasoning behind
|
|
257
291
|
// them live with the derivation knobs above, so a project can retune the
|
|
258
292
|
// stack from one place instead of editing this map. The rule between the
|
|
@@ -282,7 +316,6 @@ $dark-theme-colors: (
|
|
|
282
316
|
// Light theme colors. Emitted as --mw-light-<key>.
|
|
283
317
|
$light-theme-colors: (
|
|
284
318
|
'page-background': $light-background,
|
|
285
|
-
'hero-overlay-background': fade('light-page-background', 10%),
|
|
286
319
|
'card-background': surface('light-page-background', $card-surface-light),
|
|
287
320
|
'footer-background': surface('light-page-background', $footer-surface-light),
|
|
288
321
|
'border': surface('light-page-background', 0.8),
|
|
@@ -300,21 +333,22 @@ $light-theme-colors: (
|
|
|
300
333
|
'border-accent': fade('light-primary-text-color', 70%),
|
|
301
334
|
);
|
|
302
335
|
|
|
303
|
-
// Header/navbar colors.
|
|
304
|
-
//
|
|
336
|
+
// Header/navbar colors. The bar is dark in both themes, so every tone here is
|
|
337
|
+
// built from the primary color rather than from a theme token: the header is the
|
|
338
|
+
// one piece of chrome a light-only project would otherwise be styling through
|
|
339
|
+
// dark-theme values it never set. Emitted as --mw-header-<key>, and each one is
|
|
340
|
+
// still overridable on its own.
|
|
305
341
|
$header-colors: (
|
|
306
|
-
'background':
|
|
307
|
-
'text-color':
|
|
308
|
-
'navbar-list-color':
|
|
309
|
-
|
|
310
|
-
// both themes, so the active item takes the dark ink tone in both.
|
|
311
|
-
'navbar-list-active-color': token('dark-primary-text-color'),
|
|
342
|
+
'background': deepen('primary-color', $header-surface),
|
|
343
|
+
'text-color': tint('primary-color', 92%),
|
|
344
|
+
'navbar-list-color': fade('header-text-color', 70%),
|
|
345
|
+
'navbar-list-active-color': tint('primary-color', 35%),
|
|
312
346
|
// The burger sits on the primary button surface, and on the secondary one
|
|
313
347
|
// while the drawer is open, so it takes the label ink of each - not the
|
|
314
348
|
// header text color, which is picked for the dark bar behind it.
|
|
315
349
|
'burgerbutton-color': token('primary-accent-text-color'),
|
|
316
350
|
'burgerbutton-open-color': token('secondary-accent-text-color'),
|
|
317
|
-
'border':
|
|
351
|
+
'border': fade('header-navbar-list-active-color', 40%),
|
|
318
352
|
);
|
|
319
353
|
// Drives the bar height, the anchor scroll offset and the mobile drawer padding.
|
|
320
354
|
// 59px is the intrinsic height: 42px logo + 2 × spacing('3') + 1px border.
|
package/src/scss/base/_base.scss
CHANGED
|
@@ -42,8 +42,9 @@ $_active-prefix: 'dark';
|
|
|
42
42
|
// theme for theme-toggle
|
|
43
43
|
--mw-internal-theme-mode: #{$mw-theme-mode};
|
|
44
44
|
|
|
45
|
-
// hero background image
|
|
45
|
+
// hero background image and the ink that sits on it
|
|
46
46
|
--mw-hero-background: #{$mw-hero-image};
|
|
47
|
+
--mw-hero-text-color: #{$mw-hero-text-color};
|
|
47
48
|
|
|
48
49
|
// header height
|
|
49
50
|
--mw-header-height: #{$header-height};
|
|
@@ -27,22 +27,20 @@
|
|
|
27
27
|
background-position: center;
|
|
28
28
|
background-image: var(--mw-hero-background);
|
|
29
29
|
|
|
30
|
-
// the
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
inset: 0;
|
|
35
|
-
background: var(--mw-hero-overlay-background);
|
|
36
|
-
backdrop-filter: blur(5px);
|
|
37
|
-
opacity: 0.3;
|
|
38
|
-
z-index: z-index('lift');
|
|
39
|
-
pointer-events: none;
|
|
40
|
-
}
|
|
30
|
+
// The image does not change with the theme, so neither does the ink on
|
|
31
|
+
// it - see $mw-hero-text-color. Set on the container so a hero without
|
|
32
|
+
// .mw-home still gets it.
|
|
33
|
+
color: var(--mw-hero-text-color);
|
|
41
34
|
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
35
|
+
// ...except for anything that paints its own surface. A card inside the
|
|
36
|
+
// hero is still a card on --mw-card-background and takes the theme's ink,
|
|
37
|
+
// or its text would be light on a light card in the light theme.
|
|
38
|
+
.mw-card,
|
|
39
|
+
.mw-panel,
|
|
40
|
+
.mw-modal,
|
|
41
|
+
.mw-tile,
|
|
42
|
+
.mw-calendar:not(.mw-calendar-plain) {
|
|
43
|
+
color: var(--mw-text-color);
|
|
46
44
|
}
|
|
47
45
|
|
|
48
46
|
// The header is fixed, so it floats over the hero and centering against
|