@expressivecss/expressive 0.3.0 → 0.5.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 (96) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +4 -9
  3. package/dist/css/expressive.css +3183 -2150
  4. package/dist/css/expressive.css.map +1 -1
  5. package/dist/css/expressive.min.css +1 -1
  6. package/dist/css/expressive.min.css.map +1 -1
  7. package/dist/js/expressive.cjs +1254 -1567
  8. package/dist/js/expressive.cjs.map +4 -4
  9. package/dist/js/expressive.js +1254 -1567
  10. package/dist/js/expressive.js.map +4 -4
  11. package/dist/js/expressive.min.js +12 -22
  12. package/dist/js/expressive.min.js.map +4 -4
  13. package/dist/js/expressive.mjs +1254 -1568
  14. package/dist/js/expressive.mjs.map +4 -4
  15. package/dist/types/behaviors/bottomSheets.d.ts +18 -0
  16. package/dist/types/behaviors/sideSheets.d.ts +18 -0
  17. package/dist/types/components/autocomplete.d.ts +13 -20
  18. package/dist/types/components/buttons.d.ts +2 -2
  19. package/dist/types/components/cards.d.ts +3 -6
  20. package/dist/types/components/carousel.d.ts +3 -3
  21. package/dist/types/components/characterCounter.d.ts +3 -5
  22. package/dist/types/components/chips.d.ts +2 -2
  23. package/dist/types/components/datepicker.d.ts +2 -8
  24. package/dist/types/components/index.d.ts +3 -6
  25. package/dist/types/components/lightbox.d.ts +2 -2
  26. package/dist/types/components/{dropdown.d.ts → menu.d.ts} +48 -38
  27. package/dist/types/components/navigationRail.d.ts +53 -0
  28. package/dist/types/components/parallax.d.ts +2 -8
  29. package/dist/types/components/range.d.ts +5 -2
  30. package/dist/types/components/registry.d.ts +7 -19
  31. package/dist/types/components/scrollspy.d.ts +26 -50
  32. package/dist/types/components/select.d.ts +28 -14
  33. package/dist/types/components/sidenav.d.ts +40 -55
  34. package/dist/types/components/slider.d.ts +2 -2
  35. package/dist/types/components/{toasts.d.ts → snackbar.d.ts} +28 -25
  36. package/dist/types/components/tabs.d.ts +2 -2
  37. package/dist/types/components/timepicker.d.ts +2 -4
  38. package/dist/types/components/tooltip.d.ts +2 -2
  39. package/dist/types/core/component.d.ts +4 -4
  40. package/dist/types/index.d.ts +3 -1
  41. package/package.json +4 -3
  42. package/src/sass/README.md +13 -15
  43. package/src/sass/abstracts/_breakpoints.scss +14 -19
  44. package/src/sass/abstracts/_mixins.scss +3 -3
  45. package/src/sass/abstracts/_variables.scss +27 -23
  46. package/src/sass/base/_global.scss +1 -1
  47. package/src/sass/base/_grid.scss +64 -133
  48. package/src/sass/base/_index.scss +1 -1
  49. package/src/sass/components/_badges.scss +76 -61
  50. package/src/sass/components/_bottom-sheet.scss +137 -0
  51. package/src/sass/components/_buttons.scss +22 -54
  52. package/src/sass/components/_cards.scss +54 -127
  53. package/src/sass/components/_carousel.scss +4 -6
  54. package/src/sass/components/_chips.scss +6 -5
  55. package/src/sass/components/_datepicker.scss +1 -15
  56. package/src/sass/components/_dialog.scss +268 -0
  57. package/src/sass/components/_index.scss +9 -7
  58. package/src/sass/components/_list.scss +253 -0
  59. package/src/sass/components/_menu.scss +341 -0
  60. package/src/sass/components/_navbar.scss +68 -117
  61. package/src/sass/components/_navigation-bar.scss +165 -0
  62. package/src/sass/components/_navigation-rail.scss +308 -0
  63. package/src/sass/components/_page-footer.scss +138 -15
  64. package/src/sass/components/_parallax.scss +7 -28
  65. package/src/sass/components/_preloader.scss +145 -300
  66. package/src/sass/components/_scrollspy.scss +18 -0
  67. package/src/sass/components/_side-sheet.scss +193 -0
  68. package/src/sass/components/_sidenav.scss +281 -146
  69. package/src/sass/components/{_toast.scss → _snackbar.scss} +43 -43
  70. package/src/sass/components/_table_of_contents.scss +30 -14
  71. package/src/sass/components/_tabs.scss +43 -50
  72. package/src/sass/components/_toolbar.scss +93 -27
  73. package/src/sass/components/_tooltip.scss +5 -10
  74. package/src/sass/components/_transitions.scss +0 -5
  75. package/src/sass/components/forms/_fieldset.scss +1 -1
  76. package/src/sass/components/forms/_index.scss +0 -5
  77. package/src/sass/components/forms/_input-fields.scss +52 -55
  78. package/src/sass/components/forms/_range.scss +423 -98
  79. package/src/sass/components/forms/_select.scss +177 -60
  80. package/src/sass/components/forms/_switches.scss +21 -8
  81. package/src/sass/tokens/_reference.scss +37 -13
  82. package/src/sass/tokens/_theme.scss +5 -13
  83. package/src/sass/utilities/_colors.scss +16 -74
  84. package/src/sass/utilities/_helpers.scss +1 -3
  85. package/src/sass/utilities/_typescale.scss +0 -5
  86. package/src/sass/utilities/_visibility.scss +10 -2
  87. package/dist/types/components/collapsible.d.ts +0 -96
  88. package/dist/types/components/modal.d.ts +0 -45
  89. package/dist/types/components/pushpin.d.ts +0 -51
  90. package/dist/types/components/tapTarget.d.ts +0 -57
  91. package/src/sass/components/_collapsible.scss +0 -181
  92. package/src/sass/components/_collection.scss +0 -198
  93. package/src/sass/components/_dropdown.scss +0 -129
  94. package/src/sass/components/_modal.scss +0 -208
  95. package/src/sass/components/_pushpin.scss +0 -11
  96. package/src/sass/components/_tapTarget.scss +0 -191
@@ -2,10 +2,10 @@
2
2
 
3
3
  // Common buttons and FABs.
4
4
  //
5
- // Anatomy is the HTML. A <button> (or <a class="button"> / .btn) is a filled
6
- // common button. Put an <i> first or last for a leading/trailing icon — no
7
- // icon-left / icon-right required. Icon-only is a 40dp icon button. Helpers
8
- // switch the M3 variant (tonal, outlined, elevated, text) or the size.
5
+ // Anatomy is the HTML. A <button> (or <a class="button">) is a filled
6
+ // common button. Put an <i> first or last for a leading/trailing icon.
7
+ // Icon-only is a 40dp icon button. Helpers switch the M3 variant
8
+ // (tonal, outlined, elevated, text) or the size.
9
9
  //
10
10
  // Tokens follow https://m3.material.io/components/buttons/specs
11
11
  // height 40 / 32 small / 56 large, label-large, 20dp stadium
@@ -28,7 +28,7 @@
28
28
  // Widget chrome that happens to be a <button> — not a common button.
29
29
  $_not-btn: ".datepicker-day-button, .month-prev, .month-next, .indicator-item-btn";
30
30
 
31
- $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-small";
31
+ $_btn: "button:not(#{$_not-btn}), a.button";
32
32
 
33
33
  :where(#{$_btn}) {
34
34
  @include btn;
@@ -69,7 +69,7 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
69
69
  }
70
70
 
71
71
  // Default variant is filled. :where() keeps specificity at zero so .tonal etc. win.
72
- :where(#{$_btn}):not(.tonal, .outlined, .border, .elevated, .text, .transparent, .btn-flat) {
72
+ :where(#{$_btn}):not(.tonal, .outlined, .elevated, .text) {
73
73
  @include btn-filled;
74
74
  }
75
75
 
@@ -77,8 +77,7 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
77
77
  @include btn-tonal;
78
78
  }
79
79
 
80
- :where(#{$_btn}).outlined,
81
- :where(#{$_btn}).border {
80
+ :where(#{$_btn}).outlined {
82
81
  @include btn-outlined;
83
82
  }
84
83
 
@@ -86,20 +85,12 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
86
85
  @include btn-elevated;
87
86
  }
88
87
 
89
- :where(#{$_btn}).text,
90
- :where(#{$_btn}).transparent,
91
- .btn-flat {
88
+ :where(#{$_btn}).text {
92
89
  @include btn-flat;
93
90
  }
94
91
 
95
- // icon-right is a compat alias: new markup puts the icon last in the DOM.
96
- :where(#{$_btn}).icon-right {
97
- flex-direction: row-reverse;
98
- }
99
-
100
92
  // Sizes. small = 32dp, large/extra = 56dp (M3 extra-large / FAB height).
101
- :where(#{$_btn}).small,
102
- .btn-small {
93
+ :where(#{$_btn}).small {
103
94
  --md-comp-filled-button-container-height: 32px;
104
95
  --md-comp-filled-button-container-shape: 16px;
105
96
  --md-comp-filled-button-leading-space: 16px;
@@ -111,8 +102,7 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
111
102
  }
112
103
 
113
104
  :where(#{$_btn}).large,
114
- :where(#{$_btn}).extra,
115
- .btn-large {
105
+ :where(#{$_btn}).extra {
116
106
  --md-comp-filled-button-container-height: 56px;
117
107
  --md-comp-filled-button-container-shape: 28px;
118
108
  --md-comp-filled-button-leading-space: 24px;
@@ -126,11 +116,6 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
126
116
  border-radius: 9999px;
127
117
  }
128
118
 
129
- .btn-block {
130
- display: flex;
131
- width: 100%;
132
- }
133
-
134
119
  // Extended FAB: 56dp, large corners, primary-container, icon + label.
135
120
  :where(#{$_btn}).extend {
136
121
  height: 56px;
@@ -168,13 +153,10 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
168
153
  }
169
154
  }
170
155
 
171
- // FAB. .btn-floating is the JS contract (FloatingActionButton looks it up).
172
- // Icon-only .extra / .large is the same 56dp regular FAB. Bare .btn-floating
173
- // is the 40dp small FAB.
174
- .btn-floating,
156
+ // FAB. Icon-only .extra / .large is the 56dp regular FAB. Add .small for
157
+ // the 40dp small FAB. The speed-dial host is .fixed-action-btn.
175
158
  :where(#{$_btn}).extra.circle,
176
- :where(#{$_btn}).large.circle,
177
- :where(#{$_btn}).btn-large.circle {
159
+ :where(#{$_btn}).large.circle {
178
160
  display: inline-flex;
179
161
  align-items: center;
180
162
  justify-content: center;
@@ -191,7 +173,6 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
191
173
  vertical-align: middle;
192
174
  @include z-depth("3");
193
175
  @include focus-visible;
194
- transition: background-color .2s ease-out, box-shadow .2s ease-out;
195
176
 
196
177
  > i {
197
178
  font-size: 24px;
@@ -219,8 +200,7 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
219
200
  );
220
201
  }
221
202
 
222
- &.small,
223
- &.btn-small {
203
+ &.small {
224
204
  width: 40px;
225
205
  height: 40px;
226
206
  border-radius: 12px;
@@ -242,23 +222,9 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
242
222
  }
243
223
  }
244
224
 
245
- // Small FAB alias: .btn-floating alone is 40dp (historical size + M3 small).
246
- .btn-floating:not(.large, .btn-large, .extra, .small, .btn-small) {
247
- width: 40px;
248
- height: 40px;
249
- border-radius: 12px;
250
-
251
- &.halfway-fab {
252
- bottom: -20px;
253
- }
254
- }
255
-
256
225
  :where(#{$_btn}):disabled,
257
226
  :where(#{$_btn})[disabled],
258
- :where(#{$_btn}).disabled,
259
- .btn-floating:disabled,
260
- .btn-floating[disabled],
261
- .btn-floating.disabled {
227
+ :where(#{$_btn}).disabled {
262
228
  @include btn-disabled;
263
229
  }
264
230
 
@@ -334,12 +300,14 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
334
300
  li:nth-last-child(7) { --i: 6; }
335
301
  li:nth-last-child(8) { --i: 7; }
336
302
 
337
- :is(a, button) {
303
+ > li > :is(a, button) {
338
304
  opacity: 0;
339
305
  transform: var(--md-comp-fab-hidden-transform);
340
306
  transition:
341
307
  opacity var(--md-comp-fab-duration) var(--md-comp-fab-easing),
342
- transform var(--md-comp-fab-duration) var(--md-comp-fab-easing);
308
+ transform var(--md-comp-fab-duration) var(--md-comp-fab-easing),
309
+ background-color .2s ease-out,
310
+ box-shadow .2s ease-out;
343
311
  // Close: farthest first, so they funnel into the disc.
344
312
  transition-delay: calc(
345
313
  var(--md-comp-fab-stagger) * (var(--n) - 1 - var(--i, 0))
@@ -351,7 +319,7 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
351
319
  visibility: visible;
352
320
  transition-delay: 0s;
353
321
 
354
- :is(a, button) {
322
+ > li > :is(a, button) {
355
323
  opacity: 1;
356
324
  transform: none;
357
325
  transition-delay: calc(var(--md-comp-fab-stagger) * var(--i, 0));
@@ -429,7 +397,7 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
429
397
  padding: 0;
430
398
  height: 56px;
431
399
 
432
- :is(ul, menu) :is(a, button) {
400
+ :is(ul, menu) > li > :is(a, button) {
433
401
  opacity: 1;
434
402
  transform: none;
435
403
  transition: opacity var(--md-comp-fab-duration);
@@ -490,7 +458,7 @@ $_btn: "button:not(#{$_not-btn}), a.button, .btn, .btn-flat, .btn-large, .btn-sm
490
458
  visibility: visible;
491
459
  transition-delay: 0s;
492
460
 
493
- :is(a, button) {
461
+ > li > :is(a, button) {
494
462
  opacity: 1;
495
463
  transform: none;
496
464
  transition-delay: calc(var(--md-comp-fab-stagger) * var(--i, 0));
@@ -3,23 +3,24 @@
3
3
  // Cards.
4
4
  //
5
5
  // Anatomy is the HTML. An <article> is an elevated card. A heading is the
6
- // headline, a <p> is supporting text, a direct <nav> is the action row,
6
+ // headline, a <p> is supporting text, a direct <nav> (not .tabs) is the
7
+ // action row,
7
8
  // <img> / <figure> is media. Helpers switch the M3 variant (filled, outlined)
8
- // or the layout (horizontal). .card and .card-panel stay as aliases.
9
+ // or the layout (horizontal).
9
10
  //
10
11
  // Tokens follow https://m3.material.io/components/cards/specs
11
- // container surface, 12dp corners
12
+ // container surface-container-low, 12dp corners
12
13
  // elevated level 1, hover level 2
13
- // filled surface-variant, level 0
14
+ // filled surface-container-highest, level 0
14
15
  // outlined surface + 1dp outline, level 0
15
16
  // headline title-medium / on-surface
16
17
  // body body-medium / on-surface-variant
17
18
  // padding 16dp
18
19
 
19
- $_card: "article, .card, .card-panel";
20
+ $_card: "article";
20
21
 
21
22
  :where(#{$_card}) {
22
- --md-comp-elevated-card-container-color: var(--md-sys-color-surface);
23
+ --md-comp-elevated-card-container-color: var(--md-sys-color-surface-container-low);
23
24
  --md-comp-elevated-card-container-shape: 12px;
24
25
 
25
26
  position: relative;
@@ -42,7 +43,7 @@ $_card: "article, .card, .card-panel";
42
43
 
43
44
  :where(#{$_card}).filled {
44
45
  @include z-depth("0");
45
- background-color: var(--md-sys-color-surface-variant);
46
+ background-color: var(--md-sys-color-surface-container-highest);
46
47
  }
47
48
 
48
49
  :where(#{$_card}).outlined,
@@ -88,7 +89,8 @@ article > header {
88
89
  color: inherit;
89
90
  }
90
91
 
91
- article > nav {
92
+ // Action row. nav.tabs is a tab bar, not actions — leave it to _tabs.scss.
93
+ article > nav:not(.tabs) {
92
94
  display: flex;
93
95
  flex-wrap: wrap;
94
96
  align-items: center;
@@ -132,8 +134,7 @@ article > figure > figcaption {
132
134
  }
133
135
 
134
136
  // Horizontal: media on the start, body stacked beside it.
135
- article.horizontal,
136
- .card.horizontal {
137
+ article.horizontal {
137
138
  display: flex;
138
139
  flex-direction: row;
139
140
  align-items: stretch;
@@ -141,8 +142,7 @@ article.horizontal,
141
142
 
142
143
  > img,
143
144
  > picture,
144
- > figure,
145
- > .card-image {
145
+ > figure {
146
146
  flex: 0 0 40%;
147
147
  max-width: 40%;
148
148
  width: 40%;
@@ -151,8 +151,7 @@ article.horizontal,
151
151
 
152
152
  > img,
153
153
  > picture img,
154
- > figure img,
155
- > .card-image img {
154
+ > figure img {
156
155
  height: 100%;
157
156
  object-fit: cover;
158
157
  }
@@ -165,55 +164,56 @@ article.horizontal,
165
164
  }
166
165
  }
167
166
 
168
- // Fixed heights (Materialize sizes, still useful for uniform grids).
169
- article.small, .card.small { height: 300px; }
170
- article.medium, .card.medium { height: 400px; }
171
- article.large, .card.large { height: 500px; }
167
+ // Fixed heights for uniform grids.
168
+ article.small { height: 300px; }
169
+ article.medium { height: 400px; }
170
+ article.large { height: 500px; }
172
171
 
173
- article.small, article.medium, article.large,
174
- .card.small, .card.medium, .card.large {
172
+ article.small, article.medium, article.large {
175
173
  display: flex;
176
174
  flex-direction: column;
177
175
 
178
- > img, > picture, > figure, > .card-image {
176
+ > img, > picture, > figure {
179
177
  flex: 0 1 60%;
180
178
  min-height: 0;
181
179
  overflow: hidden;
182
180
  }
183
181
 
184
- > img, > figure img, > .card-image img {
182
+ > img, > figure img {
185
183
  height: 100%;
186
184
  }
187
185
 
188
- > p, > .card-content {
186
+ > p {
189
187
  flex: 1 1 auto;
190
188
  min-height: 0;
191
189
  overflow: hidden;
192
190
  }
193
191
 
194
- > nav, > .card-action {
192
+ > nav:not(.tabs) {
195
193
  margin-top: auto;
196
194
  }
197
195
  }
198
196
 
199
197
  article.horizontal.small,
200
198
  article.horizontal.medium,
201
- article.horizontal.large,
202
- .card.horizontal.small,
203
- .card.horizontal.medium,
204
- .card.horizontal.large {
199
+ article.horizontal.large {
205
200
  flex-direction: row;
206
201
 
207
- > img, > picture, > figure, > .card-image {
202
+ > img, > picture, > figure {
208
203
  flex: 0 0 40%;
209
204
  max-height: none;
210
205
  }
211
206
  }
212
207
 
213
- // Reveal overlay. aside is the semantic name; .card-reveal is the JS alias.
214
- article > aside,
215
- .card-reveal {
216
- display: none;
208
+ // Reveal overlay. aside is the panel. Parked under the card (translateY 100%)
209
+ // and clipped by overflow:hidden. Open is aria-expanded="true" → slide up
210
+ // to cover. Do not use inset:0 as the closed geometry and then
211
+ // translateY(-100%): that slides the panel *off* the card, and isOpen stays
212
+ // true so a second click is a no-op.
213
+ article > aside {
214
+ --md-comp-card-reveal-duration: 300ms;
215
+ --md-comp-card-reveal-easing: ease;
216
+
217
217
  position: absolute;
218
218
  inset: 0;
219
219
  z-index: 3;
@@ -222,107 +222,34 @@ article > aside,
222
222
  overflow-y: auto;
223
223
  background-color: var(--md-sys-color-surface);
224
224
  color: var(--md-sys-color-on-surface);
225
+ transform: translateY(100%);
226
+ visibility: hidden;
227
+ pointer-events: none;
228
+ transition:
229
+ transform var(--md-comp-card-reveal-duration) var(--md-comp-card-reveal-easing),
230
+ visibility 0s var(--md-comp-card-reveal-duration);
225
231
  }
226
232
 
227
- article.sticky > nav,
228
- .card.sticky-action > .card-action {
229
- position: relative;
230
- z-index: 4;
231
- background-color: inherit;
232
- }
233
-
234
- article.sticky > aside,
235
- .card.sticky-action > .card-reveal {
236
- bottom: auto;
237
- height: calc(100% - 52px);
238
- }
239
-
240
- // Simple padded surface. Same tokens as a card with no slots.
241
- .card-panel {
242
- padding: 16px;
243
- margin: $element-top-margin 0 $element-bottom-margin 0;
244
- }
245
-
246
- // --- Legacy slots (.card-*) so existing markup keeps working --------------
247
-
248
- .card-title {
249
- font-family: var(--md-sys-typescale-title-medium-font-family-name);
250
- font-size: var(--md-sys-typescale-title-medium-font-size);
251
- font-weight: var(--md-sys-typescale-title-medium-font-weight);
252
- line-height: var(--md-sys-typescale-title-medium-line-height);
253
- letter-spacing: var(--md-sys-typescale-title-medium-letter-spacing);
254
- }
255
-
256
- .card .card-image {
257
- position: relative;
258
-
259
- img {
260
- display: block;
261
- width: 100%;
262
- object-fit: cover;
263
- }
264
-
265
- .card-title {
266
- position: absolute;
267
- bottom: 0;
268
- left: 0;
269
- max-width: 100%;
270
- padding: 16px;
271
- color: var(--md-sys-color-on-surface);
272
- background: color-mix(in oklab, var(--md-sys-color-surface) 72%, transparent);
273
- }
274
-
275
- .activator {
276
- position: absolute;
277
- inset: 0;
278
- cursor: pointer;
279
- }
280
-
281
- img.activator {
282
- position: relative;
283
- }
284
- }
285
-
286
- .card .card-content {
287
- padding: 16px;
288
- border-radius: 0;
289
-
290
- p { margin: 0; }
291
-
292
- .card-title {
293
- display: block;
294
- margin-bottom: 8px;
295
-
296
- &.activator { cursor: pointer; }
297
- }
233
+ article > aside[aria-expanded="true"] {
234
+ transform: translateY(0);
235
+ visibility: visible;
236
+ pointer-events: auto;
237
+ transition: transform var(--md-comp-card-reveal-duration) var(--md-comp-card-reveal-easing);
298
238
  }
299
239
 
300
- .card .card-action {
301
- display: flex;
302
- flex-wrap: wrap;
303
- align-items: center;
304
- gap: 8px;
305
- padding: 4px 8px 8px;
306
-
307
- a:not(.button):not(.btn):not(.btn-floating) {
308
- @include btn-flat;
309
- height: auto;
310
- padding: 8px 12px;
311
- min-height: 40px;
240
+ @media (prefers-reduced-motion: reduce) {
241
+ article > aside {
242
+ transition: none;
312
243
  }
313
244
  }
314
245
 
315
- .card .card-stacked {
316
- display: flex;
317
- flex-direction: column;
318
- flex: 1;
319
- min-width: 0;
320
-
321
- .card-content { flex-grow: 1; }
246
+ article.sticky > nav {
247
+ position: relative;
248
+ z-index: 4;
249
+ background-color: inherit;
322
250
  }
323
251
 
324
- .card .card-image .activator {
325
- cursor: pointer;
252
+ article.sticky > aside {
253
+ bottom: auto;
254
+ height: calc(100% - 52px);
326
255
  }
327
-
328
- .no-padding { padding: 0 !important; }
@@ -2,7 +2,7 @@
2
2
 
3
3
  // Carousel. Two layouts, one class:
4
4
  // .carousel 3D coverflow (JS)
5
- // .carousel.flat linear snap track (CSS). .carousel-slider is an alias.
5
+ // .carousel.flat linear snap track (CSS).
6
6
  //
7
7
  // Anatomy: direct children move. .carousel-item is optional. Indicators and
8
8
  // .carousel-fixed-item are chrome, not slides.
@@ -69,7 +69,7 @@
69
69
  }
70
70
 
71
71
  // Coverflow. JS writes transform / opacity / visibility on each item.
72
- .carousel:not(.flat):not(.carousel-slider) {
72
+ .carousel:not(.flat) {
73
73
  perspective: 500px;
74
74
  transform-style: preserve-3d;
75
75
  transform-origin: 0% 50%;
@@ -90,8 +90,7 @@
90
90
  // Linear track. The outer box clips and holds chrome (dots, fixed item).
91
91
  // Slides live in .carousel-track so they can scroll without taking the
92
92
  // controls with them — abspos children of an overflow:auto box scroll too.
93
- .carousel.flat,
94
- .carousel.carousel-slider {
93
+ .carousel.flat {
95
94
  overflow: hidden;
96
95
  perspective: none;
97
96
  transform: none;
@@ -149,8 +148,7 @@
149
148
  }
150
149
 
151
150
  @media (prefers-reduced-motion: reduce) {
152
- .carousel.flat > .carousel-track,
153
- .carousel.carousel-slider > .carousel-track {
151
+ .carousel.flat > .carousel-track {
154
152
  scroll-behavior: auto;
155
153
  }
156
154
  }
@@ -6,7 +6,7 @@
6
6
  --padding: 8px;
7
7
 
8
8
  color: var(--md-sys-color-on-surface-variant);
9
- background-color: rgba(0, 0, 0, 0.09);
9
+ background-color: var(--md-sys-color-surface-container-low);
10
10
  display: inline-flex;
11
11
  white-space: nowrap;
12
12
  gap: 8px;
@@ -21,10 +21,11 @@
21
21
  user-select: none;
22
22
  vertical-align: top;
23
23
 
24
- &:focus {
24
+ &:focus,
25
+ &.active {
25
26
  outline: none;
26
- background-color: var(--md-sys-color-primary);
27
- color: var(--md-sys-color-on-primary);
27
+ background-color: var(--md-sys-color-secondary-container);
28
+ color: var(--md-sys-color-on-secondary-container);
28
29
  }
29
30
  }
30
31
 
@@ -60,7 +61,7 @@
60
61
  }
61
62
 
62
63
  .chip .close:hover {
63
- background-color: #8888;
64
+ background-color: color-mix(in oklab, var(--md-sys-color-on-surface-variant) 8%, transparent);
64
65
  }
65
66
 
66
67
  //--------------------------
@@ -1,14 +1,5 @@
1
1
  @use "../abstracts" as *;
2
2
 
3
- /* Modal */
4
- // @removed since v2.2.1
5
- /*.datepicker-modal {
6
- max-width: 325px;
7
- // @removed since v2.2.1-dev regarding Material M3 standards
8
- min-width: 300px;
9
- max-height: none;
10
- }*/
11
-
12
3
  .datepicker-container {
13
4
  display: flex;
14
5
  flex-direction: column;
@@ -27,7 +18,7 @@
27
18
  display: flex;
28
19
  }
29
20
 
30
- .select-wrapper {
21
+ .field:has(> .hide-select) {
31
22
  input {
32
23
  height: 49px;
33
24
  margin: 4px 0 0 0;
@@ -50,11 +41,6 @@
50
41
  }
51
42
  }
52
43
 
53
- .select-dropdown {
54
- padding: 0;
55
- vertical-align: middle;
56
- }
57
-
58
44
  .select-year input,
59
45
  .select-month input {
60
46
  background-color: transparent;