/* =========================================================================
   NOTE ON ORGANIZATION
   This file consolidates three former locations:
     1. Customizer > Additional CSS (439 lines)
     2. WPCode snippet 859 "animation_css" (non-slider rules only)
     3. WPCode snippet 1300 "Cinematic Styles" (CSS portion)
   All Smart Slider (n2-* / .ss-slide) rules were REMOVED — the plugin and the
   only page using it (Inspiring Greatness) were deleted 2026-06-01, so that
   CSS was dead. Duplicate declarations, dead overrides, and a cross-location
   box-shadow conflict were resolved (see inline notes).
   ========================================================================= */

/* === Site container & global chrome ===================================== */
.site-container {
    max-width: 1440px !important;
}
.kadence-svg-iconset svg {
    height: 0.8em;
    width: 0.8em;
}
.wp-block-spacer {
    background: #e2e2e2 !important;
}
.wp-block-column {
    border-left: 1px solid #dddddd;
}
/* === end global chrome === */

/* === Header scroll-hide behavior (driven by JS: header-scroll.js) =======
   Class toggles `menu-hidden` / `is-sticky` are applied on scroll by JS that
   watches the homepage video container (.kb-blocks-bg-video-container).
   CONFLICT RESOLVED: snippet 859 set box-shadow: 0 2px 8px on .is-sticky while
   the Customizer set box-shadow: none !important. The Customizer value won
   live, so the no-shadow result is preserved here as the single intended rule.
   ======================================================================== */
.site-main-header-wrap {
    transition: all 0.4s ease;
}
.site-main-header-wrap.menu-hidden {
    transform: translateY(-100%);
    opacity: 0;
    transition: all 0.4s ease;
}
.site-bottom-header-wrap.is-sticky {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 999;
    box-shadow: none;
    transition: top 0.4s ease, opacity 0.4s ease;
}
body.home .site-bottom-header-wrap {
    display: none !important;
}
/* === end header scroll-hide === */

/* === Navigation & menu items ============================================ */
span.kt-svg-icon-list-text {
    font-size: 12px;
    text-decoration: none;
    transition: opacity .4s;
    color: #ffffff;
}

.widget-toggle-open-container .widget-toggle-open {
    display: flex;
    flex-direction: row-reverse;
    column-gap: 10px;
}
.search-toggle-open {
    flex-direction: row-reverse;
    column-gap: 10px;
}
.kt-svg-icon-list-single {
    display: none !important;
}
.wp-block-kadence-listitem:hover {
    cursor: pointer;
    opacity: 0.8;
}
/* === end drawer / mobile menu === */

/* === Headings & text ==================================================== */
p.has-small-font-size {
    padding: 0 15px;
}
h2.wp-block-heading.has-small-font-size {
    padding: 0 15px;
    text-transform: uppercase;
}/* === end hero row centering === */

/* === Footer logo + body scroll behavior (from snippet 1300) ============= */
/* Native scroll — no wheel hijacking, no section snapping */
/* === Global typography base: rendering refinements (site-wide) === */
body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  font-kerning: normal;
}
/* === end global typography base === */

html, body {
    scroll-behavior: auto;
    overscroll-behavior-y: auto;
    scroll-snap-type: none;
}
#colophon .wp-block-kadence-image img {
	width: 180px;
	padding: 5px 0 12px;
	/* Left-aligned to the footer column grid (2026-08-28). Was margin: auto,
	   which centred the logo inside its 896px column and left it 224px off
	   page centre once the five link columns were added above it. */
	margin-left: 0;
	margin-right: auto;
}
/* === end footer logo + scroll behavior === */

/* === Logo crossfade: wordmark -> turtle (scroll-linked, JS-driven) === */
/* Opacity + turtle scale are driven by js/logo-scroll-crossfade.js via GSAP
   ScrollTrigger. CSS here only establishes layout. Do NOT add opacity/transition
   or a scale here -- that fights the scroll-scrubbed animation.

   IMPORTANT: Kadence's native sticky logo-swap must be turned OFF in
   Customize -> Header -> Sticky settings, or Kadence sets opacity:0 inline on the
   wordmark in the stuck state and the GSAP fade can't win without !important. */
.brand.has-sticky-logo {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}
/* Turtle stacked over the wordmark, centered. Base box is the ENLARGED size
   (75 x 47.5); GSAP scales it DOWN to the resting 60 x 38 (scale 0.8), which
   keeps the raster crisp. JS sets opacity (0 at top), transform, and scale. */
.brand.has-sticky-logo img.kadence-sticky-logo {
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  width: 75px;
  height: 47.5px;
  object-fit: contain;
  opacity: 0;
  pointer-events: none;
  /* transform (centering translate + scale) and opacity are set by GSAP */
}
/* === end logo crossfade === */

/* === Responsive / breakpoints =========================================== */
    

/* === end responsive === */

/* === Land & Sea: image-switch overlapping pair (2026-06-15, rev7 larger) === */
.ls-image-switch {
  position: relative;
  width: 100vw;
  left: 50%;
  right: 50%;
  margin-left: -50vw;
  margin-right: -50vw;
  /* overlay top (36vw) + overlay height (92vw * 10/16 = 57.5vw) ≈ 93.5vw + gap */
  padding-bottom: 77vw;
  overflow: visible;
}
.ls-image-switch__base,
.ls-image-switch__overlay {
  display: block;
  position: absolute;
  width: 85vw;
  aspect-ratio: 16 / 10;
  object-fit: cover;
}
.ls-image-switch__base {
  top: 0;
  left: -12vw;            /* bleeds further off the left */
  z-index: 1;
}
.ls-image-switch__overlay {
  top: 20vw;              /* larger vertical stagger */
  left: 25vw;             /* right edge ~112vw, bleeds off the right */
  z-index: 2;
}

/* Tablet */
@media (max-width: 1024px) {
  .ls-image-switch { padding-bottom: 105vw; }
  .ls-image-switch__base,
  .ls-image-switch__overlay { width: 100vw; }
  .ls-image-switch__base    { left: -10vw; top: 0; }
  .ls-image-switch__overlay { left: 14vw; top: 40vw; }
}

/* Mobile: stack vertically */
@media (max-width: 600px) {
  .ls-image-switch {
    padding-bottom: 0;
    display: flex;
    flex-direction: column;
    gap: 16px;
    padding-left: 16px;
    padding-right: 16px;
  }
  .ls-image-switch__base,
  .ls-image-switch__overlay {
    position: static;
    width: 100%;
    top: auto; left: auto;
  }
}
/* === end image-switch === */

/* === Land & Sea: hover-play video feature (2026-06-15) === */
.ls-video-feature {
  text-align: center;
  max-width: 1440px;
  margin: 0 auto;
  padding: 60px 20px;
}
.ls-video-feature__eyebrow {
  font-size: 13px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-weight: 500;
  margin: 0 0 12px;
}
.ls-video-feature__headline {
  font-size: 2.5rem;
  letter-spacing: normal;
  text-transform: uppercase;
  font-weight: 300;
  margin: 0 0 20px;
}
.ls-video-feature__text {
  max-width: 600px;
  margin: 0 auto 28px;
  line-height: 1.7;
}
.ls-video-feature__video-wrap {
  position: relative;
  width: 100%;
  margin-top: 40px;
  overflow: hidden;
  cursor: pointer;
}
.ls-video-feature__video {
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
}
@media (max-width: 768px) {
  .ls-video-feature__headline { font-size: 30px; }
}
/* === end hover-play video feature === */
/* === Land & Sea: neighborhood carousel (2026-06-17) ===========================
   Full-width horizontal scroller for the "Neighborhood Carousel" block pattern
   (kadence-child/neighborhood-carousel). Scoped to .ls-hood-carousel so it can't
   touch the existing static neighborhood grid. Card visuals mirror that grid:
   Josefin Sans uppercase title, square image, body copy in #2d3748.
   Scroll logic: js/neighborhood-carousel.js
   --------------------------------------------------------------------------- */
.ls-hood-carousel {
  position: relative;
  width: 100vw;
  max-width: 100vw;
  left: 50%;
  right: 50%;
  margin-left: -50vw;
  margin-right: -50vw;
  margin-top: 0;
  margin-bottom: 40px;
  padding-top: 7.5rem;
  overflow: hidden;
}
.ls-hood-carousel__head {
  position: relative;
  max-width: 1328px;
  margin: 0 auto 40px;
  padding: 0 24px;
}
.ls-hood-carousel__intro {
  max-width: 840px;
  margin: 0 auto;
  text-align: center;
}
.ls-hood-carousel__title {
  font-family: var(--global-heading-font-family, Raleway, sans-serif);
  text-transform: uppercase;
  letter-spacing: normal;
  font-weight: 300;
  font-size: 2.5rem;
  color: #151515;
  margin: 0 0 16px;
}
.ls-hood-carousel__lead {
  font-size: 1rem;
  line-height: 1.6;
  color: #35414a;
  margin: 0 0 40px;
}
.ls-hood-carousel__nav {
	display: none; /* grid replaced the scroller 2026-08-28 */
}
.ls-hood-carousel__arrow {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 70px;
  height: 70px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: #8A919A;
  color: #FFFFFF;
  cursor: pointer;
  transition: background-color 0.25s ease, color 0.25s ease, opacity 0.25s ease, border-color 0.25s ease;
}
.ls-hood-carousel__arrow:hover:not(:disabled) {
  background: #52575C;
  color: #ffffff;
}
.ls-hood-carousel__arrow:disabled {
  opacity: 0.3;
  cursor: default;
}
.ls-hood-carousel__arrow svg { display: block;
	width: 34px;
	height: 34px; }

/* === Hood carousel: nav stacks below the intro under 1024px (2026-08-28) === */
@media (max-width: 1023px) {
  .ls-hood-carousel__nav { position: static; justify-content: center; margin-top: 40px; }
}
/* === end hood carousel nav stack === */

/* Track: full bleed; left padding aligns first card with the page content
   gutter PLUS a small aesthetic offset; right edge runs off screen so the
   trailing card is clipped (the "there's more" cue). */
.ls-hood-carousel__track {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 410px));
	justify-content: center;
	column-gap: 18px;
	/* row gap 49px = the previous 34 plus the 15px asked for between one
	   card’s text and the next card’s image. There is no margin or padding below
	   .ls-hood-card__text, so the row gap is the whole visual distance. */
	row-gap: 49px;
	padding: 4px 24px;
}
.ls-hood-card {
	min-width: 0;
	border-left: 1px solid #ddd;
}
.ls-hood-card__link {
  display: block;
  color: inherit;
  text-decoration: none;
}
.ls-hood-card__link:hover,
.ls-hood-card__link:focus { color: inherit; }
.ls-hood-card .ls-hood-card__media {
  margin: 0 0 20px;
  position: relative;
  container-type: inline-size;
  overflow: hidden;
  aspect-ratio: 1 / 1;
}
.ls-hood-card__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s ease;
}
.ls-hood-card:hover .ls-hood-card__media img { transform: scale(1.05); }
.ls-hood-card .ls-hood-card__name {
  font-family: var(--global-heading-font-family, Raleway, sans-serif);
  font-size: 1rem;
  font-weight: 700;
  letter-spacing: normal;
  text-transform: uppercase;
  color: #151515;
  margin: 20px 0 8px; /* was 0 0 7px, which never applied: a theme h3 rule
	   outranked the single class. Selector raised to .ls-hood-card .ls-hood-card__name
	   so this rule wins. Collapses against the media margin to a 20px gap. */
  padding-left: 16px;
}
.ls-hood-card__text {
  font-size: 0.9rem;
  line-height: 1.6;
  color: #35414a;
  margin: 0;
  padding-left: 16px;
}

/* "More Neighborhoods" card — same footprint, link-style treatment */
@media (max-width: 768px) {
  
  .ls-hood-carousel__head { padding: 0 18px; }
  .ls-hood-carousel__track {
		padding-left: 18px;
		padding-right: 18px;
	}
}
/* Grid column counts (2026-08-28) - 4 across, cards capped at 410px */
@media (max-width: 1199px) {
	.ls-hood-carousel__track { grid-template-columns: repeat(3, minmax(0, 410px)); }
}
@media (max-width: 899px) {
	.ls-hood-carousel__track { grid-template-columns: repeat(2, minmax(0, 410px)); }
}
@media (max-width: 599px) {
	.ls-hood-carousel__track { grid-template-columns: minmax(0, 410px); }
}

/* === end neighborhood carousel === */
/* === Land & Sea: Centered CTA pattern (ls-cta) — added 2026-06-17 === */
.ls-cta {
  width: 100%;
  padding: 96px 24px;
  text-align: center;
}
.ls-cta__inner {
  max-width: 720px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.ls-cta__eyebrow {
  margin: 0 0 24px;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #151515;
}
.ls-cta__heading {
  margin: 0;
  font-size: 2.5rem;
  font-weight: 300;
  letter-spacing: normal;
  line-height: 1.1;
  color: #151515;
}
.ls-cta__divider {
  display: block;
  width: 40px;
  height: 1px;
  margin: 28px auto 32px;
  background: #1a1a1a;
}
.ls-cta__body {
  margin: 0 0 40px;
  max-width: 620px;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.85;
  color: #35414a;
}
.ls-cta__button,
.ls-pinnacle__cta .wp-block-button__link,
.ls-cta__button > .wp-block-button__link,
.ls-nb-cta__button {
  /* Inverse treatment. The band is a dark photograph, so the brand blue reads as
     low-contrast against it. A white button is the highest-contrast element that
     can sit on this background, and the dark label gives 18.26:1 on the button
     itself. Hover returns to the brand blue so the interaction is unmistakable. */
  display: inline-block;
  padding: 16px 48px;
  border-radius: 999px;
  background: #176db7;
  color: #ffffff;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-decoration: none;
  box-shadow: rgba(14, 30, 37, 0.12) 0px 2px 4px 0px, rgba(14, 30, 37, 0.32) 0px 2px 16px 0px;
  transition: background 0.25s ease, color 0.25s ease, transform 0.25s ease, box-shadow 0.25s ease;
}
.ls-nb-cta__button:hover,
.ls-nb-cta__button:focus-visible {
  background: #125a97;
  color: #ffffff;
  transform: translateY(-2px);
  box-shadow: rgba(14, 30, 37, 0.12) 0px 2px 4px 0px, rgba(14, 30, 37, 0.32) 0px 2px 16px 0px;
}
.ls-cta__button:hover,
.ls-cta__button:focus,
.ls-pinnacle__cta .wp-block-button__link:hover,
.ls-pinnacle__cta .wp-block-button__link:focus,
.ls-cta__button > .wp-block-button__link:hover,
.ls-cta__button > .wp-block-button__link:focus,
.ls-nb-cta__button:hover,
.ls-nb-cta__button:focus {
  background: #125a97;
  color: #ffffff;
  transform: translateY(-1px);
}

@media (max-width: 768px) {
  .ls-cta { padding: 64px 20px; }
  .ls-cta__heading { font-size: 34px; }
  .ls-cta__body { font-size: 15px; }
}
/* === end Centered CTA pattern === */

/* === Land & Sea: two-column parallax patterns (ls-parallax) — added 2026-06-17 === */
.ls-parallax {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  align-items: stretch;
  position: relative;
  width: 100vw;
  max-width: 100vw;
  margin-inline: calc(50% - 50vw);
  margin-top: 0;
  margin-bottom: 0;
  overflow-x: clip;
}
.ls-parallax__media {
  position: relative;
  aspect-ratio: 2000 / 1320;
  align-self: start;
  overflow: visible;
}
.ls-parallax__media img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  /* Was height:auto with a forced aspect-ratio and no object-fit, which stretched
     every image to 1.515:1 — the two 16:9 uploads were distorted ~14% vertically.
     height:100% + cover crops instead. Upload at 2000x1320 to avoid any crop. */
  height: 100%;
  aspect-ratio: 2000 / 1320;
  object-fit: cover;
  object-position: center;
  max-width: none;
  display: block;
  will-change: transform;
}
.ls-parallax__content {
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding-block: 80px;
  padding-inline: clamp(2rem, 6vw, 8rem);
  will-change: transform;
}
.ls-parallax:not(.ls-parallax--image-right) .ls-parallax__content {
  align-items: flex-start;
  text-align: left;
}
.ls-parallax--image-right .ls-parallax__content {
  text-align: right;
}
/* align-items is only meaningful for the original single-block layout. In the
   two-column variant .ls-parallax__content is a grid, so flex-end bottom-aligned
   the two columns and left their headings on different baselines. */
.ls-parallax--image-right .ls-parallax__content:not(.ls-parallax__content--twocol) {
  align-items: flex-end;
}
.ls-parallax__heading {
  margin: 0 0 24px;
  font-weight: 300;
  letter-spacing: normal;
  line-height: 1.45;
  text-transform: uppercase;
  color: #151515;
}
.ls-parallax__body {
  margin: 0 0 36px;
  max-width: 80ch;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.95;
  color: #35414a;
}
.ls-parallax__links {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(3, max-content);
  grid-template-rows: repeat(5, auto);
  grid-auto-flow: column;
  column-gap: 3rem;
}

/* Override Kadence .single-content ul padding-left (2em) — keep link grid flush */
.ls-parallax .ls-parallax__links {
  padding-left: 0;
}
.ls-parallax__links li {
  margin: 0 0 12px;
}
.ls-parallax__links a {
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.6;
  color: #2b6cb0;
  text-decoration: underline;
  text-underline-offset: 3px;
  transition: color 0.15s linear, text-underline-offset 0.15s linear;
}
.ls-parallax__links a:hover,
.ls-parallax__links a:focus {
  color: #235a94;
  text-underline-offset: 0.35em;
}
.ls-parallax--image-right .ls-parallax__media {
  order: 2;
}
.ls-parallax--image-right .ls-parallax__content {
  order: 1;
}
@media (max-width: 768px) {
  .ls-parallax {
    grid-template-columns: 1fr;
    margin-top: 0;
    margin-bottom: 0;
  }
  .ls-parallax__media {
    aspect-ratio: 2000 / 1320;
    order: 1;
    overflow: hidden;
  }
  .ls-parallax__media img,
  .ls-parallax:not(.ls-parallax--image-right) .ls-parallax__media img,
  .ls-parallax--image-right .ls-parallax__media img {
    position: absolute;
    top: 0;
    left: 0;
    right: auto;
    width: 100%;
    height: 100%;
    object-fit: cover;
    transform: none !important;
  }
  .ls-parallax__content,
  .ls-parallax:not(.ls-parallax--image-right) .ls-parallax__content,
  .ls-parallax--image-right .ls-parallax__content {
    order: 2;
    padding: 56px 24px;
    align-items: flex-start;
    transform: none !important;
  }
  .ls-parallax--image-right .ls-parallax__media { order: 1; }
  .ls-parallax--image-right .ls-parallax__content { order: 2; }
}
/* === end two-column parallax patterns === */

/* === LS Testimonials — video bg slider (2026-06-18) === */
/* Facsimile of michaellawler.com "FROM OUR CLIENTS".
   Typography intentionally omitted — global Kadence font styles control
   family/weight on .ls-testimonials__heading, __quote, __author.
   After editing this file, bump the Version: line in style.css header so
   functions.php's wp_get_theme()->get('Version') cache-busts the enqueue. */

.ls-testimonials {
	position: relative;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
	width: 100vw;
	min-height: 548px;
	display: flex;
	align-items: center;
	overflow: hidden;
	isolation: isolate;
	color: #ffffff;
}

.ls-testimonials__video {
	position: absolute;
	inset: 0;
	z-index: 0;
}

.ls-testimonials__video-el {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
}

.ls-testimonials__overlay {
	position: absolute;
	inset: 0;
	z-index: 1;
	background: rgba(0, 0, 0, 0.5); /* matches reference scrim */
}

.ls-testimonials__inner {
	position: relative;
	z-index: 2;
	width: 100%;
	max-width: 1328px; /* matches .site-container width */
	margin: 0 auto;
	padding: 5rem 2rem;
	display: flex;
	align-items: center;
	gap: 3rem;
}

.ls-testimonials__left {
	flex: 0 0 30%;
	max-width: 30%;
	display: flex;
	align-items: center;
	gap: 1.5rem;
}

.ls-testimonials__heading {
	margin: 0;
	color: #ffffff;
	text-transform: uppercase;
	letter-spacing: normal;
}

.ls-testimonials__arrows {
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
}

/* Rotate chevrons to vertical: prev = up, next = down */
.ls-testimonials__arrow--prev svg { transform: rotate(90deg); }
.ls-testimonials__arrow--next svg { transform: rotate(90deg); }

.ls-testimonials__arrow {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 48px;
	height: 48px;
	padding: 0;
	border: 1px solid rgba(255, 255, 255, 0.6);
	border-radius: 50%;
	background: transparent;
	color: #ffffff;
	cursor: pointer;
	transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease;
}

.ls-testimonials__arrow:hover,
.ls-testimonials__arrow:focus-visible {
	background: #fff;
	border-color: #ffffff;
	color: #151515;
	outline: none;
}

.ls-testimonials__right {
	flex: 1 1 auto;
	min-width: 0;
}

.ls-testimonials__track {
	position: relative;
	min-height: 180px; /* JS sets this from the tallest slide; fallback here */
}

.ls-testimonials__slide {
	transition: opacity 0.5s ease, transform 0.5s ease, visibility 0.5s ease;
	position: absolute;
	inset: 0;
	margin: 0;
	opacity: 0;
	visibility: hidden;
	transform: translateY(40px);
	display: flex;
	flex-direction: column;
	justify-content: center;
	border-left: 2px solid #ffffff;
	padding-left: 1.25rem;
}

/* First-paint state before GSAP initializes (no-JS / pre-hydration safety) */
.ls-testimonials__slide.is-active {
	opacity: 1;
	visibility: visible;
	position: relative;
	transform: translateY(0);
}

/* Outgoing slide: rises up and out the top while the incoming one rises in from below */
.ls-testimonials__slide.is-leaving {
	opacity: 0;
	visibility: visible;
	position: absolute;
	transform: translateY(-40px);
}

/* Reverse direction (down arrow): incoming drops from above, outgoing exits below */
.ls-testimonials.is-reverse .ls-testimonials__slide {
	transform: translateY(-40px);
}
.ls-testimonials.is-reverse .ls-testimonials__slide.is-active {
	transform: translateY(0);
}
.ls-testimonials.is-reverse .ls-testimonials__slide.is-leaving {
	transform: translateY(40px);
}

.ls-testimonials__quote {
	margin: 0 0 1rem;
	color: #ffffff;
	font-style: normal;
	line-height: 1.6;
	border-left: 0;
	padding-left: 0;
}

.ls-testimonials__quote::before { content: "\201C"; }
.ls-testimonials__quote::after  { content: "\201D"; }

.ls-testimonials__author {
	color: rgba(255, 255, 255, 0.82);
	letter-spacing: normal;
}

/* ---- Tablet / mobile ---- */
@media (max-width: 991.99px) {
	.ls-testimonials__inner {
		flex-direction: column;
		align-items: flex-start;
		gap: 2rem;
		padding: 4rem 1.5rem;
	}
	.ls-testimonials__left {
		flex: 1 1 auto;
		max-width: 100%;
	}
}

/* Respect reduced-motion: video still loops, but no autoplay shimmer reliance */
@media (prefers-reduced-motion: reduce) {
	.ls-testimonials__video-el { display: none; }
	.ls-testimonials { background: #14202b; }
}
/* === end LS Testimonials === */

/* === Land & Sea: parallax responsive refinements (2026-06-19) === */

@media (max-width: 768px) {
  .ls-parallax__links {
    grid-template-columns: 1fr;
    grid-template-rows: none;
    grid-auto-flow: row;
    column-gap: 0;
  }
  .ls-parallax__links li {
    margin: 0 0 20px;
  }
  .ls-parallax__links a {
    display: inline-block;
    padding: 4px 0;
  }
  .ls-parallax__body {
    max-width: 100%;
  }
  .ls-parallax__content,
  .ls-parallax:not(.ls-parallax--image-right) .ls-parallax__content,
  .ls-parallax--image-right .ls-parallax__content {
    align-items: center;
    text-align: center;
  }
  .ls-parallax__links {
    justify-items: center;
    text-align: center;
  }
}
/* === end parallax responsive refinements === */

/* === Header nav: Rolls-Royce treatment + sub-nav row === */
/* Existing nav (MENU toggle + CONTACT) restyled to match: small, uppercase,
   wide tracking, white. Font: Inter (set globally in Kadence). */
.site-header-main-section-left .widget-toggle-label,
.site-header-main-section-right a {
  font-family: var(--global-body-font-family, Lato, sans-serif);
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #ffffff;
}

/* --- Sub-nav row (injected by js/header-subnav.js) ---------------------- */
.ls-subnav {
  width: 100%;
  position: relative;
  isolation: isolate;
}
/* Centered container; max-width matches the site container (1440px) so the
   row's right edge aligns under CONTACT and left edge under MENU at any width. */
.ls-subnav-inner {
  max-width: 1440px;
  margin: 0 auto;
  padding-right: 1rem;
  box-sizing: border-box;
}
/* Links right-aligned, like the RR section row. */
.ls-subnav-links {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 32px;
  min-height: 60px;
}
.ls-subnav-link {
  font-family: var(--global-body-font-family, Lato, sans-serif);
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #ffffff;
  text-decoration: none;
  white-space: nowrap;
  transition: opacity 0.25s ease;
  opacity: 1;
}
.ls-subnav-link:hover,
.ls-subnav-link:focus {
  opacity: 0.8;
  color: #ffffff;
}

/* Responsive: let the links wrap / tighten on small screens. */
@media (max-width: 768px) {
  .ls-subnav-inner { padding: 0 16px; }
  .ls-subnav-links { gap: 18px; justify-content: center; flex-wrap: wrap; }
  .ls-subnav-link { font-size: 13px; letter-spacing: 0.1em; }
}
/* === Land & Sea: single responsive header (mobile uses desktop layout) === */

/* Hide Kadence's mobile header entirely — we use the desktop header at all widths */
#mobile-header {
  display: none !important;
}

/* Keep the desktop header visible at all widths (override Kadence's mobile-breakpoint hide) */
@media (max-width: 1024px) {
  .site-header-wrap,
  .site-header-inner-wrap,
  .site-header-upper-wrap,
  .site-header-upper-inner-wrap,
  .site-main-header-wrap {
    display: block !important;
  }
}

/* Narrow viewport: shrink wordmark and hide sub-nav (drawer menu covers those links) */
/* Wordmark + band shrink: at ≤768px */
@media (max-width: 768px) {
  .ls-logo-wordmark { width: 180px !important; }
  .site-main-header-inner-wrap { min-height: 110px !important; }
}

/* Sub-nav hidden ≤1024px (desktop & laptop only) */
@media (max-width: 1024px) {
  .ls-subnav { display: none !important; }
}

/* === Land & Sea: sub-nav backdrop === */
.ls-subnav::before {
  content: "";
  position: absolute;
  inset: 0;
  background-color: rgba(20, 20, 20, 0.3);
  -webkit-backdrop-filter: blur(calc(var(--subnav-backdrop-opacity, 0) * 20px));
  backdrop-filter: blur(calc(var(--subnav-backdrop-opacity, 0) * 20px));
  opacity: var(--subnav-backdrop-opacity, 0);
  z-index: -1;
  pointer-events: none;
}
/* === end sub-nav backdrop === */

/* === Land & Sea: keep Kadence sticky header chrome transparent at all scroll states === */
.transparent-header #masthead .kadence-sticky-header,
.transparent-header #masthead .kadence-sticky-header .site-header-row-container-inner,
.transparent-header #masthead .site-main-header-wrap,
.transparent-header #masthead .site-main-header-wrap .site-header-row-container-inner {
  background-color: transparent !important;
  background-image: none !important;
}
/* === end === */

/* === Land & Sea: header geometry (size + shrink) === */
/* Restore padding/border overrides (originally bundled with the bad backdrop rules removed in v1.0.93) */
.kadence-sticky-header.item-is-fixed.item-at-start {
  padding: 0;
}
.site-header .site-container {
  padding: 0;
}
.site-main-header-wrap .site-header-row-container-inner > .site-container {
  padding: 0 !important;
  border-bottom: 1px solid #dddddd70;
  transition: padding 0.3s ease;
}

.site-main-header-inner-wrap {
  min-height: calc(120px - var(--band-shrink-progress, 0) * 45px) !important;
}
/* === end header geometry === */
/* === Land & Sea: wordmark padding-top (band height held by .site-main-header-inner-wrap min-height) === */
.ls-logo-wordmark {
  padding-top: 12px;
}
/* === end === */
/* === Land & Sea: primary nav hover dim (matches sub-nav 0.8) === */
.site-header .drawer-toggle,
.site-header .header-html-inner a {
  transition: opacity 0.25s;
  padding: 1rem;
}
.site-header .drawer-toggle:hover,
.site-header .drawer-toggle:focus,
.site-header .header-html-inner a:hover,
.site-header .header-html-inner a:focus {
  opacity: 0.8;
}
/* === end load-in choreography === */
/* === end === */

/* === Land & Sea: Pinnacle Feature pattern (2026-06-24, rev 2026-06-25 RR-faithful) === */
.ls-pinnacle {
	background: #fff;
	padding: 120px 0 0px;
}
.ls-pinnacle__intro {
	padding: 0 24px;
}
.ls-eyebrow,
.ls-pinnacle__eyebrow {
	font-size: 15px;
	font-weight: 500;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: #151515;
	margin: 0 0 24px;
}
.ls-pinnacle__heading {
	margin: 0 0 32px;
}
.ls-pinnacle__body {
	font-size: 16px;
	line-height: 1.6;
	margin: 0 0 48px;
}
.ls-pinnacle .ls-pinnacle__gallery {
	display: grid;
	grid-template-columns: repeat(12, 1fr);
	gap: 0;
	align-items: start;
	padding: 96px 24px 0px;
	width: 100vw;
	max-width: 100vw;
	position: relative;
	left: 50%;
	transform: translateX(-50%);
	box-sizing: border-box;
}
.ls-pinnacle .ls-pinnacle__gallery > .wp-block-group__inner-container {
	display: contents;
}
.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img {
	margin: 0;
}
.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img img {
	display: block;
	width: 100%;
	height: auto;
	object-fit: cover;
}
.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img:nth-child(1) {
	grid-column: 1 / 4;
	grid-row: 1;
	transform: translate(8.3vw, 11.5vw);
}
.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img:nth-child(1) img {
	aspect-ratio: 3 / 4;
}
.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img:nth-child(2) {
	grid-column: 4 / 8;
	grid-row: 1;
	transform: translate(6.8vw, -1.7vw);
}
.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img:nth-child(2) img {
	aspect-ratio: 5 / 8;
}
.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img:nth-child(3) {
	grid-column: 7 / 10;
	grid-row: 1;
	transform: translate(6.8vw, 13vw);
}
.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img:nth-child(3) img {
	aspect-ratio: 3 / 4;
}
.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img:nth-child(4) {
	grid-column: 9 / 13;
	grid-row: 1;
	transform: translate(-1vw, -2.1vw) scale(0.648);
}
.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img:nth-child(4) img {
	aspect-ratio: 2 / 3;
}
@media (max-width: 768px) {
	.ls-pinnacle { padding: 64px 0 56px; }
	.ls-pinnacle .ls-pinnacle__gallery {
		grid-template-columns: 1fr 1fr;
		gap: 16px;
		padding: 48px 24px 64px;
	}
	.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img:nth-child(1),
	.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img:nth-child(2),
	.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img:nth-child(3),
	.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img:nth-child(4) {
		grid-column: auto;
		transform: none;
		z-index: auto;
	}
	.ls-pinnacle .ls-pinnacle__gallery .ls-pinnacle__img img {
		aspect-ratio: 3 / 4;
	}
}
/* Large H2s (Neighborhoods, Services, Bespoke) — fluid 24 → 40 */
.ls-hood-carousel__title,
.ls-cta__heading,
.ls-pinnacle__heading {
  font-size: clamp(1.5rem, 3.5vw, 2.5rem);
  line-height: 1.2;
  text-wrap: balance;
}

/* Medium H2s (Parallax, Visit Our Blog) — fluid 22 → 32 */
.ls-parallax__heading,
.kt-adv-heading1231_08928b-cd {
  font-size: clamp(1.375rem, 3vw, 2rem);
  line-height: 1.3;
  text-wrap: balance;
}

/* === Insight two-column parallax content (2026-07-06) === */
.ls-parallax__content--twocol {
	display: grid;
	grid-template-columns: 1fr 1fr;
	column-gap: clamp(2rem, 4vw, 4rem);
	row-gap: 2.5rem;
	align-content: center;
}
.ls-parallax__col {
	min-width: 0;
}
.ls-parallax__col-title {
	margin: 0 0 20px;
	font-size: 1.5rem;
	font-weight: 300;
	letter-spacing: normal;
	line-height: 1.45;
	text-transform: uppercase;
	color: #151515;
}
.ls-parallax__col-list {
	list-style: none;
	margin: 0;
	padding: 0;
}
.ls-parallax__col-list li {
	position: relative;
	margin: 0 0 12px;
	padding-left: 1.1rem;
	font-size: 1rem;
	font-weight: 400;
	line-height: 1.7;
	color: #35414a;
}
.ls-parallax__col-list li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.62em;
	width: 4px;
	height: 4px;
	border-radius: 50%;
	background: #151515;
}
@media (max-width: 768px) {
	.ls-parallax__content--twocol {
		grid-template-columns: 1fr;
		row-gap: 2rem;
	}
}
.ls-parallax--image-right .ls-parallax__content--twocol .ls-parallax__heading,
.ls-parallax--image-right .ls-parallax__content--twocol .ls-parallax__col,
.ls-parallax--image-right .ls-parallax__content--twocol .ls-parallax__col-title,
.ls-parallax--image-right .ls-parallax__content--twocol .ls-parallax__col-list li {
	text-align: left;
}
.ls-parallax__content--twocol .ls-parallax__heading {
	grid-column: 1 / -1;
}
/* === end insight two-column === */

/* Generic H1/H2 fallback for any heading without a custom class */
h1 { font-size: clamp(2rem, 5vw, 3.75rem); line-height: 1.15; }
h2 { font-size: clamp(1.5rem, 3.5vw, 2.5rem); line-height: 1.2; }

/* === end responsive headings === */
/* === Land & Sea: drawer menu redesign (Robin Kencel-inspired) === */

/* Drawer panel: narrower (420px), dark bg preserved */
#widget-drawer.popup-drawer-layout-sidepanel .drawer-inner {
  max-width: 700px !important;
  padding: 36px 100px !important;
  display: flex !important;
  flex-direction: column !important;
}

/* Drawer header: flex row — wordmark left, X close right */
#widget-drawer .drawer-header {
  display: flex !important;
  justify-content: space-between !important;
  align-items: center !important;
  padding: 0 !important;
  margin-bottom: 86px !important;
}

/* Wordmark injected as ::before pseudo-element on the left */
#widget-drawer .drawer-header::before {
  content: '';
  display: block;
  width: 140px;
  height: 26px;
  background-image: url('https://landandsearealty.com/wp-content/uploads/2025/10/Land-Sea-Logo-no-padding.png');
  background-size: contain;
  background-repeat: no-repeat;
  background-position: left center;
  margin-top: 8px;
}

/* Close button: hide "CLOSE" text, keep X icon, large + right */
#widget-drawer .widget-toggle-close .widget-toggle-label,
#widget-drawer .widget-toggle-close > span:not(.kadence-svg-iconset) {
  display: none !important;
}
#widget-drawer .widget-toggle-close {
  padding: 0 !important;
  background: transparent !important;
  border: none !important;
  color: #ffffff !important;
  transition: color 0.25s !important;
  opacity: 1 !important;
}
#widget-drawer .widget-toggle-close .kadence-svg-icon {
  width: 28px !important;
  height: 28px !important;
}
#widget-drawer .widget-toggle-close:hover {
  opacity: 0.7 !important;
}

/* Menu items: left-aligned, larger font, thin bottom dividers */
#widget-drawer .drawer-content .menu {
  list-style: none !important;
  padding: 0 !important;
  margin: 0 !important;
}
#widget-drawer .drawer-content .menu-item {
  border-bottom: 1px solid rgba(255, 255, 255, 0.12) !important;
}
#widget-drawer .drawer-content .menu-item a {
  display: block !important;
  text-align: left !important;
  padding: 5px !important;
  font-family: var(--global-body-font-family, Lato, sans-serif) !important;
  font-size: 18px !important;
  font-weight: 400 !important;
  letter-spacing: 0.1em !important;
  text-transform: uppercase !important;
  color: #ffffff !important;
  text-decoration: none !important;
  transition: opacity 0.25s !important;
}
#widget-drawer .drawer-content .menu-item a:hover {
  opacity: 0.7 !important;
}
/* Content area takes all available vertical space so contact info sits at the bottom */
#widget-drawer .drawer-content {
  flex: 1;
}

/* Contact info at bottom of drawer */
#widget-drawer .drawer-inner::after {
  content: 'T: (239) 970-1000  |  E: admin@landandsearealty.com';
  margin-top: 24px;
  font-family: var(--global-body-font-family, Lato, sans-serif);
  font-size: 12px;
  letter-spacing: normal;
  color: rgba(255, 255, 255, 0.82);
}
/* === end drawer redesign === */

/* === Land & Sea: INQUIRE drawer (left-side slide-out, Robin Kencel-inspired) === */
#ls-inquire-drawer {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 9998;
}
#ls-inquire-drawer.is-open { pointer-events: auto; }

.ls-inquire-drawer__overlay {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.5);
  opacity: 0;
  transition: opacity 400ms ease;
  cursor: pointer;
}
#ls-inquire-drawer.is-open .ls-inquire-drawer__overlay { opacity: 1; }

.ls-inquire-drawer__panel {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 700px;
  max-width: 100vw;
  background: #ededed;
  transform: translateX(-100%);
  transition: transform 400ms ease;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  padding: 36px 100px;
  box-sizing: border-box;
}
#ls-inquire-drawer.is-open .ls-inquire-drawer__panel { transform: translateX(0); }

.ls-inquire-drawer__header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 86px;
}
.ls-inquire-drawer__logo {
  width: auto;
  height: 26px;
  display: block;
  margin-top: 8px;
}
.ls-inquire-drawer__close {
  background: none;
  border: none;
  padding: 0;
  font-size: 32px;
  line-height: 1;
  color: #151515;
  cursor: pointer;
  transition: opacity 0.25s;
}
.ls-inquire-drawer__close:hover { opacity: 0.7; }

.ls-inquire-drawer__heading {
  font-family: var(--global-heading-font-family, Raleway, sans-serif);
  font-size: clamp(2rem, 4vw, 2.75rem);
  font-weight: 300;
  letter-spacing: normal;
  text-transform: uppercase;
  color: #151515;
  margin: 0 0 32px;
  line-height: 1.1;
}

.ls-inquire-drawer__form {
  display: flex;
  flex-direction: column;
  gap: 24px;
}
.ls-inquire-drawer__field {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.ls-inquire-drawer__field-label {
  font-family: var(--global-body-font-family, Lato, sans-serif);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #35414a;
}
.ls-inquire-drawer__field input,
.ls-inquire-drawer__field textarea {
  font-family: var(--global-body-font-family, Lato, sans-serif);
  font-size: 15px;
  color: #35414a;
  background: transparent;
  border: none;
  border-bottom: 1px solid #1a1a1a;
  padding: 6px 0;
  width: 100%;
  box-sizing: border-box;
}

/* === Land & Sea: kill Kadence's default border-radius on drawer form fields
   (causes the bottom border to "curl up" at the ends) === */
.ls-inquire-drawer__field input,
.ls-inquire-drawer__field textarea {
  border-radius: 0;
}
/* === end === */
.ls-inquire-drawer__field textarea {
  border: 1px solid #1a1a1a;
  padding: 8px;
  resize: vertical;
  min-height: 90px;
}
.ls-inquire-drawer__field input:focus,
.ls-inquire-drawer__field textarea:focus {
  outline: none;
  border-color: #000;
}

.ls-inquire-drawer__consent {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-family: var(--global-body-font-family, Lato, sans-serif);
  font-size: 12px;
  line-height: 1.5;
  color: #35414a;
  cursor: pointer;
}
.ls-inquire-drawer__consent input { margin-top: 3px; flex-shrink: 0; }

.ls-inquire-drawer__submit {
	background: #176db7;
	color: #ffffff;
  display: inline-block;
  background: transparent;
  border: 2px solid #1a1a1a;
  color: #151515;
  font-family: var(--global-body-font-family, Lato, sans-serif);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 16px 32px;
  cursor: pointer;
  align-self: flex-start;
  transition: background 0.25s, color 0.25s;
  margin-top: 8px;
}
.ls-inquire-drawer__submit:hover {
  background: #1a1a1a;
  color: #ededed;
}

.ls-inquire-drawer__success {
  display: none;
  padding: 32px 0;
  font-family: var(--global-body-font-family, Lato, sans-serif);
  font-size: 15px;
  color: #35414a;
}
#ls-inquire-drawer.is-success .ls-inquire-drawer__form { display: none; }
#ls-inquire-drawer.is-success .ls-inquire-drawer__success { display: block; }

.ls-inquire-drawer__contact {
  margin-top: auto;
  padding-top: 24px;
  font-family: var(--global-body-font-family, Lato, sans-serif);
  font-size: 12px;
  letter-spacing: normal;
  color: #35414a;
}

body.ls-inquire-open { overflow: hidden; }

@media (max-width: 600px) {
  .ls-inquire-drawer__panel { width: 100vw; padding: 24px; }
  .ls-inquire-drawer__heading { font-size: 2rem; }

  /* Right drawer: match left drawer's mobile padding so logo + X sit at
     equivalent insets on both panels, and menu links align with the logo edge */
  #widget-drawer.popup-drawer-layout-sidepanel .drawer-inner {
    padding: 24px !important;
  }
  #widget-drawer .drawer-content .menu-item a {
    padding: 5px 0 !important;
  }
}
/* === end INQUIRE drawer === */

/* === Land & Sea: mobile primary header layout — wordmark on top row, INQUIRE/MENU below === */
@media (max-width: 768px) {
  /* Re-shape the Kadence header grid into 2 rows: logo on top, left/right beneath */
  .site-main-header-inner-wrap {
    grid-template-columns: 1fr 1fr !important;
    grid-template-rows: auto auto !important;
    grid-template-areas:
      "logo logo"
      "left right" !important;
    row-gap: 0 !important;
    align-items: stretch !important;
  }

  /* Top row: wordmark, centered, hugging the top to leave room below */
  .site-header-main-section-center {
    grid-area: logo !important;
    justify-content: center !important;
    align-items: flex-start !important;
    padding-top: 6px !important;
    padding-bottom: 0 !important;
  }

  /* Bottom-left cell: INQUIRE NOW */
  .site-header-main-section-left {
    grid-area: left !important;
    justify-content: flex-start !important;
    align-items: center !important;
    padding-left: 16px !important;
  }

  /* Bottom-right cell: MENU */
  .site-header-main-section-right {
    grid-area: right !important;
    justify-content: flex-end !important;
    align-items: center !important;
    padding-right: 16px !important;
  }

  /* Let the header auto-size to fit the two stacked rows */
  .site-header-inner-wrap.kadence-sticky-header {
    height: auto !important;
    min-height: 0 !important;
  }
  .site-main-header-wrap,
  .site-main-header-inner-wrap {
    height: auto !important;
  }

  /* The INQUIRE NOW and MENU items themselves — give them clean touch targets */
  .site-header-main-section-left .header-html-inner a,
  .site-header-main-section-right .header-menu-container .menu-toggle-open,
  .site-header-main-section-right .drawer-toggle {
    padding: 8px 4px !important;
    line-height: 1.2 !important;
    white-space: nowrap !important;
  }
}
/* === end mobile primary header layout === */

/* === Land & Sea: header slide-away === */
/* --- Sub-nav decouple: wrapper slides up, subnav counter-translates to stay pinned (2026-06-29) --- */
.site-header-upper-inner-wrap {
  transform: translateY(calc(-1 * var(--primary-slide-px, 0px)));
  will-change: transform;
}
/* ls-subnav: no transform needed — rides the wrapper translate to y=0 naturally */
.ls-subnav::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  background: rgba(20, 20, 20, 0.85);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  opacity: var(--subnav-backdrop-opacity, 0);
  pointer-events: none;
}
/* --- end sub-nav decouple --- */
/* === end === */
/* === Land & Sea: sub-nav backdrop === */
.ls-subnav {
  position: relative;
  isolation: isolate;
}
.ls-subnav::before {
  content: "";
  position: absolute;
  inset: 0;
  background-color: rgba(20, 20, 20, 0.3);
  -webkit-backdrop-filter: blur(calc(var(--subnav-backdrop-opacity, 0) * 20px));
  backdrop-filter: blur(calc(var(--subnav-backdrop-opacity, 0) * 20px));
  opacity: var(--subnav-backdrop-opacity, 0);
  z-index: -1;
  pointer-events: none;
}
/* === end === */

/* === Land & Sea: keep Kadence sticky header chrome transparent at all scroll states === */
.transparent-header #masthead .kadence-sticky-header,
.transparent-header #masthead .kadence-sticky-header .site-header-row-container-inner,
.transparent-header #masthead .site-main-header-wrap,
.transparent-header #masthead .site-main-header-wrap .site-header-row-container-inner {
  background-color: transparent !important;
  background-image: none !important;
}
/* === end === */

/* === Land & Sea: header geometry (size + shrink) === */
/* Restore padding/border overrides (originally bundled with the bad backdrop rules removed in v1.0.93) */
.kadence-sticky-header.item-is-fixed.item-at-start {
  padding: 0;
}
.site-header .site-container {
  padding: 0;
}
.site-main-header-wrap .site-header-row-container-inner > .site-container {
  padding: 0 !important;
  border-bottom: 1px solid #dddddd70;
  transition: padding 0.3s ease;
}

.site-main-header-inner-wrap {
  min-height: calc(120px - var(--band-shrink-progress, 0) * 45px) !important;
}
/* === end header geometry === */
/* === Land & Sea: wordmark padding-top (band height held by .site-main-header-inner-wrap min-height) === */
.ls-logo-wordmark {
  padding-top: 5px;
}
/* === end === */
/* === Land & Sea: primary nav hover dim (matches sub-nav 0.8) === */
.site-header .drawer-toggle,
.site-header .header-html-inner a {
  transition: opacity 0.25s;
}
.site-header .drawer-toggle:hover,
.site-header .drawer-toggle:focus,
.site-header .header-html-inner a:hover,
.site-header .header-html-inner a:focus {
  opacity: 0.8;
}

/* scroll JS overrides via --hero-content-opacity (no transition during scrub) *
/* === end load-in choreography === */

/* === Kadence drawer: match left inquire-drawer timing (2026-06-29) === */
.drawer-inner {
  transition: transform 0.4s ease, opacity 0.4s ease !important;
}
.drawer-overlay {
  transition: opacity 0.4s ease !important;
}
.popup-drawer {
  transition: opacity 0.4s ease, left 0s 0.4s, right 0s 0.4s !important;
}
.popup-drawer.show-drawer {
  transition: opacity 0.4s ease, left 0s 0s, right 0s 0s !important;
}
/* === end Kadence drawer timing === */

/* === hero-stage: LCP-optimized hero (article method, 2026-07-01) === */
.hero-stage {
  position: relative;
  width: 100vw;
  left: 50%;
  right: 50%;
  margin-left: -50vw;
  margin-right: -50vw;
  height: 100vh;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #1a1a1a;
}
.hero-stage__sharp,
.hero-stage__lqip {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.hero-stage__sharp {
  z-index: 1;
  opacity: 1;
}
.hero-stage__lqip {
  z-index: 2;
  transition: opacity 1.2s ease-in-out;
  transition-delay: 1.2s;
  pointer-events: none;
}

.hero-stage__overlay {
  position: absolute;
  inset: 0;
  z-index: 1;
  background: rgba(0, 0, 0, 0.22);
  pointer-events: none;
}

.hero-stage__content {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 1500px;
  padding: 0 24px;
  text-align: center;
}

.hero-stage__title {
  margin: 0 0 48px;
  font-family: var(--global-heading-font-family, Raleway, sans-serif);
  font-weight: 300;
  color: #ffffff;
  text-shadow: 0 1px 2px rgba(0,0,0,0.7), 0 2px 10px rgba(0,0,0,0.55), 0 6px 30px rgba(0,0,0,0.45);
  display: flex;
  flex-direction: column;
  gap: 14px;
  line-height: 1;
}

.hero-stage__title-main {
  font-size: clamp(1.75rem, 4vw, 4rem);
  letter-spacing: normal;
}

.hero-stage__title-sub {
  font-size: clamp(1rem, 1.8vw, 1.75rem);
  letter-spacing: normal;
}

.hero-stage__buttons {
  display: flex;
  justify-content: center;
  gap: 16px;
  flex-wrap: wrap;
}

.hero-stage__btn {
  display: inline-block;
  padding: 16px 40px;
  font-family: var(--global-body-font-family, Lato, sans-serif);
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-decoration: none;
  color: #ffffff;
  background: transparent;
  border-radius: 30px;
  transition: background 0.25s ease, color 0.25s ease, border-color 0.25s ease;
  border: 1px solid #fff;
  -webkit-tap-highlight-color: transparent;
  width: 200px;
}

.hero-stage__btn--fill {
  border-width: 0;
  padding: 16px 40px;
}

.hero-stage__btn:hover,
.hero-stage__btn:focus-visible {
  background-color: #dddddd20;
  color: #ffffff;
}

.hero-stage__btn--fill:hover,
.hero-stage__btn--fill:focus-visible {
  border: 1px solid #fff;
  padding: 16px 40px;
}
/* === end hero-stage === */


/* === Land & Sea: header load-in fade (2026-07-01) === */
/* Header starts hidden and fades in once body.ls-header-ready is added: by header-choreography-v2.js on
   the homepage, header-reveal.js elsewhere, or the 2.5 s fallback timer printed at the top of <head> by
   functions.php ("Header fade" block), which also repeats the opacity:0 inline so Firefox never sees the
   header visible before this file loads. One mechanism only; 1.3 s fade (2026-10-21, Dan). */
.site-header-inner-wrap {
  opacity: 0;
  transition: opacity 1300ms ease;
}
body.ls-header-ready .site-header-inner-wrap {
  opacity: 1;
}
/* === end header load-in fade === */


/* === Land & Sea: Neighborhood Page Template (2026-07-06) === */

.ls-neighborhood {
	--ls-nb-max: 1414px;
	--ls-nb-pad: clamp(20px, 5vw, 80px);
	--ls-nb-gap: clamp(48px, 6vw, 96px);
}

/* --- Hero --- */
.ls-nb-hero {
	position: relative;
	min-height: 60vh;
	display: flex;
	align-items: flex-end;
	overflow: hidden;
}
/* The hero is a real <img> so WordPress can emit srcset: a phone no longer
   downloads the full 3840px file. It sits behind the scrim and the title block. */
.ls-nb-hero__img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	z-index: 0;
}
.ls-nb-hero__overlay {
	z-index: 1;
}
.ls-nb-hero__inner {
	position: relative;
	z-index: 2;
}
.ls-nb-hero--nobg { background-color: #1c2b33; }
.ls-nb-hero__overlay {
	position: absolute;
	inset: 0;
	/* Two scrims: top for header legibility (white 13-14px nav links need
     4.5:1; a bright daytime hero would otherwise sit near 1.5:1), bottom for
     the hero title. Top stops hold through the 181px header band, then clear. */
  background:linear-gradient(to bottom,rgba(0,0,0,.45) 0%,rgba(0,0,0,.38) 15%,rgba(0,0,0,.28) 28%,rgba(0,0,0,.2) 40%,rgba(0,0,0,.2) 50%,rgba(0,0,0,.3) 65%,rgba(0,0,0,.42) 82%,rgba(0,0,0,.55) 100%);
	pointer-events: none;
}
.ls-nb-hero__inner {
	position: relative;
	width: 100%;
	max-width: var(--ls-nb-max);
	margin: 0 auto;
	padding: 0 var(--ls-nb-pad) clamp(26px, 4vw, 52px);
}
.ls-nb-hero__title {
	color: #ffffff;
	margin: 0;
	font-size: clamp(2rem, 4.5vw, 3.4rem);
	font-weight: 400;
	letter-spacing: 0.03em;
	line-height: 1.1;
	/* Three layers: a tight pass for edge definition, a mid pass to lift the
	   letterforms off busy detail, and a wide ambient pass. Sized for the worst
	   case — a daylight hero where centre-band luminance runs above 120. */
	text-shadow: 0 1px 2px rgba(0,0,0,0.7), 0 2px 10px rgba(0,0,0,0.55), 0 6px 30px rgba(0,0,0,0.45);
}

/* --- Body container --- */
.ls-nb-body {
	max-width: var(--ls-nb-max);
	margin: 0 auto;
	padding: clamp(48px, 7vw, 96px) var(--ls-nb-pad);
	display: flex;
	flex-direction: column;
	gap: var(--ls-nb-gap);
}
.ls-nb-section { margin: 0; }
.ls-nb-section__heading {
	font-size: 2.5rem;
	font-weight: 300;
	letter-spacing: normal;
	text-transform: uppercase;
	margin: 0 0 1rem;
}
.ls-nb-section__subheading {
	font-size: clamp(1.15rem, 2vw, 1.4rem);
	font-weight: 300;
	margin: 0 0 0.75rem;
}
.ls-nb-prose { font-size: 1.05rem; line-height: 1.75; color: #35414a; }
.ls-nb-prose p {
	margin: 0 0 1rem;
	/* Keep a paragraph whole. Without this a paragraph splits at the column break
	   and its tail lands alone at the top of the next column, reading as a stray
	   fragment — worst directly above a column-span table, where the orphan sits
	   beside a heading it does not belong to. */
	break-inside: avoid;
}
.ls-nb-prose p:last-child { margin-bottom: 0; }

/* --- Stats --- */
/* Full-bleed band (2026-09-08): the wrap spans the viewport so the hairline
   rules run edge to edge; the list stays on the shared content band.
   Same breakout technique as .ls-nb-gallery-wrap. */
.ls-nb-stats-wrap {
	width: 100vw;
	max-width: 100vw;
	margin-inline: calc(50% - 50vw);
	border-top: 1px solid rgba(0,0,0,0.08);
	border-bottom: 1px solid rgba(0,0,0,0.08);
}
.ls-nb-stats {
	list-style: none;
	max-width: var(--ls-nb-max);
	margin: 0 auto;
	padding: clamp(28px, 4vw, 44px) var(--ls-nb-pad);
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
	gap: clamp(20px, 3vw, 40px);
}
.ls-nb-stat { display: flex; flex-direction: column; align-items: center; text-align: center; }
.ls-nb-stat__value { font-size: clamp(1.6rem, 3vw, 2.4rem); font-weight: 400; line-height: 1; }
.ls-nb-stat__label {
	margin-top: 0.5rem;
	font-size: 0.8rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: #6a7680;
}

/* --- Gallery: centre-focused carousel (rebuilt 2026-08-07, v2) --- */
/* Modelled on the Rolls-Royce Coachbuild "Masters of Craft" carousel, measured
   from a screen recording of the reference:
     - heading and intro CENTRED, intro narrow (~25% of viewport)
     - active slide 42vw at 16:9; neighbours scale(0.8) on a shared centre axis
     - slides sit EDGE TO EDGE with no gap: the ~4vw visual gutter is produced
       entirely by the 0.8 scale. Predicted neighbour edge 1128 vs measured 1126.
   Movement is transform-based, not scroll-based, because the active slide has to
   be centred in the viewport rather than snapped to a left edge. */
.ls-nb-gallery-wrap {
	--ls-gal-slide: 42vw;
	--ls-gal-scale: 0.8;
	--ls-gal-ease: cubic-bezier(0.4, 0, 0.2, 1);
	--ls-gal-speed: 900ms;
	width: 100vw;
	max-width: 100vw;
	margin-inline: calc(50% - 50vw);
	overflow: hidden;
}
.ls-nb-gallery__head {
	max-width: var(--ls-nb-max);
	margin: 0 auto;
	padding: 0 var(--ls-nb-pad);
	text-align: center;
}
.ls-nb-gallery__head .ls-nb-section__heading { text-align: center; }
.ls-nb-gallery__intro {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: clamp(1rem, 1.1vw, 1.0625rem);
	font-weight: 400;
	line-height: 1.7;
	color: #35414a;
	max-width: 46ch;
	margin: 0 auto clamp(40px, 5vw, 72px);
}
.ls-nb-gallery__viewport { overflow: visible; }
.ls-nb-gallery {
	display: flex;
	margin: 0;
	padding: 0;
	list-style: none;
	will-change: transform;
	transition: transform var(--ls-gal-speed) var(--ls-gal-ease);
}
/* is-instant freezes BOTH the track translate and the slides’ scale. Freezing
   only the track let the outgoing and incoming active slides animate their
   scale across the silent loop reset, which read as a shrink-and-regrow pulse. */
.ls-nb-gallery.is-instant,
.ls-nb-gallery.is-instant .ls-nb-gallery__item { transition: none; }
.ls-nb-gallery__item {
	flex: 0 0 var(--ls-gal-slide);
	width: var(--ls-gal-slide);
	margin: 0;
	overflow: hidden;
	transform: scale(var(--ls-gal-scale));
	transition: transform var(--ls-gal-speed) var(--ls-gal-ease);
}
.ls-nb-gallery__item { cursor: pointer; }
.ls-nb-gallery__item.is-active { transform: scale(1); cursor: default; }
.ls-nb-gallery__item img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	aspect-ratio: 16 / 9;
}
/* Dots with an autoplay progress arc. The arc is a stroke-dashoffset animation
   whose duration is driven by --ls-gal-duration, set from JS so the timer and
   the visual can never drift apart. */
.ls-nb-gallery__dots {
	display: flex;
	justify-content: center;
	align-items: center;
	gap: 14px;
	margin-top: clamp(24px, 3vw, 40px);
}
.ls-nb-gallery__dot {
	position: relative;
	width: 24px;
	height: 24px;
	padding: 0;
	border: 0;
	background: none;
	cursor: pointer;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}
.ls-nb-gallery__pip {
	width: 5px;
	height: 5px;
	border-radius: 50%;
	background: #9aa1a8;
	transition: background-color 0.3s ease;
}
.ls-nb-gallery__dot.is-active .ls-nb-gallery__pip { background: #35414a; }
.ls-nb-gallery__ring {
	position: absolute;
	inset: 0;
	width: 24px;
	height: 24px;
	transform: rotate(-90deg);
	opacity: 0;
	transition: opacity 0.3s ease;
}
.ls-nb-gallery__dot.is-active .ls-nb-gallery__ring { opacity: 1; }
.ls-nb-gallery__ring circle {
	fill: none;
	stroke-width: 1.5;
}
.ls-nb-gallery__ring-track { stroke: rgba(53, 65, 74, 0.18); }
.ls-nb-gallery__ring-arc {
	stroke: #35414a;
	stroke-dasharray: 56.5;
	stroke-dashoffset: 56.5;
}
.ls-nb-gallery__dot.is-active.is-timing .ls-nb-gallery__ring-arc {
	animation: ls-gal-arc var(--ls-gal-duration, 5000ms) linear forwards;
}
@keyframes ls-gal-arc { to { stroke-dashoffset: 0; } }
@media (max-width: 1024px) {
	.ls-nb-gallery-wrap { --ls-gal-slide: 62vw; }
}
@media (max-width: 700px) {
	.ls-nb-gallery-wrap { --ls-gal-slide: 80vw; --ls-gal-scale: 0.86; }
	.ls-nb-gallery__intro { max-width: none; }
}
/* Respect reduced-motion: no autoplay arc, no slide easing. JS also disables
   the timer itself, so this is belt and braces rather than the only guard. */
@media (prefers-reduced-motion: reduce) {
	.ls-nb-gallery,
	.ls-nb-gallery__item { transition: none; }
	.ls-nb-gallery__dot.is-active.is-timing .ls-nb-gallery__ring-arc { animation: none; }
	.ls-nb-gallery__ring { opacity: 0; }
}

/* --- IDX placeholder --- */
.ls-nb-idx-placeholder {
	text-align: center;
	color: #151515;
}
.ls-nb-idx-placeholder__note { margin: 0; font-style: italic; }

/* --- Market report --- */
.ls-nb-report__link {
	display: inline-block;
	margin-top: 0.5rem;
	font-weight: 500;
	letter-spacing: normal;
	border-bottom: 1px solid currentColor;
	padding-bottom: 2px;
	text-decoration: none;
}

/* --- Sibling index --- */
.ls-nb-index__list {
	list-style: none;
	margin: 0;
	padding: 0;
	columns: 4;
	column-gap: clamp(20px, 3vw, 40px);
}
.ls-nb-index__item { break-inside: avoid; margin-bottom: 0.5rem; }
.ls-nb-index__item a {
	text-decoration: none;
	border-bottom: 1px solid transparent;
	transition: border-color 0.25s ease;
}
.ls-nb-index__item a:hover { border-bottom-color: currentColor; }

/* --- FAQ (Rank Math block sits inside) --- */
.ls-nb-faq__content { font-size: 1.05rem; line-height: 1.7; }

/* --- Responsive --- */
@media (max-width: 991.99px) {
	.ls-nb-index__list { columns: 3; }
}
@media (max-width: 767px) {
	.ls-nb-index__list { columns: 2; }
	.ls-nb-hero { min-height: 50vh; }
}

/* === end Neighborhood Page Template === */

/* === Land & Sea: Neighborhood Template v2 additions (2026-07-06) === */

/* --- Jump nav (sticky under hero) --- */
.ls-nb-jumpnav {
	position: sticky;
	top: 0;
	z-index: 20;
	background: #fff;
	border-bottom: 1px solid rgba(0,0,0,0.08);
}
.ls-nb-jumpnav__list {
	list-style: none;
	margin: 0 auto;
	padding: 0 clamp(20px, 5vw, 80px);
	max-width: var(--ls-nb-max);
	display: flex;
	/* Never wrap. A jump bar broken across two rows reads as a menu rather than a
	   sub-nav. Ten items measured 974px, and nine 36px gaps added 324px, overflowing
	   the 1254px band by 44px. The gap now tightens to 28px at desktop (1226px total)
	   and anything that still will not fit scrolls sideways instead of stacking. */
	flex-wrap: nowrap;
	gap: clamp(14px, 2vw, 28px);
	overflow-x: auto;
	overscroll-behavior-x: contain;
	scrollbar-width: none;
	-ms-overflow-style: none;
}
.ls-nb-jumpnav__list::-webkit-scrollbar {
	display: none;
}
.ls-nb-jumpnav__item {
	flex: 0 0 auto;
}
.ls-nb-jumpnav__item a {
	white-space: nowrap;
}
.ls-nb-jumpnav__item a {
	display: inline-block;
	padding: 16px 0;
	font-size: 0.8rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	text-decoration: none;
	color: #35414a;
	border-bottom: 2px solid transparent;
	transition: border-color 0.2s ease, color 0.2s ease;
}
.ls-nb-jumpnav__item a:hover {
	border-bottom-color: currentColor;
}

/* offset anchor targets so sticky nav doesn't cover headings */
.ls-nb-section[id],
#listings[id] {
	scroll-margin-top: 72px;
}

/* --- Insight layout: image + six blocks --- */
.ls-nb-insight__intro {
	margin-bottom: clamp(24px, 3vw, 40px);
}
.ls-nb-insight__layout {
	display: grid;
	grid-template-columns: minmax(280px, 1fr) 2fr;
	gap: clamp(24px, 4vw, 56px);
	align-items: start;
}
.ls-nb-insight__figure {
	margin: 0;
	position: sticky;
	top: 84px;
}
.ls-nb-insight__figure img {
	display: block;
	width: 100%;
	height: auto;
	object-fit: cover;
}
.ls-nb-insight__blocks {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: clamp(24px, 3vw, 40px);
}
.ls-nb-insight-block__title {
	font-size: 1.05rem;
	font-weight: 600;
	letter-spacing: normal;
	text-transform: uppercase;
	margin: 0 0 0.75rem;
	padding-bottom: 0.5rem;
	border-bottom: 1px solid rgba(0,0,0,0.1);
}
.ls-nb-insight-block__list {
	margin: 0;
	padding-left: 1.1rem;
	line-height: 1.6;
}
.ls-nb-insight-block__list li {
	margin-bottom: 0.4rem;
}

/* --- CTA band --- */
.ls-nb-cta {
	/* Background image with a 0.3 black scrim. Measured the visible crop at each
     viewport (cover crops differently: ~28% of image height at 2406px wide, but
     the full height and only 51% of the width on mobile). Worst-case luminance
     behind the text was 131, i.e. 3.78:1 against white — below the 4.5:1 needed
     for the body copy. The 0.3 scrim lifts every viewport to 6.7:1 or better.
     background-color is retained as a fallback if the image fails to load. */
  background-color: #1c2b33;
  background-image:
    linear-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3)),
    url("https://landandsearealty.com/wp-content/uploads/2026/08/Park-Shore-Venetian-Bay.webp");
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
	color: #ffffff;
	/* Vertical padding shifted +50px at both ends of the clamp, so the band is
     100px taller at every viewport rather than only on very wide screens.
     Original was clamp(48px, 7vw, 96px). */
  padding: clamp(98px, calc(7vw + 50px), 146px) clamp(20px, 5vw, 80px);
	text-align: center;
}
.ls-nb-cta__inner {
	max-width: 720px;
	margin: 0 auto;
}
.ls-nb-cta__heading {
	color: #ffffff;
	font-size: clamp(1.6rem, 3vw, 2.4rem);
	font-weight: 400;
	letter-spacing: normal;
	margin: 0 0 0.75rem;
}
.ls-nb-cta__text {
	font-size: 1.15rem;
	line-height: 1.65;
	/* Was opacity 0.85, which pushed the supporting line toward the scrim. The
	   copy has to be readable for the button to be worth pressing. */
	opacity: 0.94;
	max-width: 58ch;
	margin: 0 auto 2.25rem;
}
.ls-nb-cta__button {
  /* Visual styling now comes from the shared .ls-cta__button rule so this
     button cannot drift from the other CTAs. Layout basics only here. */
  display: inline-block;
  text-decoration: none;
}


/* --- Insight responsive --- */
@media (max-width: 900px) {
	.ls-nb-insight__layout {
		grid-template-columns: 1fr;
	}
	.ls-nb-insight__figure {
		position: static;
	}
}
@media (max-width: 560px) {
	.ls-nb-insight__blocks {
		grid-template-columns: 1fr;
	}
}

/* === end Neighborhood Template v2 additions === */

/* === Land & Sea: Neighborhood Template v3 tweaks (2026-07-06) === */

/* Jump links: heavier weight */
.ls-nb-jumpnav__item a {
	font-weight: 700;
}

/* Insight image now full-width under the section title (layout restacked) */
.ls-nb-insight__figure {
	margin: 0 0 clamp(24px, 3vw, 40px);
	position: static;
	width: 100%;
}
.ls-nb-insight__figure img {
	display: block;
	width: 100%;
	height: auto;
	object-fit: cover;
}

/* Six blocks span full width beneath the image: 3 across on desktop */
.ls-nb-insight__blocks {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: clamp(24px, 3vw, 40px);
}

@media (max-width: 900px) {
	.ls-nb-insight__blocks {
		grid-template-columns: repeat(2, 1fr);
	}
}
@media (max-width: 560px) {
	.ls-nb-insight__blocks {
		grid-template-columns: 1fr;
	}
}

/* === end Neighborhood Template v3 tweaks === */

/* === Interior (neighborhood template) header: absolute overlay, scrolls away (2026-07-07) === */
/* Header overlays the hero at the top (white nav readable over the dark hero image),
   then scrolls away with the page. Not fixed, not sticky. Scoped to the neighborhood
   template body class so the homepage is unaffected. */
.page-template-neighborhood-page-template #masthead,
.page-template-page-with-hero #masthead {
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	z-index: 100;
}
.page-template-neighborhood-page-template .site-header-inner-wrap,
.page-template-page-with-hero .site-header-inner-wrap {
  position: absolute;
  /* Without horizontal anchoring an absolutely positioned wrap is shrink-to-fit.
     Verified with scripts disabled: it rendered 311px wide pinned left, which is
     the load glitch (header stacked top-left). It only reached full width later
     because header-subnav.js injected full-width content. Anchoring it makes the
     header lay out correctly on first paint, with no JS involved. */
  left: 0;
  right: 0;
  width: 100%;
  /* Vertical offset in CSS, not JS. header-reveal.js was setting `top` inline to
     clear the admin bar, so the header painted at top:0 and then dropped 32px once
     the script ran — the remaining jump. Declaring it here makes first paint match
     the final position. Logged-out visitors never saw this one (no admin bar, so
     JS set top:0 either way); it only affected logged-in admins. */
  top: 0;
  /* (The 1.2 s ls-header-failsafe animation that used to sit here was removed 2026-10-21: it raced the fade
     and made loads look different. The fallback is now a 2.5 s timer in functions.php.) */
}
body.admin-bar.page-template-neighborhood-page-template .site-header-inner-wrap,
body.admin-bar.page-template-page-with-hero .site-header-inner-wrap {
  top: 32px;
}
@media screen and (max-width: 782px) {
  body.admin-bar.page-template-neighborhood-page-template .site-header-inner-wrap,
body.admin-bar.page-template-page-with-hero .site-header-inner-wrap {
    top: 46px;
  }
}
/* === end interior absolute header === */

/* === Interior parallax block headings: 2.5rem / 0.15em (2026-07-07) === */
/* Scoped to the neighborhood template so the homepage's shared .ls-parallax__heading
   (and the paired Kadence heading class) are unaffected. */
.page-template-neighborhood-page-template .ls-parallax__heading {
	font-size: 2rem;
	letter-spacing: normal;
}
/* === end interior parallax block headings === */


/* === Land & Sea: IDX listings grid — 400px photo width, 3-up (2026-08-06) === */
/* Showcase IDX ships repeat(auto-fill,minmax(~260px,1fr)) with !important, so a
   wider container ADDS columns instead of widening cards. Pin 3 tracks at 402px
   (400px photo + 1px card border each side) so the MLS CDN image, served at
   width=400&height=272, renders 1:1 with no upscaling. !important is required
   to outrank the plugin. Below 1024px, IDX native responsive behaviour resumes. */
@media (min-width: 1024px) {
  .page-template-neighborhood-page-template .ls-nb-listings-wrap .sidx-grid {
    grid-template-columns: repeat(3, minmax(0, 402px)) !important;
    gap: 24px !important;
    justify-content: space-between !important;
  }
  .page-template-neighborhood-page-template .ls-nb-listings-wrap .sidx-search-result-grid-item {
    max-width: none !important;
  }
}
/* === end IDX listings grid === */


/* === Land & Sea: prose two-column layout (2026-08-06) === */
/* Two-column prose (rescoped 2026-08-07).
   Applies to the two long-form prose sections only: #neighborhood-detail
   (.ls-nb-intro-body) and #additional. NOT #overview, which now opens with
   .ls-nb-lede and reads as a single-column introduction — columns there fought
   the entry point of the page. At the 1254px band a single column runs ~200
   characters per line; two bring it to ~71, inside the 60-75 ideal. Section
   headings sit outside .ls-nb-prose, so they stay full width above.
   :is() keeps this to one selector per rule rather than doubling every line;
   note :is() takes the specificity of its most specific argument (#additional),
   so both branches match at ID specificity. */
@media (min-width: 1024px) {
  .page-template-neighborhood-page-template :is(#additional, .ls-nb-intro-body) .ls-nb-prose {
    column-count: 2;
    column-gap: clamp(32px, 4vw, 64px);
    orphans: 2;
    widows: 2;
  }
  .page-template-neighborhood-page-template :is(#additional, .ls-nb-intro-body) .ls-nb-prose > :first-child {
    margin-top: 0;
  }
  .page-template-neighborhood-page-template :is(#additional, .ls-nb-intro-body) .ls-nb-prose h3,
  .page-template-neighborhood-page-template :is(#additional, .ls-nb-intro-body) .ls-nb-prose h4 {
    break-after: avoid;
    break-inside: avoid;
  }
  .page-template-neighborhood-page-template :is(#additional, .ls-nb-intro-body) .ls-nb-prose ul,
  .page-template-neighborhood-page-template :is(#additional, .ls-nb-intro-body) .ls-nb-prose ol,
  .page-template-neighborhood-page-template :is(#additional, .ls-nb-intro-body) .ls-nb-prose blockquote {
    break-inside: avoid;
  }
}
/* === end prose two-column layout === */


/* === Land & Sea: IDX "See All" button — match homepage CTA (2026-08-06) === */
/* Values read from .ls-cta__button on the homepage so the two stay identical.
   No !important needed — verified visually; the plugin does not flag these.
   NOTE: getComputedStyle returns stale values on Showcase IDX elements in the
   automation environment, so this was confirmed by screenshot, not by reading
   computed styles. */
.page-template-neighborhood-page-template .sidx-hotsheet-see-all-results {
  background-color: #176db7;
  color: #ffffff;
  border: 0;
  border-radius: 999px;
  padding: 16px 40px;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  transition: background-color 0.3s ease, transform 0.3s ease;
}
body.page-template-neighborhood-page-template button.sidx-hotsheet-see-all-results:hover,
body.page-template-neighborhood-page-template button.sidx-hotsheet-see-all-results:focus {
  /* The See All control is a <button>, not an anchor. Showcase IDX ships its own
     :hover rule from a cross-origin stylesheet that repaints the label near-black;
     it is unreachable by specificity alone, so colour is forced here. Same reason
     the IDX grid rules need !important — see 02-css-architecture.md. */
  background-color: #125a97 !important;
  color: #ffffff !important;
  transform: translateY(-1px);
}
/* === end IDX "See All" button === */


/* === Land & Sea: CTA class on a Gutenberg button wrapper (2026-08-06) === */
/* Gutenberg’s "Additional CSS class(es)" field applies the class to the wrapper
   .wp-block-button, NOT the inner <a>. Without this the wrapper got the full
   button treatment (padding, background, radius) around an already-styled
   anchor — a padded box inside a padded box, measured 309x85 instead of 229x53.
   The selector above now also styles the inner anchor; this strips the wrapper
   back so only one pill paints. */
.ls-cta__button.wp-block-button {
  background: none;
  background-color: transparent;
  padding: 0;
  border-radius: 0;
  margin-top: 30px;
  /* The wrapper is square, so any shadow inherited from the shared button rule
     casts a rectangle behind the rounded anchor. Reset it here; the anchor keeps
     its own shadow via .ls-cta__button > .wp-block-button__link. */
  box-shadow: none;
}
/* === end CTA wrapper === */


/* === Land & Sea: header utility links weight (2026-08-06) === */
/* INQUIRE NOW and MENU shipped at font-weight 400 while the subnav links
   (.ls-subnav-link) render at 500, so the row read unevenly. Weight only —
   these two remain Lato 13px / 2.171px tracking, the subnav is Inter 14px /
   1.5px, which is a separate difference and deliberately left alone. */
#masthead .header-html2 a,
#masthead .widget-toggle-open,
#masthead .ls-subnav-link {
  font-family: Lato, sans-serif;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.1em;
}
/* === end header utility links weight === */
/* === Land & Sea: Showcase IDX properties pages — dark header (2026-08-06) === */
/* All IDX pages route through one WordPress page (ID 1743): the /properties/
   search page and every generated listing detail page. Both render light
   content on white, so the white overlay header was invisible, and because
   the header is positioned it also sat on top of the content — measured the
   header running to y=213 while the IDX content started at y=32.
   Making the header static puts it back in normal flow, so the content starts
   below it with no magic offset to maintain at any viewport.
   NOTE: the hamburger SVG has an explicit white fill and does not inherit
   colour, so it needs its own rule.
   NOTE: this hook is the page ID. If the properties page is ever rebuilt the
   ID changes and these rules silently stop matching. */
body.page-id-1743 #masthead,
body.single-post #masthead,
body.blog #masthead,
body.page-id-1857 #masthead,
body.page-id-1790 #masthead,
body.page-id-1799 #masthead ,
body.page-id-3583 #masthead,
body.page-id-3585 #masthead {
  position: static;
}
body.page-id-1743 .site-header-inner-wrap,
body.single-post .site-header-inner-wrap,
body.blog .site-header-inner-wrap,
body.page-id-1857 .site-header-inner-wrap,
body.page-id-1790 .site-header-inner-wrap,
body.page-id-1799 .site-header-inner-wrap ,
body.page-id-3583 .site-header-inner-wrap,
body.page-id-3585 .site-header-inner-wrap {
  position: static;
  background: #ffffff;
}
body.page-id-1743 #masthead .header-html2 a,
body.page-id-1743 #masthead .widget-toggle-open,
body.page-id-1743 #masthead .ls-subnav-link,
body.single-post #masthead .header-html2 a,
body.single-post #masthead .widget-toggle-open,
body.single-post #masthead .ls-subnav-link,
body.blog #masthead .header-html2 a,
body.blog #masthead .widget-toggle-open,
body.blog #masthead .ls-subnav-link,
body.page-id-1857 #masthead .header-html2 a,
body.page-id-1857 #masthead .widget-toggle-open,
body.page-id-1857 #masthead .ls-subnav-link,
body.page-id-1790 #masthead .header-html2 a,
body.page-id-1799 #masthead .header-html2 a,
body.page-id-3583 #masthead .header-html2 a,
body.page-id-3585 #masthead .header-html2 a,
body.page-id-1790 #masthead .widget-toggle-open,
body.page-id-1799 #masthead .widget-toggle-open,
body.page-id-3583 #masthead .widget-toggle-open,
body.page-id-3585 #masthead .widget-toggle-open,
body.page-id-1790 #masthead .ls-subnav-link,
body.page-id-1799 #masthead .ls-subnav-link ,
body.page-id-3583 #masthead .ls-subnav-link,
body.page-id-3585 #masthead .ls-subnav-link {
  color: #151515;
}
body.page-id-1743 #masthead .widget-toggle-open svg,
body.single-post #masthead .widget-toggle-open svg,
body.blog #masthead .widget-toggle-open svg,
body.page-id-1857 #masthead .widget-toggle-open svg,
body.page-id-1790 #masthead .widget-toggle-open svg,
body.page-id-1799 #masthead .widget-toggle-open svg ,
body.page-id-3583 #masthead .widget-toggle-open svg,
body.page-id-3585 #masthead .widget-toggle-open svg {
  fill: #000000;
}
body.page-id-1743 .ls-logo-wordmark,
body.single-post .ls-logo-wordmark,
body.blog .ls-logo-wordmark,
body.page-id-1857 .ls-logo-wordmark,
body.page-id-1790 .ls-logo-wordmark,
body.page-id-1799 .ls-logo-wordmark ,
body.page-id-3583 .ls-logo-wordmark,
body.page-id-3585 .ls-logo-wordmark {
  /* Swapped from filter: brightness(0) on the white PNG to the real black
     asset (land-sea-logo-blk.webp, 1600x301, same artwork and geometry).
     header-reveal.js injects the img src, which CSS cannot change, so the
     injected img is hidden and the black logo is painted as a background on
     the brand anchor instead. background-size: contain also renders it at its
     true 5.32 aspect rather than the stretched 4.72 the inline height forces. */
  visibility: hidden;
}
body.page-id-1743 .site-branding a.brand,
body.single-post .site-branding a.brand,
body.blog .site-branding a.brand,
body.page-id-1857 .site-branding a.brand,
body.page-id-1790 .site-branding a.brand,
body.page-id-1799 .site-branding a.brand ,
body.page-id-3583 .site-branding a.brand,
body.page-id-3585 .site-branding a.brand {
  background-image: url("https://landandsearealty.com/wp-content/uploads/2026/06/land-sea-logo-blk.webp");
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
}
body.page-id-1743 .ls-subnav,
body.single-post .ls-subnav,
body.blog .ls-subnav,
body.page-id-1857 .ls-subnav,
body.page-id-1790 .ls-subnav,
body.page-id-1799 .ls-subnav ,
body.page-id-3583 .ls-subnav,
body.page-id-3585 .ls-subnav {
  /* Reference (Rolls-Royce boutique header) measured: white top row over a
     #F2F2F2 band, no rule between them. Our rows already match closely
     (121px + 60px vs their 117px + 60px), so only the band colour and the
     divider needed changing. */
  background: #f2f2f2;
}
body.page-id-1743 .ls-subnav::before,
body.single-post .ls-subnav::before,
body.blog .ls-subnav::before,
body.page-id-1857 .ls-subnav::before,
body.page-id-1790 .ls-subnav::before,
body.page-id-1799 .ls-subnav::before ,
body.page-id-3583 .ls-subnav::before,
body.page-id-3585 .ls-subnav::before {
  /* The theme paints a rgba(20,20,20,0.3) scrim here for dark hero pages.
     It sits at z-index -1, i.e. behind the white header wrap, so it cannot
     show on these pages anyway — cleared so only the band colour above paints. */
  background: transparent;
}
body.page-id-1743 #masthead .site-container,
body.single-post #masthead .site-container,
body.blog #masthead .site-container,
body.page-id-1857 #masthead .site-container,
body.page-id-1790 #masthead .site-container,
body.page-id-1799 #masthead .site-container ,
body.page-id-3583 #masthead .site-container,
body.page-id-3585 #masthead .site-container {
  /* Reference has no rule between the two rows; the band edge separates them. */
  border-bottom: 0;
}
body.page-id-1743 .sidx-main-header {
  /* The IDX account nav (Search / Dashboard / Listings / Searches) sat flush
     against the bottom of the header — measured 0px gap once the header was
     put back in normal flow. 22px gives it breathing room. Same element on
     both the search page and listing detail pages. */
  padding-top: 22px;
}
/* === end IDX properties pages === */

/* === INTRO LEDE — answer-first summary (2026-08-07) === */
/* Renders as a <p class="ls-nb-lede"> sibling ABOVE .ls-nb-prose inside
   #overview. Deliberately outside .ls-nb-prose: that wrapper is column-count:2
   above 1024px, and a 40-60 word lede split into two stub columns reads as a
   fragment rather than a definition. Sized between .ls-nb-section__subheading
   (1.15-1.4rem) and .ls-nb-prose (1.05rem) so it leads without competing with
   the h2. Runs the full content band so it sits flush with the heading above
   and the prose below rather than as a narrower inset. */
.ls-nb-lede {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: clamp(1.25rem, 1.6vw, 1.5rem);
	font-weight: 300;
	line-height: 1.6;
	color: #35414a;
	margin: 0 0 clamp(28px, 3.5vw, 44px);
}
/* === end intro lede === */

/* === KEY FACT SETS (2026-08-07) === */
/* --- Fact sets: two-up grid (2026-09-08) --- */
/* The factsets loop is wrapped in .ls-nb-factsets so two sets can sit side by
   side. Each set stays its own <section> with its own <h2> and anchor, so the
   jump-nav links and deep links are unchanged. */
.ls-nb-factsets {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: clamp(48px, 6vw, 72px) clamp(32px, 4vw, 64px);
	align-items: start;
}
/* A lone set, or an odd third, takes the full band rather than sitting half-width. */
.ls-nb-factsets > .ls-nb-factset:only-child,
.ls-nb-factsets > .ls-nb-factset:nth-child(3):last-child {
	grid-column: 1 / -1;
}
@media (max-width: 899px) {
	.ls-nb-factsets { grid-template-columns: minmax(0, 1fr); }
}

/* At half band width a 260px term column leaves the description ~28 characters
   per line, so inside the two-up grid the term stacks above the description —
   the same treatment the row already uses below 900px. A set that spans the
   full band keeps its term column, where the description has room. */
@media (min-width: 900px) {
	.ls-nb-factsets .ls-nb-factset__row {
		grid-template-columns: minmax(0, 1fr);
		gap: 6px;
	}
	.ls-nb-factsets > .ls-nb-factset:only-child .ls-nb-factset__row,
	.ls-nb-factsets > .ls-nb-factset:nth-child(3):last-child .ls-nb-factset__row {
		grid-template-columns: minmax(0, 260px) minmax(0, 1fr);
		gap: clamp(24px, 3vw, 56px);
	}
}

/* Term/description pairs for the facts a portal cannot hold: club eligibility,
   dock constraints, HOA rules. A real <dl>, because that is what this is - the
   semantics help extraction as much as the styling helps the reader. Two-column
   above 900px with the term in a fixed measure so all descriptions align. */
.ls-nb-factset__intro {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: clamp(1rem, 1.1vw, 1.0625rem);
	font-weight: 400;
	line-height: 1.7;
	color: #35414a;
	max-width: 68ch;
	margin: 0 0 clamp(28px, 3vw, 44px);
}
.ls-nb-factset__list {
	margin: 0;
	padding: 0;
	border-top: 1px solid rgba(0, 0, 0, 0.08);
}
.ls-nb-factset__row {
	display: grid;
	grid-template-columns: 1fr;
	gap: 6px;
	padding: clamp(18px, 2vw, 26px) 0;
	border-bottom: 1px solid rgba(0, 0, 0, 0.08);
}
.ls-nb-factset__term {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 0.8rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: #6a7680;
	margin: 0;
}
.ls-nb-factset__desc {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 1.0625rem;
	font-weight: 400;
	line-height: 1.7;
	color: #35414a;
	margin: 0;
	max-width: 68ch;
}
@media (min-width: 900px) {
	.ls-nb-factset__row {
		grid-template-columns: minmax(0, 260px) minmax(0, 1fr);
		gap: clamp(24px, 3vw, 56px);
		align-items: baseline;
	}
}
/* === end key fact sets === */

/* === Footer link columns (2026-08-28) ===
   Five widget columns in the top footer row. Scoped to #colophon so the
   theme h2 size (40px) and the inherited #151515 link colour are beaten
   on specificity rather than with !important. */
.site-top-footer-wrap {
	padding-top: 64px;
	padding-bottom: 48px;
}
#colophon .ls-footer-heading {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 13px;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: #ffffff;
	line-height: 1.4;
	margin: 0 0 18px;
}
#colophon .ls-footer-links {
	list-style: none;
	margin: 0;
	padding: 0;
}
#colophon .ls-footer-links li {
	margin: 0;
}
#colophon .ls-footer-links a {
	display: inline-block;
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 14px;
	line-height: 1.9;
	color: rgba(255, 255, 255, 0.82);
	text-decoration: none;
	transition: color 0.2s ease;
}
#colophon .ls-footer-links a:hover,
#colophon .ls-footer-links a:focus {
	color: #ffffff;
}
/* === end footer link columns === */

/* === Neighborhood card name overlay (2026-08-28) ===
   Real text over the photo, not baked into the image. Centred, 2rem, with a
   black outer glow for legibility. NOTE: text-shadow does not count toward
   WCAG contrast — white on this photo's brightest centre pixels measures
   1.33:1. Treated as a decorative label; the accessible name is the h3. */
.ls-hood-card__overlay {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 0 20px;
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: clamp(1rem, 7.6cqi, 2rem); /* scales with the card, not the viewport:
	   column count makes card width non-monotonic (263px at 1206, 327px at 1100),
	   so viewport media queries cannot track it. 7.6cqi keeps the longest name,
	   "Vanderbilt Beach", on one line down to a 262px card. */
	font-weight: 700;
	letter-spacing: normal; /* em, not rem: fixed tracking does not shrink with
	   the clamped font-size, which is what still wrapped the longest names at a
	   262px card. 0.0835em equals the previous 2.672px at the desktop size. */
	text-transform: uppercase;
	line-height: 1.3;
	text-align: center;
	color: #ffffff;
	text-shadow: 0 0 8px rgba(0, 0, 0, 0.9), 0 0 20px rgba(0, 0, 0, 0.7), 0 0 40px rgba(0, 0, 0, 0.45);
	pointer-events: none;
}
/* === end neighborhood card name overlay === */


/* Kadence enables its transparent header on single posts (body carries
   .transparent-header), and that rule outranks the shared header block above:
   position: static applied but the white background did not. This restores it
   at matching specificity rather than with !important. The cleaner root fix is
   to disable the transparent header for posts in the Kadence Customizer. */
body.single-post.transparent-header .site-header-inner-wrap,
body.single-post.transparent-header #masthead,
body.page-id-1857.transparent-header .site-header-inner-wrap,
body.page-id-1857.transparent-header #masthead,
body.page-id-1790.transparent-header .site-header-inner-wrap,
body.page-id-1799.transparent-header .site-header-inner-wrap,
body.page-id-3583.transparent-header .site-header-inner-wrap,
body.page-id-3585.transparent-header .site-header-inner-wrap,
body.page-id-1790.transparent-header #masthead,
body.page-id-1799.transparent-header #masthead ,
body.page-id-3583.transparent-header #masthead,
body.page-id-3585.transparent-header #masthead {
	background: #ffffff;
}

/* === Archive title band (2026-09-01) ===
   The .entry-hero-container-inner strip that carries the archive title.
   Kadence renders it only on the posts index and category archives, not on
   pages or single posts, so this is not scoped further. Was #edf2f7. */
.entry-hero-container-inner {
	background: #d9d9d9;
}
/* === end archive title band === */

/* === Homepage blog loop, matched to the neighborhood cards (2026-09-01) ===
   Values copied from .ls-hood-card rather than re-invented: 1/1 media with
   32px below it, 1px #ddd rule down the left of the text, Raleway 16px/700
   uppercase at 2.3px tracking for the title, Lato 14.4px/23.04px for the
   excerpt, and a 16px text indent so the copy clears the rule. */
/* Cards capped at 410px and centred, exactly as .ls-hood-carousel__track does.
   This keeps the blog cards the same width as the neighborhood cards, which
   means one image spec sitewide: 820x820 is 2x for a 410px card. The unused
   width becomes gutter either side (about 63px each at the 1392px container).
   WordPress generates repeat(3, minmax(0, 1fr)) at specificity 0,1,0; this
   rule is 0,2,0 and wins without !important. */
.ls-blog-loop .wp-block-post-template {
	grid-template-columns: repeat(3, minmax(0, 410px));
	justify-content: center;
}

.ls-blog-loop .wp-block-post {
	list-style: none;
	min-width: 0;
	border-left: 1px solid #ddd;
}

.ls-blog-loop .wp-block-post-featured-image {
	aspect-ratio: 1 / 1;
	overflow: hidden;
	margin: 0 0 20px;
}

.ls-blog-loop .wp-block-post-featured-image img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.ls-blog-loop .wp-block-post-title {
	font-family: var(--global-heading-font-family, Raleway, sans-serif);
	font-size: 16px;
	font-weight: 700;
	letter-spacing: normal;
	text-transform: uppercase;
	line-height: 24px;
	color: #151515;
	margin: 20px 0 8px;
	padding-left: 16px;
}

.ls-blog-loop .wp-block-post-title a {
	color: inherit;
	text-decoration: none;
}

.ls-blog-loop .wp-block-post-excerpt {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 14.4px;
	font-weight: 400;
	line-height: 23.04px;
	color: #35414a;
	margin: 0;
	padding-left: 16px;
}

.ls-blog-loop .wp-block-post-excerpt__more-text {
	margin: 8px 0 0;
}

/* WordPress emits its grid gap from a selector repeating the layout class
   four times (specificity 0,4,0) at gap: 1.25em, which resolves to 21.25px
   here. The block-level blockGap attribute produces no competing rule, so
   this matches that specificity rather than using !important. */
.ls-blog-loop .wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid {
	gap: 18px;
}

/* === end homepage blog loop === */

/* === Contact page (2026-09-01) ===
   Typography lifted from the INQUIRE NOW drawer so the two read as one system:
   Raleway 300 uppercase at 3.52px tracking for the heading, Lato 600 13px at
   1.5px for the field keys, Lato 15px for values. Gravity Forms inputs are
   given the drawer treatment: transparent with a 1px bottom rule. */
.ls-contact__heading {
	font-family: var(--global-heading-font-family, Raleway, sans-serif);
	font-weight: 300;
	letter-spacing: normal;
	text-transform: uppercase;
	color: #151515;
	margin: 0;
	padding: 64px 0 40px;
}

.ls-contact__lede {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 17px;
	line-height: 1.6;
	max-width: 62ch;
	margin: 0 0 48px;
}

.ls-contact__label,
.ls-contact__key {
	display: block;
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 13px;
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: #35414a;
	margin: 0 0 6px;
}

.ls-contact__label {
	margin: 0 0 28px;
	padding-bottom: 12px;
	border-bottom: 1px solid #ddd;
}

.ls-contact__item {
	margin: 0 0 26px;
}

.ls-contact__value {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 15px;
	font-style: normal;
	line-height: 1.55;
	color: #35414a;
	text-decoration: none;
}

a.ls-contact__value:hover {
	text-decoration: underline;
}

.ls-contact__note {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 14px;
	line-height: 1.6;
	color: #35414a;
	margin: 36px 0 0;
	padding-top: 20px;
	border-top: 1px solid #ddd;
}

.ls-contact__formheading {
	font-family: var(--global-heading-font-family, Raleway, sans-serif);
	font-size: 24px;
	font-weight: 300;
	letter-spacing: normal;
	text-transform: uppercase;
	color: #151515;
	margin: 0 0 24px;
}

/* Gravity Forms, matched to the drawer */
.ls-contact .gform_wrapper .gfield_label,
.ls-inquire-drawer__gf .gform_wrapper .gfield_label {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 13px;
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: #35414a;
}

.ls-inquire-drawer__gf .gform_wrapper input[type="text"],
.ls-inquire-drawer__gf .gform_wrapper input[type="email"],
.ls-inquire-drawer__gf .gform_wrapper input[type="tel"],
.ls-inquire-drawer__gf .gform_wrapper textarea,
.ls-contact .gform_wrapper input[type="text"],
.ls-contact .gform_wrapper input[type="email"],
.ls-contact .gform_wrapper input[type="tel"],
.ls-contact .gform_wrapper textarea {
	background: transparent;
	border: 0;
	border-bottom: 1px solid #1a1a1a;
	border-radius: 0;
	padding: 6px 0;
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 15px;
	color: #35414a;
}

.ls-contact .gform_wrapper .gform_button,
.ls-inquire-drawer__gf .gform_wrapper .gform_button {
	background: #176db7;
	color: #ffffff;
	background: transparent;
	border: 1px solid #1a1a1a;
	border-radius: 3px;
	padding: 16px 32px;
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 13px;
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: #151515;
	cursor: pointer;
}

.ls-contact .gform_wrapper .gform_button:hover,
.ls-inquire-drawer__gf .gform_wrapper .gform_button:hover {
	background: #1a1a1a;
	color: #ffffff;
}

@media (max-width: 781px) {
	.ls-contact__lede { margin-bottom: 32px; }
	.ls-contact__formheading { margin-top: 40px; }
}

/* A global .wp-block-column rule elsewhere in this file draws a 1px #ddd rule
   down the left of every column. No other published page uses column blocks,
   so it only shows here. Scoped off rather than deleted globally, since draft
   pages were not checked. */
.ls-contact .wp-block-column {
	border-left: 0;
}


/* Columns are 30/70; this widens the channel between them. Gutenberg sets its
   own gap from a var, so the value is declared here rather than on the block. */
.ls-contact.wp-block-columns {
	column-gap: 80px;
}

@media (max-width: 781px) {
	.ls-contact.wp-block-columns { column-gap: 0; }
}

/* === end contact page === */

/* === Footer NAP (2026-09-01) ===
   Name, address and phone in server-rendered HTML on every page. Previously
   these existed only on /contact/, so a crawler had one copy; now it has 90.
   Contact links open the drawer via JS, but the href stays /contact/ so this
   block keeps the page linked and crawlable. */
#colophon .ls-footer-nap {
	margin: 18px 0 0;
}

#colophon .ls-footer-nap__name {
	font-size: 13px;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: #ffffff;
	margin: 0 0 10px;
}

#colophon .ls-footer-nap__address,
#colophon .ls-footer-nap__phone,
#colophon .ls-footer-nap__link {
	font-size: 14px;
	font-style: normal;
	line-height: 1.7;
	color: rgba(255, 255, 255, 0.82);
	margin: 0;
}

#colophon .ls-footer-nap__phone,
#colophon .ls-footer-nap__link {
	margin-top: 8px;
}

#colophon .ls-footer-nap a {
	color: rgba(255, 255, 255, 0.82);
	text-decoration: none;
}

#colophon .ls-footer-nap a:hover {
	color: #ffffff;
}
/* === end footer NAP === */

/* === Neighborhoods index grid (2026-09-01) ===
   Same geometry as .ls-hood-carousel__track on the homepage, but its own
   container because the track sits inside a 100vw full-bleed section that
   only exists on the front page. Card styling is shared: the markup reuses
   .ls-hood-card and its children, so both grids stay in step. */
.ls-hood-grid {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 410px));
	justify-content: center;
	column-gap: 18px;
	row-gap: 49px;
	padding: 4px 0 8px;
}

.ls-hood-grid__heading {
	font-family: var(--global-heading-font-family, Raleway, sans-serif);
	font-size: 3rem;
	text-align: center;
	font-weight: 300;
	letter-spacing: normal;
	text-transform: uppercase;
	color: #151515;
	margin: 0;
	padding: 64px 0 16px;
}

.ls-hood-grid__lede {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 17px;
	line-height: 1.6;
	max-width: 62ch;
	text-align: center;
	margin: 0 auto 48px;
}

@media (max-width: 1199px) {
	.ls-hood-grid { grid-template-columns: repeat(2, minmax(0, 410px)); }
}

@media (max-width: 899px) {
	.ls-hood-grid { grid-template-columns: minmax(0, 410px); }
}

@media (max-width: 599px) {
	.ls-hood-grid { grid-template-columns: minmax(0, 410px); }
}
/* === end neighborhoods index grid === */


/* === TEXT LINK HOVER (2026-09-08) === */
/* One behaviour for every prose link: blue at rest, deepening to #235a94 while
   the underline drops away. Kadence's global a:hover sends links to
   --global-palette-highlight-alt (#3b3b3b), a grey that fights the standardised
   blue, so the colour is overridden here rather than in the Customizer palette.
   Scoped to prose only: navigation, jump nav, footer, cards and buttons keep
   their own hover treatments. */
.ls-cta__body a,
.ls-parallax__col-list a,
.wp-block-post-excerpt__more-link,
.entry-content p a:not(.wp-block-button__link):not(.ls-cta__button):not(.ls-nb-shop__button),
.single-post .entry-content li a {
	text-underline-offset: 3px;
	transition: color 0.15s linear, text-underline-offset 0.15s linear;
}
.ls-cta__body a:hover,
.ls-cta__body a:focus,
.ls-parallax__col-list a:hover,
.ls-parallax__col-list a:focus,
.wp-block-post-excerpt__more-link:hover,
.wp-block-post-excerpt__more-link:focus,
.entry-content p a:not(.wp-block-button__link):not(.ls-cta__button):not(.ls-nb-shop__button):hover,
.entry-content p a:not(.wp-block-button__link):not(.ls-cta__button):not(.ls-nb-shop__button):focus,
.single-post .entry-content li a:hover,
.single-post .entry-content li a:focus {
	color: #235a94;
	text-underline-offset: 0.35em;
}
/* === end text link hover === */


/* === PROSE SUBHEADS (2026-09-08) === */
/* These h3s were unstyled and fell through to the theme default: Raleway 700,
   24px, sentence case - the only bold sentence-case type on the page, under a
   40px light uppercase section heading. Restyled as small uppercase, using the
   subhead band (15-23px -> 0.12em) of the tracking scale. Scoped with the
   template class to outrank the theme's own h3 rule without !important. */
.page-template-neighborhood-page-template .ls-nb-prose :is(h3, h4),
.single-post .entry-content :is(h3, h4) {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 15px;
	font-weight: 500;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	line-height: 1.5;
	color: #151515;
	margin: 2em 0 0.75em;
}
.page-template-neighborhood-page-template .ls-nb-prose > :is(h3, h4):first-child {
	margin-top: 0;
}
/* === end prose subheads === */


/* === HERO BREADCRUMBS (2026-09-08) === */
/* Rank Math outputs its own <nav class="rank-math-breadcrumb"> containing a <p>,
   so this styles that markup rather than replacing it. Sits inside the hero
   above the H1, over the top scrim, so the type is inverse. 13px uppercase uses
   the micro-label tracking band. */
.ls-nb-breadcrumbs {
	margin: 0 0 18px;
}
.ls-nb-breadcrumbs .rank-math-breadcrumb p {
	margin: 0;
	/* 13px type loses to a soft halo, so these are tighter and denser than the H1. */
	text-shadow: 0 1px 2px rgba(0,0,0,0.85), 0 1px 6px rgba(0,0,0,0.65), 0 2px 14px rgba(0,0,0,0.5);
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 13px;
	font-weight: 400;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	line-height: 1.5;
	color: #ffffff;
}
.ls-nb-breadcrumbs a {
	color: rgba(255, 255, 255, 0.82);
	text-decoration: none;
	transition: color 0.15s linear;
}
.ls-nb-breadcrumbs a:hover,
.ls-nb-breadcrumbs a:focus {
	color: #ffffff;
}
.ls-nb-breadcrumbs .separator {
	margin: 0 10px;
	color: rgba(255, 255, 255, 0.55);
}
@media (max-width: 600px) {
	.ls-nb-breadcrumbs { margin-bottom: 12px; }
	.ls-nb-breadcrumbs .rank-math-breadcrumb p { font-size: 12px; }
	.ls-nb-breadcrumbs .separator { margin: 0 6px; }
}
/* === end hero breadcrumbs === */


/* === FAQ (2026-09-08) === */
/* Per 04-seo-standards.md 6.3: questions are real h3 headings with the answer in
   a sibling paragraph, visible in the HTML. No accordion, nothing injected by JS
   — Google has not shown FAQ rich results for sites like ours since 2023, so the
   value is extraction by answer engines, which read the markup. */
.ls-nb-faq__list {
	max-width: none;
}
/* Two columns above 1024px. A single column capped at 80ch left a third of the
   band empty; the full band would run 127 characters a line. Two columns give 60,
   and match the two-up fact sets directly above. Column flow (not grid) so the
   reading order runs down the first column then the second, as a list should. */
@media (min-width: 1024px) {
	.ls-nb-faq__list {
		column-count: 2;
		column-gap: clamp(40px, 4vw, 64px);
	}
}
.ls-nb-faq__item {
	/* Items must not split across the column break. */
	break-inside: avoid;
	page-break-inside: avoid;
	margin: 0 0 clamp(28px, 3vw, 36px);
	padding-bottom: clamp(28px, 3vw, 36px);
	border-bottom: 1px solid rgba(0,0,0,0.08);
}
.ls-nb-faq__item:last-child {
	margin-bottom: 0;
}
.ls-nb-faq .ls-nb-faq__q {
	font-family: var(--global-heading-font-family, Raleway, sans-serif);
	font-size: clamp(1.05rem, 1.4vw, 1.25rem);
	font-weight: 300;
	letter-spacing: normal;
	line-height: 1.35;
	color: #151515;
	margin: 0 0 12px;
	text-transform: none;
}
.ls-nb-faq__a {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 1.0625rem;
	font-weight: 400;
	line-height: 1.7;
	color: #35414a;
	margin: 0;
}
/* === end FAQ === */


/* === DATA TABLES (2026-09-08, revised) === */
/* 04-seo-standards.md 1.5 requires comparable data in a real <table> with a real
   <th> row and a caption naming source and date. Design goal is scanning: the
   reader should find the row they want without reading the others. */
.ls-nb-table-wrap {
	overflow-x: auto;
	overscroll-behavior-x: contain;
	-webkit-overflow-scrolling: touch;
	margin: 0 0 clamp(28px, 3vw, 40px);
}
/* .ls-nb-prose is column-count: 2 above 1024px, which trapped tables in a 595px
   column and wrapped half the values. column-span lifts them to the full band. */
.ls-nb-prose .ls-nb-table-wrap {
	column-span: all;
}
.ls-nb-table,
.single-post .entry-content table {
	width: 100%;
	margin: 0;
	border-collapse: collapse;
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 1rem;
	line-height: 1.55;
	color: #35414a;
	font-variant-numeric: tabular-nums;
}
.ls-nb-table caption,
.single-post .entry-content table caption {
	caption-side: bottom;
	margin-top: 14px;
	font-size: 0.875rem;
	font-weight: 300;
	letter-spacing: normal;
	text-transform: none;
	line-height: 1.5;
	color: #6a7680;
	text-align: left;
	max-width: 80ch;
}
.ls-nb-table th,
.ls-nb-table td,
.single-post .entry-content table th,
.single-post .entry-content table td {
	padding: 16px 28px 16px 0;
	text-align: left;
	vertical-align: baseline;
}
.ls-nb-table thead th,
.single-post .entry-content table thead th {
	font-size: 0.8rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: #151515;
	padding-bottom: 10px;
	border-bottom: 2px solid #151515;
	white-space: nowrap;
}
/* Row label recedes; the value is what the eye is hunting for. */
.ls-nb-table tbody th,
.single-post .entry-content table tbody th {
	font-weight: 400;
	color: #6a7680;
	width: 26%;
	padding-right: 36px;
}
.ls-nb-table tbody td,
.single-post .entry-content table tbody td {
	color: #151515;
}
.ls-nb-table tbody tr,
.single-post .entry-content table tbody tr {
	border-bottom: 1px solid rgba(0,0,0,0.07);
}
.ls-nb-table tbody tr:last-child {
	border-bottom: 0;
}
.ls-nb-table tbody tr:hover {
	background: rgba(43,108,176,0.04);
}
/* Group rows split a table into scannable bands. */
.ls-nb-table .ls-nb-table__group th {
	font-size: 0.8rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: #151515;
	padding: 34px 0 10px;
	width: auto;
}
.ls-nb-table .ls-nb-table__group {
	border-bottom: 1px solid rgba(0,0,0,0.25);
}
.ls-nb-table tbody tr.ls-nb-table__group:hover {
	background: none;
}
/* Rows where the compared values match: dimmed, so difference stands out. */
.ls-nb-table tr.is-same td {
	color: #6a7680;
}
@media (max-width: 700px) {
	.ls-nb-table,
	.single-post .entry-content table { font-size: 0.95rem; }
	.ls-nb-table th,
	.ls-nb-table td,
	.single-post .entry-content table th,
	.single-post .entry-content table td { padding: 13px 18px 13px 0; }
	.ls-nb-table tbody th,
	.single-post .entry-content table tbody th { width: 38%; padding-right: 18px; }
}
/* === end data tables === */


/* === INLINE CTA (2026-09-08) === */
/* A second conversion point mid-article. The band CTA at the foot of the page is
   only reached by readers who finish; this one catches the reader at the moment
   the question occurs to them. Deliberately quieter than the band CTA so it does
   not compete with it — tinted panel and a text link, not a second big button. */
.ls-nb-inline-cta {
	column-span: all;
	margin: clamp(32px, 4vw, 48px) 0;
	padding: clamp(24px, 3vw, 32px) clamp(24px, 3vw, 36px);
	background: rgba(43,108,176,0.06);
	border-left: 3px solid #2b6cb0;
}
.ls-nb-inline-cta__text {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 1.0625rem;
	font-weight: 400;
	line-height: 1.65;
	color: #35414a;
	margin: 0 0 14px;
	max-width: 68ch;
}
.ls-nb-inline-cta__text strong {
	font-weight: 700;
	color: #151515;
}
.ls-nb-inline-cta__action {
	margin: 0;
}
.ls-nb-inline-cta__link {
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 0.8rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: #2b6cb0;
	text-decoration: underline;
	text-underline-offset: 3px;
	transition: color 0.15s linear, text-underline-offset 0.15s linear;
}
.ls-nb-inline-cta__link:hover,
.ls-nb-inline-cta__link:focus {
	color: #235a94;
	text-underline-offset: 0.35em;
}
.ls-nb-inline-cta__link::after {
	content: " \2192";
}
/* === end inline CTA === */


/* === TRACKING OVERRIDES (2026-09-08) === */
/* Kadence global heading settings put letter-spacing on .ls-nb-section__subheading
   from outside this file. Headings are Tenor Sans and set solid, so it is reset here. */
.ls-nb-section__subheading {
	letter-spacing: normal;
}
/* === end tracking overrides === */


/* === SHOP BAND (2026-09-08) === */
/* Full-bleed black band below the listings. Text left, image right at 66%.
   Breaks out of .ls-nb-body with the same technique as .ls-nb-gallery-wrap. */
.ls-nb-shop {
	width: 100vw;
	max-width: 100vw;
	margin-inline: calc(50% - 50vw);
	background: #000000;
	color: #ffffff;
}
.ls-nb-shop__inner {
	display: grid;
	grid-template-columns: 34% 66%;
	align-items: center;
	/* Height is set here, not by the image. The photo’s own aspect ratio at 66%
	   width was driving the band to 591px; this holds it 20% shorter and lets
	   object-fit crop the photo instead. */
	min-height: clamp(250px, 20vw, 472px);
}
.ls-nb-shop__text {
	padding: clamp(40px, 5vw, 72px) clamp(28px, 4vw, 64px);
	text-align: right;
}
.ls-nb-shop__heading {
	font-family: var(--global-heading-font-family, Raleway, sans-serif);
	font-size: 2.3rem;
	font-weight: 300;
	line-height: 1.15;
	letter-spacing: normal;
	color: #ffffff;
	margin: 0 0 clamp(24px, 3vw, 36px);
}
.ls-nb-shop__action {
	margin: 0;
}
/* White on black is the highest-contrast button available on this band. */
.ls-nb-shop__button {
	display: inline-block;
	padding: 16px 46px;
	border-radius: 999px;
	background: #176db7;
	color: #ffffff;
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 14px;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	text-decoration: none;
	transition: background 0.25s ease, color 0.25s ease, transform 0.25s ease;
}
.ls-nb-shop__button:hover,
.ls-nb-shop__button:focus-visible {
	background: #125a97;
	color: #ffffff;
	transform: translateY(-2px);
}
.ls-nb-shop__media {
	height: clamp(250px, 20vw, 472px);
}
.ls-nb-shop__media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
}
@media (max-width: 860px) {
	.ls-nb-shop__inner {
		grid-template-columns: 1fr;
		min-height: 0;
	}
	.ls-nb-shop__media { order: -1; }
	.ls-nb-shop__media img { min-height: 0; height: auto; aspect-ratio: 16 / 9; }
}
/* === end shop band === */


/* === CONTEXTUAL LINK WEIGHT (2026-09-11) === */
/* Contextual links carry the bold face so they read as links at a glance rather
   than relying on colour alone — which also helps anyone who cannot distinguish
   the blue from the body grey. Lato ships 300, 400 and 700 on this site, so 700
   is the real bold; a 900 here would silently render as the 700 face.
   Buttons, navigation, breadcrumbs, jump nav and footer are excluded — they have
   their own weights already. */
.ls-nb-lede a,
.ls-nb-stat__value a,
.ls-nb-factset__intro a,
.single-post .entry-content table a,
.ls-nb-schools__body a,
.ls-nb-mapsec__body a,
.ls-nb-factset__desc a,
.ls-nb-gallery__intro a,
.ls-nb-faq__a a,
.ls-nb-prose a,
.ls-nb-intro-body a,
.ls-cta__body a,
.ls-parallax__col-list a,
.entry-content p a:not(.wp-block-button__link):not(.ls-cta__button):not(.ls-nb-shop__button),
.single-post .entry-content li a {
	font-weight: 700;
}
/* === end contextual link weight === */


/* === BUTTON SHADOW (2026-09-14) === */
/* One shadow on every button. Two layers: a tight 4px pass for the edge and a
   softer 16px pass for lift. Applied to the anchors and inputs only — the
   Gutenberg wrapper .ls-cta__button.wp-block-button is square and resets it to
   none, otherwise it casts a rectangle behind the rounded pill. */
.ls-inquire-drawer__submit,
.hero-stage__btn,
.hero-stage__btn--fill,
.page-template-neighborhood-page-template .sidx-hotsheet-see-all-results,
.ls-contact .gform_wrapper .gform_button,
.ls-inquire-drawer__gf .gform_wrapper .gform_button,
.ls-nb-shop__button {
	box-shadow: rgba(14, 30, 37, 0.12) 0px 2px 4px 0px, rgba(14, 30, 37, 0.32) 0px 2px 16px 0px;
}
/* === end button shadow === */


/* === HOMEPAGE SHOP BAND SPACING (2026-09-14) === */
/* The neighborhood cards end flush against the band. Scoped to body.home so the
   template instance, which follows the listings section and needs no extra gap,
   is unaffected. */
body.home .ls-nb-shop {
	margin-top: 150px;
}
@media (max-width: 860px) {
	body.home .ls-nb-shop { margin-top: 80px; }
}
/* === end homepage shop band spacing === */


/* === LEDE + STATS SIDE BY SIDE (2026-09-14) === */
/* The lede and the stats strip now share one row: lede two thirds, stats one
   third in a black panel with the entries stacked. Declared here as overrides
   inside .ls-nb-intro-grid so the underlying full-bleed strip rules are left
   intact and the layout collapses cleanly below 900px. */
.ls-nb-intro-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: clamp(32px, 4vw, 48px);
	margin: 0 0 clamp(40px, 5vw, 64px);
}
@media (min-width: 900px) {
	.ls-nb-intro-grid {
		grid-template-columns: 66% minmax(0, 1fr);
		align-items: start;
	}
}
/* The lede reads at body size now that it sits in a column, not full width. */
.ls-nb-intro-grid .ls-nb-lede {
	font-size: 1.225rem;
	font-weight: 400;
	line-height: 1.7;
	margin: 0;
}
.ls-nb-intro-grid #overview {
	margin: 0;
}
/* Undo the full-bleed strip: inside the grid it is a panel, not a band. */
.ls-nb-intro-grid .ls-nb-stats-wrap {
	width: auto;
	max-width: none;
	margin-inline: 0;
	border: 0;
	/* Same tint as the inline CTA panel so the page has one accent wash. */
	background: rgba(43, 108, 176, 0.06);
}
.ls-nb-intro-grid .ls-nb-stats {
	max-width: none;
	margin: 0;
	padding: 0 clamp(20px, 1.8vw, 28px);
	display: flex;
	flex-direction: column;
	gap: 0;
}
/* Label left, value right on one baseline. Markup order is value then label, so
   row-reverse puts the label first visually without touching the PHP. */
.ls-nb-intro-grid .ls-nb-stat {
	flex-direction: row-reverse;
	justify-content: space-between;
	align-items: baseline;
	gap: 16px;
	text-align: left;
	padding: clamp(8.1px, 0.72vw, 11.7px) 0;
}
.ls-nb-intro-grid .ls-nb-stat + .ls-nb-stat {
	border-top: 1px solid rgba(0,0,0,0.12);
}
/* The panel has no vertical padding, so the last row would otherwise sit hard
   against the bottom edge. One extra row-padding of clearance closes the block. */
.ls-nb-intro-grid .ls-nb-stat:last-child {
	padding-bottom: clamp(16.2px, 1.44vw, 23.4px);
}
.ls-nb-intro-grid .ls-nb-stat__value {
	font-size: clamp(0.945rem, 1.035vw, 1.125rem);
	line-height: 1.3;
	color: #151515;
	text-align: right;
}
.ls-nb-intro-grid .ls-nb-stat__label {
	margin-top: 0;
	color: #151515;
	white-space: nowrap;
}
/* === end lede + stats side by side === */


/* === TESTIMONIALS: SINGLE SLIDE (2026-09-14) === */
/* Three of the four endorsements were removed on 2026-09-14 because they named
   individual agents. With one slide the prev/next controls do nothing, so they
   are hidden until a second slide exists — :has() means this reverts on its own
   as soon as more are added, with no CSS change needed. */
.ls-testimonials__track:not(:has(.ls-testimonials__slide + .ls-testimonials__slide)) ~ .ls-testimonials__arrows,
.ls-testimonials:not(:has(.ls-testimonials__slide + .ls-testimonials__slide)) .ls-testimonials__arrows {
	display: none;
}
/* === end testimonials single slide === */


/* === STANDARD PAGE BODY (2026-09-14) === */
/* .ls-nb-body is a flex column with a 96px gap, which is right on neighborhood
   pages where every child is a whole section. On a standard page the children are
   individual paragraphs, so 96px plus their own margins produced 130px between
   lines of prose. Normal flow and ordinary margins instead. */
.ls-page-body {
	display: block;
	padding-block: clamp(48px, 5vw, 72px);
	max-width: 80ch;
}
.ls-page-body > p {
	margin: 0 0 1.25em;
}
.ls-page-section {
	/* Sections must not split across the column break: the whole group moves. */
	break-inside: avoid;
	margin: 0 0 clamp(36px, 3.2vw, 52px);
}
.ls-page-body .ls-page-section h2 {
	font-size: clamp(1.4rem, 1.7vw, 2rem);
	font-weight: 300;
	letter-spacing: normal;
	line-height: 1.2;
	color: #151515;
	margin: 0 0 clamp(12px, 1vw, 16px);
}
.ls-page-body > .wp-block-buttons {
	margin-top: clamp(32px, 3vw, 44px);
}
/* Full-bleed children (the testimonials band) still break out of the measure. */
.ls-page-body > .wp-block-html {
	max-width: none;
}
/* === end standard page body === */


/* === QUICK FACTS HEADER (2026-09-14) === */
/* Replaces the 4px rule that capped the stats panel. Same brand blue, now
   carrying a label so the column announces what it is. */
.ls-nb-stats__heading {
	margin: 0;
	padding: 12px clamp(20px, 1.8vw, 28px);
	background: #176db7;
	color: #ffffff;
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 0.8rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	line-height: 1.3;
}
/* Outside the two-column intro the strip is full-bleed, so the label follows the band. */
.ls-nb-stats-wrap:not(.ls-nb-intro-grid .ls-nb-stats-wrap) .ls-nb-stats__heading {
	max-width: var(--ls-nb-max);
	margin: 0 auto;
}
/* === end quick facts header === */


/* === STANDARD PAGE: TWO-COLUMN PROSE (2026-09-14) === */
/* Same treatment as .ls-nb-prose on neighborhood pages: one column collapses to
   very long measures on a 1414px band. Headings, buttons and full-bleed blocks
   span both columns so the page still reads as sections rather than a newspaper. */
@media (min-width: 1024px) {
	.ls-page-body {
		max-width: var(--ls-nb-max);
		column-count: 2;
		column-gap: clamp(40px, 4vw, 72px);
		orphans: 2;
		widows: 2;
	}
	/* Only the full-bleed band and the CTA span both columns. Headings stay inside
	   their section so sections distribute between the columns.
	   NOTE: wp:html emits its markup with NO .wp-block-html wrapper, so the section
	   itself must be targeted — selecting the wrapper matched nothing and the
	   2453px band was laid out inside a 591px column, overlapping three sections. */
	.ls-page-body > .wp-block-buttons,
	.ls-page-body > .ls-page-close,
	.ls-page-body > .ls-testimonials,
	.ls-page-body > section {
		column-span: all;
	}
}
/* === end standard page two-column prose === */


/* === STANDARD PAGE CLOSING CTA (2026-09-14) === */
/* A bare button between two dark bands read as leftover markup. One line of copy
   gives it a reason, centring ties it to the bands above and below, and the tight
   padding closes the white gap that made it look orphaned. */
.ls-page-close {
	column-span: all;
	text-align: center;
	margin: 0;
	padding: clamp(40px, 4vw, 60px) 0 clamp(8px, 1vw, 16px);
}
.ls-page-close__text {
	max-width: 52ch;
	margin: 0 auto clamp(20px, 2vw, 28px);
	font-size: 1.0625rem;
	line-height: 1.6;
	color: #35414a;
}
.ls-page-close .wp-block-buttons {
	justify-content: center;
}
/* === end standard page closing CTA === */


/* === STANDARD PAGE: FULL-BLEED BAND SEPARATION (2026-09-14) === */
/* column-span elements sit tight under whichever column runs deepest, which left
   only 44px between the last line of prose and the endorsements band. */
.ls-page-body > .ls-testimonials,
.ls-page-body > section {
	margin-top: 50px;
}
/* === end full-bleed band separation === */


/* === FULL-BAND FACT SET: TWO COLUMNS (2026-09-15, revised) === */
/* An only-child or odd-third fact set spans the full 1254px band. The column flow
   sits on the fact set itself, not on the row list, so the intro paragraph starts
   column one and the rows continue beneath it — previously the intro spanned the
   full width and the rows split below it, which read as two disconnected halves.
   The h2 spans both columns so the section still has one heading. */
@media (min-width: 1024px) {
	.ls-nb-factsets > .ls-nb-factset:only-child,
	.ls-nb-factsets > .ls-nb-factset:nth-child(3):last-child {
		column-count: 2;
		column-gap: clamp(40px, 4vw, 72px);
	}
	.ls-nb-factsets > .ls-nb-factset:only-child > h2,
	.ls-nb-factsets > .ls-nb-factset:nth-child(3):last-child > h2 {
		column-span: all;
	}
	/* The list must not start its own column context inside the parent flow. */
	.ls-nb-factsets > .ls-nb-factset:only-child .ls-nb-factset__list,
	.ls-nb-factsets > .ls-nb-factset:nth-child(3):last-child .ls-nb-factset__list {
		column-count: auto;
	}
	.ls-nb-factsets > .ls-nb-factset:only-child .ls-nb-factset__intro,
	.ls-nb-factsets > .ls-nb-factset:nth-child(3):last-child .ls-nb-factset__intro {
		break-inside: avoid;
		break-after: auto;
	}
	/* Inside a column a term/description split would be far too narrow, so rows
	   stack and the term reads as a label above its description. */
	.ls-nb-factsets > .ls-nb-factset:only-child .ls-nb-factset__row,
	.ls-nb-factsets > .ls-nb-factset:nth-child(3):last-child .ls-nb-factset__row {
		display: block;
		break-inside: avoid;
	}
	.ls-nb-factsets > .ls-nb-factset:only-child .ls-nb-factset__term,
	.ls-nb-factsets > .ls-nb-factset:nth-child(3):last-child .ls-nb-factset__term {
		display: block;
		margin-bottom: 6px;
	}
	.ls-nb-factsets > .ls-nb-factset:only-child .ls-nb-factset__desc,
	.ls-nb-factsets > .ls-nb-factset:nth-child(3):last-child .ls-nb-factset__desc {
		max-width: none;
	}
}
/* === end full-band fact set === */


/* === BOUNDARY MAP (2026-09-15, revised) === */
/* The section is a direct child of <main>, not of .ls-nb-body, so it has no
   container of its own and ran the full 2453px from the left edge. This inner
   wrapper puts it back in the content band and splits it: prose left, map right. */
.ls-nb-mapsec {
	margin-block: clamp(48px, 5vw, 72px);
}
.ls-nb-mapsec__inner {
	/* No padding-inline: every other section starts flush at the band edge, and 32px
	   here put the heading 32px right of everything above it. */
	max-width: 1254px;
	margin-inline: auto;
	display: grid;
	grid-template-columns: 1fr;
	gap: clamp(28px, 3vw, 44px);
	align-items: start;
}
@media (min-width: 1024px) {
	.ls-nb-mapsec__inner {
		grid-template-columns: 38% minmax(0, 1fr);
	}
}
.ls-nb-mapsec__text .ls-nb-section__heading {
	margin-top: 0;
}
.ls-nb-mapsec__body {
	/* Matches .ls-nb-prose exactly — 1.05rem / 1.75, not 1.0625 / 1.7. */
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 1.05rem;
	line-height: 1.75;
	color: #35414a;
}
.ls-nb-mapsec__body p {
	margin: 0 0 1.1em;
}
.ls-nb-mapsec__body p:last-child {
	margin-bottom: 0;
}
.ls-nb-map {
	margin: 0;
}
.ls-nb-map iframe {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 3;
	/* Same shadow as the button system, so the map reads as a placed object rather
	   than a hole in the page. The hairline keeps a light basemap from bleeding
	   into white background at the edges. */
	border: 1px solid rgba(21, 21, 21, 0.1);
	border-radius: 2px;
	box-shadow: rgba(14, 30, 37, 0.12) 0 2px 4px 0, rgba(14, 30, 37, 0.24) 0 2px 16px 0;
}
.ls-nb-map figcaption {
	margin-top: 12px;
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 0.875rem;
	font-weight: 300;
	line-height: 1.5;
	color: #6a7680;
}
@media (max-width: 700px) {
	.ls-nb-map iframe { aspect-ratio: 1 / 1; }
}
/* === end boundary map === */


/* === H2 INSIDE TWO-COLUMN PROSE (2026-09-16) === */
/* An h2 had never appeared inside .ls-nb-prose, so no rule existed and it flowed
   as an ordinary column item: the heading sat in column one with its own opening
   paragraph beside it in column two. At 40px it is a section break, so it spans
   the full band like the section headings it matches in size. */
@media (min-width: 1024px) {
	.ls-nb-prose h2 {
		column-span: all;
		break-after: avoid;
		break-inside: avoid;
	}
}
.ls-nb-prose h2 {
	margin: clamp(40px, 4vw, 60px) 0 clamp(14px, 1.4vw, 20px);
}
.ls-nb-prose h2:first-child {
	margin-top: 0;
}
/* === end prose h2 === */


/* === SCHOOLS (2026-09-17) === */
/* Same band treatment as the boundary map: prose left, table right, constrained
   to the content band with no padding-inline. */
.ls-nb-schools {
	margin-block: clamp(48px, 5vw, 72px);
}
.ls-nb-schools__inner {
	max-width: 1254px;
	margin-inline: auto;
}
.ls-nb-schools__grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: clamp(28px, 3vw, 44px);
	align-items: start;
	margin-top: clamp(20px, 2vw, 28px);
}
@media (min-width: 1024px) {
	.ls-nb-schools__grid {
		grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	}
}
.ls-nb-schools__body {
	/* Matches .ls-nb-prose exactly — 1.05rem / 1.75, not 1.0625 / 1.7. */
	font-family: var(--global-body-font-family, Lato, sans-serif);
	font-size: 1.05rem;
	line-height: 1.75;
	color: #35414a;
}
.ls-nb-schools__body p {
	margin: 0 0 1.1em;
}
.ls-nb-schools__body p:last-child {
	margin-bottom: 0;
}
.ls-nb-schools .ls-nb-table-wrap {
	margin: 0;
}
/* === end schools === */


/* === POST HEADING TRACKING (2026-09-17) === */
/* Posts inherited the theme's heading tracking, which runs far wider than the
   site convention: the post h1 came out at 9px against the hero's 0.03em.
   The h3 label style above is now shared with posts, so an h3 in a post is the
   same 15px uppercase Lato label it is on a neighborhood page. */
.single-post .entry-content h1,
.single-post .entry-title {
	/* Match .ls-nb-hero__title: same fluid cap at 3.4rem, same 0.03em, weight 400.
	   The theme default was a fixed 3.75rem at weight 300 — larger and lighter
	   than the site's most prominent heading. */
	font-size: clamp(2rem, 4.5vw, 3.4rem);
	font-weight: 400;
	letter-spacing: 0.03em;
}

/* Post h1 line-height matches the hero's 1.1, not the theme's 1.15. */
.single-post .entry-title {
	line-height: 1.1;
}

/* === BLOG INDEX (2026-09-17) === */
/* body.blog is a different body class from .single-post, so the post rules above
   do not reach the archive. The page title and the post-card titles both fell
   back to the theme's 0.15em tracking. */
body.blog .page-title,
body.archive .page-title {
	font-size: clamp(2rem, 4.5vw, 3.4rem);
	font-weight: 400;
	letter-spacing: 0.03em;
	line-height: 1.1;
}
body.blog .entry-title,
body.blog .entry-title a,
body.archive .entry-title,
body.archive .entry-title a {
	font-size: 2.5rem;
	font-weight: 300;
	letter-spacing: normal;
	text-transform: uppercase;
}
/* === end blog index === */

/* Post body copy matches .ls-nb-prose: 1.05rem / 1.75, not the theme's 17px / 1.6. */
.single-post .entry-content p,
.single-post .entry-content li {
	font-size: 1.05rem;
	line-height: 1.75;
}

/* Post h2 follows .ls-nb-section__heading: 2.5rem, weight 300, normal tracking. */
.single-post .entry-content h2 {
	font-size: 2.5rem;
	font-weight: 300;
	letter-spacing: normal;
	text-transform: uppercase;
}
/* === end post heading tracking === */


/* === HEADING BEFORE A COLUMN-SPANNING TABLE (2026-09-17) === */
/* A prose h3 already has break-after: avoid, but that cannot hold it to the
   element below when that element is column-span: all. The heading was left
   stranded alone at the top of column two while its table spanned beneath.
   A heading that introduces a spanning table has to span as well. */
@media (min-width: 1024px) {
	.ls-nb-prose h3:has(+ .ls-nb-table-wrap),
	.ls-nb-prose h4:has(+ .ls-nb-table-wrap) {
		column-span: all;
		margin-top: clamp(32px, 3.2vw, 48px);
	}
	/* Same for a heading whose table follows a single intervening paragraph. */
	.ls-nb-prose h3:has(+ p + .ls-nb-table-wrap) {
		column-span: all;
	}
}
/* === end spanning-heading === */


/* === BLOG POST: CLOSE THE GAP UNDER THE HEADER (2026-09-17) === */
/* Kadence gives .content-area an 80px top margin. On a single post the featured
   image sits directly beneath the nav, and the gap reads as a mistake. Scoped to
   .single-post only — pages, the blog index and archives keep their spacing. */
.single-post .content-area {
	margin-top: 0;
}
/* === end blog post gap === */


/* === H1 SUBTITLE (2026-09-21) === */
/* Commercial phrasing inside the H1, beneath the place name at half size.
   em-based so it scales with the hero title's clamp() and inherits its
   0.03em tracking, weight and colour. display:block puts it on its own line;
   the template keeps a literal space before the span so the accessible and
   indexed H1 reads "Bay Colony Homes For Sale & Real Estate", not
   "Bay ColonyHomes". */
.ls-nb-hero__subtitle {
	display: block;
	font-size: 0.5em;
	line-height: 1.25;
	margin-top: 0.3em;
}
/* === end h1 subtitle === */

/* Footer top border in the button gold (2026-10-09). Solid fallback, gradient via border-image to match .ls-cta-btn. */
#colophon { border-top: 1px solid #bdaa89; border-image: linear-gradient(90deg, #c4b396, #b6a17c) 1; }

/* Footer as one section (Dan, 2026-10-20): drop the 1px divider lines between the Kadence footer rows and let #colophon's black run through. */
#colophon .site-footer-row-container-inner { background: transparent; border-top: 0; border-bottom: 0; }


/* =====================================================================================
   TYPOGRAPHY: merged from ls-typography-v61.css on 2026-10-21 (one stylesheet request instead of two).
   Same order as before: it loaded right after this file. Edit here; the old file is retired.
   ===================================================================================== */

/* ls-typography v61 — IvyPresto display headings. Paragraphs, labels, card names and navigation stay in Outfit (Kadence global font). 2026-09-29.
   Selectors carry body:not(#ls-type) so they outrank component and template-scoped heading rules.
   Adobe Fonts kit xgd5mcg: ivypresto-headline 300 normal; ivypresto-display 300 italic.
   Small labels, table headings, buttons and body text keep the site sans-serif.
   Consolidate into ls-styles.css at the end of development. */
:root { --ls-serif-head: ivypresto-headline, Georgia, "Times New Roman", serif; --ls-serif-accent: ivypresto-display, Georgia, "Times New Roman", serif; }
body:not(#ls-type) :is(.hero-stage__title, .hero-stage__title-main, .ls-hood-carousel__title, .ls-nb-shop__heading, .ls-cta__heading, .ls-parallax__heading, .ls-testimonials__heading, .ls-pinnacle__heading, .ls-nb-hero__title, .ls-nb-section__heading, .ls-nb-faq__q, .ls-nb-cta__heading, .ls-contact__heading, .ls-contact__formheading, .ls-inquire-drawer__heading, .ls-hub-lived__heading, .ls-cta-split__heading, .ls-cta-statement__heading, .ls-cta-feature__heading),
body:not(#ls-type) .entry-content h2.wp-block-kadence-advancedheading,
body:not(#ls-type) .ls-nb-prose h2 {
	font-family: var(--ls-serif-head);
	font-weight: 300;
	text-transform: none;
	letter-spacing: .01em;
}
body:not(#ls-type) :is(.ls-nb-hero__subtitle, .hero-stage__title-sub) {
	font-family: var(--ls-serif-accent);
	font-style: italic;
	font-weight: 300;
	text-transform: none;
	letter-spacing: .01em;
}
/* Optional accent word inside a heading, as on axisgroup.xyz: <span class="ls-accent">word</span> */
.ls-accent { font-family: var(--ls-serif-accent); font-style: italic; font-weight: 300; }

/* Header navigation and mobile drawer: Kadence sets these in Lato; bring them onto Outfit to match the rest of the site. Doubled IDs outrank Kadence header rules. */
#masthead#masthead, #masthead#masthead :is(a, button, span, .widget-toggle-label), #mobile-drawer#mobile-drawer, #mobile-drawer#mobile-drawer :is(a, button, span) { font-family: var(--global-body-font-family, Outfit, sans-serif); }

/* Homepage hero H1: 50% larger than the ls-styles.css base (4rem -> 6rem max; 4vw -> 6vw fluid), slight negative tracking at display size. Subtitle enlarged a further 50% (42px -> 63px max) on 2026-09-29. */
body:not(#ls-type) .hero-stage__title-main { font-size: clamp(2rem, 6vw, 6rem); line-height: 1.02; letter-spacing: -0.01em; }
body:not(#ls-type) .hero-stage__title-sub { font-size: clamp(1.5rem, 4.05vw, 3.9375rem); line-height: 1.15; letter-spacing: 0; }

/* Animated gradient accent, after axisgroup.xyz ("Trust"): gradient clipped to the text, panned back and forth.
   Light gold palette around #f0be58 / #e29620, lightened for the dark hero (2026-09-29); drop-shadow replaces text-shadow,
   which would show through transparent glyphs. Usage: <span class="ls-accent-shimmer">words</span>. 2026-09-29. */
@keyframes ls-gradient-pan { 0% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } }
body:not(#ls-type) .ls-accent-shimmer {
	background-image: linear-gradient(114.5deg, #f4ede1 14.91%, #ddcfb5 27.62%, #ebe2d0 38.18%, #fffcf6 48.09%, #cdbb98 59.48%, #f4ede1 84.48%); /* champagne palette from #bdaa89, lightened for the dark hero (2026-10-06) */
	background-size: 300% 100%;
	background-position: 100% 50%;
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
	-webkit-text-fill-color: transparent;
	text-shadow: none;
	filter: drop-shadow(0 1px 2px rgba(0, 0, 0, .55)) drop-shadow(0 4px 14px rgba(0, 0, 0, .35));
	animation: ls-gradient-pan 2s linear infinite alternate;
}
@media (prefers-reduced-motion: reduce) { body:not(#ls-type) .ls-accent-shimmer { animation: none; background-position: 50% 50%; } }

/* Display H2s: 4rem on desktop, fluid down to 2.25rem on phones. In-prose H2s, label-style H2s (overlay card, footer) excluded. 2026-09-29. */
body:not(#ls-type) :is(h2.ls-nb-section__heading, h2.ls-nb-shop__heading, h2.ls-parallax__heading, h2.ls-nb-cta__heading, h2.ls-pinnacle__heading, h2.ls-cta__heading, h2.ls-hood-carousel__title, h2.ls-hub-lived__heading, h2.ls-cta-split__heading, h2.ls-cta-statement__heading, h2.ls-cta-feature__heading, h2.ls-contact__formheading),
body:not(#ls-type) .entry-content h2.wp-block-kadence-advancedheading {
	font-size: clamp(2.25rem, 4.5vw, 4rem);
	line-height: 1.1;
	letter-spacing: -0.005em;
}

/* ---- Buttons, links and body weight. 2026-09-29. ---- */
/* All buttons: gold gradient, white text with a minimal shadow. !important because the IDX and Kadence button rules use it. */
body:not(#ls-type) :is(.ls-nb-shop__button, a.ls-cta__button, .ls-nb-cta__button, .ls-cta-btn, .wp-block-button__link, .wp-element-button, .kb-button, .gform_button, .sidx-hotsheet-see-all-results, .ls-hub-more > summary, input[type="submit"], .sidx-container button.sidx-primary) {
	background-color: #bdaa89 !important;
	background-image: linear-gradient(90deg, #c4b396, #b6a17c) !important; /* buttons: barely-there gradient around #bdaa89 (2026-10-06) */
	color: #151515 !important;
	border-color: transparent !important;
	text-shadow: none;
}
body:not(#ls-type) :is(.ls-nb-shop__button:is(:hover, :focus-visible), a.ls-cta__button:is(:hover, :focus-visible), .ls-nb-cta__button:is(:hover, :focus-visible), .ls-cta-btn:is(:hover, :focus-visible), .wp-block-button__link:is(:hover, :focus-visible), .wp-element-button:is(:hover, :focus-visible), .kb-button:is(:hover, :focus-visible), .gform_button:is(:hover, :focus-visible), .sidx-hotsheet-see-all-results:is(:hover, :focus-visible), .ls-hub-more > summary:is(:hover, :focus-visible), input[type="submit"]:is(:hover, :focus-visible)) {
	background-color: #ae976f !important;
	background-image: linear-gradient(90deg, #bdaa89, #ae976f) !important;
	color: #151515 !important;
}
/* Text links in page content: gold #c1862f (3.13:1 on white, chosen 2026-09-29), bold. Buttons, jump nav, cards, hero and heading links keep their own styles. */
body:not(#ls-type) :is(.entry-content, .ls-neighborhood, .ls-page-body) a:not([class*="button"]):not([class*="btn"]):not(.kb-button):not(:is(.ls-nb-jumpnav a, .ls-hood-card, .ls-hood-card a, .hero-stage a, .ls-nb-hero a, h1 a, h2 a, h3 a, .ls-hood-carousel a, .sidx-container a)) {
	color: #826c48; /* champagne, darkened 2026-10-21: #8a744d measured 4.48:1 (just under 4.5:1). #826c48 = 5.01:1 on white, 4.62:1 on the #f2f6fa panel */
	font-weight: 700;
	letter-spacing: .01em;
}
/* Body text weight. */
body { font-weight: 300; }

/* Body text weight 300 where components set their own 400. */
body:not(#ls-type) :is(.ls-nb-lede, .ls-nb-faq__a, .ls-nb-factset__desc, .ls-nb-factset__intro, .ls-nb-prose p, .ls-nb-prose li, .ls-parallax__body, .ls-parallax__col-list li, .ls-cta__body, .ls-hub-lived__quote p, .wp-block-post-excerpt__excerpt) { font-weight: 300; }

/* Card names 500; blog card titles styled like the neighborhood card names. 2026-09-29. */
body:not(#ls-type) :is(.wp-block-post-title, .wp-block-post-title a) { font-family: var(--global-body-font-family, Outfit, sans-serif); font-size: 16px; font-weight: 700; font-style: normal; line-height: 1.5; letter-spacing: normal; text-transform: uppercase; color: #151515; }
/* Eyebrow-to-H2 spacing reduced 30%: CTA 128 -> 90px, pinnacle 96 -> 67px. */
body:not(#ls-type) .ls-cta__eyebrow ~ .ls-cta__heading { margin-top: 58px; }
body:not(#ls-type) .ls-pinnacle__eyebrow ~ :is(h2, .wp-block-heading) { margin-top: 67px; }

/* Hero buttons keep their original outline style; type matches the other buttons. Header nav 15px / 500. Button text #151515. 2026-09-29. */
body:not(#ls-type) .hero-stage__btn { font-family: var(--global-body-font-family, Outfit, sans-serif); font-size: 14px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; }

/* Shop band heading 3rem (48px) desktop, 1.875rem (30px) phones; Client Endorsements heading 34px desktop, 24px phones. 2026-09-29. */
body:not(#ls-type) h2.ls-nb-shop__heading { font-size: clamp(1.875rem, 2.8vw, 3rem); }
body:not(#ls-type) .ls-testimonials__heading { font-size: clamp(1.5rem, 2.4vw, 2.125rem); line-height: 1.2; }

/* All buttons: 16px text, 13px top/bottom padding (side padding unchanged). !important to outrank IDX and block-editor button rules. 2026-09-29. */
body:not(#ls-type) :is(.hero-stage__btn, .ls-nb-shop__button, a.ls-cta__button, .ls-nb-cta__button, .ls-cta-btn, .wp-block-button__link, .wp-element-button, .kb-button, .gform_button, .sidx-hotsheet-see-all-results, .ls-hub-more > summary, input[type="submit"], .sidx-container button.sidx-primary) { font-size: 16px !important; padding-top: 16px !important;
	padding-bottom: 16px !important; }
/* Shop band: text column 40% / image 60% (was 34/66), reversed band 60/40. Desktop and tablet only; phones stay stacked. */
@media (min-width: 861px) {
	body:not(#ls-type) .ls-nb-shop .ls-nb-shop__inner { grid-template-columns: 40% 60%; }
	body:not(#ls-type) .ls-nb-shop.ls-nb-shop--reverse .ls-nb-shop__inner { grid-template-columns: 60% 40%; }
}

/* Eyebrows matched: 15px / 700, shared family, tracking and case. 2026-09-29. */
body:not(#ls-type) :is(.ls-cta__eyebrow, .ls-pinnacle__eyebrow) { font-family: var(--global-body-font-family, Outfit, sans-serif); font-size: 15px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; line-height: 1.4; }

/* Stylistic white full stop: end of the homepage H1 (after the gold shimmer) and end of the band CTA headings. 2026-09-29. */
body:not(#ls-type) .hero-stage__title-sub::after, body:not(#ls-type) .ls-nb-shop__heading::after { content: "."; color: #ffffff; -webkit-text-fill-color: #ffffff; font-style: normal; }

/* Neighborhoods index and default-template pages: page H1 in IvyPresto; card hover label 500 to match card names;
   every button shares one type treatment (Outfit 700, uppercase, 0.1em). 2026-09-29. */
body:not(#ls-type) .entry-content h1.wp-block-heading { font-family: var(--ls-serif-head); font-size: clamp(2.5rem, 5vw, 4.5rem); font-weight: 300; line-height: 1.05; letter-spacing: -0.01em; text-transform: none; }
body:not(#ls-type) :is(.hero-stage__btn, .ls-nb-shop__button, a.ls-cta__button, .ls-nb-cta__button, .ls-cta-btn, .wp-block-button__link, .wp-element-button, .kb-button, .gform_button, .sidx-hotsheet-see-all-results, .ls-hub-more > summary, input[type="submit"], .sidx-container button.sidx-primary) { font-family: var(--global-body-font-family, Outfit, sans-serif); font-weight: 700 !important; letter-spacing: .1em !important; text-transform: uppercase !important; }

/* 0.1em tracking on the remaining small uppercase text: hero breadcrumbs, Inquire-drawer field labels, mobile menu items, and the card names, hover labels and blog card titles. 2026-09-29. */
body:not(#ls-type) :is([class*="breadcrumb"] a, [class*="breadcrumb"] span, .gform-field-label__text, .gfield_label, .ls-hood-card__name, .wp-block-post-title, .wp-block-post-title a), #mobile-drawer#mobile-drawer a { letter-spacing: .1em; }

/* Card image-overlay labels: 0.03em tracking. 2026-09-29. */
body:not(#ls-type) .ls-hood-card__overlay { letter-spacing: .03em; }

/* Neighborhood and hub (page-with-hero) H1: 6rem (96px) on large screens, fluid down to 2.5rem on phones. Subtitle pinned at its existing 1.7rem so it does not scale with the title. 2026-09-29. */
body:is(.page-template-neighborhood-page-template, .page-template-page-with-hero):not(#ls-type) .ls-nb-hero__title { font-size: clamp(2.5rem, 6vw, 6rem); line-height: 1.02; letter-spacing: -0.01em; }
body:is(.page-template-neighborhood-page-template, .page-template-page-with-hero):not(#ls-type) .ls-nb-hero__subtitle { font-size: clamp(1.125rem, 1.8vw, 1.7rem); line-height: 1.3; }

/* Quick Facts: header in the button gradient with #151515 text; panel body #f9f9f9. 2026-09-29. */
body:not(#ls-type) .ls-nb-stats__heading { background-color: #bdaa89; background-image: linear-gradient(90deg, #c4b396, #b6a17c); color: #151515; text-shadow: none; }
body:not(#ls-type) .ls-nb-stats-wrap { background: #f9f9f9; }

/* Neighborhood index links ("Naples Neighborhoods" at the foot of each page, "Narrow Your Search" on hubs): the same moving underline as other content links; the old hover border-bottom is removed so only one line shows. 2026-09-29. */
body:not(#ls-type) .ls-nb-index__item a { text-decoration: underline; text-underline-offset: .1em; border-bottom: 0; transition: color .15s linear, text-underline-offset .15s linear; }
body:not(#ls-type) .ls-nb-index__item a:is(:hover, :focus-visible) { text-underline-offset: .35em; border-bottom: 0; }

/* Intro grid: lede 61% (was 66%), Quick Facts takes the rest, about 17% wider. Same 900px breakpoint as ls-styles.css. 2026-09-29. */
@media (min-width: 900px) { body:not(#ls-type) .ls-nb-intro-grid { grid-template-columns: 61% minmax(0, 1fr); } }

/* One consistent 32px between every display H2 and what follows (was 12-36px, 64px in parallax bands). 2026-09-29. */
body:not(#ls-type) :is(h2.ls-nb-section__heading, h2.ls-nb-shop__heading, h2.ls-nb-cta__heading, h2.ls-pinnacle__heading, h2.ls-cta__heading, h2.ls-hood-carousel__title, h2.ls-hub-lived__heading, h2.ls-cta-split__heading, h2.ls-cta-statement__heading, h2.ls-cta-feature__heading, h2.ls-contact__formheading), body:not(#ls-type) .entry-content h2.wp-block-kadence-advancedheading { margin-bottom: 32px; }
body:not(#ls-type) .ls-parallax__content--twocol { row-gap: 32px; }
body:not(#ls-type) .ls-parallax__content--twocol > .ls-parallax__heading { margin-bottom: 0; }
body:not(#ls-type) .ls-nb-section__heading + .ls-nb-schools__grid { margin-top: 0; }

/* ---- Blog: /blog/, category archives and single posts. Titles are long (up to ~60 characters), so display sizes are
   moderated and balanced across lines rather than set at the 4-6rem used for short page names. 2026-09-30. ---- */
body:is(.blog, .archive, .single-post):not(#ls-type) :is(h1.page-title, h1.entry-title) { font-family: var(--ls-serif-head); font-weight: 300; text-transform: none; letter-spacing: -0.005em; line-height: 1.1; text-wrap: balance; }
body:is(.blog, .archive, .single-post):not(#ls-type) h1.page-title { font-size: clamp(2.5rem, 5vw, 4.5rem); }
body:is(.blog, .archive, .single-post):not(#ls-type) h1.entry-title { font-size: clamp(2.125rem, 3.8vw, 3.5rem); }
/* Archive listing titles */
body:is(.blog, .archive, .single-post):not(#ls-type) .loop-entry h2.entry-title, body:is(.blog, .archive, .single-post):not(#ls-type) .loop-entry h2.entry-title a { font-family: var(--ls-serif-head); font-size: clamp(1.5rem, 1.9vw, 1.875rem); font-weight: 300; text-transform: none; letter-spacing: 0; line-height: 1.2; text-wrap: balance; color: #151515; }
/* Post body headings: H2 serif at a reading-scale size; H3 stays a small uppercase label at 700 / 0.1em. */
body:is(.blog, .archive, .single-post):not(#ls-type) .entry-content h2:not(.wp-block-kadence-advancedheading), body:is(.blog, .archive, .single-post):not(#ls-type) h2.entry-related-title { font-family: var(--ls-serif-head); font-size: clamp(1.75rem, 2.6vw, 2.5rem); font-weight: 300; text-transform: none; letter-spacing: 0; line-height: 1.2; text-wrap: balance; }
body:is(.blog, .archive, .single-post):not(#ls-type) .entry-content h3 { font-weight: 700; letter-spacing: .1em; }
body:is(.blog, .archive, .single-post):not(#ls-type) h3.comment-reply-title { font-family: var(--ls-serif-head); font-size: clamp(1.5rem, 2vw, 1.75rem); font-weight: 300; text-transform: none; letter-spacing: 0; }
/* Small uppercase labels: category links, post-navigation labels. */
body:is(.blog, .archive, .single-post):not(#ls-type) :is(.entry-taxonomies a, .category-links a, a[class*="category-link"], .post-navigation small, .post-navigation .post-navigation-sub) { font-weight: 700; letter-spacing: .1em; }
/* Related-post card titles: styled like the other cards (Outfit 16px, 700, uppercase, 0.1em). */
body:is(.blog, .archive, .single-post):not(#ls-type) .entry-related .entry-title, body:is(.blog, .archive, .single-post):not(#ls-type) .entry-related .entry-title a { font-family: var(--global-body-font-family, Outfit, sans-serif); font-size: 16px; font-weight: 700; text-transform: uppercase; letter-spacing: .1em; line-height: 1.5; color: #151515; }

/* Homepage expanding image as a CTA: centered heading and button over the pale sky. The sky behind the text measures
   ~0.91 luminance, so the text is dark (#151515, about 16:1) rather than white. 2026-09-30. */
.ls-expand__cta { position: absolute; inset: 0; z-index: 2; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 0 6vw 16%; }
body:not(#ls-type) .ls-expand__heading { margin: 0 0 36px; font-family: var(--ls-serif-head); font-size: clamp(2.25rem, 5.5vw, 5.5rem); font-weight: 300; line-height: 1.05; letter-spacing: -0.01em; text-transform: none; color: #151515; text-wrap: balance; }
.ls-cta-btn { display: inline-block; border-radius: 999px; padding: 13px 46px; text-decoration: none; transition: background-color .3s ease, transform .3s ease; }
.ls-cta-btn:is(:hover, :focus-visible) { transform: translateY(-2px); }
@media (max-width: 860px) { .ls-expand__media { aspect-ratio: auto; height: 72svh; } .ls-expand__cta { justify-content: flex-start; padding: 14% 6vw 0; } }

/* Expanding-image CTA lowered ~100px on desktop and tablet (extra 200px top padding shifts the centered block down 100px). 2026-09-30. */
@media (min-width: 861px) { .ls-expand__cta { padding-top: 200px; } }

/* Expanding image: a subtle gold (#f0be58) frame line 20px inside the visible image edge. It tracks the opening mask via
   --ls-it/--ls-is/--ls-ib (pixel insets) x --ls-p (1 = closed, 0 = fully open) set by image-expand-v3.js. 2026-09-30. */
.ls-expand__media::after { content: ""; position: absolute; z-index: 3; pointer-events: none; border: 1.5px solid rgba(221, 207, 181, .9); /* champagne #ddcfb5 (2026-10-06) */
	top: calc(var(--ls-it, 0px) * var(--ls-p, 0) + clamp(12px, 1.5vw, 24px)); bottom: calc(var(--ls-ib, 0px) * var(--ls-p, 0) + clamp(12px, 1.5vw, 24px));
	left: calc(var(--ls-is, 0px) * var(--ls-p, 0) + clamp(12px, 1.5vw, 24px)); right: calc(var(--ls-is, 0px) * var(--ls-p, 0) + clamp(12px, 1.5vw, 24px)); }

/* Table row hover: #f9f9f9 (was a pale blue tint), on data tables and tables in blog posts. 2026-09-30. */
body:not(#ls-type) :is(.ls-nb-table, .single-post .entry-content table) tbody tr:hover { background: #f9f9f9; }

/* CTA 7 overlay card (site-wide; was only on the CTA library page). 1680x560 (3:1) minimum, grows if the copy needs more room; wider than the content column. 2026-09-30. */
.ls-cta-card { position: relative; overflow: hidden; display: flex; align-items: center; color: #fff; width: min(1680px, calc(100vw - 48px)); max-width: none; margin-left: calc(50% - min(840px, calc(50vw - 24px))); min-height: clamp(440px, 33.333vw, 560px); }
.ls-cta-card__media { position: absolute; inset: 0; }
.ls-cta-card__media img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: 70% 50%; }
.ls-cta-card::before { content: ""; position: absolute; inset: 0; z-index: 1; background: linear-gradient(90deg, rgba(0,0,0,.72) 0%, rgba(0,0,0,.52) 34%, rgba(0,0,0,.12) 62%, rgba(0,0,0,0) 78%); }
.ls-cta-card__body { position: relative; z-index: 2; max-width: 460px; padding: clamp(32px, 4vw, 64px) clamp(40px, 6vw, 96px); text-shadow: 0 1px 2px rgba(0,0,0,.35); }
body:not(#ls-type) .ls-cta-card__heading { margin: 0 0 18px; font: 700 clamp(1rem, 1.3vw, 1.2rem)/1.35 var(--global-body-font-family, Outfit, sans-serif); letter-spacing: .2em; text-transform: uppercase; color: #fff; }
.ls-cta-card__text { margin: 0 0 32px; font: 300 clamp(1.1rem, 1.4vw, 1.3rem)/1.6 var(--global-body-font-family, Outfit, sans-serif); color: #fff; }
@media (max-width: 860px) { .ls-cta-card { align-items: flex-end; aspect-ratio: auto; min-height: 440px; } .ls-cta-card::before { background: linear-gradient(0deg, rgba(0,0,0,.7) 0%, rgba(0,0,0,.45) 55%, rgba(0,0,0,.15) 100%); } }

/* CTA 7 button: one line. 2026-09-30. */
.ls-cta-card .ls-cta-btn { white-space: nowrap; }

/* CTA 7: deeper gradient for images that are bright where the text sits (e.g. a white sail). Keeps white text above 4.5:1. 2026-09-30. */
.ls-cta-card--bright::before { background: linear-gradient(90deg, rgba(0,0,0,.88) 0%, rgba(0,0,0,.8) 34%, rgba(0,0,0,.35) 62%, rgba(0,0,0,0) 80%); }
@media (max-width: 860px) { .ls-cta-card--bright::before { background: linear-gradient(0deg, rgba(0,0,0,.85) 0%, rgba(0,0,0,.65) 55%, rgba(0,0,0,.3) 100%); } }

/* CTA 7: lighter gradient for dusk images whose lights should show through (e.g. car light trails). Text shadow deepened to hold legibility. 2026-09-30. */
.ls-cta-card--light::before { background: linear-gradient(90deg, rgba(0,0,0,.55) 0%, rgba(0,0,0,.4) 34%, rgba(0,0,0,.1) 62%, rgba(0,0,0,0) 78%); }
.ls-cta-card--light .ls-cta-card__body { text-shadow: 0 1px 3px rgba(0,0,0,.6), 0 0 18px rgba(0,0,0,.35); }
@media (max-width: 860px) { .ls-cta-card--light::before { background: linear-gradient(0deg, rgba(0,0,0,.6) 0%, rgba(0,0,0,.35) 55%, rgba(0,0,0,.1) 100%); } }

/* IDX "See All … Listings" button: hover now matches the site's other buttons (same 2px lift, same soft shadow, smooth 0.25s transition).
   Kadence's generic button:hover was swapping in a different drop shadow without a transition. 2026-10-01. */
body:not(#ls-type) .sidx-hotsheet-see-all-results { box-shadow: 0 2px 4px rgba(14,30,37,.12), 0 2px 16px rgba(14,30,37,.32) !important; transition: background .25s, color .25s, transform .25s, box-shadow .25s !important; }
body:not(#ls-type) .sidx-hotsheet-see-all-results:is(:hover, :focus-visible) { transform: translateY(-2px) !important; box-shadow: 0 2px 4px rgba(14,30,37,.12), 0 2px 16px rgba(14,30,37,.32) !important; }

/* FAQ questions (H3) in Outfit, sentence case, on every page that uses .ls-nb-faq (neighborhood pages, hubs, /neighborhoods/). 2026-10-02. */
body:not(#ls-type) .ls-nb-faq .ls-nb-faq__q { font-family: 'Outfit', sans-serif !important; font-weight: 500 !important; font-style: normal !important; font-size: 1.25rem !important; line-height: 1.4 !important; letter-spacing: 0 !important; text-transform: none !important; color: #151515; }

/* Period qualifier (e.g. Q1–Q3) in headings, labels and table headers: lighter and smaller, never breaks across lines. 2026-10-05. */
.ls-q { font-size: 0.78em; opacity: 0.7; white-space: nowrap; letter-spacing: inherit; }

/* Showcase IDX forms: dropdowns were 38px tall while text inputs are 44px. Match the dropdowns to the inputs. 2026-10-06. */
.sidx-container .sidx-select-input-menu__control { min-height: 44px !important; }
.sidx-container .sidx-select-menu { min-height: 44px; box-sizing: border-box; padding-top: 14px !important; padding-bottom: 14px !important; }

/* Text links: champagne #826c48 (5.01:1 on white; was #8a744d until 2026-10-21) from the #bdaa89 button family; ink on hover. 2026-10-06. */
body:not(#ls-type) :is(.entry-content, .ls-neighborhood, .ls-page-body) a:not([class*="button"]):not([class*="btn"]):not(.kb-button):is(:hover, :focus-visible) { color: #151515 !important; }

/* Homepage parallax link lists: 3 max-content columns overflowed the half-width panel below ~1700px (laptops). 2026-10-06.
   >=1700px: 3 columns (unchanged). 1101-1699px: 2 columns. 769-1100px: 1 column. <=768px: existing 1-column rule. */
@media (min-width: 1101px) and (max-width: 1699px) { body:not(#ls-type) .ls-parallax__links { grid-template-columns: repeat(2, minmax(0, max-content)); grid-template-rows: repeat(8, auto); column-gap: 40px; } body:not(#ls-type) .ls-parallax__links li { margin-bottom: 4px; } body:not(#ls-type) .ls-parallax__content:has(.ls-parallax__links) { padding-top: 56px; padding-bottom: 56px; } body:not(#ls-type) .ls-parallax__content:has(.ls-parallax__links) .ls-parallax__body { margin-bottom: 24px; } }
@media (min-width: 769px) and (max-width: 1100px) { body:not(#ls-type) .ls-parallax__links { grid-template-columns: minmax(0, 1fr); grid-template-rows: none; grid-auto-flow: row; column-gap: 0; } }

/* Parallax: when the text column is taller than the image's 2000x1320 box (laptops), the image stopped short and left a white band
   under it. Stretch the image panel to the full section height; keep the aspect ratio as the minimum. Two-column layouts only. 2026-10-06. */
@media (min-width: 769px) { body:not(#ls-type) .ls-parallax > .ls-parallax__media { align-self: stretch; aspect-ratio: auto; height: auto; min-height: calc(50vw * 0.66); } body:not(#ls-type) .ls-parallax > .ls-parallax__media > img { height: 100%; } }

/* === Hero overlay waits for the hero image (2026-10-22, Dan) ===
   The dark gradient overlay used to paint before the photo (white page + dark gradient, then the photo).
   The hero <img> (templates, onload) adds .is-ready to the hero once the image is decoded; until then the
   overlay is hidden, so photo and overlay appear in the same frame. Heroes without a photo (--nobg) and
   visitors without JavaScript (html.no-js) always get the overlay. functions.php's 2.5 s fallback timer also
   adds .is-ready as a safety net. */
html:not(.no-js) .ls-nb-hero:not(.ls-nb-hero--nobg):not(.is-ready) .ls-nb-hero__overlay {
  opacity: 0;
}

/* ── Space between a card grid and what follows it in the same section (2026-10-22) ──
   Hub pages put .ls-hood-grid directly above a table or a subheading; they touched. */
.ls-nb-section > .ls-hood-grid + .ls-nb-table-wrap,
.ls-nb-section > .ls-hood-grid + .ls-nb-section__subheading {
  margin-top: clamp(48px, 5vw, 72px);
}
.ls-nb-section > .ls-nb-section__subheading + .ls-nb-section__lead {
  margin: 0 0 20px;
}


/* === FACTS AT A GLANCE + TIER CARDS (2026-11-10) ===
   Two components in the language of the Nearby cards (.ls-nearby__item) and the
   Quick Facts header bar. Markup lives in page content, so the data stays crawlable text.
   .ls-facts  : headline cards (.ls-facts__card) + homes / condos panels (.ls-facts__panel, dl rows).
                Rendered by the neighborhood template from the ls-facts marker block in intro_body.
   .ls-tiers  : comparison cards for 2-4 groups (.ls-tier), headline value + dl rows; replaces a small
                comparison table. Spans both prose columns. Source line: p.ls-tiers__source. */
.ls-facts, .ls-tiers {
	--lsf-cream: #f6f3ee;
	--lsf-champ: #bdaa89;
	--lsf-gold: #826c48;
	--lsf-ink: #151515;
	--lsf-slate: #35414a;
	--lsf-rule: #e4ddd0;
}
.ls-facts__intro { font-size: 17px; color: var(--lsf-slate); max-width: 720px; margin: -6px 0 28px; }
.ls-facts__cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin: 0 0 16px; }
.ls-facts__card, .ls-tier {
	background: var(--lsf-cream);
	border-top: 3px solid var(--lsf-champ);
	border-radius: 6px;
	padding: 22px 22px 20px;
}
.ls-facts__label, .ls-tier__label {
	font: 600 11px/1.3 Outfit, sans-serif;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--lsf-gold);
	margin: 0 0 10px;
}
.ls-facts__value, .ls-tier__value {
	font-family: ivypresto-headline, Georgia, "Times New Roman", serif;
	font-size: 34px;
	line-height: 1.05;
	color: var(--lsf-ink);
	margin: 0 0 8px;
}
.ls-facts__note { font-size: 14px; line-height: 1.45; color: var(--lsf-slate); margin: 0; }
.ls-facts__panels { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.ls-facts__panel { background: var(--lsf-cream); border-radius: 6px; overflow: hidden; }
.ls-facts__ph {
	background: linear-gradient(90deg, #c4b396, #b6a17c);
	color: var(--lsf-ink);
	font: 600 12.8px Outfit, sans-serif;
	letter-spacing: .12em;
	text-transform: uppercase;
	padding: 12px 24px;
	margin: 0;
}
.ls-facts__list { margin: 0; padding: 6px 24px 10px; }
.ls-facts__row, .ls-tier__row {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	gap: 16px;
	padding: 12px 0;
	border-bottom: 1px solid var(--lsf-rule);
}
.ls-facts__row:last-child { border-bottom: 0; }
.ls-facts__row dt, .ls-tier__row dt {
	font: 600 11px/1.6 Outfit, sans-serif;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--lsf-slate);
	margin: 0;
	flex: 0 0 auto;
}
.ls-facts__row dd, .ls-tier__row dd {
	margin: 0;
	text-align: right;
	font-size: 16px;
	color: var(--lsf-ink);
	font-variant-numeric: tabular-nums;
}
.ls-facts__yes { color: #4a6b4f; }
.ls-facts__source, .ls-tiers__source {
	font-size: 13px;
	line-height: 1.5;
	color: #7a7a7a;
	font-style: italic;
	margin: 16px 0 0;
	max-width: 820px;
}
/* Tier cards */
.ls-tiers {
	column-span: all;
	break-inside: avoid;
	margin: 8px 0 28px;
}
.ls-tiers__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 16px; }
.ls-tier { padding: 22px 24px 14px; }
.ls-tier__value { font-size: 36px; margin: 0 0 4px; }
.ls-tier__sub { font-size: 13px; color: var(--lsf-slate); margin: 0 0 14px; }
.ls-tier__list { margin: 0; }
.ls-tier__row { padding: 9px 0; border-bottom: 0; border-top: 1px solid var(--lsf-rule); }
@media (max-width: 900px) {
	.ls-facts__cards { grid-template-columns: 1fr 1fr; }
	.ls-facts__panels { grid-template-columns: 1fr; }
}
@media (max-width: 480px) {
	.ls-facts__cards { grid-template-columns: 1fr; }
	.ls-facts__value, .ls-tier__value { font-size: 30px; }
}
/* Inside .ls-nb-prose, the prose rule (.ls-nb-prose p: margin, font) outranks single-class selectors,
   so the card text classes are restated with the container for specificity. */
:is(.ls-facts, .ls-tiers) p:is(.ls-facts__label, .ls-tier__label) { font: 600 11px/1.3 Outfit, sans-serif; letter-spacing: .14em; color: var(--lsf-gold); margin: 0 0 10px; }
:is(.ls-facts, .ls-tiers) p:is(.ls-facts__value, .ls-tier__value) { font-family: ivypresto-headline, Georgia, "Times New Roman", serif; line-height: 1.05; color: var(--lsf-ink); }
.ls-tiers p.ls-tier__value { margin: 0 0 4px; }
.ls-facts p.ls-facts__value { margin: 0 0 8px; }
.ls-tiers p.ls-tier__sub { font-size: 13px; line-height: 1.4; margin: 0 0 14px; }
.ls-facts p.ls-facts__note { margin: 0; }
:is(.ls-facts, .ls-tiers) p:is(.ls-facts__source, .ls-tiers__source) { font-size: 13px; line-height: 1.5; margin: 16px 0 0; }
/* The prose sections set font-weight 300 at ID specificity (#additional, #neighborhood-detail), so tier text restates weight and spacing at the same level. */
:is(#additional, #neighborhood-detail) .ls-tiers p.ls-tier__label { font-weight: 600; }
:is(#additional, #neighborhood-detail) .ls-tiers p.ls-tier__value { font-weight: 400; }
:is(#additional, #neighborhood-detail) .ls-tiers p.ls-tiers__source { margin: 14px 0 0; }
/* Quick Facts as a card (2026-11-10; site-wide since 17:02 at Dan's request, first on Grey Oaks).
   #stats gives the specificity to beat the base panel rules. */
body .ls-nb-intro-grid #stats.ls-nb-stats-wrap { background: #f6f3ee; border-top: 3px solid #bdaa89; border-radius: 6px; padding: 24px 26px 8px; align-self: start; }
#stats.ls-nb-stats-wrap .ls-nb-stats__heading { background: none; background-image: none; padding: 0; margin: 0 0 6px; font: 600 11px/1.3 Outfit, sans-serif; letter-spacing: .14em; text-transform: uppercase; color: #826c48; }
#stats.ls-nb-stats-wrap .ls-nb-stats { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: 24px; padding: 0; margin: 0; }
#stats.ls-nb-stats-wrap .ls-nb-stat { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; padding: 16px 0; border-top: 1px solid #e4ddd0; border-bottom: 0; text-align: left; }
#stats.ls-nb-stats-wrap .ls-nb-stat:nth-child(-n+2) { border-top: 0; }
#stats.ls-nb-stats-wrap .ls-nb-stat__value { order: 1; font-family: ivypresto-headline, Georgia, "Times New Roman", serif; font-size: 21px; line-height: 1.2; font-weight: 400; color: #151515; text-align: left; }
#stats.ls-nb-stats-wrap .ls-nb-stat__label { order: 2; font: 600 10.5px/1.4 Outfit, sans-serif; letter-spacing: .12em; text-transform: uppercase; color: #35414a; text-align: left; }
/* Quick Facts on hub pages: long labels were nowrap and pushed past the card; the source note had its own 28px side padding. */
#stats.ls-nb-stats-wrap .ls-nb-stat__label { white-space: normal; }
#stats.ls-nb-stats-wrap .ls-nb-stat { justify-content: flex-start; }
#stats.ls-nb-stats-wrap .ls-hub-source { padding: 4px 0 16px; }
/* Parallax two-column lists as cards (2026-11-10, Dan: "tables like the ones in Bundled Golf Communities").
   Every .ls-parallax__content--twocol (hub data lists, guide shopping/dining, pros/cons) becomes two cream cards:
   gold uppercase column title, no bullets, hairline rules between items. CSS only. */
section.ls-parallax .ls-parallax__content--twocol .ls-parallax__col { background: #f6f3ee; border-top: 3px solid #bdaa89; border-radius: 6px; padding: 20px 22px 8px; }
section.ls-parallax .ls-parallax__content--twocol .ls-parallax__col-title { font: 600 11px/1.3 Outfit, sans-serif; letter-spacing: .14em; text-transform: uppercase; color: #826c48; margin: 0 0 6px; }
section.ls-parallax .ls-parallax__content--twocol .ls-parallax__col-title .ls-q { color: #826c48; opacity: .8; }
section.ls-parallax .ls-parallax__content--twocol .ls-parallax__col-list { list-style: none; padding: 0; margin: 0; }
section.ls-parallax .ls-parallax__content--twocol .ls-parallax__col-list li { list-style: none; padding: 11px 0; margin: 0; border-top: 1px solid #e4ddd0; font-size: 15px; line-height: 1.45; color: #151515; }
section.ls-parallax .ls-parallax__content--twocol .ls-parallax__col-list li:first-child { border-top: 0; }
section.ls-parallax .ls-parallax__content--twocol .ls-parallax__col-list li::before { content: none; display: none; }
/* A-vs-B compare cards (.ls-compare) in the new look (2026-11-10, Dan: "Bundled Golf Homes / Other Golf Homes").
   .ls-compare CSS is page-level (a <style> block in each hub page), so these rules carry "body" for specificity.
   Both cards cream with the champagne rule; the --feature card a shade deeper with a gold rule (was dark #34424a).
   The first row (the median price on every current use) becomes the headline: serif value, plain caption below. */
body .ls-compare .ls-compare__card { background: #f6f3ee; color: #151515; border: 0; border-top: 3px solid #bdaa89; border-radius: 6px; padding: 22px 24px 12px; box-shadow: none; }
body .ls-compare .ls-compare__card--feature { background: #efe8dc; border-top-color: #826c48; }
body .ls-compare .ls-compare__title { font: 600 11px/1.3 Outfit, sans-serif; letter-spacing: .14em; text-transform: uppercase; color: #826c48; margin: 0 0 10px; }
body .ls-compare .ls-compare__list { margin: 0; }
body .ls-compare .ls-compare__row { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; padding: 11px 0; border: 0; border-top: 1px solid #e4ddd0; }
body .ls-compare .ls-compare__row dt { font: 600 11px/1.6 Outfit, sans-serif; letter-spacing: .1em; text-transform: uppercase; color: #35414a; margin: 0; }
body .ls-compare .ls-compare__row dd { margin: 0; font-size: 16px; color: #151515; text-align: right; font-variant-numeric: tabular-nums; }
body .ls-compare .ls-compare__row:first-child { flex-direction: column-reverse; align-items: flex-start; gap: 4px; border-top: 0; padding: 0 0 14px; }
body .ls-compare .ls-compare__row:first-child dd { font-family: ivypresto-headline, Georgia, "Times New Roman", serif; font-size: 38px; line-height: 1.05; text-align: left; }
body .ls-compare .ls-compare__row:first-child dt { font: 400 13px/1.4 Outfit, sans-serif; letter-spacing: 0; text-transform: none; color: #35414a; }
/* Long reference tables (.ls-nb-table in .ls-nb-table-wrap) in the card family (2026-11-11, Dan: "same background
   and accent colors, radius corners"). The wrap becomes a cream card with the champagne rule; header labels gold;
   hairline rows; the caption becomes a footnote inside the card. Later in the file than the base table rules, same selectors. */
.ls-nb-table-wrap { background: #f6f3ee; border-top: 3px solid #bdaa89; border-radius: 6px; padding: 6px 26px 2px; }
.ls-nb-table thead th { font: 600 11px/1.4 Outfit, sans-serif; letter-spacing: .14em; text-transform: uppercase; color: #826c48; padding-top: 16px; padding-bottom: 12px; border-bottom: 1px solid #bdaa89; }
.ls-nb-table tbody tr { border-bottom: 1px solid #e4ddd0; }
.ls-nb-table tbody tr:hover { background: rgba(189, 170, 137, .12); }
.ls-nb-table tbody th { color: #35414a; }
.ls-nb-table td, .ls-nb-table th { font-variant-numeric: tabular-nums; }
.ls-nb-table caption { margin-top: 0; padding: 12px 0 14px; border-top: 1px solid #e4ddd0; font-size: 13px; font-style: italic; color: #7a7a7a; }
.ls-nb-table .ls-nb-table__group th { color: #826c48; font-size: 11px; letter-spacing: .14em; }
.ls-nb-table .ls-nb-table__group { border-bottom: 1px solid #bdaa89; }
@media (max-width: 600px) { .ls-nb-table-wrap { padding: 4px 16px 2px; } }
/* Blog posts: the base blog table rules (.single-post .entry-content table ...) outrank the plain class, so restate. */
.single-post .entry-content .ls-nb-table thead th { font: 600 11px/1.4 Outfit, sans-serif; letter-spacing: .14em; text-transform: uppercase; color: #826c48; padding-top: 16px; padding-bottom: 12px; border-bottom: 1px solid #bdaa89; }
.single-post .entry-content .ls-nb-table tbody tr { border-bottom: 1px solid #e4ddd0; }
.single-post .entry-content .ls-nb-table tbody th { color: #35414a; }
.single-post .entry-content .ls-nb-table caption { margin-top: 0; padding: 12px 0 14px; border-top: 1px solid #e4ddd0; font-size: 13px; font-style: italic; color: #7a7a7a; }
/* Facts block with only homes or only condos: one panel, half width on desktop. */
.ls-facts__panels--single { grid-template-columns: minmax(0, 1fr); max-width: 620px; }
/* Essentials panel rows: same hover as the long tables (2026-11-11) */
.ls-facts__row { margin: 0 -12px; padding: 12px 12px; transition: background-color .15s ease; }
.ls-facts__row:hover { background: #f9f9f9; }
/* === end FACTS AT A GLANCE + TIER CARDS === */

/* === Homepage "Visit Our Blog" section (2026-11-11) ===
   Rebuilt from Kadence Blocks (synced pattern 1231: row layout + two advanced headings) as core blocks:
   group.ls-blog-section > h2.ls-blog-section__heading + p.ls-blog-section__intro + the existing query loop (.ls-blog-loop).
   Values measured from the Kadence version: white band, 80px top / 16px bottom padding, content 1440px wide with 24px edges,
   serif H2 at the display size, 0.9rem Outfit intro at 70% width (85% tablet, 100% phone). */
.entry-content .ls-blog-section {
	position: relative;
	z-index: 2;
	background: var(--global-palette9, #fff);
	margin-top: 0;
	margin-bottom: 0;
	padding: 80px var(--global-content-edge-padding, 24px) 16px;
}
.entry-content .ls-blog-section > * {
	max-width: calc(var(--global-content-width, 1440px) - 2 * var(--global-content-edge-padding, 24px));
	margin-left: auto;
	margin-right: auto;
}
body:not(#ls-type) .entry-content h2.ls-blog-section__heading {
	font-family: var(--ls-serif-head);
	font-weight: 300;
	font-size: clamp(2.25rem, 4.5vw, 4rem);
	line-height: 1.1;
	letter-spacing: -0.005em;
	text-transform: none;
	text-align: center;
	text-wrap: balance;
	color: #151515;
	margin: 0 auto 32px;
}
body:not(#ls-type) .entry-content p.ls-blog-section__intro {
	font-family: var(--global-body-font-family, Outfit, sans-serif);
	font-weight: 300;
	font-size: clamp(0.8rem, 0.73rem + 0.217vw, 0.9rem); /* was var(--global-kb-font-size-sm) from Kadence Blocks */
	line-height: 1.8;
	text-align: center;
	color: #151515;
	max-width: 70%;
	margin: 0 auto 32px;
	padding-bottom: 0;
}
@media (max-width: 1024px) { body:not(#ls-type) .entry-content p.ls-blog-section__intro { max-width: 85%; } }
@media (max-width: 767px) { body:not(#ls-type) .entry-content p.ls-blog-section__intro { max-width: 100%; } }
.entry-content .ls-blog-section > .wp-block-query { max-width: calc(var(--global-content-width, 1440px) - 2 * var(--global-content-edge-padding, 24px)); margin-top: 0; margin-bottom: 0; }
/* === end Homepage "Visit Our Blog" section === */


/* === Footer logo as a core image block (2026-11-11) ===
   Replaces the Kadence Blocks image in the footer6 widget. Same box as before: 180px wide, 5/12px padding,
   figure margin 7px 0 14px, left-aligned in the column. */
#colophon figure.ls-footer-logo { margin: 7px 0 14px; display: block; }
#colophon figure.ls-footer-logo img { width: 180px; height: auto; max-width: 100%; padding: 5px 0 12px; margin-left: 0; margin-right: auto; box-sizing: content-box; }
/* === end footer logo core block === */
