/* =====================================================================
   InnerSight theme — gentle global stylesheet.

   Scope: header / navigation / footer, blog (single/archive/search/404),
   and bare core blocks on simple pages. Deliberately sets NO global
   h2{text-transform}, blockquote box, or th/td background — those are the
   exact talking-minds bugs the scoped pages guard against, so leaving them
   unset keeps the per-page guards inert instead of conflicting.
   Low specificity, no !important — page-level CSS always wins.
   ===================================================================== */

:root {
	--is-brand: #4370b7;
	--is-brand-deep: #33599a;
	--is-brand-ink: #1f3c6c;
	--is-purple: #4e2a7d;
	--is-mist: #e8f1ff;
	--is-line: #e4e2da;
}

img { max-width: 100%; height: auto; }
html { scroll-behavior: smooth; }

/* The root layout inserts a block-gap between the top-level template parts
   (header / main / footer). Remove it so the footer sits flush against the last
   section instead of leaving a stray white band above it. */
.wp-site-blocks > header,
.wp-site-blocks > main,
.wp-site-blocks > footer { margin-block: 0 !important; }

/* Visible focus for keyboard users. */
a:focus-visible,
button:focus-visible,
.wp-block-navigation a:focus-visible {
	outline: 2px solid var(--is-brand);
	outline-offset: 2px;
}

/* ---------------------------------------------------------------------
   HEADER + NAVIGATION
   ------------------------------------------------------------------- */
.is-header { position: relative; z-index: 100; }

/* Sticky header — stays pinned to the top on scroll (desktop + mobile), like the
   live site's floating header. The inner .is-header group carries the white bg so
   content scrolls underneath cleanly. */
.wp-site-blocks > header {
	position: sticky;
	top: 0;
	z-index: 200;
}

.is-header .wp-block-navigation {
	font-weight: 600;
	font-size: 0.92rem;
}
.is-header .wp-block-navigation a,
.is-header .wp-block-navigation .wp-block-navigation-item__content {
	color: var(--is-brand-ink);
	text-decoration: none;
}
.is-header .wp-block-navigation > .wp-block-navigation__container > .wp-block-navigation-item > a:hover,
.is-header .wp-block-navigation .wp-block-navigation-item__content:hover {
	color: var(--is-brand);
}

/* Submenu dropdowns */
.is-header .wp-block-navigation .wp-block-navigation__submenu-container {
	background: #fff;
	border: 1px solid var(--is-line);
	border-radius: 12px;
	box-shadow: 0 12px 40px rgba(78, 42, 125, 0.14);
	padding: 10px;
	min-width: 244px;
	max-height: 76vh;
	overflow-y: auto;
}
.is-header .wp-block-navigation__submenu-container .wp-block-navigation-item a {
	border-radius: 8px;
	padding: 7px 12px;
	font-weight: 500;
}
.is-header .wp-block-navigation__submenu-container .wp-block-navigation-item a:hover {
	background: var(--is-mist);
	color: var(--is-brand);
}

/* Mega submenus (Get Help, Modalities) — multi-column so long lists stay usable. */
.is-header .is-mega > .wp-block-navigation__submenu-container {
	display: grid;
	grid-template-columns: repeat(2, minmax(200px, 1fr));
	gap: 2px 14px;
	min-width: 460px;
	max-height: none;
}
/* A NESTED mega (Modalities inside Approach) stays single-column on desktop —
   a 460px flyout opening rightward could overflow at narrow desktop widths.
   The 2-col treatment for it applies only inside the mobile overlay. */
.is-header .wp-block-navigation__submenu-container .is-mega > .wp-block-navigation__submenu-container {
	display: block;
	min-width: 240px;
}
/* "View all …" hub links exist for the MOBILE overlay only (desktop parents are
   clickable, so the row would be redundant there). Shown under .is-menu-open. */
.is-header .wp-block-navigation-item.is-moblink { display: none; }

/* CTA buttons in the header — coral is reserved for CTAs (theme.json default). */
.is-header .is-cta .wp-block-button__link { white-space: nowrap; }
.is-headcta { align-items: center; }
.is-header .is-headcta .wp-block-button__link { padding: 10px 17px; font-size: 0.88rem; white-space: nowrap; border: 2px solid transparent; }
/* the outline style adds a real 2px border; without the transparent border above
   the two header pills render 4px different in height and the shorter one reads
   as cut off next to its neighbour (Mo flagged, 2026-08-14) */

/* Phone link — number on desktop AND mobile (icon only on very small screens). */
.is-phone {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	color: var(--is-brand-ink);
	font-weight: 700;
	font-size: 0.9rem;
	text-decoration: none;
	white-space: nowrap;
	line-height: 1;
}
.is-phone:hover { color: var(--is-brand); }
.is-phone-ic { flex: 0 0 auto; }
.is-headrow { row-gap: 12px; }
.is-header .wp-block-navigation__responsive-container-open { color: var(--is-brand-ink); padding: 6px; }

/* ---------------------------------------------------------------------
   TWO-ROW RESPONSIVE HEADER (like the live site)
   >= 860px: row 1 = logo (left) + phone + Book + Find My Match (right);
             row 2 = the full nav menu, centered. The 7-item bar gets its own
             full-width row, so it never competes with the CTAs and never breaks.
   < 860px:  collapse the nav to a hamburger; row 1 = logo + phone + hamburger,
             row 2 = the two buttons side by side.
   ------------------------------------------------------------------- */
@media (min-width: 860px) {
	.is-headrow > .wp-block-site-logo { order: 1; margin-right: 0; }
	/* the live search fills the old dead gap between logo and phone (2026-08-14) */
	/* margin lives HERE, not in the block css: WP's flex layout emits a
	   .wp-container > * { margin:0 } reset that outguns a single-class rule */
	/* auto margins BOTH sides: the free space splits symmetrically around the
	   pill instead of piling into one hole between search and phone, so row 1
	   reads left anchor / centred pill / right cluster, echoing the centred
	   nav row beneath it */
	.is-headrow > .isnav-hsearch     { order: 2; margin: 0 auto; }
	.is-headrow > .is-phone          { order: 3; }
	.is-headrow > .is-headcta        { order: 4; }
	/* between 860 and 1220 the search + full phone number + both CTAs cannot
	   share the top row; the number collapses to its icon (still a tel: link)
	   rather than wrapping the CTA cluster onto the nav row */
	.is-headrow > .wp-block-navigation { order: 5; flex-basis: 100%; }
	/* innersight/mega-nav takes the same second-row slot as the old nav. */
	.is-headrow > .isnav { order: 5; flex-basis: 100%; }
	/* the menu sits centered on its own second row */
	.is-header .wp-block-navigation__responsive-container-content > .wp-block-navigation__container { justify-content: center; }
}

@media (min-width: 860px) and (max-width: 1219.98px) {
	.is-phone-num { display: none; }
}

@media (max-width: 859.98px) {
	/* collapse to the hamburger (WP's own inline breakpoint is 600px) */
	.is-header .wp-block-navigation__responsive-container-open { display: flex !important; }
	.is-header .wp-block-navigation__responsive-container:not(.is-menu-open) { display: none !important; }
	/* row 1 = logo (left) + phone + hamburger (right); row 2 = the two buttons */
	.is-headrow > .wp-block-site-logo { order: 1; margin-right: auto; }
	.is-headrow > .is-phone          { order: 2; }
	.is-headrow > .wp-block-navigation { order: 3; }
	/* mega-nav collapses to its own hamburger at this same breakpoint */
	.is-headrow > .isnav             { order: 3; }
	.is-headrow > .is-headcta        { order: 4; flex-basis: 100%; margin-top: 2px; }
	.is-headcta, .is-headcta > .wp-block-buttons { width: 100%; }
	.is-headcta > .wp-block-buttons { gap: 10px; flex-wrap: nowrap; }
	.is-headcta .wp-block-button { flex: 1 1 0; }
	.is-headcta .wp-block-button__link { width: 100%; text-align: center; }
}
@media (max-width: 600px) {
	.is-headrow > .wp-block-site-logo img { max-width: 144px; height: auto; }
	.is-phone { font-size: 0.86rem; }
	.is-header .is-headcta .wp-block-button__link { padding: 11px 10px; font-size: 0.85rem; }
}
/* Very small screens: collapse the phone to a round icon so row 1 never crowds. */
@media (max-width: 380px) {
	.is-phone-num { display: none; }
	.is-phone {
		justify-content: center; width: 38px; height: 38px;
		border-radius: 50%; border: 1.5px solid var(--is-line); color: var(--is-brand);
	}
}

/* ---------------------------------------------------------------------
   MOBILE OVERLAY MENU
   Scoped to .is-menu-open, which only exists while the mobile overlay is
   open — so these never affect the desktop bar. Fixes: left-align all items
   (English is LTR; the nav's desktop justify-content:right was leaking in and
   right-aligning the overlay), and render nested submenus as a clean indented
   list instead of stacked floating dropdown boxes.
   ------------------------------------------------------------------- */
.is-header .wp-block-navigation__responsive-container.is-menu-open {
	/* slide the panel in from the LEFT and keep it pinned */
	justify-content: flex-start;
}
.is-header .is-menu-open .wp-block-navigation__responsive-container-content {
	align-items: flex-start !important;
	width: 100%;
}
.is-header .is-menu-open .wp-block-navigation__container {
	align-items: flex-start !important;
	justify-content: flex-start !important;
	width: 100%;
	gap: 2px;
}
.is-header .is-menu-open .wp-block-navigation-item {
	width: 100%;
	justify-content: flex-start !important;
	text-align: left;
}
.is-header .is-menu-open .wp-block-navigation-item__content,
.is-header .is-menu-open .wp-block-navigation-item > a {
	text-align: left;
	justify-content: flex-start !important;
	width: 100%;
}
/* Submenu parent labels read as section headers in the tree. */
.is-header .is-menu-open .wp-block-navigation-submenu > .wp-block-navigation-item__content {
	font-weight: 700;
}
/* Nested submenus: static, full-width, indented, no floating box.
   COLLAPSED by default (accordion) — mobile-nav.js toggles .is-open-mobile. */
.is-header .is-menu-open .wp-block-navigation__submenu-container {
	position: static !important;
	width: 100% !important;
	min-width: 0 !important;
	max-height: none !important;
	border: 0 !important;
	border-left: 2px solid #e8f1ff !important;
	box-shadow: none !important;
	background: transparent !important;
	padding: 2px 0 10px 14px !important;
	margin: 0 0 4px 4px !important;
	grid-template-columns: none !important;
	display: none !important;
}
.is-header .is-menu-open .wp-block-navigation-item.is-open-mobile > .wp-block-navigation__submenu-container {
	display: block !important;
}
/* Expand/collapse chevron on each parent item (replaces WP's own arrow icon). */
.is-header .is-menu-open .wp-block-navigation__submenu-icon { display: none !important; }
.is-header .is-menu-open .wp-block-navigation-submenu > .wp-block-navigation-item__content {
	position: relative;
	padding-right: 30px;
}
.is-header .is-menu-open .wp-block-navigation-submenu > .wp-block-navigation-item__content::after {
	content: "";
	position: absolute;
	right: 10px;
	top: 50%;
	width: 8px;
	height: 8px;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: translateY(-65%) rotate(45deg);
	transition: transform 0.2s ease;
	opacity: 0.65;
}
.is-header .is-menu-open .wp-block-navigation-item.is-open-mobile > .wp-block-navigation-item__content::after {
	transform: translateY(-35%) rotate(225deg);
}

/* --- Overlay presentation polish (2026-06-29) ------------------------ */

/* Panel padding + a calm close button. */
.is-header .is-menu-open .wp-block-navigation__responsive-container-content {
	padding: 10px 22px 24px;
}
.is-header .is-menu-open .wp-block-navigation__responsive-container-close {
	color: var(--is-brand-ink);
	padding: 10px;
}

/* Top-level rows: comfortable 44px tap targets + hairline dividers. */
.is-header .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item {
	border-bottom: 1px solid #eef1f6;
	padding: 3px 0;
}
.is-header .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item:last-child { border-bottom: 0; }
.is-header .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item > .wp-block-navigation-item__content,
.is-header .is-menu-open .wp-block-navigation__container > .wp-block-navigation-item > a {
	min-height: 44px;
	display: flex;
	align-items: center;
	font-size: 1.02rem;
}
/* Sub items: slightly smaller, still comfortably tappable. */
.is-header .is-menu-open .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
	min-height: 40px;
	display: flex;
	align-items: center;
	font-size: 0.95rem;
}

/* The two long lists (Get Help 23, Modalities 12) open as a 2-column grid in
   the overlay — half the scroll; labels are short. Placed AFTER the base
   .is-open-mobile display rule so it wins the cascade. */
.is-header .is-menu-open .is-mega.is-open-mobile > .wp-block-navigation__submenu-container {
	display: grid !important;
	grid-template-columns: 1fr 1fr !important;
	gap: 0 12px;
}
.is-header .is-menu-open .is-mega.is-open-mobile > .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
	font-size: 0.92rem;
	line-height: 1.3;
}
/* The "View all …" hub row spans both columns at the top of the grid. */
.is-header .is-menu-open .is-mega.is-open-mobile > .wp-block-navigation__submenu-container > .is-moblink { grid-column: 1 / -1; }

/* "View all …" hub links: only visible in the overlay, styled as the section's
   lead action in brand blue. (Base display:none lives with the desktop rules.) */
.is-header .is-menu-open .wp-block-navigation-item.is-moblink { display: block; }
.is-header .is-menu-open .is-moblink .wp-block-navigation-item__content,
.is-header .is-menu-open .is-moblink a {
	color: var(--is-brand) !important;
	font-weight: 700;
}
.is-header .is-menu-open .is-moblink a .wp-block-navigation-item__label::after { content: " \2192"; }

/* CTA bar inside the open overlay (injected by reveal.js): the header CTAs are
   covered while the menu is open, so Book / Find My Match / phone live here too.
   Sticky to the panel bottom on long lists. */
.is-ovcta { display: none; }
.is-header .is-menu-open .is-ovcta {
	display: block;
	position: sticky;
	bottom: 0;
	width: 100%;
	margin-top: 18px;
	padding: 14px 0 6px;
	background: #fff;
	border-top: 1px solid #eef1f6;
}
.is-ovcta .is-ovtel {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin: 0 0 12px;
	color: var(--is-brand);
	font-weight: 700;
	font-size: 0.95rem;
	text-decoration: none;
}
.is-ovcta .is-ovrow { display: flex; gap: 10px; }
.is-ovcta a.is-ovbtn {
	flex: 1 1 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 46px;
	padding: 10px 8px;
	border-radius: 999px;
	font-weight: 700;
	font-size: 0.92rem;
	text-align: center;
	text-decoration: none;
}
.is-ovcta a.is-ovbtn.is-ovbook  { background: #FF6F61; color: #fff; }
.is-ovcta a.is-ovbtn.is-ovmatch { background: #fff; color: #4E2A7D; border: 2px solid #4E2A7D; }

/* ---------------------------------------------------------------------
   FOOTER (dark)
   ------------------------------------------------------------------- */
.is-footer { font-size: 0.95rem; }
.is-footer .wp-block-site-title a { color: #fff; text-decoration: none; }
.is-footer h2, .is-footer h3 { color: #fff; }
.is-footer a { color: #cfe0f7; text-decoration: none; }
.is-footer a:hover { color: #fff; text-decoration: underline; }

.is-footer-list { list-style: none; margin: 0; padding: 0; }
.is-footer-list li { margin: 0 0 9px; line-height: 1.4; }

.is-footer-rule { border: 0; border-top: 1px solid rgba(255, 255, 255, 0.16); }
.is-footer-bottom { font-size: 0.85rem; opacity: 0.92; }

/* ---------------------------------------------------------------------
   BLOG / ARTICLE READABILITY (non-scoped pages)
   ------------------------------------------------------------------- */
/* Article spacing belongs to posts only. Scoped PAGES manage their own section
   spacing, and this margin was painting 17px white strips above/between their
   full-bleed top-level sections (Mo flagged the header gap on /vaughan-psychotherapy/). */
.wp-block-post-content > * { margin-block: 1.1em 0; }
.page .wp-block-post-content > style,
.page .wp-block-post-content > script,
.page .wp-block-post-content > div,
.page .wp-block-post-content > section { margin-block: 0; }
.wp-block-post-title { color: var(--is-brand-ink); }
.wp-block-post-date { color: #666666; }

/* Blog index (posts archive) — featured-image card grid. */
.is-blogindex .blogindex-eyebrow {
	font-weight: 700;
	font-size: 12.5px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--is-brand);
	margin: 0 0 10px;
}
.is-blogindex .blogindex-head h1 { color: var(--is-brand-ink); margin: 0 0 12px; }
.is-blogindex .blogindex-head p { color: #666666; font-size: 1.05rem; line-height: 1.6; }
.is-blogindex .blog-card {
	background: #fff;
	border: 1px solid var(--is-line);
	border-radius: 16px;
	overflow: hidden;
	box-shadow: 0 2px 14px rgba(78, 42, 125, 0.06);
	transition: transform 0.2s, box-shadow 0.2s;
	height: 100%;
}
.is-blogindex .blog-card:hover {
	transform: translateY(-3px);
	box-shadow: 0 12px 28px rgba(78, 42, 125, 0.12);
}
.is-blogindex .blog-card-thumb { margin: 0; }
.is-blogindex .blog-card-thumb a,
.is-blogindex .blog-card-thumb img { display: block; width: 100%; }
.is-blogindex .blog-card-thumb img { aspect-ratio: 16 / 9; object-fit: cover; }
.is-blogindex .blog-card-date { color: #666666; font-size: 0.82rem; margin: 0 0 6px; }
.is-blogindex .blog-card-title { margin: 0 0 9px; font-size: 1.1rem; line-height: 1.35; }
.is-blogindex .blog-card-title a { color: var(--is-brand-ink); text-decoration: none; }
.is-blogindex .blog-card-title a:hover { color: var(--is-brand); }
.is-blogindex .blog-card-body p { color: #666666; font-size: 0.92rem; line-height: 1.55; margin: 0; }
.is-blogindex .blog-card-body .wp-block-post-excerpt__more-text {
	display: inline-block;
	margin-top: 10px;
	font-weight: 600;
	color: var(--is-brand);
	text-decoration: none;
}
.is-blogindex .wp-block-query-pagination { margin-top: 44px; gap: 12px; }
.is-blogindex .wp-block-query-pagination a { color: var(--is-brand-ink); }
.is-blogindex .wp-block-query-pagination a:hover { color: var(--is-brand); }
.is-blogindex .wp-block-query-pagination .current { font-weight: 700; color: var(--is-brand); }

/* Outline button style (used on 404 etc.). */
.wp-block-button.is-style-outline .wp-block-button__link {
	color: var(--is-purple);
	border-color: var(--is-purple);
	background: transparent;
}
.wp-block-button.is-style-outline .wp-block-button__link:hover {
	background: var(--is-mist);
}

/* ---------------------------------------------------------------------
   SCROLL-REVEAL ENTRANCE FADE REMOVED (Mo, 2026-06-28): a fade that makes
   content wait to appear is the opposite of subtle. Content now shows
   immediately; the intended "small nudge" motion lives in the hover lifts on
   cards and buttons. .is-reveal is kept inert in case any markup/cache still
   carries the class.
   ------------------------------------------------------------------- */
.is-reveal,
.is-reveal.is-in { opacity: 1 !important; transform: none !important; }

/* Also disable the per-page hero fade-up (applied inline as animation:{prefix}FadeUp
   on hero blocks across condition/modality/service pages) so the hero shows
   immediately too. Hover lifts and the slow float animations are untouched. */
[style*="FadeUp"] { animation: none !important; opacity: 1 !important; }

/* ---------------------------------------------------------------------
   SITE-WIDE CTA COLOUR SCHEME (by function — consistent on every page)
     Book / booking (JaneApp)   → coral
     Phone (tel:)               → blue
     Find My Match (intake/popup) → purple
   Keyed by each button's destination so the scheme holds across all the
   differently-prefixed page button classes without per-page edits. The
   :not(#_) chain lifts specificity above page-scoped (#id ... !important)
   button rules. Only book/phone/match buttons are touched; secondary
   buttons (View profile, Browse, group links) keep their own styling.
   ------------------------------------------------------------------- */

/* Book / booking → coral */
a[class*="btn"][href*="janeapp"]:not(#_):not(#__),
.wp-element-button[href*="janeapp"]:not(#_):not(#__) {
	background-color: #ff6f61 !important;
	border-color: #ff6f61 !important;
	color: #fff !important;
}
a[class*="btn"][href*="janeapp"]:not(#_):not(#__):hover,
.wp-element-button[href*="janeapp"]:not(#_):not(#__):hover {
	background-color: #e8604f !important;
	border-color: #e8604f !important;
	color: #fff !important;
}

/* Phone → blue */
a[class*="btn"][href^="tel:"]:not(#_):not(#__),
.wp-element-button[href^="tel:"]:not(#_):not(#__) {
	background-color: #4370b7 !important;
	border-color: #4370b7 !important;
	color: #fff !important;
	box-shadow: 0 10px 24px rgba(67, 112, 183, 0.22) !important;
}
a[class*="btn"][href^="tel:"]:not(#_):not(#__):hover,
.wp-element-button[href^="tel:"]:not(#_):not(#__):hover {
	background-color: #33599a !important;
	border-color: #33599a !important;
	color: #fff !important;
	box-shadow: 0 10px 24px rgba(67, 112, 183, 0.22) !important;
}
/* Header phone is a text + icon link, not a filled pill → blue. The :not(#_)
   lift beats a plugin rule that forces descendant text colour inside the
   white-background header group. */
.is-phone:not(#_):not(#__),
.is-phone:not(#_):not(#__):hover { color: #4370b7 !important; }

/* Find My Match → purple */
a[class*="btn"][href*="/therapy-intake-form/"]:not(#_):not(#__),
.wp-element-button[href*="/therapy-intake-form/"]:not(#_):not(#__),
a[class*="btn"][onclick*="open-intake-form"]:not(#_):not(#__) {
	background-color: #4e2a7d !important;
	border-color: #4e2a7d !important;
	color: #fff !important;
	box-shadow: 0 10px 24px rgba(78, 42, 125, 0.22) !important;
}
a[class*="btn"][href*="/therapy-intake-form/"]:not(#_):not(#__):hover,
.wp-element-button[href*="/therapy-intake-form/"]:not(#_):not(#__):hover,
a[class*="btn"][onclick*="open-intake-form"]:not(#_):not(#__):hover {
	background-color: #3c2161 !important;
	border-color: #3c2161 !important;
	color: #fff !important;
	box-shadow: 0 10px 24px rgba(78, 42, 125, 0.22) !important;
}

/* ---- is-bare-page-layout v1 ----------------------------------------------
   Utility pages whose post_content is plain Gutenberg with no wrapper of its
   own. page-no-title is intentionally unconstrained for the designed pages,
   so these need their own measure and type scale. Scoped by ID on purpose:
   a template-wide selector would catch every gold-standard page too.
   19858 terms | 19857 accessibility | 19856 privacy-policy | 10232 thank-you */
body.page-id-19858 .entry-content,
body.page-id-19857 .entry-content,
body.page-id-19856 .entry-content,
body.page-id-10232 .entry-content {
	max-width: 820px;
	margin: 0 auto;
	padding: clamp(40px, 6vw, 72px) clamp(20px, 4vw, 32px) clamp(56px, 7vw, 88px);
	box-sizing: content-box;
}
body.page-id-19858 .entry-content > h1,
body.page-id-19857 .entry-content > h1,
body.page-id-19856 .entry-content > h1,
body.page-id-10232 .entry-content > h1 {
	font: 300 clamp(38px, 5vw, 66px)/1.05 "Open Sans", Arial, sans-serif;
	letter-spacing: -0.02em;
	color: #1F3C6C;
	margin: 0 0 20px;
	text-transform: none !important;
}
body.page-id-19858 .entry-content > h2,
body.page-id-19857 .entry-content > h2,
body.page-id-19856 .entry-content > h2,
body.page-id-10232 .entry-content > h2 {
	font: 300 clamp(30px, 3.4vw, 46px)/1.1 "Open Sans", Arial, sans-serif;
	letter-spacing: -0.015em;
	color: #1F3C6C;
	margin: 40px 0 10px;
	text-transform: none !important;
}
body.page-id-19858 .entry-content > h3,
body.page-id-19857 .entry-content > h3,
body.page-id-19856 .entry-content > h3,
body.page-id-10232 .entry-content > h3 {
	font: 700 1.1rem/1.35 "Open Sans", Arial, sans-serif;
	color: #1F3C6C;
	margin: 28px 0 8px;
	text-transform: none !important;
}
body.page-id-19858 .entry-content p,
body.page-id-19857 .entry-content p,
body.page-id-19856 .entry-content p,
body.page-id-10232 .entry-content p,
body.page-id-19858 .entry-content li,
body.page-id-19857 .entry-content li,
body.page-id-19856 .entry-content li,
body.page-id-10232 .entry-content li {
	font: 400 16.5px/1.7 "Open Sans", Arial, sans-serif;
	color: #333333;
	margin: 0 0 1em;
}
body.page-id-19858 .entry-content a,
body.page-id-19857 .entry-content a,
body.page-id-19856 .entry-content a,
body.page-id-10232 .entry-content a { color: #4370B7; }

/* the posts index H1 was also rendering at body size */
.is-blogindex .blogindex-head h1 {
	font: 300 clamp(38px, 5vw, 66px)/1.05 "Open Sans", Arial, sans-serif;
	letter-spacing: -0.02em;
}
/* default-template pages (e.g. /newsletter/) render the post title as the H1 */
.wp-block-post-title {
	font: 300 clamp(38px, 5vw, 66px)/1.05 "Open Sans", Arial, sans-serif;
	letter-spacing: -0.02em;
	color: #1F3C6C;
	text-transform: none !important;
}
/* ---- end is-bare-page-layout v1 ------------------------------------------ */

/* ---- is-tap-targets v1 ----------------------------------------------------
   Controls measured under 44px tall at 390px. Only namespaced, genuinely
   standalone controls are raised; inline text links are left alone, which is
   the WCAG 2.5.8 exception. Delete this block to revert. */
.oa-chip,
.ops-chip,
.tvw-chip,
.tvw-btn {
	min-height: 44px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}
.it-page .meet {
	min-height: 44px;
	align-items: center;
}
/* ---- end is-tap-targets v1 ------------------------------------------------ */

/* ---- is-article-typography v1 ---------------------------------------------
   Blog posts had no heading hierarchy at all: measured live, H3 and H4 both
   rendered at 16px, identical to the body text around them, so a 2,000 word
   article was unscannable. Two causes, both fixed:

     1. theme.json referenced var(--wp--preset--font-size--h3), but WordPress
        kebab-cases the slug and emits --wp--preset--font-size--h-3. An
        undefined var() makes the WHOLE declaration invalid, so the heading
        inherited body size rather than falling back to a browser default.
        Fixed in theme.json; this block does not depend on it.
     2. There is no h4 element style in theme.json at all, so h4 was body size
        by definition. theme.json element styles apply site-wide, so rather
        than add one there, the article scale lives here, scoped.

   Scoped to headings INSIDE the post body, excluding the one piece of injected
   markup that shares that container: the author box heading (h2.isab-name, the
   therapist's name) must stay 20px. Verified it is the ONLY injected heading.

   This deliberately does NOT key on .wp-block-heading. 26 of the 59 posts predate
   block markup and carry plain <h2> with no class at all, so a .wp-block-heading
   selector left them falling through to the theme.json h2 rule at 42px while
   newer posts rendered 31px - two h2 sizes across one archive.

   Sizes are clamped so the hierarchy survives on a phone. At 390px the body
   is 14px (fluid), and these land at h3 21px / h4 17px; a fixed size, or the
   theme's own h3 preset whose fluid minimum is also 14px, collapses back into
   the body text exactly where most blog reading happens.

   Heading margins are deliberately NOT set: WordPress's defaults are em-based,
   so they scaled with the new sizes on their own (measured h3 27.5px,
   h4 19.8px at 1440). Delete this block to revert. */
.wp-block-post-content h2:not(.isab-name) {
	font-size: clamp(26px, 3vw, 31px);
	line-height: 1.25;
}
.wp-block-post-content h3 {
	font-size: clamp(21px, 2.4vw, 25px);
	line-height: 1.3;
}
.wp-block-post-content h4 {
	font-size: clamp(17px, 1.9vw, 18px);
	line-height: 1.35;
}
/* ---- end is-article-typography v1 ----------------------------------------- */

/* ---- is-recaptcha-badge v1 ------------------------------------------------
   Hide reCAPTCHA v3's floating badge (Mo, 2026-09-20).

   CF7 loads reCAPTCHA v3 SITE-WIDE, not just where a form is, so the badge
   otherwise sits over the bottom-right corner of all 172 pages. Production does
   the same today, so this is a change to both once the push lands.

   visibility:hidden, NOT display:none. Same visual result, and it leaves the
   element in the layout so Google's script can keep sizing and positioning the
   challenge iframe it owns. display:none has a history of interfering with that
   on the rare pages where v3 escalates to a visible challenge; there is nothing
   to gain by taking the risk.

   GOOGLE'S TERMS REQUIRE THE ATTRIBUTION TEXT WHEN THE BADGE IS HIDDEN, and it
   is not optional: the badge IS the disclosure, so removing it without replacing
   it breaks the reCAPTCHA terms. The line lives in the contact form itself
   (.ct-recaptcha-note), which is the only place on the site a visitor submits
   anything. Do not delete one without the other. */
.grecaptcha-badge {
	visibility: hidden;
}
/* ---- end is-recaptcha-badge v1 -------------------------------------------- */
