@undrr/undrr-mangrove 2.3.0 → 2.4.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 (92) hide show
  1. package/README.md +1 -1
  2. package/components/BookCard.js +5 -2
  3. package/components/Breadcrumbs.js +2 -2
  4. package/components/Checkbox.js +3 -2
  5. package/components/Chips.js +2 -2
  6. package/components/ContentCard.js +8 -2
  7. package/components/ContentTeaser.js +8 -2
  8. package/components/CopyButton.js +3 -2
  9. package/components/CtaButton.js +3 -2
  10. package/components/Drawer.js +2 -2
  11. package/components/DrupalContentPatterns.js +1 -1
  12. package/components/EmbedContainer.js +3 -2
  13. package/components/Footer.js +2 -2
  14. package/components/FormAction.js +3 -2
  15. package/components/FormErrorSummary.js +2 -2
  16. package/components/FormGroup.js +3 -2
  17. package/components/FullWidth.js +3 -2
  18. package/components/Gallery.js +3 -2
  19. package/components/Hero.js +6 -2
  20. package/components/HighlightBox.js +3 -2
  21. package/components/HorizontalBookCard.js +6 -2
  22. package/components/HorizontalCard.js +6 -2
  23. package/components/IconCard.js +4 -2
  24. package/components/Legend.js +3 -2
  25. package/components/Loader.js +2 -2
  26. package/components/MegaMenu.js +7 -2
  27. package/components/Notice.js +3 -2
  28. package/components/PageHeader.js +4 -2
  29. package/components/Pager.js +7 -2
  30. package/components/ProgressBar.js +3 -2
  31. package/components/QuoteHighlight.js +3 -2
  32. package/components/Radio.js +3 -2
  33. package/components/Range.js +3 -2
  34. package/components/ScrollContainer.js +2 -2
  35. package/components/SegmentedControl.js +6 -2
  36. package/components/Select.js +3 -2
  37. package/components/ServiceNotice.js +4 -2
  38. package/components/ShareButtons.js +4 -2
  39. package/components/ShowMore.js +3 -2
  40. package/components/SkipLink.js +3 -2
  41. package/components/StatsCard.js +5 -2
  42. package/components/SyndicationSearchWidget.js +31 -2
  43. package/components/Tab.js +7 -2
  44. package/components/TextCta.js +4 -2
  45. package/components/TextInput.js +3 -2
  46. package/components/Textarea.js +3 -2
  47. package/components/Tree.js +7 -2
  48. package/components/UserFeedback.js +2 -2
  49. package/components/VerticalCard.js +6 -2
  50. package/components/hydrate.js +2 -2
  51. package/css/style-all.css +14 -8
  52. package/css/style-all.css.map +1 -1
  53. package/css/style-delta.css +14 -8
  54. package/css/style-delta.css.map +1 -1
  55. package/css/style-gutenberg.css +1 -1
  56. package/css/style-irp.css +14 -8
  57. package/css/style-irp.css.map +1 -1
  58. package/css/style-mcr.css +14 -8
  59. package/css/style-mcr.css.map +1 -1
  60. package/css/style-preventionweb.css +14 -8
  61. package/css/style-preventionweb.css.map +1 -1
  62. package/css/style.css +14 -8
  63. package/css/style.css.map +1 -1
  64. package/docs/EDITORIAL-MANUAL.md +2 -2
  65. package/docs/llms-editorial-manual.txt +1 -1
  66. package/docs/llms-page-building.txt +4 -2
  67. package/docs/llms-search-widget.txt +3 -1
  68. package/error-pages/401.html +1 -1
  69. package/error-pages/403.html +1 -1
  70. package/error-pages/404.html +1 -1
  71. package/error-pages/429.html +1 -1
  72. package/error-pages/500.html +1 -1
  73. package/error-pages/502.html +1 -1
  74. package/error-pages/503.html +1 -1
  75. package/error-pages/504.html +1 -1
  76. package/error-pages/5xx.html +1 -1
  77. package/error-pages/challenge.html +1 -1
  78. package/error-pages/managed-challenge.html +1 -1
  79. package/js/dialog.js +205 -0
  80. package/package.json +1 -1
  81. package/scss/Atom/BaseTypography/Code/code.scss +0 -1
  82. package/scss/Atom/Table/table.scss +0 -1
  83. package/scss/Atom/Tag/tag.scss +0 -1
  84. package/scss/Components/Buttons/ShareButtons/share-buttons.scss +18 -0
  85. package/scss/Components/Cards/StatsCard/stats-card.scss +0 -1
  86. package/scss/Components/Dialog/dialog.scss +87 -0
  87. package/scss/Components/MegaMenu/mega-menu.scss +403 -0
  88. package/scss/Components/SyndicationSearchWidget/syndication-search-widget.scss +70 -2
  89. package/scss/Patterns/Content/Publication/publication-record.scss +110 -0
  90. package/scss/Patterns/LandingPages/publication-example.scss +28 -0
  91. package/scss/assets/scss/_components.scss +1 -0
  92. package/scss/assets/scss/_variables.scss +1 -1
@@ -1137,3 +1137,406 @@
1137
1137
  }
1138
1138
  }
1139
1139
  }
1140
+
1141
+ // =============================================================================
1142
+ // Contextual menu finding: desktop sections and mobile drawer
1143
+ // =============================================================================
1144
+
1145
+ // Quick navigation shares geometry and readable type across every theme.
1146
+ // Override these properties on .mg-mega-wrapper in consumer theme CSS.
1147
+ :where(.mg-mega-wrapper) {
1148
+ --mg-mega-filter-font-size: var(--mg-font-size-300);
1149
+ --mg-mega-filter-meta-font-size: var(--mg-font-size-250);
1150
+ }
1151
+
1152
+ .mg-mega-mobile-sidebar__filter-container {
1153
+ padding: var(--mg-spacing-100) var(--mg-spacing-150);
1154
+ border-bottom: 1px solid rgb(var(--mg-color-neutral-200));
1155
+ background: rgb(var(--mg-color-white));
1156
+ flex-shrink: 0;
1157
+ }
1158
+
1159
+ .mg-mega-filter {
1160
+ position: relative;
1161
+ display: flex;
1162
+ align-items: center;
1163
+ width: 100%;
1164
+ background: rgb(var(--mg-color-white));
1165
+ border: 1px solid rgb(var(--mg-color-neutral-300));
1166
+ border-radius: var(--mg-radius-form-input);
1167
+
1168
+ &:focus-within {
1169
+ @include mg-focus-ring;
1170
+ }
1171
+
1172
+ &__icon {
1173
+ position: absolute;
1174
+ inset-inline-start: var(--mg-spacing-100);
1175
+ color: rgb(var(--mg-color-neutral-600));
1176
+ pointer-events: none;
1177
+ font-size: var(--mg-font-size-300);
1178
+ }
1179
+
1180
+ &__input {
1181
+ width: 100%;
1182
+ min-width: 0;
1183
+ height: mg-rem(44);
1184
+ padding: var(--mg-spacing-50) mg-rem(44);
1185
+ border: none;
1186
+ background: transparent;
1187
+ font-family: var(--mg-font-family-text);
1188
+ font-size: var(--mg-mega-filter-font-size);
1189
+ color: rgb(var(--mg-color-neutral-900));
1190
+
1191
+ &::placeholder {
1192
+ color: rgb(var(--mg-color-neutral-600));
1193
+ }
1194
+
1195
+ &:focus {
1196
+ outline: none;
1197
+ }
1198
+
1199
+ &::-webkit-search-cancel-button,
1200
+ &::-webkit-search-decoration {
1201
+ appearance: none;
1202
+ }
1203
+ }
1204
+
1205
+ &__clear {
1206
+ position: absolute;
1207
+ inset-inline-end: 0;
1208
+ display: inline-flex;
1209
+ align-items: center;
1210
+ justify-content: center;
1211
+ width: mg-rem(44);
1212
+ height: mg-rem(44);
1213
+ padding: 0;
1214
+ border: none;
1215
+ border-radius: var(--mg-radius-form-input);
1216
+ background: transparent;
1217
+ color: rgb(var(--mg-color-neutral-800));
1218
+ font-family: var(--mg-font-family-text);
1219
+ font-size: var(--mg-font-size-500);
1220
+ cursor: pointer;
1221
+
1222
+ &:focus-visible {
1223
+ @include mg-focus-ring-inset;
1224
+ }
1225
+ }
1226
+
1227
+ &__status {
1228
+ font-size: var(--mg-mega-filter-meta-font-size);
1229
+ color: rgb(var(--mg-color-neutral-600));
1230
+ margin-bottom: var(--mg-spacing-100);
1231
+ font-variant-numeric: tabular-nums;
1232
+ }
1233
+
1234
+ &__highlight {
1235
+ // Match the card title's search-hit treatment. Reset the global editorial
1236
+ // mark padding and size so the match stays inline, including in breadcrumbs.
1237
+ padding: 0;
1238
+ background: rgb(var(--mg-color-neutral-50));
1239
+ color: inherit;
1240
+ font-size: inherit;
1241
+ font-weight: 700;
1242
+ line-height: inherit;
1243
+ }
1244
+
1245
+ &__empty-container {
1246
+ padding-block: var(--mg-spacing-100);
1247
+ }
1248
+
1249
+ &__empty-search-btn,
1250
+ &__site-search-link {
1251
+ display: flex;
1252
+ align-items: center;
1253
+ justify-content: space-between;
1254
+ gap: var(--mg-spacing-100);
1255
+ min-height: mg-rem(44);
1256
+ max-inline-size: 100%;
1257
+ font-size: var(--mg-mega-filter-font-size);
1258
+ line-height: inherit;
1259
+ text-align: start;
1260
+ text-decoration: none;
1261
+ white-space: normal;
1262
+ overflow-wrap: anywhere;
1263
+
1264
+ &:hover {
1265
+ text-decoration: none;
1266
+ }
1267
+ }
1268
+
1269
+ &__fallback {
1270
+ margin-top: var(--mg-spacing-100);
1271
+ padding-top: var(--mg-spacing-100);
1272
+ border-top: 1px solid rgb(var(--mg-color-neutral-200));
1273
+ }
1274
+
1275
+ &__fallback-arrow {
1276
+ margin-inline-start: auto;
1277
+
1278
+ &:dir(rtl) {
1279
+ transform: scaleX(-1);
1280
+ }
1281
+ }
1282
+
1283
+ &__mobile-list {
1284
+ @include mg-list-unmarked;
1285
+
1286
+ padding: 0;
1287
+ margin: 0;
1288
+ }
1289
+
1290
+ &__mobile-item {
1291
+ border-bottom: 1px solid rgb(var(--mg-color-neutral-200));
1292
+
1293
+ &:last-child {
1294
+ border-bottom: 0; // The site-search footer owns the closing separator.
1295
+ }
1296
+ }
1297
+
1298
+ &__mobile-link {
1299
+ transition: none;
1300
+ display: flex;
1301
+ align-items: center;
1302
+ min-height: mg-rem(44);
1303
+ padding: var(--mg-spacing-100);
1304
+ border-radius: var(--mg-radius-form-input);
1305
+ font-family: var(--mg-font-family-ui);
1306
+ text-decoration: none;
1307
+ overflow-wrap: anywhere;
1308
+
1309
+ &:focus-visible {
1310
+ @include mg-focus-ring-inset;
1311
+ }
1312
+
1313
+ @media (hover: hover) {
1314
+ &:hover {
1315
+ background: rgb(var(--mg-color-interactive) / 0.06);
1316
+ }
1317
+ }
1318
+ }
1319
+
1320
+ // Same chevron geometry and logical direction as .mg-breadcrumb, without
1321
+ // creating a navigation landmark or nested links for every search result.
1322
+ &__trail {
1323
+ display: flex;
1324
+ flex-wrap: wrap;
1325
+ align-items: baseline;
1326
+ row-gap: var(--mg-spacing-25);
1327
+ flex: 1;
1328
+ min-width: 0;
1329
+ font-size: var(--mg-mega-filter-meta-font-size);
1330
+ color: rgb(var(--mg-color-neutral-600));
1331
+ }
1332
+
1333
+ &__trail-step {
1334
+ display: inline;
1335
+ max-inline-size: 100%;
1336
+ overflow-wrap: anywhere;
1337
+
1338
+ + .mg-mega-filter__trail-step::before {
1339
+ content: "";
1340
+ display: inline-block;
1341
+ inline-size: 0.35em;
1342
+ block-size: 0.35em;
1343
+ border-inline-end: 0.125em solid currentColor;
1344
+ border-block-start: 0.125em solid currentColor;
1345
+ transform: rotate(45deg);
1346
+ margin-inline: 0.65em 0.75em;
1347
+ vertical-align: middle;
1348
+ color: rgb(var(--mg-color-neutral-600));
1349
+ }
1350
+
1351
+ &:dir(rtl) + .mg-mega-filter__trail-step::before {
1352
+ transform: rotate(-45deg);
1353
+ }
1354
+ }
1355
+
1356
+ &__item-title {
1357
+ font-size: var(--mg-mega-filter-font-size);
1358
+ font-weight: 600;
1359
+ color: rgb(var(--mg-color-interactive));
1360
+ }
1361
+ }
1362
+
1363
+ .mg-mega-mobile-sidebar--progressive.mg-mega-mobile-sidebar--filtering {
1364
+ display: flex;
1365
+ flex-direction: column;
1366
+ overflow: hidden;
1367
+
1368
+ .mg-mega-mobile-sidebar__header {
1369
+ flex-shrink: 0;
1370
+ }
1371
+ }
1372
+
1373
+ .mg-mega-mobile-sidebar__filter-results {
1374
+ padding: var(--mg-spacing-100) var(--mg-spacing-150);
1375
+ overflow-y: auto;
1376
+ overscroll-behavior: contain;
1377
+ min-height: 0;
1378
+
1379
+ .mg-mega-filter__site-search-link {
1380
+ width: 100%;
1381
+ }
1382
+ }
1383
+
1384
+ .mg-mega-content__left-contents {
1385
+ display: contents;
1386
+ }
1387
+
1388
+ .mg-mega-content--filterable > .mg-mega-content__left {
1389
+ display: flex;
1390
+ flex-direction: column;
1391
+ overflow: hidden;
1392
+ }
1393
+
1394
+ .mg-mega-content__left-scroll {
1395
+ flex: 1;
1396
+ min-height: 0;
1397
+ overflow-y: auto;
1398
+ overscroll-behavior: contain;
1399
+ }
1400
+
1401
+ .mg-mega-content__finder-footer {
1402
+ flex-shrink: 0;
1403
+ padding-block: var(--mg-spacing-100);
1404
+ border-top: 1px solid rgb(var(--mg-color-neutral-200));
1405
+ }
1406
+
1407
+ .mg-mega-menu-finder__action.mg-mega-content__finder-trigger {
1408
+ width: 100%;
1409
+ justify-content: space-between;
1410
+ padding-inline: var(--mg-spacing-250);
1411
+ border-radius: 0;
1412
+
1413
+ @media (hover: hover) {
1414
+ &:hover {
1415
+ background: rgb(var(--mg-color-interactive) / 0.15);
1416
+ }
1417
+ }
1418
+
1419
+ &:focus-visible {
1420
+ background: rgb(var(--mg-color-interactive) / 0.15);
1421
+ }
1422
+
1423
+ > span {
1424
+ text-decoration: underline;
1425
+ text-underline-offset: 0.15em;
1426
+ }
1427
+ }
1428
+
1429
+ .mg-mega-content__finder-shortcut {
1430
+ font-size: var(--mg-mega-filter-meta-font-size);
1431
+ padding-inline: var(--mg-spacing-50);
1432
+ border: 1px solid rgb(var(--mg-color-neutral-300));
1433
+ border-radius: var(--mg-spacing-25);
1434
+ background: rgb(var(--mg-color-white));
1435
+ color: rgb(var(--mg-color-neutral-600));
1436
+ }
1437
+
1438
+ .mg-mega-menu-finder {
1439
+ flex-direction: column;
1440
+ max-block-size: min(75vh, 600px);
1441
+ margin-block: min(10vh, 80px) auto;
1442
+ margin-inline: auto;
1443
+ overflow: hidden;
1444
+ font-weight: 400;
1445
+
1446
+ &[open] {
1447
+ display: flex;
1448
+ }
1449
+
1450
+ &__action {
1451
+ transition: none;
1452
+ display: inline-flex;
1453
+ align-items: center;
1454
+ justify-content: center;
1455
+ flex-shrink: 0;
1456
+ min-inline-size: mg-rem(44);
1457
+ min-height: mg-rem(44);
1458
+ padding: 0 var(--mg-spacing-50);
1459
+ border: 0;
1460
+ border-radius: var(--mg-radius-form-input);
1461
+ background: transparent;
1462
+ color: rgb(var(--mg-color-interactive));
1463
+ font-family: var(--mg-font-family-text);
1464
+ font-size: var(--mg-mega-filter-meta-font-size);
1465
+ font-weight: 400;
1466
+ cursor: pointer;
1467
+ text-decoration: none;
1468
+
1469
+ @media (hover: hover) {
1470
+ &:hover {
1471
+ background: rgb(var(--mg-color-neutral-100));
1472
+ }
1473
+ }
1474
+
1475
+ &:focus-visible {
1476
+ @include mg-focus-ring;
1477
+ }
1478
+ }
1479
+
1480
+ &__header {
1481
+ padding: var(--mg-spacing-100) var(--mg-spacing-250) var(--mg-spacing-150);
1482
+ border-bottom: 1px solid rgb(var(--mg-color-neutral-200));
1483
+ flex-shrink: 0;
1484
+
1485
+ .mg-mega-filter {
1486
+ max-inline-size: mg-rem(480);
1487
+ }
1488
+ }
1489
+
1490
+ &__heading {
1491
+ display: flex;
1492
+ align-items: center;
1493
+ justify-content: space-between;
1494
+ gap: var(--mg-spacing-100);
1495
+ }
1496
+
1497
+ &__label {
1498
+ font-family: var(--mg-font-family-ui);
1499
+ font-size: var(--mg-mega-filter-font-size);
1500
+ color: rgb(var(--mg-color-neutral-800));
1501
+ }
1502
+
1503
+ &__results {
1504
+ padding: var(--mg-spacing-100) var(--mg-spacing-250);
1505
+ overflow-y: auto;
1506
+ overscroll-behavior: contain;
1507
+ min-height: 0;
1508
+ }
1509
+
1510
+ &__footer {
1511
+ flex-shrink: 0;
1512
+ padding: var(--mg-spacing-100) var(--mg-spacing-250);
1513
+ border-top: 1px solid rgb(var(--mg-color-neutral-200));
1514
+
1515
+ .mg-mega-filter__site-search-link {
1516
+ width: fit-content;
1517
+ max-inline-size: 100%;
1518
+ }
1519
+ }
1520
+ }
1521
+
1522
+ // Keep the finder body scrolling independently of its input, Close control and site-search footer.
1523
+ .mg-dialog.mg-mega-menu-finder {
1524
+ max-block-size: min(75vh, 600px);
1525
+ margin-block: min(10vh, 80px) auto;
1526
+ margin-inline: auto;
1527
+ overflow: hidden;
1528
+ }
1529
+
1530
+ // A brief tint confirms pointer targeting without delaying navigation or focus.
1531
+ // Base states remain immediate; keyboard, touch and forced colours stay instant.
1532
+ @media (hover: hover) and (prefers-reduced-motion: no-preference) and (forced-colors: none) {
1533
+ .mg-mega-menu-finder__action,
1534
+ .mg-mega-filter__mobile-link {
1535
+ transition: background-color var(--mg-motion-duration-fast)
1536
+ var(--mg-motion-easing-standard);
1537
+
1538
+ &:focus-visible {
1539
+ transition: none;
1540
+ }
1541
+ }
1542
+ }
@@ -573,7 +573,6 @@ $search-input-padding-x: mg-rem(44);
573
573
  padding: var(--mg-spacing-25) var(--mg-spacing-50);
574
574
  background: $search-chip-bg;
575
575
  border-radius: $search-radius;
576
- text-transform: uppercase;
577
576
  letter-spacing: 0.025em;
578
577
  }
579
578
 
@@ -1713,7 +1712,6 @@ $search-input-padding-x: mg-rem(44);
1713
1712
  margin-inline-end: var(--mg-spacing-25);
1714
1713
  color: $search-text-muted;
1715
1714
  font-weight: 600;
1716
- text-transform: uppercase;
1717
1715
  letter-spacing: 0.05em;
1718
1716
  }
1719
1717
 
@@ -1736,3 +1734,73 @@ $search-input-padding-x: mg-rem(44);
1736
1734
  border-inline-end: 1px solid CanvasText;
1737
1735
  }
1738
1736
  }
1737
+
1738
+ // A result scope is one required choice, distinct from removable filters.
1739
+ .mg-search__scope-tabs {
1740
+ border: 0;
1741
+ padding: 0;
1742
+ margin-block: 0 var(--mg-spacing-100);
1743
+ margin-inline: 0;
1744
+ min-inline-size: 0;
1745
+ }
1746
+
1747
+ .mg-search__scope-options {
1748
+ display: flex;
1749
+ flex-wrap: wrap;
1750
+ gap: var(--mg-spacing-25);
1751
+ border-block-end: 1px solid rgb(var(--mg-color-neutral-200));
1752
+ }
1753
+
1754
+ .mg-search__scope-option {
1755
+ position: relative;
1756
+ cursor: pointer;
1757
+ margin: 0;
1758
+
1759
+ input {
1760
+ position: absolute;
1761
+ inline-size: 1px;
1762
+ block-size: 1px;
1763
+ opacity: 0;
1764
+ }
1765
+
1766
+ span {
1767
+ display: flex;
1768
+ align-items: center;
1769
+ justify-content: center;
1770
+ min-inline-size: mg-rem(44);
1771
+ min-block-size: mg-rem(44);
1772
+ box-sizing: border-box;
1773
+ padding: var(--mg-spacing-75) var(--mg-spacing-100);
1774
+ border-block-end: 3px solid transparent;
1775
+ font-family: var(--mg-font-family-ui);
1776
+ color: rgb(var(--mg-color-text));
1777
+ }
1778
+
1779
+ input:checked + span {
1780
+ border-block-end-color: rgb(var(--mg-color-interactive));
1781
+ font-weight: 700;
1782
+ }
1783
+
1784
+ input:focus-visible + span {
1785
+ @include mg-focus-ring-inset;
1786
+ }
1787
+
1788
+ input:disabled + span {
1789
+ cursor: not-allowed;
1790
+ color: rgb(var(--mg-color-neutral-600));
1791
+ }
1792
+
1793
+ @media (forced-colors: active) {
1794
+ input:not(:checked) + span {
1795
+ border-block-end-color: Canvas;
1796
+ }
1797
+
1798
+ input:checked + span {
1799
+ border-block-end-color: Highlight;
1800
+ }
1801
+
1802
+ input:disabled + span {
1803
+ color: GrayText;
1804
+ }
1805
+ }
1806
+ }
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Experimental publication record composition, built on the ArticleStory shell and reading layout.
3
+ * https://github.com/unisdr/undrr-mangrove/blob/main/stories/Patterns/Content/Publication/PublicationRecord.mdx
4
+ */
5
+ @use "../../../assets/scss/mixins" as *;
6
+
7
+ .mg-publication-record {
8
+ overflow-wrap: anywhere;
9
+
10
+ main a:not(.mg-tag) {
11
+ text-decoration-line: underline;
12
+ }
13
+ }
14
+
15
+ .mg-publication-record__layout {
16
+ max-inline-size: var(--mg-reading-with-contents-width);
17
+ padding-block-end: var(--mg-spacing-400);
18
+ }
19
+
20
+ .mg-publication-record__header {
21
+ margin-block-end: var(--mg-spacing-300);
22
+
23
+ h1 {
24
+ max-inline-size: 49rem;
25
+ }
26
+ }
27
+
28
+ .mg-publication-record__metadata {
29
+ display: grid;
30
+ grid-template-columns: minmax(0, 1fr);
31
+ gap: var(--mg-spacing-200);
32
+
33
+ dt {
34
+ font-weight: 700;
35
+ margin-block-end: var(--mg-spacing-50);
36
+ }
37
+
38
+ dd {
39
+ overflow-wrap: anywhere;
40
+ margin-inline-start: 0;
41
+ }
42
+
43
+ ul {
44
+ @include mg-list-unmarked;
45
+
46
+ margin-block: 0;
47
+ padding-inline-start: 0;
48
+ }
49
+ }
50
+
51
+ .mg-publication-record__identity {
52
+ display: flex;
53
+ flex-wrap: wrap;
54
+ gap: var(--mg-spacing-200) var(--mg-spacing-300);
55
+
56
+ > div {
57
+ min-inline-size: 0;
58
+ max-inline-size: 100%;
59
+ }
60
+ }
61
+
62
+ .mg-publication-record__resources {
63
+ @include mg-list-unmarked;
64
+
65
+ padding-inline-start: 0;
66
+
67
+ li {
68
+ padding-block: var(--mg-spacing-150);
69
+ border-block-end: 1px solid rgb(var(--mg-color-neutral-200));
70
+ }
71
+
72
+ li:first-child {
73
+ padding-block-start: var(--mg-spacing-50);
74
+ }
75
+
76
+ p {
77
+ margin-block: var(--mg-spacing-50) 0;
78
+ }
79
+ }
80
+
81
+ .mg-publication-record__reading {
82
+ align-items: start;
83
+ }
84
+
85
+ .mg-publication-record__main,
86
+ .mg-publication-record__aside {
87
+ min-inline-size: 0;
88
+
89
+ > * + * {
90
+ margin-block-start: var(--mg-spacing-300);
91
+ }
92
+
93
+ > :first-child,
94
+ > section > h2:first-child {
95
+ margin-block-start: 0;
96
+ }
97
+ }
98
+
99
+ .mg-publication-record__cover {
100
+ margin: 0;
101
+ max-inline-size: 14rem;
102
+
103
+ img {
104
+ display: block;
105
+ inline-size: 100%;
106
+ block-size: auto;
107
+ padding: 0;
108
+ border: 1px solid rgb(var(--mg-color-neutral-600) / 0.2);
109
+ }
110
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Publication branding example
3
+ *
4
+ * Consumer-owned report expression for the paired Publication page stories.
5
+ * This is story scaffolding, not an additional component API or theme.
6
+ *
7
+ * Full documentation:
8
+ * https://github.com/PreventionWeb/undrr-mangrove/blob/main/stories/Patterns/LandingPages/PublicationPage.mdx
9
+ */
10
+
11
+ // Existing theme token: the report changes its masthead surface, not the
12
+ // theme's interactive colours, fonts, responsive geometry or focus rules.
13
+ .mg-publication-example--branded {
14
+ --mg-color-hero: var(--mg-color-neutral-900);
15
+ }
16
+
17
+ // A documented Hero property is set on the component that owns its value.
18
+ // Changing the shared copy-width hook keeps copy and protective veil aligned.
19
+ .mg-publication-example--branded .mg-hero {
20
+ --mg-hero-overlay-max-width: 44rem;
21
+ }
22
+
23
+ // The only direct presentation override belongs to consumer-authored prose.
24
+ // It never reaches a shared component's children or interaction states.
25
+ .mg-publication-example--branded .mg-publication-example__intro {
26
+ border-inline-start: 4px solid rgb(var(--mg-color-interactive));
27
+ padding-inline-start: var(--mg-spacing-200);
28
+ }
@@ -102,3 +102,4 @@
102
102
  @use "../../Patterns/RichContent/rich-content" as *;
103
103
  @use "../../Patterns/ContentTeaser/content-teaser";
104
104
  @use "../../Patterns/ContentCard/content-card";
105
+ @use "../../Components/Dialog/dialog" as *;
@@ -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.3.0
7
+ * Version: 2.4.0
8
8
  *
9
9
  * ██╗ ██╗███╗ ██╗██████╗ ██████╗ ██████╗
10
10
  * ██║ ██║████╗ ██║██╔══██╗██╔══██╗██╔══██╗