/* Longhand V2: editorial foundations. Public pages opt in; author tools keep their contract. */
html:has(body.v2-page) { --masthead-h: 80px; }
:root { --v2-space: 8px; --v2-reading: 68ch; --v2-ink: #08171d; --v2-paper: #f3f0e8; }
.v2-page { --maxw: 1280px; --bg: var(--v2-paper); --ink: #16252b; --ink-2: #48595e; --ink-3: #607077; --rule: #16252b24; --rule-2: #16252b44; --gold: #9b753c; --gold-ink: #775222; --bg-sunk: #e4e1d8; --tint: #9b753c0d; --tint-2: #9b753c20; }
html[data-theme="dark"] .v2-page { --bg: #102027; --ink: #f0eee6; --ink-2: #b9c3c4; --ink-3: #a0afb1; --rule: #dce6e526; --rule-2: #dce6e544; --gold: #c5a36b; --gold-ink: #d5b581; --bg-sunk: #07151b; --tint: #c5a36b0c; --tint-2: #c5a36b20; }
.v2-page.v2-dark { --bg: #07171d; --ink: #f0eee6; --ink-2: #b9c3c4; --ink-3: #a0afb1; --rule: #dce6e526; --rule-2: #dce6e544; --gold: #c5a36b; --gold-ink: #d5b581; --bg-sunk: #031015; --tint: #c5a36b0c; --tint-2: #c5a36b20; background: var(--bg); color-scheme: dark; }
.v2-page .masthead { background: var(--bg); border-bottom: 1px solid var(--rule); backdrop-filter: none; }
.v2-page .masthead-inner { height: 80px; }
.v2-page .brand-name { text-transform: uppercase; font-size: 29px; font-weight: 400; letter-spacing: -.035em; }
.v2-page .brand-sub { letter-spacing: .25em; font-size: 9px; }
.v2-page .site-nav { gap: 24px; }
.v2-page .site-nav a { font-size: 12px; font-weight: 400; min-height: 44px; display: inline-flex; align-items: center; }
.v2-page .site-nav a[aria-current="page"] { text-decoration: underline; text-decoration-color: var(--gold); text-underline-offset: 9px; }
.v2-page .eyebrow { font-size: 10px; font-weight: 500; letter-spacing: .18em; }
.v2-page .page-title { font-size: clamp(42px, 5.3vw, 76px); letter-spacing: -.04em; line-height: 1.02; font-weight: 400; }
.v2-page :is(h1, h2, h3, h4) em, .v2-page :is(.cover-latest a, .reader-company, .ledger-sector, .empty-title, .viewer-error .state-title) { font-style: normal; }
.v2-page .page-lede { max-width: 56ch; font-size: 18px; line-height: 1.6; }
.v2-page .page-head { padding-block: 56px 44px; border-top: 0; }
.v2-page .btn { border-radius: 1px; font-size: 12px; letter-spacing: .015em; min-height: 44px; }
.v2-page .btn-sm { min-height: 44px; }
.v2-page .section-head { border-top: 1px solid var(--rule-2); padding-top: 18px; margin-bottom: 24px; }
.v2-page .section-label { font-size: 11px; letter-spacing: .12em; }
.v2-page .section-head::before { display: none; }
.v2-page .text-link { font-size: 12px; }
.v2-page .index-note { line-height: 1.7; }
.v2-page .site-footer { background: var(--bg); margin-top: 56px; border-top: 1px solid var(--rule); }
.v2-page .footer-inner { padding-block: 28px; border-top: 0; }
.v2-page .footer-signature { display: flex; align-items: end; justify-content: space-between; gap: 28px; padding-block: 42px 24px; }
.v2-page .footer-statement { font: 400 clamp(26px, 3vw, 40px)/1.12 var(--font-serif); max-width: 23ch; letter-spacing: -.025em; }
.v2-page .footer-links { display: flex; flex-wrap: wrap; gap: 6px 24px; font: 400 12px/1.5 var(--font-sans); }
.v2-page .footer-links a { min-height: 44px; display: inline-flex; align-items: center; text-decoration: none; }
.v2-page .disclaimer { max-width: 78ch; font-size: 12px; }
.v2-page .colophon { font-size: 11px; }
.v2-page .v2-menu-button { display: none; }
.v2-breadcrumb { display: flex; flex-wrap: wrap; gap: 6px 10px; font: 400 11px/1.7 var(--font-sans); color: var(--ink-3); }
.v2-breadcrumb a { min-height: 32px; display: inline-flex; align-items: center; }
.v2-page :is(input, select) { border-radius: 1px; }
.v2-page :is(table, time, .catalogue-no) { font-variant-numeric: tabular-nums; }
.v2-page .page-emblem { view-transition-name: none; }
/* The live canvas stays in its document. A ready square frame carries the
   Earth between pages while the incoming WebGL scene initializes. */
.v2-page .plate-stage { view-transition-name: none; }
.globe-continuity { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); pointer-events: none; z-index: 2; view-transition-name: globe; transition: opacity 200ms ease; mask-image: radial-gradient(circle closest-side, #000 90%, transparent 100%); }
.globe-continuity > :is(img, canvas) { display: block; position: static; width: 100% !important; height: 100% !important; opacity: 1 !important; }
.v2-page .has-globe-continuity > canvas,
.v2-page .has-globe-continuity + .globe-markers { opacity: 0 !important; }
.v2-page .plate-stage:has(.globe-continuity) > canvas { transition-duration: 200ms; }
.globe-continuity.is-released { opacity: 0; }
html:has(.v2-page):not(.theme-vt)::view-transition-old(globe) { animation: none; mix-blend-mode: normal; }
html:has(.v2-page):not(.theme-vt)::view-transition-old(globe):only-child { display: block; animation: v2-leave 280ms ease both; }
html:has(.v2-page):not(.theme-vt)::view-transition-new(globe) { display: none; animation: none; }
html:has(.v2-page):not(.theme-vt)::view-transition-new(globe):only-child { display: block; }
.v2-page :is(h1, h2, h3, p, a) { overflow-wrap: break-word; }
.v2-page .about { gap: 8vw; }
.v2-page .about-text { max-width: var(--v2-reading); }
.v2-page .about-lede { font-size: 29px; line-height: 1.35; }
.v2-page .about-text > p:not(.about-lede) {
  text-align: justify;
  text-align-last: start;
  -webkit-hyphens: auto;
  hyphens: auto;
  hyphenate-limit-chars: 7 3 3;
}
@media (max-width: 420px) {
  .v2-page .about-text > p:not(.about-lede) {
    font-size: clamp(16px, 4.6vw, 18px);
    line-height: 1.75;
  }
  .v2-page .about-lede { font-size: clamp(23px, 6vw, 29px); }
}

/* Navigation remains ordinary links; the menu is only a small-screen disclosure. */
@media (max-width: 900px) {
  html:has(body.v2-page) { --masthead-h: 68px; }
  .v2-page .masthead-inner { display: flex; height: 68px; flex-wrap: nowrap; gap: 0; }
  .v2-page .brand-name { font-size: 25px; }
  .v2-page .brand-sub { font-size: 8px; }
  .v2-page .site-nav { gap: 12px; width: 100%; flex-wrap: wrap; padding: 8px 0 14px; }
  .v2-page .site-nav a { display: inline-flex !important; }
  html:not(.js) .v2-page .masthead:has(.site-nav):not(.has-v2-menu) .masthead-inner { height: auto; min-height: 68px; padding-block: 12px; }
  .js .v2-page .masthead:not(.has-v2-menu) .site-nav { display: none; }
  .v2-page .has-v2-menu .v2-menu-button { display: inline-flex; align-items: center; gap: 10px; padding: 0 10px; border: 0; background: transparent; font: 400 11px var(--font-sans); min-height: 44px; }
  .v2-page .has-v2-menu .site-nav { display: none; }
  .v2-page .has-v2-menu.menu-open .site-nav { display: flex; position: absolute; top: 68px; left: 0; right: 0; background: var(--bg); padding: 12px var(--gutter) 20px; border-bottom: 1px solid var(--rule-2); gap: 8px 24px; }
  .v2-page .has-v2-menu.menu-open .site-nav > a { flex: 0 0 calc(50% - 24px); font-size: 16px; }
  .v2-page .page-head { padding-block: 36px 28px; gap: 20px; }
  .v2-page .page-head .page-emblem { width: 40px; }
  .v2-page .page-lede { font-size: 17px; }
  .v2-page .footer-signature { align-items: start; flex-direction: column; gap: 18px; }
}
@media (max-width: 360px) { .v2-page .brand { gap: 8px; } .v2-page .brand-name { font-size: 23px; } .v2-page .brand-sub { font-size: 7px; } }

/* Spatial continuity: shared identity plus a small directional shift in the paper. */
/* V2 owns entrances. Legacy page/list fades otherwise move the same content
   a second time beneath a frozen navigation snapshot. */
.js .v2-page .page-head > *,
.v2-page .report-list.is-arriving .report,
.v2-page .wire.is-arriving .wire-day:first-child .wire-item:nth-child(-n + 12) { animation: none; }
.v2-page .plate-stage canvas { transition: opacity 450ms ease; }
.v2-page .globe-markers { opacity: 0; transition: opacity 450ms ease; }
.v2-page .plate.is-ready .globe-markers { opacity: 1; }
.v2-page .plate:not(.is-ready) .globe-marker { visibility: hidden; }
html:has(.v2-page):not(.theme-vt)::view-transition-old(root) { animation: v2-leave 280ms ease both; }
html:has(.v2-page):not(.theme-vt)::view-transition-new(root) { animation: v2-enter 520ms cubic-bezier(.2,.7,.2,1) both; }
html[data-nav="back"]:has(.v2-page)::view-transition-new(root) { animation-name: v2-return; }
html:has(.v2-page)::view-transition-group(research-identity), html:has(.v2-page)::view-transition-group(report-title) { animation-duration: 650ms; animation-timing-function: cubic-bezier(.2,.7,.2,1); }
html:has(.v2-page)::view-transition-old(research-identity) { animation: none; opacity: 0; }
html:has(.v2-page)::view-transition-new(research-identity) { animation: none; }
html:has(.v2-page)::view-transition-group(globe) { animation-duration: 850ms; }
html:has(.v2-page):not(.theme-vt)::view-transition-group(masthead),
html:has(.v2-page):not(.theme-vt)::view-transition-new(masthead) { animation: none; }
html:has(.v2-page):not(.theme-vt)::view-transition-old(masthead) { display: none; animation: none; }
@keyframes v2-leave { to { opacity: 0; transform: translateY(-12px) scale(.992); } }
@keyframes v2-enter { from { opacity: .3; transform: translateY(24px); clip-path: inset(0 0 6% 0); } to { opacity: 1; transform: none; clip-path: inset(0); } }
@keyframes v2-return { from { opacity: .3; transform: translateY(-18px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  html:has(.v2-page) { scroll-behavior: auto; }
  .v2-page *, .v2-page *::before, .v2-page *::after { animation-duration: 0s !important; transition-duration: 0s !important; }
  html:has(.v2-page)::view-transition-group(*), html:has(.v2-page)::view-transition-old(*), html:has(.v2-page)::view-transition-new(*) { animation: none !important; }
}

/* A publication colophon, continuous with the dark research atlas. */
.v2-page .site-footer { --ink: #eeeee4; --ink-2: #b9c6c5; --ink-3: #9eafb0; --rule: #dce6e526; color: var(--ink); background: linear-gradient(90deg, #07171df5 12%, #07171d88 70%, #07171dbb), url('../img/earth/earth-night-2048.jpg') center 45% / cover; }
.v2-page .footer-signature { min-height: 240px; padding-block: 50px 35px; }
.v2-page .footer-statement::before { content: 'LONGHAND  /  RESEARCH'; display: block; margin-bottom: 26px; color: #d5b581; font: 400 10px var(--font-sans); letter-spacing: .22em; }
.v2-page .footer-statement { max-width: 26ch; font-size: clamp(30px, 3.1vw, 43px); font-weight: 300; }
.v2-page .footer-links { color: var(--ink); }
.v2-page .footer-inner { border-top: 0; }
.v2-page .footer-links a:hover { color: #d5b581; }

/* Two publication themes. Warm paper carries a quiet green ink accent. */
.v2-page :is(.btn, .theme-toggle, .filter, .coverage-country-list button, .coverage-sectors a) { transition: color 180ms ease, background-color 180ms ease, border-color 180ms ease; }
.v2-page :is(.publication-art, .report-thumbnail) { overflow: hidden; }
.v2-page :is(.publication-art, .report-thumbnail) img { transition: transform 700ms cubic-bezier(.2,.7,.2,1); }
.v2-page :is(.publication-tile, .report-list > .report, .entity-report, .entity-index > a, .coverage-report) { transition: border-color 220ms ease, background-color 220ms ease; }
.v2-page .reading-progress { position: absolute; bottom: -1px; left: 0; right: 0; height: 2px; background: var(--gold-ink); transform: scaleX(0); transform-origin: left; pointer-events: none; }
.v2-page .has-v2-menu.menu-open .site-nav { animation: publication-menu 180ms ease both; }
@keyframes publication-menu { from { opacity: .6; transform: translateY(-8px); } to { opacity: 1; transform: none; } }
@media (hover: hover) and (pointer: fine) {
  .v2-page :is(.publication-tile, .report-list > .report, .entity-report, .entity-index > a, .coverage-report):hover { border-color: var(--gold-ink); background: var(--tint); }
  .v2-page :is(.publication-tile, .report-list > .report):hover img { transform: scale(1.025); }
  .v2-page :is(.home-coverage-links > a, .coverage-sectors a, .report-related-list > a):hover { color: var(--gold-ink); background: var(--tint); }
  .v2-page .btn:hover { background: transparent; color: var(--gold-ink); border-color: var(--gold-ink); }
  .v2-page .btn:hover .icon-arrow { transform: translateX(4px); }
  .v2-page .site-nav a:hover { text-decoration-color: var(--gold-ink); }
}
@media (prefers-reduced-motion: reduce) {
  .v2-page :is(.publication-art, .report-thumbnail) img { transform: none !important; }
}
html[data-theme="light"] .v2-page { --v2-paper: #e8e3d7; --bg: #e8e3d7; --bg-sunk: #dcd6c9; --ink: #23332d; --ink-2: #4f6057; --ink-3: #505d53; --rule: #23332d2b; --rule-2: #23332d4a; --gold: #718064; --gold-ink: #3d5b49; --tint: #3d5b490a; --tint-2: #3d5b491b; color-scheme: light; }
html[data-theme="dark"] .v2-page { --bg: #05090b; --bg-sunk: #080f12; --ink: #ece9df; --ink-2: #bbc3c0; --ink-3: #9faeaa; --rule: #dce6e522; --rule-2: #dce6e53b; --gold: #b49c70; --gold-ink: #ccb78f; color-scheme: dark; }
.v2-page .site-nav { margin-left: auto; }
.v2-page .masthead.is-over-night { --bg: inherit; --ink: inherit; --ink-2: inherit; --rule: inherit; --gold: inherit; background: var(--bg); }
.v2-page .masthead .theme-toggle { display: inline-flex; align-items: center; justify-content: center; width: auto; min-width: 44px; min-height: 44px; height: 44px; gap: 9px; border: 0; background: transparent; padding: 0 6px; font: 400 10px var(--font-sans); margin-left: 20px; }
.v2-page .masthead .theme-label { white-space: nowrap; }
html[data-theme="light"] .v2-page .site-footer { --ink: #23332d; --ink-2: #4f6057; --ink-3: #59665c; --rule: #23332d2b; color: var(--ink); background: linear-gradient(90deg, #ded8cbf7, #e8e3d7ed), url('../img/earth/earth-night-2048.jpg') center / cover; }
html[data-theme="light"] .v2-page .footer-statement::before { color: #3d5b49; }
html[data-theme="light"] .v2-page .footer-links a:hover { color: #3d5b49; }
@media (max-width: 900px) {
  .v2-page .brand { margin-right: auto; }
  .v2-page .masthead .theme-toggle { margin: 0 8px 0 0; padding: 0; width: 44px; order: 2; }
  .v2-page .masthead .theme-label { display: none; }
  .v2-page .v2-menu-button { order: 3; }
  .v2-page .site-nav { order: 4; margin: 0; }
}

/* Readable publication furniture, with the serif reserved for the story. */
.v2-page :is(.eyebrow, .kicker, .page-folio, .section-meta, .brand-sub) { font-size: 11px; }
.v2-page .masthead .theme-toggle { font-size: 12px; }
.v2-page .v2-menu-button { font-size: 12px; }
.v2-page .filter-n { font-size: 10px; }
.v2-page .search input { font-size: 14px; }
.v2-page .tool { min-height: 44px; }
.v2-page .v2-breadcrumb { font-size: 12px; }
.v2-page .v2-breadcrumb a { min-height: 44px; }
.wire-pagination { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding-block: 28px; }
.wire-pagination p { font: 400 12px/1.6 var(--font-sans); color: var(--ink-2); }
/* Reserve the wire's controls and reading area while its hourly data loads. */
.page-wire .page-folio { min-height: 1.8em; }
.page-wire .filter-n { min-width: 3ch; }
.page-wire :is(.wire, .empty) { min-height: 55svh; }
.wire-loading { padding-block: 28px; color: var(--ink-3); font: 400 13px/1.7 var(--font-sans); }
html:not(.js) .page-wire :is([data-folio], .index-tools, [data-wire]) { display: none; }
@media (max-width: 760px) { .page-wire .page-folio { min-height: 3.6em; } }

/* Lines mark structural boundaries and active choices, rather than every action. */
.v2-page :is(.reader-actions, .coverage-panel, .wire-pagination, .viewer-reading-help) .btn { background: transparent; border: 0; border-bottom: 1px solid transparent; border-radius: 0; padding-inline: 0; font-weight: 400; }
.v2-page .masthead [data-add-report] { background: transparent; border: 0; border-bottom: 1px solid transparent; padding-inline: 0; font-weight: 400; }
.v2-page .masthead :is(.theme-toggle, .v2-menu-button):hover { background: transparent; color: var(--gold-ink); }
.v2-page :is(.coverage-path a, .coverage-country-list button, .globe-marker, .globe-controls button, .library-view button):focus-visible { outline: 1px solid var(--gold-ink); outline-offset: 4px; }

/* The colophon: a clear identity, two navigation columns and quiet geography. */
.v2-page .site-footer { position: relative; isolation: isolate; overflow: hidden; background: var(--bg); }
.v2-page .site-footer::before {
  content: ''; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: url('../img/earth/footer-atlas.svg') right center / auto 108% no-repeat;
  opacity: .65;
  mask-image: linear-gradient(90deg, transparent, #000 44%, #000);
}
.v2-page .coverage-connections button small { color: var(--ink-3); font-size: 10px; }
.v2-page .footer-signature { display: grid; grid-template-columns: minmax(0, 1fr) minmax(320px, .65fr); align-items: start; gap: 64px; min-height: 280px; padding-block: 52px 42px; }
.v2-page .footer-brand { display: flex; align-items: baseline; gap: 14px; font: 400 35px/1 var(--font-serif); text-transform: uppercase; letter-spacing: -.035em; text-decoration: none; width: fit-content; }
.v2-page .footer-brand span { font: 500 11px/1.5 var(--font-sans); letter-spacing: .22em; }
.v2-page .footer-statement { font-size: clamp(26px, 2.3vw, 33px); max-width: 24ch; margin-top: 25px; line-height: 1.2; }
.v2-page .footer-statement::before { display: none; }
.v2-page .footer-links { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; font-size: 13px; }
.footer-link-group { display: flex; flex-direction: column; align-items: start; }
.footer-link-group > p { font: 500 11px/1.5 var(--font-sans); color: var(--ink-3); text-transform: uppercase; letter-spacing: .14em; margin-bottom: 12px; }
.v2-page .footer-links a { gap: 8px; min-height: 44px; }
.v2-page .footer-links a::after { content: '↗'; color: var(--gold-ink); font-size: 11px; }
.v2-page .footer-inner { align-items: start; gap: 24px; padding-block: 22px; }
.v2-page .disclaimer { font-size: 12px; line-height: 1.8; }
html[data-theme="light"] .v2-page .site-footer { background: var(--bg); }
html[data-theme="light"] .v2-page .site-footer::before { opacity: .7; filter: contrast(1.25); }
@media (max-width: 760px) {
  .v2-page .footer-signature { grid-template-columns: 1fr; gap: 32px; padding-block: 36px 28px; }
  .v2-page .site-footer::before { background-size: auto 70%; background-position: 65% top; opacity: .42; mask-image: linear-gradient(#000, #000 45%, transparent 85%); }
  html[data-theme="light"] .v2-page .site-footer::before { opacity: .5; }
  .v2-page .footer-brand { font-size: 30px; }
  .v2-page .footer-statement { margin-top: 18px; font-size: 28px; }
  .v2-page .footer-links { width: 100%; }
  .v2-page .footer-inner { display: flex; flex-direction: column; gap: 18px; }
  .v2-page .disclaimer { flex: 0 1 auto; }
  .v2-page .colophon { white-space: normal; }
  .v2-page .search input { font-size: 16px; }
  .wire-pagination { align-items: start; flex-direction: column; }
}

/* Touch readers need readable fields in portrait and landscape. The body
   selector also wins over later narrow Library rules without changing desktop. */
@media (pointer: coarse) {
  body.v2-page .search input,
  body.v2-page .discovery-facets select { font-size: 16px; }
}
