/*
Theme Name: ElizabethVenart.com (EVA)
Theme URI: https://elizabethvenart.com
Description: Custom child theme for ElizabethVenart.com — Lavender & Sage design system. Built on Ollie by Johns & Taylor.
Author: Johns & Taylor
Author URI: https://johnsandtaylor.com
Template: ollie
Version: 1.0.1
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, portfolio, one-column, block-patterns, block-styles, custom-logo, custom-menu, editor-style, featured-images, full-site-editing, full-width-template, style-variations, template-editing, wide-blocks
Text Domain: jandt-cwt-eva
*/


/* === Header: Sticky =====================================================
   NOTE: do NOT add `backdrop-filter` (or `filter`, `transform`, `will-change`,
   `contain: paint/layout/strict`) to .eva-header. Per CSS spec, those
   properties make the element a *containing block* for position:fixed
   descendants — which means the open mobile-nav overlay (position:fixed;
   inset:0) gets clipped to the ~80px header bounds instead of filling
   the viewport. We hit that bug on 2026-05-04 and spent half a day
   chasing it through WP/Ollie CSS before isolating the cause.

   If a frosted-glass effect is wanted, apply backdrop-filter to a child
   element or pseudo-element of .eva-header — never the header itself.
   ─────────────────────────────────────────────────────────────────────── */
.eva-header {
    position: sticky;
    top: 0;
    z-index: 100;
}

/* === Desktop: Taller header padding === */
@media (min-width: 782px) {
    .eva-header {
        padding-top: 2rem !important;
        padding-bottom: 2rem !important;
    }

    /* Tagline reads at 1rem on desktop. Inline style on the block sets
       0.75rem for mobile; !important is required to beat the inline rule. */
    .eva-site-tagline,
    .eva-site-tagline a {
        font-size: 1rem !important;
    }
}

/* === Logo Texture Hook (add background-image when asset provided) === */
.eva-logo-area {
    position: relative;
}

/* Logo area links: inherit text color, no underline */
.eva-logo-area a {
    color: inherit !important;
    text-decoration: none !important;
}
.eva-logo-area a:hover {
    opacity: 0.8;
}

/* === Leaf icon (desktop only) ============================================
   Real Elizabeth Venart leaf mark from Lynne's LeafLogo.ai (Adobe
   Illustrator CS3 source). Vector lives at assets/img/leaf.svg with
   fill="currentColor" so we can recolor in CSS via mask-image instead
   of baking color into the file. Currently rendered in the EVA palette's
   Primary Accent (#D4E8DF, "light green") for a soft botanical accent
   that doesn't compete with the wordmark.

   Implemented as a ::before pseudo-element on .eva-logo-area so no
   markup change is required — the wordmark + tagline get nudged right
   via padding-left. Sized to sit within the existing desktop header
   padding box, so nav height does not change. Hidden on mobile
   (≤781px) where horizontal real estate is scarce.

   To swap to a different palette color, change `background-color` only.
   To swap to a different leaf asset, replace assets/img/leaf.svg
   (keep fill="currentColor" so the mask trick continues to work).
   ────────────────────────────────────────────────────────────────────── */
@media (min-width: 782px) {
    .eva-logo-area {
        padding-left: 60px;
    }
    .eva-logo-area::before {
        content: "";
        position: absolute;
        left: 0;
        top: 50%;
        transform: translateY(-50%);
        width: 48px;
        height: 96px;
        background-color: var(--wp--preset--color--primary, #5A7C6B);
        -webkit-mask-image: url("assets/img/leaf.svg");
        mask-image: url("assets/img/leaf.svg");
        -webkit-mask-repeat: no-repeat;
        mask-repeat: no-repeat;
        -webkit-mask-position: top center;
        mask-position: top center;
        -webkit-mask-size: contain;
        mask-size: contain;
        pointer-events: none;
    }
}

/* === Nav CTA Button: Lavender Accent === */
.eva-nav-cta a {
    background-color: var(--wp--preset--color--accent, #8B7BA5);
    color: #fff !important;
    padding: 0.5em 1.25em;
    border-radius: 6px;
    text-decoration: none;
    transition: background-color 0.2s ease;
}
.eva-nav-cta a:hover {
    background-color: var(--wp--preset--color--accent-hover, #7B6B95);
}

/* === Header nav: hamburger below 1280px, inline at desktop ==============
   Saved Navigation post sets overlayMenu:"always". WP renders the
   responsive container at every viewport but doesn't reliably apply
   .hidden-by-default on this site (Ollie or another filter strips it),
   and the Interactivity API's open/closed state can't be trusted on
   first paint. We override WP's rendering directly:

     <1280px:  hamburger only. Container hidden. Tap = fullscreen overlay.
     ≥1280px:  inline horizontal menu. No hamburger. No overlay wrappers.

   Works regardless of whether overlayMenu is "always" or "mobile" in
   the saved nav, so no database change is required.

   Scoped to .eva-header so it can't leak to any in-page <Navigation>
   blocks (e.g., footer menus) the site might add later.
   ─────────────────────────────────────────────────────────────────────── */
@media (max-width: 1279.98px) {
    /* Hamburger visible. */
    .eva-header .wp-block-navigation__responsive-container-open {
        display: flex !important;
    }

    /* Container hidden by default. Note: no :not(.is-menu-open) — the
       open-state rule below has higher specificity + !important and
       wins when the menu is actually open. Without this unconditional
       hide, WP/Interactivity's flaky state handling left the container
       half-rendered (X close button visible, items partially leaking). */
    .eva-header .wp-block-navigation__responsive-container {
        display: none;
    }

    /* Tap-to-open: fullscreen overlay. */
    .eva-header .wp-block-navigation__responsive-container.is-menu-open {
        display: flex !important;
        flex-direction: column !important;
        position: fixed !important;
        inset: 0 !important;
        z-index: 100000 !important;
        background: var(--wp--preset--color--base) !important;
        padding: var(--wp--preset--spacing--40) !important;
        overflow: auto !important;
    }

    /* Submenus collapsed by default in the open overlay.
       WP's Interactivity API auto-flips every submenu's aria-expanded
       to true when the overlay opens, exposing the entire hierarchy.
       Override Ollie's `[aria-expanded="true"] ~ ... { display: flex }`
       rule and key off our own `.eva-submenu-open` class instead, which
       is managed by assets/js/eva-mobile-submenu-toggle.js. */
    .eva-header .wp-block-navigation__responsive-container.is-menu-open
      .wp-block-navigation__submenu-container {
        display: none !important;
    }

    .eva-header .wp-block-navigation__responsive-container.is-menu-open
      .wp-block-navigation-submenu.eva-submenu-open
      > .wp-block-navigation__submenu-container {
        display: flex !important;
        flex-direction: column !important;
        /* Override the desktop dropdown base rules that set
           opacity:0/visibility:hidden/pointer-events:none for the
           hover-fade animation, and position:absolute for the
           desktop right-flyout. Without these resets, nested
           submenus rendered off-screen or invisible. */
        opacity: 1 !important;
        visibility: visible !important;
        pointer-events: auto !important;
        transform: none !important;
        position: static !important;
        top: auto !important;
        left: auto !important;
        margin-left: 0 !important;
    }

    /* Visual cue: chevron rotates 180° when its submenu is expanded. */
    .eva-header .wp-block-navigation__responsive-container.is-menu-open
      .wp-block-navigation-submenu
      > .wp-block-navigation-submenu__toggle svg {
        transition: transform 0.2s ease;
    }
    .eva-header .wp-block-navigation__responsive-container.is-menu-open
      .wp-block-navigation-submenu.eva-submenu-open
      > .wp-block-navigation-submenu__toggle svg {
        transform: rotate(180deg);
    }
}

/* === Desktop (≥1280px): inline horizontal menu ===========================
   Hide the hamburger. Strip the overlay wrapper divs from layout via
   `display: contents` so the <ul> bubbles up to render directly inside
   the nav. Force the container ul to a flex row, override Ollie's
   width:100% on items so they sit side-by-side instead of stacking.
   ─────────────────────────────────────────────────────────────────────── */
@media (min-width: 1280px) {
    .eva-header .wp-block-navigation__responsive-container-open {
        display: none !important;
    }
    .eva-header .wp-block-navigation__responsive-container {
        display: block !important;
        position: static !important;
        background: transparent !important;
        padding: 0 !important;
        z-index: auto !important;
    }
    .eva-header .wp-block-navigation__responsive-close,
    .eva-header .wp-block-navigation__responsive-dialog,
    .eva-header .wp-block-navigation__responsive-container-content {
        display: contents !important;
    }
    .eva-header .wp-block-navigation__responsive-container-close {
        display: none !important;
    }
    .eva-header .wp-block-navigation__container {
        display: flex !important;
        flex-direction: row !important;
        flex-wrap: nowrap !important;
        gap: var(--wp--preset--spacing--40) !important;
        width: auto !important;
    }
    /* Beat Ollie's `.is-menu-open.has-modal-open .__container li { width:100%; }` */
    .eva-header .wp-block-navigation__container > li {
        width: auto !important;
    }
}

/* ==========================================================================
   Batch 3: Hero + Welcome patterns
   ========================================================================== */

/* Hero — positioning context for SVG illustration */
.eva-hero-home {
  position: relative;
  overflow: hidden;
}

.eva-hero-illustration {
  position: absolute;
  right: 5%;
  top: 50%;
  transform: translateY(-50%);
  width: 280px;
  opacity: 0.7;
  pointer-events: none;
  z-index: 1;
}

@media (max-width: 768px) {
  .eva-hero-illustration {
    display: none;
  }
}

/* Accent color on <em> inside headings (hero H1, welcome H2, etc.) */
.eva-hero-home .wp-block-heading em,
.eva-welcome-section .wp-block-heading em {
  color: var(--wp--preset--color--accent);
  font-style: normal;
}

/* Welcome portrait — accent left border (delta 4.5) */
.eva-welcome-portrait img {
  border-left: 3px solid var(--wp--preset--color--accent);
}

/* ==========================================================================
   Batch 4: Pathways + Services patterns
   ========================================================================== */

/* Pathway cards — hover lift + shadow */
.eva-pathway-card {
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.eva-pathway-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
}

/* Pathway icon spacing */
.eva-pathway-icon {
  margin-bottom: 1rem;
}

/* Service cards — border + hover transition */
.eva-service-card {
  border: 1px solid var(--wp--preset--color--border-light, #C4D6CC);
  transition: border-color 0.2s ease;
}
.eva-service-card:hover {
  border-color: var(--wp--preset--color--accent, #8B7BA5);
}

/* Service icon spacing */
.eva-service-icon {
  margin-bottom: 0.75rem;
}

/* Accent color on <em> inside services headings */
.eva-services-grid .wp-block-heading em {
  color: var(--wp--preset--color--accent);
  font-style: normal;
}

/* ==========================================================================
   Batch 5: Healing Intensives pattern
   ========================================================================== */

/* Single card container */
.eva-intensives-card {
  background: #fff;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
  overflow: hidden;
}

/* Green gradient header */
.eva-intensives-header {
  background: linear-gradient(135deg, var(--wp--preset--color--primary, #5A7C6B) 0%, var(--wp--preset--color--primary-dark, #4A6B5A) 100%);
}
.eva-intensives-title {
  color: #fff !important;
}
.eva-intensives-subtitle {
  color: rgba(255, 255, 255, 0.85) !important;
}

/* Horizontal steps row */
.eva-intensives-steps-row {
  display: flex;
  align-items: flex-start;
  justify-content: center;
  gap: 0;
}

/* Individual step */
.eva-step {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 0 0.75rem;
}

/* Numbered circle — 48px lavender */
.eva-step-number {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background-color: var(--wp--preset--color--accent, #8B7BA5);
  color: #fff;
  font-size: 1.25rem;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 0.75rem;
  flex-shrink: 0;
}

/* Connector line between steps */
.eva-step-connector {
  width: 40px;
  min-width: 24px;
  height: 2px;
  background-color: var(--wp--preset--color--border-light, #E0D8E5);
  align-self: center;
  margin-top: 24px; /* align with center of 48px circle */
  flex-shrink: 0;
}

/* Step text */
.eva-step-title {
  font-size: 1rem;
  font-weight: 600;
  color: var(--wp--preset--color--main, #3D4A42);
  margin: 0 0 0.375rem 0;
}
.eva-step-desc {
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--wp--preset--color--main-accent, #5C6B60);
  margin: 0;
}

/* Responsive: stack on mobile */
@media (max-width: 768px) {
  .eva-intensives-steps-row {
    flex-direction: column;
    align-items: center;
    gap: 1.5rem;
  }
  .eva-step-connector {
    width: 2px;
    height: 24px;
    margin-top: 0;
  }
  .eva-step {
    padding: 0;
  }
}

/* ── Batch 6: Book Preview + Book Blurbs ── */

/* Book cover hover effect (delta 8.6) */
.eva-book-cover img {
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.eva-book-cover:hover img {
  transform: scale(1.02);
  box-shadow: 0 12px 32px rgba(0,0,0,0.15);
}

/* Book meta structured boxes (delta 8.3) */
.eva-book-meta {
  display: flex;
  gap: 1rem;
  margin: 0.5rem 0 1rem;
}
.eva-book-meta-box {
  background: var(--wp--preset--color--tertiary);
  border-radius: 8px;
  padding: 0.75rem 1.25rem;
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}
.eva-meta-label {
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--wp--preset--color--main-accent);
}
.eva-meta-value {
  font-size: 1rem;
  font-weight: 600;
  color: var(--wp--preset--color--main);
}

/* Book heading accent (delta 8.2) */
.eva-book-heading em {
  color: var(--wp--preset--color--accent);
  font-style: normal;
}

/* Blurb card decorative quote marks (delta 9.4) */
.eva-blurb-card {
  position: relative;
}
.eva-blurb-card::before {
  content: "\201C";
  position: absolute;
  top: 0.5rem;
  left: 1.25rem;
  font-size: 3rem;
  line-height: 1;
  color: var(--wp--preset--color--accent);
  opacity: 0.3;
  font-family: Georgia, serif;
  pointer-events: none;
}

/* ==========================================================================
   Navigation: Dropdown & Flyout (2nd + 3rd level)
   Roll-out / roll-up animation + refined spacing
   ─────────────────────────────────────────────────
   Two selector paths for every rule:
     1. .eva-main-nav …          (class injected by render_block PHP filter)
     2. .eva-header nav …        (fallback via parent container)
   This belt-and-suspenders approach ensures styles apply even if
   WordPress FSE fails to transfer the className to the <nav> element.
   ========================================================================== */

/* ── Base dropdown container (2nd level) ── */
.eva-main-nav .wp-block-navigation__submenu-container,
.eva-header nav .wp-block-navigation__submenu-container {
  background: var(--wp--preset--color--base, #FDFCFB);
  border: 1px solid var(--wp--preset--color--border-light, #E0D8E5);
  border-radius: 10px;
  box-shadow: 0 6px 20px rgba(61, 74, 66, 0.07),
              0 1.5px 4px rgba(61, 74, 66, 0.04);
  padding: 0.625rem 0;
  margin-top: 6px;
  min-width: 250px;
  z-index: 110;
  display: none;

  /* ── Roll-out / roll-up animation ── */
  opacity: 0;
  visibility: hidden;
  transform: translateY(-8px);
  transition:
    opacity 200ms cubic-bezier(0.4, 0, 0.2, 1),
    transform 200ms cubic-bezier(0.4, 0, 0.2, 1),
    visibility 200ms;
  pointer-events: none;
}

/* ── Hover bridge: invisible pseudo-element fills the margin-top gap so
   :hover stays active as the mouse moves down from the nav item into
   the dropdown panel. Works because ::before is a DOM descendant of the
   parent <li>, so hovering it keeps :hover on the parent active. ── */
.eva-main-nav .wp-block-navigation__submenu-container::before,
.eva-header nav .wp-block-navigation__submenu-container::before {
  content: '';
  position: absolute;
  top: -6px;
  left: 0;
  right: 0;
  height: 6px;
}

/* ── Reveal on hover / focus-within ──
   SCOPED TO DESKTOP. Without the media-query wrapper this rule fires
   when the mobile overlay opens and WP auto-focuses Counseling — the
   :focus-within match flips display to flex and pins the first submenu
   open with no way to close it. Mobile/tablet open behavior is owned
   exclusively by the @media (max-width:1279.98px) block at the top of
   the file (the .eva-submenu-open class manager). */
@media (min-width: 1280px) {
.eva-main-nav .wp-block-navigation-item:hover > .wp-block-navigation__submenu-container,
.eva-main-nav .wp-block-navigation-item:focus-within > .wp-block-navigation__submenu-container,
.eva-header nav .wp-block-navigation-item:hover > .wp-block-navigation__submenu-container,
.eva-header nav .wp-block-navigation-item:focus-within > .wp-block-navigation__submenu-container {
  display: flex !important;
  flex-direction: column;
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  pointer-events: auto;
  transition:
    opacity 250ms cubic-bezier(0.4, 0, 0.2, 1),
    transform 250ms cubic-bezier(0.4, 0, 0.2, 1),
    visibility 250ms;
}
}

/* ── Dropdown items ── */
.eva-main-nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content,
.eva-header nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
  padding: 0.625rem 1.25rem;
  font-size: 0.875rem;
  font-weight: 400;
  color: var(--wp--preset--color--main, #3D4A42);
  text-decoration: none;
  display: block;
  border-radius: 4px;
  margin: 0 0.5rem;
  transition: background-color 0.2s ease, color 0.2s ease;
  line-height: 1.5;
}

.eva-main-nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover,
.eva-main-nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content:focus,
.eva-header nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover,
.eva-header nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content:focus {
  background-color: var(--wp--preset--color--tertiary, #F8F6F9);
  color: var(--wp--preset--color--accent, #8B7BA5);
}

/* ── 3rd-level flyout (nested submenu) ──
   SCOPED TO DESKTOP. Without the wrapper, position:absolute; left:100%
   pushed Consultation's nested submenu (and other 3rd-level menus)
   outside the right edge of the mobile overlay viewport — making them
   invisible even when display:flex was applied. Inside the overlay,
   nested submenus must render in normal document flow underneath their
   parent, not as an absolutely-positioned right-side flyout. */
@media (min-width: 1280px) {
.eva-main-nav .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,
.eva-header nav .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container {
  position: absolute !important;
  top: -0.625rem !important;
  left: 100% !important;
  margin-left: 6px;
  margin-top: 0;

  /* Flyout slides in from right instead of down */
  transform: translateX(-8px) !important;
}
}

/* ── 3rd-level flyout hover bridge: overrides the vertical bridge above
   with a horizontal version that fills the margin-left: 6px gap ── */
.eva-main-nav .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container::before,
.eva-header nav .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container::before {
  content: '';
  position: absolute;
  top: 0;
  left: -6px;
  right: auto;
  width: 6px;
  height: 100%;
}

/* SCOPED TO DESKTOP — same reason as the 2nd-level :hover/:focus-within
   rule above. Mobile overlay handles nested submenus via .eva-submenu-open. */
@media (min-width: 1280px) {
.eva-main-nav .wp-block-navigation-item:hover > .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,
.eva-main-nav .wp-block-navigation__submenu-container .wp-block-navigation-item:hover > .wp-block-navigation__submenu-container,
.eva-main-nav .wp-block-navigation__submenu-container .wp-block-navigation-item:focus-within > .wp-block-navigation__submenu-container,
.eva-header nav .wp-block-navigation-item:hover > .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,
.eva-header nav .wp-block-navigation__submenu-container .wp-block-navigation-item:hover > .wp-block-navigation__submenu-container,
.eva-header nav .wp-block-navigation__submenu-container .wp-block-navigation-item:focus-within > .wp-block-navigation__submenu-container {
  display: flex !important;
  flex-direction: column;
  opacity: 1;
  visibility: visible;
  transform: translateX(0) !important;
  pointer-events: auto;
}
}

/* ── Hide native toggle button inside dropdowns on desktop. SCOPED — at
   mobile/tablet widths the nested chevron is the user's only way to
   expand a 3rd-level submenu (Consultation under For Professionals,
   etc.), so it MUST stay clickable. The CSS-only ::after arrow on the
   parent link is decorative and only competes with the toggle on
   desktop, which is the only place we need to suppress it. ── */
@media (min-width: 1280px) {
.eva-main-nav .wp-block-navigation__submenu-container .wp-block-navigation-submenu__toggle,
.eva-header nav .wp-block-navigation__submenu-container .wp-block-navigation-submenu__toggle {
  display: none;
}
}

/* ── Submenu parent arrow indicator via :has() on the link content element.
   Items that have a nested submenu show a › via ::after on their link.
   We switch the link to display:flex so margin-left:auto pushes › to the right. ── */
.eva-main-nav .wp-block-navigation__submenu-container li:has(> .wp-block-navigation__submenu-container) > .wp-block-navigation-item__content,
.eva-header nav .wp-block-navigation__submenu-container li:has(> .wp-block-navigation__submenu-container) > .wp-block-navigation-item__content {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.eva-main-nav .wp-block-navigation__submenu-container li:has(> .wp-block-navigation__submenu-container) > .wp-block-navigation-item__content::after,
.eva-header nav .wp-block-navigation__submenu-container li:has(> .wp-block-navigation__submenu-container) > .wp-block-navigation-item__content::after {
  content: "›";
  flex-shrink: 0;
  margin-left: 0.75rem;
  font-size: 1rem;
  opacity: 0.4;
  transition: opacity 0.2s ease, transform 0.2s ease;
}

.eva-main-nav .wp-block-navigation__submenu-container .wp-block-navigation-item:hover > li:has(> .wp-block-navigation__submenu-container) > .wp-block-navigation-item__content::after,
.eva-main-nav .wp-block-navigation__submenu-container li:has(> .wp-block-navigation__submenu-container):hover > .wp-block-navigation-item__content::after,
.eva-header nav .wp-block-navigation__submenu-container li:has(> .wp-block-navigation__submenu-container):hover > .wp-block-navigation-item__content::after {
  opacity: 0.7;
  transform: translateX(2px);
}

/* ── Top-level hover state ── */
.eva-main-nav .wp-block-navigation-item:hover > .wp-block-navigation-item__content,
.eva-main-nav .wp-block-navigation-item:focus-within > .wp-block-navigation-item__content,
.eva-header nav .wp-block-navigation-item:hover > .wp-block-navigation-item__content,
.eva-header nav .wp-block-navigation-item:focus-within > .wp-block-navigation-item__content {
  color: var(--wp--preset--color--accent, #8B7BA5);
}

/* ── Divider between dropdown groups (optional utility class) ── */
.eva-main-nav .wp-block-navigation-item.eva-nav-divider,
.eva-header nav .wp-block-navigation-item.eva-nav-divider {
  border-top: 1px solid var(--wp--preset--color--border-light, #E0D8E5);
  margin-top: 0.375rem;
  padding-top: 0.375rem;
}

/* ── Accessible: respect reduced motion preference ── */
@media (prefers-reduced-motion: reduce) {
  .eva-main-nav .wp-block-navigation__submenu-container,
  .eva-header nav .wp-block-navigation__submenu-container {
    transition: opacity 0.01ms, visibility 0.01ms;
    transform: none !important;
  }

  .eva-main-nav .wp-block-navigation-item:hover > .wp-block-navigation__submenu-container,
  .eva-main-nav .wp-block-navigation-item:focus-within > .wp-block-navigation__submenu-container,
  .eva-header nav .wp-block-navigation-item:hover > .wp-block-navigation__submenu-container,
  .eva-header nav .wp-block-navigation-item:focus-within > .wp-block-navigation__submenu-container {
    transition: opacity 0.01ms, visibility 0.01ms;
    transform: none !important;
  }
}

/* ── Responsive: stack submenus on mobile/tablet ── */
@media (max-width: 960px) {
  /* In overlay mode, WP stacks items — no animation needed */
  .eva-main-nav .wp-block-navigation__submenu-container,
  .eva-header nav .wp-block-navigation__submenu-container {
    display: flex;
    flex-direction: column;
    opacity: 1;
    visibility: visible;
    transform: none;
    transition: none;
    pointer-events: auto;
    box-shadow: none;
    border: none;
    border-radius: 0;
    border-left: 2px solid var(--wp--preset--color--border-light, #E0D8E5);
    padding: 0.25rem 0 0.25rem 0.75rem;
    margin: 0.25rem 0;
    min-width: unset;
  }

  .eva-main-nav .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,
  .eva-header nav .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container {
    top: auto;
    left: auto;
    margin-left: 0;
    padding-left: 0.75rem;
    transform: none;
  }

  .eva-main-nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content,
  .eva-header nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
    padding: 0.375rem 0.5rem;
    margin: 0;
    border-radius: 0;
  }

  /* ── Restore native toggle button on mobile — desktop hides it, but
     mobile accordion behaviour depends on it for expand/collapse. ── */
  .eva-main-nav .wp-block-navigation__submenu-container .wp-block-navigation-submenu__toggle,
  .eva-header nav .wp-block-navigation__submenu-container .wp-block-navigation-submenu__toggle {
    display: flex;
  }
}

/* ================================================
   EVA Navigation — Padding, Dropdowns & Animation
   ================================================ */

/* Top-level nav item padding */
.wp-block-navigation .wp-block-navigation-item__content {
    padding: 0.5rem 1rem;
}

/* Dropdown panel — visual lift */
.wp-block-navigation .wp-block-navigation__submenu-container {
    border-radius: 10px;
    border: 1px solid rgba(0, 0, 0, 0.07);
    box-shadow:
        0 2px 4px rgba(0, 0, 0, 0.06),
        0 8px 18px rgba(0, 0, 0, 0.14),
        0 20px 40px rgba(107, 90, 149, 0.10); /* lavender depth layer */
    padding: 6px 0;

    /* Animation — override WP's display:none */
    display: block !important;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transform: translateY(-5px);
    transition:
        opacity 0.22s ease,
        visibility 0.22s ease,
        transform 0.22s ease;
}

/* Dropdown — show state */
.wp-block-navigation .has-child:not(.open-on-click):hover > .wp-block-navigation__submenu-container,
.wp-block-navigation .has-child:not(.open-on-click):focus-within > .wp-block-navigation__submenu-container,
.wp-block-navigation .has-child .wp-block-navigation-submenu__toggle[aria-expanded="true"] + .wp-block-navigation__submenu-container {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transform: translateY(0);
}

/* Dropdown panel — increase top/bottom container padding */
.wp-block-navigation .wp-block-navigation__submenu-container {
    border-radius: 10px;
    border: 1px solid rgba(0, 0, 0, 0.07);
    box-shadow:
        0 2px 4px rgba(0, 0, 0, 0.06),
        0 8px 18px rgba(0, 0, 0, 0.14),
        0 20px 40px rgba(107, 90, 149, 0.10);
    padding: 10px 0; /* was 6px — more room top and bottom */

    display: block !important;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transform: translateY(-5px);
    transition:
        opacity 0.22s ease,
        visibility 0.22s ease,
        transform 0.22s ease;
}

/* Dropdown item padding — !important to override WP inline styles */
.wp-block-navigation__submenu-container .wp-block-navigation-item__content {
    padding: 0.85rem 1.75rem !important;
}

/* Submenu container — prevent narrow wrapping */
.wp-block-navigation .wp-block-navigation__submenu-container {
    border-radius: 10px;
    border: 1px solid rgba(0, 0, 0, 0.07);
    box-shadow:
        0 2px 4px rgba(0, 0, 0, 0.06),
        0 8px 18px rgba(0, 0, 0, 0.14),
        0 20px 40px rgba(107, 90, 149, 0.10);
    padding: 10px 0;
    min-width: 220px; /* prevents narrow wrap on longer labels */

    display: block !important;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transform: translateY(-5px);
    transition:
        opacity 0.22s ease,
        visibility 0.22s ease,
        transform 0.22s ease;
}

/* Highest-specificity submenu item padding — beats Ollie's !important */
/* Leaf items (no children) */
.wp-block-navigation__submenu-container li.wp-block-navigation-link > a.wp-block-navigation-item__content {
    padding: 0.85rem 1.75rem !important;
}
/* Arrow/chevron parent items (have nested submenus) */
.wp-block-navigation__submenu-container li.wp-block-navigation-submenu > a.wp-block-navigation-item__content {
    padding: 0.85rem 1.75rem !important;
}

/* Mobile — disable animation, restore normal behavior */
@media (max-width: 781px) {
    .wp-block-navigation .wp-block-navigation__submenu-container {
        display: revert !important;
        opacity: revert;
        visibility: revert;
        transform: none;
        transition: none;
        box-shadow: none;
        border: none;
        border-radius: 0;
    }
}


/* ═══════════════════════════════════════════════════════
   EVA Interior Pages — Visual Storytelling Spacing
   ═══════════════════════════════════════════════════════ */

/* ── Template wrapper: kill padding so mood bands sit flush ── */
.eva-page-content {
    padding-top: 0 !important;
    padding-bottom: 0 !important;
}

.eva-page-content > .alignfull,
.eva-page-content .wp-block-post-content > .alignfull {
    margin-left: calc(50% - 50vw);
    margin-right: calc(50% - 50vw);
    width: 100vw;
    max-width: 100vw;
}

/* ── Page pattern wrappers: zero top/bottom so first/last mood bands are seamless ── */
[class*="eva-page-"] {
    padding-top: 0 !important;
    padding-bottom: 0 !important;
}

/* ═══════════════════════════════════════════════════════
   1. HERO-BAND MERGE
   On Counseling & Professionals pages the PHP render_block
   filter hides the sage hero entirely and injects the page
   title <h1> directly into the first mood-band cover block.
   ═══════════════════════════════════════════════════════ */

/* ── Kill ALL vertical spacing between nav and hero mood band ── */
/* The render_block filter adds .eva-has-hero-band to <main> on overlay pages. */

/* Ollie blockGap: flow-layout children get margin-block-start */
.eva-has-hero-band {
    padding-top: 0 !important;
    margin-top: 0 !important;
    margin-block-start: 0 !important;
}

/* Also zero the gap for any preceding sibling rule (header → main) */
.wp-site-blocks > .eva-has-hero-band {
    margin-block-start: 0 !important;
}

/* First child inside main only: no top gap */
.eva-has-hero-band > *:first-child {
    margin-top: 0 !important;
    margin-block-start: 0 !important;
    padding-top: 0 !important;
}

/* Post content wrapper — only its first child */
.eva-has-hero-band .wp-block-post-content > *:first-child {
    margin-top: 0 !important;
    margin-block-start: 0 !important;
    padding-top: 0 !important;
}

/* ── Hero mood band: taller, flush to top ── */
.eva-mood-band-hero {
    min-height: 400px !important;
    margin-top: 0 !important;
}

/* No top-fade gradient on the hero band */
.eva-mood-band-hero::before {
    display: none !important;
}

/* Semi-transparent dark overlay for title legibility.
   When editors add a real photo, they can adjust the cover
   block's built-in overlay opacity in Gutenberg. */
.eva-mood-band-hero .wp-block-cover__background {
    background: rgba(0, 0, 0, 0.35) !important;
    opacity: 1 !important;
}

/* ── Inner container: vertically center the title ── */
.eva-mood-band-has-title {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: center !important;
    min-height: inherit !important;
}

/* ── Injected page title ── */
.eva-mood-band-title {
    color: #fff !important;
    text-shadow: 0 2px 20px rgba(0, 0, 0, 0.4),
                 0 1px 6px rgba(0, 0, 0, 0.2);
    font-size: 5rem !important;
    font-family: coranto-2, serif !important;
    text-align: center !important;
    margin: 0 !important;
    padding: 0 var(--wp--preset--spacing--40) !important;
    font-weight: 600 !important;
}

/* Hide the placeholder description text in the hero mood band */
.eva-mood-band-has-title > p {
    display: none !important;
}

/* ═══════════════════════════════════════════════════════
   2. MOOD BANDS — base styles
   ═══════════════════════════════════════════════════════ */

.eva-mood-band {
    margin-top: 4rem !important;
    margin-bottom: 4rem !important;
    min-height: 280px !important;
    /* Full-bleed: break out of constrained container */
    width: 100vw !important;
    max-width: 100vw !important;
    margin-left: calc(50% - 50vw) !important;
    margin-right: calc(50% - 50vw) !important;
    border-radius: 0 !important;
}

/* Last mood band — flush against CTA/footer, no bottom margin */
[class*="eva-page-"] > .eva-mood-band:last-child {
    margin-top: 4rem !important;
    margin-bottom: 0 !important;
}

/* Only mood band (first AND last) — flush both sides */
[class*="eva-page-"] > .eva-mood-band:first-child:last-child {
    margin-top: -4rem !important;
    margin-bottom: 0 !important;
}

/* ── Fade gradients: blend interior mood bands into surrounding content ── */
.eva-mood-band::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 60px;
    background: linear-gradient(
        to bottom,
        var(--wp--preset--color--base, #FDFCFA),
        transparent
    );
    z-index: 2;
    pointer-events: none;
}

.eva-mood-band::after {
    content: "";
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    height: 60px;
    background: linear-gradient(
        to top,
        var(--wp--preset--color--base, #FDFCFA),
        transparent
    );
    z-index: 2;
    pointer-events: none;
}

/* Last mood band: NO bottom fade — let image bleed into CTA */
[class*="eva-page-"] > .eva-mood-band:last-child::after {
    display: none !important;
}

/* ═══════════════════════════════════════════════════════
   3. INLINE PHOTO-TEXT PAIRS
   ═══════════════════════════════════════════════════════ */

.eva-inline-photo {
    margin-bottom: 0 !important;
}

.wp-block-columns:has(.eva-inline-photo) {
    margin-top: 3rem !important;
    margin-bottom: 3rem !important;
    padding-left: 1rem;
    padding-right: 1rem;
}

/* ── Mobile: constrain inline photos so they don't dominate ── */
@media (max-width: 781px) {
    /* On mobile, columns stack — limit photo height so it's a accent, not a takeover */
    .eva-inline-photo img {
        max-height: 220px !important;
        width: auto !important;
        max-width: 60% !important;
        object-fit: cover;
        margin-left: auto;
        margin-right: auto;
        display: block;
    }

    /* Center the figure on mobile */
    .eva-inline-photo {
        text-align: center;
    }
}

/* Tablet: moderate constraint */
@media (min-width: 782px) and (max-width: 1024px) {
    .eva-inline-photo img {
        max-height: 300px !important;
        object-fit: cover;
    }
}

/* ── Alternating layout: --reverse modifier flips DOM order on desktop ──
   Mobile: WP stacks columns at <=781px so DOM order (image first) is preserved.
   Desktop: row-reverse swaps image to the right while heading + body sit left.
   Used on the About page "Counseling Background" sub-sections to create a
   staggered text/photo zigzag that breaks up long-form prose.

   GUTTER FIX — without an explicit gap, WP columns inherit a small
   blockGap default that crowds the photo against the text. Override
   with a generous 4rem desktop gutter; revert to the WP default
   blockGap below 782px where columns are stacked anyway. */
@media (min-width: 782px) {
    .wp-block-columns.eva-inline-photo-block,
    .wp-block-columns.eva-inline-photo-block--reverse {
        gap: 4rem !important;
        column-gap: 4rem !important;
        /* TOP-ALIGN PHOTO — previously columns were vertically centered,
           which floated short photo columns in the middle of taller text
           columns. Per client review, photo should always sit at the top
           of the row so the eye hits image and heading at the same level. */
        align-items: flex-start !important;
    }
    .wp-block-columns.eva-inline-photo-block > .wp-block-column,
    .wp-block-columns.eva-inline-photo-block--reverse > .wp-block-column {
        align-self: flex-start !important;
    }
    .wp-block-columns.eva-inline-photo-block--reverse {
        flex-direction: row-reverse !important;
    }
}

/* ═══════════════════════════════════════════════════════
   4. EQUAL-HEIGHT SERVICE / SPECIALTY CARDS
   ═══════════════════════════════════════════════════════ */

/* Card columns: flex stretch for equal heights */
[class*="eva-page-"] > .wp-block-columns:not(:has(.eva-inline-photo)) {
    display: flex !important;
    flex-wrap: wrap;
    align-items: stretch !important;
    margin-top: 3rem !important;
    margin-bottom: 3rem !important;
}

[class*="eva-page-"] > .wp-block-columns:not(:has(.eva-inline-photo)) > .wp-block-column {
    display: flex !important;
    flex-direction: column !important;
}

/* Inner card group stretches to fill column height */
[class*="eva-page-"] > .wp-block-columns:not(:has(.eva-inline-photo)) > .wp-block-column > .wp-block-group {
    flex: 1 !important;
    display: flex !important;
    flex-direction: column !important;
}

/* Push the CTA link to the bottom of each card */
[class*="eva-page-"] > .wp-block-columns:not(:has(.eva-inline-photo)) > .wp-block-column > .wp-block-group > p:last-child {
    margin-top: auto !important;
}

/* ═══════════════════════════════════════════════════════
   5. CONTENT SECTION BREATHING ROOM
   ═══════════════════════════════════════════════════════ */

.eva-mood-band + .wp-block-columns {
    margin-top: 0 !important;
}

/* Text-only groups (e.g. modalities section) */
[class*="eva-page-"] > .wp-block-group {
    margin-top: 3rem !important;
    margin-bottom: 3rem !important;
}

/* Interior page intro headings: space them when no mood band leads */
[class*="eva-page-"] > .wp-block-group:first-child:not(.eva-mood-band) {
    padding-top: 4rem !important;
}

/* ═══════════════════════════════════════════════════════
   5b. SPECIALTY PULL-OUT PATTERN
       Used on /counseling/for-highly-sensitive-people/,
              /counseling/for-trauma-survivors/,
              /counseling/for-therapists/
       Pattern: eva/specialty-pullout
   ═══════════════════════════════════════════════════════ */

/* Wayfinding color tokens — swap by outer class */
.eva-pullout-lavender {
    --eva-pullout-accent: #8B7BA5;
    --eva-pullout-wash:   #F3EFF6;
    --eva-pullout-hover:  #6F6186;
}

.eva-pullout-sage {
    --eva-pullout-accent: #7BA58B;
    --eva-pullout-wash:   #EEF5F0;
    --eva-pullout-hover:  #5F8770;
}

.eva-pullout-teal {
    --eva-pullout-accent: #5A8A8A;
    --eva-pullout-wash:   #E9F1F1;
    --eva-pullout-hover:  #476E6E;
}

/* Hero card: tinted wash background, left accent bar.
   E2 (2026-04-29): added internal padding so quote text breathes inside
   the colored frame per Lynne 4/21 ("more padding on the lilac
   pull-out quote boxes"). */
.eva-specialty-pullout .eva-pullout-hero {
    background-color: var(--eva-pullout-wash);
    border-left: 4px solid var(--eva-pullout-accent);
    padding: var(--wp--preset--spacing--50, 1.75rem) var(--wp--preset--spacing--60, 2.25rem);
    border-radius: 0 8px 8px 0;
}

/* Eyebrow picks up wayfinding accent for the page-type signal.
   C4 (2026-04-29): swapped from --eva-pullout-accent (#8B7BA5)
   to --eva-pullout-hover (#6F6186 on lavender) for ≥4.5:1 contrast
   against the wash background. Same pattern for sage/teal variants. */
.eva-specialty-pullout .eva-pullout-eyebrow {
    color: var(--eva-pullout-hover);
    font-weight: 600;
    margin: 0;
}

/* CTA card: same wash, centered content */
.eva-specialty-pullout .eva-pullout-cta {
    background-color: var(--eva-pullout-wash);
}

/* CTA button: wayfinding accent as fill */
.eva-specialty-pullout .eva-pullout-cta .wp-block-button__link {
    background-color: var(--eva-pullout-accent);
    color: #fff;
    padding: 0.85em 1.75em;
    font-weight: 600;
    letter-spacing: 0.02em;
    transition: background-color 0.2s ease;
}

.eva-specialty-pullout .eva-pullout-cta .wp-block-button__link:hover,
.eva-specialty-pullout .eva-pullout-cta .wp-block-button__link:focus {
    background-color: var(--eva-pullout-hover);
    color: #fff;
}

/* Body copy: constrain measure, inherit theme body styles */
.eva-specialty-pullout .eva-pullout-body p {
    margin-bottom: 1.25rem;
}

.eva-specialty-pullout .eva-pullout-body p:last-child {
    margin-bottom: 0;
}

/* ═══════════════════════════════════════════════════════
   5c. STAGED CONTENT TYPOGRAPHY RHYTHM
       Wraps raw-HTML staged pages (Counseling hub, Approaches,
       IFS, EMDR, IFS-Informed EMDR, Intensives, Getting Started,
       Fees, plus /for-professionals/, /book/, /about/, /contact/
       stubs). Gives headings and paragraphs enough breathing
       room without re-authoring each heredoc as block markup.
   ═══════════════════════════════════════════════════════ */

.eva-staged-content {
    padding: 1rem 1.25rem 3rem;
}

/* ─── Interior-page lede callout ───────────────────────────────
   The opening italic paragraph on interior landings ("Healing
   happens when you feel safe...", "Elizabeth Venart is a licensed
   professional counselor...", etc.) is promoted from muted body
   copy to a soft lavender-tinted callout with a left accent bar.
   Louder than body copy, but still calm and HSP-friendly.
   Class is emitted by patterns/page-counseling.php (and any other
   pattern PHP that opens with a lede paragraph); selector is class-only
   so non-lede openings (fees, specialty pullouts) are untouched.
   Historical note: this class was originally also emitted by the
   $c_* heredocs in mu-plugins/eva-ia-stager.php during the staged-
   content era. The stager is being retired at production cutover. */
/* HARDENED — multiple compound selectors and !important on every
   property because Ollie parent / theme.json / .eva-staged-content p
   (specificity 0,1,1) all out-specify a bare .eva-page-lede (0,1,0)
   and have been silently winning. The compound selectors below all
   reach 0,2,1+ specificity and combine with !important so nothing
   downstream can squash padding, margin, or interior balance. */
.eva-page-lede,
.eva-staged-content > .eva-page-lede,
.eva-staged-content p.eva-page-lede,
p.eva-page-lede {
    position: relative !important;
    font-size: 1.25rem !important;
    line-height: 1.65 !important;
    color: var(--wp--preset--color--main, #3D4A42) !important;
    background: var(--wp--preset--color--accent-light, #F0ECF5) !important;
    border-left: 4px solid var(--wp--preset--color--accent, #8B7BA5) !important;
    border-radius: 0 10px 10px 0 !important;
    /* Padding: top/bottom = 3rem (= left). Equal interior buffer on every side
       so the box reads as a balanced callout, not a squeezed strip. */
    padding: 3rem 2.5rem 3rem 3rem !important;
    margin-top: 2rem !important;
    margin-bottom: 3rem !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    font-style: italic !important;
    text-align: left !important;
}

/* Neutralise theme-level center-align on the callout — centered
   italic inside a left-bar callout looks unbalanced. */
.eva-page-lede.has-text-align-center,
p.eva-page-lede.has-text-align-center {
    text-align: left !important;
}

/* Inherit italics + colour for inline <em> (avoids italic-on-italic
   flipping to roman in some Coranto 2 weights) and for any link. */
.eva-page-lede em,
p.eva-page-lede em {
    font-style: italic !important;
    color: inherit !important;
}

.eva-page-lede a,
p.eva-page-lede a {
    color: var(--wp--preset--color--accent, #8B7BA5) !important;
    text-decoration-thickness: 1px !important;
}

/* Tighter padding on narrow viewports so the callout doesn't
   squeeze the text to 2-3 words per line. Top/bottom still match
   left side (2rem each) to preserve the balanced-box feel. */
@media (max-width: 480px) {
    .eva-page-lede,
    .eva-staged-content > .eva-page-lede,
    .eva-staged-content p.eva-page-lede,
    p.eva-page-lede {
        font-size: 1.1875rem !important;
        padding: 2rem 1.5rem 2rem 2rem !important;
        border-left-width: 3px !important;
        margin-top: 3rem !important;
        margin-bottom: 3rem !important;
    }
}

.eva-staged-content h2 {
    font-size: 1.875rem;
    line-height: 1.25;
    margin-top: 3rem;
    margin-bottom: 1rem;
}

.eva-staged-content h2:first-child {
    margin-top: 0;
}

.eva-staged-content h3 {
    font-size: 1.25rem;
    line-height: 1.3;
    margin-top: 2.25rem;
    margin-bottom: 0.75rem;
}

.eva-staged-content p {
    line-height: 1.7;
    margin-bottom: 1.25rem;
}

.eva-staged-content ul {
    margin-top: 0.5rem;
    margin-bottom: 1.75rem;
    padding-left: 1.5rem;
}

.eva-staged-content ul li {
    line-height: 1.65;
    margin-bottom: 0.65rem;
}

/* Inline prose links inside staged content get an underlined, brand-
   coloured treatment. Buttons (.wp-block-button__link) are anchors too,
   so we EXCLUDE them here — otherwise the block-button's own styling
   gets overridden, the text turns primary-green on a lavender ground,
   the underline shows through, and the button reads as a misshapen
   link. */
.eva-staged-content a:not(.wp-block-button__link) {
    color: var(--wp--preset--color--primary, #00553A);
    text-decoration: underline;
    text-underline-offset: 2px;
}

.eva-staged-content a:not(.wp-block-button__link):hover,
.eva-staged-content a:not(.wp-block-button__link):focus {
    color: var(--wp--preset--color--primary-hover, #006B4A);
}

/* Restore native button behaviour for WP block buttons rendered inside
   staged content. WordPress's wp-element-button styling would normally
   handle cursor/underline, but the broader .eva-staged-content rule
   above was leaking into it before we scoped it with :not(). These
   rules are belt-and-braces — explicit no-underline and pointer cursor
   on both the outer wrapper and the inner link, across all states. */
.eva-staged-content .wp-block-button,
.eva-staged-content .wp-block-button__link {
    cursor: pointer;
}

.eva-staged-content .wp-block-button__link,
.eva-staged-content .wp-block-button__link:hover,
.eva-staged-content .wp-block-button__link:focus,
.eva-staged-content .wp-block-button__link:visited {
    text-decoration: none;
}

/* Mood band sitting above staged content — tighten top margin so the
   placeholder band feels connected to the lede rather than floating */
.eva-mood-band + .eva-staged-content {
    margin-top: 0 !important;
    padding-top: 3rem;
}

/* ═══════════════════════════════════════════════════════
   5d. PAGE HERO — full-bleed image + layered title
   The eva/page-hero pattern owns a single hero block on every
   interior page. EVA_Page_Hero::filter_hero_block() in
   inc/class-eva-page-hero.php hooks render_block and prepends the
   featured image (or DTS Lilac fallback) as a figure inside the
   group. The figure is absolute-positioned to fill the hero; a
   dark tint overlay sits above the image for title legibility;
   a bottom gradient fades the image into the body background so
   the hero reads as a single unit with the content below.
   ═══════════════════════════════════════════════════════ */

.eva-page-hero {
    position: relative !important;
    overflow: hidden !important;
    min-height: 300px;
    /* Full-bleed: break out of the theme's constrained content frame */
    width: 100vw !important;
    max-width: 100vw !important;
    margin-left: calc(50% - 50vw) !important;
    margin-right: calc(50% - 50vw) !important;
    padding: 0 !important;
    background: transparent !important;
    /* Vertically center the H1 over the image */
    display: flex !important;
    align-items: center;
    justify-content: center;
}

/* The figure is the background image layer */
.eva-page-hero-figure {
    position: absolute !important;
    inset: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    max-width: none !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    overflow: hidden;
    z-index: 1;
}

.eva-page-hero-figure img,
.eva-page-hero-image {
    width: 100% !important;
    height: 100% !important;
    object-fit: cover !important;
    display: block !important;
    border-radius: 0 !important;
    margin: 0 !important;
}

/* Tint overlay for title legibility (sits above image, below title).
   Base is a neutral dark wash — wayfinding tints override below. */
.eva-page-hero::before {
    content: '';
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.35);
    z-index: 2;
    pointer-events: none;
}

/* C2 (2026-04-29): replaced the 6-stop bottom fade with a clean solid edge.
   The hero now ends crisply at its bottom rather than dissolving into the
   body background — matches the TRC treatment per Lynne's 4/21 feedback.
   The legibility scrim above (::before) does the heavy lifting for title
   contrast; this ::after is now just a 4px wayfinding-color underline so
   each tinted hero has a visible color signature at its bottom edge. */
.eva-page-hero::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 4px;
    background: var(--wp--preset--color--accent, #8B7BA5);
    z-index: 3;
    pointer-events: none;
}

/* Title overlaid on top of everything */
.eva-page-hero .wp-block-post-title {
    position: relative;
    z-index: 4;
    color: #fff !important;
    text-shadow:
        0 2px 20px rgba(0, 0, 0, 0.4),
        0 1px 6px rgba(0, 0, 0, 0.25);
    font-size: 5rem !important;
    font-family: coranto-2, serif !important;
    text-align: center !important;
    margin: 0 !important;
    padding: 0 var(--wp--preset--spacing--40) !important;
    font-weight: 400 !important;
    line-height: 1.1 !important;
}

/* Wayfinding tints — colour the overlay instead of the background.
   Gradient top→bottom so the title has a cleaner top edge and the
   colour deepens toward the fade. */
/* C4 (2026-04-29): deepened scrim opacity per Lynne's "purple text on
   purple photo background is very hard to read" feedback. End-stop bumped
   from 0.5 → 0.65 across all tints so the H1 wins contrast even on
   light/lavender photo backgrounds. Title text-shadow does the rest. */
.eva-page-hero.has-tint-lavender::before {
    background: linear-gradient(180deg, rgba(90, 50, 120, 0.35) 0%, rgba(90, 50, 120, 0.65) 100%);
}
.eva-page-hero.has-tint-sage::before {
    background: linear-gradient(180deg, rgba(30, 70, 50, 0.35) 0%, rgba(30, 70, 50, 0.65) 100%);
}
.eva-page-hero.has-tint-teal::before {
    background: linear-gradient(180deg, rgba(20, 60, 70, 0.35) 0%, rgba(20, 60, 70, 0.65) 100%);
}
.eva-page-hero.has-tint-default::before {
    background: linear-gradient(180deg, rgba(0, 0, 0, 0.35) 0%, rgba(0, 0, 0, 0.6) 100%);
}

/* C2: wayfinding-color underline at the hero bottom. Each tint paints its
   own ::after color so the bottom edge of every hero signals which content
   spine the page belongs to. */
.eva-page-hero.has-tint-lavender::after { background: #8B7BA5; }
.eva-page-hero.has-tint-sage::after     { background: #5A7C6B; }
.eva-page-hero.has-tint-teal::after     { background: #5A8A8A; }
.eva-page-hero.has-tint-default::after  { background: #5A7C6B; }

/* The element immediately after the hero should sit flush against the
   fade — the hero already carries all the visual breathing room. */
.eva-page-hero + .eva-page-content,
.eva-page-hero + .wp-block-group,
.eva-page-hero + * {
    margin-top: 0 !important;
}

/* ═══════════════════════════════════════════════════════
   6. MOBILE RESPONSIVE
   ═══════════════════════════════════════════════════════ */

@media (max-width: 781px) {
    .eva-mood-band {
        min-height: 180px !important;
        margin-top: 2.5rem !important;
        margin-bottom: 2.5rem !important;
    }

    /* Hero mood band: shorter on mobile */
    .eva-mood-band-hero {
        min-height: 280px !important;
    }

    .eva-mood-band-title {
        font-size: 3rem !important;
    }

    [class*="eva-page-"] > .eva-mood-band:last-child {
        margin-bottom: 0 !important;
    }

    .eva-mood-band::before,
    .eva-mood-band::after {
        height: 40px;
    }

    .wp-block-columns:has(.eva-inline-photo) {
        margin-top: 2rem !important;
        margin-bottom: 2rem !important;
    }

    [class*="eva-page-"] > .wp-block-group:first-child:not(.eva-mood-band) {
        padding-top: 2.5rem !important;
    }

    /* Cards stack on mobile — reset equal-height */
    [class*="eva-page-"] > .wp-block-columns:not(:has(.eva-inline-photo)) {
        flex-direction: column;
    }

    /* Page hero — shorter + smaller title on phones */
    .eva-page-hero {
        min-height: 320px;
    }

    .eva-page-hero .wp-block-post-title {
        font-size: 3rem !important;
    }

    /* C2: mobile keeps the 4px wayfinding underline — no override needed.
       Old 35% gradient height removed. */
}

/* ──────────────────────────────────────────────────────────────────
 * Breadcrumbs (B1) — eva/page-breadcrumbs pattern
 * Default suppression at render time: Home, Contact, Book.
 * Per-page opt-out via the _eva_hide_breadcrumbs meta toggle.
 * ────────────────────────────────────────────────────────────── */
.eva-breadcrumbs {
    max-width: var(--wp--style--global--content-size, 820px);
    margin: 1rem auto 0;
    padding: 2rem var(--wp--preset--spacing--40) 0;
    font-family: var(--wp--preset--font-family--body);
    font-size: 1.125rem;
    color: var(--wp--preset--color--main-accent);
}

/* When breadcrumbs render above the lede, trim the lede's top margin
   from 5rem → 2rem so the rhythm above the callout stays consistent.
   Pages where breadcrumbs are suppressed keep the full 5rem margin. */
.eva-breadcrumbs ~ .eva-page-lede,
.eva-breadcrumbs ~ p.eva-page-lede {
    margin-top: 2rem !important;
}
.eva-breadcrumbs ol {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem 0.5rem;
}
.eva-breadcrumbs li:not(:last-child)::after {
    content: "›";
    margin-left: 0.5rem;
    opacity: 0.5;
}
.eva-breadcrumbs a {
    color: inherit;
    text-decoration: none;
    border-bottom: 1px solid transparent;
    transition: border-color 0.15s ease;
}
.eva-breadcrumbs a:hover,
.eva-breadcrumbs a:focus-visible {
    border-bottom-color: currentColor;
}
.eva-breadcrumbs [aria-current="page"] {
    font-weight: 500;
    color: var(--wp--preset--color--main);
}
@media (max-width: 720px) {
    .eva-breadcrumbs {
        font-size: 1rem;
    }
}

/* ──────────────────────────────────────────────────────────────────
 * Card grid + clickable card (B2 stub, refined in C1)
 * Single <a> wraps each card. Inner CTA is aria-hidden visual affordance.
 * ────────────────────────────────────────────────────────────── */
.eva-card-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: var(--wp--preset--spacing--40);
    margin: var(--wp--preset--spacing--50) 0;
}
.eva-card {
    display: flex;
    flex-direction: column;
    text-decoration: none;
    color: inherit;
    background: var(--wp--preset--color--base, #FDFCFB);
    border: 1px solid var(--wp--preset--color--border-light, #C4D6CC);
    border-radius: 12px;
    overflow: hidden;
    transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}
.eva-card:hover,
.eva-card:focus-visible {
    transform: translateY(-2px);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
    border-color: var(--wp--preset--color--accent, #8B7BA5);
}
.eva-card:focus-visible {
    outline: 2px solid var(--wp--preset--color--accent, #8B7BA5);
    outline-offset: 2px;
}
.eva-card-media img {
    width: 100%;
    height: 200px;
    object-fit: cover;
    display: block;
}
.eva-card-body {
    padding: var(--wp--preset--spacing--50, 1.75rem);
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    flex: 1;
}
.eva-card-eyebrow {
    margin: 0;
    font-size: 0.8125rem;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: var(--wp--preset--color--teal, #5A8A8A);
}
.eva-card-title {
    margin: 0;
    font-family: var(--wp--preset--font-family--heading);
    font-size: 1.25rem;
    font-weight: 500;
    color: var(--wp--preset--color--main);
}
.eva-card-desc {
    margin: 0;
    font-size: 0.9375rem;
    line-height: 1.7;
    color: var(--wp--preset--color--main-accent);
}
.eva-card-cta {
    margin-top: auto;
    font-size: 0.9375rem;
    font-weight: 600;
    color: var(--wp--preset--color--accent, #8B7BA5);
}

/* Jump-nav dropdown (B2) */
.eva-jump-nav {
    margin: 0 auto var(--wp--preset--spacing--50);
    max-width: 720px;
    background: var(--wp--preset--color--tertiary, #F5F8F6);
    border-radius: 8px;
    padding: 0.75rem 1rem;
    font-family: var(--wp--preset--font-family--body);
}
.eva-jump-nav summary {
    cursor: pointer;
    font-weight: 600;
    color: var(--wp--preset--color--main);
    padding: 0.25rem 0;
}
.eva-jump-nav ul {
    list-style: none;
    margin: 0.75rem 0 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 0.5rem 1rem;
}
.eva-jump-nav a {
    color: var(--wp--preset--color--accent, #8B7BA5);
    text-decoration: none;
    font-size: 0.9375rem;
}
.eva-jump-nav a:hover,
.eva-jump-nav a:focus-visible {
    text-decoration: underline;
}

/* ──────────────────────────────────────────────────────────────────
 * Pathway tiles (Getting Started page) — equal-height clickable tiles.
 * Renders as a 2×2 grid on desktop, single column on mobile. CSS Grid
 * gives us automatic equal-height rows and clean wrapping without the
 * flex-basis math required when WP columns wrap. We override the WP
 * columns block's default flex display via grid on the container, then
 * force each .wp-block-column to fill its grid cell so the inner
 * .eva-service-card stretches uniformly. Combined with the C1
 * card-click overlay below, each tile is a uniform, fully clickable
 * target.
 * ────────────────────────────────────────────────────────────── */
.eva-pathway-tiles {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--wp--preset--spacing--40, 2rem);
    align-items: stretch !important;
}
.eva-pathway-tiles > .wp-block-column {
    flex: none !important;
    width: auto !important;
    display: flex !important;
    flex-direction: column !important;
}
.eva-pathway-tiles > .wp-block-column > .wp-block-group {
    flex: 1 !important;
    display: flex !important;
    flex-direction: column !important;
    height: 100%;
}
/* Mobile: stack tiles full-width */
@media (max-width: 781px) {
    .eva-pathway-tiles {
        grid-template-columns: 1fr;
    }
}

/* ──────────────────────────────────────────────────────────────────
 * C1 — Card-click overlay for existing service-cards and pathway-cards.
 * Makes the entire card surface clickable while preserving the inner
 * link as the single tab stop and screen-reader target. The first
 * <a> inside each card becomes the overlay; any subsequent links are
 * raised above the overlay to remain independently clickable.
 * ────────────────────────────────────────────────────────────── */
.eva-service-card,
.eva-pathway-card,
.eva-pro-card {
    position: relative;
    cursor: pointer;
    transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}
.eva-service-card:hover,
.eva-pathway-card:hover,
.eva-pro-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
}
.eva-service-card a:first-of-type,
.eva-pathway-card a:first-of-type,
.eva-pro-card a:first-of-type {
    position: static;
}
.eva-service-card a:first-of-type::after,
.eva-pathway-card a:first-of-type::after,
.eva-pro-card a:first-of-type::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
}
.eva-service-card a:first-of-type:focus-visible::after,
.eva-pathway-card a:first-of-type:focus-visible::after,
.eva-pro-card a:first-of-type:focus-visible::after {
    outline: 2px solid var(--wp--preset--color--accent, #8B7BA5);
    outline-offset: -2px;
    border-radius: 12px;
}
.eva-service-card a:not(:first-of-type),
.eva-pathway-card a:not(:first-of-type),
.eva-pro-card a:not(:first-of-type) {
    position: relative;
    z-index: 2;
}

/* ──────────────────────────────────────────────────────────────────
 * For Professionals tile grid — 3-col desktop, 1-col mobile.
 * Replaces the previous hand-rolled 3-rows-of-3 layout that left
 * trailing empty placeholder columns and produced an uneven width
 * for orphan tiles in the last row. CSS Grid keeps every cell at
 * 1/3 width regardless of tile count. .eva-pro-card supplies the
 * visual card chrome and is wired into the C1 overlay above so the
 * entire tile is a click target.
 * ────────────────────────────────────────────────────────────── */
.eva-pro-grid {
    display: grid !important;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--wp--preset--spacing--40, 2rem);
    align-items: stretch !important;
    margin-top: var(--wp--preset--spacing--40, 2rem);
}
.eva-pro-grid > .eva-pro-card {
    background: var(--wp--preset--color--tertiary, #F5F8F6);
    border: 1px solid var(--wp--preset--color--border-light, #C4D6CC);
    border-radius: 12px;
    padding: var(--wp--preset--spacing--50, 2.5rem) var(--wp--preset--spacing--40, 2rem);
    height: 100%;
    display: flex !important;
    flex-direction: column !important;
}
.eva-pro-grid > .eva-pro-card:hover {
    border-color: var(--wp--preset--color--accent, #8B7BA5);
}
@media (max-width: 781px) {
    .eva-pro-grid {
        grid-template-columns: 1fr;
    }
}

/* ──────────────────────────────────────────────────────────────────
 * Tile subheading consistency — center-align + breathing room.
 * Without this, the H3/H4 inside each tile inherits left alignment
 * from the constrained group layout, which made multi-line headings
 * (e.g. "EMDR & IFS-Informed EMDR Consultation") look ragged against
 * single-line ones (e.g. "Clinical Supervision"). Center alignment
 * stabilises the visual rhythm across the grid. Body copy stays
 * left-aligned for paragraph readability — only the heading centers.
 * Bottom margin bumped to 1.25rem to give clear separation between
 * subhead and body inside the tile.
 * ────────────────────────────────────────────────────────────── */
.eva-pro-card h3,
.eva-pro-card h4,
.eva-approach-card h3,
.eva-approach-card h4,
.eva-pathway-tiles .eva-service-card h3,
.eva-pathway-tiles .eva-service-card h4 {
    text-align: center !important;
    margin-bottom: 1.25rem !important;
}

/* ──────────────────────────────────────────────────────────────────
 * D2 — "Buy the Book" purchase chips (book-preview pattern).
 * Three sage-green commerce CTAs, ≥48px touch target, retailer
 * sub-label. Reads as a commerce action, not a generic link.
 * ────────────────────────────────────────────────────────────── */
.eva-buy-the-book {
    display: flex;
    flex-wrap: wrap;
    gap: var(--wp--preset--spacing--30, 1rem);
    margin: 1.25rem 0;
}
.eva-buy-the-book .eva-cta-chip {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    background: #5A7C6B;
    color: #fff;
    padding: 12px 24px;
    min-height: 56px;
    min-width: 200px;
    border-radius: 6px;
    font-family: var(--wp--preset--font-family--body);
    text-decoration: none;
    transition: background 0.2s ease, transform 0.2s ease;
}
.eva-buy-the-book .eva-cta-chip:hover,
.eva-buy-the-book .eva-cta-chip:focus-visible {
    background: #4A6C5B;
    transform: translateY(-1px);
}
.eva-buy-the-book .eva-cta-chip:focus-visible {
    outline: 2px solid #FDFCFA;
    outline-offset: 2px;
}
.eva-buy-the-book .eva-cta-chip-label {
    font-weight: 600;
    font-size: 1rem;
    line-height: 1.2;
}
.eva-buy-the-book .eva-cta-chip-sub {
    font-size: 0.8125rem;
    font-weight: 400;
    opacity: 0.9;
    margin-top: 2px;
    letter-spacing: 0.02em;
}

@media (max-width: 720px) {
    .eva-buy-the-book .eva-cta-chip {
        flex: 1 1 100%;
        min-width: 0;
    }
}

/* ──────────────────────────────────────────────────────────────────
 * Hustle Pro popup — typography overrides.
 * Hustle ships its own font stack; force EVA's Coranto 2 / Gibson
 * preset families and center the title. Scoped to .hustle-ui so it
 * applies to popups, slide-ins, and embedded modules alike.
 * ────────────────────────────────────────────────────────────── */
.hustle-ui .hustle-title,
.hustle-ui .hustle-content,
.hustle-ui .hustle-content p,
.hustle-ui .hustle-input,
.hustle-ui .hustle-input-label,
.hustle-ui .hustle-button,
.hustle-ui .hustle-success-content,
.hustle-ui .hustle-success-content p {
    font-family: var(--wp--preset--font-family--body) !important;
}

.hustle-ui .hustle-title,
.hustle-ui h3.hustle-title {
    font-family: var(--wp--preset--font-family--heading) !important;
    text-align: center !important;
}

.hustle-ui .hustle-group-title {
    text-align: center !important;
}

/* ──────────────────────────────────────────────────────────────────
 * Landing-page width: Book + About pages get the wider 1200px column
 * to match the global nav. The default page template wrapper
 * (.eva-page-content in templates/page.html) is a constrained layout
 * that caps its direct children at 820px via a generated
 * `> :where(:not(.alignleft):not(.alignright):not(.alignfull))` rule.
 * :has() widens only the wrappers that hold a landing pattern.
 * ────────────────────────────────────────────────────────────── */
.eva-page-content:has(.eva-page-book) > :where(:not(.alignleft):not(.alignright):not(.alignfull)),
.eva-page-content:has(.eva-page-about) > :where(:not(.alignleft):not(.alignright):not(.alignfull)) {
    max-width: 1200px;
}

/* Hide GetTerms floating reopen button — footer link handles re-consent */
.gt-cookie-reopen-btn {
    display: none !important;
}

/* ==========================================================================
   WP 7.0 block-gap serialization fix
   --------------------------------------------------------------------------
   WP 6.9.4 wrote each block's DEFAULT block-gap as a resolved literal value
   (e.g. `gap: 2em var(--wp--preset--spacing--70)`). WP 7.0 rewrites that same
   default to reference `var(--wp--preset--spacing--medium)`. This site's
   spacing scale is numeric (10–80) and never defines `medium`, so that
   variable is undefined, the whole `gap` shorthand becomes invalid, and the
   gap collapses to zero — which is what broke section/column/footer spacing
   after the 7.0 upgrade.

   `medium` is deliberately LEFT UNDEFINED (as on 6.9.4) so the global
   flow / constrained / flex spacing rules continue to compute to 0; this
   theme relies on explicit per-section padding, not on those globals.
   We only restore the specific block gaps 7.0 zeroed, using the exact
   literal values 6.9.4 emitted. Higher specificity than WP's single-class
   `.wp-container-*` rules, so these win.
   ────────────────────────────────────────────────────────────────────────── */

/* Welcome + Book sections — vertically-centered image/copy columns (was 2em / 70) */
.wp-block-columns.are-vertically-aligned-center {
    gap: 2em var(--wp--preset--spacing--70);
}

/* Book endorsement (blurb) columns (was 2em / 40) */
.eva-book-blurbs-section .wp-block-columns {
    gap: 2em var(--wp--preset--spacing--40);
}

/* Book lead-magnet button pair (was effectively 0.5em / 20) */
.eva-lead-magnet .wp-block-buttons {
    gap: 0.5em var(--wp--preset--spacing--20);
}

/* Footer columns (was 2em / 60) */
.eva-footer .wp-block-columns {
    gap: 2em var(--wp--preset--spacing--60);
}

/* Footer social icons (was 0.5em / 20) */
.eva-footer .wp-block-social-links {
    gap: 0.5em var(--wp--preset--spacing--20);
}