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
@@ -1,219 +1,213 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // ---------------------------------------------------------------------------
4
- // Dropdown
5
- //
6
- // Built on <details>/<summary> rather than a div and a click handler. That one
7
- // choice buys the whole keyboard contract for free: the trigger is focusable,
8
- // Enter and Space toggle it, the open state lives in the DOM where a screen
9
- // reader can see it, and the menu still opens with JavaScript switched off. The
10
- // script that ships with the framework only adds what markup cannot express -
11
- // closing on Escape and on a click somewhere else.
12
- //
13
- // The menu is absolutely positioned, so an ancestor with `overflow: hidden` -
14
- // a card with a ribbon, a scroll container - will clip it. That is the same
15
- // trade the tooltip makes, and for the same reason: the alternative is a fixed
16
- // element, which breaks the moment any ancestor has a transform.
17
- // ---------------------------------------------------------------------------
18
- .mw-dropdown {
19
- position: relative;
20
- display: inline-block;
21
-
22
- // Safari still draws its own triangle through the shadow DOM
23
- summary::-webkit-details-marker {
24
- display: none;
25
- }
3
+ @layer mw.components {
4
+ // Built on <details>/<summary>, which buys the whole keyboard contract and an
5
+ // open state a screen reader can see, and works without JavaScript. The script
6
+ // only adds Escape and click-outside.
7
+ //
8
+ // Absolutely positioned, so an ancestor with `overflow: hidden` clips it - the
9
+ // same trade the tooltip makes, because a fixed element breaks under a
10
+ // transformed ancestor.
11
+ .mw-dropdown {
12
+ position: relative;
13
+ display: inline-block;
14
+
15
+ // Safari still draws its own triangle through the shadow DOM
16
+ summary::-webkit-details-marker {
17
+ display: none;
18
+ }
26
19
 
27
- > summary {
28
- list-style: none;
29
- cursor: pointer;
20
+ > summary {
21
+ list-style: none;
22
+ cursor: pointer;
23
+
24
+ &::marker {
25
+ content: '';
26
+ }
27
+ }
28
+
29
+ // The chevron follows the open state, so the trigger says which way it goes
30
+ // without a second class to toggle
31
+ .mw-dropdown-caret {
32
+ display: inline-flex;
33
+ transition: transform var(--mw-duration-fast) var(--mw-ease-out);
34
+ }
30
35
 
31
- &::marker {
32
- content: '';
36
+ &[open] .mw-dropdown-caret {
37
+ transform: rotate(180deg);
33
38
  }
34
39
  }
35
40
 
36
- // The chevron follows the open state, so the trigger says which way it goes
37
- // without a second class to toggle
38
- .mw-dropdown-caret {
39
- display: inline-flex;
40
- transition: transform var(--mw-duration-fast) var(--mw-ease-out);
41
+ .mw-dropdown-menu {
42
+ position: absolute;
43
+ top: calc(100% + #{spacing('2')});
44
+ left: 0;
45
+ z-index: z-index('menu');
46
+ min-width: 200px;
47
+ // Never wider than the screen it opens on, whatever the longest item says
48
+ max-width: min(320px, calc(100vw - 2 * var(--mw-container-gutter)));
49
+ padding: spacing('2');
50
+ background: var(--mw-card-background);
51
+ border: 1px solid var(--mw-border);
52
+ border-radius: radius('md');
53
+ box-shadow: var(--mw-elevation-4);
54
+ // A long menu scrolls rather than running off the bottom of the page
55
+ max-height: min(60dvh, 420px);
56
+ overflow-y: auto;
57
+ overscroll-behavior: contain;
58
+ @include scrollbar;
59
+
60
+ // Opens downward and settles, rather than appearing. `@starting-style` gives
61
+ // the animation somewhere to start from without a class having to be added
62
+ // by script.
63
+ animation: mw-dropdown-in var(--mw-duration-fast) var(--mw-ease-out);
64
+ }
65
+
66
+ @keyframes mw-dropdown-in {
67
+ from {
68
+ opacity: 0;
69
+ transform: translateY(-6px);
70
+ }
41
71
  }
42
72
 
43
- &[open] .mw-dropdown-caret {
44
- transform: rotate(180deg);
73
+ // Anchor the menu to the trigger's right edge - what a menu near the right of
74
+ // the screen wants, and what an action menu at the end of a row always wants
75
+ .mw-dropdown-end .mw-dropdown-menu {
76
+ left: auto;
77
+ right: 0;
45
78
  }
46
- }
47
79
 
48
- .mw-dropdown-menu {
49
- position: absolute;
50
- top: calc(100% + #{spacing('2')});
51
- left: 0;
52
- z-index: z-index('menu');
53
- min-width: 200px;
54
- // Never wider than the screen it opens on, whatever the longest item says
55
- max-width: min(320px, calc(100vw - 2 * var(--mw-container-gutter)));
56
- padding: spacing('2');
57
- background: var(--mw-card-background);
58
- border: 1px solid var(--mw-border);
59
- border-radius: radius('md');
60
- box-shadow: var(--mw-elevation-4);
61
- // A long menu scrolls rather than running off the bottom of the page
62
- max-height: min(60dvh, 420px);
63
- overflow-y: auto;
64
- overscroll-behavior: contain;
65
- @include scrollbar;
66
-
67
- // Opens downward and settles, rather than appearing. `@starting-style` gives
68
- // the animation somewhere to start from without a class having to be added
69
- // by script.
70
- animation: mw-dropdown-in var(--mw-duration-fast) var(--mw-ease-out);
71
- }
80
+ // Open upward, for a trigger that sits low on the page
81
+ .mw-dropdown-up .mw-dropdown-menu {
82
+ top: auto;
83
+ bottom: calc(100% + #{spacing('2')});
72
84
 
73
- @keyframes mw-dropdown-in {
74
- from {
75
- opacity: 0;
76
- transform: translateY(-6px);
85
+ animation-name: mw-dropdown-in-up;
77
86
  }
78
- }
79
87
 
80
- // Anchor the menu to the trigger's right edge - what a menu near the right of
81
- // the screen wants, and what an action menu at the end of a row always wants
82
- .mw-dropdown-end .mw-dropdown-menu {
83
- left: auto;
84
- right: 0;
85
- }
88
+ @keyframes mw-dropdown-in-up {
89
+ from {
90
+ opacity: 0;
91
+ transform: translateY(6px);
92
+ }
93
+ }
86
94
 
87
- // Open upward, for a trigger that sits low on the page
88
- .mw-dropdown-up .mw-dropdown-menu {
89
- top: auto;
90
- bottom: calc(100% + #{spacing('2')});
95
+ .mw-dropdown-item {
96
+ display: flex;
97
+ align-items: center;
98
+ gap: spacing('3');
99
+ width: 100%;
100
+ padding: spacing('3') spacing('3');
101
+ border: 0;
102
+ border-radius: radius('sm');
103
+ background: none;
104
+ color: var(--mw-text-color);
105
+ font: inherit;
106
+ font-size: font-size('sm');
107
+ text-align: left;
108
+ text-decoration: none;
109
+ cursor: pointer;
110
+ transition: var(--mw-transition-fast);
111
+ @include focus-ring-inset;
112
+ @include tappable;
91
113
 
92
- animation-name: mw-dropdown-in-up;
93
- }
114
+ &:hover:not(:disabled) {
115
+ background: var(--mw-primary-background);
116
+ }
94
117
 
95
- @keyframes mw-dropdown-in-up {
96
- from {
97
- opacity: 0;
98
- transform: translateY(6px);
99
- }
100
- }
118
+ &:active:not(:disabled) {
119
+ background: var(--mw-primary-background-hover);
120
+ }
101
121
 
102
- .mw-dropdown-item {
103
- display: flex;
104
- align-items: center;
105
- gap: spacing('3');
106
- width: 100%;
107
- padding: spacing('3') spacing('3');
108
- border: 0;
109
- border-radius: radius('sm');
110
- background: none;
111
- color: var(--mw-text-color);
112
- font: inherit;
113
- font-size: font-size('sm');
114
- text-align: left;
115
- text-decoration: none;
116
- cursor: pointer;
117
- transition: var(--mw-transition-fast);
118
- @include focus-ring-inset;
119
- @include tappable;
120
-
121
- &:hover:not(:disabled) {
122
- background: var(--mw-primary-background);
123
- }
122
+ &:disabled,
123
+ &[aria-disabled='true'] {
124
+ opacity: 0.5;
125
+ cursor: not-allowed;
126
+ pointer-events: none;
127
+ }
124
128
 
125
- &:active:not(:disabled) {
126
- background: var(--mw-primary-background-hover);
127
- }
129
+ // The current choice, for a menu that picks rather than acts
130
+ &.mw-active,
131
+ &[aria-checked='true'] {
132
+ background: var(--mw-primary-background);
133
+ color: var(--mw-primary-text-color);
134
+ font-weight: font-weight('medium');
135
+ }
128
136
 
129
- &:disabled,
130
- &[aria-disabled='true'] {
131
- opacity: 0.5;
132
- cursor: not-allowed;
133
- pointer-events: none;
137
+ // Icons keep one column so the labels line up whether or not every item has
138
+ // one
139
+ i,
140
+ fa-icon,
141
+ svg,
142
+ [class*='fa-'] {
143
+ width: 1.1em;
144
+ flex-shrink: 0;
145
+ text-align: center;
146
+ color: var(--mw-text-muted-color);
147
+ }
134
148
  }
135
149
 
136
- // The current choice, for a menu that picks rather than acts
137
- &.mw-active,
138
- &[aria-checked='true'] {
139
- background: var(--mw-primary-background);
140
- color: var(--mw-primary-text-color);
141
- font-weight: font-weight('medium');
142
- }
150
+ // Destructive actions belong at the bottom, behind a divider, in the colour
151
+ // that says so
152
+ .mw-dropdown-item-danger {
153
+ color: var(--mw-danger-text-color);
143
154
 
144
- // Icons keep one column so the labels line up whether or not every item has
145
- // one
146
- i,
147
- fa-icon,
148
- svg,
149
- [class*='fa-'] {
150
- width: 1.1em;
151
- flex-shrink: 0;
152
- text-align: center;
153
- color: var(--mw-text-muted-color);
154
- }
155
- }
155
+ i,
156
+ fa-icon,
157
+ svg,
158
+ [class*='fa-'] {
159
+ color: inherit;
160
+ }
156
161
 
157
- // Destructive actions belong at the bottom, behind a divider, in the colour
158
- // that says so
159
- .mw-dropdown-item-danger {
160
- color: var(--mw-danger-text-color);
162
+ &:hover:not(:disabled) {
163
+ background: var(--mw-danger-info-background);
164
+ }
161
165
 
162
- i,
163
- fa-icon,
164
- svg,
165
- [class*='fa-'] {
166
- color: inherit;
166
+ &:active:not(:disabled) {
167
+ background: var(--mw-danger-info-background-hover);
168
+ }
167
169
  }
168
170
 
169
- &:hover:not(:disabled) {
170
- background: var(--mw-danger-info-background);
171
+ .mw-dropdown-divider {
172
+ height: 1px;
173
+ margin: spacing('2') spacing('1');
174
+ background: var(--mw-border);
175
+ border: 0;
171
176
  }
172
177
 
173
- &:active:not(:disabled) {
174
- background: var(--mw-danger-info-background-hover);
178
+ // A label over a group of items - "Sort by", "Export as"
179
+ .mw-dropdown-label {
180
+ padding: spacing('2') spacing('3') spacing('1');
181
+ font-size: font-size('2xs');
182
+ font-weight: font-weight('bold');
183
+ letter-spacing: 0.06em;
184
+ text-transform: uppercase;
185
+ color: var(--mw-text-muted-color);
175
186
  }
176
- }
177
187
 
178
- .mw-dropdown-divider {
179
- height: 1px;
180
- margin: spacing('2') spacing('1');
181
- background: var(--mw-border);
182
- border: 0;
183
- }
184
-
185
- // A label over a group of items - "Sort by", "Export as"
186
- .mw-dropdown-label {
187
- padding: spacing('2') spacing('3') spacing('1');
188
- font-size: font-size('2xs');
189
- font-weight: font-weight('bold');
190
- letter-spacing: 0.06em;
191
- text-transform: uppercase;
192
- color: var(--mw-text-muted-color);
193
- }
194
-
195
- // The clipping escape hatch, for the framework's own containers that hide their
196
- // overflow. See the note at the top of this file: an absolutely positioned menu
197
- // is cut off by any ancestor that clips, and a card with a ribbon or a scrolling
198
- // table is exactly where an actions menu ends up.
199
- .mw-card:has(.mw-dropdown[open]),
200
- .mw-card-body:has(.mw-dropdown[open]),
201
- .mw-table-responsive:has(.mw-dropdown[open]),
202
- .mw-tile:has(.mw-dropdown[open]),
203
- .mw-modal-body:has(.mw-dropdown[open]) {
204
- overflow: visible;
205
- }
206
-
207
- // A menu opened by a thumb needs rows a thumb can hit, and the room to show
208
- // them - so it takes the trigger's full width rather than a 200px column
209
- // floating beside it.
210
- @media (pointer: coarse), (max-width: #{breakpoint('sm')}) {
211
- .mw-dropdown-menu {
212
- min-width: max(100%, 240px);
213
- }
188
+ // The clipping escape hatch, for the framework's own containers that hide their
189
+ // overflow. See the note at the top of this file: an absolutely positioned menu
190
+ // is cut off by any ancestor that clips, and a card with a ribbon or a scrolling
191
+ // table is exactly where an actions menu ends up.
192
+ .mw-card:has(.mw-dropdown[open]),
193
+ .mw-card-body:has(.mw-dropdown[open]),
194
+ .mw-table-responsive:has(.mw-dropdown[open]),
195
+ .mw-tile:has(.mw-dropdown[open]),
196
+ .mw-modal-body:has(.mw-dropdown[open]) {
197
+ overflow: visible;
198
+ }
199
+
200
+ // A menu opened by a thumb needs rows a thumb can hit, and the room to show
201
+ // them - so it takes the trigger's full width rather than a 200px column
202
+ // floating beside it.
203
+ @media (pointer: coarse), (max-width: #{breakpoint('sm')}) {
204
+ .mw-dropdown-menu {
205
+ min-width: max(100%, 240px);
206
+ }
214
207
 
215
- .mw-dropdown-item {
216
- min-height: 2.75rem;
217
- font-size: font-size('base');
208
+ .mw-dropdown-item {
209
+ min-height: 2.75rem;
210
+ font-size: font-size('base');
211
+ }
218
212
  }
219
213
  }
@@ -1,73 +1,73 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- .mw-empty-state {
4
- display: flex;
5
- flex-direction: column;
6
- align-items: center;
7
- justify-content: center;
8
- text-align: center;
9
- padding: spacing('8') spacing('4');
3
+ @layer mw.components {
4
+ .mw-empty-state {
5
+ display: flex;
6
+ flex-direction: column;
7
+ align-items: center;
8
+ justify-content: center;
9
+ text-align: center;
10
+ padding: spacing('8') spacing('4');
10
11
 
11
- &-icon {
12
- font-size: font-size('5xl');
13
- color: var(--mw-text-muted-color);
14
- opacity: 0.6;
15
- margin-bottom: spacing('5');
16
- line-height: 1;
17
- }
12
+ &-icon {
13
+ font-size: font-size('5xl');
14
+ color: var(--mw-text-muted-color);
15
+ opacity: 0.6;
16
+ margin-bottom: spacing('5');
17
+ line-height: 1;
18
+ }
18
19
 
19
- &-title {
20
- font-size: font-size('xl');
21
- font-weight: font-weight('medium');
22
- color: var(--mw-text-color);
23
- margin-bottom: spacing('1');
24
- }
20
+ &-title {
21
+ font-size: font-size('xl');
22
+ font-weight: font-weight('medium');
23
+ color: var(--mw-text-color);
24
+ margin-bottom: spacing('1');
25
+ }
25
26
 
26
- &-desc {
27
- font-size: font-size('base');
28
- color: var(--mw-text-muted-color);
29
- max-width: 380px;
30
- line-height: 1.6;
31
- margin-bottom: spacing('5');
32
- }
27
+ &-desc {
28
+ font-size: font-size('base');
29
+ color: var(--mw-text-muted-color);
30
+ max-width: 380px;
31
+ line-height: 1.6;
32
+ margin-bottom: spacing('5');
33
+ }
33
34
 
34
- // Small variant
35
- &-sm {
36
- padding: spacing('6') spacing('4');
35
+ &-sm {
36
+ padding: spacing('6') spacing('4');
37
37
 
38
- .mw-empty-state-icon {
39
- font-size: font-size('4xl');
40
- margin-bottom: spacing('3');
41
- }
38
+ .mw-empty-state-icon {
39
+ font-size: font-size('4xl');
40
+ margin-bottom: spacing('3');
41
+ }
42
42
 
43
- .mw-empty-state-title {
44
- font-size: font-size('lg');
45
- }
43
+ .mw-empty-state-title {
44
+ font-size: font-size('lg');
45
+ }
46
46
 
47
- .mw-empty-state-desc {
48
- font-size: font-size('sm');
49
- margin-bottom: spacing('4');
47
+ .mw-empty-state-desc {
48
+ font-size: font-size('sm');
49
+ margin-bottom: spacing('4');
50
+ }
50
51
  }
51
- }
52
52
 
53
- // Color variants (change icon color)
54
- &-primary .mw-empty-state-icon {
55
- color: var(--mw-primary-text-color);
56
- opacity: 0.7;
57
- }
53
+ &-primary .mw-empty-state-icon {
54
+ color: var(--mw-primary-text-color);
55
+ opacity: 0.7;
56
+ }
58
57
 
59
- &-success .mw-empty-state-icon {
60
- color: var(--mw-success-text-color);
61
- opacity: 0.7;
62
- }
58
+ &-success .mw-empty-state-icon {
59
+ color: var(--mw-success-text-color);
60
+ opacity: 0.7;
61
+ }
63
62
 
64
- &-warning .mw-empty-state-icon {
65
- color: var(--mw-warning-text-color);
66
- opacity: 0.7;
67
- }
63
+ &-warning .mw-empty-state-icon {
64
+ color: var(--mw-warning-text-color);
65
+ opacity: 0.7;
66
+ }
68
67
 
69
- &-danger .mw-empty-state-icon {
70
- color: var(--mw-danger-text-color);
71
- opacity: 0.7;
68
+ &-danger .mw-empty-state-icon {
69
+ color: var(--mw-danger-text-color);
70
+ opacity: 0.7;
71
+ }
72
72
  }
73
73
  }