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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maverick-wave",
3
- "version": "4.9.0",
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://maverickwave.m1well.com/",
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
- // Footer and header chrome. In the dark theme they step further out than the
77
- // card, in the light theme they step the other way, so the band under the page
78
- // reads as chrome and not as another card.
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. They stay dark in both themes but can be retuned on
304
- // their own, hence the dark-* references. Emitted as --mw-header-<key>.
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': token('dark-footer-background'),
307
- 'text-color': token('dark-text-color'),
308
- 'navbar-list-color': token('dark-text-muted-color'),
309
- // Primary carries the navigation, secondary stays a signal. The bar is dark in
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': token('dark-border-accent'),
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.
@@ -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 “overlay”
31
- &::before {
32
- content: '';
33
- position: absolute;
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
- // your actual content should sit above the overlay
43
- > * {
44
- position: relative;
45
- z-index: z-index('card');
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