maverick-wave 4.17.0 → 4.19.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/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "maverick-wave",
3
- "version": "4.17.0",
3
+ "version": "4.19.0",
4
4
  "config": {
5
- "version_short": "4.17"
5
+ "version_short": "4.19"
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",
@@ -115,6 +115,23 @@
115
115
  </p>
116
116
  </div>
117
117
  </div>
118
+
119
+ <div class="mw-card">
120
+ <div class="mw-card-body">
121
+ <h3 class="mw-card-title">
122
+ <span class="mw-card-title-icon mw-card-title-icon-lg">
123
+ <img src="https://m1well.com/images/header_logo.svg" alt="" />
124
+ </span>
125
+ A logo instead of an icon
126
+ </h3>
127
+ <hr class="mw-card-title-divider" />
128
+ <p class="mw-card-text">
129
+ The same slot takes an <code>&lt;img&gt;</code> - a product logo, a
130
+ portrait. Add <code>mw-card-title-icon-lg</code> there: a wordmark
131
+ inside the default 38px is a smudge.
132
+ </p>
133
+ </div>
134
+ </div>
118
135
  </div>
119
136
 
120
137
  <h3 class="mw-mb-4 mw-mt-6">Tech-Stack Cards</h3>
@@ -26,6 +26,19 @@
26
26
  </div>
27
27
  </div>
28
28
 
29
+ <h4 class="mw-mb-2 mw-mt-5">Block</h4>
30
+ <div class="mw-card mw-card-simple">
31
+ <div class="mw-info mw-info-primary mw-info-block">
32
+ <strong>The same frame, carrying a paragraph</strong>
33
+ <span
34
+ >The base is built for a short figure and centres it in a narrow column.
35
+ The block variant ranges its text left up to a measure, sets it in body
36
+ weight and leading, and stays put under the pointer - for a note, a
37
+ disclaimer, or a short explanation beside the thing it explains.</span
38
+ >
39
+ </div>
40
+ </div>
41
+
29
42
  <h4 class="mw-mb-2 mw-mt-5">Counters</h4>
30
43
  <div class="mw-card mw-card-simple">
31
44
  <div class="mw-d-flex mw-flex-wrap mw-items-center mw-gap-3">
@@ -124,6 +124,8 @@ $_active-prefix: 'dark';
124
124
  calc(100% - 2 * var(--mw-container-gutter))
125
125
  );
126
126
  --mw-section-padding-block: #{spacing('7')};
127
+ --mw-section-title-gap: #{spacing('7')};
128
+ --mw-scroll-hint-offset: #{spacing('9')};
127
129
 
128
130
  // Active theme - aliases onto the dark or light set above
129
131
  @each $name, $value in $_active-theme {
@@ -57,9 +57,9 @@ $_mw-avatar-colors: (
57
57
  }
58
58
 
59
59
  &-xl {
60
- width: 250px;
61
- height: 250px;
62
- border-width: 7px;
60
+ width: 210px;
61
+ height: 210px;
62
+ border-width: 6px;
63
63
  font-size: font-size('6xl');
64
64
  }
65
65
 
@@ -125,7 +125,7 @@ $_mw-avatar-colors: (
125
125
  margin-right: -23px;
126
126
  }
127
127
  .mw-avatar-xl {
128
- margin-right: -40px;
128
+ margin-right: -32px;
129
129
  }
130
130
 
131
131
  .mw-avatar:last-child {
@@ -152,9 +152,9 @@ $_mw-avatar-colors: (
152
152
  }
153
153
 
154
154
  &-xl {
155
- width: 170px;
156
- height: 170px;
157
- border-width: 6px;
155
+ width: 150px;
156
+ height: 150px;
157
+ border-width: 5px;
158
158
  }
159
159
  }
160
160
  }
@@ -24,6 +24,13 @@ $_mw-card-addon-colors: (
24
24
  color: var(--mw-card-addon-text-color, var(--mw-primary-accent-text-color));
25
25
  box-shadow: var(--mw-elevation-2);
26
26
  transition: var(--mw-transition);
27
+ overflow: hidden;
28
+
29
+ img {
30
+ width: 100%;
31
+ height: 100%;
32
+ object-fit: cover;
33
+ }
27
34
  }
28
35
 
29
36
  // Fading rule used by the title divider and the stack header underline
@@ -213,9 +220,18 @@ $_mw-card-addon-colors: (
213
220
  // <span class="mw-card-title-icon"><i class="fas fa-file-invoice"></i></span>
214
221
  // Invoices
215
222
  // </h3>
223
+ //
224
+ // An <img> works in the same slot - a product logo or a portrait instead of
225
+ // an icon. Reach for the -lg step there: a wordmark inside 38px is a smudge.
216
226
  &-title-icon {
217
227
  @include _card-icon-circle;
218
228
  font-size: font-size('lg');
229
+
230
+ &-lg {
231
+ width: 62px;
232
+ height: 62px;
233
+ font-size: font-size('2xl');
234
+ }
219
235
  }
220
236
 
221
237
  &-title-divider {
@@ -64,6 +64,42 @@ $_mw-info-colors: (
64
64
  font-weight: font-weight('medium');
65
65
  }
66
66
 
67
+ // Block variant: the same framed surface, carrying a paragraph instead of a
68
+ // value. The base is built for a short figure - it centres its content in a
69
+ // narrow column, sets it in medium weight and lifts on hover, which turns
70
+ // running text into a ragged stack that twitches under the pointer. This
71
+ // reads as a note instead: ranged left up to a measure, body weight, body
72
+ // leading, and it stays put.
73
+ //
74
+ // <div class="mw-info mw-info-primary mw-info-block">
75
+ // <strong>Why greyscale?</strong>
76
+ // <span>Because the frame is not the stage ...</span>
77
+ // </div>
78
+ &-block {
79
+ display: flex;
80
+ align-items: flex-start;
81
+ width: 100%;
82
+ max-width: 68ch;
83
+ margin-inline: auto;
84
+ padding: spacing('6') spacing('7');
85
+ font-weight: font-weight('normal');
86
+ line-height: 1.7;
87
+ text-align: left;
88
+ text-wrap: pretty;
89
+
90
+ &:hover {
91
+ box-shadow: none;
92
+ }
93
+
94
+ @include hover {
95
+ transform: none;
96
+ }
97
+
98
+ strong {
99
+ margin-bottom: spacing('2');
100
+ }
101
+ }
102
+
67
103
  // counter variant: big number + small label
68
104
  &-counter {
69
105
  min-width: spacing('12');
@@ -3,8 +3,7 @@
3
3
 
4
4
  .mw-footer {
5
5
  background: var(--mw-footer-background);
6
- padding: spacing('5') spacing('0');
7
- margin-top: spacing('6');
6
+ padding: spacing('7') spacing('0');
8
7
  border-top: 1px solid var(--mw-border-accent);
9
8
 
10
9
  &-top {
@@ -77,6 +77,51 @@
77
77
  }
78
78
  }
79
79
 
80
+ // The "scroll down" cue at the bottom of a hero. It belongs to the hero
81
+ // container and not to the flow below it: a hero fills the viewport, so the
82
+ // cue has to sit on its lower edge no matter how tall the content above is.
83
+ // Selector beats the `> *` rule above it, which would otherwise put the
84
+ // element back into flow.
85
+ .mw-container:has(.mw-hero) > .mw-scroll-hint {
86
+ position: absolute;
87
+ bottom: var(--mw-scroll-hint-offset);
88
+ left: 50%;
89
+ transform: translateX(-50%);
90
+ display: flex;
91
+ flex-direction: column;
92
+ align-items: center;
93
+ gap: spacing('2');
94
+ color: color-mix(in srgb, var(--mw-hero-text-color) 45%, transparent);
95
+ font-size: font-size('xs');
96
+ letter-spacing: 0.08em;
97
+ text-transform: uppercase;
98
+ text-decoration: none;
99
+ animation: mw-scroll-hint-float 2.2s var(--mw-ease-in-out) infinite;
100
+
101
+ @include hover {
102
+ color: var(--mw-hero-text-color);
103
+ }
104
+ }
105
+
106
+ @keyframes mw-scroll-hint-float {
107
+ 0%,
108
+ 100% {
109
+ transform: translate(-50%, 0);
110
+ }
111
+ 50% {
112
+ transform: translate(-50%, 7px);
113
+ }
114
+ }
115
+
116
+ // Same selector as the rule above on purpose: a media query adds no
117
+ // specificity, so a bare `.mw-scroll-hint` here loses to the `.mw-container`
118
+ // chain and the cue keeps bobbing for everyone who asked it not to.
119
+ @media (prefers-reduced-motion: reduce) {
120
+ .mw-container:has(.mw-hero) > .mw-scroll-hint {
121
+ animation: none;
122
+ }
123
+ }
124
+
80
125
  .mw-content {
81
126
  flex: 1;
82
127
  padding-top: spacing('7');
@@ -2,7 +2,7 @@
2
2
 
3
3
  .mw-section-title {
4
4
  font-size: font-size('3xl');
5
- margin-bottom: spacing('7');
5
+ margin-bottom: var(--mw-section-title-gap);
6
6
  text-align: center;
7
7
  position: relative;
8
8