maverick-wave 4.28.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 (138) hide show
  1. package/.claude/settings.local.json +29 -1
  2. package/.claude/skills/mw-maverick-wave/SKILL.md +39 -24
  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 +42 -5
  6. package/.claude/skills/mw-maverick-wave/references/forms.md +14 -2
  7. package/.claude/skills/mw-maverick-wave/references/javascript.md +17 -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 +11 -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 +223 -83
  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/home-container.html +10 -20
  40. package/src/partials/input-group-container.html +11 -2
  41. package/src/partials/kbd-container.html +1 -1
  42. package/src/partials/login-container.html +5 -1
  43. package/src/partials/media-container.html +2 -2
  44. package/src/partials/modals-container.html +22 -32
  45. package/src/partials/pricing-container.html +9 -9
  46. package/src/partials/skeleton-container.html +6 -6
  47. package/src/partials/stepper-container.html +2 -2
  48. package/src/partials/tables-container.html +12 -12
  49. package/src/partials/tabs-container.html +17 -27
  50. package/src/partials/tags-container.html +23 -17
  51. package/src/partials/techstack-bucket-container.html +13 -0
  52. package/src/partials/tiles-container.html +26 -9
  53. package/src/partials/typography-container.html +7 -6
  54. package/src/partials/utilities-container.html +35 -15
  55. package/src/scss/_layers.scss +10 -0
  56. package/src/scss/abstracts/_index.scss +6 -0
  57. package/src/scss/abstracts/_mixins.scss +61 -153
  58. package/src/scss/abstracts/_variables.scss +123 -319
  59. package/src/scss/base/_base.scss +170 -190
  60. package/src/scss/base/_reset.scss +106 -104
  61. package/src/scss/base/_typography.scss +153 -151
  62. package/src/scss/components/_accordions.scss +97 -97
  63. package/src/scss/components/_alerts.scss +71 -70
  64. package/src/scss/components/_announcement.scss +71 -70
  65. package/src/scss/components/_avatars.scss +130 -142
  66. package/src/scss/components/_badge.scss +131 -132
  67. package/src/scss/components/_blog-post.scss +223 -220
  68. package/src/scss/components/_breadcrumbs.scss +93 -92
  69. package/src/scss/components/_button-bar.scss +102 -110
  70. package/src/scss/components/_buttons.scss +319 -324
  71. package/src/scss/components/_calendar.scss +251 -252
  72. package/src/scss/components/_cards.scss +359 -386
  73. package/src/scss/components/_code.scss +190 -194
  74. package/src/scss/components/_coming-soon.scss +77 -75
  75. package/src/scss/components/_content-slider.scss +90 -89
  76. package/src/scss/components/_divider.scss +55 -53
  77. package/src/scss/components/_dropdown.scss +179 -185
  78. package/src/scss/components/_empty-state.scss +57 -57
  79. package/src/scss/components/_flag.scss +294 -278
  80. package/src/scss/components/_gallery.scss +131 -133
  81. package/src/scss/components/_info.scss +151 -167
  82. package/src/scss/components/_kanban.scss +332 -341
  83. package/src/scss/components/_kbd.scss +40 -38
  84. package/src/scss/components/_lang-switch.scss +89 -97
  85. package/src/scss/components/_links.scss +21 -28
  86. package/src/scss/components/_lists.scss +510 -514
  87. package/src/scss/components/_localhost-indicator.scss +26 -24
  88. package/src/scss/components/_media.scss +22 -20
  89. package/src/scss/components/_meta-info.scss +35 -33
  90. package/src/scss/components/_modals.scss +277 -186
  91. package/src/scss/components/_pagination.scss +81 -87
  92. package/src/scss/components/_panels.scss +99 -97
  93. package/src/scss/components/_pricing.scss +183 -241
  94. package/src/scss/components/_progress.scss +112 -89
  95. package/src/scss/components/_prose.scss +35 -33
  96. package/src/scss/components/_ratings.scss +40 -38
  97. package/src/scss/components/_segmented.scss +82 -84
  98. package/src/scss/components/_skeleton.scss +66 -72
  99. package/src/scss/components/_spinners.scss +155 -159
  100. package/src/scss/components/_stepper.scss +116 -116
  101. package/src/scss/components/_tables.scss +155 -148
  102. package/src/scss/components/_tabs.scss +232 -141
  103. package/src/scss/components/_tags.scss +109 -107
  104. package/src/scss/components/_techstack-bucket.scss +123 -122
  105. package/src/scss/components/_testimonial.scss +72 -70
  106. package/src/scss/components/_theme-toggle.scss +53 -51
  107. package/src/scss/components/_tiles.scss +174 -174
  108. package/src/scss/components/_timelines.scss +282 -280
  109. package/src/scss/components/_toasts.scss +66 -72
  110. package/src/scss/form-elements/_checkbox.scss +117 -132
  111. package/src/scss/form-elements/_form.scss +149 -115
  112. package/src/scss/form-elements/_input-group.scss +99 -103
  113. package/src/scss/form-elements/_input.scss +74 -74
  114. package/src/scss/form-elements/_login.scss +48 -48
  115. package/src/scss/form-elements/_prefilled.scss +53 -51
  116. package/src/scss/form-elements/_radio.scss +95 -107
  117. package/src/scss/form-elements/_select.scss +42 -42
  118. package/src/scss/form-elements/_slider.scss +117 -132
  119. package/src/scss/form-elements/_textarea.scss +68 -54
  120. package/src/scss/form-elements/_toggle.scss +127 -140
  121. package/src/scss/layout/_footer.scss +172 -171
  122. package/src/scss/layout/_grid.scss +268 -302
  123. package/src/scss/layout/_header.scss +426 -427
  124. package/src/scss/layout/_home.scss +28 -27
  125. package/src/scss/layout/_main.scss +275 -238
  126. package/src/scss/layout/_page-header.scss +38 -36
  127. package/src/scss/layout/_section.scss +150 -124
  128. package/src/scss/main.scss +1 -1
  129. package/src/scss/utilities/_accessibility.scss +46 -45
  130. package/src/scss/utilities/_aspect.scss +22 -20
  131. package/src/scss/utilities/_corner.scss +23 -5
  132. package/src/scss/utilities/_display.scss +76 -70
  133. package/src/scss/utilities/_elevation.scss +13 -11
  134. package/src/scss/utilities/_flex.scss +83 -85
  135. package/src/scss/utilities/_reveal.scss +40 -63
  136. package/src/scss/utilities/_spacing.scss +63 -64
  137. package/src/scss/utilities/_text.scss +139 -141
  138. package/src/scss/utilities/_touch-targets.scss +130 -147
@@ -14,7 +14,7 @@
14
14
  <h3 class="mw-card-title mw-mb-4">Actions menu</h3>
15
15
  <div class="mw-card mw-card-simple mw-grid-1 mw-gap-6">
16
16
  <div>
17
- <h5 class="mw-text-medium mw-mb-2">Default</h5>
17
+ <h4 class="mw-text-medium mw-mb-2">Default</h4>
18
18
  <details class="mw-dropdown">
19
19
  <summary class="mw-btn mw-btn-primary">
20
20
  Actions <i class="fas fa-chevron-down mw-dropdown-caret"></i>
@@ -39,7 +39,7 @@
39
39
  </div>
40
40
 
41
41
  <div>
42
- <h5 class="mw-text-medium mw-mb-2">As a picker</h5>
42
+ <h4 class="mw-text-medium mw-mb-2">As a picker</h4>
43
43
  <details class="mw-dropdown">
44
44
  <summary class="mw-btn mw-btn-outline">
45
45
  Sort by: Newest
@@ -9,7 +9,7 @@
9
9
  <div>
10
10
  <h3 class="mw-card-title mw-mb-4">Basic & Color Variants</h3>
11
11
  <div class="mw-card mw-card-simple">
12
- <h5 class="mw-text-medium mw-mb-2">Default</h5>
12
+ <h4 class="mw-text-medium mw-mb-2">Default</h4>
13
13
  <div class="mw-empty-state">
14
14
  <div class="mw-empty-state-icon"><i class="fas fa-inbox"></i></div>
15
15
  <p class="mw-empty-state-title">Nothing here yet</p>
@@ -21,7 +21,7 @@
21
21
  </div>
22
22
 
23
23
  <div class="mw-card mw-card-simple mw-mt-4">
24
- <h5 class="mw-text-medium mw-mb-2">Warning</h5>
24
+ <h4 class="mw-text-medium mw-mb-2">Warning</h4>
25
25
  <div class="mw-empty-state mw-empty-state-warning mw-empty-state-sm">
26
26
  <div class="mw-empty-state-icon">
27
27
  <i class="fas fa-exclamation-triangle"></i>
@@ -38,7 +38,7 @@
38
38
  <div>
39
39
  <h3 class="mw-card-title mw-mb-4">More Variants</h3>
40
40
  <div class="mw-card mw-card-simple">
41
- <h5 class="mw-text-medium mw-mb-2">Success</h5>
41
+ <h4 class="mw-text-medium mw-mb-2">Success</h4>
42
42
  <div class="mw-empty-state mw-empty-state-success mw-empty-state-sm">
43
43
  <div class="mw-empty-state-icon">
44
44
  <i class="fas fa-check-circle"></i>
@@ -51,7 +51,7 @@
51
51
  </div>
52
52
 
53
53
  <div class="mw-card mw-card-simple mw-mt-4">
54
- <h5 class="mw-text-medium mw-mb-2">Primary (small)</h5>
54
+ <h4 class="mw-text-medium mw-mb-2">Primary (small)</h4>
55
55
  <div class="mw-empty-state mw-empty-state-primary mw-empty-state-sm">
56
56
  <div class="mw-empty-state-icon"><i class="fas fa-search"></i></div>
57
57
  <p class="mw-empty-state-title">No items match</p>
@@ -63,7 +63,7 @@
63
63
  </div>
64
64
 
65
65
  <div class="mw-card mw-card-simple mw-mt-4">
66
- <h5 class="mw-text-medium mw-mb-2">Danger</h5>
66
+ <h4 class="mw-text-medium mw-mb-2">Danger</h4>
67
67
  <div class="mw-empty-state mw-empty-state-danger mw-empty-state-sm">
68
68
  <div class="mw-empty-state-icon">
69
69
  <i class="fas fa-times-circle"></i>
@@ -2,10 +2,9 @@
2
2
  <div class="mw-footer-column">
3
3
  <h3>The framework</h3>
4
4
  <p>
5
- A lightweight, modern CSS framework for building responsive websites with
6
- elegance and speed. While AI tools helped kickstart the development of
7
- some components and provided initial structure, approximately 80% of the
8
- codebase required manual refinement and customization.
5
+ A CSS framework for responsive sites - grid, components, forms, dark mode.
6
+ AI tools drafted parts of it; most of what is in here was reworked by hand
7
+ afterwards.
9
8
  </p>
10
9
  </div>
11
10
 
@@ -51,8 +50,7 @@
51
50
 
52
51
  <div class="mw-footer-column">
53
52
  <h3>Contact Me</h3>
54
- <p>Have questions or feedback? I'd love to hear from you!</p>
55
- <p>Please use the social links below</p>
53
+ <p>Questions or feedback? Every link below reaches me.</p>
56
54
  </div>
57
55
  </div>
58
56
 
@@ -60,8 +58,8 @@
60
58
  <a
61
59
  href="https://github.com/m1well"
62
60
  target="_blank"
63
- type="button"
64
61
  data-tooltip="GitHub"
62
+ aria-label="GitHub"
65
63
  >
66
64
  <i class="fab fa-github"></i>
67
65
  </a>
@@ -69,6 +67,7 @@
69
67
  href="https://www.linkedin.com/in/michael-wellner"
70
68
  target="_blank"
71
69
  data-tooltip="LinkedIn"
70
+ aria-label="LinkedIn"
72
71
  >
73
72
  <i class="fab fa-linkedin"></i>
74
73
  </a>
@@ -76,27 +75,31 @@
76
75
  href="https://www.xing.com/profile/Michael_Wellner5/"
77
76
  target="_blank"
78
77
  data-tooltip="Xing"
78
+ aria-label="Xing"
79
79
  >
80
80
  <i class="fab fa-xing"></i>
81
81
  </a>
82
- <a href="https://dev.to/m1well" target="_blank" data-tooltip="dev.to">
82
+ <a
83
+ href="https://dev.to/m1well"
84
+ target="_blank"
85
+ data-tooltip="dev.to"
86
+ aria-label="dev.to"
87
+ >
83
88
  <i class="fab fa-dev"></i>
84
89
  </a>
85
- <a href="mailto:info@m1well.com" target="_blank" data-tooltip="Mail">
90
+ <a
91
+ href="mailto:info@m1well.com"
92
+ target="_blank"
93
+ data-tooltip="Mail"
94
+ aria-label="Mail"
95
+ >
86
96
  <i class="fa fa-envelope"></i>
87
97
  </a>
88
98
  </div>
89
99
 
90
100
  <p class="mw-disclaimer">
91
- MaverickWave is a lightweight, modern CSS framework for building responsive
92
- websites with elegance and speed. It embodies the spirit of innovation and
93
- fluidity, just like a maverick wave that charts its own course across the
94
- ocean. The framework was named to reflect its bold approach to web design -
95
- breaking free from conventional constraints while maintaining a natural flow
96
- that adapts seamlessly to any environment. Like the powerful yet graceful
97
- movement of waves, MaverickWave combines strength and flexibility, empowering
98
- developers to create distinctive digital experiences that stand out in the
99
- vast sea of the web.
101
+ Named after the one wave that breaks off the reef instead of with the set. MIT
102
+ licensed.
100
103
  </p>
101
104
 
102
105
  <p class="mw-copyright">
@@ -123,7 +123,7 @@
123
123
  <div class="mw-grid-4-lg mw-mt-4">
124
124
  <!-- Default vertical -->
125
125
  <div class="mw-mb-6">
126
- <h5 class="mw-mb-2">Default</h5>
126
+ <h4 class="mw-mb-2">Default</h4>
127
127
  <div class="mw-checkbox-group">
128
128
  <label class="mw-checkbox">
129
129
  <input type="checkbox" name="cb1" />
@@ -140,7 +140,7 @@
140
140
 
141
141
  <!-- Inline small -->
142
142
  <div class="mw-mb-6">
143
- <h5 class="mw-mb-2">Small & Inline</h5>
143
+ <h4 class="mw-mb-2">Small & Inline</h4>
144
144
  <div class="mw-checkbox-group mw-checkbox-group-inline">
145
145
  <label class="mw-checkbox mw-checkbox-sm">
146
146
  <input type="checkbox" name="cb2" />
@@ -157,8 +157,8 @@
157
157
 
158
158
  <!-- Large & colored -->
159
159
  <div class="mw-mb-6">
160
- <h5 class="mw-mb-2">Large &amp; Colored</h5>
161
- <div class="mw-checkbox-group mw-checkbox-group">
160
+ <h4 class="mw-mb-2">Large &amp; Colored</h4>
161
+ <div class="mw-checkbox-group">
162
162
  <label class="mw-checkbox mw-checkbox-lg mw-checkbox-success">
163
163
  <input type="checkbox" name="cb3" />
164
164
  <div class="mw-checkbox-box"></div>
@@ -174,7 +174,7 @@
174
174
 
175
175
  <!-- Error -->
176
176
  <div class="mw-mb-6">
177
- <h5 class="mw-mb-2">Error</h5>
177
+ <h4 class="mw-mb-2">Error</h4>
178
178
  <div class="mw-checkbox-group mw-form-element-error">
179
179
  <label class="mw-checkbox">
180
180
  <input type="checkbox" name="cb1" />
@@ -197,7 +197,7 @@
197
197
  <div class="mw-grid-4-lg mw-mt-4">
198
198
  <!-- Default (vertical) -->
199
199
  <div class="mw-mb-6">
200
- <h5 class="mw-mb-2">Default</h5>
200
+ <h4 class="mw-mb-2">Default</h4>
201
201
  <div class="mw-radio-group">
202
202
  <label class="mw-radio">
203
203
  <input type="radio" name="opt1" />
@@ -219,7 +219,7 @@
219
219
 
220
220
  <!-- Small Inline -->
221
221
  <div class="mw-mb-6">
222
- <h5 class="mw-mb-2">Small & Inline</h5>
222
+ <h4 class="mw-mb-2">Small & Inline</h4>
223
223
  <div class="mw-radio-group mw-radio-group-inline">
224
224
  <label class="mw-radio mw-radio-sm">
225
225
  <input type="radio" name="opt2" />
@@ -236,8 +236,8 @@
236
236
 
237
237
  <!-- Large & Colored -->
238
238
  <div class="mw-mb-6">
239
- <h5 class="mw-mb-2">Large &amp; Colored</h5>
240
- <div class="mw-radio-group mw-radio-group">
239
+ <h4 class="mw-mb-2">Large &amp; Colored</h4>
240
+ <div class="mw-radio-group">
241
241
  <label class="mw-radio mw-radio-lg mw-radio-success">
242
242
  <input type="radio" name="opt3" />
243
243
  <div class="mw-radio-button"></div>
@@ -253,7 +253,7 @@
253
253
 
254
254
  <!-- Error -->
255
255
  <div class="mw-mb-6">
256
- <h5 class="mw-mb-2">Error</h5>
256
+ <h4 class="mw-mb-2">Error</h4>
257
257
  <div class="mw-radio-group mw-form-element-error">
258
258
  <label class="mw-radio">
259
259
  <input type="radio" name="opt1" />
@@ -541,7 +541,7 @@ Imported from the previous application.</textarea
541
541
  <div class="mw-grid-4-lg mw-mt-4">
542
542
  <!-- Default -->
543
543
  <div class="mw-mb-6">
544
- <h5 class="mw-mb-2">Default</h5>
544
+ <h4 class="mw-mb-2">Default</h4>
545
545
  <div class="mw-toggle-group">
546
546
  <label class="mw-toggle">
547
547
  <input type="checkbox" />
@@ -558,7 +558,7 @@ Imported from the previous application.</textarea
558
558
 
559
559
  <!-- Small & Inline -->
560
560
  <div class="mw-mb-6">
561
- <h5 class="mw-mb-2">Small & Inline</h5>
561
+ <h4 class="mw-mb-2">Small & Inline</h4>
562
562
  <div class="mw-toggle-group mw-toggle-group-inline">
563
563
  <label class="mw-toggle mw-toggle-sm">
564
564
  <input type="checkbox" checked />
@@ -580,7 +580,7 @@ Imported from the previous application.</textarea
580
580
 
581
581
  <!-- Large & Colored -->
582
582
  <div class="mw-mb-6">
583
- <h5 class="mw-mb-2">Large &amp; Colored</h5>
583
+ <h4 class="mw-mb-2">Large &amp; Colored</h4>
584
584
  <div class="mw-toggle-group">
585
585
  <label class="mw-toggle mw-toggle-lg mw-toggle-success">
586
586
  <input type="checkbox" checked />
@@ -597,7 +597,7 @@ Imported from the previous application.</textarea
597
597
 
598
598
  <!-- Disabled -->
599
599
  <div>
600
- <h5 class="mw-mb-2">Disabled</h5>
600
+ <h4 class="mw-mb-2">Disabled</h4>
601
601
  <div class="mw-toggle-group">
602
602
  <label class="mw-toggle mw-toggle-disabled">
603
603
  <input type="checkbox" disabled />
@@ -15,28 +15,36 @@
15
15
  <!-- Track -->
16
16
  <div class="mw-gallery-track">
17
17
  <div class="mw-gallery-slide" data-desc="Beautiful Mountain">
18
- <img src="images/gallery-mountain.svg" alt="Beautiful Mountain" />
18
+ <img
19
+ src="images/gallery-mountain.svg"
20
+ alt="Beautiful Mountain"
21
+ loading="lazy"
22
+ />
19
23
  </div>
20
24
  <div class="mw-gallery-slide" data-desc="Peaceful Lake">
21
- <img src="images/gallery-lake.svg" alt="Peaceful Lake" />
25
+ <img src="images/gallery-lake.svg" alt="Peaceful Lake" loading="lazy" />
22
26
  </div>
23
27
  <div class="mw-gallery-slide" data-desc="City Vibes">
24
- <img src="images/gallery-city.svg" alt="City Vibes" />
28
+ <img src="images/gallery-city.svg" alt="City Vibes" loading="lazy" />
25
29
  </div>
26
30
  <div class="mw-gallery-slide" data-desc="Golden Forest">
27
- <img src="images/gallery-forest.svg" alt="Golden Forest" />
31
+ <img
32
+ src="images/gallery-forest.svg"
33
+ alt="Golden Forest"
34
+ loading="lazy"
35
+ />
28
36
  </div>
29
37
  <div class="mw-gallery-slide" data-desc="Desert View">
30
- <img src="images/gallery-desert.svg" alt="Desert View" />
38
+ <img src="images/gallery-desert.svg" alt="Desert View" loading="lazy" />
31
39
  </div>
32
40
  <div class="mw-gallery-slide" data-desc="Ocean Breeze">
33
- <img src="images/gallery-ocean.svg" alt="Ocean Breeze" />
41
+ <img src="images/gallery-ocean.svg" alt="Ocean Breeze" loading="lazy" />
34
42
  </div>
35
43
  <div class="mw-gallery-slide" data-desc="Old Town">
36
- <img src="images/gallery-oldtown.svg" alt="Old Town" />
44
+ <img src="images/gallery-oldtown.svg" alt="Old Town" loading="lazy" />
37
45
  </div>
38
46
  <div class="mw-gallery-slide" data-desc="Snowy Hills">
39
- <img src="images/gallery-snow.svg" alt="Snowy Hills" />
47
+ <img src="images/gallery-snow.svg" alt="Snowy Hills" loading="lazy" />
40
48
  </div>
41
49
  </div>
42
50
 
@@ -323,7 +323,7 @@ import './assets/maverick-wave.min.css';</code></pre>
323
323
  <code>@font-face</code> and then override the CSS font variable.
324
324
  </p>
325
325
  <div class="mw-card mw-card-simple">
326
- <h5 class="mw-mb-2">1. Load the Font</h5>
326
+ <h4 class="mw-mb-2">1. Load the Font</h4>
327
327
  <pre class="mw-code-block"><code>/* your-custom-styles.css */
328
328
  @font-face {
329
329
  font-family: 'Your Custom Font';
@@ -344,7 +344,7 @@ import './assets/maverick-wave.min.css';</code></pre>
344
344
  }
345
345
  </code></pre>
346
346
 
347
- <h5 class="mw-mt-4 mw-mb-2">2. Apply the Font</h5>
347
+ <h4 class="mw-mt-4 mw-mb-2">2. Apply the Font</h4>
348
348
  <p>
349
349
  <strong>CSS Variable Method:</strong>
350
350
  </p>
@@ -358,13 +358,9 @@ import './assets/maverick-wave.min.css';</code></pre>
358
358
  </div>
359
359
 
360
360
  <div class="mw-d-flex mw-flex-wrap mw-gap-4 mw-justify-center mw-mt-6">
361
- <button
362
- type="button"
363
- onclick="location.href = '#documentation'"
364
- class="mw-btn mw-btn-primary"
365
- >
361
+ <a href="#documentation" class="mw-btn mw-btn-primary">
366
362
  Explore Documentation
367
- </button>
363
+ </a>
368
364
  <button
369
365
  type="button"
370
366
  onclick="
@@ -1,11 +1,11 @@
1
1
  <div class="mw-logo">
2
- <button type="button" onclick="location.href = '#home'">
2
+ <a href="#home">
3
3
  <img src="header-logo.svg" alt="MaverickWave Logo" />
4
- </button>
4
+ </a>
5
5
  </div>
6
6
 
7
7
  <div class="mw-header-actions">
8
- <nav class="mw-navbar mw-navbar-medium">
8
+ <nav class="mw-navbar mw-navbar-medium" id="mw-main-nav">
9
9
  <ul class="mw-navbar-list">
10
10
  <li class="mw-navbar-item">
11
11
  <a href="#get-started" class="mw-navbar-link">Get Started</a>
@@ -42,12 +42,23 @@
42
42
  </button>
43
43
 
44
44
  <!-- Login Button -->
45
- <button class="mw-login-btn" id="login-button">
45
+ <button
46
+ type="button"
47
+ class="mw-login-btn"
48
+ id="login-button"
49
+ aria-label="Log in"
50
+ >
46
51
  <i class="fas fa-lock"></i>
47
52
  </button>
48
53
 
49
54
  <!-- Burger Menu Button -->
50
- <div class="mw-menu-btn">
51
- <div class="mw-menu-btn-burger"></div>
52
- </div>
55
+ <button
56
+ type="button"
57
+ class="mw-menu-btn"
58
+ aria-label="Menu"
59
+ aria-expanded="false"
60
+ aria-controls="mw-main-nav"
61
+ >
62
+ <span class="mw-menu-btn-burger"></span>
63
+ </button>
53
64
  </div>
@@ -1,34 +1,24 @@
1
1
  <div class="mw-hero">
2
2
  <div class="mw-home mw-home-content-fade">
3
3
  <div class="mw-home-text">
4
- <span class="version-corner">v{{VERSION}}</span>
4
+ <span class="mw-hero-badge version-corner">
5
+ <span class="mw-hero-badge-dot"></span>
6
+ v{{VERSION}}
7
+ </span>
5
8
  <h1>Maverick<span class="mw-text-primary">Wave</span></h1>
6
9
  <p>
7
- Build stunning, responsive websites effortlessly with a modern,
8
- lightweight CSS framework crafted for speed, style, and flexibility.
9
- </p>
10
- <p>
11
- Effortless dark mode, mobile-first layouts and accessibility at its
12
- core. The same foundation carries a portfolio, a corporate site and a
13
- full e-commerce platform.
10
+ A CSS framework in two files. Grid, 48 components, dark mode - no build
11
+ step, no dependencies.
14
12
  </p>
15
13
  </div>
16
14
 
17
15
  <div class="mw-d-flex mw-gap-8 mw-justify-center">
18
- <button
19
- type="button"
20
- onclick="location.href = '#get-started'"
21
- class="mw-btn mw-btn-primary mw-btn-lg"
22
- >
16
+ <a href="#get-started" class="mw-btn mw-btn-primary mw-btn-lg">
23
17
  Get Started
24
- </button>
25
- <button
26
- type="button"
27
- onclick="location.href = '#documentation'"
28
- class="mw-btn mw-btn-secondary mw-btn-lg"
29
- >
18
+ </a>
19
+ <a href="#documentation" class="mw-btn mw-btn-outline mw-btn-lg">
30
20
  Documentation
31
- </button>
21
+ </a>
32
22
  </div>
33
23
  </div>
34
24
  </div>
@@ -107,7 +107,11 @@
107
107
  class="mw-input"
108
108
  placeholder="Keyword..."
109
109
  />
110
- <button type="button" class="mw-btn mw-btn-primary">
110
+ <button
111
+ type="button"
112
+ class="mw-btn mw-btn-primary"
113
+ aria-label="Search"
114
+ >
111
115
  <i class="fas fa-search"></i>
112
116
  </button>
113
117
  </div>
@@ -130,6 +134,7 @@
130
134
  onclick="
131
135
  navigator.clipboard?.writeText('https://maverick-wave.m1well.com')
132
136
  "
137
+ aria-label="Copy link"
133
138
  >
134
139
  <i class="fas fa-copy"></i>
135
140
  </button>
@@ -177,7 +182,11 @@
177
182
  class="mw-input"
178
183
  placeholder="Type a message..."
179
184
  />
180
- <button type="button" class="mw-btn mw-btn-primary">
185
+ <button
186
+ type="button"
187
+ class="mw-btn mw-btn-primary"
188
+ aria-label="Send message"
189
+ >
181
190
  <i class="fas fa-paper-plane"></i>
182
191
  </button>
183
192
  </div>
@@ -26,7 +26,7 @@
26
26
  >.
27
27
  </p>
28
28
  <div>
29
- <h5 class="mw-text-medium mw-mb-2">Held down</h5>
29
+ <h4 class="mw-text-medium mw-mb-2">Held down</h4>
30
30
  <p class="mw-mb-0">
31
31
  <kbd class="mw-kbd-pressed">Space</kbd> shown mid-press - the raised
32
32
  edge drops and the key sits 1px lower, for a hint that demonstrates
@@ -8,7 +8,11 @@
8
8
  <div class="mw-mb-4">
9
9
  <div class="mw-login mw-my-8">
10
10
  <div class="mw-login-logo">
11
- <img src="https://m1well.com/images/header_logo.svg" alt="Your Logo" />
11
+ <img
12
+ src="https://m1well.com/images/header_logo.svg"
13
+ alt="Your Logo"
14
+ loading="lazy"
15
+ />
12
16
  </div>
13
17
  <div class="mw-login-message">
14
18
  This is an internal area that can only be accessed with a valid account.
@@ -9,7 +9,7 @@
9
9
 
10
10
  <div class="mw-grid-2 mw-gap-6">
11
11
  <div>
12
- <h5 class="mw-text-medium mw-mb-2">Audio with caption</h5>
12
+ <h4 class="mw-text-medium mw-mb-2">Audio with caption</h4>
13
13
  <div class="mw-card mw-card-simple">
14
14
  <div class="mw-media">
15
15
  <audio controls preload="metadata" src="media/demo-chime.wav"></audio>
@@ -19,7 +19,7 @@
19
19
  </div>
20
20
 
21
21
  <div>
22
- <h5 class="mw-text-medium mw-mb-2">Bare, without a card</h5>
22
+ <h4 class="mw-text-medium mw-mb-2">Bare, without a card</h4>
23
23
  <div class="mw-media">
24
24
  <audio controls preload="metadata" src="media/demo-chime.wav"></audio>
25
25
  </div>
@@ -27,8 +27,8 @@
27
27
  <button onclick="openModal('modal-form')" class="mw-btn mw-btn-primary">
28
28
  Open Form Modal
29
29
  </button>
30
- <button onclick="openModal('modal-confirm')" class="mw-btn mw-btn-secondary">
31
- Open Confirmation
30
+ <button data-mw-modal="modal-confirm" class="mw-btn mw-btn-secondary">
31
+ Open Confirmation (&lt;dialog&gt;)
32
32
  </button>
33
33
  </div>
34
34
 
@@ -225,34 +225,24 @@
225
225
  </div>
226
226
 
227
227
  <!-- Confirmation Modal -->
228
- <div id="modal-confirm" class="mw-modal-overlay">
229
- <div class="mw-modal mw-modal-sm">
230
- <div class="mw-modal-header">
231
- <h4 class="mw-modal-title">Delete Item</h4>
232
- <button onclick="closeModal('modal-confirm')" class="mw-modal-close">
233
- &#120299;
234
- </button>
235
- </div>
236
- <div class="mw-modal-body">
237
- <p class="mw-text-center">
238
- <strong>Are you sure you want to delete this item?</strong>
239
- </p>
240
- </div>
241
- <div class="mw-modal-footer">
242
- <p class="mw-actions-note">This action cannot be undone.</p>
243
- <button
244
- onclick="closeModal('modal-confirm')"
245
- class="mw-btn mw-btn-outline"
246
- >
247
- Cancel
248
- </button>
249
- <button
250
- onclick="closeModal('modal-confirm')"
251
- class="mw-btn mw-btn-danger"
252
- >
253
- Delete
254
- </button>
255
- </div>
228
+ <!-- Same classes, a <dialog> instead of a div: Escape, the focus trap, the
229
+ inert page behind it and the scroll lock all come from the element. The
230
+ close buttons need no onclick - the framework script closes the dialog
231
+ they sit in - and closedby="any" is what dismisses it on a backdrop
232
+ click, so there is no mw-modal-backdrop either. -->
233
+ <dialog id="modal-confirm" class="mw-modal mw-modal-sm" closedby="any">
234
+ <div class="mw-modal-header">
235
+ <h4 class="mw-modal-title">Delete Item</h4>
236
+ <button class="mw-modal-close" aria-label="Close">&#120299;</button>
256
237
  </div>
257
- <div class="mw-modal-backdrop" onclick="closeModal('modal-confirm')"></div>
258
- </div>
238
+ <div class="mw-modal-body">
239
+ <p class="mw-text-center">
240
+ <strong>Are you sure you want to delete this item?</strong>
241
+ </p>
242
+ </div>
243
+ <div class="mw-modal-footer">
244
+ <p class="mw-actions-note">This action cannot be undone.</p>
245
+ <button class="mw-modal-close mw-btn mw-btn-outline">Cancel</button>
246
+ <button class="mw-modal-close mw-btn mw-btn-danger">Delete</button>
247
+ </div>
248
+ </dialog>
@@ -20,7 +20,7 @@
20
20
  <div class="mw-grid-2-lg">
21
21
  <div>
22
22
  <div class="mw-card mw-card-simple">
23
- <h5 class="mw-text-medium mw-mb-2">Plain price</h5>
23
+ <h4 class="mw-text-medium mw-mb-2">Plain price</h4>
24
24
  <p class="mw-text-muted mw-text-sm mw-mb-5">
25
25
  <code>mw-price-amount</code> plus <code>mw-price-currency</code>. The
26
26
  unit is a word next to the figure, not part of it - it stays at reading
@@ -33,7 +33,7 @@
33
33
  </div>
34
34
 
35
35
  <div class="mw-card mw-card-simple mw-mt-4">
36
- <h5 class="mw-text-medium mw-mb-2">With a discount tag</h5>
36
+ <h4 class="mw-text-medium mw-mb-2">With a discount tag</h4>
37
37
  <p class="mw-text-muted mw-text-sm mw-mb-5">
38
38
  Any <code>mw-tag</code> or <code>mw-badge</code> placed directly in the
39
39
  row is centred against the digits instead of hung off their baseline.
@@ -46,7 +46,7 @@
46
46
  </div>
47
47
 
48
48
  <div class="mw-card mw-card-simple mw-mt-4">
49
- <h5 class="mw-text-medium mw-mb-2">Old price struck through</h5>
49
+ <h4 class="mw-text-medium mw-mb-2">Old price struck through</h4>
50
50
  <p class="mw-text-muted mw-text-sm mw-mb-5">
51
51
  <code>mw-price-original</code> is muted <em>and</em> struck. Muted alone
52
52
  reads as a footnote; the line is what says this is no longer the price.
@@ -65,7 +65,7 @@
65
65
  </div>
66
66
 
67
67
  <div class="mw-card mw-card-simple mw-mt-4">
68
- <h5 class="mw-text-medium mw-mb-2">Both prices on one line</h5>
68
+ <h4 class="mw-text-medium mw-mb-2">Both prices on one line</h4>
69
69
  <p class="mw-text-muted mw-text-sm mw-mb-5">
70
70
  <code>mw-price-inline</code> puts the old price in front of the new one
71
71
  instead of above it. For a wide card or a table row that has the width
@@ -83,7 +83,7 @@
83
83
  </div>
84
84
 
85
85
  <div class="mw-card mw-card-simple mw-mt-4">
86
- <h5 class="mw-text-medium mw-mb-2">Not a figure</h5>
86
+ <h4 class="mw-text-medium mw-mb-2">Not a figure</h4>
87
87
  <p class="mw-text-muted mw-text-sm mw-mb-5">
88
88
  <code>mw-price-word</code> for "on request" or "free" - still bold, so
89
89
  it holds the same slot in a row of cards, but set well below the size a
@@ -101,7 +101,7 @@
101
101
 
102
102
  <div>
103
103
  <div class="mw-card mw-card-simple">
104
- <h5 class="mw-text-medium mw-mb-2">Decimals</h5>
104
+ <h4 class="mw-text-medium mw-mb-2">Decimals</h4>
105
105
  <p class="mw-text-muted mw-text-sm mw-mb-5">
106
106
  <code>mw-price-fraction</code> sits inside the amount, one step down and
107
107
  on the baseline. Cents raised to the cap height are a discounter's idiom
@@ -121,7 +121,7 @@
121
121
  </div>
122
122
 
123
123
  <div class="mw-card mw-card-simple mw-mt-4">
124
- <h5 class="mw-text-medium mw-mb-2">Period and note</h5>
124
+ <h4 class="mw-text-medium mw-mb-2">Period and note</h4>
125
125
  <p class="mw-text-muted mw-text-sm mw-mb-5">
126
126
  <code>mw-price-period</code> for what the price is per,
127
127
  <code>mw-price-note</code> for the line under it. The note is a sibling
@@ -136,7 +136,7 @@
136
136
  </div>
137
137
 
138
138
  <div class="mw-card mw-card-simple mw-mt-4">
139
- <h5 class="mw-text-medium mw-mb-2">Sizes</h5>
139
+ <h4 class="mw-text-medium mw-mb-2">Sizes</h4>
140
140
  <p class="mw-text-muted mw-text-sm mw-mb-5">
141
141
  <code>mw-price-sm</code>, default and <code>mw-price-lg</code>. Only
142
142
  <code>--mw-price-size</code> changes - the struck price, the cents and
@@ -166,7 +166,7 @@
166
166
  </div>
167
167
 
168
168
  <div class="mw-card mw-card-simple mw-mt-4">
169
- <h5 class="mw-text-medium mw-mb-2">Centred and plain</h5>
169
+ <h4 class="mw-text-medium mw-mb-2">Centred and plain</h4>
170
170
  <p class="mw-text-muted mw-text-sm mw-mb-5">
171
171
  <code>mw-price-center</code> for a centred card,
172
172
  <code>mw-price-plain</code> for body colour instead of the brand - a