
/* ===== fonts/fonts.css ===== */
/* DM Sans and Newsreader, self-hosted: the files Google Fonts served, kept
   here so a visitor's IP never reaches Google before they have consented
   to anything. Same families, axes and unicode ranges as the link the
   static pages carried. */

/* DM Sans normal 400 latin */
@font-face {
  font-family: 'DM Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/DMSans-normal-400-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* DM Sans normal 500 latin */
@font-face {
  font-family: 'DM Sans';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/DMSans-normal-500-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Newsreader italic 400 latin */
@font-face {
  font-family: 'Newsreader';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/Newsreader-italic-400-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Newsreader normal 400 latin */
@font-face {
  font-family: 'Newsreader';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/Newsreader-normal-400-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ===== assets/css/style.css ===== */
/* ==========================================================================
   Hilbert Group — Design System
   Fonts: Newsreader (headings) + DM Sans (body) via Google Fonts
   Built for WordPress + Elementor (section > container > widgets structure)
   ========================================================================== */

/* ---------- Design tokens ---------- */
:root {
  /* Main palette */
  --color-black: #090909;
  --color-white: #ffffff;
  --color-night: #17223a;          /* Main/Night */
  --color-forest: #173a2c;         /* Main/Forest */
  --color-almost-white: #efefec;   /* Main/Almost White */
  --color-surface-1: #141414;      /* Surface/Level-1 */
  --color-dark-2: #1d2023;

  /* Additional */
  --color-light-green: #d9e3de;
  --color-moss: #516e5f;
  --color-light-blue: #d0dceb;
  --color-deep-blue: #192c45;
  --color-purple: #3d4f7c;
  --color-matcha: #deeadc;

  /* Blue tints */
  --color-blue-5: #e4e5e3;
  --color-blue-10: rgba(22, 35, 58, 0.1);
  --color-blue-40: rgba(23, 34, 58, 0.4);
  --color-blue-50: rgba(23, 34, 58, 0.5);

  /* Green tints */
  --color-green-5: rgba(23, 58, 44, 0.05);
  --color-green-10: rgba(23, 58, 44, 0.1);
  --color-green-50: rgba(23, 58, 44, 0.5);

  /* Gray tints */
  --color-gray-10: rgba(239, 239, 236, 0.1);
  --color-gray-20: #c2d1c3;
  --color-gray-40: rgba(239, 239, 236, 0.5);
  --color-gray-50: rgba(121, 125, 125, 0.5);
  --color-gray-60: rgba(222, 234, 220, 0.6);

  /* System */
  --color-error: #952f2f;

  /* Typography */
  --font-heading: 'Newsreader', Georgia, 'Times New Roman', serif;
  --font-body: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

  /* Layout / grid */
  --container-max: 1440px;
  --container-pad: 32px;   /* content-width side gutter (= Elementor container padding) */
  --section-gap: 120px;    /* legacy alias of --sp-120 */
  --grid-gap: 8px;         /* gap between grid cards (Figma cards use 8px) */
  --grid-gap-lg: 32px;     /* wider gap between feature columns */

  /* Spacing scale (design tokens) */
  --sp-4: 4px;
  --sp-8: 8px;
  --sp-12: 12px;
  --sp-16: 16px;
  --sp-20: 20px;
  --sp-24: 24px;
  --sp-28: 28px;
  --sp-32: 32px;
  --sp-40: 40px;
  --sp-64: 64px;
  --sp-80: 80px;
  --sp-100: 100px;
  --sp-120: 120px;

  /* Card / block inner padding tokens */
  --card-pad: 16px;
  --card-pad-x: 32px;

  /* Hairline / border tokens */
  --hairline: 1px solid var(--color-blue-10);
  --hairline-dark: 1px solid var(--color-night);
}

/* Tablet / mobile token overrides */
@media (max-width: 1024px) { :root { --container-pad: 40px; --sp-120: 80px; --sp-100: 64px; --sp-80: 56px; } }
@media (max-width: 768px)  { :root { --container-pad: 16px; --sp-120: 56px; --sp-100: 48px; --sp-80: 40px; --sp-64: 40px; } }

/* ---------- Reset ---------- */
*,
*::before,
*::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
  margin: 0;
  overflow-x: hidden;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.375;
  color: var(--color-night);
  background-color: var(--color-almost-white);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

h1, h2, h3, h4, h5, h6, p, figure, blockquote, ul, ol { margin: 0; }
ul, ol { padding: 0; list-style: none; }

img, svg, video { display: block; max-width: 100%; height: auto; }

a { color: inherit; text-decoration: none; }

button {
  font-family: inherit;
  font-size: inherit;
  border: none;
  background: none;
  cursor: pointer;
  color: inherit;
}

input, textarea, select, button { font-family: inherit; }

/* ---------- Typography scale ---------- */
.h1, .h2, .h3, .h4, .h5, .h6 {
  font-family: var(--font-heading);
  font-weight: 400;
  color: var(--color-night);
}

.h1 { font-size: 84px; line-height: 0.9; letter-spacing: -1.5px; }
.h2 { font-size: 62px; line-height: 0.9; letter-spacing: -1.5px; }
.h3 { font-size: 40px; line-height: 1;   letter-spacing: -1px; }
.h4 { font-size: 28px; line-height: 1;   letter-spacing: -1px; }
.h5 { font-size: 24px; line-height: 1;   letter-spacing: -1px; }
.h6 { font-size: 20px; line-height: 1.1; letter-spacing: -1px; }

.p1 { font-family: var(--font-body); font-weight: 400; font-size: 16px; line-height: 1.375; }
.p2 { font-family: var(--font-body); font-weight: 400; font-size: 14px; line-height: 1.571; }
.p3 { font-family: var(--font-body); font-weight: 500; font-size: 13px; line-height: 1.23; }
.p4 { font-family: var(--font-body); font-weight: 400; font-size: 12px; line-height: 1.333; }

.tag  { font-family: var(--font-heading); font-style: italic; font-weight: 400; font-size: 16px; line-height: 1.25; }
.tag2 { font-family: var(--font-heading); font-style: italic; font-weight: 400; font-size: 14px; line-height: 1.43; }

.link-text { font-family: var(--font-body); font-weight: 400; font-size: 14px; line-height: 1.43; }

/* ==========================================================================
   Grid system  (Elementor-style: container → 12-col grid → columns)
   One container width + one 12-col grid shared by every block, so vertical
   column lines line up across all sections and pages.
   ========================================================================== */
.container {
  width: 100%;
  max-width: var(--container-max);
  margin-left: auto;
  margin-right: auto;
  padding-left: var(--container-pad);
  padding-right: var(--container-pad);
}

/* 12-column grid. Gutterless by default so column lines are identical
   everywhere; opt into gaps with .grid--gap / .grid--gap-lg. */
.grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  column-gap: 0;
  row-gap: 0;
}
.grid--gap    { column-gap: var(--grid-gap); }
.grid--gap-lg { column-gap: var(--grid-gap-lg); }

/* Column spans */
.col-1  { grid-column: span 1; }
.col-2  { grid-column: span 2; }
.col-3  { grid-column: span 3; }
.col-4  { grid-column: span 4; }
.col-5  { grid-column: span 5; }
.col-6  { grid-column: span 6; }
.col-7  { grid-column: span 7; }
.col-8  { grid-column: span 8; }
.col-9  { grid-column: span 9; }
.col-10 { grid-column: span 10; }
.col-11 { grid-column: span 11; }
.col-12 { grid-column: span 12; }
/* Start position helpers (for right-aligned content blocks) */
.start-5 { grid-column-start: 5; }
.start-4 { grid-column-start: 4; }

/* Canonical label(4) / content(8) split used by most sections */
.split { display: grid; grid-template-columns: 4fr 8fr; column-gap: 0; }

/* Grid/flex items must be allowed to shrink below their content's intrinsic
   size, otherwise a fixed-width child forces the track wider than the
   viewport and the layout breaks on tablet/mobile. */
.grid > *,
.split > *,
.capabilities__inner > *, .standards__head > *, .sol-grid-head > *,
.syntetika__inner > *, .company-band__inner > *, .ri__head > *,
.publib__inner > *,
.scomplex__head > *, .scomplex__grid > *,
.careers__head > *, .careers__roles > *, .audience__head > *,
.enquiry__inner > *, .offices__inner > *,
.strat__head > *, .strat__subnav > *, .strat__body > *,
.reqdoc__inner > *, .lblsec__inner > *, .statsrow > *,
.onchain__cols > *, .onchain-prow > *, .media__grid > *,
.principles__grid > *, .ri__cols > *, .risk-cols > *,
.site-footer__grid > *, .research__news-form > *,
.ir-contact__form > * { min-width: 0; }

/* Section vertical rhythm */
.section-y    { padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.section-y-sm { padding-top: var(--sp-80);  padding-bottom: var(--sp-80); }

/* Vertical stacks (replace ad-hoc gaps) */
.stack   { display: flex; flex-direction: column; }
.stack-4  { gap: var(--sp-4); }
.stack-8  { gap: var(--sp-8); }
.stack-16 { gap: var(--sp-16); }
.stack-20 { gap: var(--sp-20); }
.stack-24 { gap: var(--sp-24); }
.stack-40 { gap: var(--sp-40); }
.stack-64 { gap: var(--sp-64); }
.stack-80 { gap: var(--sp-80); }

.section { padding-top: var(--section-gap); padding-bottom: var(--section-gap); }

/* Collapse grid to a single column on tablet & below */
@media (max-width: 992px) {
  .grid, .split { grid-template-columns: 1fr; }
  .grid > [class*="col-"] { grid-column: auto; }
  .split { row-gap: var(--sp-32); }
}

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 52px;
  padding: 13px 20px;
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 14px;
  line-height: 20px;
  white-space: nowrap;
  border: 1px solid transparent;
  transition: color 0.2s ease, background-color 0.2s ease, border-color 0.2s ease;
}

.btn--light {
  background-color: var(--color-almost-white);
  color: var(--color-night);
}
.btn--light:hover { color: var(--color-blue-50); }

.btn--dark {
  background-color: var(--color-night);
  color: var(--color-almost-white);
}
.btn--dark:hover { background-color: var(--color-deep-blue); }

.btn--ghost {
  background-color: transparent;
  border-color: var(--color-gray-50);
  color: var(--color-matcha);
}
.btn--ghost:hover {
  border-color: var(--color-gray-40);
  color: var(--color-almost-white);
}

.btn--ghost-dark {
  background-color: transparent;
  border-color: var(--color-blue-40);
  color: var(--color-night);
}
.btn--ghost-dark:hover {
  border-color: var(--color-night);
}

.btn--full { width: 100%; }

/* ---------- Text link ---------- */
.link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--font-body);
  font-weight: 400;
  font-size: 14px;
  line-height: 20px;
  color: var(--color-night);
  transition: opacity 0.2s ease;
}
.link:hover { text-decoration: underline; text-underline-position: from-font; }
.link--light { color: var(--color-almost-white); }

/* ---------- Utility ---------- */
.u-italic { font-style: italic; }
.text-center { text-align: center; }
.visually-hidden {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ==========================================================================
   Logo
   ========================================================================== */
.logo {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  color: var(--color-night);
}
.logo__mark { display: inline-flex; width: 24px; height: 24px; }
.logo__mark svg { width: 100%; height: 100%; }
.logo__word {
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 15px;
  line-height: 24px;
  letter-spacing: 1.2px;
  color: var(--color-night);
  text-transform: uppercase;
}
.logo--light { color: var(--color-almost-white); }
.logo--light .logo__word { color: var(--color-almost-white); }

/* ==========================================================================
   Header
   ========================================================================== */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background-color: var(--color-almost-white);
  border-bottom: 1px solid var(--color-green-10);
}
.site-header__inner {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 64px;
}
.site-nav {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
}
.site-nav__list {
  display: flex;
  align-items: center;
  gap: 16px;
}
.site-nav__list > li > a,
.site-nav__toggle {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 13px;
  line-height: 16px;
  color: var(--color-green-50);
  transition: color 0.2s ease;
}
.site-nav__list > li > a:hover,
.site-nav__toggle:hover { color: var(--color-forest); }
.site-nav__caret { width: 7px; height: 4px; transition: transform 0.2s ease; }
.site-nav__list > li { position: relative; }
.has-dropdown:hover .site-nav__caret,
.has-dropdown:focus-within .site-nav__caret { transform: rotate(180deg); }

/* Desktop dropdown menu */
/* Dropdown is a panel: a section label, a two-up grid of titled items with
   a grey hover and a trailing arrow, then a footer link (Figma 421:6456). */
.dropdown {
  position: absolute; top: 100%; left: 50%;
  transform: translate(-50%, 6px);
  width: 640px; background: var(--color-almost-white);
  box-shadow: 0 16px 40px rgba(23, 34, 58, 0.1);
  opacity: 0; visibility: hidden; pointer-events: none;
  transition: opacity 0.2s ease, transform 0.2s ease;
  z-index: 130;
}
.has-dropdown:hover .dropdown,
.has-dropdown:focus-within .dropdown { opacity: 1; visibility: visible; pointer-events: auto; transform: translate(-50%, 0); }
.dropdown__label {
  border-top: 1px solid var(--color-green-10); padding: 12px 16px;
  font-family: var(--font-heading); font-size: 13px; line-height: 16px;
  color: var(--color-green-50); opacity: 0.6;
}
.dropdown__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; padding-right: 16px; }
.dropdown__item { display: flex; flex-direction: column; gap: 4px; padding: 16px; transition: background-color 0.2s ease; }
.dropdown__item:hover { background: var(--color-green-5); }
.dropdown__item-title { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-forest); white-space: nowrap; }
.dropdown__item-title span { opacity: 0; transition: opacity 0.2s ease; }
.dropdown__item:hover .dropdown__item-title span { opacity: 1; }
.dropdown__item-desc { max-width: 269px; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-forest); opacity: 0.5; }
.dropdown__more {
  position: relative; display: flex; align-items: center; height: 52px;
  border-top: 1px solid var(--color-green-10); border-bottom: 1px solid var(--color-green-10);
  padding: 4px 32px 4px 16px;
  font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-forest);
}
.dropdown__more::after { content: ""; position: absolute; right: -10px; top: -1px; width: 1px; height: 30px; background: var(--color-forest); }
.dropdown li a:hover { color: var(--color-forest); background-color: var(--color-green-5); }

.site-header__actions {
  display: flex;
  align-items: center;
}
.header-login,
.header-cta {
  display: inline-flex;
  align-items: center;
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 13px;
  line-height: 16px;
  color: var(--color-green-50);
  padding: 10px 0;
  transition: color 0.2s ease;
}
.header-login { padding-right: 16px; border-right: 1px solid var(--color-green-50); }
.header-cta { padding-left: 16px; }
.header-login:hover,
.header-cta:hover { color: var(--color-forest); }

.burger {
  display: none;
  width: 40px;
  height: 40px;
  align-items: center;
  justify-content: center;
}
.burger span {
  display: block;
  width: 20px;
  height: 1.5px;
  background-color: var(--color-night);
  position: relative;
}
.burger span::before,
.burger span::after {
  content: '';
  position: absolute;
  left: 0;
  width: 20px;
  height: 1.5px;
  background-color: var(--color-night);
}
.burger span::before { top: -6px; }
.burger span::after { top: 6px; }

/* ==========================================================================
   Mobile menu (slide-in panel)
   ========================================================================== */
.mobile-menu {
  position: fixed;
  inset: 0;
  z-index: 200;
  background-color: var(--color-almost-white);
  transform: translateX(100%);
  transition: transform 0.3s ease;
  display: flex;
  flex-direction: column;
  visibility: hidden;
}
.mobile-menu.is-open { transform: translateX(0); visibility: visible; }
.mobile-menu__top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 64px;
  padding: 0 20px;
  border-bottom: 1px solid var(--color-blue-10);
}
.mobile-menu__close { width: 40px; height: 40px; display: inline-flex; align-items: center; justify-content: center; }
.mobile-menu__list { flex: 1; padding: 0 20px; }
.mobile-menu__list > li {
  border-bottom: 1px solid var(--color-blue-10);
}
/* Mobile rows: 52px, arrow for leaf pages, plus/minus for sections that
   expand (Figma 272:1210 / 272:1350). The frame set these in Newsreader
   28; the client asked (September 2026) for the platform's own face here,
   the DM Sans the desktop bar and every other link use. */
.mobile-menu__link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  width: 100%;
  height: 52px;
  padding: 0 var(--container-pad);
  border-bottom: 1px solid var(--color-green-10);
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 16px;
  line-height: 22px;
  color: var(--color-forest);
}
.mobile-menu__link > span { flex-shrink: 0; font-size: 16px; line-height: 1; }
.mobile-menu__bottom {
  display: flex;
  margin-top: 16px;
  border-bottom: 1px solid var(--color-forest);
}
.mobile-menu__bottom a {
  flex: 1;
  display: flex; align-items: center; justify-content: center;
  padding: 10px 16px;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-forest);
}
.mobile-menu__bottom a + a { border-left: 1px solid var(--color-forest); }
body.menu-open { overflow: hidden; }

/* Mobile menu expandable sections */
.mm-toggle { text-align: left; background: none; border: none; cursor: pointer; }
.mm-icon { position: relative; flex-shrink: 0; width: 24px; height: 24px; color: var(--color-forest); }
.mm-icon::before, .mm-icon::after {
  content: ""; position: absolute; top: 50%; left: 50%;
  transform: translate(-50%, -50%); background: currentColor; transition: opacity 0.2s ease;
}
.mm-icon::before { width: 14px; height: 1.5px; }
.mm-icon::after { width: 1.5px; height: 14px; }
.mm-item.is-open .mm-icon::after { opacity: 0; }
/* the open row grows and drops its rule onto the expanded box instead */
.mm-item.is-open .mm-toggle { height: auto; padding-top: 12px; padding-bottom: 0; border-bottom: none; }
.mm-item.is-open { border-bottom: 1px solid var(--color-green-10); }
.mm-sub { overflow: hidden; max-height: 0; transition: max-height 0.35s ease; }
.mm-item.is-open .mm-sub { max-height: 320px; }
.mm-sub__inner { display: flex; flex-direction: column; gap: 16px; padding: 24px var(--container-pad) 24px; }
.mm-sub a {
  font-family: var(--font-body); font-size: 14px; line-height: 22px;
  color: var(--color-green-50); transition: color 0.2s ease;
}
.mm-sub a:hover { color: var(--color-forest); }

/* ==========================================================================
   Footer
   ========================================================================== */
.site-footer {
  background-color: var(--color-night);
  color: var(--color-almost-white);
  padding: 60px 0 28px;
}
.site-footer--forest { background-color: var(--color-forest); }
.site-footer--deep-blue { background-color: var(--color-deep-blue); }
.site-footer--light { background-color: var(--color-almost-white); color: var(--color-night); }
/* light-green footer (matches the Offices block) — forest logo/text, green muted tones */
.site-footer--light-green { background-color: var(--color-light-green); color: var(--color-forest); border-top: 1px solid var(--color-green-10); }
.site-footer--light-green .logo--light,
.site-footer--light-green .logo--light .logo__word { color: var(--color-forest); }
.site-footer--light-green .footer-brand__tagline { color: var(--color-green-50); }
.site-footer--light-green .footer-col__title { color: var(--color-green-50); }
.site-footer--light-green .footer-col__list a { color: var(--color-forest); }
.site-footer--light-green .footer-social a { color: var(--color-green-50); }
.site-footer--light-green .site-footer__bottom { border-top-color: var(--color-green-10); color: var(--color-green-50); }
/* light-blue footer (matches the Offices block on contact) — the same
   treatment on navy tokens */
.site-footer--light-blue { background-color: var(--color-light-blue); color: var(--color-night); border-top: 1px solid var(--color-blue-10); }
.site-footer--light-blue .logo--light,
.site-footer--light-blue .logo--light .logo__word { color: var(--color-night); }
.site-footer--light-blue .footer-brand__tagline { color: var(--color-blue-50); }
.site-footer--light-blue .footer-col__title { color: var(--color-blue-50); }
.site-footer--light-blue .footer-col__list a { color: var(--color-night); }
.site-footer--light-blue .footer-social a { color: var(--color-blue-50); }
.site-footer--light-blue .site-footer__bottom { border-top-color: var(--color-blue-10); color: var(--color-blue-50); }

.site-footer__grid {
  display: grid;
  grid-template-columns: 1.4fr repeat(4, 1fr);
  gap: 40px;
}
.footer-brand__tagline {
  margin-top: 16px;
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 20px;
  color: var(--color-gray-40);
  max-width: 220px;
}
.site-footer--light .footer-brand__tagline { color: var(--color-blue-50); }

.footer-col__title {
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 400;
  color: var(--color-gray-40);
  margin-bottom: 18px;
}
.site-footer--light .footer-col__title { color: var(--color-blue-50); }
.footer-col__list li + li { margin-top: 12px; }
.footer-col__list a {
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 20px;
  color: var(--color-almost-white);
  transition: opacity 0.2s ease;
}
.site-footer--light .footer-col__list a { color: var(--color-night); }
.footer-col__list a:hover { opacity: 0.6; }

/* desktop: social lives under the tagline inside .footer-brand.
   mobile: a duplicate (.footer-social--mobile) shows after the columns. */
.footer-social { display: flex; gap: 14px; margin-top: 28px; }
.footer-social--mobile { display: none; }
.footer-social a { display: inline-flex; width: 20px; height: 20px; color: var(--color-almost-white); }
.site-footer--light .footer-social a { color: var(--color-night); }
.footer-social a:hover { opacity: 0.6; }

.site-footer__bottom {
  display: flex;
  align-items: center;
  gap: 24px;
  margin-top: 56px;
  padding-top: 20px;
  border-top: 1px solid var(--color-gray-10);
  font-family: var(--font-body);
  font-size: 13px;
  color: var(--color-gray-40);
}
.site-footer--light .site-footer__bottom {
  border-top-color: var(--color-blue-10);
  color: var(--color-blue-50);
}
.site-footer__bottom a { color: inherit; }
.site-footer__bottom a:hover { opacity: 0.7; }
/* Wider legal row for the listed-company footer (name/exchange/adviser on
   the left, policy links on the right), instead of the plain 2-item row. */
.site-footer__bottom--wide { justify-content: space-between; flex-wrap: wrap; row-gap: 8px; }
.site-footer__bottom--wide .footer-legal,
.site-footer__bottom--wide .footer-policies { display: flex; flex-wrap: wrap; gap: 24px; }

/* ==========================================================================
   Form elements
   ========================================================================== */
.field { display: flex; flex-direction: column; gap: 8px; }
.field__label {
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 500;
  color: var(--color-blue-50);
}
.field__control {
  width: 100%;
  height: 44px;
  padding: 12px 0;
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--color-night);
  background-color: transparent;
  border: none;
  border-bottom: 1px solid var(--color-blue-10);
  transition: border-color 0.2s ease;
}
.field__control::placeholder { color: var(--color-blue-40); }
.field__control:focus { outline: none; border-bottom-color: var(--color-night); }
textarea.field__control { height: auto; min-height: 88px; resize: vertical; }
.field__hint { font-family: var(--font-body); font-size: 12px; color: var(--color-blue-40); }

/* Dark form context (Night background) */
.form--dark .field__label { color: var(--color-gray-40); }
.form--dark .field__control {
  color: var(--color-almost-white);
  border-bottom-color: var(--color-gray-10);
}
.form--dark .field__control::placeholder { color: var(--color-gray-40); }
.form--dark .field__control:focus { border-bottom-color: var(--color-almost-white); }

select.field__control { appearance: none; -webkit-appearance: none; cursor: pointer; }

/* ==========================================================================
   Cookies banner
   ========================================================================== */
/* Cookie notice — a 343px light card, not a dark bar (Figma 1051:27838) */
.cookies {
  position: fixed; left: 24px; bottom: 24px; z-index: 300;
  width: 343px; max-width: calc(100% - 32px);
  display: flex; flex-direction: column; gap: 16px;
  padding: 16px; overflow: hidden;
  background-color: var(--color-almost-white); color: var(--color-forest);
  box-shadow: 0 16px 40px rgba(23, 34, 58, 0.12);
}
.cookies__group { display: flex; flex-direction: column; gap: 4px; }
.cookies__head { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.cookies__title { font-family: var(--font-heading); font-weight: 400; font-size: 20px; line-height: 22px; letter-spacing: -0.2px; color: var(--color-forest); }
.cookies__close { flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; color: var(--color-forest); }
.cookies__text { max-width: 283px; font-family: var(--font-body); font-size: 12px; line-height: 16px; color: var(--color-green-50); }
.cookies__accept { align-self: flex-start; padding: 0; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-forest); text-decoration: underline; text-underline-position: from-font; }
.cookies.is-hidden { display: none; }

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width: 1024px) {
  :root { --container-pad: 40px; --section-gap: 80px; }
  .h1 { font-size: 64px; }
  .h2 { font-size: 48px; }
  .h3 { font-size: 34px; }
  /* footer: brand full width, menu 2x2, social row below the columns */
  .site-footer__grid { grid-template-columns: 1fr 1fr; gap: 40px 32px; }
  .footer-brand { grid-column: 1 / -1; }
  .footer-brand .footer-social { display: none; }        /* hide desktop copy */
  .footer-social--mobile { display: flex; grid-column: 1 / -1; margin-top: 0; }
}

/* Switch to the burger menu once the centered nav no longer fits (tablet). */
@media (max-width: 992px) {
  .site-nav,
  .site-header__actions { display: none; }
  .burger { display: inline-flex; }
}

@media (max-width: 768px) {
  :root { --container-pad: 16px; --section-gap: 56px; }
  .h1 { font-size: 44px; letter-spacing: -1px; }
  .h2 { font-size: 36px; letter-spacing: -1px; }
  .h3 { font-size: 28px; }
  .h4 { font-size: 24px; }
  .site-footer__grid { gap: 32px; }
  .site-footer__bottom { flex-direction: column; align-items: flex-start; gap: 8px; }
  .site-footer__bottom--wide .footer-legal,
  .site-footer__bottom--wide .footer-policies { flex-direction: column; gap: 8px; }
  .cookies { left: 16px; right: 16px; bottom: 16px; max-width: none; }
}

/* ===== assets/css/home.css ===== */
/* ==========================================================================
   Home page sections
   ========================================================================== */

/* ---------- Hero ---------- */
.hero {
  position: relative;
  overflow: hidden;
  background-color: var(--color-forest);
  min-height: 736px;
  display: flex;
  align-items: flex-end;
  padding: 32px 0;
}
.hero__bg {
  position: absolute;
  top: 0;
  left: 56px;
  width: 1322px;
  max-width: none;
  pointer-events: none;
  user-select: none;
}
/* Home hero artwork — a horizontal video prepared to sit in the block as-is
   (no negative offsets). It covers the section; object-fit keeps it filling
   whatever the hero's aspect ratio works out to. Muted + loop + playsinline
   so autoplay is allowed. pointer-events:none so it never eats clicks. */
.hero__video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top;
  pointer-events: none;
  user-select: none;
}
/* keeps the headline and stats legible over the footage */
.hero::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(180deg, transparent 34%, rgba(23,58,44,0.72) 78%);
}
.hero__inner {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 32px;
  width: 100%;
}
.hero__content {
  display: flex;
  flex-direction: column;
  gap: 76px;
  width: 711px;
  max-width: 100%;
}
.hero__title {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 84px;
  line-height: 0.9;
  letter-spacing: -1.26px;
  color: var(--color-light-green);
}
.hero__text {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-light-green);
  max-width: 703px;
}
.hero__text a {
  font-size: 14px;
  line-height: 20px;
  text-decoration: underline;
  text-underline-position: from-font;
}
.hero__buttons { display: flex; }
.hero__buttons .btn--ghost { border-color: var(--color-gray-50); color: var(--color-light-green); }
.hero__buttons .btn--ghost:hover { border-color: var(--color-gray-40); color: var(--color-almost-white); }

.hero__stats {
  flex-shrink: 0;
  width: 201px;
  display: flex;
  flex-direction: column;
  gap: 32px;
  padding: 16px 0 16px 32px;
  border-left: 1px solid var(--color-gray-50);
}
.hero__stat { width: 162px; }
.hero__stat h3 {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 40px;
  line-height: 1;
  letter-spacing: -0.4px;
  color: var(--color-light-green);
}
.hero__stat p {
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 22px;
  color: var(--color-light-green);
}
.hero__stat--muted { opacity: 0.1; }

/* ---------- Asset management (Three capabilities) ---------- */
.capabilities {
  background-color: var(--color-almost-white);
  padding: 120px 0;
}
.capabilities__inner {
  display: grid;
  grid-template-columns: 4fr 8fr;
  align-items: start;
  width: 100%;
}
@media (max-width: 992px) { .capabilities__inner { grid-template-columns: 1fr; row-gap: 32px; } }
.capabilities__intro {
  max-width: 302px;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-night);
  opacity: 0.5;
}
.capabilities__main {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 80px;
}
@media (max-width: 992px) { .capabilities__intro { margin-bottom: 32px; } }
.capabilities__title {
  padding: 0 16px;
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 62px;
  line-height: 0.9;
  letter-spacing: -0.93px;
  color: var(--color-night);
}
.capabilities__group { display: flex; flex-direction: column; gap: 20px; }
.cap-label {
  padding-left: 16px;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-night);
  opacity: 0.5;
}

/* dark capability card */
.cap-card {
  position: relative;
  overflow: hidden;
  height: 360px;
  padding: 16px 32px 32px 16px;
  background-color: var(--color-night);
  border-top: 1px solid var(--color-blue-10);
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cap-card__title {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 40px;
  line-height: 1;
  letter-spacing: -0.4px;
  color: var(--color-almost-white);
  white-space: nowrap;
}
.cap-card__body {
  position: relative;
  z-index: 1;
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  color: var(--color-almost-white);
}
.cap-card__desc {
  width: 436px;
  max-width: 100%;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  opacity: 0.6;
}
.cap-card__features {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  column-gap: 43px;
  row-gap: 28px;
  width: 426px;
  max-width: 100%;
}
.cap-card__features p {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 20px;
  line-height: 22px;
  letter-spacing: -0.2px;
}
.cap-card__graphic {
  position: absolute;
  top: -1px;
  right: 0;
  width: 509px;
  height: 360px;
  pointer-events: none;
}

/* On-Chain / Financing — expand on hover (desktop) / click (mobile) */
.cap-extend { display: flex; align-items: flex-start; }
.cap-extend__col {
  flex: 1;
  min-width: 0;
  padding: 16px 32px 16px 16px;
  border-top: 1px solid var(--color-blue-10);
}
.cap-extend__col .cap-label { padding-left: 0; margin-bottom: 16px; }
.cap-extend__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  width: 100%;
  padding: 0;
  background: none;
  border: 0;
  text-align: left;
  cursor: pointer;
  color: var(--color-night);
}
.cap-extend__head h3 {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 40px;
  line-height: 1;
  letter-spacing: -0.4px;
  color: var(--color-night);
  white-space: nowrap;
}
.cap-extend__toggle { flex-shrink: 0; position: relative; width: 40px; height: 40px; }
.cap-extend__arrow { font-family: var(--font-heading); font-size: 40px; line-height: 1; opacity: 0; transition: opacity 0.2s ease; }
.cap-extend__plus { display: none; }
.cap-extend__panel { overflow: hidden; max-height: 0; opacity: 0; transition: max-height 0.35s ease, opacity 0.35s ease; }
.cap-extend__panel-inner { padding-top: 24px; }
.cap-extend__desc {
  max-width: 383px;
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 22px;
  color: var(--color-blue-50);
}

/* Desktop: columns stay side by side; hovering a column reveals its
   description + arrow in place (no restacking). */
@media (min-width: 993px) {
  .cap-extend__col:hover .cap-extend__panel { max-height: 220px; opacity: 1; }
  .cap-extend__col:hover .cap-extend__arrow { opacity: 1; }
}

/* ---------- Strategies (Built for institutional allocators) ---------- */
.strategies {
  background-color: var(--color-blue-5);
  padding: 120px 0;
}
.strategies__inner {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 80px;
}
.strategies__head {
  padding-left: 16px;
  width: 907px;
  max-width: 100%;
  display: flex;
  flex-direction: column;
}
.strategies__head h2,
.strategies__head p {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 40px;
  line-height: 1;
  letter-spacing: -0.4px;
  color: var(--color-night);
}
.strategies__head p { opacity: 0.4; width: 763px; max-width: 100%; }
.strategies__body { display: flex; flex-direction: column; gap: 4px; }
.strategies__label {
  padding-left: 16px;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-blue-50);
}
.strategies__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  border-top: 1px solid var(--color-blue-10);
  padding: 80px 32px 64px 0;
}
.strategy-card {
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 40px;
}
.strategy-card__head { display: flex; flex-direction: column; gap: 8px; width: 302px; max-width: 100%; }
.strategy-card__tag {
  font-family: var(--font-heading);
  font-style: italic;
  font-size: 16px;
  line-height: 20px;
  color: var(--color-blue-50);
}
.strategy-card__title {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 40px;
  line-height: 1;
  letter-spacing: -0.4px;
  color: var(--color-night);
}
.strategy-card__desc {
  width: 302px;
  max-width: 100%;
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 22px;
  color: var(--color-night);
  -webkit-mask-image: linear-gradient(180deg, #000 0%, transparent 65%);
  mask-image: linear-gradient(180deg, #000 0%, transparent 65%);
}
.strategies__all {
  width: 470px;
  max-width: 100%;
  display: inline-flex;
  align-items: center;
  padding: 4px 32px 4px 0;
  border-bottom: 1px solid var(--color-night);
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-night);
}

/* ---------- Manifesto (Why institutions choose Hilbert) ---------- */
.manifesto {
  position: relative;
  overflow: hidden;
  background-color: var(--color-forest);
  min-height: 800px;
  padding: 24px 32px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  text-align: center;
  color: var(--color-almost-white);
}
.manifesto__bg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  pointer-events: none;
}
.manifesto__top,
.manifesto__mid,
.manifesto__logo { position: relative; z-index: 1; }
.manifesto__top {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  width: 305px;
  max-width: 100%;
}
.manifesto__mid {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 24px;
  width: 1185px;
  max-width: 100%;
}
.manifesto__mid h2 {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 62px;
  line-height: 0.9;
  letter-spacing: -0.93px;
}
.manifesto__mid p {
  font-family: var(--font-heading);
  font-style: italic;
  font-size: 16px;
  line-height: 20px;
}
.manifesto__logo {
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 16px;
  letter-spacing: 4px;
  text-transform: uppercase;
}

/* ---------- Why Hilbert (accordion) ---------- */
.why {
  background-color: var(--color-light-green);
  padding: 120px 0;
}
.why__label {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-green-50);
}
.why__list { width: 100%; }
.why-item { }
.why-item + .why-item { margin-top: 40px; }
.why-item__title {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 40px;
  line-height: 1;
  letter-spacing: -0.4px;
  color: var(--color-forest);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  width: 100%;
  text-align: left;
}
.why-item__icon { position: relative; flex-shrink: 0; width: 28px; height: 28px; font-size: 0; align-self: flex-start; }
.why-item__icon::before, .why-item__icon::after {
  content: ""; position: absolute; top: 50%; left: 50%;
  transform: translate(-50%, -50%); background: currentColor;
}
.why-item__icon::before { width: 100%; height: 1.5px; }
.why-item__icon::after { width: 1.5px; height: 100%; transition: opacity 0.2s ease; }
.why-item.is-open .why-item__icon::after { opacity: 0; }
.why-item__panel {
  overflow: hidden;
  max-height: 0;
  transition: max-height 0.3s ease;
}
.why-item.is-open .why-item__panel { max-height: 320px; }
.why-item__panel-inner {
  border-top: 1px solid var(--color-blue-10);
  margin-top: 16px;
  padding: 24px 32px 16px 0;
  display: flex;
  flex-direction: column;
  gap: 32px;
}
.why-grid { display: flex; gap: 32px; }
.why-sub { width: 302px; max-width: 100%; }
.why-sub h4 {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 20px;
  line-height: 22px;
  letter-spacing: -0.2px;
  color: var(--color-forest);
  margin-bottom: 8px;
}
.why-sub p {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-forest);
  opacity: 0.6;
}
.why__panel-link {
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 20px;
  color: var(--color-forest);
  text-decoration: underline;
  text-underline-position: from-font;
}

/* ---------- Standards (Built to the standards) ---------- */
.standards {
  background-color: var(--color-blue-5);
  padding: 120px 0;
  overflow-x: clip; /* bleeding feature headings don't create a page scrollbar */
}
.standards__inner { display: flex; flex-direction: column; gap: 80px; }
.standards__head { display: grid; grid-template-columns: 4fr 8fr; align-items: start; }
.standards__head .label {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-blue-50);
}
.standards__head h2 {
  width: 100%;
  max-width: 100%;
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 62px;
  line-height: 0.9;
  letter-spacing: -0.93px;
  color: var(--color-night);
}
.standards__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  column-gap: 32px;
  row-gap: 40px;
  padding-right: 32px;
}
.std-feature { max-width: 340px; min-width: 0; }
.std-feature__icon { width: 24px; height: 24px; margin-bottom: 16px; }
.std-feature h3 {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 40px;
  line-height: 1;
  letter-spacing: -0.4px;
  color: var(--color-night);
  margin-bottom: 8px;
  /* keep on one line and let it bleed past the grid cell without
     widening the track (min-width:0 above) or scrolling the page */
  white-space: nowrap;
}
.std-feature p {
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 22px;
  color: var(--color-blue-50);
}
.standards__links {
  display: flex;
  width: 66.6667%;
  max-width: 100%;
  margin-left: auto;
  border-bottom: 1px solid var(--color-night);
}
@media (max-width: 992px) { .standards__links { width: 100%; } }
.standards__links a {
  flex: 1;
  padding: 10px 16px;
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 13px;
  line-height: 16px;
  color: var(--color-night);
  transition: opacity 0.2s ease;
}
.standards__links a:first-child { padding-left: 0; border-right: 1px solid var(--color-night); }
.standards__links a:hover { opacity: 0.6; }

/* ---------- Research ---------- */
.research {
  background-color: var(--color-almost-white);
  padding: 120px 0;
}
.research__label {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-blue-50);
}
.research__main { width: 100%; min-width: 0; display: flex; flex-direction: column; gap: 100px; }
.research__block { display: flex; flex-direction: column; gap: 80px; }
.research__title {
  width: 690px;
  max-width: 100%;
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 62px;
  line-height: 0.9;
  letter-spacing: -0.93px;
  color: var(--color-night);
}
.research__cards { display: flex; flex-direction: column; align-items: flex-end; width: 100%; }
.research-featured {
  position: relative;
  overflow: hidden;
  width: 955px;
  max-width: 100%;
  min-height: 276px;
  padding: 16px;
  background-color: var(--color-night);
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.research-featured__graphic {
  position: absolute;
  right: -40px;
  top: 50%;
  transform: translateY(-50%);
  height: 100%;
  pointer-events: none;
}
.research-featured__content {
  position: relative;
  z-index: 1;
  width: 302px;
  max-width: 100%;
  display: flex;
  flex-direction: column;
  gap: 40px;
}
.research-featured__tag {
  font-family: var(--font-heading);
  font-style: italic;
  font-size: 16px;
  line-height: 20px;
  color: var(--color-gray-40);
  margin-bottom: 8px;
}
.research-featured__title {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 28px;
  line-height: 1;
  letter-spacing: -0.28px;
  color: var(--color-almost-white);
}
.research-featured__desc {
  width: 434px;
  max-width: 100%;
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 22px;
  color: var(--color-gray-40);
}
.research-articles { display: flex; gap: 32px; width: 955px; max-width: 100%; }
.research-article {
  border-left: 1px solid var(--color-blue-10);
  padding: 64px 16px 0;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 40px;
}
.research-article:first-child { width: 453px; flex-shrink: 0; }
.research-article:last-child { flex: 1; min-width: 0; }
.research-article__tag {
  font-family: var(--font-heading);
  font-style: italic;
  font-size: 16px;
  line-height: 20px;
  color: var(--color-blue-50);
  margin-bottom: 8px;
}
.research-article__title {
  width: 368px;
  max-width: 100%;
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 28px;
  line-height: 1;
  letter-spacing: -0.28px;
  color: var(--color-night);
}
.research-article__desc {
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 22px;
  color: var(--color-night);
  -webkit-mask-image: linear-gradient(180deg, #000 1%, transparent 67%);
  mask-image: linear-gradient(180deg, #000 1%, transparent 67%);
}
.research__visit {
  width: 955px;
  max-width: 100%;
  padding: 4px 32px 4px 0;
  border-bottom: 1px solid var(--color-night);
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-night);
}
.research__news { display: flex; flex-direction: column; gap: 80px; padding: 120px 0; }
.research__news-head { width: 907px; max-width: 100%; }
.research__news-head h2,
.research__news-head p {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 40px;
  line-height: 1;
  letter-spacing: -0.4px;
}
.research__news-head h2 { color: var(--color-night); }
.research__news-head p { color: var(--color-blue-50); width: 872px; max-width: 100%; }
.research__news-form {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  border-bottom: 1px solid var(--color-night);
}
.research__news-form input {
  flex: 1;
  min-width: 0;
  padding: 10px 16px 10px 0;
  border: none;
  background: transparent;
  font-family: var(--font-body);
  font-size: 16px;
  color: var(--color-night);
}
.research__news-form input::placeholder { color: var(--color-blue-50); }
.research__news-form input:focus { outline: none; }
.research__news-form button {
  padding: 10px 16px;
  border-left: 1px solid var(--color-night);
  font-family: var(--font-body);
  font-size: 16px;
  color: var(--color-night);
}

/* ---------- CTA ---------- */
.home-cta {
  position: relative;
  overflow: hidden;
  background-color: var(--color-forest);
  min-height: 723px;
  padding: 0 32px 120px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  gap: 24px;
  text-align: center;
}
.home-cta__graphic {
  position: absolute;
  top: -60px;
  left: 50%;
  transform: translateX(-50%);
  width: 1381px;
  max-width: none;
  pointer-events: none;
}
.home-cta__tag,
.home-cta__title,
.home-cta__buttons { position: relative; z-index: 1; }
.home-cta__tag {
  font-family: var(--font-heading);
  font-style: italic;
  font-size: 16px;
  line-height: 20px;
  color: var(--color-almost-white);
}
.home-cta__title {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 84px;
  line-height: 0.9;
  letter-spacing: -1.26px;
  color: var(--color-almost-white);
}
.home-cta__buttons { display: flex; }
.home-cta__buttons .btn--ghost { border-color: var(--color-gray-50); color: var(--color-almost-white); }
.home-cta__buttons .btn--ghost:hover { border-color: var(--color-gray-40); }

@media (max-width: 1024px) {
  .hero__title { font-size: 64px; }
  .manifesto__mid h2 { font-size: 44px; }
  .standards__head { flex-direction: column; gap: 24px; }
  .standards__head h2 { font-size: 44px; width: 100%; }
  .standards__grid { grid-template-columns: 1fr 1fr; padding-right: 0; }
  .std-feature h3 { white-space: normal; }
  .standards__links { width: 100%; }
  .research { flex-direction: column; gap: 24px; }
  .research__label { width: 100%; }
  .research__title { font-size: 44px; }
  .research-featured, .research-articles, .research__visit { width: 100%; }
  .research-article:first-child { width: 50%; }
  .research__news-head h2, .research__news-head p { font-size: 32px; }
  .home-cta__title { font-size: 56px; }
  .why__inner { flex-direction: column; }
  .why__list { width: 100%; }
  .strategies__grid { grid-template-columns: 1fr; gap: 40px; padding: 40px 0; }
  .strategy-card { padding: 0; }
  .strategy-card__desc { color: var(--color-night); background: none; -webkit-background-clip: initial; }
  .strategies__head p { font-size: 34px; }
  .capabilities__inner { flex-direction: column; width: 100%; gap: 32px; }
  .capabilities__main { width: 100%; }
  .capabilities__title { font-size: 48px; }
  .cap-card__graphic { opacity: 0.5; }
}

@media (max-width: 768px) {
  /* Hero — mobile: graphic sits on top, then title/text, stats, buttons.
     The tall top padding lifts the content below the volume graphic. */
  .hero { min-height: 0; padding: 230px 0 32px; }
  .hero__bg { top: -20px; left: 50%; right: auto; transform: translateX(-50%); width: 480px; height: auto; }
  .hero__inner { flex-direction: column; align-items: center; text-align: center; gap: 40px; }
  /* flatten hero__content so buttons can be ordered after the stats */
  .hero__content { display: contents; }
  .hero__content > div:first-child { order: 1; width: 100%; }
  .hero__stats { order: 2; }
  .hero__buttons { order: 3; }
  .hero__title { font-size: 40px; letter-spacing: -0.4px; }
  .hero__text { font-size: 14px; }
  .hero__buttons { width: 100%; display: flex; flex-wrap: nowrap; gap: 0; }
  .hero__buttons .btn { flex: 1; min-width: 0; padding: 13px 12px; overflow: hidden; }
  .hero__buttons .btn__arrow { display: none; }
  .hero__stats { width: 100%; flex-direction: row; text-align: left; gap: 12px; border-left: none; border-bottom: 1px solid var(--color-gray-50); padding: 0 0 16px; }
  .hero__stat { width: auto; flex: 1; min-width: 0; }
  .hero__stat h3 { font-size: 28px; letter-spacing: -0.28px; }
  .hero__stat p { font-size: 12px; line-height: 16px; }

  .capabilities { padding: 56px 0; }
  .capabilities__title { font-size: 32px; padding: 0; }
  .cap-card { height: auto; }
  .cap-card__desc, .cap-card__features { width: 100%; }
  .cap-card__title { font-size: 28px; }
  .cap-card__features p { font-size: 16px; letter-spacing: -0.16px; }
  .cap-card__graphic { display: none; }
  .cap-extend__head h3 { font-size: 28px; }
}

@media (max-width: 768px) {
  .strategies__head h2, .strategies__head p { font-size: 24px; letter-spacing: -0.24px; }
  .strategies__head { padding-left: 0; }
  .strategies__label { padding-left: 0; }
  .cap-label { padding-left: 0; font-size: 14px; }
  /* Strategy cards become a horizontal slider (matches mobile design) */
  .strategies__grid {
    display: flex; grid-template-columns: none;
    margin-left: calc(-1 * var(--container-pad)); margin-right: calc(-1 * var(--container-pad));
    padding: 40px var(--container-pad); gap: 0; overflow-x: auto;
    scroll-snap-type: x proximity; scroll-padding-left: var(--container-pad); scrollbar-width: none;
  }
  .strategies__grid::-webkit-scrollbar { display: none; }
  .strategy-card { flex: 0 0 300px; scroll-snap-align: start; padding: 16px 32px 16px 16px; gap: 24px; }
  .strategy-card__head { width: 100%; gap: 10px; }
  .strategy-card__tag { font-size: 16px; }
  .strategy-card__title { font-size: 28px; letter-spacing: -0.28px; }
  .strategy-card__desc {
    width: 100%; color: var(--color-night);
    -webkit-mask-image: linear-gradient(180deg, #000 0%, transparent 55%);
    mask-image: linear-gradient(180deg, #000 0%, transparent 55%);
  }
  .manifesto { min-height: 0; padding: 48px 16px; }
  .manifesto__mid h2 { font-size: 32px; }
  .standards__head h2 { font-size: 32px; }
  .standards__grid { grid-template-columns: 1fr; }
  .std-feature h3 { font-size: 28px; }
  .research__title { font-size: 32px; }
  .research-featured__graphic { display: none; }
  .research-articles { flex-direction: column; gap: 40px; }
  .research-article:first-child { width: 100%; }
  .research-article { padding: 32px 0 0; border-left: none; border-top: 1px solid var(--color-blue-10); }
  .research-article__title { font-size: 24px; }
  .research__news-head h2, .research__news-head p { font-size: 24px; }
  .home-cta { min-height: 0; padding: 200px 16px 64px; }
  .home-cta__title { font-size: 40px; }
  .home-cta__buttons { flex-wrap: wrap; justify-content: center; gap: 12px; }
}

/* ---------- Hero page variant (forest/deep-blue + breadcrumb + labeled stats) ---------- */
.hero--page .hero__title,
.hero--page .hero__text { color: var(--color-almost-white); }
.hero--page .hero__stat h3,
.hero--page .hero__stat p { color: var(--color-almost-white); }
.hero--deep { background-color: var(--color-deep-blue); }
.hero__breadcrumb {
  font-family: var(--font-heading);
  font-style: italic;
  font-size: 16px;
  line-height: 20px;
  color: var(--color-almost-white);
}
.hero__breadcrumb .muted { color: var(--color-gray-40); }
.hero--wide .hero__content { width: 996px; }
@media (max-width: 1024px) { .hero--wide .hero__content { width: 100%; } }

/* Why-Hilbert accordion — mobile (Figma 375) */
@media (max-width: 768px) {
  .why { padding: 56px 0; }
  .why-item__title { font-size: 24px; }
  .why-item + .why-item { margin-top: 24px; }
  .why-item__icon { width: 24px; height: 24px; }
  .why-item__panel-inner { padding: 16px 0 0; gap: 24px; }
  .why-item.is-open .why-item__panel { max-height: 680px; }
  .why-grid { flex-direction: column; gap: 24px; }
  .why-sub { width: 100%; }
  .why-sub h4 { font-size: 16px; }
  .why-sub p { font-size: 14px; }
}

/* Support & Extend — mobile/tablet: click accordion (≤992), stacked, +/− */
@media (max-width: 992px) {
  .cap-extend { flex-direction: column; }
  .cap-extend__col { padding: 20px 0; }
  .cap-extend__head h3 { white-space: normal; }
  .cap-extend__arrow { display: none; }
  .cap-extend__plus {
    display: block; position: absolute; top: 50%; left: 50%;
    width: 24px; height: 24px; transform: translate(-50%, -50%);
  }
  .cap-extend__toggle { width: 24px; height: 24px; }
  .cap-extend__plus::before, .cap-extend__plus::after {
    content: ""; position: absolute; top: 50%; left: 50%;
    transform: translate(-50%, -50%); background: var(--color-night);
  }
  .cap-extend__plus::before { width: 100%; height: 1.5px; }
  .cap-extend__plus::after { width: 1.5px; height: 100%; transition: opacity 0.2s ease; }
  .cap-extend__col.is-open .cap-extend__plus::after { opacity: 0; }
  .cap-extend__col.is-open .cap-extend__panel { max-height: 260px; opacity: 1; }
}

/* ===== assets/css/company.css ===== */
/* Company page */

/* ---------- Structured complexity ---------- */
.scomplex { background: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-80); }
.scomplex .container { display: flex; flex-direction: column; gap: 44px; }
.scomplex__head { align-items: start; padding-bottom: 40px; }
.scomplex__head .label { max-width: 469px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.scomplex__main { width: 100%; display: flex; flex-direction: column; gap: 44px; }
.scomplex__title { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); }
.scomplex__paras { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; }
.scomplex__paras p { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.scomplex__grid { display: grid; grid-template-columns: repeat(3, 1fr); }
.scomplex-item { border-left: 1px solid var(--color-blue-10); padding: 0 16px; }
.scomplex-item__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
.scomplex-item h4 { font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-night); margin: 8px 0 16px; max-width: 302px; }
.scomplex-item p { font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-blue-50); max-width: 302px; }
@media (max-width: 992px) {
  .scomplex__title { font-size: 40px; }
  .scomplex__paras { grid-template-columns: 1fr; }
  .scomplex__grid { grid-template-columns: 1fr; gap: 24px; }
  .scomplex-item { border-left: none; border-top: 1px solid var(--color-blue-10); padding: 16px 0 0; }
}

/* ---------- Leadership & team ---------- */
.team { background: var(--color-almost-white); padding-top: var(--sp-80); padding-bottom: var(--sp-120); }
.team .container { display: flex; flex-direction: column; gap: var(--sp-80); }
.team__indent { margin-left: 33.3333%; }
.team__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); }
.team__head p { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-blue-50); max-width: 872px; }
.team__block { display: flex; flex-direction: column; gap: 64px; }
.team__label { margin-left: 33.3333%; border-bottom: 1px solid var(--color-blue-10); padding-bottom: 4px; font-family: var(--font-body); font-size: 16px; color: var(--color-blue-50); }
.team__grid { display: grid; grid-template-columns: repeat(3, 1fr); column-gap: 32px; row-gap: 64px; }
.team-member { display: flex; flex-direction: column; gap: 32px; }
.team-member__avatar { background: var(--color-blue-10); min-height: 260px; display: flex; align-items: center; justify-content: center; overflow: hidden; }
.team-member__avatar span { font-family: var(--font-heading); font-size: 40px; letter-spacing: -0.4px; color: var(--color-night); opacity: 0.5; }
.team-member__info { display: flex; flex-direction: column; gap: 16px; }
.team-member__role { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
.team-member__name { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); }
.team-member__info > div { display: flex; flex-direction: column; gap: 8px; }
.team-member__desc { font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-blue-50); max-width: 351px; }
.team__viewall { margin-left: 33.3333%; border-bottom: 1px solid var(--color-night); padding: 4px 32px 4px 0; font-family: var(--font-body); font-size: 16px; color: var(--color-night); display: block; }
@media (max-width: 992px) {
  .team__indent, .team__label, .team__viewall { margin-left: 0; }
  .team__grid { grid-template-columns: 1fr 1fr; column-gap: 16px; row-gap: 40px; }
  .team-member { gap: 16px; }
  .team-member__avatar { min-height: 150px; }
  .team__head p { font-size: 32px; }
}

/* ---------- Deep-blue / forest bands ---------- */
.cband { padding-top: var(--sp-80); padding-bottom: var(--sp-80); }
.cband--deep { background: var(--color-deep-blue); color: var(--color-almost-white); }
.cband--forest { background: var(--color-forest); color: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.cband--center { padding-top: 160px; padding-bottom: 160px; }
.cband--center h2 { max-width: 900px; margin: 0 auto; }
.cband__inner { display: grid; grid-template-columns: 4fr 8fr; align-items: center; gap: 40px; }
.cband--center { text-align: center; }
.cband--center .cband__inner { display: block; }
.cband h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-almost-white); }
.cband--forest h2 { font-size: 40px; }
.cband p { margin-top: 12px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-gray-40); max-width: 620px; }
.cband--center p { margin-left: auto; margin-right: auto; }
.cband__cta { margin-top: 32px; }
@media (max-width: 992px) { .cband__inner { grid-template-columns: 1fr; } .cband h2 { font-size: 40px; } }

/* ---------- Careers / open roles ---------- */
.careers { background: var(--color-light-green); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.careers .container { display: flex; flex-direction: column; gap: var(--sp-120); }
.careers__head { align-items: start; }
.careers__head .label { max-width: 400px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.careers__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-forest); }
.careers__roles { align-items: start; }
.careers__roles > .label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.careers__list { width: 100%; display: flex; flex-direction: column; gap: 40px; }
.role-group__cat { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); margin-bottom: 4px; }
/* Hover paints the grey panel and the arrow; a click opens the bullets, the
   Apply link and the full-length description (Figma 1051:25758 / 1051:25822). */
.role { position: relative; border-top: 1px solid var(--color-green-10); }
.role::before { content: ""; position: absolute; inset: -1px 0 0 -16px; background: var(--color-green-5); opacity: 0; transition: opacity 0.2s ease; }
.role__top {
  position: relative; width: 100%; display: grid; grid-template-columns: 478px 1fr 40px;
  align-items: start; padding: 16px 32px 16px 0; text-align: left; background: none; border: 0; cursor: pointer;
}
.role__title { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-forest); }
.role__desc {
  max-width: 322px; max-height: 0; overflow: hidden; opacity: 0;
  font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50);
  -webkit-mask-image: linear-gradient(180deg, #000 12%, transparent 93%);
  mask-image: linear-gradient(180deg, #000 12%, transparent 93%);
  transition: max-height 0.3s ease, opacity 0.2s ease;
}
.role__arrow { justify-self: end; font-family: var(--font-heading); font-size: 40px; line-height: 1; color: var(--color-forest); opacity: 0; transition: opacity 0.2s ease; }
.role__icon { display: none; justify-self: end; position: relative; width: 28px; height: 28px; color: var(--color-forest); }
.role__icon::before, .role__icon::after { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: currentColor; transition: opacity 0.2s ease; }
.role__icon::before { width: 100%; height: 1.5px; }
.role__icon::after { width: 1.5px; height: 100%; }
.role__reveal { position: relative; max-height: 0; overflow: hidden; opacity: 0; transition: max-height 0.3s ease, opacity 0.2s ease; }
.role__meta { display: grid; grid-template-columns: repeat(4, 1fr); column-gap: 43px; padding-bottom: 16px; }
.role__meta p { font-family: var(--font-heading); font-weight: 400; font-size: 20px; line-height: 22px; letter-spacing: -0.2px; color: var(--color-forest); }
.role__apply { display: inline-block; padding-bottom: 16px; font-family: var(--font-body); font-size: 14px; color: var(--color-forest); text-decoration: underline; text-underline-position: from-font; }
/* hover first, so the opened state below wins where the two overlap */
@media (min-width: 993px) {
  .role:hover::before { opacity: 1; }
  .role:hover .role__arrow { opacity: 1; }
  .role:hover .role__desc { max-height: 88px; opacity: 1; }
}
.role.is-open::before { opacity: 1; }
.role.is-open .role__arrow { opacity: 1; }
.role.is-open .role__desc { max-height: 400px; opacity: 1; -webkit-mask-image: none; mask-image: none; }
.role.is-open .role__icon::after { opacity: 0; }
.role.is-open .role__reveal { max-height: 400px; opacity: 1; }
/* Careers page runs the same block on almost-white */
.careers--light { background: var(--color-almost-white); }
.careers--light .careers__head .label,
.careers--light .careers__roles > .label,
.careers--light .role-group__cat,
.careers--light .role__desc { color: var(--color-blue-50); }
.careers--light .careers__head h2,
.careers--light .role__title, .careers--light .role__arrow, .careers--light .role__icon,
.careers--light .role__meta p, .careers--light .role__apply,
.careers--light .careers__viewall { color: var(--color-night); }
.careers--light .role { border-top-color: var(--color-blue-10); }
.careers--light .role::before { background: var(--color-blue-5); }
.careers--light .careers__viewall { border-bottom-color: var(--color-night); }
.careers__viewall { display: block; border-bottom: 1px solid var(--color-forest); padding: 4px 32px 4px 0; font-family: var(--font-body); font-size: 16px; color: var(--color-forest); }
@media (max-width: 992px) {
  .careers__head, .careers__roles { grid-template-columns: 1fr; row-gap: 24px; }
  .careers__head h2 { font-size: 40px; }
  /* mobile is an accordion: panel always on, edge to edge, plus/minus toggle */
  .role { margin-left: calc(-1 * var(--container-pad)); margin-right: calc(-1 * var(--container-pad)); border-top: none; }
  .role::before { inset: 0; opacity: 1; }
  .role__top { grid-template-columns: 1fr 28px; padding: 16px var(--container-pad); }
  .role__title { grid-area: 1 / 1; }
  .role__icon { grid-area: 1 / 2; }
  .role__desc { grid-area: 2 / 1 / 3 / -1; max-width: none; }
  .role.is-open .role__desc { padding-top: 16px; }
  .role__arrow { display: none; }
  .role__icon { display: block; }
  .role__reveal { padding: 0 var(--container-pad); }
  .role__meta { grid-template-columns: 1fr 1fr; row-gap: 16px; column-gap: 16px; }
}

/* ---------- Principles ---------- */
.principles { background: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.principles__head { align-items: start; margin-bottom: var(--sp-80); }
.principles__head > .label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.principles__intro h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); }
.principles__intro p { margin-top: 32px; max-width: 588px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
/* Horizontal slider: cards run off the right edge. Scrolls with the wheel or
   trackpad natively, and by dragging (see [data-drag-scroll] in main.js). */
.principles__slider {
  display: flex; gap: 8px; overflow-x: auto; overscroll-behavior-x: contain;
  padding-left: var(--container-pad); padding-right: var(--container-pad);
  scrollbar-width: none; cursor: grab;
}
.principles__slider::-webkit-scrollbar { display: none; }
.principles__slider.is-dragging { cursor: grabbing; user-select: none; }
.principle {
  position: relative; overflow: hidden; flex: 0 0 448px; height: 316px;
  background: var(--color-blue-5); padding-top: 16px;
  display: flex; flex-direction: column; justify-content: center;
}
.principle__graphic { position: absolute; left: 120px; top: 117px; width: 708px; height: 708px; max-width: none; opacity: 0.4; pointer-events: none; }
.principle__body { position: relative; z-index: 1; flex: 1; display: flex; flex-direction: column; gap: 8px; padding-left: 16px; }
.principle__label { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
.principle h3 { max-width: 339px; font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-night); }
.principle__desc { max-width: 293px; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-blue-50); }
.principle__num {
  position: relative; z-index: 1; background: var(--color-almost-white);
  border-top: 1px solid var(--color-blue-10); padding: 4px 8px;
  font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-night); opacity: 0.5;
}
@media (max-width: 992px) {
  .principles__head { grid-template-columns: 1fr; row-gap: 24px; margin-bottom: 32px; }
  .principles__intro h2 { font-size: 40px; }
}
@media (max-width: 768px) { .principle { flex: 0 0 300px; } }

/* ---------- Investor relations contact ---------- */
/* Night band: the wireframe volume sits off the left edge, the copy runs in
   the 8-col track with the buttons pinned to the bottom (Figma 1051:14385). */
.ir-contact {
  position: relative; overflow: hidden; background: var(--color-night); color: var(--color-almost-white);
  min-height: 800px; padding-top: var(--sp-120); padding-bottom: var(--sp-120); display: flex;
}
/* the maze SVG strokes are night-coloured, so invert them onto the dark ground */
.ir-contact__bg { position: absolute; left: -280px; top: -150px; width: 1040px; height: 1040px; max-width: none; opacity: 0.4; filter: invert(1); transform: rotate(-25deg); pointer-events: none; }
.ir-contact__inner { position: relative; z-index: 1; display: grid; grid-template-columns: 4fr 8fr; width: 100%; }
.ir-contact__body { grid-column: 2; display: flex; flex-direction: column; justify-content: space-between; gap: 80px; }
.ir-contact__text { display: flex; flex-direction: column; gap: 32px; }
.ir-contact__label { display: none; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-gray-40); }
.ir-contact__text h2 { max-width: 622px; font-family: var(--font-heading); font-weight: 400; font-size: 84px; line-height: 0.9; letter-spacing: -1.26px; color: var(--color-almost-white); }
.ir-contact__desc { max-width: 411px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-gray-40); }
.ir-contact__buttons { display: flex; }
.ir-contact__buttons .btn--ghost { border-color: var(--color-gray-50); color: var(--color-almost-white); }
.ir-contact__buttons .btn--ghost:hover { border-color: var(--color-gray-40); }

/* Brand band: label above, headline centred, wordmark below (Figma 1051:14263) */
.brandband {
  position: relative; overflow: hidden; background: var(--color-night);
  min-height: 800px; padding: 24px 32px; text-align: center;
  display: flex; flex-direction: column; align-items: center; justify-content: space-between;
}
.brandband__bg { position: absolute; left: 0; top: 50%; transform: translateY(-50%); width: 1440px; max-width: none; opacity: 0.1; pointer-events: none; }
.brandband__tag, .brandband__title, .brandband__logo { position: relative; z-index: 1; }
.brandband__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-gray-40); }
.brandband__title { max-width: 966px; font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-almost-white); }
.brandband__logo { display: flex; align-items: center; gap: 8px; color: var(--color-almost-white); }
.brandband__logo .logo__mark { width: 24px; height: 24px; }
.brandband__logo .logo__word { color: var(--color-almost-white); }

@media (max-width: 992px) {
  .ir-contact__inner { grid-template-columns: 1fr; }
  .ir-contact__body { grid-column: 1; }
  .ir-contact__label { display: block; }
  .ir-contact__text { gap: 16px; }
  .ir-contact__text h2 { font-size: 40px; letter-spacing: -0.4px; }
  .ir-contact__desc { max-width: none; }
}
@media (max-width: 768px) {
  .ir-contact { min-height: 700px; }
  .ir-contact__buttons { width: 100%; }
  .ir-contact__buttons .btn { flex: 1; min-width: 0; padding: 13px 12px; }
  .ir-contact__bg { left: -240px; top: -120px; width: 700px; height: 700px; }
  .brandband { min-height: 700px; padding: 16px; }
  .brandband__title { font-size: 40px; letter-spacing: -0.4px; }
  .brandband__logo { transform: scale(0.75); }
}

/* Mobile type scale — verified against Figma 375 frames */
@media (max-width: 768px) {
  .scomplex__title { font-size: 28px; }
  .scomplex-item h4 { font-size: 28px; }
  .team__head h2, .team__head p { font-size: 24px; }
  .team__label { font-size: 14px; }
  .team-member__name { font-size: 20px; }
  .team-member__role { font-size: 14px; }
  .team-member__desc { font-size: 14px; }
  .cband--forest h2 { font-size: 40px; }
  .cband--deep h2, .cband--center h2 { font-size: 24px; }
  .careers__head h2 { font-size: 32px; }
  .role__title { font-size: 24px; }

  /* Careers page reuses these classes at larger sizes in the mobile design */
  .page-careers .scomplex__title { font-size: 32px; }
  .page-careers .role__title { font-size: 28px; }
}

/* ===== assets/css/insights.css ===== */
/* Insights page */

/* ---------- News & announcements ---------- */
.news { background: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-80); }
.news .container { display: flex; flex-direction: column; gap: var(--sp-80); }
.news__head { align-items: center; }
.news__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); }
.search { display: inline-flex; align-items: center; gap: 4px; width: 320px; height: 44px; padding: 10px 4px; border-bottom: 1px solid var(--color-blue-50); font-family: var(--font-body); font-size: 16px; color: var(--color-blue-50); }
.search svg { width: 20px; height: 20px; }
.news__body { align-items: stretch; }
.news__list { display: flex; flex-direction: column; }
.news-item { border-bottom: 1px solid var(--color-blue-10); padding: 24px 16px 24px 32px; display: flex; flex-direction: column; gap: 8px; }
.news-item__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
.news-item__title { font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-night); max-width: 334px; }
.news-item__desc { max-width: 302px; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-night); -webkit-mask-image: linear-gradient(180deg, #000 1%, transparent 85%); mask-image: linear-gradient(180deg, #000 1%, transparent 85%); }
.news-item .link { margin-top: 4px; }
.news__featured { position: relative; overflow: hidden; background: var(--color-blue-10); min-height: 643px; display: flex; align-items: flex-end; }
.news__featured-maze { position: absolute; left: 50%; top: 55%; transform: translate(-50%, -50%); width: 1030px; max-width: none; opacity: 0.5; pointer-events: none; }
.news__featured-card { position: relative; z-index: 1; background: var(--color-almost-white); margin: 16px; padding: 16px; width: calc(100% - 32px); display: flex; flex-direction: column; gap: 16px; }
.news__featured-card .tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
.news__featured-card h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); }
.news__featured-card a { font-family: var(--font-body); font-size: 14px; color: var(--color-night); text-decoration: underline; text-underline-position: from-font; }
@media (max-width: 992px) {
  .news__head h2 { font-size: 40px; }
  .news__featured { min-height: 420px; }
  .news__featured-card { width: auto; }
}

/* ---------- In the media ---------- */
.media { background: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.media .container { display: flex; flex-direction: column; gap: var(--sp-80); }
.media__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1.05; letter-spacing: -0.4px; color: var(--color-night); max-width: 640px; }
.media__head h2 .muted { color: var(--color-blue-50); }
.media__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--grid-gap-lg); }
.media-card { display: flex; flex-direction: column; gap: 16px; }
.media-card__img { height: 176px; background: var(--color-blue-10); overflow: hidden; position: relative; }
.media-card__img img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0.5; }
.media-card__tag { font-family: var(--font-heading); font-style: italic; font-size: 14px; line-height: 20px; color: var(--color-blue-50); }
.media-card__title { font-family: var(--font-heading); font-weight: 400; font-size: 24px; line-height: 1.05; letter-spacing: -0.24px; color: var(--color-night); }
.media-card .link { color: var(--color-night); text-decoration: underline; text-underline-position: from-font; }
@media (max-width: 992px) { .media__grid { grid-template-columns: 1fr; } }

/* ---------- Company news band (deep-blue) ---------- */
.company-band { background: var(--color-deep-blue); color: var(--color-almost-white); padding-top: var(--sp-80); padding-bottom: var(--sp-80); }
.company-band__inner { display: grid; grid-template-columns: 4fr 8fr; align-items: end; column-gap: 40px; }
.company-band__head .label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-gray-40); }
.company-band__head h2 { margin-top: 40px; font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-almost-white); }
.company-band__desc { margin-top: 12px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-gray-40); max-width: 520px; }
.company-band__form { display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid var(--color-gray-40); }
.company-band__form input { flex: 1; min-width: 0; padding: 12px 16px 12px 0; border: none; background: transparent; font-family: var(--font-body); font-size: 16px; color: var(--color-almost-white); }
.company-band__form input::placeholder { color: var(--color-gray-40); }
.company-band__form input:focus { outline: none; }
.company-band__form button { flex-shrink: 0; padding: 12px 16px; border: none; border-left: 1px solid var(--color-gray-40); background: none; font-family: var(--font-body); font-size: 16px; color: var(--color-almost-white); cursor: pointer; }
@media (max-width: 992px) { .company-band__inner { grid-template-columns: 1fr; row-gap: 40px; align-items: stretch; } .company-band__head h2 { margin-top: 16px; } }

/* ---------- Research & Insights ---------- */
.ri { background: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.ri .container { display: flex; flex-direction: column; gap: var(--sp-80); }
.ri__head { display: grid; grid-template-columns: 4fr 8fr; align-items: start; }
.ri__head p { max-width: 220px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.ri__head h2 { text-align: center; font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); }
/* Night band bleeding past the label column, with a light card set to the
   right. Figma 1051:11356 — the ascii sits at 10% over the night ground. */
.ri__featured {
  position: relative; overflow: hidden; background: var(--color-night);
  display: flex; flex-direction: column; align-items: flex-end; justify-content: center;
  padding: 16px 16px 16px 0;
}
.ri__featured-bg { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 1376px; max-width: none; opacity: 0.1; pointer-events: none; }
.ri__card {
  position: relative; z-index: 1; width: 908px; max-width: 100%; min-height: 300px;
  background: var(--color-blue-5); padding-top: 16px;
  display: flex; flex-direction: column; justify-content: space-between;
}
.ri__card-top { display: flex; align-items: flex-start; gap: 16px; padding: 0 16px; }
.ri__f-title { display: flex; flex-direction: column; gap: 8px; width: 471px; max-width: 100%; }
.ri__f-title .tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
.ri__f-title h3 { max-width: 383px; font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); }
/* the copy fades into the card as it descends */
.ri__f-desc {
  width: 309px; font-family: var(--font-body); font-size: 14px; line-height: 22px;
  background-image: linear-gradient(179deg, var(--color-night) 2%, var(--color-blue-5) 91%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.ri__card-bottom { border-top: 1px solid var(--color-blue-10); display: flex; align-items: center; padding: 8px 16px; }
.ri__card-bottom span { width: 470px; max-width: 60%; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.ri__card-bottom a { font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-night); text-decoration: underline; text-underline-position: from-font; }
.ri__cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--grid-gap-lg); }
.ri-col { display: flex; flex-direction: column; gap: 16px; }
.ri-col__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; color: var(--color-blue-50); }
.ri-col h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); }
.ri-col p { font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-blue-50); max-width: 240px; }
.ri-col .link { margin-top: 8px; color: var(--color-night); text-decoration: underline; text-underline-position: from-font; }
@media (max-width: 992px) {
  .ri__head { grid-template-columns: 1fr; row-gap: 24px; } .ri__head h2 { text-align: left; font-size: 40px; }
  .ri__featured { padding: 16px; }
  .ri__card-top { flex-direction: column; }
  .ri__f-desc { width: 100%; }
  .ri__cols { grid-template-columns: 1fr; }
}

/* ---------- Publication library ---------- */
.publib { background: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.publib__inner { align-items: start; }
.publib__inner > .label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.publib__main h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); margin-bottom: 80px; }
@media (max-width: 992px) {
  .publib__inner { grid-template-columns: 1fr; row-gap: 24px; }
}
@media (max-width: 768px) {
  .publib__main h2 { font-size: 32px; margin-bottom: 44px; }
  /* Figma 375: rows sit close together, the label carries the separation */
  .publib .doc-list { gap: 8px; }
}

/* ---------- Newsletter signup (forest band) ---------- */
.signup { background: var(--color-forest); color: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.signup > .split { align-items: start; }
.signup .label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-gray-40); }
.signup__main { display: flex; flex-direction: column; gap: 40px; }
.signup__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-almost-white); }
.signup__head p { margin-top: 12px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-gray-40); max-width: 620px; }
.signup__form { display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid var(--color-gray-40); }
.signup__form input { flex: 1; min-width: 0; padding: 12px 16px 12px 0; border: none; background: transparent; font-family: var(--font-body); font-size: 16px; color: var(--color-almost-white); }
.signup__form input::placeholder { color: var(--color-gray-40); }
.signup__form input:focus { outline: none; }
.signup__form button { flex-shrink: 0; padding: 12px 16px; border: none; border-left: 1px solid var(--color-gray-40); background: none; font-family: var(--font-body); font-size: 16px; color: var(--color-almost-white); cursor: pointer; }
@media (max-width: 768px) { .signup__head h2 { font-size: 32px; } }

/* Mobile type scale — verified against Figma 375 frames */
@media (max-width: 768px) {
  .news__head h2 { font-size: 32px; }
  .news-item__title { font-size: 28px; }
  .news__featured-card h3 { font-size: 28px; }
  .media__head h2 { font-size: 24px; }
  .media-card__title { font-size: 28px; }
  .company-band__head h2 { font-size: 32px; }
  .ri__head h2 { font-size: 32px; }
  .ri__f-title h3 { font-size: 28px; }
  .ri-col h3 { font-size: 28px; }
}

/* ===== assets/css/contact.css ===== */
/* Contact page */

/* ---------- Hero ---------- */
.hero--contact .hero__bg { left: 0; width: 1440px; }
/* Figma "Contact [375]": hero frame 747px incl. the 64px header, volume
   graphic 672x672 at -148/-193, content block flush left above a 44px gutter */
@media (max-width: 768px) {
  .hero--contact { min-height: 683px; padding: 0 0 44px; }
  /* the artwork is centred and drawn at 672/1565 of its desktop scale */
  .hero--contact .hero__bg { top: 0; left: 50%; transform: translateX(-50%); width: 618px; height: auto; }
  .hero--contact .hero__inner { align-items: flex-start; text-align: left; gap: 0; }
  .hero--contact .hero__content { display: flex; flex-direction: column; gap: 12px; width: 100%; }
  .hero--contact .hero__title { line-height: 1; }
}

/* ---------- Find the right team (audience cards) ---------- */
.audience { background: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.audience .container { display: flex; flex-direction: column; gap: var(--sp-80); }
.audience__head { align-items: start; }
.audience__head .label { max-width: 338px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.audience__main h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); }
.audience__main p { margin-top: 32px; max-width: 383px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.audience__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--grid-gap); }
.contact-card { position: relative; overflow: hidden; min-height: 316px; background: var(--color-blue-5); display: flex; flex-direction: column; justify-content: space-between; }
.contact-card__graphic { position: absolute; left: 120px; top: 117px; width: 708px; height: 708px; opacity: 0.4; pointer-events: none; }
.contact-card__body { position: relative; z-index: 1; padding: 16px; display: flex; flex-direction: column; gap: 16px; }
.contact-card__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
.contact-card__title { font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-night); }
.contact-card__desc { max-width: 293px; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-blue-50); }
.contact-card__email { position: relative; z-index: 1; border-top: 1px solid var(--color-blue-10); padding: 8px 16px; font-family: var(--font-body); font-size: 16px; color: var(--color-blue-50); }
@media (max-width: 992px) { .audience__head { grid-template-columns: 1fr; row-gap: 24px; } .audience__main h2 { font-size: 40px; } .audience__grid { grid-template-columns: 1fr; } }

/* ---------- Enquiry form ---------- */
.enquiry { background: var(--color-night); color: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.enquiry__inner { align-items: start; }
.routing { display: flex; flex-direction: column; gap: 32px; padding-left: 32px; border-left: 1px solid var(--color-gray-40); }
.routing__item h4 { font-family: var(--font-heading); font-weight: 400; font-size: 20px; line-height: 1.1; letter-spacing: -0.2px; color: var(--color-almost-white); }
.routing__item p { margin-top: 4px; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-gray-40); }
.enquiry__form { display: flex; flex-direction: column; gap: 40px; }
.enquiry__intro h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-almost-white); }
.enquiry__intro p { margin-top: 24px; max-width: 831px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-gray-40); }
.enquiry-form { display: flex; flex-direction: column; gap: 64px; }
/* single-line 44px field, text centred, full-width underline at the bottom */
.enquiry-form .field__control { height: 44px; font-size: 16px; padding: 0 16px 0 0; border-bottom-color: var(--color-gray-40); }
.enquiry-form textarea.field__control { height: 164px; padding: 10px 0 12px 0; }
/* paired fields sit flush with a vertical divider between them */
.enquiry-form .row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0; align-items: end; }
.enquiry-form .row2 > .field:first-child { border-right: 1px solid var(--color-gray-40); }
.enquiry-form .row2 > .field:last-child .field__control { padding-left: 16px; }
/* chevron on the selects — inset from the field edge */
.enquiry-form select.field__control {
  padding-right: 36px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23efefec' stroke-opacity='0.7' stroke-width='1' fill='none'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 20px center;
}
.enquiry-form .btn { margin-top: 16px; }
.enquiry-form .consent { display: flex; gap: 12px; align-items: flex-start; }
.enquiry-form .consent input { width: 16px; height: 16px; margin-top: 3px; accent-color: var(--color-almost-white); }
.enquiry-form .consent label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-gray-40); max-width: 570px; }
.enquiry-form .btn { align-self: flex-start; }
@media (max-width: 992px) {
  .enquiry__inner { grid-template-columns: 1fr; row-gap: 40px; }
  .routing { padding-left: 0; border-left: none; }
  .enquiry__intro h3 { font-size: 32px; }
}

/* ---------- Offices ---------- */
.offices { position: relative; overflow: hidden; background: var(--color-light-green); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.offices__graphic { position: absolute; left: -80px; top: 0; width: 800px; height: 800px; opacity: 0.35; pointer-events: none; }
.offices__inner { position: relative; z-index: 1; align-items: start; }
.offices__label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.offices__main h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); margin-bottom: 56px; }
.office-row { border-top: 1px solid var(--color-blue-10); padding: 16px 0; }
.office-row__cat { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); margin-bottom: 16px; }
.office-row__line { display: flex; align-items: baseline; gap: 32px; }
.office-row__city { width: 470px; font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); }
.office-row__addr { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
@media (max-width: 992px) {
  .offices__inner { grid-template-columns: 1fr; row-gap: 24px; }
  .offices__main h2 { font-size: 40px; }
  .office-row__line { flex-direction: column; gap: 4px; } .office-row__city { width: auto; }
  .offices__graphic { display: none; }
}

/* Mobile type scale — verified against Figma 375 frames */
@media (max-width: 768px) {
  .audience__main h2 { font-size: 40px; }
  .contact-card__title { font-size: 28px; }
  .enquiry__intro h3 { font-size: 24px; }
  .offices__main h2 { font-size: 40px; }
  .office-row__city { font-size: 28px; }
  /* Enquiry form: fields run edge-to-edge, text padded inside; even spacing */
  .enquiry-form { gap: 24px; margin-left: calc(-1 * var(--container-pad)); margin-right: calc(-1 * var(--container-pad)); }
  .enquiry-form .row2 { display: contents; }
  .enquiry-form .row2 > .field:first-child { border-right: none; }
  .enquiry-form .field__control { padding-left: var(--container-pad); padding-right: var(--container-pad); }
  .enquiry-form textarea.field__control { padding-left: var(--container-pad); padding-right: var(--container-pad); }
  .enquiry-form select.field__control { padding-right: 40px; background-position: right var(--container-pad) center; }
  .enquiry-form .consent { padding-left: var(--container-pad); padding-right: var(--container-pad); }
  .enquiry-form .btn { align-self: stretch; justify-content: center; margin: 8px var(--container-pad) 0; }
  /* Audience cards become an edge-to-edge horizontal slider */
  .audience__grid {
    display: flex; grid-template-columns: none;
    margin-left: calc(-1 * var(--container-pad)); margin-right: calc(-1 * var(--container-pad));
    padding: 0 var(--container-pad); gap: 16px; overflow-x: auto;
    scroll-snap-type: x proximity; scroll-padding-left: var(--container-pad); scrollbar-width: none;
  }
  .audience__grid::-webkit-scrollbar { display: none; }
  .contact-card { flex: 0 0 300px; scroll-snap-align: start; }
}

/* ===== assets/css/solutions.css ===== */
/* ==========================================================================
   Solutions page — extends shared patterns in home.css
   ========================================================================== */

/* Hero variant (deep-blue, breadcrumb, numbered stats) */
.hero--deepblue { background-color: var(--color-deep-blue); }
.hero--deepblue .hero__title,
.hero--deepblue .hero__text { color: var(--color-almost-white); }
.hero__breadcrumb {
  font-family: var(--font-heading);
  font-style: italic;
  font-size: 16px;
  line-height: 20px;
  color: var(--color-almost-white);
}
.hero__breadcrumb .muted { color: var(--color-gray-40); }
.hero--deepblue .hero__stat h3,
.hero--deepblue .hero__stat p { color: var(--color-almost-white); }

/* Generic dark maze card reused (matches .cap-card) */
.sol-section { padding: 120px 0; }
.sol-section--light { background-color: var(--color-almost-white); }
.sol-section--blue5 { background-color: var(--color-blue-5); }
.sol-section--forest { background-color: var(--color-forest); }

.sol-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 40px; margin-bottom: 80px; }
.sol-head .label {
  flex-shrink: 0;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-blue-50);
}
.sol-head h2 {
  width: 939px;
  max-width: 100%;
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 62px;
  line-height: 0.9;
  letter-spacing: -0.93px;
  color: var(--color-night);
}

@media (max-width: 1024px) {
  .sol-head { flex-direction: column; gap: 24px; }
  .sol-head h2 { width: 100%; font-size: 44px; }
}
@media (max-width: 768px) {
  .sol-head h2 { font-size: 32px; }
}

/* Section 2 — 2x2 capability cards */
.sol-grid-head { display: grid; grid-template-columns: 4fr 8fr; align-items: start; margin-bottom: 80px; }
.sol-grid-head .label { max-width: 338px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-night); opacity: 0.5; }
.sol-grid-head h2 { width: 100%; font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); }
.sol-grid-head h2 .muted { color: var(--color-blue-50); }
.sol-cards { display: grid; grid-template-columns: 1fr 1fr; gap: var(--grid-gap); width: 66.6667%; margin-left: auto; }
.sol-card { position: relative; overflow: hidden; height: 316px; background: var(--color-blue-5); padding-top: 16px; display: flex; flex-direction: column; justify-content: flex-start; }
.sol-card__graphic { position: absolute; left: 120px; top: 117px; width: 708px; height: 708px; opacity: 0.5; pointer-events: none; }
.sol-card__body { position: relative; z-index: 1; flex: 1; display: flex; flex-direction: column; gap: 8px; justify-content: flex-start; padding: 16px 16px 0; }
.sol-card__body h3 { font-family: var(--font-heading); font-weight: 400; font-size: 32px; line-height: 1; letter-spacing: -0.32px; color: var(--color-night); }
.sol-card__body p { width: 293px; max-width: 100%; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-blue-50); }
.sol-card__num { position: relative; z-index: 1; border-top: 1px solid var(--color-blue-10); padding: 4px 8px; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-night); opacity: 0.5; }
.sol-allrow { display: flex; justify-content: flex-end; margin-top: var(--sp-80); }
.sol-allrow a { width: 66.6667%; max-width: 100%; padding: 4px 32px 4px 0; border-bottom: 1px solid var(--color-night); font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-night); }

@media (max-width: 992px) {
  .sol-grid-head { grid-template-columns: 1fr; row-gap: 24px; }
  .sol-grid-head h2 { font-size: 44px; }
  .sol-cards { width: 100%; }
  .sol-allrow a, .onchain__more a { width: 100%; }
}

/* Mobile: cards become a horizontal slider that runs past both screen edges */
@media (max-width: 768px) {
  .sol-cards {
    display: flex;
    width: auto;
    margin-left: calc(-1 * var(--container-pad));
    margin-right: calc(-1 * var(--container-pad));
    padding: 0 var(--container-pad);
    overflow-x: auto;
    scroll-snap-type: x proximity;
    scroll-padding-left: var(--container-pad); /* snap first card to the container, not the screen edge */
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .sol-cards::-webkit-scrollbar { display: none; }
  .sol-card { flex: 0 0 78%; scroll-snap-align: start; }
  .sol-allrow { margin-top: 40px; }
}

/* Section 3 — Risk managed */
/* overflow clips the maze; the padding stops it clipping the ascenders and
   descenders, which sit outside the 0.9 line box */
.risk-top { position: relative; overflow: hidden; padding: 8px 0 10px; }
.risk-title { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); }
.risk-maze { position: absolute; right: 0; top: -10px; width: 660px; height: 190px; object-fit: cover; object-position: top; opacity: 0.35; pointer-events: none; }
.risk-sub { border-top: 1px solid var(--color-blue-10); padding-top: 16px; margin-top: 24px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.risk-cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: 32px; margin-top: 80px; }
.risk-col__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
.risk-col h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); margin: 4px 0 16px; }
.risk-col p { max-width: 320px; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-blue-50); }
@media (max-width: 768px) {
  .risk-title { font-size: 40px; }
  .risk-maze { display: none; }
  .risk-cols { grid-template-columns: 1fr; gap: 40px; }
  .risk-col h3 { font-size: 32px; }
}

/* Section 4 — Institutional access (forest feature) */
.access { position: relative; overflow: hidden; background: var(--color-forest); min-height: 800px; padding: 32px 0; display: flex; align-items: center; }
.access__bg { position: absolute; right: -120px; top: 50%; transform: translateY(-50%); height: 140%; pointer-events: none; }
.access__inner { position: relative; z-index: 1; display: flex; flex-direction: column; justify-content: space-between; align-self: stretch; width: 711px; max-width: 100%; min-height: 736px; }
.access__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-almost-white); }
.access__title { width: 746px; max-width: 100%; font-family: var(--font-heading); font-weight: 400; font-size: 84px; line-height: 0.9; letter-spacing: -1.26px; color: var(--color-almost-white); }
.access .btn--light { color: var(--color-deep-blue); align-self: flex-start; }
@media (max-width: 768px) {
  .access { min-height: 0; padding: 56px 0; }
  .access__inner { min-height: 0; gap: 40px; width: 100%; }
  .access__title { font-size: 44px; letter-spacing: -1px; }
  .access__bg { opacity: 0.4; }
}

/* Section 5 — Liquidity & execution (reuses .capabilities/.cap-card) */
/* Each row is a link; the dark panel, its graphic and the feature grid are
   the hover state. The panel bleeds 16px left of the text column. */
.liq-list { display: flex; flex-direction: column; gap: 4px; }
.liq-item { display: block; color: inherit; text-decoration: none; }
.liq-item .cap-label { padding-left: 0; }
.liq-card { position: relative; border-top: 1px solid var(--color-blue-10); min-height: 344px; padding: 16px 32px 32px 0; display: flex; flex-direction: column; gap: 8px; }
.liq-card__panel { position: absolute; inset: -1px 0 0 -16px; overflow: hidden; background: var(--color-night); opacity: 0; transition: opacity 0.25s ease; }
.liq-card__panel img { position: absolute; right: -128px; top: 50%; width: 617px; height: 617px; max-width: none; transform: translateY(-50%) rotate(-90deg); pointer-events: none; }
.liq-item:hover .liq-card__panel { opacity: 1; }
.liq-card__title { position: relative; font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); white-space: nowrap; transition: color 0.25s ease; }
.liq-item:hover .liq-card__title { color: var(--color-almost-white); }
.liq-card__features {
  position: relative; margin-top: auto; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  column-gap: 43px; row-gap: 28px; width: 426px; max-width: 100%;
  font-family: var(--font-heading); font-size: 20px; line-height: 22px; letter-spacing: -0.2px;
  color: var(--color-almost-white); opacity: 0; transition: opacity 0.25s ease;
}
.liq-item:hover .liq-card__features { opacity: 1; }
.liq-more { display: block; border-bottom: 1px solid var(--color-night); padding: 4px 32px 4px 0; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-night); }
.cap-label--dark { color: var(--color-night); opacity: 0.5; }
@media (max-width: 768px) {
  /* no hover on touch: the panel and features are always on, edge to edge */
  .liq-card {
    min-height: 0; padding: 16px var(--container-pad) 32px;
    margin-left: calc(-1 * var(--container-pad)); margin-right: calc(-1 * var(--container-pad));
  }
  .liq-card__panel { inset: -1px 0 0 0; opacity: 1; }
  .liq-card__panel img { right: -180px; width: 460px; height: 460px; }
  .liq-card__title { color: var(--color-almost-white); font-size: 24px; white-space: normal; }
  .liq-card__features { opacity: 1; width: 100%; column-gap: 16px; row-gap: 16px; font-size: 16px; letter-spacing: -0.16px; }
  .liq-more { font-size: 14px; }
}

/* Section 6 — Systematic investing, brought on-chain */
.onchain { background: var(--color-light-blue); padding: 120px 0 80px; }
.onchain .container { display: flex; flex-direction: column; gap: 80px; }
.onchain__head { text-align: center; display: flex; flex-direction: column; align-items: center; gap: 16px; }
.onchain__head .tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-night); opacity: 0.5; }
.onchain__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 64px; line-height: 0.9; letter-spacing: -0.96px; color: var(--color-night); }
.onchain__cols { display: grid; grid-template-columns: 1fr 437px 1fr; gap: 32px; }
.onchain-col { position: relative; height: 400px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 32px; background: var(--color-blue-10); overflow: hidden; padding: 0 24px; }
.onchain-col__label { position: absolute; top: 0; left: 0; width: 100%; border-bottom: 1px solid var(--color-blue-10); padding: 4px 8px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-night); opacity: 0.5; }
.onchain-col img { height: 84px; width: auto; }
.onchain-col h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); text-align: center; max-width: 339px; }
.onchain-col--dark { background: var(--color-night); }
.onchain-col--dark h3 { color: var(--color-almost-white); }
.onchain-col__caption { position: absolute; bottom: 0; left: 0; width: 100%; border-top: 1px solid var(--color-gray-10); padding: 4px 8px; font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-almost-white); opacity: 0.5; }
.onchain__products { display: flex; flex-direction: column; gap: 40px; }
.onchain-prow { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 32px; }
.onchain-prod { border-bottom: 1px solid var(--color-blue-10); padding: 16px 32px 16px 0; min-height: 180px; display: flex; flex-direction: column; justify-content: space-between; gap: 24px; }
.onchain-prod h4 { font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-night); }
.onchain-prod__label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-night); opacity: 0.5; }
.onchain__more { display: flex; justify-content: flex-end; }
.onchain__more a { width: 66.6667%; border-bottom: 1px solid var(--color-night); padding: 4px 32px 4px 0; font-family: var(--font-body); font-size: 16px; color: var(--color-night); }
@media (max-width: 1024px) {
  .onchain__head h2 { font-size: 44px; }
  .onchain__cols { grid-template-columns: 1fr; }
  .onchain-col { height: 320px; }
  .onchain-prow { grid-template-columns: 1fr; }
  .onchain-prod:first-child { display: none; }
  .onchain__more a { width: 100%; }
}

/* Section 7 — Syntetika partner platform */
.syntetika { background: var(--color-light-blue); padding: 80px 0; }
.syntetika__inner { display: grid; grid-template-columns: 4fr 8fr; align-items: start; }
.syntetika__label { width: auto; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.syntetika__main { width: 100%; display: flex; flex-direction: column; gap: 64px; }
.syntetika__head h2, .syntetika__head p { font-family: var(--font-heading); font-weight: 400; font-size: 32px; line-height: 1.1; letter-spacing: -0.32px; }
.syntetika__head h2 { color: var(--color-night); }
.syntetika__head p { color: var(--color-blue-50); }
.syntetika__cta { display: block; border-bottom: 1px solid var(--color-night); padding: 4px 0; font-family: var(--font-body); font-size: 16px; color: var(--color-night); }
@media (max-width: 1024px) {
  .syntetika__inner { grid-template-columns: 1fr; row-gap: 32px; }
  .syntetika__label, .syntetika__main { width: 100%; }
}
.home-cta--deepblue { background: var(--color-night); }

/* Mobile type scale — verified against Figma 375 frames */
@media (max-width: 768px) {
  .sol-grid-head h2 { font-size: 32px; }
  .sol-card__body h3 { font-size: 28px; }
  .risk-top { padding: 4px 0 6px; }
  .risk-title { font-size: 28px; }
  .risk-col h3 { font-size: 24px; }
  .access__title { font-size: 40px; letter-spacing: -0.4px; }
  .onchain__head h2 { font-size: 28px; }
  .onchain-col h3 { font-size: 28px; }
  /* Figma 375: the three columns become an edge-to-edge horizontal slider */
  .onchain__cols {
    display: flex; grid-template-columns: none;
    margin-left: calc(-1 * var(--container-pad)); margin-right: calc(-1 * var(--container-pad));
    padding: 0 var(--container-pad); gap: 32px; overflow-x: auto;
    scroll-snap-type: x proximity; scroll-padding-left: var(--container-pad); scrollbar-width: none;
  }
  .onchain__cols::-webkit-scrollbar { display: none; }
  .onchain-col { flex: 0 0 332px; height: 398px; scroll-snap-align: start; }
  .syntetika__head h2, .syntetika__head p { font-size: 24px; }
  /* Solutions liquidity cap-cards are 24 in the mobile design (Home's are 28) */
  .page-solutions .cap-card__title { font-size: 24px; }
}

/* ===== assets/css/detail.css ===== */
/* Detail sub-pages (strategy attributes, documents, article body) */

/* ---------- Centered detail hero (color bg + ascii) ---------- */
.dhero { position: relative; overflow: hidden; min-height: 736px; display: flex; align-items: center; justify-content: center; text-align: center; padding: 32px 0; }
.dhero--purple { background: var(--color-purple); }
.dhero--night { background: var(--color-night); }
.dhero--forest { background: var(--color-forest); }
.dhero__bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; pointer-events: none; }
.dhero__inner { position: relative; z-index: 1; display: flex; flex-direction: column; align-items: center; gap: 12px; max-width: 1169px; padding: 0 32px; }
.dhero__crumb { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-almost-white); }
.dhero__crumb .muted { color: var(--color-gray-40); }
.dhero__title { font-family: var(--font-heading); font-weight: 400; font-size: 84px; line-height: 0.9; letter-spacing: -1.26px; color: var(--color-almost-white); }
.dhero__desc { max-width: 469px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-almost-white); }
@media (max-width: 768px) { .dhero { min-height: 0; padding: 100px 0 64px; } .dhero__title { font-size: 40px; letter-spacing: -0.4px; } .dhero__desc { font-size: 14px; } }

/* ---------- Strategy library ---------- */
.strat { background: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.strat .container { display: flex; flex-direction: column; gap: 40px; }
.strat__head { align-items: start; }
.strat__head .label { max-width: 302px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.strat__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); }
/* Subnav is a full-bleed bar; the selected strategy tab is filled, not outlined */
.strat__subnav {
  align-items: stretch; border-bottom: 1px solid var(--color-blue-10);
  margin-left: calc(-1 * var(--container-pad)); margin-right: calc(-1 * var(--container-pad));
  padding-left: var(--container-pad); padding-right: var(--container-pad);
}
.strat__subnav .label { align-self: center; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.strat-tabs { display: flex; gap: 16px; }
.strat-tab {
  flex: 1; min-width: 0; display: flex; align-items: center; height: 36px;
  padding: 0 0 0 16px; border: none; background: none; cursor: pointer;
  font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50);
}
.strat-tab.is-active { background: var(--color-blue-10); color: var(--color-night); }
.strat-panel { display: flex; flex-direction: column; gap: 40px; }
.strat-panel[hidden] { display: none; }
.strat__body { align-items: start; }
.strat__body > .label { font-family: var(--font-body); font-size: 16px; color: var(--color-blue-50); }
.strat__main { display: flex; flex-direction: column; gap: 40px; }
.strat__intro h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); }
.strat__intro p { margin-top: 8px; max-width: 745px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.strat-attrs__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; color: var(--color-blue-50); margin-bottom: 40px; }
.strat-attrs__grid { display: grid; grid-template-columns: 1fr 1fr; column-gap: 168px; row-gap: 80px; }
.attr h4 { font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-night); }
.attr p { margin: 16px 0; max-width: 302px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.attr__doc { font-family: var(--font-body); font-weight: 500; font-size: 13px; color: var(--color-blue-50); }
.strat-docs__label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
/* the grid sits 16px left of the text column so the hover panel lines up */
.strat-docs__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0; margin-left: -16px; padding-bottom: 64px; border-top: 1px solid var(--color-blue-10); }
/* documents are download links: panel and arrow appear on hover */
.doc-card { display: flex; flex-direction: column; gap: 4px; padding: 16px 16px 80px; color: inherit; text-decoration: none; }
.doc-card:hover { background: var(--color-blue-5); }
.doc-card h4 { display: flex; align-items: center; justify-content: space-between; gap: 16px; font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-night); }
.doc-card h4 span { opacity: 0; transition: opacity 0.2s ease; }
.doc-card:hover h4 span { opacity: 1; }
.doc-card p { margin: 0; font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
@media (max-width: 992px) {
  .strat__head, .strat__subnav, .strat__body { grid-template-columns: 1fr; row-gap: 24px; }
  .strat__head h2 { font-size: 40px; }
  .strat-attrs__grid { grid-template-columns: 1fr; column-gap: 32px; row-gap: 40px; }
  /* tabs scroll sideways edge to edge; documents are always panelled */
  .strat__subnav .label { display: none; }
  .strat__subnav { row-gap: 0; }
  .strat-tabs { margin-left: calc(-1 * var(--container-pad)); margin-right: calc(-1 * var(--container-pad)); overflow-x: auto; scrollbar-width: none; }
  .strat-tabs::-webkit-scrollbar { display: none; }
  .strat-tab { flex: 0 0 188px; }
  .strat-docs__grid {
    grid-template-columns: 1fr; gap: 16px; border-top: none; padding-bottom: 0;
    margin-left: calc(-1 * var(--container-pad)); margin-right: calc(-1 * var(--container-pad));
  }
  .doc-card { gap: 10px; padding: 16px 32px 40px var(--container-pad); background: var(--color-blue-5); }
  .doc-card h4 span { opacity: 1; }
}

/* ---------- Request documentation band (forest) ---------- */
.reqdoc { background: var(--color-forest); color: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.reqdoc--night { background: var(--color-night); }
.reqdoc__inner { align-items: start; }
.reqdoc__inner > .label { font-family: var(--font-body); font-size: 16px; color: var(--color-gray-40); }
.reqdoc__main h2 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-almost-white); }
/* the muted second line is part of the same Newsreader lockup as the heading */
.reqdoc__main p { margin-top: 0; max-width: 716px; font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-gray-40); }
/* the rule runs past the container to the page edge, as in the Figma frame */
.reqdoc__cta {
  display: block; margin-top: 80px; margin-right: calc(-1 * var(--container-pad));
  padding: 10px 16px 10px 0; border-bottom: 1px solid var(--color-almost-white);
  font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-almost-white);
}
@media (max-width: 992px) { .reqdoc__inner { grid-template-columns: 1fr; row-gap: 24px; } }

/* ---------- Long-form article body ---------- */
.article { background: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.article__body { grid-column: 5 / 13; display: flex; flex-direction: column; gap: 40px; }
.article__lead { max-width: 854px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-night); }
.article__block h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); margin-bottom: 24px; }
.article__block h4 { font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-night); margin-bottom: 24px; }
.article__block p { max-width: 872px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.article__quote { display: flex; flex-direction: column; gap: 46px; }
.article__quote .mark { font-family: var(--font-body); font-size: 16px; color: var(--color-blue-50); }
.article__quote blockquote { max-width: 873px; font-family: var(--font-heading); font-weight: 400; font-size: 32px; line-height: 1.1; letter-spacing: -0.32px; color: var(--color-night); }
.article__quote cite { font-family: var(--font-body); font-size: 16px; font-style: normal; color: var(--color-blue-50); }
@media (max-width: 992px) { .article__body { grid-column: 1 / 13; } .article__block h3 { font-size: 32px; } }

/* ---------- Report article (Financing / On-Chain) ---------- */
.report { background: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.report__body { grid-column: 5 / 13; display: flex; flex-direction: column; gap: 40px; }
.report__lead { max-width: 854px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-night); }
.report h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); }
.report h4 { font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1.05; letter-spacing: -0.28px; color: var(--color-night); }
.report p { max-width: 872px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.report__sec { display: flex; flex-direction: column; gap: 16px; }
.report__quote { display: flex; flex-direction: column; gap: 24px; margin: 24px 0; }
.report__quote blockquote { max-width: 873px; font-family: var(--font-heading); font-size: 32px; line-height: 1.1; letter-spacing: -0.32px; color: var(--color-night); }
.report__quote cite { font-family: var(--font-body); font-size: 16px; font-style: normal; color: var(--color-blue-50); }
/* Data tables sit on a grey panel: small half-opacity DM Sans head, Newsreader
   body rows separated by a hairline. Columns run on a 235px pitch (203 + 32). */
.data-table-wrap { background: var(--color-blue-5); padding: 16px; }
.data-table { width: 100%; table-layout: fixed; border-collapse: separate; border-spacing: 0 4px; font-family: var(--font-body); }
.data-table th, .data-table td { text-align: left; padding-right: 32px; }
.data-table th { font-weight: 400; font-size: 16px; line-height: 22px; color: var(--color-night); opacity: 0.5; }
.data-table td { border-top: 1px solid var(--color-blue-10); padding-top: 16px; padding-bottom: 16px; font-family: var(--font-heading); font-size: 20px; line-height: 22px; letter-spacing: -0.2px; color: var(--color-night); }
.data-table th:nth-child(-n+3), .data-table td:nth-child(-n+3) { width: 235px; }

/* Pre-footer onboarding CTA — ascii field, label on top, single button */
.home-cta--onboard { min-height: 800px; padding: 24px 32px 0; justify-content: space-between; gap: 0; }
.home-cta--onboard .home-cta__graphic { top: 50%; left: 50%; transform: translate(-50%, -50%); width: 1800px; }
.home-cta--onboard .home-cta__body { position: relative; z-index: 1; flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 24px; width: 1185px; max-width: 100%; }
.home-cta--onboard .home-cta__title { font-size: 62px; letter-spacing: -0.93px; }
.home-cta--onboard .home-cta__text { max-width: 456px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-almost-white); }
.home-cta--onboard .btn--light { color: var(--color-forest); }
@media (max-width: 992px) { .report__body { grid-column: 1 / 13; } .report h3 { font-size: 32px; } }

/* ---------- Stats row (investor relations intro) ---------- */
.statsrow { background: var(--color-almost-white); padding-top: var(--sp-80); padding-bottom: var(--sp-80); }
.statsrow__lead { grid-column: 1 / 6; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.statsrow__grid { grid-column: 5 / 13; display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--grid-gap-lg); align-self: start; }
.stat-cell { background: var(--color-blue-5); padding: 24px 16px; }
.stat-cell h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); }
.stat-cell p { margin-top: 8px; font-family: var(--font-body); font-size: 13px; color: var(--color-blue-50); }
@media (max-width: 992px) { .statsrow__lead, .statsrow__grid { grid-column: 1 / 13; } .statsrow__grid { grid-template-columns: 1fr 1fr; margin-top: 24px; } }

/* ---------- Section with label + content-8 (tables / lists) ---------- */
.lblsec { background: var(--color-almost-white); padding-top: var(--sp-80); padding-bottom: var(--sp-80); }
.lblsec__inner { align-items: start; }
.lblsec__inner > .label { font-family: var(--font-body); font-size: 16px; color: var(--color-blue-50); }
.lblsec__main h2 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); margin-bottom: 40px; }
.gov-list__item { display: flex; align-items: baseline; justify-content: space-between; gap: 24px; padding: 16px 0; border-top: 1px solid var(--color-blue-10); }
.gov-list__item:last-child { border-bottom: 1px solid var(--color-blue-10); }
.gov-list__item span:first-child { font-family: var(--font-body); font-size: 16px; color: var(--color-night); }
.gov-list__item span:last-child { font-family: var(--font-body); font-size: 13px; color: var(--color-blue-50); flex-shrink: 0; }

/* Reports & documents — download rows. The grey panel and the trailing arrow
   are the hover state on desktop; on mobile both are always on. */
.lblsec--docs .lblsec__main h2 { font-size: 64px; line-height: 0.9; letter-spacing: -0.96px; margin-bottom: 80px; }
.doc-list { display: flex; flex-direction: column; gap: 40px; }
.doc-row { display: flex; flex-direction: column; gap: 4px; color: inherit; text-decoration: none; }
.doc-row__desc { max-width: 398px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.doc-row__body { position: relative; display: flex; flex-direction: column; gap: 10px; border-top: 1px solid var(--color-blue-10); padding: 16px 32px 40px 0; }
/* the panel bleeds 16px to the left of the text column */
.doc-row__body::before { content: ""; position: absolute; left: -16px; right: 0; top: 0; bottom: 0; background: var(--color-blue-5); opacity: 0; transition: opacity 0.2s ease; }
.doc-row__body > * { position: relative; }
.doc-row:hover .doc-row__body::before { opacity: 1; }
.doc-row__title { font-family: var(--font-heading); font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); }
.doc-row__dl { padding-left: 0.2em; opacity: 0; transition: opacity 0.2s ease; }
.doc-row:hover .doc-row__dl { opacity: 1; }
.doc-row__meta { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
.doc-row__more { position: relative; display: block; border-bottom: 1px solid var(--color-night); padding: 4px 32px 4px 0; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-night); }
.doc-row__more::after { content: ""; position: absolute; right: -10px; top: 0; width: 1px; height: 30px; background: var(--color-night); }
@media (max-width: 992px) { .lblsec__inner { grid-template-columns: 1fr; row-gap: 24px; } }

/* light-blue centered hero (article) */
.dhero--lightblue { background: var(--color-light-blue); }
.dhero--lightblue .dhero__title { color: var(--color-night); }
.dhero--lightblue .dhero__crumb { color: var(--color-night); }
.dhero--lightblue .dhero__crumb .muted { color: var(--color-blue-50); }
.dhero--lightblue .dhero__desc { color: var(--color-blue-50); }
/* article meta sidebar */
.report__meta { grid-column: 1 / 5; align-self: start; display: flex; flex-direction: column; gap: 24px; padding-right: 32px; }
.report__meta .m-item p:first-child { font-family: var(--font-heading); font-size: 20px; letter-spacing: -0.2px; color: var(--color-night); }
.report__meta .m-item p:last-child { margin-top: 4px; font-family: var(--font-body); font-size: 14px; color: var(--color-blue-50); }
@media (max-width: 992px) { .report__meta { grid-column: 1 / 13; padding-right: 0; margin-bottom: 24px; flex-direction: row; flex-wrap: wrap; gap: 32px; } }

/* deep-blue CTA modifier (shared for detail pages) */
.home-cta--deepblue { background: var(--color-night); }

/* Mobile type scale — verified against Figma 375 frames */
@media (max-width: 768px) {
  .strat__head h2 { font-size: 40px; }
  .strat__intro h3 { font-size: 24px; }
  .attr h4 { font-size: 28px; }
  .doc-card h4 { font-size: 28px; }
  /* Figma 375: 44px between label, lockup and CTA; CTA runs edge to edge */
  .reqdoc { padding-top: 64px; padding-bottom: 80px; }
  .reqdoc__inner { row-gap: 44px; }
  .reqdoc__main h2 { font-size: 24px; letter-spacing: -0.24px; }
  .reqdoc__main p { margin-top: 8px; font-size: 24px; letter-spacing: -0.24px; }
  .reqdoc__cta {
    margin-top: 44px; margin-left: calc(-1 * var(--container-pad));
    padding-left: var(--container-pad); font-size: 14px;
  }
  .article__block h3, .report h3 { font-size: 40px; }
  .article__block h4, .report h4 { font-size: 28px; }
  .article__quote blockquote, .report__quote blockquote { font-size: 28px; }
  /* Stats are 62px in the Figma mobile frame — stack to one column so the
     big numbers get full width and don't overflow. */
  .statsrow__grid { grid-template-columns: 1fr; }
  .stat-cell h3 { font-size: 62px; }
  .lblsec__main h2 { font-size: 28px; }
  /* Figma 375: the table is wider than the viewport and scrolls sideways */
  .data-table-wrap { overflow-x: auto; }
  .data-table { min-width: 704px; }
  .data-table th, .data-table td { padding-right: 16px; }
  .data-table th { font-size: 12px; line-height: 16px; }
  .data-table td { font-family: var(--font-body); font-size: 14px; line-height: 22px; letter-spacing: 0; padding-top: 9px; padding-bottom: 9px; }
  .data-table th:nth-child(-n+3), .data-table td:nth-child(-n+3) { width: 180px; }
  .home-cta--onboard { min-height: 700px; padding: 16px 16px 0; }
  .home-cta--onboard .home-cta__graphic { width: 1350px; }
  .home-cta--onboard .home-cta__body { gap: 16px; width: 100%; }
  .home-cta--onboard .home-cta__title { font-size: 32px; line-height: 1; letter-spacing: -0.32px; }
  .home-cta--onboard .home-cta__text { max-width: 306px; }
  /* Figma 375: rows run edge to edge, panel and arrow always visible */
  .lblsec--docs { padding-bottom: 80px; }
  .lblsec--docs .lblsec__main h2 { font-size: 32px; line-height: 1; letter-spacing: -0.32px; margin-bottom: 52px; }
  /* the CTA tick sits 10px past the full-bleed edge; clipped, as in the frame */
  .doc-list { margin-left: calc(-1 * var(--container-pad)); margin-right: calc(-1 * var(--container-pad)); overflow: hidden; }
  .doc-row__desc { max-width: none; padding: 0 var(--container-pad); }
  .doc-row__body { border-top-color: var(--color-blue-5); padding-left: var(--container-pad); }
  .doc-row__body::before { left: 0; opacity: 1; }
  .doc-row__title { font-size: 28px; letter-spacing: -0.28px; }
  .doc-row__dl { opacity: 1; }
  .doc-row__more { padding-left: var(--container-pad); }
}

/* ===== assets/css/home-v2.css ===== */
/* ==========================================================================
   Home page v2 — new sections built from Figma "Hilbert-Group" screenshots
   (Dev Mode unavailable, so this is measured/eyeballed against exports, not
   exact node specs). Loaded only by index.html, after home.css.

   Every rule here targets a class that does not exist in home.css, so this
   file adds sections without touching the ones home.css already owns —
   blocks.html / index-copy.html / index-anim.html / solutions.html /
   financing-solutions.html keep rendering exactly as before.
   ========================================================================== */

/* ---------- Hero v2: no buttons, full-width stat line instead of a
   sidebar. .hero / .hero__video / .hero__content / .hero__title / .hero__text
   are reused unmodified from home.css; only the split layout is new. ---------- */
.hero--split .hero__inner { flex-direction: column; align-items: stretch; gap: 76px; }
.hero--split .hero__content { width: 798px; }
.hero--split .hero__title { max-width: 798px; }
.hero--split .hero__text { max-width: 428px; }
/* Figma: the rule sits UNDER the stat line (gray/50), with the first —
   active — item carrying its own brighter gray/60 underline. */
.hero-statline {
  display: flex;
  align-items: stretch;
  gap: 32px;
  width: 100%;
  border-bottom: 1px solid var(--color-gray-50);
}
.hero-statline__item {
  flex: 1;
  min-width: 0;
  padding: 0;
}
.hero-statline__item:first-child {
  padding-bottom: 16px;
  border-bottom: 1px solid var(--color-gray-60);
}
.hero-statline__item h3 {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 26px;
  line-height: 1;
  letter-spacing: -0.26px;
  color: var(--color-almost-white);
}
.hero-statline__item p {
  margin-top: 8px;
  font-family: var(--font-body);
  font-size: 12px;
  line-height: 16px;
  color: var(--color-almost-white);
}
.hero-statline__item--muted { opacity: 0.4; }

/* ---------- Capability cards (3-up, light) ---------- */
.cap3 { background: var(--color-almost-white); padding: var(--sp-120) 0 0; }
.cap3__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.cap3-card {
  position: relative;
  overflow: hidden;
  min-height: 316px;
  padding: 16px;
  background: var(--color-green-5);
  display: flex;
  flex-direction: column;
  color: var(--color-forest);
  text-decoration: none;
}
.cap3-card__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-green-50); }
.cap3-card__title { margin-top: 8px; font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-forest); }
.cap3-card__desc { margin-top: 8px; max-width: 293px; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-green-50); }
/* Figma places the 708px maze at 120/117 from the card's outer edge; the
   card has 16px padding, and absolute offsets resolve against the padding
   box, so subtract it here. */
.cap3-card__graphic {
  position: absolute;
  left: 104px;
  top: 101px;
  right: auto;
  bottom: auto;
  width: 708px;
  /* the global `img { max-width: 100% }` was clamping this to the card's
     448px while the height stayed 708px — and card-maze.svg carries
     preserveAspectRatio="none", so it stretched to fill, squashing the
     pattern horizontally instead of overflowing the card as intended */
  max-width: none;
  height: 708px;
  opacity: 1;
  mix-blend-mode: darken;
  pointer-events: none;
}
.cap3-card__link { position: relative; margin-top: auto; padding-top: 0; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-forest); transition: opacity 0.2s ease; }
.cap3-card:hover .cap3-card__link { opacity: 0.6; }

.partners { background: var(--color-almost-white); padding: var(--sp-80) 0 var(--sp-120); }
/* the rule runs the full width of the viewport, so it sits on a full-width
   band while the label itself stays on the container grid */
.partners__rule { border-bottom: 1px solid var(--color-green-10); padding-bottom: 8px; }
.partners__label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
/* A drag-scrollable strip. Figma runs the row past the right edge (it is
   1958px against a 1440 frame), so it bleeds out of the container gutter
   on the right while starting flush with it on the left. Slots are the
   design's 166.5px on a 132px gutter; --ls scales the whole set down for
   the 375 frame, where the same row is drawn at 62.5%. */
.partners__row {
  --ls: 1;
  display: flex;
  align-items: center;
  gap: 132px;
  /* no fixed height: the marks are up to 36px against the design's 30px
     slot, and overflow-x makes this a scroll container that would clip
     them vertically too. Let the row size to its tallest logo. */
  margin: 52px 0;
  padding-block: 4px;
  flex-wrap: nowrap;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scrollbar-width: none;
  cursor: grab;
  margin-right: calc(-1 * var(--container-pad));
  padding-right: var(--container-pad);
}
.partners__row::-webkit-scrollbar { display: none; }
.partners__row.is-dragging { cursor: grabbing; user-select: none; }
.partners__logo {
  flex: 0 0 calc(166.5px * var(--ls));
  /* the same figure as a width, not only a flex-basis: the marquee's track
     is sized max-content, and WebKit measures a flex item's contribution to
     that by its content — the mark, narrower than its slot — rather than by
     its basis. Each copy of the set then came out narrower than the slots
     it holds, the second copy started inside the first, and on iPhones
     Coinbase was drawn over Ripple. A definite width is what it measures. */
  width: calc(166.5px * var(--ls));
  display: flex;
  align-items: center;
  justify-content: center;
}
/* the strip starts flush with the container rather than centring its first
   mark in a slot, so the row reads as anchored on the left and running out */
.partners__logo:first-child { justify-content: flex-start; }
/* the marks are forest vectors; the design sits them at 40% on the
   almost-white ground (sampled straight off the Figma render) */
.partners__logo img { display: block; height: auto; max-width: none; opacity: 0.4; }
.partners__logo:nth-child(1) img { width: calc(146.95px * var(--ls)); }
.partners__logo:nth-child(2) img { width: calc(121.6px * var(--ls)); }
.partners__logo:nth-child(3) img { width: calc(113.78px * var(--ls)); }
.partners__logo:nth-child(4) img { width: calc(157.41px * var(--ls)); }
.partners__logo:nth-child(5) img { width: calc(139.64px * var(--ls)); }
.partners__logo:nth-child(6) img { width: calc(114.25px * var(--ls)); }

/* ---------- How we invest (2x2 icon grid) ---------- */
.hiw { background: var(--color-blue-5); padding: var(--sp-120) 0 160px; }
.hiw__head { align-items: start; }
.hiw__head .label { padding-top: 0; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.hiw__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 56px; line-height: 1; letter-spacing: -0.56px; color: var(--color-forest); }
.hiw__grid { margin-top: 80px; display: grid; grid-template-columns: 1fr 1fr; column-gap: 32px; row-gap: 32px; }
/* Figma pins the first grid row at 160px even though its content is 133px. */
.hiw__grid > .hiw-item:nth-child(-n+2) { min-height: 160px; }
.hiw-item__icon { width: 25px; height: 25px; color: var(--color-forest); }
.hiw-item h3 { margin-top: 16px; font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-forest); }
.hiw-item p { margin-top: 8px; max-width: 340px; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-green-50); }

/* ---------- Who we serve ----------
   The rule and the hover ground run edge to edge, so each row — and the
   label's rule — is a full-width band that is a direct child of the
   section, with the content inside it still on the container grid. That
   is also what Figma draws: the row frames are 1440 wide with their text
   starting at x=32. Rows open on hover, and all of them start closed. */
.serve { background: var(--color-light-green); padding: var(--sp-120) 0; }
.serve__rule { border-bottom: 1px solid var(--color-green-10); padding-bottom: 8px; }
.serve__label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.serve-row { border-bottom: 1px solid var(--color-green-10); transition: background-color 0.25s ease; }
.serve-row:last-child { border-bottom: 0; }
/* Hover only where there is a real pointer. Touch devices get the Figma
   mobile design instead — a tap accordion with a +/- marker — driven by
   .is-open from main.js, since :hover on touch sticks after the tap. */
@media (hover: hover) {
  .serve-row:hover,
  .serve-row:focus-within { background: var(--color-green-5); }
}
.serve-row.is-open { background: var(--color-green-5); }
.serve-row__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  width: 100%;
  padding: 0;
  background: none;
  border: 0;
  text-align: left;
  color: inherit;
  cursor: default;
}
.serve-row__icon { display: none; }
.serve-row__inner {
  display: grid;
  grid-template-columns: 469px 470px 1fr;
  align-items: start;
  padding-top: 48px;
  padding-bottom: 48px;
}
.serve-row__title { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-forest); }
/* the panel occupies no height while closed, so a row is Figma's 136px
   collapsed and grows to fit its copy on hover */
.serve-row__panel {
  grid-column: 2 / -1;
  display: grid;
  grid-template-columns: 470px 1fr;
  overflow: hidden;
  max-height: 0;
  opacity: 0;
  transition: max-height 0.35s ease, opacity 0.25s ease;
}
@media (hover: hover) {
  .serve-row:hover .serve-row__panel,
  .serve-row:focus-within .serve-row__panel { max-height: 300px; opacity: 1; }
}
.serve-row.is-open .serve-row__panel { max-height: 300px; opacity: 1; }
.serve-row__desc { max-width: 345px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.serve-row__links { display: grid; grid-template-columns: 202px 202px; gap: 28px 0; align-content: start; max-width: 403px; }
.serve-row__links a { font-family: var(--font-heading); font-size: 24px; line-height: 1; letter-spacing: -0.24px; color: var(--color-forest); }
.serve-row__links a:hover { text-decoration: underline; text-underline-position: from-font; }

/* ---------- Cycles: dark CTA band ---------- */
.cycles {
  position: relative;
  overflow: hidden;
  background-color: var(--color-forest);
  min-height: 600px;
  padding: 24px 32px;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
}
.cycles__bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; pointer-events: none; }
.cycles__brand,
.cycles__mid,
.cycles__spacer { position: relative; z-index: 1; }
.cycles__brand { display: flex; align-items: center; gap: 8px; color: var(--color-almost-white); }
.cycles__brand .logo__mark { width: 20px; height: 20px; color: var(--color-almost-white); }
.cycles__brand .logo__word { font-family: var(--font-body); font-weight: 500; font-size: 14px; letter-spacing: 3px; text-transform: uppercase; color: var(--color-almost-white); }
.cycles__mid { flex: 1; display: flex; align-items: center; }
.cycles__title { max-width: 760px; font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-almost-white); }
/* mirrors the brand lockup's height so .cycles__mid centres the title in
   the full 600px band, as Figma has it */
.cycles__spacer { height: 22px; }

/* ---------- Signal Over Noise (insights 2x2) ---------- */
.signal { background: var(--color-almost-white); padding: var(--sp-120) 0; }
.signal__head { align-items: start; }
.signal__head .label { max-width: 260px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.signal__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 56px; line-height: 1; letter-spacing: -0.56px; color: var(--color-forest); }
/* The grid and the closing link bleed 16px left of the content track and
   run to the page edge on the right (Figma: 955px-wide rows). */
.signal__grid,
.signal__more { margin-left: -16px; margin-right: calc(-1 * var(--container-pad)); }
.signal__grid { margin-top: 80px; display: grid; grid-template-columns: 453px 1fr; column-gap: 32px; }
.signal-item { display: flex; flex-direction: column; align-items: flex-start; padding: 32px 16px 0; border-top: 0; border-left: 1px solid var(--color-green-10); }
.signal__grid > .signal-item:nth-child(n+3) { padding-top: 64px; }
.signal-item__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-green-50); }
.signal-item h3 { margin-top: 8px; font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-forest); max-width: 368px; }
.signal-item a { display: inline-block; margin-top: 80px; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-forest); text-decoration: underline; text-underline-position: from-font; }
.signal__more {
  position: relative;
  display: block;
  margin-top: 80px;
  border-bottom: 1px solid var(--color-forest);
  padding: 4px 32px 4px 0;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-forest);
}
.signal__more::after { content: ""; position: absolute; right: 0; top: 0; width: 1px; height: 30px; background: var(--color-forest); }

/* ---------- News & Media ---------- */
.newsmedia { background: var(--color-light-green); padding: var(--sp-120) 0 var(--sp-80); }
/* Figma left-aligns the heading to the 8-column content track, not centred. */
.newsmedia h2 { padding-left: 469px; text-align: left; font-family: var(--font-heading); font-weight: 400; font-size: 56px; line-height: 1; letter-spacing: -0.56px; color: var(--color-forest); }
.newsmedia__grid { margin-top: 80px; display: grid; grid-template-columns: 437px 1fr; gap: 0; align-items: stretch; }
.newsmedia__list { display: flex; flex-direction: column; }
/* 164px is the design's row, drawn for a headline of two or three lines; a
   fixed height sent a four-line one's "Read" below the row's rule, where
   the next row's date painted over it and took the click. The row keeps
   that height as a floor and grows past it when the headline needs to. */
.nm-row { display: flex; flex-direction: column; min-height: 164px; padding: 24px 16px 24px 32px; border-top: 0; border-bottom: 1px solid var(--color-green-10); }
.nm-row:last-child { border-bottom: 0; }
.nm-row__date { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-green-50); }
.nm-row h3 { margin-top: 8px; max-width: 334px; font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-forest); }
.nm-row a { display: inline-block; margin-top: auto; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-forest); transition: opacity 0.2s ease; }
.nm-row a:hover { text-decoration: underline; text-underline-position: from-font; }
.newsmedia__feature { position: relative; overflow: hidden; min-height: 495px; background: var(--color-green-10); }
.newsmedia__feature img {
  position: absolute;
  inset: auto;
  left: 50%;
  top: calc(50% - 20.5px);
  transform: translate(-50%, -50%);
  width: 1030px;
  height: 1030px;
  max-width: none;
  object-fit: contain;
  opacity: 1;
}
.newsmedia__feature-card {
  position: absolute;
  left: 16px;
  right: 16px;
  bottom: 16px;
  background: var(--color-almost-white);
  padding: 16px;
}
.newsmedia__feature-card .nm-row__date { color: var(--color-green-50); }
.newsmedia__feature-card h3 { margin-top: 8px; max-width: none; font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-forest); }
.newsmedia__feature-card a { display: inline-block; margin-top: 16px; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-forest); }
.newsmedia__more {
  display: block;
  margin: var(--sp-80) calc(-1 * var(--container-pad)) 0 469px;
  border-bottom: 1px solid var(--color-forest);
  padding: 4px 32px 4px 0;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-forest);
}

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width: 1024px) {
  .hero-statline { flex-wrap: wrap; row-gap: 24px; }
  .hero-statline__item { flex: 0 0 46%; }
  .hero-statline__item:first-child { padding-bottom: 0; border-bottom: 0; }

  .hiw__head, .signal__head { grid-template-columns: 1fr; row-gap: 16px; }
  .hiw { padding-bottom: var(--sp-120); }
  .hiw__grid { column-gap: 32px; }
  .signal__grid, .signal__more { margin-left: 0; margin-right: 0; }
  .signal__grid { grid-template-columns: 1fr 1fr; column-gap: 32px; }
  .signal__head .label { max-width: none; }

  .serve-row__inner { grid-template-columns: 1fr; row-gap: 24px; }
  .serve-row__panel { grid-column: 1 / -1; grid-template-columns: 1fr; row-gap: 24px; }
  .serve-row.is-open .serve-row__panel { max-height: 420px; }
  /* below the desktop grid the block becomes Figma's tap accordion: the
     whole title row is the hit target, with a plus that turns into a minus */
  .serve-row__head { cursor: pointer; }
  .serve-row__icon { display: block; position: relative; width: 24px; height: 24px; flex-shrink: 0; }
  .serve-row__icon::before,
  .serve-row__icon::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    background: var(--color-forest);
  }
  .serve-row__icon::before { width: 14px; height: 1.5px; }
  .serve-row__icon::after { width: 1.5px; height: 14px; transition: opacity 0.2s ease; }
  .serve-row.is-open .serve-row__icon::after { opacity: 0; }

  .newsmedia h2 { padding-left: 0; }
  .newsmedia__grid { grid-template-columns: 1fr; row-gap: 40px; }
  /* the narrow frame leads with the press card and puts the dated
     releases under it — the reverse of the desktop column order */
  .newsmedia__feature { min-height: 360px; order: -1; }
  .newsmedia__more { margin-left: 0; margin-right: 0; }
}

@media (max-width: 768px) {
  /* home.css's mobile hero rules flatten .hero__content (display:contents)
     and reorder it after .hero__stats/.hero__buttons for the old sidebar
     layout. Neither applies to this hero, so undo them: keep content first,
     stat line second, in plain source order. */
  .hero--split .hero__content { display: flex; flex-direction: column; }
  .hero--split .hero__content > div:first-child { order: initial; width: auto; }
  .hero--split .hero__inner { align-items: stretch; text-align: left; }

  .hero-statline { gap: 16px 24px; }
  .hero-statline__item { flex: 0 0 100%; }
  .hero-statline__item h3 { font-size: 24px; }

  /* the 375 frame clears 80px between the hero and the first card, where
     --sp-120 collapses to 56 at this breakpoint */
  .cap3 { padding-top: 80px; }
  .cap3__grid { grid-template-columns: 1fr; }
  .cap3-card { min-height: 316px; }
  /* the mobile frame draws the same strip at 62.5% on a 32px gutter — it
     stays one scrolling row rather than wrapping */
  .partners__row { --ls: 0.625; gap: 32px; margin: 32px 0; }
  .partners__logo { flex-basis: 104px; width: 104px; }

  .hiw { padding: var(--sp-80) 0; }
  .hiw__head h2, .signal__head h2, .newsmedia h2 { font-size: 36px; letter-spacing: -0.36px; }
  .hiw__grid { grid-template-columns: 1fr; row-gap: 40px; margin-top: 40px; }
  .hiw__grid > .hiw-item:nth-child(-n+2) { min-height: 0; }
  .hiw-item h3 { font-size: 28px; letter-spacing: -0.28px; }

  .serve-row__inner { padding-top: 24px; padding-bottom: 24px; row-gap: 16px; }
  .serve-row__title { font-size: 28px; letter-spacing: -0.28px; }
  .serve-row.is-open .serve-row__panel { max-height: 460px; }
  .serve-row__links { grid-template-columns: 1fr 1fr; gap: 16px; max-width: none; }
  .serve-row__links a { font-size: 20px; }

  /* the mobile Figma frame keeps this band at 600px too */
  .cycles { min-height: 600px; padding: 24px 16px; }
  .cycles__title { font-size: 32px; letter-spacing: -0.48px; }

  .signal { padding: var(--sp-80) 0; }
  .signal__grid { grid-template-columns: 1fr; margin-top: 40px; }
  .signal-item,
  .signal__grid > .signal-item:nth-child(n+3) { padding: 24px 0 0; border-left: none; border-top: 1px solid var(--color-green-10); }
  .signal-item a { margin-top: 32px; }
  .signal__more { margin-top: 40px; }

  .newsmedia { padding: 80px 0 var(--sp-80); }
  .newsmedia__grid { gap: 40px; margin-top: 44px; }
  .nm-row { height: auto; padding: 24px 0; }
  .nm-row a { margin-top: 16px; }
  .newsmedia__feature-card h3 { font-size: 28px; letter-spacing: -0.28px; }
  .newsmedia__more { margin-top: 40px; }
}

/* ---------- Capability card curve ----------
   The Hilbert curve on the three cards was a flat <img>. It is now one path
   in a <defs> block referenced twice per card, so the hover can draw along
   the line instead of fading a picture in. card-maze.svg is a single
   continuous path, which is what makes this work at all: the dash walks one
   unbroken stroke from end to end rather than lighting 700 fragments at once.

   The track keeps exactly the values the artwork shipped with, including the
   darken blend that used to sit on the <img>, so the resting card is
   unchanged. The blend moves off .cap3-card__graphic and onto the track
   alone — otherwise it would darken the lit line into the card as well.

   pathLength="1" on the shared path normalises the curve, so the dash values
   below are fractions of it rather than user units. All stroke properties are
   inherited, so setting them on the <use> reaches the cloned path. */
.curve-defs { position: absolute; width: 0; height: 0; overflow: hidden; }

.cap3-card__graphic.curve {
  mix-blend-mode: normal;
  overflow: visible;
}

.curve__track {
  fill: none;
  stroke: var(--color-night);
  stroke-opacity: 0.5;
  stroke-width: 0.345703;
  stroke-linecap: round;
  stroke-linejoin: round;
  mix-blend-mode: darken;
}

/* A single growing segment: the dash starts at nothing and grows to the whole
   curve, with a gap wide enough that the pattern never repeats and a second
   segment never appears behind the first. */
.curve__lit {
  fill: none;
  stroke: var(--color-forest);
  /* exactly the track's hairline: the line lights up by going from navy at
     half opacity to full-strength forest, not by getting fatter */
  stroke-width: 0.345703;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-dasharray: 0 2;
  /* park the pattern's start at the point the curve first enters the card, so
     the draw begins where it can be seen rather than somewhere off the crop */
  stroke-dashoffset: calc(-1 * var(--curve-start, 0));
  opacity: 0;
  /* leaving retreats back down the same line, quicker than the draw — a long
     unwind reads as the card being slow to let go */
  transition: stroke-dasharray 0.45s cubic-bezier(0.4, 0, 1, 1), opacity 0.3s ease 0.15s;
}

/* Near-linear on the way in: a strong ease sprints the first half of the line
   and crawls the rest, which does not read as drawing. */
@media (hover: hover) {
  .cap3-card:hover .curve__lit {
    stroke-dasharray: var(--curve-span, 1) 2;
    opacity: 1;
    transition: stroke-dasharray 0.95s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.2s ease;
  }
}

/* Keyboard focus draws it too, and is not gated on a pointer. */
.cap3-card:focus-visible .curve__lit {
  stroke-dasharray: var(--curve-span, 1) 2;
  opacity: 1;
  transition: stroke-dasharray 0.95s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.2s ease;
}

/* Reduced motion keeps the draw and shortens it: this is a hover, so the
   motion is asked for, brief, and confined to one card — quite unlike a strip
   that moves on its own forever. */
@media (prefers-reduced-motion: reduce) {
  .cap3-card:hover .curve__lit,
  .cap3-card:focus-visible .curve__lit {
    transition: stroke-dasharray 0.3s linear, opacity 0.2s ease;
  }
}

/* ---------- Partners marquee ----------
   The strip was a drag-scrollable row that sat still, so a visitor had to
   discover it was draggable before anything moved. It now runs as a
   continuous loop: the set is rendered twice and the track travels exactly
   one set plus one gap, which puts the second copy where the first began and
   makes the seam invisible.

   The gap differs between breakpoints (132px, 32px at 375), so it is named
   here rather than baked into the keyframes the way a single-breakpoint
   version could get away with. One set is always wider than the viewport at
   both sizes — 1659px against ~1408, 784px against 375 — so the strip is
   never short of logos to show at the moment the loop resets. */
.partners__row--marquee {
  --marquee-gap: 132px;
  overflow-x: hidden;
  cursor: default;
  /* Only the right edge fades. The design anchors the first mark flush with
     the container and runs the row out past the screen, so a left fade would
     dim the one logo that is meant to line up with everything above it. */
  -webkit-mask-image: linear-gradient(to right, #000 0, #000 calc(100% - 120px), transparent 100%);
  mask-image: linear-gradient(to right, #000 0, #000 calc(100% - 120px), transparent 100%);
}

.partners__marquee {
  /* the row is itself a flex container; without this the track is a shrinkable
     item and max-content stops meaning what it says */
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: var(--marquee-gap);
  width: max-content;
  animation: partners-scroll 45s linear infinite;
}

.partners__set {
  /* never shrinks: the track's width comes from max-content, and where a
     browser gets that wrong (WebKit has left flex gaps out of it) a
     shrinkable set would give its width up while its slots kept theirs,
     and the second copy would be drawn over the tail of the first */
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: var(--marquee-gap);
}

/* both copies are laid out identically, so each set's first slot keeps the
   flush-left alignment and the loop stays seamless */
.partners__set > .partners__logo:first-child { justify-content: flex-start; }

.partners__row--marquee:hover .partners__marquee,
.partners__row--marquee:focus-within .partners__marquee {
  animation-play-state: paused;
}

@keyframes partners-scroll {
  from { transform: translate3d(0, 0, 0); }
  /* half the track is one set plus half a gap; one more half-gap makes it a
     whole set plus the gap that separates the two copies */
  to   { transform: translate3d(calc(-50% - var(--marquee-gap) / 2), 0, 0); }
}

/* Someone who has asked for less motion gets the strip crawling rather than
   stopped, and hand-scrollable: a strip that has stopped dead reads as broken
   rather than calm, and a slow continuous scroll is close to what the
   preference is actually for. */
@media (prefers-reduced-motion: reduce) {
  .partners__marquee { animation-duration: 150s; }
  .partners__row--marquee { overflow-x: auto; }
}

@media (max-width: 768px) {
  .partners__row--marquee { --marquee-gap: 32px; }
}

/* ===== assets/css/solutions-v2.css ===== */
/* ==========================================================================
   Solutions v2 — new sections for solutions-2.html, measured against the
   Figma Dev Mode source (file CR70V8ZRQR9Qg7LWefymrS, desktop frame
   1643:13941 "Solutions v1", mobile frame 1764:1777). Loaded only by
   solutions-2.html, after solutions.css and before v2-shared.css, so the
   old solutions.html is untouched.

   Figma section heights (desktop 1440): Hero 800 (header overlaps it),
   Asset Management 1032, Lending 546, On-chain 436, Footer 360.
   ========================================================================== */

/* ---------- Hero: forest ground + the hilbert-pattern video, breadcrumb,
   title, subtitle. Reuses .hero / .hero__video / .hero__breadcrumb /
   .hero__title / .hero__text from home.css + solutions.css as-is.

   Figma puts the content block's baseline 64px above the hero's foot
   (frame 1643:13944 sits 32px above the hero edge and carries another
   32px of its own bottom padding); home.css's shared .hero only pads 32px,
   which floated the whole block 32px low. ---------- */
.hero--v2 { background-color: var(--color-forest); padding-bottom: 64px; }
/* Figma tints the breadcrumb's "Home /" with additional/matcha at 60%,
   not the almost-white 50% the shared .hero__breadcrumb .muted uses. */
.hero--v2 .hero__breadcrumb .muted { color: var(--color-gray-60); }

/* ---------- Asset Management: heading + a list of fund rows ----------
   The rows are full-bleed in Figma (x=0..1440) with the text inset by the
   normal 32px page gutter, so the list breaks out of .container and the
   row carries the gutter as its own padding. Dropping the row's right
   padding makes its three tracks exactly (1440 - 32) / 3 = 469.33px wide,
   which is how Figma lands the description at x=502 and the link at
   x=972. ---------- */
/* Distance from the container's outer edge to the viewport edge: zero until
   the viewport passes --container-max, then half the surplus. A negative
   gutter margin alone only reaches the container's edge, which is why these
   bands stopped short of the screen on anything wider than 1440. 100vw
   counts the scrollbar, so the sections using it clip the few px of
   overshoot rather than growing a horizontal scrollbar. */
.fundlist-section,
.lending-section,
.onchain-cta-section {
  --page-bleed: calc((100vw - min(100vw, var(--container-max))) / 2);
  --bleed-x: calc(var(--container-pad) + var(--page-bleed));
  overflow-x: clip;
}

.fundlist-section { background: var(--color-almost-white); padding: var(--sp-120) 0; }
.fundlist-section h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-forest); margin-bottom: var(--sp-80); }
/* the row is a full-width band so its rule and hover ground reach both
   screen edges; the grid inside it stays aligned to the container */
.fund-row {
  display: block;
  border-bottom: 1px solid var(--color-green-10);
  color: inherit;
  text-decoration: none;
  transition: background-color 0.2s ease;
}
.fund-row:hover { background: var(--color-green-5); box-shadow: inset 0 1px 0 var(--color-green-10); }
/* no right gutter: that makes the three tracks (1440 - 32) / 3 = 469.33px,
   which is how Figma lands the description at x=502 and the link at x=972 */
.fund-row__inner {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 48px 0 48px var(--container-pad);
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  align-items: start;
}
.fund-row__name h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-forest); }
.fund-row__name p { margin-top: var(--sp-8); font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-green-50); }
.fund-row__desc { max-width: 345px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.fund-row__link { font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-forest); }
.fund-row__link:hover { text-decoration: underline; text-underline-position: from-font; }

/* ---------- Lending & Borrowing: eyebrow + a tag line + one light card ----------
   The band's ground is green/5 laid over almost-white — composited from the
   two existing tokens rather than a new hex. The card sits 16px left of the
   content track and runs out to the page edge, and the "Financing Solution"
   tag sits above it (outside the card box), 4px clear of its top rule. */
.lending-section {
  padding: var(--sp-120) 0;
  background-color: var(--color-almost-white);
  background-image: linear-gradient(var(--color-green-5), var(--color-green-5));
}
.lending-section .split { align-items: start; }
.lending-section .label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.lending-card__tag { margin-bottom: var(--sp-4); font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-forest); opacity: 0.5; }
.lending-card {
  position: relative;
  overflow: hidden;
  height: 280px;
  margin-left: -16px;
  /* runs out to the screen edge, taking the artwork anchored to its right
     edge with it */
  margin-right: calc(-1 * var(--bleed-x));
  padding: 16px 32px 16px 16px;
  background: var(--color-green-5);
  border-top: 1px solid var(--color-green-10);
  display: flex;
  flex-direction: column;
  gap: var(--sp-8);
  color: var(--color-forest);
  text-decoration: none;
}
.lending-card__title { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-forest); }
.lending-card__body { position: relative; flex: 1 0 0; min-height: 0; display: flex; flex-direction: column; justify-content: space-between; align-items: flex-start; width: 672px; max-width: 100%; }
.lending-card__desc { max-width: 436px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-forest); opacity: 0.6; }
.lending-card__link { font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-forest); }
.lending-card:hover .lending-card__link { text-decoration: underline; text-underline-position: from-font; }
/* Figma anchors the hilbert artwork off the card's right edge at its native
   3202px, so only a ~490px-wide slice of the middle of the pattern shows. */
.lending-card__graphic { position: absolute; width: 3202px; height: 3202px; right: -2713px; top: -1651px; max-width: none; pointer-events: none; }

/* ---------- On-chain: eyebrow + two-tone heading + a two-link CTA bar ---------- */
.onchain-cta-section { background: var(--color-light-green); padding: var(--sp-80) 0 var(--sp-120); }
.onchain-cta-section .split { align-items: start; }
.onchain-cta-section .label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.onchain-cta-section h2,
.onchain-cta-section .onchain-cta__sub { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-forest); }
/* the strapline is a 698px-wide text box in Figma, which breaks it after
   "on-chain" — the 907px content track would otherwise keep it on one line */
.onchain-cta-section .onchain-cta__sub { max-width: 698px; opacity: 0.4; }
.onchain-cta__links {
  display: flex;
  margin-top: var(--sp-80);
  /* the rule runs out to the screen edge, but the padding gives back exactly
     what the extra margin took, so the content box — and with it the 50/50
     split that puts the divider on Figma's midpoint — is unchanged */
  margin-right: calc(-1 * var(--bleed-x));
  padding-right: var(--page-bleed);
  border-bottom: 1px solid var(--color-forest);
}
.onchain-cta__links a {
  /* border-box so the two halves stay exactly 469.5px each — with the
     inherited content-box the asymmetric padding pushed the divider 7px
     left of Figma's midpoint */
  box-sizing: border-box;
  flex: 0 0 50%;
  min-width: 0;
  padding: 10px 16px;
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 13px;
  line-height: 16px;
  color: var(--color-forest);
}
.onchain-cta__links a:first-child { border-right: 1px solid var(--color-forest); padding-left: 0; }
.onchain-cta__links a:hover { text-decoration: underline; text-underline-position: from-font; }

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width: 1024px) {
  .fund-row__inner { grid-template-columns: 1fr 1fr; row-gap: var(--sp-16); padding-right: var(--container-pad); }
  .fund-row__name { grid-column: 1 / -1; }
  .fund-row__desc { max-width: none; }
}

@media (max-width: 992px) {
  /* v2-shared collapses .split to a single column here, so the card no
     longer sits in a right-hand track — pull it back to the page gutter. */
  .lending-card { margin-left: 0; }
  .lending-card__tag { margin-top: var(--sp-24); }
}

/* ==========================================================================
   Mobile — measured against Figma frame 1764:1777 "Solutions [375]"
   (Hero 564 incl. the 64px header, Asset Management 1072, Lending 568,
   On-chain 392). Every band pads 80px top and bottom at this width, and the
   fund row re-orders to tag / title / description / link.
   ========================================================================== */
@media (max-width: 768px) {
  /* home.css's mobile hero rules centre .hero__inner and flatten
     .hero__content (display:contents) for the old sidebar-stats hero. This
     hero has neither buttons nor a stats sidebar, so undo the centring and
     keep the breadcrumb/title/subtitle left-aligned in plain source order. */
  .hero--v2 .hero__inner { align-items: stretch; text-align: left; }
  .hero--v2 .hero__content { display: flex; flex-direction: column; gap: 12px; }
  .hero--v2 { min-height: 500px; padding-bottom: var(--sp-32); }
  .hero--v2 .hero__title { font-size: 44px; line-height: 0.9; letter-spacing: -0.66px; }
  .hero--v2 .hero__text { font-size: 14px; line-height: 20px; margin-top: 12px; }

  .fundlist-section { padding: 80px 0; }
  .fundlist-section h2 { font-size: 40px; line-height: 1; letter-spacing: -0.6px; margin-bottom: 40px; }
  .fund-row__inner {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 10px;
    padding: var(--sp-24) var(--container-pad);
  }
  /* Figma flips the pair on mobile: the italic denomination tag sits above
     the fund name, not below it */
  .fund-row__name { display: flex; flex-direction: column-reverse; gap: 10px; }
  .fund-row__name h3 { font-size: 28px; }
  .fund-row__name p { margin-top: 0; }
  .fund-row__desc { max-width: none; font-size: 14px; line-height: 20px; }
  .fund-row__link { margin-top: 22px; }

  /* style.css gives the stacked .split a 32px row-gap; Figma specifies the
     label-to-content gap per band (44px here, 52px on the on-chain band),
     so drive it from the label's own margin instead */
  .lending-section .split,
  .onchain-cta-section .split { row-gap: 0; }

  .lending-section { padding: 80px 0; }
  .lending-section .label { line-height: 20px; margin-bottom: 44px; }
  .lending-card__tag { margin-top: 0; line-height: 20px; }
  .lending-card {
    height: 320px;
    margin-left: calc(-1 * var(--container-pad));
    padding: var(--sp-16);
  }
  .lending-card__title { font-size: 24px; letter-spacing: -0.36px; }
  .lending-card__body { flex: 0 0 auto; width: 247px; gap: var(--sp-16); justify-content: flex-start; }
  .lending-card__desc { max-width: none; font-size: 14px; line-height: 20px; }
  .lending-card__graphic { width: 2342px; height: 2342px; right: auto; left: -1056px; top: 174px; }

  .onchain-cta-section { padding: 80px 0; }
  .onchain-cta-section .label { line-height: 20px; margin-bottom: 52px; }
  .onchain-cta-section h2,
  .onchain-cta-section .onchain-cta__sub { font-size: 24px; letter-spacing: -0.36px; }
  .onchain-cta-section .onchain-cta__sub { max-width: none; }
  /* the CTA pair stays side-by-side at 375 in Figma. Here the rule runs to
     BOTH screen edges while the link text stays on the container, so the
     left side gets the same margin/padding pair the right side already has */
  .onchain-cta__links {
    margin-top: 52px;
    margin-left: calc(-1 * var(--bleed-x));
    padding-left: var(--bleed-x);
  }
}

/* ===== assets/css/company-v2.css ===== */
/* ==========================================================================
   Company v2 — new sections for company-2.html, built from pasted PNG
   exports (Figma Dev Mode unavailable this round). Loaded only by
   company-2.html, after company.css / detail.css, so company.html is
   untouched. Several sections reuse company.css components verbatim
   (.team, .principles, .ir-contact, .brandband) via their existing
   classes — only what's genuinely new lives here.
   ========================================================================== */

/* ---------- Hero: deep-blue ground instead of forest ----------
   hero.webm and the .hero::after legibility gradient are both baked in
   forest green (home.css targets the homepage's forest hero). Neutralising
   the video to a pure luminance map and screening it onto the deep-blue
   backdrop turns the same diamond-pattern footage into a navy-toned hero;
   the gradient needs its own deep-blue tint for the same reason. */
.hero--v2 { background-color: var(--color-deep-blue); min-height: 800px; }
/* hero.webm is forest-toned: its ground greys out to ~49/255 and its lines to
   ~199. brightness() lifted the ground too, so screening it washed the whole
   section out to slate. contrast(1.7) instead maps that ground to black —
   which screen leaves untouched — while pushing the lines to ~0.95, so the
   deep-blue stays flat and only the animation reads over it. */
.hero--v2 .hero__art-layers { opacity: 0.5; }
/* The scene draws no ground of its own here (showBackground:false in the
   host's data-scene), so only the lines land on the section's flat deep blue.
   The still underneath is a forest-toned render, so it still needs the old
   treatment: contrast(1.7) maps its greyed ground (~49/255) to black, which
   `screen` leaves untouched. */
.hero--v2 .hero__art {
  filter: grayscale(1) contrast(1.7);
  mix-blend-mode: screen;
}
/* the design is a flat deep-blue ground with the animation over it, so drop
   home.css's legibility gradient rather than re-tinting it */
.hero--v2::after { background: none; }
@media (max-width: 768px) {
  /* home.css's mobile hero rules centre .hero__inner and flatten
     .hero__content (display:contents) for the old sidebar-stats hero.
     This hero has neither, so keep breadcrumb/title/subtitle left-aligned
     in plain source order (same fix as solutions-2 / index's hero--split). */
  .hero--v2 .hero__inner { align-items: stretch; text-align: left; }
  .hero--v2 .hero__content { display: flex; flex-direction: column; }
}

/* ---------- Our Story: label+heading, then 3 equal columns of prose ----------
   Figma 1820:6011 — 120/80 padding, the H2 at the design system's 62/0.9/
   -0.93 (not the 56/1 this section was first written at), 44px down to the
   prose, three columns on the same 32px gutter the rest of the page uses. */
/* 120/120, not 120/80: Figma's own bottom padding reads as 80, but its prose
   block carries a further 40px of its own, so the section still resolves to
   the 472px frame height only with a full 120 here. */
.story-section { background: var(--color-almost-white); padding: var(--sp-120) 0; }
.story-section__head { align-items: start; }
.story-section__head > .label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.story-section__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); }
.story-section__grid { margin-top: 44px; display: grid; grid-template-columns: repeat(3, 1fr); column-gap: 32px; }
/* the copy is set to 417px inside its 437px track, which is what produces
   Figma's line breaks — letting it fill the track rewraps every column */
.story-section__grid p { max-width: 417px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }

/* ---------- Principles ----------
   Figma 1820:6025 drops the eyebrow label this component normally carries,
   but keeps the heading in the 8-column area rather than centring it, and
   tightens the section to 80/80. With the label gone the intro has to be
   pinned to the second column or the split grid pulls it back to the first. */
.principles--v2 { padding-top: var(--sp-80); padding-bottom: var(--sp-80); }
.principles--v2 .principles__intro { grid-column: 2; }

/* Distance from the container's outer edge to the viewport edge: zero until
   the viewport passes --container-max, then half the surplus. A plain
   --container-pad only reaches the container, which is why these bands
   stopped short on anything wider than 1440. 100vw counts the scrollbar, so
   the sections using it clip the few px of overshoot. */
.principles--v2,
.timeline-section,
.brandband--tiled {
  --page-bleed: calc((100vw - min(100vw, var(--container-max))) / 2);
  --bleed-x: calc(var(--container-pad) + var(--page-bleed));
  overflow-x: clip;
}

/* the slider starts flush with the container and runs off the right edge;
   scrolled to the end, its last card lands back on the container's right
   edge, so both gutters are the full bleed rather than the raw padding */
.principles--v2 .principles__slider {
  padding-left: var(--bleed-x);
  padding-right: var(--bleed-x);
}

.scroll-track {
  position: relative;
  height: 1px;
  margin: var(--sp-80) var(--bleed-x) 0;
  background: var(--color-blue-10);
}
.scroll-track__thumb {
  position: absolute;
  top: -1px;
  left: 0;
  /* Figma draws the indicator as a hairline, the same 1px as its rail */
  height: 1px;
  background: var(--color-night);
  transition: opacity 0.2s ease;
}

/* The numbered strip is the card's own colour and sits opaque over the
   artwork — it was almost-white against a blue/5 card, which read as a
   translucent band with the pattern showing through. */
.principles--v2 .principle__num { background: var(--color-blue-5); }

/* ---------- Timeline ----------
   Figma 1877:17385. The rail is ONE hairline that bleeds past the container
   to the viewport edges (Vector 1877:17391 is 1442px wide against a 1376px
   container), not a per-item border — and it runs through the centre of the
   bullets rather than under the cards. Each bullet is an 8px square centred
   in a 24px box at the item's left edge, which lands it exactly under the
   8px text inset. Item height resolves to 40 + 8 + 60 + 32 = 140px. */
.timeline-section { background: var(--color-blue-5); padding: var(--sp-120) 0; }
.timeline-section h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); }
.timeline-row { position: relative; margin-top: 80px; display: flex; gap: 32px; }
.timeline-item { position: relative; flex: 1; min-width: 0; padding: 0 8px 32px; }
/* each item draws its own segment of the rail, spanning itself plus the
   gutter after it, so the segments butt up into one continuous line — and
   the line still tracks the items once the row becomes a scroller on
   mobile, which a single row-level rule could not do */
.timeline-item::after {
  content: "";
  position: absolute;
  left: 0;
  right: -32px;
  bottom: 12px;
  height: 1px;
  background: var(--color-blue-10);
}
.timeline-item:first-child::after { left: calc(-1 * var(--bleed-x)); }
.timeline-item:last-child::after { right: calc(-1 * var(--bleed-x)); }
.timeline-item__year { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); white-space: nowrap; }
/* Figma pads every caption out to three 20px lines with zero-width spaces so
   the bullets sit on one line; a min-height does the same without the hack */
.timeline-item__desc { margin-top: 8px; min-height: 60px; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-blue-50); }
.timeline-item__dot { position: absolute; left: 8px; bottom: 8px; width: 8px; height: 8px; background: var(--color-night); }

/* ---------- Cycles: dark tiled-pattern CTA band, one centred line ----------
   manifesto-ascii.png was made for the forest-toned manifesto band; on this
   navy section its green tint reads as its own colour rather than texture.
   Desaturating it and blending as "screen" turns it into a pure light/dark
   map that tints toward the navy ground rather than fighting it. */
/* 600px here, against the component's 800px default tuned for company.html's
   taller tag/headline/wordmark stack — this band is a single centred line */
.brandband--solo { min-height: 600px; justify-content: center; gap: 0; }
/* the component pins the texture to a fixed 1440px, which left a bare strip
   on the right of any wider screen — cover the band instead */
.brandband--tiled .brandband__bg {
  top: 0;
  transform: none;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0.4;
  filter: grayscale(1) brightness(0.85);
  mix-blend-mode: screen;
}

/* ---------- Leadership / Governance indents ----------
   .team indents its heading, label and "View all" by a flat 33.333%, which
   lands them at 459px; the design's 4-column block is 437px + a 32px
   gutter, so they belong at 469px like every other content track on the
   page. Scoped to this page so company.html keeps its current alignment. */
.team--v2 .team__indent,
.team--v2 .team__label,
.team--v2 .team__viewall { margin-left: calc((100% - 352px) / 3 + 128px); }
/* Six cards show on the desktop grid and four at 375; the rest are revealed
   by the toggle, which is a button rather than the component's link. */
.team--collapsible .team__grid > .team-member:nth-child(n + 7) { display: none; }
.team--collapsible.is-expanded .team__grid > .team-member { display: flex; }
.team--v2 .team__viewall {
  width: auto;
  background: none;
  text-align: left;
  cursor: pointer;
}
@media (max-width: 992px) {
  .team--v2 .team__indent,
  .team--v2 .team__label,
  .team--v2 .team__viewall { margin-left: 0; }
  /* four to a screen here, and the rule under the toggle runs the full width */
  .team--collapsible .team__grid > .team-member:nth-child(n + 5) { display: none; }
  .team--collapsible.is-expanded .team__grid > .team-member { display: flex; }
  .team--v2 .team__viewall { width: 100%; padding-right: 0; }
}

/* Both team bands open on 120px, where the shared component uses 80 — and
   the portrait plate is a 437x260 landscape frame (163.5x120 at 375), which
   a bare min-height cannot hold as the column width changes. */
.team--v2 { padding-top: var(--sp-120); }
.team--v2 .team-member__avatar { min-height: 0; aspect-ratio: 437.33 / 260; }

/* ---------- Governance & Board: reuses .team's card shape on a
   different ground, three members instead of six ---------- */
.team--board { background: var(--color-light-blue); padding-top: var(--sp-120); }
.team--board .team__head p,
.team--board .team-member__desc,
.team--board .team-member__role,
.team--board .team__label { color: rgba(23, 34, 58, 0.55); }
.team--board .team__label { border-bottom-color: rgba(23, 34, 58, 0.15); }
.team--board .team-member__avatar { background: rgba(23, 34, 58, 0.14); }
.team--board .team-member__avatar span { color: var(--color-night); }
.team--board .team__grid { grid-template-columns: repeat(3, 1fr); }

/* ---------- IR contact: this page's copy is short enough to fit one line
   at the component's default 84px, unlike the max-width:622px it was tuned
   for ---------- */
.ir-contact--wide { min-height: 520px; }
.ir-contact--wide .ir-contact__text h2 { max-width: none; white-space: nowrap; }
/* the standfirst runs the full content track here, not the component's 411px */
.ir-contact--wide .ir-contact__desc { max-width: none; }
/* Figma exports this artwork with its navy ground baked in and no alpha. The
   asset has that ground subtracted to pure black at build time, so `screen`
   composites it seamlessly: black leaves the backdrop untouched, and only
   the wireframe lights up. (`lighten` against the raw export left a faint
   edge wherever the ground drifted above the section colour.) */
.ir-contact__art {
  position: absolute;
  left: -181px;
  top: -4px;
  width: 521px;
  height: 520px;
  mix-blend-mode: screen;
  pointer-events: none;
}
.ir-contact__art img { display: block; width: 100%; height: 100%; max-width: none; }

/* ---------- Footer: dark ground here, so use the deep-blue variant with
   the same divider convention as the light-green footer elsewhere ---------- */
.site-footer--deep-blue { border-top: 1px solid var(--color-gray-10); }
.footer-col__contact-lead { font-family: var(--font-body); font-size: 13px; color: var(--color-gray-40); margin-bottom: 8px; }

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width: 1024px) {
  .story-section__grid { grid-template-columns: 1fr; row-gap: 24px; }
}

@media (max-width: 768px) {
  .story-section { padding: var(--sp-80) 0; }
  .story-section__head { grid-template-columns: 1fr; row-gap: 16px; }
  .story-section__head h2 { font-size: 36px; letter-spacing: -0.36px; }
  .story-section__grid { margin-top: 40px; }

  .timeline-section { padding: var(--sp-80) 0; }
  .timeline-section h2 { font-size: 40px; letter-spacing: -0.6px; }
  /* the row becomes a horizontal slider: fixed, wider items that bleed
     off the right edge, instead of shrinking to fit the viewport */
  .timeline-row {
    margin-top: 40px;
    overflow-x: auto;
    margin-left: calc(-1 * var(--container-pad));
    margin-right: calc(-1 * var(--container-pad));
    padding: 0 var(--container-pad);
    scrollbar-width: none;
  }
  .timeline-row::-webkit-scrollbar { display: none; }
  .timeline-item { flex: 0 0 200px; }
  .timeline-item__year { font-size: 32px; letter-spacing: -0.32px; }

  /* 80px at 375, where --sp-120 would collapse to 56 */
  .team--v2,
  .team--board { padding-top: 80px; }
  .team--v2 .team-member__avatar { aspect-ratio: 163.5 / 120; }
  .team--board .team__grid { grid-template-columns: 1fr 1fr; }

  .ir-contact--wide .ir-contact__text h2 { white-space: normal; }
  /* at 375 the artwork sits above the copy and everything centres under it */
  .ir-contact__art { left: 0; top: 0; width: 100%; height: auto; }
  .ir-contact--wide .ir-contact__inner { padding-top: 354px; }
  .ir-contact--wide .ir-contact__body { gap: 32px; }
  .ir-contact--wide .ir-contact__text { align-items: center; text-align: center; }
  .ir-contact--wide .ir-contact__buttons { width: 100%; }
  .ir-contact--wide .ir-contact__buttons .btn { flex: 1 1 0; justify-content: center; }
}

/* ===== assets/css/insights-v2.css ===== */
/* ==========================================================================
   Insights v2 — new sections for insights-2.html, verified against the Figma
   Dev Mode source (file CR70V8ZRQR9Qg7LWefymrS, desktop frame 1820:6665,
   mobile frame 1820:6898). Loaded only by insights-2.html, after
   insights.css / detail.css and before v2-shared.css, so insights.html is
   untouched. The "Featured" section reuses insights.css's .news__list /
   .news__featured components (they're standalone classes, not scoped under
   .news) — only the heading above them, the column split and the section
   name are new. Only what is genuinely new, or genuinely different from the
   old page's tuning, lives here.

   Figma's page is 12 columns / 32px gutters inside a 1376px container, so a
   4-column label block is 437px and the content track beside it starts at
   469px. v2-shared.css already puts .split on that grid; the headings and
   "View all" links below that are NOT inside a .split need the same offset,
   hence --track-offset.
   ========================================================================== */

:root {
  /* left edge of the 8-column content track, measured from the container */
  --track-offset: calc((100% - 352px) / 3 + 128px);
}

/* Distance from the container's outer edge to the viewport edge: zero until
   the viewport passes --container-max, then half the surplus. A plain
   --container-pad only reaches the container, so these bands stopped short
   of the screen on anything wider than 1440. 100vw counts the scrollbar, so
   the sections using it clip the few px of overshoot. */
.featured,
.pr,
.itn,
.videos,
.signup--dark {
  --page-bleed: calc((100vw - min(100vw, var(--container-max))) / 2);
  --bleed-x: calc(var(--container-pad) + var(--page-bleed));
  overflow-x: clip;
}

/* Figma runs the row bands, the newsletter field and every "View all" rule
   past the container's right gutter, out to the viewport edge. */
.bleed-right { margin-right: calc(var(--bleed-x) * -1); }
.u-mobile { display: none; }

/* ---------- Hero: deep-blue ground instead of forest ----------
   Same fix as company-2.html's hero--v2: hero.webm and the .hero::after
   legibility gradient are both baked in forest green for the homepage
   hero, so neutralise the video to a pure luminance map and screen it
   onto the deep-blue backdrop, and give the gradient its own deep-blue
   tint. */
.hero--v2 { background-color: var(--color-deep-blue); }
/* Figma's hero content box is 996px, but "The latest from Hilbert Group" is
   one line there (text node 1820:6672 is 76px tall = a single 84px/0.9 line)
   and needs ~1090px to stay on one line in the browser. Widen just the box. */
.hero--v2.hero--wide .hero__content { width: 1100px; }
/* hero.webm is forest-toned: greyed, its ground sits at ~49/255 and its
   lines at ~199. brightness() lifted the ground too, so screening it washed
   the section out to slate. contrast(1.7) maps that ground to black — which
   screen leaves untouched — so the deep-blue stays flat under the animation.
   Same treatment as company-2. */
.hero--v2 .hero__art-layers { opacity: 0.5; }
/* The scene draws no ground of its own here (showBackground:false in the
   host's data-scene), so only the lines land on the section's flat deep blue.
   The still underneath is a forest-toned render, so it still needs the old
   treatment: contrast(1.7) maps its greyed ground (~49/255) to black, which
   `screen` leaves untouched. */
.hero--v2 .hero__art {
  filter: grayscale(1) contrast(1.7);
  mix-blend-mode: screen;
}
/* the design is a flat ground, so home.css's legibility gradient goes */
.hero--v2::after { background: none; }
@media (max-width: 768px) {
  .hero--v2 .hero__inner { align-items: stretch; text-align: left; }
  .hero--v2 .hero__content { display: flex; flex-direction: column; }
}

/* ---------- Featured ----------
   Heading sits on the content track (x=469), not centred. The two columns
   butt up against each other with no gutter (Figma: 437 | 939 inside 1376),
   unlike every other .split on the page — hence the local override, which
   needs 3 classes to outrank v2-shared's `.site-header--v2 ~ main .split`. */
.featured { background: var(--color-almost-white); padding: var(--sp-120) 0; }
.featured__head { margin-left: var(--track-offset); }
.featured__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); }
.featured .split.featured__body {
  grid-template-columns: calc((100% - 352px) / 3 + 96px) 1fr;
  column-gap: 0;
  margin-top: var(--sp-80);
  align-items: stretch;
}
/* three equal 216px rows filling the 648px card beside them, divided
   between rather than under each other, with "Read" on the row's foot */
.featured .news__featured { min-height: 648px; }
.featured .news-item { flex: 1 1 0; border-bottom: 0; }
.featured .news-item + .news-item { border-top: 1px solid var(--color-blue-10); }
.featured .news-item .link { margin-top: auto; }
/* news-maze.svg carries width/height="100%", so a width-only rule collapses
   it to a band; Figma places the 1030x1030 vector centred on x, 53px below
   the card's centre on y. */
.featured .news__featured-maze { width: 1030px; height: 1030px; top: calc(50% + 53px); }

/* ---------- Press Releases ----------
   Filter is the shared Input component (203x44, 16/22 text, blue-50 rule).
   Each row is a 22px tag over a bordered band that bleeds 16px left and out
   to the viewport edge on the right (Figma: 955px wide against a 907px
   track), so the band — not the tag — carries the hover highlight. */
.pr { background: var(--color-light-blue); padding: var(--sp-120) 0; }
.pr__inner { align-items: start; }
/* the eyebrow is a 375-only element; the desktop frame leads straight with
   the filter, so it stays hidden above the mobile breakpoint */
.pr__label { display: none; }
.pr__filter { display: inline-flex; align-items: center; justify-content: space-between; gap: 8px; width: 203px; padding: 10px 16px 10px 0; border-bottom: 1px solid var(--color-blue-50); font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); background: none; cursor: pointer; }
.pr__filter svg { width: 24px; height: 24px; flex-shrink: 0; }
.pr__main h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-night); margin-bottom: var(--sp-80); }
.pr-list { display: flex; flex-direction: column; gap: var(--sp-40); }
.pr-row { position: relative; display: flex; flex-direction: column; gap: 4px; color: inherit; text-decoration: none; }
.pr-row__tag { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.pr-row__body {
  position: relative;
  display: flex; flex-direction: column; gap: 10px;
  border-top: 1px solid var(--color-blue-10);
  padding: 16px 32px 40px 16px;
  margin-left: -16px;
  margin-right: calc(var(--bleed-x) * -1);
}
.pr-row__body::before { content: ""; position: absolute; left: 0; right: 0; top: 0; bottom: 0; background: rgba(23, 34, 58, 0.05); opacity: 0; transition: opacity 0.2s ease; }
.pr-row__body > * { position: relative; }
.pr-row:hover .pr-row__body::before { opacity: 1; }
.pr-row__title { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); }
.pr-row__arrow { padding-left: 0.25em; opacity: 0; transition: opacity 0.2s ease; }
.pr-row:hover .pr-row__arrow { opacity: 1; }
.pr-row__date { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
@media (max-width: 992px) { .pr__inner { grid-template-columns: 1fr; row-gap: 24px; } }

/* ---------- "View all" rules ----------
   A 22px label on a 4px/4px bed, underlined the full width of its track and
   out to the viewport edge. */
.pr__more, .itn__more, .videos__more {
  display: block;
  padding: 4px 0;
  border-bottom: 1px solid var(--color-night);
  font-family: var(--font-body); font-size: 16px; line-height: 22px;
  color: var(--color-night);
  margin-right: calc(var(--bleed-x) * -1);
}
.pr__more { margin-top: var(--sp-40); }
.itn__more { margin-top: 52px; margin-left: var(--track-offset); }
.videos__more { margin-top: var(--sp-64); margin-left: var(--track-offset); }

/* ---------- In the News ----------
   A full-bleed-to-container night band carrying a 10%-opacity ascii texture,
   with a 908px blue-5 card justified to its right edge; then three
   left-ruled columns and a "View all" rule on the content track.
   manifesto-ascii.png was authored for the forest-toned manifesto band, so
   grayscale + screen-blend neutralises it into a luminance map that tints
   toward the night ground here, matching the reference's subtle texture. */
.itn { background: var(--color-almost-white); padding: var(--sp-120) 0 var(--sp-80); }
.itn__head { align-items: start; }
.itn__head > .label { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.itn__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 56px; line-height: 1; letter-spacing: -0.56px; color: var(--color-night); }

.itn__feature {
  position: relative; overflow: hidden;
  margin-top: var(--sp-80);
  background: var(--color-night);
  padding: 16px 16px 16px 0;
  display: flex; align-items: center; justify-content: flex-end;
}
.itn__feature-art {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  width: 100%; max-width: none; height: auto;
  opacity: 0.3; filter: grayscale(1); mix-blend-mode: screen;
  pointer-events: none;
}
.itn__feature-card {
  position: relative; z-index: 1;
  width: 908px; max-width: 100%; height: 300px;
  background: var(--color-blue-5);
  padding-top: 16px;
  display: flex; flex-direction: column; justify-content: space-between;
}
.itn__feature-top { display: flex; align-items: flex-start; padding: 0 16px; }
.itn__feature-title { width: 471px; flex-shrink: 0; display: flex; flex-direction: column; gap: 8px; }
.itn__feature-card .tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
.itn__feature-card h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-night); }
.itn__feature-desc { width: 309px; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-blue-50); }
.itn__feature-meta { display: flex; align-items: center; padding: 8px 16px; border-top: 1px solid var(--color-blue-10); }
.itn__feature-meta span { width: 470px; flex-shrink: 0; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }
.itn__feature-meta a { font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-night); text-decoration: none; }

.itn__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0; }
.itn-card { border-left: 1px solid var(--color-blue-10); padding: var(--sp-40) 16px; display: flex; flex-direction: column; gap: var(--sp-80); }
.itn-card__head { display: flex; flex-direction: column; gap: 8px; }
.itn-card__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
.itn-card__title { font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-night); }
.itn-card .link { font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-night); text-decoration: none; }
@media (max-width: 992px) {
  .itn__head { grid-template-columns: 1fr; row-gap: 16px; }
  .itn__feature { padding: 16px; justify-content: stretch; }
  .itn__feature-card { width: 100%; height: auto; }
  .itn__feature-top { flex-direction: column; gap: 16px; }
  .itn__feature-title, .itn__feature-desc { width: 100%; }
  .itn__feature-meta span { width: auto; flex: 1; }
  .itn__grid { grid-template-columns: 1fr; }
  /* stacked cards: the column rules and their 16px indent go away, so the
     text sits on the container edge like the mobile frame (1820:6980) */
  .itn-card { gap: var(--sp-40); border-left: 0; padding: var(--sp-24) 0; }
  .itn-card + .itn-card { border-top: 1px solid var(--color-blue-10); }
}

/* ---------- Videos & Webinars ----------
   Heading and "View all" sit on the content track; the three 4-column cards
   run the full container width. Thumbs are 437x225. */
.videos { background: var(--color-almost-white); padding: var(--sp-120) 0; }
.videos__head { margin-left: var(--track-offset); }
.videos__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 56px; line-height: 1; letter-spacing: -0.56px; color: var(--color-night); }
.videos__grid { margin-top: var(--sp-64); display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--grid-gap-lg); }
.video-card { display: flex; flex-direction: column; gap: var(--sp-32); }
.video-card__thumb { position: relative; aspect-ratio: 437 / 225; background: var(--color-blue-10); display: flex; align-items: center; justify-content: center; }
.video-card__thumb svg { width: 64px; height: 64px; color: rgba(23, 34, 58, 0.25); }
.video-card__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-blue-50); }
.video-card__title { margin-top: 8px; font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-night); }
@media (max-width: 992px) { .videos__grid { grid-template-columns: 1fr; } }

/* ---------- Newsletter ----------
   Same signup band on the night ground so it reads as one continuous panel
   with the (also night) footer below. Figma stacks a light-green
   "Newsletter" line over the muted sentence at 40px/1, 80px above the
   field, and runs the field's rule out to the viewport edge. */
.signup--dark { background: var(--color-night); }
.signup--dark .signup__main { gap: var(--sp-80); }
.signup--dark .signup__head h2 { color: var(--color-gray-40); }
.signup--dark .signup__kicker { display: block; color: var(--color-light-green); }
.signup--dark .signup__form { margin-right: calc(var(--bleed-x) * -1); border-bottom-color: var(--color-light-green); }
.signup--dark .signup__form input { padding: 10px 16px 10px 0; color: var(--color-light-green); }
.signup--dark .signup__form input::placeholder { color: var(--color-light-green); }
.signup--dark .signup__form button { padding: 10px 16px; border-left-color: var(--color-light-green); color: var(--color-light-green); }

/* ==========================================================================
   Responsive — the mobile frame (1820:6898) drops every content-track offset
   and full-bleed rule back to the container edges.
   ========================================================================== */
@media (max-width: 992px) {
  .featured__head, .videos__head, .itn__more, .videos__more { margin-left: 0; }
  .featured .split.featured__body { grid-template-columns: 1fr; column-gap: 0; }
  .featured .news__featured { min-height: 420px; }
  .featured .news-item { flex: 0 0 auto; }
  .featured .news-item .link { margin-top: 4px; }
}
@media (max-width: 768px) {
  .u-desktop { display: none; }
  .u-mobile { display: inline; }

  /* the 375 frame gives the hero 747px, where the shared component's 736
     collapses under the shorter mobile copy */
  .hero--v2 { min-height: 747px; }

  /* 80px above "Featured" — --sp-80 collapses to 40 at this breakpoint */
  .featured { padding: 80px 0 var(--sp-80); }
  .featured__head h2 { font-size: 36px; letter-spacing: -0.36px; }
  .featured .split.featured__body { margin-top: var(--sp-40); }

  .pr { padding: 80px 0 var(--sp-80); }
  /* the frame stacks label, heading, filter, list, link. .pr__main has to
     dissolve for the filter to sit between the heading and the list. */
  .pr__inner { display: flex; flex-direction: column; align-items: stretch; row-gap: 0; }
  .pr__aside,
  .pr__main { display: contents; }
  .pr__label { display: block; order: 1; margin-bottom: 16px; }
  .pr__main h2 { order: 2; font-size: 36px; letter-spacing: -0.36px; margin-bottom: 0; }
  .pr__filter { order: 3; }
  .pr-list { order: 4; gap: var(--sp-24); }
  .pr__more { order: 5; }
  /* full-width control with its rule running to both screen edges */
  .pr__filter {
    width: auto;
    margin: 64px calc(var(--bleed-x) * -1) 40px;
    padding: 10px var(--bleed-x);
  }
  .pr-row__title { font-size: 24px; }
  .pr-row__body { padding: 16px 16px 24px; margin-left: calc(var(--bleed-x) * -1); padding-left: var(--bleed-x); }
  .pr-row__arrow { opacity: 1; }

  .itn { padding: 80px 0 var(--sp-80); }
  .itn__head h2 { font-size: 36px; letter-spacing: -0.36px; }
  /* the 375 frame runs the night band 556px tall with the card inset 16px
     and pinned to its foot, so 240px of the texture reads above it */
  .itn__feature {
    margin-top: var(--sp-40);
    min-height: 556px;
    padding: 240px 16px 16px;
    align-items: stretch;
    justify-content: stretch;
  }
  .itn__feature-card { height: auto; }
  /* height:auto left the texture as a short centred band on a 556px block,
     so most of it read as flat night — cover the band instead */
  .itn__feature-art { width: 100%; height: 100%; object-fit: cover; top: 0; left: 0; transform: none; }
  .itn__feature-card h3 { font-size: 28px; }

  .videos { padding: 80px 0 var(--sp-80); }
  .videos__head h2 { font-size: 36px; letter-spacing: -0.36px; }
  .videos__grid { margin-top: var(--sp-40); }

  /* these rules run to BOTH screen edges here, with the padding giving back
     what the margin took so the label stays on the container */
  .pr__more, .itn__more, .videos__more {
    margin-left: calc(var(--bleed-x) * -1);
    margin-right: calc(var(--bleed-x) * -1);
    padding-left: var(--bleed-x);
    padding-right: var(--bleed-x);
  }
  /* the field's rule runs to both screen edges while the input and the
     Subscribe button stay on the container, so the padding gives back
     exactly what the margin took */
  .signup--dark .signup__form {
    margin-left: calc(var(--bleed-x) * -1);
    margin-right: calc(var(--bleed-x) * -1);
    padding-left: var(--bleed-x);
    padding-right: var(--bleed-x);
  }
  .signup--dark .signup__main { gap: var(--sp-40); }
}

/* ===== assets/css/contact-v2.css ===== */
/* ==========================================================================
   Contact v2 — new sections for contact-2.html, built from Figma
   (file CR70V8ZRQR9Qg7LWefymrS, desktop frame 1775:16911, mobile 1775:17059).
   Loaded only by contact-2.html, after contact.css, so contact.html is
   provably untouched. The page reuses contact.css's components almost
   wholesale (.audience / .contact-card / .enquiry / .routing / .enquiry-form
   / .offices / .office-row); only the deltas between the old design and the
   new one live here, each behind a --v2 modifier.
   ========================================================================== */

/* ---------- Hero ----------
   Figma 1775:16912: 800px tall, #1a2c45 ground (= --color-deep-blue), the
   volume render bleeding off the top, content bottom-aligned in a 711px
   column with 76px between the breadcrumb and the title block. .hero's own
   defaults already carry the 711/76/32 geometry, so only ground, height and
   the artwork's placement need saying. */
.hero--v2 { background-color: var(--color-deep-blue); min-height: 800px; isolation: isolate; }
/* hero-volume.png is baked on an OPAQUE forest ground (#163a2b) — it was cut
   for the forest-branded pages. Grayscaling it and stretching the levels so
   the ground clips to black (its luma is 46/255; brightness 0.92 + contrast
   1.5 maps that to 0 and the brightest line to 1) turns it into a pure
   light-on-black map, which "screen" then lays over the navy ground with no
   visible plate edge. `isolation` keeps the blend inside this section. */
.hero--v2 .hero__bg {
  top: 0;
  left: 0;
  width: 1440px;
  filter: grayscale(1) brightness(0.88) contrast(1.8);
  mix-blend-mode: screen;
}
/* the legibility gradient in home.css is forest-tinted (it was written for
   the homepage hero); re-tint it to the navy ground */
.hero--v2::after {
  background: linear-gradient(180deg, transparent 34%, rgba(25, 44, 69, 0.72) 78%);
}

/* Distance from the container's outer edge to the viewport edge: zero until
   the viewport passes --container-max, then half the surplus. A plain
   --container-pad only reaches the container, so bands using it stopped
   short of the screen past 1440. 100vw counts the scrollbar, so the
   sections using it clip the few px of overshoot. */
.audience,
.enquiry,
.offices {
  --page-bleed: calc((100vw - min(100vw, var(--container-max))) / 2);
  --bleed-x: calc(var(--container-pad) + var(--page-bleed));
  overflow-x: clip;
}

/* ---------- Who to Contact ----------
   Figma 1775:16921. Same .audience shell as contact.html (almost-white,
   120/120, 80px between head and cards) but the head loses its paragraph
   and the six-card 3-up grid becomes four cards in a 2-up grid that sits in
   the 8-column content track — shifted 16px left of it so the cards' 16px
   inner padding puts the text back on the 469px column line. */
.audience--v2 .audience__main h2 { max-width: none; }
.audience--v2 .audience__grid {
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  /* 12 cols / 32px gutters: 4-col label block = 437.33, content track starts
     at 469.33; minus the card's own 16px padding = 453.33 */
  margin-left: calc((100% - 352px) / 3 + 112px);
}
/* Figma pads the card vertically only — the body and the link each carry the
   16px inset themselves, so the maze artwork bleeds to the card's left edge */
/* no bottom padding: the link's foot is flush with the card's edge, so no
   strip of card shows under it */
.audience--v2 .contact-card { padding: 16px 0 0; justify-content: space-between; }
.audience--v2 .contact-card__body { padding: 0 0 0 16px; gap: 8px; }
.audience--v2 .contact-card__desc { line-height: 20px; }
/* the artwork is a 708px square; the global `img { max-width: 100% }` was
   clamping it to the card's width while the height stayed 708, and
   card-maze.svg carries preserveAspectRatio="none", so it stretched to fill
   instead of overflowing the card */
.audience--v2 .contact-card__graphic { max-width: none; }
/* the link sits on the same opaque foot the Principles cards use for their
   numbers — the card's own colour, covering the artwork behind it */
.contact-card__link {
  position: relative;
  z-index: 1;
  margin-top: auto;
  background: var(--color-blue-5);
  border-top: 1px solid var(--color-blue-10);
  padding: 4px 8px 4px 16px;
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 20px;
  color: var(--color-night);
}
.contact-card__link:hover { text-decoration: underline; text-underline-position: from-font; }

/* ---------- Contact form ----------
   Figma 1775:16967. Night ground, 120/120, and — unlike every other section
   — no right page padding: the 939px form column runs from the 469px column
   line to the viewport edge, 32px past the container. */
.enquiry--v2 .enquiry__form { gap: var(--sp-80); }
/* The controls stay on the container and only the rule reaches the screen
   edge, so the line cannot be the control's own border — each row draws it
   as a pseudo-element that bleeds past the gutter instead. */
.enquiry--v2 .enquiry-form .field__control { border-bottom: none; }
.enquiry--v2 .enquiry-form > .row2,
.enquiry--v2 .enquiry-form > .field { position: relative; }
.enquiry--v2 .enquiry-form > .row2::after,
.enquiry--v2 .enquiry-form > .field::after {
  content: "";
  position: absolute;
  left: 0;
  right: calc(-1 * var(--bleed-x));
  bottom: 0;
  height: 1px;
  background: var(--color-gray-40);
}

/* Routing rail: a 201px column with a full-height hairline, of which the
   first 82px are drawn bright to mark the active step; steps 2 and 3 sit at
   10% so the rail reads as progress rather than a list. */
.routing--v2 {
  position: relative;
  width: 201px;
  gap: 32px;
  padding: 16px 0 16px 32px;
  border-left-color: var(--color-gray-50);
}
.routing--v2::before {
  content: "";
  position: absolute;
  left: -1px;
  top: 0;
  width: 1px;
  height: 82px;
  background: var(--color-almost-white);
}
/* the step captions overhang the 169px text column in Figma rather than
   wrapping inside it, which is what keeps each step exactly two lines tall */
.routing--v2 .routing__item h4 { font-size: 28px; line-height: 1; letter-spacing: -0.28px; white-space: nowrap; }
.routing--v2 .routing__item p { margin-top: 0; line-height: 20px; color: var(--color-almost-white); white-space: nowrap; }
.routing--v2 .routing__item + .routing__item { opacity: 0.1; }

/* The intro's second line is display type, not body copy: 40px Newsreader at
   50% on the same leading as the heading above it, with no gap between them. */
.enquiry--v2 .enquiry__intro p {
  margin-top: 0;
  max-width: 831px;
  font-family: var(--font-heading);
  font-size: 40px;
  line-height: 1;
  letter-spacing: -0.4px;
  color: var(--color-gray-40);
}

/* paired fields are 455 / rest, not 50-50 */
.enquiry--v2 .enquiry-form .row2 { grid-template-columns: minmax(0, 455px) 1fr; }
/* two consent checkboxes side by side under the message field */
.consent-row { display: grid; grid-template-columns: 1fr 1fr; gap: 0; }
.enquiry--v2 .enquiry-form .consent { gap: 8px; padding: 0 16px 10px 0; }
/* Figma draws a plain 16px square — no radius — that fills almost-white when
   checked and carries a night tick; the native control renders a rounded box
   with the UA's own glyph, so it is replaced outright. */
.enquiry--v2 .enquiry-form .consent input {
  appearance: none;
  -webkit-appearance: none;
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  margin: 4px 0 0;
  border: 1px solid var(--color-gray-40);
  border-radius: 0;
  background: transparent;
  cursor: pointer;
}
.enquiry--v2 .enquiry-form .consent input:checked {
  background: var(--color-almost-white);
  border-color: var(--color-almost-white);
  /* the 11px tick from the design, drawn at the same 1px square-cap stroke */
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='11' viewBox='0 0 11 11' fill='none'%3E%3Cpath d='M1.26042 6.91797L4.125 9.28125L9.73958 1.71875' stroke='%2317223A' stroke-linecap='square'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
}
.enquiry--v2 .enquiry-form .consent input:focus-visible { outline: 2px solid var(--color-almost-white); outline-offset: 2px; }
.enquiry--v2 .enquiry-form .btn { width: 203px; }

/* ---------- Offices ----------
   Figma 1775:17010. Light-blue (not light-green), the maze artwork mirrored
   into the empty label column, and the same edge-bleeding 939px content
   track as the form above. The entity name now sits ABOVE the hairline
   rather than below it, so the rule moves from .office-row to its line. */
.offices--v2 { background: var(--color-light-blue); }
.offices--v2 .offices__graphic {
  left: -341px;
  top: 3px;
  width: 818px;
  height: 818px;
  /* square artwork: without this the global img cap squashes it to the
     container width while the height holds, and the SVG's
     preserveAspectRatio="none" stretches rather than crops */
  max-width: none;
  transform: scaleX(-1);
  opacity: 0.5;
}
.offices__label { display: none; }
/* the row rules run out to the screen edge, not just the container's */
.offices--v2 .offices__main { margin-right: calc(-1 * var(--bleed-x)); }
.offices--v2 .offices__main h2 { margin-bottom: var(--sp-80); }
.offices--v2 .office-row { border-top: none; padding: 0; }
.offices--v2 .office-row + .office-row { margin-top: 32px; }
.offices--v2 .office-row__cat { margin-bottom: 4px; }
.offices--v2 .office-row__line {
  border-top: 1px solid var(--color-blue-10);
  padding-top: 16px;
  gap: 0;
  align-items: center;
}
.offices--v2 .office-row__addr {
  width: 417.5px;
  font-family: var(--font-heading);
  font-style: italic;
  font-size: 16px;
  line-height: 20px;
  color: var(--color-night);
}

/* ---------- Footer ---------- */
.footer-col__contact-lead { font-family: var(--font-body); font-size: 13px; color: var(--color-gray-40); margin-bottom: 8px; }

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width: 1024px) {
  .audience--v2 .audience__grid { margin-left: 0; }
  .offices--v2 .office-row__addr { width: auto; }
}

@media (max-width: 992px) {
  .enquiry--v2 .enquiry__form { margin-right: 0; }
  .offices--v2 .offices__main { margin-right: 0; }
  .routing--v2 { width: 100%; padding: 16px 0 16px 24px; border-left: 1px solid var(--color-gray-50); }
  .offices--v2 .office-row__line { align-items: flex-start; }
}

/* Mobile — Figma 1775:17059 (375). Section targets: hero 683 (+64 header),
   Who to Contact 598, Contact form 1484, Offices 1056. */
@media (max-width: 768px) {
  /* Hero: content bottom-aligned with a 32px foot, the artwork floating in
     the empty upper half. home.css's mobile hero rules centre .hero__inner
     and flatten .hero__content for the homepage's stats hero — this hero has
     neither, so put both back to a plain left-aligned column. */
  .hero--v2 { min-height: 683px; padding: 0 0 32px; }
  /* the artwork is centred and drawn wide enough that its dense band fills
     roughly the top 350px of the hero, as it does in the 375 frame */
  .hero--v2 .hero__bg { top: 0; width: 950px; }
  .hero--v2 .hero__inner { flex-direction: column; align-items: stretch; text-align: left; gap: 0; }
  .hero--v2 .hero__content { display: flex; flex-direction: column; gap: 12px; width: 100%; }
  .hero--v2 .hero__title { line-height: 0.9; }
  .hero--v2 .hero__text { line-height: 20px; }

  /* Who to Contact: 80/80 (the shared --sp-120 collapses to 56 here, which
     is the wrong number for this section), 44px down to the card slider */
  .audience--v2 { padding-top: 80px; padding-bottom: 80px; }
  .audience--v2 .container { gap: 44px; }
  .audience--v2 .audience__head { row-gap: 16px; }
  /* contact.css turns this into an edge-to-edge slider with a negative
     gutter; the desktop track offset above resets margin-left, which was
     also cancelling that and pushing the first card 16px off the container */
  .audience--v2 .audience__grid {
    gap: 24px;
    margin-left: calc(-1 * var(--container-pad));
    margin-right: calc(-1 * var(--bleed-x));
  }
  .audience--v2 .contact-card { flex: 0 0 300px; }

  /* the 375 frame carries the eyebrow above the Offices heading */
  .offices__label { display: block; margin-bottom: 16px; }
  /* 708px square at x=-167, y=-392 in the frame */
  .offices--v2 .offices__graphic { left: -167px; top: -392px; width: 708px; height: 708px; transform: none; }

  /* Contact form: 32 top / 80 bottom, fields edge-to-edge, 44px rhythm */
  .enquiry--v2 { padding-top: 32px; padding-bottom: 80px; }
  .enquiry--v2 .enquiry__inner { row-gap: 64px; }
  .enquiry--v2 .enquiry__form { gap: 44px; }
  .routing--v2 { padding: 16px 0 16px 16px; gap: 32px; }
  .routing--v2::before { height: 62px; }
  .routing--v2 .routing__item h4 { font-size: 22px; line-height: 22px; }
  .routing--v2 .routing__item p { margin-top: 8px; font-size: 12px; line-height: 16px; }
  .enquiry--v2 .enquiry__intro h3 { font-size: 24px; }
  .enquiry--v2 .enquiry__intro p { margin-top: 8px; }
  .enquiry--v2 .enquiry__intro p { font-size: 24px; letter-spacing: -0.24px; }
  .enquiry--v2 .enquiry-form { gap: 44px; }
  .enquiry--v2 .enquiry-form .row2 { grid-template-columns: none; }
  .consent-row { grid-template-columns: 1fr; row-gap: 16px; }
  .enquiry--v2 .enquiry-form .consent { padding-left: var(--container-pad); padding-right: var(--container-pad); }
  .enquiry--v2 .enquiry-form .btn { width: auto; margin: 0 var(--container-pad); }

  /* Offices: the artwork sits above the copy, which starts 300px down */
  /* 336 = Figma's 300px of artwork headroom plus the 36px the hidden
     "Global presence" label would otherwise have occupied */
  .offices--v2 { padding-top: 336px; padding-bottom: 80px; }
  .offices--v2 .offices__graphic { display: block; left: -167px; top: -392px; width: 708px; height: 708px; transform: none; }
  .offices--v2 .offices__inner { row-gap: 16px; }
  .offices--v2 .offices__main h2 { margin-bottom: 52px; }
  .offices--v2 .office-row + .office-row { margin-top: 44px; }
  /* the rule reaches both screen edges here while the city and address stay
     on the container, so the padding gives back what the margin took */
  .offices--v2 .office-row__line {
    flex-direction: column;
    gap: 16px;
    margin-left: calc(-1 * var(--bleed-x));
    margin-right: calc(-1 * var(--bleed-x));
    padding-left: var(--bleed-x);
    padding-right: var(--bleed-x);
  }
  .offices--v2 .office-row__city { font-size: 28px; letter-spacing: -0.28px; }
}

/* the label column is empty on this section (Figma renders "Global presence"
   at opacity 0); it only holds the 4-column offset open on desktop */
@media (max-width: 992px) { .offices__label-slot { display: none; } }

/* ===== assets/css/v2-shared.css ===== */
/* ==========================================================================
   v2 shared — header/footer chrome fixes common to every "-2"/rebuilt page
   (index.html, solutions-2.html, company-2.html, insights-2.html,
   contact-2.html), found by comparing against the Figma Dev Mode source
   (file CR70V8ZRQR9Qg7LWefymrS). Loaded by all of them, after their own
   page CSS, so the shared style.css — and every page NOT in that list —
   stays untouched.

   Deltas measured against Figma (Company frame 1820:6001, whose Header
   1820:6010 and Footer 1820:6254 instances are shared by every page):
   1. Header/footer chrome uses navy ("blue") muted tokens throughout,
      not the forest ("green") ones style.css's shared .site-header /
      .dropdown default to (those were tuned for the older forest-branded
      pages this rebuild doesn't touch).
   2. The footer is a tighter, denser block than the shared component:
      32px vertical padding (not 60/28), a 437px brand column against
      4x203px link columns on a 32px gutter (not 5 near-equal columns on
      40px), 13px/16px type throughout (not 14/15px), and a 6-column
      legal row (not a two-group space-between row).
   3. The brand tagline is bottom-aligned against the tallest link column,
      which the shared component renders directly under the wordmark.
   ========================================================================== */

.site-header--v2 { border-bottom-color: var(--color-blue-10); }
.site-header--v2 .site-nav__list > li > a,
.site-header--v2 .site-nav__toggle,
.site-header--v2 .header-login,
.site-header--v2 .header-cta { color: var(--color-blue-50); }
.site-header--v2 .site-nav__list > li > a:hover,
.site-header--v2 .site-nav__toggle:hover,
.site-header--v2 .header-login:hover,
.site-header--v2 .header-cta:hover { color: var(--color-night); }
.site-header--v2 .header-login { border-right-color: var(--color-blue-50); }
.site-header--v2 .dropdown__label { color: var(--color-blue-50); border-top-color: var(--color-blue-10); }
.site-header--v2 .dropdown__item:hover { background: var(--color-blue-5); }
.site-header--v2 .dropdown__item-title,
.site-header--v2 .dropdown__more { color: var(--color-night); }
.site-header--v2 .dropdown__item-desc { color: var(--color-blue-50); }
.site-header--v2 .dropdown__more { border-top-color: var(--color-blue-10); border-bottom-color: var(--color-blue-10); }
.site-header--v2 .dropdown__more::after { background: var(--color-night); }

/* ---------- The 12-column grid ----------
   Figma lays every page on 12 columns with 32px gutters, so a 4-column
   label block is 437px and the content track beside it starts at 469px
   (measured identically on Our Story, Principles, Leadership, Governance,
   Investor Relations and the footer). The shared .split is a plain 4fr/8fr
   with no gutter, which starts the content track at 459px — about 11px
   left of the design everywhere it is used.

   Scoped through the v2 header rather than applied to .split directly:
   .split is shared with ten-odd pages that are not part of this rebuild
   and are not being measured against Figma, and shifting all of them by
   11px is not a change this pass is entitled to make. header/main are
   siblings, so this needs no extra markup. */
.site-header--v2 ~ main .split,
.site-header--v2 ~ main .ir-contact__inner {
  grid-template-columns: calc((100% - 352px) / 3 + 96px) 1fr;
  column-gap: 32px;
}
@media (max-width: 992px) {
  .site-header--v2 ~ main .split,
  .site-header--v2 ~ main .ir-contact__inner { grid-template-columns: 1fr; column-gap: 0; }
}

/* ---------- Footer ----------
   The border-top lives here rather than on a colour modifier: main.js
   rewrites the footer's colour class at runtime to follow the section
   above it, so a rule hung on .site-footer--deep-blue silently stops
   applying the moment that section resolves to another colour. */
.site-footer--v2 { padding: 32px 0; border-top: 1px solid var(--color-gray-10); }
/* gray/10 is an almost-white hairline — invisible on the light-green
   footer, which style.css rules in green. main.js picks the colour variant
   at runtime, so restore the green rule whenever it lands on that one. */
.site-footer--v2.site-footer--light-green { border-top-color: var(--color-green-10); }
.site-footer--v2 .site-footer__grid { grid-template-columns: 437px repeat(4, 1fr); gap: 32px; }
/* the tagline is justified to the foot of the tallest column, not stacked
   under the wordmark */
.site-footer--v2 .footer-brand { display: flex; flex-direction: column; justify-content: space-between; }
.site-footer--v2 .footer-brand__tagline { margin-top: 0; font-size: 12px; line-height: 16px; opacity: 0.7; max-width: 320px; }
.site-footer--v2 .footer-col__title { margin-bottom: 16px; font-size: 13px; line-height: 16px; opacity: 0.6; }
/* the <li> must carry the 16px line-height too — inheriting the body's
   leading stretches the 28px row pitch Figma specifies to 34px. The anchor
   also has to leave the inline flow: as an inline box it builds a line box
   from its own font metrics rather than the 16px line-height, rounding each
   row up to 17px and the pitch to 29px. */
.site-footer--v2 .footer-col__list li { line-height: 16px; }
.site-footer--v2 .footer-col__list a { display: block; font-size: 13px; line-height: 16px; }
.site-footer--v2 .footer-col__contact-lead { margin-bottom: 0; line-height: 16px; }
.site-footer--v2 .footer-social { margin-top: 12px; }
.site-footer--v2 .site-footer__bottom { margin-top: 32px; padding-top: 16px; }
/* six evenly-spaced legal columns; `display: contents` promotes the two
   grouping wrappers' children to grid items so the markup stays as-is */
/* line-height on the row itself, not just the links: two of the six legal
   items wrap to a second line, and the bare <span>s would otherwise fall
   back to the 13px body leading (17.875px) and stretch the row past 48px */
.site-footer--v2 .site-footer__bottom--wide { display: grid; grid-template-columns: repeat(6, 1fr); gap: 32px; line-height: 16px; }
.site-footer--v2 .site-footer__bottom--wide .footer-legal,
.site-footer--v2 .site-footer__bottom--wide .footer-policies { display: contents; }

@media (max-width: 1024px) {
  .site-footer--v2 .site-footer__grid { grid-template-columns: 1fr 1fr; }
  /* Narrow order: wordmark, then the link columns paired down the page
     (Solutions/Company, then Insights/Contact), then the legal paragraph,
     then the policy row. The brand block dissolves so its wordmark and its
     paragraph can sit on either side of the columns. */
  .site-footer--v2 .footer-brand { display: contents; }
  .site-footer--v2 .footer-brand .logo { grid-column: 1 / -1; grid-row: 1; }
  .site-footer--v2 .footer-col:nth-child(2) { grid-column: 1; grid-row: 2; }
  .site-footer--v2 .footer-col:nth-child(4) { grid-column: 2; grid-row: 2; }
  .site-footer--v2 .footer-col:nth-child(3) { grid-column: 1; grid-row: 3; }
  .site-footer--v2 .footer-col:nth-child(5) { grid-column: 2; grid-row: 3; }
  .site-footer--v2 .footer-brand__tagline { grid-column: 1 / -1; grid-row: 4; margin-top: 20px; }
  .site-footer--v2 .site-footer__bottom--wide { grid-template-columns: repeat(3, 1fr); row-gap: 12px; }
}
@media (max-width: 768px) {
  /* two columns rather than one long stack — six items read as a block
     under the brand text instead of a sixth of the footer's height */
  .site-footer--v2 .site-footer__bottom--wide { grid-template-columns: 1fr 1fr; row-gap: 12px; }
}

/* ===== assets/css/v2-motion.css ===== */
/* ==========================================================================
   v2 motion — hero artwork, and drift on the standing background plates
   ==========================================================================
   Replaces hero.webm, which was 4.97MB fetched with preload="auto" on four
   live pages. The same Hilbert volume is drawn by assets/js/hero-scene.js,
   which was already in the repo but wired only to the index-anim.html
   experiment. Vector hairlines instead of video compression, a signal that
   travels continuously instead of a ten-second loop, and nothing to download.

   Two layers in one box. The still is what the server sends and what a
   visitor without JavaScript keeps; the canvas fades over it once the runtime
   has actually drawn a frame (the `is-live` class the runtime sets). So there
   is never an empty band while the scene starts, and never two copies of the
   artwork visible at once.

   The video needed `filter: grayscale(1) contrast(1.7); mix-blend-mode:
   screen` on the inner pages to beat its baked-in forest tones into greyed
   lines over deep blue. The canvas needs none of that: the ground and the ink
   are stated per page in the host's data-scene attribute. The still is a
   render of the same forest artwork, so it keeps the filters — but only it.
   ========================================================================== */

.hero__art-layers {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  user-select: none;
}

.hero__art {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  display: block;
}

/* The runtime fits its artboard to a square on the box's SHORTER side and
   centres it, so a canvas stretched over the hero (1440x736) drew a 664px
   volume floating in the middle — the video, being object-fit:cover, had
   filled the width. Squaring the canvas to the hero's width and letting
   .hero__art-layers clip the overflow gives the artwork the full width back.
   This is the same correction index-anim.html made by hand in home-anim.css
   with a 1500px height; expressed as an aspect ratio it holds at any size. */
.hero__scene {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  /* A square whose side is the LARGER of the hero's two, centred and clipped
     by the wrapper — object-fit:cover, for a box that has to stay square.
     aspect-ratio with both minimums does it without naming either dimension:
     auto sizing grows the square until it satisfies whichever minimum binds. */
  width: auto;
  height: auto;
  aspect-ratio: 1 / 1;
  min-width: 100%;
  min-height: 100%;
  display: block;
}

.hero__art {
  /* the global `img { max-width: 100% }` would clamp the width while the
     height held — the same squash that bit the card graphics */
  max-width: none;
  object-fit: cover;
  /* centred, not top-anchored: the still is a square SVG of the artboard
     (scripts/make-hero-still.mjs), and cover on a square scales it to the
     hero's larger side exactly as .hero__scene is sized — so centring it puts
     it on the same pixels as the canvas. Top-anchoring was right for the old
     1440 captures, which were shots of the hero rather than the artboard. */
  object-position: center;
}

.hero__scene {
  opacity: 0;
  transition: opacity 480ms ease;
}

/* the runtime writes width/height inline on the canvas it appends */
.hero__scene canvas {
  display: block;
  width: 100%;
  height: 100%;
}

.hero__art-layers.is-live .hero__scene { opacity: 1; }
.hero__art-layers.is-live .hero__art {
  opacity: 0;
  transition: opacity 480ms ease;
}

/* Per-page treatment lives in each page's own stylesheet, because it is not
   uniform: home and Solutions draw the forest ground into the scene itself,
   exactly as the unfiltered video did, while Company and Insights paint a flat
   deep blue on the section and want only the lines over it. Keeping the
   difference here would mean this file guessing which .hero--v2 it is looking
   at, and Solutions is the one that would be guessed wrong.

/* Reduced motion is handled in the runtime, which slows the scene rather than
   skipping it — so the canvas still takes over from the still and nothing here
   needs to hide it. (This block used to display:none the canvas; with the
   runtime no longer returning early, that would have left a scene drawing
   behind a hidden element.) */

/* ==========================================================================
   Standing background plates
   ==========================================================================
   The artwork behind the pre-footer bands is a flat image that never moves.
   These give it a slow drift, using the technique the hero art uses: only
   `transform` animates, which the compositor handles without repainting, and
   the periods are deliberately co-prime-ish so two plates on one page never
   visibly resynchronise.

   Amplitudes are set so the movement is noticeable within a few seconds and
   still slow enough to read a heading over. A scale floor above 1 is what
   makes the translation safe: every plate here is object-fit:cover or a
   positioned artwork, so drifting an unscaled image would walk its own edge
   into the band.
   ========================================================================== */

@keyframes plate-drift-a {
  from { transform: translate3d(-1.4%, -0.8%, 0) scale(1.04); }
  to   { transform: translate3d(1.4%, 0.9%, 0) scale(1.09); }
}
@keyframes plate-drift-b {
  from { transform: translate3d(1.8%, 1%, 0) scale(1.08); }
  to   { transform: translate3d(-1.9%, -1.1%, 0) scale(1.03); }
}

/* The band above the footer on Company: "Build institutional infrastructure
   for digital markets". Its plate already covers the band, so it has room to
   move under the scale floor. */
.brandband--tiled .brandband__bg {
  will-change: transform;
  animation: plate-drift-a 53s ease-in-out infinite alternate;
}

/* Investor Relations, the last section on Company. This one is a positioned
   521px artwork rather than a cover plate, so it drifts on the second period
   and keeps its own transform origin. */
.ir-contact--wide .ir-contact__art {
  transform-origin: 50% 50%;
  will-change: transform;
  animation: plate-drift-b 41s ease-in-out infinite alternate;
}

/* Offices, the last section on Contact. */
.offices--v2 .offices__graphic {
  transform-origin: 50% 50%;
  will-change: transform;
  animation: plate-drift-a 47s ease-in-out infinite alternate;
}

/* A still plate is the honest reading of the request — these carry no
   information, so there is nothing lost by stopping them. */
@media (prefers-reduced-motion: reduce) {
  .brandband--tiled .brandband__bg,
  .ir-contact--wide .ir-contact__art,
  .offices--v2 .offices__graphic {
    animation: none;
    will-change: auto;
  }
}

/* ===== cms-pages.css ===== */
/* ==========================================================================
   Hero treatment, per page preset
   ==========================================================================
   This app loads all five page stylesheets at once, because one CMS page can
   hold blocks from any of them. The static site never did: each page loaded
   exactly one "-v2" sheet, so `.hero--v2` meant something different on each —
   forest on Solutions, deep blue elsewhere; no legibility gradient on Company
   and Insights, a navy one on Contact, the forest one from home.css on
   Solutions; and four different minimum heights again below 768.

   Loaded together, whichever sheet comes last decides for every page. So the
   block states which page's hero it is, and the treatment is restated here,
   scoped to that. Every value below is read off the page stylesheets:
   solutions-v2.css:20/178, company-v2.css:16/34, insights-v2.css:50/71/256,
   contact-v2.css:17/33/247.
   ========================================================================== */

/* ---------- Solutions: forest ground, home.css's forest gradient kept ---- */
/* Padding is stated for every preset, not just the odd one out. Two of the
   page sheets set it on the bare `.hero--v2` — solutions-v2.css a 64px foot,
   contact-v2.css a full `padding: 0 0 32px` below 768 — and with all five
   loaded those reach heroes they were never meant to. */
.hero[data-hero-preset='solutions'] {
  background-color: var(--color-forest);
  min-height: 736px;
  padding: 32px 0 64px;
}
.hero[data-hero-preset='solutions']::after {
  background: linear-gradient(180deg, transparent 34%, rgba(23, 58, 44, 0.72) 78%);
}
/* company-v2.css and insights-v2.css dim the whole art layer to 0.5 and
   screen the still (`grayscale(1) contrast(1.7)` + `mix-blend-mode: screen`)
   because their scene draws only lines over a flat deep blue. Solutions draws
   its forest ground into the scene itself, at full strength and unfiltered
   (solutions-v2.css sets neither) — with all sheets loaded the dimming
   reached it, and the deployed Solutions hero came out at half opacity. */
.hero[data-hero-preset='solutions'] .hero__art-layers { opacity: 1; }
.hero[data-hero-preset='solutions'] .hero__art {
  filter: none;
  mix-blend-mode: normal;
}

/* ---------- Company and Insights: flat deep blue, no gradient ------------ */
.hero[data-hero-preset='company'],
.hero[data-hero-preset='insights'] {
  background-color: var(--color-deep-blue);
}
.hero[data-hero-preset='company']::after,
.hero[data-hero-preset='insights']::after {
  background: none;
}
.hero[data-hero-preset='company'] { min-height: 800px; padding: 32px 0; }
.hero[data-hero-preset='insights'] { min-height: 736px; padding: 32px 0; }

/* ---------- Contact: deep blue with the gradient re-tinted navy ---------- */
.hero[data-hero-preset='contact'] {
  background-color: var(--color-deep-blue);
  min-height: 800px;
  padding: 32px 0;
}
.hero[data-hero-preset='contact']::after {
  background: linear-gradient(180deg, transparent 34%, rgba(25, 44, 69, 0.72) 78%);
}

@media (max-width: 768px) {
  /* home.css gives every narrow hero `padding: 230px 0 32px`; only Contact
     replaces it, and only on its own page. */
  .hero[data-hero-preset='solutions'] { min-height: 500px; padding: 230px 0 32px; }
  .hero[data-hero-preset='company'] { min-height: 800px; padding: 230px 0 32px; }
  .hero[data-hero-preset='insights'] { min-height: 747px; padding: 230px 0 32px; }
  .hero[data-hero-preset='contact'] { min-height: 683px; padding: 0 0 32px; }
}

/* ==========================================================================
   The rest of the hero, per preset
   ==========================================================================
   Same collision as above, in three more places. On their own pages these
   rules each reached one hero; loaded together they reach all of them.
   ========================================================================== */

/* home.css:889 gives .hero--wide a 996px column; insights-v2.css:54 widens it
   to 1100 for its own headline, which then applied to Company too. */
.hero[data-hero-preset='company'].hero--wide .hero__content { width: 996px; }
.hero[data-hero-preset='insights'].hero--wide .hero__content { width: 1100px; }
@media (max-width: 1024px) {
  .hero[data-hero-preset='company'].hero--wide .hero__content,
  .hero[data-hero-preset='insights'].hero--wide .hero__content { width: 100%; }
}

/* solutions-v2.css:23 lifts the muted half of the breadcrumb to gray-60 for
   its forest ground; every other page keeps home.css's gray-40. */
.hero[data-hero-preset='solutions'] .hero__breadcrumb .muted { color: var(--color-gray-60); }
.hero[data-hero-preset='company'] .hero__breadcrumb .muted,
.hero[data-hero-preset='insights'] .hero__breadcrumb .muted,
.hero[data-hero-preset='contact'] .hero__breadcrumb .muted { color: var(--color-gray-40); }

@media (max-width: 768px) {
  /* solutions-v2.css:179 sets a 44px narrow headline; home.css:816 sets 40 for
     everyone else. Loaded together the 44 won on all four pages, and Company's
     headline wrapped onto an extra line because of it. */
  .hero[data-hero-preset='solutions'] .hero__title {
    font-size: 44px;
    line-height: 0.9;
    letter-spacing: -0.66px;
  }
  .hero[data-hero-preset='company'] .hero__title,
  .hero[data-hero-preset='insights'] .hero__title,
  .hero[data-hero-preset='contact'] .hero__title {
    font-size: 40px;
    line-height: 0.9;
    letter-spacing: -0.4px;
  }
}

@media (max-width: 768px) {
  /* The narrow gap between breadcrumb and headline. Solutions and Contact set
     12px on their own pages (solutions-v2.css:177, contact-v2.css:252);
     Company and Insights leave home.css's 76px alone. Loaded together the 12
     reached all four, and because .hero__inner bottom-aligns its content, a
     shorter block starts lower — which is why Company's breadcrumb sat 68px
     down the hero rather than higher. */
  .hero[data-hero-preset='solutions'] .hero__content { gap: 12px; }
  .hero[data-hero-preset='contact'] .hero__content { gap: 12px; width: 100%; }
  .hero[data-hero-preset='company'] .hero__content,
  .hero[data-hero-preset='insights'] .hero__content { gap: 76px; }

  /* solutions-v2.css:180 and contact-v2.css:254 tighten the standfirst on
     their own pages; Company and Insights keep home.css's 22px. */
  .hero[data-hero-preset='solutions'] .hero__text {
    font-size: 14px;
    line-height: 20px;
    margin-top: 12px;
  }
  .hero[data-hero-preset='contact'] .hero__text { line-height: 20px; }
  .hero[data-hero-preset='company'] .hero__text,
  .hero[data-hero-preset='insights'] .hero__text { line-height: 22px; }
}

/* ==========================================================================
   The 12-column split, per page
   ==========================================================================
   v2-shared.css corrects `.split` to the design's 12-column grid — a 437px
   label column against a content track starting at 469px — and scopes it
   through the v2 header so the ten-odd pages that were never measured against
   Figma keep their 4fr/8fr. In this app every page shares that header, so the
   correction reached the detail pages too and shifted their content track 10px
   right.

   The five rebuilt pages carry `page-v2`; the rest reset to the plain grid.
   Stated as `main .page-detail .split` so it matches v2-shared's specificity
   and wins on load order rather than on a specificity trick, and bounded above
   992 so it cannot override the single-column collapse both stylesheets make
   below that — an unbounded reset re-split the mobile layout into two
   columns. */
@media (min-width: 993px) {
  main .page-detail .split {
    grid-template-columns: 4fr 8fr;
    column-gap: 0;
  }
}

/* ==========================================================================
   MFN: release bodies and Datablocks widgets, in the site's own type
   ==========================================================================
   Both arrive as third-party markup — sanitised on the way in — carrying MFN's
   class names (mfn-* on release bodies, mf-* on the widgets). Nothing of theirs
   is loaded for styling: their <style> blocks are stripped and the classes are
   dressed here in the same tokens the rest of the site uses.
   ========================================================================== */

/* ---------- A release, inside .report__body ---------- */
.mfn-release .mfn-preamble p {
  font-family: var(--font-heading);
  font-size: 24px;
  line-height: 1.25;
  letter-spacing: -0.24px;
  color: var(--color-night);
  max-width: 872px;
}
.mfn-release .mfn-preamble strong { font-weight: 400; }
.mfn-release .mfn-body p + p { margin-top: 16px; }
.mfn-release .mfn-body strong { font-weight: 500; color: var(--color-night); }
.mfn-release a { color: var(--color-night); text-decoration: underline; text-underline-offset: 3px; }
.mfn-release hr { border: 0; border-top: 1px solid var(--color-blue-10); margin: 40px 0; }
.mfn-release ul { padding-left: 20px; }
.mfn-release li + li { margin-top: 6px; }
.mfn-release .mfn-heading-1 {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 20px;
  line-height: 1.2;
  margin-top: 40px;
}
/* MFN's boilerplate — "about the company", contacts, the attachment list —
   is set smaller and greyer, as a footnote to the release rather than part
   of it */
.mfn-release .mfn-footer,
.mfn-release .mfn-about {
  margin-top: 40px;
  padding-top: 24px;
  border-top: 1px solid var(--color-blue-10);
  font-size: 14px;
  line-height: 20px;
  color: var(--color-blue-50);
}
.mfn-release .mfn-footer p,
.mfn-release .mfn-about p { max-width: 872px; }
.mfn-release .mfn-attachment { display: block; margin-top: 8px; }

/* ---------- Datablocks tables ---------- */
.lblsec--datablocks .lblsec__main { min-width: 0; }
.mf-embed { margin-top: 32px; overflow-x: auto; }
/* The share-price chart draws its own navigator, so the wrapper's scrollbar
   only ever scrolled into emptiness: the widget positions an empty 36px
   selector control 450px to the right of its controls row (an inline
   `left` its loader computes for a wider host), and that alone pushed the
   scroll width past the column. Clip it rather than scroll for it. */
.mf-embed--stock-chart { overflow-x: clip; }
.mf-embed .mf-widget { width: 100% !important; }
.mf-embed table,
.mf-embed .mf-table {
  width: 100%;
  border-collapse: collapse;
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 20px;
  color: var(--color-night);
  font-variant-numeric: tabular-nums;
}
.mf-embed th,
.mf-embed td {
  padding: 12px 0;
  border-bottom: 1px solid var(--color-blue-10);
  vertical-align: top;
  text-align: left;
}
.mf-embed th { font-weight: 500; color: var(--color-blue-50); font-size: 13px; }
.mf-embed td + td,
.mf-embed th + th { padding-left: 24px; }
/* the label column of a two-column stock table reads as the design's overline */
.mf-embed .table-head { color: var(--color-blue-50); width: 40%; }
.mf-embed td[align='right'],
.mf-embed th[align='right'],
.mf-embed .mf-tbl-col-1:last-child { text-align: right; }
.mf-embed .positive { color: var(--color-forest); }
.mf-embed .negative { color: var(--color-error); }
.mf-embed .mf-calendar-header {
  font-family: var(--font-heading);
  font-size: 20px;
  font-weight: 400;
  color: var(--color-night);
}
.mf-embed thead td { padding-bottom: 16px; border-bottom: 1px solid var(--color-night); }
.mf-embed a { color: var(--color-night); text-decoration: underline; text-underline-offset: 3px; }
.mf-embed img { display: inline-block; max-height: 20px; width: auto; }

.mf-embed--unavailable,
.mf-embed--placeholder {
  padding: 24px 0;
  border-top: 1px solid var(--color-blue-10);
  border-bottom: 1px solid var(--color-blue-10);
  font-size: 14px;
  color: var(--color-blue-50);
}
.lblsec__note { margin-top: 16px; font-size: 13px; line-height: 18px; color: var(--color-blue-50); }

/* ---------- charts, mounted by MFN's loader ---------- */
.mf-embed .mf-mount { min-height: 320px; }
.mf-embed .mf-mount:empty { background: var(--color-blue-5); }
.mf-embed .mf-stock-chart,
.mf-embed .mf_stockChart { font-family: var(--font-body); }

/* The share-price chart, in the site's own vocabulary. The widget ships
   Highcharts under a `modfin-` prefix with its stock palette — a yellow
   line, green/red volume, a navy scrollbar, boxed grey buttons, Helvetica
   and a giant "HILB B" watermark — and sets it from its own stylesheet, so
   these are stated one selector deeper (and, for the id-scoped rules, with
   !important). Everything is set in the tokens the tables beside it use:
   night line, forest/error volume at low opacity, hairline grid, DM Sans. */
.mf-embed--stock-chart .mf-ticker-background { display: none; }
.mf-embed--stock-chart .mf_stockChart svg text,
.mf-embed--stock-chart .mf_stockChart .modfin-axis-labels { font-family: var(--font-body); font-size: 12px; fill: var(--color-blue-50); }
.mf-embed--stock-chart .mf_stockChart .modfin-axis-labels text { fill: var(--color-blue-50) !important; }
.mf-embed--stock-chart .mf_stockChart .modfin-background,
.mf-embed--stock-chart .mf_stockChart .modfin-plot-background { fill: transparent; }
.mf-embed--stock-chart .mf_stockChart .modfin-plot-border { stroke: none; }
.mf-embed--stock-chart .mf_stockChart .modfin-grid-line { stroke: var(--color-blue-10); }
.mf-embed--stock-chart .mf_stockChart .modfin-axis-line,
.mf-embed--stock-chart .mf_stockChart .modfin-tick { stroke: var(--color-blue-10); }
.mf-embed--stock-chart .mf_stockChart .modfin-line-series .modfin-graph { stroke: var(--color-night); stroke-width: 1.25px; }
.mf-embed--stock-chart .mf_stockChart .modfin-column-series .modfin-point { stroke: none !important; }
.mf-embed--stock-chart .mf_stockChart .modfin-point.modfin-color-3,
.mf-embed--stock-chart .mf_stockChart .modfin-point.modfin-point-up { fill: rgba(23, 58, 44, 0.35) !important; }
.mf-embed--stock-chart .mf_stockChart .modfin-point.modfin-color-4,
.mf-embed--stock-chart .mf_stockChart .modfin-point.modfin-point-down { fill: rgba(149, 47, 47, 0.35) !important; }
.mf-embed--stock-chart .mf_stockChart .modfin-point.modfin-color-5 { fill: var(--color-blue-10) !important; }
.mf-embed--stock-chart .mf_stockChart .modfin-crosshair { stroke: var(--color-blue-40); stroke-dasharray: 4px; }
.mf-embed--stock-chart .mf_stockChart .modfin-tooltip-box { fill: var(--color-almost-white); stroke: var(--color-blue-10); }
.mf-embed--stock-chart .mf_stockChart .modfin-tooltip text { fill: var(--color-night) !important; }
.mf-embed--stock-chart .mf_stockChart .modfin-scrollbar-track { fill: var(--color-blue-5) !important; }
.mf-embed--stock-chart .mf_stockChart .modfin-scrollbar-thumb { fill: var(--color-night) !important; }
.mf-embed--stock-chart .mf_stockChart .modfin-scrollbar-button { fill: transparent !important; }
.mf-embed--stock-chart .mf_stockChart .modfin-scrollbar-arrow { fill: var(--color-night) !important; }
.mf-embed--stock-chart .mf_stockChart .modfin-button-symbol { fill: var(--color-blue-50); stroke: var(--color-blue-50); }
.mf-embed--stock-chart .mf_stockChart .modfin-credits { display: none; }
/* the controls row: range and chart-type choices as the design's text
   buttons — no boxes, no shadows, the current one in night with a rule */
.mf-embed--stock-chart .mf_stockChart .chartContrls { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 0; padding: 0 0 12px !important; margin: 0; }
.mf-embed--stock-chart .mf_stockChart .rangeSelector { height: auto; gap: 4px; }
.mf-embed--stock-chart .mf_stockChart .rangeSelector > svg { fill: var(--color-blue-50); margin: 0 12px 0 0; }
.mf-embed--stock-chart .mf_stockChart .buttons {
  float: none !important;
  display: inline-flex !important;
  align-items: center;
  width: auto !important; height: auto !important; min-width: 0;
  margin: 0 12px 0 0 !important; padding: 2px 0 !important;
  border: 0 !important; border-bottom: 1px solid transparent !important; border-radius: 0;
  background: none !important; box-shadow: none !important;
  font-family: var(--font-body); font-size: 13px; line-height: 18px; letter-spacing: 0.02em;
  color: var(--color-blue-50) !important; fill: var(--color-blue-50) !important;
  text-transform: uppercase; font-weight: 400 !important;
}
.mf-embed--stock-chart .mf_stockChart .buttons:hover { color: var(--color-night) !important; fill: var(--color-night) !important; }
.mf-embed--stock-chart .mf_stockChart .buttons.checked,
.mf-embed--stock-chart .mf_stockChart .buttons.checkable.checked {
  color: var(--color-night) !important; fill: var(--color-night) !important;
  border-bottom-color: var(--color-night) !important;
}
.mf-embed--stock-chart .mf_stockChart .buttons svg { width: 14px; height: 14px; fill: currentColor; display: block; }
.mf-embed--stock-chart .mf_stockChart .buttons > span { line-height: 18px; }
/* the four chart-type toggles sit at the row's right end */
.mf-embed--stock-chart .mf_stockChart .rangeSelector { margin-right: auto; }
.mf-embed--stock-chart .mf_stockChart .buttons.showBtn { margin: 0 0 0 12px !important; }
.mf-embed--stock-chart .mf_stockChart .buttons.showBtn > span { display: flex; width: 16px; height: 16px; }
.mf-embed--stock-chart .mf_stockChart .buttons.showBtn svg { width: 16px !important; height: 16px !important; }
/* the toggles' hover label: the widget shows it as a black 100px block set
   in the flow (position: relative), so the hovered button grew and pushed
   its neighbours about. A tooltip, taken out of the flow under the icon. */
.mf-embed--stock-chart .mf_stockChart .buttons.showBtn { position: relative; overflow: visible; }
.mf-embed--stock-chart .mf_stockChart .buttons > .buttonText,
.mf-embed--stock-chart .mf_stockChart .buttons:hover > .buttonText {
  display: block !important;
  position: absolute;
  top: calc(100% + 6px);
  left: 50%;
  right: auto;
  width: auto;
  min-width: 0 !important;
  margin: 0;
  padding: 4px 8px;
  transform: translateX(-50%);
  white-space: nowrap;
  background: var(--color-night);
  color: var(--color-almost-white);
  font-family: var(--font-body);
  font-size: 11px;
  line-height: 14px;
  font-weight: 400;
  letter-spacing: 0.02em;
  text-transform: none;
  pointer-events: none;
  opacity: 0;
  transition: opacity 120ms ease;
  z-index: 20;
}
.mf-embed--stock-chart .mf_stockChart .buttons:hover > .buttonText,
.mf-embed--stock-chart .mf_stockChart .buttons:focus-visible > .buttonText { opacity: 1; }
.mf-embed--stock-chart .mf_stockChart .buttons.selector,
.mf-embed--stock-chart .mf_stockChart .dropdown { display: none !important; }

/* ---------- the report archive, set like the design's document rows ---------- */
.mf-embed .mfn-archive-filters { display: flex; flex-wrap: wrap; gap: 8px 24px; align-items: center; padding-bottom: 16px; border-bottom: 1px solid var(--color-night); font-size: 13px; color: var(--color-blue-50); }
.mf-embed .mfn-archive-filter { display: inline-flex; align-items: center; gap: 8px; color: var(--color-night); cursor: pointer; }
.mf-embed .mfn-archive-filter input { accent-color: var(--color-night); }
.mf-embed .mfn-archive-year { margin-top: 0; }

/* ---------- one accordion for both: the report archive's year headers and
   the insider table's. The widgets ship two — a ▾ glyph in 20px Newsreader
   at the column edge, a ❯ glyph in 14px DM Sans a cell in — and their own
   stylesheets outrank the block's, hence the extra selector depth here. One
   header: the year in Newsreader 24, a 10x6 stroke chevron ahead of it that
   points down when open and right when folded, a hairline above, everything
   starting at the column's edge. ---------- */
.mf-embed .mfn-archive .mfn-archive-header-year,
.mf-embed .mf-transaction-table-year-header > td {
  margin: 0;
  padding: 20px 0 14px;
  border-top: 1px solid var(--color-blue-10);
  border-bottom: 0;
  font-family: var(--font-heading);
  font-size: 24px;
  font-weight: 400;
  line-height: 1;
  color: var(--color-night);
  cursor: pointer;
  user-select: none;
}
.mf-embed .mfn-archive .mfn-archive-year:first-child .mfn-archive-header-year { border-top: 0; }
.mf-embed .mfn-archive .mfn-archive-header-year::before,
.mf-embed .mf-transaction-table-year-header > td::before {
  content: '';
  display: inline-block;
  vertical-align: 2px;
  width: 10px;
  height: 6px;
  margin: 0 12px 0 0;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6' fill='none'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%2317223a' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
  transform: none;
  transition: transform 0.15s ease;
}
.mf-embed .mfn-archive .mfn-archive-year-collapsed .mfn-archive-header-year::before,
.mf-embed .mf-transaction-table-year-header.is-collapsed > td::before { transform: rotate(-90deg); }
/* the widget's own arrow glyph, and the empty arrow column it reserved */
.mf-embed .mf-year-arrow { display: none; }
.mf-embed .mf-insider-transactions th:first-child,
.mf-embed .mf-insider-transactions tr:not(.mf-transaction-table-year-header) > td:first-child { width: 0; max-width: 0; padding: 0; overflow: hidden; }
.mf-embed .mf-insider-transactions th:first-child + th,
.mf-embed .mf-insider-transactions td:first-child + td { padding-left: 0; }
/* a row folded away by the header above it */
.mf-embed .mf-insider-transactions tr[hidden] { display: none; }
.mf-embed .mf-transaction-table-year-header:focus-visible { outline: 2px solid var(--color-night); outline-offset: -2px; }
.mf-embed .mfn-archive-events { width: 100%; }
/* the widget keeps 30px clear on the right of every row; the rows run to
   the column's edge like the filter line and the year headers above them */
.mf-embed .mfn-archive .mfn-archive-event { margin-right: 0; }
.mf-embed .mfn-archive-event {
  display: grid;
  grid-template-columns: 140px 1fr auto;
  gap: 24px;
  padding: 16px 0;
  border-top: 1px solid var(--color-blue-10);
  align-items: baseline;
}
.mf-embed .mfn-archive-event-heading { display: contents; }
.mf-embed .mfn-archive-event-date { color: var(--color-blue-50); font-variant-numeric: tabular-nums; }
.mf-embed .mfn-archive-event-title {
  font-family: var(--font-heading);
  font-size: 20px;
  line-height: 1.2;
  color: var(--color-night);
  text-transform: none;
}
.mf-embed .mfn-archive-event-type-title { margin-top: 4px; font-family: var(--font-body); font-size: 13px; color: var(--color-blue-50); }
.mf-embed .mfn-archive-event-items { display: flex; gap: 16px; white-space: nowrap; }
.mf-embed .mfn-archive-item a { display: inline-flex; align-items: center; gap: 6px; text-decoration: none; }
.mf-embed .mfn-archive-item a::after { content: '↓'; }
.mf-embed .mfn-archive-item img { display: none; }
@media (max-width: 768px) {
  .mf-embed .mfn-archive-event { grid-template-columns: 1fr; gap: 6px; }
}

/* ---------- the year filter: a real <select> under the design's label ---------- */
.pr__filter--select { position: relative; }
.pr__filter--select select {
  position: absolute;
  inset: 0;
  width: 100%;
  opacity: 0;
  cursor: pointer;
  font-size: 16px; /* iOS zooms the page for anything smaller */
}
.pr__filter--select:focus-within { border-bottom-color: var(--color-night); color: var(--color-night); }
/* the two filters — year and category, or year and month. The design
   draws one 203px control; two sit under each other at the same width on
   the desktop grid, and side by side, half the screen each, at 768 and
   below, where insights-v2.css runs the control's rule out to both screen
   edges (the bleed padding gives back what the margin takes). */
.pr__filters { display: flex; flex-direction: column; gap: 16px; }
.pr__filters .pr__filter { width: 203px; }
@media (max-width: 768px) {
  .pr__filters { order: 3; flex-direction: row; gap: 0; margin: 64px calc(var(--bleed-x) * -1) 40px; }
  .pr__filters .pr__filter { flex: 1 1 0; width: auto; min-width: 0; margin: 0; padding: 10px 16px 10px var(--bleed-x); }
  .pr__filters .pr__filter + .pr__filter { padding-left: 16px; padding-right: var(--bleed-x); }
}
/* "View more" is a button set exactly as the design's "View all" link */
.pr__more--button {
  /* a button's `width: auto` shrinks to its label; the link's rule runs to
     the viewport edge through a negative margin, which only a margin-aware
     stretch width reproduces */
  width: -moz-available;
  width: -webkit-fill-available;
  width: stretch;
  text-align: left;
  background: none;
  border: 0;
  border-bottom: 1px solid var(--color-night);
  cursor: pointer;
  font: inherit;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-night);
}
.pr-list__none { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-blue-50); }

/* ---------- simple pages: one document of prose (policies) ---------- */
.prose { max-width: 872px; font-family: var(--font-body); font-size: 16px; line-height: 24px; color: var(--color-blue-50); }
.prose > * + *, .prose :where(.payload-richtext) > * + * { margin-top: 16px; }
.prose h2 { font-family: var(--font-heading); font-weight: 400; font-size: 32px; line-height: 1.1; letter-spacing: -0.32px; color: var(--color-night); margin-top: 48px; }
.prose h3 { font-family: var(--font-heading); font-weight: 400; font-size: 24px; line-height: 1.15; letter-spacing: -0.24px; color: var(--color-night); margin-top: 32px; }
.prose h2 + h3 { margin-top: 20px; }
.prose ul { list-style: disc; padding-left: 22px; }
.prose ol { list-style: decimal; padding-left: 22px; }
.prose li + li { margin-top: 8px; }
.prose a { color: var(--color-night); text-decoration: underline; text-underline-offset: 3px; }
.prose strong { color: var(--color-night); font-weight: 500; }
.prose code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 14px; color: var(--color-night); background: rgba(22, 35, 58, 0.06); padding: 1px 5px; border-radius: 3px; }
@media (max-width: 992px) { .prose h2 { font-size: 28px; } .prose h3 { font-size: 22px; } }

/* ---------- articles imported from the old site ---------- */
.article-body .article__video { margin: 32px 0; }
.article-body .article__video iframe { width: 100%; aspect-ratio: 16 / 9; height: auto; border: 0; display: block; background: var(--color-night); }
.article-body .article__video figcaption { margin-top: 8px; font-size: 13px; color: var(--color-blue-50); }
.article-body a { color: var(--color-night); text-decoration: underline; text-underline-offset: 3px; }
.article-body p + p { margin-top: 16px; }
/* The cards carry real covers here (the brand covers, an article's own
   picture), not the maze motif the hand-built page shows. insights.css
   draws card images at half opacity, which washed every ground to the same
   grey and took the categories with it; at full strength the keyline
   matters, since the Press cover's ground is the page's own almost-white,
   and without it that card reads as one whose image failed to load. */
.media-card__img { box-shadow: inset 0 0 0 1px rgba(23, 34, 58, 0.14); }
.media-card__img img { width: 100%; height: 100%; object-fit: cover; opacity: 1; }

/* ---------- In the News, fed by the imported articles ---------- */
/* the feature card is 300px tall in the design for a short placeholder
   title; a real headline can run to three lines, so the card may grow */
.itn__feature-card { height: auto; min-height: 300px; }
.itn__feature-card h3 a, .itn-card__title a { color: inherit; text-decoration: none; }
.itn__feature-card h3 a:hover, .itn-card__title a:hover { text-decoration: underline; text-underline-offset: 4px; }
/* the archive at /news: every article as the block's own card */
.news-archive .itn__grid { border-top: 1px solid var(--color-blue-10); }
.news-archive .itn-card { border-bottom: 1px solid var(--color-blue-10); gap: var(--sp-40); }
.news-archive .itn-card__date { font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-blue-50); }
@media (max-width: 992px) {
  .news-archive .itn__grid { grid-template-columns: 1fr; }
}

/* ---------- Principles slider on the non-v2 pages ---------- */
/* The block draws a scroll track under every slider, but company-v2.css
   only defines the bleed for `.principles--v2`: on Investor Relations and
   Trust & Transparency the track's margin read an undefined --bleed-x and
   collapsed to nothing — full width, flush against the cards — and the
   cards themselves started at the raw 32px gutter rather than the
   container's edge on anything wider than 1440. The same bleed, for every
   slider the block renders. */
.principles {
  --page-bleed: calc((100vw - min(100vw, var(--container-max))) / 2);
  --bleed-x: calc(var(--container-pad) + var(--page-bleed));
  overflow-x: clip;
}
.principles .principles__slider {
  padding-left: var(--bleed-x);
  padding-right: var(--bleed-x);
}

/* ---------- The stat line and the routing rail: the current step moves ----
   home-v2.css freezes the first stat bright with a rule under it and dims
   the rest to 40%; contact-v2.css draws the first 82px of the routing rail
   bright and dims steps 2 and 3 to 10%. StepCycle moves the current step
   on every three seconds: one rule element glides to it, the text crosses
   over in opacity. The static rule and the fixed dimming give way to
   that. */
.hero-statline--cycle { position: relative; }
.hero-statline--cycle .hero-statline__item { opacity: 0.4; transition: opacity 600ms ease; }
.hero-statline--cycle .hero-statline__item.is-active { opacity: 1; }
.hero-statline--cycle .hero-statline__item:first-child { border-bottom: 0; }
.hero-statline--cycle .hero-statline__item { padding-bottom: 16px; }
.hero-statline__bar {
  position: absolute;
  display: block;
  height: 1px;
  margin-top: -1px;
  background: var(--color-gray-60);
  transition: left 600ms ease, top 600ms ease, width 600ms ease;
  pointer-events: none;
}
.routing--cycle::before { content: none; }
.routing--cycle .routing__item { opacity: 0.1; transition: opacity 600ms ease; }
.routing--cycle .routing__item + .routing__item { opacity: 0.1; }
.routing--cycle .routing__item.is-active { opacity: 1; }
.routing__bar {
  position: absolute;
  display: block;
  left: -1px !important;
  width: 1px;
  background: var(--color-almost-white);
  transition: top 600ms ease, height 600ms ease;
  pointer-events: none;
}
@media (max-width: 768px) {
  /* the design draws no rule under the stacked stats at this width */
  .hero-statline__bar { display: none; }
  .hero-statline--cycle .hero-statline__item { padding-bottom: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .hero-statline--cycle .hero-statline__item,
  .routing--cycle .routing__item,
  .hero-statline__bar,
  .routing__bar { transition: none; }
}

/* ---------- forms, sent ---------- */
.form__hp { position: absolute; left: -10000px; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.form__success { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-light-green); }
.form__success.enquiry-form { color: var(--color-almost-white); font-size: 20px; line-height: 28px; }
.form__success.signup__form { display: block; padding: 10px 0; border-bottom-color: var(--color-light-green); }
.form__error { margin-top: 12px; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: #e3a0a0; }
form[aria-busy='true'] button[type='submit'] { opacity: 0.6; pointer-events: none; }

/* ---------- videos: the poster as the cover, the player in a lightbox ---------- */
/* the whole card is one link; the design's card elements keep their
   classes, set on spans so they can live inside it */
a.video-card { display: flex; flex-direction: column; gap: var(--sp-32); color: inherit; text-decoration: none; }
a.video-card .video-card__body { display: block; }
a.video-card .video-card__tag,
a.video-card .video-card__title { display: block; }
a.video-card:hover .video-card__title { text-decoration: underline; text-underline-offset: 4px; }
a.video-card:focus-visible { outline: 2px solid var(--color-night); outline-offset: 4px; }
/* the cover is the video's own frame: 16:9 */
.video-card__thumb { aspect-ratio: 16 / 9 !important; overflow: hidden; }
.video-card__thumb img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
.video-card__thumb svg { position: absolute; left: 50%; top: 50%; width: 64px; height: 64px; transform: translate(-50%, -50%); color: rgba(239, 239, 236, 0.92); filter: drop-shadow(0 2px 8px rgba(23, 34, 58, 0.4)); transition: transform 160ms ease; }
a.video-card:hover .video-card__thumb svg { transform: translate(-50%, -50%) scale(1.08); }
.videos-archive .videos__grid { margin-top: 0; }

.video-lightbox {
  position: fixed; inset: 0; z-index: 400;
  display: flex; align-items: center; justify-content: center; padding: 24px;
  background: rgba(23, 34, 58, 0.88);
}
.video-lightbox__frame { position: relative; width: min(1100px, 100%); aspect-ratio: 16 / 9; background: var(--color-night); box-shadow: 0 24px 80px rgba(0, 0, 0, 0.4); }
.video-lightbox__frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; display: block; }
.video-lightbox__close {
  position: absolute; top: -44px; right: 0;
  display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px;
  padding: 0; border: 0; background: none; color: var(--color-almost-white); cursor: pointer;
}
.video-lightbox__close:hover { opacity: 0.7; }
.video-lightbox__close:focus-visible { outline: 2px solid var(--color-almost-white); outline-offset: 2px; }
@media (max-width: 768px) {
  .video-lightbox { padding: 16px; }
  .video-lightbox__close { top: -40px; }
}

/* ---------- the home hero's scene sits high, as the client's preview
   placed it ---------- */
/* index-anim.html — the preview the animation was taken from — put the
   canvas's centre 50px above the hero's top edge at desktop (a 1500px
   canvas at margin-top -800) and 50px below it at 375, so the volume runs
   off the top and the headline sits under its foot. v2-motion.css centres
   the scene in the hero instead. The still is the scene's own first frame
   (public/hero/home-first-frame.webp), set in exactly the scene's box, so
   the cross-fade from still to canvas changes nothing but time. */
.hero--split .hero__scene,
.hero--split .hero__art {
  position: absolute;
  left: 50%;
  top: -50px;
  transform: translate(-50%, -50%);
  width: 100%;
  height: auto;
  aspect-ratio: 1 / 1;
  min-width: 100%;
  min-height: 0;
  max-width: none;
  object-fit: fill;
  object-position: center;
}
@media (max-width: 768px) {
  .hero--split .hero__scene,
  .hero--split .hero__art { top: 50px; }
}

/* ---------- the inner heroes' stills are the scene's first frame too ----
   Solutions, Company and Insights keep v2-motion.css's centred scene; their
   stills (public/hero/<page>-first-frame.webp) are captured from the
   runtime at 1440 and set in the scene's own box, so the cross-fade only
   starts the motion. company-v2.css and insights-v2.css screened and
   filtered the old forest-toned renders; a frame of the scene itself needs
   neither. */
.hero--v2 .hero__art {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: auto;
  height: auto;
  aspect-ratio: 1 / 1;
  min-width: 100%;
  min-height: 100%;
  max-width: none;
  object-fit: fill;
  object-position: center;
  filter: none;
  mix-blend-mode: normal;
}

/* ---------- the press list on the light-green ground (Weekly Trader's
   Insights): the same tokens the light-green footer uses ---------- */
.pr--green { background: var(--color-light-green); }
.pr--green .pr__label,
.pr--green .pr-row__tag,
.pr--green .pr-row__date,
.pr--green .pr-list__none { color: var(--color-green-50); }
.pr--green .pr__main h2,
.pr--green .pr-row__title { color: var(--color-forest); }
.pr--green .pr__filter { color: var(--color-green-50); border-bottom-color: var(--color-green-50); }
.pr--green .pr__filter--select:focus-within { color: var(--color-forest); border-bottom-color: var(--color-forest); }
.pr--green .pr-row__body { border-top-color: var(--color-green-10); }
.pr--green .pr-row__body::before { background: var(--color-green-5); }
.dhero--lightgreen { background: var(--color-light-green); }
.dhero--lightgreen .dhero__title,
.dhero--lightgreen .dhero__crumb { color: var(--color-forest); }
.dhero--lightgreen .dhero__crumb .muted,
.dhero--lightgreen .dhero__desc { color: var(--color-green-50); }

/* ---------- Team: square portraits ---------- */
/* company-v2.css draws the avatar plate landscape (437 x 260) for the
   design's initials; the photographs from the old site are square, and the
   plate follows them at every width */
.team--v2 .team-member__avatar { aspect-ratio: 1 / 1; }
.team-member__avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
@media (max-width: 768px) {
  .team--v2 .team-member__avatar { aspect-ratio: 1 / 1; }
}

/* ==========================================================================
   Cookie consent
   ==========================================================================
   The banner is style.css's .cookies card (Figma 1051:27838) restated under
   its own name, so main.js's one-button handler for the static banner
   leaves it alone; the preferences panel is the same card, centred, with a
   switch per category. */
.cc {
  position: fixed; left: 24px; bottom: 24px; z-index: 300;
  width: 343px; max-width: calc(100% - 32px);
  display: flex; flex-direction: column; gap: 16px;
  padding: 16px;
  background-color: var(--color-almost-white); color: var(--color-forest);
  box-shadow: 0 16px 40px rgba(23, 34, 58, 0.12);
}
.cc__group { display: flex; flex-direction: column; gap: 4px; }
.cc__title { font-family: var(--font-heading); font-weight: 400; font-size: 20px; line-height: 22px; letter-spacing: -0.2px; color: var(--color-forest); }
.cc__text { font-family: var(--font-body); font-size: 12px; line-height: 16px; color: var(--color-green-50); }
.cc__text a { color: var(--color-forest); text-decoration: underline; text-underline-position: from-font; }
.cc__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 20px; }
.cc__link {
  padding: 0; background: none; border: 0; cursor: pointer;
  font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-forest);
  text-decoration: underline; text-underline-position: from-font;
}
.cc__button {
  padding: 10px 20px; border: 1px solid var(--color-forest); background: var(--color-forest); color: var(--color-almost-white);
  font-family: var(--font-body); font-size: 14px; line-height: 20px; cursor: pointer;
}
.cc__button:hover { background: var(--color-night); border-color: var(--color-night); }
.cc__link:focus-visible, .cc__button:focus-visible, .cc-dialog__close:focus-visible { outline: 2px solid var(--color-forest); outline-offset: 2px; }

.cc-backdrop {
  position: fixed; inset: 0; z-index: 310;
  display: flex; align-items: center; justify-content: center; padding: 16px;
  background: rgba(23, 34, 58, 0.4);
}
.cc-dialog {
  width: 520px; max-width: 100%; max-height: calc(100vh - 32px); overflow: auto;
  display: flex; flex-direction: column; gap: 16px; padding: 24px;
  background-color: var(--color-almost-white); color: var(--color-forest);
  box-shadow: 0 16px 40px rgba(23, 34, 58, 0.12);
}
.cc-dialog__head { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.cc-dialog__close { flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; padding: 0; border: 0; background: none; color: var(--color-forest); cursor: pointer; }
.cc-cats { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.cc-cat { display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 14px 0; border-top: 1px solid var(--color-green-10); }
.cc-cat:last-child { border-bottom: 1px solid var(--color-green-10); }
.cc-cat__title { font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-forest); }
.cc-cat__desc { margin-top: 2px; font-family: var(--font-body); font-size: 12px; line-height: 16px; color: var(--color-green-50); }
.cc-cat__always { flex-shrink: 0; font-family: var(--font-body); font-size: 12px; line-height: 16px; color: var(--color-green-50); }
.cc-switch { position: relative; flex-shrink: 0; width: 40px; height: 22px; cursor: pointer; }
.cc-switch input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; }
.cc-switch__track { position: absolute; inset: 0; border-radius: 11px; background: var(--color-green-10); transition: background 160ms ease; }
.cc-switch__track::after { content: ''; position: absolute; top: 3px; left: 3px; width: 16px; height: 16px; border-radius: 50%; background: var(--color-almost-white); box-shadow: 0 1px 2px rgba(23, 34, 58, 0.3); transition: transform 160ms ease; }
.cc-switch input:checked + .cc-switch__track { background: var(--color-forest); }
.cc-switch input:checked + .cc-switch__track::after { transform: translateX(18px); }
.cc-switch input:focus-visible + .cc-switch__track { outline: 2px solid var(--color-forest); outline-offset: 2px; }

/* an uploaded social icon: the SVG as a mask over the link's colour */
.footer-social__icon { display: block; width: 20px; height: 20px; background: currentColor; -webkit-mask: center / contain no-repeat; mask: center / contain no-repeat; }

/* The footer's bottom row (client, 1 October 2026): the legal lines at the
   left, the policy links and "Cookie settings" together at the right, one
   row at desktop width instead of the six-column grid that pushed Cookie
   settings onto a row of its own. Text reads as text, a little quieter;
   every link is underlined, so what can be clicked is plain at a glance. */
.site-footer--v2 .site-footer__bottom.site-footer__bottom--wide { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 12px 48px; }
.site-footer--v2 .site-footer__bottom--wide .footer-legal,
.site-footer--v2 .site-footer__bottom--wide .footer-policies { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 24px; }
.site-footer--v2 .footer-legal span { opacity: 0.75; }
.site-footer--v2 .footer-policies a,
.footer-policies__settings { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; text-decoration-color: color-mix(in srgb, currentColor 45%, transparent); }
.site-footer--v2 .footer-policies a:hover,
.footer-policies__settings:hover { opacity: 1; text-decoration-color: currentColor; }
/* "Speak to the team:" over the contact column: its colour is set for the
   dark footers (pale grey), so on the light ones it all but vanished. It
   takes the column titles' colour there, as the light footers set them. */
.site-footer--light-blue .footer-col__contact-lead,
.site-footer--light .footer-col__contact-lead { color: var(--color-blue-50); }
.site-footer--light-green .footer-col__contact-lead { color: var(--color-green-50); }

/* "Cookie settings" is a button (it opens the consent panel), set as its
   neighbouring links */
.footer-policies__settings { padding: 0; border: 0; background: none; cursor: pointer; font: inherit; color: inherit; text-align: left; line-height: inherit; }
@media (max-width: 768px) {
  .site-footer--v2 .site-footer__bottom.site-footer__bottom--wide { flex-direction: column; align-items: flex-start; }
}

@media (max-width: 768px) {
  .cc { left: 16px; right: 16px; bottom: 16px; width: auto; max-width: none; }
  .cc-dialog { padding: 20px 16px; }
}

/* ---------- a fund's own page. On the site's own grid: the container,
   the label(4)/content(8) split every other section uses — the facts
   panel (or nothing) in the label column, the sections in the content
   column — so the page lines up with the rest of the site at any width.
   Three arrangements: the facts as a table in the column (table), or in
   the panel beside it in night (side-night) or forest (side-forest). ---------- */
.fund-hero { min-height: 600px; }
.fund-hero .dhero__crumb { color: var(--color-green-50); }
.fund { background: var(--color-almost-white); padding-top: var(--sp-120); padding-bottom: var(--sp-120); }
.fund__inner { align-items: start; }
/* the 12-column grid the detail pages use: the facts panel (or nothing)
   in columns 1–4, the sections in 5–12 — the same column line as the
   strategy library, the IR tables and the lending page */
.fund__aside, .fund-side { grid-column: 1 / 5; }
.fund__col { grid-column: 5 / 13; display: flex; flex-direction: column; gap: var(--sp-64); min-width: 0; }
.fund__sec { display: flex; flex-direction: column; gap: 32px; }
.fund__sec h2 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-forest); }
.fund__text { max-width: 697px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); margin-top: -8px; }
.fund__pairs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--grid-gap-lg); row-gap: 40px; }
.fund__pair { display: flex; flex-direction: column; gap: 8px; }
.fund__pair h3 { font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-forest); }
.fund__pair p { max-width: 340px; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-green-50); }
.fund__file { font-family: var(--font-body); font-size: 14px; line-height: 20px; font-weight: 500; color: var(--color-forest); text-decoration: none; }
/* the tables: the header row never wraps, so each column is at least as
   wide as its name and the rest is shared in proportion; long values wrap */
.fund__panel { background: var(--color-green-5); padding: 16px; overflow-x: auto; }
.fund-table { width: 100%; border-collapse: collapse; color: var(--color-forest); }
.fund-table th { text-align: left; vertical-align: top; white-space: nowrap; font-weight: 400; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-green-50); padding: 0 16px 4px 0; }
.fund-table th:last-child, .fund-table td:last-child { padding-right: 0; }
.fund-table td { vertical-align: top; font-family: var(--font-heading); font-size: 16px; line-height: 22px; letter-spacing: -0.16px; border-top: 1px solid var(--color-green-10); padding: 16px 16px 16px 0; }
.fund-table--providers th { font-size: 16px; line-height: 22px; width: 25%; }
.fund-table--providers td { font-size: 20px; letter-spacing: -0.2px; }
.fund__links { list-style: none; margin: -8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.fund__links a { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-forest); text-decoration: underline; text-underline-offset: 3px; }
.fund__meta { font-family: var(--font-body); font-size: 14px; color: var(--color-green-50); }
/* the facts panel in the label column, the design's 364 wide */
.fund-side { display: flex; flex-direction: column; max-width: 364px; }
.fund-side__head { height: 28px; display: flex; align-items: center; padding: 0 16px; background: var(--color-forest); font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-almost-white); }
.fund-side__rows { margin: 0; padding: 16px; background: var(--color-green-5); display: flex; flex-direction: column; gap: 4px; }
.fund-side__row { display: grid; grid-template-columns: minmax(120px, 187px) 1fr; column-gap: 16px; padding: 6px 0; border-top: 1px solid var(--color-green-5); font-family: var(--font-body); font-size: 14px; line-height: 20px; }
.fund-side__row:first-child { border-top: 0; }
.fund-side__row dt { color: var(--color-green-50); }
.fund-side__row dd { margin: 0; color: var(--color-forest); }
/* the night palette of the first arrangement */
.fund--night .fund__sec h2, .fund--night .fund__pair h3, .fund--night .fund-table, .fund--night .fund__links a, .fund--night .fund-side__row dd, .fund--night .fund__file { color: var(--color-night); }
.fund--night .fund__text, .fund--night .fund__pair p, .fund--night .fund-table th, .fund--night .fund__meta, .fund--night .fund-side__row dt { color: var(--color-blue-50); }
.fund--night .fund__panel, .fund--night .fund-side__rows { background: var(--color-blue-5); }
.fund--night .fund-table td { border-top-color: var(--color-blue-10); }
.fund--night .fund-side__head { background: var(--color-night); }
.fund--night .fund-side__row { border-top-color: var(--color-blue-10); }
/* the band of the first two arrangements: the figure at the left, the
   copy in the content column */
.fund-cta2 { position: relative; overflow: hidden; min-height: 442px; padding-top: var(--sp-120); padding-bottom: var(--sp-120); display: flex; align-items: center; }
.fund-cta2--night { background: var(--color-night); }
.fund-cta2--forest { background: var(--color-forest); }
.fund-cta2__bg { position: absolute; top: -40px; left: -300px; width: 900px; max-width: none; pointer-events: none; }
.fund-cta2--forest .fund-cta2__bg { top: -60px; left: -220px; width: 760px; }
.fund-cta2__inner { position: relative; z-index: 1; width: 100%; }
.fund-cta2__body { grid-column: 5 / 13; display: flex; flex-direction: column; align-items: flex-start; gap: 16px; }
.fund-cta2__tag { font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-almost-white); }
.fund-cta2__title { font-family: var(--font-heading); font-weight: 400; font-size: 84px; line-height: 0.9; letter-spacing: -1.26px; color: var(--color-almost-white); margin-top: -8px; }
.fund-cta2__buttons { display: flex; margin-top: 16px; }
.fund-cta2__buttons .btn--ghost { border-color: var(--color-gray-50); color: var(--color-almost-white); }
/* the small print the closing band carries on the financing and tokenised
   pages; the fund pages have no note, so this rule only ever applies there */
.fund-cta2__text { margin-top: 8px; max-width: 620px; font-family: var(--font-body); font-size: 16px; line-height: 22px; letter-spacing: 0; color: var(--color-gray-40); }
.fund-cta2__note { max-width: 466px; margin-top: 4px; font-family: var(--font-body); font-size: 12px; line-height: 16px; color: var(--color-gray-40); }
@media (min-width: 993px) {
  /* the band's figure sits over the label column, as the design draws it */
  .fund-cta2__bg { left: max(-300px, calc(50% - 720px - 300px)); }
}
@media (max-width: 992px) {
  .fund__inner { row-gap: var(--sp-64); }
  .fund__aside, .fund-side, .fund__col, .fund-cta2__body { grid-column: 1 / -1; }
  .fund__aside { display: none; }
  .fund-side { max-width: none; }
  .fund-cta2 { min-height: 0; padding-top: 200px; }
  .fund-cta2__bg { top: -60px; left: -200px; width: 700px; }
  .fund-cta2__title { font-size: 40px; letter-spacing: -0.4px; }
}
@media (max-width: 768px) {
  .fund-hero { min-height: 0; }
  .fund__sec { gap: 24px; }
  .fund__sec h2 { font-size: 28px; letter-spacing: -0.28px; }
  .fund__pairs { grid-template-columns: 1fr; row-gap: 16px; }
  .fund__pair h3 { font-size: 20px; line-height: 22px; letter-spacing: -0.2px; }
  .fund__panel { margin-left: calc(var(--container-pad) * -1); margin-right: calc(var(--container-pad) * -1); overflow: visible; }
  /* the table turns: one row per fact, label then value */
  .fund-table thead { display: none; }
  .fund-table, .fund-table tbody, .fund-table tr { display: block; }
  .fund-table td { display: grid; grid-template-columns: minmax(120px, 164px) 1fr; column-gap: 16px; font-family: var(--font-body); font-size: 14px; line-height: 20px; letter-spacing: 0; padding: 6px 0; border-top: 1px solid var(--color-green-5); }
  .fund-table td:first-child { border-top: 0; }
  .fund-table td::before { content: attr(data-label); color: var(--color-green-50); }
  .fund-table--providers th { width: auto; }
  .fund-table--providers td { font-size: 16px; line-height: 22px; }
  .fund-side__row { grid-template-columns: minmax(120px, 164px) 1fr; }
  .fund-cta2__buttons { flex-direction: column; align-items: stretch; width: 100%; }
}

/* ---------- Strategy performance ----------
   The charts are inline SVG rather than a library: two line series and a
   pair of axes do not need a runtime, and the figures should be in the HTML
   where a reader without JavaScript still gets them. */
.perf {
  background: var(--color-almost-white);
  padding: var(--sp-120) 0;
  border-top: 1px solid var(--color-blue-10);
}

.perf__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--sp-24);
  padding-bottom: var(--sp-16);
  border-bottom: 1px solid var(--color-blue-10);
}

.perf__head h2 {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 40px;
  line-height: 1;
  letter-spacing: -0.4px;
  color: var(--color-night);
}

.perf__asof {
  font-family: var(--font-heading);
  font-style: italic;
  font-size: 16px;
  line-height: 20px;
  color: var(--color-blue-50);
  white-space: nowrap;
}

.perf__charts {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-32);
  margin-top: var(--sp-40);
}

.perf-chart {
  margin: 0;
  min-width: 0;
}

.perf-chart__title {
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 20px;
  color: var(--color-night);
}

.perf-chart__title span {
  font-family: var(--font-heading);
  font-style: italic;
  color: var(--color-blue-40);
}

.perf-chart__svg {
  display: block;
  width: 100%;
  height: auto;
  margin-top: var(--sp-12);
  overflow: visible;
}

.perf-chart__grid {
  stroke: var(--color-blue-10);
  stroke-width: 1;
}

.perf-chart__tick {
  fill: var(--color-blue-40);
  font-family: var(--font-body);
  font-size: 11px;
}

.perf-chart__line {
  fill: none;
  stroke: var(--color-night);
  stroke-width: 1.5;
  stroke-linejoin: round;
  stroke-linecap: round;
}

.perf-chart__area {
  fill: var(--color-blue-5);
  stroke: none;
}

/* Eight figures in four columns, so both rows are full. auto-fit was
   leaving a ragged tail: the leftover track showed the grid's own
   background and read as an empty cell someone forgot to fill. */
.perf__metrics {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1px;
  margin-top: var(--sp-64);
  background: var(--color-blue-10);
  border: 1px solid var(--color-blue-10);
}

.perf-metric {
  padding: var(--sp-16);
  background: var(--color-almost-white);
}

.perf-metric__label {
  font-family: var(--font-body);
  font-size: 13px;
  line-height: 18px;
  color: var(--color-blue-50);
}

.perf-metric__value {
  margin-top: var(--sp-8);
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 28px;
  line-height: 1;
  letter-spacing: -0.28px;
  color: var(--color-night);
  /* Tabular figures so a column of numbers lines up on the decimal. */
  font-variant-numeric: tabular-nums;
}

.perf-metric__note {
  margin-top: var(--sp-8);
  font-family: var(--font-body);
  font-size: 12px;
  line-height: 16px;
  color: var(--color-blue-40);
}

/* Thirteen numeric columns will not fit a phone, so the table scrolls
   inside its own box rather than pushing the page sideways. */
.perf__table-wrap {
  margin-top: var(--sp-64);
  overflow-x: auto;
}

.perf-table {
  width: 100%;
  min-width: 780px;
  border-collapse: collapse;
  font-variant-numeric: tabular-nums;
}

.perf-table__caption {
  text-align: left;
  padding-bottom: var(--sp-12);
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 20px;
  color: var(--color-night);
}

.perf-table th,
.perf-table td {
  padding: 10px 8px;
  text-align: right;
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 20px;
  border-bottom: 1px solid var(--color-blue-10);
}

.perf-table thead th {
  font-size: 12px;
  color: var(--color-blue-50);
  border-bottom-color: var(--color-night);
}

.perf-table tbody th {
  text-align: left;
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 18px;
  color: var(--color-night);
}

.perf-table td {
  color: var(--color-night);
}

.perf-table td.is-empty {
  color: var(--color-blue-10);
}

.perf-table td.is-negative {
  color: #b4462f;
}

.perf-table th:last-child,
.perf-table td.perf-table__year {
  font-weight: 500;
  border-left: 1px solid var(--color-blue-10);
}

.perf__notes {
  margin-top: var(--sp-24);
  max-width: 760px;
  display: flex;
  flex-direction: column;
  gap: var(--sp-8);
}

.perf__notes p {
  font-family: var(--font-body);
  font-size: 12px;
  line-height: 18px;
  color: var(--color-blue-40);
}

@media (max-width: 992px) {
  .perf { padding: var(--sp-80) 0; }
  .perf__charts { grid-template-columns: 1fr; gap: var(--sp-40); }
  .perf__metrics { grid-template-columns: repeat(2, 1fr); }
  .perf__head { flex-direction: column; align-items: flex-start; gap: var(--sp-8); }
  .perf__head h2 { font-size: 32px; letter-spacing: -0.32px; }
}

/* ---------- Lending & Borrowing ---------- */
/* The hero is the home hero's frame (home.css, home-v2.css .hero--split);
   this is only what differs: the height, the button under the copy. */
.hero--financing { min-height: 800px; background-color: var(--color-forest); }
.hero--financing .hero__cta { align-self: flex-start; }

.fquad { background: #e4e6e2; padding: 120px 0; }
.fquad__inner { align-items: start; }
.fquad__label { grid-column: 1 / 5; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.fquad__main { grid-column: 5 / 13; display: flex; flex-direction: column; gap: 16px; }
.fquad__main h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-forest); }
.fquad__intro { max-width: 470px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.fquad__grid { margin-top: 64px; display: grid; grid-template-columns: repeat(2, 437px); column-gap: 32px; row-gap: 40px; }
.fquad__item { display: flex; flex-direction: column; gap: 8px; }
.fquad__item h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-forest); }
.fquad__item p { max-width: 340px; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--color-green-50); }

.access { background: var(--color-almost-white); padding: 120px 0; }
.access__head { display: grid; grid-template-columns: 471px 1fr; column-gap: 32px; align-items: start; margin-bottom: 80px; }
.access__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-forest); }
.access__intro { max-width: 319px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.access__rows { display: flex; flex-direction: column; border-top: 1px solid var(--color-green-10); }
.access__row { display: grid; grid-template-columns: 4fr 3fr 4fr; column-gap: 32px; padding: 40px 0; border-bottom: 1px solid var(--color-green-10); }
.access__row h3 { font-family: var(--font-heading); font-weight: 400; font-size: 40px; line-height: 1; letter-spacing: -0.4px; color: var(--color-forest); }
.access__text { max-width: 345px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-forest); }
.access__points { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.access__points li { position: relative; padding-left: 16px; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-green-50); }
.access__points li::before { content: ''; position: absolute; left: 0; top: 9px; width: 6px; height: 1px; background: var(--color-green-50); }

.pband { position: relative; overflow: hidden; background: var(--color-forest); min-height: 600px; display: flex; align-items: center; justify-content: center; text-align: center; padding: 24px 32px; }
.pband__bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0.55; pointer-events: none; }
.pband__inner { position: relative; z-index: 1; display: flex; flex-direction: column; align-items: center; gap: 88px; }
.pband__mark { display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-body); font-size: 14px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--color-almost-white); }
.pband__mark svg { width: 24px; height: 24px; }
.pband__title { max-width: 760px; font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-almost-white); white-space: pre-line; }
.pband__line { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-almost-white); margin-top: -40px; }

.verify { background: var(--color-almost-white); padding: 120px 0; }
.verify__head { grid-column: 5 / 13; display: flex; flex-direction: column; gap: 16px; margin-bottom: 80px; }
.verify__head h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-forest); }
.verify__intro { max-width: 589px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.verify__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.vcard { position: relative; min-height: 200px; background: var(--color-green-5); padding: 24px 24px 20px; display: flex; flex-direction: column; gap: 8px; color: var(--color-forest); }
.vcard__tag { font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-green-50); }
.vcard h3 { font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-forest); }
.vcard__text { max-width: 293px; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-green-50); }

.desk { background: var(--color-light-green); padding: 120px 0; }
.desk__inner { align-items: start; }
.desk__label { grid-column: 1 / 5; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.desk__main { grid-column: 5 / 13; display: flex; flex-direction: column; gap: 16px; }
.desk__main h2 { font-family: var(--font-heading); font-weight: 400; font-size: 62px; line-height: 0.9; letter-spacing: -0.93px; color: var(--color-forest); }
.desk__intro { max-width: 470px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.desk__grid { margin-top: 64px; display: grid; grid-template-columns: repeat(2, 1fr); column-gap: 1px; row-gap: 0; }
.desk__cell { display: flex; flex-direction: column; justify-content: space-between; min-height: 200px; padding: 16px 32px 0 0; }
.desk__value { max-width: 382px; font-family: var(--font-heading); font-weight: 400; font-size: 28px; line-height: 1; letter-spacing: -0.28px; color: var(--color-forest); }
.desk__key { padding: 12px 0; border-top: 1px solid var(--color-green-10); font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-green-50); }
.desk__more { display: block; margin-top: 64px; padding: 4px 32px 4px 0; border-bottom: 1px solid var(--color-forest); font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-forest); text-decoration: none; }

.home-cta__note { position: relative; z-index: 1; max-width: 466px; font-family: var(--font-body); font-size: 12px; line-height: 16px; color: var(--color-gray-40); }

@media (max-width: 1024px) {
  .fquad__grid, .fund__pairs { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 768px) {
  .fquad, .access, .verify, .desk { padding: 64px 0; }
  .fquad__inner, .desk__inner, .verify__inner { grid-template-columns: 1fr; row-gap: 24px; }
  .fquad__label, .fquad__main, .desk__label, .desk__main, .verify__head { grid-column: 1 / -1; }
  .fquad__main h2, .access__head h2, .pband__title, .verify__head h2, .desk__main h2 { font-size: 40px; letter-spacing: -0.4px; line-height: 0.95; }
  .fquad__grid { margin-top: 40px; grid-template-columns: 1fr; row-gap: 24px; }
  .fquad__item h3, .access__row h3 { font-size: 28px; letter-spacing: -0.28px; }
  .access__head { grid-template-columns: 1fr; row-gap: 16px; margin-bottom: 40px; }
  .access__row { grid-template-columns: 1fr; row-gap: 16px; padding: 24px 0; }
  .pband { min-height: 600px; }
  .pband__inner { gap: 48px; }
  .pband__line { margin-top: -16px; }
  .verify__head { margin-bottom: 40px; }
  .verify__grid { grid-template-columns: 1fr; }
  .vcard { min-height: 0; }
  .desk__grid { margin-top: 40px; grid-template-columns: 1fr; }
  .desk__cell { min-height: 0; padding-right: 0; gap: 24px; }
  .desk__more { margin-top: 40px; }
}


/* ---------- Covers ----------
   The brand covers under assets/covers/BC, from the proof site: one per
   kind of item, the ground under a card or panel when the record carries no
   picture of its own. The Featured panel's base rule sizes its art to a
   fixed 1030px square placed off-centre, which is the treatment the maze
   motif wants and wrong for a cover, so a cover is drawn edge to edge. */
.featured .news__featured img.news__featured-cover { position: absolute; inset: 0; left: 0; top: 0; width: 100%; height: 100%; transform: none; object-fit: cover; object-position: center; opacity: 1; }

/* ---------- Research Papers rail ----------
   The news cards block with a link across its foot, as the proof site's
   research rail had. .media's container spaces its children 80px apart;
   the link belongs closer to the cards than that. */
.media__more { align-self: flex-start; margin-top: -40px; text-decoration: underline; text-underline-position: from-font; }

/* ---------- Mega menu, grouped ----------
   The panel keeps the prototype's chrome — 640px, centred, the section
   label across the top, the grey item hover with its arrow, the footer
   link — and gains the grouped structure the proof site settled on: each
   cell of the two-up grid is a group heading over its own links. Ported
   from hilbert-web's cms.css; the colours follow the -v2 header's navy
   tokens rather than the forest ones style.css's .dropdown defaults to. */
.dropdown--groups .dropdown__grid {
  grid-template-columns: 1fr 1fr;
  gap: 8px 1px;
  padding: 8px 16px 8px 0;
}

.dropdown-group {
  display: flex;
  flex-direction: column;
}

.dropdown-group__title {
  display: block;
  padding: 12px 16px 4px;
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 12px;
  line-height: 16px;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--color-forest);
  opacity: 0.55;
}

/* A group that is a link in its own right reads as a live item, so it gets
   the same hover the entries below it have. */
.dropdown-group__title--link {
  opacity: 1;
  transition: background-color 0.2s ease;
}

.dropdown-group__title--link:hover {
  background-color: var(--color-green-5);
}

/* The entries reuse .dropdown__item; only the padding tightens, since a
   group heading now carries the space above them. */
.dropdown--groups .dropdown__item {
  padding: 8px 16px;
}

/* The design reveals the arrow on hover. An off-site marker is information
   rather than decoration, so that one stays visible. */
.dropdown--groups .dropdown__item[target='_blank'] .dropdown__item-title span {
  opacity: 0.5;
}

.site-header--v2 .dropdown-group__title { color: var(--color-blue-50); }
.site-header--v2 .dropdown-group__title--link { color: var(--color-night); }
.site-header--v2 .dropdown-group__title--link:hover { background-color: var(--color-blue-5); }

/* ---------- the full subscription form: the client's HubSpot form set as
   the contact page's form — the same rows, rule, checkboxes and button
   (contact-v2.css draws them; this only places the two lines of copy) ---------- */
.signup--full .signup__head p { margin-top: 12px; max-width: 620px; font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-gray-40); }
.signup__enquiry { margin-right: calc(var(--bleed-x) * -1); }
.signup__enquiry .enquiry-form { margin-right: var(--bleed-x); }
.signup__hint { font-family: var(--font-body); font-size: 16px; line-height: 22px; color: var(--color-gray-40); max-width: 620px; }
.signup__choices, .signup__consents { display: flex; flex-direction: column; gap: 24px; }
.signup__note { font-size: 14px; line-height: 20px; }
.signup__enquiry .consent label a { color: inherit; text-decoration: underline; text-underline-offset: 3px; }
.form__success.enquiry-form { display: block; }
@media (max-width: 992px) { .signup__enquiry, .signup__enquiry .enquiry-form { margin-right: 0; } }
@media (max-width: 768px) {
  /* as on the contact page: the fields run edge to edge, the copy padded */
  .signup__enquiry .enquiry-form { margin-left: calc(-1 * var(--container-pad)); margin-right: calc(-1 * var(--container-pad)); }
  .signup__choices, .signup__consents { gap: 16px; }
  .signup__hint { padding: 0 var(--container-pad); }
  .signup__enquiry .enquiry-form { gap: 32px; }
}

/* the privacy acceptance sits on its own line under the two consents */
.consent-row--one { grid-template-columns: 1fr; }
.enquiry--v2 .enquiry-form .consent label a { color: inherit; text-decoration: underline; text-underline-offset: 3px; }

/* ---------- the IR contact form: the band's own field with the contact
   form's consent under it ---------- */
.signup__ir-form { gap: 24px; }
.signup__row { display: flex; align-items: center; border-bottom: 1px solid var(--color-light-green); margin-right: calc(var(--bleed-x) * -1); }
.signup__row input { flex: 1; min-width: 0; padding: 10px 16px 10px 0; border: 0; background: transparent; font-family: var(--font-body); font-size: 16px; color: var(--color-light-green); }
.signup__row input::placeholder { color: var(--color-light-green); }
.signup__row input:focus { outline: none; }
.signup__row button { flex-shrink: 0; padding: 10px 16px; border: 0; border-left: 1px solid var(--color-light-green); background: none; font-family: var(--font-body); font-size: 16px; color: var(--color-light-green); cursor: pointer; }
.signup--dark .signup__ir-form .consent label a { color: inherit; text-decoration: underline; text-underline-offset: 3px; }
@media (max-width: 992px) { .signup__row { margin-right: 0; } }
@media (max-width: 768px) {
  /* contact-v2.css pulls its form out to the screen's edges; this one stays
     in the container, so its own gutters are put back */
  .signup--dark .signup__ir-form { margin-left: 0; margin-right: 0; gap: 16px; }
  .signup--dark .signup__ir-form .consent { padding-left: 0; padding-right: 0; }
}

/* ---------- Client round, September 2026 ---------- */

/* The hero's figures light up under the pointer: StepCycle makes the
   hovered step the current one, and this brightens it before the class
   lands so nothing waits for React. */
.hero-statline--cycle .hero-statline__item:hover { opacity: 1; }

/* A group stacked under the one before it, in the same panel cell. */
.dropdown-group__part--below { margin-top: 8px; }

/* ---------- Article body ----------
   Lexical's output inside .report__body: one colour and one measure for
   the running text, so a post no longer reads half grey and half black.
   The lead keeps the night ink; the body follows it, a shade lighter than
   the headings, and every element gets its own rhythm. */
.article-body { display: block; max-width: 872px; }
.article-body .report__lead { margin: 0 0 32px; font-family: var(--font-heading); font-size: 24px; line-height: 1.3; letter-spacing: -0.24px; color: var(--color-night); }
.article-body p, .article-body li { font-family: var(--font-body); font-size: 17px; line-height: 27px; color: var(--color-night); }
.article-body p + p, .article-body ul + p, .article-body ol + p, .article-body p + ul, .article-body p + ol { margin-top: 20px; }
.article-body h2 { margin: 48px 0 16px; font-family: var(--font-heading); font-weight: 400; font-size: 34px; line-height: 1.1; letter-spacing: -0.34px; color: var(--color-night); }
.article-body h3 { margin: 36px 0 12px; font-family: var(--font-heading); font-weight: 400; font-size: 26px; line-height: 1.15; letter-spacing: -0.26px; color: var(--color-night); }
.article-body h4 { margin: 28px 0 8px; font-family: var(--font-body); font-weight: 500; font-size: 17px; line-height: 24px; color: var(--color-night); }
.article-body h2 + h3 { margin-top: 20px; }
.article-body h2:first-child, .article-body h3:first-child { margin-top: 0; }
.article-body ul, .article-body ol { margin: 0; padding-left: 24px; }
.article-body ul { list-style: disc; }
.article-body ol { list-style: decimal; }
.article-body li + li { margin-top: 8px; }
.article-body li::marker { color: var(--color-blue-50); }
.article-body a { color: var(--color-night); text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--color-blue-40); }
.article-body a:hover { text-decoration-color: var(--color-night); }
.article-body strong { font-weight: 500; }
.article-body em { font-style: italic; }
.article-body blockquote { margin: 32px 0; padding-left: 24px; border-left: 2px solid rgba(23, 34, 58, 0.2); font-family: var(--font-heading); font-size: 24px; line-height: 1.3; letter-spacing: -0.24px; color: var(--color-night); }
.article-body blockquote p { font: inherit; color: inherit; }
.article-body hr { margin: 40px 0; border: 0; border-top: 1px solid var(--color-blue-10); }
.article-body img { max-width: 100%; height: auto; display: block; }
.article-body figure { margin: 32px 0; }
.article-body figcaption { margin-top: 8px; font-family: var(--font-body); font-size: 13px; line-height: 18px; color: var(--color-blue-50); }
.article-body table { width: 100%; border-collapse: collapse; margin: 32px 0; font-family: var(--font-body); font-size: 15px; line-height: 22px; }
.article-body th, .article-body td { padding: 10px 12px; border-bottom: 1px solid var(--color-blue-10); text-align: left; vertical-align: top; }
.article-body th { font-weight: 500; color: var(--color-night); }
.article-body code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 14px; background: rgba(22, 35, 58, 0.06); padding: 1px 5px; border-radius: 3px; }
@media (max-width: 992px) {
  .article-body .report__lead { font-size: 21px; }
  .article-body p, .article-body li { font-size: 16px; line-height: 25px; }
  .article-body h2 { font-size: 28px; }
  .article-body h3 { font-size: 23px; }
  .article-body blockquote { font-size: 21px; }
}

/* ---------- Subscribe line beside the document filters ----------
   In the aside under the year and month filters: a line and a link. On
   the narrow frame the aside dissolves into the column, so it takes an
   order after the list. */
.pr__subscribe { margin-top: 40px; max-width: 203px; display: flex; flex-direction: column; gap: 8px; }
.pr__subscribe p { font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-blue-50); }
.pr__subscribe a { font-family: var(--font-body); font-size: 14px; line-height: 20px; font-weight: 500; color: var(--color-night); text-decoration: underline; text-underline-offset: 3px; }
@media (max-width: 992px) {
  .pr__subscribe { order: 6; max-width: none; margin-top: 24px; }
}


/* ---------- Performance: the period buttons and the reading under the pointer ---------- */
.perf__periods { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 32px; }
.perf__period {
  padding: 6px 14px; border: 1px solid rgba(23, 34, 58, 0.2); border-radius: 999px; background: transparent; cursor: pointer;
  font-family: var(--font-body); font-size: 13px; line-height: 18px; color: var(--color-blue-50);
  transition: color 0.2s ease, border-color 0.2s ease, background-color 0.2s ease;
}
.perf__period:hover { color: var(--color-night); border-color: var(--color-night); }
.perf__period.is-active { color: var(--color-almost-white); background: var(--color-night); border-color: var(--color-night); }
.perf-chart__svg { cursor: crosshair; }
.perf-chart__cursor { stroke: var(--color-blue-40); stroke-width: 1; stroke-dasharray: 3 3; }
.perf-chart__dot { fill: var(--color-almost-white); stroke: var(--color-night); stroke-width: 1.5; }
.perf-chart__tip { fill: var(--color-night); }
.perf-chart__tip-label { fill: rgba(239, 239, 236, 0.7); font-family: var(--font-body); font-size: 11px; }
.perf-chart__tip-value { fill: var(--color-almost-white); font-family: var(--font-body); font-size: 14px; font-weight: 500; }
.perf-chart__hover { pointer-events: none; }
.perf-chart__none { padding: 40px 0; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-blue-50); }

/* ---------- Performance, as the September 2026 factsheet draws it ----------
   The curve in percent from 0 with the 0% line drawn firmer, a comparison
   beside it on request (dashed, in moss, under the fund's night line), and
   each month's return as a bar where the rolling volatility was. */
.perf-chart__head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; min-height: 30px; }
.perf-chart__compare { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.perf-chart__compare > span { font-family: var(--font-body); font-size: 12px; line-height: 16px; color: var(--color-blue-50); }
.perf__period--small { padding: 4px 12px; font-size: 12px; line-height: 16px; }
.perf-chart__legend { display: flex; flex-wrap: wrap; gap: 4px 20px; margin-top: 10px; font-family: var(--font-body); font-size: 12px; line-height: 16px; color: var(--color-blue-50); }
.perf-chart__key { display: inline-flex; align-items: center; gap: 8px; }
.perf-chart__key::before { content: ''; width: 18px; border-top: 2px solid var(--color-night); }
.perf-chart__key--bench::before { border-top: 2px dashed var(--color-moss); }
.perf-chart__grid--zero { stroke: var(--color-blue-40); }
.perf-chart__line--bench { stroke: var(--color-moss); stroke-dasharray: 5 4; }
.perf-chart__dot--bench { stroke: var(--color-moss); }
.perf-chart__tip-value--bench { fill: #a9c8a0; }
.perf-chart__bar { fill: var(--color-night); transition: opacity 0.15s ease; }
.perf-chart__bar.is-negative { fill: var(--color-error); }
.perf-chart__svg:hover .perf-chart__bar:not(.is-hover) { opacity: 0.45; }

/* A press release's body reads the same way as an article's: one ink for
   the running text, the preamble a shade larger, headings in the serif. */
.mfn-release .mfn-body p, .mfn-release .mfn-body li, .mfn-release .mfn-about p, .mfn-release .mfn-footer p { font-size: 17px; line-height: 27px; color: var(--color-night); }
.mfn-release .mfn-body p + p { margin-top: 20px; }
.mfn-release .mfn-footer p, .mfn-release .mfn-about p { font-size: 15px; line-height: 23px; color: var(--color-blue-50); }
.mfn-release .mfn-heading-1, .mfn-release .mfn-heading-2 { margin: 36px 0 12px; font-family: var(--font-heading); font-weight: 400; font-size: 26px; line-height: 1.15; letter-spacing: -0.26px; color: var(--color-night); }
.mfn-release .mfn-body ul, .mfn-release .mfn-body ol { margin: 16px 0; padding-left: 24px; }
.mfn-release .mfn-body li + li { margin-top: 8px; }
.mfn-release .mfn-body li::marker { color: var(--color-blue-50); }
@media (max-width: 992px) { .mfn-release .mfn-body p, .mfn-release .mfn-body li { font-size: 16px; line-height: 25px; } }

/* ---------- Performance, before the figures ----------
   The section on a fund page whose returns are not yet published: the
   same frame as a published one — buttons, chart frames, ratios, table —
   with a dash wherever a figure will go. */
.perf--empty .perf__period { cursor: default; }
.perf--empty .perf__period:not(.is-active):hover { color: var(--color-blue-50); border-color: rgba(23, 34, 58, 0.2); }
.perf-chart__svg--empty { cursor: default; }
.perf--empty .perf-metric__value, .perf--empty .perf-table td { color: var(--color-blue-40); }
.perf__notes a { color: var(--color-night); text-decoration: underline; text-underline-offset: 2px; }

/* ---------- The subscription form on a pale ground ----------
   The block is drawn for night; an editor choosing a light tone (the home
   page's, light green) gets the light treatment: forest ink, green rules,
   a forest button, forest checkboxes with a light tick. */
.signup--light .label, .signup--light .signup__kicker { color: var(--color-green-50); }
.signup--light .signup__head h2 { color: var(--color-forest); }
.signup--light.signup--full .signup__head p, .signup--light .signup__hint { color: var(--color-green-50); }
.signup--light .signup__enquiry .field__control { color: var(--color-forest); }
.signup--light .signup__enquiry .field__control::placeholder { color: var(--color-green-50); }
.signup--light .signup__enquiry .enquiry-form > .row2::after, .signup--light .signup__enquiry .enquiry-form > .field::after { background: var(--color-green-50); }
.signup--light .signup__enquiry .consent label { color: var(--color-forest); }
.signup--light .signup__enquiry .consent input { border-color: var(--color-forest); }
.signup--light .signup__enquiry .consent input:checked {
  background-color: var(--color-forest);
  border-color: var(--color-forest);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='11' viewBox='0 0 11 11' fill='none'%3E%3Cpath d='M1.26042 6.91797L4.125 9.28125L9.73958 1.71875' stroke='%23EFEFEC' stroke-linecap='square'/%3E%3C/svg%3E");
}
.signup--light .signup__enquiry .consent input:focus-visible { outline-color: var(--color-forest); }
.signup--light .form__success, .signup--light .form__error { color: var(--color-forest); }
/* the one-line form, when there is nothing to choose */
.signup--light .signup__form { border-bottom-color: var(--color-forest); }
.signup--light .signup__form input, .signup--light .signup__form button { color: var(--color-forest); border-left-color: var(--color-forest); }
.signup--light .signup__form input::placeholder { color: var(--color-green-50); }

/* The rules under each row are drawn out to the screen edge by
   --bleed-x, which insights-v2.css defines on .signup--dark only. Without
   it the light variant's rules resolve to no width at all and the fields
   read as floating text, so the light variant gets the same measure. */
.signup--light {
  --page-bleed: calc((100vw - min(100vw, var(--container-max))) / 2);
  --bleed-x: calc(var(--container-pad) + var(--page-bleed));
  overflow-x: clip;
}
/* the divider between paired fields, in the light ground's ink */
.signup--light .enquiry-form .row2 > .field:first-child,
.signup--light .enquiry-form .row2--three > .field:nth-child(2) { border-right-color: var(--color-green-50); }

/* ---------- The subscription form, compact ----------
   The home page's closing band (client, September 2026): less air above
   and below, a smaller heading, tighter steps through the form, and the
   name and email fields on one row. */
.signup--compact { padding-top: 80px; padding-bottom: 80px; }
.signup--compact .signup__main { gap: 32px; }
.signup--compact .signup__head h2 { font-size: 32px; letter-spacing: -0.32px; }
.signup--compact .signup__enquiry .enquiry-form { gap: 32px; }
.signup--compact .signup__choices, .signup--compact .signup__consents { gap: 16px; }
.signup--compact .enquiry-form .btn { margin-top: 0; }
@media (min-width: 769px) {
  .enquiry--v2 .enquiry-form .row2.row2--three { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .enquiry-form .row2--three > .field:nth-child(2) { border-right: 1px solid var(--color-gray-40); }
  .signup--light .enquiry-form .row2--three > .field:nth-child(2) { border-right-color: var(--color-green-50); }
  .enquiry-form .row2--three > .field:not(:first-child) .field__control { padding-left: 16px; }
}
@media (max-width: 768px) {
  .signup--compact { padding-top: 56px; padding-bottom: 56px; }
  .signup--compact .signup__head h2 { font-size: 28px; }
}

/* A light subscription form directly above the footer shares its ground;
   the footer is marked --ruled (Chrome.tsx) and draws a visible rule
   across its top so the two bands read as two. */
.site-footer.site-footer--v2.site-footer--ruled { border-top: 1px solid var(--color-green-50); }
/* the button in the ground's own ink: forest on green, not the blue
   palette's night */
.signup--light .btn--dark { background-color: var(--color-forest); color: var(--color-almost-white); }
.signup--light .btn--dark:hover { background-color: var(--color-green-50); }

/* ---------- The site's form on a phone ----------
   Two faults of the shared form (contact page and subscription form
   alike) at the narrow frame, found September 2026:
   - the rule under each row reaches one gutter past the form's right edge,
     which on the wide frame is how it meets the screen edge; on a phone
     the form already runs edge to edge, so the rule ran 16px past the
     screen and the whole page scrolled sideways.
   - contact.css unwraps each pair of fields (display: contents) so they
     stack, and the rule drawn for the row went with the wrapper: paired
     fields had no line under them at all. Each unwrapped field draws its
     own. */
@media (max-width: 768px) {
  .enquiry--v2 .enquiry-form > .row2::after,
  .enquiry--v2 .enquiry-form > .field::after { right: 0; }
  .enquiry--v2 .enquiry-form .row2 > .field { position: relative; }
  .enquiry--v2 .enquiry-form .row2 > .field::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 1px;
    background: var(--color-gray-40);
  }
  .signup--light .enquiry-form .row2 > .field::after { background: var(--color-green-50); }
  /* the empty half of the email row is not a field */
  .enquiry--v2 .enquiry-form .row2 > .field:empty { display: none; }
}
/* and across its top: on the home page it follows News & Media on the
   same light-green ground, so the rule above matches the one below */
.signup--light { border-top: 1px solid var(--color-green-50); }

/* "View more" under a card grid (the Research Papers page): a button set
   as the link that sits in the same place on the other rails */
.media__reveal { padding: 0; border: 0; background: none; cursor: pointer; font: inherit; color: inherit; }

/* News & Media's feature card over a cover (the research papers' cover by
   default): drawn edge to edge, where the maze drawing it replaces sat
   off-centre at a fixed 1030px */
.newsmedia__feature img.newsmedia__cover { inset: 0; left: 0; top: 0; width: 100%; height: 100%; transform: none; object-fit: cover; object-position: center; }

/* ---------- Every scene hero at the home hero's size ----------
   The client asked (September 2026) for each hero that runs the animated
   scene to match the home page's: at least 736px tall at every width (the
   home hero's own height, which on a phone its stat line brings it to),
   with home.css's narrow padding. A hero whose copy needs more grows past
   it. The per-page presets above keep their colours, tints and type; only
   the size is taken from home. */
.hero.hero--scene { min-height: 736px; padding-top: 32px; padding-bottom: 32px; }
@media (max-width: 768px) {
  .hero.hero--scene { min-height: 736px; padding: 230px 0 32px; }
}

/* ---------- The contact form, set as the "Speak to our team" band ----------
   The fund pages' closing band (.fund-cta2, above) in forest: the wireframe
   volume off the top left over the label column, an italic line, an 84px
   serif heading, the intro as body copy. The routing rail and the form keep
   their own styles, which were drawn for a dark ground already. */
.enquiry--band { position: relative; overflow: hidden; background: var(--color-forest); }
.enquiry--band .enquiry__bg { position: absolute; top: -60px; left: -220px; width: 760px; max-width: none; pointer-events: none; }
.enquiry--band .enquiry__inner { position: relative; z-index: 1; }
.enquiry--band .enquiry__intro { display: flex; flex-direction: column; align-items: flex-start; gap: 16px; }
.enquiry--band .enquiry__intro .enquiry__tag { margin: 0; font-family: var(--font-heading); font-style: italic; font-size: 16px; line-height: 20px; color: var(--color-almost-white); }
.enquiry--band .enquiry__intro h3 { margin-top: -8px; font-family: var(--font-heading); font-weight: 400; font-size: 84px; line-height: 0.9; letter-spacing: -1.26px; color: var(--color-almost-white); }
.enquiry--band .enquiry__intro p:not(.enquiry__tag) { margin-top: 8px; max-width: 620px; font-family: var(--font-body); font-size: 16px; line-height: 22px; letter-spacing: 0; color: var(--color-gray-40); }
@media (min-width: 993px) {
  .enquiry--band .enquiry__bg { left: max(-220px, calc(50% - 720px - 220px)); }
}
@media (max-width: 992px) {
  .enquiry--band { padding-top: 200px; }
  .enquiry--band .enquiry__bg { top: -60px; left: -200px; width: 700px; }
  .enquiry--band .enquiry__intro h3 { font-size: 40px; letter-spacing: -0.4px; }
}

/* ---------- Events (/events) ----------
   The proof site's events styles, carried over as they were (cms.css in
   hilbert-web), September 2026: the featured event on almost-white, the
   months ahead on blue-5, the recent ones beneath. */
.event-lead {
  background: var(--color-almost-white);
  padding: var(--sp-120) 0;
}

.event-lead__main {
  max-width: 760px;
}

/* "Meet us at" is the frame, the event is the subject. It opens the block
   in the body face, the size the section labels use, so it introduces the
   name instead of competing with it.

   The gaps down the block are deliberately uneven. An equal space between
   every line makes six separate lines; grouping the prefix with its date,
   then opening up before the name and again before the button, makes four
   things — which is what is actually being said. */
.event-lead__prefix {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-night);
}

.event-lead__kicker {
  margin-top: 4px;
  font-family: var(--font-heading);
  font-style: italic;
  font-size: 16px;
  line-height: 20px;
  color: var(--color-blue-50);
}

.event-lead__title {
  margin-top: var(--sp-24);
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 62px;
  line-height: 0.95;
  letter-spacing: -0.93px;
  color: var(--color-night);
}

.event-lead__place {
  margin-top: var(--sp-32);
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-night);
}

.event-lead__desc {
  margin-top: var(--sp-20);
  max-width: 588px;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 24px;
  color: var(--color-blue-50);
}

.event-lead__who {
  margin-top: var(--sp-24);
  font-family: var(--font-heading);
  font-style: italic;
  font-size: 18px;
  line-height: 24px;
  color: var(--color-night);
}

.event-lead__actions {
  margin-top: var(--sp-40);
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-12);
}

.event-lead--empty .event-lead__title {
  font-size: 40px;
  letter-spacing: -0.4px;
}

/* ---------- The month list ---------- */
.event-list {
  background: var(--color-blue-5);
  padding: var(--sp-120) 0;
}

.event-list--past {
  background: var(--color-almost-white);
  border-top: 1px solid var(--color-blue-10);
}

.event-list__aside h2 {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 40px;
  line-height: 1;
  letter-spacing: -0.4px;
  color: var(--color-night);
}

.event-list__aside p {
  margin-top: var(--sp-16);
  max-width: 340px;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
  color: var(--color-blue-50);
}

.event-list__main {
  display: flex;
  flex-direction: column;
  gap: var(--sp-64);
}

.event-month + .event-month {
  margin-top: var(--sp-40);
}

.event-month__label {
  padding-bottom: var(--sp-8);
  border-bottom: 1px solid var(--color-blue-10);
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 20px;
  letter-spacing: 0.4px;
  text-transform: uppercase;
  color: var(--color-blue-50);
}

.event-month__rows {
  display: flex;
  flex-direction: column;
}

/* The date block is the calendar. Fixed width so every row's day numbers
   line up into a column you can scan down, whatever the month. */
.event-row {
  display: grid;
  grid-template-columns: 96px 1fr;
  gap: var(--sp-24);
  align-items: baseline;
  padding: var(--sp-24) 0;
  border-bottom: 1px solid var(--color-blue-10);
  color: inherit;
  text-decoration: none;
  transition: background-color 0.2s ease;
}

.event-row:hover {
  background-color: rgba(23, 34, 58, 0.03);
}

.event-row--flat:hover {
  background-color: transparent;
}

.event-row__days {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 32px;
  line-height: 1;
  letter-spacing: -0.32px;
  color: var(--color-night);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.event-row__body {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}

.event-row__title {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 28px;
  line-height: 1.05;
  letter-spacing: -0.28px;
  color: var(--color-night);
}

.event-row__arrow {
  opacity: 0;
  transition: opacity 0.2s ease;
}

.event-row:hover .event-row__arrow {
  opacity: 1;
}

.event-row--flat .event-row__arrow {
  display: none;
}

.event-row__meta {
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 20px;
  color: var(--color-blue-50);
}

/* Past events are a record, not an invitation, so they are quieter and on
   one line. */
.event-past {
  display: grid;
  grid-template-columns: 160px 1fr auto;
  gap: var(--sp-16);
  align-items: baseline;
  padding: var(--sp-16) 0;
  border-bottom: 1px solid var(--color-blue-10);
}

.event-past__date,
.event-past__place {
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 20px;
  color: var(--color-blue-40);
}

.event-past__title {
  font-family: var(--font-heading);
  font-weight: 400;
  font-size: 20px;
  line-height: 1.2;
  letter-spacing: -0.2px;
  color: var(--color-blue-50);
}

@media (max-width: 992px) {
  .event-lead,
  .event-list { padding: var(--sp-80) 0; }
  .event-lead__title { font-size: 40px; letter-spacing: -0.6px; }
  .event-lead--empty .event-lead__title { font-size: 32px; }
  .event-list__aside h2 { font-size: 32px; letter-spacing: -0.32px; }
  .event-list__aside p { max-width: none; }
}

@media (max-width: 767px) {
  /* The day block moves above the title rather than squeezing the name into
     what is left of a narrow screen. */
  .event-row {
    grid-template-columns: 1fr;
    gap: var(--sp-8);
  }
  .event-row__days { font-size: 24px; }
  .event-row__title { font-size: 24px; }
  .event-past {
    grid-template-columns: 1fr;
    gap: 4px;
  }
}

/* ---------- …and the scene itself in the home hero's place ----------
   Same size and position on every page (client, September 2026). The
   inner heroes used v2-motion.css's centred square, sized to the hero's
   larger side: on a phone that drew the volume at the hero's height
   rather than its width, and on the wide frame it sat ~420px lower than
   on the home page. Every scene hero now takes the home hero's box (the
   rule for .hero--split above): full width, square, its centre 50px above
   the top edge on the wide frame and 50px below it on a phone. Opacity,
   ground and tint stay per page. */
.hero.hero--scene .hero__scene,
.hero.hero--scene .hero__art {
  position: absolute;
  left: 50%;
  top: -50px;
  transform: translate(-50%, -50%);
  width: 100%;
  height: auto;
  aspect-ratio: 1 / 1;
  min-width: 100%;
  min-height: 0;
  max-width: none;
  object-fit: fill;
  object-position: center;
}
@media (max-width: 768px) {
  .hero.hero--scene .hero__scene,
  .hero.hero--scene .hero__art { top: 50px; }
}

/* ---------- Weekly Trader's Insights ----------
   A report is an article with three things more: a bold lede, the report's
   blocks in the body (callout, quote, table), and its "By the numbers"
   panel. The panel takes the article's own side column under the meta
   items — the body spans both rows beside it — and on a narrow screen it
   drops below the body rather than above, where its length would push the
   text several screens down.

   The panel's green is moss rather than the site's forest: forest beside
   night body text is too close to read as a signal at 14px. */
.report--numbers .grid { grid-template-rows: auto 1fr; }
.report--numbers .report__meta { grid-row: 1; }
.report--numbers .report__body { grid-row: 1 / span 2; }
.report__numbers { grid-column: 1 / 5; grid-row: 2; align-self: start; padding-right: 32px; margin-top: 56px; }

.numbers__title { padding-top: 14px; border-top: 1px solid var(--color-night); font-family: var(--font-body); font-weight: 500; font-size: 13px; line-height: 16px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--color-night); }
.numbers__sec { margin-top: 28px; }
/* .report h3 (40px) would win over the class alone */
.report .numbers__head { margin-bottom: 6px; font-family: var(--font-heading); font-weight: 400; font-size: 20px; line-height: 1.2; letter-spacing: -0.2px; color: var(--color-night); }
.numbers__cols { display: flex; justify-content: space-between; gap: 16px; padding: 4px 0 6px; border-bottom: 1px solid var(--color-blue-10); font-family: var(--font-body); font-size: 12px; line-height: 16px; letter-spacing: 0.04em; text-transform: uppercase; color: var(--color-blue-50); }
.numbers__list { margin: 0; }
.numbers__item { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; padding: 8px 0; border-bottom: 1px solid var(--color-blue-10); font-family: var(--font-body); font-size: 14px; line-height: 20px; }
.numbers__item dt { color: var(--color-night); }
.numbers__item dd { margin: 0; text-align: right; font-weight: 500; color: var(--color-night); }
.numbers__item.is-positive dd { color: var(--color-moss); }
.numbers__item.is-negative dd { color: var(--color-error); }
.numbers__item--stacked { display: block; }
.numbers__item--stacked dt { font-weight: 500; }
.numbers__item--stacked dd { margin-top: 2px; text-align: left; font-weight: 400; }

/* the weekly's opening paragraph and its callouts read as the research
   papers' running text — the same face, size, weight and spacing — rather
   than as a bolder, larger intro (client, 29 September 2026) */
.article-body .report__lede { margin-bottom: 20px; font-family: var(--font-body); font-weight: 400; font-size: 17px; line-height: 27px; letter-spacing: 0; }

.report-callout { margin: 32px 0; padding: 18px 22px; border-left: 3px solid var(--color-moss); background: var(--color-green-5); }
.report-callout--alert { border-left-color: var(--color-error); background: rgba(149, 47, 47, 0.05); }
.report-callout--alert strong { color: var(--color-error); }

.report-quote { margin: 36px 0; }
.article-body .report-quote blockquote { margin: 0; }
.article-body .report-quote figcaption { margin-top: 12px; padding-left: 26px; font-size: 12px; line-height: 16px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--color-blue-50); }

.report-table { margin: 32px 0; }
.report-table__scroll { overflow-x: auto; }
.article-body .report-table table { margin: 0; min-width: 460px; }
.article-body .report-table thead th { border-bottom-color: var(--color-night); font-size: 12px; line-height: 16px; letter-spacing: 0.04em; text-transform: uppercase; color: var(--color-blue-50); }
.article-body .report-table tbody th { font-weight: 400; }
.article-body .report-table .is-num { text-align: right; white-space: nowrap; }
.article-body .report-table__title,
.article-body .report-figure__title { margin-bottom: 12px; font-family: var(--font-body); font-size: 15px; line-height: 22px; font-weight: 500; color: var(--color-night); }

.report-figure { margin: 36px 0; }
.report-figure img { display: block; width: 100%; height: auto; }
.article-body .report-figure__source { margin-top: 10px; font-size: 12px; line-height: 16px; color: var(--color-blue-50); }

.report__download { margin-top: 56px; }
.article-body .report__download a { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 20px 24px; border: 1px solid var(--color-night); text-decoration: none; transition: background 0.2s, color 0.2s; }
.report__download-label { font-family: var(--font-heading); font-size: 22px; line-height: 1.2; letter-spacing: -0.22px; color: var(--color-night); }
.report__download-meta { font-family: var(--font-body); font-size: 13px; line-height: 16px; letter-spacing: 0.04em; text-transform: uppercase; color: var(--color-blue-50); white-space: nowrap; }
.article-body .report__download a:hover { background: var(--color-night); }
.article-body .report__download a:hover .report__download-label,
.article-body .report__download a:hover .report__download-meta { color: var(--color-almost-white); }

@media (max-width: 992px) {
  .report--numbers .report__body { grid-row: auto; }
  .report__numbers { grid-column: 1 / 13; grid-row: auto; padding-right: 0; margin-top: 72px; }
  .article-body .report__lede { font-size: 16px; line-height: 25px; }
  .report__download-label { font-size: 19px; }
}

/* FormSelect (components/FormSelect.tsx): the contact form's country,
   investor type and topic (client, 1 October 2026). The field reads as the
   form's other fields; its list is a light panel with dark text, so every
   option can be read on the dark band, and the country list can be
   searched by typing. */
.fselect { position: relative; }
.enquiry-form .fselect__input {
  cursor: pointer;
  padding-right: 40px;
  text-overflow: ellipsis;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23efefec' stroke-opacity='0.7' stroke-width='1' fill='none'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 20px center;
}
.enquiry-form .fselect[data-open] .fselect__input { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 10 6'%3E%3Cpath d='M1 5l4-4 4 4' stroke='%23efefec' stroke-opacity='0.7' stroke-width='1' fill='none'/%3E%3C/svg%3E"); }
.enquiry-form .fselect__input[inputmode='search'] { cursor: text; }
.enquiry-form .fselect__input[inputmode='none'] { caret-color: transparent; }
.fselect__list {
  position: absolute;
  z-index: 30;
  top: calc(100% + 6px);
  left: 0;
  right: 0;
  max-height: 304px;
  overflow-y: auto;
  overscroll-behavior: contain;
  margin: 0;
  padding: 6px 0;
  list-style: none;
  background: var(--color-almost-white);
  color: var(--color-night);
  box-shadow: 0 16px 40px rgba(10, 22, 18, 0.28);
  font-family: var(--font-body);
  font-size: 15px;
  line-height: 20px;
}
.fselect__option {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 16px;
  cursor: pointer;
}
.fselect__option[data-active] { background: rgba(23, 58, 44, 0.08); }
.fselect__option[aria-selected='true'] { font-weight: 500; }
.fselect__option[aria-selected='true']::after {
  content: '';
  flex: none;
  width: 12px;
  height: 9px;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 9'%3E%3Cpath d='M1 4.5l3.5 3.5L11 1' stroke='%23173a2c' stroke-width='1.5' fill='none'/%3E%3C/svg%3E") no-repeat center / contain;
}
.fselect__none { padding: 10px 16px; color: var(--color-blue-50); }
@media (max-width: 768px) {
  .enquiry-form .fselect__input { background-position: right var(--container-pad) center; }
}

/* The Contact page's "Who to contact" cards: the whole card is the link to
   the form (client, 1 October 2026). The link spans the card's foot and is
   positioned (it sits over the artwork), so its pseudo-element reaches up
   from it over the whole card, and the card's overflow: hidden clips it to
   the card. The link is still one tab stop. */
.contact-card__link::after { content: ''; position: absolute; left: 0; right: 0; bottom: 0; top: -2000px; }
.contact-card:hover .contact-card__link { text-decoration: underline; text-underline-position: from-font; }

/* ---------- The site's form at the wide frame ----------
   Client review, 1 October 2026: at 1440 the right-hand fields and the
   newsletter's email row looked to run off the page. The fields end at
   the gutter, but the rule under each row was drawn on to the screen
   edge (the Figma bleed), and the email row's empty half carried a
   divider and a rule as if it were a field. The rules now end where the
   fields do, and the empty half is no field. */
.enquiry--v2 .enquiry-form > .row2::after,
.enquiry--v2 .enquiry-form > .field::after { right: 0; }
.enquiry--v2 .enquiry-form > .row2:has(> .field:empty)::after { display: none; }
.enquiry--v2 .enquiry-form .row2:has(> .field:empty) > .field:first-child { position: relative; border-right: 0; }
.enquiry--v2 .enquiry-form .row2:has(> .field:empty) > .field:first-child::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 1px;
  background: var(--color-gray-40);
}
.signup--light .enquiry-form .row2:has(> .field:empty) > .field:first-child::after { background: var(--color-green-50); }

/* The footer's brand line in paragraphs: the description, then the risk
   statement a size down (client, 1 October 2026). */
.site-footer--v2 .footer-brand__tagline p + p { margin-top: 8px; }
.site-footer--v2 .footer-brand__tagline .footer-brand__risk { font-size: 11px; line-height: 15px; }

/* ---------- Fund pages: the professional-investor notice ----------
   Under each fund's heading (client review, October 2026), in the hero's
   own muted ink, set off by a short rule so it reads as a notice. */
.fund-hero__notice {
  margin-top: 24px;
  padding-top: 12px;
  border-top: 1px solid currentColor;
  width: fit-content;
  font-family: var(--font-body);
  font-size: 13px;
  line-height: 18px;
  letter-spacing: 0.2px;
  color: var(--color-green-50);
}
.dhero--lightblue .fund-hero__notice { color: var(--color-blue-50); }

/* ---------- The plain text page ----------
   Privacy, cookies, any simple page, not found and errors. The hero is the
   site's ordinary centred one (client, 1 October 2026: as it was), and the
   text is one column at a reading measure, centred on the page — no empty
   label column beside it — with the site's ordinary section spacing.
   components/PlainPage.tsx. */
.article--plain { padding-top: var(--sp-80); padding-bottom: var(--sp-120); }
.article--plain .prose { max-width: 760px; margin: 0 auto; }
.article--plain .prose > :first-child { margin-top: 0; }
.plain-page__retry {
  padding: 12px 24px;
  border: 0;
  background: var(--color-night);
  color: var(--color-almost-white);
  font: inherit;
  cursor: pointer;
}
.plain-page__retry:hover { background: var(--color-blue-50); }
@media (max-width: 768px) {
  .article--plain { padding-top: 40px; }
}

/* ---------- Performance block, client review (October 2026) ----------
   The period buttons sat flush on the heading's rule: 12px between them.
   The notes under the table run the table's full width rather than a
   narrower column of their own. */
.perf__periods { margin-top: 12px; }
.perf__notes { max-width: none; }
.article--plain .prose .payload-richtext > :first-child { margin-top: 0; }

/* ---------- Contrast (client review, October 2026) ----------
   The muted ink is the main ink at 50%, and the footer's column titles and
   legal line were dimmed further on top, so on the light-green and
   light-blue grounds the small text read at 1.7–2.7 : 1. WCAG AA asks 4.5
   for text this size. The muted ink becomes 75% on the light grounds and
   60% on night, with no second dimming; the links keep their underline,
   which is what tells them from the text. */
.site-footer--v2 .footer-col__title,
.site-footer--v2 .footer-legal span { opacity: 1; }
.site-footer--v2 .footer-col__title,
.site-footer--v2 .footer-brand__tagline p,
.site-footer--v2 .footer-col__contact-lead,
.site-footer--v2 .footer-legal span,
.site-footer--v2 .footer-policies a,
.site-footer--v2 .footer-policies__settings { color: rgba(239, 239, 236, 0.6); }
.site-footer--v2.site-footer--light-green .footer-col__title,
.site-footer--v2.site-footer--light-green .footer-brand__tagline p,
.site-footer--v2.site-footer--light-green .footer-col__contact-lead,
.site-footer--v2.site-footer--light-green .footer-legal span,
.site-footer--v2.site-footer--light-green .footer-policies a,
.site-footer--v2.site-footer--light-green .footer-policies__settings { color: rgba(23, 58, 44, 0.75); }
.site-footer--v2.site-footer--light-blue .footer-col__title,
.site-footer--v2.site-footer--light-blue .footer-brand__tagline p,
.site-footer--v2.site-footer--light-blue .footer-col__contact-lead,
.site-footer--v2.site-footer--light-blue .footer-legal span,
.site-footer--v2.site-footer--light-blue .footer-policies a,
.site-footer--v2.site-footer--light-blue .footer-policies__settings,
.site-footer--v2.site-footer--light .footer-col__title,
.site-footer--v2.site-footer--light .footer-brand__tagline p,
.site-footer--v2.site-footer--light .footer-col__contact-lead,
.site-footer--v2.site-footer--light .footer-legal span,
.site-footer--v2.site-footer--light .footer-policies a,
.site-footer--v2.site-footer--light .footer-policies__settings { color: rgba(23, 34, 58, 0.75); }
.site-footer--v2 .footer-brand__tagline { opacity: 1; }
/* the fund pages' light-blue hero: its eyebrow, lead and notice in the
   night ink at 75% (the eyebrow was the green page's ink) */
.dhero--lightblue.fund-hero .dhero__crumb,
.dhero--lightblue .dhero__desc,
.dhero--lightblue .fund-hero__notice { color: rgba(23, 34, 58, 0.75); }
.dhero--lightgreen .dhero__desc,
.dhero--lightgreen .fund-hero__notice,
.fund-hero.dhero--lightgreen .dhero__crumb { color: rgba(23, 58, 44, 0.75); }
/* the home hero's figures that are not the one lit: dimmed to 60%, not
   40%, so their small labels still read */
.hero-statline--cycle .hero-statline__item { opacity: 0.6; }
.hero-statline--cycle .hero-statline__item.is-active { opacity: 1; }
/* the breadcrumb's leading "Home /" on dark heroes: almost-white at 60%,
   a touch above the 4.5 : 1 it fell just short of */
.dhero__crumb .muted,
.hero__breadcrumb .muted { color: rgba(239, 239, 236, 0.6); }
.dhero--lightblue .dhero__crumb .muted { color: rgba(23, 34, 58, 0.75); }
.hero--v2 .hero__breadcrumb .muted,
.hero[data-hero-preset] .hero__breadcrumb .muted { color: rgba(222, 234, 220, 0.7); }

/* ---------- Previous / next under a drag slider ----------
   The Principles strip (client review, October 2026): right-aligned under
   the scroll line, the site's thin outline in the night ink, dim at the
   ends. components/SliderArrows.tsx. */
.slider-arrows { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; }
.slider-arrows[hidden] { display: none; }
.slider-arrows__btn {
  width: 40px;
  height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid rgba(23, 34, 58, 0.25);
  border-radius: 999px;
  background: transparent;
  color: var(--color-night);
  font: inherit;
  font-size: 16px;
  cursor: pointer;
  transition: border-color 0.2s ease, background-color 0.2s ease, opacity 0.2s ease;
}
.slider-arrows__btn:hover:not(:disabled) { border-color: var(--color-night); background-color: rgba(23, 34, 58, 0.05); }
.slider-arrows__btn:disabled { opacity: 0.35; cursor: default; }

/* ---------- Performance, as the factsheet's chart (client, October 2026) ----------
   One figure: the cumulative return over the monthly bars on one time
   axis. The months simulated before live trading are dashed behind a
   "Simulated | Live" divider through both panels; the last point carries
   its figure in a night pill. The drawing is laid out at its real width,
   so these sizes are pixels on every screen. */
.perf-track { margin: var(--sp-40) 0 0; }
.perf-track__title { font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--color-night); }
.perf-track__title span { font-family: var(--font-heading); font-style: italic; color: var(--color-blue-40); }
.perf-track__box { width: 100%; margin-top: var(--sp-16); }
.perf-track__svg { display: block; overflow: visible; cursor: crosshair; }
.perf-track__svg.perf-chart__svg--empty { cursor: default; }
.perf-track__panel { fill: var(--color-moss); font-family: var(--font-body); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; }
.perf-track .perf-chart__tick { font-size: 12px; fill: var(--color-blue-50); }
.perf-track .perf-chart__area { fill: rgba(23, 34, 58, 0.06); }
.perf-track__zero { stroke: #7f9b8b; stroke-width: 1.5; }
.perf-track__sim { stroke: #4b5770; stroke-dasharray: 6 5; }
.perf-track__divider { stroke: #98a39e; stroke-width: 1; stroke-dasharray: 3 4; }
.perf-track__phase { fill: var(--color-moss); font-family: var(--font-body); font-size: 12px; }
.perf-track__phase--live { fill: var(--color-night); font-weight: 600; }
.perf-track__end { fill: var(--color-night); }
.perf-track__pill { fill: var(--color-night); }
.perf-track__pill-text { fill: var(--color-almost-white); font-family: var(--font-body); font-size: 13px; font-weight: 600; }
.perf-track .perf-chart__bar { fill: #3b4661; }
.perf-track .perf-chart__bar.is-negative { fill: #b7c2bb; }
/* the comparison solid in moss: dashed now means simulated */
.perf-track .perf-chart__line--bench { stroke: var(--color-moss); stroke-dasharray: none; stroke-width: 1.5; }
.perf-track .perf-chart__key--bench::before { border-top-style: solid; }
.perf-track__notes { margin-top: var(--sp-16); max-width: 860px; }
.perf-track__notes p { font-family: var(--font-body); font-size: 13px; line-height: 19px; color: var(--color-blue-50); }
.perf-track__notes p + p { margin-top: 6px; }

/* the figures: live months by default, the whole record on request */
.perf__basis { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; margin-top: 56px; }
.perf__basis > span { font-family: var(--font-body); font-size: 12px; line-height: 16px; color: var(--color-blue-50); }
.perf__basis em { font-family: var(--font-heading); font-style: italic; font-size: 14px; color: var(--color-blue-40); }
.perf__basis + .perf__metrics { margin-top: var(--sp-16); }

/* the simulated months in the table, greyed as on the chart */
.perf-table td.is-sim { color: var(--color-blue-40); font-style: italic; }
.perf-table__key { display: block; margin-top: 2px; font-size: 12px; line-height: 16px; color: var(--color-blue-50); font-style: italic; }

/* The footer's brand column (client, 1 October 2026): the logo at the top,
   the brand line and risk statement at the foot, and never closer than
   32px to the logo when the link columns are short; the two paragraphs
   at a measure that keeps them to a few even lines. */
.site-footer--v2 .footer-brand { gap: 32px; }
.site-footer--v2 .footer-brand__tagline { max-width: 340px; }
.site-footer--v2 .footer-brand__tagline p:first-child { font-size: 13px; line-height: 18px; }
.site-footer--v2 .footer-brand__tagline p + p { margin-top: 10px; }

/* ---------- Who we serve: the links ----------
   Client, 1 October 2026: the links sat in two fixed 202px columns with no
   gap, so a long one ran into its neighbour ("Byzantine x Xapo →" over
   "Lending and Borrowing"). The description sets a little narrower (320px)
   and the links take the room: two equal columns, the same in every row,
   32px apart — at 1440 each link on one line; narrower, a link wraps
   inside its own column with its arrow, never across. Desktop only — the
   narrower layouts set their own grid. */
@media (min-width: 1025px) {
  .serve-row__panel { grid-template-columns: 352px minmax(0, 1fr); }
  .serve-row__desc { max-width: 320px; }
  .serve-row__links { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px 32px; max-width: none; }
  .serve-row__links a { min-width: 0; line-height: 1.1; }
}

/* Six tiles (the Basis+ factsheets' set) as two rows of three on the wide
   frame; four (a credit fund's) stay one row of four. The narrow layouts
   keep their two columns. */
@media (min-width: 993px) {
  .perf__metrics--6 { grid-template-columns: repeat(3, 1fr); }
}

/* ---------- The trail's links (components/Breadcrumb.tsx) ----------
   Client review item 37: each step before the page is a link. It keeps the
   step's muted ink and the hero's type; the underline shows on hover. On
   the fund pages the trail sits above the italic meta line, a step apart. */
.crumbs { display: block; }
.crumbs__link { color: inherit; text-decoration: none; }
.crumbs__link:hover,
.crumbs__link:focus-visible { text-decoration: underline; text-underline-offset: 3px; }
.fund-hero__trail { margin-bottom: 8px; }

/* The timeline's entries carry a month (client review item 9): the month
   on its own small line over the year, so "September 2025" fits a column
   and the year keeps the design's size. */
.timeline-item__month {
  display: block;
  margin-bottom: 6px;
  font-family: var(--font-body);
  font-size: 13px;
  line-height: 18px;
  letter-spacing: 0.2px;
  color: rgba(23, 34, 58, 0.75);
}

/* ---- Review, 13 October 2026 ------------------------------------------- */

/* item 13: the partner logos at the footer legal text's grey — both are
   Forest, the text at 75% — instead of 40%, which read as disabled */
.partners__logo img { opacity: 0.75; }

/* item 25: Newsreader italic is for eyebrows only. Dates and meta lines
   are DM Sans, upright: the home news rows, the Insights news cards and
   release rows, the fund performance "Net of fees" line, and the
   performance block's simulated-months notes. */
.nm-row__date,
.news-item__tag,
.news__featured-card .tag,
.pr-row__date,
.perf__asof,
.perf__basis em,
.perf-table__key,
.perf-track__title span,
.perf-table td.is-sim { font-family: var(--font-body); font-style: normal; }
.nm-row__date, .news-item__tag, .news__featured-card .tag, .perf__asof { font-size: 14px; line-height: 20px; }

/* item 27: the consent wording — privacy, processing, professional
   investor — at 13px and muted, under the fields it qualifies. The
   newsletter's topic boxes are choices, not consents, and keep their size. */
.enquiry--v2 .enquiry-form .consent label,
.signup__consents .consent label { font-size: 13px; line-height: 18px; }
.signup--light .signup__consents .consent label { color: rgba(23, 58, 44, 0.75); }

/* item 40: the unsubscribe note spans the form, one line on desktop */
.signup__note { max-width: none; }

/* item 45: the newest release, in the feature card, leads: first in the
   row on desktop as it already was on a phone */
@media (min-width: 1025px) {
  .newsmedia__grid { grid-template-columns: 1fr 437px; }
  .newsmedia__feature { order: -1; }
}

/* item 18: press enquiries are not asked their investor type */
.enquiry-form:has(.fselect[data-name="topic"][data-value="Press & Media"]) .field--investor { display: none; }

/* item 28: the list filters open the contact form's list, not the
   browser's menu. The control keeps the design's underlined line; the
   wrapper (.fselect--filter) carries the list and takes the place in the
   filter row the control had. */
.fselect--filter { width: 203px; }
.fselect--filter .pr__filter { width: 100%; border: 0; border-bottom: 1px solid var(--color-blue-50); border-radius: 0; text-align: left; font: inherit; font-family: var(--font-body); font-size: 16px; line-height: 22px; }
.fselect--filter .pr__filter span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fselect--filter .pr__filter:focus-visible { outline: none; border-bottom-color: var(--color-night); color: var(--color-night); }
.fselect--filter[data-open] .pr__filter { border-bottom-color: var(--color-night); color: var(--color-night); }
.fselect--filter .fselect__list { min-width: 203px; }
.fselect--filter .fselect__list:focus { outline: none; }
.pr--green .fselect--filter .pr__filter { border-bottom-color: var(--color-green-50); }
.pr--green .fselect--filter[data-open] .pr__filter,
.pr--green .fselect--filter .pr__filter:focus-visible { color: var(--color-forest); border-bottom-color: var(--color-forest); }
@media (max-width: 768px) {
  .pr__filters .fselect--filter { flex: 1 1 0; width: auto; min-width: 0; }
  .pr__filters .fselect--filter .pr__filter { margin: 0; padding: 10px 16px 10px var(--bleed-x); }
  .pr__filters .fselect--filter + .fselect--filter .pr__filter { padding-left: 16px; padding-right: var(--bleed-x); }
}

/* P2: one style for a section's closing link — the full-width rule the
   others (View All, Explore Insights, All News & Media) already have; the
   research rail's "All Research" and its "View more" were the inline
   underlined outliers */
.media__more,
.media__reveal {
  align-self: stretch;
  display: block;
  width: -moz-available;
  width: -webkit-fill-available;
  width: stretch;
  margin-top: 40px;
  padding: 4px 0;
  border: 0;
  border-bottom: 1px solid currentColor;
  text-align: left;
  text-decoration: none;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 22px;
}
.media__reveal + .media__more { margin-top: 16px; }

/* Footer's bottom row (client review, October 2026): the legal items one
   small line, DM Sans 12px, run together with middle dots — "© 2026 Hilbert
   Group AB (publ) · Nasdaq First North … · Certified Adviser: …"; the
   policy links at the right in 13px. Below 900px the links come first and
   the legal line goes under them. */
.site-footer--v2 .site-footer__bottom--wide .footer-legal { gap: 2px 0; font-family: var(--font-body); font-size: 12px; line-height: 18px; }
.site-footer--v2 .footer-legal span + span::before { content: '·'; padding: 0 8px; }
.site-footer--v2 .site-footer__bottom--wide .footer-policies { font-family: var(--font-body); font-size: 13px; line-height: 18px; }
@media (max-width: 900px) {
  .site-footer--v2 .site-footer__bottom.site-footer__bottom--wide { flex-direction: column; align-items: flex-start; }
  .site-footer--v2 .site-footer__bottom--wide .footer-policies { order: -1; }
}
