@undrr/undrr-mangrove 2.1.0 → 2.2.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 (200) hide show
  1. package/README.md +1 -1
  2. package/components/BookCard.js +1 -1
  3. package/components/Breadcrumbs.js +1 -1
  4. package/components/Checkbox.js +1 -1
  5. package/components/Chips.js +1 -1
  6. package/components/ContentCard.js +9 -0
  7. package/components/ContentCard.js.LICENSE.txt +9 -0
  8. package/components/ContentTeaser.js +9 -0
  9. package/components/ContentTeaser.js.LICENSE.txt +9 -0
  10. package/components/CopyButton.js +1 -1
  11. package/components/CtaButton.js +1 -1
  12. package/components/Drawer.js +1 -1
  13. package/components/DrupalContentPatterns.js +8 -0
  14. package/components/EmbedContainer.js +1 -1
  15. package/components/Footer.js +1 -1
  16. package/components/FormAction.js +1 -1
  17. package/components/FormErrorSummary.js +1 -1
  18. package/components/FormGroup.js +1 -1
  19. package/components/FullWidth.js +1 -1
  20. package/components/Gallery.js +1 -1
  21. package/components/Hero.js +1 -1
  22. package/components/HighlightBox.js +1 -1
  23. package/components/HorizontalBookCard.js +1 -1
  24. package/components/HorizontalCard.js +1 -1
  25. package/components/IconCard.js +1 -1
  26. package/components/Legend.js +1 -1
  27. package/components/Loader.js +1 -1
  28. package/components/MegaMenu.js +1 -1
  29. package/components/Notice.js +1 -1
  30. package/components/PageHeader.js +1 -1
  31. package/components/Pager.js +1 -1
  32. package/components/ProgressBar.js +1 -1
  33. package/components/QuoteHighlight.js +1 -1
  34. package/components/Radio.js +1 -1
  35. package/components/Range.js +1 -1
  36. package/components/ScrollContainer.js +1 -1
  37. package/components/SegmentedControl.js +1 -1
  38. package/components/Select.js +1 -1
  39. package/components/ServiceNotice.js +1 -1
  40. package/components/ShareButtons.js +1 -1
  41. package/components/ShowMore.js +1 -1
  42. package/components/SkipLink.js +1 -1
  43. package/components/StatsCard.js +1 -1
  44. package/components/SyndicationSearchWidget.js +2 -2
  45. package/components/Tab.js +1 -1
  46. package/components/TextCta.js +1 -1
  47. package/components/TextInput.js +1 -1
  48. package/components/Textarea.js +1 -1
  49. package/components/Tree.js +1 -1
  50. package/components/UserFeedback.js +1 -1
  51. package/components/VerticalCard.js +1 -1
  52. package/components/hydrate.js +1 -1
  53. package/css/style-all.css +16 -11
  54. package/css/style-all.css.map +1 -1
  55. package/css/style-delta.css +16 -11
  56. package/css/style-delta.css.map +1 -1
  57. package/css/style-gutenberg.css +4 -8
  58. package/css/style-gutenberg.css.map +1 -1
  59. package/css/style-irp.css +16 -11
  60. package/css/style-irp.css.map +1 -1
  61. package/css/style-mcr.css +16 -11
  62. package/css/style-mcr.css.map +1 -1
  63. package/css/style-preventionweb.css +16 -11
  64. package/css/style-preventionweb.css.map +1 -1
  65. package/css/style.css +17 -11
  66. package/css/style.css.map +1 -1
  67. package/docs/EDITORIAL-MANUAL.md +1 -1
  68. package/docs/llms-page-building.txt +5 -3
  69. package/error-pages/401.html +1 -1
  70. package/error-pages/403.html +1 -1
  71. package/error-pages/404.html +1 -1
  72. package/error-pages/429.html +1 -1
  73. package/error-pages/500.html +1 -1
  74. package/error-pages/502.html +1 -1
  75. package/error-pages/503.html +1 -1
  76. package/error-pages/504.html +1 -1
  77. package/error-pages/5xx.html +1 -1
  78. package/error-pages/challenge.html +1 -1
  79. package/error-pages/managed-challenge.html +1 -1
  80. package/js/preview-access.js +180 -30
  81. package/package.json +1 -1
  82. package/scss/Atom/BaseTypography/Blockquote/blockquote.scss +2 -0
  83. package/scss/Atom/BaseTypography/Cite/cite.scss +2 -0
  84. package/scss/Atom/BaseTypography/Code/code.scss +2 -0
  85. package/scss/Atom/BaseTypography/Mark/mark.scss +2 -0
  86. package/scss/Atom/BaseTypography/Small/small.scss +2 -0
  87. package/scss/Atom/Icons/icons.scss +3 -2
  88. package/scss/Atom/Images/ImageCaptionCredit/image-caption-credit.scss +3 -0
  89. package/scss/Atom/Images/ImageCredit/image-credit.scss +2 -0
  90. package/scss/Atom/Layout/Container/container.scss +2 -0
  91. package/scss/Atom/Layout/Grid/grid.scss +2 -0
  92. package/scss/Atom/Logo/logo.scss +2 -0
  93. package/scss/Atom/Navigation/MenuItems/menu-items.scss +2 -0
  94. package/scss/Atom/ReachElement/Details/details.scss +3 -0
  95. package/scss/Atom/ReachElement/Figcaption/figcaption.scss +3 -0
  96. package/scss/Atom/StatusLabel/status-label.scss +2 -0
  97. package/scss/Atom/Table/table.scss +4 -0
  98. package/scss/Atom/Tag/tag.scss +3 -0
  99. package/scss/Components/Boilerplate/boilerplate.scss +3 -0
  100. package/scss/Components/Breadcrumbs/breadcrumbs.scss +2 -0
  101. package/scss/Components/Buttons/Chips/chips.scss +3 -0
  102. package/scss/Components/Buttons/CtaButton/buttons.scss +1 -1
  103. package/scss/Components/Buttons/CtaButton/cta-button.scss +4 -0
  104. package/scss/Components/Buttons/ShareButtons/share-buttons.scss +3 -0
  105. package/scss/Components/Cards/Card/card.scss +156 -3
  106. package/scss/Components/Cards/StatsCard/stats-card.scss +14 -2
  107. package/scss/Components/CiteThis/cite-this.scss +2 -0
  108. package/scss/Components/CookieConsentBanner/cookie-consent-banner.scss +2 -0
  109. package/scss/Components/DataViz/Legend/legend.scss +1 -0
  110. package/scss/Components/ErrorPages/error-pages.scss +2 -0
  111. package/scss/Components/Footer/footer.scss +2 -0
  112. package/scss/Components/Forms/FormAction/form-action.scss +2 -0
  113. package/scss/Components/Forms/FormGroup/form-group.scss +2 -0
  114. package/scss/Components/Forms/Range/range.scss +1 -0
  115. package/scss/Components/Forms/SegmentedControl/segmented-control.scss +2 -0
  116. package/scss/Components/Forms/Select/select.scss +2 -0
  117. package/scss/Components/Forms/_form-base.scss +3 -0
  118. package/scss/Components/Gallery/gallery.scss +4 -0
  119. package/scss/Components/Hero/hero.scss +3 -0
  120. package/scss/Components/HighlightBox/highlight-box.scss +3 -0
  121. package/scss/Components/MegaMenu/mega-menu.scss +3 -0
  122. package/scss/Components/MegaMenu/megamenu.scss +1 -1
  123. package/scss/Components/Navigation/Drawer/drawer.scss +1 -0
  124. package/scss/Components/Navigation/Tree/tree.scss +1 -0
  125. package/scss/Components/OnThisPageNav/on-this-page-nav.scss +3 -0
  126. package/scss/Components/PageHeader/page-header.scss +3 -0
  127. package/scss/Components/Pager/pager.scss +3 -0
  128. package/scss/Components/PreviewAccess/preview-access.scss +3 -0
  129. package/scss/Components/QuoteHighlight/quote-highlight.scss +2 -0
  130. package/scss/Components/ScrollContainer/scroll-container.scss +4 -0
  131. package/scss/Components/Snackbar/snackbar.scss +1 -0
  132. package/scss/Components/SyndicationSearchWidget/syndication-search-widget.scss +58 -1
  133. package/scss/Components/Tab/tab.scss +4 -0
  134. package/scss/Components/TableOfContents/table-of-contents.scss +2 -0
  135. package/scss/Components/TextCta/text-cta.scss +3 -0
  136. package/scss/Components/TextCta/textcta.scss +1 -1
  137. package/scss/Components/UserFeedback/user-feedback.scss +3 -0
  138. package/scss/Molecules/ImageCaption/image-caption.scss +2 -0
  139. package/scss/Molecules/SectionHeader/sectionheader.scss +1 -1
  140. package/scss/Patterns/ContentCard/content-card.scss +79 -0
  141. package/scss/Patterns/ContentTeaser/content-teaser.scss +174 -0
  142. package/scss/Patterns/HubHeader/hub-header.scss +3 -0
  143. package/scss/Patterns/RichContent/rich-content.scss +1 -0
  144. package/scss/Patterns/_shared/pattern-demo.scss +1 -1
  145. package/scss/Utilities/Loader/loader.scss +2 -0
  146. package/scss/Utilities/ShowMore/show-more.scss +2 -0
  147. package/scss/Utilities/SkipLink/skip-link.scss +2 -0
  148. package/scss/assets/fonts/noto-kufi-arabic/noto-kufi-arabic.scss +2 -0
  149. package/scss/assets/fonts/noto-sans-arabic/noto-sans-arabic.scss +2 -0
  150. package/scss/assets/fonts/roboto/roboto.scss +12 -12
  151. package/scss/assets/fonts/roboto/sass/_Black.scss +4 -0
  152. package/scss/assets/fonts/roboto/sass/_BlackItalic.scss +4 -0
  153. package/scss/assets/fonts/roboto/sass/_Bold.scss +4 -0
  154. package/scss/assets/fonts/roboto/sass/_BoldItalic.scss +4 -0
  155. package/scss/assets/fonts/roboto/sass/_Italic.scss +4 -0
  156. package/scss/assets/fonts/roboto/sass/_Light.scss +4 -0
  157. package/scss/assets/fonts/roboto/sass/_LightItalic.scss +4 -0
  158. package/scss/assets/fonts/roboto/sass/_Medium.scss +4 -0
  159. package/scss/assets/fonts/roboto/sass/_MediumItalic.scss +4 -0
  160. package/scss/assets/fonts/roboto/sass/_Regular.scss +4 -0
  161. package/scss/assets/fonts/roboto/sass/_variables.scss +1 -2
  162. package/scss/assets/fonts/roboto/sass/roboto.scss +12 -12
  163. package/scss/assets/fonts/roboto-condensed/roboto-condensed.scss +8 -8
  164. package/scss/assets/fonts/roboto-condensed/sass/_Bold.scss +4 -0
  165. package/scss/assets/fonts/roboto-condensed/sass/_BoldItalic.scss +4 -0
  166. package/scss/assets/fonts/roboto-condensed/sass/_Italic.scss +4 -0
  167. package/scss/assets/fonts/roboto-condensed/sass/_Light.scss +4 -0
  168. package/scss/assets/fonts/roboto-condensed/sass/_LightItalic.scss +4 -0
  169. package/scss/assets/fonts/roboto-condensed/sass/_Regular.scss +4 -0
  170. package/scss/assets/fonts/roboto-condensed/sass/_variables.scss +1 -1
  171. package/scss/assets/scss/_components.scss +79 -77
  172. package/scss/assets/scss/_config.scss +183 -0
  173. package/scss/assets/scss/_font-paths.scss +10 -0
  174. package/scss/assets/scss/_fonts.import.scss +2 -0
  175. package/scss/assets/scss/_fonts.scss +13 -55
  176. package/scss/assets/scss/_foundational.scss +6 -3
  177. package/scss/assets/scss/_legacy-warnings.scss +37 -0
  178. package/scss/assets/scss/_mixins.scss +2 -0
  179. package/scss/assets/scss/_style-all.import.scss +11 -0
  180. package/scss/assets/scss/_style-delta.import.scss +11 -0
  181. package/scss/assets/scss/_style-gutenberg.import.scss +11 -0
  182. package/scss/assets/scss/_style-irp.import.scss +11 -0
  183. package/scss/assets/scss/_style-mcr.import.scss +11 -0
  184. package/scss/assets/scss/_style-preventionweb.import.scss +11 -0
  185. package/scss/assets/scss/_style.import.scss +11 -0
  186. package/scss/assets/scss/_theme-delta.scss +2 -1
  187. package/scss/assets/scss/_theme-irp.scss +2 -1
  188. package/scss/assets/scss/_theme-mcr.scss +2 -1
  189. package/scss/assets/scss/_theme-preventionweb.scss +2 -1
  190. package/scss/assets/scss/_utility.scss +3 -0
  191. package/scss/assets/scss/_variables.import.scss +11 -0
  192. package/scss/assets/scss/_variables.scss +5 -230
  193. package/scss/assets/scss/generated/_tokens-mangrove.scss +87 -0
  194. package/scss/assets/scss/style-all.scss +14 -11
  195. package/scss/assets/scss/style-delta.scss +11 -8
  196. package/scss/assets/scss/style-gutenberg.scss +15 -12
  197. package/scss/assets/scss/style-irp.scss +11 -8
  198. package/scss/assets/scss/style-mcr.scss +11 -8
  199. package/scss/assets/scss/style-preventionweb.scss +11 -8
  200. package/scss/assets/scss/style.scss +10 -7
@@ -3,7 +3,8 @@
3
3
  // ---------------------------------------------------------------------
4
4
  // Every token in this block is generated from tokens/irp.yaml, merged over
5
5
  // tokens/mangrove.yaml and tokens/undrr.yaml.
6
- @import "./generated/tokens-irp";
6
+ @use "generated/tokens-irp" as *;
7
+ @use "tokens-tabs" as *;
7
8
 
8
9
  .mg-theme-irp {
9
10
  @include mg-tokens-tabs;
@@ -3,7 +3,8 @@
3
3
  // ---------------------------------------------------------------------
4
4
  // Every token in this block is generated from tokens/mcr.yaml, merged over
5
5
  // tokens/mangrove.yaml and tokens/undrr.yaml.
6
- @import "./generated/tokens-mcr";
6
+ @use "generated/tokens-mcr" as *;
7
+ @use "tokens-tabs" as *;
7
8
 
8
9
  .mg-theme-mcr {
9
10
  @include mg-tokens-tabs;
@@ -3,7 +3,8 @@
3
3
  // ---------------------------------------------------------------------
4
4
  // Every token in this block is generated from tokens/preventionweb.yaml, merged over
5
5
  // tokens/mangrove.yaml and tokens/undrr.yaml.
6
- @import "./generated/tokens-preventionweb";
6
+ @use "generated/tokens-preventionweb" as *;
7
+ @use "tokens-tabs" as *;
7
8
 
8
9
  .mg-theme-preventionweb {
9
10
  @include mg-tokens-tabs;
@@ -1,3 +1,6 @@
1
+ @use "breakpoints" as *;
2
+ @use "config" as *;
3
+
1
4
  // CSS font size reset
2
5
  /* base start */
3
6
  .mg-u-responsive--show-large {
@@ -0,0 +1,11 @@
1
+ // Legacy globals configure forwarded modules on first load (Sass semantics).
2
+ @use "sass:meta";
3
+ @use "legacy-warnings";
4
+ @forward "variables";
5
+
6
+ // Evaluate in the legacy caller scope, after all module forwards.
7
+ @each $_name in legacy-warnings.$legacy-names {
8
+ @if meta.variable-exists($_name) {
9
+ @include legacy-warnings.warn-override($_name);
10
+ }
11
+ }
@@ -4,7 +4,7 @@
4
4
  * Storybook: https://mangrove.undrr.org/
5
5
  * LLMs context: https://mangrove.undrr.org/llms.txt
6
6
  * Repository: https://github.com/PreventionWeb/undrr-mangrove
7
- * Version: 2.1.0
7
+ * Version: 2.2.0
8
8
  *
9
9
  * ██╗ ██╗███╗ ██╗██████╗ ██████╗ ██████╗
10
10
  * ██║ ██║████╗ ██║██╔══██╗██╔══██╗██╔══██╗
@@ -27,210 +27,16 @@
27
27
  * ███████╗
28
28
  * ╚══════╝
29
29
  */
30
- @use "sass:math";
31
- @use "sass:meta";
32
- @import "./tokens-tabs";
33
-
34
- // Data-visualisation palettes: categorical, sequential and Sendai target
35
- // ramps. A distinct concern from brand tokens, sourced from the DLDTS design
36
- // system. @import must precede rule blocks, hence its position here.
37
- @import "./tokens-data-viz";
38
-
39
- // Brand tokens. The palette, the spacing/type/width scales, the semantic
40
- // tier and every component token a brand can restyle are generated from
41
- // tokens/mangrove.yaml (the brand-neutral base) merged with tokens/undrr.yaml
42
- // (UNDRR identity). Editing a value here would be overwritten; edit the YAML
43
- // and run `yarn build:tokens`.
44
- @import "./generated/tokens-mangrove";
45
-
46
- // --- Mangrove 2.0 upgrade guard (build-time) ---
47
- // Color and spacing tokens are now CSS custom properties. Assigning the old
48
- // SCSS variables ($mg-color-* / $mg-spacing-*) before importing Mangrove no
49
- // longer changes anything — it is a silent no-op. If a consumer still defines
50
- // one of the commonly-overridden token variables, warn loudly at compile time
51
- // rather than let their brand colors quietly revert to the defaults.
52
- // See docs/RELEASE-2.0.md (breaking change #1). This fires only for consumer
53
- // overrides — Mangrove itself no longer defines these SCSS variables.
54
- @each $_legacy in "mg-color-interactive", "mg-color-interactive-active",
55
- "mg-color-button-background", "mg-color-button-background--hover",
56
- "mg-border-color-button", "mg-color-tag", "mg-color-form-check",
57
- "mg-color-form-focus", "mg-color-hero", "mg-color-hero--secondary",
58
- "mg-spacing-150", "mg-spacing-300"
59
- {
60
- @if meta.variable-exists($_legacy) {
61
- @warn "Mangrove 2.0: `$#{$_legacy}` no longer has any effect — color and spacing tokens are CSS custom properties now. Move the override into a `.mg-theme-* { --#{$_legacy}: ...; }` block (or `:root`). See docs/RELEASE-2.0.md.";
62
- }
63
- }
64
-
65
- // The same guard for the font-family variables removed by the role model
66
- // (unisdr/undrr-mangrove#1098). Separate loop because each name maps to a
67
- // different replacement role and the message has to say which.
68
- // $mg-font-family is the one a consumer is most likely to have set: it carried
69
- // 22 declarations before the migration.
70
- @each $_legacy,
71
- $_role
72
- in (
73
- "mg-font-family": "text",
74
- "mg-font-family-headings": "ui",
75
- "mg-font-family-condensed": "ui",
76
- "mg-font-family-icons": "",
77
- "mg-font-family-arabic-headings": "heading",
78
- "mg-font-family-arabic-body": "text"
79
- )
80
- {
81
- @if meta.variable-exists($_legacy) {
82
- @if $_role == "" {
83
- @warn "Mangrove 2.0: `$#{$_legacy}` no longer exists and has no replacement — it had no stylesheet consumer, and icons.scss names the FontAwesome family directly. See docs/RELEASE-2.0.md.";
84
- } @else {
85
- @warn "Mangrove 2.0: `$#{$_legacy}` no longer has any effect — font families are role custom properties now. Move the override into a `.mg-theme-* { --mg-font-family-#{$_role}: ...; }` block (or `:root`). See docs/RELEASE-2.0.md.";
86
- }
87
- }
88
- }
89
-
90
- // Root font-size anchor: fixed at the browser-standard 16px root (1rem = 16px),
91
- // used by mg-rem() to convert intended pixel values to rem at build time. The
92
- // legacy 10px root — the `!default` override and the style-*-legacy.scss
93
- // variants — was removed in 2.0; consumers use a standard 16px document root.
94
- $mg-html-font-size: 16; // BUILD-TIME ONLY
95
-
96
- // Converts an intended pixel value to rem for the 16px root.
97
- // Example: mg-rem(16) → 1rem, mg-rem(24) → 1.5rem
98
- @function mg-rem($px) {
99
- @return math.div($px, $mg-html-font-size) * 1rem;
100
- }
101
-
102
- // font file variables
103
- // Path adjusted for Storybook staticDirs (serves assets/ at root, not /assets/)
104
- $mgIconFontPath: "../fonts/mangrove-icon-set/font" !default; // BUILD-TIME ONLY
105
-
106
- // image variables
107
- $img-path: "~/stories/assets/images"; // BUILD-TIME ONLY
108
- $img-path-Icon: "~/stories/assets/icons"; // BUILD-TIME ONLY
109
- $img-path-Iconback: "~/stories/assets/icons"; // BUILD-TIME ONLY
110
- $img-path-Iconfourback: "~/stories/assets/icons"; // BUILD-TIME ONLY
30
+ // Keep data-viz roots before the brand/tab and role roots.
31
+ @use "tokens-data-viz";
32
+ @forward "config";
33
+ @use "config" as *;
111
34
 
112
35
  :root {
113
36
  @include mg-tokens-mangrove;
114
37
  @include mg-tokens-tabs;
115
38
  }
116
39
 
117
- $mg-font-body: $mg-font-size-300;
118
- $mg-font-tag: $mg-font-size-250 !default;
119
-
120
- // This is not really a "varaible" but kept here for now
121
- // until we more fully rationalise our design decisions
122
- @mixin mg-typography($size) {
123
- @if $size == "extra-small" {
124
- font-size: var(--mg-font-size-300);
125
- } @else if $size == "small" {
126
- font-size: var(--mg-font-size-400);
127
- } @else if $size == "medium" {
128
- font-size: var(--mg-font-size-500);
129
- padding-top: var(--mg-spacing-250);
130
- padding-bottom: var(--mg-spacing-150);
131
- } @else if $size == "large" {
132
- font-size: var(--mg-font-size-600);
133
- padding-top: var(--mg-spacing-250);
134
- padding-bottom: var(--mg-spacing-150);
135
- } @else if $size == "xlarge" {
136
- font-size: var(--mg-font-size-900);
137
- padding-top: var(--mg-spacing-300);
138
- padding-bottom: var(--mg-spacing-175);
139
- } @else if $size == "huge" {
140
- font-size: var(--mg-font-size-1000);
141
- padding-top: var(--mg-spacing-300);
142
- padding-bottom: var(--mg-spacing-250);
143
- } @else if $size == "xhuge" {
144
- font-size: var(--mg-font-size-1100);
145
- padding-top: var(--mg-spacing-400);
146
- padding-bottom: var(--mg-spacing-300);
147
- }
148
- }
149
-
150
- // --- Font faces ---
151
- // A font stack, rendered for a custom property value with its quoting intact.
152
-
153
- // Plain interpolation of a Sass list strips the quotes from its quoted
154
- // members, and a custom property value is parsed as a token stream rather than
155
- // as a font-family. An override such as
156
- // `$mg-font-face-sans: "Frutiger 55 Roman", sans-serif` would emit
157
- // `Frutiger 55 Roman`; `55` is not a valid custom-ident, so the declaration is
158
- // invalid at computed-value time, the role is never defined, and every element
159
- // referencing it falls back to the browser's default serif. Frutiger, Univers
160
- // and Helvetica Neue LT Std all name weights numerically, so this is the
161
- // common case for the licensed brand faces the `!default` escape hatch exists
162
- // to admit. `meta.inspect()` renders the list the way Sass wrote it.
163
-
164
- // It lives here, and _fonts.scss calls it rather than importing `sass:meta`
165
- // itself: both files are pulled into one scope by the legacy `@import` chain,
166
- // and two `@use "sass:meta"` rules in that scope collide.
167
- // See unisdr/undrr-mangrove#1098.
168
- @function mg-font-stack($stack) {
169
- @return meta.inspect($stack);
170
- }
171
-
172
- // Faces name what fonts exist. Roles (--mg-font-family-text / -heading /
173
- // -display / -ui / -code) name the reader's task and are mapped onto these
174
- // faces per script in _fonts.scss. No component stylesheet may name a
175
- // face: it references a role. See unisdr/undrr-mangrove#1098.
176
-
177
- // Faces keep `!default` so a consumer compiling Mangrove from source can swap
178
- // in a licensed brand face before the import. That is the only way to introduce
179
- // a face Mangrove does not ship: a runtime role override
180
- // (`.mg-theme-* { --mg-font-family-ui: ...; }`) can only re-point a role among
181
- // the faces _fonts.scss already loads @font-face rules for.
182
- // These variables live outside the brand mixin, so a Sass override applies to
183
- // every brand in the combined style-all.css. Per-brand faces need the runtime
184
- // override instead.
185
- // Quote any family name that is not a plain CSS identifier — anything with a
186
- // space, a digit-leading word or punctuation. The `:root` block below
187
- // round-trips these through `mg-font-stack()` so the quotes survive into the
188
- // emitted custom property; see the note on that function.
189
- $mg-font-face-sans: "Roboto", sans-serif !default;
190
- $mg-font-face-sans-condensed: "Roboto Condensed", sans-serif !default;
191
- $mg-font-face-mono:
192
- ui-monospace, "SFMono-Regular", "Consolas", "Liberation Mono", "Menlo",
193
- monospace !default;
194
-
195
- // Arabic fonts
196
- // Noto Kufi Arabic for headings, Noto Sans Arabic for body. Decided in
197
- // unisdr/undrr-mangrove#1089, which replaced Dubai across every brand.
198
-
199
- // Dubai was inherited from OCHA, but the inheritance was weaker than it looked
200
- // and had gone out of date on both halves. Dubai was OCHA's ALTERNATIVE
201
- // subtheme pairing (body only, never headings, Regular only), not their base
202
- // theme, which used Noto Kufi Arabic. And on 2026-05-28 OCHA's brand guidance
203
- // moved to Almarai for display and Noto Sans Arabic for body.
204
-
205
- // Both Noto families are SIL Open Font License 1.1.
206
-
207
- // This is two Arabic families where 2.0.0-alpha.3 had one. Kufi is a display
208
- // style -- angular, high contrast, architectural -- so it earns its place in
209
- // headings and is the wrong choice at body size; Noto Sans Arabic carries the
210
- // running text and shares Noto Sans' proportions. The second download is
211
- // subset by unicode-range, so a page pays for the scripts it actually renders.
212
-
213
- // Only Regular and Bold exist upstream for both families, so Arabic has a
214
- // 400/700 binary where Latin has a ladder. Nothing is faux bolded: the 600
215
- // used in _foundational.scss resolves UP to the real Bold. The cost is a lost
216
- // tier of emphasis, not a rendering defect.
217
- $mg-font-face-arabic-display: "Noto Kufi Arabic", sans-serif !default;
218
- $mg-font-face-arabic-sans: "Noto Sans Arabic", sans-serif !default;
219
-
220
- // BUILD-TIME ONLY — breakpoints cannot be CSS custom properties.
221
- // @media queries require static values resolved at compile time; var() is invalid there.
222
- // Do not add --mg-breakpoint-* custom properties.
223
- $mg-breakpoint-mobile: 480px;
224
- $mg-breakpoint-tablet: 900px;
225
- $mg-breakpoint-desktop: 1164px;
226
- $mg-breakpoint-desktop-wide: 1440px;
227
-
228
- // tabs
229
- // BUILD-TIME ONLY: $mg-tabs-border-bottom drives @if conditional in tab.scss.
230
- // Cannot become a CSS custom property — no runtime conditional equivalent exists.
231
- // All sub-brands use true. To disable, set to false before @use.
232
- $mg-tabs-border-bottom: true !default;
233
-
234
40
  // Tokens deliberately NOT in the token sources.
235
41
  // - The font roles are bound to faces here because every supported build path
236
42
  // reaches _variables.scss, including the per-component Sass recipe in
@@ -365,34 +171,3 @@ $mg-tabs-border-bottom: true !default;
365
171
  --mg-empty-state-compact-media-size: #{mg-rem(34)};
366
172
  --mg-empty-state-compact-font-size: var(--mg-font-size-250);
367
173
  }
368
-
369
- // Header height
370
- $header-height-xlarge: 115px;
371
- $header-height-medium: 75px;
372
-
373
- /* variables end */
374
-
375
- // stylelint-disable comment-whitespace-inside -- Preserve the fixed-width source easter egg.
376
- /*============================================================================+
377
- | [z-level: -2] [Biome: Server Rack] [Activity: Constructing Frameworks] |
378
- +=============================================================================+
379
- |X| d | _ _ _ _ ___ ___ ___ c X |
380
- |X| [HTML] | w | | | | \| | \| _ \ _ \ [JS] | X |
381
- |X| \--/ | [===] | |_| | | | |) | / / \--/ | X |
382
- |X| || | || \___/|_|\_|___/|_|_\_|_\ || | d X |
383
- |X| || | || | [=O=]X|
384
- |X| c || | || c \ [DB_]X|
385
- |X| _||_ | _||_ __ __ _ _ _ ___ ___ _____ __ ___ X |
386
- |X|d [CSS ] | [NODE] | \/ | /_\ | \| |/ __| _ \/ _ \ \ / / | __| X |
387
- |X|\ \--/ | \--/ | |\/| |/ _ \| | | (_ | / (_) \ V / | _| X |
388
- |X|| || | d || |_| |_/_/ \_\_|\_|\___|_|_\\___/ \_/ |___| X |
389
- |X|| || | || X |
390
- |X|| || d | || ___ w X |
391
- |X|| [=O=] | || c |_ ) d [=O=] X |
392
- |X|| [API] | || [DOM] / / [=O=] [JSON] X |
393
- |X|\============|==== || ========= \--/ /___| [CMS] || X |
394
- |X| || || || X |
395
- +=============================================================================+
396
- | KEY: d=web-dwarf c=coder-dwarf w=wrangler [=O=]=data forge X=stairwell |
397
- +============================================================================*/
398
- // stylelint-enable comment-whitespace-inside
@@ -561,6 +561,93 @@ $mg-font-line-height-700: 1.5em;
561
561
  // card.icon-badge-radius
562
562
  --mg-card-icon-badge-radius: 20%;
563
563
 
564
+ // card.publication.background
565
+ // Background of book and horizontal book publication teasers.
566
+ --mg-card-publication-background: transparent;
567
+
568
+ // card.publication.padding
569
+ // Outer publication teaser inset; cover-to-caption gaps are separate.
570
+ --mg-card-publication-padding: 0px;
571
+
572
+ // card.publication.border-radius
573
+ // Outer publication surface radius; complete cover artwork remains square.
574
+ --mg-card-publication-border-radius: 0px;
575
+
576
+ // card.publication.shadow
577
+ // Publication surface elevation at rest.
578
+ --mg-card-publication-shadow: none;
579
+
580
+ // card.publication.shadow-hover
581
+ // Linked publication surface elevation on hover.
582
+ --mg-card-publication-shadow-hover: none;
583
+
584
+ // content-meta.font-size
585
+ // Dates, attribution and supporting metadata in content teasers and cards;
586
+ // summaries retain body size.
587
+ --mg-content-meta-font-size: var(--mg-font-size-250);
588
+
589
+ // content-teaser.background
590
+ // Content teaser surface, defaulting to the standard card background
591
+ // independently of publication surfaces.
592
+ --mg-content-teaser-background: var(--mg-card-background);
593
+
594
+ // content-teaser.padding
595
+ // Content inset and complete-cover/logo inset inside the enclosed
596
+ // horizontal teaser; photographs meet the outer edge.
597
+ --mg-content-teaser-padding: var(--mg-card-padding);
598
+
599
+ // content-teaser.border-radius
600
+ // Content teaser enclosure radius, defaulting to the standard card radius.
601
+ --mg-content-teaser-border-radius: var(--mg-card-border-radius);
602
+
603
+ // content-teaser.shadow
604
+ // Content teaser soft enclosure, defaulting to the standard card surface at
605
+ // rest.
606
+ --mg-content-teaser-shadow: var(--mg-card-shadow);
607
+
608
+ // content-teaser.shadow-hover
609
+ // Content teaser soft enclosure on hover, defaulting to the standard card
610
+ // hover surface.
611
+ --mg-content-teaser-shadow-hover: var(--mg-card-shadow-hover);
612
+
613
+ // content-card.title-font-size
614
+ // Title size in vertical content card layouts.
615
+ --mg-content-card-title-font-size: var(--mg-font-size-500);
616
+
617
+ // content-card.book-title-font-size
618
+ // Title size in book card layouts.
619
+ --mg-content-card-book-title-font-size: var(--mg-font-size-300);
620
+
621
+ // content-card.book.background
622
+ // Independent content-card surface; publication surfaces do not determine
623
+ // this value.
624
+ --mg-content-card-book-background: transparent;
625
+
626
+ // content-card.book.padding
627
+ // Independent content-card surface; publication surfaces do not determine
628
+ // this value.
629
+ --mg-content-card-book-padding: 0px;
630
+
631
+ // content-card.book.border-radius
632
+ // Independent content-card surface; publication surfaces do not determine
633
+ // this value.
634
+ --mg-content-card-book-border-radius: 0px;
635
+
636
+ // content-card.book.shadow
637
+ // Independent content-card surface; publication surfaces do not determine
638
+ // this value.
639
+ --mg-content-card-book-shadow: none;
640
+
641
+ // content-card.book.shadow-hover
642
+ // Independent content-card surface; publication surfaces do not determine
643
+ // this value.
644
+ --mg-content-card-book-shadow-hover: none;
645
+
646
+ // search.book-cover-height
647
+ // Desktop search book-grid media stage; missing media reserves this space
648
+ // only in multi-column layouts.
649
+ --mg-search-book-cover-height: 20rem;
650
+
564
651
  // notice.action-secondary
565
652
  --mg-notice-action-secondary: rgb(var(--mg-color-button-outline-secondary));
566
653
 
@@ -6,14 +6,17 @@
6
6
  // rebuild needed to switch brands. Prefer a per-brand entry
7
7
  // (style-preventionweb.scss, etc.) for single-brand sites; use this bundle for
8
8
  // multi-brand or runtime-switching pages. See docs/RELEASE-2.0.md.
9
- @import "./variables";
10
- @import "./theme-preventionweb";
11
- @import "./theme-irp";
12
- @import "./theme-mcr";
13
- @import "./theme-delta";
14
- @import "./fonts";
15
- @import "./breakpoints";
16
- @import "./mixins";
17
- @import "./utility";
18
- @import "./foundational";
19
- @import "./components";
9
+ @forward "font-paths";
10
+ @forward "variables";
11
+ @use "variables" as *;
12
+ @use "theme-preventionweb" as *;
13
+ @use "theme-irp" as *;
14
+ @use "theme-mcr" as *;
15
+ @use "theme-delta" as *;
16
+ @forward "fonts";
17
+ @use "fonts" as *;
18
+ @forward "breakpoints";
19
+ @forward "mixins";
20
+ @use "utility" as *;
21
+ @use "foundational" as *;
22
+ @use "components" as *;
@@ -1,8 +1,11 @@
1
- @import "./variables";
2
- @import "./theme-delta";
3
- @import "./fonts";
4
- @import "./breakpoints";
5
- @import "./mixins";
6
- @import "./utility";
7
- @import "./foundational";
8
- @import "./components";
1
+ @forward "font-paths";
2
+ @forward "variables";
3
+ @use "variables" as *;
4
+ @use "theme-delta" as *;
5
+ @forward "fonts";
6
+ @use "fonts" as *;
7
+ @forward "breakpoints";
8
+ @forward "mixins";
9
+ @use "utility" as *;
10
+ @use "foundational" as *;
11
+ @use "components" as *;
@@ -9,20 +9,23 @@
9
9
  * https://git.un.org/undrr/web-backlog/-/issues/545
10
10
  */
11
11
 
12
- @import "./variables";
13
- @import "./fonts";
14
- @import "./breakpoints";
15
- @import "./mixins";
16
- @import "./utility";
12
+ @forward "font-paths";
13
+ @forward "variables";
14
+ @use "variables" as *;
15
+ @forward "fonts";
16
+ @use "fonts" as *;
17
+ @forward "breakpoints";
18
+ @forward "mixins";
19
+ @use "utility" as *;
17
20
 
18
21
  // @import './base';
19
22
 
20
23
  // We only bring in a limited set of components needed for gutenberg
21
24
  // @import './components';
22
- @import "../../Atom/Layout/Container/container";
23
- @import "../../Atom/Layout/Grid/grid";
24
- @import "../../Components/Buttons/CtaButton/cta-button";
25
- @import "../../Components/Cards/Card/card";
26
- @import "../../Components/Hero/hero";
27
- @import "../../Components/Tab/tab";
28
- @import "../../Utilities/FullWidth/full-width";
25
+ @use "../../Atom/Layout/Container/container" as *;
26
+ @use "../../Atom/Layout/Grid/grid" as *;
27
+ @use "../../Components/Buttons/CtaButton/cta-button" as *;
28
+ @use "../../Components/Cards/Card/card" as *;
29
+ @use "../../Components/Hero/hero" as *;
30
+ @use "../../Components/Tab/tab" as *;
31
+ @use "../../Utilities/FullWidth/full-width" as *;
@@ -1,8 +1,11 @@
1
- @import "./variables";
2
- @import "./theme-irp";
3
- @import "./fonts";
4
- @import "./breakpoints";
5
- @import "./mixins";
6
- @import "./utility";
7
- @import "./foundational";
8
- @import "./components";
1
+ @forward "font-paths";
2
+ @forward "variables";
3
+ @use "variables" as *;
4
+ @use "theme-irp" as *;
5
+ @forward "fonts";
6
+ @use "fonts" as *;
7
+ @forward "breakpoints";
8
+ @forward "mixins";
9
+ @use "utility" as *;
10
+ @use "foundational" as *;
11
+ @use "components" as *;
@@ -1,8 +1,11 @@
1
- @import "./variables";
2
- @import "./theme-mcr";
3
- @import "./fonts";
4
- @import "./breakpoints";
5
- @import "./mixins";
6
- @import "./utility";
7
- @import "./foundational";
8
- @import "./components";
1
+ @forward "font-paths";
2
+ @forward "variables";
3
+ @use "variables" as *;
4
+ @use "theme-mcr" as *;
5
+ @forward "fonts";
6
+ @use "fonts" as *;
7
+ @forward "breakpoints";
8
+ @forward "mixins";
9
+ @use "utility" as *;
10
+ @use "foundational" as *;
11
+ @use "components" as *;
@@ -1,8 +1,11 @@
1
- @import "./variables";
2
- @import "./theme-preventionweb";
3
- @import "./fonts";
4
- @import "./breakpoints";
5
- @import "./mixins";
6
- @import "./utility";
7
- @import "./foundational";
8
- @import "./components";
1
+ @forward "font-paths";
2
+ @forward "variables";
3
+ @use "variables" as *;
4
+ @use "theme-preventionweb" as *;
5
+ @forward "fonts";
6
+ @use "fonts" as *;
7
+ @forward "breakpoints";
8
+ @forward "mixins";
9
+ @use "utility" as *;
10
+ @use "foundational" as *;
11
+ @use "components" as *;
@@ -1,7 +1,10 @@
1
- @import "./variables";
2
- @import "./fonts";
3
- @import "./breakpoints";
4
- @import "./mixins";
5
- @import "./utility";
6
- @import "./foundational";
7
- @import "./components";
1
+ @forward "font-paths";
2
+ @forward "variables";
3
+ @use "variables" as *;
4
+ @forward "fonts";
5
+ @use "fonts" as *;
6
+ @forward "breakpoints";
7
+ @forward "mixins";
8
+ @use "utility" as *;
9
+ @use "foundational" as *;
10
+ @use "components" as *;