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
@@ -1,301 +1,300 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Pixel-precise shape values
4
- $_mw-calendar-dot-size: 5px;
5
- $_mw-calendar-dot-gap: 3px;
6
- $_mw-calendar-cell-height: 38px;
7
- $_mw-calendar-cell-height-compact: 29px;
8
- $_mw-calendar-grid-gap: 4px;
9
- $_mw-calendar-grid-gap-sm: 3px;
10
- $_mw-calendar-grid-gap-compact: 3px;
11
-
12
- $_mw-calendar-dot-tones: (
13
- 'primary': var(--mw-primary-text-color),
14
- 'secondary': var(--mw-secondary-text-color),
15
- 'success': var(--mw-success-text-color),
16
- 'warning': var(--mw-warning-text-color),
17
- 'danger': var(--mw-danger-text-color),
18
- 'info': var(--mw-info-text-color),
19
- );
20
-
21
- // Same silhouette as a card, but without the hover lift
22
- .mw-calendar {
23
- display: block;
24
- padding: spacing('5');
25
- background: var(--mw-card-background);
26
- border: 1px solid var(--mw-border);
27
- @include surface;
28
- box-shadow: var(--mw-elevation-2);
29
- }
30
-
31
- // Calendar without its own surface - for one that already sits on a card
32
- .mw-calendar-plain {
33
- padding: spacing('0');
34
- background: transparent;
35
- border: none;
36
- box-shadow: none;
37
- }
38
-
39
- .mw-calendar-header {
40
- display: flex;
41
- align-items: center;
42
- gap: spacing('3');
43
- margin-bottom: spacing('5');
44
- }
45
-
46
- // Takes the space between the two arrows so the label stays optically centred
47
- .mw-calendar-title {
48
- flex: 1;
49
- min-width: 0;
50
- text-align: center;
51
- font-size: font-size('md');
52
- font-weight: font-weight('medium');
53
- color: var(--mw-text-color);
54
- white-space: nowrap;
55
- overflow: hidden;
56
- text-overflow: ellipsis;
57
- }
58
-
59
- // Sits on .mw-btn - this only squares it off around the chevron
60
- .mw-calendar-nav {
61
- padding: spacing('2') spacing('4');
62
- line-height: 1;
63
- flex-shrink: 0;
64
- }
65
-
66
- // Grid
67
- .mw-calendar-grid {
68
- display: grid;
69
- grid-template-columns: repeat(7, minmax(0, 1fr));
70
- gap: $_mw-calendar-grid-gap;
71
- }
72
-
73
- .mw-calendar-weekday {
74
- padding-bottom: spacing('2');
75
- text-align: center;
76
- font-size: font-size('2xs');
77
- font-weight: font-weight('bold');
78
- color: var(--mw-text-muted-color);
79
- text-transform: uppercase;
80
- letter-spacing: 0.05em;
81
- overflow: hidden;
82
- text-overflow: ellipsis;
83
- white-space: nowrap;
84
- }
85
-
86
- // Saturday and Sunday read like a wall calendar - the label carries the
87
- // weekend, the cell below only gets a faint tint
88
- .mw-calendar-weekday.mw-calendar-weekend {
89
- color: var(--mw-danger-text-color);
90
- }
91
-
92
- // A fixed row height instead of an aspect ratio
93
- .mw-calendar-day {
94
- position: relative;
95
- display: flex;
96
- align-items: center;
97
- justify-content: center;
98
- min-height: $_mw-calendar-cell-height;
99
- padding: spacing('1');
100
- border: 1px solid transparent;
101
- border-radius: radius('sm');
102
- background: transparent;
103
- color: var(--mw-text-color);
104
- font: inherit;
105
- font-size: font-size('sm');
106
- font-variant-numeric: tabular-nums;
107
- line-height: 1;
108
- cursor: pointer;
109
- transition: var(--mw-transition);
110
- -webkit-tap-highlight-color: transparent;
111
- touch-action: manipulation;
112
- }
113
-
114
- .mw-calendar-day:active:not(:disabled) {
115
- transform: scale(0.92);
116
- transition-duration: var(--mw-duration-instant);
117
- }
118
-
119
- .mw-calendar-day.mw-calendar-weekend {
120
- background: var(--mw-gray-background);
121
- }
122
-
123
- // Days spilling in from the neighbouring month stay readable but clearly step
124
- // back - leaving them out would make the first and last row look broken
125
- .mw-calendar-day.mw-calendar-adjacent {
126
- color: var(--mw-text-muted-color);
127
- opacity: 0.5;
128
- }
129
-
130
- .mw-calendar-day:hover:not(:disabled):not(.mw-selected) {
131
- background: var(--mw-primary-background);
132
- border-color: var(--mw-border-accent);
133
- }
134
-
135
- .mw-calendar-day:focus-visible {
136
- outline: none;
137
- @include focus-halo;
138
- border-color: var(--mw-primary-text-color);
139
- }
140
-
141
- // Today gets the outline, the selection gets the fill - both at once would be
142
- // indistinguishable. Secondary, so it never reads as a selection.
143
- .mw-calendar-day.mw-calendar-today {
144
- border-color: var(--mw-secondary-text-color);
145
- font-weight: font-weight('bold');
146
- }
147
-
148
- .mw-calendar-day.mw-selected {
149
- background: var(--mw-primary-color);
150
- border-color: var(--mw-primary-text-color);
151
- color: var(--mw-primary-accent-text-color);
152
- opacity: 1;
153
- }
154
-
155
- // A day that cannot be picked stays legible
156
- .mw-calendar-day:disabled {
157
- cursor: not-allowed;
158
- color: var(--mw-text-muted-color);
159
- opacity: 0.4;
160
- }
161
-
162
- // Own element so the dots can be positioned against it
163
- .mw-calendar-date {
164
- line-height: 1;
165
- }
166
-
167
- // Status dots
168
- .mw-calendar-dots {
169
- position: absolute;
170
- bottom: 5px;
171
- left: 0;
172
- right: 0;
173
- display: flex;
174
- align-items: center;
175
- justify-content: center;
176
- gap: $_mw-calendar-dot-gap;
177
- pointer-events: none;
178
- }
179
-
180
- // What a dot means belongs to the caller: the same calendar reads "request
181
- // pending / booked / time offered" in one app and something else entirely on a
182
- // public booking page. So the colour is a property, settable per cell, and the
183
- // tone classes below are just named presets for it.
184
- .mw-calendar-dot {
185
- width: $_mw-calendar-dot-size;
186
- height: $_mw-calendar-dot-size;
187
- border-radius: radius('full');
188
- background: var(--mw-calendar-dot, var(--mw-text-muted-color));
189
- flex-shrink: 0;
190
- }
191
-
192
- @each $name, $color in $_mw-calendar-dot-tones {
193
- .mw-calendar-dot-#{$name} {
194
- --mw-calendar-dot: #{$color};
3
+ @layer mw.components {
4
+ // Pixel-precise shape values
5
+ $_mw-calendar-dot-size: 5px;
6
+ $_mw-calendar-dot-gap: 3px;
7
+ $_mw-calendar-cell-height: 38px;
8
+ $_mw-calendar-cell-height-compact: 29px;
9
+ $_mw-calendar-grid-gap: 4px;
10
+ $_mw-calendar-grid-gap-sm: 3px;
11
+ $_mw-calendar-grid-gap-compact: 3px;
12
+
13
+ $_mw-calendar-dot-tones: (
14
+ 'primary': var(--mw-primary-text-color),
15
+ 'secondary': var(--mw-secondary-text-color),
16
+ 'success': var(--mw-success-text-color),
17
+ 'warning': var(--mw-warning-text-color),
18
+ 'danger': var(--mw-danger-text-color),
19
+ 'info': var(--mw-info-text-color),
20
+ );
21
+
22
+ // Same silhouette as a card, but without the hover lift
23
+ .mw-calendar {
24
+ display: block;
25
+ padding: spacing('4') spacing('3');
26
+ background: var(--mw-card-background);
27
+ border: 1px solid var(--mw-border);
28
+ @include surface;
29
+ box-shadow: var(--mw-elevation-2);
195
30
  }
196
- }
197
31
 
198
- // Only the untoned dot would drown in the selected fill. An inline
199
- // --mw-calendar-dot on the dot itself still wins over this.
200
- .mw-calendar-day.mw-selected .mw-calendar-dot:not([class*='mw-calendar-dot-']) {
201
- --mw-calendar-dot: var(--mw-primary-accent-text-color);
202
- }
203
-
204
- // Compact month - date picker density
205
- .mw-calendar-compact {
206
- padding: spacing('4');
32
+ // Calendar without its own surface - for one that already sits on a card
33
+ .mw-calendar-plain {
34
+ padding: spacing('0');
35
+ background: transparent;
36
+ border: none;
37
+ box-shadow: none;
38
+ }
207
39
 
208
40
  .mw-calendar-header {
209
- margin-bottom: spacing('4');
41
+ display: flex;
42
+ align-items: center;
43
+ gap: spacing('3');
44
+ margin-bottom: spacing('5');
210
45
  }
211
46
 
47
+ // Takes the space between the two arrows so the label stays optically centred
212
48
  .mw-calendar-title {
49
+ flex: 1;
50
+ min-width: 0;
51
+ text-align: center;
213
52
  font-size: font-size('base');
53
+ font-weight: font-weight('medium');
54
+ color: var(--mw-text-color);
55
+ @include truncate;
214
56
  }
215
57
 
58
+ // Sits on .mw-btn - this only squares it off around the chevron
216
59
  .mw-calendar-nav {
217
- padding: spacing('1') spacing('3');
218
- // The nav button is a `.mw-btn` and takes the control scale's minimum
219
- // height with it, which is what stopped the compact calendar from being
220
- // compact. A date picker header is chrome, not a form control.
221
- min-height: var(--mw-control-height-sm);
60
+ padding: spacing('2') spacing('4');
61
+ line-height: 1;
62
+ flex-shrink: 0;
63
+ }
64
+
65
+ // Grid
66
+ .mw-calendar-grid {
67
+ display: grid;
68
+ grid-template-columns: repeat(7, minmax(0, 1fr));
69
+ gap: $_mw-calendar-grid-gap-sm;
222
70
  }
223
71
 
224
72
  .mw-calendar-weekday {
225
- padding-bottom: spacing('1');
73
+ padding-bottom: spacing('2');
74
+ text-align: center;
226
75
  font-size: font-size('3xs');
76
+ font-weight: font-weight('bold');
77
+ color: var(--mw-text-muted-color);
78
+ text-transform: uppercase;
79
+ letter-spacing: 0.05em;
80
+ @include truncate;
227
81
  }
228
82
 
229
- // The gap the cells give up here goes straight back into their width
230
- .mw-calendar-grid {
231
- gap: $_mw-calendar-grid-gap-compact;
83
+ // Saturday and Sunday read like a wall calendar - the label carries the
84
+ // weekend, the cell below only gets a faint tint
85
+ .mw-calendar-weekday.mw-calendar-weekend {
86
+ color: var(--mw-danger-text-color);
232
87
  }
233
88
 
89
+ // A fixed row height instead of an aspect ratio
234
90
  .mw-calendar-day {
235
- min-height: $_mw-calendar-cell-height-compact;
236
- font-size: font-size('xs');
91
+ position: relative;
92
+ display: flex;
93
+ align-items: center;
94
+ justify-content: center;
95
+ min-height: $_mw-calendar-cell-height;
96
+ padding: spacing('1');
97
+ border: 1px solid transparent;
98
+ border-radius: radius('sm');
99
+ background: transparent;
100
+ color: var(--mw-text-color);
101
+ font: inherit;
102
+ font-size: font-size('sm');
103
+ font-variant-numeric: tabular-nums;
104
+ line-height: 1;
105
+ cursor: pointer;
106
+ transition: var(--mw-transition);
107
+ -webkit-tap-highlight-color: transparent;
108
+ touch-action: manipulation;
237
109
  }
238
110
 
239
- // Hidden rather than forbidden, so the same markup works in both densities
240
- .mw-calendar-dots {
241
- display: none;
111
+ .mw-calendar-day:active:not(:disabled) {
112
+ transform: scale(0.92);
113
+ transition-duration: var(--mw-duration-instant);
242
114
  }
243
115
 
244
- .mw-calendar-legend {
245
- margin-top: spacing('4');
246
- padding-top: spacing('3');
116
+ .mw-calendar-day.mw-calendar-weekend {
117
+ background: var(--mw-gray-background);
247
118
  }
248
- }
249
119
 
250
- // Legend - explains what the dots stand for
251
- .mw-calendar-legend {
252
- display: flex;
253
- align-items: center;
254
- flex-wrap: wrap;
255
- gap: spacing('3') spacing('5');
256
- margin-top: spacing('5');
257
- padding-top: spacing('4');
258
- border-top: 1px solid var(--mw-border);
259
- }
120
+ // Days spilling in from the neighbouring month stay readable but clearly step
121
+ // back - leaving them out would make the first and last row look broken
122
+ .mw-calendar-day.mw-calendar-adjacent {
123
+ color: var(--mw-text-muted-color);
124
+ opacity: 0.5;
125
+ }
260
126
 
261
- .mw-calendar-legend-item {
262
- display: inline-flex;
263
- align-items: center;
264
- gap: spacing('1');
265
- font-size: font-size('xs');
266
- color: var(--mw-text-muted-color);
267
- }
127
+ .mw-calendar-day:hover:not(:disabled):not(.mw-selected) {
128
+ background: var(--mw-primary-background);
129
+ border-color: var(--mw-border-accent);
130
+ }
268
131
 
269
- // The legend dot is a plain .mw-calendar-dot, only outside of a cell
270
- .mw-calendar-legend-item .mw-calendar-dot {
271
- position: static;
272
- }
132
+ .mw-calendar-day:focus-visible {
133
+ outline: none;
134
+ @include focus-halo;
135
+ border-color: var(--mw-primary-text-color);
136
+ }
273
137
 
274
- @include media-down('sm') {
275
- .mw-calendar {
276
- padding: spacing('4') spacing('3');
138
+ // Today gets the outline, the selection gets the fill - both at once would be
139
+ // indistinguishable. Secondary, so it never reads as a selection.
140
+ .mw-calendar-day.mw-calendar-today {
141
+ border-color: var(--mw-secondary-text-color);
142
+ font-weight: font-weight('bold');
277
143
  }
278
144
 
279
- .mw-calendar-grid {
280
- gap: $_mw-calendar-grid-gap-sm;
145
+ .mw-calendar-day.mw-selected {
146
+ background: var(--mw-primary-color);
147
+ border-color: var(--mw-primary-text-color);
148
+ color: var(--mw-primary-accent-text-color);
149
+ opacity: 1;
281
150
  }
282
151
 
283
- .mw-calendar-weekday {
284
- font-size: font-size('3xs');
152
+ // A day that cannot be picked stays legible
153
+ .mw-calendar-day:disabled {
154
+ cursor: not-allowed;
155
+ color: var(--mw-text-muted-color);
156
+ opacity: 0.4;
285
157
  }
286
158
 
287
- .mw-calendar-title {
288
- font-size: font-size('base');
159
+ // Own element so the dots can be positioned against it
160
+ .mw-calendar-date {
161
+ line-height: 1;
162
+ }
163
+
164
+ // Status dots
165
+ .mw-calendar-dots {
166
+ position: absolute;
167
+ bottom: 5px;
168
+ left: 0;
169
+ right: 0;
170
+ display: flex;
171
+ align-items: center;
172
+ justify-content: center;
173
+ gap: $_mw-calendar-dot-gap;
174
+ pointer-events: none;
175
+ }
176
+
177
+ // What a dot means belongs to the caller: the same calendar reads "request
178
+ // pending / booked / time offered" in one app and something else entirely on a
179
+ // public booking page. So the colour is a property, settable per cell, and the
180
+ // tone classes below are just named presets for it.
181
+ .mw-calendar-dot {
182
+ width: $_mw-calendar-dot-size;
183
+ height: $_mw-calendar-dot-size;
184
+ border-radius: radius('full');
185
+ background: var(--mw-calendar-dot, var(--mw-text-muted-color));
186
+ flex-shrink: 0;
289
187
  }
290
188
 
291
- // Four legend entries wrap onto three lines at this width otherwise
189
+ @each $name, $color in $_mw-calendar-dot-tones {
190
+ .mw-calendar-dot-#{$name} {
191
+ --mw-calendar-dot: #{$color};
192
+ }
193
+ }
194
+
195
+ // Only the untoned dot would drown in the selected fill. An inline
196
+ // --mw-calendar-dot on the dot itself still wins over this.
197
+ .mw-calendar-day.mw-selected
198
+ .mw-calendar-dot:not([class*='mw-calendar-dot-']) {
199
+ --mw-calendar-dot: var(--mw-primary-accent-text-color);
200
+ }
201
+
202
+ // Compact month - date picker density
203
+ .mw-calendar-compact {
204
+ padding: spacing('4');
205
+
206
+ .mw-calendar-header {
207
+ margin-bottom: spacing('4');
208
+ }
209
+
210
+ .mw-calendar-title {
211
+ font-size: font-size('base');
212
+ }
213
+
214
+ .mw-calendar-nav {
215
+ padding: spacing('1') spacing('3');
216
+ // The nav button is a `.mw-btn` and takes the control scale's minimum
217
+ // height with it, which is what stopped the compact calendar from being
218
+ // compact. A date picker header is chrome, not a form control.
219
+ min-height: var(--mw-control-height-sm);
220
+ }
221
+
222
+ .mw-calendar-weekday {
223
+ padding-bottom: spacing('1');
224
+ font-size: font-size('3xs');
225
+ }
226
+
227
+ // The gap the cells give up here goes straight back into their width
228
+ .mw-calendar-grid {
229
+ gap: $_mw-calendar-grid-gap-compact;
230
+ }
231
+
232
+ .mw-calendar-day {
233
+ min-height: $_mw-calendar-cell-height-compact;
234
+ font-size: font-size('xs');
235
+ }
236
+
237
+ // Hidden rather than forbidden, so the same markup works in both densities
238
+ .mw-calendar-dots {
239
+ display: none;
240
+ }
241
+
242
+ .mw-calendar-legend {
243
+ margin-top: spacing('4');
244
+ padding-top: spacing('3');
245
+ }
246
+ }
247
+
248
+ // Legend - explains what the dots stand for
292
249
  .mw-calendar-legend {
250
+ display: flex;
251
+ align-items: center;
252
+ flex-wrap: wrap;
293
253
  gap: spacing('2') spacing('4');
294
254
  margin-top: spacing('4');
295
255
  padding-top: spacing('3');
256
+ border-top: 1px solid var(--mw-border);
296
257
  }
297
258
 
298
259
  .mw-calendar-legend-item {
260
+ display: inline-flex;
261
+ align-items: center;
262
+ gap: spacing('1');
299
263
  font-size: font-size('2xs');
264
+ color: var(--mw-text-muted-color);
265
+ }
266
+
267
+ // The legend dot is a plain .mw-calendar-dot, only outside of a cell
268
+ .mw-calendar-legend-item .mw-calendar-dot {
269
+ position: static;
270
+ }
271
+
272
+ @include media-up('sm') {
273
+ .mw-calendar {
274
+ padding: spacing('5');
275
+ }
276
+
277
+ .mw-calendar-grid {
278
+ gap: $_mw-calendar-grid-gap;
279
+ }
280
+
281
+ .mw-calendar-weekday {
282
+ font-size: font-size('2xs');
283
+ }
284
+
285
+ .mw-calendar-title {
286
+ font-size: font-size('md');
287
+ }
288
+
289
+ // Four legend entries wrap onto three lines at this width otherwise
290
+ .mw-calendar-legend {
291
+ gap: spacing('3') spacing('5');
292
+ margin-top: spacing('5');
293
+ padding-top: spacing('4');
294
+ }
295
+
296
+ .mw-calendar-legend-item {
297
+ font-size: font-size('xs');
298
+ }
300
299
  }
301
300
  }