maverick-wave 5.22.0 → 5.24.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 +15 -7
- package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +22 -14
- package/.claude/skills/mw-maverick-wave/references/components.md +123 -11
- package/.claude/skills/mw-maverick-wave/references/layout.md +35 -5
- package/.claude/skills/mw-maverick-wave/references/theming.md +5 -0
- package/CHANGELOG.md +14 -0
- package/README.md +2 -2
- package/index.html +80 -38
- package/maverick-wave.min.css +4 -4
- package/package.json +2 -2
- package/src/partials/contact-container.html +85 -0
- package/src/partials/documentation-container.html +3 -0
- package/src/partials/highlights-container.html +7 -5
- package/src/partials/leader-row-container.html +139 -0
- package/src/partials/lunch-menu-container.html +341 -0
- package/src/partials/page-header-container.html +2 -2
- package/src/partials/section-head-container.html +74 -0
- package/src/scss/abstracts/_functions.scss +38 -7
- package/src/scss/base/_base.scss +6 -1
- package/src/scss/components/_contact.scss +29 -0
- package/src/scss/components/_date-stamp.scss +141 -0
- package/src/scss/components/_index.scss +3 -0
- package/src/scss/components/_leader-row.scss +89 -0
- package/src/scss/components/_pricing.scss +4 -0
- package/src/scss/layout/_grid.scss +6 -0
- package/src/scss/layout/_main.scss +19 -0
- package/src/scss/layout/_section.scss +114 -44
|
@@ -156,9 +156,9 @@ keys at all (negative gap is invalid CSS and is not generated).
|
|
|
156
156
|
**Font sizes** (`mw-text-3xs` … `mw-text-6xl`): `3xs` 0.6, `2xs` 0.7, `xs` 0.8,
|
|
157
157
|
`sm` 0.9, `base` 1, `md` 1.1, `lg` 1.3, `xl` 1.5, `2xl` 1.8, `3xl` 2.2, `4xl` 2.5,
|
|
158
158
|
`5xl` 3, `6xl` 4.3 rem. The utility classes are single steps; `h1`, `h2`,
|
|
159
|
-
`mw-section-title` and `mw-section-subtitle` interpolate instead - `h1`
|
|
160
|
-
`3xl` to `5xl` between 375px and 768px, `h2` `2xl` to `4xl`, the
|
|
161
|
-
|
|
159
|
+
`mw-section-head-title` and `mw-section-subtitle` interpolate instead - `h1`
|
|
160
|
+
runs `3xl` to `5xl` between 375px and 768px, `h2` `2xl` to `4xl`, the head title
|
|
161
|
+
`2xl` to `4xl` up to 992px and the subtitle one step up to 576px. The endpoints are the values the old
|
|
162
162
|
breakpoint steps had, so a phone and a desktop look the same and only the widths
|
|
163
163
|
between them moved.
|
|
164
164
|
|
|
@@ -232,6 +232,8 @@ none of them survive into the compiled CSS. Full list in `references/theming.md`
|
|
|
232
232
|
end a key of `$font-sizes` or a plain rem/px length. The rem term is the
|
|
233
233
|
point: a vw-only clamp ignores the reader's font size and stops responding to
|
|
234
234
|
zoom. A headline passes `$to: 'xl'`.
|
|
235
|
+
- `fluid-container($min, $max, $from, $to)` - the same ramp in `cqi` against the
|
|
236
|
+
container. Use it instead of `fluid()` inside a `@container` block.
|
|
235
237
|
- `media-up($bp)` / `media-down($bp)` - the breakpoint map as a query.
|
|
236
238
|
- `touch-context($bp: 'md')` - coarse pointer _or_ narrow viewport, the condition
|
|
237
239
|
every target-size rule in the framework hangs under.
|
|
@@ -255,10 +257,13 @@ Everything below is documented in `references/components.md` unless marked other
|
|
|
255
257
|
**Containers** `mw-card` (+ `simple`, `lg`, `xl`, `stack`, badge, ribbon,
|
|
256
258
|
feature frame) ·
|
|
257
259
|
`mw-panel` · `mw-tile` · `mw-accordion` · `mw-tabs` · `mw-modal` ·
|
|
258
|
-
`mw-item-list` family · `mw-offer` (+ `-head`, `-name`)
|
|
260
|
+
`mw-item-list` family · `mw-offer` (+ `-head`, `-name`) ·
|
|
261
|
+
`mw-leader-row` (+ `-label`, `-value`, `-top`, `-dashed`, `-solid`) ·
|
|
262
|
+
`mw-date-stamp` (+ `-day`, `-date`, `-body`, `-today`) ·
|
|
263
|
+
`mw-contact` (+ `-row`, `-label`)
|
|
259
264
|
|
|
260
265
|
**Pricing** `mw-price` (+ `-amount`, `-fraction`, `-currency`, `-original`,
|
|
261
|
-
`-period`, `-word`, `-note`, `sm`/`lg`, `inline`, `center`, `plain`)
|
|
266
|
+
`-period`, `-word`, `-note`, `xs`/`sm`/`lg`, `inline`, `center`, `plain`)
|
|
262
267
|
|
|
263
268
|
**Data & status** `mw-table` (+ `subtle`, `sticky-head`, `cards`, `compact`,
|
|
264
269
|
`hover`, responsive wrappers) · `mw-kanban` (+ `plain`, `compact`) ·
|
|
@@ -290,8 +295,11 @@ feature frame) ·
|
|
|
290
295
|
`mw-input-group` · `mw-prefilled` · `mw-form` / `mw-form-group` /
|
|
291
296
|
`mw-form-actions` · `mw-login`
|
|
292
297
|
|
|
293
|
-
**Layout** (`references/layout.md`) `mw-main` · `mw-container`
|
|
294
|
-
`mw-
|
|
298
|
+
**Layout** (`references/layout.md`) `mw-main` · `mw-container` (+ `-narrow`) ·
|
|
299
|
+
`mw-content` ·
|
|
300
|
+
`mw-section` · `mw-section-head` (+ `-title`, `-intro`, `-numbered`, colours) ·
|
|
301
|
+
`mw-page-header` · `mw-grid-*`
|
|
302
|
+
(+ `mw-grid-even`) ·
|
|
295
303
|
`mw-columns-2/3` · `mw-row-split` · `mw-hero` (+ `mw-scroll-hint`, `-end`) ·
|
|
296
304
|
`mw-parallax` (+ `-media`, `-content`, `-dimmed`, `-sticky`, `-rise`,
|
|
297
305
|
`-slow`, `-pattern`) · `mw-footer`
|
|
@@ -143,11 +143,13 @@ accordion FAQ.
|
|
|
143
143
|
<!-- Features -->
|
|
144
144
|
<section id="features" class="mw-section mw-section-alternate">
|
|
145
145
|
<div class="mw-container">
|
|
146
|
-
<
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
146
|
+
<div class="mw-section-head">
|
|
147
|
+
<h2 class="mw-section-head-title">Features</h2>
|
|
148
|
+
<p class="mw-section-head-intro">
|
|
149
|
+
Three things every team asks about on the first call - and the
|
|
150
|
+
numbers behind them.
|
|
151
|
+
</p>
|
|
152
|
+
</div>
|
|
151
153
|
|
|
152
154
|
<!-- mw-reveal-stagger on the grid: every card rises as it scrolls
|
|
153
155
|
in, the second and third of each row a beat later -->
|
|
@@ -217,10 +219,12 @@ accordion FAQ.
|
|
|
217
219
|
<!-- Pricing -->
|
|
218
220
|
<section id="pricing" class="mw-section">
|
|
219
221
|
<div class="mw-container">
|
|
220
|
-
<
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
222
|
+
<div class="mw-section-head">
|
|
223
|
+
<h2 class="mw-section-head-title">Pricing</h2>
|
|
224
|
+
<p class="mw-section-head-intro">
|
|
225
|
+
Per workspace, per month. Every plan starts with a 14 day trial.
|
|
226
|
+
</p>
|
|
227
|
+
</div>
|
|
224
228
|
|
|
225
229
|
<!-- mw-offer pushes the price row to the bottom of the body, so the
|
|
226
230
|
three prices line up although the lists differ in length. The
|
|
@@ -316,10 +320,12 @@ accordion FAQ.
|
|
|
316
320
|
<!-- Voices -->
|
|
317
321
|
<section id="voices" class="mw-section mw-section-alternate">
|
|
318
322
|
<div class="mw-container">
|
|
319
|
-
<
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
+
<div class="mw-section-head">
|
|
324
|
+
<h2 class="mw-section-head-title">Voices</h2>
|
|
325
|
+
<p class="mw-section-head-intro">
|
|
326
|
+
What teams say after the first quarter.
|
|
327
|
+
</p>
|
|
328
|
+
</div>
|
|
323
329
|
|
|
324
330
|
<!-- Quotes of unequal length: columns, not a grid. The stagger
|
|
325
331
|
works on the column children just the same -->
|
|
@@ -367,7 +373,9 @@ accordion FAQ.
|
|
|
367
373
|
<!-- FAQ -->
|
|
368
374
|
<section id="faq" class="mw-section">
|
|
369
375
|
<div class="mw-container">
|
|
370
|
-
<
|
|
376
|
+
<div class="mw-section-head">
|
|
377
|
+
<h2 class="mw-section-head-title">FAQ</h2>
|
|
378
|
+
</div>
|
|
371
379
|
|
|
372
380
|
<div class="mw-accordion">
|
|
373
381
|
<div class="mw-accordion-item">
|
|
@@ -336,9 +336,9 @@ tag:
|
|
|
336
336
|
```
|
|
337
337
|
|
|
338
338
|
- Everything in the row is sized in `em` off `--mw-price-size`, so
|
|
339
|
-
`mw-price-sm` (1.5rem) and `mw-price-lg` (3rem) move
|
|
340
|
-
cents, unit and struck original included. Set the
|
|
341
|
-
size.
|
|
339
|
+
`mw-price-xs` (1.3rem), `mw-price-sm` (1.5rem) and `mw-price-lg` (3rem) move
|
|
340
|
+
the whole row at once - cents, unit and struck original included. Set the
|
|
341
|
+
token yourself for any other size.
|
|
342
342
|
- `mw-price-original` is muted **and** struck, and it takes its own line
|
|
343
343
|
**above** the new price. Muted alone reads as a footnote; the line is what
|
|
344
344
|
says this is no longer the price. The rule is drawn explicitly, because the
|
|
@@ -351,8 +351,8 @@ tag:
|
|
|
351
351
|
baseline, not raised to the cap height - raised cents are a discounter's idiom
|
|
352
352
|
and make a service price read cheaper than it is.
|
|
353
353
|
- `mw-price-currency` and `mw-price-period` stop shrinking at 0.8rem, and
|
|
354
|
-
`mw-price-original` at 0.9rem.
|
|
355
|
-
|
|
354
|
+
`mw-price-original` at 0.9rem. At `mw-price-xs` the `em` chain would put them
|
|
355
|
+
under 10px, which is where the floor earns its keep.
|
|
356
356
|
- `mw-price-word` for "On request" or "Free" - bold, so it holds the same slot in
|
|
357
357
|
a row of cards, but set well below a figure. Its line box is scaled back up to
|
|
358
358
|
the amount's, so a word and a number in neighbouring cards land on one line.
|
|
@@ -361,12 +361,12 @@ tag:
|
|
|
361
361
|
- A `mw-tag` or `mw-badge` placed directly in the row is centred against the
|
|
362
362
|
digits rather than hung off their baseline.
|
|
363
363
|
|
|
364
|
-
| Class
|
|
365
|
-
|
|
|
366
|
-
| `mw-price-sm/lg`
|
|
367
|
-
| `mw-price-inline`
|
|
368
|
-
| `mw-price-center`
|
|
369
|
-
| `mw-price-plain`
|
|
364
|
+
| Class | What it does |
|
|
365
|
+
| ------------------- | ---------------------------------------------- |
|
|
366
|
+
| `mw-price-xs/sm/lg` | Retunes `--mw-price-size`, everything follows |
|
|
367
|
+
| `mw-price-inline` | Old price in front of the new one, on one line |
|
|
368
|
+
| `mw-price-center` | Centres the row |
|
|
369
|
+
| `mw-price-plain` | Body colour instead of the brand |
|
|
370
370
|
|
|
371
371
|
A struck-through price is a visual convention a screen reader does not pass on -
|
|
372
372
|
`<s>` is announced by almost none of them. Wherever an old and a new price stand
|
|
@@ -1473,6 +1473,81 @@ deprecated). Any card fits into the content wrapper.
|
|
|
1473
1473
|
across it. Nothing to switch on. It is skipped on `mw-avatar-initials`, on
|
|
1474
1474
|
touch, under `prefers-reduced-motion` and under `mw-hover-static`.
|
|
1475
1475
|
|
|
1476
|
+
## Date stamp
|
|
1477
|
+
|
|
1478
|
+
The date on a dated card - an event, a changelog entry, a day on a menu. It
|
|
1479
|
+
answers to the **card**, not the viewport: narrow, it is a muted line above the
|
|
1480
|
+
title; once the card is wide enough that a single column would leave its right
|
|
1481
|
+
half empty, the same markup becomes a column on the left.
|
|
1482
|
+
|
|
1483
|
+
```html
|
|
1484
|
+
<article class="mw-card mw-offer">
|
|
1485
|
+
<div class="mw-card-body">
|
|
1486
|
+
<p class="mw-date-stamp mw-date-stamp-today">
|
|
1487
|
+
<span class="mw-date-stamp-day">Fri</span>
|
|
1488
|
+
<span class="mw-date-stamp-date">18.09.</span>
|
|
1489
|
+
</p>
|
|
1490
|
+
<div class="mw-date-stamp-body">
|
|
1491
|
+
<h4 class="mw-text-base mw-text-bold mw-mb-2">Baked fish fillet</h4>
|
|
1492
|
+
<p class="mw-text-sm mw-text-muted mw-mb-0">In beer batter.</p>
|
|
1493
|
+
</div>
|
|
1494
|
+
<p class="mw-price mw-price-xs">
|
|
1495
|
+
<span class="mw-price-amount">11.90</span>
|
|
1496
|
+
<span class="mw-price-currency">Euro</span>
|
|
1497
|
+
</p>
|
|
1498
|
+
</div>
|
|
1499
|
+
</article>
|
|
1500
|
+
```
|
|
1501
|
+
|
|
1502
|
+
- `mw-date-stamp-body` wraps everything that is not the stamp or the price. It
|
|
1503
|
+
is `display: contents` on a narrow card, so the body still sees the title and
|
|
1504
|
+
the price as its own children - which is what `mw-offer` selects on. On a wide
|
|
1505
|
+
card it becomes the middle column.
|
|
1506
|
+
- The price is a **sibling** of the wrapper, not inside it. Give the card one
|
|
1507
|
+
and it gets a third column at the right edge; leave it out and the card is two
|
|
1508
|
+
columns. With more than one dish per card, put the price on a
|
|
1509
|
+
`mw-leader-row` with the dish instead - an empty third track would still
|
|
1510
|
+
charge the card a gap.
|
|
1511
|
+
- Write the day as `Fri`, not `FRI` - the uppercase is `text-transform`, so a
|
|
1512
|
+
screen reader still reads a word rather than three letters.
|
|
1513
|
+
- Day column width, day font size, the column gap and the card's block padding
|
|
1514
|
+
all ramp with the **card**, from 420px to 900px wide, via
|
|
1515
|
+
`fluid-container()`. A narrow card in a wide window gets narrow-card sizing -
|
|
1516
|
+
which is the point of putting the switch in a container query at all.
|
|
1517
|
+
- `mw-date-stamp-today` drops the muting for a **fill**: on a wide card it spans
|
|
1518
|
+
the full card height, rounded to the card's own left corners and cut square
|
|
1519
|
+
against the content. A text colour would compete with the price, which is
|
|
1520
|
+
already the brand colour.
|
|
1521
|
+
- Cards in a stack want `mw-grid-even` next to `mw-grid-1`, or the card with the
|
|
1522
|
+
longer description ends up taller than the rest of the week.
|
|
1523
|
+
|
|
1524
|
+
## Contact
|
|
1525
|
+
|
|
1526
|
+
How to reach someone - postal address, phone, mail. It belongs on an
|
|
1527
|
+
`<address>`, and undoing that element's italics is most of what the component
|
|
1528
|
+
does; the rest is a label column wide enough that the values line up.
|
|
1529
|
+
|
|
1530
|
+
```html
|
|
1531
|
+
<address class="mw-contact">
|
|
1532
|
+
<p class="mw-text-bold">Gasthaus Lamm</p>
|
|
1533
|
+
<p>Marktplatz 3<br />72622 Musterhausen</p>
|
|
1534
|
+
<p class="mw-contact-row">
|
|
1535
|
+
<span class="mw-contact-label">Phone</span>
|
|
1536
|
+
<a class="mw-link" href="tel:+497123456789">07123 456789</a>
|
|
1537
|
+
</p>
|
|
1538
|
+
</address>
|
|
1539
|
+
```
|
|
1540
|
+
|
|
1541
|
+
- `<address>` is for the contact details of its nearest `<article>` or of the
|
|
1542
|
+
page - not for any postal address that happens to be on it.
|
|
1543
|
+
- The label column is 5rem and fixed. An auto column is as wide as its own word,
|
|
1544
|
+
so "Phone" and "Email" would start their values in different places.
|
|
1545
|
+
- Wrap phone and mail in `tel:` and `mailto:` links and mark them `mw-link` -
|
|
1546
|
+
in a block of plain lines an unstyled link reads as text.
|
|
1547
|
+
- Opening hours are **not** part of this. A day, its times and a line between
|
|
1548
|
+
them is a `mw-leader-row` in a `<dl>`, one row per day, and a note for the
|
|
1549
|
+
rest.
|
|
1550
|
+
|
|
1476
1551
|
## Item lists
|
|
1477
1552
|
|
|
1478
1553
|
Layout containers for arbitrary children - the children need no classes.
|
|
@@ -1533,6 +1608,43 @@ rest, see `references/forms.md`) work here too. Row height is a list concern -
|
|
|
1533
1608
|
use the list's own `-compact` / `-large` modifiers rather than
|
|
1534
1609
|
`mw-checkbox-sm` / `-lg`, which sit on the wrong element to reach the box.
|
|
1535
1610
|
|
|
1611
|
+
## Leader row
|
|
1612
|
+
|
|
1613
|
+
A label on the left, its value on the right, a dotted line bridging the gap -
|
|
1614
|
+
the row a menu, a table of contents and an invoice all draw. The markup is two
|
|
1615
|
+
spans; the line is the row's own `::before`, so it stays out of the
|
|
1616
|
+
accessibility tree and no filler element needs `aria-hidden`.
|
|
1617
|
+
|
|
1618
|
+
```html
|
|
1619
|
+
<p class="mw-leader-row mw-leader-row-top">
|
|
1620
|
+
<span class="mw-leader-row-label mw-text-bold">Roast pork with dumpling</span>
|
|
1621
|
+
<span class="mw-leader-row-value mw-text-bold mw-text-primary">17.50</span>
|
|
1622
|
+
</p>
|
|
1623
|
+
```
|
|
1624
|
+
|
|
1625
|
+
- Label and value is what `<dl>` is for, and since HTML 5.2 a `<div>` may group
|
|
1626
|
+
a `<dt>` and its `<dd>` inside one - so the semantic version costs no extra
|
|
1627
|
+
element over the `<p>`. Put `mw-leader-row` on that `<div>`. Use it where the
|
|
1628
|
+
pair **is** the content; where every row also carries a description, a `<p>`
|
|
1629
|
+
stays simpler.
|
|
1630
|
+
- `mw-leader-row-top` keeps the value beside the **first** line of a wrapping
|
|
1631
|
+
label instead of the last. On a menu that is where the price belongs - next to
|
|
1632
|
+
the dish, not somewhere down in its description.
|
|
1633
|
+
- A second `mw-leader-row-value` needs no extra class. Both sit after the
|
|
1634
|
+
leader, with a mark in the leader's colour between them - "11.30 - 14.00 |
|
|
1635
|
+
17.00 - 23.00". Without it the pair reads as one long range.
|
|
1636
|
+
- Values are set in tabular figures and never break, so a column of them lines
|
|
1637
|
+
up. The label wraps between its words and stops at its longest one; past that
|
|
1638
|
+
the whole row wraps, with the values dropping under the label. Nothing shrinks
|
|
1639
|
+
to one letter per line.
|
|
1640
|
+
- Keep `mw-price` out of a leader row: it sets its own baseline and the leader
|
|
1641
|
+
would no longer meet it. Plain text in the value span, or the price in a
|
|
1642
|
+
column of its own.
|
|
1643
|
+
|
|
1644
|
+
`mw-leader-row-dashed` and `mw-leader-row-solid` swap the line style; a single
|
|
1645
|
+
row retunes with `--mw-leader-row-color`, `--mw-leader-row-style` and
|
|
1646
|
+
`--mw-leader-row-width`.
|
|
1647
|
+
|
|
1536
1648
|
## HTML lists
|
|
1537
1649
|
|
|
1538
1650
|
`mw-list` is the base (spacing for `li`), combined with one of:
|
|
@@ -35,6 +35,11 @@
|
|
|
35
35
|
desktop; stepping the gutter at a breakpoint instead would make the container
|
|
36
36
|
jump backwards at the step. Both values are tokens,
|
|
37
37
|
`--mw-container-gutter` and `--mw-container-width`.
|
|
38
|
+
- `mw-container-narrow` sits **inside** a `mw-container` and gives the content
|
|
39
|
+
80% of it, back to 90% below `lg` and the full width below `md`. For a column
|
|
40
|
+
of full-width cards, where a 1200px line leaves more empty card than content.
|
|
41
|
+
It centers itself; put nothing else in it that has to line up with the
|
|
42
|
+
headings outside.
|
|
38
43
|
- `mw-content` (`flex: 1` + top padding) is the alternative to `mw-section` when
|
|
39
44
|
a page has one single content area. `mw-content-centered` centers it
|
|
40
45
|
vertically over the full viewport - login pages, error pages.
|
|
@@ -236,15 +241,22 @@ pointing at the trigger in every combination.
|
|
|
236
241
|
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
237
242
|
| `mw-section` | Vertical rhythm for a page band - `--mw-section-padding-block`, 3.3rem (2.5rem below `md`, 1.75rem below `sm`); point it at `--mw-section-padding-fluid` for spacing that grows with the screen |
|
|
238
243
|
| `mw-section-alternate` | Diagonal pattern background; combine with `mw-section` |
|
|
239
|
-
| `mw-section-
|
|
240
|
-
| `mw-section-
|
|
241
|
-
| `mw-section-
|
|
244
|
+
| `mw-section-head` | The opening of a section: hairline rule, a mark on its left end, title and lead - all on one left edge. Variants `-secondary`, `-success`, `-warning`, `-danger`, `-info` recolour the mark |
|
|
245
|
+
| `mw-section-head-title` | The heading inside it, `2xl` growing to `4xl` up to 992px, tight tracking |
|
|
246
|
+
| `mw-section-head-intro` | The lead under it - muted, 65 characters, and from `md` up at most four fifths of the container |
|
|
247
|
+
| `mw-section-head-numbered` | Adds the running number at the right end of the rule; the browser counts, restarting per `mw-main` |
|
|
248
|
+
| `mw-section-subtitle` | Left-aligned heading with a thin secondary underline, `xl` growing to `2xl` up to 576px - the level inside a section |
|
|
242
249
|
| `mw-section-nav` + `mw-section-btn` | Sticky single-row strip of outline-style jump links; parks under the header and scrolls sideways when it overflows |
|
|
243
250
|
|
|
244
251
|
```html
|
|
245
252
|
<section class="mw-section mw-section-alternate">
|
|
246
253
|
<div class="mw-container">
|
|
247
|
-
<
|
|
254
|
+
<div class="mw-section-head mw-section-head-numbered">
|
|
255
|
+
<h2 class="mw-section-head-title">Components</h2>
|
|
256
|
+
<p class="mw-section-head-intro">
|
|
257
|
+
The everyday parts - buttons, tags, alerts and their many friends.
|
|
258
|
+
</p>
|
|
259
|
+
</div>
|
|
248
260
|
<nav class="mw-section-nav">
|
|
249
261
|
<a href="#buttons" class="mw-section-btn"
|
|
250
262
|
><i class="fas fa-hand-pointer"></i> Buttons</a
|
|
@@ -257,13 +269,26 @@ pointing at the trigger in every combination.
|
|
|
257
269
|
</section>
|
|
258
270
|
```
|
|
259
271
|
|
|
272
|
+
**Why the head is left-aligned and has no centred variant.** Centred running
|
|
273
|
+
text moves its own left edge with every line break, so the eye has to find the
|
|
274
|
+
start of each line instead of returning to a fixed position - unnoticeable over
|
|
275
|
+
two lines, tiring from the third or fourth on. Aligned, the title, the lead and
|
|
276
|
+
the content below share one edge, and that shared edge is what makes a band of
|
|
277
|
+
elements read as one section. A hero, a single call to action or a caption is
|
|
278
|
+
short enough to centre; a section head is not, so the framework does not offer
|
|
279
|
+
the choice.
|
|
280
|
+
|
|
281
|
+
Its tokens: `--mw-section-head-gap` (space to the content below),
|
|
282
|
+
`--mw-section-head-pad` (rule to title), `--mw-section-head-mark-width` (80px)
|
|
283
|
+
and `--mw-section-head-mark-color`.
|
|
284
|
+
|
|
260
285
|
The strip sticks at `--mw-header-height` and is `--mw-section-nav-height` tall
|
|
261
286
|
(3.7rem). Anything it can cover on a jump needs the sum as `scroll-margin-top`;
|
|
262
287
|
a block wrapping a `mw-section-subtitle` gets that from the framework already.
|
|
263
288
|
|
|
264
289
|
## Page header
|
|
265
290
|
|
|
266
|
-
The application counterpart to `mw-section-
|
|
291
|
+
The application counterpart to `mw-section-head`: title and subtitle left,
|
|
267
292
|
actions right, wrapping when it gets tight. Below `sm` the actions take the full
|
|
268
293
|
width.
|
|
269
294
|
|
|
@@ -459,6 +484,11 @@ way.
|
|
|
459
484
|
| `mw-grid-flex` | 12 columns + `mw-col-span-1` … `mw-col-span-12` | single column below `md` |
|
|
460
485
|
| `mw-grid` | no template, just grid + gap | - |
|
|
461
486
|
|
|
487
|
+
`mw-grid-even` is a modifier, not a grid - add it to one of the above and every
|
|
488
|
+
row becomes as tall as the tallest instead of as tall as its own contents. For a
|
|
489
|
+
column of cards that should end on one line even when one of them carries an
|
|
490
|
+
extra sentence.
|
|
491
|
+
|
|
462
492
|
Every one of them has a `-lg` twin with a wider gap (2.5rem instead of 1.35rem):
|
|
463
493
|
`mw-grid-2-lg`, `mw-grid-3-lg`, `mw-grid-4-lg`, `mw-grid-5-lg`, `mw-grid-1-lg`,
|
|
464
494
|
`mw-grid-auto-lg`, `mw-grid-flex-lg`, `mw-grid-lg`.
|
|
@@ -389,6 +389,11 @@ Functions read the maps: `spacing('4')`, `font-size('lg')`,
|
|
|
389
389
|
responding to zoom. The default range ends at `md` because that is where the
|
|
390
390
|
stepped heading sizes it replaces reached their largest value - a headline
|
|
391
391
|
that should keep growing passes `$to: 'xl'`.
|
|
392
|
+
- `fluid-container($min, $max, $from, $to)` - the same ramp measured against the
|
|
393
|
+
container instead of the viewport, so the slope lands in `cqi`. For anything
|
|
394
|
+
inside a `@container` block: sizing there off `vw` hands a 440px card in a
|
|
395
|
+
1400px window the measurements a 900px card was drawn for. The endpoints are
|
|
396
|
+
container widths, not breakpoint names, because a container has none.
|
|
392
397
|
- `media-up($bp)` / `media-down($bp)` - the `$breakpoints` map as range syntax,
|
|
393
398
|
`width >= bp` and `width < bp`, so the two never overlap at the breakpoint.
|
|
394
399
|
- `touch-context($bp: 'md')` - coarse pointer _or_ narrow viewport. Every
|
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,20 @@ Patch releases are only for test purposes - here I only document major and minor
|
|
|
6
6
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
7
7
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
8
8
|
|
|
9
|
+
## [5.24.0] - 2026-09-20
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- section header overhaul
|
|
14
|
+
|
|
15
|
+
## [5.23.0] - 2026-09-20
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- leader-row
|
|
20
|
+
- lunch menu with 2 variants
|
|
21
|
+
- contact cards
|
|
22
|
+
|
|
9
23
|
## [5.22.0] - 2026-09-19
|
|
10
24
|
|
|
11
25
|
### Fixed
|
package/README.md
CHANGED
|
@@ -45,12 +45,12 @@ The result is a framework that balances utility with simplicity, offering develo
|
|
|
45
45
|
<title>My MaverickWave Project</title>
|
|
46
46
|
<link
|
|
47
47
|
rel="stylesheet"
|
|
48
|
-
href="https://cdn.jsdelivr.net/npm/maverick-wave@5.
|
|
48
|
+
href="https://cdn.jsdelivr.net/npm/maverick-wave@5.24.0/maverick-wave.min.css"
|
|
49
49
|
/>
|
|
50
50
|
</head>
|
|
51
51
|
<body>
|
|
52
52
|
<!-- Your content here -->
|
|
53
|
-
<script src="https://cdn.jsdelivr.net/npm/maverick-wave@5.
|
|
53
|
+
<script src="https://cdn.jsdelivr.net/npm/maverick-wave@5.24.0/maverick-wave.min.js"></script>
|
|
54
54
|
</body>
|
|
55
55
|
</html>
|
|
56
56
|
```
|
package/index.html
CHANGED
|
@@ -576,7 +576,9 @@
|
|
|
576
576
|
<!-- Get started section -->
|
|
577
577
|
<section id="get-started" class="mw-section">
|
|
578
578
|
<div class="mw-container">
|
|
579
|
-
<
|
|
579
|
+
<div class="mw-section-head">
|
|
580
|
+
<h2 class="mw-section-head-title">Get started</h2>
|
|
581
|
+
</div>
|
|
580
582
|
@@include('./src/partials/get-started-container.html')
|
|
581
583
|
</div>
|
|
582
584
|
</section>
|
|
@@ -584,7 +586,9 @@
|
|
|
584
586
|
<!-- Documentation section -->
|
|
585
587
|
<section id="documentation" class="mw-section mw-section-alternate">
|
|
586
588
|
<div class="mw-container">
|
|
587
|
-
<
|
|
589
|
+
<div class="mw-section-head">
|
|
590
|
+
<h2 class="mw-section-head-title">Documentation</h2>
|
|
591
|
+
</div>
|
|
588
592
|
@@include('./src/partials/documentation-container.html')
|
|
589
593
|
</div>
|
|
590
594
|
</section>
|
|
@@ -592,11 +596,13 @@
|
|
|
592
596
|
<!-- Foundations section -->
|
|
593
597
|
<section id="foundations" class="mw-section">
|
|
594
598
|
<div class="mw-container">
|
|
595
|
-
<
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
599
|
+
<div class="mw-section-head">
|
|
600
|
+
<h2 class="mw-section-head-title">Foundations</h2>
|
|
601
|
+
<p class="mw-section-head-intro">
|
|
602
|
+
The raw material - type, color, spacing and the small utilities
|
|
603
|
+
everything else is built from.
|
|
604
|
+
</p>
|
|
605
|
+
</div>
|
|
600
606
|
<nav class="mw-section-nav">
|
|
601
607
|
<a href="#typography" class="mw-section-btn">Typography</a>
|
|
602
608
|
<a href="#colors" class="mw-section-btn">Main Colors</a>
|
|
@@ -643,12 +649,15 @@
|
|
|
643
649
|
<!-- Layout section -->
|
|
644
650
|
<section id="layout" class="mw-section mw-section-alternate">
|
|
645
651
|
<div class="mw-container">
|
|
646
|
-
<
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
652
|
+
<div class="mw-section-head">
|
|
653
|
+
<h2 class="mw-section-head-title">Layout</h2>
|
|
654
|
+
<p class="mw-section-head-intro">
|
|
655
|
+
The bones of a page - grids, cards, panels and the containers that
|
|
656
|
+
hold content together.
|
|
657
|
+
</p>
|
|
658
|
+
</div>
|
|
651
659
|
<nav class="mw-section-nav">
|
|
660
|
+
<a href="#section-head" class="mw-section-btn">Section Head</a>
|
|
652
661
|
<a href="#grid" class="mw-section-btn">Grid System</a>
|
|
653
662
|
<a href="#cards" class="mw-section-btn">Cards</a>
|
|
654
663
|
<a href="#panels" class="mw-section-btn">Panels</a>
|
|
@@ -659,10 +668,16 @@
|
|
|
659
668
|
<a href="#modals" class="mw-section-btn">Modals</a>
|
|
660
669
|
<a href="#html-lists" class="mw-section-btn">HTML Lists</a>
|
|
661
670
|
<a href="#item-lists" class="mw-section-btn">Item Lists</a>
|
|
671
|
+
<a href="#leader-row" class="mw-section-btn">Leader Row</a>
|
|
662
672
|
<a href="#stepper" class="mw-section-btn">Stepper</a>
|
|
663
673
|
<a href="#parallax" class="mw-section-btn">Parallax</a>
|
|
664
674
|
</nav>
|
|
665
675
|
|
|
676
|
+
<!-- Section head container -->
|
|
677
|
+
<div id="section-head">
|
|
678
|
+
@@include('./src/partials/section-head-container.html')
|
|
679
|
+
</div>
|
|
680
|
+
|
|
666
681
|
<!-- Grid container -->
|
|
667
682
|
<div id="grid">@@include('./src/partials/grid-container.html')</div>
|
|
668
683
|
|
|
@@ -705,6 +720,11 @@
|
|
|
705
720
|
@@include('./src/partials/item-lists-container.html')
|
|
706
721
|
</div>
|
|
707
722
|
|
|
723
|
+
<!-- Leader Row container -->
|
|
724
|
+
<div id="leader-row">
|
|
725
|
+
@@include('./src/partials/leader-row-container.html')
|
|
726
|
+
</div>
|
|
727
|
+
|
|
708
728
|
<!-- Stepper container -->
|
|
709
729
|
<div id="stepper">
|
|
710
730
|
@@include('./src/partials/stepper-container.html')
|
|
@@ -736,11 +756,13 @@
|
|
|
736
756
|
<!-- Components section -->
|
|
737
757
|
<section id="components" class="mw-section">
|
|
738
758
|
<div class="mw-container">
|
|
739
|
-
<
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
759
|
+
<div class="mw-section-head">
|
|
760
|
+
<h2 class="mw-section-head-title">Components</h2>
|
|
761
|
+
<p class="mw-section-head-intro">
|
|
762
|
+
The everyday parts - buttons, tags, alerts and their many friends,
|
|
763
|
+
ready to drop in.
|
|
764
|
+
</p>
|
|
765
|
+
</div>
|
|
744
766
|
<nav class="mw-section-nav">
|
|
745
767
|
<a href="#buttons" class="mw-section-btn">Buttons</a>
|
|
746
768
|
<a href="#button-bar" class="mw-section-btn">Button Bar</a>
|
|
@@ -843,11 +865,13 @@
|
|
|
843
865
|
<!-- Forms section -->
|
|
844
866
|
<section id="forms" class="mw-section mw-section-alternate">
|
|
845
867
|
<div class="mw-container">
|
|
846
|
-
<
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
868
|
+
<div class="mw-section-head">
|
|
869
|
+
<h2 class="mw-section-head-title">Forms</h2>
|
|
870
|
+
<p class="mw-section-head-intro">
|
|
871
|
+
Inputs, selects, toggles and validation - fields and buttons share
|
|
872
|
+
one height scale by construction.
|
|
873
|
+
</p>
|
|
874
|
+
</div>
|
|
851
875
|
<nav class="mw-section-nav">
|
|
852
876
|
<a href="#form-elements" class="mw-section-btn">Form Elements</a>
|
|
853
877
|
<a href="#input-group" class="mw-section-btn">Input Group</a>
|
|
@@ -888,17 +912,21 @@
|
|
|
888
912
|
<!-- Data & display section -->
|
|
889
913
|
<section id="data-display" class="mw-section">
|
|
890
914
|
<div class="mw-container">
|
|
891
|
-
<
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
915
|
+
<div class="mw-section-head">
|
|
916
|
+
<h2 class="mw-section-head-title">Data & Display</h2>
|
|
917
|
+
<p class="mw-section-head-intro">
|
|
918
|
+
Tables, boards, timelines and long-form content - everything that
|
|
919
|
+
shows real data.
|
|
920
|
+
</p>
|
|
921
|
+
</div>
|
|
896
922
|
<nav class="mw-section-nav">
|
|
897
923
|
<a href="#page-header" class="mw-section-btn">Page Header</a>
|
|
898
924
|
<a href="#meta-info" class="mw-section-btn">Meta Info</a>
|
|
899
925
|
<a href="#tables" class="mw-section-btn">Tables</a>
|
|
900
926
|
<a href="#kanban" class="mw-section-btn">Kanban</a>
|
|
901
927
|
<a href="#calendar" class="mw-section-btn">Calendar</a>
|
|
928
|
+
<a href="#lunch-menu" class="mw-section-btn">Lunch Menu</a>
|
|
929
|
+
<a href="#contact" class="mw-section-btn">Contact</a>
|
|
902
930
|
<a href="#pagination" class="mw-section-btn">Pagination</a>
|
|
903
931
|
<a href="#timelines" class="mw-section-btn">Timelines</a>
|
|
904
932
|
<a href="#gallery" class="mw-section-btn">Image Gallery</a>
|
|
@@ -937,6 +965,16 @@
|
|
|
937
965
|
@@include('./src/partials/calendar-container.html')
|
|
938
966
|
</div>
|
|
939
967
|
|
|
968
|
+
<!-- Lunch Menu container -->
|
|
969
|
+
<div id="lunch-menu">
|
|
970
|
+
@@include('./src/partials/lunch-menu-container.html')
|
|
971
|
+
</div>
|
|
972
|
+
|
|
973
|
+
<!-- Contact container -->
|
|
974
|
+
<div id="contact">
|
|
975
|
+
@@include('./src/partials/contact-container.html')
|
|
976
|
+
</div>
|
|
977
|
+
|
|
940
978
|
<!-- Pagination container -->
|
|
941
979
|
<div id="pagination">
|
|
942
980
|
@@include('./src/partials/pagination-container.html')
|
|
@@ -982,23 +1020,27 @@
|
|
|
982
1020
|
<!-- History section -->
|
|
983
1021
|
<section id="history" class="mw-section mw-section-alternate">
|
|
984
1022
|
<div class="mw-container">
|
|
985
|
-
<
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
1023
|
+
<div class="mw-section-head">
|
|
1024
|
+
<h2 class="mw-section-head-title">History</h2>
|
|
1025
|
+
<p class="mw-section-head-intro">
|
|
1026
|
+
The major releases so far. Everything in between - the minors and
|
|
1027
|
+
the patch releases - sits in the changelog.
|
|
1028
|
+
</p>
|
|
1029
|
+
</div>
|
|
990
1030
|
@@include('./src/partials/history-container.html')
|
|
991
1031
|
</div>
|
|
992
1032
|
</section>
|
|
993
1033
|
<!-- Preview section, showcase only - see the partial -->
|
|
994
1034
|
<section id="preview" class="mw-section">
|
|
995
1035
|
<div class="mw-container">
|
|
996
|
-
<
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1036
|
+
<div class="mw-section-head">
|
|
1037
|
+
<h2 class="mw-section-head-title">Preview</h2>
|
|
1038
|
+
<p class="mw-section-head-intro">
|
|
1039
|
+
One page-shaped example, so the variant switches in the palette
|
|
1040
|
+
panel have something to act on that is not a component gallery.
|
|
1041
|
+
Open the panel and the page lands here.
|
|
1042
|
+
</p>
|
|
1043
|
+
</div>
|
|
1002
1044
|
@@include('./src/partials/preview-container.html')
|
|
1003
1045
|
</div>
|
|
1004
1046
|
</section>
|