maverick-wave 4.27.0 → 5.0.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.
Files changed (140) hide show
  1. package/.claude/settings.local.json +29 -1
  2. package/.claude/skills/mw-maverick-wave/SKILL.md +42 -25
  3. package/.claude/skills/mw-maverick-wave/examples/angular-services.md +16 -4
  4. package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +13 -4
  5. package/.claude/skills/mw-maverick-wave/references/components.md +90 -5
  6. package/.claude/skills/mw-maverick-wave/references/forms.md +14 -2
  7. package/.claude/skills/mw-maverick-wave/references/javascript.md +18 -4
  8. package/.claude/skills/mw-maverick-wave/references/layout.md +53 -19
  9. package/.claude/skills/mw-maverick-wave/references/theming.md +38 -1
  10. package/.impeccable/config.local.json +5 -0
  11. package/.impeccable/hook.cache.json +1 -0
  12. package/CHANGELOG.md +17 -0
  13. package/CLAUDE.md +5 -5
  14. package/README.md +48 -4
  15. package/index.html +19 -38
  16. package/maverick-wave.min.css +14 -12
  17. package/maverick-wave.min.js +1 -1
  18. package/package.json +2 -2
  19. package/scripts/verify.js +27 -2
  20. package/src/js/main.js +266 -75
  21. package/src/partials/accordions-container.html +6 -10
  22. package/src/partials/alerts-container.html +6 -6
  23. package/src/partials/announcement-container.html +5 -5
  24. package/src/partials/avatars-container.html +85 -17
  25. package/src/partials/badges-container.html +6 -6
  26. package/src/partials/blog-posts-container.html +11 -12
  27. package/src/partials/buttons-container.html +3 -3
  28. package/src/partials/cards-container.html +26 -9
  29. package/src/partials/code-container.html +5 -5
  30. package/src/partials/content-slider-container.html +5 -4
  31. package/src/partials/divider-container.html +7 -7
  32. package/src/partials/dropdown-container.html +2 -2
  33. package/src/partials/empty-state-container.html +5 -5
  34. package/src/partials/footer-container.html +21 -18
  35. package/src/partials/form-elements-container.html +14 -14
  36. package/src/partials/gallery-container.html +16 -8
  37. package/src/partials/get-started-container.html +4 -8
  38. package/src/partials/header-container.html +18 -7
  39. package/src/partials/header-utilities-container.html +192 -5
  40. package/src/partials/home-container.html +10 -20
  41. package/src/partials/input-group-container.html +11 -2
  42. package/src/partials/kbd-container.html +1 -1
  43. package/src/partials/login-container.html +5 -1
  44. package/src/partials/media-container.html +2 -2
  45. package/src/partials/modals-container.html +22 -32
  46. package/src/partials/pricing-container.html +9 -9
  47. package/src/partials/skeleton-container.html +6 -6
  48. package/src/partials/stepper-container.html +2 -2
  49. package/src/partials/tables-container.html +12 -12
  50. package/src/partials/tabs-container.html +17 -27
  51. package/src/partials/tags-container.html +23 -17
  52. package/src/partials/techstack-bucket-container.html +13 -0
  53. package/src/partials/tiles-container.html +26 -9
  54. package/src/partials/typography-container.html +7 -6
  55. package/src/partials/utilities-container.html +35 -15
  56. package/src/scss/_layers.scss +10 -0
  57. package/src/scss/abstracts/_index.scss +6 -0
  58. package/src/scss/abstracts/_mixins.scss +61 -153
  59. package/src/scss/abstracts/_variables.scss +123 -319
  60. package/src/scss/base/_base.scss +170 -190
  61. package/src/scss/base/_reset.scss +106 -104
  62. package/src/scss/base/_typography.scss +153 -151
  63. package/src/scss/components/_accordions.scss +97 -97
  64. package/src/scss/components/_alerts.scss +71 -70
  65. package/src/scss/components/_announcement.scss +71 -70
  66. package/src/scss/components/_avatars.scss +130 -142
  67. package/src/scss/components/_badge.scss +131 -132
  68. package/src/scss/components/_blog-post.scss +223 -220
  69. package/src/scss/components/_breadcrumbs.scss +93 -92
  70. package/src/scss/components/_button-bar.scss +102 -110
  71. package/src/scss/components/_buttons.scss +319 -324
  72. package/src/scss/components/_calendar.scss +251 -252
  73. package/src/scss/components/_cards.scss +359 -386
  74. package/src/scss/components/_code.scss +190 -194
  75. package/src/scss/components/_coming-soon.scss +77 -75
  76. package/src/scss/components/_content-slider.scss +90 -89
  77. package/src/scss/components/_divider.scss +55 -53
  78. package/src/scss/components/_dropdown.scss +179 -185
  79. package/src/scss/components/_empty-state.scss +57 -57
  80. package/src/scss/components/_flag.scss +325 -0
  81. package/src/scss/components/_gallery.scss +131 -133
  82. package/src/scss/components/_index.scss +2 -0
  83. package/src/scss/components/_info.scss +151 -167
  84. package/src/scss/components/_kanban.scss +332 -341
  85. package/src/scss/components/_kbd.scss +40 -38
  86. package/src/scss/components/_lang-switch.scss +108 -0
  87. package/src/scss/components/_links.scss +21 -28
  88. package/src/scss/components/_lists.scss +510 -514
  89. package/src/scss/components/_localhost-indicator.scss +26 -24
  90. package/src/scss/components/_media.scss +22 -20
  91. package/src/scss/components/_meta-info.scss +35 -33
  92. package/src/scss/components/_modals.scss +277 -186
  93. package/src/scss/components/_pagination.scss +81 -87
  94. package/src/scss/components/_panels.scss +99 -97
  95. package/src/scss/components/_pricing.scss +183 -241
  96. package/src/scss/components/_progress.scss +112 -89
  97. package/src/scss/components/_prose.scss +35 -33
  98. package/src/scss/components/_ratings.scss +40 -38
  99. package/src/scss/components/_segmented.scss +82 -84
  100. package/src/scss/components/_skeleton.scss +66 -72
  101. package/src/scss/components/_spinners.scss +155 -159
  102. package/src/scss/components/_stepper.scss +116 -116
  103. package/src/scss/components/_tables.scss +155 -148
  104. package/src/scss/components/_tabs.scss +232 -141
  105. package/src/scss/components/_tags.scss +109 -107
  106. package/src/scss/components/_techstack-bucket.scss +123 -122
  107. package/src/scss/components/_testimonial.scss +72 -70
  108. package/src/scss/components/_theme-toggle.scss +53 -51
  109. package/src/scss/components/_tiles.scss +174 -174
  110. package/src/scss/components/_timelines.scss +282 -280
  111. package/src/scss/components/_toasts.scss +66 -72
  112. package/src/scss/form-elements/_checkbox.scss +117 -132
  113. package/src/scss/form-elements/_form.scss +149 -115
  114. package/src/scss/form-elements/_input-group.scss +99 -103
  115. package/src/scss/form-elements/_input.scss +74 -74
  116. package/src/scss/form-elements/_login.scss +48 -48
  117. package/src/scss/form-elements/_prefilled.scss +53 -51
  118. package/src/scss/form-elements/_radio.scss +95 -107
  119. package/src/scss/form-elements/_select.scss +42 -42
  120. package/src/scss/form-elements/_slider.scss +117 -132
  121. package/src/scss/form-elements/_textarea.scss +68 -54
  122. package/src/scss/form-elements/_toggle.scss +127 -140
  123. package/src/scss/layout/_footer.scss +172 -171
  124. package/src/scss/layout/_grid.scss +268 -302
  125. package/src/scss/layout/_header.scss +426 -427
  126. package/src/scss/layout/_home.scss +28 -27
  127. package/src/scss/layout/_main.scss +275 -238
  128. package/src/scss/layout/_page-header.scss +38 -36
  129. package/src/scss/layout/_section.scss +150 -124
  130. package/src/scss/main.scss +1 -1
  131. package/src/scss/utilities/_accessibility.scss +46 -45
  132. package/src/scss/utilities/_aspect.scss +22 -20
  133. package/src/scss/utilities/_corner.scss +23 -5
  134. package/src/scss/utilities/_display.scss +76 -70
  135. package/src/scss/utilities/_elevation.scss +13 -11
  136. package/src/scss/utilities/_flex.scss +83 -85
  137. package/src/scss/utilities/_reveal.scss +40 -63
  138. package/src/scss/utilities/_spacing.scss +63 -64
  139. package/src/scss/utilities/_text.scss +139 -141
  140. package/src/scss/utilities/_touch-targets.scss +130 -147
@@ -78,6 +78,7 @@ Safari 16.4+, Firefox 128+. The same range is declared as `browserslist` in
78
78
  | `--mw-kanban-background`, `--mw-kanban-lane-border`, `--mw-kanban-column-min-height` | Per-board surface, lane border and lane floor (120px, 90px on `mw-kanban-compact`) |
79
79
  | `--mw-container-gutter`, `--mw-container-width` | Page gutter of `mw-container` (fluid `clamp(1rem, 4.2vw + 0.5rem, 4rem)`, never below the safe-area inset) and the width derived from it (`min(1200px, 100% - 2 * gutter)`) |
80
80
  | `--mw-section-padding-block` | Top/bottom rhythm of `mw-section` (3.3rem, stepping down to 2.5rem below `md` and 1.75rem below `sm`) |
81
+ | `--mw-section-nav-height` | Height the sticky `mw-section-nav` reserves (3.7rem). Add it to `--mw-header-height` for the `scroll-margin-top` of anything the strip can cover |
81
82
  | `--mw-calendar-dot` | Colour of a single calendar dot - set it per dot or per cell; the `mw-calendar-dot-*` classes are presets for it |
82
83
  | `--mw-scroll-hint-cover` | Colour the scroll hint on a tab bar fades into. Preset to the page, re-pointed to the card background inside `mw-card`, `mw-panel`, `mw-modal`, `mw-tile`, `mw-calendar` |
83
84
  | `--mw-elevation-1` … `-5` | Every shadow in the framework. Two layers per level - contact plus ambient. Never write a `box-shadow` by hand: a hand-rolled one is the wrong colour in one of the two themes |
@@ -171,9 +172,20 @@ Two rules that prevent most colour bugs:
171
172
  - Persisting the choice, the toggle UI and the initial class are the
172
173
  application's job in a SPA (`examples/angular-services.md`). The shipped JS
173
174
  does it for static pages using `localStorage` under the key `mw-theme`.
175
+ - **Suppress transitions while the class flips.** Colour changes on nearly every
176
+ element at once, and the shared `--mw-transition` turns that into thousands of
177
+ concurrent animations - on a documentation-sized page it is seconds of blocked
178
+ style and layout. `mw-theme-switching` on `<html>` kills them for the flip; the
179
+ forced reflow between the two class changes is what commits the new colours
180
+ before transitions come back.
174
181
 
175
182
  ```ts
183
+ const root = document.documentElement;
184
+
185
+ root.classList.add('mw-theme-switching');
176
186
  document.body.classList.toggle('mw-theme-light', isLight);
187
+ void root.offsetHeight; // commit the new colours with transitions off
188
+ root.classList.remove('mw-theme-switching');
177
189
  ```
178
190
 
179
191
  ## SCSS configuration
@@ -262,6 +274,29 @@ they are all `var()` references anyway:
262
274
  }
263
275
  ```
264
276
 
277
+ ## Overriding a component
278
+
279
+ Tokens cover colour and rhythm; for anything else write a normal rule. The
280
+ framework emits everything inside
281
+ `@layer mw.reset, mw.base, mw.forms, mw.components, mw.layout, mw.utilities`,
282
+ and an unlayered rule beats every layer regardless of weight:
283
+
284
+ ```css
285
+ /* wins over .mw-card, no !important and no doubled selector */
286
+ .mw-card {
287
+ border-radius: 12px;
288
+ }
289
+ ```
290
+
291
+ The same rule cuts the other way: third-party CSS loaded unlayered also beats
292
+ the framework, which is what makes an icon font quietly win over `mw-tags-icon`.
293
+ Give it a layer of its own:
294
+
295
+ ```css
296
+ @layer vendor, mw;
297
+ @import url('font-awesome.css') layer(vendor);
298
+ ```
299
+
265
300
  ## Importing only what you need
266
301
 
267
302
  The full stylesheet is ~200 kB raw / ~31 kB gzipped. Marketing components
@@ -272,7 +307,9 @@ Angular bundle budgets notice.
272
307
  Every layer forwards one module per file, and no `@extend` crosses a file
273
308
  boundary, so partial imports are safe. **The one thing you must not drop is
274
309
  `base`** - it carries the `:root` tokens; without it every component renders
275
- colourless.
310
+ colourless. The cascade layer order comes along on its own: every module loads
311
+ `abstracts`, which declares it, so a hand-picked subset orders itself the same
312
+ way the full build does.
276
313
 
277
314
  ```scss
278
315
  // styles.scss - configure first, then pick
@@ -0,0 +1,5 @@
1
+ {
2
+ "hook": {
3
+ "consent": "accepted"
4
+ }
5
+ }
@@ -0,0 +1 @@
1
+ {"version":1,"sessions":{"5682ec58-6688-479f-994f-990ff918c05d":{"updatedAt":1789084033412,"files":{"/Users/m1well/Dev/workspace/css/maverick-wave/src/scss/layout/_header.scss":{"editCount":3,"findings":[],"stopBaseline":{"version":1,"engine":"0.1.5","counts":{}},"cleanAcked":true},"/Users/m1well/Dev/workspace/css/maverick-wave/src/scss/form-elements/_slider.scss":{"editCount":1,"findings":[],"stopBaseline":{"version":1,"engine":"0.1.5","counts":{}},"cleanAcked":true},"/Users/m1well/Dev/workspace/css/maverick-wave/src/js/main.js":{"editCount":7,"findings":[]},"/Users/m1well/Dev/workspace/css/maverick-wave/index.html":{"editCount":2,"findings":["low-contrast:0:3.3:1 (need 4.5:1) — text #7d85a5 on #313746","pulsing-dot:0:.mw-spinner-dots>div — 16x16px dot with infinite \"mw-bounce\" animation","dark-glow:0:Colored box-shadow glow (#d1bb21) on dark page"]},"/Users/m1well/Dev/workspace/css/maverick-wave/src/partials/typography-container.html":{"editCount":2,"findings":[],"cleanAcked":true},"/Users/m1well/Dev/workspace/css/maverick-wave/src/scss/base/_base.scss":{"editCount":2,"findings":[],"stopBaseline":{"version":1,"engine":"0.1.5","counts":{}},"cleanAcked":true},"/Users/m1well/Dev/workspace/css/maverick-wave/src/scss/layout/_section.scss":{"editCount":7,"findings":[],"cleanAcked":true},"/Users/m1well/Dev/workspace/css/maverick-wave/src/scss/form-elements/_form.scss":{"editCount":1,"findings":[],"stopBaseline":{"version":1,"engine":"0.1.5","counts":{}},"cleanAcked":true},"/Users/m1well/Dev/workspace/css/maverick-wave/src/scss/components/_alerts.scss":{"editCount":1,"findings":["side-tab:83"],"stopBaseline":{"version":1,"engine":"0.1.5","counts":{"62d926b4b80efa38e6fbf0fe65f45cf171d9b8a80be0b2ee47ac4cbb6c9498d0":1}},"cleanAcked":true},"/Users/m1well/Dev/workspace/css/maverick-wave/src/scss/layout/_main.scss":{"editCount":1,"findings":[],"stopBaseline":{"version":1,"engine":"0.1.5","counts":{}},"cleanAcked":true}},"footerShown":true}}}
package/CHANGELOG.md CHANGED
@@ -6,6 +6,23 @@ 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.0.0] - 2026-09-10
10
+
11
+ ### Added
12
+
13
+ - layers
14
+
15
+ ### Changed
16
+
17
+ - tried out some skills and updated some stuff
18
+ - refactored complete code
19
+
20
+ ## [4.28.0] - 2026-09-08
21
+
22
+ ### Added
23
+
24
+ - language switcher in header
25
+
9
26
  ## [4.27.0] - 2026-09-07
10
27
 
11
28
  ### Fixed
package/CLAUDE.md CHANGED
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
4
4
 
5
5
  ## Project Overview
6
6
 
7
- MaverickWave is a lightweight, modern CSS framework providing a grid system, 25+ UI components, utility classes, and light/dark mode support. The repo also contains the showcase/documentation website bundled into the distribution.
7
+ MaverickWave is a lightweight, modern CSS framework providing a grid system, 48 UI components, utility classes, and light/dark mode support. The repo also contains the showcase/documentation website bundled into the distribution.
8
8
 
9
9
  ## Commands
10
10
 
@@ -30,19 +30,19 @@ There are no test or lint scripts.
30
30
 
31
31
  - `abstracts/` - CSS custom properties, mixins, SCSS functions (color variant generation)
32
32
  - `base/` - Reset, element defaults, typography
33
- - `components/` - Self-contained component styles (25+ files, one per component)
33
+ - `components/` - Self-contained component styles (48 files, one per component)
34
34
  - `form-elements/` - Form input/select/checkbox-specific styles
35
35
  - `layout/` - Grid, container, header/footer, section
36
36
  - `utilities/` - Spacing, flex, display utility classes
37
37
  - `main.scss` - Entry point using `@use`/`@forward` (not `@import`)
38
38
 
39
- **JavaScript** (`src/js/main.js`) - Single file. All components auto-initialize on `DOMContentLoaded`. Includes: gallery slider, theme toggle (persisted to localStorage), accordion, mobile nav, progress bar (IntersectionObserver), scroll spy, tabs, alerts/toasts, modals, range inputs.
39
+ **JavaScript** (`src/js/main.js`) - Single file. All components auto-initialize on `DOMContentLoaded`. Includes: gallery and image sliders, theme toggle (persisted to localStorage, transitions suppressed during the flip), accordion, mobile nav, progress bar (IntersectionObserver), scroll spy, tabs (which also get their ARIA and arrow-key handling here), alerts/toasts, modals, range inputs, dropdowns, language switcher, checkbox lists, kanban board, calendar.
40
40
 
41
- **HTML showcase** (`index.html` + `src/partials/`) - The top-level `index.html` uses `@@include()` syntax to pull in 40+ partials from `src/partials/`. These compile into `dist/index.html`.
41
+ **HTML showcase** (`index.html` + `src/partials/`) - The top-level `index.html` uses `@@include()` syntax to pull in 60 partials from `src/partials/`. These compile into `dist/index.html`.
42
42
 
43
43
  ## Naming Conventions
44
44
 
45
- - **CSS classes**: `mw-` prefix for all framework classes (`.mw-button`, `.mw-card`, `.mw-modal`)
45
+ - **CSS classes**: `mw-` prefix for all framework classes (`.mw-btn`, `.mw-card`, `.mw-modal`)
46
46
  - **State classes**: `.mw-active`, `.mw-selected`
47
47
  - **CSS custom properties**: `--mw-` prefix (`--mw-primary-color`, `--mw-font-family-base`)
48
48
  - **Theme control**: `--mw-internal-theme-mode` CSS var controls whether theme is switchable/fixed-light/fixed-dark; body class `mw-theme-light` toggles light mode
package/README.md CHANGED
@@ -6,7 +6,7 @@ While AI tools helped kickstart the development of some components and provided
6
6
 
7
7
  - Consistent implementation of custom variables throughout the system
8
8
  - Proper integration between components and logical SCSS structure
9
- - Optimized specificity and selector hierarchy
9
+ - Cascade layers throughout, so a project overrides any `mw-` class with a plain selector
10
10
  - Reliable responsive behavior across devices
11
11
  - Built-in dark mode support and accessibility considerations
12
12
 
@@ -25,6 +25,8 @@ The result is a framework that balances utility with simplicity, offering develo
25
25
  - Easy Customization via CSS Custom Properties
26
26
  - Built-in Light & Dark Mode with optional theme switching
27
27
  - SCSS Source Files for advanced customization (Dart Sass, `@use`/`@forward`)
28
+ - Modals as `<div>` or as `<dialog>` - the latter brings the focus trap, Escape and the inert background from the platform
29
+ - Native form validation is styled through `:user-invalid`, alongside the class-driven error states for reactive forms
28
30
  - Minimal JavaScript footprint (single vanilla JS file, no dependencies)
29
31
 
30
32
  ## Installation & Usage
@@ -40,12 +42,12 @@ The result is a framework that balances utility with simplicity, offering develo
40
42
  <title>My MaverickWave Project</title>
41
43
  <link
42
44
  rel="stylesheet"
43
- href="https://cdn.jsdelivr.net/npm/maverick-wave@4.25.0/maverick-wave.min.css"
45
+ href="https://cdn.jsdelivr.net/npm/maverick-wave@5.0.0/maverick-wave.min.css"
44
46
  />
45
47
  </head>
46
48
  <body>
47
49
  <!-- Your content here -->
48
- <script src="https://cdn.jsdelivr.net/npm/maverick-wave@4.25.0/maverick-wave.min.js"></script>
50
+ <script src="https://cdn.jsdelivr.net/npm/maverick-wave@5.0.0/maverick-wave.min.js"></script>
49
51
  </body>
50
52
  </html>
51
53
  ```
@@ -307,6 +309,42 @@ card - keep that ordering if you retune the card, or the footer stops looking
307
309
  like a footer. The rule between the surfaces keeps its own fixed factor: it runs
308
310
  against the card, or it disappears into what it separates.
309
311
 
312
+ ### Overriding
313
+
314
+ Everything the framework emits sits in cascade layers:
315
+
316
+ ```css
317
+ @layer mw.reset, mw.base, mw.forms, mw.components, mw.layout, mw.utilities;
318
+ ```
319
+
320
+ An unlayered rule beats every layer no matter how specific it is, so a project
321
+ overrides a component with a single class selector - no `!important`, no
322
+ `.mw-card.mw-card`:
323
+
324
+ ```css
325
+ .mw-card {
326
+ border-radius: 12px;
327
+ }
328
+ ```
329
+
330
+ `!important` is not the stronger version of that, it is the weaker one: for
331
+ important declarations the layer order reverses and unlayered comes last, so an
332
+ important rule in `mw.base` beats an important one of yours even behind an ID
333
+ selector. A project coming from before 5.0 can drop the `!important`s it carried
334
+ for these overrides - the plain rule already wins.
335
+
336
+ That cuts both ways: third-party CSS loaded unlayered also beats the framework,
337
+ which is how an icon font ends up winning over `mw-tags-icon`. Load it into a
338
+ layer of its own:
339
+
340
+ ```html
341
+ <style>
342
+ @layer vendor, mw;
343
+ @import url('https://cdn.example.com/font-awesome.css') layer(vendor);
344
+ </style>
345
+ <link rel="stylesheet" href="maverick-wave.min.css" />
346
+ ```
347
+
310
348
  ### SCSS Source
311
349
 
312
350
  For full control, clone the repository and integrate `src/scss/main.scss` into your Sass build (Dart Sass required). MaverickWave uses modern `@use`/`@forward` syntax. Pass your overrides through `with`:
@@ -394,8 +432,14 @@ above):
394
432
  > contract. Theme switching, for example, is a single class on `<body>`:
395
433
 
396
434
  ```typescript
397
- // theme.service.ts
435
+ // theme.service.ts - mw-theme-switching suppresses the transitions the flip
436
+ // would otherwise start on every element at once
437
+ const root = document.documentElement;
438
+
439
+ root.classList.add('mw-theme-switching');
398
440
  document.body.classList.toggle('mw-theme-light', isLight);
441
+ void root.offsetHeight;
442
+ root.classList.remove('mw-theme-switching');
399
443
  ```
400
444
 
401
445
  The `mw-field` wrapper groups label, control, hint and error. Bind the error
package/index.html CHANGED
@@ -11,10 +11,16 @@
11
11
  content="telephone=no,email=no,address=no,date=no"
12
12
  />
13
13
  <title>MaverickWave</title>
14
- <link
15
- rel="stylesheet"
16
- href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
17
- />
14
+ <!-- Third-party CSS goes into a layer of its own, declared ahead of the
15
+ framework's. Unlayered CSS beats every layer, so a plain <link> here
16
+ would let Font Awesome's `.fas { display }` win over `.mw-tags-icon`.
17
+ Any project that loads a vendor stylesheet next to MaverickWave wants
18
+ these two lines. -->
19
+ <style>
20
+ @layer vendor, mw;
21
+ @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css')
22
+ layer(vendor);
23
+ </style>
18
24
  <link rel="stylesheet" href="maverick-wave.min.css" />
19
25
  <!-- Favicons -->
20
26
  <link rel="icon" type="image/svg+xml" href="favicon/favicon.svg" />
@@ -40,18 +46,10 @@
40
46
  position: relative;
41
47
  }
42
48
 
49
+ /* A version number is digits, so it gets the mono stack - the rest of
50
+ the pill is mw-hero-badge */
43
51
  .version-corner {
44
- position: absolute;
45
- top: -24px;
46
- right: 13%;
47
- background: var(--mw-primary-color);
48
- color: var(--mw-primary-accent-text-color);
49
- font-size: 1.1rem;
50
- padding: 0.3rem 0.7rem;
51
- border-radius: 0.4rem;
52
- font-weight: 600;
53
- box-shadow: 3px 7px 10px var(--mw-shadow);
54
- transform: rotate(7deg);
52
+ font-family: var(--mw-font-family-mono);
55
53
  }
56
54
 
57
55
  .color-card {
@@ -80,11 +78,6 @@
80
78
 
81
79
  /* Medium screens */
82
80
  @media (max-width: 992px) {
83
- .version-corner {
84
- right: 7%;
85
- font-size: 1rem;
86
- }
87
-
88
81
  /* Two calendars side by side squeeze their cells below md, so they
89
82
  stack one breakpoint earlier than mw-grid-2 would on its own */
90
83
  .calendar-demos {
@@ -94,15 +87,6 @@
94
87
 
95
88
  /* Small screens */
96
89
  @media (max-width: 576px) {
97
- /* The h1 drops to 2.2rem down here, so the sticker has to move up with
98
- it or it lands on the word instead of next to it */
99
- .version-corner {
100
- top: -32px;
101
- right: 4%;
102
- font-size: 0.9rem;
103
- padding: 0.25rem 0.55rem;
104
- }
105
-
106
90
  .color-swatch {
107
91
  margin: 0 auto 7px auto;
108
92
  width: 92%;
@@ -115,6 +99,8 @@
115
99
  </head>
116
100
 
117
101
  <body>
102
+ <a class="mw-skip-link" href="#main">Skip to content</a>
103
+
118
104
  <!-- Header -->
119
105
  <header class="mw-header mw-localhost-indicator-activated">
120
106
  <div class="mw-container">
@@ -122,7 +108,7 @@
122
108
  </div>
123
109
  </header>
124
110
 
125
- <main class="mw-main">
111
+ <main class="mw-main" id="main">
126
112
  <!-- Home section -->
127
113
  <section id="home" class="mw-section">
128
114
  <div class="mw-container">
@@ -612,14 +598,9 @@
612
598
  apply(cycleSwitch.querySelector('.mw-active'));
613
599
  });
614
600
 
615
- // for the modals
616
- function openModal(modalId) {
617
- document.getElementById(modalId).classList.add('mw-modal-open');
618
- }
619
-
620
- function closeModal(modalId) {
621
- document.getElementById(modalId).classList.remove('mw-modal-open');
622
- }
601
+ // for the modals - the framework handles both shapes, div and <dialog>
602
+ const openModal = window.mwOpenModal;
603
+ const closeModal = window.mwCloseModal;
623
604
  </script>
624
605
  </body>
625
606
  </html>