@undrr/undrr-mangrove 2.1.1 → 2.3.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 (208) 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 +2 -2
  11. package/components/CtaButton.js +1 -1
  12. package/components/Drawer.js +2 -2
  13. package/components/Drawer.js.LICENSE.txt +1 -1
  14. package/components/DrupalContentPatterns.js +8 -0
  15. package/components/EmbedContainer.js +1 -1
  16. package/components/Footer.js +1 -1
  17. package/components/FormAction.js +1 -1
  18. package/components/FormErrorSummary.js +1 -1
  19. package/components/FormGroup.js +1 -1
  20. package/components/FullWidth.js +1 -1
  21. package/components/Gallery.js +2 -2
  22. package/components/Hero.js +1 -1
  23. package/components/HighlightBox.js +1 -1
  24. package/components/HorizontalBookCard.js +2 -2
  25. package/components/HorizontalBookCard.js.LICENSE.txt +1 -1
  26. package/components/HorizontalCard.js +2 -2
  27. package/components/HorizontalCard.js.LICENSE.txt +1 -1
  28. package/components/IconCard.js +2 -2
  29. package/components/IconCard.js.LICENSE.txt +1 -1
  30. package/components/Legend.js +1 -1
  31. package/components/Loader.js +1 -1
  32. package/components/MegaMenu.js +2 -2
  33. package/components/Notice.js +1 -1
  34. package/components/PageHeader.js +1 -1
  35. package/components/Pager.js +1 -1
  36. package/components/ProgressBar.js +1 -1
  37. package/components/QuoteHighlight.js +2 -2
  38. package/components/QuoteHighlight.js.LICENSE.txt +1 -1
  39. package/components/Radio.js +1 -1
  40. package/components/Range.js +1 -1
  41. package/components/ScrollContainer.js +2 -2
  42. package/components/SegmentedControl.js +1 -1
  43. package/components/Select.js +1 -1
  44. package/components/ServiceNotice.js +2 -2
  45. package/components/ShareButtons.js +2 -2
  46. package/components/ShowMore.js +1 -1
  47. package/components/SkipLink.js +1 -1
  48. package/components/StatsCard.js +2 -2
  49. package/components/StatsCard.js.LICENSE.txt +1 -1
  50. package/components/SyndicationSearchWidget.js +2 -2
  51. package/components/Tab.js +2 -2
  52. package/components/TextCta.js +2 -2
  53. package/components/TextCta.js.LICENSE.txt +1 -1
  54. package/components/TextInput.js +1 -1
  55. package/components/Textarea.js +1 -1
  56. package/components/Tree.js +1 -1
  57. package/components/UserFeedback.js +2 -2
  58. package/components/VerticalCard.js +2 -2
  59. package/components/VerticalCard.js.LICENSE.txt +1 -1
  60. package/components/hydrate.js +1 -1
  61. package/css/style-all.css +19 -14
  62. package/css/style-all.css.map +1 -1
  63. package/css/style-delta.css +19 -14
  64. package/css/style-delta.css.map +1 -1
  65. package/css/style-gutenberg.css +4 -8
  66. package/css/style-gutenberg.css.map +1 -1
  67. package/css/style-irp.css +19 -14
  68. package/css/style-irp.css.map +1 -1
  69. package/css/style-mcr.css +19 -14
  70. package/css/style-mcr.css.map +1 -1
  71. package/css/style-preventionweb.css +19 -14
  72. package/css/style-preventionweb.css.map +1 -1
  73. package/css/style.css +20 -14
  74. package/css/style.css.map +1 -1
  75. package/docs/EDITORIAL-MANUAL.md +1 -1
  76. package/docs/llms-page-building.txt +5 -3
  77. package/error-pages/401.html +1 -1
  78. package/error-pages/403.html +1 -1
  79. package/error-pages/404.html +1 -1
  80. package/error-pages/429.html +1 -1
  81. package/error-pages/500.html +1 -1
  82. package/error-pages/502.html +1 -1
  83. package/error-pages/503.html +1 -1
  84. package/error-pages/504.html +1 -1
  85. package/error-pages/5xx.html +1 -1
  86. package/error-pages/challenge.html +1 -1
  87. package/error-pages/managed-challenge.html +1 -1
  88. package/js/preview-access.js +180 -30
  89. package/package.json +1 -1
  90. package/scss/Atom/BaseTypography/Blockquote/blockquote.scss +2 -0
  91. package/scss/Atom/BaseTypography/Cite/cite.scss +2 -0
  92. package/scss/Atom/BaseTypography/Code/code.scss +2 -0
  93. package/scss/Atom/BaseTypography/Mark/mark.scss +2 -0
  94. package/scss/Atom/BaseTypography/Small/small.scss +2 -0
  95. package/scss/Atom/Icons/icons.scss +3 -2
  96. package/scss/Atom/Images/ImageCaptionCredit/image-caption-credit.scss +3 -0
  97. package/scss/Atom/Images/ImageCredit/image-credit.scss +2 -0
  98. package/scss/Atom/Layout/Container/container.scss +2 -0
  99. package/scss/Atom/Layout/Grid/grid.scss +2 -0
  100. package/scss/Atom/Logo/logo.scss +2 -0
  101. package/scss/Atom/Navigation/MenuItems/menu-items.scss +2 -0
  102. package/scss/Atom/ReachElement/Details/details.scss +3 -0
  103. package/scss/Atom/ReachElement/Figcaption/figcaption.scss +3 -0
  104. package/scss/Atom/StatusLabel/status-label.scss +2 -0
  105. package/scss/Atom/Table/table.scss +4 -0
  106. package/scss/Atom/Tag/tag.scss +3 -0
  107. package/scss/Components/Boilerplate/boilerplate.scss +3 -0
  108. package/scss/Components/Breadcrumbs/breadcrumbs.scss +2 -0
  109. package/scss/Components/Buttons/Chips/chips.scss +3 -0
  110. package/scss/Components/Buttons/CtaButton/buttons.scss +1 -1
  111. package/scss/Components/Buttons/CtaButton/cta-button.scss +4 -0
  112. package/scss/Components/Buttons/ShareButtons/share-buttons.scss +3 -0
  113. package/scss/Components/Cards/Card/card.scss +156 -3
  114. package/scss/Components/Cards/StatsCard/stats-card.scss +14 -2
  115. package/scss/Components/CiteThis/cite-this.scss +2 -0
  116. package/scss/Components/CookieConsentBanner/cookie-consent-banner.scss +2 -0
  117. package/scss/Components/DataViz/Legend/legend.scss +1 -0
  118. package/scss/Components/ErrorPages/error-pages.scss +2 -0
  119. package/scss/Components/Footer/footer.scss +2 -0
  120. package/scss/Components/Forms/FormAction/form-action.scss +2 -0
  121. package/scss/Components/Forms/FormGroup/form-group.scss +2 -0
  122. package/scss/Components/Forms/Range/range.scss +1 -0
  123. package/scss/Components/Forms/SegmentedControl/segmented-control.scss +2 -0
  124. package/scss/Components/Forms/Select/select.scss +2 -0
  125. package/scss/Components/Forms/_form-base.scss +3 -0
  126. package/scss/Components/Gallery/gallery.scss +4 -0
  127. package/scss/Components/Hero/hero.scss +3 -0
  128. package/scss/Components/HighlightBox/highlight-box.scss +3 -0
  129. package/scss/Components/MegaMenu/mega-menu.scss +60 -33
  130. package/scss/Components/MegaMenu/megamenu.scss +1 -1
  131. package/scss/Components/Navigation/Drawer/drawer.scss +1 -0
  132. package/scss/Components/Navigation/Tree/tree.scss +1 -0
  133. package/scss/Components/OnThisPageNav/on-this-page-nav.scss +3 -0
  134. package/scss/Components/PageHeader/page-header.scss +3 -0
  135. package/scss/Components/Pager/pager.scss +3 -0
  136. package/scss/Components/PreviewAccess/preview-access.scss +3 -0
  137. package/scss/Components/QuoteHighlight/quote-highlight.scss +2 -0
  138. package/scss/Components/ScrollContainer/scroll-container.scss +4 -0
  139. package/scss/Components/Snackbar/snackbar.scss +1 -0
  140. package/scss/Components/SyndicationSearchWidget/syndication-search-widget.scss +52 -1
  141. package/scss/Components/Tab/tab.scss +4 -0
  142. package/scss/Components/TableOfContents/table-of-contents.scss +2 -0
  143. package/scss/Components/TextCta/text-cta.scss +3 -0
  144. package/scss/Components/TextCta/textcta.scss +1 -1
  145. package/scss/Components/UserFeedback/user-feedback.scss +3 -0
  146. package/scss/Molecules/ImageCaption/image-caption.scss +2 -0
  147. package/scss/Molecules/SectionHeader/sectionheader.scss +1 -1
  148. package/scss/Patterns/ContentCard/content-card.scss +79 -0
  149. package/scss/Patterns/ContentTeaser/content-teaser.scss +174 -0
  150. package/scss/Patterns/HubHeader/hub-header.scss +3 -0
  151. package/scss/Patterns/RichContent/rich-content.scss +1 -0
  152. package/scss/Patterns/_shared/pattern-demo.scss +1 -1
  153. package/scss/Utilities/Loader/loader.scss +2 -0
  154. package/scss/Utilities/ShowMore/show-more.scss +2 -0
  155. package/scss/Utilities/SkipLink/skip-link.scss +2 -0
  156. package/scss/assets/fonts/noto-kufi-arabic/noto-kufi-arabic.scss +2 -0
  157. package/scss/assets/fonts/noto-sans-arabic/noto-sans-arabic.scss +2 -0
  158. package/scss/assets/fonts/roboto/roboto.scss +12 -12
  159. package/scss/assets/fonts/roboto/sass/_Black.scss +4 -0
  160. package/scss/assets/fonts/roboto/sass/_BlackItalic.scss +4 -0
  161. package/scss/assets/fonts/roboto/sass/_Bold.scss +4 -0
  162. package/scss/assets/fonts/roboto/sass/_BoldItalic.scss +4 -0
  163. package/scss/assets/fonts/roboto/sass/_Italic.scss +4 -0
  164. package/scss/assets/fonts/roboto/sass/_Light.scss +4 -0
  165. package/scss/assets/fonts/roboto/sass/_LightItalic.scss +4 -0
  166. package/scss/assets/fonts/roboto/sass/_Medium.scss +4 -0
  167. package/scss/assets/fonts/roboto/sass/_MediumItalic.scss +4 -0
  168. package/scss/assets/fonts/roboto/sass/_Regular.scss +4 -0
  169. package/scss/assets/fonts/roboto/sass/_variables.scss +1 -2
  170. package/scss/assets/fonts/roboto/sass/roboto.scss +12 -12
  171. package/scss/assets/fonts/roboto-condensed/roboto-condensed.scss +8 -8
  172. package/scss/assets/fonts/roboto-condensed/sass/_Bold.scss +4 -0
  173. package/scss/assets/fonts/roboto-condensed/sass/_BoldItalic.scss +4 -0
  174. package/scss/assets/fonts/roboto-condensed/sass/_Italic.scss +4 -0
  175. package/scss/assets/fonts/roboto-condensed/sass/_Light.scss +4 -0
  176. package/scss/assets/fonts/roboto-condensed/sass/_LightItalic.scss +4 -0
  177. package/scss/assets/fonts/roboto-condensed/sass/_Regular.scss +4 -0
  178. package/scss/assets/fonts/roboto-condensed/sass/_variables.scss +1 -1
  179. package/scss/assets/scss/_components.scss +79 -77
  180. package/scss/assets/scss/_config.scss +183 -0
  181. package/scss/assets/scss/_font-paths.scss +10 -0
  182. package/scss/assets/scss/_fonts.import.scss +2 -0
  183. package/scss/assets/scss/_fonts.scss +13 -55
  184. package/scss/assets/scss/_foundational.scss +6 -3
  185. package/scss/assets/scss/_legacy-warnings.scss +37 -0
  186. package/scss/assets/scss/_mixins.scss +2 -0
  187. package/scss/assets/scss/_style-all.import.scss +11 -0
  188. package/scss/assets/scss/_style-delta.import.scss +11 -0
  189. package/scss/assets/scss/_style-gutenberg.import.scss +11 -0
  190. package/scss/assets/scss/_style-irp.import.scss +11 -0
  191. package/scss/assets/scss/_style-mcr.import.scss +11 -0
  192. package/scss/assets/scss/_style-preventionweb.import.scss +11 -0
  193. package/scss/assets/scss/_style.import.scss +11 -0
  194. package/scss/assets/scss/_theme-delta.scss +2 -1
  195. package/scss/assets/scss/_theme-irp.scss +2 -1
  196. package/scss/assets/scss/_theme-mcr.scss +2 -1
  197. package/scss/assets/scss/_theme-preventionweb.scss +2 -1
  198. package/scss/assets/scss/_utility.scss +3 -0
  199. package/scss/assets/scss/_variables.import.scss +11 -0
  200. package/scss/assets/scss/_variables.scss +5 -230
  201. package/scss/assets/scss/generated/_tokens-mangrove.scss +87 -0
  202. package/scss/assets/scss/style-all.scss +14 -11
  203. package/scss/assets/scss/style-delta.scss +11 -8
  204. package/scss/assets/scss/style-gutenberg.scss +15 -12
  205. package/scss/assets/scss/style-irp.scss +11 -8
  206. package/scss/assets/scss/style-mcr.scss +11 -8
  207. package/scss/assets/scss/style-preventionweb.scss +11 -8
  208. package/scss/assets/scss/style.scss +10 -7
@@ -6,7 +6,10 @@
6
6
  * Full documentation:
7
7
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Components/SyndicationSearchWidget/SyndicationSearchWidget.mdx
8
8
  */
9
- @import "deprecated-teaser-hide";
9
+ @use "../Forms/form-base";
10
+ @use "deprecated-teaser-hide" as *;
11
+ @use "../../assets/scss/mixins" as *;
12
+ @use "../../assets/scss/config" as *;
10
13
 
11
14
  // Component-specific variables (using Mangrove tokens)
12
15
  // Colors
@@ -855,15 +858,63 @@ $search-input-padding-x: mg-rem(44);
855
858
  // The book card's existing start alignment keeps cover rows intrinsic.
856
859
  .mg-card__book {
857
860
  block-size: 100%;
861
+ max-width: none;
862
+ inline-size: 100%;
858
863
  }
859
864
 
860
865
  // Remove list-style dividers in grid/card mode
861
866
  .mg-search__result {
867
+ inline-size: 100%;
868
+ min-inline-size: 0;
862
869
  padding-bottom: 0;
863
870
  border-bottom: 0;
864
871
  }
865
872
  }
866
873
 
874
+ // A catalogue aligns captions through a shared media stage, without cropping
875
+ // supplied artwork or inventing a cover for a result that has none. Only search
876
+ // galleries use this staging; standalone publication teasers remain intrinsic.
877
+ .mg-search__results-grid--book {
878
+ @media (min-width: $mg-breakpoint-tablet) {
879
+ &:has(.mg-card__visual) {
880
+ .mg-card__book > .mg-card__visual,
881
+ .mg-card__book:not(:has(.mg-card__visual))::before {
882
+ inline-size: 100%;
883
+ block-size: var(--mg-search-book-cover-height);
884
+ }
885
+
886
+ .mg-card__book:not(:has(.mg-card__visual))::before {
887
+ content: "";
888
+ }
889
+
890
+ .mg-card__book > .mg-card__visual {
891
+ aspect-ratio: auto;
892
+ border: 0;
893
+ align-items: flex-end;
894
+ justify-content: flex-start;
895
+
896
+ > a {
897
+ display: flex;
898
+ align-items: flex-end;
899
+ justify-content: flex-start;
900
+ inline-size: 100%;
901
+ block-size: 100%;
902
+ }
903
+
904
+ img {
905
+ align-self: flex-end;
906
+ inline-size: auto;
907
+ block-size: auto;
908
+ max-inline-size: 100%;
909
+ max-block-size: 100%;
910
+ object-fit: contain;
911
+ border: 1px solid rgb(var(--mg-color-neutral-600) / 0.2);
912
+ }
913
+ }
914
+ }
915
+ }
916
+ }
917
+
867
918
  // ========================================
868
919
  // Result Animations
869
920
  // Sequential fade-in and slide from left for search results.
@@ -6,6 +6,10 @@
6
6
  * Full documentation:
7
7
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Components/Tab/Tab.mdx
8
8
  */
9
+ @use "../../assets/scss/breakpoints" as *;
10
+ @use "../../assets/scss/mixins" as *;
11
+ @use "../../assets/scss/config" as *;
12
+
9
13
  .mg-tabs__list {
10
14
  background: var(--mg-color-tabbar-background);
11
15
  width: 100%;
@@ -6,6 +6,8 @@
6
6
  * Full documentation:
7
7
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Components/TableOfContents/TableOfContents.mdx
8
8
  */
9
+ @use "../../assets/scss/mixins" as *;
10
+
9
11
  .mg-table-of-contents {
10
12
  padding-inline-start: var(--mg-spacing-200);
11
13
  border-inline-start: 2px solid rgb(var(--mg-color-neutral-300));
@@ -6,6 +6,9 @@
6
6
  * Full documentation:
7
7
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Components/TextCta/TextCta.mdx
8
8
  */
9
+ @use "../../assets/scss/breakpoints" as *;
10
+ @use "../../assets/scss/config" as *;
11
+
9
12
  /* CTA banner start */
10
13
 
11
14
  .mg-cta {
@@ -7,5 +7,5 @@
7
7
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Components/TextCta/TextCta.mdx
8
8
  */
9
9
  // textcta.scss — DEPRECATED, use text-cta.scss
10
- @import "./text-cta";
10
+ @forward "./text-cta";
11
11
  @warn "textcta.scss is deprecated. Import text-cta.scss instead.";
@@ -6,6 +6,9 @@
6
6
  * Full documentation:
7
7
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Components/UserFeedback/UserFeedback.mdx
8
8
  */
9
+ @use "../../assets/scss/mixins" as *;
10
+ @use "../../assets/scss/config" as *;
11
+
9
12
  .mg-user-feedback {
10
13
  align-items: center;
11
14
  box-sizing: border-box;
@@ -6,6 +6,8 @@
6
6
  * Full documentation:
7
7
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Atom/Images/ImageCaptionCredit/ImageCaptionCredit.mdx
8
8
  */
9
+ @use "../../assets/scss/breakpoints" as *;
10
+
9
11
  /* image caption start */
10
12
  .mg-image-caption {
11
13
  border-bottom: 2px solid rgb(var(--mg-color-black));
@@ -7,5 +7,5 @@
7
7
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Components/PageHeader/PageHeader.mdx
8
8
  */
9
9
  // sectionheader.scss — DEPRECATED, use section-header.scss
10
- @import "./section-header";
10
+ @forward "./section-header";
11
11
  @warn "sectionheader.scss is deprecated. Import section-header.scss instead.";
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Content card projections with vertical and book layouts; shared card interaction and metadata.
3
+ * https://github.com/unisdr/undrr-mangrove/blob/main/stories/Patterns/ContentCard/ContentCard.mdx
4
+ */
5
+ @use "../../assets/scss/mixins" as *;
6
+
7
+ .mg-card.mg-content-card {
8
+ inline-size: 100%;
9
+ min-inline-size: 0;
10
+ max-inline-size: none;
11
+ }
12
+
13
+ .mg-card.mg-content-card--vertical {
14
+ .mg-card__title {
15
+ font-size: var(--mg-content-card-title-font-size);
16
+ }
17
+ }
18
+
19
+ .mg-card.mg-content-card--book {
20
+ display: flex;
21
+ flex-direction: column;
22
+ gap: 0;
23
+
24
+ .mg-card__title {
25
+ font-size: var(--mg-content-card-book-title-font-size);
26
+ }
27
+
28
+ > .mg-card__content {
29
+ padding: var(--mg-spacing-100) 0 0;
30
+ }
31
+ > .mg-card__content:only-child {
32
+ padding-block-start: 0;
33
+ }
34
+ > .mg-card__visual {
35
+ border-radius: 0;
36
+ outline: none;
37
+ }
38
+
39
+ &:not(.mg-card__book) {
40
+ background: var(--mg-content-card-book-background);
41
+ padding: var(--mg-content-card-book-padding);
42
+ border-radius: var(--mg-content-card-book-border-radius);
43
+ box-shadow: var(--mg-content-card-book-shadow);
44
+
45
+ &:hover {
46
+ box-shadow: var(--mg-content-card-book-shadow-hover);
47
+ }
48
+ }
49
+ }
50
+
51
+ .mg-content-card.mg-content-pattern--logo .mg-card__image {
52
+ object-fit: contain;
53
+ transform: none;
54
+ opacity: 1;
55
+ }
56
+
57
+ .mg-content-card.mg-content-pattern--logo > .mg-card__visual {
58
+ // Brand marks need clear space; photographs intentionally meet the edge.
59
+ padding: var(--mg-card-padding);
60
+ outline: none;
61
+ }
62
+
63
+ .mg-content-card-grid {
64
+ @include mg-list-unmarked;
65
+
66
+ display: grid;
67
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 12rem), 1fr));
68
+ gap: var(--mg-spacing-200);
69
+ margin: 0;
70
+ padding: 0;
71
+ align-items: start;
72
+
73
+ > li {
74
+ min-inline-size: 0;
75
+ }
76
+ .mg-content-card {
77
+ margin-block-end: 0;
78
+ }
79
+ }
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Content teaser patterns compose shared card geometry with semantic metadata.
3
+ * https://github.com/unisdr/undrr-mangrove/blob/main/stories/Patterns/ContentTeaser/ContentTeaser.mdx
4
+ */
5
+ @use "../../assets/scss/mixins" as *;
6
+ @use "../../assets/scss/config" as *;
7
+
8
+ .mg-content-teaser,
9
+ .mg-content-card {
10
+ min-inline-size: 0;
11
+ inline-size: 100%;
12
+ overflow-wrap: anywhere;
13
+
14
+ > .mg-card__content {
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: var(--mg-spacing-75);
18
+ }
19
+
20
+ .mg-content-meta__before-title,
21
+ .mg-content-meta__metadata,
22
+ .mg-content-meta__attribution {
23
+ font-family: var(--mg-font-family-ui);
24
+ font-size: var(--mg-content-meta-font-size);
25
+ line-height: var(--mg-font-line-height-700);
26
+ }
27
+
28
+ .mg-content-meta__before-title {
29
+ display: flex;
30
+ flex-wrap: wrap;
31
+ align-items: baseline;
32
+ gap: var(--mg-spacing-50) var(--mg-spacing-100);
33
+ }
34
+
35
+ .mg-card__label {
36
+ margin: 0;
37
+ font-size: inherit;
38
+ }
39
+
40
+ .mg-card__title {
41
+ margin: 0;
42
+ padding: 0;
43
+ font-family: var(--mg-font-family-ui);
44
+ }
45
+
46
+ .mg-card__summary,
47
+ .mg-content-meta__metadata {
48
+ margin: 0;
49
+ padding: 0;
50
+ }
51
+ }
52
+
53
+ .mg-content-meta__group {
54
+ display: inline-flex;
55
+ flex-wrap: wrap;
56
+ align-items: baseline;
57
+ max-inline-size: 100%;
58
+ gap: var(--mg-spacing-50) var(--mg-spacing-100);
59
+ }
60
+
61
+ .mg-content-meta__attribution {
62
+ @include mg-list-unmarked;
63
+
64
+ display: flex;
65
+ flex-wrap: wrap;
66
+ gap: var(--mg-spacing-50) var(--mg-spacing-100);
67
+ margin: 0;
68
+ padding: 0;
69
+ }
70
+
71
+ .mg-content-meta__metadata-link {
72
+ display: inline-block;
73
+ position: relative;
74
+ z-index: 2; // Above the title's stretched link, within the card stacking context.
75
+ min-block-size: var(--mg-spacing-250);
76
+ text-decoration: underline;
77
+
78
+ &:focus-visible {
79
+ @include mg-focus-ring;
80
+ }
81
+ }
82
+
83
+ // Category links share the resting label treatment. Other metadata links keep
84
+ // their ordinary underline; categories reveal theirs on hover and keyboard focus.
85
+ .mg-content-meta__metadata-link.mg-card__label {
86
+ text-decoration: none;
87
+
88
+ &:hover,
89
+ &:focus-visible {
90
+ text-decoration: underline;
91
+ text-underline-offset: 0.15em;
92
+ }
93
+ }
94
+
95
+ .mg-content-pattern--logo > .mg-card__visual {
96
+ border: 0;
97
+ }
98
+
99
+ .mg-content-teaser-list {
100
+ @include mg-list-unmarked;
101
+
102
+ display: grid;
103
+ gap: var(--mg-spacing-200);
104
+ margin: 0;
105
+ padding: 0;
106
+
107
+ > li {
108
+ min-inline-size: 0;
109
+ }
110
+
111
+ .mg-content-teaser {
112
+ margin-block-end: 0;
113
+ }
114
+ }
115
+
116
+ // Enclosed listing surfaces follow horizontal cards, independently of book-card
117
+ // publication tokens. Clip only photographs so native focus rings stay visible.
118
+ .mg-card.mg-content-teaser {
119
+ background: var(--mg-content-teaser-background);
120
+ padding: 0;
121
+ gap: 0;
122
+ border-radius: var(--mg-content-teaser-border-radius);
123
+ box-shadow: var(--mg-content-teaser-shadow);
124
+
125
+ > .mg-card__content {
126
+ padding: var(--mg-content-teaser-padding);
127
+ }
128
+
129
+ &:has(> .mg-card__visual) {
130
+ gap: 0;
131
+ }
132
+
133
+ > .mg-card__visual {
134
+ margin: var(--mg-content-teaser-padding);
135
+
136
+ @media (min-width: $mg-breakpoint-mobile) {
137
+ margin-inline-end: 0;
138
+ max-inline-size: none;
139
+ }
140
+ }
141
+
142
+ &[data-content-media="photo"] {
143
+ > .mg-card__visual {
144
+ align-self: stretch;
145
+ margin: 0;
146
+ max-inline-size: none;
147
+ border: 0;
148
+ aspect-ratio: 16 / 9;
149
+ border-start-start-radius: var(--mg-content-teaser-border-radius);
150
+ border-start-end-radius: var(--mg-content-teaser-border-radius);
151
+
152
+ @media (min-width: $mg-breakpoint-mobile) {
153
+ aspect-ratio: auto;
154
+ border-start-end-radius: 0;
155
+ border-end-start-radius: var(--mg-content-teaser-border-radius);
156
+ }
157
+ }
158
+
159
+ .mg-card__image {
160
+ inline-size: 100%;
161
+ block-size: 100%;
162
+ object-fit: cover;
163
+ }
164
+ }
165
+
166
+ &:hover {
167
+ box-shadow: var(--mg-content-teaser-shadow-hover);
168
+ }
169
+
170
+ @media (forced-colors: active) {
171
+ outline: 1px solid CanvasText;
172
+ outline-offset: -1px;
173
+ }
174
+ }
@@ -6,6 +6,9 @@
6
6
  * Full documentation:
7
7
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Patterns/ContentHub/ContentHub.mdx
8
8
  */
9
+ @use "../../assets/scss/mixins" as *;
10
+ @use "../../assets/scss/config" as *;
11
+
9
12
  // Deliberately not a tab set and deliberately not the mega menu topbar. Both
10
13
  // mark the active item with a 3px bottom border; so does OnThisPageNav. A
11
14
  // leading rule is the repo's existing idiom for "the destination you are on"
@@ -7,6 +7,7 @@
7
7
  * Full documentation:
8
8
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Patterns/RichContent/RichContent.mdx
9
9
  */
10
+ @use "../../assets/scss/mixins" as *;
10
11
 
11
12
  // The pattern's scroll wrapper is editorial structure, not a component
12
13
  // island. Root classes never exclude the root's own content.
@@ -7,7 +7,7 @@
7
7
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Patterns/LandingPages/LandingPages.mdx
8
8
  */
9
9
  // Demo-only story scaffolding (`mg-demo-*`), imported directly by pattern stories.
10
- @import "../../assets/scss/variables";
10
+ @use "../../assets/scss/config" as *;
11
11
 
12
12
  .mg-demo-lede,
13
13
  .mg-demo-intro {
@@ -7,6 +7,8 @@
7
7
  * Full documentation:
8
8
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Utilities/Loader/Loader.mdx
9
9
  */
10
+ @use "../../assets/scss/breakpoints" as *;
11
+
10
12
  // * loader start *//
11
13
 
12
14
  @keyframes mg-spin {
@@ -6,6 +6,8 @@
6
6
  * Full documentation:
7
7
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Utilities/ShowMore/ShowMore.mdx
8
8
  */
9
+ @use "../../assets/scss/config" as *;
10
+
9
11
  :root {
10
12
  --mg-show-more-height: 200px;
11
13
  }
@@ -6,6 +6,8 @@
6
6
  * Full documentation:
7
7
  * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Utilities/SkipLink/SkipLink.mdx
8
8
  */
9
+ @use "../../assets/scss/mixins" as *;
10
+
9
11
  // Skip link.
10
12
 
11
13
  // Visually hidden until focused. Deliberately not .mg-u-sr-only: that utility
@@ -1,3 +1,5 @@
1
+ @use "../../scss/font-paths" as *;
2
+
1
3
  /* Noto Kufi Arabic - Arabic headings.
2
4
  OFL-1.1. Repackaged from @fontsource/noto-kufi-arabic v5.3.0 by the UNDRR asset library;
3
5
  see https://assets.undrr.org/fonts/noto-kufi-arabic/v1.1.0/.
@@ -1,3 +1,5 @@
1
+ @use "../../scss/font-paths" as *;
2
+
1
3
  /* Noto Sans Arabic - Arabic body text.
2
4
  OFL-1.1. Repackaged from @fontsource/noto-sans-arabic v5.3.0 by the UNDRR asset library;
3
5
  see https://assets.undrr.org/fonts/noto-sans-arabic/v1.0.0/.
@@ -1,15 +1,15 @@
1
- @import "sass/variables";
2
- @import "sass/mixins";
1
+ @use "sass/variables" as *;
2
+ @use "sass/mixins" as *;
3
3
 
4
4
  // @import "sass/Thin";
5
5
  // @import "sass/ThinItalic";
6
- @import "sass/Light";
7
- @import "sass/LightItalic";
8
- @import "sass/Regular";
9
- @import "sass/Italic";
10
- @import "sass/Medium";
11
- @import "sass/MediumItalic";
12
- @import "sass/Bold";
13
- @import "sass/BoldItalic";
14
- @import "sass/Black";
15
- @import "sass/BlackItalic";
6
+ @use "sass/Light" as *;
7
+ @use "sass/LightItalic" as *;
8
+ @use "sass/Regular" as *;
9
+ @use "sass/Italic" as *;
10
+ @use "sass/Medium" as *;
11
+ @use "sass/MediumItalic" as *;
12
+ @use "sass/Bold" as *;
13
+ @use "sass/BoldItalic" as *;
14
+ @use "sass/Black" as *;
15
+ @use "sass/BlackItalic" as *;
@@ -1,3 +1,7 @@
1
+ @use "../../../scss/font-paths" as *;
2
+ @use "mixins" as *;
3
+ @use "variables" as *;
4
+
1
5
  /* BEGIN Black */
2
6
  @font-face {
3
7
  font-family: Roboto;
@@ -1,3 +1,7 @@
1
+ @use "../../../scss/font-paths" as *;
2
+ @use "mixins" as *;
3
+ @use "variables" as *;
4
+
1
5
  /* BEGIN Black Italic */
2
6
  @font-face {
3
7
  font-family: Roboto;
@@ -1,3 +1,7 @@
1
+ @use "../../../scss/font-paths" as *;
2
+ @use "mixins" as *;
3
+ @use "variables" as *;
4
+
1
5
  /* BEGIN Bold */
2
6
  @font-face {
3
7
  font-family: Roboto;
@@ -1,3 +1,7 @@
1
+ @use "../../../scss/font-paths" as *;
2
+ @use "mixins" as *;
3
+ @use "variables" as *;
4
+
1
5
  /* BEGIN Bold Italic */
2
6
  @font-face {
3
7
  font-family: Roboto;
@@ -1,3 +1,7 @@
1
+ @use "../../../scss/font-paths" as *;
2
+ @use "mixins" as *;
3
+ @use "variables" as *;
4
+
1
5
  /* BEGIN Italic */
2
6
  @font-face {
3
7
  font-family: Roboto;
@@ -1,3 +1,7 @@
1
+ @use "../../../scss/font-paths" as *;
2
+ @use "mixins" as *;
3
+ @use "variables" as *;
4
+
1
5
  /* BEGIN Light */
2
6
  @font-face {
3
7
  font-family: Roboto;
@@ -1,3 +1,7 @@
1
+ @use "../../../scss/font-paths" as *;
2
+ @use "mixins" as *;
3
+ @use "variables" as *;
4
+
1
5
  /* BEGIN Light Italic */
2
6
  @font-face {
3
7
  font-family: Roboto;
@@ -1,3 +1,7 @@
1
+ @use "../../../scss/font-paths" as *;
2
+ @use "mixins" as *;
3
+ @use "variables" as *;
4
+
1
5
  /* BEGIN Medium */
2
6
  @font-face {
3
7
  font-family: Roboto;
@@ -1,3 +1,7 @@
1
+ @use "../../../scss/font-paths" as *;
2
+ @use "mixins" as *;
3
+ @use "variables" as *;
4
+
1
5
  /* BEGIN Medium Italic */
2
6
  @font-face {
3
7
  font-family: Roboto;
@@ -1,3 +1,7 @@
1
+ @use "../../../scss/font-paths" as *;
2
+ @use "mixins" as *;
3
+ @use "variables" as *;
4
+
1
5
  /* BEGIN Regular */
2
6
  @font-face {
3
7
  font-family: Roboto;
@@ -1,2 +1 @@
1
- $FontName: "Roboto" !default;
2
- $font-version: "2.137" !default;
1
+ @forward "../../../scss/font-paths" show $FontName, $font-version;
@@ -1,15 +1,15 @@
1
- @import "variables";
2
- @import "mixins";
1
+ @use "variables" as *;
2
+ @use "mixins" as *;
3
3
 
4
4
  // @import "Thin";
5
5
  // @import "ThinItalic";
6
- @import "Light";
7
- @import "LightItalic";
8
- @import "Regular";
9
- @import "Italic";
10
- @import "Medium";
11
- @import "MediumItalic";
12
- @import "Bold";
13
- @import "BoldItalic";
14
- @import "Black";
15
- @import "BlackItalic";
6
+ @use "Light" as *;
7
+ @use "LightItalic" as *;
8
+ @use "Regular" as *;
9
+ @use "Italic" as *;
10
+ @use "Medium" as *;
11
+ @use "MediumItalic" as *;
12
+ @use "Bold" as *;
13
+ @use "BoldItalic" as *;
14
+ @use "Black" as *;
15
+ @use "BlackItalic" as *;
@@ -1,8 +1,8 @@
1
- @import "sass/variables";
2
- @import "sass/mixins";
3
- @import "sass/Light";
4
- @import "sass/LightItalic";
5
- @import "sass/Regular";
6
- @import "sass/Italic";
7
- @import "sass/Bold";
8
- @import "sass/BoldItalic";
1
+ @use "sass/variables" as *;
2
+ @use "sass/mixins" as *;
3
+ @use "sass/Light" as *;
4
+ @use "sass/LightItalic" as *;
5
+ @use "sass/Regular" as *;
6
+ @use "sass/Italic" as *;
7
+ @use "sass/Bold" as *;
8
+ @use "sass/BoldItalic" as *;
@@ -1,3 +1,7 @@
1
+ @use "../../../scss/font-paths" as *;
2
+ @use "mixins" as *;
3
+ @use "variables" as *;
4
+
1
5
  /* BEGIN Bold */
2
6
  @font-face {
3
7
  font-family: "Roboto Condensed";
@@ -1,3 +1,7 @@
1
+ @use "../../../scss/font-paths" as *;
2
+ @use "mixins" as *;
3
+ @use "variables" as *;
4
+
1
5
  /* BEGIN Bold Italic */
2
6
  @font-face {
3
7
  font-family: "Roboto Condensed";