Mangrove 2.0: build together. Stay distinct.

UNDRR sites serve different audiences, but many of the decisions behind them are shared. Mangrove 2.0 gives teams more of that work to build on — from brand themes to whole page patterns.

See it for yourself

The same content. A new foundation.

Two live pages, one on top of the other. Scratch the cover away to reveal the 2.0 page underneath, or use the tabs to look at either version on its own — or at both side by side.

Content Hub home page and Article Story, 1.8 and 2.0
1.8 · Hand-built page

Left-drag to scratch; right-drag to restore. Toggle Reveal all of 2.0 to switch the full reveal.

A foundation you can build on

One system.
Plenty to work with.

71Component entries

The published catalogue, including utilities and integrations.

405Variants & examples

Live stories to explore, adapt and build on.

5Brand themes

Distinct identities on a shared foundation.

3Page-pattern families

Landing pages, content hubs and article stories.

6Card formats

From stories and publications to icons and statistics.

173Shared source tokens

Base definitions for colour, type, spacing and component styling.

What it offers

Shared consistency. Room for your brand.

Cards, controls and content, working together. Switch between five UNDRR themes to see the same components take on a different identity. Try a form field, open the details, or choose Custom to make the palette your own.

A closer look

A closer look.

Seven standout examples, ranging from contrast-preserving focus rings and mobile drill-in navigation to baseline card surfaces and clearer button sets, Mangrove 2.0 packages dozens of everyday accessibility and consistency improvements into the shared layer. Explore the side-by-side comparisons below to see what teams can adopt directly instead of carrying local patches.

Focus and contrast A focus ring that keeps its contrast · 1 demo
A focus ring that keeps its contrast
Mangrove 1.8 Open full size
Mangrove 2.0 Open full size
Visual consistency Cards, DELTA buttons, sharing, tabs, and pager · 5 demos
Cards with a shared visual starting point
Mangrove 1.8 Open full size
Mangrove 2.0 Open full size

Compare the card surfaces. In 1.8.2, .mg-card has no background or padding and a zero radius. In 2.0, the base card includes a background, rounded corners, shadow, and padding.

A broader, clearer button set
Mangrove 1.8 Open full size
Mangrove 2.0 Open full size

This example shifts from two core actions in 1.8 (primary and secondary) to a broader 2.0 set that includes primary, secondary, outline, and CTA treatments.

A lighter treatment for sharing
Mangrove 1.8 Open full size
Mangrove 2.0 Open full size

The .mg-share__button changes from a filled blue square in 1.8.2 to a transparent icon button in 2.0, with a theme-controlled corner radius and focus ring.

Room for longer tab lists
Mangrove 1.8 Open full size
Mangrove 2.0 Open full size

Click a tab on either side. In 2.0, .mg-tabs__rail and .mg-tabs__scroll add a horizontal overflow rail with edge fades. These wrappers are absent from 1.8.2 and require updated markup.

A simpler page selector
Mangrove 1.8 Open full size
Mangrove 2.0 Open full size

The .mg-pager__link changes from a bordered square in 1.8.2 to a borderless circle in 2.0. The line above the pager is also removed.

Mobile navigation Explore the drill-in menu and Back control · 1 demo
Explore mobile navigation one level at a time
Mangrove 1.8 Open full size
Mangrove 2.0 Open full size

Both live menus start open at mobile width. Open a section to explore: 2.0 adds drill-in navigation and a Back button, plus a focus-trapped dialog and exit transition. The 1.8 baseline menu presents a flat list.

71 component entries and 405 variants and examples

A catalogue of building blocks.

Open Mangrove docs and Storybook Guidance for agents

Start with the elements, combine them into components, and give them a purpose in a page or workflow. The existing page patterns show that direction; the next ones can come from the work our teams already share.

How to implement

Getting started.

Agreeing on the content contract does not require every team to use the same interaction library. A team can keep React Aria, MUI, or its own controls while working from the same content and page structure. Mangrove provides HTML/CSS and React implementations to build on; the shared agreement can also guide a team’s own implementation.

Agree together

What the content means, which parts belong in the pattern, and how people should move through it.

Express your brand

Use your programme’s voice, imagery, and theme within that structure.

Choose the implementation

Use Mangrove components where they fit, and select the interaction tools your product needs.

See how the HTML and CSS fit together Named parts, local extensions, and a Tailwind layout

1. Give the content parts names

This simplified card uses Mangrove’s existing markup: a container, a title with a destination, and a summary. mg-card names the component; mg-card__title names a part. This static card needs the stylesheet, with no React runtime or hydration. Components with richer behavior have their own runtime requirements.

card.html
<article class="mg-card mg-card__vc programme-card">
  <div class="mg-card__content">
    <header class="mg-card__title">
      <a href="/reports/resilient-cities/">Resilient cities</a>
    </header>
    <p class="mg-card__summary">
      Guidance for planning and investing in resilience.
    </p>
  </div>
</article>

Load the pinned Mangrove stylesheet in the host page. The programme-card class is local to this example.

2. Extend it without changing the shared class

A local class can set an exposed CSS property for one card. Here, --mg-card-border-radius changes its corners; the content markup stays the same. The brand demo above applies the same idea at theme scale.

programme.css
.programme-card {
  --mg-card-border-radius: 1rem;
}

3. Let your layout utilities arrange it

In a project that already builds Tailwind, its utilities can arrange the outer grid while Mangrove styles the cards inside it. This sketch shows that division of responsibility; replace the comments with each card’s content.

layout.html
<div class="grid gap-6 md:grid-cols-2">
  <article class="mg-card mg-card__vc">
    <!-- First card's content -->
  </article>
  <article class="mg-card mg-card__vc">
    <!-- Second card's content -->
  </article>
</div>

The mg- prefix keeps component class names distinct from utilities such as grid and gap-6. It is not complete CSS isolation: Mangrove’s compiled bundle includes global element styles, and Tailwind’s Preflight changes base styles too. Review resets, cascade layers, and overrides in the host application, especially when both systems style the same element.

Implementation references: HTML/CSS integration · Hydration · Tailwind base styles

What you would be building on

Three years of shared work leave a stable foundation to start from: reusable components, reusable page patterns, accessibility improvements, and clearer implementation guidance.

What a team gets on day one
  • Shared maintenance. Tokens live in validated YAML sources and themes switch at runtime through .mg-theme-{brand}, so one bundle serves every brand and a fix travels to all of them.
  • Support for the work of building. react-doctor checks, a modernized toolchain, and generated docs including llms.txt for agent-assisted delivery.
  • Accessible interaction by default. The checked-radio focus defect, forced-colours focus failures, and low-contrast menu states are fixed in the shared layer, with contrast checks covering focus rings and data-visualisation colours.
  • Page structure, not just parts. Content Hub, Landing Page, and Article Story patterns ship alongside new blocks such as StatusLabel, EmptyState, FormAction, UserFeedback, and SkipLink. MegaMenu mobile navigation drills in one level at a time, with tested back-navigation and reduced-motion fallbacks, and unlinked cards render as plain text so appearance matches behaviour.
  • A documented basis for design decisions. Retuned neutrals, a reusable two-band focus ring, an explicit contrast methodology — including why APCA was not adopted for this release — and Sendai tokens named after the targets they represent.

Start building

Ready to build with Mangrove 2.0?

Explore live stories and component guidelines at mangrove.undrr.org, or use the reference context below with AI coding assistants to build accessible, on-brand UNDRR pages.

Open Mangrove docs and Storybook

Coding Agent Context

Paste this into agent prompts, rules, or system instructions when generating components or pages.

AI Coding Agent Context
# Mangrove 2.0 & UNDRR Asset Library - Coding Agent Context
Mangrove llms.txt:       https://mangrove.undrr.org/llms.txt
Component Index:         https://mangrove.undrr.org/ai-components/index.json
Per-Component Details:   https://mangrove.undrr.org/ai-components/{id}.json
  (e.g., button, card, table, tree, breadcrumb, tag, details, empty-state, stats-card)
Design Tokens (sRGB):    https://mangrove.undrr.org/tokens.json
CSS Utilities:           https://mangrove.undrr.org/ai-components/utilities.json
Asset Library Guide:     https://assets.undrr.org/AGENTS.md
Asset Library llms.txt:  https://assets.undrr.org/llms.txt