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
@@ -9,25 +9,25 @@
9
9
  <h3 class="mw-card-title mw-mb-4">Horizontal</h3>
10
10
  <div class="mw-card mw-card-simple mw-grid-1 mw-gap-6">
11
11
  <div>
12
- <h5 class="mw-text-medium mw-mb-2">Default</h5>
12
+ <h4 class="mw-text-medium mw-mb-2">Default</h4>
13
13
  <p class="mw-text-muted">Content above</p>
14
14
  <hr class="mw-divider" />
15
15
  <p class="mw-text-muted">Content below</p>
16
16
  </div>
17
17
  <div>
18
- <h5 class="mw-text-medium mw-mb-2">Thick</h5>
18
+ <h4 class="mw-text-medium mw-mb-2">Thick</h4>
19
19
  <hr class="mw-divider mw-divider-thick" />
20
20
  </div>
21
21
  <div>
22
- <h5 class="mw-text-medium mw-mb-2">Dashed</h5>
22
+ <h4 class="mw-text-medium mw-mb-2">Dashed</h4>
23
23
  <hr class="mw-divider mw-divider-dashed" />
24
24
  </div>
25
25
  <div>
26
- <h5 class="mw-text-medium mw-mb-2">Primary color</h5>
26
+ <h4 class="mw-text-medium mw-mb-2">Primary color</h4>
27
27
  <hr class="mw-divider mw-divider-primary" />
28
28
  </div>
29
29
  <div>
30
- <h5 class="mw-text-medium mw-mb-2">Secondary color</h5>
30
+ <h4 class="mw-text-medium mw-mb-2">Secondary color</h4>
31
31
  <hr class="mw-divider mw-divider-secondary" />
32
32
  </div>
33
33
  </div>
@@ -37,7 +37,7 @@
37
37
  <h3 class="mw-card-title mw-mb-4">With Text & Vertical</h3>
38
38
  <div class="mw-card mw-card-simple mw-grid-1 mw-gap-6">
39
39
  <div>
40
- <h5 class="mw-text-medium mw-mb-2">With label</h5>
40
+ <h4 class="mw-text-medium mw-mb-2">With label</h4>
41
41
  <div class="mw-divider-text">
42
42
  <span>or</span>
43
43
  </div>
@@ -54,7 +54,7 @@
54
54
  </div>
55
55
 
56
56
  <div>
57
- <h5 class="mw-text-medium mw-mb-2">Vertical (inside flex row)</h5>
57
+ <h4 class="mw-text-medium mw-mb-2">Vertical (inside flex row)</h4>
58
58
  <div
59
59
  style="display: flex; align-items: center; gap: 1rem; height: 70px"
60
60
  >
@@ -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,9 +1,9 @@
1
1
  <h3 class="mw-section-subtitle">Header Utilities</h3>
2
2
  <p class="mw-text-muted mw-text-measure mw-mb-6">
3
- The two controls that live in the bar itself rather than on the page: the
4
- theme switch and the login button. Both are real buttons, so they are
5
- reachable by keyboard - the switch in particular is the first thing someone
6
- with a light-sensitivity need goes looking for.
3
+ The controls that live in the bar itself rather than on the page: the theme
4
+ switch, the language switcher and the login button. All of them are real
5
+ buttons, so they are reachable by keyboard - the theme switch in particular is
6
+ the first thing someone with a light-sensitivity need goes looking for.
7
7
  </p>
8
8
 
9
9
  <div class="mw-mt-6">
@@ -48,7 +48,194 @@
48
48
  </div>
49
49
  </div>
50
50
 
51
- <div class="mw-mt-6">
51
+ <div class="mw-mt-7">
52
+ <h3 class="mw-mb-2">Language Switcher (on a fake header here)</h3>
53
+ <p class="mw-text-muted mw-text-measure">
54
+ A <code>.mw-dropdown</code> with a quieter trigger: no fill and no border
55
+ until you touch it, so the bar keeps two calm controls instead of a row of
56
+ buttons. The two-letter code is what states the current language - a flag is
57
+ a country, and no country stands for English. The flag is only what the eye
58
+ finds first. Picking one fires <code>mw-language-change</code> on the
59
+ switcher; loading the translations is the application's job.
60
+ </p>
61
+ <!-- Fake header -->
62
+ <div class="mw-mb-4" style="position: relative">
63
+ <div
64
+ class="mw-d-flex mw-justify-between mw-items-center mw-p-3"
65
+ style="
66
+ background: var(--mw-header-background);
67
+ border-bottom: 1px solid var(--mw-header-border);
68
+ "
69
+ >
70
+ <div class="mw-d-flex mw-items-center">
71
+ <div
72
+ style="
73
+ font-weight: bold;
74
+ font-size: 1.2rem;
75
+ color: var(--mw-header-text-color);
76
+ "
77
+ >
78
+ Your Logo
79
+ </div>
80
+ </div>
81
+ <div class="mw-d-flex mw-items-center mw-gap-5">
82
+ <a style="color: var(--mw-header-navbar-list-color)"> Home </a>
83
+ <a style="color: var(--mw-header-navbar-list-color)"> About </a>
84
+ <details
85
+ class="mw-dropdown mw-dropdown-end mw-lang-switch mw-lang-switch-inverted"
86
+ >
87
+ <summary aria-label="Language: Deutsch">
88
+ <span class="mw-flag mw-flag-de"></span>
89
+ <span class="mw-lang-switch-code">de</span>
90
+ <i class="fas fa-chevron-down mw-dropdown-caret"></i>
91
+ </summary>
92
+ <div class="mw-dropdown-menu">
93
+ <button
94
+ type="button"
95
+ class="mw-dropdown-item mw-active"
96
+ aria-current="true"
97
+ data-mw-lang="de"
98
+ >
99
+ <span class="mw-flag mw-flag-de"></span>
100
+ <span class="mw-lang-switch-name" lang="de">Deutsch</span>
101
+ <i class="fas fa-check mw-lang-switch-check"></i>
102
+ </button>
103
+ <button type="button" class="mw-dropdown-item" data-mw-lang="en">
104
+ <span class="mw-flag mw-flag-gb"></span>
105
+ <span class="mw-lang-switch-name" lang="en">English</span>
106
+ <i class="fas fa-check mw-lang-switch-check"></i>
107
+ </button>
108
+ <button type="button" class="mw-dropdown-item" data-mw-lang="fr">
109
+ <span class="mw-flag mw-flag-fr"></span>
110
+ <span class="mw-lang-switch-name" lang="fr">Fran&ccedil;ais</span>
111
+ <i class="fas fa-check mw-lang-switch-check"></i>
112
+ </button>
113
+ <button type="button" class="mw-dropdown-item" data-mw-lang="it">
114
+ <span class="mw-flag mw-flag-it"></span>
115
+ <span class="mw-lang-switch-name" lang="it">Italiano</span>
116
+ <i class="fas fa-check mw-lang-switch-check"></i>
117
+ </button>
118
+ <button type="button" class="mw-dropdown-item" data-mw-lang="es">
119
+ <span class="mw-flag mw-flag-es"></span>
120
+ <span class="mw-lang-switch-name" lang="es">Espa&ntilde;ol</span>
121
+ <i class="fas fa-check mw-lang-switch-check"></i>
122
+ </button>
123
+ <button type="button" class="mw-dropdown-item" data-mw-lang="pl">
124
+ <span class="mw-flag mw-flag-pl"></span>
125
+ <span class="mw-lang-switch-name" lang="pl">Polski</span>
126
+ <i class="fas fa-check mw-lang-switch-check"></i>
127
+ </button>
128
+ </div>
129
+ </details>
130
+ </div>
131
+ </div>
132
+ </div>
133
+
134
+ <p class="mw-text-muted mw-text-measure">
135
+ The flags are drawn in CSS gradients, so they cost no request and no icon
136
+ font. Emoji were not an option: Windows ships no flag glyphs, and Chrome and
137
+ Edge render the German one as the two letters "DE" in a box. Anything not in
138
+ the set below takes an <code>&lt;img&gt;</code> or an inline
139
+ <code>&lt;svg&gt;</code> inside <code>.mw-flag</code>, which hands it the
140
+ same box, corner and hairline.
141
+ </p>
142
+ <div class="mw-d-flex mw-flex-wrap mw-gap-5 mw-mt-5">
143
+ <span class="mw-d-flex mw-items-center mw-gap-2">
144
+ <span class="mw-flag mw-flag-de"></span>
145
+ <span class="mw-text-muted mw-text-sm">de</span>
146
+ </span>
147
+ <span class="mw-d-flex mw-items-center mw-gap-2">
148
+ <span class="mw-flag mw-flag-at"></span>
149
+ <span class="mw-text-muted mw-text-sm">at</span>
150
+ </span>
151
+ <span class="mw-d-flex mw-items-center mw-gap-2">
152
+ <span class="mw-flag mw-flag-ch"></span>
153
+ <span class="mw-text-muted mw-text-sm">ch</span>
154
+ </span>
155
+ <span class="mw-d-flex mw-items-center mw-gap-2">
156
+ <span class="mw-flag mw-flag-gb"></span>
157
+ <span class="mw-text-muted mw-text-sm">gb</span>
158
+ </span>
159
+ <span class="mw-d-flex mw-items-center mw-gap-2">
160
+ <span class="mw-flag mw-flag-us"></span>
161
+ <span class="mw-text-muted mw-text-sm">us</span>
162
+ </span>
163
+ <span class="mw-d-flex mw-items-center mw-gap-2">
164
+ <span class="mw-flag mw-flag-ie"></span>
165
+ <span class="mw-text-muted mw-text-sm">ie</span>
166
+ </span>
167
+ <span class="mw-d-flex mw-items-center mw-gap-2">
168
+ <span class="mw-flag mw-flag-fr"></span>
169
+ <span class="mw-text-muted mw-text-sm">fr</span>
170
+ </span>
171
+ <span class="mw-d-flex mw-items-center mw-gap-2">
172
+ <span class="mw-flag mw-flag-it"></span>
173
+ <span class="mw-text-muted mw-text-sm">it</span>
174
+ </span>
175
+ <span class="mw-d-flex mw-items-center mw-gap-2">
176
+ <span class="mw-flag mw-flag-es"></span>
177
+ <span class="mw-text-muted mw-text-sm">es</span>
178
+ </span>
179
+ <span class="mw-d-flex mw-items-center mw-gap-2">
180
+ <span class="mw-flag mw-flag-pt"></span>
181
+ <span class="mw-text-muted mw-text-sm">pt</span>
182
+ </span>
183
+ <span class="mw-d-flex mw-items-center mw-gap-2">
184
+ <span class="mw-flag mw-flag-nl"></span>
185
+ <span class="mw-text-muted mw-text-sm">nl</span>
186
+ </span>
187
+ <span class="mw-d-flex mw-items-center mw-gap-2">
188
+ <span class="mw-flag mw-flag-be"></span>
189
+ <span class="mw-text-muted mw-text-sm">be</span>
190
+ </span>
191
+ <span class="mw-d-flex mw-items-center mw-gap-2">
192
+ <span class="mw-flag mw-flag-pl"></span>
193
+ <span class="mw-text-muted mw-text-sm">pl</span>
194
+ </span>
195
+ <span class="mw-d-flex mw-items-center mw-gap-2">
196
+ <span class="mw-flag mw-flag-hu"></span>
197
+ <span class="mw-text-muted mw-text-sm">hu</span>
198
+ </span>
199
+ <span class="mw-d-flex mw-items-center mw-gap-2">
200
+ <span class="mw-flag mw-flag-ro"></span>
201
+ <span class="mw-text-muted mw-text-sm">ro</span>
202
+ </span>
203
+ <span class="mw-d-flex mw-items-center mw-gap-2">
204
+ <span class="mw-flag mw-flag-bg"></span>
205
+ <span class="mw-text-muted mw-text-sm">bg</span>
206
+ </span>
207
+ <span class="mw-d-flex mw-items-center mw-gap-2">
208
+ <span class="mw-flag mw-flag-ua"></span>
209
+ <span class="mw-text-muted mw-text-sm">ua</span>
210
+ </span>
211
+ <span class="mw-d-flex mw-items-center mw-gap-2">
212
+ <span class="mw-flag mw-flag-se"></span>
213
+ <span class="mw-text-muted mw-text-sm">se</span>
214
+ </span>
215
+ <span class="mw-d-flex mw-items-center mw-gap-2">
216
+ <span class="mw-flag mw-flag-dk"></span>
217
+ <span class="mw-text-muted mw-text-sm">dk</span>
218
+ </span>
219
+ <span class="mw-d-flex mw-items-center mw-gap-2">
220
+ <span class="mw-flag mw-flag-no"></span>
221
+ <span class="mw-text-muted mw-text-sm">no</span>
222
+ </span>
223
+ <span class="mw-d-flex mw-items-center mw-gap-2">
224
+ <span class="mw-flag mw-flag-fi"></span>
225
+ <span class="mw-text-muted mw-text-sm">fi</span>
226
+ </span>
227
+ <span class="mw-d-flex mw-items-center mw-gap-2">
228
+ <span class="mw-flag mw-flag-tr"></span>
229
+ <span class="mw-text-muted mw-text-sm">tr</span>
230
+ </span>
231
+ <span class="mw-d-flex mw-items-center mw-gap-2">
232
+ <span class="mw-flag mw-flag-jp"></span>
233
+ <span class="mw-text-muted mw-text-sm">jp</span>
234
+ </span>
235
+ </div>
236
+ </div>
237
+
238
+ <div class="mw-mt-7">
52
239
  <h3 class="mw-mb-2">Localhost Indicator (on a fake header here)</h3>
53
240
  <p class="mw-text-muted">
54
241
  This is what the localhost indicator looks like when it has been activated