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.
- package/.claude/settings.local.json +29 -1
- package/.claude/skills/mw-maverick-wave/SKILL.md +39 -24
- package/.claude/skills/mw-maverick-wave/examples/angular-services.md +16 -4
- package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +13 -4
- package/.claude/skills/mw-maverick-wave/references/components.md +42 -5
- package/.claude/skills/mw-maverick-wave/references/forms.md +14 -2
- package/.claude/skills/mw-maverick-wave/references/javascript.md +17 -4
- package/.claude/skills/mw-maverick-wave/references/layout.md +53 -19
- package/.claude/skills/mw-maverick-wave/references/theming.md +38 -1
- package/.impeccable/config.local.json +5 -0
- package/.impeccable/hook.cache.json +1 -0
- package/CHANGELOG.md +11 -0
- package/CLAUDE.md +5 -5
- package/README.md +48 -4
- package/index.html +19 -38
- package/maverick-wave.min.css +14 -12
- package/maverick-wave.min.js +1 -1
- package/package.json +2 -2
- package/scripts/verify.js +27 -2
- package/src/js/main.js +223 -83
- package/src/partials/accordions-container.html +6 -10
- package/src/partials/alerts-container.html +6 -6
- package/src/partials/announcement-container.html +5 -5
- package/src/partials/avatars-container.html +85 -17
- package/src/partials/badges-container.html +6 -6
- package/src/partials/blog-posts-container.html +11 -12
- package/src/partials/buttons-container.html +3 -3
- package/src/partials/cards-container.html +26 -9
- package/src/partials/code-container.html +5 -5
- package/src/partials/content-slider-container.html +5 -4
- package/src/partials/divider-container.html +7 -7
- package/src/partials/dropdown-container.html +2 -2
- package/src/partials/empty-state-container.html +5 -5
- package/src/partials/footer-container.html +21 -18
- package/src/partials/form-elements-container.html +14 -14
- package/src/partials/gallery-container.html +16 -8
- package/src/partials/get-started-container.html +4 -8
- package/src/partials/header-container.html +18 -7
- package/src/partials/home-container.html +10 -20
- package/src/partials/input-group-container.html +11 -2
- package/src/partials/kbd-container.html +1 -1
- package/src/partials/login-container.html +5 -1
- package/src/partials/media-container.html +2 -2
- package/src/partials/modals-container.html +22 -32
- package/src/partials/pricing-container.html +9 -9
- package/src/partials/skeleton-container.html +6 -6
- package/src/partials/stepper-container.html +2 -2
- package/src/partials/tables-container.html +12 -12
- package/src/partials/tabs-container.html +17 -27
- package/src/partials/tags-container.html +23 -17
- package/src/partials/techstack-bucket-container.html +13 -0
- package/src/partials/tiles-container.html +26 -9
- package/src/partials/typography-container.html +7 -6
- package/src/partials/utilities-container.html +35 -15
- package/src/scss/_layers.scss +10 -0
- package/src/scss/abstracts/_index.scss +6 -0
- package/src/scss/abstracts/_mixins.scss +61 -153
- package/src/scss/abstracts/_variables.scss +123 -319
- package/src/scss/base/_base.scss +170 -190
- package/src/scss/base/_reset.scss +106 -104
- package/src/scss/base/_typography.scss +153 -151
- package/src/scss/components/_accordions.scss +97 -97
- package/src/scss/components/_alerts.scss +71 -70
- package/src/scss/components/_announcement.scss +71 -70
- package/src/scss/components/_avatars.scss +130 -142
- package/src/scss/components/_badge.scss +131 -132
- package/src/scss/components/_blog-post.scss +223 -220
- package/src/scss/components/_breadcrumbs.scss +93 -92
- package/src/scss/components/_button-bar.scss +102 -110
- package/src/scss/components/_buttons.scss +319 -324
- package/src/scss/components/_calendar.scss +251 -252
- package/src/scss/components/_cards.scss +359 -386
- package/src/scss/components/_code.scss +190 -194
- package/src/scss/components/_coming-soon.scss +77 -75
- package/src/scss/components/_content-slider.scss +90 -89
- package/src/scss/components/_divider.scss +55 -53
- package/src/scss/components/_dropdown.scss +179 -185
- package/src/scss/components/_empty-state.scss +57 -57
- package/src/scss/components/_flag.scss +294 -278
- package/src/scss/components/_gallery.scss +131 -133
- package/src/scss/components/_info.scss +151 -167
- package/src/scss/components/_kanban.scss +332 -341
- package/src/scss/components/_kbd.scss +40 -38
- package/src/scss/components/_lang-switch.scss +89 -97
- package/src/scss/components/_links.scss +21 -28
- package/src/scss/components/_lists.scss +510 -514
- package/src/scss/components/_localhost-indicator.scss +26 -24
- package/src/scss/components/_media.scss +22 -20
- package/src/scss/components/_meta-info.scss +35 -33
- package/src/scss/components/_modals.scss +277 -186
- package/src/scss/components/_pagination.scss +81 -87
- package/src/scss/components/_panels.scss +99 -97
- package/src/scss/components/_pricing.scss +183 -241
- package/src/scss/components/_progress.scss +112 -89
- package/src/scss/components/_prose.scss +35 -33
- package/src/scss/components/_ratings.scss +40 -38
- package/src/scss/components/_segmented.scss +82 -84
- package/src/scss/components/_skeleton.scss +66 -72
- package/src/scss/components/_spinners.scss +155 -159
- package/src/scss/components/_stepper.scss +116 -116
- package/src/scss/components/_tables.scss +155 -148
- package/src/scss/components/_tabs.scss +232 -141
- package/src/scss/components/_tags.scss +109 -107
- package/src/scss/components/_techstack-bucket.scss +123 -122
- package/src/scss/components/_testimonial.scss +72 -70
- package/src/scss/components/_theme-toggle.scss +53 -51
- package/src/scss/components/_tiles.scss +174 -174
- package/src/scss/components/_timelines.scss +282 -280
- package/src/scss/components/_toasts.scss +66 -72
- package/src/scss/form-elements/_checkbox.scss +117 -132
- package/src/scss/form-elements/_form.scss +149 -115
- package/src/scss/form-elements/_input-group.scss +99 -103
- package/src/scss/form-elements/_input.scss +74 -74
- package/src/scss/form-elements/_login.scss +48 -48
- package/src/scss/form-elements/_prefilled.scss +53 -51
- package/src/scss/form-elements/_radio.scss +95 -107
- package/src/scss/form-elements/_select.scss +42 -42
- package/src/scss/form-elements/_slider.scss +117 -132
- package/src/scss/form-elements/_textarea.scss +68 -54
- package/src/scss/form-elements/_toggle.scss +127 -140
- package/src/scss/layout/_footer.scss +172 -171
- package/src/scss/layout/_grid.scss +268 -302
- package/src/scss/layout/_header.scss +426 -427
- package/src/scss/layout/_home.scss +28 -27
- package/src/scss/layout/_main.scss +275 -238
- package/src/scss/layout/_page-header.scss +38 -36
- package/src/scss/layout/_section.scss +150 -124
- package/src/scss/main.scss +1 -1
- package/src/scss/utilities/_accessibility.scss +46 -45
- package/src/scss/utilities/_aspect.scss +22 -20
- package/src/scss/utilities/_corner.scss +23 -5
- package/src/scss/utilities/_display.scss +76 -70
- package/src/scss/utilities/_elevation.scss +13 -11
- package/src/scss/utilities/_flex.scss +83 -85
- package/src/scss/utilities/_reveal.scss +40 -63
- package/src/scss/utilities/_spacing.scss +63 -64
- package/src/scss/utilities/_text.scss +139 -141
- package/src/scss/utilities/_touch-targets.scss +130 -147
|
@@ -1,180 +1,178 @@
|
|
|
1
1
|
@use '../abstracts' as *;
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
.mw-text {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
@layer mw.utilities {
|
|
4
|
+
.mw-text {
|
|
5
|
+
&-center {
|
|
6
|
+
text-align: center;
|
|
7
|
+
}
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
&-left {
|
|
10
|
+
text-align: left;
|
|
11
|
+
}
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
&-right {
|
|
14
|
+
text-align: right;
|
|
15
|
+
}
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
// Fixed-width digits, nothing else. For anything where figures have to line
|
|
18
|
+
// up vertically or must not jitter while they count: a clock, a counter, a
|
|
19
|
+
// key figure, an ID. `lining-nums` guards against fonts that default to
|
|
20
|
+
// old-style figures.
|
|
21
|
+
//
|
|
22
|
+
// Deliberately without alignment: bundling `text-align: right` in here meant
|
|
23
|
+
// that whoever only wanted the digits could not use the class and wrote the
|
|
24
|
+
// declaration out by hand instead.
|
|
25
|
+
&-numeric {
|
|
26
|
+
font-variant-numeric: tabular-nums lining-nums;
|
|
27
|
+
font-feature-settings: 'tnum', 'lnum';
|
|
28
|
+
}
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
30
|
+
// For money and other figures in tables: the digits from above, plus
|
|
31
|
+
// right-aligned and never wrapped mid-number. Locale-agnostic - it works for
|
|
32
|
+
// 1,204.50 and 1.204,50 alike, because the alignment comes from the right
|
|
33
|
+
// edge, not from the separator.
|
|
34
|
+
&-currency {
|
|
35
|
+
text-align: right;
|
|
36
|
+
font-variant-numeric: tabular-nums lining-nums;
|
|
37
|
+
font-feature-settings: 'tnum', 'lnum';
|
|
38
|
+
white-space: nowrap;
|
|
39
|
+
}
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
&-primary {
|
|
42
|
+
color: var(--mw-primary-text-color);
|
|
43
|
+
}
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
&-secondary {
|
|
46
|
+
color: var(--mw-secondary-text-color);
|
|
47
|
+
}
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
&-success {
|
|
50
|
+
color: var(--mw-success-text-color);
|
|
51
|
+
}
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
&-warning {
|
|
54
|
+
color: var(--mw-warning-text-color);
|
|
55
|
+
}
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
&-danger {
|
|
58
|
+
color: var(--mw-danger-text-color);
|
|
59
|
+
}
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
&-info {
|
|
62
|
+
color: var(--mw-info-text-color);
|
|
63
|
+
}
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
&-muted {
|
|
66
|
+
color: var(--mw-text-muted-color);
|
|
67
|
+
}
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
&-bold {
|
|
70
|
+
font-weight: font-weight('bold');
|
|
71
|
+
}
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
&-medium {
|
|
74
|
+
font-weight: font-weight('medium');
|
|
75
|
+
}
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
&-normal {
|
|
78
|
+
font-weight: font-weight('normal');
|
|
79
|
+
}
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
&-light {
|
|
82
|
+
font-weight: font-weight('light');
|
|
83
|
+
}
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
&-italic {
|
|
86
|
+
font-style: italic;
|
|
87
|
+
}
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
&-color-dark {
|
|
90
|
+
color: var(--mw-dark-text-color);
|
|
91
|
+
}
|
|
92
92
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
&-color-light {
|
|
94
|
+
color: var(--mw-light-text-color);
|
|
95
|
+
}
|
|
96
96
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
@each $name, $size in $font-sizes {
|
|
98
|
+
&-#{$name} {
|
|
99
|
+
font-size: $size;
|
|
100
|
+
}
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
|
-
}
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
104
|
+
.mw-leading {
|
|
105
|
+
&-tight {
|
|
106
|
+
line-height: 1.2;
|
|
107
|
+
}
|
|
109
108
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
109
|
+
&-normal {
|
|
110
|
+
line-height: 1.5;
|
|
111
|
+
}
|
|
113
112
|
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
&-loose {
|
|
114
|
+
line-height: 1.8;
|
|
115
|
+
}
|
|
116
116
|
}
|
|
117
|
-
}
|
|
118
117
|
|
|
119
|
-
|
|
120
|
-
.mw-text-truncate {
|
|
121
|
-
overflow: hidden;
|
|
122
|
-
text-overflow: ellipsis;
|
|
123
|
-
white-space: nowrap;
|
|
124
|
-
min-width: 0;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
@each $lines in (2, 3, 4, 5) {
|
|
128
|
-
.mw-text-clamp-#{$lines} {
|
|
129
|
-
display: -webkit-box;
|
|
130
|
-
-webkit-line-clamp: $lines;
|
|
131
|
-
line-clamp: $lines;
|
|
132
|
-
-webkit-box-orient: vertical;
|
|
118
|
+
.mw-text-truncate {
|
|
133
119
|
overflow: hidden;
|
|
120
|
+
text-overflow: ellipsis;
|
|
121
|
+
white-space: nowrap;
|
|
122
|
+
min-width: 0;
|
|
134
123
|
}
|
|
135
|
-
}
|
|
136
124
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
125
|
+
@each $lines in (2, 3, 4, 5) {
|
|
126
|
+
.mw-text-clamp-#{$lines} {
|
|
127
|
+
display: -webkit-box;
|
|
128
|
+
-webkit-line-clamp: $lines;
|
|
129
|
+
line-clamp: $lines;
|
|
130
|
+
-webkit-box-orient: vertical;
|
|
131
|
+
overflow: hidden;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
140
134
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
overflow-wrap: anywhere;
|
|
145
|
-
word-break: break-word;
|
|
146
|
-
}
|
|
135
|
+
.mw-text-nowrap {
|
|
136
|
+
white-space: nowrap;
|
|
137
|
+
}
|
|
147
138
|
|
|
148
|
-
//
|
|
149
|
-
|
|
150
|
-
text-
|
|
151
|
-
|
|
139
|
+
// For anything that has no spaces to break at - a URL, a hash, an API key -
|
|
140
|
+
// and would otherwise push the page sideways on a phone
|
|
141
|
+
.mw-text-break {
|
|
142
|
+
overflow-wrap: anywhere;
|
|
143
|
+
word-break: break-word;
|
|
144
|
+
}
|
|
152
145
|
|
|
153
|
-
.mw-text-
|
|
154
|
-
|
|
155
|
-
}
|
|
146
|
+
.mw-text-balance {
|
|
147
|
+
text-wrap: balance;
|
|
148
|
+
}
|
|
156
149
|
|
|
157
|
-
.mw-text-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}
|
|
150
|
+
.mw-text-pretty {
|
|
151
|
+
text-wrap: pretty;
|
|
152
|
+
}
|
|
161
153
|
|
|
162
|
-
.mw-text-
|
|
163
|
-
|
|
164
|
-
|
|
154
|
+
.mw-text-uppercase {
|
|
155
|
+
text-transform: uppercase;
|
|
156
|
+
letter-spacing: 0.05em;
|
|
157
|
+
}
|
|
165
158
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
font-size: font-size('2xs');
|
|
170
|
-
font-weight: font-weight('bold');
|
|
171
|
-
letter-spacing: 0.12em;
|
|
172
|
-
text-transform: uppercase;
|
|
173
|
-
color: var(--mw-text-muted-color);
|
|
174
|
-
}
|
|
159
|
+
.mw-text-capitalize {
|
|
160
|
+
text-transform: capitalize;
|
|
161
|
+
}
|
|
175
162
|
|
|
176
|
-
//
|
|
177
|
-
//
|
|
178
|
-
.mw-text-
|
|
179
|
-
|
|
163
|
+
// A kicker or an eyebrow over a heading - the small, spaced, upper-case line
|
|
164
|
+
// that says what section this is
|
|
165
|
+
.mw-text-eyebrow {
|
|
166
|
+
font-size: font-size('2xs');
|
|
167
|
+
font-weight: font-weight('bold');
|
|
168
|
+
letter-spacing: 0.12em;
|
|
169
|
+
text-transform: uppercase;
|
|
170
|
+
color: var(--mw-text-muted-color);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Sets the measure a column of text is comfortable at. Anything past roughly 75
|
|
174
|
+
// characters and the eye loses the start of the next line on the way back.
|
|
175
|
+
.mw-text-measure {
|
|
176
|
+
max-width: 68ch;
|
|
177
|
+
}
|
|
180
178
|
}
|
|
@@ -1,175 +1,158 @@
|
|
|
1
1
|
@use '../abstracts' as *;
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@media (pointer: coarse), (max-width: #{breakpoint('md')}) {
|
|
15
|
-
// The default button was the one that got missed. Its padding and line-height
|
|
16
|
-
// add up to about 35px, which is under the 44px every platform guideline asks
|
|
17
|
-
// for and the size a thumb actually is. Only the height grows - the padding
|
|
18
|
-
// is what sets the label's relationship to the edges and is right as it is.
|
|
19
|
-
.mw-btn {
|
|
20
|
-
min-height: 2.75rem;
|
|
21
|
-
}
|
|
3
|
+
@layer mw.utilities {
|
|
4
|
+
// WCAG 2.5.8 puts the floor at 24x24px, and a floor is not a goal - the compact
|
|
5
|
+
// sizes are right under a pointer and too small under a thumb. Coarse *or*
|
|
6
|
+
// narrow, because a tablet in landscape is wide and still finger-operated.
|
|
7
|
+
// Loaded last, so these win without extra specificity.
|
|
8
|
+
@media (pointer: coarse), (max-width: #{breakpoint('md')}) {
|
|
9
|
+
// Padding and line-height add up to ~35px, under the 44px a thumb needs. Only
|
|
10
|
+
// the height grows: the padding sets the label's relationship to the edges.
|
|
11
|
+
.mw-btn {
|
|
12
|
+
min-height: 2.75rem;
|
|
13
|
+
}
|
|
22
14
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
15
|
+
.mw-btn-sm {
|
|
16
|
+
min-height: 2.5rem;
|
|
17
|
+
}
|
|
26
18
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
19
|
+
.mw-input-sm,
|
|
20
|
+
.mw-select-sm,
|
|
21
|
+
.mw-textarea-sm {
|
|
22
|
+
min-height: 2.5rem;
|
|
23
|
+
}
|
|
32
24
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
25
|
+
// The base fields sit at 2.35rem from the control scale, which is right under
|
|
26
|
+
// a pointer and short of a thumb. Same floor as the button beside them.
|
|
27
|
+
.mw-input,
|
|
28
|
+
.mw-select {
|
|
29
|
+
min-height: 2.75rem;
|
|
30
|
+
}
|
|
39
31
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
32
|
+
.mw-input,
|
|
33
|
+
.mw-input-sm,
|
|
34
|
+
.mw-input-lg,
|
|
35
|
+
.mw-select,
|
|
36
|
+
.mw-select-sm,
|
|
37
|
+
.mw-select-lg,
|
|
38
|
+
.mw-textarea,
|
|
39
|
+
.mw-textarea-sm,
|
|
40
|
+
.mw-textarea-lg {
|
|
41
|
+
font-size: 16px;
|
|
42
|
+
}
|
|
51
43
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
44
|
+
// A tab strip is the one navigation a phone has no fallback for
|
|
45
|
+
.mw-tabs-nav-item {
|
|
46
|
+
display: flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
min-height: 2.75rem;
|
|
49
|
+
}
|
|
58
50
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
51
|
+
.mw-segmented-item {
|
|
52
|
+
min-height: 2.5rem;
|
|
53
|
+
}
|
|
62
54
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
55
|
+
// Rows of a list, items of a menu, links in a footer, pages of a pager - the
|
|
56
|
+
// controls that are a line of text on a desktop and a target on a phone
|
|
57
|
+
.mw-dropdown-item,
|
|
58
|
+
.mw-accordion-header,
|
|
59
|
+
.mw-modal-close,
|
|
60
|
+
.mw-breadcrumbs-item a {
|
|
61
|
+
min-height: 2.75rem;
|
|
62
|
+
display: flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
}
|
|
73
65
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
66
|
+
// A checkbox or radio is tapped by its label as much as by the box, so the
|
|
67
|
+
// whole row has to be the target - which it only is if the row is tall enough
|
|
68
|
+
.mw-checkbox,
|
|
69
|
+
.mw-radio,
|
|
70
|
+
.mw-toggle {
|
|
71
|
+
min-height: 2.5rem;
|
|
72
|
+
}
|
|
81
73
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
74
|
+
.mw-calendar-day {
|
|
75
|
+
min-height: 44px;
|
|
76
|
+
}
|
|
85
77
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
78
|
+
// A gallery dot is 9px here - the target got *smaller* exactly where the
|
|
79
|
+
// pointer got coarser. Same treatment as the mini button below: the dot keeps
|
|
80
|
+
// its silhouette, only the hit area grows to the 24px floor. The gap has to
|
|
81
|
+
// grow with it, or two neighbouring hit areas overlap and a tap aimed at one
|
|
82
|
+
// slide brings up the next.
|
|
83
|
+
.mw-gallery-dots {
|
|
84
|
+
gap: spacing('6');
|
|
85
|
+
}
|
|
94
86
|
|
|
95
|
-
|
|
96
|
-
|
|
87
|
+
.mw-gallery-dot {
|
|
88
|
+
position: relative;
|
|
97
89
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
90
|
+
&::after {
|
|
91
|
+
content: '';
|
|
92
|
+
position: absolute;
|
|
93
|
+
inset: -7.5px;
|
|
94
|
+
}
|
|
102
95
|
}
|
|
103
|
-
}
|
|
104
96
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
.mw-slider {
|
|
115
|
-
box-sizing: content-box;
|
|
116
|
-
padding-block: 18px;
|
|
117
|
-
background-clip: content-box;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// The 18px silhouette stays: mini buttons sit in tag rows and table cells,
|
|
121
|
-
// where growing the circle would shift the layout around them. Only the hit
|
|
122
|
-
// area grows, to 28px - clear of the 24px floor. The extra margin keeps two
|
|
123
|
-
// neighbouring hit areas from overlapping.
|
|
124
|
-
.mw-btn-mini {
|
|
125
|
-
position: relative;
|
|
126
|
-
margin-left: spacing('4');
|
|
97
|
+
// A range input is as tall as its track, so the whole hit area is 8px and you
|
|
98
|
+
// drag the page instead. `content-box` keeps the height the track's and makes
|
|
99
|
+
// the padding the hit area on top, so no track height has to be repeated from
|
|
100
|
+
// _slider.scss - each variant grows off its own: 8px + 36 = 44.
|
|
101
|
+
.mw-slider {
|
|
102
|
+
box-sizing: content-box;
|
|
103
|
+
padding-block: 18px;
|
|
104
|
+
background-clip: content-box;
|
|
105
|
+
}
|
|
127
106
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
107
|
+
// The 18px silhouette stays: mini buttons sit in tag rows and table cells,
|
|
108
|
+
// where growing the circle would shift the layout around them. Only the hit
|
|
109
|
+
// area grows, to 28px - clear of the 24px floor. The extra margin keeps two
|
|
110
|
+
// neighbouring hit areas from overlapping.
|
|
111
|
+
.mw-btn-mini {
|
|
112
|
+
position: relative;
|
|
113
|
+
margin-left: spacing('4');
|
|
114
|
+
|
|
115
|
+
&::after {
|
|
116
|
+
content: '';
|
|
117
|
+
position: absolute;
|
|
118
|
+
inset: -5px;
|
|
119
|
+
}
|
|
132
120
|
}
|
|
133
121
|
}
|
|
134
|
-
}
|
|
135
122
|
|
|
136
|
-
|
|
137
|
-
.mw-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
-webkit-overflow-scrolling: touch;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Phone layout. The section rhythm steps down twice: a tablet keeps a middle
|
|
144
|
-
// value, a phone drops further - every rem here is one the reader has to
|
|
145
|
-
// scroll past on a screen that is already all scrolling.
|
|
146
|
-
@include media-down('md') {
|
|
147
|
-
:root {
|
|
148
|
-
--mw-section-padding-block: #{spacing('9')};
|
|
123
|
+
.mw-table-responsive,
|
|
124
|
+
.mw-tabs-nav {
|
|
125
|
+
overscroll-behavior-x: contain;
|
|
126
|
+
-webkit-overflow-scrolling: touch;
|
|
149
127
|
}
|
|
150
|
-
}
|
|
151
128
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
129
|
+
// Phone layout. The section rhythm steps down twice: a tablet keeps a middle
|
|
130
|
+
// value, a phone drops further - every rem here is one the reader has to
|
|
131
|
+
// scroll past on a screen that is already all scrolling.
|
|
132
|
+
@include media-down('md') {
|
|
133
|
+
:root {
|
|
134
|
+
--mw-section-padding-block: #{spacing('9')};
|
|
135
|
+
}
|
|
155
136
|
}
|
|
156
|
-
}
|
|
157
137
|
|
|
158
|
-
@include media-down('sm') {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
padding: spacing('4');
|
|
138
|
+
@include media-down('sm') {
|
|
139
|
+
:root {
|
|
140
|
+
--mw-section-padding-block: #{spacing('7')};
|
|
141
|
+
}
|
|
163
142
|
}
|
|
164
143
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
144
|
+
@include media-down('sm') {
|
|
145
|
+
// Cards sit edge to edge on a phone, so the padding inside them is all that
|
|
146
|
+
// separates the text from the screen edge - it cannot be the desktop value
|
|
147
|
+
.mw-card-simple {
|
|
148
|
+
padding: spacing('4');
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Stacked buttons at their label's width read as a list of unrelated things.
|
|
152
|
+
// Not mw-card-footer: that stacks on its *container*, so at 390px it is still
|
|
153
|
+
// a row, and flex-grow on a row makes a card's action a full-bleed band.
|
|
154
|
+
.mw-form-actions .mw-btn {
|
|
155
|
+
flex: 1 1 auto;
|
|
156
|
+
}
|
|
174
157
|
}
|
|
175
158
|
}
|