/* Newsroom: dark editorial first screen, market pulse, colour-coded feed, key figures.
   Brand tokens only; matte surfaces; no gradients or blur. The only glow-free motion is the
   gold grid behind the first screen (js/effects/landing-grid.js), approved by the owner 2026-10-19.
   Topic colour is never the only signal: every dot or rule sits next to its text label. */
.nf { --nf-purple: #361163; --nf-gold: #C0A582; --nf-grey: #505050; --nf-pale: #ebebeb; --nf-white: #ffffff;
  --nf-ink: #130526; --nf-ink-2: #1c0938; --nf-line-dark: rgba(192,165,130,.28); --nf-muted-dark: rgba(255,255,255,.72);
  --nf-c-corridors: #C0A582; --nf-c-markets: #b7d432; --nf-c-infrastructure: #361163; --nf-c-regulation: #00a8e5;
  --nf-c-disruption: #b72049; --nf-c-workforce: #ffd204; --nf-c-none: #c9c9c9;
  font-family: 'Inter', Arial, sans-serif; color: var(--nf-grey); font-size: 15px; line-height: 1.5; text-align: left; }
.nf *, .nf *::before, .nf *::after { box-sizing: border-box; }
.nf-wrap { max-width: 1280px; margin: 0 auto; padding: 0 24px; }
:where(.nf) :is(h1, h2, h3) { color: var(--nf-purple); font-weight: 700; margin: 0; text-align: left; }
:where(.nf) p { margin: 0; }
:where(.nf) a { color: inherit; }
:where(.nf) ul { margin: 0; padding: 0; list-style: none; }
.nf :focus-visible { outline: 3px solid var(--nf-gold); outline-offset: 2px; }
.nf-visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.nf-icon { width: 16px; height: 16px; flex: none; fill: none; stroke: currentColor; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }

/* topic families: one token per family, used by dots, rules and sparklines */
.nf [data-family="corridors"] { --fam: var(--nf-c-corridors); }
.nf [data-family="markets"] { --fam: var(--nf-c-markets); }
.nf [data-family="infrastructure"] { --fam: var(--nf-c-infrastructure); }
.nf [data-family="regulation"] { --fam: var(--nf-c-regulation); }
.nf [data-family="disruption"] { --fam: var(--nf-c-disruption); }
.nf [data-family="workforce"] { --fam: var(--nf-c-workforce); }
.nf [data-family="none"] { --fam: var(--nf-c-none); }
.nf-dot { display: inline-block; flex: none; width: 10px; height: 10px; border-radius: 50%; background: var(--fam, var(--nf-gold)); }

/* buttons */
.nf-btn { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 22px; border: 0; border-radius: 6px;
  font: 700 15px/1.1 'Inter', Arial, sans-serif; text-transform: uppercase; text-decoration: none; cursor: pointer; transition: background-color .2s, color .2s; }
.nf-btn-primary { background: var(--nf-purple); color: var(--nf-white); }
.nf-btn-primary:hover { background: #2a0d4e; }
.nf-btn-link { background: transparent; color: var(--nf-purple); padding: 0 6px; text-decoration: underline; text-underline-offset: 4px; }
.nf-btn-link:hover { color: #2a0d4e; }
.nf-btn:disabled { opacity: .5; cursor: default; }

/* ── first screen (dark, over the gold grid) ── */
.nf-hero { position: relative; overflow: hidden; background: var(--nf-ink); color: var(--nf-white); padding: 168px 0 88px; }
.nf-hero .ep-grid-canvas { position: absolute; inset: 0; z-index: 0; display: block; width: 100%; height: 100%; pointer-events: none; }
.nf-hero > .nf-wrap { position: relative; z-index: 1; }
.nf-hero-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 460px); gap: 64px; align-items: center; }
.nf .nf-hero h1 { color: var(--nf-white); font-size: 56px; line-height: 1.1; letter-spacing: -.02em; max-width: 720px; text-wrap: balance; }
.nf-h1-key { display: block; margin-bottom: 16px; font-size: 15px; line-height: 1.4; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--nf-gold); }
.nf-lede { font-size: 18px; line-height: 1.5; color: var(--nf-muted-dark); margin-top: 24px; max-width: 600px; }
.nf-legend { display: flex; flex-wrap: wrap; gap: 10px 22px; margin-top: 36px; max-width: 640px; }
.nf-legend li { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 600; color: var(--nf-white); }
.nf-hero [data-family="infrastructure"] .nf-dot, .nf-pulse [data-family="infrastructure"] .nf-dot { box-shadow: 0 0 0 1.5px rgba(255,255,255,.75); }

/* issue card: light by default (homepage), matte dark inside the first screen */
.nf-issue { background: var(--nf-white); color: var(--nf-grey); border-top: 3px solid var(--nf-gold); border-radius: 6px; padding: 28px 28px 26px; }
.nf-issue h2 { font-size: 24px; line-height: 1.3; }
.nf-issue-period { font-size: 13px; margin-top: 4px; }
.nf-issue-headline { font-size: 18px; line-height: 1.4; font-weight: 600; color: var(--nf-purple); margin-top: 14px; }
.nf-issue-summary { margin-top: 10px; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.nf-issue-empty { margin-top: 12px; }
.nf-issue-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 18px; margin-top: 22px; }
.nf-issue-hint { font-size: 13px; margin-top: 10px; }
.nf-hero .nf-issue { background: var(--nf-ink-2); color: var(--nf-muted-dark); border: 1px solid var(--nf-line-dark); border-top: 3px solid var(--nf-gold); padding: 32px; }
.nf-hero .nf-issue h2 { color: var(--nf-white); }
.nf-hero .nf-issue-period { color: var(--nf-gold); font-weight: 600; letter-spacing: .02em; }
.nf-hero .nf-issue-headline { color: var(--nf-white); font-size: 20px; }
.nf-hero .nf-btn-primary { background: var(--nf-white); color: var(--nf-purple); }
.nf-hero .nf-btn-primary:hover { background: var(--nf-pale); }
.nf-hero .nf-btn-link { color: var(--nf-white); }
.nf-hero .nf-btn-link:hover { color: var(--nf-gold); }
.nf-hero :focus-visible, .nf-pulse :focus-visible { outline-color: var(--nf-white); }

/* ── market pulse (continues the dark zone) ── */
.nf-pulse { background: var(--nf-ink); color: var(--nf-muted-dark); padding: 0 0 72px; }
.nf-pulse > .nf-wrap { border-top: 1px solid var(--nf-line-dark); padding-top: 48px; }
.nf-pulse-head { display: flex; flex-direction: column; gap: 8px; margin-bottom: 28px; }
.nf .nf-pulse h2 { color: var(--nf-white); font-size: 32px; line-height: 1.25; }
.nf-pulse .nf-section-lead { margin: 0; font-size: 15px; color: var(--nf-muted-dark); max-width: 560px; }
.nf-sample { flex-basis: 100%; font-size: 13px; font-weight: 600; color: var(--nf-gold); }
.nf-pulse-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
.nf-pulse-tile { display: grid; grid-template-rows: subgrid; grid-row: span 5; row-gap: 0; background: var(--nf-ink-2); border: 1px solid var(--nf-line-dark); border-top: 3px solid var(--nf-gold); border-radius: 6px; padding: 22px 24px; }
.nf .nf-pulse-tile h3 { color: var(--nf-white); font-size: 17px; line-height: 1.3; }
.nf-pulse-what { font-size: 13px; line-height: 1.4; margin-top: 4px; }
.nf-pulse-row { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 10px 16px; margin-top: 18px; min-width: 0; }
.nf-pulse-tile { min-width: 0; }
.nf-pulse-value { font-size: 32px; line-height: 1; font-weight: 700; color: var(--nf-white); font-variant-numeric: tabular-nums; white-space: nowrap; }
.nf-spark { width: 120px; height: 36px; flex: none; overflow: visible; }
.nf-spark polyline { fill: none; stroke: var(--nf-gold); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.nf-spark circle { fill: var(--nf-white); stroke: var(--nf-gold); stroke-width: 2; }
.nf-pulse-change { display: flex; align-items: center; gap: 6px; margin-top: 12px; font-size: 13px; font-weight: 600; color: var(--nf-white); }
.nf-pulse-change .nf-icon { width: 15px; height: 15px; color: var(--nf-gold); }
.nf-pulse-src { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--nf-line-dark); font-size: 13px; }
.nf-pulse-src a { color: var(--nf-gold); text-underline-offset: 3px; }
.nf-details-dark { border-top-color: var(--nf-line-dark); }
.nf .nf-details-dark summary { color: var(--nf-white); }
.nf-details-dark .nf-table th { color: var(--nf-white); }
.nf-details-dark .nf-table td { border-bottom-color: var(--nf-line-dark); }
.nf-details-dark .nf-nowrap { color: var(--nf-white); }
.nf-details-dark a { color: var(--nf-gold); }

/* sections */
.nf-section { padding: 72px 0; }
.nf-section-head { margin-bottom: 28px; max-width: 44em; }
.nf-section h2 { font-size: 32px; line-height: 1.25; }
.nf-section-lead { margin-top: 8px; font-size: 18px; line-height: 1.4; }
.nf-figures { background: var(--nf-white); }
.nf-feed { background: var(--nf-pale); }

/* figures */
.nf-figure-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 20px; }
.nf-figure { background: var(--nf-white); border: 1px solid var(--nf-pale); border-top: 3px solid var(--nf-gold); border-radius: 6px; padding: 24px; display: flex; flex-direction: column; }
.nf-figure-kind { display: inline-flex; align-items: center; gap: 8px; margin-bottom: 12px; font-size: 13px; font-weight: 600; color: var(--nf-purple); }
.nf-figure-kind .nf-icon { width: 18px; height: 18px; color: var(--nf-gold); }
.nf-figure h3 { font-size: 20px; line-height: 1.3; }
.nf-figure-indicator { font-size: 13px; margin-top: 2px; }
.nf-figure-delta { margin: 18px 0 16px; display: flex; flex-direction: column; gap: 6px; }
.nf-figure-delta strong { font-size: 40px; line-height: 1; color: var(--nf-purple); font-weight: 700; font-variant-numeric: tabular-nums; }
.nf-figure-delta span { font-size: 13px; }
.nf-bars { margin-top: auto; }
.nf-bar-row { display: grid; grid-template-columns: 78px 1fr auto; gap: 10px; align-items: center; margin-top: 8px; }
.nf-bar-label { font-size: 13px; line-height: 1.25; }
.nf-bar-label span { display: block; }
.nf-bar-track { height: 14px; background: var(--nf-pale); }
.nf-bar { height: 100%; }
.nf-bar-before { background: var(--nf-gold); }
.nf-bar-after { background: var(--nf-purple); }
.nf-bar-value { font-weight: 700; color: var(--nf-purple); font-size: 15px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.nf-details { margin-top: 24px; border-top: 1px solid var(--nf-pale); }
.nf-details summary { cursor: pointer; padding: 16px 0; font-weight: 700; color: var(--nf-purple); }
.nf-table-wrap { overflow-x: auto; }
.nf-table { width: 100%; border-collapse: collapse; font-size: 15px; }
.nf-table th { text-align: left; font-weight: 600; color: var(--nf-purple); padding: 0 16px 10px 0; border-bottom: 2px solid var(--nf-gold); white-space: nowrap; }
.nf-table td { padding: 12px 16px 12px 0; border-bottom: 1px solid var(--nf-pale); vertical-align: top; }
.nf-nowrap { white-space: nowrap; font-weight: 600; color: var(--nf-purple); font-variant-numeric: tabular-nums; }

/* feed controls */
.nf-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 20px; margin-bottom: 16px; }
.nf-tabs { display: inline-flex; border: 1px solid var(--nf-purple); border-radius: 6px; overflow: hidden; background: var(--nf-white); }
.nf-tab { min-height: 44px; padding: 0 20px; border: 0; background: transparent; color: var(--nf-purple); font: 700 15px/1 'Inter', Arial, sans-serif; cursor: pointer; }
.nf-tab.is-active { background: var(--nf-purple); color: var(--nf-white); }
.nf-search { flex: 1 1 240px; max-width: 360px; min-height: 44px; border: 1px solid #c9c9c9; border-radius: 6px; padding: 0 14px; font: 400 15px 'Inter', Arial, sans-serif; color: var(--nf-grey); background: var(--nf-white); }
.nf-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }
.nf-chip { display: inline-flex; align-items: center; gap: 8px; min-height: 40px; padding: 0 16px; border: 1px solid #c9c9c9; border-radius: 20px; background: var(--nf-white); color: var(--nf-purple); font: 600 14px/1 'Inter', Arial, sans-serif; cursor: pointer; transition: border-color .2s, background-color .2s, color .2s; }
.nf-chip:hover { border-color: var(--nf-purple); }
.nf-chip.is-active { background: var(--nf-purple); border-color: var(--nf-purple); color: var(--nf-white); }
.nf-chip.is-active[data-family="infrastructure"] .nf-dot { box-shadow: 0 0 0 1.5px var(--nf-white); }
.nf-updated { font-size: 13px; margin-bottom: 20px; }

/* cards: the topic colour is the top rule; the label names it */
.nf-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
.nf-card { position: relative; background: var(--nf-white); border: 1px solid #dcdcdc; border-top: 4px solid var(--fam, var(--nf-gold)); border-radius: 6px; padding: 22px 24px; display: flex; flex-direction: column; transition: border-color .2s, transform .2s, box-shadow .2s; }
.nf-card:hover { transform: translateY(-4px); border-color: #c9c9c9; border-top-color: var(--fam, var(--nf-gold)); box-shadow: 0 10px 28px rgba(54,17,99,.1); }
.nf-card-meta { display: flex; justify-content: space-between; align-items: center; gap: 12px; font-size: 13px; }
.nf-family { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; color: var(--nf-purple); min-width: 0; }
.nf-card-meta time { flex: none; color: var(--nf-grey); }
.nf .nf-card-title { font-size: 20px; line-height: 1.3; margin-top: 14px; }
.nf-card-title a { text-decoration: none; color: var(--nf-purple); }
.nf-card-title a::after { content: ""; position: absolute; inset: 0; }
.nf-card-title a:hover { text-decoration: underline; text-underline-offset: 3px; }
.nf-card-summary { margin-top: 10px; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.nf-card-foot { margin-top: auto; padding-top: 18px; display: flex; justify-content: space-between; gap: 8px 12px; align-items: center; font-size: 13px; }
.nf-source { display: inline-flex; align-items: center; gap: 8px; min-width: 0; font-weight: 600; color: var(--nf-grey); }
.nf-source .nf-icon { width: 15px; height: 15px; color: var(--nf-purple); }
.nf-countries { flex: none; font-size: 12px; font-weight: 600; letter-spacing: .06em; color: var(--nf-purple); }
.nf-status { margin: 8px 0 20px; padding: 24px; background: var(--nf-white); border-radius: 6px; }
.nf-more { margin-top: 28px; }

/* editorial front: the freshest top story leads (2 columns, 2 rows) */
/* Matte purple "cover": the text sits at the foot, so a short lead still fills the tile on purpose. */
.nf-grid.has-lead .nf-card-lead { grid-column: span 2; grid-row: span 2; padding: 36px 40px; min-height: 420px; background: var(--nf-purple); border-color: var(--nf-purple); border-top: 6px solid var(--fam, var(--nf-gold)); color: rgba(255,255,255,.82); }
.nf-grid.has-lead .nf-card-lead:hover { border-color: var(--nf-purple); border-top-color: var(--fam, var(--nf-gold)); box-shadow: 0 10px 28px rgba(54,17,99,.18); }
.nf-card-lead .nf-family, .nf-card-lead .nf-card-meta time, .nf-card-lead .nf-source, .nf-card-lead .nf-countries { color: var(--nf-white); }
.nf-card-lead .nf-source .nf-icon { color: var(--nf-gold); }
.nf-card-lead[data-family="infrastructure"] .nf-dot { box-shadow: 0 0 0 1.5px var(--nf-white); }
.nf .nf-card-lead .nf-card-title { margin-top: auto; padding-top: 48px; font-size: 36px; line-height: 1.18; letter-spacing: -.01em; max-width: 20em; }
.nf-card-lead .nf-card-title a { color: var(--nf-white); }
.nf-card-lead .nf-card-summary { font-size: 18px; line-height: 1.5; margin-top: 16px; -webkit-line-clamp: 5; max-width: 40em; }
.nf-card-lead .nf-card-foot { margin-top: 28px; padding-top: 20px; border-top: 1px solid rgba(255,255,255,.18); }
.nf-card-lead :focus-visible { outline-color: var(--nf-white); }
/* isolate: the mark (z-index -1) sits above the card fill but under the text and the stretched link */
.nf-card-lead { isolation: isolate; }
.nf-card-mark { position: absolute; z-index: -1; top: 72px; right: 40px; width: 148px; height: 148px; color: var(--nf-gold); opacity: .2; stroke-width: 1.2; pointer-events: none; }
@media (max-width: 767px) { .nf-card-mark { display: none; } }

/* closing call to action */
.nf-cta { background: var(--nf-white); border-top: 3px solid var(--nf-gold); border-radius: 6px; padding: 32px; margin-top: 48px; display: grid; grid-template-columns: 1fr auto; gap: 24px; align-items: center; }
.nf-cta h2 { font-size: 24px; line-height: 1.3; }
.nf-cta p { margin-top: 8px; max-width: 46em; }

/* homepage block */
.nf-home-grid { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 24px; align-items: start; }
.nf-home-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; }
.nf-issue-compact { height: 100%; }
.nf-issue-compact .nf-issue-headline { margin-top: 10px; }
.nf-home-head { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; margin-bottom: 24px; }
.nf-home-head h2 { font-size: 32px; line-height: 1.25; }

@media (max-width: 1359px) {
  .nf .nf-hero h1 { font-size: 46px; }
  .nf-hero-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 420px); gap: 48px; }
}
@media (max-width: 1099px) {
  .nf-grid, .nf-pulse-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .nf-grid.has-lead .nf-card-lead { grid-row: auto; min-height: 360px; }
  .nf-hero-grid, .nf-home-grid { grid-template-columns: 1fr; gap: 40px; }
}
@media (max-width: 767px) {
  .nf-hero { padding: 120px 0 56px; }
  .nf .nf-hero h1 { font-size: 34px; }
  .nf-h1-key { font-size: 13px; margin-bottom: 12px; }
  .nf-lede, .nf-section-lead { font-size: 16px; }
  .nf-legend { margin-top: 28px; gap: 8px 16px; }
  .nf-pulse { padding-bottom: 48px; }
  .nf-pulse-value { font-size: 28px; }
  .nf-pulse-tile { padding: 20px; }
  .nf-pulse > .nf-wrap { padding-top: 36px; }
  .nf-section { padding: 48px 0; }
  .nf-section h2, .nf .nf-pulse h2 { font-size: 28px; }
  .nf-figure-grid, .nf-grid, .nf-home-cards, .nf-pulse-grid { grid-template-columns: 1fr; }
  .nf-grid.has-lead .nf-card-lead { grid-column: auto; padding: 24px; min-height: 0; }
  .nf .nf-card-lead .nf-card-title { font-size: 24px; padding-top: 28px; }
  .nf-card-lead .nf-card-summary { font-size: 16px; }
  .nf-cta { grid-template-columns: 1fr; padding: 24px; }
  .nf-issue, .nf-hero .nf-issue { padding: 22px; }
  .nf-search { max-width: none; }
  .nf-tabs { width: 100%; } .nf-tab { flex: 1; padding: 0 8px; }
  .nf-home-head h2 { font-size: 28px; }
}
@media (prefers-reduced-motion: reduce) { .nf-card, .nf-btn, .nf-chip { transition: none; } .nf-card:hover { transform: none; } }
@media print { .nf-hero, .nf-pulse { background: #fff; color: #000; padding-top: 0; } .nf-hero .ep-grid-canvas { display: none; } }
