/* ==========================================================================
   Global AI Rankings — components
   Every component here is a variant family, not a one-off section.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Header
   -------------------------------------------------------------------------- */

.gai-header {
	position: sticky;
	top: 0;
	z-index: 100;
	background: var(--wp--preset--color--paper);
	border-bottom: 1px solid var(--wp--preset--color--rule);
}

.gai-header__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 32px;
	min-height: var(--gai-header-h);
	max-width: 1240px;
	margin-inline: auto;
	padding-inline: var(--gai-gutter);
}

.gai-brand {
	display: inline-flex;
	align-items: baseline;
	text-decoration: none;
	color: var(--wp--preset--color--ink);
}
/* Trademark mark in running prose. The serif's TM glyph sets at full size and
   reads as two capitals mid-sentence, so it is scaled and raised here too. */
.gai-tm {
	font-size: 0.62em;
	vertical-align: super;
	line-height: 0;
	letter-spacing: 0;
}

/* Trademark mark: superscript, one step down in weight and colour, so it
   registers as a legal notation rather than as part of the wordmark. */
.gai-brand__tm {
	font-size: 0.5em;
	font-weight: 500;
	line-height: 1;
	letter-spacing: 0;
	vertical-align: super;
	margin-left: 2px;
	color: var(--wp--preset--color--ink-3);
}
.gai-footer .gai-brand__tm { color: var(--wp--preset--color--ink-inv-2); }
.gai-brand__name {
	font-family: var(--wp--preset--font-family--sans);
	font-size: 19px;
	font-weight: 600;
	letter-spacing: -0.012em;
	line-height: 1;
}
.gai-brand:hover { text-decoration: none; }
.gai-brand:hover .gai-brand__name { color: var(--wp--preset--color--accent); }

/* --------------------------------------------------------------------------
   2. Desktop navigation — flyout, keyboard operable
   -------------------------------------------------------------------------- */

.gai-nav { display: none; }

@media (min-width: 1024px) {
	.gai-nav { display: block; }
	.gai-nav__list {
		display: flex;
		align-items: center;
		gap: 4px;
		list-style: none;
		margin: 0;
		padding: 0;
	}
	.gai-nav__item { position: relative; }

	.gai-nav__link,
	.gai-nav__toggle {
		display: inline-flex;
		align-items: center;
		gap: 6px;
		padding: 10px 14px;
		font-family: var(--wp--preset--font-family--sans);
		font-size: 15px;
		font-weight: 500;
		line-height: 1.2;
		color: var(--wp--preset--color--ink);
		background: none;
		border: 0;
		border-radius: 2px;
		text-decoration: none;
		cursor: pointer;
		transition: color var(--gai-fast) var(--gai-ease);
	}
	.gai-nav__link:hover,
	.gai-nav__toggle:hover,
	.gai-nav__item.is-open > .gai-nav__toggle { color: var(--wp--preset--color--accent); text-decoration: none; }

	.gai-nav__link[aria-current="page"] { color: var(--wp--preset--color--accent); }

	.gai-nav__caret {
		width: 7px; height: 7px;
		border-right: 1px solid currentColor;
		border-bottom: 1px solid currentColor;
		transform: translateY(-2px) rotate(45deg);
		transition: transform var(--gai-fast) var(--gai-ease);
	}
	.gai-nav__item.is-open .gai-nav__caret { transform: translateY(1px) rotate(-135deg); }

	/* The panel sits 12px below the toggle. Without a bridge across that gap the
	   pointer leaves the item on its way down, mouseleave fires, and the menu
	   closes before an option can be reached. The pseudo-element is part of the
	   panel, so it keeps the item hovered while crossing. */
	.gai-nav__panel::before {
		content: "";
		position: absolute;
		left: 0;
		right: 0;
		top: -14px;
		height: 14px;
	}

	.gai-nav__panel {
		position: absolute;
		top: calc(100% + 12px);
		left: 0;
		min-width: 272px;
		padding: 8px;
		background: var(--wp--preset--color--surface);
		border: 1px solid var(--wp--preset--color--rule);
		border-radius: 2px;
		list-style: none;
		margin: 0;
		display: none;
	}
	.gai-nav__item.is-open .gai-nav__panel { display: block; }

	.gai-nav__panel a {
		display: block;
		padding: 11px 14px;
		font-family: var(--wp--preset--font-family--sans);
		font-size: 15px;
		font-weight: 400;
		color: var(--wp--preset--color--ink);
		text-decoration: none;
		border-radius: 2px;
		transition: background var(--gai-fast) var(--gai-ease), color var(--gai-fast) var(--gai-ease);
	}
	.gai-nav__panel a:hover {
		background: var(--wp--preset--color--accent-weak);
		color: var(--wp--preset--color--accent-hover);
		text-decoration: none;
	}
}

/* --------------------------------------------------------------------------
   3. Mobile drawer — separate markup tree, accordion disclosure
   -------------------------------------------------------------------------- */

.gai-burger {
	display: inline-flex;
	flex-direction: column;
	justify-content: center;
	gap: 5px;
	width: 44px; height: 44px;
	margin-right: -10px;
	padding: 0 10px;
	background: none;
	border: 0;
	cursor: pointer;
}
.gai-burger span {
	display: block;
	height: 1px;
	background: var(--wp--preset--color--ink);
	transition: transform var(--gai-base) var(--gai-ease), opacity var(--gai-fast) var(--gai-ease);
}
@media (min-width: 1024px) { .gai-burger { display: none; } }

.gai-drawer {
	position: fixed;
	inset: var(--gai-header-h) 0 0 0;
	z-index: 99;
	background: var(--wp--preset--color--paper);
	overflow-y: auto;
	overscroll-behavior: contain;
	padding: 8px var(--gai-gutter) 56px;
	visibility: hidden;
	opacity: 0;
	transition: opacity var(--gai-base) var(--gai-ease), visibility var(--gai-base);
}
.gai-drawer.is-open { visibility: visible; opacity: 1; }
body.gai-drawer-open { overflow: hidden; }

.gai-drawer__list { list-style: none; margin: 0; padding: 0; }
.gai-drawer__item { border-bottom: 1px solid var(--wp--preset--color--rule); }

.gai-drawer__link,
.gai-drawer__toggle {
	display: flex;
	align-items: center;
	justify-content: space-between;
	width: 100%;
	padding: 18px 0;
	font-family: var(--wp--preset--font-family--sans);
	font-size: 19px;
	font-weight: 500;
	color: var(--wp--preset--color--ink);
	background: none;
	border: 0;
	text-align: left;
	text-decoration: none;
	cursor: pointer;
}
.gai-drawer__toggle .gai-nav__caret {
	width: 8px; height: 8px;
	border-right: 1px solid currentColor;
	border-bottom: 1px solid currentColor;
	transform: rotate(45deg);
	transition: transform var(--gai-base) var(--gai-ease);
}
.gai-drawer__item.is-open .gai-nav__caret { transform: translateY(3px) rotate(-135deg); }

.gai-drawer__panel { display: none; list-style: none; margin: 0; padding: 0 0 16px; }
.gai-drawer__item.is-open .gai-drawer__panel { display: block; }
.gai-drawer__panel a {
	display: block;
	padding: 12px 0 12px 16px;
	border-left: 1px solid var(--wp--preset--color--rule);
	font-family: var(--wp--preset--font-family--sans);
	font-size: 16px;
	color: var(--wp--preset--color--ink-2);
	text-decoration: none;
}
.gai-drawer__panel a:hover { color: var(--wp--preset--color--accent); }

/* --------------------------------------------------------------------------
   4. Anchor bar — sticky in-page nav with scroll-spy
   -------------------------------------------------------------------------- */

.gai-anchorbar {
	position: sticky;
	top: var(--gai-header-h);
	z-index: 90;
	background: var(--wp--preset--color--paper);
	border-bottom: 1px solid var(--wp--preset--color--rule);
}
.gai-anchorbar__inner {
	display: flex;
	align-items: center;
	gap: 4px;
	max-width: 1240px;
	margin-inline: auto;
	padding-inline: var(--gai-gutter);
	min-height: var(--gai-anchor-h);
	overflow-x: auto;
	scrollbar-width: none;
}
.gai-anchorbar__inner::-webkit-scrollbar { display: none; }

.gai-anchorbar a {
	flex: 0 0 auto;
	padding: 8px 12px;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	font-weight: 500;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	white-space: nowrap;
	color: var(--wp--preset--color--ink-3);
	text-decoration: none;
	border-radius: 2px;
	transition: color var(--gai-fast) var(--gai-ease), background var(--gai-fast) var(--gai-ease);
}
.gai-anchorbar a:hover { color: var(--wp--preset--color--ink); text-decoration: none; }
.gai-anchorbar a.is-active {
	color: var(--wp--preset--color--accent);
	background: var(--wp--preset--color--accent-weak);
}

/* --------------------------------------------------------------------------
   5. Hero — ledger variant (signature) and editorial variant
   -------------------------------------------------------------------------- */

.gai-hero {
	background: var(--wp--preset--color--ink-surface);
	color: var(--wp--preset--color--ink-inv);
	padding-block: clamp(56px, 8vw, 112px);
}
.gai-hero__inner {
	display: grid;
	gap: clamp(40px, 5vw, 72px);
	max-width: 1240px;
	margin-inline: auto;
	padding-inline: var(--gai-gutter);
}
@media (min-width: 1024px) {
	.gai-hero__inner { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); align-items: end; }
}

.gai-hero h1 {
	font-size: var(--wp--preset--font-size--display);
	font-weight: 500;
	line-height: 1.05;
	letter-spacing: -0.02em;
	color: var(--wp--preset--color--ink-inv);
	margin: 0;
	max-width: 14ch;
}
.gai-hero h1 strong { font-weight: 700; }

.gai-hero__actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px;
	margin-top: 40px;
}

/* Buttons — three variants, one size. */
.gai-btn {
	display: inline-flex;
	align-items: baseline;
	gap: 8px;
	padding: 14px 22px;
	font-family: var(--wp--preset--font-family--sans);
	font-size: 15px;
	font-weight: 500;
	line-height: 1.2;
	border: 1px solid transparent;
	border-radius: 2px;
	text-decoration: none;
	cursor: pointer;
	transition: background var(--gai-fast) var(--gai-ease), color var(--gai-fast) var(--gai-ease), border-color var(--gai-fast) var(--gai-ease);
}
.gai-btn--primary { background: var(--wp--preset--color--accent); color: var(--wp--preset--color--ink-inv); }
.gai-btn--primary:hover { background: var(--wp--preset--color--accent-hover); color: var(--wp--preset--color--ink-inv); text-decoration: none; }

.gai-btn--ghost { background: transparent; color: var(--wp--preset--color--ink-inv); border-color: var(--wp--preset--color--rule-inv); }
.gai-btn--ghost:hover { background: rgba(255, 255, 255, 0.06); border-color: var(--wp--preset--color--ink-inv-2); color: var(--wp--preset--color--ink-inv); text-decoration: none; }

.gai-btn--outline { background: transparent; color: var(--wp--preset--color--ink); border-color: var(--wp--preset--color--rule-strong); }
.gai-cta .gai-btn { background: var(--wp--preset--color--accent); color: var(--wp--preset--color--ink-inv); border-color: transparent; }
.gai-cta .gai-btn:hover { background: var(--wp--preset--color--accent-hover); color: var(--wp--preset--color--ink-inv); }
.gai-btn--outline:hover { border-color: var(--wp--preset--color--ink); color: var(--wp--preset--color--ink); text-decoration: none; }

/* Format + size metadata inside a button — a document-repository trust signal. */
.gai-btn__meta {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	font-weight: 400;
	letter-spacing: 0.04em;
	opacity: 0.7;
}

/* --- The ledger ----------------------------------------------------------- */

.gai-ledger {
	border-top: 1px solid var(--wp--preset--color--rule-inv);
}
.gai-ledger__head {
	display: grid;
	grid-template-columns: 44px 1fr 68px 58px;
	gap: 12px;
	padding: 12px 0;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	font-weight: 500;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink-inv-2);
	border-bottom: 1px solid var(--wp--preset--color--rule-inv);
}
.gai-ledger__row {
	display: grid;
	grid-template-columns: 44px 1fr 68px 58px;
	gap: 12px;
	align-items: baseline;
	padding: 14px 0;
	border-bottom: 1px solid var(--wp--preset--color--rule-inv);
	color: var(--wp--preset--color--ink-inv);
	text-decoration: none;
	transition: background var(--gai-fast) var(--gai-ease);
}
a.gai-ledger__row:hover { background: rgba(255, 255, 255, 0.04); text-decoration: none; }

.gai-ledger__rank {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 15px;
	font-weight: 400;
	color: var(--wp--preset--color--ink-inv-2);
}
.gai-ledger__entity {
	font-family: var(--wp--preset--font-family--sans);
	font-size: 16px;
	font-weight: 500;
	letter-spacing: -0.005em;
}
.gai-ledger__score,
.gai-ledger__delta {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 15px;
	text-align: right;
}
.gai-ledger__delta--rise { color: var(--wp--preset--color--rise-inv); }
.gai-ledger__delta--fall { color: var(--wp--preset--color--fall-inv); }

/* The ledger at phone width. Four columns hold, but the fixed ones take 206px
   of a 348px content box and the entity column starts wrapping on the longer
   government names. Tightening the numerics buys back ~60px, which is the
   difference between "United Kingdom" on one line and on two. */
@media (max-width: 479px) {
	.gai-ledger__head,
	.gai-ledger__row {
		grid-template-columns: 28px minmax(0, 1fr) 52px 40px;
		gap: 8px;
	}
	.gai-ledger__head { font-size: 10px; letter-spacing: 0.06em; }
	.gai-ledger__entity { font-size: 15px; }
	.gai-ledger__foot { flex-direction: column; align-items: flex-start; gap: 8px; }
}
.gai-ledger__delta--flat { color: var(--wp--preset--color--ink-inv-2); }

.gai-ledger__foot {
	display: flex;
	justify-content: space-between;
	gap: 16px;
	padding-top: 14px;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	color: var(--wp--preset--color--ink-inv-2);
}
.gai-ledger__foot a { color: var(--wp--preset--color--ink-inv); }

/* Light hero — institutional positioning on paper, so the navy index
   explorer below it becomes the page's visual center of gravity. */
.gai-hero--light {
	background: var(--wp--preset--color--paper);
	color: var(--wp--preset--color--ink);
	border-bottom: 1px solid var(--wp--preset--color--rule);
}
.gai-hero--light h1 { color: var(--wp--preset--color--ink); }
.gai-hero--light .gai-eyebrow { color: var(--wp--preset--color--ink-3); }
.gai-hero--light .gai-deck { color: var(--wp--preset--color--ink-2); }
.gai-hero--light .gai-ledger { border-top-color: var(--wp--preset--color--rule-strong); }
.gai-hero--light .gai-ledger__head,
.gai-hero--light .gai-ledger__row { border-bottom-color: var(--wp--preset--color--rule); }
.gai-hero--light .gai-ledger__head { color: var(--wp--preset--color--ink-3); }
.gai-hero--light .gai-ledger__row { color: var(--wp--preset--color--ink); }
.gai-hero--light a.gai-ledger__row:hover { background: var(--wp--preset--color--surface-alt); }
.gai-hero--light .gai-ledger__rank { color: var(--wp--preset--color--ink-3); }
.gai-hero--light .gai-ledger__delta--rise { color: var(--wp--preset--color--rise); }
.gai-hero--light .gai-ledger__delta--fall { color: var(--wp--preset--color--fall); }
.gai-hero--light .gai-ledger__delta--flat { color: var(--wp--preset--color--ink-3); }
.gai-hero--light .gai-ledger__foot { color: var(--wp--preset--color--ink-3); border-top: 0; }
.gai-hero--light .gai-ledger__foot a { color: var(--wp--preset--color--accent); }
.gai-hero--light .gai-btn--ghost {
	color: var(--wp--preset--color--ink);
	border-color: var(--wp--preset--color--rule-strong);
}
.gai-hero--light .gai-btn--ghost:hover {
	background: transparent;
	border-color: var(--wp--preset--color--ink);
	color: var(--wp--preset--color--ink);
}

/* Editorial hero — used on articles, about, utility pages. */
.gai-hero--editorial {
	background: var(--wp--preset--color--paper);
	color: var(--wp--preset--color--ink);
	border-bottom: 1px solid var(--wp--preset--color--rule);
	padding-block: clamp(48px, 6vw, 88px);
}
.gai-hero--editorial .gai-hero__inner { grid-template-columns: 1fr; max-width: 1240px; }
.gai-hero--editorial h1 {
	color: var(--wp--preset--color--ink);
	font-size: var(--wp--preset--font-size--h1);
	max-width: 20ch;
}

/* --------------------------------------------------------------------------
   6. Sections & section headers
   -------------------------------------------------------------------------- */

.gai-section { padding-block: clamp(64px, 10vw, 128px); }
.gai-section--dense { padding-block: clamp(56px, 8vw, 96px); }
.gai-section--alt { background: var(--wp--preset--color--surface-alt); }
.gai-section--ink { background: var(--wp--preset--color--ink-surface); color: var(--wp--preset--color--ink-inv); }
.gai-section--ink h2, .gai-section--ink h3 { color: var(--wp--preset--color--ink-inv); }

.gai-container { max-width: 1240px; margin-inline: auto; padding-inline: var(--gai-gutter); }
.gai-container--wide { max-width: 1440px; }
.gai-container--editorial { max-width: var(--gai-editorial); }
.gai-container--narrow { max-width: var(--gai-narrow); }

.gai-sectionhead { max-width: 1240px; margin-inline: auto; }
.gai-sectionhead h2 { margin: 0; max-width: 18ch; }
.gai-sectionhead--split {
	display: grid;
	gap: 24px;
	align-items: end;
	grid-template-columns: 1fr;
}
@media (min-width: 900px) {
	.gai-sectionhead--split { grid-template-columns: minmax(0, 1fr) auto; }
	.gai-sectionhead--split .gai-deck { margin-top: 0; }
}
.gai-sectionhead + * { margin-top: clamp(40px, 5vw, 72px); }

/* Inline "more" link with a rule above it. */
.gai-morelink {
	font-family: var(--wp--preset--font-family--sans);
	font-size: 15px;
	font-weight: 500;
	color: var(--wp--preset--color--accent);
	text-decoration: none;
	white-space: nowrap;
}
.gai-morelink:hover { text-decoration: underline; }

/* --------------------------------------------------------------------------
   7. Editorial block — with optional score gutter (signature)
   -------------------------------------------------------------------------- */

.gai-editorial { display: grid; gap: clamp(32px, 4vw, 64px); }
@media (min-width: 1024px) {
	.gai-editorial--gutter { grid-template-columns: 200px minmax(0, var(--gai-editorial)); }
}

.gai-gutter { position: sticky; top: calc(var(--gai-header-h) + var(--gai-anchor-h) + 32px); align-self: start; }
.gai-gutter__item + .gai-gutter__item { margin-top: 24px; padding-top: 24px; border-top: 1px solid var(--wp--preset--color--rule); }
.gai-gutter__label {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink-3);
	margin: 0 0 6px;
}
.gai-gutter__value {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--rank);
	font-weight: 300;
	line-height: 1;
	letter-spacing: -0.02em;
	color: var(--wp--preset--color--ink);
}

/* Findings: numbered essay blocks. Numbering is used only because the findings
   are published in a fixed, citable order. */
.gai-finding { padding-block: clamp(40px, 5vw, 56px); border-top: 1px solid var(--wp--preset--color--rule); }
.gai-finding:first-child { border-top: 0; padding-top: 0; }
.gai-finding__index {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	letter-spacing: 0.09em;
	color: var(--wp--preset--color--ink-3);
	margin: 0 0 12px;
}
.gai-finding h3 { margin: 0 0 24px; max-width: 24ch; }
.gai-finding p { max-width: 68ch; }
.gai-finding p + p { margin-top: 24px; }

/* --------------------------------------------------------------------------
   8. Cards — under-filled by policy. Two facts, not six.
   -------------------------------------------------------------------------- */

.gai-grid { display: grid; gap: 32px; }
.gai-grid--2 { grid-template-columns: 1fr; }
.gai-grid--3 { grid-template-columns: 1fr; }
.gai-grid--4 { grid-template-columns: 1fr; }

@media (min-width: 640px) {
	.gai-grid--2, .gai-grid--3, .gai-grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 1024px) {
	.gai-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
	.gai-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
@media (max-width: 639px) { .gai-grid { gap: 20px; } }

.gai-card {
	display: flex;
	flex-direction: column;
	gap: 12px;
	padding-top: 20px;
	border-top: 1px solid var(--wp--preset--color--rule);
	text-decoration: none;
	transition: border-color var(--gai-fast) var(--gai-ease);
}
.gai-card:hover { border-top-color: var(--wp--preset--color--ink); text-decoration: none; }

.gai-card__meta {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--ink-3);
}
.gai-card__title {
	font-family: var(--wp--preset--font-family--sans);
	font-size: var(--wp--preset--font-size--h4);
	font-weight: 600;
	line-height: 1.35;
	letter-spacing: -0.005em;
	color: var(--wp--preset--color--ink);
	margin: 0;
	transition: color var(--gai-fast) var(--gai-ease);
}
.gai-card:hover .gai-card__title { color: var(--wp--preset--color--accent); }

/* Capability variant carries one sentence; insight and research variants do not. */
.gai-card--capability { padding: 32px; border: 1px solid var(--wp--preset--color--rule); border-radius: 0; background: var(--wp--preset--color--surface); }
.gai-card--capability:hover { border-color: var(--wp--preset--color--rule-strong); }
.gai-card--capability .gai-card__body {
	font-family: var(--wp--preset--font-family--serif);
	font-size: 16px;
	line-height: 1.6;
	color: var(--wp--preset--color--ink-2);
	margin: 0;
}
@media (max-width: 639px) { .gai-card--capability { padding: 24px; } }

/* Featured research — one item, image and copy. */
.gai-featured { display: grid; gap: clamp(32px, 4vw, 64px); align-items: center; }
@media (min-width: 900px) {
	.gai-featured { grid-template-columns: minmax(0, 6fr) minmax(0, 5fr); }
	.gai-featured--reverse .gai-featured__media { order: 2; }
}
.gai-featured__media { margin: 0; }
.gai-featured__media img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	border-radius: 0;
}
.gai-featured h3 { margin: 16px 0 0; max-width: 22ch; }

/* --------------------------------------------------------------------------
   9. Data modules — rankings table, tabs, stat band
   -------------------------------------------------------------------------- */

.gai-tablewrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }

.gai-table {
	width: 100%;
	border-collapse: collapse;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 15px;
	min-width: 640px;
}
.gai-table caption {
	caption-side: top;
	text-align: left;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	color: var(--wp--preset--color--ink-3);
	padding-bottom: 16px;
}
.gai-table th,
.gai-table td {
	padding: 14px 16px;
	text-align: left;
	border-bottom: 1px solid var(--wp--preset--color--rule);
	vertical-align: baseline;
}
.gai-table thead th {
	font-size: 11px;
	font-weight: 500;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink-3);
	border-bottom: 1px solid var(--wp--preset--color--rule-strong);
	white-space: nowrap;
}
.gai-table tbody tr:nth-child(even) { background: var(--wp--preset--color--surface); }
.gai-table td.is-numeric,
.gai-table th.is-numeric { text-align: right; }
.gai-table .gai-entity {
	font-family: var(--wp--preset--font-family--sans);
	font-size: 16px;
	font-weight: 500;
}
.gai-table .gai-delta--rise { color: var(--wp--preset--color--rise); }
.gai-table .gai-delta--fall { color: var(--wp--preset--color--fall); }
.gai-table .gai-delta--flat { color: var(--wp--preset--color--flat); }

.gai-table__sort {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	background: none;
	border: 0;
	padding: 0;
	font: inherit;
	letter-spacing: inherit;
	text-transform: inherit;
	color: inherit;
	cursor: pointer;
}
.gai-table__sort:hover { color: var(--wp--preset--color--ink); }
.gai-table__sort::after { content: "↕"; opacity: 0.5; }
th[aria-sort="ascending"] .gai-table__sort::after { content: "↑"; opacity: 1; }
th[aria-sort="descending"] .gai-table__sort::after { content: "↓"; opacity: 1; }
th[aria-sort] .gai-table__sort { color: var(--wp--preset--color--accent); }

/* Tabs — regional analysis */
.gai-tabs__list {
	display: flex;
	gap: 4px;
	overflow-x: auto;
	border-bottom: 1px solid var(--wp--preset--color--rule);
	scrollbar-width: none;
}
.gai-tabs__list::-webkit-scrollbar { display: none; }
.gai-tabs__tab {
	flex: 0 0 auto;
	padding: 14px 16px;
	background: none;
	border: 0;
	border-bottom: 2px solid transparent;
	margin-bottom: -1px;
	font-family: var(--wp--preset--font-family--sans);
	font-size: 15px;
	font-weight: 500;
	color: var(--wp--preset--color--ink-3);
	white-space: nowrap;
	cursor: pointer;
	transition: color var(--gai-fast) var(--gai-ease), border-color var(--gai-fast) var(--gai-ease);
}
.gai-tabs__tab:hover { color: var(--wp--preset--color--ink); }
.gai-tabs__tab[aria-selected="true"] { color: var(--wp--preset--color--accent); border-bottom-color: var(--wp--preset--color--accent); }
.gai-tabs__panel { padding-top: 40px; }
.gai-tabs__panel[hidden] { display: none; }

/* Stat band — figures, never counters. */
.gai-stats { display: grid; gap: 1px; background: var(--wp--preset--color--rule-inv); border-block: 1px solid var(--wp--preset--color--rule-inv); }
@media (min-width: 640px) { .gai-stats { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .gai-stats--4 { grid-template-columns: repeat(4, 1fr); } .gai-stats--3 { grid-template-columns: repeat(3, 1fr); } }
.gai-stat { background: var(--wp--preset--color--ink-surface); padding: 32px 24px; }
.gai-stat__figure {
	font-family: var(--wp--preset--font-family--mono);
	font-size: clamp(32px, 4vw, 44px);
	font-weight: 300;
	line-height: 1;
	letter-spacing: -0.02em;
	color: var(--wp--preset--color--ink-inv);
	margin: 0 0 12px;
}
.gai-stat__label {
	font-family: var(--wp--preset--font-family--sans);
	font-size: 15px;
	line-height: 1.45;
	color: var(--wp--preset--color--ink-inv-2);
	margin: 0;
	max-width: 24ch;
}

/* --------------------------------------------------------------------------
   10. Quote — no ornament
   -------------------------------------------------------------------------- */

.gai-quote { border: 0; margin: 0; padding-left: 24px; border-left: 1px solid var(--wp--preset--color--rule-strong); max-width: 46ch; }
.gai-quote p {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--deck);
	line-height: 1.45;
	margin: 0;
}
.gai-quote figcaption,
.gai-quote cite {
	display: block;
	margin-top: 24px;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	font-style: normal;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--ink-3);
}

/* --------------------------------------------------------------------------
   11. Download list
   -------------------------------------------------------------------------- */

.gai-downloads { border-top: 1px solid var(--wp--preset--color--rule); }
.gai-download {
	display: grid;
	gap: 8px 24px;
	grid-template-columns: 1fr;
	align-items: baseline;
	padding: 24px 0;
	border-bottom: 1px solid var(--wp--preset--color--rule);
}
@media (min-width: 768px) {
	.gai-download { grid-template-columns: 72px minmax(0, 1fr) auto auto; }
}
.gai-download__year { font-family: var(--wp--preset--font-family--mono); font-size: 15px; color: var(--wp--preset--color--ink-3); }
.gai-download__title { font-family: var(--wp--preset--font-family--sans); font-size: var(--wp--preset--font-size--h4); font-weight: 600; margin: 0; }
.gai-download__meta { font-family: var(--wp--preset--font-family--mono); font-size: 12px; letter-spacing: 0.04em; color: var(--wp--preset--color--ink-3); }
.gai-download__action { font-family: var(--wp--preset--font-family--sans); font-size: 15px; font-weight: 500; color: var(--wp--preset--color--accent); text-decoration: none; }
.gai-download__action:hover { text-decoration: underline; }
/* Unpublished work still gets a row — it is listed so the reader knows it
   exists — but it must not look actionable. Muted, not hidden. */
.gai-download__action--muted {
	color: var(--wp--preset--color--ink-3);
	font-family: var(--wp--preset--font-family--mono);
	font-size: 13px;
	font-weight: 400;
	cursor: default;
}
.gai-download__action--muted:hover { text-decoration: none; }
.gai-btn--disabled {
	opacity: 0.55;
	cursor: not-allowed;
	pointer-events: none;
}

/* --------------------------------------------------------------------------
   12. Forms
   -------------------------------------------------------------------------- */

.gai-form { display: grid; gap: 24px; }
@media (min-width: 768px) { .gai-form--2col { grid-template-columns: repeat(2, minmax(0, 1fr)); } .gai-field--full { grid-column: 1 / -1; } }

.gai-field { display: flex; flex-direction: column; gap: 8px; }
.gai-field label {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	font-weight: 500;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink-2);
}
.gai-field .req { color: var(--wp--preset--color--fall); }
.gai-field input,
.gai-field select,
.gai-field textarea {
	width: 100%;
	padding: 13px 14px;
	font-family: var(--wp--preset--font-family--sans);
	font-size: 16px;
	color: var(--wp--preset--color--ink);
	background: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--rule-strong);
	border-radius: 2px;
	transition: border-color var(--gai-fast) var(--gai-ease);
}
.gai-field input:focus,
.gai-field select:focus,
.gai-field textarea:focus { border-color: var(--wp--preset--color--accent); }
.gai-field textarea { resize: vertical; min-height: 140px; line-height: 1.55; }
.gai-split__aside dd a { color: var(--wp--preset--color--accent); text-decoration: none; }
.gai-split__aside dd a:hover { text-decoration: underline; }

/* Editorial note: a caveat, a suggested citation, a standing qualification. Set
   one step down and rule-led so it reads as apparatus rather than as body copy. */
.gai-note {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 13px;
	line-height: 1.65;
	letter-spacing: 0.01em;
	color: var(--wp--preset--color--ink-2);
	border-left: 2px solid var(--wp--preset--color--rule);
	padding-left: 16px;
}
.gai-note em { font-style: normal; text-decoration: underline; text-underline-offset: 3px; }
.gai-field__hint { font-family: var(--wp--preset--font-family--mono); font-size: 12px; color: var(--wp--preset--color--ink-3); }

.gai-consent { display: flex; gap: 12px; align-items: flex-start; }
.gai-consent input { width: 18px; height: 18px; margin-top: 3px; flex: 0 0 auto; }
.gai-consent label { font-family: var(--wp--preset--font-family--serif); font-size: 16px; text-transform: none; letter-spacing: 0; line-height: 1.5; color: var(--wp--preset--color--ink-2); }

/* --------------------------------------------------------------------------
   13. CTA band
   -------------------------------------------------------------------------- */

.gai-cta {
	background: var(--wp--preset--color--surface-alt);
	color: var(--wp--preset--color--ink);
	border-top: 1px solid var(--wp--preset--color--rule);
	padding-block: clamp(64px, 8vw, 112px);
}
.gai-cta__inner { display: grid; gap: 32px; align-items: end; max-width: 1240px; margin-inline: auto; padding-inline: var(--gai-gutter); }
@media (min-width: 900px) { .gai-cta__inner { grid-template-columns: minmax(0, 1fr) auto; } }
.gai-cta h2 { color: var(--wp--preset--color--ink); font-size: var(--wp--preset--font-size--h1); line-height: 1.08; letter-spacing: -0.018em; margin: 0; max-width: 16ch; }

/* --------------------------------------------------------------------------
   14. Article
   -------------------------------------------------------------------------- */

.gai-article__head { border-bottom: 1px solid var(--wp--preset--color--rule); padding-block: clamp(40px, 5vw, 72px); }
.gai-article__meta { display: flex; flex-wrap: wrap; gap: 20px; font-family: var(--wp--preset--font-family--mono); font-size: 12px; letter-spacing: 0.04em; color: var(--wp--preset--color--ink-3); }
.gai-article__body { padding-block: clamp(48px, 6vw, 80px); }
.gai-article__body > * { max-width: var(--gai-editorial); margin-inline: auto; }
.gai-article__body > .alignwide { max-width: 1024px; }
.gai-article__body > .alignfull { max-width: none; }
.gai-article__body h2 { margin-top: 72px; margin-bottom: 24px; }
.gai-article__body h3 { margin-top: 56px; margin-bottom: 16px; }
.gai-article__body figure { margin-block: 48px; }
.gai-article__body figure img { width: 100%; height: auto; border-radius: 0; }

/* --------------------------------------------------------------------------
   15. Footer
   -------------------------------------------------------------------------- */

.gai-footer { background: var(--wp--preset--color--ink-surface); color: var(--wp--preset--color--ink-inv-2); padding-block: clamp(56px, 7vw, 96px) 40px; }
.gai-footer__inner { max-width: 1240px; margin-inline: auto; padding-inline: var(--gai-gutter); }
.gai-footer__top { display: grid; gap: 48px; }
@media (min-width: 900px) { .gai-footer__top { grid-template-columns: minmax(0, 2fr) 1fr 1fr minmax(0, 1.4fr); } }

.gai-footer h2, .gai-footer p, .gai-footer address { margin: 0; }
.gai-footer__brand .gai-brand__name { color: var(--wp--preset--color--ink-inv); }
.gai-footer__position { font-family: var(--wp--preset--font-family--serif); font-size: 16px; line-height: 1.6; color: var(--wp--preset--color--ink-inv-2); margin-top: 16px; max-width: 30ch; }

.gai-footer__heading {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	font-weight: 500;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink-inv-2);
	margin: 0 0 20px;
}
.gai-footer ul { list-style: none; margin: 0; padding: 0; }
.gai-footer li + li { margin-top: 12px; }
.gai-footer a { font-family: var(--wp--preset--font-family--sans); font-size: 15px; color: var(--wp--preset--color--ink-inv); text-decoration: none; }
.gai-footer a:hover { color: var(--wp--preset--color--ink-inv); text-decoration: underline; }
.gai-footer address { font-family: var(--wp--preset--font-family--mono); font-size: 13px; font-style: normal; line-height: 1.7; color: var(--wp--preset--color--ink-inv-2); }

/* The legal notice runs as two headed columns, not one paragraph. Splitting it
   is a legibility decision with a legal edge: a notice that is structured and
   scannable is harder to characterise as buried. The rule between the columns
   is the same hairline used elsewhere, so it reads as document furniture rather
   than as a card. */
.gai-footer__disclaimer {
	margin-top: clamp(48px, 6vw, 72px);
	padding-top: 28px;
	border-top: 1px solid var(--wp--preset--color--rule-inv);
	display: grid;
	gap: 32px;
}
@media (min-width: 900px) {
	.gai-footer__disclaimer { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0; }
	.gai-footer__notice { padding-right: clamp(28px, 3.5vw, 56px); }
	.gai-footer__notice + .gai-footer__notice {
		padding-right: 0;
		padding-left: clamp(28px, 3.5vw, 56px);
		border-left: 1px solid var(--wp--preset--color--rule-inv);
	}
}
/* `.gai-footer h2 { margin: 0 }` above outranks `.gai-footer__heading`, so the
   notice heading needs the element in the selector to get its spacing back. */
.gai-footer__notice h2.gai-footer__heading { margin: 0 0 12px; }
.gai-footer__disclaimer p {
	max-width: 62ch;
	font-family: var(--wp--preset--font-family--sans);
	font-size: 12px;
	line-height: 1.65;
	color: var(--wp--preset--color--ink-inv-2);
	margin: 0;
}
.gai-footer__disclaimer a {
	font-size: inherit;
	color: inherit;
	text-decoration: underline;
	text-underline-offset: 2px;
}

.gai-footer__bottom {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: flex-start;
	gap: 16px 32px;
	margin-top: clamp(32px, 4vw, 44px);
	padding-top: 24px;
	border-top: 1px solid var(--wp--preset--color--rule-inv);
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	color: var(--wp--preset--color--ink-inv-2);
}
/* The rights line and the licence line are one unit: the second scopes the
   first. See gai_footer_rights() before separating them. */
.gai-footer__rights { max-width: 68ch; }
.gai-footer__rights > p:first-child { color: var(--wp--preset--color--ink-inv); }
.gai-footer__legal { display: flex; flex-wrap: wrap; gap: 20px; }
.gai-footer__legal a { font-family: var(--wp--preset--font-family--mono); font-size: 12px; }

/* --------------------------------------------------------------------------
   16. Core block integration
   Specificity is bumped one class above theme.json element styles so a card
   title stays a card title wherever core decides to render it.
   -------------------------------------------------------------------------- */

.gai-card .gai-card__title,
.gai-card h2.gai-card__title,
.gai-card h3.gai-card__title {
	font-family: var(--wp--preset--font-family--sans);
	font-size: var(--wp--preset--font-size--h4);
	font-weight: 600;
	line-height: 1.35;
	letter-spacing: -0.005em;
	margin: 0;
}
.gai-card .gai-card__title a {
	color: inherit;
	text-decoration: none;
}
.gai-card:hover .gai-card__title a { color: var(--wp--preset--color--accent); }

.gai-card .gai-card__meta,
.gai-card time {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--ink-3);
}

/* Query loop lists carry the grid; strip the list chrome. */
.wp-block-post-template.gai-grid {
	list-style: none;
	margin: 0;
	padding: 0;
}
.wp-block-post-template.gai-grid > li { margin: 0; }

/* Post title inside the editorial hero is an H1 and already sized there. */
.gai-hero--editorial .wp-block-post-title { margin: 0; }

/* Excerpt used as a deck. */
.gai-article__head .gai-deck,
.gai-article__head .wp-block-post-excerpt__excerpt {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--deck);
	line-height: 1.45;
	color: var(--wp--preset--color--ink-2);
	max-width: 34em;
}
.gai-article__head .wp-block-post-excerpt { margin: 24px 0 32px; }

.gai-article__head .gai-eyebrow a,
.gai-eyebrow a { color: inherit; text-decoration: none; }
.gai-eyebrow a:hover { color: var(--wp--preset--color--accent); }

.gai-article__meta > * { margin: 0; }

.gai-article__body { padding-inline: var(--gai-gutter); }
.gai-article__body .wp-block-post-featured-image img { border-radius: 0; width: 100%; height: auto; }

/* Pagination */
.gai-pagination {
	margin-top: clamp(48px, 6vw, 72px);
	padding-top: 24px;
	border-top: 1px solid var(--wp--preset--color--rule);
	font-family: var(--wp--preset--font-family--mono);
	font-size: 13px;
}
.gai-pagination a { color: var(--wp--preset--color--ink); text-decoration: none; }
.gai-pagination a:hover { color: var(--wp--preset--color--accent); text-decoration: underline; }
.gai-pagination .page-numbers.current { color: var(--wp--preset--color--accent); }

/* Block style variations registered in functions.php */
.wp-block-group.is-style-gai-alt { background: var(--wp--preset--color--surface-alt); }
.wp-block-group.is-style-gai-ink { background: var(--wp--preset--color--ink-surface); color: var(--wp--preset--color--ink-inv); }
.wp-block-separator.is-style-gai-hairline {
	border: 0;
	border-top: 1px solid var(--wp--preset--color--rule);
	opacity: 1;
	max-width: none;
}
.wp-block-image.is-style-gai-square-edge img { border-radius: 0; }
.wp-block-quote.is-style-gai-quote {
	border-left: 1px solid var(--wp--preset--color--rule-strong);
	padding-left: 24px;
	max-width: 46ch;
}
.wp-block-quote.is-style-gai-quote cite {
	display: block;
	margin-top: 24px;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	font-style: normal;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--ink-3);
}

/* Editor parity: the canvas should not fight the front end. */
.editor-styles-wrapper .gai-section { padding-block: clamp(48px, 8vw, 96px); }

/* --------------------------------------------------------------------------
   17. World map — globe and flat projection
   Ink surface. The only saturated colour is the score ramp, and the ramp is
   a single-hue ladder so it reads as a scale rather than as a category set.
   -------------------------------------------------------------------------- */

.gai-map {
	--band-1: #16304E;
	--band-2: #234C77;
	--band-3: #35709F;
	--band-4: #6C9AC4;
	--band-5: #AEC8E2;
	--band-none: #17293F;
	position: relative;
}

.gai-map__layout { display: grid; gap: clamp(32px, 4vw, 56px); align-items: start; }
@media (min-width: 1024px) {
	.gai-map__layout { grid-template-columns: minmax(0, 1fr) 340px; }
}

.gai-map__stage { position: relative; }

.gai-globe__svg {
	display: block;
	width: 100%;
	height: auto;
	max-width: 640px;
	margin-inline: auto;
	touch-action: none;
	cursor: grab;
}
.gai-map.is-dragging .gai-globe__svg { cursor: grabbing; }
.gai-map[data-mode="flat"] .gai-globe__svg { cursor: default; max-width: 100%; }
.gai-map[data-mode="flat"] .gai-map__legend { justify-content: flex-start; }

.gai-globe__sphere { fill: #0F2039; stroke: var(--wp--preset--color--rule-inv); stroke-width: 1; }
.gai-globe__graticule { fill: none; stroke: var(--wp--preset--color--rule-inv); stroke-width: 1; }

.gai-globe__country {
	fill: var(--band-none);
	stroke: var(--wp--preset--color--ink-surface);
	stroke-width: 0.5;
	transition: fill var(--gai-fast) var(--gai-ease), opacity var(--gai-fast) var(--gai-ease);
}
.gai-globe__country[data-band="1"] { fill: var(--band-1); }
.gai-globe__country[data-band="2"] { fill: var(--band-2); }
.gai-globe__country[data-band="3"] { fill: var(--band-3); }
.gai-globe__country[data-band="4"] { fill: var(--band-4); }
.gai-globe__country[data-band="5"] { fill: var(--band-5); }
.gai-globe__country:hover { fill: var(--wp--preset--color--ink-inv); }
.gai-globe__country.is-selected { fill: var(--wp--preset--color--ink-inv); stroke: var(--wp--preset--color--ink-inv); stroke-width: 1; }
.gai-globe__country.is-dimmed { opacity: 0.22; }

/* --- controls ------------------------------------------------------------ */

.gai-map__controls {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px 24px;
	margin-bottom: 32px;
	padding-bottom: 20px;
	border-bottom: 1px solid var(--wp--preset--color--rule-inv);
}

.gai-map__modes { display: inline-flex; gap: 2px; }
.gai-map__mode {
	padding: 8px 14px;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	font-weight: 500;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink-inv-2);
	background: transparent;
	border: 1px solid var(--wp--preset--color--rule-inv);
	border-radius: 2px;
	cursor: pointer;
	transition: color var(--gai-fast) var(--gai-ease), border-color var(--gai-fast) var(--gai-ease);
}
.gai-map__mode:hover { color: var(--wp--preset--color--ink-inv); }
.gai-map__mode[aria-pressed="true"] {
	color: var(--wp--preset--color--ink-inv);
	border-color: var(--wp--preset--color--ink-inv-2);
	background: rgba(255, 255, 255, 0.06);
}

.gai-map__select {
	min-width: 260px;
	padding: 10px 12px;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 13px;
	color: var(--wp--preset--color--ink-inv);
	background: var(--wp--preset--color--ink-surface-2);
	border: 1px solid var(--wp--preset--color--rule-inv);
	border-radius: 2px;
}
.gai-map__select:focus { border-color: var(--wp--preset--color--ink-inv-2); }

.gai-map__regions { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 28px; }
.gai-map__region {
	padding: 7px 12px;
	font-family: var(--wp--preset--font-family--sans);
	font-size: 13px;
	color: var(--wp--preset--color--ink-inv-2);
	background: transparent;
	border: 1px solid transparent;
	border-radius: 2px;
	cursor: pointer;
	transition: color var(--gai-fast) var(--gai-ease), background var(--gai-fast) var(--gai-ease);
}
.gai-map__region:hover { color: var(--wp--preset--color--ink-inv); }
.gai-map__region[aria-pressed="true"] {
	color: var(--wp--preset--color--ink-inv);
	background: rgba(255, 255, 255, 0.08);
}

/* --- legend -------------------------------------------------------------- */

.gai-map__legend { display: flex; align-items: center; gap: 12px; margin-top: 24px; }
.gai-map__ramp { display: flex; }
.gai-map__ramp span { width: 34px; height: 8px; }
.gai-map__legend-label {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink-inv-2);
}

/* --- detail panel -------------------------------------------------------- */

.gai-map__panel {
	padding: 26px 28px;
	background: var(--wp--preset--color--ink-surface-2);
	border: 1px solid var(--wp--preset--color--rule-inv);
	border-radius: 2px;
}
.gai-globe__name {
	font-family: var(--wp--preset--font-family--sans);
	font-size: var(--wp--preset--font-size--h3);
	font-weight: 600;
	line-height: 1.2;
	color: var(--wp--preset--color--ink-inv);
	margin: 0 0 24px;
}
.gai-globe__headline {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 16px;
	padding-block: 20px;
	border-block: 1px solid var(--wp--preset--color--rule-inv);
}
.gai-globe__label {
	display: block;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink-inv-2);
	margin-bottom: 8px;
}
.gai-globe__figure {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 26px;
	font-weight: 300;
	line-height: 1;
	letter-spacing: -0.02em;
	color: var(--wp--preset--color--ink-inv);
	font-variant-numeric: tabular-nums;
}
.gai-globe__figure--rise { color: var(--wp--preset--color--rise-inv); }
.gai-globe__figure--fall { color: var(--wp--preset--color--fall-inv); }

.gai-globe__pillars { margin-top: 24px; }
.gai-globe__pillar {
	display: grid;
	grid-template-columns: 96px 1fr 42px;
	align-items: center;
	gap: 12px;
	padding: 9px 0;
}
.gai-globe__pillar-name {
	font-family: var(--wp--preset--font-family--sans);
	font-size: 13px;
	color: var(--wp--preset--color--ink-inv-2);
}
.gai-globe__bar { display: block; height: 3px; background: var(--wp--preset--color--rule-inv); }
.gai-globe__bar > span { display: block; height: 3px; background: var(--band-4); }
.gai-globe__pillar-score {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 13px;
	text-align: right;
	color: var(--wp--preset--color--ink-inv);
	font-variant-numeric: tabular-nums;
}
.gai-globe__note {
	margin-top: 20px;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	line-height: 1.5;
	color: var(--wp--preset--color--ink-inv-2);
}
.gai-globe__more { margin-top: 20px; }
.gai-globe__more a {
	font-family: var(--wp--preset--font-family--sans);
	font-size: 14px;
	color: var(--wp--preset--color--ink-inv);
	text-decoration: none;
}
.gai-globe__more a:hover { text-decoration: underline; }

/* --- tooltip ------------------------------------------------------------- */

.gai-map__tooltip[hidden] { display: none; }

.gai-map__tooltip {
	position: absolute;
	z-index: 5;
	transform: translate(12px, -50%);
	display: flex;
	align-items: baseline;
	gap: 10px;
	padding: 7px 11px;
	background: var(--wp--preset--color--ink-inv);
	color: var(--wp--preset--color--ink);
	border-radius: 2px;
	pointer-events: none;
	white-space: nowrap;
}
.gai-globe__tip-rank,
.gai-globe__tip-score {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	font-variant-numeric: tabular-nums;
	color: var(--wp--preset--color--ink-2);
}
.gai-globe__tip-name { font-family: var(--wp--preset--font-family--sans); font-size: 14px; font-weight: 500; }

/* --- states -------------------------------------------------------------- */

.gai-map__fallback {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	color: var(--wp--preset--color--ink-inv-2);
}
.gai-map:not(.is-ready) .gai-map__stage { min-height: 320px; }
.gai-map__error[hidden] { display: none; }
.gai-map__error {
	padding: 24px;
	border: 1px solid var(--wp--preset--color--rule-inv);
	border-radius: 2px;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 13px;
	line-height: 1.6;
	color: var(--wp--preset--color--ink-inv-2);
}
.gai-map.is-unavailable .gai-map__stage,
.gai-map.is-unavailable .gai-map__panel,
.gai-map.is-unavailable .gai-map__regions,
.gai-map.is-unavailable .gai-map__controls { display: none; }

@media (max-width: 1023px) {
	.gai-map__panel { min-height: 0; }
	.gai-map__select { min-width: 0; width: 100%; }
	.gai-map__controls { gap: 12px; }
}
@media (max-width: 639px) {
	.gai-globe__headline { grid-template-columns: repeat(3, 1fr); gap: 8px; }
	.gai-globe__figure { font-size: 22px; }
	.gai-map__tooltip { display: none; }
}

/* --------------------------------------------------------------------------
   18. Index explorer — map, ranked table and selector as one instrument
   -------------------------------------------------------------------------- */

.gai-explorer-section { padding-block: clamp(64px, 9vw, 120px); }

.gai-explorer__intro {
	display: grid;
	gap: 24px;
	align-items: end;
	margin-bottom: clamp(32px, 4vw, 48px);
}
@media (min-width: 1024px) {
	.gai-explorer__intro { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: 56px; }
	.gai-explorer__intro .gai-deck { margin-top: 0; }
}
.gai-explorer__intro h2 { color: var(--wp--preset--color--ink-inv); max-width: 16ch; }

.gai-explorer__grid { display: grid; gap: clamp(32px, 3vw, 48px); align-items: start; }
@media (min-width: 1100px) {
	.gai-explorer__grid { grid-template-columns: minmax(0, 7fr) minmax(360px, 5fr); }
}

.gai-explorer__side { display: flex; flex-direction: column; gap: 20px; }

.gai-explorer__table {
	max-height: 356px;
	overflow-y: auto;
	overscroll-behavior: contain;
	border: 1px solid var(--wp--preset--color--rule-inv);
	border-radius: 2px;
	scrollbar-width: thin;
}
.gai-explorer__table::-webkit-scrollbar { width: 8px; }
.gai-explorer__table::-webkit-scrollbar-thumb { background: var(--wp--preset--color--rule-inv); }

.gai-table--compact { min-width: 0; width: 100%; }
.gai-table--compact caption { padding: 0; }
.gai-table--compact thead th {
	position: sticky;
	top: 0;
	z-index: 1;
	padding: 12px 14px;
	background: var(--wp--preset--color--ink-surface-2);
	color: var(--wp--preset--color--ink-inv-2);
	border-bottom: 1px solid var(--wp--preset--color--rule-inv);
}
.gai-table--compact tbody tr { cursor: pointer; }
.gai-table--compact tbody tr:nth-child(even) { background: transparent; }
.gai-table--compact td,
.gai-table--compact th[scope="row"] {
	padding: 11px 14px;
	border-bottom: 1px solid var(--wp--preset--color--rule-inv);
	color: var(--wp--preset--color--ink-inv);
}
.gai-table--compact .gai-ledger__rank { color: var(--wp--preset--color--ink-inv-2); }
.gai-table--compact .gai-entity { font-weight: 500; }
.gai-table--compact .gai-delta--rise { color: var(--wp--preset--color--rise-inv); }
.gai-table--compact .gai-delta--fall { color: var(--wp--preset--color--fall-inv); }
.gai-table--compact .gai-delta--flat { color: var(--wp--preset--color--ink-inv-2); }

.gai-table--compact tbody tr.is-hover { background: rgba(255, 255, 255, 0.06); }
.gai-table--compact tbody tr.is-selected {
	background: var(--wp--preset--color--ink-inv);
}
.gai-table--compact tbody tr.is-selected td,
.gai-table--compact tbody tr.is-selected th { color: var(--wp--preset--color--ink); }
.gai-table--compact tbody tr.is-selected .gai-ledger__rank { color: var(--wp--preset--color--ink-2); }
.gai-table--compact tbody tr:focus-visible { outline: 2px solid var(--wp--preset--color--ink-inv); outline-offset: -2px; }

.gai-globe__country.is-hover { fill: var(--wp--preset--color--ink-inv); }

.gai-explorer__loading,
.gai-explorer__more {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	color: var(--wp--preset--color--ink-inv-2);
}
.gai-explorer__loading { padding: 20px 14px; }
.gai-explorer__more a { color: var(--wp--preset--color--ink-inv); text-decoration: none; }
.gai-explorer__more a:hover { text-decoration: underline; }

.gai-explorer__footnote a {
	color: var(--wp--preset--color--ink-inv);
	text-decoration: underline;
	text-underline-offset: 3px;
}
.gai-explorer__footnote a:hover { color: var(--wp--preset--color--ink-inv); text-decoration-thickness: 2px; }

.gai-explorer__footnote {
	margin-top: 32px;
	padding-top: 20px;
	border-top: 1px solid var(--wp--preset--color--rule-inv);
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	line-height: 1.6;
	color: var(--wp--preset--color--ink-inv-2);
}

@media (max-width: 1099px) {
	.gai-explorer__table { max-height: 319px; }
}

/* --------------------------------------------------------------------------
   19. Research presentation — report covers and typed research items
   -------------------------------------------------------------------------- */

.gai-research { display: grid; gap: clamp(40px, 5vw, 72px); align-items: start; }
@media (min-width: 1024px) {
	.gai-research { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
}

.gai-report { display: grid; gap: clamp(24px, 3vw, 40px); }
@media (min-width: 640px) {
	.gai-report { grid-template-columns: minmax(0, 230px) minmax(0, 1fr); align-items: start; }
}
.gai-report__cover { margin: 0; }
.gai-report__cover img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 3 / 4;
	object-fit: cover;
	border: 1px solid var(--wp--preset--color--rule);
	transition: transform var(--gai-base) var(--gai-ease);
}
.gai-report a:hover .gai-report__cover img { transform: scale(1.015); }

.gai-type {
	display: inline-block;
	padding: 4px 9px;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 10px;
	font-weight: 500;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--wp--preset--color--accent);
	border: 1px solid var(--wp--preset--color--accent-weak);
	background: var(--wp--preset--color--accent-weak);
	border-radius: 2px;
}
.gai-type--index { color: var(--wp--preset--color--ink); background: transparent; border-color: var(--wp--preset--color--rule-strong); }
.gai-type--method { color: var(--wp--preset--color--ink-2); background: transparent; border-color: var(--wp--preset--color--rule); }

.gai-report__title {
	font-family: var(--wp--preset--font-family--sans);
	font-size: var(--wp--preset--font-size--h3);
	font-weight: 600;
	line-height: 1.22;
	letter-spacing: -0.012em;
	margin: 16px 0 0;
	max-width: 22ch;
}
.gai-report__abstract {
	font-family: var(--wp--preset--font-family--serif);
	font-size: 17px;
	line-height: 1.6;
	color: var(--wp--preset--color--ink-2);
	margin: 16px 0 0;
	max-width: 46ch;
}
.gai-report__meta {
	display: flex;
	flex-wrap: wrap;
	gap: 6px 18px;
	margin-top: 20px;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink-3);
}
.gai-report__actions { margin-top: 28px; }

/* Secondary research list — typed rows, not another card grid. */
.gai-reslist { border-top: 1px solid var(--wp--preset--color--rule); }
.gai-reslist__item {
	display: block;
	padding: 22px 0;
	border-bottom: 1px solid var(--wp--preset--color--rule);
	text-decoration: none;
}
.gai-reslist__item:hover { text-decoration: none; }
.gai-reslist__head { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.gai-reslist__date {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	letter-spacing: 0.06em;
	color: var(--wp--preset--color--ink-3);
}
.gai-reslist__title {
	font-family: var(--wp--preset--font-family--sans);
	font-size: var(--wp--preset--font-size--h4);
	font-weight: 600;
	line-height: 1.32;
	color: var(--wp--preset--color--ink);
	margin: 0;
	transition: color var(--gai-fast) var(--gai-ease);
}
.gai-reslist__item:hover .gai-reslist__title { color: var(--wp--preset--color--accent); }

/* --------------------------------------------------------------------------
   20. Editorial split — 2/3 + 1/3 with a sticky aside
   -------------------------------------------------------------------------- */

.gai-split { display: grid; gap: clamp(32px, 4vw, 64px); align-items: start; }
@media (min-width: 1024px) {
	.gai-split { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); }
	.gai-split__aside { position: sticky; top: calc(var(--gai-header-h) + 40px); }
}
.gai-split__aside {
	padding-top: 20px;
	border-top: 1px solid var(--wp--preset--color--rule-strong);
}
.gai-split__aside dt {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink-3);
	margin-top: 24px;
}
.gai-split__aside dd {
	margin: 6px 0 0;
	font-family: var(--wp--preset--font-family--serif);
	font-size: 16px;
	line-height: 1.55;
	color: var(--wp--preset--color--ink-2);
}

/* Numbered editorial list — replaces a four-card pillar grid. */
.gai-pillars { border-top: 1px solid var(--wp--preset--color--rule); }
.gai-pillar {
	display: grid;
	gap: 8px 32px;
	padding: 28px 0;
	border-bottom: 1px solid var(--wp--preset--color--rule);
}
@media (min-width: 768px) {
	.gai-pillar { grid-template-columns: 56px minmax(0, 260px) minmax(0, 1fr); align-items: baseline; }
}
.gai-pillar__num {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 13px;
	color: var(--wp--preset--color--ink-3);
	font-variant-numeric: tabular-nums;
}
.gai-pillar__name {
	font-family: var(--wp--preset--font-family--sans);
	font-size: var(--wp--preset--font-size--h4);
	font-weight: 600;
	letter-spacing: -0.005em;
	margin: 0;
}
.gai-pillar__body {
	font-family: var(--wp--preset--font-family--serif);
	font-size: 17px;
	line-height: 1.6;
	color: var(--wp--preset--color--ink-2);
	margin: 0;
	max-width: 56ch;
}

/* --------------------------------------------------------------------------
   21. World map — touch and small-screen behaviour
   Touch input already worked; what failed was ergonomics. Three fixes: the
   region filter becomes one scrollable strip instead of three stacked rows,
   the flat map is rendered large enough to hit and scrolls horizontally, and
   country outlines thicken on coarse pointers because a painted stroke also
   enlarges the hit area.
   -------------------------------------------------------------------------- */

.gai-map__scrollhint {
	display: none;
	margin-top: 10px;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	letter-spacing: 0.06em;
	color: var(--wp--preset--color--ink-inv-2);
}
.gai-map[data-mode="globe"] .gai-map__scrollhint { display: none; }

/* The globe must swallow touch gestures to rotate. The flat map must not,
   or the reader cannot scroll it. */
.gai-map[data-mode="flat"] .gai-globe__svg { touch-action: auto; }

@media (pointer: coarse) {
	.gai-globe__country { stroke-width: 1.4; }
	.gai-globe__country.is-selected { stroke-width: 2; }
}

@media (max-width: 767px) {
	/* Region filter: one horizontal strip, not three wrapped rows (saves ~90px). */
	.gai-map__regions {
		flex-wrap: nowrap;
		overflow-x: auto;
		scrollbar-width: none;
		margin-inline: calc(var(--gai-gutter) * -1);
		padding-inline: var(--gai-gutter);
		padding-bottom: 4px;
	}
	.gai-map__regions::-webkit-scrollbar { display: none; }
	.gai-map__region { flex: 0 0 auto; }

	.gai-map__controls { gap: 14px; }
	.gai-map__modes { width: 100%; }
	.gai-map__mode { flex: 1 1 auto; }

	/* Flat map: at container width the median country is ~11px across, which is
	   not a hittable target. Render it wide and let the stage scroll. */
	.gai-map[data-mode="flat"] .gai-map__stage {
		overflow-x: auto;
		-webkit-overflow-scrolling: touch;
		margin-inline: calc(var(--gai-gutter) * -1);
		padding-inline: var(--gai-gutter);
	}
	.gai-map[data-mode="flat"] .gai-globe__svg { width: 980px; max-width: none; }
	.gai-map[data-mode="flat"] .gai-map__legend { padding-top: 4px; }

	.gai-map[data-mode="flat"] .gai-map__scrollhint { display: block; }
}


/* Small screens: the map is the reason readers are here, so compress the
   introduction above it rather than making them scroll ~900px to reach it. */
@media (max-width: 767px) {
	.gai-explorer-section { padding-block: 48px 56px; }
	.gai-explorer__intro { gap: 16px; margin-bottom: 24px; }
	.gai-explorer__intro h2 { max-width: 20ch; }
	.gai-explorer__intro .gai-deck { font-size: 16px; line-height: 1.55; margin-top: 0; }
	.gai-map__controls { margin-bottom: 20px; padding-bottom: 14px; }
	.gai-map__regions { margin-bottom: 20px; }
	.gai-map__fallback { font-size: 11px; line-height: 1.5; }
	.gai-explorer__side { gap: 16px; }
}

/* A row in the full published table is selectable, so it gets the same
   affordances as a row in the explorer list. */
.gai-table[data-globe-linked] tbody tr { cursor: pointer; }
.gai-table[data-globe-linked] tbody tr.is-hover { background: var(--wp--preset--color--accent-weak); }
.gai-table[data-globe-linked] tbody tr.is-selected { background: var(--wp--preset--color--ink-surface); }
.gai-table[data-globe-linked] tbody tr.is-selected td,
.gai-table[data-globe-linked] tbody tr.is-selected th { color: var(--wp--preset--color--ink-inv); }
.gai-table[data-globe-linked] tbody tr.is-selected .gai-delta--rise { color: var(--wp--preset--color--rise-inv); }
.gai-table[data-globe-linked] tbody tr.is-selected .gai-delta--fall { color: var(--wp--preset--color--fall-inv); }
.gai-table[data-globe-linked] tbody tr:focus-visible { outline: 2px solid var(--wp--preset--color--accent); outline-offset: -2px; }

/* --------------------------------------------------------------------------
   26. Legal document apparatus
   A legal notice is a dated instrument, not a page of copy. The meta strip
   carries the version and the date it took effect so a superseded version can
   be identified rather than argued about; the clause list gives every paragraph
   a stable number so correspondence can cite one.
   -------------------------------------------------------------------------- */

.gai-docmeta {
	display: grid;
	gap: 20px 40px;
	margin: 0;
	padding: 20px 0;
	border-top: 1px solid var(--wp--preset--color--rule-strong);
	border-bottom: 1px solid var(--wp--preset--color--rule);
}
@media (min-width: 768px) {
	.gai-docmeta { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
}
.gai-docmeta dt {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 11px;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink-3);
}
.gai-docmeta dd {
	margin: 6px 0 0;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 13px;
	line-height: 1.5;
	color: var(--wp--preset--color--ink-2);
	overflow-wrap: anywhere;
}
.gai-docmeta dd a { color: var(--wp--preset--color--accent); text-decoration: none; }
.gai-docmeta dd a:hover { text-decoration: underline; }

/* Numbered clauses. The counter is the point: "clause 7.2" has to mean the same
   thing in an email as it does on the page, so numbering is generated from the
   list rather than typed into the headings where it can drift. */
.gai-clauses { counter-reset: gai-clause; list-style: none; margin: 0; padding: 0; }
.gai-clause {
	counter-increment: gai-clause;
	display: grid;
	gap: 4px 24px;
	padding: 28px 0;
	border-top: 1px solid var(--wp--preset--color--rule);
}
@media (min-width: 768px) {
	.gai-clause { grid-template-columns: 48px minmax(0, 1fr); }
}
.gai-clause::before {
	content: counter(gai-clause);
	font-family: var(--wp--preset--font-family--mono);
	font-size: 12px;
	letter-spacing: 0.06em;
	color: var(--wp--preset--color--ink-3);
	padding-top: 4px;
}
.gai-clause__title {
	font-family: var(--wp--preset--font-family--sans);
	font-size: 17px;
	font-weight: 600;
	line-height: 1.35;
	color: var(--wp--preset--color--ink);
	margin: 0 0 8px;
}
.gai-clause p {
	font-family: var(--wp--preset--font-family--serif);
	font-size: 16px;
	line-height: 1.65;
	color: var(--wp--preset--color--ink-2);
	margin: 0;
}
.gai-clause p + p { margin-top: 12px; }
.gai-clause ul { margin: 12px 0 0; padding-left: 20px; }
.gai-clause li {
	font-family: var(--wp--preset--font-family--serif);
	font-size: 16px;
	line-height: 1.6;
	color: var(--wp--preset--color--ink-2);
}
.gai-clause li + li { margin-top: 8px; }
