maverick-wave 5.30.0 → 5.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/maverick-wave.min.css +1 -1
- package/package.json +8 -2
- package/src/scss/components/_modals.scss +23 -9
- package/.claude/settings.local.json +0 -43
- package/.claude/skills/mw-maverick-wave/SKILL.md +0 -532
- package/.claude/skills/mw-maverick-wave/examples/angular-form.md +0 -279
- package/.claude/skills/mw-maverick-wave/examples/angular-list-page.md +0 -309
- package/.claude/skills/mw-maverick-wave/examples/angular-services.md +0 -538
- package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +0 -530
- package/.claude/skills/mw-maverick-wave/references/components.md +0 -2170
- package/.claude/skills/mw-maverick-wave/references/forms.md +0 -358
- package/.claude/skills/mw-maverick-wave/references/javascript.md +0 -164
- package/.claude/skills/mw-maverick-wave/references/layout.md +0 -764
- package/.claude/skills/mw-maverick-wave/references/theming.md +0 -530
- package/.github/workflows/ci.yml +0 -41
- package/.idea/codeStyles/Project.xml +0 -59
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/maverick-wave.iml +0 -12
- package/.idea/modules.xml +0 -8
- package/.idea/prettier.xml +0 -6
- package/.idea/vcs.xml +0 -6
- package/.prettierignore +0 -8
- package/.prettierrc.json +0 -7
- package/CHANGELOG.md +0 -956
- package/CLAUDE.md +0 -60
- package/gulpfile.js +0 -167
- package/index.html +0 -1730
- package/release.sh +0 -31
- package/scripts/verify.js +0 -252
- package/src/assets/favicon/apple-touch-icon.png +0 -0
- package/src/assets/favicon/favicon-96x96.png +0 -0
- package/src/assets/favicon/favicon.svg +0 -1
- package/src/assets/favicon/site.webmanifest +0 -37
- package/src/assets/favicon/web-app-manifest-192x192.png +0 -0
- package/src/assets/favicon/web-app-manifest-512x512.png +0 -0
- package/src/assets/favicon.ico +0 -0
- package/src/assets/header-logo.svg +0 -24
- package/src/assets/images/gallery-city.svg +0 -49
- package/src/assets/images/gallery-desert.svg +0 -25
- package/src/assets/images/gallery-forest.svg +0 -46
- package/src/assets/images/gallery-lake.svg +0 -26
- package/src/assets/images/gallery-mountain.svg +0 -19
- package/src/assets/images/gallery-ocean.svg +0 -26
- package/src/assets/images/gallery-oldtown.svg +0 -41
- package/src/assets/images/gallery-snow.svg +0 -39
- package/src/assets/images/photo-balloon.svg +0 -35
- package/src/assets/images/photo-forest-path.svg +0 -31
- package/src/assets/images/photo-lighthouse.svg +0 -42
- package/src/assets/images/photo-palm.svg +0 -27
- package/src/assets/images/photo-peak.svg +0 -27
- package/src/assets/images/photo-tower.svg +0 -34
- package/src/assets/images/photo-waterfall.svg +0 -32
- package/src/assets/images/slider-field.svg +0 -124
- package/src/assets/images/slider-forest.svg +0 -33
- package/src/assets/images/slider-lake.svg +0 -35
- package/src/assets/images/slider-mountains.svg +0 -29
- package/src/assets/images/slider-trees.svg +0 -41
- package/src/assets/images/story-aurora.svg +0 -36
- package/src/assets/images/story-beach.svg +0 -34
- package/src/assets/images/story-stars.svg +0 -35
- package/src/assets/images/tile-analytics.svg +0 -22
- package/src/assets/images/tile-cloud.svg +0 -19
- package/src/assets/images/tile-ecommerce.svg +0 -14
- package/src/assets/images/tile-enterprise.svg +0 -22
- package/src/assets/images/tile-marketing.svg +0 -16
- package/src/assets/media/demo-chime.wav +0 -0
- package/src/assets/media/story-sunrise.jpg +0 -0
- package/src/assets/media/story-sunrise.mp4 +0 -0
- package/src/partials/accordions-container.html +0 -179
- package/src/partials/alerts-container.html +0 -151
- package/src/partials/announcement-container.html +0 -67
- package/src/partials/avatars-container.html +0 -229
- package/src/partials/badges-container.html +0 -114
- package/src/partials/blog-posts-container.html +0 -158
- package/src/partials/breadcrumbs-container.html +0 -126
- package/src/partials/button-bar-container.html +0 -175
- package/src/partials/buttons-container.html +0 -272
- package/src/partials/calendar-container.html +0 -203
- package/src/partials/cards-container.html +0 -727
- package/src/partials/code-container.html +0 -194
- package/src/partials/colors-container.html +0 -263
- package/src/partials/coming-soon-container.html +0 -10
- package/src/partials/contact-container.html +0 -85
- package/src/partials/content-slider-container.html +0 -36
- package/src/partials/divider-container.html +0 -70
- package/src/partials/documentation-container.html +0 -204
- package/src/partials/dropdown-container.html +0 -119
- package/src/partials/empty-state-container.html +0 -79
- package/src/partials/feed-container.html +0 -506
- package/src/partials/footer-container.html +0 -113
- package/src/partials/form-container.html +0 -262
- package/src/partials/form-elements-container.html +0 -616
- package/src/partials/form-field-container.html +0 -166
- package/src/partials/gallery-container.html +0 -62
- package/src/partials/get-started-container.html +0 -423
- package/src/partials/grid-container.html +0 -191
- package/src/partials/header-container.html +0 -69
- package/src/partials/header-utilities-container.html +0 -331
- package/src/partials/highlights-container.html +0 -71
- package/src/partials/history-container.html +0 -67
- package/src/partials/home-container.html +0 -31
- package/src/partials/html-lists-container.html +0 -63
- package/src/partials/info-container.html +0 -104
- package/src/partials/input-group-container.html +0 -299
- package/src/partials/item-lists-container.html +0 -368
- package/src/partials/kanban-container.html +0 -459
- package/src/partials/kbd-container.html +0 -63
- package/src/partials/leader-row-container.html +0 -139
- package/src/partials/login-container.html +0 -65
- package/src/partials/lunch-menu-container.html +0 -341
- package/src/partials/media-container.html +0 -27
- package/src/partials/meta-info-container.html +0 -21
- package/src/partials/modals-container.html +0 -199
- package/src/partials/mosaic-container.html +0 -173
- package/src/partials/page-header-container.html +0 -78
- package/src/partials/pagination-container.html +0 -64
- package/src/partials/palette-container.html +0 -480
- package/src/partials/panels-container.html +0 -126
- package/src/partials/parallax-container.html +0 -147
- package/src/partials/portrait-gallery-container.html +0 -175
- package/src/partials/preview-container.html +0 -136
- package/src/partials/pricing-container.html +0 -523
- package/src/partials/progress-container.html +0 -230
- package/src/partials/prose-container.html +0 -43
- package/src/partials/ratings-container.html +0 -104
- package/src/partials/section-head-container.html +0 -77
- package/src/partials/segmented-container.html +0 -66
- package/src/partials/skeleton-container.html +0 -87
- package/src/partials/spinners-container.html +0 -96
- package/src/partials/stepper-container.html +0 -111
- package/src/partials/stories-container.html +0 -182
- package/src/partials/tables-container.html +0 -309
- package/src/partials/tabs-container.html +0 -290
- package/src/partials/tags-container.html +0 -242
- package/src/partials/techstack-bucket-container.html +0 -187
- package/src/partials/testimonials-container.html +0 -88
- package/src/partials/tiles-container.html +0 -247
- package/src/partials/timelines-container.html +0 -196
- package/src/partials/typography-container.html +0 -74
- package/src/partials/utilities-container.html +0 -553
|
@@ -1,530 +0,0 @@
|
|
|
1
|
-
# Example: static landing page
|
|
2
|
-
|
|
3
|
-
A complete page without a framework - this is the case the shipped
|
|
4
|
-
`maverick-wave.min.js` is built for: accordion, mobile navigation, theme toggle
|
|
5
|
-
and scroll spy all work by themselves. Only opening a modal has to be wired up
|
|
6
|
-
by hand.
|
|
7
|
-
|
|
8
|
-
The page uses what a landing page reaches for first: an announcement ribbon
|
|
9
|
-
under the header, a hero with a scroll cue, feature cards and testimonials that
|
|
10
|
-
rise into view as the visitor scrolls, offer cards with a real price row, and an
|
|
11
|
-
accordion FAQ.
|
|
12
|
-
|
|
13
|
-
```html
|
|
14
|
-
<!doctype html>
|
|
15
|
-
<html lang="en">
|
|
16
|
-
<head>
|
|
17
|
-
<meta charset="utf-8" />
|
|
18
|
-
<meta
|
|
19
|
-
name="viewport"
|
|
20
|
-
content="width=device-width, initial-scale=1, viewport-fit=cover"
|
|
21
|
-
/>
|
|
22
|
-
<title>Acme Analytics</title>
|
|
23
|
-
|
|
24
|
-
<link
|
|
25
|
-
rel="stylesheet"
|
|
26
|
-
href="https://cdn.jsdelivr.net/npm/maverick-wave@5/maverick-wave.min.css"
|
|
27
|
-
/>
|
|
28
|
-
<link
|
|
29
|
-
rel="stylesheet"
|
|
30
|
-
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css"
|
|
31
|
-
/>
|
|
32
|
-
|
|
33
|
-
<style>
|
|
34
|
-
/* Brand colours - one token per family, the rest is derived */
|
|
35
|
-
:root {
|
|
36
|
-
--mw-primary-color: #0f766e;
|
|
37
|
-
--mw-secondary-color: #b45309;
|
|
38
|
-
--mw-hero-background: url('/assets/hero.jpg');
|
|
39
|
-
}
|
|
40
|
-
</style>
|
|
41
|
-
</head>
|
|
42
|
-
|
|
43
|
-
<body>
|
|
44
|
-
<header class="mw-header">
|
|
45
|
-
<div class="mw-container">
|
|
46
|
-
<div class="mw-logo">
|
|
47
|
-
<button type="button" onclick="location.href='#home'">
|
|
48
|
-
<img src="/assets/logo.svg" alt="Acme" />
|
|
49
|
-
</button>
|
|
50
|
-
</div>
|
|
51
|
-
|
|
52
|
-
<div class="mw-header-actions">
|
|
53
|
-
<!-- Four links: mw-navbar-medium, so the panel takes over one
|
|
54
|
-
breakpoint later than the bare navbar would -->
|
|
55
|
-
<nav class="mw-navbar mw-navbar-medium">
|
|
56
|
-
<ul class="mw-navbar-list">
|
|
57
|
-
<li class="mw-navbar-item">
|
|
58
|
-
<a href="#features" class="mw-navbar-link">Features</a>
|
|
59
|
-
</li>
|
|
60
|
-
<li class="mw-navbar-item">
|
|
61
|
-
<a href="#pricing" class="mw-navbar-link">Pricing</a>
|
|
62
|
-
</li>
|
|
63
|
-
<li class="mw-navbar-item">
|
|
64
|
-
<a href="#voices" class="mw-navbar-link">Voices</a>
|
|
65
|
-
</li>
|
|
66
|
-
<li class="mw-navbar-item">
|
|
67
|
-
<a href="#faq" class="mw-navbar-link">FAQ</a>
|
|
68
|
-
</li>
|
|
69
|
-
</ul>
|
|
70
|
-
</nav>
|
|
71
|
-
|
|
72
|
-
<button
|
|
73
|
-
type="button"
|
|
74
|
-
class="mw-theme-toggle mw-ml-5"
|
|
75
|
-
aria-label="Toggle light and dark theme"
|
|
76
|
-
>
|
|
77
|
-
<div class="mw-theme-toggle-slider">
|
|
78
|
-
<div class="mw-theme-toggle-icon">
|
|
79
|
-
<i class="fas fa-moon"></i>
|
|
80
|
-
</div>
|
|
81
|
-
</div>
|
|
82
|
-
</button>
|
|
83
|
-
|
|
84
|
-
<button
|
|
85
|
-
type="button"
|
|
86
|
-
class="mw-menu-btn"
|
|
87
|
-
aria-label="Menu"
|
|
88
|
-
aria-expanded="false"
|
|
89
|
-
aria-controls="main-nav"
|
|
90
|
-
>
|
|
91
|
-
<span class="mw-menu-btn-burger"></span>
|
|
92
|
-
</button>
|
|
93
|
-
</div>
|
|
94
|
-
</div>
|
|
95
|
-
</header>
|
|
96
|
-
|
|
97
|
-
<!-- The ribbon under the fixed header. It stays put while the page scrolls
|
|
98
|
-
beneath it, and the anchor scroll offset grows by its height on its
|
|
99
|
-
own - #pricing lands below it, not under it -->
|
|
100
|
-
<aside class="mw-announcement mw-announcement-secondary">
|
|
101
|
-
<a class="mw-announcement-content" href="#pricing">
|
|
102
|
-
<span class="mw-announcement-highlight">-20 %</span>
|
|
103
|
-
<span>Launch offer on every plan until 30.09.</span>
|
|
104
|
-
</a>
|
|
105
|
-
</aside>
|
|
106
|
-
|
|
107
|
-
<main class="mw-main">
|
|
108
|
-
<!-- Hero: the container goes full-bleed because it contains mw-hero.
|
|
109
|
-
The scroll cue is a sibling of the hero inside that container, and
|
|
110
|
-
the hero keeps a strip at its bottom free for it -->
|
|
111
|
-
<section id="home" class="mw-section">
|
|
112
|
-
<div class="mw-container">
|
|
113
|
-
<div class="mw-hero">
|
|
114
|
-
<div class="mw-home mw-home-content-fade">
|
|
115
|
-
<div class="mw-home-text">
|
|
116
|
-
<h1>Acme <span class="mw-text-primary">Analytics</span></h1>
|
|
117
|
-
<p>
|
|
118
|
-
Numbers that answer questions instead of raising them. One
|
|
119
|
-
dashboard for the whole company, live in an afternoon.
|
|
120
|
-
</p>
|
|
121
|
-
</div>
|
|
122
|
-
<div class="mw-d-flex mw-gap-8 mw-justify-center">
|
|
123
|
-
<button
|
|
124
|
-
type="button"
|
|
125
|
-
class="mw-btn mw-btn-primary mw-btn-lg"
|
|
126
|
-
data-mw-modal="demo"
|
|
127
|
-
>
|
|
128
|
-
Book a demo
|
|
129
|
-
</button>
|
|
130
|
-
<a href="#features" class="mw-btn mw-btn-secondary mw-btn-lg"
|
|
131
|
-
>Learn more</a
|
|
132
|
-
>
|
|
133
|
-
</div>
|
|
134
|
-
</div>
|
|
135
|
-
</div>
|
|
136
|
-
|
|
137
|
-
<a class="mw-scroll-hint" href="#features">
|
|
138
|
-
More <i class="fas fa-chevron-down"></i>
|
|
139
|
-
</a>
|
|
140
|
-
</div>
|
|
141
|
-
</section>
|
|
142
|
-
|
|
143
|
-
<!-- Features -->
|
|
144
|
-
<section id="features" class="mw-section mw-section-alternate">
|
|
145
|
-
<div class="mw-container">
|
|
146
|
-
<div class="mw-section-head">
|
|
147
|
-
<h2 class="mw-section-head-title">Features</h2>
|
|
148
|
-
<p class="mw-section-head-intro">
|
|
149
|
-
Three things every team asks about on the first call - and the
|
|
150
|
-
numbers behind them.
|
|
151
|
-
</p>
|
|
152
|
-
</div>
|
|
153
|
-
|
|
154
|
-
<!-- mw-reveal-stagger on the grid: every card rises as it scrolls
|
|
155
|
-
in, the second and third of each row a beat later -->
|
|
156
|
-
<div class="mw-grid-3 mw-reveal-stagger">
|
|
157
|
-
<div class="mw-card mw-card-stack">
|
|
158
|
-
<div class="mw-card-stack-header">
|
|
159
|
-
<div class="mw-card-stack-icon">
|
|
160
|
-
<i class="fas fa-bolt"></i>
|
|
161
|
-
</div>
|
|
162
|
-
<h5 class="mw-card-stack-title">Fast</h5>
|
|
163
|
-
</div>
|
|
164
|
-
<div class="mw-card-stack-body">
|
|
165
|
-
<p class="mw-card-stack-text">
|
|
166
|
-
Dashboards render in under a second.
|
|
167
|
-
</p>
|
|
168
|
-
</div>
|
|
169
|
-
</div>
|
|
170
|
-
|
|
171
|
-
<div class="mw-card mw-card-stack">
|
|
172
|
-
<div class="mw-card-stack-header">
|
|
173
|
-
<div class="mw-card-stack-icon">
|
|
174
|
-
<i class="fas fa-shield-halved"></i>
|
|
175
|
-
</div>
|
|
176
|
-
<h5 class="mw-card-stack-title">Secure</h5>
|
|
177
|
-
</div>
|
|
178
|
-
<div class="mw-card-stack-body">
|
|
179
|
-
<p class="mw-card-stack-text">EU hosting, SSO, audit log.</p>
|
|
180
|
-
</div>
|
|
181
|
-
</div>
|
|
182
|
-
|
|
183
|
-
<div class="mw-card mw-card-stack">
|
|
184
|
-
<div class="mw-card-stack-header">
|
|
185
|
-
<div class="mw-card-stack-icon">
|
|
186
|
-
<i class="fas fa-plug"></i>
|
|
187
|
-
</div>
|
|
188
|
-
<h5 class="mw-card-stack-title">Connected</h5>
|
|
189
|
-
</div>
|
|
190
|
-
<div class="mw-card-stack-body">
|
|
191
|
-
<div class="mw-tags mw-tags-primary">
|
|
192
|
-
<span class="mw-tags-item">Postgres</span>
|
|
193
|
-
<span class="mw-tags-item">BigQuery</span>
|
|
194
|
-
<span class="mw-tags-item">S3</span>
|
|
195
|
-
</div>
|
|
196
|
-
<p class="mw-card-stack-text">Twelve connectors, no ETL.</p>
|
|
197
|
-
</div>
|
|
198
|
-
</div>
|
|
199
|
-
</div>
|
|
200
|
-
|
|
201
|
-
<!-- A single block reveals as one: plain mw-reveal -->
|
|
202
|
-
<div class="mw-grid-3 mw-mt-8 mw-reveal">
|
|
203
|
-
<div class="mw-info mw-info-counter mw-info-primary">
|
|
204
|
-
<div class="mw-info-value">120+</div>
|
|
205
|
-
<div class="mw-info-label">Teams</div>
|
|
206
|
-
</div>
|
|
207
|
-
<div class="mw-info mw-info-counter mw-info-success">
|
|
208
|
-
<div class="mw-info-value">99.9%</div>
|
|
209
|
-
<div class="mw-info-label">Uptime</div>
|
|
210
|
-
</div>
|
|
211
|
-
<div class="mw-info mw-info-counter">
|
|
212
|
-
<div class="mw-info-value">24/7</div>
|
|
213
|
-
<div class="mw-info-label">Support</div>
|
|
214
|
-
</div>
|
|
215
|
-
</div>
|
|
216
|
-
</div>
|
|
217
|
-
</section>
|
|
218
|
-
|
|
219
|
-
<!-- Pricing -->
|
|
220
|
-
<section id="pricing" class="mw-section">
|
|
221
|
-
<div class="mw-container">
|
|
222
|
-
<div class="mw-section-head">
|
|
223
|
-
<h2 class="mw-section-head-title">Pricing</h2>
|
|
224
|
-
<p class="mw-section-head-intro">
|
|
225
|
-
Per workspace, per month. Every plan starts with a 14 day trial.
|
|
226
|
-
</p>
|
|
227
|
-
</div>
|
|
228
|
-
|
|
229
|
-
<!-- mw-offer pushes the price row to the bottom of the body, so the
|
|
230
|
-
three prices line up although the lists differ in length. The
|
|
231
|
-
feature frame reaches above its card - that is what mw-mt-10 is
|
|
232
|
-
for -->
|
|
233
|
-
<div class="mw-grid-3 mw-mt-10 mw-reveal-stagger">
|
|
234
|
-
<article class="mw-card mw-offer">
|
|
235
|
-
<div class="mw-card-body">
|
|
236
|
-
<h3 class="mw-card-title">Starter</h3>
|
|
237
|
-
<hr class="mw-card-title-divider" />
|
|
238
|
-
<p class="mw-card-text">For small teams getting started.</p>
|
|
239
|
-
<ul class="mw-list mw-list-check">
|
|
240
|
-
<li>3 dashboards</li>
|
|
241
|
-
<li>1 data source</li>
|
|
242
|
-
</ul>
|
|
243
|
-
<p class="mw-price mw-price-sm">
|
|
244
|
-
<span class="mw-price-amount">29</span>
|
|
245
|
-
<span class="mw-price-currency">Euro</span>
|
|
246
|
-
<span class="mw-price-period">/ month</span>
|
|
247
|
-
</p>
|
|
248
|
-
<p class="mw-price-note">Cancel any time.</p>
|
|
249
|
-
<div class="mw-card-footer">
|
|
250
|
-
<button type="button" class="mw-btn mw-btn-outline">
|
|
251
|
-
Choose Starter
|
|
252
|
-
</button>
|
|
253
|
-
</div>
|
|
254
|
-
</div>
|
|
255
|
-
</article>
|
|
256
|
-
|
|
257
|
-
<div class="mw-card-feature mw-card-feature-secondary">
|
|
258
|
-
<p class="mw-card-feature-label">Most booked</p>
|
|
259
|
-
<article class="mw-card mw-offer">
|
|
260
|
-
<div class="mw-card-body">
|
|
261
|
-
<h3 class="mw-card-title">Team</h3>
|
|
262
|
-
<hr class="mw-card-title-divider" />
|
|
263
|
-
<p class="mw-card-text">For growing organisations.</p>
|
|
264
|
-
<ul class="mw-list mw-list-check">
|
|
265
|
-
<li>Unlimited dashboards</li>
|
|
266
|
-
<li>SSO</li>
|
|
267
|
-
<li>Priority support</li>
|
|
268
|
-
</ul>
|
|
269
|
-
<!-- A struck price is invisible to a screen reader - name
|
|
270
|
-
both prices with mw-sr-only -->
|
|
271
|
-
<p class="mw-price mw-price-sm">
|
|
272
|
-
<span class="mw-price-original">
|
|
273
|
-
<span class="mw-sr-only">Regular price:</span>99 Euro
|
|
274
|
-
</span>
|
|
275
|
-
<span class="mw-sr-only">Now:</span>
|
|
276
|
-
<span class="mw-price-amount">79</span>
|
|
277
|
-
<span class="mw-price-currency">Euro</span>
|
|
278
|
-
<span class="mw-tag mw-tag-secondary">-20%</span>
|
|
279
|
-
</p>
|
|
280
|
-
<p class="mw-price-note">
|
|
281
|
-
Per month, launch offer until 30.09.
|
|
282
|
-
</p>
|
|
283
|
-
<div class="mw-card-footer">
|
|
284
|
-
<button type="button" class="mw-btn mw-btn-primary">
|
|
285
|
-
Choose Team
|
|
286
|
-
</button>
|
|
287
|
-
</div>
|
|
288
|
-
</div>
|
|
289
|
-
</article>
|
|
290
|
-
</div>
|
|
291
|
-
|
|
292
|
-
<article class="mw-card mw-offer">
|
|
293
|
-
<div class="mw-card-body">
|
|
294
|
-
<h3 class="mw-card-title">Enterprise</h3>
|
|
295
|
-
<hr class="mw-card-title-divider" />
|
|
296
|
-
<p class="mw-card-text">On premise, custom SLA.</p>
|
|
297
|
-
<ul class="mw-list mw-list-check">
|
|
298
|
-
<li>Everything in Team</li>
|
|
299
|
-
<li>Named contact</li>
|
|
300
|
-
</ul>
|
|
301
|
-
<p class="mw-price mw-price-sm">
|
|
302
|
-
<span class="mw-price-word">On request</span>
|
|
303
|
-
</p>
|
|
304
|
-
<p class="mw-price-note">Priced per seat, yearly term.</p>
|
|
305
|
-
<div class="mw-card-footer">
|
|
306
|
-
<button
|
|
307
|
-
type="button"
|
|
308
|
-
class="mw-btn mw-btn-outline"
|
|
309
|
-
data-mw-modal="demo"
|
|
310
|
-
>
|
|
311
|
-
Contact us
|
|
312
|
-
</button>
|
|
313
|
-
</div>
|
|
314
|
-
</div>
|
|
315
|
-
</article>
|
|
316
|
-
</div>
|
|
317
|
-
</div>
|
|
318
|
-
</section>
|
|
319
|
-
|
|
320
|
-
<!-- Voices -->
|
|
321
|
-
<section id="voices" class="mw-section mw-section-alternate">
|
|
322
|
-
<div class="mw-container">
|
|
323
|
-
<div class="mw-section-head">
|
|
324
|
-
<h2 class="mw-section-head-title">Voices</h2>
|
|
325
|
-
<p class="mw-section-head-intro">
|
|
326
|
-
What teams say after the first quarter.
|
|
327
|
-
</p>
|
|
328
|
-
</div>
|
|
329
|
-
|
|
330
|
-
<!-- Quotes of unequal length: columns, not a grid. The stagger
|
|
331
|
-
works on the column children just the same -->
|
|
332
|
-
<div class="mw-columns-3 mw-reveal-stagger">
|
|
333
|
-
<figure class="mw-testimonial">
|
|
334
|
-
<blockquote>
|
|
335
|
-
The first dashboard was live before the kickoff meeting ended.
|
|
336
|
-
</blockquote>
|
|
337
|
-
<figcaption class="mw-testimonial-source">
|
|
338
|
-
Lena B.
|
|
339
|
-
<span class="mw-testimonial-detail"
|
|
340
|
-
>· Head of Operations</span
|
|
341
|
-
>
|
|
342
|
-
<time class="mw-testimonial-date" datetime="2026-06"
|
|
343
|
-
>June 2026</time
|
|
344
|
-
>
|
|
345
|
-
</figcaption>
|
|
346
|
-
</figure>
|
|
347
|
-
|
|
348
|
-
<figure class="mw-testimonial">
|
|
349
|
-
<blockquote>
|
|
350
|
-
We replaced three reporting tools with one. Finance stopped
|
|
351
|
-
asking for exports, they open the dashboard themselves - and for
|
|
352
|
-
the first time everyone quotes the same number.
|
|
353
|
-
</blockquote>
|
|
354
|
-
<figcaption class="mw-testimonial-source">
|
|
355
|
-
Daniel K.
|
|
356
|
-
<span class="mw-testimonial-detail">· CFO</span>
|
|
357
|
-
</figcaption>
|
|
358
|
-
</figure>
|
|
359
|
-
|
|
360
|
-
<figure class="mw-testimonial">
|
|
361
|
-
<blockquote>Connected our warehouse in an afternoon.</blockquote>
|
|
362
|
-
<figcaption class="mw-testimonial-source">
|
|
363
|
-
Sofia R.
|
|
364
|
-
<span class="mw-testimonial-detail"
|
|
365
|
-
>· Data Engineer</span
|
|
366
|
-
>
|
|
367
|
-
</figcaption>
|
|
368
|
-
</figure>
|
|
369
|
-
</div>
|
|
370
|
-
</div>
|
|
371
|
-
</section>
|
|
372
|
-
|
|
373
|
-
<!-- FAQ -->
|
|
374
|
-
<section id="faq" class="mw-section">
|
|
375
|
-
<div class="mw-container">
|
|
376
|
-
<div class="mw-section-head">
|
|
377
|
-
<h2 class="mw-section-head-title">FAQ</h2>
|
|
378
|
-
</div>
|
|
379
|
-
|
|
380
|
-
<div class="mw-accordion">
|
|
381
|
-
<div class="mw-accordion-item">
|
|
382
|
-
<button
|
|
383
|
-
type="button"
|
|
384
|
-
class="mw-accordion-header mw-active"
|
|
385
|
-
aria-expanded="true"
|
|
386
|
-
aria-controls="faq-storage"
|
|
387
|
-
>
|
|
388
|
-
<span>Where is the data stored?</span>
|
|
389
|
-
<i class="fas fa-chevron-down mw-accordion-icon"></i>
|
|
390
|
-
</button>
|
|
391
|
-
<div class="mw-accordion-content mw-active" id="faq-storage">
|
|
392
|
-
<div class="mw-accordion-content-inner">
|
|
393
|
-
<p>In Frankfurt, in our own data centre.</p>
|
|
394
|
-
</div>
|
|
395
|
-
</div>
|
|
396
|
-
</div>
|
|
397
|
-
|
|
398
|
-
<div class="mw-accordion-item">
|
|
399
|
-
<button
|
|
400
|
-
type="button"
|
|
401
|
-
class="mw-accordion-header"
|
|
402
|
-
aria-expanded="false"
|
|
403
|
-
aria-controls="faq-cancel"
|
|
404
|
-
>
|
|
405
|
-
<span>Can I cancel monthly?</span>
|
|
406
|
-
<i class="fas fa-chevron-down mw-accordion-icon"></i>
|
|
407
|
-
</button>
|
|
408
|
-
<div class="mw-accordion-content" id="faq-cancel">
|
|
409
|
-
<div class="mw-accordion-content-inner">
|
|
410
|
-
<p>Yes, at the end of every billing period.</p>
|
|
411
|
-
</div>
|
|
412
|
-
</div>
|
|
413
|
-
</div>
|
|
414
|
-
</div>
|
|
415
|
-
|
|
416
|
-
<div class="mw-alert mw-alert-info mw-mt-6">
|
|
417
|
-
<div class="mw-alert-icon"><i class="fas fa-lightbulb"></i></div>
|
|
418
|
-
<div class="mw-alert-content">
|
|
419
|
-
<span class="mw-alert-title">Still unsure?</span>
|
|
420
|
-
<!-- A link in running text is mw-link, not a button class - it
|
|
421
|
-
keeps the line height of the paragraph around it -->
|
|
422
|
-
<p>
|
|
423
|
-
<button type="button" class="mw-link" data-mw-modal="demo">
|
|
424
|
-
Book a 20 minute demo</button
|
|
425
|
-
>, no sales pitch.
|
|
426
|
-
</p>
|
|
427
|
-
</div>
|
|
428
|
-
</div>
|
|
429
|
-
</div>
|
|
430
|
-
</section>
|
|
431
|
-
</main>
|
|
432
|
-
|
|
433
|
-
<footer class="mw-footer">
|
|
434
|
-
<div class="mw-container">
|
|
435
|
-
<div class="mw-footer-top">
|
|
436
|
-
<div class="mw-footer-column">
|
|
437
|
-
<h3>Acme Analytics</h3>
|
|
438
|
-
<p>Numbers that answer questions.</p>
|
|
439
|
-
</div>
|
|
440
|
-
<div class="mw-footer-column">
|
|
441
|
-
<h3>Product</h3>
|
|
442
|
-
<ul>
|
|
443
|
-
<li><a href="#features">Features</a></li>
|
|
444
|
-
<li><a href="#pricing">Pricing</a></li>
|
|
445
|
-
<li><a href="#faq">FAQ</a></li>
|
|
446
|
-
</ul>
|
|
447
|
-
</div>
|
|
448
|
-
</div>
|
|
449
|
-
|
|
450
|
-
<div class="mw-social-links">
|
|
451
|
-
<a href="#" data-tooltip="GitHub"><i class="fab fa-github"></i></a>
|
|
452
|
-
<a href="mailto:hi@example.com" data-tooltip="Mail"
|
|
453
|
-
><i class="fa fa-envelope"></i
|
|
454
|
-
></a>
|
|
455
|
-
</div>
|
|
456
|
-
|
|
457
|
-
<p class="mw-copyright">© 2026 Acme</p>
|
|
458
|
-
</div>
|
|
459
|
-
</footer>
|
|
460
|
-
|
|
461
|
-
<!-- Markup stays in the DOM; a trigger carrying data-mw-modal="demo" opens
|
|
462
|
-
it, .mw-modal-close closes it, closedby="any" dismisses on the backdrop -->
|
|
463
|
-
<dialog
|
|
464
|
-
id="demo"
|
|
465
|
-
class="mw-modal"
|
|
466
|
-
closedby="any"
|
|
467
|
-
aria-labelledby="demo-title"
|
|
468
|
-
>
|
|
469
|
-
<div class="mw-modal-header">
|
|
470
|
-
<h4 class="mw-modal-title" id="demo-title">Book a demo</h4>
|
|
471
|
-
<button type="button" class="mw-modal-close">𝗫</button>
|
|
472
|
-
</div>
|
|
473
|
-
<div class="mw-modal-body">
|
|
474
|
-
<form class="mw-form">
|
|
475
|
-
<div class="mw-field">
|
|
476
|
-
<label class="mw-field-label mw-required" for="demo-email"
|
|
477
|
-
>Email</label
|
|
478
|
-
>
|
|
479
|
-
<div class="mw-input-group">
|
|
480
|
-
<span class="mw-input-group-prefix"
|
|
481
|
-
><i class="fas fa-envelope"></i
|
|
482
|
-
></span>
|
|
483
|
-
<input id="demo-email" type="email" class="mw-input" required />
|
|
484
|
-
</div>
|
|
485
|
-
</div>
|
|
486
|
-
</form>
|
|
487
|
-
</div>
|
|
488
|
-
<div class="mw-modal-footer">
|
|
489
|
-
<button type="button" class="mw-modal-close mw-btn mw-btn-outline">
|
|
490
|
-
Cancel
|
|
491
|
-
</button>
|
|
492
|
-
<button type="button" class="mw-btn mw-btn-primary">Send</button>
|
|
493
|
-
</div>
|
|
494
|
-
</dialog>
|
|
495
|
-
|
|
496
|
-
<script src="https://cdn.jsdelivr.net/npm/maverick-wave@5/maverick-wave.min.js"></script>
|
|
497
|
-
</body>
|
|
498
|
-
</html>
|
|
499
|
-
```
|
|
500
|
-
|
|
501
|
-
## Notes
|
|
502
|
-
|
|
503
|
-
- The theme toggle needs no code - the script persists the choice under
|
|
504
|
-
`localStorage['mw-theme']`, toggles `mw-theme-light` / `mw-theme-dark` on
|
|
505
|
-
`<body>` and wraps the
|
|
506
|
-
flip in `mw-theme-switching` so it starts no transitions.
|
|
507
|
-
- The scroll spy sets `mw-active` on the `mw-navbar-link` whose `href` matches
|
|
508
|
-
the `section[id]` currently in view - the `<section id="…">` elements are
|
|
509
|
-
the contract.
|
|
510
|
-
- `mw-navbar` without a size class collapses at `md`. With four to five links
|
|
511
|
-
use `mw-navbar-medium`, with six or more `mw-navbar-large`.
|
|
512
|
-
- The hero container becomes full-bleed only because it contains `mw-hero`; the
|
|
513
|
-
other `mw-container` elements stay at `min(1200px, 89%)`. The scroll cue is a
|
|
514
|
-
sibling of `mw-hero` in that container - the hero reserves a strip at its
|
|
515
|
-
bottom for it, so the buttons never sit on top of the cue.
|
|
516
|
-
- `mw-announcement` is fixed below the header. `scroll-padding-top` grows by
|
|
517
|
-
`--mw-announcement-height` automatically, so an anchor scrolled to lands
|
|
518
|
-
below the ribbon. One per page; `mw-announcement-static` puts it in the flow
|
|
519
|
-
instead.
|
|
520
|
-
- `mw-reveal-stagger` goes on the grid (or `mw-columns-*`) and reveals every
|
|
521
|
-
child as it scrolls in, the second and third of each three a beat later.
|
|
522
|
-
`mw-reveal` on a single block reveals that block as one. Both are off under
|
|
523
|
-
`prefers-reduced-motion`. A page like this one loads the script, so Firefox -
|
|
524
|
-
which has no scroll timelines - runs the same entrance off an observer;
|
|
525
|
-
without the script the blocks stand in place, never invisible.
|
|
526
|
-
- `mw-offer` on a card pushes the price row to the bottom of the body, so the
|
|
527
|
-
prices in a row line up. The `mw-card-feature` frame around the middle plan
|
|
528
|
-
reaches 29px above its card - the `mw-mt-10` on the grid is that room.
|
|
529
|
-
- Overriding `--mw-primary-color` in a `<style>` block is enough - hover tones,
|
|
530
|
-
translucent backgrounds and the border accent follow via `color-mix()`.
|