/* ==========================================================================
   PAGE FORGE — inner pages in the Forge direction, drawn on paper.
   Used by page.php and page-om-mig.php. Scoped to main.km-page-forge and
   enqueued from inc/assets.php on is_page() only, after km-site.bundle.css,
   so nothing here touches the bundle or the homepage stylesheet.
   The header stays the base light header and the footer the base dark one.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Tokens. The same ramp as dir-forge.css, the palette inverted onto paper.
   -------------------------------------------------------------------------- */

.km-page-forge {
	--pg-paper: #f7f7f4;
	--pg-surface: #ffffff;
	--pg-ink: #090909;
	--pg-ink-dim: #55554f;
	--pg-ink-faint: #70706a;
	--pg-line: rgba(9, 9, 9, .12);
	--pg-line-mid: rgba(9, 9, 9, .2);
	--pg-line-strong: rgba(9, 9, 9, .4);
	/* 6.2:1 on paper. The homepage's #86a9bd is a hairline colour on black and
	   would not clear AA as text here. */
	--pg-blue: #3c6884;

	--pg-t-label: .7rem;
	--pg-t-label-strong: .74rem;
	--pg-t-body: clamp(.95rem, .3vw + .85rem, 1.02rem);
	--pg-t-lead: clamp(1rem, .4vw + .9rem, 1.12rem);
	--pg-t-h4: clamp(1.05rem, .6vw + .9rem, 1.3rem);
	--pg-t-h3: clamp(1.35rem, 1.2vw + 1rem, 1.85rem);
	--pg-t-h2: clamp(1.55rem, 2vw + 1rem, 2.7rem);
	--pg-t-display: clamp(2.2rem, 4.4vw + 1rem, 4.9rem);
	--pg-t-title: clamp(1.9rem, 3vw + 1rem, 3.6rem);

	--km-gutter: clamp(26px, 3.6vw, 72px);
	--km-shell: 1360px;

	padding-bottom: clamp(72px, 9vw, 128px);
	background: var(--pg-paper);
	color: var(--pg-ink);
	font-family: var(--km-font-sans);
	-webkit-font-smoothing: antialiased;
}

.km-page-forge ::selection {
	background: var(--pg-ink);
	color: var(--pg-paper);
}

.km-page-forge :focus-visible {
	outline: 2px solid var(--pg-blue);
	outline-offset: 3px;
}

/* --------------------------------------------------------------------------
   2. Shared primitives: eyebrow, buttons, links, section head, plates
   -------------------------------------------------------------------------- */

.km-page-forge .pg-eyebrow {
	display: flex;
	align-items: center;
	gap: 12px;
	margin: 0;
	color: var(--pg-ink-dim);
	font-family: var(--km-font-mono);
	font-size: var(--pg-t-label);
	font-weight: 500;
	letter-spacing: .2em;
	line-height: 1.3;
	text-transform: uppercase;
}

.km-page-forge .pg-eyebrow__tick {
	display: block;
	width: 26px;
	height: 1px;
	flex: 0 0 26px;
	background: var(--pg-blue);
	transform-origin: left center;
}

.km-page-forge .pg-button {
	display: inline-flex;
	min-height: 54px;
	align-items: center;
	justify-content: center;
	gap: 12px;
	padding: 0 26px;
	border: 1px solid var(--pg-ink);
	border-radius: 0;
	background: var(--pg-ink);
	color: var(--pg-paper);
	font-family: var(--km-font-mono);
	font-size: var(--pg-t-label-strong);
	font-weight: 500;
	letter-spacing: .14em;
	line-height: 1;
	text-decoration: none;
	text-transform: uppercase;
	transition: background-color .22s ease, color .22s ease, letter-spacing .22s ease;
}

.km-page-forge .pg-button:hover,
.km-page-forge .pg-button:focus-visible {
	background: transparent;
	color: var(--pg-ink);
	letter-spacing: .17em;
}

.km-page-forge .pg-button .kmf-icon {
	width: 1em;
	height: 1em;
	transition: transform .22s ease;
}

.km-page-forge .pg-button:hover .kmf-icon {
	transform: translateX(4px);
}

.km-page-forge .pg-link {
	position: relative;
	display: inline-flex;
	min-height: 48px;
	align-items: center;
	gap: 10px;
	color: var(--pg-ink);
	font-family: var(--km-font-mono);
	font-size: var(--pg-t-label-strong);
	letter-spacing: .14em;
	text-decoration: none;
	text-transform: uppercase;
}

.km-page-forge .pg-link::after {
	position: absolute;
	bottom: 12px;
	left: 0;
	width: 100%;
	height: 1px;
	background: var(--pg-line-strong);
	content: "";
	transform: scaleX(0);
	transform-origin: left center;
	transition: transform .3s cubic-bezier(.2, .7, .2, 1), background-color .3s ease;
}

.km-page-forge .pg-link:hover::after,
.km-page-forge .pg-link:focus-visible::after {
	background: var(--pg-ink);
	transform: scaleX(1);
}

.km-page-forge .pg-link .kmf-icon {
	width: 1em;
	height: 1em;
	transition: transform .3s cubic-bezier(.2, .7, .2, 1);
}

.km-page-forge .pg-link:hover .kmf-icon,
.km-page-forge .pg-link:focus-visible .kmf-icon {
	transform: translateX(5px);
}

/* Section head: rule, label, sheet count. */
.km-page-forge .pg-head {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	align-items: end;
	gap: 16px;
	margin-bottom: clamp(30px, 5vw, 56px);
	padding-top: 18px;
	border-top: 1px solid var(--pg-line-mid);
}

.km-page-forge .pg-head__count {
	margin: 0;
	color: var(--pg-ink-faint);
	font-family: var(--km-font-mono);
	font-size: var(--pg-t-label);
	letter-spacing: .2em;
}

/* Plates: framed imagery with corner registration ticks. */
.km-page-forge .pg-plate {
	position: relative;
	margin: 0;
	padding: 9px;
}

.km-page-forge .pg-plate__frame {
	position: relative;
	display: block;
	overflow: hidden;
	background: #e9e8e3;
}

.km-page-forge .pg-plate__frame img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* The reveal cover. Hidden two ways, zero width and zero opacity, so nothing
   short of both failing can leave a plate blanked. */
.km-page-forge .pg-plate__frame::after {
	position: absolute;
	inset: 0;
	background: var(--pg-paper);
	content: "";
	opacity: 0;
	pointer-events: none;
	transform: scaleX(0);
	transform-origin: right center;
}

.km-page-forge .pg-plate__tick {
	position: absolute;
	width: 13px;
	height: 13px;
	border: 0 solid var(--pg-line-strong);
	pointer-events: none;
}

.km-page-forge .pg-plate__tick--tl {
	top: 0;
	left: 0;
	border-top-width: 1px;
	border-left-width: 1px;
}

.km-page-forge .pg-plate__tick--tr {
	top: 0;
	right: 0;
	border-top-width: 1px;
	border-right-width: 1px;
}

.km-page-forge .pg-plate__tick--bl {
	bottom: 0;
	left: 0;
	border-bottom-width: 1px;
	border-left-width: 1px;
}

.km-page-forge .pg-plate__tick--br {
	right: 0;
	bottom: 0;
	border-right-width: 1px;
	border-bottom-width: 1px;
}

/* The dimension annotation under a plate. */
.km-page-forge .pg-dim {
	position: relative;
	height: 30px;
	margin: 14px 0 0;
	padding: 0;
}

.km-page-forge .pg-dim__rule {
	position: absolute;
	top: 14px;
	right: 0;
	left: 0;
	height: 1px;
	background: var(--pg-line-strong);
	transform-origin: left center;
}

.km-page-forge .pg-dim__ext {
	position: absolute;
	top: 0;
	width: 1px;
	height: 28px;
	background: var(--pg-line-mid);
	transform-origin: top center;
}

.km-page-forge .pg-dim__ext--start {
	left: 0;
}

.km-page-forge .pg-dim__ext--end {
	right: 0;
}

.km-page-forge .pg-dim__label {
	position: absolute;
	top: 6px;
	left: 50%;
	max-width: 100%;
	padding: 0 12px;
	background: var(--pg-paper);
	color: var(--pg-blue);
	font-family: var(--km-font-mono);
	font-size: var(--pg-t-label);
	letter-spacing: .18em;
	line-height: 18px;
	transform: translateX(-50%);
	white-space: nowrap;
}

/* --------------------------------------------------------------------------
   3. Page hero. Compact on a generic page, two columns on the about page.
   -------------------------------------------------------------------------- */

.km-page-forge .pg-hero {
	position: relative;
	isolation: isolate;
	padding: clamp(48px, 8vw, 108px) 0 clamp(44px, 6vw, 84px);
	border-bottom: 1px solid var(--pg-line);
}

.km-page-forge .pg-hero--compact {
	padding: clamp(44px, 6vw, 84px) 0 clamp(36px, 5vw, 60px);
}

/* Graph paper. Faint enough to be felt rather than seen. */
.km-page-forge .pg-hero__paper {
	position: absolute;
	z-index: 0;
	inset: 0;
	display: block;
	background-image:
		repeating-linear-gradient(to right, rgba(9, 9, 9, .048) 0 1px, transparent 1px 88px),
		repeating-linear-gradient(to bottom, rgba(9, 9, 9, .048) 0 1px, transparent 1px 88px);
	-webkit-mask-image: radial-gradient(120% 88% at 18% 8%, #000 0%, rgba(0, 0, 0, .35) 52%, transparent 82%);
	mask-image: radial-gradient(120% 88% at 18% 8%, #000 0%, rgba(0, 0, 0, .35) 52%, transparent 82%);
	pointer-events: none;
}

.km-page-forge .pg-hero__inner {
	position: relative;
	z-index: 1;
}

.km-page-forge .pg-hero__title {
	max-width: 16ch;
	margin: clamp(22px, 4vw, 36px) 0 0;
	font-family: var(--km-font-sans);
	font-size: var(--pg-t-title);
	font-weight: 700;
	letter-spacing: -.038em;
	line-height: .98;
	text-wrap: balance;
}

.km-page-forge .pg-hero--about .pg-hero__title {
	max-width: 12ch;
	font-size: var(--pg-t-display);
	letter-spacing: -.04em;
	line-height: .94;
}

.km-page-forge .pg-hero__title em {
	font-family: var(--km-font-serif);
	font-size: 1.06em;
	font-style: italic;
	font-weight: 400;
	letter-spacing: -.012em;
}

.km-page-forge .pg-hero__dot {
	color: var(--pg-blue);
}

.km-page-forge .pg-hero__sub {
	max-width: 38ch;
	margin: clamp(18px, 3vw, 26px) 0 0;
	color: var(--pg-ink-dim);
	font-size: var(--pg-t-lead);
	line-height: 1.62;
}

/* --------------------------------------------------------------------------
   4. Prose: the_content() on a generic page and the about page's own copy.
   -------------------------------------------------------------------------- */

.km-page-forge .pg-body {
	padding-top: clamp(40px, 6vw, 72px);
}

.km-page-forge .pg-prose {
	max-width: var(--km-text-measure, 68ch);
	color: var(--pg-ink);
	font-size: var(--pg-t-body);
	line-height: 1.72;
}

.km-page-forge .pg-prose > :first-child {
	margin-top: 0;
}

.km-page-forge .pg-prose > :last-child {
	margin-bottom: 0;
}

.km-page-forge .pg-prose p,
.km-page-forge .pg-prose ul,
.km-page-forge .pg-prose ol,
.km-page-forge .pg-prose blockquote,
.km-page-forge .pg-prose figure,
.km-page-forge .pg-prose table,
.km-page-forge .pg-prose pre {
	margin: 0 0 1.35em;
}

.km-page-forge .pg-prose h2,
.km-page-forge .pg-prose h3,
.km-page-forge .pg-prose h4,
.km-page-forge .pg-prose h5,
.km-page-forge .pg-prose h6 {
	color: var(--pg-ink);
	font-family: var(--km-font-sans);
	letter-spacing: -.024em;
	text-wrap: balance;
}

.km-page-forge .pg-prose h2 {
	margin: 2.2em 0 .6em;
	padding-top: .8em;
	border-top: 1px solid var(--pg-line-mid);
	font-size: var(--pg-t-h3);
	font-weight: 700;
	line-height: 1.1;
}

.km-page-forge .pg-prose h3 {
	margin: 1.8em 0 .5em;
	font-size: var(--pg-t-h4);
	font-weight: 650;
	line-height: 1.24;
}

.km-page-forge .pg-prose h4,
.km-page-forge .pg-prose h5,
.km-page-forge .pg-prose h6 {
	margin: 1.6em 0 .4em;
	font-size: var(--pg-t-lead);
	font-weight: 650;
	line-height: 1.3;
}

.km-page-forge .pg-prose a {
	color: var(--pg-ink);
	text-decoration: underline;
	text-decoration-color: var(--pg-line-strong);
	text-decoration-thickness: 1px;
	text-underline-offset: .2em;
	transition: text-decoration-color .2s ease, color .2s ease;
}

.km-page-forge .pg-prose a:hover,
.km-page-forge .pg-prose a:focus-visible {
	color: var(--pg-blue);
	text-decoration-color: var(--pg-blue);
}

.km-page-forge .pg-prose ul,
.km-page-forge .pg-prose ol {
	padding-left: 1.5em;
}

.km-page-forge .pg-prose li {
	margin: 0 0 .5em;
	padding-left: .25em;
}

.km-page-forge .pg-prose li::marker {
	color: var(--pg-ink-faint);
	font-family: var(--km-font-mono);
	font-size: .85em;
}

.km-page-forge .pg-prose strong {
	font-weight: 650;
}

.km-page-forge .pg-prose em {
	font-family: var(--km-font-serif);
	font-style: italic;
}

.km-page-forge .pg-prose blockquote {
	margin-left: 0;
	padding: .2em 0 .2em 1.2em;
	border-left: 1px solid var(--pg-line-strong);
	color: var(--pg-ink-dim);
}

.km-page-forge .pg-prose hr {
	height: 1px;
	margin: 2.4em 0;
	border: 0;
	background: var(--pg-line-mid);
}

.km-page-forge .pg-prose code,
.km-page-forge .pg-prose kbd {
	font-family: var(--km-font-mono);
	font-size: .9em;
}

.km-page-forge .pg-prose pre {
	overflow-x: auto;
	padding: 1em 1.2em;
	border: 1px solid var(--pg-line);
	background: var(--pg-surface);
	font-size: .9em;
	line-height: 1.6;
}

.km-page-forge .pg-prose img {
	height: auto;
}

.km-page-forge .pg-prose table {
	display: block;
	width: 100%;
	overflow-x: auto;
	border-collapse: collapse;
	font-size: .95em;
}

.km-page-forge .pg-prose th,
.km-page-forge .pg-prose td {
	padding: .6em .8em .6em 0;
	border-bottom: 1px solid var(--pg-line);
	text-align: left;
	vertical-align: top;
}

.km-page-forge .pg-prose th {
	color: var(--pg-ink-faint);
	font-family: var(--km-font-mono);
	font-size: var(--pg-t-label);
	font-weight: 500;
	letter-spacing: .14em;
	text-transform: uppercase;
}

/* --------------------------------------------------------------------------
   5. About page
   -------------------------------------------------------------------------- */

.km-page-forge .pg-about__body {
	margin-top: clamp(28px, 4vw, 40px);
}

.km-page-forge .pg-about__portrait {
	width: 100%;
	max-width: 340px;
	margin: clamp(40px, 8vw, 64px) 0 0;
}

.km-page-forge .pg-about__portrait .pg-plate__frame {
	aspect-ratio: 4 / 5;
}

/* Head near the top of the square source; the crop keeps it. */
.km-page-forge .pg-about__portrait .pg-plate__frame img {
	object-position: 50% 28%;
}

.km-page-forge .pg-section {
	padding-top: clamp(56px, 8vw, 104px);
}

/* The parts list: index, title, what it means. */
.km-page-forge .pg-gets {
	margin: 0;
	padding: 0;
	list-style: none;
}

.km-page-forge .pg-gets__item {
	display: grid;
	gap: 8px 24px;
	padding: 20px 0 22px;
	border-top: 1px solid var(--pg-line);
}

.km-page-forge .pg-gets__item:last-child {
	border-bottom: 1px solid var(--pg-line);
}

.km-page-forge .pg-gets__index {
	display: block;
	color: var(--pg-blue);
	font-family: var(--km-font-mono);
	font-size: var(--pg-t-label);
	letter-spacing: .2em;
	line-height: 1.6;
}

.km-page-forge .pg-gets__title {
	margin: 4px 0 0;
	font-size: var(--pg-t-h4);
	font-weight: 700;
	letter-spacing: -.022em;
	line-height: 1.12;
}

.km-page-forge .pg-gets__text {
	max-width: 44ch;
	margin: 2px 0 0;
	color: var(--pg-ink-dim);
	font-size: var(--pg-t-body);
	line-height: 1.6;
}

/* Title block: the facts strip. */
.km-page-forge .pg-facts {
	display: grid;
	margin: 0;
	border-top: 1px solid var(--pg-line-mid);
}

.km-page-forge .pg-facts__item {
	display: grid;
	gap: 8px;
	padding: 18px 0;
	border-bottom: 1px solid var(--pg-line);
}

.km-page-forge .pg-facts__label {
	margin: 0;
	color: var(--pg-ink-faint);
	font-family: var(--km-font-mono);
	font-size: var(--pg-t-label);
	font-weight: 500;
	letter-spacing: .2em;
	text-transform: uppercase;
}

.km-page-forge .pg-facts__value {
	margin: 0;
	color: var(--pg-ink);
	font-size: var(--pg-t-body);
	line-height: 1.5;
}

/* Closing panel: the sheet's own frame, on white. */
.km-page-forge .pg-close {
	position: relative;
	margin-top: clamp(56px, 8vw, 104px);
	padding: clamp(34px, 6vw, 64px) clamp(24px, 5vw, 64px);
	border: 1px solid var(--pg-line-mid);
	background:
		repeating-linear-gradient(to bottom, rgba(9, 9, 9, .03) 0 1px, transparent 1px 76px),
		var(--pg-surface);
}

.km-page-forge .pg-close .pg-plate__tick {
	width: 18px;
	height: 18px;
}

.km-page-forge .pg-close .pg-plate__tick--tl {
	top: 11px;
	left: 11px;
}

.km-page-forge .pg-close .pg-plate__tick--tr {
	top: 11px;
	right: 11px;
}

.km-page-forge .pg-close .pg-plate__tick--bl {
	bottom: 11px;
	left: 11px;
}

.km-page-forge .pg-close .pg-plate__tick--br {
	right: 11px;
	bottom: 11px;
}

.km-page-forge .pg-close__title {
	max-width: 16ch;
	margin: 0;
	font-size: var(--pg-t-h2);
	font-weight: 700;
	letter-spacing: -.034em;
	line-height: 1.02;
	text-wrap: balance;
}

.km-page-forge .pg-close__text {
	max-width: 42ch;
	margin: 16px 0 28px;
	color: var(--pg-ink-dim);
	font-size: var(--pg-t-body);
	line-height: 1.62;
}

.km-page-forge .pg-close__actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px 26px;
}

.km-page-forge .pg-close .pg-button {
	width: 100%;
	justify-content: space-between;
}

@media (min-width: 640px) {
	.km-page-forge .pg-close .pg-button {
		width: max-content;
		justify-content: center;
	}
}

@media (min-width: 720px) {
	.km-page-forge .pg-facts {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		column-gap: clamp(24px, 4vw, 64px);
	}

	.km-page-forge .pg-gets__item {
		grid-template-columns: 3.4rem minmax(0, 17rem) minmax(0, 1fr);
		align-items: baseline;
		padding: 22px 0;
	}

	.km-page-forge .pg-gets__title,
	.km-page-forge .pg-gets__text {
		margin: 0;
	}
}

@media (min-width: 900px) {
	.km-page-forge .pg-hero--about .pg-hero__inner {
		display: grid;
		grid-template-columns: minmax(0, 8fr) minmax(0, 4fr);
		gap: clamp(40px, 6vw, 96px);
		align-items: start;
	}

	.km-page-forge .pg-about__portrait {
		position: sticky;
		top: 100px;
		margin-top: 0;
		justify-self: end;
	}

	.km-page-forge .pg-close {
		display: grid;
		grid-template-columns: minmax(0, 1fr) auto;
		align-items: center;
		column-gap: clamp(40px, 6vw, 96px);
	}

	.km-page-forge .pg-close__title,
	.km-page-forge .pg-close__text {
		grid-column: 1;
	}

	.km-page-forge .pg-close__text {
		margin-bottom: 0;
	}

	.km-page-forge .pg-close__actions {
		grid-row: 1 / span 2;
		grid-column: 2;
		flex-direction: column;
		align-items: flex-end;
		gap: 8px;
	}
}

@media (min-width: 1080px) {
	.km-page-forge .pg-facts {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}

/* --------------------------------------------------------------------------
   6. Motion. The sheet is laid down on load. Nothing here is required for
      the page to read correctly.
   -------------------------------------------------------------------------- */

@media (prefers-reduced-motion: no-preference) {
	@keyframes pg-rise {
		from { opacity: 0; transform: translateY(14px); }
		to { opacity: 1; transform: none; }
	}

	@keyframes pg-rule-x {
		from { transform: scaleX(0); }
		to { transform: scaleX(1); }
	}

	@keyframes pg-rule-y {
		from { transform: scaleY(0); }
		to { transform: scaleY(1); }
	}

	@keyframes pg-fade {
		from { opacity: 0; }
		to { opacity: 1; }
	}

	@keyframes pg-uncover {
		from { opacity: 1; transform: scaleX(1); }
		99% { opacity: 1; }
		to { opacity: 0; transform: scaleX(0); }
	}

	.km-page-forge .pg-hero__paper {
		animation: pg-fade 1.1s ease .15s both;
	}

	.km-page-forge .pg-hero .pg-eyebrow__tick {
		animation: pg-rule-x .5s cubic-bezier(.2, .7, .2, 1) .1s both;
	}

	.km-page-forge .pg-hero .pg-eyebrow {
		animation: pg-fade .5s ease .18s both;
	}

	.km-page-forge .pg-hero__title {
		animation: pg-rise .7s cubic-bezier(.2, .7, .2, 1) .28s both;
	}

	.km-page-forge .pg-hero__sub {
		animation: pg-rise .7s cubic-bezier(.2, .7, .2, 1) .4s both;
	}

	.km-page-forge .pg-about__body {
		animation: pg-rise .7s cubic-bezier(.2, .7, .2, 1) .52s both;
	}

	.km-page-forge .pg-about__portrait .pg-plate__frame::after {
		animation: pg-uncover .95s cubic-bezier(.22, .68, .12, 1) .45s both;
	}

	.km-page-forge .pg-about__portrait .pg-plate__tick {
		animation: pg-fade .5s ease 1.15s both;
	}

	.km-page-forge .pg-dim__ext {
		animation: pg-rule-y .45s cubic-bezier(.2, .7, .2, 1) 1.2s both;
	}

	.km-page-forge .pg-dim__ext--end {
		animation-delay: 1.26s;
	}

	.km-page-forge .pg-dim__rule {
		animation: pg-rule-x .6s cubic-bezier(.2, .7, .2, 1) 1.32s both;
	}

	.km-page-forge .pg-dim__label {
		animation: pg-fade .5s ease 1.6s both;
	}
}
