/**
 * Forkast components.
 *
 * The design system (Direction A) rendered against real WordPress markup.
 * Reads tokens from tokens.css / theme.json — no hardcoded colors, so light and
 * dark both work. Rules over boxes; the attribution strip and source ledger are
 * the only boxed elements, marking the machine layer.
 */

/* ---- layout scaffolding --------------------------------------------- */
.fk-shell {
	max-width: 1200px;
	margin-inline: auto;
	padding-inline: clamp(1rem, 4vw, 2rem);
}
.fk-read {
	max-width: 680px;
	margin-inline: auto;
}
/* Below the column width, the reading column must not run to the screen
   edges — add side padding on narrow screens. (Desktop is unaffected: the
   680px column already floats centered in whitespace.) */
@media (max-width: 720px) {
	.fk-read { padding-inline: 1.15rem; }
}
.fk-main {
	padding-block: 1rem clamp(1.5rem, 4vw, 3rem);
}

/* ---- machine layer utility ------------------------------------------ */
.fk-mono {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--meta);
	font-weight: 500;
	line-height: 1.5;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	font-variant-numeric: tabular-nums;
}
.fk-signal { color: var(--fk-signal); }
.fk-mute { color: var(--fk-ink-mute); }
.fk-sep { color: var(--fk-hairline); }

/* ---- utility bar ---------------------------------------------------- */
.fk-utility {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	padding-block: 0.5rem;
	border-bottom: 1px solid var(--fk-hairline);
	flex-wrap: wrap;
	font-size: 0.78rem;
}
.fk-utility__right {
	display: flex;
	align-items: center;
	gap: 1rem;
	flex-wrap: wrap;
}
.fk-utility a { text-decoration: none; }
.fk-utility a:hover { color: var(--fk-signal-strong); }
.fk-live-dot {
	display: inline-block;
	width: 6px; height: 6px;
	border-radius: 50%;
	background: var(--fk-signal);
	margin-right: 6px;
	vertical-align: 1px;
}
.fk-toggle {
	font: inherit;
	letter-spacing: inherit;
	text-transform: inherit;
	background: none;
	border: 1px solid var(--fk-hairline);
	color: var(--fk-ink);
	padding: 5px 12px;
	cursor: pointer;
	transition: border-color 150ms ease;
}
/* Icon variant: square, centered glyph, no text. Shows the icon for the
   action available — moon (go dark) in light mode, sun (go light) in dark. */
.fk-toggle--icon {
	display: inline-flex; align-items: center; justify-content: center;
	padding: 6px; line-height: 0; color: var(--fk-ink-soft);
}
.fk-toggle--icon:hover { color: var(--fk-signal); border-color: var(--fk-ink); }
.fk-toggle--icon .fk-icon-sun { display: none; }
.fk-toggle--icon .fk-icon-moon { display: block; }
/* OS dark default (no explicit choice) */
@media (prefers-color-scheme: dark) {
	:root:not([data-theme="light"]) .fk-toggle--icon .fk-icon-moon { display: none; }
	:root:not([data-theme="light"]) .fk-toggle--icon .fk-icon-sun { display: block; }
}
/* Explicit dark choice always wins */
:root[data-theme="dark"] .fk-toggle--icon .fk-icon-moon { display: none; }
:root[data-theme="dark"] .fk-toggle--icon .fk-icon-sun { display: block; }
/* Explicit light choice always wins (even if OS is dark) */
:root[data-theme="light"] .fk-toggle--icon .fk-icon-moon { display: block; }
:root[data-theme="light"] .fk-toggle--icon .fk-icon-sun { display: none; }
.fk-toggle:hover { border-color: var(--fk-ink); }

/* ---- masthead ------------------------------------------------------- */
.fk-masthead {
	text-align: center;
	padding-block: clamp(1.5rem, 4vw, 2rem) 1rem;
}
.fk-lockup {
	display: inline-flex;
	align-items: center;
	text-decoration: none;
	color: var(--fk-ink);
}
.fk-lockup:hover { color: var(--fk-ink); }
/* Full lockup (icon + wordmark), scales as one unit. 719:175 ≈ 4.11 ratio. */
.fk-logo {
	display: block;
	height: clamp(32px, 5vw, 52px);
	width: auto;
	color: var(--fk-ink);
	transition: color 150ms ease;
}
/* Logo is inline SVG using currentColor for both mark and wordmark, so
   hovering the link shifts the whole lockup to the signal green together. */
.fk-lockup:hover .fk-logo,
.fk-lockup:focus-visible .fk-logo { color: var(--fk-signal-strong); }
/* Icon-only mark for footer / small uses. */
.fk-mark {
	width: clamp(38px, 6vw, 52px);
	height: auto;
	color: var(--fk-ink);
}
.fk-mark--sm { width: 26px; }
.fk-tagline {
	font-style: italic;
	color: var(--fk-ink);
	margin-right: 0.5rem;
	text-transform: none;
	letter-spacing: 0;
}
.fk-subhead {
	margin-top: 0.85rem;
	color: var(--fk-ink-mute);
	letter-spacing: 0.12em;
	font-size: 0.82rem;
}

/* ---- beat nav ------------------------------------------------------- */
.fk-nav {
	display: flex;
	justify-content: center;
	gap: clamp(1rem, 2.6vw, 2.5rem);
	flex-wrap: wrap;
	padding-block: 0.6rem;
	border-top: 2px solid var(--fk-rule);
	border-bottom: 1px solid var(--fk-rule);
	font-size: 0.82rem;
}
.fk-nav a { text-decoration: none; white-space: nowrap; }
.fk-nav a:hover { color: var(--fk-signal-strong); }
.fk-nav a[aria-current="page"] { color: var(--fk-signal); }
@media (max-width: 640px) {
	.fk-nav {
		justify-content: flex-start;
		flex-wrap: nowrap;
		overflow-x: auto;
		-webkit-overflow-scrolling: touch;
		scrollbar-width: none;
		gap: 1.35rem;
	}
	.fk-nav::-webkit-scrollbar { display: none; }
}

/* ---- article header ------------------------------------------------- */
.fk-article { padding-block: 0.75rem clamp(2rem, 5vw, 3rem); }
.fk-kicker {
	color: var(--fk-signal);
	margin-bottom: 0.5rem;
	display: flex;
	gap: 0.75rem;
	align-items: baseline;
	flex-wrap: wrap;
}
.fk-kicker a { color: var(--fk-signal); text-decoration: none; }
.fk-kicker a:hover { color: var(--fk-signal-strong); }
.fk-sponsor-tag {
	color: var(--fk-ink-mute);
	border: 1px solid var(--fk-hairline);
	padding: 2px 6px;
}
.fk-h1 {
	font-family: var(--wp--preset--font-family--serif);
	font-size: clamp(2rem, 6.5vw, 3.25rem);
	font-weight: 600;
	line-height: 1.12;
	letter-spacing: -0.015em;
	margin: 0;
	text-wrap: balance;
}
.fk-dek {
	font-size: var(--wp--preset--font-size--md);
	line-height: 1.45;
	color: var(--fk-ink-soft);
	margin-top: 0.75rem;
	max-width: 56ch;
}

/* ---- attribution strip (the signature) ------------------------------ */
.fk-attrib,
.fk-byline {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.75rem 1rem;
	margin-top: 1rem;
	padding: 0.5rem 0.75rem;
	background: var(--fk-paper-raised);
	border: 1px solid var(--fk-hairline);
}
.fk-attrib__mind {
	color: var(--fk-signal);
	text-decoration: none;
	font-weight: 500;
}
.fk-attrib__mind:hover { color: var(--fk-signal-strong); }
.fk-attrib__sources { color: var(--fk-ink); text-decoration: none; }
.fk-attrib__sources:hover { color: var(--fk-signal-strong); text-decoration: underline; }
.fk-byline a { color: var(--fk-ink); }

/* ---- figure + duotone ----------------------------------------------- */
.fk-figure { margin: 1.5rem 0 0; }
.fk-figure img {
	width: 100%;
	height: auto;
	display: block;
	filter: var(--fk-img-dim);
	aspect-ratio: 3 / 2;
	object-fit: cover;
}
.fk-figure figcaption {
	margin-top: 0.5rem;
	color: var(--fk-ink-mute);
	text-transform: none;
	letter-spacing: 0.04em;
}

/* ---- body prose ----------------------------------------------------- */
.fk-body {
	margin-top: 1.5rem;
	font-size: var(--wp--preset--font-size--base);
	line-height: 1.58;
}
.fk-body > p { margin-block: 0 1rem; }
.fk-body h2 {
	font-size: var(--wp--preset--font-size--lg);
	margin-top: 2.5rem;
}
.fk-body h3 {
	font-size: var(--wp--preset--font-size--md);
	margin-top: 2rem;
}
.fk-body a { text-underline-offset: 2px; }

/* ---- in-article illustrations --------------------------------------- *
 * Images the artist mind places inside the article body (supporting ink
 * illustrations and diagrams for long features). Full reading-column width by
 * default; add .fk-illo--inset for a smaller, quieter spot. Captions in the
 * mono machine-layer. No duotone: Forkast Ink art is already monochrome, and
 * filtering it would muddy the hatching that makes it premium.               */
.fk-body figure,
.fk-body .wp-block-image {
	margin: 2rem 0;
}
.fk-body figure img,
.fk-body .wp-block-image img,
.fk-body > img {
	width: 100%;
	height: auto;
	display: block;
	filter: var(--fk-img-dim);
}
.fk-body figcaption,
.fk-body .wp-block-image figcaption {
	margin-top: 0.6rem;
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--meta);
	line-height: 1.4;
	color: var(--fk-ink-mute);
	letter-spacing: 0.04em;
	text-align: left;
}
/* A quieter, narrower spot illustration — sits inside the column, doesn't
   compete with the hero. The artist mind adds this class when it wants a
   supporting spot rather than a full-width plate. */
.fk-body figure.fk-illo--inset {
	max-width: 62%;
	margin-inline: auto;
}
@media (max-width: 720px) {
	.fk-body figure.fk-illo--inset { max-width: 100%; }
	.fk-body figure,
	.fk-body .wp-block-image { margin: 1.5rem 0; }
}

/* ---- blockquote (source quotes in article body) --------------------- *
 * The newsroom pipeline emits raw <blockquote><p>…</p></blockquote>, so we
 * style the bare tag (and the block-editor equivalent) rather than relying on
 * theme.json's core/quote rule, which only fires for real quote blocks.
 * Treatment: an inset panel on raised paper with a signal-green top rule —
 * reads as testimony/document extract, and the green rule keeps it anchored in
 * dark mode where the "raised" surface lift is subtle. No italic: at length it
 * hurts readability and reads as an aside rather than someone on the record.  */
.fk-body blockquote,
.fk-body .wp-block-quote {
	margin: 2rem 0;
	padding: 1.25rem 1.5rem;
	background: var(--fk-paper-raised);
	border-top: 2px solid var(--fk-rule);
	border-bottom: 1px solid var(--fk-hairline);
	border-left: 0;
	border-right: 0;
	font-style: italic;
}
.fk-body blockquote p,
.fk-body blockquote cite,
.fk-body .wp-block-quote p,
.fk-body .wp-block-quote cite {
	display: block;
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--md);
	line-height: 1.4;
	color: var(--fk-ink);
	margin: 0 0 0.75rem;
	font-style: italic;
	/* reset any UA/utility styling that would otherwise leak in */
	letter-spacing: normal;
	text-transform: none;
}
.fk-body blockquote p:last-child,
.fk-body blockquote cite:last-child,
.fk-body .wp-block-quote p:last-child,
.fk-body .wp-block-quote cite:last-child { margin-bottom: 0; }
@media (max-width: 720px) {
	.fk-body blockquote,
	.fk-body .wp-block-quote { padding: 1rem 1.15rem; margin: 1.5rem 0; }
}

/* source markers */
.fk-src { line-height: 0; }
.fk-src a {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.65em;
	font-weight: 500;
	color: var(--fk-signal-strong);
	text-decoration: none;
	vertical-align: super;
	margin-left: 1px;
}
.fk-src a:hover { text-decoration: underline; }

/* pull + inline quotes */
.fk-pull {
	border-left: 2px solid var(--fk-signal);
	padding-left: 1.5rem;
	margin: 2rem 0;
	font-size: var(--wp--preset--font-size--md);
	font-style: italic;
	line-height: 1.45;
}
.fk-pull cite { display: block; margin-top: 0.75rem; font-style: normal; }
.fk-quote-inline { font-style: italic; }

/* ---- source ledger -------------------------------------------------- */
.fk-ledger {
	border: 1px solid var(--fk-hairline);
	background: var(--fk-paper-raised);
	margin-top: 2.5rem;
	scroll-margin-top: 1.5rem;
}
.fk-ledger__head {
	display: flex;
	justify-content: space-between;
	gap: 1rem;
	padding: 0.75rem;
	border-bottom: 1px solid var(--fk-hairline);
}
.fk-ledger__row {
	display: grid;
	grid-template-columns: 2rem 1fr auto;
	gap: 0.75rem;
	padding: 0.75rem;
	border-bottom: 1px solid var(--fk-hairline);
	font-size: var(--wp--preset--font-size--small);
	line-height: 1.45;
	scroll-margin-top: 1.5rem;
}
.fk-ledger__row:last-child { border-bottom: none; }
.fk-ledger__row:target { background: var(--fk-signal-tint); }
.fk-ledger__n { color: var(--fk-signal); }
.fk-ledger__claim { color: var(--fk-ink-soft); }
.fk-ledger__who { text-align: right; }
.fk-ledger__who a {
	text-decoration: none;
	border-bottom: 1px solid var(--fk-hairline);
	color: var(--fk-ink);
}
.fk-ledger__who a:hover { border-color: var(--fk-signal); color: var(--fk-signal-strong); }
@media (max-width: 560px) {
	.fk-ledger__row { grid-template-columns: 1.5rem 1fr; }
	.fk-ledger__who { grid-column: 2; text-align: left; margin-top: 0.25rem; }
}

/* ---- related -------------------------------------------------------- */
.fk-related { margin-top: 3rem; padding-top: 1rem; border-top: 2px solid var(--fk-rule); }
.fk-related__head {
	display: flex;
	justify-content: space-between;
	gap: 1rem;
	padding-bottom: 0.75rem;
}
.fk-related__head a { text-decoration: none; color: var(--fk-signal); }
.fk-related__grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
	gap: 1.5rem;
}
.fk-related__title {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--md);
	font-weight: 600;
	line-height: 1.25;
	margin: 0;
}
.fk-related__title a { text-decoration: none; color: var(--fk-ink); }
.fk-related__title a:hover { text-decoration: underline; text-underline-offset: 3px; }
.fk-attrib-compact { margin-top: 0.5rem; color: var(--fk-ink-mute); }

/* ---- evergreen maintained footer ------------------------------------ */
.fk-maintained {
	margin-top: 2rem;
	padding: 0.75rem;
	border: 1px solid var(--fk-hairline);
	background: var(--fk-paper-raised);
	color: var(--fk-ink-mute);
	display: flex;
	gap: 0.5rem;
	flex-wrap: wrap;
	align-items: center;
}
.fk-maintained__glyph { color: var(--fk-signal); }
.fk-maintained a { color: var(--fk-ink); text-decoration: none; }
.fk-maintained .fk-activate { color: var(--fk-signal); }
.fk-maintained a:hover { color: var(--fk-signal-strong); }

/* ---- ads ------------------------------------------------------------ */
/* ---- ad slots -------------------------------------------------------- *
 * Every ad — live or placeholder — sits in a cordoned frame: a hairline
 * rule, a mono "ADVERTISEMENT" label with tick marks, and generous air.
 * This reads as a designated ad area in a serious publication, so a color
 * creative is contained rather than contaminating the editorial field.    */
.fk-ad {
	margin-block: 2rem;
	padding: 0.75rem 1rem 1rem;
	border-top: 1px solid var(--fk-hairline);
	border-bottom: 1px solid var(--fk-hairline);
	background: var(--fk-paper-raised);
	background: color-mix(in srgb, var(--fk-paper-raised) 60%, transparent);
	text-align: center;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.6rem;
}
.fk-ad__label {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	color: var(--fk-ink-mute);
	font-size: 0.62rem;
	letter-spacing: 0.22em;
	text-transform: uppercase;
}
.fk-ad__label::before,
.fk-ad__label::after {
	content: "";
	width: 14px;
	height: 1px;
	background: var(--fk-hairline);
}
.fk-ad__inner { width: 100%; display: flex; justify-content: center; }
/* Collapse the whole slot when AdSense reports the unit unfilled, so an
   unserved ad leaves no gap. Filled ads are untouched and size naturally. */
.fk-ad:has(.adsbygoogle[data-ad-status="unfilled"]) { display: none; }
/* Fallback for browsers without :has — hide just the empty <ins> so it can't
   reserve a tall box; the framed label stays but the cavern closes. */
.adsbygoogle[data-ad-status="unfilled"] { display: none !important; }
.fk-ad--in-article {
	margin-block: 2.75rem;
	max-height: 280px;
	overflow: hidden;
}
.fk-ad--sidebar { margin-block: 0; }
.fk-ad--placeholder {
	border: 1px dashed var(--fk-hairline);
	padding: 2.25rem 1rem;
	background: var(--fk-paper-raised);
}
.fk-ad--placeholder .fk-ad__label { color: var(--fk-signal); }

/* ---- reading progress ----------------------------------------------- */
.fk-progress {
	position: fixed;
	top: 0; left: 0;
	height: 2px;
	width: 0;
	background: var(--fk-signal);
	z-index: 100;
	transition: width 80ms linear;
}
@media (prefers-reduced-motion: reduce) {
	.fk-progress { transition: none; }
}

/* ---- footer --------------------------------------------------------- */
.fk-footer {
	border-top: 2px solid var(--fk-rule);
	padding-block: 2.5rem 4rem;
	margin-top: 4rem;
}
.fk-footer__grid {
	display: grid;
	grid-template-columns: 1.5fr 1fr 1fr 1fr;
	gap: 2rem;
}
@media (max-width: 700px) {
	.fk-footer__grid { grid-template-columns: 1fr 1fr; }
}
.fk-footer__h { color: var(--fk-ink); margin-bottom: 0.75rem; }
.fk-footer__col ul { list-style: none; margin: 0; padding: 0; }
.fk-footer__col li { margin-bottom: 0.3rem; }
.fk-footer__col a {
	text-decoration: none;
	color: var(--fk-ink-soft);
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--small);
	line-height: 1.3;
	display: inline-block;
}
.fk-footer__col a:hover { color: var(--fk-signal-strong); }
.fk-footer__brand p { margin-top: 0.75rem; }
.fk-footer__base {
	display: flex;
	justify-content: space-between;
	gap: 1rem;
	flex-wrap: wrap;
	margin-top: 2.5rem;
	padding-top: 1rem;
	border-top: 1px solid var(--fk-hairline);
}

/* ---- index fallback river ------------------------------------------- */
.fk-index-item { padding-block: 1.5rem; border-bottom: 1px solid var(--fk-hairline); }
.fk-index-title { font-size: var(--wp--preset--font-size--lg); }
.fk-index-title a { text-decoration: none; color: var(--fk-ink); }
.fk-index-title a:hover { text-decoration: underline; }
.fk-index-dek { color: var(--fk-ink-soft); margin-top: 0.5rem; }

/* ---- archive header ------------------------------------------------- */
.fk-archive-header {
	/* Was clamp(1.5rem, 4vw, 2.5rem): on a wide window that resolved to the full
	   2.5rem, so with .fk-main's own 1rem there was ~56px of dead space above the
	   kicker. Article pages spend a comparable gap on the breadcrumb, which
	   contains text — here it was simply empty, which read as a layout error. */
	padding-block: clamp(1rem, 2.5vw, 1.5rem) 1rem;
	border-bottom: 2px solid var(--fk-rule);
}
.fk-archive-header__title {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--xl);
	font-weight: 600;
	line-height: 1.1;
	letter-spacing: -0.015em;
	margin: 0.25rem 0 0;
}
.fk-archive-header__desc {
	font-size: var(--wp--preset--font-size--md);
	color: var(--fk-ink-soft);
	line-height: 1.45;
	margin-top: 0.5rem;
	max-width: 60ch;
}
.fk-archive-header__lead { margin-top: 0.75rem; color: var(--fk-ink-mute); }
/* Editorial intro on hub archives. Set at body size rather than dek size —
   it's prose to be read, not a standfirst, and it carries the ranking weight
   for the cluster term. */
.fk-archive-header__intro {
	margin-top: 0.9rem;
	max-width: 68ch;
	color: var(--fk-ink-soft);
}
.fk-archive-header__intro p {
	font-size: var(--wp--preset--font-size--base);
	line-height: var(--wp--custom--fk--leading--body);
	margin: 0 0 0.85rem;
}
.fk-archive-header__intro p:last-child { margin-bottom: 0; }
.fk-archive-header__intro a { color: var(--fk-signal); text-underline-offset: 2px; }
.fk-archive-header__lead a { color: var(--fk-signal); text-decoration: none; }

/* ---- archive layout: river + sidebar -------------------------------- */
.fk-archive-layout {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 300px;
	gap: clamp(2rem, 5vw, 3.5rem);
	margin-top: 1.5rem;
	align-items: start;
}
@media (max-width: 900px) {
	.fk-archive-layout { grid-template-columns: 1fr; }
	.fk-archive-aside { display: none; } /* keep mobile lean; ad + rail are desktop rail furniture */
}

/* the query loop renders <ul class="wp-block-post-template fk-river"><li>… */
.wp-block-post-template.fk-river {
	list-style: none;
	margin: 0;
	padding: 0;
	display: block;
}
.wp-block-post-template.fk-river > li { margin: 0; }

/* ---- story card + lead/river hierarchy (emphasis by position) -------- */
.fk-card {
	display: block;
	padding-block: 1.25rem;
	border-bottom: 1px solid var(--fk-hairline);
}
.fk-card__kicker { color: var(--fk-signal); margin-bottom: 0.4rem; }
.fk-card__title {
	font-family: var(--wp--preset--font-family--serif);
	font-weight: 600;
	line-height: 1.22;
	letter-spacing: -0.01em;
	font-size: var(--wp--preset--font-size--lg);
	margin: 0;
}
.fk-card__title a { text-decoration: none; color: var(--fk-ink); }
.fk-card__title a:hover { text-decoration: underline; text-underline-offset: 3px; }
.fk-card__dek {
	display: none; /* river stays tight; the lead reveals its dek below */
	color: var(--fk-ink-soft);
	line-height: 1.45;
	margin-top: 0.5rem;
	max-width: 60ch;
}
.fk-card .fk-attrib-compact { margin-top: 0.5rem; color: var(--fk-ink-mute); }
.fk-card__media { display: none; } /* text-forward river by default */
.fk-card__media img {
	width: 100%;
	height: auto;
	filter: var(--fk-img-dim);
	aspect-ratio: 3 / 2;
	object-fit: cover;
}

/* The lead: first item on the page earns image + dek + a larger headline. */
.fk-river > li:first-child .fk-card {
	padding-bottom: 1.75rem;
	border-bottom: 2px solid var(--fk-rule);
	margin-bottom: 0.5rem;
}
.fk-river > li:first-child .fk-card__media { display: block; margin-bottom: 1rem; }
.fk-river > li:first-child .fk-card__title { font-size: var(--wp--preset--font-size--xxl); line-height: 1.12; }
.fk-river > li:first-child .fk-card__dek { display: block; font-size: var(--wp--preset--font-size--md); }

/* ---- sidebar rail --------------------------------------------------- */
.fk-archive-aside { position: sticky; top: 1.5rem; }
.fk-rail { margin-top: 1.5rem; }
.fk-rail__head {
	border-bottom: 1px solid var(--fk-rule);
	padding-bottom: 0.5rem;
	letter-spacing: 0.14em;
}
.fk-rail__item { padding-block: 0.9rem; border-bottom: 1px solid var(--fk-hairline); }
.fk-rail__item:last-child { border-bottom: none; }
.fk-rail__title {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--md);
	font-weight: 600;
	line-height: 1.25;
	/* Both sides explicitly: as a <p> this inherits the UA's 1em bottom margin,
	   which stacked with the meta line's own margin into a ~22px gap. */
	margin: 0.3rem 0 0;
}
.fk-rail__title a { text-decoration: none; color: var(--fk-ink); }
.fk-rail__title a:hover { text-decoration: underline; }
/* Beat above the headline, timestamp below — the same order as every card on
   the site. The rail previously ran "11:45 · MONEY & MARKETS" on one line, which
   was two inconsistencies at once: metadata above the headline, and a clock time
   where everything else shows relative freshness. */
.fk-rail__beat {
	margin: 0 0 0.25rem;
	font-size: var(--wp--preset--font-size--meta);
	letter-spacing: var(--wp--custom--fk--tracking--mono-caps);
	text-transform: uppercase;
}
.fk-rail__meta {
	margin: 0.4rem 0 0;
	font-size: var(--wp--preset--font-size--meta);
	letter-spacing: var(--wp--custom--fk--tracking--mono-caps);
	text-transform: uppercase;
	color: var(--fk-ink-mute);
}

/* ---- pagination ----------------------------------------------------- */
.fk-pagination {
	display: flex;
	gap: 1rem;
	align-items: center;
	margin-top: 2rem;
	padding-top: 1rem;
	border-top: 1px solid var(--fk-hairline);
}
.fk-pagination .wp-block-query-pagination-numbers { display: flex; gap: 0.75rem; }
.fk-pagination a, .fk-pagination .page-numbers { text-decoration: none; color: var(--fk-ink-mute); }
.fk-pagination a:hover { color: var(--fk-signal-strong); }
.fk-pagination .page-numbers.current { color: var(--fk-signal); }
.fk-empty { color: var(--fk-ink-mute); padding-block: 2rem; }

/* ---- accessibility -------------------------------------------------- */
.fk-skip-link {
	position: absolute;
	left: -9999px;
	top: 0;
	background: var(--fk-ink);
	color: var(--fk-paper);
	padding: 0.5rem 1rem;
	z-index: 200;
}
.fk-skip-link:focus { left: 0; }

/* ---- evergreen: explainer ------------------------------------------- */
.fk-explainer-head { padding-block: clamp(2rem, 5vw, 3rem) 0; }
.fk-updated {
	color: var(--fk-signal);
	margin-top: 1rem;
	letter-spacing: 0.1em;
}
.fk-faq {
	margin-top: 3rem;
	padding-top: 1rem;
	border-top: 2px solid var(--fk-rule);
}
.fk-faq__head { color: var(--fk-ink-mute); letter-spacing: 0.14em; margin-bottom: 1rem; }
.fk-faq__item { padding-block: 1.25rem; border-bottom: 1px solid var(--fk-hairline); }
.fk-faq__item:last-child { border-bottom: none; }
.fk-faq__q {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--md);
	font-weight: 600;
	line-height: 1.3;
	margin: 0;
}
.fk-faq__a { color: var(--fk-ink-soft); line-height: 1.58; margin-top: 0.5rem; }

/* ---- evergreen: glossary term --------------------------------------- */
.fk-term__head { padding-block: clamp(2rem, 5vw, 3rem) 0; }
.fk-term__def {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--lg);
	line-height: 1.4;
	color: var(--fk-ink);
	margin-top: 1rem;
	padding-left: 1.5rem;
	border-left: 2px solid var(--fk-signal);
}
.fk-term__body { margin-top: 2rem; }
.fk-seealso, .fk-term__topics {
	margin-top: 2rem;
	padding-top: 1rem;
	border-top: 1px solid var(--fk-hairline);
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem 0.75rem;
	align-items: baseline;
}
.fk-seealso__label, .fk-term__topics .fk-mute { color: var(--fk-ink-mute); margin-right: 0.5rem; }
.fk-seealso a, .fk-term__topics a { color: var(--fk-signal); text-decoration: none; }
.fk-seealso a:hover, .fk-term__topics a:hover { color: var(--fk-signal-strong); text-decoration: underline; }

/* auto-linked glossary references in body copy */
.fk-glossary-link {
	text-decoration: none;
	border-bottom: 1px dotted var(--fk-signal);
	color: inherit;
}
.fk-glossary-link:hover { color: var(--fk-signal-strong); border-bottom-style: solid; }

/* ---- evergreen: Learn hub grid + callout ---------------------------- */
.wp-block-post-template.fk-grid {
	list-style: none; margin: 1.5rem 0 0; padding: 0;
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
	gap: 2rem 2.5rem;
}
.fk-grid > li .fk-card { border-bottom: none; padding-block: 0; }
.fk-grid > li .fk-card__dek { display: block; }
.fk-grid > li { padding-bottom: 1.5rem; border-bottom: 1px solid var(--fk-hairline); }

.fk-callout {
	display: block;
	margin-top: 3rem;
	padding: 1.5rem;
	border: 1px solid var(--fk-hairline);
	background: var(--fk-paper-raised);
	text-decoration: none;
	transition: border-color 150ms ease;
}
.fk-callout:hover { border-color: var(--fk-signal); }
.fk-callout__eyebrow { display: block; letter-spacing: 0.14em; }
.fk-callout__title {
	display: block;
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--lg);
	font-weight: 600;
	color: var(--fk-ink);
	margin-top: 0.5rem;
}
.fk-callout__meta { display: block; color: var(--fk-signal); margin-top: 0.5rem; }

/* ---- evergreen: glossary A–Z index ---------------------------------- */
.fk-glossary-index { margin-top: 1.5rem; }
.fk-glossary-jump {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem 0.75rem;
	padding-block: 1rem;
	border-block: 1px solid var(--fk-hairline);
	position: sticky;
	top: 0;
	background: var(--fk-paper);
	z-index: 10;
}
.fk-glossary-jump a { text-decoration: none; color: var(--fk-signal); }
.fk-glossary-jump a:hover { color: var(--fk-signal-strong); }
.fk-glossary-group { padding-top: 1.5rem; scroll-margin-top: 3rem; }
.fk-glossary-letter {
	color: var(--fk-signal);
	font-size: var(--wp--preset--font-size--lg);
	letter-spacing: 0.14em;
	border-bottom: 2px solid var(--fk-rule);
	padding-bottom: 0.5rem;
}
.fk-glossary-list { list-style: none; margin: 0; padding: 0; }
.fk-glossary-list li {
	padding-block: 0.9rem;
	border-bottom: 1px solid var(--fk-hairline);
	display: grid;
	grid-template-columns: minmax(180px, 260px) 1fr;
	gap: 1rem;
	align-items: baseline;
}
@media (max-width: 600px) { .fk-glossary-list li { grid-template-columns: 1fr; gap: 0.25rem; } }
.fk-glossary-term {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--md);
	font-weight: 600;
	text-decoration: none;
	color: var(--fk-ink);
}
.fk-glossary-term:hover { text-decoration: underline; }
.fk-glossary-def { color: var(--fk-ink-soft); line-height: 1.45; }

/* ---- utility ------------------------------------------------------- */
.fk-visually-hidden {
	position: absolute !important;
	width: 1px; height: 1px;
	padding: 0; margin: -1px;
	overflow: hidden; clip: rect(0,0,0,0);
	white-space: nowrap; border: 0;
}

/* ---- format: analysis + feature tags -------------------------------- */
.fk-format-tag {
	color: var(--fk-ink-mute);
	border: 1px solid var(--fk-hairline);
	padding: 2px 6px;
}
.fk-legacy-note { margin-top: 0.5rem; }
.fk-legacy-note a { color: var(--fk-ink-mute); text-decoration: none; }
.fk-legacy-note a:hover { color: var(--fk-signal-strong); }

/* immersive feature: full-bleed hero + centered titling */
.fk-article-head--feature { padding-block: 0; }
.fk-figure--hero {
	margin: 0 calc(50% - 50vw) 1.5rem;
	max-width: 100vw;
}
.fk-figure--hero img { aspect-ratio: 16 / 9; width: 100%; object-fit: cover; }
.fk-feature-titling { text-align: center; max-width: 720px; margin-inline: auto; }
.fk-feature-titling .fk-kicker { justify-content: center; }
.fk-feature-titling .fk-h1 { font-size: clamp(2.25rem, 8vw, 4.5rem); line-height: 1.05; }
.fk-feature-titling .fk-dek { margin-inline: auto; font-size: var(--wp--preset--font-size--lg); }
.fk-feature-titling .fk-attrib,
.fk-feature-titling .fk-byline { justify-content: center; display: inline-flex; }
/* feature/analysis reading treatment: more generous rhythm */
.fk-format-feature .fk-body, .fk-format-analysis .fk-body { font-size: calc(var(--wp--preset--font-size--base) + 0.0625rem); }
.fk-format-feature .fk-body > p { margin-bottom: 1.35rem; }
.fk-format-feature .fk-body h2 { text-align: center; margin-top: 3rem; }

/* ---- directory: agent profile --------------------------------------- */
.fk-agent__head { padding-block: clamp(2rem, 5vw, 3rem) 0; }
.fk-agent__titlerow { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; }
.fk-ethoswarm {
	color: var(--fk-signal-strong);
	background: var(--fk-signal-tint);
	border: 1px solid var(--fk-signal);
	padding: 3px 8px;
	letter-spacing: 0.08em;
}
.fk-agent__spec {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 1.5rem 2rem;
	align-items: start;
	margin-top: 1.5rem;
	padding: 1.25rem;
	border: 1px solid var(--fk-hairline);
	background: var(--fk-paper-raised);
}
.fk-agent__score { text-align: center; }
.fk-agent__score-n {
	display: block;
	font-family: var(--wp--preset--font-family--serif);
	font-size: 3rem;
	font-weight: 600;
	line-height: 1;
	color: var(--fk-signal);
}
.fk-agent__score-l { display: block; color: var(--fk-ink-mute); margin-top: 0.25rem; }
.fk-agent__score-l a { color: var(--fk-signal); text-decoration: none; }
.fk-agent__facts { display: grid; gap: 0.75rem; align-content: start; }
.fk-agent__facts div { display: flex; gap: 0.75rem; }
.fk-agent__facts dt { color: var(--fk-ink-mute); min-width: 84px; margin: 0; }
.fk-agent__facts dd { margin: 0; color: var(--fk-ink); }
.fk-agent__facts a { color: var(--fk-signal); text-decoration: none; }
.fk-agent__cta {
	grid-column: 1 / -1;
	display: inline-block;
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--meta);
	letter-spacing: 0.1em;
	text-transform: uppercase;
	text-decoration: none;
	color: var(--fk-signal);
	border: 1px solid var(--fk-signal);
	padding: 8px 14px;
	justify-self: start;
}
.fk-agent__cta:hover { background: var(--fk-signal-tint); color: var(--fk-signal-strong); }
.fk-agent__caps { margin-top: 2rem; }
.fk-agent__caps-head { color: var(--fk-ink-mute); letter-spacing: 0.14em; margin-bottom: 0.5rem; }
.fk-agent__caps ul { margin: 0; padding-left: 1.2rem; }
.fk-agent__caps li { margin-bottom: 0.4rem; }
.fk-agent__body { margin-top: 2rem; }
@media (max-width: 560px) { .fk-agent__spec { grid-template-columns: 1fr; } }

/* ---- directory: index ----------------------------------------------- */
.fk-directory { margin-top: 1.5rem; }
.fk-dir-card {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 1rem;
	padding: 1rem 0;
	border-bottom: 1px solid var(--fk-hairline);
	text-decoration: none;
}
.fk-dir-card:hover .fk-dir-card__name { color: var(--fk-signal-strong); }
.fk-dir-card__cat { margin-bottom: 0.25rem; }
.fk-dir-card__name {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--md);
	font-weight: 600;
	margin: 0;
	color: var(--fk-ink);
	display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap;
}
.fk-dir-card__dev { margin-top: 0.25rem; }
.fk-dir-card__score {
	font-family: var(--wp--preset--font-family--serif);
	font-size: 1.75rem;
	font-weight: 600;
	color: var(--fk-signal);
	font-variant-numeric: tabular-nums;
}

/* ---- directory: ranking --------------------------------------------- */
.fk-ranking { list-style: none; margin: 1.5rem 0 0; padding: 0; counter-reset: rank; }
.fk-rank {
	display: grid;
	grid-template-columns: 2.5rem 1fr auto;
	gap: 1rem;
	align-items: start;
	padding: 1.25rem 0;
	border-bottom: 1px solid var(--fk-hairline);
}
.fk-rank__n { color: var(--fk-signal); font-size: var(--wp--preset--font-size--small); padding-top: 0.35rem; }
.fk-rank__name {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--md);
	font-weight: 600;
	margin: 0;
	display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap;
}
.fk-rank__name a { text-decoration: none; color: var(--fk-ink); }
.fk-rank__name a:hover { color: var(--fk-signal-strong); }
.fk-rank__dek { color: var(--fk-ink-soft); margin-top: 0.35rem; line-height: 1.45; }
.fk-rank__score {
	font-family: var(--wp--preset--font-family--serif);
	font-size: 1.75rem; font-weight: 600; color: var(--fk-signal);
	font-variant-numeric: tabular-nums;
}

/* ---- podcast -------------------------------------------------------- */
.fk-episode__head { padding-block: clamp(2rem, 5vw, 3rem) 0; }
.fk-episode__brand {
	color: var(--fk-signal);
	margin-top: 0.75rem;
	letter-spacing: 0.1em;
}
.fk-episode__player {
	margin-top: 1.5rem;
	aspect-ratio: 16 / 9;
	background: var(--fk-ink);
}
.fk-episode__player iframe { width: 100%; height: 100%; border: 0; display: block; }
.fk-episode__notes { margin-top: 1.5rem; }
.fk-podcast { margin-top: 1.5rem; display: grid; gap: 1.5rem; }
.fk-pod-card {
	display: grid;
	grid-template-columns: 200px 1fr;
	gap: 1.25rem;
	text-decoration: none;
	padding-bottom: 1.5rem;
	border-bottom: 1px solid var(--fk-hairline);
}
.fk-pod-card__media img { width: 100%; height: auto; aspect-ratio: 16/9; object-fit: cover; filter: var(--fk-img-dim); }
.fk-pod-card__body { display: block; }
.fk-pod-card__title {
	display: block;
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--md);
	font-weight: 600;
	color: var(--fk-ink);
	margin-top: 0.25rem;
	line-height: 1.25;
}
.fk-pod-card:hover .fk-pod-card__title { color: var(--fk-signal-strong); }
.fk-pod-card__dek { display: block; color: var(--fk-ink-soft); margin-top: 0.4rem; line-height: 1.45; }
@media (max-width: 560px) { .fk-pod-card { grid-template-columns: 1fr; } }

/* ---- newsletter ----------------------------------------------------- */
.fk-newsletter {
	border: 1px solid var(--fk-hairline);
	background: var(--fk-paper-raised);
	padding: 1.5rem;
}
.fk-newsletter__head {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--lg);
	font-weight: 600;
	margin: 0;
	line-height: 1.2;
}
.fk-newsletter__sub { color: var(--fk-ink-mute); margin-top: 0.4rem; letter-spacing: 0.04em; text-transform: none; }
/* Cap the capture at a sane measure. An email is ~40 characters; a field
   spanning the full page reads as "long input expected" and leaves the block
   visually unbalanced against the headline above it. */
.fk-newsletter__form {
	display: flex;
	gap: 0.5rem;
	margin-top: 0.85rem;
	flex-wrap: wrap;
	align-items: center;
	max-width: 34rem;
}
.fk-newsletter__form input[type="email"] {
	flex: 1 1 220px;
	min-height: 44px;
	padding: 0 0.75rem;
	border: 1px solid var(--fk-hairline);
	background: var(--fk-paper);
	color: var(--fk-ink);
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--base);
}
/* Placeholder in the mono machine-layer, matching every other utility label. */
.fk-newsletter__form input[type="email"]::placeholder {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--meta);
	letter-spacing: 0.04em;
	color: var(--fk-ink-mute);
	opacity: 1;
}
.fk-newsletter__form input[type="email"]:focus { border-color: var(--fk-signal); }
/* Outlined, not filled. A solid paper-on-ink button is the loudest element on
   the page in dark mode — louder than the headline — which inverts the
   hierarchy on a page built around restraint. Solid fills are reserved for the
   Ethoswarm CTA, where being loudest is the point. */
.fk-newsletter__form button {
	min-height: 44px;
	padding: 0 1.25rem;
	border: 1px solid var(--fk-rule);
	background: transparent;
	color: var(--fk-ink);
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--meta);
	letter-spacing: 0.1em;
	text-transform: uppercase;
	cursor: pointer;
	transition: background 150ms ease, color 150ms ease, border-color 150ms ease;
}
.fk-newsletter__form button:hover {
	background: var(--fk-ink);
	color: var(--fk-paper);
	border-color: var(--fk-ink);
}
.fk-newsletter__form button:disabled { opacity: 0.5; cursor: default; background: transparent; color: var(--fk-ink); }
.fk-newsletter__msg { flex-basis: 100%; color: var(--fk-signal); margin: 0.25rem 0 0; text-transform: none; letter-spacing: 0.04em; min-height: 1em; }

.fk-newsletter--inline { margin-block: 2.5rem; }
.fk-newsletter--landing { border-width: 2px; padding: 2.5rem; text-align: center; }
.fk-newsletter--landing .fk-newsletter__head { font-size: var(--wp--preset--font-size--xl); }
.fk-newsletter--landing .fk-newsletter__form { justify-content: center; }
.fk-newsletter--footer { border: none; background: none; padding: 0 0 2rem; border-bottom: 1px solid var(--fk-hairline); margin-bottom: 2rem; }
.fk-footer__capture { padding-top: 0.5rem; }

/* ---- homepage: curation engine -------------------------------------- */
.fk-home { padding-block: 1.5rem 3rem; }
.fk-home-top {
	display: grid;
	grid-template-columns: 1.7fr 1fr;
	gap: clamp(2rem, 5vw, 3.5rem);
	padding-bottom: 2rem;
	/* No bottom rule. It sat ~25px above the green beat rules and did the same
	   job they do — mark a new section — so the two read as one confused
	   double-rule, with the heavier white line dominating the more important
	   green markers. The beat rules announce the section on their own. */
}
@media (max-width: 900px) {
	.fk-home-top { grid-template-columns: 1fr; }
	.fk-home-rail { border-top: 1px solid var(--fk-hairline); padding-top: 1.5rem; }
}

/* hero (lead) */
.fk-hero { display: block; }
.fk-hero__media { display: block; margin-bottom: 1rem; }
.fk-hero__media img {
	width: 100%; height: auto;
	aspect-ratio: 3 / 2; object-fit: cover;
	filter: var(--fk-img-dim);
}
.fk-hero .fk-kicker { color: var(--fk-signal); margin-bottom: 0.5rem; }
.fk-hero .fk-kicker a { color: var(--fk-signal); text-decoration: none; }
.fk-hero__title {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--xxl);
	font-weight: 600;
	line-height: 1.1;
	letter-spacing: -0.015em;
	margin: 0;
}
.fk-hero__title a { text-decoration: none; color: var(--fk-ink); }
.fk-hero__title a:hover { text-decoration: underline; text-underline-offset: 3px; }
.fk-hero__dek {
	font-size: var(--wp--preset--font-size--md);
	line-height: 1.45;
	color: var(--fk-ink-soft);
	margin-top: 0.75rem;
	max-width: 60ch;
}

/* secondary featured under the hero */
.fk-home-secondary {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 1.5rem;
	margin-top: 1.5rem;
	padding-top: 1.5rem;
	border-top: 1px solid var(--fk-hairline);
}
@media (max-width: 560px) { .fk-home-secondary { grid-template-columns: 1fr; } }
.fk-home-secondary .fk-card { padding-block: 0; border-bottom: none; }
.fk-home-secondary .fk-card__title { font-size: var(--wp--preset--font-size--md); }
.fk-home-secondary .fk-card__dek { display: none; }
/* These two are the homepage's second tier (placement=featured). They ship with
   hero illustrations, but the band was styled text-only — so the images were in
   the markup and hidden by CSS, leaving a pair of unlabelled text cards floating
   between the hero and the beat grid. Showing them gives the tier an identity.
   Cards without a thumbnail still render fine: fk_card_markup only outputs the
   media element when one exists. */
.fk-home-secondary .fk-card__media { display: block; margin-bottom: 0.75rem; }

/* per-beat modules */
.fk-home-beats {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
	gap: 2rem 2.5rem;
	padding-top: 2rem;
}
.fk-beat-module { border-top: 3px solid var(--fk-signal); padding-top: 0.75rem; }
.fk-beat-module__head { margin: 0 0 0.75rem; letter-spacing: 0.1em; }
.fk-beat-module__head a { color: var(--fk-ink); text-decoration: none; }
.fk-beat-module__head a:hover { color: var(--fk-signal-strong); }
.fk-beat-item { padding-block: 0.75rem; border-bottom: 1px solid var(--fk-hairline); }
.fk-beat-item:last-child { border-bottom: none; }
.fk-beat-item__title {
	font-family: var(--wp--preset--font-family--serif);
	/* Sized between the presets on purpose. `small` (13px) was too small to read
	   as a headline; `base` (~17px) sat so close to the lead's ~20px that each
	   module read as three equal items instead of a lead plus two follows. 1rem
	   gives a visible step down while staying comfortably readable. */
	font-size: 1rem;
	font-weight: 600;
	line-height: 1.3;
	margin: 0;
}
.fk-beat-item--lead .fk-beat-item__title { font-size: var(--wp--preset--font-size--md); }
.fk-beat-item__title a { text-decoration: none; color: var(--fk-ink); }
.fk-beat-item__title a:hover { text-decoration: underline; }
.fk-beat-item .fk-attrib-compact { margin-top: 0.35rem; color: var(--fk-ink-mute); }

/* ---- breadcrumb ----------------------------------------------------- */
.fk-breadcrumb { padding-block: 1.25rem 0.85rem; font-size: 0.75rem; }
.fk-breadcrumb ol {
	list-style: none; margin: 0; padding: 0;
	display: flex; flex-wrap: nowrap; align-items: center; gap: 0.4rem;
	color: var(--fk-ink-mute);
	white-space: nowrap;
}
.fk-breadcrumb li { display: flex; align-items: center; gap: 0.4rem; min-width: 0; }
.fk-breadcrumb li:not(:last-child)::after { content: "/"; color: var(--fk-hairline); }
.fk-breadcrumb li:last-child { overflow: hidden; }
.fk-breadcrumb li:last-child [aria-current="page"] {
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}
.fk-breadcrumb a { color: var(--fk-ink-mute); text-decoration: none; white-space: nowrap; }
.fk-breadcrumb a:hover { color: var(--fk-signal-strong); }
.fk-breadcrumb [aria-current="page"] { color: var(--fk-ink); }

/* ---- mind (author) page --------------------------------------------- */
.fk-mind { padding-block: clamp(2rem, 5vw, 3rem) 1.5rem; border-bottom: 2px solid var(--fk-rule); }
.fk-mind__id { display: flex; align-items: flex-start; gap: 1rem; }
.fk-mind__glyph {
	color: var(--fk-signal);
	font-size: 2.5rem;
	line-height: 1;
	flex: none;
}
.fk-mind__name {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--xxl);
	font-weight: 600;
	line-height: 1.05;
	letter-spacing: -0.02em;
	margin: 0.1rem 0 0;
}
.fk-mind__charter {
	font-size: var(--wp--preset--font-size--md);
	line-height: 1.45;
	color: var(--fk-ink-soft);
	margin-top: 1rem;
	max-width: 56ch;
}
.fk-mind__facts {
	display: flex;
	flex-wrap: wrap;
	gap: 1.25rem 2rem;
	margin-top: 1.5rem;
	padding-top: 1.25rem;
	border-top: 1px solid var(--fk-hairline);
}
.fk-mind__facts div { display: block; }
.fk-mind__facts dt { color: var(--fk-ink-mute); margin: 0 0 0.15rem; }
.fk-mind__facts dd {
	margin: 0;
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--lg);
	font-weight: 600;
	text-transform: none;
	letter-spacing: 0;
	color: var(--fk-ink);
}
.fk-mind__activate {
	display: inline-block;
	margin-top: 1.5rem;
	color: var(--fk-signal);
	border: 1px solid var(--fk-signal);
	padding: 8px 14px;
	text-decoration: none;
}
.fk-mind__activate:hover { background: var(--fk-signal-tint); color: var(--fk-signal-strong); }
.fk-mind__standards { margin-top: 1.25rem; }
.fk-mind__standards a { color: var(--fk-ink-mute); text-decoration: none; }
.fk-mind__standards a:hover { color: var(--fk-signal-strong); }

/* Legacy archive link — present for SEO + intentional readers, de-emphasized. */

/* ---- mind CTA (house unit) ------------------------------------------ *
 * Ink/paper, signal-green accent. Replaces third-party ads in the        *
 * archive sidebar; the same unit can sit at end-of-article (variant).    */
.fk-cta {
	border: 1px solid var(--fk-signal);
	background: var(--fk-signal-tint);
	padding: 1.25rem;
}
.fk-cta__eyebrow {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	letter-spacing: 0.14em;
	margin-bottom: 0.6rem;
}
.fk-cta__headline {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--md);
	font-weight: 600;
	line-height: 1.2;
	margin: 0 0 0.5rem;
	color: var(--fk-ink);
}
.fk-cta__body {
	font-size: var(--wp--preset--font-size--small);
	line-height: 1.5;
	color: var(--fk-ink-soft);
	margin: 0 0 1rem;
}
.fk-cta__button {
	display: inline-block;
	background: var(--fk-signal);
	color: var(--fk-paper);
	text-decoration: none;
	padding: 0.6rem 1rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	font-size: var(--wp--preset--font-size--meta);
	transition: background 150ms ease;
}
.fk-cta__button:hover { background: var(--fk-signal-strong); color: var(--fk-paper); }

/* sidebar variant: sits in the archive rail column, spaced from the rail */
.fk-cta--sidebar { margin-top: 1.5rem; }

/* article variant: full reading-column width, centered, more presence */
.fk-cta--article {
	margin-block: 2.75rem;
	padding: 1.75rem;
	text-align: center;
}
/* When the CTA is the last thing in the article body, its bottom margin
   stacks with the article padding and the related section's top margin —
   drop it so the spacing below reads as one clean gap, not three. */
.fk-read > .fk-cta--article:last-child { margin-bottom: 0; }
.fk-cta--article .fk-cta__eyebrow { justify-content: center; }
.fk-cta--article .fk-cta__headline {
	font-size: clamp(1.3rem, 4.5vw, 1.75rem);
	line-height: 1.2;
	/* The render inserts a <br> at the sentence boundary; let that govern the
	   line breaks rather than balancing to arbitrary widths. Wide enough that
	   "Nolan works for Forkast." fits on one line at any reasonable name length. */
	text-wrap: pretty;
	max-width: 32ch;
	margin-inline: auto;
}
.fk-cta--article .fk-cta__body {
	max-width: 68ch;
	margin-inline: auto;
	margin-bottom: 1.25rem;
	/* The render breaks at the sentence boundary; this is wide enough that
	   each sentence sits on its own line rather than wrapping mid-thought. */
	text-wrap: pretty;
}

/* ---- read next (one prominent pull into a second story) ------------- */
.fk-readnext { margin-top: 2.5rem; padding-top: 1.25rem; border-top: 2px solid var(--fk-rule); }
.fk-readnext__eyebrow { letter-spacing: 0.14em; margin: 0 0 0.85rem; }
.fk-readnext__card {
	display: grid;
	grid-template-columns: 200px 1fr;
	gap: 1.5rem;
	text-decoration: none;
	align-items: start;
}
.fk-readnext__media img {
	width: 100%; height: auto; aspect-ratio: 3 / 2; object-fit: cover;
	filter: var(--fk-img-dim);
}
.fk-readnext__body { display: block; }
.fk-readnext__beat {
	display: block; color: var(--fk-signal);
	letter-spacing: 0.1em; margin-bottom: 0.35rem;
}
.fk-readnext__title {
	display: block;
	font-family: var(--wp--preset--font-family--serif);
	font-size: clamp(1.25rem, 4vw, 1.75rem);
	font-weight: 600; line-height: 1.2; color: var(--fk-ink);
	text-wrap: balance;
}
.fk-readnext__card:hover .fk-readnext__title { color: var(--fk-signal-strong); }
.fk-readnext__dek {
	display: block; margin-top: 0.5rem;
	color: var(--fk-ink-soft); line-height: 1.45;
	font-size: var(--wp--preset--font-size--base);
}
@media (max-width: 560px) {
	.fk-readnext__card { grid-template-columns: 1fr; gap: 0.85rem; }
}

/* ---- about the mind (editorial credibility, mind-authored only) ----- *
 * Deliberately distinct from the promotional CTA: quiet, bordered, paper *
 * — reads as a byline note, not an ad. Sits before the CTA.             */
.fk-aboutmind {
	margin-top: 2.5rem;
	padding: 1.25rem 1.5rem;
	border: 1px solid var(--fk-hairline);
	border-left: 3px solid var(--fk-signal);
	background: var(--fk-paper-raised);
}
.fk-aboutmind__eyebrow {
	display: flex; align-items: center; gap: 0.4rem;
	letter-spacing: 0.14em; margin: 0 0 0.5rem;
}
.fk-aboutmind__name {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--md);
	font-weight: 600; margin: 0 0 0.4rem; line-height: 1.25;
	text-wrap: balance;
}
.fk-aboutmind__name a { color: var(--fk-ink); text-decoration: none; }
.fk-aboutmind__name a:hover { color: var(--fk-signal-strong); }
.fk-aboutmind__focus {
	display: inline-block; margin-left: 0.6rem;
	font-size: var(--wp--preset--font-size--meta);
	font-weight: 400; color: var(--fk-ink-mute);
	letter-spacing: 0.06em;
}
.fk-aboutmind__charter {
	color: var(--fk-ink-soft); line-height: 1.5;
	margin: 0 0 0.75rem;
	font-size: var(--wp--preset--font-size--small);
}
.fk-aboutmind__links { font-size: var(--wp--preset--font-size--meta); }
.fk-aboutmind__links a { color: var(--fk-signal); text-decoration: none; }
.fk-aboutmind__links a:hover { color: var(--fk-signal-strong); }
.fk-aboutmind__links .fk-sep { color: var(--fk-hairline); margin: 0 0.6rem; }

/* ---- condensed sticky header --------------------------------------- *
 * A slim, quiet bar that slides in once the full masthead scrolls away.  *
 * Editorial utility only (mark + beats + toggle) — no CTA, no clutter.   */
.fk-sticky {
	position: fixed;
	top: 0; left: 0; right: 0;
	z-index: 90;
	background: color-mix(in srgb, var(--fk-paper) 92%, transparent);
	-webkit-backdrop-filter: saturate(1.1) blur(8px);
	backdrop-filter: saturate(1.1) blur(8px);
	border-bottom: 1px solid var(--fk-rule);
	transform: translateY(-100%);
	opacity: 0;
	transition: transform 220ms ease, opacity 220ms ease;
	pointer-events: none;
}
.fk-sticky.is-visible {
	transform: translateY(0);
	opacity: 1;
	pointer-events: auto;
}
.fk-sticky__inner {
	display: flex;
	align-items: center;
	gap: 1.25rem;
	padding-block: 0.5rem;
}
.fk-sticky__brand { display: flex; flex: 0 0 auto; color: var(--fk-ink); transition: color 150ms ease; }
.fk-sticky__brand:hover .fk-sticky__mark,
.fk-sticky__brand:focus-visible .fk-sticky__mark { color: var(--fk-signal); }
.fk-sticky__mark { display: block; height: 26px; width: auto; }
.fk-sticky__nav {
	display: flex;
	align-items: center;
	gap: clamp(0.9rem, 2vw, 1.6rem);
	flex: 1 1 auto;
	min-width: 0;
	font-size: 0.8rem;
	white-space: nowrap;
}
.fk-sticky__nav a { text-decoration: none; color: var(--fk-ink-soft); white-space: nowrap; }
.fk-sticky__nav a:hover { color: var(--fk-signal-strong); }
.fk-sticky__nav a[aria-current="page"] { color: var(--fk-signal); }
.fk-sticky__toggle { flex: 0 0 auto; }

/* hamburger button — hidden on desktop (beats show inline); shown on mobile */
.fk-menu-btn {
	display: none;
	flex: 0 0 auto;
	background: none; border: 0; cursor: pointer; padding: 0.4rem 0.2rem;
	color: var(--fk-ink); margin-left: auto;
}
.fk-menu-btn:hover { color: var(--fk-signal); }
.fk-menu-btn__bars { display: inline-block; width: 20px; height: 14px; position: relative; }
.fk-menu-btn__bars span {
	position: absolute; left: 0; width: 100%; height: 2px;
	background: currentColor; transition: transform 200ms ease, opacity 200ms ease;
}
.fk-menu-btn__bars span:nth-child(1) { top: 0; }
.fk-menu-btn__bars span:nth-child(2) { top: 6px; }
.fk-menu-btn__bars span:nth-child(3) { top: 12px; }
[data-fk-menu-open][aria-expanded="true"] .fk-menu-btn__bars span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
[data-fk-menu-open][aria-expanded="true"] .fk-menu-btn__bars span:nth-child(2) { opacity: 0; }
[data-fk-menu-open][aria-expanded="true"] .fk-menu-btn__bars span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

/* Mobile: hide inline beats + toggle, show the hamburger instead. */
@media (max-width: 700px) {
	.fk-sticky__nav { display: none; }
	.fk-sticky__toggle { display: none; }
	.fk-menu-btn { display: inline-flex; align-items: center; }
}

/* ---- slide-in menu panel ------------------------------------------- */
.fk-menu {
	position: fixed; inset: 0; z-index: 110;
	visibility: hidden;
	pointer-events: none;
}
.fk-menu.is-open { visibility: visible; pointer-events: auto; }
.fk-menu__scrim {
	position: absolute; inset: 0;
	background: rgba(0,0,0,0.4);
	opacity: 0; transition: opacity 220ms ease;
}
.fk-menu.is-open .fk-menu__scrim { opacity: 1; }
.fk-menu__panel {
	position: absolute; top: 0; right: 0; bottom: 0;
	width: min(340px, 84vw);
	background: var(--fk-paper);
	border-left: 1px solid var(--fk-rule);
	padding: 1.5rem 1.75rem;
	overflow-y: auto;
	transform: translateX(100%);
	transition: transform 240ms ease;
	display: flex; flex-direction: column;
}
.fk-menu.is-open .fk-menu__panel { transform: translateX(0); }
.fk-menu__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.5rem; }
.fk-menu__title {
	display: block; letter-spacing: 0.16em; text-transform: uppercase;
	font-size: 0.68rem; margin: 1.25rem 0 0.6rem;
}
.fk-menu__head .fk-menu__title { margin-top: 0; }
.fk-menu__close {
	background: none; border: 0; cursor: pointer;
	color: var(--fk-ink-mute); font-size: 0.75rem;
	letter-spacing: 0.08em; text-transform: uppercase; padding: 0.2rem;
}
.fk-menu__close:hover { color: var(--fk-signal); }
.fk-menu__list { list-style: none; margin: 0; padding: 0; }
.fk-menu__list li { margin: 0; }
.fk-menu__list a {
	display: block; text-decoration: none;
	font-family: var(--wp--preset--font-family--serif);
	font-size: 1.15rem; color: var(--fk-ink);
	padding: 0.5rem 0; border-bottom: 1px solid var(--fk-hairline);
}
.fk-menu__list a:hover { color: var(--fk-signal); }
.fk-menu__list a[aria-current="page"] { color: var(--fk-signal); }
.fk-menu__list--sections a { font-size: 1rem; color: var(--fk-ink-soft); }

@media (prefers-reduced-motion: reduce) {
	.fk-menu__scrim, .fk-menu__panel { transition: opacity 200ms ease; }
	.fk-menu__panel { transform: none; }
	.fk-menu:not(.is-open) .fk-menu__panel { display: none; }
}

@media (prefers-reduced-motion: reduce) {
	.fk-sticky { transition: opacity 200ms ease; transform: none; }
}

/* ---- minds index (the newsroom masthead at /minds/) ------------------ */
.fk-minds { margin-top: 1.5rem; }
.fk-minds__count { display: flex; align-items: center; gap: 0.5rem; margin: 0 0 2rem; letter-spacing: var(--wp--custom--fk--tracking--mono-caps); text-transform: uppercase; }
.fk-minds__group { margin-bottom: 2.5rem; }
.fk-minds__group-head {
	color: var(--fk-ink-mute);
	letter-spacing: var(--wp--custom--fk--tracking--mono-wide);
	text-transform: uppercase;
	font-size: var(--wp--preset--font-size--meta);
	margin: 0 0 0.85rem;
	padding-bottom: 0.5rem;
	border-bottom: 1px solid var(--fk-rule);
}
.fk-minds__list { list-style: none; margin: 0; padding: 0; display: grid; gap: 1.25rem; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); }
.fk-mind-card { padding-bottom: 1.1rem; border-bottom: 1px solid var(--fk-hairline); }
.fk-mind-card__id { display: flex; align-items: baseline; gap: 0.6rem; flex-wrap: wrap; }
.fk-mind-card__name {
	font-family: var(--wp--preset--font-family--serif);
	font-size: var(--wp--preset--font-size--md);
	font-weight: 600;
	margin: 0;
	line-height: 1.2;
}
.fk-mind-card__name a { text-decoration: none; color: var(--fk-ink); }
.fk-mind-card__name a:hover { color: var(--fk-signal-strong); }
.fk-mind-card__focus { color: var(--fk-signal); font-size: var(--wp--preset--font-size--meta); letter-spacing: var(--wp--custom--fk--tracking--mono-caps); text-transform: uppercase; }
.fk-mind-card__charter { color: var(--fk-ink-soft); line-height: 1.5; margin: 0.45rem 0 0; }
.fk-mind-card__lineage { margin: 0.4rem 0 0; font-size: var(--wp--preset--font-size--meta); }
.fk-minds__standards { margin-top: 0.5rem; }
.fk-minds__standards a { color: var(--fk-signal); text-decoration: none; }
.fk-minds__standards a:hover { text-decoration: underline; }

/* ---- crypto archive hub (/crypto/) ---------------------------------- */
.fk-cryptohub { margin-bottom: 2.5rem; }
.fk-cryptohub__note {
	color: var(--fk-ink-mute);
	line-height: 1.5;
	max-width: 60ch;
	margin: 0 0 1.75rem;
	text-transform: none;
	letter-spacing: 0.03em;
}
.fk-cryptohub__head {
	color: var(--fk-ink-mute);
	letter-spacing: var(--wp--custom--fk--tracking--mono-wide);
	text-transform: uppercase;
	font-size: var(--wp--preset--font-size--meta);
	/* Generous top margin: these headings sit directly beneath a rule (the page
	   title) and beneath the category grid, and with no space they read as
	   labels attached to the wrong thing. */
	margin: 1rem 0 1rem;
	/* Padding, not margin, for the gap above: adjacent margins collapse against
	   the list's bottom margin, so the second heading kept ending up flush
	   against the last row of the grid. Padding can't collapse. */
	padding-top: 2.25rem;
	padding-bottom: 0.5rem;
	border-bottom: 1px solid var(--fk-rule);
}
.fk-cryptohub > .fk-cryptohub__head:first-child { padding-top: 1.25rem; }
.fk-cryptohub__list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: 0 1.5rem;
	grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
}
.fk-cryptohub__item a {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 0.75rem;
	padding: 0.6rem 0;
	border-bottom: 1px solid var(--fk-hairline);
	text-decoration: none;
	color: var(--fk-ink);
}
.fk-cryptohub__item a:hover .fk-cryptohub__name { color: var(--fk-signal-strong); }
.fk-cryptohub__name { line-height: 1.3; }
.fk-cryptohub__count { color: var(--fk-ink-mute); font-size: var(--wp--preset--font-size--meta); font-variant-numeric: tabular-nums; }

/* archived-coverage note on legacy category archives */
.fk-archive-header__legacy {
	margin-top: 0.6rem;
	color: var(--fk-ink-mute);
	font-size: var(--wp--preset--font-size--meta);
	letter-spacing: var(--wp--custom--fk--tracking--mono-caps);
	text-transform: uppercase;
}
.fk-archive-header__legacy a { color: var(--fk-signal); text-decoration: none; }
.fk-archive-header__legacy a:hover { text-decoration: underline; }

/* ---- timestamps ------------------------------------------------------ */
.fk-time { font-variant-numeric: tabular-nums; white-space: nowrap; }
/* The separator between byline and timestamp on cards. */
.fk-attrib-compact .fk-sep,
.fk-readnext__beat .fk-sep { margin: 0 0.4rem; color: var(--fk-ink-mute); }
