/*
Theme Name:   Endless GP Child
Theme URI:    https://endlessstaysco.com
Description:  Child theme of GeneratePress for the Endless three-lane rebuild. v2.0 adds the full component design skin (Fable, Phase 4 remediation) — every className used by the content package is styled here. Blueprint §5.4 / §6.1.
Author:       Endless Asset Management
Author URI:   https://endlessassetmanagement.com
Template:     generatepress
Version:      2.9.16
License:      GNU General Public License v2 or later
License URI:  http://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  endless-gp-child
*/

/* =========================================================
   1. BRAND TOKENS (mirror theme.json — change in BOTH files)
   ========================================================= */
:root {
	--endless-navy: #1E4D6B;
	--endless-navy-deep: #163B53;
	--endless-gold: #C9A962;
	--endless-gold-soft: #E9DDBF;
	--endless-sand: #F4EFE4;
	--endless-offwhite: #FAFAF8;
	--endless-dark: #2C2C2C;
	--endless-gray: #6B6B6B;
	--endless-line: #E3DFD3;
	--endless-font-heading: Georgia, 'Times New Roman', Times, serif;
	--endless-font-body: Arial, Helvetica, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
	--endless-radius: 10px;
	--endless-shadow: 0 2px 14px rgba(30, 77, 107, 0.08);
	--endless-band-pad: clamp(2.5rem, 6vw, 4.5rem);
}

/* =========================================================
   2. BASE
   ========================================================= */
body {
	font-family: var(--endless-font-body);
	background-color: var(--endless-offwhite);
	color: var(--endless-dark);
	font-size: 1.05rem;
	line-height: 1.65;
}
h1, h2, h3, h4, h5, h6 {
	font-family: var(--endless-font-heading);
	color: var(--endless-navy);
	line-height: 1.22;
}
h1 { font-size: clamp(2rem, 4.5vw, 3.1rem); }
h2 { font-size: clamp(1.5rem, 3vw, 2.1rem); }
h3 { font-size: clamp(1.2rem, 2.2vw, 1.5rem); }
a { color: var(--endless-navy); }
a:hover, a:focus { color: var(--endless-gold); }

/* Content width: center the page, kill the narrow-left wireframe look.
   §15 note: side gutters added Jul 10 2026 — prose previously touched the
   viewport edge at every width below 1120px. Full-bleed bands (§2 utility
   below) self-compensate: their calc(50% - 50vw) margins absorb any
   parent padding, so bands stay edge-to-edge. */
.grid-container, .site-content { max-width: 1120px; margin-left: auto; margin-right: auto; }
.site-content { padding: 0 clamp(1.1rem, 3vw, 2rem) 3rem; background: transparent; }
.separate-containers .inside-article { background: transparent; padding: 0; }

/* Duplicate-H1 guard: functions.php hides GP page titles via filter;
   this is the belt-and-suspenders fallback. Posts keep their titles. */
.page .entry-header .entry-title { display: none; }

/* Full-bleed band utility (our sections are groups inside the container) */
.announcement-bar, .hero-section, .market-hero, .listing-hero,
.lane-owner-band, .section-final-cta, .section-book-direct {
	width: 100vw; max-width: 100vw;
	margin-left: calc(50% - 50vw); margin-right: calc(50% - 50vw);
	padding-left: max(5vw, calc(50vw - 560px));
	padding-right: max(5vw, calc(50vw - 560px));
}

/* =========================================================
   3. HEADER / NAV
   ========================================================= */
.site-header { background: #fff; border-bottom: 1px solid var(--endless-line); }
.main-title a, .site-logo { font-family: var(--endless-font-heading); color: var(--endless-navy); }
.main-navigation a { font-size: 0.98rem; }
/* "Book Direct" nav button.
   §15 note: text was #fff on gold — measured 2.2:1 live (WCAG fail, needs
   4.5:1). Navy-deep on this gold measures 5.2:1. Hover flips to navy bg,
   where white text is 9:1. */
.main-navigation .book-direct-cta a, .menu-item.book-direct-cta a {
	background: var(--endless-gold); color: var(--endless-navy-deep) !important;
	border-radius: 999px; padding: 0.55em 1.4em !important;
	font-weight: 700; letter-spacing: 0.02em;
}
.main-navigation .book-direct-cta a:hover, .menu-item.book-direct-cta a:hover {
	background: var(--endless-navy); color: #fff !important;
}

/* Owner lane keeps an institutional header accent, not a full repaint */
body.lane-owner .site-header { border-bottom: 3px solid var(--endless-navy); }

/* =========================================================
   4. ANNOUNCEMENT BAR
   ========================================================= */
.announcement-bar { background: var(--endless-navy); padding-top: 0.55rem; padding-bottom: 0.55rem; }
.announcement-bar p { color: #fff; text-align: center; margin: 0 auto; font-size: 0.92rem; letter-spacing: 0.02em; }

/* =========================================================
   5. HEROES
   ========================================================= */
.hero-section, .market-hero, .listing-hero {
	padding-top: var(--endless-band-pad); padding-bottom: var(--endless-band-pad);
	background: linear-gradient(180deg, #fff 0%, var(--endless-sand) 100%);
	border-bottom: 3px solid var(--endless-gold);
	text-align: center;
}
/* When a cover image is added (media pass), .has-hero-image variant */
.hero-section.has-hero-image, .market-hero.has-hero-image {
	background-size: cover; background-position: center; position: relative; color: #fff;
}
.hero-eyebrow {
	font-family: var(--endless-font-body); font-size: 0.8rem; font-weight: 700;
	letter-spacing: 0.18em; color: var(--endless-gold); text-transform: uppercase; margin-bottom: 0.6rem;
}
/* text-transform:lowercase DELETED v2.9.13 — website uses professional capitalization (social-only aesthetic); see §35 */
.hero-h1-lowercase { font-size: clamp(2.3rem, 5.5vw, 3.6rem); margin: 0.2em 0 0.35em; }
.hero-subhead { max-width: 640px; margin: 0 auto 1.4rem; font-size: 1.12rem; color: var(--endless-dark); }
.market-lede-lowercase { font-family: var(--endless-font-heading); font-style: italic; color: var(--endless-navy); font-size: 1.25rem; max-width: 620px; margin: 0.4rem auto 1rem; }

/* Owner-lane heroes: navy band, white text, data-forward */
body.lane-owner .hero-section, .lane-owner.hero-section, .lane-owner .market-hero, .lane-owner.market-hero {
	background: linear-gradient(160deg, var(--endless-navy) 0%, var(--endless-navy-deep) 100%);
	border-bottom: 3px solid var(--endless-gold);
}
body.lane-owner .hero-section h1, body.lane-owner .market-hero h1,
body.lane-owner .hero-section p, body.lane-owner .market-hero p { color: #fff; }
body.lane-owner .hero-eyebrow { color: var(--endless-gold); }
.under-cta-line, .under-button { font-size: 0.85rem; color: var(--endless-gray); margin-top: 0.5rem; }
body.lane-owner .hero-section .under-cta-line { color: var(--endless-gold-soft); }

/* =========================================================
   6. BUTTONS
   ========================================================= */
.wp-block-button__link {
	background: var(--endless-navy); color: #fff; border-radius: 8px;
	padding: 0.75em 1.7em; font-weight: 700; font-family: var(--endless-font-body);
	transition: background 0.18s ease, transform 0.12s ease;
}
.wp-block-button__link:hover { background: var(--endless-gold); color: #fff; transform: translateY(-1px); }
.is-style-outline .wp-block-button__link {
	background: transparent; border: 2px solid var(--endless-navy); color: var(--endless-navy);
}
.is-style-outline .wp-block-button__link:hover { background: var(--endless-navy); color: #fff; }
body.lane-owner .wp-block-buttons .wp-block-button:first-child .wp-block-button__link { background: var(--endless-gold); }
body.lane-owner .wp-block-buttons .wp-block-button:first-child .wp-block-button__link:hover { background: #fff; color: var(--endless-navy); }

/* =========================================================
   7. GUEST COMPONENTS
   ========================================================= */
/* §15 note: was a 4px gold side-stripe (banned pattern, flagged by the
   design detector on both listing pages) — now a 1px full gold hairline
   frame, which reads as a certificate/stamp rather than a SaaS callout. */
.trust-stamp-block {
	background: #fff; border: 1px solid var(--endless-gold);
	border-radius: var(--endless-radius); box-shadow: var(--endless-shadow);
	padding: 1.2rem 1.5rem; margin: 1.5rem 0;
}
.trust-stamp-block p:first-child { font-weight: 700; color: var(--endless-navy); margin-bottom: 0.5rem; }
.trust-stamp-block ul { margin: 0; padding-left: 1.1rem; }
.trust-stamp-block li { margin: 0.25rem 0; list-style: none; position: relative; padding-left: 1.3rem; }
.trust-stamp-block li::before { content: "\2713"; color: var(--endless-gold); font-weight: 700; position: absolute; left: 0; }

.listing-subtitle-facts { color: var(--endless-gray); font-size: 1rem; letter-spacing: 0.03em; }
.listing-description { max-width: 720px; }
.listing-description p { margin-bottom: 1rem; }

.book-direct-block, .section-book-direct {
	background: var(--endless-sand); border-radius: var(--endless-radius);
	padding: 1.6rem 1.8rem; margin: 2rem 0; border: 1px solid var(--endless-gold-soft);
}
.section-book-direct { border-radius: 0; padding-top: var(--endless-band-pad); padding-bottom: var(--endless-band-pad); text-align: center; }
.book-direct-block p:first-child strong, .section-book-direct h2 { color: var(--endless-navy); }

.section-destinations, .section-reviews { margin: 3rem 0; }
.section-destinations .wp-block-columns, .market-listing-grid .wp-block-columns, .section-reviews .wp-block-columns { gap: 1.4rem; }
.section-destinations .wp-block-column, .market-listing-grid .wp-block-column, .section-reviews .wp-block-column {
	background: #fff; border: 1px solid var(--endless-line); border-radius: var(--endless-radius);
	box-shadow: var(--endless-shadow); padding: 1.4rem; transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.section-destinations .wp-block-column:hover, .market-listing-grid .wp-block-column:hover {
	transform: translateY(-3px); box-shadow: 0 6px 22px rgba(30,77,107,0.14);
}
.market-listing-grid h3, .section-destinations h3 { margin-top: 0.4rem; font-size: 1.15rem; }
.market-listing-grid img, .section-destinations img { border-radius: 8px; width: 100%; height: 200px; object-fit: cover; }

.search-widget-slot {
	background: #fff; border: 2px dashed var(--endless-line); border-radius: var(--endless-radius);
	padding: 1.4rem; text-align: center; color: var(--endless-gray); margin: 1.5rem auto; max-width: 760px;
}

/* =========================================================
   8. OWNER COMPONENTS
   ========================================================= */
.section-pillars .wp-block-column, .section-proof .wp-block-column, .section-how-it-works .wp-block-column {
	background: #fff; border-top: 4px solid var(--endless-navy); border-radius: 0 0 var(--endless-radius) var(--endless-radius);
	box-shadow: var(--endless-shadow); padding: 1.6rem;
}
.section-pillars h3, .section-how-it-works h3 { margin-top: 0; font-size: 1.2rem; }
/* §15 note: side-stripe → hairline, same family as .trust-stamp-block */
.section-revpar-truth {
	background: #fff; border: 1px solid var(--endless-gold); border-radius: var(--endless-radius);
	padding: 2rem; margin: 2.5rem 0; box-shadow: var(--endless-shadow);
}
.section-proof { margin: 2.5rem 0; }
.section-scarcity {
	background: var(--endless-gold-soft); border-radius: var(--endless-radius);
	padding: 1rem 1.5rem; margin: 1.6rem 0; font-weight: 700; color: var(--endless-navy); text-align: center;
}
.section-report-offer, .section-pga-block, .report-lp-post-download {
	background: #fff; border: 1px solid var(--endless-line); border-radius: var(--endless-radius);
	box-shadow: var(--endless-shadow); padding: 2rem; margin: 2.5rem 0;
}
.section-report-offer h2, .section-pga-block h2 { margin-top: 0; }
.section-profit-guarantee {
	background: var(--endless-navy); color: #fff; border-radius: var(--endless-radius);
	padding: 2.2rem; margin: 2.5rem 0;
}
.section-profit-guarantee h2, .section-profit-guarantee h3 { color: var(--endless-gold); }
.section-profit-guarantee p { color: #fff; }
.section-who-for { border-top: 1px solid var(--endless-line); border-bottom: 1px solid var(--endless-line); padding: 1.8rem 0; margin: 2.5rem 0; }
.section-final-cta {
	background: linear-gradient(160deg, var(--endless-navy) 0%, var(--endless-navy-deep) 100%);
	padding-top: var(--endless-band-pad); padding-bottom: var(--endless-band-pad);
	text-align: center; margin-top: 3rem;
}
.section-final-cta h2, .section-final-cta p { color: #fff; }
.section-final-cta em, .section-final-cta .under-cta-line { color: var(--endless-gold-soft); }
.trust-line { font-size: 0.9rem; color: var(--endless-gray); font-style: italic; }
.standfirst { font-size: 1.2rem; color: var(--endless-navy); font-family: var(--endless-font-heading); }

/* Stat/trust bars rendered by endless-core shortcodes */
.endless-statbar, .endless-trustbar {
	display: flex; flex-wrap: wrap; justify-content: center; gap: 2.5rem;
	background: #fff; border-top: 1px solid var(--endless-line); border-bottom: 1px solid var(--endless-line);
	padding: 1.4rem 1rem; margin: 2rem 0; text-align: center;
}
.endless-statbar .stat-value { font-family: var(--endless-font-heading); font-size: 1.9rem; color: var(--endless-navy); display: block; }
.endless-statbar .stat-label, .endless-trustbar .badge-label { font-size: 0.82rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--endless-gray); }

/* =========================================================
   9. FAQ / FORMS / BOOKING
   ========================================================= */
.section-faq details, .wp-block-details {
	background: #fff; border: 1px solid var(--endless-line); border-radius: 8px;
	padding: 0.9rem 1.2rem; margin-bottom: 0.7rem;
}
.section-faq summary, .wp-block-details summary {
	font-weight: 700; color: var(--endless-navy); cursor: pointer; font-size: 1.02rem;
}
/* §15 note: open-state side-stripe → full gold border, same family */
.section-faq details[open], .wp-block-details[open] { border-color: var(--endless-gold); }
.section-faq details p { margin: 0.7rem 0 0.2rem; }

.form-placeholder {
	border: 2px dashed var(--endless-gold); background: #fff; border-radius: var(--endless-radius);
	padding: 1.5rem; text-align: center; color: var(--endless-gray);
}
.fluentform { background: #fff; border: 1px solid var(--endless-line); border-radius: var(--endless-radius); padding: 1.5rem; box-shadow: var(--endless-shadow); }
.fluentform .ff-btn-submit { background: var(--endless-gold) !important; border-color: var(--endless-gold) !important; font-weight: 700; }

.endless-booking-engine {
	background: #fff; border: 1px solid var(--endless-line); border-radius: var(--endless-radius);
	box-shadow: var(--endless-shadow); padding: 1.5rem; margin: 2rem 0; min-height: 120px;
}
.endless-booking-fallback { text-align: center; color: var(--endless-gray); font-size: 0.95rem; margin-top: 0.8rem; }

/* =========================================================
   10. FOOTER / LEGAL / MISC
   ========================================================= */
.site-footer { background: var(--endless-navy-deep); }
.site-footer, .site-info, .site-footer a, .inside-site-info { color: rgba(255,255,255,0.85); }
/* §15 note: GP paints .site-info white via its own defaults, which put our
   white text on a white bar — the footer line measured 1.0:1 (invisible)
   on every page. Assert the navy bar the design intended. */
.site-footer .site-info, .site-info { background-color: var(--endless-navy-deep); }
.site-footer a:hover { color: var(--endless-gold); }
.footer-widgets { background: var(--endless-navy); color: rgba(255,255,255,0.85); }
.footer-widgets a { color: rgba(255,255,255,0.85); }
.footer-widgets .widget-title { color: var(--endless-gold); font-family: var(--endless-font-body); font-size: 0.85rem; letter-spacing: 0.12em; text-transform: uppercase; }
.legal-page { max-width: 720px; }

/* =========================================================
   11. RESPONSIVE POLISH
   ========================================================= */
@media (max-width: 768px) {
	.hero-section, .market-hero { text-align: left; }
	.hero-subhead, .market-lede-lowercase { margin-left: 0; }
	.endless-statbar, .endless-trustbar { gap: 1.2rem; }
	.section-report-offer, .section-pga-block, .section-profit-guarantee { padding: 1.4rem; }
}

/* =========================================================
   12. RE-AUDIT PATCHES (Fable, Jul 8 2026 — post session-2)
   ========================================================= */
/* 100vw band scrollbar overflow guard */
html, body { overflow-x: hidden; }

/* GP's default button gray (#55555E) was beating these rules via
   global-styles load order — hard-assert the brand buttons. */
.wp-block-button__link { background: var(--endless-navy) !important; color: #fff !important; }
.wp-block-button__link:hover { background: var(--endless-gold) !important; color: #fff !important; }
.is-style-outline .wp-block-button__link { background: transparent !important; color: var(--endless-navy) !important; border: 2px solid var(--endless-navy); }
.is-style-outline .wp-block-button__link:hover { background: var(--endless-navy) !important; color: #fff !important; }
/* §15 note: white-on-gold measured 2.2:1 (same failure family as the
   Book Direct pill in §3) — the owner lane's PRIMARY conversion button.
   Navy-deep on gold = 5.2:1; hover already flips to white bg + navy. */
body.lane-owner .wp-block-buttons .wp-block-button:first-child .wp-block-button__link { background: var(--endless-gold) !important; color: var(--endless-navy-deep) !important; }
body.lane-owner .wp-block-buttons .wp-block-button:first-child .wp-block-button__link:hover { background: #fff !important; color: var(--endless-navy) !important; }

/* Text contrast on image covers (audit: gold eyebrow illegible on photo) */
.wp-block-cover .hero-eyebrow { color: var(--endless-gold-soft); text-shadow: 0 1px 10px rgba(0,0,0,0.5); }
.wp-block-cover h1, .wp-block-cover h2, .wp-block-cover p { text-shadow: 0 1px 12px rgba(0,0,0,0.35); }
.wp-block-cover .is-style-outline .wp-block-button__link { border-color: #fff; color: #fff !important; }
.wp-block-cover .is-style-outline .wp-block-button__link:hover { background: #fff !important; color: var(--endless-navy) !important; }

/* Featured images on listing pages: soften into the design */
.page-header-image img.wp-post-image { border-radius: var(--endless-radius); }

/* Owner-lane hero outline button (e.g. "Get the Free Market Report") was
   inheriting the default navy-on-navy treatment - confirmed via computed
   style: navy text + navy border directly on the navy hero gradient
   (contrast ~1:1, illegible). Same fix family as the cover-image contrast
   patch above, extended to the lane-owner hero/market-hero band. */
body.lane-owner .hero-section .is-style-outline .wp-block-button__link,
body.lane-owner .market-hero .is-style-outline .wp-block-button__link,
.lane-owner.hero-section .is-style-outline .wp-block-button__link,
.lane-owner.market-hero .is-style-outline .wp-block-button__link {
	border-color: #fff; color: #fff !important;
}
body.lane-owner .hero-section .is-style-outline .wp-block-button__link:hover,
body.lane-owner .market-hero .is-style-outline .wp-block-button__link:hover,
.lane-owner.hero-section .is-style-outline .wp-block-button__link:hover,
.lane-owner.market-hero .is-style-outline .wp-block-button__link:hover {
	background: #fff !important; color: var(--endless-navy) !important;
}

/* =========================================================
   13. BUG-3B FIX (Fable ruling, Jul 9 2026): GeneratePress
   auto-renders the featured image as a bare full-width
   .page-header-image ABOVE page content, pushing the listing
   title ~770px below the fold and duplicating gallery imagery.
   Keep GP's stray render hidden on ALL pages — §15a below
   re-renders the same featured image INSIDE the content flow
   (via functions.php) as the designed listing photo hero.
   Featured images stay SET (og:image / hero / future use).
   ========================================================= */
.page .featured-image.page-header-image { display: none; }

/* =========================================================
   14. BUG FIX (session 4, Jul 9 2026): .section-book-direct
   full-bleed band was rendering ~456px off the right edge of
   the viewport (verified via getBoundingClientRect, not just
   visual impression — e.g. the phone number in "skip the fees,
   keep the five stars" was silently clipped, no scrollbar since
   html/body already have overflow-x:hidden from patch #12).
   Root cause: §7's shared ".book-direct-block, .section-book-direct"
   rule sets the shorthand "margin: 2rem 0", which resets
   margin-left/right to 0 and clobbers §2's full-bleed
   "margin-left/right: calc(50% - 50vw)" for .section-book-direct
   specifically (same-specificity, later source order wins).
   Re-assert the full-bleed margin here so the band actually
   spans the viewport instead of just being 100vw *wide* while
   still left-offset by the constrained content column.
   .book-direct-block (the inline card variant) is untouched and
   keeps its normal margin: 2rem 0.
   ========================================================= */
.section-book-direct {
	margin-left: calc(50% - 50vw) !important;
	margin-right: calc(50% - 50vw) !important;
}

/* =========================================================
   15. IMPECCABLE CRITIQUE FIXES (Fable, Jul 10 2026)
   Live-verified on staging via style injection + in-page
   design-detector re-runs BEFORE landing here:
   AST listing 9 findings → 0 element-level; PGA page 5 → 0
   element-level (remaining body-level items are by-design
   Arial [web lane runs the Blueprint §6.1 navy/Georgia/Arial
   system per Cody 7/10/2026] and the content-level H1→H3
   heading skip, tracked in the content backlog).
   In-place edits elsewhere in this file, same session:
   - header  Version 2.3.0 → 2.4.0
   - §2      .site-content side gutters (prose touched the
             viewport edge below 1120px; bands self-compensate)
   - §3      Book Direct pill 2.2:1 → navy-deep text 5.2:1
   - §7      trust-stamp side-stripe → 1px gold hairline frame
   - §8      .section-revpar-truth side-stripe → hairline
   - §9      FAQ open-state side-stripe → full gold border
   - §10     .site-info white-on-white (1.0:1, invisible
             footer) → navy-deep bar
   - §12     owner gold button 2.2:1 → navy-deep text
   - §13     comment updated: §15a is the featured image's real
             home now
   functions.php, same session: duplicate child-stylesheet
   enqueue removed (GP already enqueues it — style.css was
   loading twice live); ineffective bug-3b remove_action
   replaced by the .endless-hero-photo content filter that
   §15a styles; lane-aware header (EAM wordmark + PGA pill
   on /property-management/ pages).
   ========================================================= */

/* 15a. Listing photo hero. functions.php prepends
   <div class="endless-hero-photo"><img …></div> to the content
   of any page whose content carries .listing-hero and has a
   featured image. Full-bleed photo plate with a soft navy
   scrim; the title band floats over the photo's lower edge as
   a white card. The photo was previously downloading ~700–830KB
   per page while display:none'd — now it's the LCP, loaded
   eager/high-priority. Degrades cleanly: no featured image →
   no plate, the gradient band hero below §5 still applies. */
.endless-hero-photo {
	position: relative;
	width: 100vw; max-width: 100vw;
	margin: 0 calc(50% - 50vw);
	height: clamp(400px, 52vh, 560px);
	overflow: hidden;
}
.endless-hero-photo img, .endless-hero-photo-img {
	width: 100%; height: 100%; object-fit: cover;
	border-radius: 0; display: block;
}
.endless-hero-photo::after {
	content: ""; position: absolute; inset: 0;
	background: linear-gradient(180deg, rgba(22,59,83,0.05) 0%, rgba(22,59,83,0.38) 100%);
}
.endless-hero-photo + .listing-hero {
	position: relative; z-index: 2;
	background: #fff;
	width: min(880px, calc(100% - 2.4rem)); max-width: 880px;
	margin: -110px auto 0;
	padding: clamp(1.6rem, 3vw, 2.4rem) clamp(1.4rem, 3vw, 2.6rem);
	border: 0; border-radius: var(--endless-radius);
	box-shadow: 0 1px 3px rgba(12,24,32,0.10), 0 16px 32px -14px rgba(12,24,32,0.30);
	text-align: center;
}
/* Align the trust stamp + prose column with the floating card */
body:has(.endless-hero-photo) .trust-stamp-block,
body:has(.endless-hero-photo) .listing-description {
	max-width: 880px; margin-left: auto; margin-right: auto;
}

/* 15b. Measure cap: body copy rendered at 86–133 chars/line
   (canon 65–75, detector threshold 80). ch-based so the cap
   holds if the font ever changes. Paragraphs inside centered
   bands re-center their capped box. */
.entry-content p, .entry-content li { max-width: 70ch; }
.listing-hero p, .hero-section p, .market-hero p,
.section-final-cta p, .section-book-direct p { margin-left: auto; margin-right: auto; }

/* =========================================================
   16. LISTING GALLERY (Fable, Jul 15 2026)

   The session-2 media pass inserted listing photos as a core
   `columns-4` gallery block. Nothing styled it, so core's flex
   layout resolved to 246×164px on desktop and 158×105px on
   mobile — postage stamps on a page whose entire job is selling
   a stay. This replaces core's flex layout with a 2-up grid so
   the photography lands at ~520px.

   The gallery deliberately runs to the full content width while
   prose stays capped at 880px (§15a): the photos are the product,
   so they break the measure. Canon §3B: "Photography over
   iconography. Large-format property photos."

   `!important` on the sizing properties is load-order defence —
   core's block-library CSS enqueues after the child theme and
   sets per-figure widths from the `columns-N` class (same issue
   §12 documents for buttons).
   ========================================================= */
.entry-content .wp-block-gallery.has-nested-images {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(420px, 1fr));
	gap: 14px;
	margin: 2.4rem auto 2.8rem;
	max-width: 100%;
}

.entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image {
	width: auto !important;
	flex-basis: auto !important;
	max-width: none !important;
	margin: 0;
	border-radius: var(--endless-radius);
	overflow: hidden;
	border: 1px solid var(--endless-line);
	box-shadow: var(--endless-shadow);
	transition: transform .45s cubic-bezier(.16, 1, .3, 1),
	            box-shadow .45s cubic-bezier(.16, 1, .3, 1);
}

/* Uniform crop: the property folders mix landscape and portrait
   shots, and a ragged gallery reads as an accident, not a choice. */
.entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image img {
	display: block;
	width: 100%;
	height: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
	border-radius: 0;
}

.entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image:hover {
	transform: translateY(-3px);
	box-shadow: 0 4px 20px rgba(30, 77, 107, 0.14),
	            0 18px 36px -18px rgba(30, 77, 107, 0.30);
}

@media (prefers-reduced-motion: reduce) {
	.entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image {
		transition: none;
	}
	.entry-content .wp-block-gallery.has-nested-images > figure.wp-block-image:hover {
		transform: none;
		box-shadow: var(--endless-shadow);
	}
}

/* Single column below the 2-up breakpoint — a 420px minmax track
   would otherwise overflow a 375px viewport. */
@media (max-width: 600px) {
	.entry-content .wp-block-gallery.has-nested-images {
		grid-template-columns: 1fr;
		gap: 10px;
	}
}

/* =========================================================
   17. HEADER LOGO (Cody, Jul 15 2026)

   functions.php feeds the bundled lockup to GeneratePress via
   the generate_logo / generate_retina_logo filters. The mark is
   3.5:1, so height is the control dimension — width follows.
   68px keeps the ENDLESS cap-height legible and the "Stays"
   script from muddying, without inflating the header band.

   .site-branding (GP's text site-title + tagline) is hidden
   because the logo now carries the brand — otherwise the header
   renders the wordmark twice. The <img> alt still carries the
   site name, so the accessible name survives.
   Canon §3B rule 5: "Brand lockup present."
   ========================================================= */
.site-header .site-logo {
	display: flex;
	align-items: center;
}

.site-header .site-logo img,
.site-header img.header-image {
	height: 68px;
	width: auto;
	max-width: 100%;
	display: block;
}

.site-header .site-branding {
	display: none;
}

@media (max-width: 1024px) {
	.site-header .site-logo img,
	.site-header img.header-image { height: 56px; }
}

@media (max-width: 768px) {
	.site-header .site-logo img,
	.site-header img.header-image { height: 46px; }
}

/* =========================================================
   18. PREMIUM REFINEMENT LAYER (Opus, Jul 16 2026)

   Goal (Cody, 7/16): mesh the WP framework pages (home id 8,
   owner id 14) with the "crisp" premium direct-booking
   aesthetic (A Shore Thing standalone) so they read as the
   same family as the premium listing pages — WITHIN the
   committed navy/gold/cream + Georgia/Arial system
   (Design Language §1.2; §0 prime directive: refine, don't
   replace). Purely ADDITIVE, layered on §1–17 so it is one
   reviewable diff and rolls back by deletion — the v2.7
   gallery/logo/favicon/contrast work is untouched.

   Moves borrowed from the AST premium page:
   · richer neutral + navy token scale (mist/pebble, navy soft/pale)
   · bigger, tighter serif display type (negative tracking)
   · gold-tick tracked-uppercase eyebrows
   · pill CTAs (primary navy + ghost), softer/deeper shadows
   · larger card radii + hairline pebble borders + hover lift;
     accents done as INSET box-shadow so they respect the
     radius (impeccable border-accent-on-rounded guard)
   · gold-spine serif stats; generous section rhythm; a navy
     guest "book direct" conversion band
   ========================================================= */

/* 18.0 Extended tokens (add to §1; never invent per-artifact — canon §5.5) */
:root {
	--endless-navy-soft: #3A6E8F;
	--endless-navy-pale: #C7D8E2;
	--endless-mist: #EAEEF1;
	--endless-pebble: #E3DFD6;
	--endless-text-muted: #5D6B74; /* was #6B7A83 (4.24:1 on off-white = WCAG fail); #5D6B74 -> 5.26:1 (Opus 7/16) */
	--endless-text-soft: #9AA6AD;
	--endless-gold-br: #D9BE83;
	--endless-radius-lg: 16px;
	--endless-shadow-soft: 0 2px 10px rgba(20, 56, 79, 0.05), 0 18px 44px -22px rgba(20, 56, 79, 0.18);
	--endless-shadow-lift: 0 22px 54px -20px rgba(20, 56, 79, 0.24);
	--endless-section-pad: clamp(4rem, 8vw, 7rem);
}

/* 18.1 Typography — confident serif display, tighter tracking */
h1, h2 { letter-spacing: -0.015em; }
h1 { line-height: 1.06; }
h2 { line-height: 1.14; }
.hero-h1-lowercase { font-size: clamp(2.6rem, 6vw, 4.6rem); line-height: 1.05; letter-spacing: -0.02em; }
.section-featured-homes h2, .section-destinations h2, .section-pivot h2, .section-reviews h2 { font-size: clamp(1.9rem, 3.6vw, 2.9rem); }
.hero-subhead { font-size: clamp(1.05rem, 1.6vw, 1.2rem); color: var(--endless-text-muted); }
.section-featured-homes > p, .section-destinations > p, .section-pivot > p { color: var(--endless-text-muted); }

/* 18.2 Eyebrow — gold tick + tracked caps */
.hero-eyebrow { display: inline-flex; align-items: center; gap: 0.7em; letter-spacing: 0.2em; }
.hero-eyebrow::before { content: ""; width: 26px; height: 2px; background: var(--endless-gold); display: inline-block; flex: 0 0 auto; }
/* On the navy owner hero the tick reads better in the softer gold */
body.lane-owner .hero-eyebrow::before { background: var(--endless-gold-br); }

/* 18.3 CTAs — pill, refined lift */
.wp-block-button__link { border-radius: 999px !important; padding: 0.85em 2em; letter-spacing: 0.01em; }
.wp-block-button:not(.is-style-outline) .wp-block-button__link { box-shadow: 0 12px 26px -14px rgba(20, 56, 79, 0.55); }

/* 18.4 Generous section rhythm; one full-bleed sand field to alternate cream */
.section-featured-homes, .section-destinations, .section-pivot, .section-reviews {
	padding-top: var(--endless-section-pad); padding-bottom: var(--endless-section-pad); margin: 0;
}
.hero-section { padding-top: clamp(3.5rem, 7vw, 6rem); padding-bottom: clamp(3.5rem, 7vw, 6rem); }
.section-destinations {
	width: 100vw; max-width: 100vw; margin-left: calc(50% - 50vw); margin-right: calc(50% - 50vw);
	padding-left: max(5vw, calc(50vw - 560px)); padding-right: max(5vw, calc(50vw - 560px));
	background: var(--endless-sand);
}
.section-featured-homes > h2, .section-destinations > h2, .section-pivot > h2,
.section-featured-homes > p, .section-destinations > p {
	text-align: center; margin-left: auto; margin-right: auto;
}

/* 18.5 The 9-home grid (home page). Accent = inset shadow, respects radius. */
.es-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; margin: 2.6rem 0 2.2rem; }
.es-card {
	display: flex; flex-direction: column; gap: 0.3rem;
	background: #fff; border: 1px solid var(--endless-pebble); border-radius: var(--endless-radius-lg);
	padding: 1.55rem 1.5rem 1.4rem; text-decoration: none; color: var(--endless-dark);
	box-shadow: inset 0 3px 0 var(--endless-gold), var(--endless-shadow-soft);
	transition: transform .35s cubic-bezier(.16, 1, .3, 1), box-shadow .35s cubic-bezier(.16, 1, .3, 1), border-color .3s;
}
.es-card:hover { transform: translateY(-4px); border-color: var(--endless-gold); box-shadow: inset 0 3px 0 var(--endless-gold), var(--endless-shadow-lift); }
.es-card-market { font-size: 0.68rem; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase; color: var(--endless-navy-soft); }
.es-name { font-family: var(--endless-font-heading); color: var(--endless-navy); font-size: 1.4rem; line-height: 1.2; margin: 0.15rem 0 0.05rem; letter-spacing: -0.01em; }
.es-town { color: var(--endless-text-muted); font-size: 0.92rem; }
.es-facts { color: var(--endless-text-muted); font-size: 0.85rem; letter-spacing: 0.01em; margin-top: 0.1rem; }
.es-more { margin-top: 0.95rem; color: var(--endless-navy); font-weight: 700; font-size: 0.9rem; }
.es-card:hover .es-more { color: var(--endless-gold); }
@media (prefers-reduced-motion: reduce) { .es-card, .es-card:hover { transition: none; transform: none; } }

/* 18.6 Destination tiles + market/listing cards — premium refit (hairline, lift) */
.section-destinations .wp-block-column, .market-listing-grid .wp-block-column {
	border: 1px solid var(--endless-pebble); border-radius: var(--endless-radius-lg);
	box-shadow: var(--endless-shadow-soft); padding: 1.7rem 1.5rem;
}
.section-destinations .wp-block-column:hover, .market-listing-grid .wp-block-column:hover {
	transform: translateY(-4px); box-shadow: var(--endless-shadow-lift);
}
.section-destinations h3 { font-size: 1.32rem; letter-spacing: -0.01em; margin-top: 0; }
.section-destinations .wp-block-column p:first-of-type { color: var(--endless-text-muted); }
.section-destinations .wp-block-column a { font-weight: 700; }

/* 18.7 Pivot tiles (the single guest→owner touchpoint) — navy TOP inset accent
   (a left/right accent would be the banned side-tab tell, canon §15). */
.section-pivot .wp-block-column {
	background: #fff; border: 1px solid var(--endless-pebble); border-radius: var(--endless-radius-lg);
	box-shadow: inset 0 3px 0 var(--endless-navy), var(--endless-shadow-soft); padding: 1.6rem 1.7rem;
}

/* 18.8 Trust/stat bar — gold-spine serif stats (accent via inset, respects nothing rounded here) */
.endless-statbar, .endless-trustbar { gap: 2.6rem; border: 0; border-top: 1px solid var(--endless-line); border-bottom: 1px solid var(--endless-line); padding: 2rem 1rem; }
.endless-statbar > div, .endless-trustbar > div { border-left: 3px solid var(--endless-gold); padding-left: 1.1rem; text-align: left; }
.endless-statbar .stat-value { font-size: clamp(2rem, 3vw, 2.6rem); line-height: 1; letter-spacing: -0.02em; }
.endless-statbar .stat-label, .endless-trustbar .badge-label { letter-spacing: 0.1em; }

/* 18.9 Guest "book direct" — navy conversion band (was sand); owner final-cta already navy */
.lane-guest.section-book-direct {
	background: linear-gradient(160deg, var(--endless-navy) 0%, var(--endless-navy-deep) 100%);
	border-top: 3px solid var(--endless-gold);
}
.lane-guest.section-book-direct h2 { color: #fff; }
.lane-guest.section-book-direct p { color: rgba(255, 255, 255, 0.9); }
.lane-guest.section-book-direct strong { color: var(--endless-gold-br); }

/* 18.10 FAQ — slightly quieter borders on the premium field */
.section-faq summary { font-size: 1.04rem; }
.section-faq details, .wp-block-details { border-color: var(--endless-pebble); }

/* 18.11 Owner-lane premium (pillars, how-it-works) — navy inset accent (no border+radius clash) */
body.lane-owner .section-pillars .wp-block-column,
body.lane-owner .section-how-it-works .wp-block-column {
	border: 1px solid var(--endless-pebble); border-radius: var(--endless-radius-lg);
	box-shadow: inset 0 3px 0 var(--endless-navy), var(--endless-shadow-soft); padding: 1.9rem 1.7rem;
}
body.lane-owner .section-pillars h3, body.lane-owner .section-how-it-works h3 { letter-spacing: -0.01em; }
body.lane-owner .section-revpar-truth { border-radius: var(--endless-radius-lg); padding: clamp(1.8rem, 3vw, 2.6rem); box-shadow: var(--endless-shadow-soft); }

/* 18.12 Responsive */
@media (max-width: 900px) { .es-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) {
	.es-grid { grid-template-columns: 1fr; }
	.endless-statbar > div, .endless-trustbar > div { border-left: 0; border-top: 3px solid var(--endless-gold); padding-left: 0; padding-top: 0.6rem; }
}

/* =========================================================
   19. PHOTO-FORWARD PROPERTY CARDS (Cody, Jul 16 2026)

   Cody's call: drop the market-grouping pages; run ONE Properties page +
   the homepage grid, each card led by a hero photo (mirrors the OwnerRez
   /properties section) rather than a text-only card. This overrides §18.5's
   text card: photo on top, gold hairline, details below. Same .es-grid.
   Hero images are hotlinked to the Airbnb CDN like the premium property
   pages (a post-launch rehost is tracked in the polish punch list).
   ========================================================= */
.es-card { padding: 0 !important; gap: 0 !important; overflow: hidden; box-shadow: var(--endless-shadow-soft); }
.es-card:hover { box-shadow: var(--endless-shadow-lift); }
.es-card-photo { display: block; aspect-ratio: 3 / 2; overflow: hidden; background: var(--endless-sand); }
.es-card-photo img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .6s cubic-bezier(.16, 1, .3, 1); }
.es-card:hover .es-card-photo img { transform: scale(1.045); }
.es-card-body { display: flex; flex-direction: column; gap: 0.28rem; padding: 1.15rem 1.3rem 1.3rem; border-top: 3px solid var(--endless-gold); }
@media (prefers-reduced-motion: reduce) {
	.es-card-photo img { transition: none; }
	.es-card:hover .es-card-photo img { transform: none; }
}

/* =========================================================
   20. LOWER-POLISH FIXES (Opus, Jul 16 2026 — Fable review)
   [#39] Link hover/focus was gold (~2.2:1 on the light fields, same failure
   family as the §15 pill fix; a:focus also left keyboard-focused links nearly
   invisible). Default to navy-deep on light; gold hover is restored on the dark
   bands where navy-deep would vanish.
   [#41] Extend §18's premium display-type scale to the owner-lane sections so the
   owner page reads as the institutional variant of the home page, not a size-class
   below it.
   ========================================================= */
a:hover, a:focus { color: var(--endless-navy-deep); text-decoration-color: var(--endless-gold); }
.announcement-bar a:hover, .section-book-direct a:hover, .section-final-cta a:hover,
.site-footer a:hover, .footer-widgets a:hover, .section-profit-guarantee a:hover,
body.lane-owner .hero-section a:hover, body.lane-owner .market-hero a:hover {
	color: var(--endless-gold);
}

body.lane-owner .section-pillars h2, body.lane-owner .section-revpar-truth h2,
body.lane-owner .section-who-for h2, body.lane-owner .section-how-it-works h2,
body.lane-owner .section-final-cta h2, body.lane-owner .section-faq h2 {
	font-size: clamp(1.7rem, 3.2vw, 2.5rem);
}
body.lane-owner .hero-section h1 { font-size: clamp(2.4rem, 5vw, 3.8rem); }

/* =========================================================
   21. BOOKING WIDGET PROPORTIONS (v2.9.1) — premium listing pages
   The OwnerRez iframe auto-sizes its HEIGHT to content (postMessage),
   but fills whatever width it gets: at ~914px the compact booking form
   drowns in dead space. Cap + center every theme's widget card — the
   wrapper classes all end in "-widget-wrap" (ast/tbb/bfc/ter/teh/brz/
   trb + l93 x2) — and release widget.js's inline min-height:600px
   floor so short forms don't force empty space. :has() scopes the cap
   to actual booking wrappers; browsers without :has() keep the current
   full-width look (harmless fallback).
   ========================================================= */
div[class*="-widget-wrap"]:has(.ownerrez-widget) { max-width: 680px; margin-left: auto; margin-right: auto; }
.ownerrez-widget { min-height: 320px !important; }
.ownerrez-widget iframe { display: block; width: 100% !important; }

/* =========================================================
   22. PREMIUM SECTION RHYTHM (v2.9.2) — listing pages
   The BSTRW fragments were designed standalone with 110-150px
   section paddings; boxed under the site chrome those stack into
   ~260px dead bands at every seam (Cody, 7/17). <section> elements
   exist ONLY in the 9 premium fragments (framework pages are all
   wp:group divs), so this caps the rhythm to the canon 64-96px
   scale sitewide in one rule without touching framework pages.
   ========================================================= */
.site-content section[class] {
	padding-top: clamp(48px, 7vw, 84px) !important;
	padding-bottom: clamp(48px, 7vw, 84px) !important;
}

/* =========================================================
   23. GALLERY AIR + FOOTER CENTERING (v2.9.3) — listing pages
   (a) The hero→gallery→direct-band cluster kept its standalone
   ~12px gaps against the new 84px rhythm — give the photo collage
   its own air ([class*="-gallery"] = the 7 coastal fragments; the
   l93 pages flow differently and need none).
   (b) Fragment footers cap paragraph width (~28em) without auto
   margins, pinning centered-text blocks to the LEFT of the centered
   footer — center the blocks themselves.
   ========================================================= */
.site-content div[class*="-gallery"] {
	margin-top: clamp(16px, 2.5vw, 28px) !important;
	margin-bottom: clamp(32px, 5vw, 56px) !important;
}
.site-content footer[class*="-footer"] p {
	margin-left: auto !important;
	margin-right: auto !important;
}

/* =========================================================
   24. CONTRAST POLISH (v2.9.4) — impeccable audit P1/P2
   The 7 coastal fragments declare --text-muted:#6B7A83 (4.24:1 on
   light fields) and --text-soft:#9AA6AD (2.38:1 captions) on their
   root wrappers — the same gray §18 retired from the theme. Same-
   element !important overrides win the cascade. The l93 (mountain)
   pages use different dark-theme tokens that measure compliant and
   are untouched. Scoped re-inks: the pale-blue booking band needs
   one step more ink; the navy direct band's soft list text was
   4.01:1 — lifted to ~7.5:1. Footer credit links get WCAG 2.2
   minimum target height (24px) via padding, no layout shift.
   ========================================================= */
.ast, .tbb, .bfc, .ter, .teh, .brz, .trb {
	--text-muted: #5D6B74 !important;
	--text-soft: #5D6B74 !important;
}
.ast [class*="-booking"], .tbb [class*="-booking"], .bfc [class*="-booking"],
.ter [class*="-booking"], .teh [class*="-booking"], .brz [class*="-booking"],
.trb [class*="-booking"] {
	--text-muted: #4A5560 !important;
	--text-soft: #4A5560 !important;
}
.ast [class*="-direct"] li span, .tbb [class*="-direct"] li span,
.bfc [class*="-direct"] li span, .ter [class*="-direct"] li span,
.teh [class*="-direct"] li span, .brz [class*="-direct"] li span,
.trb [class*="-direct"] li span {
	color: #E5EBEF !important;
}
.site-content footer[class*="-footer"] a {
	display: inline-block; padding: 5px 2px; margin: -5px -2px;
}

/* =========================================================
   25. GUEST FRAMEWORK RHYTHM (v2.9.5) — home + Properties
   Home read loose next to the §22-tightened listing pages: the
   §18 token held sections at 112px (the pivot was 224px of padding
   around ~265px of content) while the FAQ had ZERO section padding
   and ran flush into the footer. Retune the ONE token to the same
   84px scale as §22, give the FAQ its own air, and pad + center the
   guest footer. Hero keeps its deliberate larger presence (§18.4).
   ========================================================= */
:root { --endless-section-pad: clamp(48px, 7vw, 84px); }
.lane-guest.section-faq { padding-top: clamp(32px, 5vw, 56px); padding-bottom: clamp(48px, 7vw, 84px); }
.lane-guest.site-footer { padding-top: 44px; padding-bottom: 44px; text-align: center; }

/* =========================================================
   26. FOOTER FULL-BLEED + PIVOT SEAM (v2.9.6)
   The guest footer lived inside the 1120px content column and
   rendered as a boxed navy island with white gutters at wide
   viewports (measured 1056px of 1513). Full-bleed it with the §2
   band utility. The pivot is a slim connector, not a full band —
   its stacked 84+84 seam after the grid button read as a hole;
   lighter top pad keeps the rhythm without the void.
   ========================================================= */
.lane-guest.site-footer {
	width: 100vw; max-width: 100vw;
	margin-left: calc(50% - 50vw); margin-right: calc(50% - 50vw);
	padding-left: max(5vw, calc(50vw - 560px));
	padding-right: max(5vw, calc(50vw - 560px));
	padding-top: 52px; padding-bottom: 52px;
}
.lane-guest.section-pivot { padding-top: clamp(24px, 3.5vw, 44px); }
/* §26 addendum: pages ending in the full-bleed guest footer drop the content
   column's 3rem bottom pad — otherwise a white strip sandwiches between the
   navy footer and GP's navy credit bar. */
.site-content:has(div.lane-guest.site-footer) { padding-bottom: 0; }

/* =========================================================
   27. OWNER PAGE POLISH (v2.9.7) — Cody content review
   Centered owner CTAs (hero + final band), statbar tiles spread
   evenly across the band, pillar columns get breathing room, and
   the FAQ list gets real card styling + air before its heading.
   ========================================================= */
body.lane-owner .hero-section .wp-block-buttons,
body.lane-owner .section-final-cta .wp-block-buttons { justify-content: center; }
.endless-statbar { justify-content: space-evenly; width: 100%; }
.section-pillars .wp-block-columns { gap: 26px; }
body.lane-owner .section-pillars .wp-block-column { padding: 1.9rem 1.7rem 1.6rem; }
.section-pillars h3 { margin-top: 0; margin-bottom: 0.6rem; }
.section-faq { margin-top: clamp(28px, 4vw, 56px); }
.section-faq details {
	background: #fff; border: 1px solid var(--endless-line);
	border-radius: 12px; padding: 1.05rem 1.35rem; margin-bottom: 0.85rem;
}
.section-faq details summary { font-weight: 700; color: var(--endless-navy); cursor: pointer; }
.section-faq summary::marker { color: var(--endless-gold); }
.section-faq details[open] { box-shadow: var(--endless-shadow-soft); border-color: var(--endless-gold); }
.section-faq details[open] summary { margin-bottom: 0.35rem; }

/* =========================================================
   28. PIVOT CARDS (v2.9.8) — home "more than stays"
   The two pivot columns become proper cards: white, hairline
   border, soft shadow, real padding. Later-rule box-shadow
   replaces any earlier inset accent.
   ========================================================= */
.section-pivot .wp-block-columns { gap: 24px; margin-top: 1.6rem; }
.section-pivot .wp-block-column {
	background: #fff; border: 1px solid var(--endless-line);
	border-radius: 12px; padding: 1.7rem 1.8rem;
	box-shadow: var(--endless-shadow-soft);
}
.section-pivot .wp-block-column p { margin: 0; }

/* =========================================================
   29. V2 AUDIT TAP TARGETS + EYEBROW WRAP (v2.9.9)
   Full-site impeccable audit, 2026-07-20. Measured on live:
   FAQ <summary> hit area 27px (needs 44); photo-credit links
   27-30px; l93 footer contact links 38px; owner hero eyebrow
   (498px box) breaks mid-word at the CPA-LED hyphen. GP footer
   credit hidden here; the real generate_copyright filter ships
   in v13 functions.php (theme-zip path — PHP can't hot-deploy).
   ========================================================= */
details.wp-block-details > summary { padding-block: 0.55rem; cursor: pointer; }
/* credits links: inline-prose citations — WCAG 2.5.8 inline exemption (27-30px ≥ 24px AA); fragment 5px padding stands. */
.l93-footer-contact a { padding-block: 8px !important; display: inline-block; }
.hero-eyebrow { text-wrap: balance; }
/* §29a RETIRED 2026-07-20: v13 functions.php generate_copyright filter now renders the clean
   copyright server-side — the interim hide/replace rules are no longer needed. */

/* =========================================================
   30. CONTACT-FORM SUBMIT (v2.9.9 addendum, 2026-07-20)
   Fluent Forms ships its submit white-on-gold — 2.25:1, the
   same failure family §3/§12/§15 fixed on the nav + owner
   pills. Navy-deep on gold = 5.2:1; hover flips navy/white.
   Also lifts the 42px button to 44px+ and rounds to the
   site's pill radius.
   ========================================================= */
.fluentform .ff-btn-submit { background: var(--endless-gold) !important; color: var(--endless-navy-deep) !important; font-weight: 700; border: 0; border-radius: 999px; padding: 0.75em 1.7em; min-height: 44px; }
.fluentform .ff-btn-submit:hover { background: var(--endless-navy) !important; color: #fff !important; }

/* =========================================================
   31. GALLERY "VIEW ALL" PILL ABOVE TILE OVERLAYS (v2.9.10)
   V3 gallery bug, 2026-07-20. Tile overlay anchors sit at
   z-index:5; the coastal see-more pill (position:absolute,
   z auto, earlier in DOM) loses tile4’s bottom-right corner
   to that overlay — "View all N photos" opened tile4’s photo
   (AST p26 / TBB p26 / BFC p15 / TER p35 / TEH p31 / JN1 p40)
   instead of p1. Tile wiring itself is correct on all 9 pages
   (photo-id verified, local + live). Element+attr selector on
   purpose: no position/inset declared here — the pills’ own
   placement (coastal absolute / l93 grid item) must stand.
   ========================================================= */
a[class*="-see-more"] { z-index: 6; }

/* =========================================================
   33. V3 APPEARANCE WAVE (v2.9.11, 2026-07-20)
   a) Home footer block (page 8’s .wp-block-group.site-footer:
      six stacked one-line <p>s, centered — read as a list at
      desktop): ≥1024px 3-column grid — links | markets | reach —
      legal line spanning below. nth-child placement is safe: the
      block is single-instance page-8 content with a fixed 6-<p>
      structure (framework pages carry only the © site-info bar;
      GP’s div.site-footer wrapper is not a .wp-block-group).
   b) About (page 16) Own-the-Outcome card: text filled ~55% and
      sat left-locked in a full-width card at 1400 — hug + center
      to the page’s centered axis. Scoped to .page-id-16 so the
      owner page’s section-revpar-truth is untouched.
   c) PGA book band: centered pill row (page re-dressed to the
      owner section grammar this session).
   ========================================================= */
@media (min-width: 1024px) {
  .wp-block-group.site-footer { display: grid; grid-template-columns: 1fr minmax(auto, 42ch) 1fr; column-gap: clamp(2.5rem, 6vw, 6rem); row-gap: 0.55rem; align-items: start; padding-inline: max(2.5rem, calc((100% - 1160px) / 2)); }
  .wp-block-group.site-footer > p { margin: 0; }
  .wp-block-group.site-footer > p:nth-child(1) { grid-column: 1; grid-row: 1; text-align: left; }
  .wp-block-group.site-footer > p:nth-child(3) { grid-column: 1; grid-row: 2; text-align: left; }
  .wp-block-group.site-footer > p:nth-child(2) { grid-column: 2; grid-row: 1 / 3; text-align: center; align-self: center; }
  .wp-block-group.site-footer > p:nth-child(4) { grid-column: 3; grid-row: 1; text-align: right; }
  .wp-block-group.site-footer > p:nth-child(5) { grid-column: 3; grid-row: 2; text-align: right; }
  .wp-block-group.site-footer > p:nth-child(6) { grid-column: 1 / -1; grid-row: 3; text-align: center; margin-top: 1.4rem; justify-self: center; }
}
/* §33(b) about-card rules removed in v2.9.13 — the Own-the-Outcome section was cut from /about/ (V3 rework). */
.pga-book .wp-block-buttons, .page-id-16 .about-ctas .wp-block-buttons { justify-content: center; }

/* =========================================================
   34. EYEBROW CADENCE — SECTION-FAMILY VARIATION (v2.9.12)
   Cody ruling 2026-07-20 (vary by section family; mock approved):
   heroes keep the gold-tick text eyebrow; framework section H2s
   open with a quiet 44×2px gold hairline instead — aligned WITH
   the title (left over left-set H2s, centered over centered ones;
   the mock’s always-centered dash floated loose over left titles).
   Listing pages’ own text-eyebrow system deliberately untouched
   (follow-up pass). Alignment map measured live 2026-07-20:
   centered = featured-homes, pivot, book-direct, final-cta,
   revpar-truth on page-16 only; left = the rest.
   ========================================================= */
.section-pillars > h2, .section-who-for > h2, .section-how-it-works > h2,
.section-faq > h2, .section-revpar-truth > h2, .section-featured-homes > h2,
.section-pivot > h2, .section-book-direct > h2, .section-final-cta > h2 {
  position: relative; padding-top: 1.05rem;
}
.section-pillars > h2::before, .section-who-for > h2::before, .section-how-it-works > h2::before,
.section-faq > h2::before, .section-revpar-truth > h2::before, .section-featured-homes > h2::before,
.section-pivot > h2::before, .section-book-direct > h2::before, .section-final-cta > h2::before {
  content: ""; position: absolute; top: 0; left: 0; width: 44px; height: 2px; background: var(--endless-gold);
}
.section-featured-homes > h2::before, .section-pivot > h2::before, .section-book-direct > h2::before,
.section-final-cta > h2::before, .page-id-16 .section-revpar-truth > h2::before {
  left: 50%; transform: translateX(-50%);
}

/* =========================================================
   35. PHOTOS + PROFESSIONAL CAPITALIZATION (v2.9.13)
   Cody ruling 2026-07-20: the all-lowercase heading aesthetic
   is SOCIAL-MEDIA-ONLY — website copy uses professional
   capitalization. The text-transform:lowercase rule (was §2
   era, line ~122) is DELETED; the -lowercase classes remain
   as typographic size markers only; heading strings retyped
   Title Case on pages 8/12/16 + market-draft mirrors.
   Host avatars: photo fills the initials circle on the 7
   Cody-hosted listings. About: portrait figure styling.
   ========================================================= */
[class*="-host-avatar"] > img { width: 100%; height: 100%; object-fit: cover; border-radius: inherit; display: block; }
.about-portrait img { border-radius: 12px; box-shadow: var(--endless-shadow-soft); width: 100%; height: auto; display: block; }
.about-portrait figcaption { font-size: 0.85rem; color: var(--endless-text-muted); margin-top: 0.6rem; text-align: center; }

/* =========================================================
   36. HOME PIVOT PANELS (v2.9.14, 2026-07-20)
   Cody: the two pivot cards read plain — impeccable pass.
   Redesigned as two DIFFERENTIATED panels: owner path = navy
   color-block with gold CTA (navy = owner-lane signal site-
   wide); family path = photo-led panel (real Cody & Alexandra
   asset, media 223). Equal geometry, contrasting treatment —
   kills the identical-card tell. The §18.7/§25-era white-card
   look on .section-pivot columns is neutralized below (panels
   carry the surface now; columns become bare flex wrappers).
   Owner CTA needs !important — a higher-specificity guest-lane
   button rule wins the cascade otherwise (measured live: navy
   pill on navy panel).
   ========================================================= */
.section-pivot .wp-block-column { background: transparent; border: 0; box-shadow: none; padding: 0; display: flex; }
.pivot-owner, .pivot-family { border-radius: 12px; overflow: hidden; width: 100%; display: flex; flex-direction: column; }
.pivot-owner { background: var(--endless-navy-deep); padding: clamp(1.8rem, 3.5vw, 2.6rem); gap: 0.9rem; align-items: flex-start; justify-content: center; }
.pivot-owner h3 { color: #fff; margin: 0; font-size: 1.45rem; }
.pivot-owner p { color: rgba(250,250,248,0.88); margin: 0; }
.pivot-owner .wp-block-button__link { background: var(--endless-gold) !important; color: var(--endless-navy-deep) !important; font-weight: 700; }
.pivot-owner .wp-block-button__link:hover { background: #fff !important; color: var(--endless-navy-deep) !important; }
.pivot-family { background: #fff; border: 1px solid var(--endless-line); box-shadow: var(--endless-shadow-soft); }
.pivot-family figure { margin: 0; }
.pivot-family figure img { width: 100%; aspect-ratio: 16 / 10; object-fit: cover; display: block; }
.pivot-family-body { padding: 1.5rem clamp(1.4rem, 3vw, 2rem) 1.9rem; gap: 0.7rem; display: flex; flex-direction: column; align-items: flex-start; }
.pivot-family-body h3 { margin: 0; font-size: 1.45rem; }
.pivot-family-body p { margin: 0; }

/* =========================================================
   37. HOW-IT-WORKS STEP CARDS (v2.9.15, 2026-07-20)
   Cody reviewed endlessassetmanagement.com and wants its
   3-up dark step blocks ("I would like this") on the WP owner
   + PGA pages — traditional cards with icons. Endless canon
   translation: navy-deep blocks, gold line icons in a ringed
   badge, gold STEP marker, white serif h3, light copy. The
   plain wp:list OLs on both pages are replaced by columns of
   .step-card groups. Numbered markers are legitimate here —
   it IS a real 3-step sequence (impeccable: numbers earn
   their place when order carries information).
   Column neutralizer needs the body.lane-owner variant:
   §18.11’s `body.lane-owner .section-how-it-works
   .wp-block-column` (0,3,0 + body type) out-ranked the
   class-only selector and re-wrapped the navy cards in white
   pebble cards (nested-cards tell, caught on screenshot).
   ========================================================= */
.section-how-it-works .steps-cards { gap: 1.4rem; margin-top: 1.6rem; }
.section-how-it-works .steps-cards > .wp-block-column,
body.lane-owner .section-how-it-works .steps-cards > .wp-block-column { display: flex; background: transparent; border: 0; box-shadow: none; padding: 0; border-radius: 0; }
.step-card { background: var(--endless-navy-deep); border-radius: 12px; padding: clamp(1.6rem, 3vw, 2.1rem); width: 100%; display: flex; flex-direction: column; gap: 0.85rem; }
.step-card-top { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
.step-icon { width: 46px; height: 46px; border-radius: 50%; border: 1px solid rgba(201,169,98,0.45); display: grid; place-items: center; color: var(--endless-gold); flex-shrink: 0; }
.step-icon svg { width: 22px; height: 22px; }
.step-num { font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--endless-gold); font-weight: 700; }
.step-card h3 { color: #fff; margin: 0; font-size: 1.28rem; }
.step-card p { color: rgba(250,250,248,0.88); margin: 0; font-size: 0.98rem; }

/* =========================================================
   38. RESULTS BAND + AMBIENT HERO VIDEO (v2.9.16, 2026-07-21)
   a) Owner "Built on Real Results" band (Polaris-audit P1;
      stats + testimonials Cody-supplied 7/21): statbar variant
      with a text-valued 4th tile; quote cards ride the
      section-pillars card treatment.
   b) Ambient hero video (home): .hero-video layer under the
      hero content — poster img always present beneath the
      video (reduced-motion + mobile hide the VIDEO only, so
      poster + navy scrim keep the white-text hero working
      everywhere). Inert until page 8 carries .has-video +
      the .hero-video block.
   ========================================================= */
.results-statbar { margin-top: 1.4rem; display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.6rem; }
@media (max-width: 980px) { .results-statbar { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .results-statbar { grid-template-columns: 1fr; } }
.results-statbar .stat-text { font-size: clamp(1.35rem, 2vw, 1.85rem); line-height: 1.2; display: block; padding-top: 0.4rem; }
.owner-results .owner-quote { font-family: var(--endless-font-heading, Georgia, serif); font-style: italic; font-size: 1.06rem; color: var(--endless-navy); margin: 0 0 0.6rem; }
.owner-results .owner-quote-by { color: var(--endless-text-muted); font-size: 0.9rem; margin: 0; }
.hero-section.has-video { position: relative; overflow: hidden; }
.hero-video { position: absolute; inset: 0; z-index: 0; }
.hero-video img, .hero-video video { width: 100%; height: 100%; object-fit: cover; position: absolute; inset: 0; }
.hero-video::after { content: ""; position: absolute; inset: 0; background: linear-gradient(160deg, rgba(14,36,51,0.74), rgba(30,77,107,0.56)); }
.hero-section.has-video > *:not(.hero-video) { position: relative; z-index: 1; }
.hero-section.has-video h1 { color: #fff; }
.hero-section.has-video .hero-subhead { color: rgba(250,250,248,0.92); }
.hero-section.has-video .hero-eyebrow { color: var(--endless-gold-soft, #DBC08A); }
.hero-section.has-video .wp-block-button.is-style-outline .wp-block-button__link { color: #fff !important; border-color: rgba(255,255,255,0.75) !important; }
.hero-section.has-video .wp-block-button.is-style-outline .wp-block-button__link:hover { background: #fff !important; color: var(--endless-navy-deep) !important; }
@media (prefers-reduced-motion: reduce) { .hero-video video { display: none; } }
@media (max-width: 768px) { .hero-video video { display: none; } }
