/* ==========================================================================
   AcuMedic — site stylesheet
   Reusable across all pages. Sections:
   1. Tokens   2. Reset & base   3. Typography   4. Layout   5. Buttons
   6. Header / nav   7. Blocks (hero, bars, cards, steps…)   8. Footer
   9. Inner-page helpers   10. Utilities   11. Responsive
   ========================================================================== */

/* 1. Tokens ---------------------------------------------------------------- */
:root {
	/* Brand */
	--navy-900: #171c3f;
	--navy-800: #1e2550;
	--navy-700: #262f63;
	--orange-600: #e2551f;
	--orange-500: #ef5f2a;
	--orange-400: #f4794a;

	/* Neutrals (warm) */
	--ink: #1b1f2a;
	--ink-soft: #45506b;
	--ink-muted: #6b7488;
	--line: #e4e1da;
	--line-strong: #d3cfc6;
	--cream: #f7f5f0;
	--cream-deep: #f1ede4;
	--white: #ffffff;
	--near-black: #14161c;

	/* Type */
	--font-display: "Playfair Display", "Iowan Old Style", Georgia, serif;
	--font-sans: "Source Sans 3", "Helvetica Neue", Helvetica, system-ui, sans-serif;
	--font-mono: ui-monospace, "SFMono-Regular", Menlo, monospace;

	/* Fluid type scale — 1.25 ratio, generous minimums for readability */
	--step--1: 0.9375rem;                              /* 15px  fine print   */
	--step-0: 1.0625rem;                               /* 17px  body         */
	--step-1: clamp(1.1875rem, 1.1rem + 0.35vw, 1.375rem);
	--step-2: clamp(1.375rem, 1.25rem + 0.6vw, 1.75rem);
	--step-3: clamp(1.75rem, 1.5rem + 1vw, 2.375rem);
	--step-4: clamp(2.125rem, 1.7rem + 1.9vw, 3.25rem);
	--step-5: clamp(2.5rem, 1.9rem + 3.1vw, 4.25rem);

	--leading-tight: 1.1;
	--leading-snug: 1.28;
	--leading-body: 1.65;
	--measure: 64ch;
	--measure-tight: 46ch;

	/* Space */
	--sp-1: 0.375rem;
	--sp-2: 0.625rem;
	--sp-3: 1rem;
	--sp-4: 1.5rem;
	--sp-5: 2.25rem;
	--sp-6: 3.25rem;
	--sp-7: 4.5rem;
	--sp-8: 6.5rem;

	--radius: 4px;
	--radius-lg: 10px;
	--radius-pill: 999px;
	--shadow-sm: 0 1px 2px rgba(23, 28, 63, 0.05);
	--shadow-md: 0 6px 22px -12px rgba(23, 28, 63, 0.22);
	--gutter: clamp(1.25rem, 4vw, 2rem);
	--wrap: 1240px;
	--wrap-narrow: 820px;
	/* The main cell of .svc-layout, stated so a page can have that column
	   without an aside beside it to produce it: .wrap's content box at full
	   width (1240 - two gutters = 1176), less the 340px aside and the --sp-6
	   between them. A condition record and a service category then read at the
	   same measure whether or not either has a sidebar. */
	--column: 784px;
	--header-h: 76px;
}

/* 2. Reset & base -------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body {
	margin: 0;
	background: var(--white);
	color: var(--ink);
	font-family: var(--font-sans);
	font-size: var(--step-0);
	line-height: var(--leading-body);
	font-feature-settings: "kern" 1;
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
}
img, svg, video { display: block; max-width: 100%; }
blockquote, figure { margin: 0; }
button, input, select, textarea { font: inherit; color: inherit; }
:focus-visible { outline: 2px solid var(--orange-500); outline-offset: 3px; }

/* 3. Typography ---------------------------------------------------------- */
h1, h2, h3, h4 {
	font-family: var(--font-display);
	font-weight: 500;
	color: var(--navy-800);
	margin: 0;
	line-height: var(--leading-snug);
	text-wrap: balance;
}
h1 { font-size: var(--step-5); line-height: var(--leading-tight); letter-spacing: -0.015em; }
h2 { font-size: var(--step-4); letter-spacing: -0.01em; }
h3 { font-size: var(--step-2); }
h4 { font-size: var(--step-1); }
p { margin: 0 0 var(--sp-3); text-wrap: pretty; }
p:last-child { margin-bottom: 0; }
strong { font-weight: 600; }

a { color: var(--navy-700); text-decoration-color: var(--line-strong); text-underline-offset: 3px; }
a:hover { color: var(--orange-600); text-decoration-color: currentColor; }

.eyebrow {
	font-size: var(--step--1);
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--ink-muted);
	font-weight: 600;
	margin: 0 0 var(--sp-3);
}
.lede {
	font-size: var(--step-1);
	line-height: 1.6;
	color: var(--ink-soft);
	max-width: 34ch;
}
/* A lede at a full reading measure. 34ch is the width for a lede beside
   something - a hero's picture, a centred head - and too narrow for one
   introducing a full-width band, where it sits under a heading three times its
   width and reads as a stray column. The design writes the wider measure
   inline; it is a class here for the same reason .row--top is. */
.lede--wide { max-width: 62ch; }
.fine { font-size: var(--step--1); color: var(--ink-muted); }
.rule { width: 56px; height: 3px; background: var(--orange-500); border: 0; margin: var(--sp-4) 0; }

/* Reading measure — owned by CONTAINERS, never by bare <p>. Wrap any block of
   running text that would otherwise fill a full-width column in .measure (or
   use an existing text container: .prose, .wrap--narrow, .article-body).

   It was on the <p> itself until the design's revision. That capped every
   paragraph wherever it stood, which is why so much of blocks.css is a
   paragraph being given `max-width: none` back: a converted line inside a flex
   row, a bound score, a card's "Explore" - none of them running text, all of
   them capped anyway. Ownership moves to whatever is actually a column of
   reading, and the elements that never were one stop having to argue. */
.measure { max-width: var(--measure); }
.measure--tight { max-width: var(--measure-tight); }
.measure--center { margin-inline: auto; }

/* A column, not a measure. .measure caps a run of text in characters and is the
   right tool inside a section that is already the width it should be; this caps
   a whole page body - text, images, whatever the record holds - inside a full
   .wrap, so that the body starts where the heading above it starts.

   The alternative was .wrap--narrow, which is a narrower *band*: it centres
   itself, so under a heading laid out on the full .wrap the body steps in ~200px
   from it and the page reads as broken long before anyone works out that the
   measure is fine. Left-aligned by default, as .measure is, and for the same
   reason - a column that centres itself under a left-aligned heading is almost
   never what was wanted. */
.column { max-width: var(--column); }

/* Section heading group */
.sec-head { margin-bottom: var(--sp-6); }
.sec-head > p { max-width: var(--measure); }
.sec-head--center { text-align: center; }
.sec-head--center p { margin-inline: auto; }
.sec-head--center .rule { margin-inline: auto; }
.sec-head--split { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--sp-4); flex-wrap: wrap; }

/* 4. Layout -------------------------------------------------------------- */
.wrap { width: 100%; max-width: var(--wrap); margin-inline: auto; padding-inline: var(--gutter); }
.wrap--narrow { max-width: var(--wrap-narrow); }
.section { padding-block: var(--sp-8); }
.section--tight { padding-block: var(--sp-7); }
.section--cream { background: var(--cream); }
.section--navy { background: var(--navy-800); color: #e8eaf4; }
.section--navy h2, .section--navy h3 { color: var(--white); }

.grid { display: grid; gap: var(--sp-4); }
.grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.grid--5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.stack { display: flex; flex-direction: column; gap: var(--sp-3); }
.row { display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; }
/* A row leading with an icon chip beside a block of text: the chip stays at
   the top and the text is never pushed under it. The design writes these
   three declarations inline on the booking page; an inline style is not
   something an editor can keep hold of, so it is a modifier here. */
.row--top { align-items: flex-start; flex-wrap: nowrap; }

/* 5. Buttons ------------------------------------------------------------- */
.btn {
	display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-2);
	min-height: 48px; padding: 0 var(--sp-4);
	border: 1px solid transparent; border-radius: var(--radius-pill);
	font-size: var(--step-0); font-weight: 600; line-height: 1;
	text-decoration: none; cursor: pointer; white-space: nowrap;
	transition: background-color .18s ease, color .18s ease, border-color .18s ease, transform .18s ease;
}
.btn:hover { transform: translateY(-1px); }
.btn--primary { background: var(--orange-500); color: var(--white); }
.btn--primary:hover { background: var(--orange-600); color: var(--white); }
.btn--ghost { background: transparent; color: var(--navy-800); border-color: var(--line-strong); }
.btn--ghost:hover { border-color: var(--navy-800); color: var(--navy-800); background: rgba(30, 37, 80, 0.03); }
.btn--onnavy { background: var(--orange-500); color: var(--white); }
.btn--sm { min-height: 42px; font-size: var(--step--1); padding: 0 var(--sp-3); }

.link-arrow {
	display: inline-flex; align-items: center; gap: 8px;
	font-weight: 600; font-size: var(--step-0); text-decoration: none; color: var(--navy-700);
}
.link-arrow::after { content: "→"; transition: transform .18s ease; }
.link-arrow:hover::after { transform: translateX(4px); }

/* 6. Header / nav -------------------------------------------------------- */
.nav-toggle { position: absolute; opacity: 0; pointer-events: none; }
.site-header {
	position: sticky; top: 0; z-index: 50;
	background: rgba(255, 255, 255, 0.94);
	backdrop-filter: saturate(140%) blur(8px);
	border-bottom: 1px solid var(--line);
}
.site-header__inner {
	display: flex; align-items: center; gap: var(--sp-5);
	min-height: var(--header-h);
}
.brand {
	display: inline-flex; align-items: center; gap: 10px;
	text-decoration: none; line-height: 1; color: var(--navy-800);
	flex: 0 0 auto;
}
.brand:hover { color: var(--orange-600); }
.brand__icon, .brand__wordmark { display: block; width: auto; }
.brand__icon { height: 34px; }
.brand__wordmark { height: 54px; }
.brand__name { font-family: var(--font-display); font-size: 1.5rem; color: var(--navy-800); letter-spacing: -0.01em; }
.brand__stack { display: flex; flex-direction: column; align-items: flex-start; gap: 0; }
.brand__since {
	font-size: 0.625rem; letter-spacing: 0.22em; text-transform: uppercase;
	color: var(--ink-muted); white-space: nowrap; margin-top: -6px; padding-left: 2px;
}

/* Primary nav — markup mirrors WordPress core/navigation exactly, so these
   rules apply unchanged to a core/navigation block. Load this sheet AFTER
   wp-block-library so these win over core's defaults. */
.site-nav { margin-inline: auto; }
/* The design's row never wraps: its <ul> sets no flex-wrap, so it takes the
   initial nowrap and the four items stay on one line all the way down to the
   drawer. Core's navigation sheet writes `flex-wrap: var(--navigation-layout-
   wrap, wrap)` onto the same list, which is what makes the block version drop
   an item onto a second line - and it does so at EVERY width, because .wrap
   caps the row at 1176px while brand + menu + actions measure ~1188px. Stated
   here so the block row behaves as the design's does; the phone gets out of
   the way in §11 to give it the width it needs. */
.site-nav .wp-block-navigation__container { flex-wrap: nowrap; }
.wp-block-navigation__container {
	display: flex; align-items: center; gap: var(--sp-2);
	list-style: none; margin: 0; padding: 0;
}
.wp-block-navigation-item { position: relative; display: flex; align-items: center; }
.wp-block-navigation-item__content {
	display: inline-flex; align-items: center; gap: 4px;
	min-height: 44px; padding-inline: 14px;
	font-weight: 600; font-size: var(--step-0); white-space: nowrap;
	color: var(--navy-800); text-decoration: none;
}
.wp-block-navigation-item__content:hover { color: var(--orange-600); }
/* A submenu heading is a button rather than a link - see inc/nav.php - and core
   resets a button in that slot to inherited type and the browser's own padding
   (button.wp-block-navigation-item__content), which outranks the rule above and
   would leave the headings lighter and smaller than the links beside them. The
   two declarations that reset restates, at a weight that wins. */
.site-nav button.wp-block-navigation-item__content {
	font-weight: 600; font-size: var(--step-0); padding-block: 0;
}
.wp-block-navigation__submenu-icon {
	display: grid; place-items: center; width: 20px; height: 44px;
	margin-left: -10px; padding: 0; border: 0; background: none;
	color: var(--ink-muted); cursor: pointer;
}
.wp-block-navigation__submenu-icon .icon { width: 15px; height: 15px; stroke-width: 2.2; }

.header__actions { display: flex; align-items: center; gap: var(--sp-4); }
.header__tel { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; text-decoration: none; color: var(--navy-800); white-space: nowrap; }
.icon-btn {
	display: grid; place-items: center; width: 44px; height: 44px;
	border: 0; background: transparent; border-radius: var(--radius-pill); color: var(--ink-soft);
}
.icon-btn:hover { background: var(--cream-deep); color: var(--navy-800); }

/* Desktop dropdowns (hover / keyboard focus) */
.wp-block-navigation__responsive-container-open,
.wp-block-navigation__responsive-container-close,
.site-nav .nav-search,
.site-nav .nav-cta { display: none; }
.wp-block-navigation__submenu-container {
	position: absolute; top: 100%; left: 0; z-index: 60;
	min-width: 268px; margin: 0; padding: var(--sp-2) 0;
	list-style: none; background: var(--white);
	border: 1px solid var(--line); border-radius: var(--radius-lg);
	box-shadow: 0 18px 44px -18px rgba(23, 28, 63, .32);
	opacity: 0; visibility: hidden; transform: translateY(6px);
	transition: opacity .16s ease, transform .16s ease, visibility .16s;
}
/* Two open states, and no third. The pointer has one; every other way in -
   clicking or tapping a heading, Enter on it, focus arriving in the list from
   the keyboard - runs through core's own submenu state and surfaces as
   aria-expanded on one of the two toggles, so that is what is read here.

   Focus alone is deliberately not one of them. :focus-within was, and it opened
   this panel whenever anything inside the item took focus - including the
   heading, which every click on it does. Core does not open a submenu on focus
   in this mode (see :not(.open-on-hover-click) on its own :focus-within rule)
   and so leaves the container at width/height 0 with overflow hidden, which is
   an empty box the size of the padding: chrome with the items clipped out of
   it. The geometry is restated below rather than left to core for the same
   reason - a state the theme opens is a state the theme has to open fully. */
.has-child:hover > .wp-block-navigation__submenu-container,
.has-child > .wp-block-navigation-submenu__toggle[aria-expanded="true"] ~ .wp-block-navigation__submenu-container {
	opacity: 1; visibility: visible; transform: translateY(0);
	width: auto; height: auto; overflow: visible;
}
.wp-block-navigation__submenu-container .wp-block-navigation-item { display: block; }
.wp-block-navigation__submenu-container .wp-block-navigation-item__content {
	display: block; min-height: 0; padding: 11px var(--sp-4);
	font-size: var(--step-0); line-height: 1.4; white-space: normal;
}
.wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover {
	background: var(--cream); color: var(--orange-600);
}
.has-child:hover > .wp-block-navigation-item__content,
.has-child:focus-within > .wp-block-navigation-item__content {
	background: var(--cream); border-radius: var(--radius-pill) 0 0 var(--radius-pill); color: var(--navy-800);
}
.has-child:hover > .wp-block-navigation__submenu-icon,
.has-child:focus-within > .wp-block-navigation__submenu-icon { background: var(--cream); border-radius: 0 var(--radius-pill) var(--radius-pill) 0; }

.skip-link {
	position: absolute; left: 50%; top: 0; transform: translate(-50%, -110%);
	z-index: 100; background: var(--navy-800); color: var(--white);
	padding: 10px var(--sp-4); border-radius: 0 0 var(--radius) var(--radius); text-decoration: none;
}
.skip-link:focus { transform: translate(-50%, 0); color: var(--white); }

/* Announcement strip
 *
 * .announce is the paragraph itself, which is already the full-bleed bar - it
 * needs no wrapper, and core's div.wp-block-template-part around it is not
 * editor-styleable, so the paragraph is the only block a colour can attach to.
 *
 * Colour here is a default, not a rule. The bar's background, text and link
 * colours are editor-settable on that paragraph, so every colour declaration is
 * guarded by :not(.has-*) and drops out the moment someone picks a swatch.
 * Without the guards the editor's choice still wins on the <p> - core emits
 * preset classes with !important - but the em and the link keep their hardcoded
 * navy and orange and go unreadable on a dark background. */
.announce {
	margin: 0;
	max-width: none;
	border-bottom: 1px solid var(--line);
	text-align: center;
	padding: var(--sp-2) var(--gutter);
	font-size: var(--step-0);
}
.announce:not(.has-background) { background: var(--cream); }
.announce:not(.has-text-color) { color: var(--ink-soft); }
.announce em { font-family: var(--font-display); font-style: italic; }
.announce:not(.has-text-color) em { color: var(--navy-800); }
.announce a { font-weight: 600; text-decoration: none; }
.announce:not(.has-link-color) a { color: var(--orange-600); }
.announce a:hover { text-decoration: underline; }

/* A chosen background makes the fixed cream-on-cream hairline wrong; tie it to
 * whatever the text colour ended up being instead. */
.announce.has-background {
	border-bottom-color: rgba(0, 0, 0, 0.12);
	border-bottom-color: color-mix(in srgb, currentColor 20%, transparent);
}

/* 7. Blocks -------------------------------------------------------------- */
/* Hero */
/* Responds to the HERO's own width, not the viewport, so it also collapses
   correctly inside a narrow CMS content column. The two halves stack by
   flex-wrap (intrinsic); the @container block below drops the copy's
   right-aligned indent at the same point.

   This is why it is a container query rather than the media query it replaces.
   The hero is a pattern, and a pattern goes wherever it is inserted - including
   the editor's own canvas, which is narrower than the viewport it sits in. A
   viewport rule left the two columns side by side at 460px each inside an
   800px canvas while the page around them was reported as 1400px wide. */
.hero { display: flex; flex-wrap: wrap; align-items: stretch; container-type: inline-size; }
.hero__copy-outer { display: flex; flex: 1 1 460px; min-width: 0; }
.hero__copy { padding: var(--sp-8) var(--sp-6) var(--sp-8) var(--gutter); max-width: calc(620px + var(--gutter)); margin-left: auto; }
.hero__meta { display: flex; gap: var(--sp-5); flex-wrap: wrap; margin-top: var(--sp-5); font-size: var(--step--1); color: var(--ink-muted); }
.hero__meta span { display: inline-flex; align-items: center; gap: 8px; }
.hero__actions { display: flex; gap: var(--sp-3); flex-wrap: wrap; margin-top: var(--sp-5); }
.hero__aside { position: relative; flex: 1 1 460px; min-width: 0; min-height: 560px; }
.hero__seal {
	position: absolute; right: var(--sp-5); bottom: var(--sp-5);
	width: 118px; height: 118px; border-radius: 50%;
	background: var(--navy-800); color: var(--white);
	display: grid; place-content: center; text-align: center; gap: 2px; padding: 6px;
}
.hero__seal small { font-size: 0.5625rem; letter-spacing: 0.14em; text-transform: uppercase; opacity: .8; line-height: 1.3; }
.hero__seal b { font-family: var(--font-display); font-size: 1.6rem; font-weight: 500; }

/* Hero, page-heading variant: same layout, smaller heading & shorter image */
.hero.page-heading h1 { font-size: var(--step-4); }
.hero.page-heading .hero__copy { padding-block: var(--sp-7); }
.hero.page-heading .lede { max-width: 46ch; }
.hero.page-heading .hero__aside { min-height: 440px; }

/* Stacked hero (narrow container): full-bleed copy on the left gutter. */
@container (max-width: 940px) {
	.hero__copy { padding: var(--sp-7) var(--gutter); max-width: none; margin-left: 0; }
	.hero__aside, .hero.page-heading .hero__aside { min-height: 380px; }
}

/* Image placeholder (swap for real <img>) */
.ph {
	background-color: var(--cream-deep);
	background-image: repeating-linear-gradient(135deg, rgba(30,37,80,.07) 0 2px, transparent 2px 9px);
	display: grid; place-content: center; height: 100%; width: 100%;
	color: var(--ink-muted); font-family: var(--font-mono); font-size: 0.75rem;
	letter-spacing: 0.08em; text-transform: uppercase; text-align: center; padding: var(--sp-3);
}
.ph--portrait { aspect-ratio: 4 / 5; height: auto; }

/* Trust bar */
.trustbar { background: var(--navy-800); color: #dfe3f2; padding-block: var(--sp-4); }
.trustbar__grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--sp-4); }
.trustbar__grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.trustbar__item { display: flex; gap: var(--sp-3); align-items: flex-start; }
.trustbar__item b { display: block; color: var(--white); font-weight: 600; font-size: var(--step-0); }
.trustbar__item span { font-size: var(--step--1); color: #b9c0dd; }
.chip {
	flex: none; display: grid; place-items: center;
	width: 38px; height: 38px; border-radius: var(--radius);
	background: rgba(255, 255, 255, 0.09); color: #cdd4ee;
}
.chip--light { background: var(--cream-deep); color: var(--navy-700); }
.chip--solid { background: var(--navy-800); color: var(--white); border-radius: var(--radius-pill); }
.chip--sm { width: 30px; height: 30px; }
.chip--sm .icon { width: 16px; height: 16px; }

/* Cards */
.card {
	background: var(--white); border: 1px solid var(--line);
	border-radius: var(--radius-lg); padding: var(--sp-4);
	box-shadow: var(--shadow-sm);
}
.card--flat { box-shadow: none; }
.card--pad { padding: var(--sp-5); }

/* Reviews */
.reviews { display: grid; grid-template-columns: minmax(240px, 1fr) 3fr; gap: var(--sp-6); align-items: start; }
.reviews .grid { gap: var(--sp-4); align-items: stretch; }
.stars { color: #d99a2b; letter-spacing: 3px; font-size: 1.0625rem; }
.score { display: flex; align-items: baseline; gap: var(--sp-2); }
.score b { font-family: var(--font-display); font-size: 3rem; font-weight: 500; color: var(--navy-800); line-height: 1; }
.quote { display: flex; flex-direction: column; gap: var(--sp-4); height: 100%; }
.quote p { font-size: var(--step-0); line-height: 1.7; color: var(--ink-soft); max-width: none; }
.quote cite { margin-top: auto; font-style: normal; font-weight: 700; font-size: var(--step--1); color: var(--navy-800); }

/* Concern grid */
.concern {
	display: flex; flex-direction: column; gap: var(--sp-2);
	padding: var(--sp-4); border: 1px solid var(--line); border-radius: var(--radius-lg);
	text-decoration: none; background: var(--white);
	transition: border-color .18s ease, box-shadow .18s ease, transform .18s ease;
}
.concern:hover { border-color: var(--navy-700); box-shadow: var(--shadow-md); transform: translateY(-2px); }
.concern__title { font-family: var(--font-display); font-size: var(--step-1); color: var(--navy-800); }
.concern__more { font-size: var(--step--1); color: var(--orange-600); font-weight: 600; }

/* Journey steps */
.steps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: var(--sp-4); counter-reset: step; }
.steps--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.step { text-align: center; }
.step__icon {
	counter-increment: step;
	position: relative; width: 56px; height: 56px; margin: 0 auto var(--sp-4);
	border-radius: 50%; background: var(--navy-800); color: var(--white);
	display: grid; place-items: center;
}
.step__icon .icon { width: 23px; height: 23px; stroke-width: 1.6; }
.step__icon::after {
	content: counter(step);
	position: absolute; top: -6px; right: -8px;
	width: 24px; height: 24px; border-radius: 50%;
	background: var(--white); color: var(--navy-800);
	border: 1px solid var(--line-strong);
	font-family: var(--font-sans); font-size: 0.75rem; font-weight: 700;
	display: grid; place-items: center; line-height: 1;
}
.section--cream .step__icon::after { background: var(--cream); }
.step h3 { font-size: var(--step-1); margin-bottom: var(--sp-1); }
.step p { font-size: var(--step--1); color: var(--ink-soft); max-width: 30ch; margin-inline: auto; line-height: 1.6; }

/* Team */
.person { background: var(--white); border: 1px solid var(--line); border-radius: var(--radius-lg); overflow: hidden; }
.person__body { padding: var(--sp-4); }
.person__name { font-family: var(--font-display); font-size: var(--step-1); color: var(--navy-800); }
.person__role { color: var(--orange-600); font-size: var(--step--1); font-weight: 600; margin: 4px 0 var(--sp-2); }
.person p { font-size: var(--step--1); color: var(--ink-soft); line-height: 1.6; }

/* Feature list (Why) */
.feature { display: flex; gap: var(--sp-3); }
.feature--stack { flex-direction: column; gap: var(--sp-3); }
.feature--stack p { font-size: var(--step--1); }
.feature h3 { font-size: var(--step-1); margin-bottom: var(--sp-2); }
.feature p { color: var(--ink-soft); font-size: var(--step-0); }

/* Split — copy beside media (Our story) */
.split { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-6); align-items: center; }
.split__media { border-radius: var(--radius-lg); overflow: hidden; aspect-ratio: 4 / 3; }
.split--media-first .split__media { order: -1; }
.split__copy p { color: var(--ink-soft); }

/* Pull quote */
.pullquote { max-width: 42rem; margin-inline: auto; text-align: center; }
.pullquote::before {
	content: "\201D"; display: block; font-family: var(--font-display);
	font-size: 3.5rem; line-height: 0.6; color: var(--orange-400); margin-bottom: var(--sp-4);
}
.pullquote p {
	font-family: var(--font-display); font-size: var(--step-3); line-height: 1.35;
	color: var(--navy-800); max-width: none; text-wrap: balance;
}
.pullquote cite {
	display: block; margin-top: var(--sp-4); font-style: normal; font-weight: 600;
	font-size: var(--step--1); letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-muted);
}

/* Timeline (works on cream or navy sections) */
.timeline { list-style: none; margin: 0 auto; padding: 0; max-width: 46rem; display: grid; gap: var(--sp-5); }
.timeline > li { position: relative; padding-left: var(--sp-6); }
.timeline > li::before {
	content: ""; position: absolute; left: 0; top: 4px; width: 18px; height: 18px;
	border-radius: 50%; background: var(--orange-500);
	box-shadow: inset 0 0 0 5px rgba(255, 255, 255, 0.92);
}
.timeline > li::after {
	content: ""; position: absolute; left: 8px; top: 26px; bottom: calc(-1 * var(--sp-5));
	width: 1px; background: var(--line-strong);
}
.timeline > li:last-child::after { display: none; }
.section--navy .timeline > li::after { background: rgba(255, 255, 255, 0.22); }
.timeline h3 { font-size: var(--step-1); margin-bottom: var(--sp-1); }
.timeline p { max-width: none; }
.section--navy .timeline p { color: #b9c0dd; }
.section--navy .eyebrow { color: #b9c0dd; }

/* Overlapping avatar row */
.avatar-stack { display: flex; justify-content: center; }
.avatar-stack .ph {
	width: 74px; height: 74px; border-radius: 50%; overflow: hidden;
	border: 3px solid var(--white); margin-left: -16px; font-size: 0.5rem; padding: 4px;
}
.avatar-stack .ph:first-child { margin-left: 0; }

/* Visit / map */
.visit { display: grid; grid-template-columns: 5fr 7fr; border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-md); }
.visit__panel { background: var(--navy-800); color: #dfe3f2; padding: var(--sp-6) var(--sp-5); }
.visit__panel h2, .visit__panel h3 { color: var(--white); }
.visit__panel .rule { background: rgba(255,255,255,.35); width: 40px; }
.visit__list { list-style: none; margin: 0 0 var(--sp-5); padding: 0; display: flex; flex-direction: column; gap: var(--sp-4); }
.visit__list li { display: flex; gap: var(--sp-3); }
.visit__list b { display: block; color: var(--white); font-weight: 600; }
.visit__list span { font-size: var(--step--1); color: #b9c0dd; }
.visit__map { min-height: 420px; }

/* 8. Footer -------------------------------------------------------------- */
.site-footer { background: var(--near-black); color: #b4b8c2; padding-block: var(--sp-7); font-size: var(--step-0); }
.site-footer__grid { display: grid; grid-template-columns: 2.2fr 1fr 1fr 1.3fr; gap: var(--sp-5); }
.site-footer h2, .site-footer h3 { color: var(--white); }
.site-footer .brand__name { color: var(--white); }
.brand--footer { gap: 12px; }
.brand--footer .brand__icon { height: 30px; }
.brand--footer .brand__wordmark { height: 48px; }
.site-footer__tag { font-size: 0.6875rem; letter-spacing: 0.18em; text-transform: uppercase; color: #7d8290; margin: var(--sp-2) 0 var(--sp-3); }
.site-footer p { color: #a8adb8; max-width: 42ch; }
.footer-title { font-family: var(--font-sans); font-size: var(--step--1); font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--white); margin-bottom: var(--sp-3); }
.footer-nav { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--sp-2); }
.footer-nav a { color: #b4b8c2; text-decoration: none; }
.footer-nav a:hover { color: var(--white); }
.footer-contact { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--sp-3); }
.footer-contact li { display: flex; gap: var(--sp-2); }
.footer-contact a { color: #b4b8c2; text-decoration: none; }
.footer-contact a:hover { color: var(--white); }
.socials { display: flex; gap: var(--sp-2); margin-top: var(--sp-4); }
.socials a {
	width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center;
	border: 1px solid #2c2f38; color: #b4b8c2; text-decoration: none;
}
.socials a:hover { border-color: var(--white); color: var(--white); }
.site-footer__base {
	margin-top: var(--sp-6); padding-top: var(--sp-4); border-top: 1px solid #24262e;
	display: flex; justify-content: space-between; gap: var(--sp-3); flex-wrap: wrap;
	font-size: var(--step--1); color: #7d8290;
}

/* Service page: main + sticky aside ------------------------------------- */
.svc-layout { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: var(--sp-6); align-items: start; }
.svc-aside { position: sticky; top: calc(var(--header-h) + var(--sp-3)); display: flex; flex-direction: column; gap: var(--sp-4); }
.aside-title { font-family: var(--font-sans); font-size: var(--step--1); font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: var(--sp-3); }

/* The service switcher's own booking link duplicates the sidebar's, so it
   stays out of the way while .svc-aside sits beside the treatment; it only
   earns its place once the same breakpoint below drops that aside beneath
   the treatment instead, out of easy reach. */
.svc-book { display: none; }

/* Check list */
.check-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--sp-3); }
.check-list li { display: flex; gap: var(--sp-2); font-size: var(--step--1); line-height: 1.55; color: var(--ink-soft); }
.check-list .icon {
	width: 20px; height: 20px; margin-top: 1px;
	background: var(--navy-800); color: var(--white);
	border-radius: 50%; padding: 4px; stroke-width: 2.4;
}

/* Price list */
.price-list { margin: 0; display: grid; gap: var(--sp-3); }
.price-list > div { display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-3); }
.price-list dt { font-size: var(--step--1); font-weight: 600; color: var(--navy-800); }
.price-list dd { margin: 0; font-family: var(--font-display); font-size: var(--step-1); color: var(--navy-800); white-space: nowrap; }
.price-list .is-offer dt { color: var(--orange-600); }
.price-list .is-offer dd { color: var(--orange-600); }
.price-list s { color: var(--ink-muted); margin-right: 6px; font-size: var(--step-0); }
.price-note { font-size: var(--step--1); color: var(--ink-muted); border-top: 1px solid var(--line); padding-top: var(--sp-3); margin-top: var(--sp-3); }

/* Pills (treatment switcher) */
.pills { display: flex; flex-wrap: wrap; gap: var(--sp-2); margin-bottom: var(--sp-5); }
.pill {
	min-height: 44px; padding: 0 var(--sp-4);
	border: 1px solid var(--line); border-radius: var(--radius-pill);
	background: var(--cream); color: var(--navy-800);
	font-size: var(--step--1); font-weight: 600; cursor: pointer;
	transition: background-color .18s ease, color .18s ease, border-color .18s ease;
}
.pill:hover { border-color: var(--navy-700); }
.pill[aria-selected="true"] { background: var(--navy-800); border-color: var(--navy-800); color: var(--white); }

/* Treatment panel */
.treatment { display: grid; grid-template-columns: 260px minmax(0, 1fr); gap: var(--sp-5); align-items: start; }
.treatment[hidden] { display: none; }
.treatment__media { border-radius: var(--radius-lg); overflow: hidden; aspect-ratio: 4 / 3; }
.treatment h3 { margin-bottom: var(--sp-3); }
.treatment p { color: var(--ink-soft); }
.treatment__facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: var(--sp-4); margin-top: var(--sp-4); padding-top: var(--sp-4); border-top: 1px solid var(--line); }
.fact dt { font-size: var(--step--1); font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-muted); margin-bottom: 6px; }
.fact dd { margin: 0; font-size: var(--step--1); color: var(--ink-soft); line-height: 1.55; }

/* Callout card */
.callout { background: var(--cream); border: 1px solid var(--line); border-radius: var(--radius-lg); padding: var(--sp-4); }
.callout h3 { font-size: var(--step-1); margin-bottom: var(--sp-2); }
.callout p { font-size: var(--step--1); color: var(--ink-soft); }
.callout .link-arrow { margin-top: var(--sp-3); font-size: var(--step--1); }
.callout--feature { background: var(--white); border-left: 0; }

/* 9. Inner-page helpers -------------------------------------------------- */
.page-hero { background: var(--cream); padding-block: var(--sp-7); border-bottom: 1px solid var(--line); }
.breadcrumbs { list-style: none; display: flex; gap: var(--sp-2); padding: 0; margin: 0 0 var(--sp-3); font-size: var(--step--1); color: var(--ink-muted); }
/* .prose has NO width cap of its own — the column it sits in (.svc-layout
   main cell, .doc-layout cell, .wrap--narrow, or .measure) sets the measure. */
.prose h2 { font-size: var(--step-3); margin-top: var(--sp-6); }
.prose h3 { margin-top: var(--sp-5); }
.prose p, .prose li { font-size: var(--step-1); line-height: 1.7; color: var(--ink-soft); }
.prose ul { padding-left: 1.2em; }

/* Icons ------------------------------------------------------------------- */
.sprite { position: absolute; width: 0; height: 0; overflow: hidden; }
.icon {
	width: 20px; height: 20px; flex: none;
	fill: none; stroke: currentColor; stroke-width: 1.7;
	stroke-linecap: round; stroke-linejoin: round;
}
.icon--sm { width: 17px; height: 17px; }
.icon-lead { display: grid; place-items: center; width: 20px; height: 1.65em; color: #7d8290; }
.socials .icon { width: 18px; height: 18px; }
.concern .chip { margin-bottom: var(--sp-1); }
.visit__list .chip, .trustbar .chip { margin-top: 2px; }

/* 10. Utilities ---------------------------------------------------------- */
.visually-hidden {
	position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
	overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
/* Both halves, as the design has it. Centring the text is only half the job on
   an element narrower than what holds it: without the auto margins the box
   stays hard left and only its lines are centred inside it, which is what the
   FAQ's closing line did. That used to be every paragraph, because §3 capped
   them all; now it is whatever .measure or a column has narrowed, which is the
   same case and the same fix. */
.center { text-align: center; margin-inline: auto; }
.mt-0 { margin-top: 0; }
.mt-4 { margin-top: var(--sp-4); }
.mt-5 { margin-top: var(--sp-5); }
/* The other half of the pair. A section head introducing one column rather
   than a whole band sits closer to what follows than .sec-head's own --sp-6,
   and the design says so with an inline margin-bottom - three times on the
   explainer page alone. Stated as utilities because an inline style is not
   something an editor can keep hold of, and because the existing .mt-* are
   already the shape this theme reaches for. They win over .sec-head on order,
   not weight: same specificity, declared later in the file. */
.mb-4 { margin-bottom: var(--sp-4); }
.mb-5 { margin-bottom: var(--sp-5); }

/* 11. Responsive --------------------------------------------------------- */
/* The header row is capped by .wrap, so above 1240px it is always 1176px wide
   and the phone number either fits or it never will. It fits, with about a
   pixel to spare. Below 1240px the row starts losing real width, and the phone
   is what goes first - the menu cannot reflow (it must not wrap) and the CTA is
   the reason the header exists. From 1080px down the drawer takes over and both
   the phone and the CTA move inside it. */
@media (max-width: 1239px) {
	.header__tel { display: none; }
}

@media (max-width: 1080px) {
	.grid--5, .steps { grid-template-columns: repeat(3, minmax(0, 1fr)); }
	.steps--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.grid--4, .grid--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.trustbar__grid, .trustbar__grid--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.svc-layout { grid-template-columns: 1fr; }
	.svc-aside { position: static; }
	.svc-book { display: block; }
	.reviews { grid-template-columns: 1fr; gap: var(--sp-5); }
	.site-footer__grid { grid-template-columns: 1fr 1fr; }
}

@media (max-width: 900px) {
	:root { --sp-8: 4.5rem; --sp-7: 3.5rem; }
	.treatment { grid-template-columns: 1fr; }
	.treatment__media { max-width: 320px; }
	.split { grid-template-columns: 1fr; gap: var(--sp-5); }
	.split--media-first .split__media { order: 0; }
	.visit { grid-template-columns: 1fr; }
	.visit__map { min-height: 320px; }

}

@media (max-width: 620px) {
	.brand { gap: 8px; }
	.brand__wordmark { height: 46px; }
	.brand__icon { height: 28px; }
	.grid--2, .grid--3, .grid--4, .grid--5, .steps, .steps--4, .trustbar__grid, .site-footer__grid { grid-template-columns: 1fr; }
	.step { text-align: left; display: grid; grid-template-columns: 64px 1fr; gap: var(--sp-3); align-items: start; }
	.step__icon { margin: 0 var(--sp-2) 0 0; }
	.step p { margin-inline: 0; max-width: none; }
	.hero__seal { width: 92px; height: 92px; right: var(--sp-3); bottom: var(--sp-3); }
	.sec-head--split { align-items: flex-start; }
}

@media (max-width: 400px) {
	.brand__wordmark { height: 46px; }
}

@media (prefers-reduced-motion: reduce) {
	html { scroll-behavior: auto; }
	* { transition-duration: 0.01ms !important; }
}

@media (max-width: 1080px) {
	/* Overlay drawer — core/navigation's own container classes and open state */
	.wp-block-navigation__responsive-container-open {
		display: grid; place-items: center; width: 44px; height: 44px; padding: 0;
		margin-left: auto; border: 0; background: none; cursor: pointer;
	}
	.wp-block-navigation__responsive-container-open .burger-bars {
		display: block;
		width: 20px; height: 2px; background: var(--navy-800);
		box-shadow: 0 6px 0 var(--navy-800), 0 -6px 0 var(--navy-800);
	}
	/* phone + CTA live in the drawer on mobile; search icon stays in the row */
	.header__cta, .header__tel { display: none; }
	.header__actions { gap: 4px; margin-left: auto; }
	.site-nav { margin: 0; order: 3; }

	.wp-block-navigation__responsive-container {
		position: fixed; inset: var(--header-h) 0 auto 0;
		background: var(--white); border-bottom: 1px solid var(--line);
		box-shadow: var(--shadow-md);
		max-height: 0; overflow: hidden; visibility: hidden;
		transition: max-height .3s ease, visibility .3s;
	}
	.wp-block-navigation__responsive-container.is-menu-open {
		max-height: calc(100vh - var(--header-h)); overflow: auto; visibility: visible;
	}
	.wp-block-navigation__responsive-close { height: 100%; }
	.wp-block-navigation__responsive-dialog { padding-bottom: var(--sp-5); }

	.wp-block-navigation__container {
		flex-direction: column; align-items: stretch; gap: 0;
		padding: var(--sp-2) var(--gutter) 0;
	}
	.wp-block-navigation__container > .wp-block-navigation-item {
		display: flex; flex-wrap: wrap; align-items: center;
	}
	.wp-block-navigation__container > .wp-block-navigation-item > .wp-block-navigation-item__content {
		flex: 1; min-height: 56px; padding-inline: 0; font-size: var(--step-1);
	}
	.wp-block-navigation__submenu-icon { width: 46px; height: 56px; margin: 0; }
	.wp-block-navigation__submenu-icon .icon { width: 18px; height: 18px; transition: transform .2s ease; }
	.wp-block-navigation__submenu-icon[aria-expanded="true"] .icon { transform: rotate(180deg); }
	.has-child:hover > .wp-block-navigation-item__content,
	.has-child:focus-within > .wp-block-navigation-item__content,
	.has-child:hover > .wp-block-navigation__submenu-icon,
	.has-child:focus-within > .wp-block-navigation__submenu-icon { background: none; border-radius: 0; }

	.wp-block-navigation__submenu-container {
		position: static; flex: 0 0 100%; opacity: 1; visibility: visible; transform: none;
		min-width: 0; padding: 0; border: 0; border-radius: 0; box-shadow: none;
	}
	/* Collapsed only where a real toggle button exists; without one the submenu
	   stays expanded, which is core/navigation's default overlay behaviour. */
	.has-child:has(> .wp-block-navigation__submenu-icon[aria-expanded]) > .wp-block-navigation__submenu-container {
		max-height: 0; overflow: hidden; transition: max-height 5ms linear;
	}
	.has-child > .wp-block-navigation__submenu-icon[aria-expanded="true"] ~ .wp-block-navigation__submenu-container {
		max-height: 560px; padding-bottom: var(--sp-2);
	}
	.wp-block-navigation__submenu-container .wp-block-navigation-item__content { padding: 12px 0 12px var(--sp-3); color: var(--ink-soft); }

	.site-nav .nav-cta {
		display: flex; flex-wrap: wrap; gap: var(--sp-2); margin-top: var(--sp-3);
		padding: var(--sp-4) var(--gutter) 0; border-top: 1px solid var(--line);
	}
	.site-nav .nav-cta .wp-block-button { flex: 1 1 210px; }
	.site-nav .nav-cta .wp-block-button__link { display: flex; width: 100%; }

	body.has-modal-open { overflow: hidden; }
	.site-nav:has(.is-menu-open) ~ .header__actions .icon-btn,
	.site-nav:has(.is-menu-open) ~ .header__actions .header__tel { display: none; }
	/* The burger itself becomes the close control — stays in header flow, so it
	   is never clipped by the drawer's scroll container. */
	.wp-block-navigation__responsive-container-close { display: none !important; }
	.wp-block-navigation__responsive-container-open .burger-x { display: none; width: 24px; height: 24px; stroke-width: 2.2; color: var(--navy-800); }
	.wp-block-navigation__responsive-container-open[aria-expanded="true"] .burger-bars { display: none; }
	.wp-block-navigation__responsive-container-open[aria-expanded="true"] .burger-x { display: block; }
}


/* 11. Quick-search overlay ------------------------------------------------ */
.search-modal {
	position: fixed; inset: 0; width: 100%; max-width: none; height: 100%; max-height: none;
	margin: 0; padding: 0; border: 0; background: transparent; overflow: visible;
}
.search-modal[open] {
	display: flex; align-items: flex-start; justify-content: center;
	padding: clamp(1rem, 9vh, 6.5rem) var(--gutter) var(--gutter);
}
.search-modal::backdrop {
	background: rgba(19, 23, 52, 0.52);
	backdrop-filter: blur(3px);
	animation: search-fade .18s ease both;
}
@keyframes search-fade { from { opacity: 0 } to { opacity: 1 } }
@keyframes search-rise { from { opacity: 0; transform: translateY(-10px) } to { opacity: 1; transform: none } }

.search-modal__panel {
	width: 100%; max-width: 620px; max-height: 100%;
	display: flex; flex-direction: column;
	background: var(--white); border-radius: 14px;
	box-shadow: 0 28px 70px -22px rgba(19, 23, 52, .5), 0 2px 6px rgba(19, 23, 52, .08);
	overflow: hidden;
	animation: search-rise .2s cubic-bezier(.22,.68,.28,1) both;
}
@media (prefers-reduced-motion: reduce) {
	.search-modal::backdrop, .search-modal__panel { animation: none; }
}

.search-modal__field {
	display: flex; align-items: center; gap: var(--sp-3);
	padding: 0 var(--sp-3) 0 var(--sp-4);
	border-bottom: 1px solid var(--line); flex: none;
}
.search-modal__icon { color: var(--ink-muted); flex: none; }
.search-modal__input {
	flex: 1; min-width: 0; min-height: 62px; padding: 0;
	border: 0; background: none; color: var(--ink);
	font-family: inherit; font-size: var(--step-1);
}
.search-modal__input::placeholder { color: var(--ink-muted); }
.search-modal__input:focus { outline: 0; }
.search-modal__input::-webkit-search-cancel-button { display: none; }
.search-modal__close {
	display: grid; place-items: center; width: 40px; height: 40px; flex: none;
	border: 0; background: none; border-radius: var(--radius-pill);
	color: var(--ink-muted); cursor: pointer;
}
.search-modal__close:hover { background: var(--cream-deep); color: var(--navy-800); }

.search-modal__body { overflow-y: auto; -webkit-overflow-scrolling: touch; padding: var(--sp-3) 0 var(--sp-2); }
.search-modal__label {
	margin: 0 0 6px; padding: 0 var(--sp-4);
	font-size: 0.6875rem; letter-spacing: 0.16em; text-transform: uppercase;
	font-weight: 600; color: var(--ink-muted);
}
.search-modal__results { list-style: none; margin: 0; padding: 0; }

.search-hit {
	display: flex; align-items: center; gap: var(--sp-3);
	padding: 11px var(--sp-4); text-decoration: none; color: var(--ink);
	border-left: 3px solid transparent;
}
.search-hit.is-active, .search-hit:hover {
	background: var(--cream); border-left-color: var(--orange-500);
}
.search-hit__main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.search-hit__title { font-weight: 600; color: var(--navy-800); }
.search-hit__title mark {
	background: none; color: var(--orange-600); font-weight: 700;
}
.search-hit__sub {
	font-size: var(--step--1); color: var(--ink-muted);
	overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.search-hit__tag {
	margin-left: auto; flex: none;
	font-size: 0.625rem; letter-spacing: 0.1em; text-transform: uppercase; font-weight: 600;
	color: var(--ink-muted); background: var(--cream-deep);
	padding: 4px 8px; border-radius: var(--radius-pill);
}
.search-hit.is-active .search-hit__tag, .search-hit:hover .search-hit__tag { background: var(--white); }

.search-modal__empty {
	margin: 0; padding: var(--sp-3) var(--sp-4) var(--sp-5);
	font-size: var(--step-0); color: var(--ink-soft);
}
.search-modal__empty b { color: var(--navy-800); }
.search-modal__empty em { font-style: normal; color: var(--orange-600); font-weight: 600; }

.search-modal__foot {
	display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3);
	flex: none; padding: var(--sp-2) var(--sp-4);
	border-top: 1px solid var(--line); background: var(--cream);
	font-size: var(--step--1); color: var(--ink-muted);
}
.search-modal__foot kbd {
	font-family: var(--font-mono); font-size: 0.625rem;
	background: var(--white); border: 1px solid var(--line-strong); border-bottom-width: 2px;
	border-radius: 4px; padding: 1px 5px; margin-right: 2px; color: var(--ink-soft);
}
.search-modal__all { color: var(--orange-600); font-weight: 600; text-decoration: none; white-space: nowrap; }
.search-modal__all:hover { text-decoration: underline; }

@media (max-width: 560px) {
	.search-modal[open] { padding: 0; align-items: stretch; }
	.search-modal__panel { max-width: none; border-radius: 0; height: 100%; }
	.search-modal__body { flex: 1; }
	.search-modal__field { padding-left: var(--gutter); min-height: 60px; }
	.search-modal__input { min-height: 58px; }
	.search-modal__label, .search-hit, .search-modal__empty, .search-modal__foot { padding-inline: var(--gutter); }
	.search-hit { padding-block: 13px; }
	.search-hit__tag { display: none; }
	.search-modal__hint { display: none; }
	.search-modal__foot { justify-content: flex-end; }
}


/* CTA band ---------------------------------------------------------------- */
.cta-band { background: var(--navy-800); padding-block: var(--sp-7); text-align: center; }
.cta-band__inner { max-width: 44rem; margin-inline: auto; }
.cta-band h2 { color: var(--white); font-size: var(--step-3); }
.cta-band p { color: rgba(232, 234, 244, 0.82); margin: var(--sp-3) 0 var(--sp-5); font-size: var(--step-0); }
.cta-band__actions { display: flex; gap: var(--sp-3); justify-content: center; flex-wrap: wrap; }
.cta-band--light { background: var(--white); }
.cta-band--light p { color: var(--ink-soft); }
.cta-band--cream { background: var(--cream); }
.cta-band--cream h2, .cta-band--light h2 { color: var(--navy-800); }
.cta-band--cream p { color: var(--ink-soft); }

/* FAQ accordion ---------------------------------------------------------- */
.faq > .faq__item { border-top: 1px solid var(--line); }
.faq > .faq__item:last-child { border-bottom: 1px solid var(--line); }
.faq__item > summary {
	display: flex; align-items: center; justify-content: space-between; gap: var(--sp-4);
	padding: var(--sp-4) 0; cursor: pointer; list-style: none;
	font-family: var(--font-sans); font-weight: 600; font-size: var(--step-0);
	color: var(--navy-800); text-align: left;
}
.faq__item > summary::-webkit-details-marker { display: none; }
.faq__item > summary::marker { content: ""; }
.faq__item > summary:hover { color: var(--orange-600); }
/* chevron drawn in CSS so the summary holds editable text only */
.faq__item > summary::after {
	content: ""; flex: 0 0 auto; width: 9px; height: 9px;
	margin-right: 3px;
	border-right: 1.6px solid var(--ink-muted); border-bottom: 1.6px solid var(--ink-muted);
	transform: translateY(-3px) rotate(45deg); transition: transform .2s ease;
}
.faq__item[open] > summary::after { transform: translateY(2px) rotate(225deg); }
.faq__item > :not(summary) { color: var(--ink-soft); line-height: var(--leading-body); }
.faq__item > :not(summary):last-child { padding-bottom: var(--sp-4); }
.faq__item > p { margin: 0 var(--sp-6) var(--sp-3) 0; }


/* Contact page ------------------------------------------------------------ */
.contact-grid { display: grid; grid-template-columns: 5fr 6fr; gap: var(--sp-7); align-items: start; }
.contact-list { list-style: none; margin: 0 0 var(--sp-5); padding: 0; display: flex; flex-direction: column; gap: var(--sp-5); }
.contact-list li { display: flex; gap: var(--sp-3); }
.contact-list h3 { font-family: var(--font-sans); font-size: var(--step-0); font-weight: 700; margin: 0 0 2px; }
.contact-list p { margin: 0; color: var(--ink-soft); }
.contact-list a:not(.link-arrow) { color: var(--ink-soft); text-decoration-color: var(--line-strong); }
.contact-list .fine { margin-top: 6px; max-width: 46ch; }
.contact-list .link-arrow { margin-top: 10px; font-size: var(--step--1); }
.hours { margin: 6px 0 0; display: grid; grid-template-columns: auto auto; justify-content: start; column-gap: var(--sp-5); row-gap: 2px; color: var(--ink-soft); font-size: var(--step--1); }
.hours dt { margin: 0; }
.hours dd { margin: 0; font-variant-numeric: tabular-nums; }
.card--cream { background: var(--cream); border-color: transparent; box-shadow: none; }
.card--cream h3 { font-family: var(--font-sans); font-size: var(--step-0); font-weight: 700; margin: 0 0 var(--sp-2); }
.card--cream p { margin: 0; color: var(--ink-soft); font-size: var(--step--1); }
.card--cream .link-arrow { margin-top: var(--sp-3); font-size: var(--step--1); color: var(--orange-600); }

/* Forms — reusable across views ------------------------------------------- */
.form { display: grid; gap: var(--sp-4); margin-top: var(--sp-5); }
.form > p { max-width: none; }
.form__row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-4); }
.form__row--thirds { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.form__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-3); }
.form__note { margin: 0; max-width: none; text-align: center; }
/* The booking form's steps are fieldsets, and want the same gap between their
   questions that .form gives a flat form's rows - which a fieldset does not
   inherit, being a formatting context of its own. Restating display:grid on it
   costs the native meaning of [hidden], so that is restored on the next line:
   the wizard hides four of its five steps that way. */
.form fieldset { display: grid; gap: var(--sp-4); margin: 0; padding: 0; border: 0; }
.form fieldset[hidden] { display: none; }
.form legend { padding: 0; margin-bottom: var(--sp-2); font-size: var(--step--1); font-weight: 700; color: var(--navy-800); }

.field { display: flex; flex-direction: column; gap: 8px; }
/* .field__label-static is a <span> naming a group of buttons, which no <label>
   may name. The design writes these two rules onto it inline; they are the same
   two the design writes here for a real label, so they are stated once. */
.field > label, .field > .field__label-static { font-size: var(--step--1); font-weight: 700; color: var(--navy-800); }
.field > label span, .field > .field__label-static span { font-weight: 400; color: var(--ink-muted); }
.field__help { margin: 0; max-width: none; font-size: var(--step--1); color: var(--ink-muted); }
.field__error { margin: 0; max-width: none; font-size: var(--step--1); font-weight: 600; color: var(--orange-600); }

.input, .select, .textarea {
	width: 100%; min-height: 50px; padding: 13px var(--sp-3);
	background: var(--white); color: var(--ink);
	border: 1px solid var(--line-strong); border-radius: var(--radius);
	transition: border-color .18s ease, box-shadow .18s ease;
}
.input::placeholder, .textarea::placeholder { color: var(--ink-muted); }
.input:hover, .select:hover, .textarea:hover { border-color: var(--ink-muted); }
.input:focus, .select:focus, .textarea:focus { border-color: var(--navy-700); box-shadow: 0 0 0 3px rgba(38,47,99,.08); outline: none; }
.input:disabled, .select:disabled, .textarea:disabled { background: var(--cream); color: var(--ink-muted); cursor: not-allowed; }
.field.is-invalid .input, .field.is-invalid .select, .field.is-invalid .textarea { border-color: var(--orange-600); }
.textarea, textarea.input { min-height: 172px; resize: vertical; line-height: 1.6; }
/* A box for an afterthought rather than an account. The design writes this as
   an inline min-height on the last question of the free health advice form; a
   value in a style attribute is one nobody can find and nobody can change
   everywhere at once, so it is a second size of the control instead. */
.textarea--short { min-height: 120px; }
.select {
	appearance: none; padding-right: var(--sp-6); cursor: pointer;
	background-image: linear-gradient(45deg, transparent 50%, var(--ink-soft) 50%), linear-gradient(135deg, var(--ink-soft) 50%, transparent 50%);
	background-position: calc(100% - 24px) 22px, calc(100% - 18px) 22px;
	background-size: 6px 6px, 6px 6px; background-repeat: no-repeat;
}

/* Choice controls */
.choice { display: flex; align-items: flex-start; gap: var(--sp-2); font-size: var(--step--1); color: var(--ink-soft); cursor: pointer; }
.choice input { flex: 0 0 auto; width: 20px; height: 20px; margin: 1px 0 0; accent-color: var(--orange-500); cursor: pointer; }
.choice-group { display: flex; flex-direction: column; gap: var(--sp-2); }
.choice-group--row { flex-direction: row; flex-wrap: wrap; gap: var(--sp-4); }

/* The honeypot's holder. Taken out of flow rather than hidden, for two reasons
   at once: a crawler that skips display:none subtrees still fills this one, and
   .form is a grid whose gap would otherwise leave a blank row where it sits.
   See amclinic_core_render_enquiry_traps(). */
.enquiry-trap { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

.btn--block { width: 100%; }
.btn.is-busy { opacity: .7; cursor: progress; transform: none; }
.form__status { margin: 0; max-width: none; padding: 12px var(--sp-3); border-radius: var(--radius); font-size: var(--step--1); font-weight: 600; }
.form__status--error { background: #fdeee8; color: var(--orange-600); border: 1px solid #f6cbb9; }
.form__success {
	display: flex; gap: var(--sp-3); margin-top: var(--sp-5);
	padding: var(--sp-5); background: var(--cream); border-radius: var(--radius-lg);
}
.form__success h3 { font-family: var(--font-sans); font-size: var(--step-0); font-weight: 700; margin: 0 0 var(--sp-2); }
.form__success p { margin: 0; max-width: 46ch; color: var(--ink-soft); font-size: var(--step--1); }
.form__success .link-arrow { margin-top: var(--sp-3); padding: 0; border: 0; background: none; cursor: pointer; color: var(--orange-600); font-size: var(--step--1); }

/* Full-bleed map band */
.map-band { border-top: 1px solid var(--line); }
.map-band__canvas { min-height: 460px; height: 46vh; }

@media (max-width: 900px) {
	.contact-grid { grid-template-columns: 1fr; gap: var(--sp-6); }
	.map-band__canvas { min-height: 320px; }
}
@media (max-width: 620px) {
	.form__row { grid-template-columns: 1fr; }
}


/* Booking page ------------------------------------------------------------
   design-assets/book.html and §13 of design-assets/css/site.css, with four
   deliberate deltas noted where they occur:

   - .callout is not ported. The design defines it twice - §"Callout card" makes
     it a cream card, §13 a bordered note with an icon, both on the same class -
     and the only thing that used the second was the herbal-medicine note under
     the treatment question, which is not part of the form (2026-08-20, owner
     decision). Nothing here needs the second definition, so the collision is
     left in the design file rather than resolved into this one.
   - .btn--navy, .summary and .payload are not ported. The first is unused; the
     other two style the demo's submitted-payload dump, which does not ship -
     see amclinic_core_enquiry_success_copy() for why the panel says the same
     thing on both submission paths and therefore lists nothing back.
   - The rail's step count is a container query on .wizard, and .wizard is the
     block's own wrapper, so the query resolves against the card as the design
     intends. See amclinic_core_render_enquiry_wizard().
   - .opt-grid.is-invalid is kept but [data-group-error] is not: the choice's
     error paragraph is a .field__error inside the .field wrapping the grid,
     which is where every other error on the site lives and what forms.js
     already knows how to write into. */

.booking { display: grid; grid-template-columns: 7fr 3fr; gap: var(--sp-5); align-items: start; }
.wizard { container-type: inline-size; padding: var(--sp-6) var(--sp-5); }
.wizard h2 { font-size: var(--step-3); margin: 0; outline: none; }
.wizard h2 em { font-style: normal; color: var(--ink-muted); font-size: .72em; }
.wizard__head { display: grid; gap: 6px; }
.wizard__intro { color: var(--ink-muted); margin: 0; max-width: 60ch; }

.wizard__steps { display: flex; align-items: center; list-style: none; margin: 0 0 var(--sp-6); padding: 0; gap: var(--sp-2); flex-wrap: nowrap; }
.wizard__steps li { display: flex; align-items: center; gap: var(--sp-2); min-width: 0; font-size: var(--step--1); color: var(--ink-muted); white-space: nowrap; }
.wizard__steps li:not(:last-child) { flex: 1 1 auto; }
.wizard__steps li::after { content: ""; flex: 1 1 auto; min-width: 8px; max-width: 34px; height: 1px; background: var(--line-strong); margin-left: var(--sp-2); }
.wizard__steps li:last-child::after { display: none; }
.wizard__steps b { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 50%; background: var(--cream-deep); color: var(--ink-muted); font-size: 0.8125rem; font-weight: 700; }
.wizard__steps i { font-style: normal; }
.wizard__steps .is-current { color: var(--navy-800); font-weight: 700; }
.wizard__steps .is-current b { background: var(--orange-500); color: var(--white); }
.wizard__steps .is-done b { background: var(--navy-800); color: var(--white); }
.wizard__steps .is-done b span { display: none; }
.wizard__steps .is-done b::before { content: "✓"; font-size: 0.8125rem; }

.opt-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-3); }
.opt {
	position: relative; display: block; padding: var(--sp-3) var(--sp-4);
	border: 1px solid var(--line-strong); border-radius: var(--radius-lg);
	background: var(--white); cursor: pointer;
	transition: border-color .18s ease, background-color .18s ease, box-shadow .18s ease;
}
.opt:hover { border-color: var(--ink-muted); }
.opt input { position: absolute; opacity: 0; width: 0; height: 0; }
.opt b { display: block; font-weight: 600; color: var(--navy-800); }
.opt span { display: block; margin-top: 2px; font-size: var(--step--1); color: var(--ink-muted); }
.opt .opt__tick {
	position: absolute; top: 50%; right: var(--sp-4); translate: 0 -50%;
	display: none; place-items: center; margin: 0;
	width: 22px; height: 22px; border-radius: 50%;
	background: var(--navy-800); color: var(--white);
}
.opt .opt__tick .icon { width: 12px; height: 12px; stroke-width: 3; }
.opt:has(input:checked) { border-color: var(--navy-800); border-width: 2px; padding: calc(var(--sp-3) - 1px) calc(var(--sp-4) - 1px); background: #f6f7fc; }
.opt:has(input:checked) .opt__tick { display: grid; }
.opt b, .opt > span:not(.opt__tick) { padding-right: var(--sp-5); }
.opt:has(input:focus-visible) { outline: 2px solid var(--orange-500); outline-offset: 3px; }
.opt--compact { padding: 14px var(--sp-4); }
.opt--compact:has(input:checked) { padding: 13px calc(var(--sp-4) - 1px); }
.opt-grid.is-invalid .opt { border-color: var(--orange-600); }

.wizard__panel { padding: var(--sp-4); border-radius: var(--radius-lg); background: #f6f7fc; border: 1px solid #dfe3f2; }
.wizard__panel h3 { font-family: var(--font-sans); font-size: var(--step-0); font-weight: 700; margin: 0 0 4px; }
.wizard__panel p { margin: 0 0 var(--sp-3); font-size: var(--step--1); color: var(--ink-soft); max-width: none; }
.wizard__panel .row { gap: var(--sp-2); }

.wizard__nav { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); margin-top: var(--sp-3); padding-top: var(--sp-4); border-top: 1px solid var(--line); }
.wizard__nav-end { display: flex; align-items: center; gap: var(--sp-4); margin-left: auto; }
.btn-link { background: none; border: 0; padding: 0; color: var(--ink-muted); font-size: var(--step--1); font-weight: 600; cursor: pointer; }
.btn-link:hover { color: var(--navy-800); }
.btn:disabled, .btn[aria-disabled="true"] { background: var(--cream-deep); color: var(--ink-muted); transform: none; }
.btn[aria-disabled="true"]:hover { background: var(--cream-deep); transform: none; }

.seg { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
.seg__btn {
	min-height: 44px; padding: 0 var(--sp-4); cursor: pointer;
	border: 1px solid var(--line-strong); border-radius: var(--radius);
	background: var(--white); color: var(--navy-800); font-size: var(--step--1); font-weight: 600;
}
.seg__btn:hover { border-color: var(--ink-muted); }
.seg__btn[aria-pressed="true"] { background: var(--navy-800); border-color: var(--navy-800); color: var(--white); }

.wizard__done { margin-top: 0; }

.aside-stack { display: flex; flex-direction: column; gap: var(--sp-4); }
.aside-card h3 { font-family: var(--font-sans); font-size: var(--step-0); font-weight: 700; margin: 0 0 var(--sp-2); }
.aside-card p { margin: 0 0 var(--sp-3); font-size: var(--step--1); color: var(--ink-soft); }
/* The rule above out-specifies the global p:last-child, so the last line in a
   card keeps a margin the card has no use for. The design zeroes it with an
   inline style on the one card where it shows; restated here, where it holds
   for every card rather than for the one somebody remembered. */
.aside-card p:last-child { margin-bottom: 0; }
/* Renamed from the design's .aside-card__meta, and the one rename in this port.
   The design uses it once, inside one card on one page, so it named it for
   where it sat; it is a strip of ways to reach the clinic and belongs in any
   card, sidebar or panel that wants one. A pattern called "Clinic contact
   lines" emitting class="aside-card__meta" would be a component telling you it
   is a detail of something else. */
.contact-lines { display: flex; flex-direction: column; gap: 6px; font-size: var(--step--1); }
.contact-lines a, .contact-lines span { display: inline-flex; align-items: center; gap: 8px; color: var(--navy-800); text-decoration: none; font-weight: 600; }
.contact-lines .fine { font-weight: 400; color: var(--ink-muted); }
/* The strip set off from what it follows, for a card that has already said
   something before it offers a telephone number. The design's
   .aside-card__meta--top, renamed with the component it modifies. */
.contact-lines--top { margin-top: var(--sp-4); padding-top: var(--sp-4); border-top: 1px solid var(--cream-deep); }

/* Numbered guidance list — a step at a time, in a card or beside an article.
   Not .steps, which is the patient journey's row of icon cards across a full
   section, and not .timeline, which is a dated history down a rule. This is
   three or four short things in order, in a column narrow enough to sit in a
   sidebar, and the numbers are a counter so deleting one renumbers the rest. */
.numlist { list-style: none; margin: var(--sp-4) 0 0; padding: 0; display: grid; gap: var(--sp-4); counter-reset: numitem; }
.numlist li { display: grid; grid-template-columns: 28px minmax(0, 1fr); gap: var(--sp-3); align-items: start; }
.numlist li::before {
	counter-increment: numitem; content: counter(numitem);
	width: 28px; height: 28px; border-radius: 50%;
	background: var(--navy-800); color: var(--white);
	font-family: var(--font-sans); font-size: 13px; font-weight: 700;
	display: grid; place-items: center;
}
.numlist li > :not(:first-child) { grid-column: 2; }
.numlist h3 { font-family: var(--font-sans); font-size: var(--step--1); font-weight: 700; margin: 4px 0 4px; }
.numlist p { margin: 0; max-width: none; font-size: var(--step--1); color: var(--ink-soft); line-height: 1.6; }

/* The card heading a step above .aside-card h3, for a card whose subject is the
   thing beside the form rather than a note within it. */
.aside-card__h { font-size: var(--step-2); margin: 0; }
.aside-card .rule { margin: var(--sp-3) 0; }

.factbar { border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); background: var(--cream); }
.factbar__grid { display: grid; grid-template-columns: repeat(3, 1fr); text-align: center; padding-block: var(--sp-4); }
.factbar__grid div + div { border-left: 1px solid var(--line); }
.factbar b { display: block; color: var(--navy-800); font-weight: 700; }
.factbar span { font-size: var(--step--1); color: var(--ink-muted); }

/* Labels drop whole (never truncate) once the card itself is too narrow for one line. */
@container (max-width: 620px) {
	.wizard__steps i { display: none; }
	.wizard__steps li::after { max-width: none; }
}

@media (max-width: 900px) {
	.booking { grid-template-columns: 1fr; }
	.opt-grid { grid-template-columns: 1fr; }
	.factbar__grid { grid-template-columns: 1fr; gap: var(--sp-3); }
	.factbar__grid div + div { border-left: 0; border-top: 1px solid var(--line); padding-top: var(--sp-3); }
	.wizard { padding: var(--sp-5) var(--sp-4); }
}


/* Explainer page ----------------------------------------------------------
   design-assets/how-chinese-medicine-works.html and §14 of
   design-assets/css/site.css, with one deliberate delta noted where it occurs:
   the further-reading card, whose whole-card link no block can emit.

   These are the shapes a page of explanation needs and the marketing sections
   do not: a narrative column with a supporting column beside it, a card for a
   term the reader has not met before, running text in two columns, and a row
   of ways on at the end. */

/* Two-column reading layout: main narrative + supporting column */
.doc-layout { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); gap: var(--sp-7); align-items: start; }
.doc-layout .prose p { font-size: var(--step-0); }

/* Supporting note cards (examples, research areas) */
.notes { display: grid; gap: var(--sp-3); }
.note {
	background: var(--white); border: 1px solid var(--line);
	border-left: 3px solid var(--orange-500);
	border-radius: var(--radius); padding: var(--sp-3) var(--sp-4);
}
.note__title { font-family: var(--font-sans); font-size: var(--step-0); font-weight: 700; color: var(--navy-800); margin: 0 0 4px; }
.note p { margin: 0; font-size: var(--step--1); color: var(--ink-soft); max-width: none; line-height: 1.6; }

/* Concept card (Qi, Yin & Yang…) */
.concept { background: var(--cream); border-radius: var(--radius-lg); padding: var(--sp-4); }
.concept h3 { font-size: var(--step-1); margin-bottom: 2px; }
.concept__kicker { display: block; font-size: var(--step--1); font-weight: 600; color: var(--orange-600); margin-bottom: var(--sp-3); }
.concept p { font-size: var(--step--1); color: var(--ink-soft); line-height: 1.65; max-width: none; }

/* Two-column running text (used inside navy band) */
.text-cols { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-5); }
.text-cols p { max-width: none; }
.section--navy .text-cols p { color: #c3c9e4; font-size: var(--step--1); line-height: 1.7; }

/* Further-reading link cards
 *
 * The delta. The design draws each card as one <a> wrapping the whole box, and
 * no block can produce that: core/group takes any tagName but carries no href,
 * and there is no core block that is a link around arbitrary content. So the
 * card is a <div> and the link sits on its title, stretched over the box by a
 * pseudo-element. The box stays clickable edge to edge, and what a screen
 * reader announces for the link is the title rather than the title plus the
 * summary plus "Read more" - which is what the design's markup would have read
 * out.
 *
 * Three declarations follow from that and are not in the design: the box needs
 * a positioning context for the stretched pseudo-element; the title's anchor
 * needs a colour and no underline, because a bare <a> otherwise takes the
 * site's link colour and rule; and every hover state needs a :focus-within
 * twin, because a card reached by keyboard has to show what a pointer is shown.
 */
.link-card {
	position: relative;
	display: flex; flex-direction: column; gap: var(--sp-2);
	padding: var(--sp-4); background: var(--white);
	border: 1px solid var(--line); border-radius: var(--radius-lg);
	text-decoration: none; transition: border-color .18s ease, box-shadow .18s ease, transform .18s ease;
}
.link-card:hover, .link-card:focus-within { border-color: var(--navy-700); box-shadow: var(--shadow-md); transform: translateY(-2px); }
.link-card__title { font-family: var(--font-display); font-size: var(--step-1); color: var(--navy-800); line-height: 1.3; }
.link-card__title a { color: inherit; text-decoration: none; }
.link-card__title a::after { content: ""; position: absolute; inset: 0; border-radius: inherit; }
.link-card p { font-size: var(--step--1); color: var(--ink-soft); max-width: none; line-height: 1.6; }
.link-card__more { margin-top: auto; font-size: var(--step--1); font-weight: 600; color: var(--orange-600); }
.link-card:hover .link-card__title, .link-card:focus-within .link-card__title { color: var(--navy-700); }

@media (max-width: 900px) {
	.doc-layout { grid-template-columns: 1fr; gap: var(--sp-5); }
	.text-cols { grid-template-columns: 1fr; gap: var(--sp-3); }
}

/* Condition pages ---------------------------------------------------------
   §12 of design-assets/css/site.css, shared by all ten What We Help With
   pages. The page shape itself needs nothing new: it is the hero in its
   page-heading cut over .svc-layout, both of which the service category page
   already brought in. What is new is what goes inside that column - a
   standfirst, a review strip, a grid of condition tiles, the approach block -
   and the card the FAQ accordion sits in.

   Ported verbatim except where noted. The blocks.css counterparts restate
   these against the classes core's markup produces, as everywhere else in this
   theme. */

/* The opening line, set larger than the body it introduces, so it reads as a
   statement rather than a first paragraph. It was narrower too, at 46ch; the
   design's revision took that off and lets it fill the column it stands in,
   which on a concern page is .svc-layout's main cell. */
.standfirst {
	font-family: var(--font-display); font-style: italic;
	font-size: var(--step-2); line-height: 1.4; color: var(--navy-800);
	margin: 0 0 var(--sp-5); text-wrap: pretty;
}

/* Patient review strip (quote + clinic stats) */
.review-strip {
	background: var(--cream); border: 1px solid var(--line); border-radius: var(--radius-lg);
	padding: var(--sp-5); margin-block: var(--sp-7);
}
.review-strip__quote p {
	font-family: var(--font-display); font-style: italic;
	font-size: var(--step-1); line-height: 1.55; color: var(--ink-soft); max-width: 64ch;
}
.review-strip__meta {
	display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--sp-3) var(--sp-5);
	border-top: 1px solid var(--line-strong); margin-top: var(--sp-4); padding-top: var(--sp-4);
}
.review-strip__stat { display: inline-flex; align-items: baseline; gap: 8px; font-size: var(--step--1); color: var(--ink-muted); }
.review-strip__stat b { font-family: var(--font-display); font-weight: 500; font-size: var(--step-1); color: var(--navy-800); }
.review-strip .stars { font-size: 0.8125rem; letter-spacing: 2px; }

/* Condition / area label grid */
.tag-grid { list-style: none; margin: 0 0 var(--sp-3); padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--sp-3); }
.tag-grid li {
	display: flex; align-items: center; min-height: 56px;
	padding: var(--sp-2) var(--sp-3); border: 1px solid var(--line); border-radius: var(--radius);
	background: var(--white); color: var(--navy-800);
	font-size: var(--step--1); font-weight: 600; line-height: 1.35;
}
/* A tile for a concern whose conditions are not settled yet: named, but not
   offered as a way through to anything. */
.tag-grid li.is-pending { color: var(--ink-muted); font-weight: 400; font-style: italic; }
/* A tile becomes interactive only when it holds a link */
.tag-grid a {
	display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3);
	width: 100%; color: inherit; text-decoration: none;
}
.tag-grid a::after {
	content: "→"; color: var(--orange-600); opacity: 0;
	transform: translateX(-4px); transition: opacity .18s ease, transform .18s ease;
}
.tag-grid li:has(a) { transition: border-color .18s ease, box-shadow .18s ease; }
.tag-grid li:has(a):hover, .tag-grid li:focus-within { border-color: var(--navy-700); box-shadow: var(--shadow-md); }
.tag-grid li:has(a):hover a::after, .tag-grid li:focus-within a::after { opacity: 1; transform: translateX(0); }

/* Whole-person approach: intro beside divided principles */
.approach {
	display: grid; grid-template-columns: minmax(0, 0.85fr) minmax(0, 1fr); gap: var(--sp-6);
	align-items: start; margin-top: var(--sp-7); padding-top: var(--sp-6); border-top: 1px solid var(--line);
}
.approach p { color: var(--ink-soft); }
.approach__list { display: grid; gap: var(--sp-4); }
.approach__item + .approach__item { border-top: 1px solid var(--line); padding-top: var(--sp-4); }
.approach__item h3 { font-size: var(--step-1); margin-bottom: var(--sp-2); }
.approach__item p { font-size: var(--step--1); line-height: 1.6; }

/* FAQ accordion held in a card (condition pages) */
.faq--card {
	background: var(--white); border: 1px solid var(--line); border-radius: var(--radius-lg);
	padding-inline: var(--sp-5); max-width: 58rem; margin-inline: auto;
}
.faq--card > .faq__item:first-child { border-top: 0; }
.faq--card > .faq__item:last-child { border-bottom: 0; }

/* The same card, asked for by the section rather than by the group.
   .faq--card is a class on the accordion, and the accordion lives inside a
   synced record that stands on several pages - so a group carrying it is a
   group that has decided how every page must present it. A concern page says
   it here instead, on its own section, and the records it stacks stay plain
   lists that read full width on the FAQ page and in a card here.
   The card goes round .faq-group rather than .faq so that a group's heading
   sits inside its own card; a page stacking three gets three. */
.faq-cards .faq-group {
	background: var(--white); border: 1px solid var(--line); border-radius: var(--radius-lg);
	padding: var(--sp-4) var(--sp-5) var(--sp-2); max-width: 58rem; margin-inline: auto;
}
.faq-cards .faq-group + .faq-group { margin-top: var(--sp-4); }
.faq-cards .faq-group > .mt-5 { margin-top: 0; }
.faq-cards .faq > .faq__item:first-child { border-top: 0; }
.faq-cards .faq > .faq__item:last-child { border-bottom: 0; }

@media (max-width: 900px) {
	.tag-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.approach { grid-template-columns: 1fr; gap: var(--sp-5); }
}
@media (max-width: 620px) {
	.tag-grid { grid-template-columns: 1fr; }
	.review-strip { padding: var(--sp-4); }
}
