@undrr/undrr-mangrove 1.3.0 → 1.3.2

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 (75) hide show
  1. package/README.md +4 -4
  2. package/components/BarChart.js +1 -1
  3. package/components/Fetcher.js +1 -1
  4. package/components/Gallery.js +1 -1
  5. package/components/IconCard.js +2 -2
  6. package/components/IconCard.js.LICENSE.txt +1 -1
  7. package/components/MapComponent.js +2 -2
  8. package/components/MegaMenu.js +1 -1
  9. package/components/Pager.js +1 -1
  10. package/components/QuoteHighlight.js +1 -1
  11. package/components/ScrollContainer.js +1 -1
  12. package/components/ShareButtons.js +1 -1
  13. package/components/StatsCard.js +2 -2
  14. package/components/SyndicationSearchWidget.js +2 -2
  15. package/css/style-gutenberg.css +10 -2
  16. package/css/style-gutenberg.css.map +1 -1
  17. package/css/style-irp.css +29 -70
  18. package/css/style-irp.css.map +1 -1
  19. package/css/style-mcr.css +29 -70
  20. package/css/style-mcr.css.map +1 -1
  21. package/css/style-preventionweb.css +29 -70
  22. package/css/style-preventionweb.css.map +1 -1
  23. package/css/style.css +29 -70
  24. package/css/style.css.map +1 -1
  25. package/error-pages/401.html +1 -1
  26. package/error-pages/403.html +1 -1
  27. package/error-pages/404.html +1 -1
  28. package/error-pages/429.html +1 -1
  29. package/error-pages/500.html +1 -1
  30. package/error-pages/502.html +1 -1
  31. package/error-pages/503.html +1 -1
  32. package/error-pages/504.html +1 -1
  33. package/error-pages/5xx.html +1 -1
  34. package/error-pages/challenge.html +12 -11
  35. package/error-pages/managed-challenge.html +12 -11
  36. package/js/show-more.js +15 -9
  37. package/package.json +1 -1
  38. package/scss/Atom/Tag/tag.scss +115 -0
  39. package/scss/Components/Boilerplate/boilerplate.scss +15 -0
  40. package/scss/Components/Cards/Card/card.scss +88 -23
  41. package/scss/Components/Cards/StatsCard/stats-card.scss +1 -1
  42. package/scss/Components/ErrorPages/error-pages.scss +27 -0
  43. package/scss/Components/Footer/footer.scss +20 -3
  44. package/scss/Components/Forms/Checkbox/checkbox.scss +2 -22
  45. package/scss/Components/Forms/FormGroup/form-group.scss +24 -0
  46. package/scss/Components/Forms/InputFields/input-fields.scss +7 -177
  47. package/scss/Components/Forms/Radio/radio.scss +2 -13
  48. package/scss/Components/Forms/Select/select.scss +6 -15
  49. package/scss/Components/Forms/TextInput/text-input.scss +13 -0
  50. package/scss/Components/Forms/Textarea/textarea.scss +2 -0
  51. package/scss/Components/Forms/_form-base.scss +324 -0
  52. package/scss/Components/Forms/_form-legacy.scss +153 -0
  53. package/scss/Components/Hero/hero.scss +1 -1
  54. package/scss/Components/HighlightBox/highlight-box.scss +0 -9
  55. package/scss/Components/MegaMenu/megamenu.scss +6 -2
  56. package/scss/Components/PageHeader/page-header.scss +1 -1
  57. package/scss/Components/SyndicationSearchWidget/SyndicationSearchWidget.scss +49 -1
  58. package/scss/Utilities/EmbedContainer/embed-container.scss +58 -0
  59. package/scss/Utilities/ShowMore/ShowMore.scss +8 -17
  60. package/scss/assets/scss/_components.scss +7 -10
  61. package/scss/assets/scss/_mixins.scss +4 -68
  62. package/scss/assets/scss/_utility.scss +87 -0
  63. package/scss/assets/scss/_variables-irp.scss +12 -3
  64. package/scss/assets/scss/_variables-mcr.scss +12 -3
  65. package/scss/assets/scss/_variables-preventionweb.scss +10 -2
  66. package/scss/assets/scss/_variables.scss +37 -10
  67. package/scss/Atom/Navigation/LanguageSwitcherRow/language-switcher-row.scss +0 -12
  68. package/scss/Atom/Navigation/ProgressBarNavigation/progress-bar-navigation.scss +0 -70
  69. package/scss/Atom/Navigation/SidebarFirstLevel/sidebar-first-level.scss +0 -26
  70. package/scss/Components/Accordion/accordion.scss +0 -119
  71. package/scss/Components/Forms/Dropdowns/CustomSelect/custom-select.scss +0 -110
  72. package/scss/Components/Forms/Dropdowns/Multiselect/multi-select.scss +0 -228
  73. package/scss/Components/LanguageSwitcher/language-switcher.scss +0 -162
  74. package/scss/Components/Sidebar/sidebar.scss +0 -236
  75. package/scss/Molecules/SidebarData/sidebar-data.scss +0 -44
@@ -0,0 +1,324 @@
1
+ // Shared BEM-scoped form styles for Mangrove form components.
2
+ // All form components import this partial for consistent base styling.
3
+
4
+ // -----------------------------------------------------------------------------
5
+ // Field wrapper
6
+ // -----------------------------------------------------------------------------
7
+ .mg-form-field {
8
+ display: block;
9
+ margin-bottom: $mg-spacing-100;
10
+ }
11
+
12
+ // -----------------------------------------------------------------------------
13
+ // Label
14
+ // -----------------------------------------------------------------------------
15
+ .mg-form-label {
16
+ display: block;
17
+ font-size: $mg-font-size-300;
18
+
19
+ &--disabled {
20
+ color: $mg-color-neutral-400;
21
+ }
22
+
23
+ &--required::after {
24
+ color: $mg-color-red-900;
25
+ content: " *";
26
+ }
27
+ }
28
+
29
+ // -----------------------------------------------------------------------------
30
+ // Text input
31
+ // -----------------------------------------------------------------------------
32
+ %mg-form-input-base {
33
+ @extend %background-white;
34
+
35
+ appearance: none;
36
+ border: 2px solid $mg-color-black;
37
+ border-radius: $mg-radius-form-input;
38
+ box-sizing: border-box;
39
+ display: block;
40
+ font-family: $mg-font-family;
41
+ font-size: $mg-font-size-300;
42
+ height: 46px;
43
+ margin-top: $mg-spacing-25;
44
+ padding: 0.625rem;
45
+ width: 100%;
46
+
47
+ &::placeholder {
48
+ color: $mg-color-neutral-500;
49
+ }
50
+
51
+ &:focus-visible {
52
+ box-shadow: 0 0 4px $mg-color-form-focus;
53
+ outline: 0;
54
+ }
55
+ }
56
+
57
+ .mg-form-input {
58
+ @extend %mg-form-input-base;
59
+
60
+ &--disabled {
61
+ background-color: $mg-color-white;
62
+ border-color: $mg-color-neutral-400;
63
+ color: $mg-color-neutral-400;
64
+
65
+ &::placeholder {
66
+ color: $mg-color-neutral-400;
67
+ }
68
+ }
69
+
70
+ &--error {
71
+ border-color: $mg-color-red-900;
72
+ }
73
+ }
74
+
75
+ // -----------------------------------------------------------------------------
76
+ // Textarea
77
+ // -----------------------------------------------------------------------------
78
+ .mg-form-textarea {
79
+ @extend %mg-form-input-base;
80
+
81
+ height: auto;
82
+ max-width: 100%;
83
+ resize: vertical;
84
+
85
+ &--disabled {
86
+ background-color: $mg-color-white;
87
+ border-color: $mg-color-neutral-400;
88
+ color: $mg-color-neutral-400;
89
+
90
+ &::placeholder {
91
+ color: $mg-color-neutral-400;
92
+ }
93
+ }
94
+
95
+ &--error {
96
+ border-color: $mg-color-red-900;
97
+ }
98
+ }
99
+
100
+ // -----------------------------------------------------------------------------
101
+ // Select
102
+ // -----------------------------------------------------------------------------
103
+ .mg-form-select {
104
+ @extend %background-white;
105
+
106
+ appearance: none;
107
+ border: 2px solid $mg-color-black;
108
+ border-radius: $mg-radius-form-input;
109
+ box-sizing: border-box;
110
+ cursor: pointer;
111
+ display: block;
112
+ font-family: $mg-font-family;
113
+ font-size: $mg-font-size-300;
114
+ height: 46px;
115
+ margin-top: $mg-spacing-25;
116
+ padding: 0.625rem;
117
+ padding-right: $mg-spacing-200;
118
+ width: 100%;
119
+
120
+ // Custom dropdown arrow
121
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%231a1a1a' d='M1.41 0L6 4.58 10.59 0 12 1.41l-6 6-6-6z'/%3E%3C/svg%3E");
122
+ background-position: right 0.625rem center;
123
+ background-repeat: no-repeat;
124
+
125
+ &:focus-visible {
126
+ box-shadow: 0 0 4px $mg-color-form-focus;
127
+ outline: 0;
128
+ }
129
+
130
+ &--disabled {
131
+ background-color: $mg-color-white;
132
+ border-color: $mg-color-neutral-400;
133
+ color: $mg-color-neutral-400;
134
+ cursor: default;
135
+ }
136
+
137
+ &--error {
138
+ border-color: $mg-color-red-900;
139
+ }
140
+ }
141
+
142
+ // -----------------------------------------------------------------------------
143
+ // Checkbox / Radio shared (check group)
144
+ // -----------------------------------------------------------------------------
145
+ .mg-form-check {
146
+ align-items: center;
147
+ display: flex;
148
+ position: relative;
149
+
150
+ // Base input (shared between checkbox and radio)
151
+ &__input {
152
+ appearance: none;
153
+ border: 2px solid $mg-color-form-check;
154
+ cursor: pointer;
155
+ height: 16px;
156
+ margin: 0;
157
+ width: 16px;
158
+
159
+ &:hover {
160
+ border-color: $mg-color-form-check--hover;
161
+ }
162
+
163
+ &:focus-visible {
164
+ box-shadow: 0 0 4px $mg-color-form-focus;
165
+ outline: 0;
166
+ }
167
+
168
+ &--checkbox {
169
+ border-radius: 0;
170
+ }
171
+
172
+ &--radio {
173
+ background-color: transparent;
174
+ border-radius: 100%;
175
+ box-shadow: inset 0 0 0 $mg-color-white;
176
+ }
177
+
178
+ &--disabled {
179
+ border-color: $mg-color-neutral-400;
180
+ cursor: default;
181
+
182
+ &:hover {
183
+ border-color: $mg-color-neutral-400;
184
+ }
185
+ }
186
+
187
+ &--error {
188
+ border-color: $mg-color-red-900;
189
+
190
+ &:hover {
191
+ border-color: $mg-color-red-900;
192
+ }
193
+ }
194
+ }
195
+
196
+ // Label next to checkbox/radio
197
+ &__label {
198
+ cursor: pointer;
199
+ font-size: $mg-font-size-300;
200
+ padding: 0 7px;
201
+ }
202
+ }
203
+
204
+ // Checked states (must be outside BEM nesting for specificity)
205
+ .mg-form-check__input--checkbox:checked {
206
+ background-color: $mg-color-form-check--checked;
207
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round' d='M3.5 8l3 3 6-6'/%3E%3C/svg%3E");
208
+ border-color: $mg-color-form-check--checked;
209
+ }
210
+
211
+ .mg-form-check__input--radio:checked {
212
+ background-color: $mg-color-form-check--checked;
213
+ box-shadow: inset 0 0 0 3px $mg-color-white;
214
+ }
215
+
216
+ // -----------------------------------------------------------------------------
217
+ // Help text
218
+ // -----------------------------------------------------------------------------
219
+ .mg-form-help {
220
+ color: $mg-color-neutral-500;
221
+ font-size: $mg-font-size-200;
222
+ margin-bottom: 0;
223
+ margin-top: $mg-spacing-25;
224
+ }
225
+
226
+ // -----------------------------------------------------------------------------
227
+ // Error text
228
+ // -----------------------------------------------------------------------------
229
+ .mg-form-error {
230
+ color: $mg-color-red-900;
231
+ font-size: $mg-font-size-300;
232
+ margin-bottom: 0;
233
+ margin-top: $mg-spacing-25;
234
+ }
235
+
236
+ // -----------------------------------------------------------------------------
237
+ // Form error summary
238
+ // -----------------------------------------------------------------------------
239
+ .mg-form-error-summary {
240
+ background-color: $mg-color-red-50;
241
+ border-left: 4px solid $mg-color-red-900;
242
+ margin-bottom: $mg-spacing-200;
243
+ padding: $mg-spacing-150;
244
+
245
+ &:focus {
246
+ outline: 3px solid $mg-color-blue-800;
247
+ outline-offset: 0;
248
+ }
249
+
250
+ &__title {
251
+ color: $mg-color-red-900;
252
+ font-size: $mg-font-size-300;
253
+ font-weight: 700;
254
+ margin-bottom: $mg-spacing-75;
255
+ margin-top: 0;
256
+ }
257
+
258
+ &__list {
259
+ margin: 0;
260
+ padding-left: $mg-spacing-100;
261
+
262
+ li {
263
+ margin-bottom: $mg-spacing-50;
264
+
265
+ &:last-child {
266
+ margin-bottom: 0;
267
+ }
268
+ }
269
+
270
+ a {
271
+ color: $mg-color-red-900;
272
+ font-weight: 600;
273
+ text-decoration: underline;
274
+ }
275
+ }
276
+ }
277
+
278
+ // -----------------------------------------------------------------------------
279
+ // Screen-reader-only utility
280
+ // -----------------------------------------------------------------------------
281
+ .mg-u-sr-only {
282
+ border: 0;
283
+ clip-path: inset(50%);
284
+ height: 1px;
285
+ margin: -1px;
286
+ overflow: hidden;
287
+ padding: 0;
288
+ position: absolute;
289
+ white-space: nowrap;
290
+ width: 1px;
291
+ }
292
+
293
+ // -----------------------------------------------------------------------------
294
+ // RTL overrides
295
+ // -----------------------------------------------------------------------------
296
+ [dir="rtl"] {
297
+ .mg-form-select {
298
+ background-position: left 0.625rem center;
299
+ padding-left: $mg-spacing-200;
300
+ padding-right: 0.625rem;
301
+ }
302
+
303
+ .mg-form-input[type="date"]::-webkit-calendar-picker-indicator {
304
+ left: inherit;
305
+ position: absolute;
306
+ right: 27px;
307
+ }
308
+
309
+ .mg-form-input[type="date"]::-webkit-date-and-time-value {
310
+ margin-right: 0;
311
+ text-align: right;
312
+ }
313
+ }
314
+
315
+ // -----------------------------------------------------------------------------
316
+ // Arabic font override
317
+ // -----------------------------------------------------------------------------
318
+ :lang(ar) {
319
+ .mg-form-input,
320
+ .mg-form-textarea,
321
+ .mg-form-select {
322
+ font-family: $mg-font-family-arabic-body;
323
+ }
324
+ }
@@ -0,0 +1,153 @@
1
+ // DEPRECATED — February 2026
2
+ // These bare element selectors are provided for backward compatibility only.
3
+ // Migrate to BEM classes (.mg-form-input, .mg-form-label, etc.) from _form-base.scss.
4
+ // Scheduled for removal: August 2026.
5
+ @warn "_form-legacy.scss is deprecated. Migrate to BEM classes from _form-base.scss. Removal: August 2026.";
6
+
7
+ label {
8
+ @extend %paragraph-font-300;
9
+
10
+ display: block;
11
+
12
+ &.error {
13
+ @extend %paragraph-font-300;
14
+
15
+ color: $mg-color-black;
16
+ margin-top: 0;
17
+ }
18
+
19
+ &.disabled {
20
+ color: $mg-color-neutral-400;
21
+ }
22
+ }
23
+
24
+ .help {
25
+ color: $mg-color-neutral-500;
26
+ display: block;
27
+ font-size: $mg-font-size-200;
28
+ margin-bottom: 0;
29
+ margin-top: $mg-spacing-25;
30
+ }
31
+
32
+ .error {
33
+ color: $mg-color-red-900;
34
+ font-size: $mg-font-size-300;
35
+ margin-bottom: 0;
36
+ margin-top: $mg-spacing-25;
37
+ }
38
+
39
+ input[type="text"],
40
+ input[type="number"],
41
+ input[type="email"],
42
+ input[type="password"],
43
+ input[type="search"],
44
+ input[type="tel"],
45
+ input[type="date"],
46
+ textarea {
47
+ @extend %background-white;
48
+
49
+ appearance: none;
50
+ border: 2px solid $mg-color-black;
51
+ border-radius: 0;
52
+ box-sizing: border-box;
53
+ display: block;
54
+ font-family: $mg-font-family;
55
+ font-size: $mg-font-size-300;
56
+ height: 46px;
57
+ margin-top: $mg-spacing-25;
58
+ padding: 0.625rem;
59
+ width: 100%;
60
+
61
+ &::placeholder {
62
+ color: $mg-color-neutral-500;
63
+ }
64
+
65
+ &:focus {
66
+ box-shadow: 0 0 4px $mg-color-blue-800;
67
+ outline: 0;
68
+ }
69
+
70
+ input[type="date"],
71
+ input[type="search"] {
72
+ position: relative;
73
+ }
74
+
75
+ &.disabled {
76
+ background-color: $mg-color-white;
77
+ border: 2px solid $mg-color-neutral-400;
78
+ color: $mg-color-neutral-400;
79
+
80
+ &::placeholder {
81
+ color: $mg-color-neutral-400;
82
+ }
83
+ }
84
+
85
+ &.error {
86
+ border: 2px solid $mg-color-red-900;
87
+ }
88
+ }
89
+
90
+ input[type="date"] {
91
+ background-color: $mg-color-white;
92
+ color: $mg-color-neutral-500;
93
+ }
94
+
95
+ .help {
96
+ &.disabled {
97
+ color: $mg-color-neutral-400;
98
+ }
99
+ }
100
+
101
+ textarea {
102
+ height: auto;
103
+ max-width: 100%;
104
+ resize: vertical;
105
+ }
106
+
107
+ input[type="date"]::-webkit-calendar-picker-indicator {
108
+ appearance: none;
109
+ left: 3px;
110
+ opacity: 0;
111
+ position: absolute;
112
+ }
113
+
114
+ [dir="rtl"] {
115
+ input[type="text"],
116
+ input[type="number"],
117
+ input[type="email"],
118
+ input[type="password"],
119
+ input[type="search"],
120
+ input[type="tel"],
121
+ input[type="date"],
122
+ textarea {
123
+ @media (hover: none) and (pointer: coarse) {
124
+ input[type="date"] {
125
+ padding-right: $mg-spacing-100;
126
+ }
127
+ }
128
+ }
129
+
130
+ input[type="date"]::-webkit-calendar-picker-indicator {
131
+ left: inherit;
132
+ position: absolute;
133
+ right: 27px;
134
+ }
135
+
136
+ input::-webkit-date-and-time-value {
137
+ margin-right: 0;
138
+ text-align: right;
139
+ }
140
+ }
141
+
142
+ :lang(ar) {
143
+ input[type="text"],
144
+ input[type="number"],
145
+ input[type="email"],
146
+ input[type="password"],
147
+ input[type="search"],
148
+ input[type="tel"],
149
+ input[type="date"],
150
+ textarea {
151
+ font-family: $mg-font-family-arabic-body;
152
+ }
153
+ }
@@ -69,7 +69,7 @@
69
69
 
70
70
  &__label {
71
71
  display: inline-block;
72
- font-size: $mg-font-label;
72
+ font-size: $mg-font-tag;
73
73
  font-weight: bold;
74
74
  margin-right: $mg-spacing-25;
75
75
  padding: $mg-spacing-25 0;
@@ -12,16 +12,7 @@
12
12
  width: 100%;
13
13
  border: 1px solid rgb(0 0 0 / 0.3);
14
14
 
15
- // Responsive embed for iframes inside highlight-box
16
- &:has(iframe) {
17
- position: relative;
18
- max-width: 100%;
19
- aspect-ratio: 16 / 9;
20
- height: 100%;
21
- }
22
15
  iframe {
23
- width: 100%;
24
- height: 100%;
25
16
  border: 0;
26
17
  display: block;
27
18
  max-width: 100%;
@@ -11,9 +11,13 @@
11
11
  align-items: flex-start;
12
12
  z-index: 10;
13
13
  padding: 0;
14
- max-width: $mg-breakpoint-desktop; // mg-mega-toolbar does not play well with mg-container
14
+ max-width: $mg-breakpoint-desktop;
15
15
  margin: 0 auto;
16
16
 
17
+ @media screen and (min-width: $mg-breakpoint-desktop-wide) {
18
+ max-width: $mg-breakpoint-desktop-wide;
19
+ }
20
+
17
21
  // these are note "mobile first" as they seem to cause a glitch with firefox and .mg-container-full-width
18
22
  @media screen and (max-width: $mg-breakpoint-tablet) {
19
23
  padding-left: 4rem; // space for the icon button
@@ -334,7 +338,7 @@
334
338
  li {
335
339
  animation: mg-mega-item-slide-in 250ms ease-out both;
336
340
 
337
- @for $i from 1 through 12 {
341
+ @for $i from 1 through 25 {
338
342
  &:nth-child(#{$i}) {
339
343
  animation-delay: #{($i - 1) * 30}ms;
340
344
  }
@@ -130,7 +130,7 @@
130
130
 
131
131
  .mg-page-header__label {
132
132
  display: inline-block;
133
- font-size: $mg-font-label;
133
+ font-size: $mg-font-tag;
134
134
  font-weight: bold;
135
135
  margin-right: $mg-spacing-25;
136
136
  padding: $mg-spacing-25 0;
@@ -689,10 +689,22 @@ $search-input-padding-x: $mg-spacing-250;
689
689
  // Result teaser HTML overrides
690
690
  // ========================================
691
691
 
692
+ // Type badge and site name badges injected before the title in teaser results
693
+ .mg-search__result-badges {
694
+ display: inline-flex;
695
+ flex-wrap: wrap;
696
+ align-items: center;
697
+ gap: $mg-spacing-50;
698
+ margin-bottom: $mg-spacing-25;
699
+ }
700
+
701
+ // Content type badge — uses the system-level .mg-tag atom.
702
+ // No additional styles needed; the class is applied in ResultItem.jsx.
703
+
692
704
  // Site name label in search results
693
705
  .mg-search__result-site-name {
694
706
  display: inline-block;
695
- margin: 0 0 $mg-spacing-25;
707
+ margin: 0;
696
708
  padding: $mg-spacing-25 $mg-spacing-50;
697
709
  font-size: $mg-font-size-200;
698
710
  color: $search-text-muted;
@@ -719,6 +731,42 @@ $search-input-padding-x: $mg-spacing-250;
719
731
  }
720
732
  }
721
733
 
734
+ // ========================================
735
+ // Teaser Field Visibility
736
+ // ========================================
737
+ // Modifier classes on the results container hide specific teaser fields
738
+ // via the visibleTeaserFields config option.
739
+ // Title (.mg-card__title) is intentionally not toggleable.
740
+ // Teaser HTML uses standard mg-card__* BEM wrapper classes added by
741
+ // Drupal teaser templates (see web-backlog#2660).
742
+
743
+ .mg-search--hide-image .mg-card__visual { display: none; }
744
+ .mg-search--hide-contentType .mg-card__tag { display: none; }
745
+ .mg-search--hide-publicationType .mg-card__publication-type { display: none; }
746
+ .mg-search--hide-date .mg-card__date { display: none; }
747
+ .mg-search--hide-siteName .mg-search__result-site-name { display: none; }
748
+ .mg-search--hide-summary .mg-card__description { display: none; }
749
+ .mg-search--hide-organization .mg-card__organization { display: none; }
750
+
751
+ // ========================================
752
+ // Card Display Mode (mg-grid layout)
753
+ // ========================================
754
+
755
+ .mg-search__results-grid {
756
+ gap: $mg-spacing-150;
757
+
758
+ // Card items within grid
759
+ > [role="listitem"] {
760
+ display: flex;
761
+ }
762
+
763
+ // Remove list-style dividers in grid/card mode
764
+ .mg-search__result {
765
+ padding-bottom: 0;
766
+ border-bottom: 0;
767
+ }
768
+ }
769
+
722
770
  // ========================================
723
771
  // Result Animations
724
772
  // Sequential fade-in and slide from left for search results.
@@ -0,0 +1,58 @@
1
+ // Responsive embed container
2
+ // Provides aspect-ratio wrapper for iframes, videos, and other embedded media.
3
+ // Default aspect ratio is 16:9. Use modifier classes for other ratios.
4
+ // Usage: <div class="mg-embed-container"><iframe ...></iframe></div>
5
+
6
+ .mg-embed-container {
7
+ position: relative;
8
+ width: 100%;
9
+ padding-bottom: 56.25%; // 16:9 fallback for older browsers
10
+ height: 0;
11
+ overflow: hidden;
12
+
13
+ @supports (aspect-ratio: 16 / 9) {
14
+ aspect-ratio: 16 / 9;
15
+ padding-bottom: 0;
16
+ height: auto;
17
+ }
18
+
19
+ iframe,
20
+ object,
21
+ embed,
22
+ video {
23
+ position: absolute;
24
+ top: 0;
25
+ left: 0;
26
+ width: 100%;
27
+ height: 100%;
28
+ border: 0;
29
+ }
30
+ }
31
+
32
+ // Aspect ratio variants (mg-embed-container only)
33
+ .mg-embed-container--4x3 {
34
+ padding-bottom: 75%; // 4:3 fallback
35
+
36
+ @supports (aspect-ratio: 4 / 3) {
37
+ aspect-ratio: 4 / 3;
38
+ padding-bottom: 0;
39
+ }
40
+ }
41
+
42
+ .mg-embed-container--1x1 {
43
+ padding-bottom: 100%; // 1:1 fallback
44
+
45
+ @supports (aspect-ratio: 1 / 1) {
46
+ aspect-ratio: 1 / 1;
47
+ padding-bottom: 0;
48
+ }
49
+ }
50
+
51
+ .mg-embed-container--21x9 {
52
+ padding-bottom: 42.857%; // 21:9 fallback
53
+
54
+ @supports (aspect-ratio: 21 / 9) {
55
+ aspect-ratio: 21 / 9;
56
+ padding-bottom: 0;
57
+ }
58
+ }
@@ -6,26 +6,17 @@
6
6
  max-height: 200px;
7
7
  max-height: var(--mg-show-more-height);
8
8
  overflow: hidden;
9
- }
10
-
11
- .mg-show-more--collapsed {
12
9
  position: relative;
13
- margin-bottom: -1rem;
14
- }
15
- .mg-show-more--collapsed:before {
16
- content: "";
17
- cursor: s-resize;
18
- display: block;
19
- position: absolute;
20
- background-image: linear-gradient(
10
+ mask-image: linear-gradient(
11
+ to bottom,
12
+ black calc(var(--mg-show-more-height) - 80px),
13
+ transparent var(--mg-show-more-height)
14
+ );
15
+ -webkit-mask-image: linear-gradient(
21
16
  to bottom,
22
- rgb(255 255 255 / 0),
23
- rgb(255 255 255 / 1)
17
+ black calc(var(--mg-show-more-height) - 80px),
18
+ transparent var(--mg-show-more-height)
24
19
  );
25
- height: 200px;
26
- width: 100%;
27
- z-index: 1;
28
- margin-top: calc(var(--mg-show-more-height) - 200px);
29
20
  }
30
21
 
31
22
  .mg-show-more--button {