@undrr/undrr-mangrove 1.4.0 → 1.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 (101) hide show
  1. package/README.md +5 -8
  2. package/components/BarChart.js +1 -1
  3. package/components/BookCard.js +2 -2
  4. package/components/Breadcrumbs.js +2 -2
  5. package/components/Checkbox.js +1 -1
  6. package/components/Chips.js +1 -1
  7. package/components/CtaButton.js +2 -2
  8. package/components/EmbedContainer.js +1 -1
  9. package/components/Fetcher.js +1 -1
  10. package/components/Footer.js +1 -1
  11. package/components/FormErrorSummary.js +1 -1
  12. package/components/FormGroup.js +1 -1
  13. package/components/FullWidth.js +1 -1
  14. package/components/Gallery.js +1 -1
  15. package/components/Hero.js +2 -2
  16. package/components/HighlightBox.js +1 -1
  17. package/components/HorizontalBookCard.js +2 -2
  18. package/components/HorizontalCard.js +2 -2
  19. package/components/IconCard.js +2 -2
  20. package/components/Loader.js +1 -1
  21. package/components/MapComponent.js +1 -1
  22. package/components/MegaMenu.js +2 -2
  23. package/components/PageHeader.js +1 -1
  24. package/components/Pager.js +1 -1
  25. package/components/QuoteHighlight.js +1 -1
  26. package/components/Radio.js +1 -1
  27. package/components/ScrollContainer.js +1 -1
  28. package/components/Select.js +1 -1
  29. package/components/ShareButtons.js +2 -2
  30. package/components/ShowMore.js +2 -2
  31. package/components/StatsCard.js +1 -1
  32. package/components/SyndicationSearchWidget.js +2 -2
  33. package/components/Tab.js +2 -2
  34. package/components/TextCta.js +1 -1
  35. package/components/TextInput.js +1 -1
  36. package/components/Textarea.js +1 -1
  37. package/components/VerticalCard.js +2 -2
  38. package/components/hydrate.js +1 -1
  39. package/css/style-delta.css +15 -12
  40. package/css/style-delta.css.map +1 -1
  41. package/css/style-gutenberg.css +6 -3
  42. package/css/style-gutenberg.css.map +1 -1
  43. package/css/style-irp-legacy.css +14 -11
  44. package/css/style-irp-legacy.css.map +1 -1
  45. package/css/style-irp.css +14 -11
  46. package/css/style-irp.css.map +1 -1
  47. package/css/style-legacy.css +14 -11
  48. package/css/style-legacy.css.map +1 -1
  49. package/css/style-mcr-legacy.css +14 -11
  50. package/css/style-mcr-legacy.css.map +1 -1
  51. package/css/style-mcr.css +14 -11
  52. package/css/style-mcr.css.map +1 -1
  53. package/css/style-preventionweb-legacy.css +14 -11
  54. package/css/style-preventionweb-legacy.css.map +1 -1
  55. package/css/style-preventionweb.css +14 -11
  56. package/css/style-preventionweb.css.map +1 -1
  57. package/css/style.css +14 -11
  58. package/css/style.css.map +1 -1
  59. package/error-pages/401.html +1 -1
  60. package/error-pages/403.html +1 -1
  61. package/error-pages/404.html +1 -1
  62. package/error-pages/429.html +1 -1
  63. package/error-pages/500.html +1 -1
  64. package/error-pages/502.html +1 -1
  65. package/error-pages/503.html +1 -1
  66. package/error-pages/504.html +1 -1
  67. package/error-pages/5xx.html +1 -1
  68. package/error-pages/challenge.html +1 -1
  69. package/error-pages/managed-challenge.html +1 -1
  70. package/js/README.md +57 -0
  71. package/js/__tests__/show-more.test.js +76 -0
  72. package/js/__tests__/table-of-contents.test.js +198 -0
  73. package/js/on-this-page-nav.js +571 -0
  74. package/js/show-more.js +24 -3
  75. package/js/table-of-contents.js +168 -0
  76. package/js/tabs.js +18 -2
  77. package/package.json +1 -1
  78. package/scss/Atom/Icons/_icon-definitions.scss +319 -0
  79. package/scss/Atom/Icons/icons.scss +153 -232
  80. package/scss/Atom/Table/table.scss +1 -1
  81. package/scss/Components/Breadcrumbs/breadcrumbs.scss +25 -9
  82. package/scss/Components/Buttons/CtaButton/cta-button.scss +4 -29
  83. package/scss/Components/Buttons/ShareButtons/share-buttons.scss +0 -6
  84. package/scss/Components/Cards/Card/card.scss +7 -7
  85. package/scss/Components/Cards/StatsCard/stats-card.scss +2 -2
  86. package/scss/Components/Gallery/gallery.scss +3 -3
  87. package/scss/Components/Hero/hero.scss +25 -6
  88. package/scss/Components/MegaMenu/mega-menu.scss +26 -13
  89. package/scss/Components/OnThisPageNav/on-this-page-nav.scss +206 -0
  90. package/scss/Components/PageHeader/page-header.scss +1 -1
  91. package/scss/Components/ScrollContainer/scroll-container.scss +1 -1
  92. package/scss/Components/Snackbar/snackbar.scss +1 -1
  93. package/scss/Components/SyndicationSearchWidget/syndication-search-widget.scss +4 -4
  94. package/scss/Components/Tab/tab.scss +2 -2
  95. package/scss/Components/TableOfContents/TableOfContents.scss +3 -0
  96. package/scss/Components/TextCta/text-cta.scss +16 -6
  97. package/scss/Utilities/FullWidth/full-width.scss +1 -1
  98. package/scss/Utilities/ShowMore/show-more.scss +1 -1
  99. package/scss/assets/scss/_components.scss +4 -0
  100. package/scss/assets/scss/_variables-delta.scss +6 -1
  101. package/scss/assets/scss/_variables.scss +35 -2
@@ -1,21 +1,31 @@
1
1
  // Mangrove Icon System
2
- // A custom icon font with mg-icon-* namespaced classes (preferred) and fa-* legacy support.
2
+ // Icons render via CSS mask-image backed by SVG data URIs (Lucide, OCHA, custom sources).
3
+ // The icon font is retained as a fallback for legacy fa-* selectors during migration.
3
4
  // Usage:
4
- // <span class="mg-icon mg-icon-globe"></span> (Preferred)
5
- // <span class="mg-icon fa-globe"></span> (Legacy, still supported)
6
- // Migration note: New code should use mg-icon-* classes. fa-* classes are maintained
7
- // for backward compatibility but may be deprecated in future versions.
8
- // More at: https://gitlab.com/undrr/web-backlog/-/issues/927
9
- // Font references: https://fontawesome.com/v4/assets/font-awesome/css/font-awesome.css
5
+ // <span class="mg-icon mg-icon-globe"></span> (Preferred)
6
+ // <span class="mg-icon mg-icon-globe" style="color: orange"></span>
7
+ // <span class="mg-icon fa-globe"></span> (Legacy, still supported via font)
8
+ // See: https://github.com/unisdr/undrr-mangrove/issues/906
9
+
10
+ // Icon definitions (auto-generated by scripts/icon-build.cjs).
11
+ // Must be imported before any rules to satisfy CSS @import ordering.
12
+ @import "icon-definitions";
13
+
14
+ // Font fallback (kept for fa-* selectors — removed in phase 4)
10
15
 
11
16
  @font-face {
12
17
  font-family: FontAwesome;
13
18
  font-weight: normal;
14
19
  src:
15
- url("#{$mgIconFontPath}/mangrove-icon-set.ttf") format("ttf"),
16
- url("#{$mgIconFontPath}/mangrove-icon-set.woff2") format("woff2");
20
+ url("#{$mgIconFontPath}/mangrove-icon-set.woff2") format("woff2"),
21
+ url("#{$mgIconFontPath}/mangrove-icon-set.ttf") format("truetype");
17
22
  }
18
23
 
24
+ // Font-family applies to .mg-icon unconditionally. For mask-image icons this
25
+ // is harmless — the ::before pseudo-element uses content: "" which renders
26
+ // nothing from the font. For fa-* icons this is required for glyph rendering.
27
+ // This avoids the [class*="mg-icon-"] selector which falsely matches BEM
28
+ // modifiers like mg-icon--lg.
19
29
  .mg-icon,
20
30
  .fa-before:before,
21
31
  .fab,
@@ -25,16 +35,6 @@
25
35
  font-style: normal;
26
36
  }
27
37
 
28
- .mg-icon {
29
- // Improve font rendering quality
30
- font-smooth: never;
31
- -webkit-font-smoothing: antialiased;
32
- -moz-osx-font-smoothing: grayscale;
33
- text-rendering: optimizeLegibility;
34
- transform: translateZ(0); // Force hardware acceleration
35
- backface-visibility: hidden; // Prevent blur during transforms
36
- }
37
-
38
38
  .fa-before:before {
39
39
  padding-right: 0.5em;
40
40
  }
@@ -43,231 +43,152 @@
43
43
  font-size: 2em;
44
44
  }
45
45
 
46
- // =============================================================================
47
- // Icon Definitions
48
- // Each icon has both mg-icon-* (preferred) and fa-* (legacy) selectors grouped together
49
- // =============================================================================
50
-
51
- // RSS
52
- .mg-icon-rss:before,
53
- .fa-rss:before {
54
- content: "\f09e";
55
- }
56
-
57
- // File/Document
58
- .mg-icon-file-alt:before,
59
- .fa-file-alt:before {
60
- content: "\f15c";
61
- }
62
-
63
- .mg-icon-file:before,
64
- .fa-file:before {
65
- content: "\f15b";
66
- }
46
+ // Legacy fa-* icon definitions (font-based, removed in phase 4)
47
+ // These keep the font rendering path alive for code that uses fa-* classes.
48
+ // Bare fa-* selectors (specificity 0,1,1) are safe because the base mask rule
49
+ // uses :not([class*="fa-"]) (specificity 0,2,1) and is excluded for these elements.
67
50
 
68
- // Social Media
69
- .mg-icon-facebook:before,
70
- .fa-facebook:before {
71
- content: "\f230";
72
- }
51
+ .fa-rss:before { content: "\f09e"; }
52
+ .fa-file-alt:before { content: "\f15c"; }
53
+ .fa-file:before { content: "\f15b"; }
54
+ .fa-facebook:before { content: "\f230"; }
73
55
 
74
- .mg-icon-x-social:before,
75
- .mg-icon-twitter:before,
76
56
  .fa-x-social:before,
77
- .fa-twitter:before {
78
- content: "\f099";
79
- }
80
-
81
- .mg-icon-linkedin:before,
82
- .fa-linkedin:before {
83
- content: "\f0e1";
84
- }
85
-
86
- .mg-icon-flickr:before,
87
- .fa-flickr:before {
88
- content: "\f16e";
89
- }
90
-
91
- .mg-icon-youtube:before,
92
- .fa-youtube:before {
93
- content: "\f16a";
94
- }
57
+ .fa-twitter:before { content: "\f099"; }
95
58
 
96
- // Search
97
- .mg-icon-search:before,
98
- .fa-search:before {
99
- content: "\e808";
100
- }
59
+ .fa-linkedin:before { content: "\f0e1"; }
60
+ .fa-flickr:before { content: "\f16e"; }
61
+ .fa-youtube:before { content: "\f16a"; }
62
+ .fa-search:before { content: "\e808"; }
101
63
 
102
- // Communication
103
- .mg-icon-envelope:before,
104
64
  .fa-envelope:before,
105
- .fa-envelope-o:before {
106
- content: "\e806";
107
- }
65
+ .fa-envelope-o:before { content: "\e806"; }
108
66
 
109
- // Media
110
- .mg-icon-newspaper:before,
111
- .fa-newspaper:before {
112
- content: "\f1ea";
113
- }
67
+ .fa-newspaper:before { content: "\f1ea"; }
114
68
 
115
- // Charts & Data
116
- .mg-icon-chart-bar:before,
117
- .mg-icon-bar-chart:before,
118
69
  .fa-chart-bar:before,
119
- .fa-bar-chart:before {
120
- content: "\e80B";
121
- }
122
-
123
- // Education
124
- .mg-icon-graduation-cap:before,
125
- .fa-graduation-cap:before {
126
- content: "\f19D";
127
- }
128
-
129
- // Calendar
130
- .mg-icon-calendar:before,
131
- .mg-icon-calendar-alt:before,
132
- .fa-calendar-alt:before {
133
- content: "\f133";
134
- }
70
+ .fa-bar-chart:before { content: "\e80B"; }
71
+
72
+ .fa-graduation-cap:before { content: "\f19D"; }
73
+ .fa-calendar-alt:before { content: "\f133"; }
74
+ .fa-building:before { content: "\f0F7"; }
75
+ .fa-landmark:before { content: "\f19c"; }
76
+ .fa-pen-nib:before { content: "\f0f6"; }
77
+ .fa-business-time:before { content: "\e809"; }
78
+ .fa-code-branch:before { content: "\f126"; }
79
+ .fa-life-ring:before { content: "\f1cd"; }
80
+ .fa-lightbulb:before { content: "\f0eb"; }
81
+ .fa-cubes:before { content: "\f1b3"; }
135
82
 
136
- // Buildings & Landmarks
137
- .mg-icon-building:before,
138
- .fa-building:before {
139
- content: "\f0F7";
140
- }
141
-
142
- .mg-icon-landmark:before,
143
- .fa-landmark:before {
144
- content: "\f19c";
145
- }
146
-
147
- // Writing & Editing
148
- .mg-icon-pen-nib:before,
149
- .fa-pen-nib:before {
150
- content: "\f0f6";
151
- }
152
-
153
- // Business
154
- .mg-icon-business-time:before,
155
- .fa-business-time:before {
156
- content: "\e809";
157
- }
158
-
159
- // Development
160
- .mg-icon-code-branch:before,
161
- .fa-code-branch:before {
162
- content: "\f126";
163
- }
164
-
165
- // Support
166
- .mg-icon-life-ring:before,
167
- .fa-life-ring:before {
168
- content: "\f1cd";
169
- }
170
-
171
- // Ideas
172
- .mg-icon-lightbulb:before,
173
- .fa-lightbulb:before {
174
- content: "\f0eb";
175
- }
176
-
177
- // Objects
178
- .mg-icon-cubes:before,
179
- .fa-cubes:before {
180
- content: "\f1b3";
181
- }
182
-
183
- // Sorting & Organization
184
- .mg-icon-sort-alpha-down:before,
185
- .mg-icon-tags:before,
186
83
  .fa-sort-alpha-down:before,
187
- .fa-tags:before {
188
- content: "\e800";
189
- }
190
-
191
- // Power
192
- .mg-icon-power-off:before,
193
- .fa-power-off:before {
194
- content: "\f090";
195
- }
196
-
197
- // User
198
- .mg-icon-user:before,
199
- .fa-user:before {
200
- content: "\e805";
201
- }
202
-
203
- // Actions
204
- .mg-icon-times:before,
205
- .mg-icon-close:before,
206
- .fa-times:before {
207
- content: "\f00d";
208
- }
209
-
210
- .mg-icon-link:before,
211
- .fa-link:before {
212
- content: "\e802";
213
- }
214
-
215
- .mg-icon-clone:before,
216
- .mg-icon-copy:before,
217
- .fa-clone:before {
218
- content: "\f24d";
219
- }
84
+ .fa-tags:before { content: "\e800"; }
85
+
86
+ .fa-power-off:before { content: "\f090"; }
87
+ .fa-user:before { content: "\e805"; }
88
+ .fa-times:before { content: "\f00d"; }
89
+ .fa-link:before { content: "\e802"; }
90
+ .fa-clone:before { content: "\f24d"; }
91
+ .fa-share:before { content: "\f1e0"; }
92
+ .fa-globe:before { content: "\f0ac"; }
93
+ .fa-qrcode:before { content: "\e899"; }
94
+ .fa-left:before { content: "\f177"; }
95
+ .fa-right:before { content: "\f178"; }
96
+ .fa-angle-circled-right:before { content: "\f138"; }
97
+ .fa-angle-circled-left:before { content: "\f137"; }
98
+ .fa-menu:before { content: "\f0c9"; }
99
+
100
+ // Mask-image icon system
101
+ // content: "" and background-color: currentColor live in .mg-icon:not([class*="fa-"])::before
102
+ // (specificity 0,2,1). The :not() excludes fa-* elements, so font glyphs render
103
+ // correctly without a separate background-color reset.
220
104
 
221
- .mg-icon-share:before,
222
- .fa-share:before {
223
- content: "\f1e0";
224
- }
225
-
226
- // Globe
227
- .mg-icon-globe:before,
228
- .fa-globe:before {
229
- content: "\f0ac";
230
- }
231
-
232
- // QR Code
233
- .mg-icon-qrcode:before,
234
- .fa-qrcode:before {
235
- content: "\e899";
236
- }
237
-
238
- // Arrows
239
- .mg-icon-left:before,
240
- .mg-icon-arrow-left:before,
241
- .fa-left:before {
242
- content: "\f177";
243
- }
244
-
245
- .mg-icon-right:before,
246
- .mg-icon-arrow-right:before,
247
- .fa-right:before {
248
- content: "\f178";
249
- }
250
-
251
- .mg-icon-angle-circled-right:before,
252
- .fa-angle-circled-right:before {
253
- content: "\f138";
254
- }
255
-
256
- .mg-icon-angle-circled-left:before,
257
- .fa-angle-circled-left:before {
258
- content: "\f137";
259
- }
260
-
261
- // Menu
262
- .mg-icon-menu:before,
263
- .mg-icon-hamburger:before,
264
- .fa-menu:before {
265
- content: "\f0c9";
266
- }
267
-
268
- // =============================================================================
269
- // Icon Size Modifiers
270
- // =============================================================================
105
+ .mg-icon {
106
+ vertical-align: -0.125em;
107
+ forced-color-adjust: none;
108
+ }
109
+
110
+ .mg-icon:not([class*="fa-"])::before {
111
+ display: inline-block;
112
+ content: "";
113
+ width: 1em;
114
+ height: 1em;
115
+ background-color: currentColor;
116
+
117
+ // No -webkit-mask-* prefixes: unprefixed mask-* is supported by all browsers
118
+ // in our target matrix (Chrome 120+, Safari 17.4+, Firefox 53+, Edge 120+).
119
+ // Prefixes were deliberately removed as part of PR #907. Do not re-add them.
120
+ mask-image: var(--mg-icon-svg);
121
+ mask-size: contain;
122
+ mask-repeat: no-repeat;
123
+ mask-position: center;
124
+ }
125
+
126
+ // Windows High Contrast Mode (WHCM) strategy — keep both halves together:
127
+ // (1) forced-color-adjust: none on .mg-icon prevents WHCM from overriding
128
+ // background-color on the ::before pseudo-element. Without it, the browser
129
+ // sets background-color to a system colour that breaks the mask-image
130
+ // rendering (the icon becomes invisible or a solid rectangle).
131
+ // (2) background-color: CanvasText in the forced-colors media query explicitly
132
+ // paints the icon with the WHCM foreground system colour. This ensures the
133
+ // icon is visible and correctly coloured even when currentColor has been
134
+ // overridden by a WHCM-adjusted ancestor.
135
+ // Neither rule is sufficient alone — forced-color-adjust: none without the
136
+ // CanvasText fallback can leave icons the wrong colour; CanvasText without
137
+ // forced-color-adjust: none has no effect because WHCM overrides it first.
138
+ @media (forced-colors: active) {
139
+ .mg-icon:not([class*="fa-"])::before {
140
+ background-color: CanvasText;
141
+ }
142
+ }
143
+
144
+ // Multi-color modifier: renders the SVG with its original colors instead of
145
+ // using currentColor through a mask.
146
+ // WHCM note: forced-color-adjust: none is inherited from .mg-icon, so the
147
+ // browser does not override background-image in forced-colors mode. The SVG
148
+ // renders with its embedded fill colors (e.g. SDG wheel segments). This is
149
+ // intentional for brand logos and multi-color assets — the forced-colors
150
+ // background-color: CanvasText rule on .mg-icon:not([class*="fa-"])::before
151
+ // (specificity 0,2,1) is overridden by .mg-icon--multicolor::before
152
+ // (same specificity 0,2,1, but later in source order), which resets
153
+ // background-color to transparent. Result: multicolor icons
154
+ // retain their original colors in WHCM. Always pair multicolor icons with a
155
+ // visible text label so the color meaning is not the sole conveyor of information.
156
+ .mg-icon--multicolor::before {
157
+ background-color: transparent;
158
+ background-image: var(--mg-icon-svg);
159
+ background-size: contain;
160
+ background-repeat: no-repeat;
161
+ background-position: center;
162
+ mask-image: none;
163
+ }
164
+
165
+ // RTL: flip directional icons horizontally. Icons with an inherent left→right
166
+ // direction must reverse in RTL layouts so they point the correct way.
167
+ [dir="rtl"] {
168
+ .mg-icon-left::before,
169
+ .mg-icon-arrow-left::before,
170
+ .mg-icon-right::before,
171
+ .mg-icon-arrow-right::before,
172
+ .mg-icon-angle-circled-left::before,
173
+ .mg-icon-angle-circled-right::before {
174
+ transform: scaleX(-1);
175
+ }
176
+ }
177
+
178
+ // Print: restore background-color so mask-image icons remain visible.
179
+ // Generic print resets (e.g. HTML5 Boilerplate) set `background: transparent !important`
180
+ // on all elements. Font glyphs were unaffected because they use `color`, but mask-image
181
+ // icons are painted via `background-color: currentColor` — without this override every
182
+ // icon is invisible when printing.
183
+ @media print {
184
+ .mg-icon:not([class*="fa-"])::before {
185
+ // Specificity 0,2,1 with !important beats any 0,0,1 universal reset.
186
+ background-color: #000 !important; // sass-lint:disable-line no-important
187
+ print-color-adjust: exact;
188
+ }
189
+ }
190
+
191
+ // Icon size modifiers
271
192
 
272
193
  .mg-icon--sm {
273
194
  font-size: 0.875em;
@@ -23,7 +23,7 @@
23
23
  @extend %border-none;
24
24
 
25
25
  &:nth-child(even) {
26
- background-color: $mg-color-neutral-200;
26
+ background-color: $mg-color-neutral-25;
27
27
  }
28
28
  }
29
29
  }
@@ -39,11 +39,20 @@
39
39
  }
40
40
 
41
41
  li + li:before {
42
- font-family: $mg-font-family-icons;
43
- color: $mg-color-text;
44
- content: "\f105";
45
- padding: 0 12px 0 14px;
46
- vertical-align: top;
42
+ // CSS-only chevron separator (replaces font codepoint \f105)
43
+ content: "";
44
+ display: inline-block;
45
+ width: 0.4em;
46
+ height: 0.4em;
47
+ border-right: 0.125em solid $mg-color-text;
48
+ border-top: 0.125em solid $mg-color-text;
49
+ transform: rotate(45deg);
50
+
51
+ // Asymmetric margin: left side is larger to optically center the rotated
52
+ // chevron box within the text line. em units scale with font-size.
53
+ // At 16px base: right = 0.75em (12px), left = 0.875em (14px).
54
+ margin: 0 0.75em 0 0.875em;
55
+ vertical-align: middle;
47
56
  }
48
57
 
49
58
  li + li:has(a:empty):before {
@@ -70,7 +79,15 @@
70
79
  }
71
80
 
72
81
  li + li:before {
73
- color: $mg-color-white;
82
+ border-color: $mg-color-white;
83
+ }
84
+ }
85
+
86
+ // Forced-colors mode: white variant chevrons could map to Canvas (background)
87
+ // and become invisible. Force CanvasText for visibility.
88
+ @media (forced-colors: active) {
89
+ .mg-breadcrumb.mg-breadcrumb--white li + li:before {
90
+ border-color: CanvasText;
74
91
  }
75
92
  }
76
93
 
@@ -98,9 +115,8 @@
98
115
  }
99
116
 
100
117
  li + li:before {
101
- @include transform(rotate(180deg));
102
-
103
- padding: 0 14px 0 12px;
118
+ transform: rotate(225deg);
119
+ margin: 0 0.875em 0 0.75em;
104
120
  }
105
121
  }
106
122
  }
@@ -55,45 +55,20 @@ button {
55
55
  color: $mg-color-button;
56
56
  background-color: $mg-color-button-background--hover;
57
57
  }
58
-
59
- // &.button-arrow {
60
- // &::after {
61
- // @include transition(0.2s ease);
62
-
63
- // background: url(#{$img-path-Iconfourback}/chevron-right-black.svg)
64
- // no-repeat left center;
65
- // content: '';
66
- // height: 20px;
67
- // margin-left: $mg-spacing-25;
68
- // width: 13px;
69
- // }
70
-
71
- // &:hover::after {
72
- // @include translate(70%, 0);
73
- // }
74
-
75
- // &.disabled {
76
- // &::after {
77
- // background: url(#{$img-path-Iconfourback}/chevron-right-white.svg)
78
- // no-repeat left center;
79
- // content: '';
80
- // }
81
- // }
82
- // }
83
58
  }
84
59
 
85
60
  .mg-button-secondary {
86
- background-color: $mg-color-blue-600;
61
+ background-color: $mg-color-button-secondary-background;
87
62
 
88
63
  &:hover {
89
64
  color: $mg-color-button;
90
- background-color: $mg-color-blue-400;
65
+ background-color: $mg-color-button-secondary-background--hover;
91
66
  }
92
67
  }
93
68
 
94
69
  .mg-button.disabled {
95
- background-color: $mg-color-neutral-400;
96
- color: $mg-color-neutral-300;
70
+ background-color: $mg-color-neutral-500;
71
+ color: $mg-color-neutral-0;
97
72
  pointer-events: none;
98
73
  }
99
74
 
@@ -36,12 +36,6 @@
36
36
  cursor: pointer;
37
37
  border: $mg-border-width-button solid $mg-border-color-button;
38
38
 
39
- // Improve icon rendering quality
40
- .mg-icon {
41
- font-weight: 100;
42
- -webkit-text-stroke: 0.25px $mg-color-button-background;
43
- }
44
-
45
39
  &:hover {
46
40
  background-color: rgba($mg-color-button-background--hover, 0.8);
47
41
  }
@@ -90,7 +90,7 @@
90
90
  &__image {
91
91
  object-fit: cover;
92
92
  width: 100%;
93
- align-self: center;
93
+ align-self: flex-start;
94
94
  }
95
95
 
96
96
  &__label {
@@ -134,7 +134,7 @@
134
134
  position: absolute;
135
135
  right: 0;
136
136
  top: 0;
137
- z-index: 100;
137
+ z-index: 100; // stretched-link cover — local to card stacking context
138
138
  }
139
139
 
140
140
  // Inline chevron indicator (CSS border triangle)
@@ -227,7 +227,7 @@ $card-variant-colours: (
227
227
  .mg-card__label,
228
228
  .mg-card .mg-button {
229
229
  position: relative;
230
- z-index: 101;
230
+ z-index: 101; // above stretched-link cover — local to card stacking context
231
231
  }
232
232
 
233
233
  .mg-card__label {
@@ -293,7 +293,7 @@ $card-variant-colours: (
293
293
  width: 100%;
294
294
  display: flex;
295
295
  flex-direction: column;
296
- align-items: center;
296
+ align-items: flex-start;
297
297
  justify-content: flex-start;
298
298
  overflow: visible;
299
299
  container-type: inline-size; // Enable container queries for icon scaling
@@ -420,7 +420,7 @@ $card-variant-colours: (
420
420
  content: "";
421
421
  position: absolute;
422
422
  inset: 0;
423
- z-index: 1;
423
+ z-index: 1; // stretched-link cover for logo card — local to icon-card stacking context
424
424
  }
425
425
 
426
426
  &:hover {
@@ -483,7 +483,7 @@ $card-variant-colours: (
483
483
  color: $mg-color-interactive;
484
484
  text-decoration: none;
485
485
  position: relative;
486
- z-index: 101;
486
+ z-index: 101; // above stretched-link cover — local to card stacking context
487
487
 
488
488
  &:hover {
489
489
  text-decoration: underline;
@@ -500,7 +500,7 @@ $card-variant-colours: (
500
500
  // Bordered variant (colored border via CSS custom property)
501
501
  &--bordered {
502
502
  border: 2px solid var(--mg-card-border);
503
- padding: max($mg-card-padding + 0rem, $mg-spacing-100);
503
+ padding: max($mg-card-padding, $mg-spacing-150);
504
504
  }
505
505
 
506
506
  // Centered variant
@@ -62,7 +62,7 @@
62
62
  content: "";
63
63
  position: absolute;
64
64
  inset: 0;
65
- z-index: 1;
65
+ z-index: 1; // stretched-link cover — local to stats-card stacking context
66
66
  }
67
67
 
68
68
  // Focus styles for linked cards
@@ -105,7 +105,7 @@
105
105
  color: $mg-color-interactive;
106
106
  text-decoration: underline;
107
107
  position: relative;
108
- z-index: 2;
108
+ z-index: 2; // above stretched-link cover — local to stats-card stacking context
109
109
  transition: opacity 200ms ease;
110
110
 
111
111
  &:hover {
@@ -98,7 +98,7 @@
98
98
  top: 50%;
99
99
  left: 50%;
100
100
  transform: translate(-50%, -50%);
101
- z-index: 3;
101
+ z-index: 3; // loading spinner above nav buttons — local to gallery stacking context
102
102
  }
103
103
 
104
104
  &__spinner {
@@ -352,7 +352,7 @@
352
352
  color: $mg-color-white;
353
353
  font-size: $mg-font-size-400;
354
354
  cursor: pointer;
355
- z-index: 2;
355
+ z-index: 2; // nav button above gallery images — local to gallery stacking context
356
356
  display: flex;
357
357
  align-items: center;
358
358
  justify-content: center;
@@ -409,7 +409,7 @@
409
409
  right: $mg-spacing-100;
410
410
  display: flex;
411
411
  gap: $mg-spacing-100;
412
- z-index: 2;
412
+ z-index: 2; // arrow controls above gallery images — local to gallery stacking context
413
413
  }
414
414
 
415
415
  &__arrow-button {