/**
 * Pawfectious — component layer
 * -----------------------------------------------------------------------------
 * Design tokens live in theme.json. This file only styles the reusable
 * components (cards, grids, heroes, forms) that the dynamic blocks output.
 * Every colour here resolves to a theme.json preset, so changing a global
 * colour in Appearance → Editor → Styles updates the whole site.
 */

:root {
	--pf-radius-s: var(--wp--custom--radius--small, 8px);
	--pf-radius-m: var(--wp--custom--radius--medium, 14px);
	--pf-radius-l: var(--wp--custom--radius--large, 22px);
	--pf-radius-pill: var(--wp--custom--radius--pill, 999px);
	--pf-shadow-soft: var(--wp--custom--shadow--soft, 0 2px 4px rgba(12, 31, 61, .04), 0 8px 24px rgba(12, 31, 61, .06));
	--pf-shadow-card: var(--wp--custom--shadow--card, 0 2px 6px rgba(12, 31, 61, .05), 0 14px 34px rgba(12, 31, 61, .09));
	--pf-shadow-lift: var(--wp--custom--shadow--lift, 0 6px 14px rgba(12, 31, 61, .08), 0 26px 56px rgba(12, 31, 61, .16));
	--pf-ease: var(--wp--custom--transition--base, 220ms cubic-bezier(.22, .61, .36, 1));
	--pf-line: var(--wp--preset--color--line, #24406e);
	--pf-muted: var(--wp--preset--color--muted, #93a9c6);
	--pf-ink: var(--wp--preset--color--contrast, #dde8f5);
	--pf-heading: var(--wp--preset--color--snow, #ffffff);
	--pf-midnight: var(--wp--preset--color--midnight, #0a1830);
	--pf-surface: var(--wp--preset--color--surface, #12274c);
	--pf-surface-2: #17305c;
	--pf-blossom: var(--wp--preset--color--blossom, #f23d70);
	--pf-blossom-deep: var(--wp--preset--color--blossom-deep, #d62a58);
	--pf-teal-deep: var(--wp--preset--color--teal-deep, #5bd9c8);
	--pf-frost: var(--wp--preset--color--frost, #0e2044);
	--pf-sky: var(--wp--preset--color--sky, #9fd6e8);
	--pf-amazon: #0f2a5c;
	--pf-gap: clamp(1.25rem, 1rem + 1vw, 2rem);
}

/* -----------------------------------------------------------------------------
 * 1. Base niceties
 * -------------------------------------------------------------------------- */

*,
*::before,
*::after { box-sizing: border-box; }

html {
	scroll-behavior: smooth;
	-webkit-text-size-adjust: 100%;
}

@media (prefers-reduced-motion: reduce) {
	html { scroll-behavior: auto; }
	*, *::before, *::after {
		animation-duration: .001ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: .001ms !important;
	}
}

body { overflow-x: clip; }

/* Form controls must never outgrow their column on small screens. */
input, select, textarea, button { max-width: 100%; }

img, svg, video { max-width: 100%; height: auto; }

::selection { background: var(--pf-sky); color: var(--pf-midnight); }

:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
	outline: 3px solid var(--pf-blossom);
	outline-offset: 3px;
	border-radius: var(--pf-radius-s);
}

.pf-skip-link {
	position: absolute;
	top: -100px;
	left: 1rem;
	z-index: 999;
	padding: .75rem 1.25rem;
	background: var(--pf-midnight);
	color: #fff;
	border-radius: 0 0 var(--pf-radius-s) var(--pf-radius-s);
	text-decoration: none;
	font-size: .9375rem;
	transition: top var(--pf-ease);
}
.pf-skip-link:focus { top: 0; color: #fff; }

.pf-visually-hidden {
	position: absolute !important;
	width: 1px; height: 1px;
	padding: 0; margin: -1px;
	overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%);
	white-space: nowrap; border: 0;
}

/* Wider-than-wide container used by full-bleed sections */
.pf-xwide > .wp-block-group__inner-container,
.pf-xwide {
	--wp--style--global--wide-size: var(--wp--custom--max-width--xwide, 1400px);
}

/* -----------------------------------------------------------------------------
 * 2. Header
 * -------------------------------------------------------------------------- */

.pf-header {
	position: sticky;
	top: 0;
	z-index: 100;
	background: rgba(8, 20, 42, .82);
	-webkit-backdrop-filter: saturate(160%) blur(16px);
	backdrop-filter: saturate(160%) blur(16px);
	border-bottom: 1px solid transparent;
	transition: box-shadow var(--pf-ease), border-color var(--pf-ease), background var(--pf-ease);
}
.pf-header.is-stuck {
	background: rgba(6, 15, 34, .95);
	border-bottom-color: rgba(255, 255, 255, .1);
	box-shadow: 0 12px 34px rgba(0, 0, 0, .38);
}
.admin-bar .pf-header { top: 32px; }
@media (max-width: 782px) { .admin-bar .pf-header { top: 46px; } }

.pf-header .wp-block-site-logo img {
	height: clamp(38px, 3.4vw, 52px);
	width: auto;
	transition: transform var(--pf-ease);
}
.pf-header .wp-block-site-logo a:hover img { transform: scale(1.04) rotate(-2deg); }

.pf-brand-lockup { text-decoration: none; }
.pf-brand-name {
	font-family: var(--wp--preset--font-family--heading);
	font-size: clamp(1.05rem, .95rem + .4vw, 1.35rem);
	font-weight: 600;
	line-height: 1.05;
	color: var(--pf-heading);
	letter-spacing: -.015em;
	display: block;
}
.pf-brand-tag {
	display: block;
	font-size: .625rem;
	letter-spacing: .22em;
	text-transform: uppercase;
	color: var(--pf-teal-deep);
	font-weight: 600;
	margin-top: .25rem;
}

/* Desktop nav underline */
.pf-header .wp-block-navigation .wp-block-navigation-item__content {
	position: relative;
	padding-block: .35rem;
}
.pf-header .wp-block-navigation:not(.is-menu-open) .wp-block-navigation-item__content::after {
	content: "";
	position: absolute;
	left: 0; right: 0; bottom: 0;
	height: 2px;
	border-radius: 2px;
	background: var(--pf-blossom);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform var(--pf-ease);
}
.pf-header .wp-block-navigation:not(.is-menu-open) .wp-block-navigation-item__content:hover::after,
.pf-header .wp-block-navigation:not(.is-menu-open) .current-menu-item > .wp-block-navigation-item__content::after {
	transform: scaleX(1);
}
.pf-header .wp-block-navigation .current-menu-item > .wp-block-navigation-item__content { color: #fff; }

/* Mobile overlay */
.wp-block-navigation__responsive-container.is-menu-open {
	background: linear-gradient(160deg, #0c1f3d 0%, #123a5c 55%, #1d5e63 100%) !important;
	padding: clamp(1.5rem, 6vw, 3rem);
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content {
	padding-top: 2rem;
}
.wp-block-navigation__responsive-container.is-menu-open a {
	color: #fff !important;
	font-family: var(--wp--preset--font-family--heading);
	font-size: 1.6rem;
	font-weight: 500;
	letter-spacing: -.01em;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container { gap: .35rem; }
.wp-block-navigation__responsive-container-close,
.wp-block-navigation__responsive-container-open { padding: .5rem; }
.wp-block-navigation__responsive-container-open svg,
.wp-block-navigation__responsive-container-close svg { width: 28px; height: 28px; }

.pf-header > .wp-block-group,
.pf-header .wp-block-group { gap: clamp(1rem, 2vw, 2rem); }
.pf-header .wp-block-navigation { min-width: 0; flex: 0 1 auto; }
.pf-header-cta { flex: none; margin-left: .25rem; }
.pf-header-cta .wp-block-button__link {
	box-shadow: 0 6px 18px rgba(214, 42, 88, .28);
	white-space: nowrap;
}
@media (max-width: 900px) {
	.pf-header-cta { display: none; }
}

/* -----------------------------------------------------------------------------
 * 3. Section furniture
 * -------------------------------------------------------------------------- */

.pf-eyebrow {
	display: inline-flex;
	align-items: center;
	gap: .55rem;
	font-size: .75rem;
	font-weight: 600;
	letter-spacing: .18em;
	text-transform: uppercase;
	color: var(--pf-teal-deep);
	margin: 0 0 .75rem;
}
.pf-eyebrow::before {
	content: "";
	width: 26px;
	height: 2px;
	border-radius: 2px;
	background: currentColor;
	opacity: .5;
}
.pf-eyebrow.is-centered { justify-content: center; }
.has-midnight-background-color .pf-eyebrow,
.pf-on-dark .pf-eyebrow { color: var(--pf-sky); }

.pf-lede {
	font-size: clamp(1.0625rem, 1rem + .35vw, 1.25rem);
	line-height: 1.65;
	color: var(--pf-muted);
	max-width: 62ch;
}
.pf-on-dark .pf-lede { color: rgba(255, 255, 255, .82); }

.pf-section-head {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	justify-content: space-between;
	gap: 1rem 2rem;
	margin-bottom: clamp(2rem, 1.5rem + 1.6vw, 3rem);
}
.pf-section-head > * { margin: 0; }

/* Decorative aurora ribbon */
.pf-aurora-band {
	position: relative;
	isolation: isolate;
	overflow: hidden;
}
.pf-aurora-band::before {
	content: "";
	position: absolute;
	inset: -30% -10% auto -10%;
	height: 70%;
	background:
		radial-gradient(60% 120% at 20% 0%, rgba(46, 154, 147, .28), transparent 60%),
		radial-gradient(50% 110% at 78% 10%, rgba(139, 123, 216, .26), transparent 62%);
	filter: blur(28px);
	z-index: -1;
	pointer-events: none;
}

.pf-divider-paw {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 1rem;
	color: var(--pf-sky);
}
.pf-divider-paw::before,
.pf-divider-paw::after {
	content: "";
	height: 1px;
	flex: 1 1 auto;
	max-width: 180px;
	background: linear-gradient(90deg, transparent, rgba(159, 214, 232, .5), transparent);
}

/* -----------------------------------------------------------------------------
 * 4. Hero
 * -------------------------------------------------------------------------- */

.pf-hero {
	position: relative;
	isolation: isolate;
	display: grid;
	align-items: center;
	min-height: clamp(440px, 62vh, 720px);
	overflow: hidden;
	background: var(--pf-midnight);
}
.pf-hero__media {
	position: absolute;
	inset: 0;
	z-index: -2;
}
.pf-hero__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center right;
	display: block;
}
.pf-hero__scrim {
	position: absolute;
	inset: 0;
	z-index: -1;
	background:
		linear-gradient(90deg, rgba(7, 20, 38, .93) 0%, rgba(7, 20, 38, .78) 34%, rgba(7, 20, 38, .18) 70%, rgba(7, 20, 38, 0) 100%),
		linear-gradient(180deg, rgba(7, 20, 38, .35) 0%, rgba(7, 20, 38, 0) 40%);
}
.pf-hero__inner {
	width: 100%;
	max-width: var(--wp--custom--max-width--xwide, 1400px);
	margin-inline: auto;
	padding: clamp(3.5rem, 8vw, 7rem) clamp(1.25rem, 5vw, 3rem);
}
.pf-hero__content { max-width: 34rem; }
.pf-hero h1 {
	color: #fff;
	margin: 0 0 1rem;
	text-wrap: balance;
	text-shadow: 0 2px 24px rgba(7, 20, 38, .45);
}
.pf-hero p {
	color: rgba(255, 255, 255, .88);
	font-size: clamp(1.0625rem, 1rem + .4vw, 1.25rem);
	line-height: 1.65;
	margin: 0 0 1.75rem;
	max-width: 40ch;
	text-shadow: 0 1px 16px rgba(7, 20, 38, .4);
}

@media (max-width: 781px) {
	.pf-hero { min-height: 0; }
	.pf-hero__media { position: relative; inset: auto; aspect-ratio: 16 / 10; }
	.pf-hero__media img { position: static; }
	.pf-hero__scrim {
		background: linear-gradient(180deg, rgba(7, 20, 38, 0) 30%, rgba(7, 20, 38, .55) 72%, #0c1f3d 100%);
	}
	.pf-hero__inner {
		margin-top: -3rem;
		position: relative;
		background: linear-gradient(180deg, rgba(12, 31, 61, 0) 0%, #0c1f3d 14%);
		padding-top: 3rem;
	}
	.pf-hero__content { max-width: none; }
}

/* Compact page banner */
.pf-page-hero {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	background: var(--pf-midnight);
	color: #fff;
	padding-block: clamp(3.5rem, 6vw, 6rem);
}
.pf-page-hero::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	background:
		radial-gradient(90% 140% at 12% 0%, rgba(46, 154, 147, .38), transparent 58%),
		radial-gradient(70% 130% at 88% 100%, rgba(139, 123, 216, .34), transparent 60%),
		linear-gradient(120deg, #0c1f3d 0%, #10315a 60%, #0c1f3d 100%);
}
.pf-page-hero h1, .pf-page-hero h2 { color: #fff; margin: 0 0 .75rem; text-wrap: balance; }
.pf-page-hero p { color: rgba(255, 255, 255, .84); max-width: 60ch; margin: 0 auto; }
.pf-page-hero--left p { margin-inline: 0; }

/* -----------------------------------------------------------------------------
 * 5. Grids
 * -------------------------------------------------------------------------- */

.pf-grid {
	display: grid;
	gap: var(--pf-gap);
	grid-template-columns: 1fr;
	list-style: none;
	margin: 0;
	padding: 0;
}
/* Two per row on tablets, three on normal desktops, four or five on
   large screens — and always one per row on phones. */
@media (min-width: 600px) {
	.pf-grid[data-cols]:not([data-cols="1"]) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 900px) {
	.pf-grid[data-cols]:not([data-cols="1"]):not([data-cols="2"]) { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (min-width: 1200px) {
	.pf-grid[data-cols="4"]:not([data-cols="1"]):not([data-cols="2"]):not([data-cols="3"]) { grid-template-columns: repeat(4, minmax(0, 1fr)); }
	.pf-grid[data-cols="5"]:not([data-cols="1"]):not([data-cols="2"]):not([data-cols="3"]) { grid-template-columns: repeat(5, minmax(0, 1fr)); }
}
.pf-grid[data-cols="2"] { --pf-gap: clamp(1.5rem, 1rem + 2vw, 2.75rem); }

/* -----------------------------------------------------------------------------
 * 6. Cards
 * -------------------------------------------------------------------------- */

.pf-card {
	position: relative;
	display: flex;
	flex-direction: column;
	background: linear-gradient(180deg, rgba(255, 255, 255, .07) 0%, rgba(255, 255, 255, .03) 100%), var(--pf-surface);
	border: 1px solid rgba(255, 255, 255, .1);
	border-radius: var(--pf-radius-l);
	overflow: hidden;
	box-shadow: var(--pf-shadow-soft);
	transition: transform var(--pf-ease), box-shadow var(--pf-ease), border-color var(--pf-ease);
	height: 100%;
}
.pf-card:hover,
.pf-card:focus-within {
	transform: translateY(-4px);
	box-shadow: var(--pf-shadow-card);
	border-color: rgba(159, 214, 232, .42);
}
.pf-card__body {
	display: flex;
	flex-direction: column;
	gap: .6rem;
	padding: clamp(1.1rem, .9rem + .6vw, 1.6rem);
	flex: 1 1 auto;
}
.pf-card__title {
	font-family: var(--wp--preset--font-family--heading);
	font-size: 1.25rem;
	line-height: 1.25;
	font-weight: 600;
	color: var(--pf-heading);
	margin: 0;
	text-wrap: balance;
}
.pf-card__title a { color: inherit; text-decoration: none; }
.pf-card__title a::after { content: ""; position: absolute; inset: 0; z-index: 1; }
.pf-card__title a:hover { color: var(--pf-sky); }
.pf-card__meta {
	font-size: .8125rem;
	color: var(--pf-muted);
	margin: 0;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: .4rem .6rem;
}
.pf-card__meta .pf-dot { width: 3px; height: 3px; border-radius: 50%; background: currentColor; opacity: .5; }
.pf-card__author { color: var(--pf-teal-deep); font-weight: 600; }
.pf-card__excerpt { font-size: .9375rem; line-height: 1.62; color: var(--pf-muted); margin: 0; }
.pf-card__foot {
	margin-top: auto;
	padding-top: .35rem;
	display: flex;
	flex-wrap: wrap;
	gap: .6rem;
	align-items: center;
	position: relative;
	z-index: 2;
}

/* Media wells — covers are contained, never cropped */
.pf-media {
	position: relative;
	display: block;
	overflow: hidden;
	background:
		radial-gradient(120% 120% at 50% 0%, rgba(255, 255, 255, .1) 0%, rgba(6, 15, 34, .5) 100%),
		var(--pf-midnight);
}
.pf-media img { display: block; width: 100%; height: 100%; }
.pf-media--contain img { object-fit: contain; padding: clamp(.6rem, 2%, 1.25rem); }
.pf-media--cover img { object-fit: cover; }
.pf-media--square { aspect-ratio: 1 / 1; }
.pf-media--portrait { aspect-ratio: 3 / 4; }
.pf-media--book { aspect-ratio: 1 / 1; }
.pf-media--landscape { aspect-ratio: 3 / 2; }
.pf-media--wide { aspect-ratio: 16 / 9; }
.pf-media img { transition: transform 420ms cubic-bezier(.22, .61, .36, 1); }
.pf-card:hover .pf-media--cover img { transform: scale(1.035); }
.pf-card:hover .pf-media--contain img { transform: translateY(-3px) scale(1.015); }

/* Book card */
.pf-book-card .pf-card__body { gap: .45rem; }
.pf-book-number {
	font-size: .6875rem;
	font-weight: 600;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--pf-teal-deep);
}
.pf-book-card .pf-card__title { font-size: 1.125rem; }

/* Series card */
.pf-series-card .pf-card__title { font-size: clamp(1.3rem, 1.15rem + .5vw, 1.6rem); }
.pf-series-card--feature { display: grid; grid-template-columns: 1fr; }
@media (min-width: 860px) {
	.pf-series-card--feature { grid-template-columns: minmax(0, 42%) minmax(0, 58%); align-items: center; }
	/*
	 * Series artwork is square, so the panel that holds it is square too and
	 * the image is fitted inside rather than filled across. Stretching the
	 * panel to the height of the text beside it would crop the artwork left
	 * and right, which is exactly what we never want to do to cover art.
	 */
	.pf-series-card--feature .pf-media { aspect-ratio: 1 / 1; height: auto; min-height: 0; align-self: center; }
	.pf-series-card--feature .pf-card__body { padding: clamp(1.5rem, 1rem + 2vw, 2.75rem); justify-content: center; }
}
.pf-series-card--feature:nth-child(even) .pf-media { order: 2; }

/* Author card */
.pf-author-card { text-align: left; }
.pf-author-card .pf-media { border-radius: 0; }
.pf-author-card .pf-card__title { font-size: 1.4rem; }
.pf-author-role {
	font-size: .75rem;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--pf-blossom-deep);
	font-weight: 600;
}
.pf-author-works {
	list-style: none;
	margin: .25rem 0 0;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: .4rem;
	position: relative;
	z-index: 2;
}
.pf-author-works li a,
.pf-chip {
	display: inline-block;
	font-size: .75rem;
	font-weight: 500;
	padding: .3rem .7rem;
	border-radius: var(--pf-radius-pill);
	background: rgba(255, 255, 255, .07);
	border: 1px solid rgba(255, 255, 255, .16);
	color: var(--pf-ink);
	text-decoration: none;
	transition: background var(--pf-ease), color var(--pf-ease), border-color var(--pf-ease);
}
.pf-author-works li a:hover { background: var(--pf-sky); border-color: var(--pf-sky); color: var(--pf-midnight); }

/* Character card */
.pf-character-card { text-align: center; border-radius: var(--pf-radius-l); }
.pf-character-card .pf-media { border-radius: 50%; margin: 1.25rem auto 0; width: 74%; aspect-ratio: 1/1; border: 1px solid rgba(255, 255, 255, .18); }
.pf-character-card .pf-card__body { align-items: center; text-align: center; padding-top: 1rem; }
.pf-character-card .pf-card__title { font-size: 1.125rem; }
.pf-character-role {
	font-size: .6875rem;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--pf-teal-deep);
	font-weight: 600;
}
.pf-character-card .pf-card__excerpt { font-size: .875rem; }

/* News card */
.pf-news-card .pf-card__title { font-size: 1.125rem; }
.pf-news-cat {
	position: absolute;
	top: .9rem;
	left: .9rem;
	z-index: 2;
	background: rgba(6, 15, 34, .82);
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
	color: var(--pf-sky);
	font-size: .6875rem;
	font-weight: 600;
	letter-spacing: .1em;
	text-transform: uppercase;
	padding: .35rem .7rem;
	border-radius: var(--pf-radius-pill);
	text-decoration: none;
	box-shadow: 0 2px 8px rgba(12, 31, 61, .12);
}

/* Badges */
.pf-badge {
	display: inline-flex;
	align-items: center;
	gap: .35rem;
	font-size: .6875rem;
	font-weight: 600;
	letter-spacing: .1em;
	text-transform: uppercase;
	padding: .32rem .7rem;
	border-radius: var(--pf-radius-pill);
	line-height: 1;
}
.pf-badge--soon { background: rgba(159, 214, 232, .16); color: var(--pf-sky); border: 1px solid rgba(159, 214, 232, .45); }
.pf-badge--new { background: var(--pf-blossom); color: #fff; }
.pf-badge--featured { background: rgba(242, 61, 112, .16); color: #ffb3c8; border: 1px solid rgba(242, 61, 112, .5); }
.pf-badge--floating { position: absolute; top: .9rem; right: .9rem; z-index: 2; box-shadow: 0 2px 8px rgba(12, 31, 61, .14); }

/* Placeholder hint ribbon (only shown while a placeholder image is in use) */
.pf-media--placeholder::after {
	content: "Placeholder";
	position: absolute;
	left: 0;
	bottom: 0;
	background: rgba(12, 31, 61, .72);
	color: #fff;
	font-size: .625rem;
	letter-spacing: .12em;
	text-transform: uppercase;
	padding: .28rem .6rem;
	border-top-right-radius: var(--pf-radius-s);
	pointer-events: none;
}

/* -----------------------------------------------------------------------------
 * 7. Buttons & purchase row
 * -------------------------------------------------------------------------- */

.pf-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: .55rem;
	font-family: var(--wp--preset--font-family--body);
	font-size: .9375rem;
	font-weight: 600;
	line-height: 1.2;
	letter-spacing: .015em;
	padding: .9em 1.7em;
	border-radius: var(--pf-radius-pill);
	border: 1.5px solid transparent;
	text-decoration: none;
	cursor: pointer;
	transition: background var(--pf-ease), color var(--pf-ease), border-color var(--pf-ease), transform var(--pf-ease), box-shadow var(--pf-ease);
	min-height: 46px;
}
.pf-btn:hover { transform: translateY(-1px); text-decoration: none; }
.pf-btn:active { transform: translateY(0); }
.pf-btn--primary { background: var(--pf-blossom-deep); color: #fff; box-shadow: 0 6px 18px rgba(214, 42, 88, .26); }
.pf-btn--primary:hover { background: #b92450; color: #fff; box-shadow: 0 10px 26px rgba(214, 42, 88, .34); }
.pf-btn--secondary { background: rgba(255, 255, 255, .05); color: var(--pf-ink); border-color: rgba(255, 255, 255, .28); }
.pf-btn--secondary:hover { background: rgba(255, 255, 255, .12); border-color: var(--pf-sky); color: #fff; }
.pf-btn--ghost-light { background: rgba(255, 255, 255, .1); color: #fff; border-color: rgba(255, 255, 255, .55); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.pf-btn--ghost-light:hover { background: rgba(255, 255, 255, .96); color: var(--pf-midnight); border-color: #fff; }
.pf-btn--amazon { background: var(--pf-amazon); color: #fff; border-color: rgba(255, 255, 255, .18); }
.pf-btn--amazon:hover { background: #16407f; color: #fff; border-color: rgba(255, 255, 255, .34); }
.pf-btn--amazon-alt { background: rgba(255, 255, 255, .06); color: #fff; border-color: rgba(255, 255, 255, .28); }
.pf-btn--amazon-alt:hover { background: rgba(255, 255, 255, .14); color: #fff; }
.pf-btn--small { font-size: .8125rem; padding: .7em 1.25em; min-height: 40px; }
.pf-btn--large { font-size: 1rem; padding: 1em 2.1em; min-height: 54px; }
.pf-btn--block { width: 100%; }
.pf-btn[aria-disabled="true"],
.pf-btn--disabled {
	background: transparent;
	color: var(--pf-muted);
	border-color: rgba(255, 255, 255, .18);
	cursor: not-allowed;
	box-shadow: none;
	pointer-events: none;
}
.pf-btn svg { width: 1.05em; height: 1.05em; flex: none; }

.pf-btn-row {
	display: flex;
	flex-wrap: wrap;
	gap: .75rem;
	align-items: center;
}
.pf-btn-row--center { justify-content: center; }

.pf-buy {
	display: flex;
	flex-direction: column;
	gap: .65rem;
}
.pf-buy__label {
	font-size: .6875rem;
	letter-spacing: .16em;
	text-transform: uppercase;
	font-weight: 600;
	color: var(--pf-muted);
}
.pf-buy__row { display: flex; flex-wrap: wrap; gap: .65rem; }
.pf-buy__row .pf-btn { flex: 1 1 auto; min-width: 190px; }
.pf-buy__note { font-size: .8125rem; color: var(--pf-muted); margin: 0; }
.pf-on-dark .pf-buy__label, .pf-on-dark .pf-buy__note { color: rgba(255, 255, 255, .7); }

.pf-flag { width: 1.15em; height: auto; border-radius: 2px; flex: none; }

/* -----------------------------------------------------------------------------
 * 8. Single book / series layouts
 * -------------------------------------------------------------------------- */

.pf-detail-hero {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	background: var(--pf-midnight);
	color: #fff;
	padding-block: clamp(2.75rem, 5vw, 5rem);
}
.pf-detail-hero::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	background:
		radial-gradient(80% 130% at 8% 0%, rgba(46, 154, 147, .34), transparent 56%),
		radial-gradient(70% 120% at 92% 100%, rgba(139, 123, 216, .32), transparent 58%),
		linear-gradient(125deg, #08182f 0%, #0f2f52 55%, #0a2440 100%);
}
.pf-detail-hero__grid {
	display: grid;
	gap: clamp(1.75rem, 1rem + 3vw, 3.5rem);
	grid-template-columns: 1fr;
	align-items: center;
}
@media (min-width: 860px) {
	.pf-detail-hero__grid { grid-template-columns: minmax(240px, 34%) minmax(0, 1fr); }
}
.pf-detail-hero h1 { color: #fff; margin: 0 0 .5rem; text-wrap: balance; }
.pf-detail-hero p { color: rgba(255, 255, 255, .84); }
.pf-detail-hero .pf-kicker {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: .5rem .85rem;
	font-size: .8125rem;
	color: var(--pf-sky);
	margin: 0 0 .85rem;
}
.pf-detail-hero .pf-kicker a { color: var(--pf-sky); text-decoration-color: rgba(201, 232, 241, .45); }
.pf-detail-hero .pf-kicker a:hover { color: #fff; }

.pf-cover-frame {
	position: relative;
	border-radius: var(--pf-radius-l);
	background: rgba(255, 255, 255, .07);
	border: 1px solid rgba(255, 255, 255, .16);
	padding: clamp(.75rem, 2vw, 1.25rem);
	box-shadow: 0 30px 70px rgba(0, 0, 0, .42);
	max-width: 420px;
}
.pf-cover-frame img {
	display: block;
	width: 100%;
	height: auto;
	border-radius: var(--pf-radius-m);
	box-shadow: 0 10px 26px rgba(0, 0, 0, .3);
}
.pf-cover-frame::after {
	content: "";
	position: absolute;
	inset: auto 8% -18px 8%;
	height: 34px;
	background: radial-gradient(50% 100% at 50% 0%, rgba(0, 0, 0, .38), transparent 72%);
	z-index: -1;
	filter: blur(6px);
}

/* Information table */
.pf-meta-table {
	width: 100%;
	border-collapse: collapse;
	font-size: .9375rem;
	background: rgba(255, 255, 255, .04);
	border: 1px solid rgba(255, 255, 255, .12);
	border-radius: var(--pf-radius-m);
	overflow: hidden;
}
.pf-meta-table th,
.pf-meta-table td {
	text-align: left;
	padding: .8rem 1.1rem;
	border-bottom: 1px solid rgba(255, 255, 255, .09);
	vertical-align: top;
}
.pf-meta-table tr:last-child th,
.pf-meta-table tr:last-child td { border-bottom: 0; }
.pf-meta-table th {
	width: 38%;
	font-weight: 600;
	color: var(--pf-muted);
	background: rgba(255, 255, 255, .03);
	font-size: .8125rem;
	letter-spacing: .02em;
}
.pf-meta-table td { color: var(--pf-ink); }
@media (min-width: 700px) {
	.pf-meta-table--split { display: grid; grid-template-columns: 1fr 1fr; }
	.pf-meta-table--split tbody { display: contents; }
}

/* Themes / "What readers will discover" */
.pf-themes { display: flex; flex-wrap: wrap; gap: .6rem; list-style: none; margin: 0; padding: 0; }
.pf-theme-pill {
	display: inline-flex;
	align-items: center;
	gap: .5rem;
	padding: .55rem 1.05rem;
	border-radius: var(--pf-radius-pill);
	background: rgba(255, 255, 255, .06);
	border: 1px solid rgba(255, 255, 255, .16);
	font-size: .875rem;
	font-weight: 500;
	color: var(--pf-ink);
}
.pf-theme-pill svg { width: 16px; height: 16px; color: var(--pf-blossom); flex: none; }
.pf-on-dark .pf-theme-pill { background: rgba(255, 255, 255, .08); border-color: rgba(255, 255, 255, .18); color: #fff; box-shadow: none; }

/* Prev / next */
.pf-pager {
	display: grid;
	gap: 1rem;
	grid-template-columns: 1fr;
}
@media (min-width: 700px) { .pf-pager { grid-template-columns: 1fr 1fr; } }
.pf-pager__item {
	display: flex;
	align-items: center;
	gap: 1rem;
	padding: 1rem;
	border: 1px solid rgba(255, 255, 255, .12);
	border-radius: var(--pf-radius-m);
	background: rgba(255, 255, 255, .04);
	text-decoration: none;
	transition: border-color var(--pf-ease), box-shadow var(--pf-ease), transform var(--pf-ease);
}
.pf-pager__item:hover { border-color: var(--pf-sky); box-shadow: var(--pf-shadow-soft); transform: translateY(-2px); }
.pf-pager__item--next { text-align: right; flex-direction: row-reverse; justify-content: flex-start; }
.pf-pager__thumb { width: 62px; flex: none; border-radius: var(--pf-radius-s); overflow: hidden; background: rgba(255, 255, 255, .06); aspect-ratio: 1/1; }
.pf-pager__thumb img { width: 100%; height: 100%; object-fit: contain; }
.pf-pager__dir { display: block; font-size: .6875rem; letter-spacing: .14em; text-transform: uppercase; color: var(--pf-muted); font-weight: 600; }
.pf-pager__title { display: block; font-family: var(--wp--preset--font-family--heading); font-size: 1rem; color: var(--pf-heading); line-height: 1.3; }

/* Breadcrumbs */
.pf-breadcrumbs {
	font-size: .8125rem;
	color: var(--pf-muted);
	display: flex;
	flex-wrap: wrap;
	gap: .35rem .5rem;
	align-items: center;
	margin: 0 0 1rem;
	padding: 0;
	list-style: none;
}
.pf-breadcrumbs li { display: flex; align-items: center; gap: .5rem; }
.pf-breadcrumbs li + li::before { content: "›"; opacity: .55; }
.pf-breadcrumbs a { color: inherit; text-decoration: none; }
.pf-breadcrumbs a:hover { color: var(--pf-sky); text-decoration: underline; }
.pf-on-dark .pf-breadcrumbs, .pf-detail-hero .pf-breadcrumbs { color: rgba(255, 255, 255, .72); }
.pf-detail-hero .pf-breadcrumbs a:hover { color: #fff; }

/* -----------------------------------------------------------------------------
 * 9. Gallery + lightbox
 * -------------------------------------------------------------------------- */

.pf-gallery { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
.pf-gallery__item {
	border: 1px solid rgba(255, 255, 255, .1);
	padding: 0;
	background: rgba(255, 255, 255, .05);
	border-radius: var(--pf-radius-m);
	overflow: hidden;
	cursor: zoom-in;
	aspect-ratio: 1 / 1;
	box-shadow: var(--pf-shadow-soft);
	transition: transform var(--pf-ease), box-shadow var(--pf-ease);
}
.pf-gallery__item:hover { transform: translateY(-3px); box-shadow: var(--pf-shadow-card); }
.pf-gallery__item img { width: 100%; height: 100%; object-fit: cover; display: block; }

.pf-lightbox {
	position: fixed;
	inset: 0;
	z-index: 9999;
	display: none;
	align-items: center;
	justify-content: center;
	background: rgba(7, 20, 38, .93);
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
	padding: clamp(1rem, 4vw, 3rem);
}
.pf-lightbox[open], .pf-lightbox.is-open { display: flex; }
.pf-lightbox img { max-width: min(100%, 1100px); max-height: 82vh; border-radius: var(--pf-radius-m); box-shadow: 0 30px 80px rgba(0, 0, 0, .6); }
.pf-lightbox__caption { color: rgba(255, 255, 255, .8); text-align: center; margin-top: 1rem; font-size: .9375rem; }
.pf-lightbox__btn {
	position: absolute;
	background: rgba(255, 255, 255, .12);
	border: 1px solid rgba(255, 255, 255, .28);
	color: #fff;
	width: 48px; height: 48px;
	border-radius: 50%;
	display: grid;
	place-items: center;
	cursor: pointer;
	font-size: 1.4rem;
	line-height: 1;
	transition: background var(--pf-ease);
}
.pf-lightbox__btn:hover { background: rgba(255, 255, 255, .26); }
.pf-lightbox__close { top: clamp(1rem, 3vw, 2rem); right: clamp(1rem, 3vw, 2rem); }
.pf-lightbox__prev { left: clamp(.5rem, 2vw, 2rem); top: 50%; transform: translateY(-50%); }
.pf-lightbox__next { right: clamp(.5rem, 2vw, 2rem); top: 50%; transform: translateY(-50%); }

/* -----------------------------------------------------------------------------
 * 10. Forms
 * -------------------------------------------------------------------------- */

.pf-form { display: grid; gap: 1.1rem; }
.pf-form__row { display: grid; gap: 1.1rem; }
@media (min-width: 640px) { .pf-form__row--2 { grid-template-columns: 1fr 1fr; } }
.pf-field { display: grid; gap: .4rem; }
.pf-field label {
	font-size: .8125rem;
	font-weight: 600;
	letter-spacing: .02em;
	color: var(--pf-ink);
}
.pf-field option { background: var(--pf-surface); color: var(--pf-ink); }
.pf-field .pf-req { color: var(--pf-blossom-deep); }
.pf-field input[type="text"],
.pf-field input[type="email"],
.pf-field input[type="tel"],
.pf-field input[type="url"],
.pf-field select,
.pf-field textarea {
	width: 100%;
	font: inherit;
	font-size: .9375rem;
	color: var(--pf-ink);
	background: rgba(255, 255, 255, .06);
	border: 1.5px solid rgba(255, 255, 255, .2);
	border-radius: var(--pf-radius-m);
	padding: .8rem 1rem;
	min-height: 48px;
	transition: border-color var(--pf-ease), box-shadow var(--pf-ease);
	appearance: none;
}
.pf-field textarea { min-height: 150px; resize: vertical; line-height: 1.6; }
.pf-field select {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M5.5 7.5 10 12l4.5-4.5' stroke='%2393a9c6' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 1rem center;
	background-size: 20px;
	padding-right: 2.75rem;
}
.pf-field input:focus,
.pf-field select:focus,
.pf-field textarea:focus {
	border-color: var(--pf-blossom-deep);
	box-shadow: 0 0 0 4px rgba(242, 61, 112, .14);
	outline: none;
}
.pf-consent {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: .75rem;
	align-items: start;
	font-size: .875rem;
	color: var(--pf-muted);
	line-height: 1.55;
}
.pf-consent input[type="checkbox"] {
	width: 22px; height: 22px;
	margin: 1px 0 0;
	accent-color: var(--pf-blossom-deep);
	flex: none;
}
.pf-hp {
	position: absolute !important;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
	opacity: 0;
	pointer-events: none;
}
.pf-form__notice {
	border-radius: var(--pf-radius-m);
	padding: 1rem 1.25rem;
	font-size: .9375rem;
	border: 1px solid;
}
.pf-form__notice--ok { background: rgba(55, 199, 184, .14); border-color: rgba(55, 199, 184, .5); color: #a5eee4; }
.pf-form__notice--err { background: rgba(242, 61, 112, .14); border-color: rgba(242, 61, 112, .5); color: #ffc0d1; }
.pf-form__foot { display: flex; flex-wrap: wrap; gap: 1rem; align-items: center; }
.pf-form-card {
	background: linear-gradient(180deg, rgba(255, 255, 255, .07), rgba(255, 255, 255, .03));
	border: 1px solid rgba(255, 255, 255, .12);
	border-radius: var(--pf-radius-l);
	padding: clamp(1.5rem, 1rem + 2vw, 2.75rem);
	box-shadow: var(--pf-shadow-soft);
}

/* Newsletter band */
.pf-newsletter {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	color: #fff;
	border-radius: var(--pf-radius-l);
	padding: clamp(2rem, 1.5rem + 3vw, 4rem);
	background: linear-gradient(125deg, #0a1830 0%, #123a63 48%, #16564f 100%);
	border: 1px solid rgba(255, 255, 255, .12);
}
.pf-newsletter::before {
	content: "";
	position: absolute;
	inset: -40% -10% auto -10%;
	height: 120%;
	background:
		radial-gradient(45% 60% at 18% 22%, rgba(126, 107, 224, .38), transparent 62%),
		radial-gradient(40% 55% at 82% 12%, rgba(55, 199, 184, .32), transparent 60%);
	filter: blur(14px);
	z-index: -1;
}
.pf-newsletter h2, .pf-newsletter h3 { color: #fff; margin: 0 0 .6rem; }
.pf-newsletter p { color: rgba(255, 255, 255, .82); margin: 0 0 1.5rem; max-width: 56ch; }
.pf-newsletter .pf-field label { color: rgba(255, 255, 255, .9); }
.pf-newsletter .pf-consent { color: rgba(255, 255, 255, .78); }
.pf-newsletter .pf-consent a { color: #fff; }
.pf-newsletter .pf-field input { background: rgba(255, 255, 255, .1); border-color: rgba(255, 255, 255, .26); color: #fff; }
.pf-newsletter .pf-field input::placeholder { color: rgba(255, 255, 255, .55); }
.pf-newsletter-inline { display: grid; gap: 1rem; }
@media (min-width: 720px) {
	.pf-newsletter--split { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: clamp(2rem, 4vw, 4rem); align-items: center; }
	.pf-newsletter--split p { margin-bottom: 0; }
}

/* -----------------------------------------------------------------------------
 * 11. Shop
 * -------------------------------------------------------------------------- */

.pf-shop-card { text-align: center; }
.pf-shop-card .pf-card__body { align-items: center; gap: .5rem; }
.pf-shop-card .pf-media { aspect-ratio: 1 / 1; }
.pf-notice-band {
	display: flex;
	flex-wrap: wrap;
	gap: 1rem 1.5rem;
	align-items: center;
	justify-content: space-between;
	background: linear-gradient(120deg, rgba(255, 255, 255, .07), rgba(255, 255, 255, .03));
	border: 1px solid rgba(255, 255, 255, .14);
	border-radius: var(--pf-radius-l);
	padding: clamp(1.25rem, 1rem + 1.5vw, 2rem);
}
.pf-notice-band p { margin: 0; color: var(--pf-ink); }
.pf-notice-band strong { color: #fff; }

/* -----------------------------------------------------------------------------
 * 12. Footer
 * -------------------------------------------------------------------------- */

.pf-footer {
	background: var(--pf-midnight);
	color: rgba(255, 255, 255, .72);
	position: relative;
	isolation: isolate;
	overflow: hidden;
}
.pf-footer::before {
	content: "";
	position: absolute;
	inset: -60% -20% auto -20%;
	height: 90%;
	background:
		radial-gradient(40% 55% at 22% 30%, rgba(46, 154, 147, .3), transparent 62%),
		radial-gradient(38% 52% at 78% 18%, rgba(139, 123, 216, .28), transparent 60%);
	filter: blur(20px);
	z-index: -1;
	pointer-events: none;
}
.pf-footer a { color: rgba(255, 255, 255, .78); text-decoration: none; }
.pf-footer a:hover { color: #fff; text-decoration: underline; }
.pf-footer h2, .pf-footer h3, .pf-footer h4 { color: #fff; }
.pf-footer__grid {
	display: grid;
	gap: clamp(2rem, 1rem + 3vw, 3.5rem);
	grid-template-columns: 1fr;
}
@media (min-width: 700px) { .pf-footer__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1000px) { .pf-footer__grid { grid-template-columns: 1.5fr 1fr 1fr 1fr; } }
.pf-footer__heading {
	font-family: var(--wp--preset--font-family--body);
	font-size: .75rem;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--pf-sky);
	font-weight: 600;
	margin: 0 0 1rem;
}
.pf-footer__list { list-style: none; margin: 0; padding: 0; display: grid; gap: .6rem; font-size: .9375rem; }
.pf-footer__brand img { height: 54px; width: auto; }
.pf-footer__statement { font-size: .9375rem; line-height: 1.7; max-width: 34ch; margin: 1rem 0 1.25rem; }
.pf-social { display: flex; gap: .6rem; flex-wrap: wrap; margin: 0; padding: 0; list-style: none; }
.pf-social a {
	width: 42px; height: 42px;
	display: grid;
	place-items: center;
	border-radius: 50%;
	background: rgba(255, 255, 255, .08);
	border: 1px solid rgba(255, 255, 255, .16);
	transition: background var(--pf-ease), transform var(--pf-ease), border-color var(--pf-ease);
}
.pf-social a:hover { background: var(--pf-blossom); border-color: var(--pf-blossom); transform: translateY(-2px); }
.pf-social svg { width: 19px; height: 19px; fill: currentColor; color: #fff; }
.pf-social a[aria-disabled="true"] { opacity: .42; pointer-events: none; }
.pf-footer__bar {
	border-top: 1px solid rgba(255, 255, 255, .12);
	margin-top: clamp(2.5rem, 4vw, 3.5rem);
	padding-top: 1.75rem;
	display: flex;
	flex-wrap: wrap;
	gap: .75rem 1.75rem;
	align-items: center;
	justify-content: space-between;
	font-size: .8125rem;
}
.pf-footer__legal { display: flex; flex-wrap: wrap; gap: .75rem 1.5rem; list-style: none; margin: 0; padding: 0; }

/* -----------------------------------------------------------------------------
 * 13. Motion — gentle, reduced-motion aware
 * -------------------------------------------------------------------------- */

.pf-reveal {
	opacity: 0;
	transform: translateY(18px);
	transition: opacity 620ms cubic-bezier(.22, .61, .36, 1), transform 620ms cubic-bezier(.22, .61, .36, 1);
	will-change: opacity, transform;
}
.pf-reveal.is-visible { opacity: 1; transform: none; }
.no-js .pf-reveal, .pf-no-reveal .pf-reveal { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
	.pf-reveal { opacity: 1 !important; transform: none !important; }
}

/* -----------------------------------------------------------------------------
 * 14. Cookie notice
 * -------------------------------------------------------------------------- */

.pf-cookie {
	position: fixed;
	left: clamp(.75rem, 3vw, 1.5rem);
	right: clamp(.75rem, 3vw, 1.5rem);
	bottom: clamp(.75rem, 3vw, 1.5rem);
	z-index: 400;
	max-width: 640px;
	margin-inline: auto;
	background: var(--pf-surface);
	border: 1px solid rgba(255, 255, 255, .16);
	border-radius: var(--pf-radius-l);
	box-shadow: var(--pf-shadow-lift);
	padding: 1.25rem 1.5rem;
	display: none;
	gap: 1rem;
	align-items: center;
	flex-wrap: wrap;
	font-size: .875rem;
	color: var(--pf-muted);
}
.pf-cookie.is-visible { display: flex; }
.pf-cookie p { margin: 0; flex: 1 1 260px; }

/* -----------------------------------------------------------------------------
 * 15. Editor + utility
 * -------------------------------------------------------------------------- */

.pf-empty-note {
	border: 1px dashed rgba(255, 255, 255, .24);
	border-radius: var(--pf-radius-m);
	background: rgba(255, 255, 255, .04);
	color: var(--pf-muted);
	padding: 1.5rem;
	font-size: .9375rem;
	text-align: center;
}
.pf-stack-tight > * + * { margin-top: .5rem; }
.pf-text-center { text-align: center; }
.pf-mt-0 { margin-top: 0; }
.pf-mb-0 { margin-bottom: 0; }
.pf-full-bleed { width: 100vw; max-width: 100vw; margin-left: calc(50% - 50vw); margin-right: calc(50% - 50vw); }

/* Search results / archive list */
.pf-result {
	display: grid;
	gap: 1.25rem;
	grid-template-columns: 96px 1fr;
	align-items: start;
	padding-block: 1.5rem;
	border-bottom: 1px solid var(--pf-line);
}
.pf-result__thumb { border-radius: var(--pf-radius-m); overflow: hidden; background: rgba(255, 255, 255, .06); aspect-ratio: 1/1; }
.pf-result__thumb img { width: 100%; height: 100%; object-fit: contain; }
.pf-result__type { font-size: .6875rem; letter-spacing: .14em; text-transform: uppercase; color: var(--pf-teal-deep); font-weight: 600; }
.pf-result h3 { margin: .25rem 0 .4rem; font-size: 1.15rem; }
.pf-result p { margin: 0; font-size: .9375rem; color: var(--pf-muted); }
@media (max-width: 560px) { .pf-result { grid-template-columns: 64px 1fr; gap: 1rem; } }

/* Print */
@media print {
	.pf-header, .pf-footer, .pf-cookie, .pf-newsletter, .pf-btn { display: none !important; }
	body { color: #000; background: #fff; }
}

/* -----------------------------------------------------------------------------
 * 16. About the author / author notes
 * -------------------------------------------------------------------------- */

.pf-about-author__inner {
	display: grid;
	gap: clamp(1.5rem, 1rem + 2vw, 2.75rem);
	grid-template-columns: 1fr;
	align-items: center;
	background: linear-gradient(180deg, rgba(255, 255, 255, .07), rgba(255, 255, 255, .03));
	border: 1px solid rgba(255, 255, 255, .12);
	border-radius: var(--pf-radius-l);
	padding: clamp(1.25rem, 1rem + 1.5vw, 2rem);
	box-shadow: var(--pf-shadow-soft);
}
@media (min-width: 700px) {
	.pf-about-author__inner { grid-template-columns: minmax(160px, 220px) minmax(0, 1fr); }
}
.pf-about-author__photo { display: block; border-radius: var(--pf-radius-m); overflow: hidden; }
.pf-about-author__photo .pf-media { border-radius: var(--pf-radius-m); }
.pf-about-author h3 { font-size: clamp(1.35rem, 1.2rem + .6vw, 1.75rem); margin-bottom: .35rem; }
.pf-about-author p { margin-block: 0 .85rem; }

.pf-author-note { margin-bottom: clamp(1.5rem, 1rem + 1.5vw, 2.5rem); }
.pf-author-note p:not(.pf-eyebrow) { margin: 0 0 1rem; }
.pf-author-note--quote {
	background: linear-gradient(135deg, rgba(126, 107, 224, .16), rgba(55, 199, 184, .1));
	border: 1px solid rgba(255, 255, 255, .14);
	border-radius: var(--pf-radius-l);
	padding: clamp(1.5rem, 1rem + 2vw, 2.5rem);
}
.pf-author-note--quote p:not(.pf-eyebrow) {
	font-family: var(--wp--preset--font-family--heading);
	font-size: clamp(1.1rem, 1rem + .5vw, 1.35rem);
	font-style: italic;
	line-height: 1.65;
	color: #fff;
}

/* -----------------------------------------------------------------------------
 * 17. Core block adjustments
 * -------------------------------------------------------------------------- */

/* Footer columns stack cleanly and inherit the footer link colours */
.pf-footer .wp-block-columns { gap: clamp(2rem, 1rem + 3vw, 3.5rem); }
.pf-footer .wp-block-site-logo img { height: 56px; width: auto; }
.pf-footer .pf-footer__list li { line-height: 1.5; }
.pf-footer .wp-block-list { list-style: none; padding-left: 0; }

/* News archive cards built from core query blocks */
.pf-post-template.wp-block-post-template { gap: var(--pf-gap); }
.pf-post-template .pf-card { padding: 0; }
.pf-post-template .pf-card .wp-block-post-featured-image { margin: 0; }
.pf-post-template .pf-card .wp-block-post-featured-image img { border-radius: 0; }
.pf-post-template .pf-card__body > * { margin-block: 0; }
.pf-post-template .pf-card__body { gap: .55rem; }
.pf-post-template .wp-block-post-title { font-size: 1.125rem; line-height: 1.3; }
.pf-post-template .wp-block-post-title a { text-decoration: none; color: var(--pf-heading); }
.pf-post-template .wp-block-post-title a:hover { color: var(--pf-sky); }
.pf-post-template .wp-block-post-excerpt__excerpt { font-size: .9375rem; color: var(--pf-muted); line-height: 1.6; }
.pf-post-template .wp-block-post-excerpt__more-link { display: none; }

/* Category pill row on the news index */
.pf-category-pills.wp-block-categories {
	list-style: none;
	padding: 0;
	margin: 0 0 clamp(2rem, 1.5rem + 1.5vw, 3rem);
	display: flex;
	flex-wrap: wrap;
	gap: .55rem;
	justify-content: center;
}
.pf-category-pills.wp-block-categories li a {
	display: inline-block;
	padding: .5rem 1.1rem;
	border-radius: var(--pf-radius-pill);
	background: rgba(255, 255, 255, .06);
	border: 1px solid rgba(255, 255, 255, .16);
	font-size: .875rem;
	color: var(--pf-ink);
	text-decoration: none;
	transition: background var(--pf-ease), border-color var(--pf-ease), color var(--pf-ease);
}
.pf-category-pills.wp-block-categories li a:hover {
	background: var(--pf-sky);
	border-color: var(--pf-sky);
	color: var(--pf-midnight);
}

/* Query pagination */
.wp-block-query-pagination { font-size: .9375rem; gap: .5rem; }
.wp-block-query-pagination a,
.wp-block-query-pagination .page-numbers {
	padding: .45rem .85rem;
	border-radius: var(--pf-radius-s);
	text-decoration: none;
	color: var(--pf-ink);
}
.wp-block-query-pagination .current { background: rgba(255, 255, 255, .12); color: #fff; }
.wp-block-query-pagination a:hover { background: rgba(255, 255, 255, .08); }

/* Search block */
.wp-block-search__inside-wrapper {
	border: 1.5px solid rgba(255, 255, 255, .2);
	border-radius: var(--pf-radius-pill);
	background: rgba(255, 255, 255, .06);
	padding: .25rem .25rem .25rem 1.1rem;
	max-width: 520px;
	margin-inline: auto;
}
.wp-block-search__input { border: 0 !important; background: transparent; min-height: 44px; font-size: .9375rem; }
.wp-block-search__input:focus { outline: none; box-shadow: none; }
.wp-block-search .wp-block-search__button { border-radius: var(--pf-radius-pill); margin: 0; }
.pf-page-hero .wp-block-search__inside-wrapper { border-color: rgba(255, 255, 255, .3); background: rgba(255, 255, 255, .08); }

/* Post content rhythm */
.pf-main .wp-block-post-content > * + * { margin-top: 1.5rem; }
.pf-main .wp-block-post-content h2 { margin-top: 2.5rem; }
.pf-main .wp-block-post-content h3 { margin-top: 2rem; }

/* Post terms on cards */
.pf-post-template .wp-block-post-terms a { text-decoration: none; }

/* Featured image wells inside cards keep the rounded top corners */
.pf-card > .wp-block-post-featured-image:first-child img,
.pf-card > .pf-media:first-child,
.pf-card > .pf-media-link:first-child .pf-media { border-radius: 0; }


/* -----------------------------------------------------------------------------
 * 18. Series and book presentation (matching the Kelyoria design)
 * -------------------------------------------------------------------------- */

/* The "BOOK ONE" ribbon that sits above each cover */
.pf-book-card { text-align: center; }
.pf-book-ribbon {
	display: block;
	padding: .55rem 1rem;
	background: linear-gradient(180deg, rgba(255, 255, 255, .13), rgba(255, 255, 255, .06));
	border-bottom: 1px solid rgba(255, 255, 255, .12);
	font-size: .6875rem;
	font-weight: 600;
	letter-spacing: .2em;
	text-transform: uppercase;
	color: var(--pf-sky);
	text-align: center;
}
.pf-book-card .pf-media { margin: clamp(.9rem, 3%, 1.4rem); border-radius: var(--pf-radius-m); border: 1px solid rgba(255, 255, 255, .1); }
.pf-book-card .pf-card__body { align-items: center; text-align: center; padding-top: .25rem; gap: .55rem; }
.pf-book-card .pf-card__title {
	font-size: 1.15rem;
	line-height: 1.28;
	color: var(--pf-sky);
}
.pf-book-card .pf-card__title a { color: inherit; }
.pf-book-card .pf-card__title a:hover { color: #fff; }
.pf-book-card .pf-card__excerpt { font-size: .875rem; }
.pf-book-card .pf-card__foot { justify-content: center; width: 100%; }
.pf-book-card .pf-card__foot .pf-btn { width: 100%; }

/* Centred section headings with a paw divider, as in the series design */
.pf-section-title {
	text-align: center;
	margin-bottom: 0;
}
.pf-section-title + .pf-paw-rule { margin-block: .9rem 1.25rem; }
.pf-paw-rule {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: .9rem;
	color: rgba(159, 214, 232, .85);
}
.pf-paw-rule::before,
.pf-paw-rule::after {
	content: "";
	height: 1px;
	width: clamp(40px, 12vw, 130px);
	background: linear-gradient(90deg, transparent, rgba(159, 214, 232, .55), transparent);
}
.pf-paw-rule svg { width: 18px; height: 18px; opacity: .9; }

/* "More adventures are coming" band */
.pf-coming-band {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	border-radius: var(--pf-radius-l);
	padding: clamp(2rem, 1.5rem + 2vw, 3.25rem) clamp(1.25rem, 4vw, 3rem);
	text-align: center;
	background:
		radial-gradient(80% 130% at 20% 0%, rgba(55, 199, 184, .3), transparent 60%),
		radial-gradient(70% 120% at 82% 100%, rgba(126, 107, 224, .32), transparent 58%),
		linear-gradient(120deg, #0b2144 0%, #123a63 55%, #0b2144 100%);
	border: 1px solid rgba(255, 255, 255, .12);
}
.pf-coming-band h2 {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: .85rem;
	font-size: clamp(1.35rem, 1.1rem + 1.1vw, 1.9rem);
	margin: 0 0 .5rem;
	color: #fff;
}
.pf-coming-band h2 svg { width: 20px; height: 20px; color: var(--pf-sky); }
.pf-coming-band p { margin: 0; color: rgba(255, 255, 255, .8); }

/* Circular portrait beside the newsletter, as in the design */
.pf-newsletter__portrait {
	width: clamp(96px, 12vw, 132px);
	aspect-ratio: 1 / 1;
	border-radius: 50%;
	overflow: hidden;
	border: 2px solid rgba(255, 255, 255, .28);
	flex: none;
	background: rgba(255, 255, 255, .06);
}
.pf-newsletter__portrait img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pf-newsletter__intro { display: flex; align-items: center; gap: clamp(1rem, 2.5vw, 1.75rem); }
@media (max-width: 600px) {
	.pf-newsletter__intro { flex-direction: column; align-items: flex-start; }
}

/* Amazon glyph inside the buy buttons */
.pf-amazon-mark { width: 1.15em; height: 1.15em; flex: none; }

/* Long book titles in the hero should not run edge to edge */
.pf-detail-hero h1 { max-width: 22ch; }

/* Series and character headers lead with the words and place the artwork
   on the right, matching the Kelyoria design. */
@media (min-width: 860px) {
	.pf-detail-hero--media-right .pf-detail-hero__grid { grid-template-columns: minmax(0, 1fr) minmax(260px, 40%); }
	.pf-detail-hero--media-right .pf-detail-hero__grid > .pf-cover-frame { order: 2; margin-left: auto; }
}
.pf-detail-hero--media-right .pf-cover-frame { max-width: 460px; }

/* The series title reads as a two-line serif lockup */
.pf-detail-hero h1 {
	font-size: clamp(2.2rem, 1.6rem + 3vw, 3.9rem);
	line-height: 1.06;
	letter-spacing: -0.015em;
}
.pf-detail-hero .pf-kicker {
	text-transform: uppercase;
	letter-spacing: .16em;
	font-size: .75rem;
	font-weight: 600;
}

/* -----------------------------------------------------------------------------
 * 19. Block style variations (registered in inc/block-styles.php)
 * -------------------------------------------------------------------------- */

.wp-block-group.is-style-pf-card-panel {
	background:linear-gradient(180deg,rgba(255,255,255,.07),rgba(255,255,255,.03));
	border:1px solid rgba(255,255,255,.12);
	border-radius:var(--wp--custom--radius--large);
	box-shadow:var(--wp--custom--shadow--soft);
	padding:clamp(1.5rem,1rem + 2vw,2.75rem);
}

.wp-block-group.is-style-pf-aurora {
	position:relative;
	isolation:isolate;
	overflow:hidden;
}
.wp-block-group.is-style-pf-aurora::before {
	content:"";
	position:absolute;
	inset:-30% -10% auto -10%;
	height:80%;
	background:radial-gradient(55% 70% at 20% 20%,rgba(55,199,184,.26),transparent 62%),radial-gradient(50% 65% at 80% 10%,rgba(126,107,224,.26),transparent 60%);
	filter:blur(26px);
	z-index:-1;
	pointer-events:none;
}

.wp-block-image.is-style-pf-framed img {
	border-radius:var(--wp--custom--radius--large);
	box-shadow:var(--wp--custom--shadow--card);
	border:1px solid rgba(255,255,255,.16);
}

.wp-block-image.is-style-pf-contain img {
	object-fit:contain !important;
	background:linear-gradient(160deg,rgba(255,255,255,.1),rgba(6,15,34,.5));
	border-radius:var(--wp--custom--radius--medium);
	padding:.75rem;
}

.wp-block-heading.is-style-pf-eyebrow {
	font-family:var(--wp--preset--font-family--body);
	font-size:.75rem;
	font-weight:600;
	letter-spacing:.18em;
	text-transform:uppercase;
	color:var(--wp--preset--color--teal-deep);
}

.wp-block-heading.is-style-pf-underline::after {
	content:"";
	display:block;
	width:72px;
	height:4px;
	border-radius:4px;
	margin-top:.85rem;
	background:linear-gradient(90deg,#F23D70,#7E6BE0);
}
.wp-block-heading.is-style-pf-underline.has-text-align-center::after {
	margin-inline:auto;
}

.wp-block-heading.is-style-pf-paw-rule {
	text-align:center;
}
.wp-block-heading.is-style-pf-paw-rule::after {
	content:"";
	display:flex;
	align-items:center;
	justify-content:center;
	height:22px;
	margin:.9rem auto 0;
	width:min(320px,80%);
	background:linear-gradient(90deg,transparent,rgba(159,214,232,.55) 22%,rgba(159,214,232,.55) 78%,transparent) center/100% 1px no-repeat,url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%239FD6E8'%3E%3Cellipse cx='7' cy='8' rx='2.1' ry='2.8'/%3E%3Cellipse cx='12' cy='6.4' rx='2.2' ry='3'/%3E%3Cellipse cx='17' cy='8' rx='2.1' ry='2.8'/%3E%3Cellipse cx='12' cy='15.6' rx='4.6' ry='3.8'/%3E%3C/svg%3E") center/18px no-repeat;
}

.wp-block-button.is-style-pf-outline .wp-block-button__link {
	background:rgba(255,255,255,.05);
	color:var(--wp--preset--color--contrast);
	border:1.5px solid rgba(255,255,255,.28);
	box-shadow:none;
}
.wp-block-button.is-style-pf-outline .wp-block-button__link:hover {
	border-color:var(--wp--preset--color--sky);
	color:#fff;
	background:rgba(255,255,255,.12);
}

.wp-block-button.is-style-pf-ghost-light .wp-block-button__link {
	background:rgba(255,255,255,.1);
	color:#fff;
	border:1.5px solid rgba(255,255,255,.55);
	backdrop-filter:blur(6px);
}
.wp-block-button.is-style-pf-ghost-light .wp-block-button__link:hover {
	background:#fff;
	color:var(--wp--preset--color--midnight);
}

.wp-block-separator.is-style-pf-paw {
	border:0;
	height:auto;
	text-align:center;
	max-width:none;
}
.wp-block-separator.is-style-pf-paw::before {
	content:"";
	display:block;
	height:1px;
	background:linear-gradient(90deg,transparent,rgba(159,214,232,.45) 22%,rgba(159,214,232,.45) 78%,transparent);
}
.wp-block-separator.is-style-pf-paw::after {
	content:"";
	display:block;
	width:26px;
	height:26px;
	margin:-13px auto 0;
	border-radius:50%;
	background:var(--wp--preset--color--base) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23F23D70'%3E%3Cellipse cx='7' cy='8' rx='2.1' ry='2.8'/%3E%3Cellipse cx='12' cy='6.4' rx='2.2' ry='3'/%3E%3Cellipse cx='17' cy='8' rx='2.1' ry='2.8'/%3E%3Cellipse cx='12' cy='15.6' rx='4.6' ry='3.8'/%3E%3C/svg%3E") center/16px no-repeat;
}

.wp-block-list.is-style-pf-check {
	list-style:none;
	padding-left:0;
}
.wp-block-list.is-style-pf-check li {
	position:relative;
	padding-left:2rem;
	margin-bottom:.7rem;
}
.wp-block-list.is-style-pf-check li::before {
	content:"";
	position:absolute;
	left:0;
	top:.35em;
	width:20px;
	height:20px;
	border-radius:50%;
	background:var(--wp--preset--color--sky) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230A1830' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") center/12px no-repeat;
}


/* -----------------------------------------------------------------------------
 * 20. Fixes from visual review
 * -------------------------------------------------------------------------- */

/* Navigation labels should never break mid-item */
.pf-header .wp-block-navigation-item__content { white-space: nowrap; }

/* On a book card the Coming Soon badge sits below the number ribbon */
.pf-book-card .pf-badge--floating { top: 3.1rem; right: 1.5rem; }

/* Centred section headings with a paw rule, used on series pages */
.wp-block-heading.is-style-pf-paw-rule { text-align: center; }
.wp-block-heading.is-style-pf-paw-rule::after {
	content: "";
	display: block;
	height: 22px;
	margin: .9rem auto 0;
	width: min(320px, 80%);
	background:
		linear-gradient(90deg, transparent, rgba(159, 214, 232, .55) 22%, rgba(159, 214, 232, .55) 78%, transparent) center / 100% 1px no-repeat,
		url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%239FD6E8'%3E%3Cellipse cx='7' cy='8' rx='2.1' ry='2.8'/%3E%3Cellipse cx='12' cy='6.4' rx='2.2' ry='3'/%3E%3Cellipse cx='17' cy='8' rx='2.1' ry='2.8'/%3E%3Cellipse cx='12' cy='15.6' rx='4.6' ry='3.8'/%3E%3C/svg%3E") center / 18px no-repeat;
}

/* -----------------------------------------------------------------------------
 * 21. Full-width banners inside page content
 * -------------------------------------------------------------------------- */

/*
 * Page banners are written as full-width blocks, but on pages built from a
 * pattern they sit one level deeper — inside the post content — so WordPress
 * only lets them escape the content column, not the page padding. This puts
 * them back edge to edge. `overflow-x: clip` on the body absorbs the scrollbar
 * width, so nothing scrolls sideways.
 */
.pf-main .wp-block-post-content > .alignfull {
	width: auto;
	max-width: none;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
}

/*
 * Group banners lost the page padding on the way out, so give it back and
 * re-centre their contents. Cover blocks are deliberately excluded: they carry
 * their own background layer, image and inner container, and constraining
 * those would shrink the artwork to the width of a text column.
 */
.pf-main .wp-block-post-content > .wp-block-group.alignfull {
	padding-left: var(--wp--style--root--padding-left, clamp(1.25rem, 5vw, 3rem));
	padding-right: var(--wp--style--root--padding-right, clamp(1.25rem, 5vw, 3rem));
}
.pf-main .wp-block-post-content > .wp-block-group.alignfull > :where(:not(.alignfull):not(.alignwide)) {
	max-width: var(--wp--style--global--content-size);
	margin-inline: auto;
}
.pf-main .wp-block-post-content > .wp-block-group.alignfull > .alignwide {
	max-width: var(--wp--style--global--wide-size);
	margin-inline: auto;
}

/*
 * Inside a banner, a block set to Wide width or Full width must actually get
 * it. Full width cancels the banner's own side padding so the block reaches
 * the true edges of the screen; wide stops at the wide container.
 */
.pf-main .wp-block-post-content > .wp-block-group.alignfull > .alignfull,
.pf-page-hero > .alignfull,
.pf-page-hero > .wp-block-group__inner-container > .alignfull {
	max-width: none;
	width: auto;
	margin-left: calc(var(--wp--style--root--padding-left, clamp(1.25rem, 5vw, 3rem)) * -1);
	margin-right: calc(var(--wp--style--root--padding-right, clamp(1.25rem, 5vw, 3rem)) * -1);
}
.pf-page-hero > .alignwide,
.pf-page-hero > .wp-block-group__inner-container > .alignwide {
	max-width: var(--wp--style--global--wide-size);
	margin-inline: auto;
	width: auto;
}

/* The same inside a cover banner, such as the home page hero. */
.wp-block-cover .wp-block-cover__inner-container > .alignfull {
	max-width: none;
	width: auto;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
}
.wp-block-cover .wp-block-cover__inner-container > .alignwide {
	max-width: var(--wp--style--global--wide-size);
	margin-inline: auto;
	width: auto;
}

/* An image told to be wide or full should fill the space it was given. */
.wp-block-image.alignfull,
.wp-block-image.alignwide { width: auto; }
.wp-block-image.alignfull img,
.wp-block-image.alignwide img,
.pf-page-hero .wp-block-image.alignfull img,
.pf-page-hero .wp-block-image.alignwide img {
	width: 100%;
	height: auto;
	max-width: none;
}
.wp-block-image.alignfull > figure,
.wp-block-image.alignwide > figure { width: 100%; }

/*
 * A cover's background layers must always fill it. Nothing in the theme should
 * ever constrain them, but this makes that explicit so a stray width rule can
 * never shrink the artwork.
 */
.wp-block-cover > .wp-block-cover__background,
.wp-block-cover > .wp-block-cover__gradient-background,
.wp-block-cover > .wp-block-cover__image-background,
.wp-block-cover > video.wp-block-cover__video-background {
	max-width: none;
	margin: 0;
}
