@undrr/undrr-mangrove 1.8.2 → 2.0.0-alpha.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 (145) hide show
  1. package/components/BookCard.js +2 -2
  2. package/components/BookCard.js.LICENSE.txt +1 -1
  3. package/components/Breadcrumbs.js +3 -2
  4. package/components/Checkbox.js +3 -2
  5. package/components/Chips.js +3 -2
  6. package/components/CtaButton.js +3 -2
  7. package/components/EmbedContainer.js +3 -2
  8. package/components/Footer.js +2 -2
  9. package/components/Footer.js.LICENSE.txt +1 -1
  10. package/components/FormAction.js +6 -0
  11. package/components/FormAction.js.LICENSE.txt +9 -0
  12. package/components/FormErrorSummary.js +3 -2
  13. package/components/FormGroup.js +3 -2
  14. package/components/FullWidth.js +3 -2
  15. package/components/Gallery.js +2 -2
  16. package/components/Gallery.js.LICENSE.txt +1 -1
  17. package/components/Hero.js +2 -2
  18. package/components/Hero.js.LICENSE.txt +1 -1
  19. package/components/HighlightBox.js +3 -2
  20. package/components/HorizontalBookCard.js +2 -2
  21. package/components/HorizontalBookCard.js.LICENSE.txt +1 -1
  22. package/components/HorizontalCard.js +2 -2
  23. package/components/HorizontalCard.js.LICENSE.txt +1 -1
  24. package/components/IconCard.js +2 -2
  25. package/components/IconCard.js.LICENSE.txt +1 -1
  26. package/components/Loader.js +3 -2
  27. package/components/MegaMenu.js +2 -2
  28. package/components/MegaMenu.js.LICENSE.txt +1 -1
  29. package/components/PageHeader.js +3 -2
  30. package/components/Pager.js +2 -2
  31. package/components/Pager.js.LICENSE.txt +1 -1
  32. package/components/QuoteHighlight.js +3 -2
  33. package/components/Radio.js +3 -2
  34. package/components/ScrollContainer.js +3 -2
  35. package/components/Select.js +3 -2
  36. package/components/ShareButtons.js +2 -2
  37. package/components/ShareButtons.js.LICENSE.txt +1 -1
  38. package/components/ShowMore.js +3 -2
  39. package/components/StatsCard.js +2 -2
  40. package/components/StatsCard.js.LICENSE.txt +10 -0
  41. package/components/SyndicationSearchWidget.js +2 -2
  42. package/components/SyndicationSearchWidget.js.LICENSE.txt +1 -1
  43. package/components/Tab.js +3 -2
  44. package/components/TextCta.js +2 -2
  45. package/components/TextCta.js.LICENSE.txt +10 -0
  46. package/components/TextInput.js +3 -2
  47. package/components/Textarea.js +3 -2
  48. package/components/UserFeedback.js +6 -0
  49. package/components/UserFeedback.js.LICENSE.txt +9 -0
  50. package/components/VerticalCard.js +2 -2
  51. package/components/VerticalCard.js.LICENSE.txt +1 -1
  52. package/components/hydrate.js +1 -1
  53. package/css/style-all.css +422 -0
  54. package/css/style-all.css.map +1 -0
  55. package/css/style-delta.css +122 -171
  56. package/css/style-delta.css.map +1 -1
  57. package/css/style-gutenberg.css +55 -89
  58. package/css/style-gutenberg.css.map +1 -1
  59. package/css/style-irp.css +122 -161
  60. package/css/style-irp.css.map +1 -1
  61. package/css/style-mcr.css +122 -161
  62. package/css/style-mcr.css.map +1 -1
  63. package/css/style-preventionweb.css +122 -161
  64. package/css/style-preventionweb.css.map +1 -1
  65. package/css/style.css +121 -154
  66. package/css/style.css.map +1 -1
  67. package/package.json +2 -2
  68. package/scss/Atom/BaseTypography/Abbr/abbr.scss +1 -1
  69. package/scss/Atom/BaseTypography/Code/code.scss +41 -36
  70. package/scss/Atom/BaseTypography/Mark/mark.scss +2 -2
  71. package/scss/Atom/Images/AuthorImage/author-image.scss +8 -8
  72. package/scss/Atom/Images/ImageCaptionCredit/image-caption-credit.scss +9 -9
  73. package/scss/Atom/Layout/Container/container.scss +2 -4
  74. package/scss/Atom/Layout/Grid/grid.scss +15 -15
  75. package/scss/Atom/Navigation/MenuItems/menu-items.scss +10 -3
  76. package/scss/Atom/ReachElement/Details/details.scss +44 -39
  77. package/scss/Atom/Table/table.scss +22 -10
  78. package/scss/Atom/Tag/tag.scss +32 -32
  79. package/scss/Components/Boilerplate/boilerplate.scss +7 -7
  80. package/scss/Components/Breadcrumbs/breadcrumbs.scss +9 -9
  81. package/scss/Components/Buttons/Chips/chips.scss +63 -23
  82. package/scss/Components/Buttons/CtaButton/cta-button.scss +142 -20
  83. package/scss/Components/Buttons/ShareButtons/share-buttons.scss +16 -16
  84. package/scss/Components/Cards/Card/card.scss +77 -50
  85. package/scss/Components/Cards/StatsCard/stats-card.scss +32 -34
  86. package/scss/Components/CookieConsentBanner/cookie-consent-banner.scss +75 -74
  87. package/scss/Components/ErrorPages/error-pages.scss +9 -9
  88. package/scss/Components/Footer/footer.scss +12 -12
  89. package/scss/Components/Forms/FormAction/form-action.scss +50 -0
  90. package/scss/Components/Forms/FormGroup/form-group.scss +18 -7
  91. package/scss/Components/Forms/Select/select.scss +1 -1
  92. package/scss/Components/Forms/TextInput/text-input.scss +1 -1
  93. package/scss/Components/Forms/_form-base.scss +68 -61
  94. package/scss/Components/Gallery/gallery.scss +71 -70
  95. package/scss/Components/Hero/hero.scss +241 -74
  96. package/scss/Components/HighlightBox/highlight-box.scss +3 -3
  97. package/scss/Components/MegaMenu/mega-menu.scss +73 -76
  98. package/scss/Components/OnThisPageNav/on-this-page-nav.scss +36 -37
  99. package/scss/Components/PageHeader/page-header.scss +7 -7
  100. package/scss/Components/Pager/pager.scss +85 -62
  101. package/scss/Components/PreviewAccess/preview-access.scss +35 -35
  102. package/scss/Components/QuoteHighlight/quote-highlight.scss +32 -32
  103. package/scss/Components/ScrollContainer/scroll-container.scss +52 -32
  104. package/scss/Components/Snackbar/snackbar.scss +24 -31
  105. package/scss/Components/SyndicationSearchWidget/syndication-search-widget.scss +147 -139
  106. package/scss/Components/Tab/tab.scss +215 -34
  107. package/scss/Components/TableOfContents/table-of-contents.scss +6 -6
  108. package/scss/Components/TextCta/text-cta.scss +69 -23
  109. package/scss/Components/UserFeedback/user-feedback.scss +69 -0
  110. package/scss/Molecules/ImageCaption/image-caption.scss +16 -16
  111. package/scss/Molecules/SectionHeader/section-header.scss +1 -1
  112. package/scss/Utilities/FullWidth/full-width.scss +1 -1
  113. package/scss/Utilities/Loader/loader.scss +4 -4
  114. package/scss/assets/scss/_components.scss +3 -2
  115. package/scss/assets/scss/_foundational.scss +44 -26
  116. package/scss/assets/scss/_mixins.scss +34 -1
  117. package/scss/assets/scss/_theme-delta.scss +68 -0
  118. package/scss/assets/scss/_theme-irp.scss +39 -0
  119. package/scss/assets/scss/_theme-mcr.scss +56 -0
  120. package/scss/assets/scss/_theme-preventionweb.scss +37 -0
  121. package/scss/assets/scss/_utility.scss +112 -112
  122. package/scss/assets/scss/_variables.scss +358 -354
  123. package/scss/assets/scss/style-all.scss +19 -0
  124. package/scss/assets/scss/style-delta.scss +1 -1
  125. package/scss/assets/scss/style-irp.scss +1 -1
  126. package/scss/assets/scss/style-mcr.scss +1 -1
  127. package/scss/assets/scss/style-preventionweb.scss +1 -1
  128. package/css/style-irp-legacy.css +0 -476
  129. package/css/style-irp-legacy.css.map +0 -1
  130. package/css/style-legacy.css +0 -469
  131. package/css/style-legacy.css.map +0 -1
  132. package/css/style-mcr-legacy.css +0 -476
  133. package/css/style-mcr-legacy.css.map +0 -1
  134. package/css/style-preventionweb-legacy.css +0 -476
  135. package/css/style-preventionweb-legacy.css.map +0 -1
  136. package/scss/Components/Forms/_form-legacy.scss +0 -152
  137. package/scss/Components/Pagination/pagination.scss +0 -112
  138. package/scss/assets/scss/_variables-delta.scss +0 -110
  139. package/scss/assets/scss/_variables-irp.scss +0 -50
  140. package/scss/assets/scss/_variables-mcr.scss +0 -65
  141. package/scss/assets/scss/_variables-preventionweb.scss +0 -48
  142. package/scss/assets/scss/style-irp-legacy.scss +0 -20
  143. package/scss/assets/scss/style-legacy.scss +0 -20
  144. package/scss/assets/scss/style-mcr-legacy.scss +0 -20
  145. package/scss/assets/scss/style-preventionweb-legacy.scss +0 -20
@@ -1,5 +1,5 @@
1
1
  .mg-tabs__list {
2
- background: $mg-color-tabbar-background;
2
+ background: var(--mg-color-tabbar-background);
3
3
  width: 100%;
4
4
  margin: 0;
5
5
  display: -webkit-inline-box;
@@ -15,11 +15,11 @@
15
15
  content: " ";
16
16
  width: 100%;
17
17
  height: 1px;
18
- top: -$mg-spacing-25;
19
- margin-bottom: -$mg-spacing-25;
18
+ top: calc(-1 * var(--mg-spacing-25));
19
+ margin-bottom: calc(-1 * var(--mg-spacing-25));
20
20
  position: relative;
21
21
  z-index: 1; // border indicator floats above the tab list background — local to tabbar
22
- border-bottom: $mg-spacing-25 solid $mg-color-tab-border;
22
+ border-bottom: var(--mg-spacing-25) solid var(--mg-color-tab-border);
23
23
  }
24
24
  }
25
25
  }
@@ -56,11 +56,11 @@
56
56
 
57
57
  .mg-tabs__item {
58
58
  width: 100%; // Make each tab take full width
59
- margin-bottom: $mg-spacing-25; // Add spacing between tabs
59
+ margin-bottom: var(--mg-spacing-25); // Add spacing between tabs
60
60
  }
61
61
 
62
62
  .mg-tabs__section {
63
- padding: $mg-spacing-150;
63
+ padding: var(--mg-spacing-150);
64
64
  }
65
65
 
66
66
  .mg-tabs__link {
@@ -74,7 +74,7 @@
74
74
 
75
75
  &:before {
76
76
  position: absolute;
77
- right: $mg-spacing-150;
77
+ right: var(--mg-spacing-150);
78
78
  top: 50%;
79
79
  border-style: solid;
80
80
  border-width: 0.2em 0.2em 0 0;
@@ -148,70 +148,251 @@
148
148
 
149
149
  .mg-tabs__link {
150
150
  border: none;
151
- border-radius: $mg-radius-tab;
152
- background: $mg-color-tab-background--inactive;
153
- color: $mg-color-text-tab;
151
+ border-radius: var(--mg-radius-tab);
152
+ background: var(--mg-color-tab-background--inactive);
153
+ color: var(--mg-color-text-tab);
154
154
  font-family: $mg-font-family-headings;
155
155
  font-size: $mg-font-size-400;
156
156
  font-weight: 600;
157
157
  line-height: 1.421;
158
158
  margin: 0;
159
159
  display: block;
160
- padding: $mg-padding-tab;
160
+ padding: var(--mg-padding-tab);
161
161
  position: relative;
162
162
  text-decoration: none;
163
163
  }
164
164
 
165
165
  .mg-tabs__link:hover,
166
166
  .mg-tabs__link:focus-visible {
167
- background: $mg-color-tab-background--hover;
168
- border-bottom: $mg-spacing-25 solid $mg-color-tab-border--hover;
169
- color: $mg-color-text-tab--hover;
167
+ background: var(--mg-color-tab-background--hover);
168
+ border-bottom: var(--mg-spacing-25) solid var(--mg-color-tab-border--hover);
169
+ color: var(--mg-color-text-tab--hover);
170
170
  z-index: 2; // border-overlap micro-fix within tabbar stacking context
171
171
  text-decoration: none;
172
172
  }
173
173
 
174
174
  .mg-tabs__link:focus-visible {
175
- outline: 2px solid $mg-color-interactive;
175
+ outline: 2px solid rgb(var(--mg-color-interactive));
176
176
  outline-offset: -2px;
177
177
  }
178
178
 
179
179
  .mg-tabs__link.is-active {
180
- color: $mg-color-text-tab-active;
181
- background-color: $mg-color-tab-background;
180
+ color: var(--mg-color-text-tab-active);
181
+ background-color: var(--mg-color-tab-background);
182
182
  text-shadow: none;
183
- border-bottom: $mg-spacing-25 solid $mg-color-tab-border--active;
183
+ border-bottom: var(--mg-spacing-25) solid var(--mg-color-tab-border--active);
184
184
  }
185
185
 
186
186
  .mg-tabs__link.is-active:hover,
187
187
  .mg-tabs__link.is-active:focus-visible {
188
- background: $mg-color-tab-background;
189
- border-bottom: $mg-spacing-25 solid $mg-color-tab-border--hover;
190
- color: $mg-color-text-tab-active;
188
+ background: var(--mg-color-tab-background);
189
+ border-bottom: var(--mg-spacing-25) solid var(--mg-color-tab-border--hover);
190
+ color: var(--mg-color-text-tab-active);
191
191
  }
192
192
 
193
193
  .mg-tabs__section {
194
- background-color: $mg-color-tab-section-background;
195
- box-shadow: $mg-box-shadow-tab-section;
196
- padding: $mg-padding-tab-section;
197
- border-radius: 0 0 $mg-radius-tab-section $mg-radius-tab-section;
194
+ background-color: var(--mg-color-tab-section-background);
195
+ box-shadow: var(--mg-box-shadow-tab-section);
196
+ padding: var(--mg-padding-tab-section);
197
+ border-radius: 0 0 var(--mg-radius-tab-section) var(--mg-radius-tab-section);
198
198
 
199
199
  // ensure tab content is available to interaction
200
200
  // https://gitlab.com/undrr/web-backlog/-/issues/1929
201
201
  position: relative;
202
202
  }
203
203
 
204
+ // Modern tab variants: horizontal tabs behave like a navigation rail, while
205
+ // stacked tabs behave like disclosure rows. These selectors intentionally sit
206
+ // after the legacy shared styles so existing markup and JS contracts remain
207
+ // unchanged while the current variants receive the refreshed visual language.
208
+ .mg-tabs--horizontal {
209
+ .mg-tabs__list {
210
+ background: transparent;
211
+ box-shadow: inset 0 -1px 0 rgb(var(--mg-color-neutral-600) / 0.24);
212
+
213
+ &::after {
214
+ display: none;
215
+ }
216
+ }
217
+
218
+ .mg-tabs__link {
219
+ align-items: center;
220
+ background: transparent;
221
+ border: 0;
222
+ border-radius: 0;
223
+ box-shadow: inset 0 -3px 0 transparent;
224
+ color: rgb(var(--mg-color-text));
225
+ display: flex;
226
+ min-height: mg-rem(44);
227
+ padding: var(--mg-spacing-150) var(--mg-spacing-200);
228
+ text-align: start;
229
+
230
+ @media (prefers-reduced-motion: no-preference) {
231
+ transition:
232
+ background-color var(--mg-motion-duration-fast) var(--mg-motion-easing-standard),
233
+ box-shadow var(--mg-motion-duration-fast) var(--mg-motion-easing-standard),
234
+ color var(--mg-motion-duration-fast) var(--mg-motion-easing-standard);
235
+ }
236
+
237
+ &:hover {
238
+ background: rgb(var(--mg-color-interactive) / 0.06);
239
+ border: 0;
240
+ box-shadow: inset 0 -3px 0 rgb(var(--mg-color-interactive) / 0.45);
241
+ color: rgb(var(--mg-color-interactive-active));
242
+ }
243
+
244
+ &:focus-visible {
245
+ @include mg-focus-ring;
246
+
247
+ background: rgb(var(--mg-color-interactive) / 0.06);
248
+ border: 0;
249
+ }
250
+
251
+ &.is-active,
252
+ &.is-active:hover,
253
+ &.is-active:focus-visible {
254
+ background: transparent;
255
+ border: 0;
256
+ box-shadow: inset 0 -3px 0 rgb(var(--mg-color-interactive));
257
+ color: rgb(var(--mg-color-interactive));
258
+ }
259
+ }
260
+
261
+ @media (min-width: $mg-breakpoint-mobile) {
262
+ .mg-tabs__list {
263
+ display: grid;
264
+ min-width: 0;
265
+ overflow-x: auto;
266
+ scrollbar-width: thin;
267
+ }
268
+
269
+ .mg-tabs__item {
270
+ display: flex;
271
+ }
272
+
273
+ .mg-tabs-content {
274
+ padding-top: var(--mg-spacing-100);
275
+ }
276
+ }
277
+ }
278
+
279
+ @mixin modern-stacked-tabs {
280
+ .mg-tabs__list {
281
+ background: transparent;
282
+
283
+ &::after {
284
+ display: none;
285
+ }
286
+ }
287
+
288
+ .mg-tabs__item {
289
+ box-shadow: inset 0 -1px 0 rgb(var(--mg-color-neutral-600) / 0.24);
290
+ margin-bottom: 0;
291
+ }
292
+
293
+ .mg-tabs__link {
294
+ background: rgb(var(--mg-color-neutral-0));
295
+ border: 0;
296
+ border-radius: 0;
297
+ color: rgb(var(--mg-color-text));
298
+ min-height: mg-rem(48);
299
+ padding-block: var(--mg-spacing-150);
300
+ padding-inline: var(--mg-spacing-200) mg-rem(44);
301
+
302
+ @media (prefers-reduced-motion: no-preference) {
303
+ transition:
304
+ background-color var(--mg-motion-duration-fast) var(--mg-motion-easing-standard),
305
+ color var(--mg-motion-duration-fast) var(--mg-motion-easing-standard);
306
+ }
307
+
308
+ &:hover,
309
+ &:focus-visible,
310
+ &.is-active,
311
+ &.mg-tabs__stacked--open {
312
+ background: rgb(var(--mg-color-interactive) / 0.06);
313
+ border: 0;
314
+ color: rgb(var(--mg-color-interactive-active));
315
+ }
316
+
317
+ &:focus-visible {
318
+ @include mg-focus-ring;
319
+ }
320
+
321
+ &::before {
322
+ align-items: center;
323
+ background: rgb(var(--mg-color-interactive) / 0.06);
324
+ border: 0;
325
+ border-radius: 50%;
326
+ content: "+";
327
+ display: flex;
328
+ font-family: $mg-font-family;
329
+ font-size: $mg-font-size-400;
330
+ font-weight: 400;
331
+ height: mg-rem(30);
332
+ justify-content: center;
333
+ right: var(--mg-spacing-100);
334
+ top: 50%;
335
+ transform: translateY(-50%);
336
+ width: mg-rem(30);
337
+
338
+ @media (prefers-reduced-motion: no-preference) {
339
+ transition:
340
+ background-color var(--mg-motion-duration-fast) var(--mg-motion-easing-standard),
341
+ scale var(--mg-motion-duration-fast) var(--mg-motion-easing-standard);
342
+ }
343
+ }
344
+
345
+ &.mg-tabs__stacked--open::before {
346
+ content: "−";
347
+ top: 50%;
348
+ transform: translateY(-50%);
349
+ }
350
+
351
+ &:hover::before {
352
+ background: rgb(var(--mg-color-interactive) / 0.12);
353
+ }
354
+
355
+ &:active::before {
356
+ scale: 0.96;
357
+ }
358
+ }
359
+
360
+ .mg-tabs__section {
361
+ background: rgb(var(--mg-color-neutral-0));
362
+ border-radius: 0;
363
+ box-shadow: none;
364
+ padding: var(--mg-spacing-150) var(--mg-spacing-200) var(--mg-spacing-200);
365
+ text-wrap: pretty;
366
+
367
+ > :last-child {
368
+ margin-bottom: 0;
369
+ }
370
+ }
371
+ }
372
+
373
+ // The explicit stacked variant remains a disclosure pattern at every width.
374
+ .mg-tabs--stacked {
375
+ @include modern-stacked-tabs;
376
+ }
377
+
378
+ // Horizontal tabs collapse to the same disclosure pattern on small screens.
379
+ .mg-tabs--horizontal {
380
+ @media (max-width: $mg-breakpoint-mobile) {
381
+ @include modern-stacked-tabs;
382
+ }
383
+ }
384
+
204
385
  [dir="rtl"] {
205
386
  .mg-tabs {
206
387
  > ul {
207
388
  padding-right: 0;
208
389
 
209
390
  @include devicebreak(medium) {
210
- padding-right: $mg-spacing-300;
391
+ padding-right: var(--mg-spacing-300);
211
392
  }
212
393
 
213
394
  li {
214
- margin-left: $mg-spacing-100;
395
+ margin-left: var(--mg-spacing-100);
215
396
  margin-right: 0;
216
397
  padding-right: 0;
217
398
  }
@@ -220,24 +401,24 @@
220
401
 
221
402
  // Flip stacked chevron for RTL
222
403
  .mg-tabs--stacked .mg-tabs__link {
223
- padding-right: $mg-padding-tab;
404
+ padding-right: var(--mg-spacing-200);
224
405
  padding-left: mg-rem(40);
225
406
 
226
407
  &:before {
227
408
  right: auto;
228
- left: $mg-spacing-150;
409
+ left: var(--mg-spacing-100);
229
410
  }
230
411
  }
231
412
 
232
413
  // Horizontal tabs only have chevrons at mobile breakpoint
233
414
  @media (max-width: $mg-breakpoint-mobile) {
234
415
  .mg-tabs--horizontal .mg-tabs__link {
235
- padding-right: $mg-padding-tab;
416
+ padding-right: var(--mg-spacing-200);
236
417
  padding-left: mg-rem(40);
237
418
 
238
419
  &:before {
239
420
  right: auto;
240
- left: $mg-spacing-150;
421
+ left: var(--mg-spacing-100);
241
422
  }
242
423
  }
243
424
  }
@@ -252,7 +433,7 @@
252
433
 
253
434
  // Filter input for stacked tabs
254
435
  .mg-tabs__filter {
255
- margin-bottom: $mg-spacing-150;
436
+ margin-bottom: var(--mg-spacing-150);
256
437
  }
257
438
 
258
439
  .mg-tabs__filter-input {
@@ -265,8 +446,8 @@
265
446
  }
266
447
 
267
448
  .mg-tabs__no-results {
268
- padding: $mg-spacing-150;
269
- color: $mg-color-text-tab-no-results;
449
+ padding: var(--mg-spacing-150);
450
+ color: var(--mg-color-text-tab-no-results);
270
451
  font-style: italic;
271
452
  }
272
453
 
@@ -1,17 +1,17 @@
1
1
  .mg-table-of-contents {
2
- // background-color: $mg-color-neutral-50;
3
- // padding: $mg-spacing-150;
4
- // margin-bottom: $mg-spacing-50;
2
+ // background-color: rgb(var(--mg-color-neutral-50));
3
+ // padding: var(--mg-spacing-150);
4
+ // margin-bottom: var(--mg-spacing-50);
5
5
  // width: 400px;
6
6
  // max-width: 100%;
7
7
 
8
8
  li {
9
- margin-left: $mg-spacing-50;
10
- margin-bottom: $mg-spacing-50;
9
+ margin-left: var(--mg-spacing-50);
10
+ margin-bottom: var(--mg-spacing-50);
11
11
  }
12
12
  }
13
13
 
14
14
  // .mg-on-this-page-header {
15
15
  // font-size: $mg-font-size-400;
16
- // margin-bottom: $mg-spacing-100;
16
+ // margin-bottom: var(--mg-spacing-100);
17
17
  // }
@@ -1,7 +1,7 @@
1
1
  /* CTA banner start */
2
2
 
3
3
  .mg-cta {
4
- padding: $mg-cta-padding;
4
+ padding: var(--mg-cta-padding);
5
5
  background-color: var(--mg-cta-bg, initial);
6
6
 
7
7
  &__inner {
@@ -12,18 +12,28 @@
12
12
  max-width: 800px;
13
13
  }
14
14
 
15
- &__headline {
16
- color: $mg-color-white;
15
+ .mg-cta__eyebrow {
16
+ color: rgb(var(--mg-color-neutral-0));
17
+ font-size: mg-rem(12);
17
18
  font-weight: 700;
18
- margin-bottom: $mg-spacing-100;
19
+ letter-spacing: 0.09em;
20
+ margin: 0 0 var(--mg-spacing-75);
21
+ text-transform: uppercase;
19
22
  }
20
23
 
21
- &__text {
22
- color: rgba($mg-color-white, 0.9);
23
- margin-bottom: $mg-spacing-150;
24
+ .mg-cta__headline {
25
+ color: rgb(var(--mg-color-white));
26
+ font-weight: 700;
27
+ margin-bottom: var(--mg-spacing-100);
28
+ }
29
+
30
+ .mg-cta__text {
31
+ color: rgb(var(--mg-color-neutral-0) / 0.9);
32
+ margin-bottom: var(--mg-spacing-150);
24
33
 
25
34
  p {
26
- margin-bottom: $mg-spacing-75;
35
+ color: inherit;
36
+ margin-bottom: var(--mg-spacing-75);
27
37
 
28
38
  &:last-child {
29
39
  margin-bottom: 0;
@@ -31,7 +41,7 @@
31
41
  }
32
42
 
33
43
  a {
34
- color: $mg-color-white;
44
+ color: rgb(var(--mg-color-white));
35
45
  text-decoration: underline;
36
46
  }
37
47
  }
@@ -39,8 +49,8 @@
39
49
  &__actions {
40
50
  display: flex;
41
51
  flex-wrap: wrap;
42
- gap: $mg-spacing-100;
43
- margin-top: $mg-spacing-150;
52
+ gap: var(--mg-spacing-100);
53
+ margin-top: var(--mg-spacing-150);
44
54
  }
45
55
 
46
56
  &__image {
@@ -64,13 +74,34 @@
64
74
  }
65
75
  }
66
76
 
77
+ // Horizontal text/action composition for wide promotional banners.
78
+ &--inline {
79
+ .mg-cta__body {
80
+ max-width: none;
81
+ }
82
+
83
+ @include devicebreak(medium) {
84
+ .mg-cta__body {
85
+ align-items: center;
86
+ display: grid;
87
+ gap: var(--mg-spacing-300);
88
+ grid-template-columns: minmax(0, 1fr) auto;
89
+ }
90
+
91
+ .mg-cta__actions {
92
+ justify-content: flex-end;
93
+ margin-top: 0;
94
+ }
95
+ }
96
+ }
97
+
67
98
  // Side-by-side layout when image is present
68
99
  &--with-image {
69
100
  .mg-cta__inner {
70
101
  display: grid;
71
102
  grid-template-columns: 1fr;
72
103
  align-items: center;
73
- gap: $mg-spacing-200;
104
+ gap: var(--mg-spacing-200);
74
105
  }
75
106
 
76
107
  .mg-cta__body {
@@ -95,43 +126,58 @@
95
126
 
96
127
  // Color variants — same system as Hero
97
128
  &--primary {
98
- background-color: $mg-color-hero;
129
+ background-color: rgb(var(--mg-color-hero));
99
130
  }
100
131
 
101
132
  &--secondary {
102
- background-color: $mg-color-hero--secondary;
133
+ background-color: rgb(var(--mg-color-hero--secondary));
103
134
  }
104
135
 
105
136
  &--tertiary {
106
- background-color: $mg-color-hero--tertiary;
137
+ background-color: rgb(var(--mg-color-hero--tertiary));
107
138
  }
108
139
 
109
140
  &--quaternary {
110
- background-color: $mg-color-hero--quaternary;
141
+ background-color: rgb(var(--mg-color-hero--quaternary));
111
142
  }
112
143
 
113
144
  // Button overrides for dark backgrounds (matches Hero pattern)
114
145
  a.mg-button,
115
146
  a.mg-button:hover,
116
147
  a.mg-button:visited {
117
- color: $mg-color-hero;
148
+ color: rgb(var(--mg-color-hero));
118
149
  }
119
150
 
120
151
  a.mg-button-primary {
121
- background-color: $mg-color-neutral-0;
152
+ background-color: rgb(var(--mg-color-neutral-0));
122
153
  }
123
154
 
124
155
  a.mg-button-secondary,
125
156
  a.mg-button-secondary:hover,
126
157
  a.mg-button-secondary:visited {
127
- background-color: $mg-color-hero-button-secondary-background;
128
- color: $mg-color-hero-button-secondary-color;
129
- border-color: $mg-border-color-hero-button-secondary;
158
+ background-color: var(--mg-color-hero-button-secondary-background);
159
+ color: rgb(var(--mg-color-hero-button-secondary-color));
160
+ border-color: rgb(var(--mg-border-color-hero-button-secondary));
161
+ }
162
+
163
+ a.mg-button.mg-button-outline,
164
+ a.mg-button.mg-button-outline:hover,
165
+ a.mg-button.mg-button-outline:visited {
166
+ background-color: transparent;
167
+ border-color: rgb(var(--mg-color-neutral-0) / 0.72);
168
+ border-style: solid;
169
+ border-width: var(--mg-border-width-button, 1px);
170
+ color: rgb(var(--mg-color-neutral-0));
171
+ }
172
+
173
+ a.mg-button.mg-button-outline:hover {
174
+ background-color: rgb(var(--mg-color-neutral-0) / 0.12);
175
+ border-color: rgb(var(--mg-color-neutral-0));
130
176
  }
131
177
 
132
178
  a.mg-button:focus-visible {
133
- box-shadow: 0 0 0 2px $mg-color-neutral-0;
134
- outline: 2px solid $mg-color-neutral-0;
179
+ box-shadow: 0 0 0 2px rgb(var(--mg-color-neutral-0));
180
+ outline: 2px solid rgb(var(--mg-color-neutral-0));
135
181
  outline-offset: 2px;
136
182
  }
137
183
  }
@@ -0,0 +1,69 @@
1
+ .mg-user-feedback {
2
+ align-items: center;
3
+ box-sizing: border-box;
4
+ min-block-size: mg-rem(72);
5
+ padding-block: var(--mg-spacing-100);
6
+ }
7
+
8
+ .mg-user-feedback__prompt,
9
+ .mg-user-feedback__actions {
10
+ align-items: center;
11
+ display: flex;
12
+ flex-wrap: wrap;
13
+ }
14
+
15
+ .mg-user-feedback__prompt {
16
+ gap: var(--mg-spacing-100) var(--mg-spacing-150);
17
+ }
18
+
19
+ .mg-user-feedback__actions {
20
+ gap: var(--mg-spacing-100);
21
+ }
22
+
23
+ .mg-user-feedback__actions .mg-button {
24
+ min-block-size: mg-rem(40);
25
+ }
26
+
27
+ .mg-user-feedback__question,
28
+ .mg-user-feedback__confirmation {
29
+ margin: 0;
30
+ }
31
+
32
+ .mg-user-feedback__question {
33
+ font-family: $mg-font-family;
34
+ font-size: $mg-font-size-250;
35
+ font-weight: 700;
36
+ line-height: 1.4;
37
+ }
38
+
39
+ .mg-user-feedback__issue {
40
+ justify-self: start;
41
+ text-align: start;
42
+ }
43
+
44
+ .mg-user-feedback__confirmation {
45
+ grid-column: 1 / -1;
46
+ }
47
+
48
+ .mg-user-feedback__confirmation:focus {
49
+ outline: 0;
50
+ }
51
+
52
+ .mg-user-feedback__confirmation:focus-visible {
53
+ border-radius: var(--mg-radius-button);
54
+ box-shadow:
55
+ 0 0 0 var(--mg-focus-ring-offset) rgb(var(--mg-color-neutral-0)),
56
+ 0 0 0 calc(var(--mg-focus-ring-offset) + var(--mg-focus-ring-width))
57
+ rgb(var(--mg-color-focus-ring));
58
+ }
59
+
60
+ :lang(ar) .mg-user-feedback__question {
61
+ font-family: $mg-font-family-arabic-body;
62
+ }
63
+
64
+ @media (min-width: $mg-breakpoint-tablet) {
65
+ .mg-user-feedback__issue {
66
+ justify-self: end;
67
+ text-align: end;
68
+ }
69
+ }