/* ==========================================================================
   EDGEucating 2026 Redesign — global tokens, header/nav, footer, utilities
   ========================================================================== */

/*
 * Off-screen fixed elements (the mobile nav panel) and unstyled third-party
 * embeds (the Zoho signup form) can otherwise expand the document's
 * scrollable width past the viewport, producing a horizontal scrollbar.
 */
html,
body {
	overflow-x: hidden;
	max-width: 100%;
}

:root {
	/* Brand palette */
	--edge-blue: #04316c;
	--edge-red: #650318;
	--edge-red-dark: #4f0212;
	--edge-yellow: #f3cc57;
	--edge-azure: #046bd2;
	--edge-azure-mid: #497fc8;
	--edge-grey-bg: #f9fafb;
	--edge-grey-chip: #f9fafb;
	--edge-silver: #bdbdbd;
	--edge-white: #ffffff;
	--edge-black: #0a0a0a;
	--edge-gradient: linear-gradient(135deg, var(--edge-red) 34%, var(--edge-azure-mid) 100%);

	/* Type */
	--edge-font-heading: "Work Sans", "Helvetica Neue", Arial, sans-serif;
	--edge-font-body: "Poppins", "Helvetica Neue", Arial, sans-serif;
	--edge-font-accent: "Inter", "Helvetica Neue", Arial, sans-serif;

	/*
	 * Layout — one shared width system for every section site-wide (header,
	 * footer, hero, and every block). --edge-frame is the outer full-bleed
	 * cap that sections center themselves against on wide viewports;
	 * --edge-gutter is the responsive inset from that frame's edges, which
	 * resolves to exactly 1280px of inner content width at ~1440px+
	 * viewports (1440 - 2*80). Elements that want extra breathing room
	 * around their text (the hero heading, the Intro rows' left-indented
	 * copy) add MORE padding on top of this shared frame rather than
	 * defining their own independent max-width — see .edge-intro-row.
	 */
	--edge-frame: 1440px;
	--edge-container: 1280px;
	--edge-gutter: clamp(20px, 5.6vw, 80px);
	--edge-header-height: 92px;

	/* Stacking */
	--z-header: 100;
	--z-dropdown: 110;
	--z-mobile-overlay: 120;
	--z-mobile-panel: 130;
}

/* --------------------------------------------------------------------------
   Neutralize Astra's auto block-width constraint
   -------------------------------------------------------------------------- */

/*
 * Setting a page to Astra's "Full Width" container layout (which we do on
 * every block-built page, to escape the narrow .ast-container) also turns on
 * a SEPARATE Astra behavior: every direct child of a top-level block gets
 * auto-constrained to `max-width: var(--wp--custom--ast-content-width-size)`
 * (1200px) via a high-specificity selector
 * (`.entry-content[data-ast-blocks-layout] > :not(.wp-block-group) > *`).
 * That silently shrank/repositioned content inside edge/* blocks and core
 * columns/image blocks alike. Redefining the variable here (inherited by
 * every descendant) neutralizes it for our pages; blocks that want a
 * specific narrower width set their own max-width with !important below.
 */
.ast-page-builder-template .entry-content {
	--wp--custom--ast-content-width-size: none;
}

/*
 * Astra also auto-injects `padding-top`/`padding-bottom:
 * var(--wp--custom--ast-default-block-{top,bottom}-padding)` (48px each)
 * onto every top-level group/cover/columns block
 * (`.entry-content > .wp-block-group` etc.) on Full Width pages. That's
 * what was putting a huge gap between an .edge-intro-row eyebrow+heading
 * and the columns row right below it (both are separate top-level groups)
 * — every edge/* block already manages its own precise spacing via its
 * own CSS, so this generic theme default only ever fights our designs.
 * (The 30px .edge-intro-row pairing rule below was originally added
 * alongside only the bottom-padding neutralization, so it was stacking
 * with this 48px top padding to produce a 78px gap instead of 30px —
 * both variables need zeroing together.) Neutralized the same way as the
 * width constraint above; any gap that turns out to actually need space
 * gets an explicit, deliberate rule instead (e.g.
 * `.edge-media-row + .edge-media-row`).
 */
.ast-page-builder-template .entry-content {
	--wp--custom--ast-default-block-bottom-padding: 0;
	--wp--custom--ast-default-block-top-padding: 0;
}

/* Astra's base inline CSS (astra-theme-css-inline-css) sets
   `#primary, #secondary { padding: 1.5em 0; }` unconditionally, adding an
   unwanted gap above our hero block on every full-width page. Our blocks
   manage their own spacing, so this should always be zero. */
#primary,
#secondary {
	padding: 0 !important;
	margin: 0 !important;
}

/*
 * ROOT CAUSE of "footer renders at the top of the page, overlapping
 * content": Astra's own style-flex.min.css floats #primary
 * (`#primary, #secondary { float: left; width: 100%; }`) — a legacy
 * float-based two-column (content + sidebar) layout technique. Astra's
 * *own* header.php/footer.php open/close a wrapper div that contains and
 * clears that float; our custom header.php/footer.php don't render that
 * wrapper, so the float goes uncleared and #primary contributes ZERO
 * height to the following sibling's (our <footer>) normal-flow position —
 * footer ends up positioned right after the header instead of after all
 * the page content. We never use Astra's sidebar layouts, so the float
 * serves no purpose here: removing it outright (rather than just clearing
 * after it) fixes this at the source.
 */
#primary,
#secondary {
	float: none !important;
}

/* --------------------------------------------------------------------------
   Base + utilities
   -------------------------------------------------------------------------- */

.edge-container {
	max-width: var(--edge-container) !important;
	margin-inline: auto;
	padding-inline: var(--edge-gutter);
}

/*
 * Figma's "Intro" section pattern (bio row, Why Schools Choose, the
 * paired intro+callout/pills rows on services pages) uses ASYMMETRIC
 * padding — 150px left / 80px right at desktop — not a centered
 * max-width container. Every block in one of these sections (a heading
 * row plus the columns row below it) must share this exact class so
 * their left edges line up; clamp() scales it down on narrower screens.
 * It still caps at --edge-frame and centers like every other section —
 * without that, on viewports wider than 1440px this row would keep
 * growing edge-to-edge while .edge-gutter sections stayed capped,
 * visibly misaligning the page's content width.
 */
.edge-intro-row {
	width: 100%;
	max-width: var(--edge-frame) !important;
	margin-inline: auto !important;
	box-sizing: border-box;
	padding-left: clamp(24px, 10.5vw, 150px) !important;
	padding-right: var(--edge-gutter) !important;
}

/*
 * Figma (node 25:81): an eyebrow+heading .edge-intro-row keeps its own
 * top padding (spacing from whatever section precedes it) but none of
 * Astra's bottom padding, and the paired columns .edge-intro-row right
 * after it sits flush against it — no top padding, no top margin. Both
 * are separate top-level blocks, so a naive adjacent-sibling rule would
 * also catch unrelated back-to-back intro-rows elsewhere — scope it to
 * the actual heading+columns pairing instead.
 */
.edge-intro-row:has(> .edge-intro-statement) {
	padding-top: 48px;
}

.edge-intro-row:has(> .edge-intro-statement) + .edge-intro-row {
	margin-top: 0;
	padding-top: 0;
}

.edge-gutter {
	padding-inline: var(--edge-gutter);
	max-width: var(--edge-frame) !important;
	margin-inline: auto;
}

.edge-breakout {
	width: 100vw !important;
	max-width: 100vw !important;
	position: relative;
	left: 50% !important;
	right: 50% !important;
	margin-left: -50vw !important;
	margin-right: -50vw !important;
}

.edge-eyebrow {
	font-family: var(--edge-font-heading);
	font-weight: 700;
	font-size: 15px;
	color: var(--edge-blue) !important;
	text-transform: none;
	margin: 0 0 8px;
}

.edge-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	font-family: var(--edge-font-heading);
	font-weight: 700;
	font-size: 16px;
	line-height: 1.2;
	padding: 14px 28px;
	border-radius: 4px;
	border: 2px solid var(--edge-yellow);
	text-decoration: none !important;
	cursor: pointer;
	transition: transform 0.15s ease, box-shadow 0.15s ease, background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}

.edge-btn:hover,
.edge-btn:focus-visible {
	transform: translateY(-1px);
	box-shadow: 0 6px 16px rgba(0, 0, 0, 0.18);
}

.edge-btn--solid {
	background: var(--edge-yellow);
	color: var(--edge-blue) !important;
}

.edge-btn--solid:hover,
.edge-btn--solid:focus-visible {
	background: var(--edge-blue);
	border-color: var(--edge-blue);
	color: var(--edge-white) !important;
}

.edge-btn--outline {
	background: transparent;
	color: var(--edge-white) !important;
}

.edge-btn--outline:hover,
.edge-btn--outline:focus-visible {
	background: var(--edge-yellow);
	color: var(--edge-blue) !important;
}

.edge-btn--small {
	padding: 10px 20px;
	font-size: 14px;
	border-width: 1px;
	border-radius: 3px;
}

.edge-link-arrow {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	font-family: var(--edge-font-heading);
	font-weight: 600;
	font-size: 14px;
	color: var(--edge-azure) !important;
	text-decoration: none !important;
	transition: color 0.15s ease;
}

.edge-link-arrow svg {
	width: 12px;
	height: 12px;
	flex-shrink: 0;
	transition: transform 0.15s ease;
}

.edge-link-arrow:hover,
.edge-link-arrow:focus-visible {
	color: var(--edge-red) !important;
}

.edge-link-arrow:hover svg,
.edge-link-arrow:focus-visible svg {
	transform: translateX(3px);
}

/* --------------------------------------------------------------------------
   Header / primary nav
   -------------------------------------------------------------------------- */

.edge-header {
	position: sticky;
	top: 0;
	z-index: var(--z-header);
	background: var(--edge-blue);
	transition: background-color 0.25s ease, box-shadow 0.25s ease;
}

.edge-header--overlay {
	position: absolute;
	left: 0;
	right: 0;
	background: transparent;
}

.edge-header--overlay.is-scrolled {
	position: fixed;
	background: var(--edge-blue);
	box-shadow: 0 2px 14px rgba(0, 0, 0, 0.2);
}

.edge-header__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 24px;
	padding-block: 18px;
}

.edge-header__brand img {
	display: block;
	height: 40px;
	width: auto;
}

.edge-header__right {
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	gap: 16px;
}

.edge-social-list {
	list-style: none;
	display: flex;
	gap: 18px;
	margin: 0;
	padding: 0;
}

.edge-social-list a {
	display: flex;
	color: var(--edge-white) !important;
	opacity: 0.9;
}

.edge-social-list a:hover {
	opacity: 1;
}

.edge-social-list svg {
	width: 18px;
	height: 18px;
}

.edge-nav {
	position: relative;
}

.edge-nav-menu {
	list-style: none;
	display: flex;
	align-items: center;
	gap: 8px;
	margin: 0;
	padding: 0;
}

.edge-nav-menu > .menu-item {
	position: relative;
}

.edge-nav-menu > .menu-item > a {
	display: block;
	padding: 10px 16px;
	font-family: var(--edge-font-heading);
	font-weight: 700;
	font-size: 17px;
	color: var(--edge-white) !important;
	text-decoration: none !important;
	border-bottom: 3px solid transparent;
	transition: border-color 0.15s ease, opacity 0.15s ease;
}

.edge-nav-menu > .menu-item:hover > a,
.edge-nav-menu > .menu-item.current-menu-item > a,
.edge-nav-menu > .menu-item.edge-nav-open > a {
	border-color: var(--edge-yellow);
}

.edge-nav-menu > .menu-item--button > a {
	border: 1px solid var(--edge-yellow);
	border-radius: 4px;
	padding: 10px 18px;
}

.edge-nav-menu > .menu-item--button > a:hover {
	background: var(--edge-yellow);
	color: var(--edge-blue) !important;
}

/* Mega dropdown (Services) */

/*
 * Invisible hover "bridge" filling the 14px gap between the Services nav
 * link and the mega panel below it. Without this, moving the mouse
 * straight down from the link to the panel crosses a dead zone that's
 * inside neither element's box, so :hover breaks and the panel closes
 * before the cursor ever reaches it. This pseudo-element is always
 * present (not conditional on hover) so it's there the instant the
 * cursor leaves the link, restoring a continuous hoverable path from the
 * link into the panel. It's positioned/sized to match the panel exactly
 * but stays fully transparent — nothing is visibly added to the page.
 */
.menu-item-services::before {
	content: "";
	position: absolute;
	top: 100%;
	left: 50%;
	transform: translateX(-50%);
	width: min(1100px, 90vw);
	height: 14px;
	z-index: var(--z-dropdown);
}

.edge-mega-panel {
	position: absolute;
	top: calc(100% + 14px);
	left: 50%;
	transform: translateX(-50%);
	width: min(1100px, 90vw);
	background: rgba(255, 255, 255, 0.98);
	border-radius: 6px;
	box-shadow: 0 18px 40px rgba(4, 49, 108, 0.28);
	padding: 40px 48px;
	z-index: var(--z-dropdown);
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
	transform: translateX(-50%) translateY(6px);
	transition: opacity 0.18s ease, transform 0.18s ease, visibility 0.18s;
}

.menu-item-services:hover .edge-mega-panel,
.menu-item-services:focus-within .edge-mega-panel,
.menu-item-services.edge-nav-open .edge-mega-panel {
	opacity: 1;
	visibility: visible;
	pointer-events: auto;
	transform: translateX(-50%) translateY(0);
}

.edge-mega-panel__grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 40px;
}

.edge-mega-panel__col {
	display: flex;
	flex-direction: column;
	gap: 12px;
	border-left: 1px solid #e5e7eb;
	padding-left: 40px;
}

.edge-mega-panel__col:first-child {
	border-left: none;
	padding-left: 0;
}

.edge-mega-panel__col h3 {
	font-family: var(--edge-font-heading);
	font-weight: 700;
	font-size: 18px;
	color: var(--edge-blue) !important;
	margin: 0;
}

.edge-mega-panel__col p {
	font-family: var(--edge-font-body);
	font-size: 15px;
	line-height: 1.6;
	color: #262626 !important;
	margin: 0;
}

/* Simple dropdown (Resources) — WP's native .sub-menu, styled as a small
   left-aligned panel rather than the full-width Services mega panel. Same
   hover-bridge trick as .menu-item-services::before, scaled to this
   dropdown's own (much smaller) width. */
.menu-item-resources::before {
	content: "";
	position: absolute;
	top: 100%;
	left: 0;
	width: 100%;
	min-width: 240px;
	height: 14px;
	z-index: var(--z-dropdown);
}

.menu-item-resources .sub-menu {
	list-style: none;
	position: absolute;
	top: calc(100% + 14px);
	left: 0;
	min-width: 240px;
	background: rgba(255, 255, 255, 0.98);
	border-radius: 6px;
	box-shadow: 0 18px 40px rgba(4, 49, 108, 0.28);
	padding: 12px;
	margin: 0;
	z-index: var(--z-dropdown);
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
	transform: translateY(6px);
	transition: opacity 0.18s ease, transform 0.18s ease, visibility 0.18s;
}

.menu-item-resources:hover .sub-menu,
.menu-item-resources:focus-within .sub-menu,
.menu-item-resources.edge-nav-open .sub-menu {
	opacity: 1;
	visibility: visible;
	pointer-events: auto;
	transform: translateY(0);
}

.menu-item-resources .sub-menu a {
	display: block;
	padding: 10px 14px;
	border-radius: 4px;
	font-family: var(--edge-font-heading);
	font-weight: 700;
	font-size: 15px;
	color: var(--edge-blue) !important;
	white-space: nowrap;
	transition: color 0.15s ease, background-color 0.15s ease;
}

.menu-item-resources .sub-menu a:hover {
	background: var(--edge-grey-bg);
	color: var(--edge-red) !important;
}

/* Mobile nav toggle + panel */
.edge-nav-toggle {
	display: none;
	flex-direction: column;
	justify-content: center;
	gap: 5px;
	width: 34px;
	height: 30px;
	background: none;
	border: none;
	cursor: pointer;
	padding: 0;
}

.edge-nav-toggle span {
	display: block;
	height: 2px;
	background: var(--edge-white);
	border-radius: 1px;
	transition: transform 0.2s ease, opacity 0.2s ease;
}

.edge-nav-toggle[aria-expanded="true"] span:nth-child(1) {
	transform: translateY(7px) rotate(45deg);
}

.edge-nav-toggle[aria-expanded="true"] span:nth-child(2) {
	opacity: 0;
}

.edge-nav-toggle[aria-expanded="true"] span:nth-child(3) {
	transform: translateY(-7px) rotate(-45deg);
}

.edge-mobile-overlay {
	position: fixed;
	inset: 0;
	background: rgba(0, 0, 0, 0.45);
	z-index: var(--z-mobile-overlay);
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
	transition: opacity 0.2s ease, visibility 0.2s;
}

.edge-mobile-overlay.is-active {
	opacity: 1;
	visibility: visible;
	pointer-events: auto;
}

.edge-mobile-panel {
	position: fixed;
	top: 0;
	right: 0;
	bottom: 0;
	width: min(360px, 86vw);
	background: var(--edge-blue);
	z-index: var(--z-mobile-panel);
	padding: 24px;
	overflow-y: auto;
	transform: translateX(100%);
	transition: transform 0.25s ease;
}

.edge-mobile-panel.is-active {
	transform: translateX(0);
}

.edge-mobile-panel__close {
	background: none;
	border: none;
	color: var(--edge-white) !important;
	font-size: 28px;
	line-height: 1;
	cursor: pointer;
	margin-bottom: 16px;
	padding: 4px;
}

.edge-mobile-menu {
	list-style: none;
	margin: 0;
	padding: 0;
}

.edge-mobile-menu > li {
	border-bottom: 1px solid rgba(255, 255, 255, 0.15);
}

.edge-mobile-menu > li > a {
	display: block;
	padding: 16px 4px;
	font-family: var(--edge-font-heading);
	font-weight: 700;
	font-size: 18px;
	color: var(--edge-white) !important;
	text-decoration: none !important;
}

.edge-mobile-submenu-toggle {
	width: 100%;
	display: flex;
	align-items: center;
	justify-content: space-between;
	background: none;
	border: none;
	padding: 16px 4px;
	font-family: var(--edge-font-heading);
	font-weight: 700;
	font-size: 18px;
	color: var(--edge-white) !important;
	cursor: pointer;
}

.edge-mobile-submenu-toggle svg {
	width: 14px;
	height: 14px;
	transition: transform 0.2s ease;
}

.edge-mobile-submenu-toggle[aria-expanded="true"] svg {
	transform: rotate(180deg);
}

.edge-mobile-submenu {
	list-style: none;
	margin: 0 0 12px;
	padding: 0 0 0 12px;
	display: none;
	flex-direction: column;
	gap: 4px;
}

.edge-mobile-submenu.is-open {
	display: flex;
}

.edge-mobile-submenu a {
	display: block;
	padding: 10px 4px;
	font-family: var(--edge-font-body);
	font-size: 15px;
	color: rgba(255, 255, 255, 0.9) !important;
	text-decoration: none !important;
}

.edge-mobile-social {
	display: flex;
	gap: 18px;
	margin-top: 24px;
}

@media (max-width: 1024px) {
	.edge-header__right {
		display: none;
	}

	.edge-nav-toggle {
		display: flex;
	}
}

/* --------------------------------------------------------------------------
   Footer
   -------------------------------------------------------------------------- */

.edge-footer {
	background: var(--edge-red);
	color: rgba(255, 255, 255, 0.88) !important;
}

.edge-footer__main {
	padding-block: 70px;
}

.edge-footer__grid {
	display: grid;
	grid-template-columns: minmax(280px, 380px) 1fr;
	gap: 80px;
}

.edge-footer__brand-col img {
	height: 40px;
	width: auto;
	display: block;
	margin-bottom: 28px;
}

.edge-footer__brand p {
	font-family: var(--edge-font-body);
	font-weight: 300;
	font-size: 14px;
	line-height: 1.8;
	color: rgba(255, 255, 255, 0.88) !important;
	margin: 0 0 24px;
}

.edge-footer__address {
	font-family: var(--edge-font-body);
	font-weight: 700;
	font-size: 14px;
	line-height: 1.8;
	color: rgba(255, 255, 255, 0.88) !important;
	margin: 0 0 24px;
}

.edge-footer__social {
	list-style: none;
	display: flex;
	gap: 22px;
	margin: 24px 0 0;
	padding: 0;
}

.edge-footer__social a {
	color: var(--edge-white) !important;
	display: flex;
}

.edge-footer__social svg {
	width: 20px;
	height: 20px;
}

.edge-footer__aside {
	display: flex;
	flex-direction: column;
	gap: 48px;
}

.edge-newsletter h2 {
	font-family: var(--edge-font-heading);
	font-weight: 700;
	font-size: 24px;
	color: var(--edge-white) !important;
	margin: 0 0 14px;
}

.edge-newsletter p {
	font-family: var(--edge-font-body);
	font-size: 14px;
	line-height: 1.7;
	color: var(--edge-white) !important;
	margin: 0 0 18px;
	max-width: 520px;
}

.edge-newsletter-form {
	max-width: 520px;
}

.edge-footer__links {
	display: flex;
	gap: 60px;
	flex-wrap: wrap;
}

.edge-footer__link-col {
	flex: 1 1 180px;
}

.edge-footer__link-col h3 {
	font-family: var(--edge-font-heading);
	font-weight: 500;
	font-size: 18px;
	color: var(--edge-white) !important;
	margin: 0 0 10px;
	padding-bottom: 10px;
	border-bottom: 1px solid var(--edge-red-dark);
}

.edge-footer__link-col ul {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.edge-footer__link-col a {
	font-family: var(--edge-font-body);
	font-weight: 300;
	font-size: 14px;
	color: var(--edge-grey-bg) !important;
	text-decoration: none !important;
}

.edge-footer__link-col a:hover {
	text-decoration: underline;
}

.edge-footer__bottom {
	background: var(--edge-red-dark);
	padding-block: 18px;
}

.edge-footer__bottom-inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 8px;
	font-family: var(--edge-font-body);
	font-size: 12px;
	color: var(--edge-white) !important;
}

.edge-footer__bottom-inner a {
	color: var(--edge-white) !important;
	text-decoration: none !important;
}

.edge-footer__legal {
	display: flex;
	align-items: center;
	gap: 12px;
}

@media (max-width: 900px) {
	.edge-footer__grid {
		grid-template-columns: 1fr;
		gap: 48px;
	}

	.edge-footer__links {
		gap: 32px;
	}
}

/* --------------------------------------------------------------------------
   Core-block composition helpers (used when the population script pairs an
   edge/* block with a core/columns, core/image or core/list block)
   -------------------------------------------------------------------------- */

.alignfull {
	width: 100vw;
	max-width: 100vw;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
}

/* An image butting up against a full-bleed section (or ending its
   container) shouldn't leave a white strip below it. The .entry-content
   variants outweigh Astra's `.entry-content[data-ast-blocks-layout] > figure`
   margin-bottom: 1em. */
.wp-block-image:has(+ section),
.wp-block-image:last-child,
.entry-content[data-ast-blocks-layout] > figure.wp-block-image:has(+ section),
.entry-content[data-ast-blocks-layout] > figure.wp-block-image:last-child {
	margin-bottom: 0;
}

.wp-block-image:has(+ section) img,
.wp-block-image:last-child img {
	display: block;
}

.edge-circle-image {
	display: flex;
	justify-content: center;
}

.edge-circle-image img {
	border-radius: 50%;
	aspect-ratio: 1;
	object-fit: cover;
	display: block;
	width: 100%;
	max-width: 288px;
	height: auto;
}

.edge-callout-box {
	background: var(--edge-grey-bg);
	padding: 24px;
}

.edge-callout-box p:first-child {
	font-family: var(--edge-font-body);
	font-size: 16px;
	line-height: 1.8;
	color: #1a1a1a !important;
	margin: 0 0 10px;
}

.edge-callout-list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.edge-callout-list li {
	position: relative;
	padding-left: 20px;
	font-family: var(--edge-font-heading);
	font-weight: 600;
	font-size: 18px;
	color: var(--edge-blue) !important;
	line-height: 1.3;
}

.edge-callout-list li::before {
	content: "\2022";
	position: absolute;
	left: 0;
	color: var(--edge-yellow) !important;
	font-weight: 700;
}

/* Callout box with several headed lists (About: "How my experience shapes
   my work"). Headings carry the emphasis, so the list items drop to body
   weight underneath them. */
.edge-callout-heading {
	font-family: var(--edge-font-heading);
	font-weight: 700;
	font-size: 18px;
	text-wrap: balance;
	line-height: 1.3;
	color: var(--edge-red) !important;
	margin: 24px 0 10px !important;
}

.edge-callout-heading:first-child {
	margin-top: 0 !important;
}

.edge-credentials-box .edge-callout-list li {
	font-family: var(--edge-font-body);
	font-weight: 400;
	font-size: 16px;
	line-height: 1.7;
	color: #1a1a1a !important;
}

.edge-rounded-image {
	margin: 0 !important;
}

.edge-rounded-image img {
	display: block;
	width: 100%;
	height: auto;
	border-radius: 12px;
	object-fit: cover;
}

.edge-rounded-image--portrait img {
	aspect-ratio: 4 / 5;
	max-height: 640px;
}

.edge-rounded-image--landscape img {
	aspect-ratio: 3 / 2;
}

/* Fills its column's full height, so a photo beside a taller text column
   matches it instead of floating. */
.edge-rounded-image--fill {
	height: 100%;
}

.edge-rounded-image--fill img {
	height: 100%;
	min-height: 360px;
}

/* --------------------------------------------------------------------------
   Self-contained page sections (About page). Each .edge-section owns its
   own vertical rhythm — padding top and bottom — instead of relying on the
   sibling-adjacency rules the .edge-intro-row pairs above use, so sections
   can be stacked in any order and still breathe evenly. The .entry-content
   prefix outranks `.edge-intro-row:has(...) + .edge-intro-row`.
   -------------------------------------------------------------------------- */

.entry-content .edge-section {
	padding-block: clamp(56px, 7vw, 96px);
	/* Astra pads top-level groups horizontally; the inner .edge-intro-row /
	   .edge-story already provide the page's inset. */
	padding-inline: 0 !important;
	margin-block: 0 !important;
}

/* First section under the hero: the hero's bottom (and its wave) already
   supplies the gap, same as the first row on the service pages. */
.entry-content .edge-section--after-hero {
	padding-top: 0;
}

.entry-content .edge-section--flush-top {
	padding-top: 0;
}

.entry-content .edge-section--flush-bottom {
	padding-bottom: 0;
}

.edge-section--tint {
	background: var(--edge-grey-bg);
}

.edge-section .wp-block-columns {
	gap: clamp(32px, 5vw, 72px);
	margin: 0 !important;
}

.edge-section--center .wp-block-columns {
	align-items: center;
}

.edge-section--tint .edge-callout-box {
	background: var(--edge-white);
}

.edge-btn-row {
	margin: 32px 0 0 !important;
}

/* Long-form story: one centered reading column, larger body type. */
.edge-story {
	max-width: 760px;
	margin-inline: auto;
	padding-inline: var(--edge-gutter);
	box-sizing: content-box;
}

.edge-story__masthead {
	display: flex;
	align-items: center;
	gap: clamp(20px, 3vw, 32px);
	margin-bottom: 32px !important;
}

.edge-story__masthead .edge-intro-statement {
	padding: 0;
}

.edge-story__masthead .edge-intro-statement__heading {
	font-size: clamp(28px, 3.2vw, 36px);
	text-wrap: balance;
	margin: 0 !important;
}

.edge-story__portrait {
	flex: 0 0 auto;
	margin: 0 !important;
}

.edge-story__portrait img {
	display: block;
	width: clamp(96px, 11vw, 136px);
	height: auto;
	aspect-ratio: 1;
	object-fit: cover;
	border-radius: 50%;
	border: 4px solid var(--edge-yellow);
}

.edge-story .edge-intro-statement {
	gap: 0;
	padding: 0;
}

.edge-story .edge-intro-statement__body {
	font-size: 18px;
	line-height: 1.75;
	max-width: none !important;
	margin: 0 0 20px !important;
}

.edge-story .edge-intro-statement strong {
	color: var(--edge-red);
}

.edge-story .edge-callout-box {
	margin: 12px 0 32px !important;
	border-left: 4px solid var(--edge-blue);
}

.edge-story .edge-callout-box p:first-child {
	font-family: var(--edge-font-heading);
	font-weight: 700;
	font-size: 18px;
	color: var(--edge-blue) !important;
}

/* A full-bleed photo used as a pause inside the story. */
.edge-story-break img {
	display: block;
	width: 100%;
	height: clamp(260px, 34vw, 480px);
	object-fit: cover;
}

@media (max-width: 600px) {
	.edge-story__masthead {
		flex-direction: column;
		align-items: flex-start;
	}

	.edge-story .edge-intro-statement__body {
		font-size: 17px;
	}
}

/* --------------------------------------------------------------------------
   Shared block building blocks (section spacing, headings)
   -------------------------------------------------------------------------- */

.edge-section {
	padding-block: clamp(40px, 6vw, 80px);
}

.edge-section-heading {
	font-family: var(--edge-font-heading);
	font-weight: 700;
	font-size: clamp(24px, 3vw, 32px);
	line-height: 1.15;
	color: var(--edge-red) !important;
	margin: 0;
}

.edge-body-text {
	font-family: var(--edge-font-body);
	font-size: 16px;
	line-height: 1.8;
	color: #1a1a1a !important;
}

/*
 * About Us page (Elementor post 22): the "Read FAQs" button
 * (elementor-element-2cdbb6d) is missing the bottom margin its sibling
 * "View Our Services" button (elementor-element-d51fd9c) has, breaking
 * their alignment. Elementor regenerates wp-content/uploads/elementor/css/
 * post-22.css on its own, so a fix there wouldn't survive — matching it
 * here instead. Elementor's own rule for d51fd9c reads
 * `calc(var(--kit-widget-spacing, 0px) + 0px)`, but that custom property is
 * only set on d51fd9c's own per-widget spacing control in the editor — it's
 * empty on 2cdbb6d, so copying that var() literally would still resolve to
 * 0px here. Using the same 20px it evaluates to on d51fd9c directly.
 */
.elementor-22 .elementor-element.elementor-element-2cdbb6d {
	margin: 0px 20px 20px 0px;
}
