/*
 * PsychExpat · Soft editorial (Figma Version 2).
 * Components map 1:1 to the Figma "Editorial (Version 2)" components.
 */

/* ---------- base ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body { margin: 0; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; }
img { max-width: 100%; height: auto; }
:where(.wp-site-blocks) > * { margin-block-start: 0; margin-block-end: 0; }
.wp-block-post-content.px-canvas > * { margin-block-start: 0; }
.wp-block-template-part { margin-block: 0; }
:focus-visible { outline: 2px solid var(--px-focus); outline-offset: 3px; border-radius: 4px; }
.px-skip { position: absolute; left: -9999px; top: 8px; z-index: 100; background: var(--px-surface); color: var(--px-text); padding: 10px 16px; border-radius: var(--px-radius-md); }
.px-skip:focus { left: 16px; }
.screen-reader-text { border: 0; clip: rect(1px, 1px, 1px, 1px); clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; word-wrap: normal !important; }

/* ---------- type helpers ---------- */
.px-eyebrow { font-size: 13px; line-height: 18px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--px-accent); margin: 0; }
.px-label { font-size: 13px; line-height: 18px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--px-text-2); margin: 0; }
.px-lead { font-size: var(--wp--preset--font-size--large); line-height: 33px; color: var(--px-text-2); }
.px-muted { color: var(--px-text-2); }
/* Sand surfaces use the darker secondary so muted text and labels meet AA. */
:is(.px-band--sand, .px-fee, .px-cta, .px-reply) { --px-text-2: var(--px-text-2-sand); }
.px-small { font-size: 1rem; line-height: 24px; }
.px-measure { max-width: 570px; }
.px-measure-l { max-width: 600px; }
.px-title-max { max-width: 860px; }
.px-display-xl { font-size: var(--wp--preset--font-size--display-xl) !important; line-height: 1.08 !important; letter-spacing: -0.01em; }
.px-numeral { font-family: var(--wp--preset--font-family--serif); font-size: clamp(2.5rem, 4vw, 3.5rem); line-height: 1; font-weight: 500; color: var(--px-accent); margin: 0; }
.px-serif-item { font-family: var(--wp--preset--font-family--serif); font-size: var(--wp--preset--font-size--h-3); font-weight: 600; line-height: 1.33; }

/* ---------- sections ---------- */
.px-section { padding-block: clamp(64px, 5vw, 76px); }
.px-section--head { padding-block: clamp(24px, 2.8vw, 40px) clamp(24px, 2.2vw, 32px); }
.px-section--tight { padding-block-start: clamp(24px, 3.4vw, 48px); }
.px-section--flush-top { padding-block-start: 0; }
.px-section--cta { padding-block: clamp(24px, 2.2vw, 32px) clamp(64px, 5vw, 76px); }
/* Desktop reads one step smaller than mobile (16:9 screens felt zoomed in). */
@media (min-width: 1024px) {
	html:root { --wp--preset--font-size--medium: 1.0625rem; --wp--preset--font-size--large: 1.1875rem; }
	.px-cta.px-cta { padding: 40px 56px; }
	.px-fee__amount.px-fee__amount { font-size: 60px; }
}
.px-band--sand { background: var(--px-sand-soft); }
.px-band--sea { background: var(--px-sea-soft); }
.px-stack > * + * { margin-block-start: 24px; }

/* ---------- header ---------- */
.px-header { border-bottom: 1px solid var(--px-border); background: var(--px-page); }
.px-header__inner { max-width: calc(var(--px-content) + 2 * var(--px-gutter)); margin: 0 auto; padding: 14px var(--px-gutter); display: flex; align-items: center; gap: 24px; }
.px-wordmark { font-family: var(--wp--preset--font-family--serif); font-size: 26px; line-height: 30px; font-weight: 600; color: var(--px-accent); text-decoration: none; margin-inline-end: auto; }
/* Logo mark ("S1 Psi built from the U") beside the name: a centred lockup. */
.px-wordmark--mark { display: inline-flex; align-items: center; gap: 10px; }
.px-mark { flex: none; }
.px-mark__u { stroke: var(--px-accent); }
.px-mark__stem { stroke: var(--px-mark-stem); }
.px-nav { display: flex; gap: 28px; align-items: center; }
.px-nav a { font-size: 16px; line-height: 22px; font-weight: 500; color: var(--px-text); text-decoration: none; padding-block: 6px; border-bottom: 2px solid transparent; }
.px-nav a:hover { color: var(--px-accent); }
.px-nav a[aria-current="page"] { color: var(--px-accent); border-bottom-color: var(--px-accent); }
.px-header .px-btn { white-space: nowrap; }
.px-header .px-burger { display: none; }
@media (max-width: 960px) {
	.px-nav, .px-header .px-btn--header { display: none; }
	.px-header .px-burger { display: inline-grid; }
}

/* theme toggle */
.px-theme-toggle { display: inline-flex; gap: 2px; padding: 3px; border: 1px solid var(--px-border); border-radius: 999px; background: var(--px-surface); cursor: pointer; color: var(--px-text); }
.px-theme-toggle span { width: 32px; height: 32px; display: grid; place-items: center; border-radius: 999px; }
.px-theme-toggle svg { width: 18px; height: 18px; }
.px-theme-toggle[data-mode="light"] .px-tt-sun, .px-theme-toggle[data-mode="dark"] .px-tt-moon { background: var(--px-subtle); color: var(--px-accent); }
.px-icon-btn { width: 44px; height: 44px; display: inline-grid; place-items: center; border: 0; background: transparent; color: var(--px-text); cursor: pointer; border-radius: var(--px-radius-md); }
.px-icon-btn svg { width: 24px; height: 24px; }

/* mobile menu */
.px-menu { position: fixed; inset: 0; z-index: 100000; background: var(--px-page); padding: 14px 20px 32px; display: flex; flex-direction: column; gap: 8px; visibility: hidden; opacity: 0; transform: translateY(-8px); transition: opacity .2s ease, transform .2s ease, visibility 0s linear .2s; }
.px-menu.is-open { visibility: visible; opacity: 1; transform: none; transition: opacity .2s ease, transform .2s ease; }
.px-menu__top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; }
.px-menu nav { display: flex; flex-direction: column; }
/* The menu out-stacks the admin bar (#wpadminbar sits at 99999). The header's
   own stacking context (isolation, below) would trap the menu, so the sticky
   wrapper lifts with it while the menu is open. */
.wp-site-blocks > .wp-block-template-part:has(> .px-header .px-menu.is-open) { z-index: 100000; }
.px-menu a.px-menu__link { font-family: var(--wp--preset--font-family--serif); font-size: 28px; line-height: 1.3; color: var(--px-text); text-decoration: none; padding: 10px 0; border-bottom: 1px solid var(--px-border); }
.px-menu a.px-menu__link[aria-current="page"] { color: var(--px-accent); }
.px-menu .px-btn { margin-top: 16px; justify-content: center; }
body.px-menu-lock { overflow: hidden; }

/* ---------- buttons & links ---------- */
.px-btn, .wp-block-button__link { display: inline-flex; align-items: center; gap: 8px; font-family: var(--wp--preset--font-family--sans); font-size: 16px; line-height: 20px; font-weight: 600; text-decoration: none; border-radius: 999px; padding: 14px 24px; min-height: 48px; box-sizing: border-box; background: var(--px-accent); color: var(--px-on-accent); border: 2px solid var(--px-accent); transition: background .15s ease, border-color .15s ease; }
.px-btn:hover, .wp-block-button__link:hover { background: var(--px-accent-hover); border-color: var(--px-accent-hover); color: var(--px-on-accent); }
.px-btn--outline, .is-style-outline .wp-block-button__link { background: transparent; color: var(--px-accent); border-color: var(--px-accent); }
.px-btn--outline:hover, .is-style-outline .wp-block-button__link:hover { background: var(--px-subtle); color: var(--px-accent-hover); border-color: var(--px-accent-hover); }
.px-btn--small { min-height: 40px; padding: 10px 18px; }
.px-arrow::after, .px-btn-arrow .wp-block-button__link::after, .px-link::after { content: ""; width: 18px; height: 18px; background: currentColor; -webkit-mask: url(../icons/arrow.svg) center / contain no-repeat; mask: url(../icons/arrow.svg) center / contain no-repeat; flex: none; }
.px-link { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; font-size: 16px; line-height: 20px; color: var(--px-accent); text-decoration: underline; text-underline-offset: 3px; }
.px-link:hover { color: var(--px-accent-hover); }
.px-link--plain::after { display: none; }
.px-links { display: flex; flex-direction: column; gap: 12px; align-items: flex-start; }
.px-buttons { display: flex; flex-wrap: wrap; gap: 12px; }
@media (max-width: 600px) { .px-buttons .wp-block-button, .px-buttons .px-btn { width: 100%; } .px-buttons .wp-block-button__link { width: 100%; justify-content: center; } }

/* availability pill */
.px-pill { display: inline-flex; align-items: center; gap: 8px; padding: 6px 14px; border-radius: 999px; background: var(--px-subtle); color: var(--px-text); font-size: 15px; line-height: 20px; font-weight: 500; width: fit-content; }
.px-pill::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--px-status-open); }
.px-pill.px-pill--closed::before { background: var(--px-text-2); animation: none; }

/* ---------- icons (mask, coloured by currentColor / accent) ---------- */
.px-ico::before { content: ""; display: block; width: 32px; height: 32px; background: var(--px-accent); -webkit-mask-position: center; mask-position: center; -webkit-mask-size: contain; mask-size: contain; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; flex: none; }
.px-ico--s::before { width: 24px; height: 24px; }
.px-ico--inline { display: flex; align-items: center; gap: 14px; }
/* PX-ICONS-START (generated) */
.px-i-arrow::before,.px-i-arrow.px-after::after{-webkit-mask-image:url(../icons/arrow.svg);mask-image:url(../icons/arrow.svg)}
.px-i-battery::before,.px-i-battery.px-after::after{-webkit-mask-image:url(../icons/battery.svg);mask-image:url(../icons/battery.svg)}
.px-i-book::before,.px-i-book.px-after::after{-webkit-mask-image:url(../icons/book.svg);mask-image:url(../icons/book.svg)}
.px-i-check::before,.px-i-check.px-after::after{-webkit-mask-image:url(../icons/check.svg);mask-image:url(../icons/check.svg)}
.px-i-chevron::before,.px-i-chevron.px-after::after{-webkit-mask-image:url(../icons/chevron.svg);mask-image:url(../icons/chevron.svg)}
.px-i-clock::before,.px-i-clock.px-after::after{-webkit-mask-image:url(../icons/clock.svg);mask-image:url(../icons/clock.svg)}
.px-i-close::before,.px-i-close.px-after::after{-webkit-mask-image:url(../icons/close.svg);mask-image:url(../icons/close.svg)}
.px-i-compass::before,.px-i-compass.px-after::after{-webkit-mask-image:url(../icons/compass.svg);mask-image:url(../icons/compass.svg)}
.px-i-euro::before,.px-i-euro.px-after::after{-webkit-mask-image:url(../icons/euro.svg);mask-image:url(../icons/euro.svg)}
.px-i-globe::before,.px-i-globe.px-after::after{-webkit-mask-image:url(../icons/globe.svg);mask-image:url(../icons/globe.svg)}
.px-i-heart::before,.px-i-heart.px-after::after{-webkit-mask-image:url(../icons/heart.svg);mask-image:url(../icons/heart.svg)}
.px-i-leaf::before,.px-i-leaf.px-after::after{-webkit-mask-image:url(../icons/leaf.svg);mask-image:url(../icons/leaf.svg)}
.px-i-mail::before,.px-i-mail.px-after::after{-webkit-mask-image:url(../icons/mail.svg);mask-image:url(../icons/mail.svg)}
.px-i-menu::before,.px-i-menu.px-after::after{-webkit-mask-image:url(../icons/menu.svg);mask-image:url(../icons/menu.svg)}
.px-i-message::before,.px-i-message.px-after::after{-webkit-mask-image:url(../icons/message.svg);mask-image:url(../icons/message.svg)}
.px-i-moon::before,.px-i-moon.px-after::after{-webkit-mask-image:url(../icons/moon.svg);mask-image:url(../icons/moon.svg)}
.px-i-pin::before,.px-i-pin.px-after::after{-webkit-mask-image:url(../icons/pin.svg);mask-image:url(../icons/pin.svg)}
.px-i-shield::before,.px-i-shield.px-after::after{-webkit-mask-image:url(../icons/shield.svg);mask-image:url(../icons/shield.svg)}
.px-i-spark::before,.px-i-spark.px-after::after{-webkit-mask-image:url(../icons/spark.svg);mask-image:url(../icons/spark.svg)}
.px-i-sun::before,.px-i-sun.px-after::after{-webkit-mask-image:url(../icons/sun.svg);mask-image:url(../icons/sun.svg)}
.px-i-video::before,.px-i-video.px-after::after{-webkit-mask-image:url(../icons/video.svg);mask-image:url(../icons/video.svg)}
.px-i-waves::before,.px-i-waves.px-after::after{-webkit-mask-image:url(../icons/waves.svg);mask-image:url(../icons/waves.svg)}
.px-step__top::after{content:"";display:block;background:var(--px-accent);-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}
/* PX-ICONS-END */

/* ---------- organic image compositions ---------- */
.px-art { position: relative; width: 100%; max-width: 380px; aspect-ratio: 440 / 540; margin-inline: auto; }
.px-art--wide { max-width: 460px; aspect-ratio: 460 / 540; }
.px-art--head { max-width: 260px; aspect-ratio: 300 / 330; }
.px-art__sand, .px-art__sea { position: absolute; border-radius: 50%; }
.px-art__sand { width: 72%; aspect-ratio: 1; right: -2%; bottom: -2%; background: var(--px-sand-soft); }
.px-art__sea { width: 30%; aspect-ratio: 1; left: -5%; top: -2%; background: var(--px-sea-soft); }
.px-art--mirror .px-art__sand { right: auto; left: -2%; }
.px-art--mirror .px-art__sea { left: auto; right: -5%; }
.px-art img, .px-art .px-photo-slot { position: absolute; inset: 4% 7% 7% 7%; width: 86%; height: 89%; object-fit: cover; object-position: 50% 22%; border-radius: 50% 6% 50% 6% / 40% 5% 40% 5%; }
.px-art--mirror img, .px-art--mirror .px-photo-slot { border-radius: 6% 50% 6% 50% / 5% 40% 5% 40%; }
.px-hero .px-art img { object-position: 25% 45%; } /* Keeps the hands and notebook in the landscape mobile box. */
.px-art--arch img { border-radius: 50% 50% 8% 8% / 38% 38% 5% 5%; }
.px-art--pebble img { border-radius: 48% 52% 44% 56% / 54% 46% 56% 44%; }
.px-art--corner img { border-radius: 8% 8% 50% 8% / 6% 6% 40% 6%; }
.px-art--oval img { border-radius: 50%; }
.px-photo-slot { background: var(--px-sea-soft); border: 1px dashed var(--px-border-strong); display: grid; place-items: center; text-align: center; color: var(--px-text-2); font-size: 13px; padding: 16px; box-sizing: border-box; }
.px-shapes { position: relative; width: 300px; height: 220px; margin-inline-start: auto; }
.px-shapes span { position: absolute; border-radius: 50%; }
.px-shapes span:nth-child(1) { width: 200px; height: 200px; left: 80px; top: 0; background: var(--px-sand-soft); }
.px-shapes span:nth-child(2) { width: 130px; height: 130px; left: 0; top: 90px; background: var(--px-sea-soft); }
.px-shapes span:nth-child(3) { width: 70px; height: 70px; left: 220px; top: 150px; background: var(--px-coral-soft); }
/* Phones: portrait frames close to the photos' own 4:5, so the photos are not cropped to a strip. */
@media (max-width: 781px) { .px-shapes { display: none; } .px-art { max-width: 300px; aspect-ratio: 300 / 350; } .px-art--head { max-width: 260px; aspect-ratio: 260 / 300; } }
.px-wide-img img { width: 100%; aspect-ratio: 1120 / 400; object-fit: cover; border-radius: var(--px-radius-2xl); }
@media (max-width: 781px) { .px-wide-img img { aspect-ratio: 350 / 220; border-radius: var(--px-radius-xl); } }

/* ---------- hero & page head ---------- */
/* The head's text column centres against the art, so a short intro (How it
   works) does not leave all the empty space under it. */
.px-hero .wp-block-columns, .px-head .wp-block-columns { align-items: center; gap: clamp(32px, 4.5vw, 64px); }
/* Core sets align-items: normal !important on columns; centre each column instead. */
.px-head .wp-block-columns > .wp-block-column { align-self: center; }
.px-head h1 { margin: 0; }
.px-hero h1 { margin: 0; }
.px-hero .px-stack > * + * { margin-block-start: 24px; }

/* breadcrumb */
.px-crumbs ol { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 10px; align-items: center; font-size: 16px; line-height: 24px; color: var(--px-text-2); }
.px-crumbs li + li::before { content: "/"; margin-inline-end: 10px; color: var(--px-text-2); }
.px-crumbs a { color: var(--px-accent); font-weight: 600; text-underline-offset: 3px; }

/* author line / box */
.px-author { display: flex; align-items: center; gap: 12px; font-size: 16px; line-height: 24px; color: var(--px-text-2); max-width: 680px; }
.px-author__photo { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; background: var(--px-sea-soft); flex: none; }
.px-author--full { align-items: flex-start; gap: 24px; padding: 32px; border-radius: var(--px-radius-xl); background: var(--px-sand-soft); color: var(--px-text); }
.px-author--full .px-author__photo { width: 72px; height: 72px; }
.px-author--full .px-author__name { font-family: var(--wp--preset--font-family--serif); font-size: var(--wp--preset--font-size--h-3); font-weight: 600; margin: 4px 0; }
.px-author--full p { margin: 0 0 8px; }
.px-author--full .px-author__meta { display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: center; font-size: 16px; }
.px-author--full .px-label { color: var(--px-text); }
/* Phones: the 72px photo sits above the text instead of squeezing it. */
@media (max-width: 600px) { .px-author--full { flex-direction: column; gap: 16px; } }

/* ---------- editorial cards / lists ---------- */
.px-cards3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 48px; }
@media (max-width: 781px) { .px-cards3 { grid-template-columns: 1fr; gap: 32px; } }
.px-card { border-top: 2px solid var(--px-sand); padding-top: 28px; display: flex; flex-direction: column; gap: 14px; }
.px-card h3 { margin: 0; }
.px-card p { margin: 0; color: var(--px-text-2); }
.px-card .px-link { margin-top: auto; }

.px-split { display: grid; grid-template-columns: 360px minmax(0, 1fr); gap: 96px; align-items: start; }
@media (max-width: 960px) { .px-split { grid-template-columns: 1fr; gap: 28px; } }
.px-split__aside > * + * { margin-block-start: 20px; }
.px-split__aside h2 { margin: 0; }

.px-topics { list-style: none; margin: 0; padding: 0; }
.px-topics li { display: flex; align-items: center; gap: 20px; padding: 18px 0; border-bottom: 1px solid var(--px-sand); font-family: var(--wp--preset--font-family--serif); font-size: var(--wp--preset--font-size--h-3); font-weight: 600; line-height: 1.33; }
.px-topics li::before { width: 28px; height: 28px; }

.px-offer + .px-offer { margin-block-start: 40px; }
.px-offer h3 { display: flex; align-items: center; gap: 14px; font-size: var(--wp--preset--font-size--h-2); font-weight: 500; margin: 0 0 12px; }
.px-offer p { color: var(--px-text-2); margin: 0; }

.px-steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 48px; }
@media (max-width: 781px) { .px-steps { grid-template-columns: 1fr; gap: 32px; } }
.px-step__top { display: flex; align-items: center; gap: 16px; }
.px-step__top::after { width: 28px; height: 28px; }
.px-step h3 { margin: 12px 0; }
.px-step p { margin: 0; color: var(--px-text-2); }

.px-details { display: flex; flex-direction: column; gap: 40px; }
.px-detail { border-top: 1px solid var(--px-sand); padding-top: 24px; }
.px-detail h2, .px-detail h3 { display: flex; align-items: center; gap: 14px; font-size: var(--wp--preset--font-size--h-3); font-weight: 600; margin: 0 0 12px; }
.px-detail h2::before, .px-detail h3::before { width: 28px; height: 28px; }
.px-detail p { margin: 0; color: var(--px-text-2); max-width: 570px; }

.px-needs { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 32px; list-style: none; margin: 0; padding: 0; }
.px-needs li { border-top: 2px solid var(--px-sand); padding-top: 24px; display: flex; flex-direction: column; gap: 14px; font-family: var(--wp--preset--font-family--serif); font-size: var(--wp--preset--font-size--h-3); font-weight: 600; line-height: 1.33; }
@media (max-width: 781px) { .px-needs { grid-template-columns: 1fr; gap: 0; } .px-needs li { flex-direction: row; align-items: center; gap: 16px; border-top: 0; border-bottom: 1px solid var(--px-sand); padding: 16px 0; } .px-needs li::before { width: 24px; height: 24px; } }

.px-aside-note { border-left: 3px solid var(--px-sand); padding: 4px 0 4px clamp(20px, 2.2vw, 32px); }
.px-aside-note h2 { display: flex; align-items: center; gap: 12px; font-size: var(--wp--preset--font-size--h-2); margin: 0 0 12px; }
.px-aside-note h2::before { width: 28px; height: 28px; }
.px-aside-note p { max-width: 570px; margin: 0; }

.px-rows > * { border-top: 1px solid var(--px-sand); padding-block: 28px; display: grid; grid-template-columns: 300px minmax(0, 1fr); gap: 64px; }
.px-rows h2, .px-rows h3 { font-size: var(--wp--preset--font-size--h-3); font-weight: 600; margin: 0; }
.px-rows p { margin: 0; max-width: 570px; }
@media (max-width: 781px) { .px-rows > * { grid-template-columns: 1fr; gap: 8px; padding-block: 20px; } }

.px-badge { display: inline-flex; align-items: center; gap: 10px; padding: 8px 12px; border: 1px solid var(--px-border-strong); border-radius: 8px; font-size: 16px; line-height: 24px; width: fit-content; }
.px-badge::before { width: 20px; height: 20px; }

/* ---------- panels ---------- */
.px-cta { display: flex; align-items: center; gap: 32px; padding: 48px clamp(28px, 4vw, 64px); border-radius: var(--px-radius-2xl); background: var(--px-sand-soft); }
.px-cta h2 { font-size: var(--wp--preset--font-size--h-2); margin: 0 0 8px; }
.px-cta p { margin: 0; color: var(--px-text); }
.px-cta__text { flex: 1; }
@media (max-width: 781px) { .px-cta { flex-direction: column; align-items: stretch; padding: 32px 24px; border-radius: var(--px-radius-xl); gap: 20px; } .px-cta .px-btn { justify-content: center; } }
.px-keep { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 24px; margin-bottom: 32px; }
@media (max-width: 781px) { .px-keep { flex-direction: column; align-items: flex-start; } }

.px-crisis { padding: clamp(28px, 2.8vw, 40px) clamp(24px, 3.4vw, 48px); border-radius: var(--px-radius-xl); background: var(--px-coral-soft); color: var(--px-text); }
.px-crisis h2 { font-size: var(--wp--preset--font-size--h-3); font-weight: 600; margin: 0 0 12px; }
.px-crisis p { max-width: 570px; margin: 0 0 12px; }
.px-crisis p:last-child { margin-bottom: 0; }
/* Review note #11: the box fits its text, with smaller type. */
.px-crisis { width: fit-content; max-width: 100%; }
.px-crisis h2 { font-size: 20px; line-height: 26px; }
.px-crisis p { font-size: 16px; line-height: 24px; }

.px-fee { padding: 40px 32px; border-radius: var(--px-radius-2xl); background: var(--px-sand-soft); display: flex; flex-direction: column; gap: 20px; }
.px-fee__price { display: flex; align-items: baseline; gap: 12px; }
.px-fee__amount { font-family: var(--wp--preset--font-family--serif); font-size: 72px; line-height: 1; font-weight: 500; }
.px-fee ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.px-fee li { display: flex; gap: 12px; align-items: flex-start; }
.px-fee li::before { width: 20px; height: 20px; margin-top: 4px; }
.px-fee .px-btn { justify-content: center; }
.px-fee-layout { display: grid; grid-template-columns: minmax(0, 1fr) 400px; gap: 64px; align-items: start; }
@media (max-width: 960px) { .px-fee-layout { grid-template-columns: 1fr; gap: 40px; } .px-fee-layout .px-fee { order: -1; } }

.px-reply { padding: 48px 32px; border-radius: var(--px-radius-2xl); background: var(--px-sand-soft); display: flex; flex-direction: column; gap: 16px; }
.px-reply h2 { font-size: var(--wp--preset--font-size--h-3); font-weight: 600; margin: 0; }
.px-reply p { margin: 0; }
.px-reply ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.px-reply li { display: flex; gap: 12px; align-items: center; }
.px-reply li::before { width: 20px; height: 20px; }
/* Contact: one band. Desktop puts intro + reply panel left of the form so the
   Send button is visible without scrolling; phones read intro, form, panel. */
.px-contact { display: grid; gap: 32px; }
.px-contact.px-contact > *, .px-contact__intro.px-contact__intro > * { margin-block: 0; }
.px-contact__intro { display: flex; flex-direction: column; gap: 12px; }
@media (min-width: 961px) {
	.px-contact { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); grid-template-areas: "intro form" "reply form"; grid-template-rows: auto 1fr; column-gap: 56px; row-gap: 24px; align-items: start; }
	.px-contact__intro { grid-area: intro; }
	.px-contact > .px-form { grid-area: form; }
	.px-contact > .px-reply { grid-area: reply; }
}
/* Contact form: name + email share a row, consent sits beside the button. */
.px-form.px-form > * { margin-block: 0; }
.px-form__row { display: grid; gap: 20px; }
@media (min-width: 782px) {
	.px-form__row { grid-template-columns: 1fr 1fr; }
	.px-form__actions { display: flex; align-items: center; gap: 24px; }
	.px-form__actions .px-consent { flex: 1; }
}
/* Landscape desktop: the form and its side panel fit one screen. */
@media (min-width: 782px) and (orientation: landscape) {
	.px-contact { column-gap: 48px; row-gap: clamp(14px, 2.6vh, 24px); }
	.px-contact__intro { gap: clamp(6px, 1.4vh, 12px); }
	.px-form.px-form, .px-form .px-form.px-form { gap: clamp(8px, 1.8vh, 16px); }
	.px-form.px-form :is(input[type="text"], input[type="email"], textarea) { font-size: 16px; padding: 9px 12px; }
	.px-form.px-form textarea { min-height: clamp(72px, 12vh, 132px); }
	.px-form.px-form label { margin-bottom: 4px; font-size: 15px; }
	.px-form__hint.px-form__hint { font-size: 14px; line-height: 20px; padding: 8px 12px; }
	.px-form.px-form button[type="submit"] { padding: 11px 22px; }
	.px-reply { padding: clamp(18px, 3.4vh, 32px) 24px; gap: clamp(8px, 1.6vh, 12px); }
	.px-reply ul { gap: 6px; }
}

/* ---------- FAQ (core/details) ---------- */
.px-faq-list { max-width: 680px; }
.wp-block-details.px-faq { border-bottom: 1px solid var(--px-sand); padding: 22px 4px; margin: 0; }
.wp-block-details.px-faq summary { list-style: none; cursor: pointer; display: flex; justify-content: space-between; align-items: center; gap: 16px; font-family: var(--wp--preset--font-family--serif); font-size: var(--wp--preset--font-size--h-3); font-weight: 600; line-height: 1.33; color: var(--px-text); }
.wp-block-details.px-faq summary::-webkit-details-marker { display: none; }
.wp-block-details.px-faq summary::after { content: ""; width: 24px; height: 24px; background: var(--px-text-2); -webkit-mask: url(../icons/chevron.svg) center / contain no-repeat; mask: url(../icons/chevron.svg) center / contain no-repeat; transition: transform .2s ease; flex: none; }
.wp-block-details.px-faq[open] summary::after { transform: rotate(180deg); }
.wp-block-details.px-faq summary:hover { color: var(--px-accent); }
.wp-block-details.px-faq p { color: var(--px-text-2); margin: 12px 0 0; max-width: 570px; }

/* ---------- blog ---------- */
.px-acards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 64px 48px; list-style: none; margin: 0; padding: 0; }
@media (max-width: 781px) { .px-acards { grid-template-columns: 1fr; gap: 40px; } }
.px-acard { display: flex; flex-direction: column; gap: 14px; }
.px-acard img, .px-acard .wp-block-post-featured-image img { width: 100%; aspect-ratio: 341 / 200; object-fit: cover; border-radius: 20px; }
.px-acard h3, .px-acard h2 { font-size: var(--wp--preset--font-size--h-3); font-weight: 600; margin: 0; }
.px-acard h3 a, .px-acard h2 a { color: var(--px-text); text-decoration: none; }
.px-acard p { margin: 0; color: var(--px-text-2); }
.px-article-row { display: grid; grid-template-columns: 680px minmax(0, 1fr); gap: 80px; align-items: start; }
@media (max-width: 1100px) { .px-article-row { grid-template-columns: 1fr; } .px-article-side { display: none; } }
.px-article > * + * { margin-block-start: 24px; }
.px-article p, .px-article li { max-width: 570px; }
.px-article h2 { font-size: var(--wp--preset--font-size--h-2); margin-block-start: 40px; }
.px-article ul li::marker { color: var(--px-accent); }
.px-toc { border-left: 2px solid var(--px-sand); padding: 4px 0 4px 20px; display: flex; flex-direction: column; gap: 12px; position: sticky; top: 24px; }
.px-mini-cta { margin-top: 40px; padding: 32px; border-radius: var(--px-radius-xl); background: var(--px-sand-soft); display: flex; flex-direction: column; gap: 12px; }
.px-mini-cta h2 { font-size: var(--wp--preset--font-size--h-3); font-weight: 600; margin: 0; }
.px-mini-cta p { margin: 0; }

/* ---------- forms (Forminator + fallback) ---------- */
.px-form { display: flex; flex-direction: column; gap: 24px; }
.px-form label, .px-form .forminator-label { font-size: 16px; font-weight: 600; color: var(--px-text) !important; display: block; margin-bottom: 8px; }
.px-form input[type="text"], .px-form input[type="email"], .px-form textarea,
.px-form .forminator-input, .px-form .forminator-textarea { width: 100%; box-sizing: border-box; font: inherit; font-size: 18px; padding: 14px 16px; border-radius: var(--px-radius-md) !important; border: 1px solid var(--px-border-strong) !important; background: var(--px-surface) !important; color: var(--px-text) !important; }
.px-form textarea, .px-form .forminator-textarea { min-height: 140px; }
.px-form input:focus-visible, .px-form textarea:focus-visible { outline: 2px solid var(--px-focus); outline-offset: 2px; }
.px-form .forminator-button-submit, .px-form button[type="submit"] { font: inherit; font-weight: 600; font-size: 16px; padding: 14px 24px; border-radius: 999px !important; background: var(--px-accent) !important; color: var(--px-on-accent) !important; border: 0 !important; cursor: pointer; min-height: 48px; }

/* ---------- footer ---------- */
.px-footer { background: var(--px-footer); color: var(--px-on-footer); }
.px-footer__inner { max-width: calc(var(--px-content) + 2 * var(--px-gutter)); margin: 0 auto; padding: 64px var(--px-gutter) 40px; display: grid; grid-template-columns: 1.2fr 0.8fr 1.4fr; gap: 48px; }
.px-footer__brand .px-wordmark { color: #e3ebe8; display: inline-block; margin-bottom: 12px; }
/* The band is dark in both themes, so the mark takes the footer's own light
   colours, like the name beside it. */
.px-footer__brand .px-wordmark--mark { display: inline-flex; }
.px-footer__brand .px-mark__u { stroke: #7ec0b7; }
.px-footer__brand .px-mark__stem { stroke: #d9b48f; }
.px-footer p { margin: 0 0 12px; font-size: 16px; line-height: 24px; }
.px-footer a { color: var(--px-on-footer); }
.px-footer a:hover { color: #ffffff; }
.px-footer__links { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.px-footer__links a { display: inline-block; padding: 10px 0; min-height: 24px; font-size: 16px; text-underline-offset: 3px; }
.px-footer__crisis { border: 1px solid rgba(220, 229, 226, 0.55); border-radius: var(--px-radius-lg); padding: 20px 24px; }
.px-footer__crisis h2 { font-family: var(--wp--preset--font-family--sans); font-size: 16px; font-weight: 600; color: #e3ebe8; margin: 0 0 10px; }
.px-footer__crisis p { font-size: 15px; line-height: 22px; margin: 0 0 8px; }
.px-footer .px-badge { border-color: rgba(220, 229, 226, 0.55); font-size: 13px; padding: 4px 10px; }
.px-footer .px-badge::before { display: none; }
.px-footer__legal { max-width: calc(var(--px-content) + 2 * var(--px-gutter)); margin: 0 auto; padding: 0 var(--px-gutter) 40px; font-size: 13px; line-height: 18px; }
@media (max-width: 960px) { .px-footer__inner { grid-template-columns: 1fr; gap: 32px; } }

/* ---------- motion ---------- */
@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after { transition: none !important; animation: none !important; scroll-behavior: auto !important; }
}

/* ---------- additions ---------- */
.px-large { font-size: var(--wp--preset--font-size--large); line-height: 33px; color: var(--px-text); }
.px-aside-img { margin: 0; }
.px-aside-img img { width: 100%; max-width: 300px; aspect-ratio: 300 / 360; object-fit: cover; border-radius: 6% 50% 6% 50% / 5% 40% 5% 40%; display: block; }
@media (max-width: 960px) { .px-aside-img img { max-width: 100%; aspect-ratio: 350 / 200; border-radius: var(--px-radius-xl); } }
.px-about-intro { align-items: center; gap: clamp(32px, 4.5vw, 64px); }
.px-offers { align-items: center; gap: clamp(32px, 4.5vw, 64px); }
.px-section--image .wp-block-post-featured-image img { width: 100%; aspect-ratio: 1120 / 440; object-fit: cover; border-radius: var(--px-radius-2xl); }
.px-acard .wp-block-post-terms a { color: var(--px-accent); text-decoration: none; }
.px-acard .wp-block-read-more { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; font-size: 16px; color: var(--px-accent); text-decoration: underline; text-underline-offset: 3px; }
.px-acard .wp-block-read-more::after { content: ""; width: 18px; height: 18px; background: currentColor; -webkit-mask: url(../icons/arrow.svg) center / contain no-repeat; mask: url(../icons/arrow.svg) center / contain no-repeat; }
.px-acard .wp-block-post-excerpt__more-text { display: none; }
.px-pagination { margin-top: 48px; gap: 16px; }
.px-meta { font-size: 16px; line-height: 24px; color: var(--px-text-2); margin: 0; }
.px-cards3 h2 { font-size: var(--wp--preset--font-size--h-3); font-weight: 600; margin: 0; }
.px-toc a { color: var(--px-accent); font-weight: 600; font-size: 16px; text-underline-offset: 3px; }

/* ---------- Figma AI audit fixes (16 Oct) ---------- */
.px-facts { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 10px 24px; font-size: 16px; line-height: 24px; color: var(--px-text); }
.px-facts li { display: flex; align-items: center; gap: 8px; }
.px-facts li::before { width: 20px; height: 20px; }
.px-practitioner { display: flex; align-items: center; gap: 20px; padding: 20px 24px; border: 1px solid var(--px-border); border-radius: var(--px-radius-xl); background: var(--px-surface); max-width: 760px; }
.px-practitioner__photo { width: 72px; height: 72px; border-radius: 50%; object-fit: cover; background: var(--px-sea-soft); flex: none; }
.px-practitioner__name { font-family: var(--wp--preset--font-family--serif); font-size: var(--wp--preset--font-size--h-3); font-weight: 600; margin: 0; }
.px-practitioner p { margin: 0; }
.px-practitioner > div { flex: 1; }
/* Phones: photo beside the name on the first row, then the bio and the link
   full-width (the text column was squeezed to ~120px beside the photo). */
@media (max-width: 600px) {
	.px-practitioner { display: grid; grid-template-columns: max-content minmax(0, 1fr); align-items: center; }
	.px-practitioner > div { display: contents; }
	.px-practitioner__name { grid-column: 2; }
	.px-practitioner .px-muted { grid-column: 1 / -1; }
	.px-practitioner .px-link { grid-column: 1 / -1; justify-self: start; }
}
.px-menu__theme { display: flex; align-items: center; justify-content: space-between; margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--px-border); font-weight: 500; }
@media (max-width: 960px) { .px-header__inner > .px-theme-toggle { display: none; } }

/* Left-align inside the content column (not the section gutter). */
.px-practitioner, .px-faq-list { margin-inline-start: max(0px, calc((100% - var(--wp--style--global--content-size, var(--px-content))) / 2)) !important; }
.px-footer__crisis { align-self: start; }
.px-form p { margin: 0; }
.px-form .px-form { gap: 20px; }
.px-footer .px-footer__legal { margin: 0 auto; }

/* ---------- polish ---------- */
/* Grid children: drop the flow-layout top margin so cards and steps line up. */
:root :is(.px-cards3, .px-steps) > * { margin-block-start: 0; }
/* Cormorant's old-style 1 reads as a capital I. */
.px-numeral { font-variant-numeric: lining-nums; }
h1, h2, h3, .px-topics li, .wp-block-details.px-faq summary { text-wrap: balance; }
p, li { text-wrap: pretty; }
@media (max-width: 600px) {
	.px-practitioner { gap: 14px; padding: 16px 18px; }
	.px-practitioner__photo { width: 56px; height: 56px; }
}

/* Sticky header. The blur sits on a pseudo-element: backdrop-filter on the
   header itself would become the containing block of the fixed mobile menu. */
.wp-site-blocks > .wp-block-template-part:has(> .px-header) { position: sticky; top: var(--wp-admin--admin-bar--height, 0px); z-index: 40; }
html { scroll-padding-top: 96px; }
.px-header { position: relative; isolation: isolate; }
@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
	.px-header { background: transparent; }
	.px-header::before { content: ""; position: absolute; inset: 0; z-index: -1; background: color-mix(in srgb, var(--px-page) 84%, transparent); -webkit-backdrop-filter: blur(14px) saturate(1.3); backdrop-filter: blur(14px) saturate(1.3); }
}

/* ---------- motion ----------
 * Everything below runs only with prefers-reduced-motion: no-preference.
 * Nothing waits on JS. Scroll reveals use scroll-driven animations, so a
 * browser without them shows the static page. Load entrances are CSS only and
 * finish within 0.9s. The crisis panels, the contact form and the footer never move.
 */
@media (prefers-reduced-motion: no-preference) {

	/* Page-to-page cross-fade; the header stays put. */
	@view-transition { navigation: auto; }
	html:not(.px-vt-theme) .px-header__inner { view-transition-name: px-header; }
	::view-transition-old(root) { animation: px-vt-out .18s ease-in both; }
	::view-transition-new(root) { animation: px-vt-in .32s cubic-bezier(.2, .7, .2, 1) both; }

	/* Theme toggle: the new theme grows out of the toggle (theme.js). */
	html.px-vt-theme::view-transition-old(root) { animation: none; }
	html.px-vt-theme::view-transition-new(root) { animation: px-vt-circle .55s cubic-bezier(.4, 0, .2, 1) both; }

	/* Load entrance: hero and page heads. Headline and image move but never fade,
	   so the LCP element paints straight away. */
	/* Every page head staggers line by line: hero, heads with or without art,
	   the blog post head and the contact intro. */
	:is(.px-hero .px-stack, .px-section--head .px-stack, .px-contact__intro) > * { animation: px-rise-fade .7s cubic-bezier(.2, .7, .2, 1) both; }
	:is(.px-hero .px-stack, .px-section--head .px-stack, .px-contact__intro) > :is(h1, .wp-block-heading:first-child) { animation-name: px-rise; }
	:is(.px-hero .px-stack, .px-section--head .px-stack, .px-contact__intro) > :nth-child(2) { animation-delay: .06s; }
	:is(.px-hero .px-stack, .px-section--head .px-stack, .px-contact__intro) > :nth-child(3) { animation-delay: .12s; }
	:is(.px-hero .px-stack, .px-section--head .px-stack, .px-contact__intro) > :nth-child(4) { animation-delay: .18s; }
	:is(.px-hero .px-stack, .px-section--head .px-stack, .px-contact__intro) > :nth-child(n+5) { animation-delay: .24s; }
	:is(.px-hero, .px-head) .px-art img, .px-section--image img { animation: px-settle 1.2s cubic-bezier(.2, .7, .2, 1) both; }
	:is(.px-hero, .px-head) :is(.px-art__sand, .px-art__sea, .px-shapes span) { animation: px-bloom 1s cubic-bezier(.2, .7, .2, 1) .1s both; }
	:is(.px-hero, .px-head) .px-art__sea { animation-delay: .25s; }
	/* Above-the-fold companions arrive just after the head. The contact form itself never moves. */
	.px-contact > .px-reply { animation: px-rise-fade .7s cubic-bezier(.2, .7, .2, 1) .22s both; }
	.px-article-side { animation: px-fade .8s ease .3s both; }

	/* Mobile menu: links follow each other in as it opens. */
	.px-menu.is-open nav > .px-menu__link { animation: px-rise-fade .45s cubic-bezier(.2, .7, .2, 1) both; }
	.px-menu.is-open nav > .px-menu__link:nth-child(2) { animation-delay: .04s; }
	.px-menu.is-open nav > .px-menu__link:nth-child(3) { animation-delay: .08s; }
	.px-menu.is-open nav > .px-menu__link:nth-child(4) { animation-delay: .12s; }
	.px-menu.is-open nav > .px-menu__link:nth-child(5) { animation-delay: .16s; }
	.px-menu.is-open nav > .px-menu__link:nth-child(n+6) { animation-delay: .2s; }
	.px-menu.is-open :is(.px-btn, .px-menu__theme) { animation: px-rise-fade .45s cubic-bezier(.2, .7, .2, 1) .24s both; }

	/* Article cards: the image leans in a touch on hover. */
	.px-acard img { transition: scale .5s cubic-bezier(.2, .7, .2, 1); }
	.px-acard:hover img { scale: 1.02; }
	.px-acard :is(h2, h3) a { transition: color .2s ease; }
	.px-acard:hover :is(h2, h3) a { color: var(--px-accent); }

	/* "Accepting new clients": two soft pulses, then still (WCAG 2.2.2). */
	.px-pill::before { animation: px-ping 2.2s ease-out .9s 2; }

	/* Buttons and links. */
	.px-btn, .wp-block-button__link { transition: background .15s ease, border-color .15s ease, translate .2s ease, box-shadow .2s ease, scale .12s ease; }
	.px-btn:hover, .wp-block-button__link:hover { translate: 0 -1px; box-shadow: 0 10px 24px -12px color-mix(in srgb, var(--px-accent) 70%, transparent); }
	.px-btn:active, .wp-block-button__link:active { translate: 0 0; scale: .98; }
	.px-nav a:hover:not([aria-current]) { border-bottom-color: color-mix(in srgb, var(--px-accent) 35%, transparent); }
	.wp-block-details.px-faq summary { transition: color .2s ease; }
	:is(.px-crumbs, .px-toc) a { transition: color .2s ease, text-underline-offset .2s ease; }
	:is(.px-crumbs, .px-toc) a:hover { text-underline-offset: 5px; }
	.px-footer__links a { transition: color .2s ease; }
	/* Form fields: a soft focus glow (no movement; the form itself stays still). */
	.px-form :is(input[type="text"], input[type="email"], textarea) { transition: border-color .2s ease, box-shadow .2s ease; }
	.px-form :is(input[type="text"], input[type="email"], textarea):focus-visible { box-shadow: 0 0 0 4px color-mix(in srgb, var(--px-accent) 16%, transparent); }
	.px-arrow::after, .px-btn-arrow .wp-block-button__link::after, .px-link::after, .px-acard .wp-block-read-more::after { transition: translate .2s ease; }
	:is(.px-arrow, .px-btn-arrow .wp-block-button__link, .px-link, .px-acard .wp-block-read-more):hover::after { translate: 3px 0; }
	.px-link, .px-nav a { transition: color .15s ease, text-underline-offset .2s ease, border-color .2s ease; }
	.px-link:hover { text-underline-offset: 5px; }
	.px-theme-toggle span { transition: background .25s ease, color .25s ease; }

	/* FAQ answers open smoothly where the browser can animate to auto. */
	@supports (interpolate-size: allow-keywords) {
		:root { interpolate-size: allow-keywords; }
		.wp-block-details.px-faq::details-content { block-size: 0; overflow: clip; transition: block-size .3s cubic-bezier(.2, .7, .2, 1), content-visibility .3s allow-discrete; }
		.wp-block-details.px-faq[open]::details-content { block-size: auto; }
	}

	/* Scroll reveals and drifting shapes. Each reveal is complete once the element
	   is fully on screen, so nothing rests half-faded and tall screenshots show it all. */
	@supports (animation-timeline: view()) {
		.px-section:not(.px-hero, .px-head, .px-section--head) :is(.px-step, .px-topics > li, .px-offer, .px-detail, .px-rows > *, .px-needs > li, .px-fee, .px-art, .px-acard, .px-aside-note, .px-author--full, .px-wide-img, .px-faq-list > .px-faq, .px-mini-cta, .px-article .wp-block-image),
		.px-section:not(.px-hero, .px-head, .px-section--head) > h2, .px-section:not(.px-hero, .px-head, .px-section--head) :is(.px-split__aside, .wp-block-column) > h2,
		.px-cta, .px-practitioner {
			animation: px-rise-fade linear both;
			animation-timeline: view();
			animation-range: entry 0% entry 100%;
		}
		/* Text that belongs to a revealed heading follows it a beat later; prose
		   paragraphs rise only a little. Article body text stays still for reading. */
		.px-section:not(.px-hero, .px-head, .px-section--head) .px-split__aside > :not(h2),
		.px-section:not(.px-hero, .px-head, .px-section--head) > :is(p, .px-keep) {
			animation: px-rise-fade linear both;
			animation-timeline: view();
			animation-range: entry 15% entry 100%;
		}
		.px-section:not(.px-hero, .px-head, .px-section--head) .px-stack > p:not(:is(.px-cta, .px-practitioner, .px-card, .px-offer, .px-detail, .px-step, .px-acard, .px-aside-note, .px-mini-cta, .px-author--full, .px-rows > *) p) {
			animation: px-rise-soft linear both;
			animation-timeline: view();
			animation-range: entry 0% entry 100%;
		}
		/* Row icons pop in just after their row; step numerals lag a touch behind their step. */
		:is(.px-topics > li, .px-detail :is(h2, h3), .px-offer h3)::before {
			animation: px-pop linear both;
			animation-timeline: view();
			animation-range: entry 40% entry 100%;
		}
		.px-step .px-numeral {
			animation: px-rise linear both;
			animation-timeline: view();
			animation-range: entry 0% entry 100%;
		}
		/* Portraits and side images settle as they arrive. */
		.px-aside-img img {
			animation: px-settle-fade linear both;
			animation-timeline: view();
			animation-range: entry 0% entry 100%;
		}
		/* Cards: the sand rule draws in as the card arrives. */
		.px-section .px-card {
			border-top-color: transparent;
			background: linear-gradient(var(--px-sand), var(--px-sand)) no-repeat 0 0 / 100% 2px border-box;
			animation: px-rise-fade linear both, px-rule linear both;
			animation-timeline: view();
			animation-range: entry 0% entry 100%, entry 30% entry 100%;
		}
		/* Shapes outside the hero drift against the scroll (scroll-linked, never on their own). */
		.px-section:not(.px-hero, .px-head) :is(.px-art__sea, .px-shapes span:nth-child(2)) { animation: px-drift-up linear both; animation-timeline: view(); animation-range: cover; }
		.px-section:not(.px-hero, .px-head) :is(.px-art__sand, .px-shapes span:nth-child(1)) { animation: px-drift-down linear both; animation-timeline: view(); animation-range: cover; }
	}

	/* The sticky header gains a soft shadow once the page scrolls under it. */
	@supports (animation-timeline: scroll()) {
		.px-header::before { animation: px-header-lift linear both; animation-timeline: scroll(root); animation-range: 0 80px; }
		/* Articles: a thin sand line under the header shows reading progress. */
		.single-post .px-header::after { content: ""; position: absolute; inset: auto 0 -1px; height: 2px; background: var(--px-sand); transform-origin: 0 50%; animation: px-progress linear both; animation-timeline: scroll(root); }
	}
}

@keyframes px-rise { from { translate: 0 16px; } }
@keyframes px-rise-fade { from { opacity: 0; translate: 0 24px; } }
@keyframes px-settle { from { scale: 1.05; } }
@keyframes px-settle-fade { from { opacity: 0; scale: 1.04; } }
@keyframes px-fade { from { opacity: 0; } }
@keyframes px-rise-soft { from { opacity: 0; translate: 0 12px; } }
@keyframes px-pop { from { opacity: 0; scale: .6; } }
@keyframes px-progress { from { scale: 0 1; } }
@keyframes px-header-lift { to { box-shadow: 0 10px 28px -22px color-mix(in srgb, var(--px-text) 60%, transparent); } }
@keyframes px-bloom { from { opacity: 0; scale: .7; } }
@keyframes px-rule { from { background-size: 0 2px; } }
@keyframes px-drift-up { from { translate: 0 28px; } to { translate: 0 -28px; } }
@keyframes px-drift-down { from { translate: 0 -18px; } to { translate: 0 18px; } }
@keyframes px-ping { 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--px-status-open) 55%, transparent); } 100% { box-shadow: 0 0 0 8px transparent; } }
@keyframes px-vt-out { to { opacity: 0; } }
@keyframes px-vt-in { from { opacity: 0; translate: 0 12px; } }
@keyframes px-vt-circle { from { clip-path: circle(0 at var(--px-vt-x, 50%) var(--px-vt-y, 0)); } to { clip-path: circle(150vmax at var(--px-vt-x, 50%) var(--px-vt-y, 0)); } }

@media print {
	*, *::before, *::after { animation: none !important; transition: none !important; }
	.wp-site-blocks > .wp-block-template-part:has(> .px-header) { position: static; }
}

/* ---------- landscape fit ----------
 * On landscape screens each band fits one screen under the sticky header
 * (Adrian, 16 Oct: 1280x581 at 150% scaling was "way too big"). Sizes follow
 * the viewport height and stop at the earlier sizes on tall screens. Every
 * clamp keeps a rem floor so text still grows with zoom. Long-form bands
 * (FAQ list, How it works details, forms, privacy) still scroll.
 */
@media (min-width: 782px) and (orientation: landscape) {
	html:root {
		--wp--preset--font-size--display-xl: clamp(2.25rem, min(1.25rem + 4.6vh, 4.2vw), 3.875rem);
		--wp--preset--font-size--display: clamp(2rem, min(1.1rem + 3.9vh, 3.6vw), 3rem);
		--wp--preset--font-size--h-1: clamp(1.75rem, 1rem + 2.6vh, 2.375rem);
		--wp--preset--font-size--h-2: clamp(1.5rem, 1rem + 1.8vh, 1.875rem);
		--wp--preset--font-size--h-3: clamp(1.25rem, 1rem + .9vh, 1.375rem);
		--wp--preset--font-size--large: clamp(1.0625rem, .9rem + .6vh, 1.1875rem);
		--px-fit-pad: clamp(36px, 7.5vh, 76px);
		--px-fit-gap: clamp(12px, 2.6vh, 24px);
	}
	html { scroll-padding-top: 80px; }

	/* Slimmer sticky header. */
	.px-header__inner { padding-block: clamp(8px, 1.4vh, 14px); }
	.px-header .px-btn--header { min-height: 42px; padding: 10px 20px; }

	/* Band spacing. */
	.px-section { padding-block: var(--px-fit-pad); }
	.px-section--head { padding-block: clamp(20px, 4vh, 40px) clamp(16px, 3.2vh, 32px); }
	.px-section--tight { padding-block-start: clamp(16px, 3.5vh, 48px); }
	.px-section--flush-top { padding-block-start: 0; }
	.px-section--cta { padding-block: clamp(16px, 3vh, 32px) var(--px-fit-pad); }

	/* Hero: wider text column, image no taller than the screen allows. */
	.px-hero .wp-block-column:first-child { flex-basis: 62% !important; }
	.px-hero .wp-block-column:last-child { flex-basis: 38% !important; }
	.px-hero .px-stack > * + * { margin-block-start: var(--px-fit-gap); }
	.px-lead, .px-large { line-height: 1.6; }
	.px-art { width: min(100%, max(220px, calc((100vh - 230px) * 440 / 540))); }
	.px-art--wide { width: min(100%, max(220px, calc((100vh - 230px) * 460 / 540))); }
	.px-art--head { width: min(100%, max(180px, calc((100vh - 260px) * 300 / 330))); }

	/* Lists, cards, steps, offers, fee and detail rows. */
	.px-topics li { padding-block: clamp(8px, 1.5vh, 18px); }
	.px-cards3, .px-steps { row-gap: clamp(24px, 4.5vh, 48px); }
	.px-card { padding-top: clamp(16px, 3vh, 28px); gap: clamp(8px, 1.6vh, 14px); }
	.px-step h3 { margin: clamp(6px, 1.2vh, 12px) 0; }
	.px-offer + .px-offer { margin-block-start: clamp(20px, 4vh, 40px); }
	.px-details { gap: clamp(24px, 4.5vh, 40px); }
	.px-detail { padding-top: clamp(16px, 3vh, 24px); }
	.px-fee { padding: clamp(24px, 4.5vh, 40px) 32px; gap: clamp(12px, 2.4vh, 20px); }
	.px-fee__amount.px-fee__amount { font-size: clamp(2.75rem, 2rem + 3vh, 3.75rem); }
	.px-cta.px-cta { padding-block: clamp(24px, 5vh, 40px); }

	@media (min-width: 1024px) {
		/* About · My approach: the prose runs in two columns beside the heading and image.
		   On short screens the decorative image steps aside and the heading sits above. */
		.px-band--sand .px-split:has(> .px-stack) { grid-template-columns: 280px minmax(0, 1fr); gap: 56px; }
		.px-band--sand .px-split > .px-stack { columns: 2; column-gap: 40px; }
		.px-band--sand .px-split > .px-stack > * { break-inside: avoid; margin-block: 0 var(--px-fit-gap); }
		.px-band--sand .px-split .px-aside-img img { max-height: max(160px, calc(100vh - 260px)); }
		@media (max-height: 680px) {
			.px-band--sand .px-split:has(> .px-stack) { grid-template-columns: 1fr; gap: clamp(16px, 3vh, 28px); }
			.px-band--sand .px-split .px-aside-img { display: none; }
			.px-band--sand .px-split > .px-stack { column-gap: 56px; }
		}
		/* FAQ: two columns of questions across the content width. */
		.px-faq-list { max-width: var(--wp--style--global--content-size, var(--px-content)); display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 56px; align-items: start; }
	}
}

/* ---------- audit fixes (16 Oct) ---------- */
/* The article contents list stuck under the sticky header (top: 24px). */
.px-toc { top: 88px; }

/* Landscape: tighten the gaps inside bands too, so each band reads as one
   compact screen (Adrian: "why so much whitespace everywhere?"). The contact
   page (form, reply panel) is styled separately. */
@media (min-width: 782px) and (orientation: landscape) {
	.px-split { row-gap: clamp(16px, 3vh, 28px); }
	.px-split__aside > * + * { margin-block-start: clamp(12px, 2.4vh, 20px); }
	.px-rows > * { padding-block: clamp(14px, 2.8vh, 28px); }
	.px-needs li { padding-top: clamp(14px, 2.6vh, 24px); }
	.px-aside-note h2 { margin-bottom: 8px; }
	.px-keep { margin-bottom: clamp(16px, 3vh, 32px); }
	.px-author--full { padding: clamp(20px, 3.6vh, 32px); }
	.px-mini-cta { margin-top: clamp(20px, 3.6vh, 40px); padding: clamp(20px, 3.6vh, 32px); }
	.px-crisis { padding-block: clamp(20px, 3.6vh, 40px); }
	.px-crisis p { margin-bottom: 8px; }
	.px-head .wp-block-columns { gap: clamp(24px, 3.4vw, 48px); }
	.px-art--head { width: min(100%, max(180px, calc((100vh - 370px) * 300 / 330))); }
	.px-section--image .wp-block-post-featured-image img, .px-wide-img img { max-height: max(160px, calc(100vh - 220px)); }

	/* Footer: links in two columns, less padding, so it fits one screen. */
	.px-footer__inner { padding-block: clamp(32px, 6vh, 64px) clamp(20px, 3.6vh, 40px); grid-template-columns: 1fr 1.1fr 1.3fr; gap: 40px; }
	.px-footer__links { display: grid; grid-template-columns: repeat(2, max-content); gap: 2px 28px; align-content: start; }
	.px-footer__links a { padding: 5px 0; }
	.px-footer__legal { padding-bottom: clamp(20px, 3.6vh, 40px); }
	.px-footer__crisis { padding: 16px 20px; }
	.px-footer__crisis p { margin-bottom: 6px; }
}
/* Decorative circles in page heads take less height on short screens. */
@media (min-width: 782px) and (orientation: landscape) and (max-height: 720px) {
	.px-shapes { zoom: .72; }
}

/* Cookie choice banner (only rendered while analytics is configured). */
.px-cookie { position: fixed; z-index: 60; left: var(--px-gutter); right: var(--px-gutter); bottom: 16px; max-width: 520px; padding: 20px; background: var(--px-surface); color: var(--px-text); border: 1px solid var(--px-border); border-radius: var(--px-radius-lg); box-shadow: 0 12px 32px rgba(20, 30, 30, 0.16); }
.px-cookie[hidden] { display: none; }
.px-cookie p { margin: 0 0 16px; font-size: 15px; line-height: 22px; }
.px-cookie p a { color: var(--px-accent); text-underline-offset: 3px; }
.px-cookie__actions { display: flex; flex-wrap: wrap; gap: 8px; }
@media (prefers-reduced-motion: no-preference) {
	.px-cookie:not([hidden]) { animation: px-cookie-in 0.4s ease-out both; }
	@keyframes px-cookie-in { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
}

/* Review note #12: the privacy link reads at the hint's own size. */
.px-form__hint .px-link { display: inline; font-size: inherit; line-height: inherit; }

/* ---------- phone audit fixes (3 Nov) ---------- */
/* Tap targets: the "Keep reading" links, the head link lists and the FAQ rows
   are finger-sized (44px) without growing the type. The FAQ row padding shrinks
   by the same amount, so the row rhythm stays as it was. */
@media (max-width: 781px) {
	.px-keep .px-link, .px-links .px-link { min-height: 44px; }
	.wp-block-details.px-faq { padding: 14px 4px; }
	.wp-block-details.px-faq summary { min-height: 44px; }
}
/* Empty space: the hidden shapes still held an empty column with its gap under
   the intro; split bands keep a heading-to-text distance (WordPress puts the
   24px block gap on the grid's second row on top of the row gap); the article
   image meets its first paragraph at one section's rhythm, not two. */
@media (max-width: 781px) {
	.px-head .wp-block-column:has(> .px-shapes) { display: none; }
	.px-split { row-gap: 20px; }
	.px-split > * + * { margin-block-start: 0; }
	.px-section--image { padding-block-end: 0; }
}
