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,147 +1,147 @@
1
1
  @use 'sass:math';
2
2
  @use '../abstracts' as *;
3
3
 
4
- // Horizontal
5
- .mw-stepper {
6
- display: flex;
7
- align-items: flex-start;
8
- width: 100%;
9
-
10
- &-step {
4
+ @layer mw.components {
5
+ .mw-stepper {
11
6
  display: flex;
12
- flex-direction: column;
13
- align-items: center;
14
- gap: spacing('2');
15
- flex: 1;
16
- min-width: 0;
17
- }
18
-
19
- // Horizontal connector line between steps
20
- &-connector {
21
- flex: 1;
22
- height: 2px;
23
- background: var(--mw-border);
24
- margin-top: spacing('4');
25
- transition: background var(--mw-duration-base) var(--mw-ease-out);
26
-
27
- &.mw-done {
28
- background: var(--mw-primary-color);
7
+ align-items: flex-start;
8
+ width: 100%;
9
+
10
+ &-step {
11
+ display: flex;
12
+ flex-direction: column;
13
+ align-items: center;
14
+ gap: spacing('2');
15
+ flex: 1;
16
+ min-width: 0;
29
17
  }
30
- }
31
18
 
32
- // Step circle with number or icon
33
- &-indicator {
34
- width: 28px;
35
- height: 28px;
36
- border-radius: radius('full');
37
- border: 2px solid var(--mw-border);
38
- background: var(--mw-card-background);
39
- color: var(--mw-text-muted-color);
40
- display: flex;
41
- align-items: center;
42
- justify-content: center;
43
- font-size: font-size('sm');
44
- font-weight: font-weight('bold');
45
- transition: var(--mw-transition);
46
- flex-shrink: 0;
47
- user-select: none;
48
-
49
- &.mw-active {
50
- border-color: var(--mw-primary-color);
51
- background: var(--mw-primary-color);
52
- color: var(--mw-primary-accent-text-color);
53
- }
19
+ &-connector {
20
+ flex: 1;
21
+ height: 2px;
22
+ background: var(--mw-border);
23
+ margin-top: spacing('4');
24
+ transition: background var(--mw-duration-base) var(--mw-ease-out);
54
25
 
55
- &.mw-done {
56
- border-color: var(--mw-success-color);
57
- background: var(--mw-success-color);
58
- color: var(--mw-success-accent-text-color);
26
+ &.mw-done {
27
+ background: var(--mw-primary-color);
28
+ }
59
29
  }
60
- }
61
30
 
62
- // Step label below the circle
63
- &-label {
64
- font-size: font-size('xs');
65
- color: var(--mw-text-muted-color);
66
- text-align: center;
67
- line-height: 1.2;
68
- transition: color var(--mw-duration-base) var(--mw-ease-out);
69
-
70
- &.mw-active {
71
- color: var(--mw-primary-text-color);
72
- font-weight: font-weight('medium');
73
- }
31
+ &-indicator {
32
+ width: 28px;
33
+ height: 28px;
34
+ border-radius: radius('full');
35
+ border: 2px solid var(--mw-border);
36
+ background: var(--mw-card-background);
37
+ color: var(--mw-text-muted-color);
38
+ display: flex;
39
+ align-items: center;
40
+ justify-content: center;
41
+ font-size: font-size('sm');
42
+ font-weight: font-weight('bold');
43
+ transition: var(--mw-transition);
44
+ flex-shrink: 0;
45
+ user-select: none;
46
+
47
+ // The halo is what says "you are here". Without it the current step is a
48
+ // filled circle and so is every finished one, which leaves the hue as the
49
+ // only thing telling them apart - and a stepper is read at a glance, by
50
+ // people who do not all see blue against green.
51
+ &.mw-active {
52
+ border-color: var(--mw-primary-color);
53
+ background: var(--mw-primary-color);
54
+ color: var(--mw-primary-accent-text-color);
55
+ @include focus-halo;
56
+ }
74
57
 
75
- &.mw-done {
76
- color: var(--mw-success-text-color);
58
+ &.mw-done {
59
+ border-color: var(--mw-success-color);
60
+ background: var(--mw-success-color);
61
+ color: var(--mw-success-accent-text-color);
62
+ }
77
63
  }
78
- }
79
64
 
80
- @include media-down('sm') {
81
65
  &-label {
82
66
  font-size: font-size('2xs');
67
+ color: var(--mw-text-muted-color);
68
+ text-align: center;
69
+ line-height: 1.2;
70
+ transition: color var(--mw-duration-base) var(--mw-ease-out);
71
+
72
+ &.mw-active {
73
+ color: var(--mw-primary-text-color);
74
+ font-weight: font-weight('medium');
75
+ }
76
+
77
+ &.mw-done {
78
+ color: var(--mw-success-text-color);
79
+ }
83
80
  }
84
- }
85
- }
86
81
 
87
- // Vertical
88
- .mw-stepper-vertical {
89
- display: flex;
90
- flex-direction: column;
82
+ @include media-up('sm') {
83
+ &-label {
84
+ font-size: font-size('xs');
85
+ }
86
+ }
87
+ }
91
88
 
92
- .mw-stepper-step {
89
+ .mw-stepper-vertical {
93
90
  display: flex;
94
- flex-direction: row;
95
- align-items: flex-start;
96
- gap: spacing('3');
97
- position: relative;
98
- padding-bottom: spacing('5');
91
+ flex-direction: column;
99
92
 
100
- &:last-child {
101
- padding-bottom: spacing('0');
102
- }
93
+ .mw-stepper-step {
94
+ display: flex;
95
+ flex-direction: row;
96
+ align-items: flex-start;
97
+ gap: spacing('3');
98
+ position: relative;
99
+ padding-bottom: spacing('5');
103
100
 
104
- // Connecting line drawn below each step (except last)
105
- &:not(:last-child)::after {
106
- content: '';
107
- position: absolute;
108
- left: calc(#{spacing('7')} / 2 - 1px);
109
- top: spacing('7');
110
- bottom: 0;
111
- width: 2px;
112
- background: var(--mw-border);
113
- transition: background var(--mw-duration-base) var(--mw-ease-out);
114
- }
101
+ &:last-child {
102
+ padding-bottom: spacing('0');
103
+ }
104
+
105
+ &:not(:last-child)::after {
106
+ content: '';
107
+ position: absolute;
108
+ left: calc(#{spacing('7')} / 2 - 1px);
109
+ top: spacing('7');
110
+ bottom: 0;
111
+ width: 2px;
112
+ background: var(--mw-border);
113
+ transition: background var(--mw-duration-base) var(--mw-ease-out);
114
+ }
115
115
 
116
- &.mw-done:not(:last-child)::after {
117
- background: var(--mw-primary-text-color);
116
+ &.mw-done:not(:last-child)::after {
117
+ background: var(--mw-primary-text-color);
118
+ }
118
119
  }
119
- }
120
120
 
121
- .mw-stepper-indicator {
122
- flex-shrink: 0;
123
- }
121
+ .mw-stepper-indicator {
122
+ flex-shrink: 0;
123
+ }
124
124
 
125
- // Content area next to the indicator
126
- .mw-stepper-content {
127
- flex: 1;
128
- margin-left: spacing('1');
125
+ .mw-stepper-content {
126
+ flex: 1;
127
+ margin-left: spacing('1');
129
128
 
130
- &-title {
131
- font-size: font-size('base');
132
- font-weight: font-weight('medium');
133
- color: var(--mw-text-color);
134
- margin-bottom: spacing('1');
129
+ &-title {
130
+ font-size: font-size('base');
131
+ font-weight: font-weight('medium');
132
+ color: var(--mw-text-color);
133
+ margin-bottom: spacing('1');
135
134
 
136
- .mw-stepper-step.mw-active & {
137
- color: var(--mw-primary-text-color);
135
+ .mw-stepper-step.mw-active & {
136
+ color: var(--mw-primary-text-color);
137
+ }
138
138
  }
139
- }
140
139
 
141
- &-desc {
142
- font-size: font-size('sm');
143
- color: var(--mw-text-muted-color);
144
- line-height: 1.5;
140
+ &-desc {
141
+ font-size: font-size('sm');
142
+ color: var(--mw-text-muted-color);
143
+ line-height: 1.5;
144
+ }
145
145
  }
146
146
  }
147
147
  }
@@ -1,186 +1,193 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Base table styles
4
- .mw-table {
5
- width: 100%;
6
- margin: spacing('1') spacing('0');
7
- border-collapse: collapse;
8
- background: var(--mw-card-background);
9
-
10
- th,
11
- td {
12
- padding: spacing('3') spacing('4');
13
- text-align: left;
14
- border: 1px solid var(--mw-border);
15
- color: var(--mw-text-muted-color);
16
- }
17
-
18
- th {
19
- font-weight: font-weight('medium');
20
- color: var(--mw-primary-accent-text-color);
21
- background: var(--mw-primary-color);
22
- user-select: none;
23
- }
24
-
25
- // Zebra striping
26
- tr:nth-child(even) {
27
- background: var(--mw-gray-background);
28
- }
29
-
30
- tr:hover {
31
- td {
32
- background: var(--mw-primary-background-hover);
33
- color: var(--mw-text-color);
34
- }
35
- }
3
+ @layer mw.components {
4
+ // Base table styles
5
+ .mw-table {
6
+ width: 100%;
7
+ margin: spacing('1') spacing('0');
8
+ border-collapse: collapse;
9
+ background: var(--mw-card-background);
36
10
 
37
- @include media-down('sm') {
38
11
  th,
39
12
  td {
40
- padding: spacing('2') spacing('3');
41
- font-size: font-size('xs');
13
+ padding: spacing('3') spacing('4');
14
+ text-align: left;
15
+ border: 1px solid var(--mw-border);
16
+ color: var(--mw-text-muted-color);
42
17
  }
43
- }
44
- }
45
-
46
- // Responsive table container
47
- .mw-table-responsive {
48
- display: block;
49
- width: 100%;
50
- overflow-x: auto;
51
- -webkit-overflow-scrolling: touch;
52
- margin: spacing('1');
53
18
 
54
- .mw-table {
55
- margin-bottom: spacing('0');
56
- }
57
- }
58
-
59
- // Scroll hint for a table that is known to be wider than its frame.
60
- //
61
- // Opt-in, unlike the one on the tab bar, and by a different mechanism. A table
62
- // paints its own opaque surface, so the gradient trick used on `.mw-tabs-nav`
63
- // would sit behind the rows and never show. A mask sits in front of the
64
- // content and works - but masks have no `local` attachment, so it cannot
65
- // disappear once the last column is reached. Hence the extra class: only put
66
- // it on a table that really does overflow.
67
- .mw-table-responsive-hint {
68
- mask-image: linear-gradient(
69
- to right,
70
- #000 calc(100% - 2.5rem),
71
- transparent 100%
72
- );
73
- }
74
-
75
- // Card view for mobile - clean and simple approach
76
- .mw-table-cards {
77
- @include media-down('md') {
78
- // Hide table header on mobile
79
- thead {
80
- display: none;
19
+ th {
20
+ font-weight: font-weight('medium');
21
+ color: var(--mw-primary-accent-text-color);
22
+ background: var(--mw-primary-color);
23
+ user-select: none;
81
24
  }
82
25
 
83
- // Make each row a card
84
- tr {
85
- display: block;
86
- margin-bottom: spacing('3');
87
- box-shadow: var(--mw-elevation-2);
88
- background: var(--mw-card-background);
89
- cursor: text;
26
+ // Zebra striping
27
+ tr:nth-child(even) {
28
+ background: var(--mw-gray-background);
90
29
  }
91
30
 
92
- // Style each cell as a row in the card
93
- td {
94
- display: flex;
95
- justify-content: space-between;
96
- align-items: center;
97
- padding: spacing('1') spacing('4');
98
-
99
- // Add the column header as a label
100
- &::before {
101
- content: attr(data-label);
102
- font-weight: font-weight('medium');
31
+ // The tinted surface at rest, not the hovered one. A row starts out
32
+ // transparent, so it takes the whole step in one go - and at the hover tone
33
+ // it lands close enough to the solid header above it to read as selected
34
+ // rather than as pointed at. A badge or a tag is already sitting on the
35
+ // resting tint, which is why the louder one is right there and not here.
36
+ tr:hover {
37
+ td {
38
+ background: var(--mw-primary-background);
103
39
  color: var(--mw-text-color);
104
- flex: 1;
105
- text-align: left;
106
40
  }
41
+ }
107
42
 
108
- // The cell value
109
- span,
110
- a,
111
- div {
112
- flex: 2;
113
- text-align: right;
43
+ @include media-down('sm') {
44
+ th,
45
+ td {
46
+ padding: spacing('2') spacing('3');
47
+ font-size: font-size('xs');
114
48
  }
115
49
  }
50
+ }
51
+
52
+ // Responsive table container
53
+ .mw-table-responsive {
54
+ display: block;
55
+ width: 100%;
56
+ overflow-x: auto;
57
+ -webkit-overflow-scrolling: touch;
58
+ margin: spacing('1');
116
59
 
117
- // Add some visual separation between cards
118
- tr:not(:last-child) {
119
- margin-bottom: spacing('4');
60
+ .mw-table {
61
+ margin-bottom: spacing('0');
120
62
  }
121
63
  }
122
- }
123
64
 
124
- // Compact table
125
- .mw-table-compact {
126
- th,
127
- td {
128
- padding: spacing('1') spacing('2');
129
- font-size: font-size('sm');
65
+ // Scroll hint for a table that is known to be wider than its frame.
66
+ //
67
+ // Opt-in, unlike the one on the tab bar, and by a different mechanism. A table
68
+ // paints its own opaque surface, so the gradient trick used on `.mw-tabs-nav`
69
+ // would sit behind the rows and never show. A mask sits in front of the
70
+ // content and works - but masks have no `local` attachment, so it cannot
71
+ // disappear once the last column is reached. Hence the extra class: only put
72
+ // it on a table that really does overflow.
73
+ .mw-table-responsive-hint {
74
+ mask-image: linear-gradient(
75
+ to right,
76
+ #000 calc(100% - 2.5rem),
77
+ transparent 100%
78
+ );
79
+ }
80
+
81
+ // Card view for mobile - clean and simple approach
82
+ .mw-table-cards {
83
+ @include media-down('md') {
84
+ // Hide table header on mobile
85
+ thead {
86
+ display: none;
87
+ }
88
+
89
+ // Make each row a card
90
+ tr {
91
+ display: block;
92
+ margin-bottom: spacing('3');
93
+ box-shadow: var(--mw-elevation-2);
94
+ background: var(--mw-card-background);
95
+ cursor: text;
96
+ }
97
+
98
+ // Style each cell as a row in the card
99
+ td {
100
+ display: flex;
101
+ justify-content: space-between;
102
+ align-items: center;
103
+ padding: spacing('1') spacing('4');
104
+
105
+ // Add the column header as a label
106
+ &::before {
107
+ content: attr(data-label);
108
+ font-weight: font-weight('medium');
109
+ color: var(--mw-text-color);
110
+ flex: 1;
111
+ text-align: left;
112
+ }
113
+
114
+ // The cell value
115
+ span,
116
+ a,
117
+ div {
118
+ flex: 2;
119
+ text-align: right;
120
+ }
121
+ }
122
+
123
+ // Add some visual separation between cards
124
+ tr:not(:last-child) {
125
+ margin-bottom: spacing('4');
126
+ }
127
+ }
130
128
  }
131
129
 
132
- @include media-down('sm') {
130
+ // Compact table
131
+ .mw-table-compact {
133
132
  th,
134
133
  td {
134
+ padding: spacing('1') spacing('2');
135
135
  font-size: font-size('2xs');
136
136
  }
137
- }
138
- }
139
137
 
140
- // Hoverable rows
141
- .mw-table-hover {
142
- tbody tr:hover {
143
- background: var(--mw-primary-background-hover);
138
+ @include media-up('sm') {
139
+ th,
140
+ td {
141
+ font-size: font-size('sm');
142
+ }
143
+ }
144
144
  }
145
- }
146
145
 
147
- // Quiet header for data-heavy views
148
- .mw-table-subtle {
149
- th {
150
- background: color-mix(
151
- in srgb,
152
- var(--mw-gray-color) 20%,
153
- var(--mw-card-background)
154
- );
155
- color: var(--mw-text-color);
156
- border-bottom: 2px solid var(--mw-border-accent);
146
+ // Hoverable rows
147
+ .mw-table-hover {
148
+ tbody tr:hover {
149
+ background: var(--mw-primary-background);
150
+ }
157
151
  }
158
- }
159
152
 
160
- // Header stays visible while the body scrolls
161
- .mw-table-sticky-head {
162
- th {
163
- position: sticky;
164
- top: spacing('0');
165
- z-index: z-index('lift');
166
- box-shadow:
167
- inset 0 1px 0 var(--mw-border),
168
- inset 0 -1px 0 var(--mw-border);
153
+ // Quiet header for data-heavy views
154
+ .mw-table-subtle {
155
+ th {
156
+ background: color-mix(
157
+ in srgb,
158
+ var(--mw-gray-color) 20%,
159
+ var(--mw-card-background)
160
+ );
161
+ color: var(--mw-text-color);
162
+ border-bottom: 2px solid var(--mw-border-accent);
163
+ }
169
164
  }
170
- }
171
-
172
- .mw-table-responsive-scroll {
173
- @extend .mw-table-responsive;
174
- --mw-table-scroll-height: 400px;
175
- max-height: var(--mw-table-scroll-height);
176
- overflow-y: auto;
177
165
 
178
- .mw-table {
179
- margin-top: spacing('0');
166
+ // Header stays visible while the body scrolls
167
+ .mw-table-sticky-head {
168
+ th {
169
+ position: sticky;
170
+ top: spacing('0');
171
+ z-index: z-index('lift');
172
+ box-shadow:
173
+ inset 0 1px 0 var(--mw-border),
174
+ inset 0 -1px 0 var(--mw-border);
175
+ }
180
176
  }
181
177
 
182
- // Rows get shorter on small screens
183
- @include media-down('sm') {
178
+ .mw-table-responsive-scroll {
179
+ @extend .mw-table-responsive;
184
180
  --mw-table-scroll-height: 260px;
181
+ max-height: var(--mw-table-scroll-height);
182
+ overflow-y: auto;
183
+
184
+ .mw-table {
185
+ margin-top: spacing('0');
186
+ }
187
+
188
+ // Rows get shorter on small screens
189
+ @include media-up('sm') {
190
+ --mw-table-scroll-height: 400px;
191
+ }
185
192
  }
186
193
  }