/* ─────────────────────────────────────────────────────────────────────────
   Cozumel Real Estate — brand skin
   ─────────────────────────────────────────────────────────────────────────
   Implements the token contract in theme-core/docs/TOKEN_CONTRACT.md.
   Templates emit `lvc-` classes and reference ONLY these custom properties —
   never hardcoded colours or fonts. Restyling the brand happens here, alone.

   TIER: T4 — "Catalogue". A new tier; T1/T2/T3 are rental brands.

   Two constraints shaped every value below.

   1. ONE SYSTEM, $400K TO $135M. The same cards must carry a Cozumel condo
      and a Beverly Hills estate without either looking mispriced. That rules
      out anything decorative: ornament reads cheap at the top of the range
      and pretentious at the bottom. Restraint is the only thing that scales
      across two orders of magnitude.

   2. THE PHOTOGRAPHY IS UNCONTROLLABLE. Caribbean turquoise, Tulum jungle,
      Miami neon, Beverly Hills concrete and glass — all in one grid. So the
      chrome is near-achromatic on purpose. A warm gold (T1) would fight LA
      modernism; a cool platinum (T2) would deaden Caribbean water. The
      neutral is not indecision, it is the only tone that loses to none of them.

   Deliberate contrast with the rental portfolio: those brands are the guest
   experience, this one is the transaction. They should not look like the
   same site wearing a different logo — a buyer arriving from a rental site
   must feel they have moved somewhere more serious, not sideways.
   ───────────────────────────────────────────────────────────────────────── */

/* ── Webfonts ──────────────────────────────────────────────────────────────
   SELF-HOSTED, not loaded from Google. Three reasons: no third-party request
   on the critical path (speed is a brand signal at this price point), no
   dependency on an outside host staying up, and no visitor data leaving the
   site to fetch a typeface.

   Both families are SIL Open Font Licence, so redistribution here is fine.

   latin-ext is NOT optional. Half this catalogue is Spanish — malecón, Mérida,
   Cancún, fideicomiso, régimen — and the latin subset alone has no ó, é or ú.
   Dropping it would render the accents from a fallback face mid-word.

   Archivo is a VARIABLE font: one file per subset covers 400–500, which is why
   there are six files and not eight. */

@font-face {
	font-family: 'Archivo';
	font-style: normal;
	font-weight: 400 500;
	font-display: swap;
	src: url('fonts/archivo-latin.woff2') format('woff2');
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
	font-family: 'Archivo';
	font-style: normal;
	font-weight: 400 500;
	font-display: swap;
	src: url('fonts/archivo-latin-ext.woff2') format('woff2');
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
	font-family: 'Spectral';
	font-style: normal;
	font-weight: 300;
	font-display: swap;
	src: url('fonts/spectral-300-latin.woff2') format('woff2');
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
	font-family: 'Spectral';
	font-style: normal;
	font-weight: 300;
	font-display: swap;
	src: url('fonts/spectral-300-latin-ext.woff2') format('woff2');
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
	font-family: 'Spectral';
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url('fonts/spectral-400-latin.woff2') format('woff2');
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
	font-family: 'Spectral';
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url('fonts/spectral-400-latin-ext.woff2') format('woff2');
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

:root {

	/* ── Surfaces ─────────────────────────────────────────────────────────
	   Near-black with a faint cool cast. Deep enough that photography reads
	   as lit rather than pasted on; never pure #000, which crushes shadow
	   detail in architectural interiors. */
	--lvc-bg:            #090B0E;
	--lvc-bg-alt:        #10141A;
	--lvc-card:          #161B22;
	--lvc-border:        rgba(243, 240, 232, 0.08);
	--lvc-border-strong: rgba(243, 240, 232, 0.16);

	/* ── Text ─────────────────────────────────────────────────────────────
	   Warm off-white, never pure white — a global constant across every tier.
	   Pure white on near-black vibrates and reads as unfinished. */
	--lvc-text:  #F3F0E8;
	--lvc-soft:  rgba(243, 240, 232, 0.82);
	--lvc-muted: #92979D;

	/* ── Accent ───────────────────────────────────────────────────────────
	   Champagne stone. Warm enough to feel considered, desaturated enough to
	   sit over turquoise water and grey concrete alike.

	   Contrast: 9.8:1 on --lvc-bg — passes AA for body, AAA for large text.

	   USED SPARINGLY: primary inquiry CTA and active navigation only. If it
	   appears more than twice on a screen it has stopped meaning anything. */
	--lvc-accent:       #C8B79B;
	--lvc-accent-hover: #DED0B8;
	--lvc-accent-soft:  rgba(200, 183, 155, 0.12);

	/* ── Status ───────────────────────────────────────────────────────────
	   Status is information, not decoration, and never a "badge". Sold is
	   stated plainly because a sold listing is credibility, not a failure. */
	--lvc-status-available: var(--lvc-accent);
	--lvc-status-sold:      var(--lvc-muted);
	--lvc-status-prelaunch: #AEB7B0;

	/* ── Type ─────────────────────────────────────────────────────────────
	   Spectral: an editorial serif built for reading, not a wedding-invite
	   display face. Holds a property name at 64px and a paragraph at 17px.
	   Distinct from the rental tiers (Cormorant / Playfair / Freight).

	   Archivo: chosen for TABULAR LINING FIGURES. This site renders prices
	   and dimensions constantly ($135,000,000 · 50,000 sq ft · 144.28 m²);
	   proportional or old-style numerals make a spec column ragged and a
	   price look like prose. */
	--lvc-font-display: 'Spectral', Georgia, 'Times New Roman', serif;
	--lvc-font-body:    'Archivo', system-ui, -apple-system, sans-serif;

	--lvc-tracking-display: -0.02em;
	--lvc-tracking-ui:       0.10em;  /* uppercase eyebrows and labels */
	--lvc-leading-display:   1.12;
	--lvc-leading-body:      1.65;

	/* ── Rhythm ───────────────────────────────────────────────────────────
	   Generous, because dark space is editorial confidence rather than
	   emptiness. Never fill a gap because it "looks empty". */
	/* Full-bleed. The 1400px cap left visible dead margins on a 1920 display,
	   and this catalogue is photography-led — an image that stops short of the
	   edge reads as a document, not a property.

	   Nothing is at risk from removing it because line length is governed
	   separately: .lvc-prose caps its children at 72ch, and .lvc-sec-intro and
	   the FAQ answers carry their own measures. Only IMAGES and GRIDS go wide,
	   which is the intent. */
	/* One hero height for every page type. Four templates had drifted to four
	   different values — destination 460/66vh/680, home 560/84vh/820, property
	   640/82vh/900, development 680/88vh/920 — so moving between them changed
	   the fold. The homepage value wins because it is the one that was designed
	   against; property and development heroes SHRINK slightly to meet it. */
	--lvc-hero-h:    clamp(560px, 84vh, 820px);

	--lvc-px:        5%;
	--lvc-max:       none;
	--lvc-radius:    2px;   /* near-sharp; soft corners read consumer-app */
	--lvc-gap:       32px;
	--lvc-sec-pad:   clamp(64px, 9vw, 128px);
}

/* ── Base ──────────────────────────────────────────────────────────────── */

body {
	background: var(--lvc-bg);
	color: var(--lvc-soft);
	font-family: var(--lvc-font-body);
	font-size: 1.0625rem;
	line-height: var(--lvc-leading-body);
	-webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4,
.lvc-hero__title,
.lvc-sec-title {
	font-family: var(--lvc-font-display);
	color: var(--lvc-text);
	font-weight: 400;             /* weight is not how this brand emphasises */
	line-height: var(--lvc-leading-display);
	letter-spacing: var(--lvc-tracking-display);
}

/* Prices, areas and spec figures. Tabular so columns align down a grid and
   a price never reflows as the digits change. */
.lvc-price,
.lvc-spec__value,
.lvc-card__price {
	font-family: var(--lvc-font-body);
	font-variant-numeric: tabular-nums lining-nums;
	font-feature-settings: 'tnum' 1, 'lnum' 1;
	letter-spacing: 0;
}

/* A real figure carries weight; "Price on Request" stays quiet. A loud
   fallback makes a catalogue look empty — the RMOF card lesson. */
.lvc-price--on-request {
	color: var(--lvc-muted);
	font-size: 0.9375em;
	letter-spacing: var(--lvc-tracking-ui);
	text-transform: uppercase;
}

/* Sold / withdrawn. Stated plainly, never a badge or a strikethrough — a closed
   sale is evidence that this business transacts, not a failure to advertise. */
.lvc-price--closed {
	color: var(--lvc-status-sold);
	font-size: 0.9375em;
	letter-spacing: var(--lvc-tracking-ui);
	text-transform: uppercase;
}

.lvc-eyebrow {
	font-family: var(--lvc-font-body);
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-muted);
}

/* ── Buttons ───────────────────────────────────────────────────────────── */

.lvc-btn {
	display: inline-block;
	padding: 14px 30px;
	background: var(--lvc-accent);
	color: var(--lvc-bg);
	border: 1px solid var(--lvc-accent);
	border-radius: var(--lvc-radius);
	font-family: var(--lvc-font-body);
	font-size: 0.875rem;
	letter-spacing: var(--lvc-tracking-ui);
	text-transform: uppercase;
	text-decoration: none;
	transition: background-color 240ms ease, border-color 240ms ease;
}

.lvc-btn:hover,
.lvc-btn:focus-visible {
	background: var(--lvc-accent-hover);
	border-color: var(--lvc-accent-hover);
	color: var(--lvc-bg);          /* restated on purpose — see the `a` rule */
}

/* Ghost is the DEFAULT for secondary actions. One filled button per screen:
   at this price point a wall of filled CTAs reads as pressure, and pressure
   is what loses the enquiry. */
.lvc-btn--ghost {
	background: transparent;
	color: var(--lvc-accent);
	border-color: var(--lvc-border-strong);
}

.lvc-btn--ghost:hover,
.lvc-btn--ghost:focus-visible {
	background: var(--lvc-accent-soft);
	border-color: var(--lvc-accent);
	color: var(--lvc-accent);      /* restated on purpose — see the `a` rule */
}

/* ── Section actions ───────────────────────────────────────────────────── */

/* The "view all" step out of a truncated section. Ghost by the rule above —
   the section's own cards are the primary action, not this. */
.lvc-sec-actions {
	margin: 40px 0 0;
	text-align: center;
}

/* A linked section heading stays a heading. Inheriting the anchor colour would
   make every group title on the developments index read as a button. */
.lvc-sec-title a {
	color: inherit;
	text-decoration: none;
}

.lvc-sec-title a:hover,
.lvc-sec-title a:focus-visible {
	color: var(--lvc-accent);
}

/* ── Accessibility ─────────────────────────────────────────────────────── */

:focus-visible {
	outline: 2px solid var(--lvc-accent);
	outline-offset: 3px;
}

@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		transition-duration: 0.01ms !important;
	}
}

/* ═════════════════════════════════════════════════════════════════════════
   PHASE 2 — COMPONENTS
   The templates exist now, so these style real markup rather than a guess.
   Every value below resolves to a token above; no literal colours or fonts.
   ═════════════════════════════════════════════════════════════════════════ */

/* ── Base ──────────────────────────────────────────────────────────────── */

*, *::before, *::after { box-sizing: border-box; }

img, svg, video { max-width: 100%; height: auto; display: block; }

/* The parent theme's reset.css ships browser-default link colours:

       a { color: #c36 }   a:active, a:hover { color: #336 }

   Neutralising `a` alone is not enough. `a:hover` is one class more specific,
   so it kept winning, and hovering anything that wraps text in a link — every
   property and term CARD is a single <a> — repainted whatever inherited its
   colour to #336. On the #161B22 card surface that is about 1.5:1, so a card
   price disappeared the moment the pointer touched it. It read as a hover
   style because it is one; it just was not ours.

   Only text with no colour of its own was affected, which is why the card
   title, meta and excerpt looked fine and the price did not — they set
   theirs, it inherits.

   Deliberately `inherit`, not a token: the point is that a link takes the
   colour of the context it sits in. Components that DO want a hover colour
   (.lvc-prose a, .lvc-crumbs a, footer links) are more specific and still
   win. */
a,
a:hover,
a:active { color: inherit; }

/* The other half of that fix. `a:hover` above is one class-equivalent more
   specific than a bare `.lvc-thing`, so any link component that declares a
   colour has to restate it for the hover state or it would now inherit
   instead. None of these CHANGE on hover and none did before — they were
   already being repainted #336 by the reset, which is the same bug the card
   price had, just somewhere less obvious. Each keeps the colour it declares.
   (.lvc-doc and .lvc-filter__clear are absent because they already set a
   hover colour of their own.) */
.lvc-header__brand:hover,
.lvc-header__brand:active,
.lvc-property-hero__gallery-link:hover,
.lvc-property-hero__gallery-link:active { color: var(--lvc-text); }

.lvc-term-index__group-link:hover,
.lvc-term-index__group-link:active { color: var(--lvc-accent); }

.lvc-skip:hover,
.lvc-skip:active { color: var(--lvc-bg); }

.lvc-main { display: block; }

/* Utility: available to assistive technology, invisible on screen. */
.lvc-sr {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

/* Honeypot. Positioned off-screen rather than display:none — a bot that skips
   hidden fields would otherwise sail through, which is the whole point of it. */
.lvc-hp {
	position: absolute;
	left: -9999px;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

.lvc-skip {
	position: absolute;
	top: -100px;
	left: 12px;
	z-index: 200;
	padding: 12px 20px;
	background: var(--lvc-accent);
	color: var(--lvc-bg);
	text-decoration: none;
}

.lvc-skip:focus { top: 12px; }

/* ── Layout ────────────────────────────────────────────────────────────── */

.lvc-container {
	width: 100%;
	max-width: var(--lvc-max);
	margin-inline: auto;
	padding-inline: var(--lvc-px);
}

.lvc-section { padding-block: var(--lvc-sec-pad); }

/* Alternating surface is how this design separates sections. There are no
   dividers, no shadows and no coloured panels — one step of luminance. */
.lvc-section--alt { background: var(--lvc-bg-alt); }

.lvc-section--finder {
	padding-block: 0;
	background: var(--lvc-bg-alt);
	border-block: 1px solid var(--lvc-border);
}

.lvc-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--lvc-gap);
}

/* Card grids fill their last row. Grid packs a partial final row into its
   leftmost tracks, so seven cards in three columns strand one hard left with
   two empty slots beside it — the same "looks broken" shape the gallery's
   auto-fit fix removed. Flex wrap first centred the remainder, which was
   better but still left visible gutters beside the final row; growing the
   remainder to fill the line removes the hole entirely.

   Scoped to --3: the plain two-up .lvc-grid keeps grid behaviour. The bases
   below reproduce the track maths exactly, so a FULL row is pixel-identical
   to what grid produced — a complete line has no free space to grow into,
   which is what makes flex-grow safe here. This only changes what an
   incomplete row does. Items still stretch to their line's height, so cards
   stay equal-height. */
.lvc-grid--3 {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
}

/* grow:1 with a max-width one tier wider than the basis: a short final line
   spreads across the full row, but a LONE trailing card stops at roughly the
   next-widest track instead of ballooning to container width and reading as a
   feature panel rather than a card. */
.lvc-grid--3 > * {
	flex: 1 1 100%;
	max-width: 100%;
	min-width: 0; /* flex items floor at content width without this; long
	                 unbroken strings would push a card past its track. */
}

.lvc-page__head { padding-block: clamp(48px, 7vw, 96px) 0; }

/* ── Section typography ────────────────────────────────────────────────── */

.lvc-sec-title { font-size: clamp(1.75rem, 3.2vw, 2.75rem); margin: 0; }

.lvc-sub-title {
	font-size: 1.125rem;
	margin: 0 0 14px;
	letter-spacing: var(--lvc-tracking-ui);
	text-transform: uppercase;
	font-family: var(--lvc-font-body);
	color: var(--lvc-muted);
}

.lvc-sec-intro {
	max-width: 68ch;
	margin: 16px 0 0;
	color: var(--lvc-soft);
}

.lvc-sec-title + .lvc-grid,
.lvc-sec-intro + .lvc-grid { margin-top: clamp(32px, 4vw, 56px); }

.lvc-sec-more { margin: 32px 0 0; }

/* Editorial split used on the homepage advisory section. It gives the global
   portfolio proposition a scannable structure instead of another long prose
   block, while collapsing to a single reading order on mobile. */
.lvc-editorial-split {
	display: grid;
	grid-template-columns: minmax(0, 1.15fr) minmax(280px, 0.85fr);
	gap: clamp(48px, 8vw, 120px);
	align-items: start;
}

.lvc-market-list {
	list-style: none;
	margin: 0;
	padding: 0;
	border-top: 1px solid var(--lvc-border-strong);
}

.lvc-market-list li {
	display: grid;
	grid-template-columns: 42px 1fr;
	gap: 4px 16px;
	padding: 22px 0;
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-market-list__number {
	grid-row: 1 / span 2;
	font-size: 0.6875rem;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-accent);
}

.lvc-market-list strong {
	font-family: var(--lvc-font-display);
	font-size: 1.125rem;
	font-weight: 400;
	color: var(--lvc-text);
}

.lvc-market-list li > span:last-child {
	font-size: 0.875rem;
	color: var(--lvc-muted);
}

.lvc-crumbs { margin-bottom: 20px; }
.lvc-crumbs a { text-decoration: none; }
.lvc-crumbs a:hover { color: var(--lvc-text); }

.lvc-empty {
	color: var(--lvc-muted);
	padding-block: 40px;
	margin: 0;
}

/* ── Prose ─────────────────────────────────────────────────────────────── */

.lvc-prose { max-width: 72ch; }
.lvc-prose > * + * { margin-top: 1.25em; }

/* Every template emits `class="lvc-container lvc-prose"` on ONE element, so a
   72ch max-width shrank the container itself — and because .lvc-container also
   sets `margin-inline: auto`, the whole block centred. The result was body copy
   indented ~90px relative to the h1 above it, which reads as a mistake rather
   than a measure.

   Keep the container full width and constrain its CHILDREN instead: the line
   length is still 72ch, but its left edge lines up with every other element on
   the page. */
.lvc-container.lvc-prose { max-width: var(--lvc-max); }
.lvc-container.lvc-prose > * { max-width: 72ch; }
/* Editorial beside an image. The container is unbounded, so a lone 72ch column
   leaves most of a wide viewport empty — that reads as an unfinished layout
   rather than as restraint. This fills the empty half with the term's own
   photography instead of moving the text, which keeps the left edge aligned
   with every other section (the reason the prose is not centred, above).

   Single column until 1000px: stacking a tall image between paragraphs on a
   phone interrupts the read for no gain. */
.lvc-editorial {
	display: grid;
	gap: clamp(32px, 5vw, 72px);
	align-items: start;
}

@media (min-width: 1000px) {
	.lvc-editorial { grid-template-columns: minmax(0, 72ch) minmax(0, 1fr); }

	/* Sticky, because the prose is long and a fixed image would scroll away
	   after the first paragraph and leave the void back. */
	.lvc-editorial__media {
		position: sticky;
		top: 96px;
	}
}

.lvc-editorial__media {
	margin: 0;
}

/* Sized for a PORTRAIT photograph, since that is what the field asks for and
   what suits a tall column. The height cap stops a very tall crop running past
   the text it accompanies and turning the section into a picture with a
   caption; object-fit keeps the crop honest rather than stretching. Landscape
   images still work — they simply never reach the cap. */
.lvc-editorial__media img {
	display: block;
	width: 100%;
	height: auto;
	max-height: 78vh;
	object-fit: cover;
	border-radius: var(--lvc-radius);
}

/* Reasons to buy, as cards. These are not links, so the hover is deliberately
   a lift and not a click cue — the border warms and the surface rises a
   fraction, which reads as "alive" without promising a destination. Cursor is
   left alone for the same reason. */
.lvc-reason {
	background: var(--lvc-card);
	border: 1px solid var(--lvc-border);
	border-radius: var(--lvc-radius);
	padding: 26px 24px 28px;
	transition: border-color 260ms ease, background-color 260ms ease, transform 260ms ease;
}

.lvc-reason:hover {
	border-color: var(--lvc-border-strong);
	background: var(--lvc-bg-alt);
	transform: translateY(-3px);
}

/* Anyone who has asked the OS to calm animation down does not want the grid
   moving under the pointer. */
@media (prefers-reduced-motion: reduce) {
	.lvc-reason { transition: border-color 260ms ease; }
	.lvc-reason:hover { transform: none; }
}

.lvc-reason__title {
	font-family: var(--lvc-font-display);
	font-size: 1.125rem;
	line-height: 1.3;
	color: var(--lvc-text);
	margin: 0;
}

.lvc-reason__text {
	margin: 10px 0 0;
	color: var(--lvc-soft);
	max-width: 46ch; /* short by design — see the field instructions */
}

/* Sits under a capped grid, so it needs the separation a grid gap would have
   given it had another row followed. */
.lvc-more { margin-top: 40px; }

.lvc-hero__cta { margin-top: 28px; }

.lvc-prose h2 { font-size: clamp(1.375rem, 2.4vw, 1.875rem); margin-top: 2em; }
.lvc-prose h3 { font-size: 1.25rem; margin-top: 1.75em; }
.lvc-prose strong { color: var(--lvc-text); font-weight: 500; }
.lvc-prose ul, .lvc-prose ol { padding-left: 1.25em; }
.lvc-prose li + li { margin-top: 0.6em; }

.lvc-prose a {
	color: var(--lvc-text);
	text-decoration: underline;
	text-decoration-color: var(--lvc-accent);
	text-underline-offset: 0.22em;
	text-decoration-thickness: 1px;
}

.lvc-prose a:hover { color: var(--lvc-accent); }

.lvc-prose table {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.9375rem;
}

.lvc-prose th,
.lvc-prose td {
	text-align: left;
	padding: 14px 16px 14px 0;
	border-bottom: 1px solid var(--lvc-border);
	vertical-align: top;
}

.lvc-prose th { color: var(--lvc-muted); font-weight: 400; }

/* ── Header ────────────────────────────────────────────────────────────── */

.lvc-header {
	position: sticky;
	top: 0;
	z-index: 100;
	border-bottom: 1px solid transparent;
	transition: border-color 240ms ease;
}

/* The translucent blur lives on a PSEUDO-ELEMENT, not on .lvc-header itself.
   `backdrop-filter` establishes a containing block for fixed-position
   descendants — so with it on the header, the mobile nav's `position: fixed;
   inset: 0` resolved against the 76px header instead of the viewport, and a
   303px menu was overflowing a 136px box. A pseudo-element has no descendants,
   so it carries the effect without capturing anything.

   Same trap applies to transform, filter, perspective and will-change. Do not
   move any of them onto .lvc-header. */
.lvc-header::before {
	content: '';
	position: absolute;
	inset: 0;
	z-index: -1;
	background: color-mix(in srgb, var(--lvc-bg) 78%, transparent);
	backdrop-filter: blur(14px);
	transition: background-color 240ms ease;
}

.lvc-header[data-scrolled]::before {
	background: color-mix(in srgb, var(--lvc-bg) 96%, transparent);
}

.lvc-header[data-scrolled] { border-bottom-color: var(--lvc-border); }

.lvc-header__inner {
	display: flex;
	align-items: center;
	gap: clamp(16px, 3vw, 40px);
	width: 100%;
	max-width: var(--lvc-max);
	margin-inline: auto;
	padding: 16px var(--lvc-px);
}

.lvc-header__brand {
	margin-right: auto;
	font-family: var(--lvc-font-display);
	font-size: clamp(1.0625rem, 2vw, 1.3125rem);
	color: var(--lvc-text);
	text-decoration: none;
	letter-spacing: 0.01em;
	white-space: nowrap;
}

/* Nothing in the bar may wrap mid-item. A nav label breaking across two lines
   is what turned a 68px header into a 116px one. */
.lvc-header__inner { flex-wrap: nowrap; }
.lvc-nav__list a,
.lvc-header__cta { white-space: nowrap; }

.lvc-nav__list {
	display: flex;
	gap: clamp(18px, 2.2vw, 30px);
	margin: 0;
	padding: 0;
	list-style: none;
}

.lvc-nav__list a {
	font-size: 0.8125rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-muted);
	text-decoration: none;
	transition: color 200ms ease;
}

.lvc-nav__list a:hover,
.lvc-nav__list .current-menu-item > a { color: var(--lvc-text); }

.lvc-header__cta { padding: 11px 20px; font-size: 0.75rem; }

/* ── The header's tight band ───────────────────────────────────────────────
   The desktop nav appears above 1380px but needs roughly 1660px to lay out at
   full spacing, so between those two widths the header overflowed the viewport
   and every page scrolled sideways. Measured 2026-08-29: 224px of overflow at
   1425px, 133px at 1521px. 1440 and 1536 are the two commonest laptop widths,
   so this was most of the desktop audience.

   `white-space: nowrap` above is why it overflows rather than wrapping, and
   that is correct — a header that wraps to two lines is worse than a tight one
   — so the space comes from the gutter and the gap instead.

   MUST STAY BELOW `.lvc-nav__list`. Both rules are one class of specificity, so
   source order decides. Placed above the component this media query loses to
   `gap: clamp(18px, 2.2vw, 30px)` and silently does nothing — which is exactly
   how it shipped on the first attempt: the padding applied, the gap did not,
   and 31px of overflow survived at 1425px.

   `--lvc-px` is deliberately NOT touched: it is the shared container gutter and
   every section on the site reads it, so narrowing it here would pull every
   page's content to the edges to fix a header. */
@media (min-width: 1381px) and (max-width: 1680px) {
	.lvc-header__inner { padding-inline: 32px; }
	/* 18px is the clamp's own floor above, so this stays inside the range the
	   design already allows. 20px left 1px of overflow at the band's lower edge
	   where the nav only just fits. */
	.lvc-nav__list { gap: 18px; }
}

.lvc-header__toggle {
	display: none;
	width: 44px;
	height: 44px;
	padding: 0;
	background: none;
	border: 0;
	cursor: pointer;
	color: var(--lvc-text);
}

/* Three 1px rules. At this weight the control reads as a mark rather than a
   button, which is the intent — chrome should not compete with photography. */
.lvc-header__bars,
.lvc-header__bars::before,
.lvc-header__bars::after {
	display: block;
	width: 22px;
	height: 1px;
	background: currentColor;
	transition: transform 240ms ease, opacity 200ms ease;
}

.lvc-header__bars { position: relative; margin-inline: auto; }
.lvc-header__bars::before,
.lvc-header__bars::after { content: ''; position: absolute; left: 0; }
.lvc-header__bars::before { top: -7px; }
.lvc-header__bars::after  { top: 7px; }

[aria-expanded='true'] .lvc-header__bars { background: transparent; }
[aria-expanded='true'] .lvc-header__bars::before { transform: translateY(7px) rotate(45deg); }
[aria-expanded='true'] .lvc-header__bars::after  { transform: translateY(-7px) rotate(-45deg); }

/* ── Hero ──────────────────────────────────────────────────────────────── */

.lvc-hero {
	position: relative;
	display: flex;
	align-items: flex-end;
	min-height: var(--lvc-hero-h);
	overflow: hidden;
	background: var(--lvc-bg-alt);
}

.lvc-hero--home { min-height: var(--lvc-hero-h); }

/* Intentional pre-photography state. The homepage is allowed to wait for a
   curated hero without reading as an empty black panel. Once home_hero_image is
   populated, this class is not emitted and the photograph takes over. */
.lvc-hero--home-plain {
	background:
		radial-gradient(circle at 78% 22%, rgba(200, 183, 155, 0.16), transparent 30%),
		linear-gradient(135deg, #151A21 0%, var(--lvc-bg) 56%, #0B1016 100%);
}

.lvc-hero--home-plain::before {
	content: '';
	position: absolute;
	inset: 12% 5% 10% 58%;
	border: 1px solid var(--lvc-border);
	background: linear-gradient(145deg, rgba(255, 255, 255, 0.025), transparent 64%);
}

.lvc-hero__img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* The scrim is not a mood effect — the photography is uncontrollable (Caribbean
   noon, Miami neon, LA concrete) and this is the only thing guaranteeing the
   headline stays legible over any of it. */
.lvc-hero::after {
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(
		to top,
		color-mix(in srgb, var(--lvc-bg) 94%, transparent) 0%,
		color-mix(in srgb, var(--lvc-bg) 62%, transparent) 38%,
		color-mix(in srgb, var(--lvc-bg) 26%, transparent) 100%
	);
}

/* The homepage headline always occupies the left side of an editorial image.
   Add a directional scrim there, then let it dissolve across the artwork so
   the type remains readable without flattening the full photograph. */
.lvc-hero--home::after {
	background:
		linear-gradient(
			90deg,
			rgba(9, 11, 14, 0.86) 0%,
			rgba(9, 11, 14, 0.68) 30%,
			rgba(9, 11, 14, 0.28) 58%,
			rgba(9, 11, 14, 0.06) 100%
		),
		linear-gradient(
			to top,
			rgba(9, 11, 14, 0.9) 0%,
			rgba(9, 11, 14, 0.42) 38%,
			rgba(9, 11, 14, 0.12) 100%
		);
}

.lvc-hero__inner {
	position: relative;
	z-index: 1;
	width: 100%;
	max-width: var(--lvc-max);
	margin-inline: auto;
	padding: 0 var(--lvc-px) clamp(44px, 6vw, 88px);
}

.lvc-hero__title {
	font-size: clamp(2.125rem, 5.4vw, 4.25rem);
	max-width: 20ch;
	margin: 12px 0 0;
}

.lvc-hero__sub {
	max-width: 56ch;
	margin: 20px 0 0;
	font-size: clamp(1rem, 1.5vw, 1.1875rem);
	color: var(--lvc-soft);
}

.lvc-hero__actions,
.lvc-hero__cta {
	display: flex;
	flex-wrap: wrap;
	gap: 14px;
	margin: clamp(26px, 3vw, 38px) 0 0;
}

.lvc-hero__price { font-size: clamp(1.25rem, 2.4vw, 1.75rem); color: var(--lvc-text); }
.lvc-hero__status { margin-top: 8px; }

/* A hero with no photograph is a deliberate state, not a broken one: no image
   is better than the wrong image (LESSONS_LEARNED #2). It gets its own quiet
   treatment instead of an empty black band. */
.lvc-hero--plain {
	min-height: 0;
	padding-block: clamp(56px, 8vw, 108px) 0;
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-hero--plain::after { content: none; }
.lvc-hero--plain .lvc-hero__inner { padding-bottom: clamp(44px, 6vw, 80px); }

/* ── Cards ─────────────────────────────────────────────────────────────── */

.lvc-card,
.lvc-tcard {
	display: flex;
	flex-direction: column;
	height: 100%;
	background: var(--lvc-card);
	border: 1px solid var(--lvc-border);
	border-radius: var(--lvc-radius);
	overflow: hidden;
	color: inherit;
	text-decoration: none;
	transition: border-color 260ms ease;
}

/* …except inside .lvc-grid--3, which is flex, not grid. A flex container's
   height is indefinite, so the 100% above cannot resolve — and because the
   computed cross size is then not `auto`, align-self:stretch switches off and
   every card sizes to its own text. Two-line and three-line cards in the same
   row end at different heights. Handing height back to `auto` restores
   stretch, which is what equalises them.

   Class-qualified on purpose: `.lvc-grid--3 > *` ties with the rule above at
   (0,1,0) and loses on source order, which is how the first attempt at this
   shipped a declaration that did nothing. (0,2,0) wins wherever it sits. */
.lvc-grid--3 > .lvc-card,
.lvc-grid--3 > .lvc-tcard {
	height: auto;
}

.lvc-card:hover,
.lvc-tcard:hover { border-color: var(--lvc-border-strong); }

.lvc-card__img,
.lvc-tcard__img {
	display: block;
	aspect-ratio: 4 / 3;
	overflow: hidden;
	background: var(--lvc-bg-alt);
}

.lvc-card__img img,
.lvc-tcard__img img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 900ms cubic-bezier(0.2, 0.6, 0.2, 1);
}

/* Slow and small. A fast zoom reads as an e-commerce tile. */
.lvc-card:hover .lvc-card__img img,
.lvc-tcard:hover .lvc-tcard__img img { transform: scale(1.035); }

.lvc-card__body,
.lvc-tcard__body {
	display: flex;
	flex-direction: column;
	flex: 1;
	padding: 22px 22px 0;
}

.lvc-card__loc,
.lvc-tcard__parent {
	font-family: var(--lvc-font-body);
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-muted);
}

.lvc-card__name,
.lvc-tcard__name {
	font-family: var(--lvc-font-display);
	font-size: 1.25rem;
	line-height: 1.25;
	color: var(--lvc-text);
	margin-top: 8px;
}

.lvc-card__meta,
.lvc-tcard__count {
	font-family: var(--lvc-font-body);
	font-variant-numeric: tabular-nums lining-nums;
	font-size: 0.875rem;
	color: var(--lvc-muted);
	margin-top: 10px;
}

.lvc-card__note,
.lvc-tcard__note {
	font-size: 0.9375rem;
	color: var(--lvc-soft);
	margin-top: 10px;
}

.lvc-tcard__count { margin-top: auto; padding-top: 14px; }

.lvc-card__foot {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 14px;
	padding: 18px 22px 22px;
	margin-top: auto;
}

.lvc-card__status {
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-status-available);
}

/* Sold gets NO visual penalty beyond the word itself — no strikethrough, no
   dimmed photograph, no "unavailable" wash. A closed sale is evidence that this
   business transacts. Only the status line changes colour. */
.lvc-card--closed .lvc-card__status { color: var(--lvc-status-sold); }

/* Imageless cards must read as edited, not as a failed image request — and the
   hard case is a grid row that MIXES them, where an unstyled text card looks
   like a photograph that failed to load next to two that didn't.

   So it becomes a deliberate variant instead: a quieter surface, the text
   centred in the space a photograph would have filled, and the name set larger
   because it is now carrying the card alone. No placeholder graphic, no grey
   box, no "image coming soon" — we do not guess a hero (LESSONS_LEARNED #2). */
.lvc-card--imageless,
.lvc-tcard--imageless { background: var(--lvc-bg-alt); }

.lvc-card--imageless .lvc-card__body,
.lvc-tcard--imageless .lvc-tcard__body {
	justify-content: center;
	padding: clamp(30px, 4vw, 46px) 26px;
}

.lvc-card--imageless .lvc-card__name,
.lvc-tcard--imageless .lvc-tcard__name {
	font-size: clamp(1.375rem, 2.2vw, 1.625rem);
}

.lvc-tcard--imageless .lvc-tcard__note { font-size: 1rem; }

.lvc-tcard--imageless .lvc-tcard__count {
	margin-top: 22px;
	padding-top: 0;
}

/* ── Filter bar ────────────────────────────────────────────────────────── */

/* The destination-page copy sits INSIDE a section container that already pads
   horizontally, so it takes no .lvc-container class and only needs its own
   vertical separation from the heading above and the grid below. */
.lvc-filter--inline { margin-bottom: 36px; }
.lvc-filter--inline .lvc-filter__inner { padding-block: 18px 0; }

.lvc-filter__inner {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
	gap: 18px;
	align-items: end;
	padding-block: 26px;
}

.lvc-filter__group { display: flex; flex-direction: column; gap: 8px; }

.lvc-filter__select,
.lvc-form input,
.lvc-form select,
.lvc-form textarea {
	width: 100%;
	padding: 12px 14px;
	background: var(--lvc-card);
	border: 1px solid var(--lvc-border-strong);
	border-radius: var(--lvc-radius);
	color: var(--lvc-text);
	font-family: var(--lvc-font-body);
	font-size: 0.9375rem;
}

.lvc-filter__select,
.lvc-form select {
	appearance: none;
	padding-right: 38px;
	background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%238A8A84' stroke-width='1.2'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 14px center;
	background-size: 11px;
}

.lvc-filter__select:focus,
.lvc-form input:focus,
.lvc-form select:focus,
.lvc-form textarea:focus {
	outline: none;
	border-color: var(--lvc-accent);
}

.lvc-filter__submit { padding: 12px 26px; }

.lvc-filter__clear {
	font-size: 0.8125rem;
	color: var(--lvc-muted);
	text-decoration: none;
	align-self: center;
}

.lvc-filter__clear:hover { color: var(--lvc-text); }

/* ── Specifications ────────────────────────────────────────────────────── */

.lvc-spec { margin: 0; }

.lvc-spec__row {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	gap: 24px;
	padding: 14px 0;
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-spec__key {
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-muted);
}

.lvc-spec__value { color: var(--lvc-text); text-align: right; }

.lvc-verified { font-size: 0.875rem; color: var(--lvc-muted); margin-top: 16px; }

/* ── Tables ────────────────────────────────────────────────────────────── */

.lvc-table {
	width: 100%;
	border-collapse: collapse;
	font-variant-numeric: tabular-nums lining-nums;
	font-size: 0.9375rem;
}

/* Hello Elementor's reset.css owns a bare <table>: a full 1px grey grid, zebra
   striping on odd rows and a hover fill — none of it using a brand token, none
   of it part of a design whose own rule is "no dividers, no shadows". The rule
   below used to override only the padding, and set padding-left to 0, so every
   first-column value sat hard against a border we never asked for. Reset the
   inherited chrome explicitly rather than live beside it. */
.lvc-table th,
.lvc-table td {
	padding: 15px 22px 15px 0;
	border: 0;
	border-bottom: 1px solid var(--lvc-border);
	background: none;
	text-align: left;
	vertical-align: baseline;
}

.lvc-table tbody tr:nth-child(odd) > td,
.lvc-table tbody tr:nth-child(odd) > th,
.lvc-table tbody tr:hover > td,
.lvc-table tbody tr:hover > th { background: none; }

.lvc-table th {
	color: var(--lvc-muted);
	font-weight: 400;
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
}

/* Areas and prices are compared DOWN a column, not read across a row, so they
   are right-aligned against the tabular figures set above — the digits line up
   by place value and a longer number reads as a bigger one at a glance.
   Specificity is deliberate: a bare .lvc-table__num would lose to the
   `.lvc-table td` rule above and silently stay left-aligned. */
.lvc-table .lvc-table__num { text-align: right; }

/* Last column ends flush with the table edge rather than floating 22px short. */
.lvc-table tr > *:last-child { padding-right: 0; }

/* Unavailable types stay readable. They are a real part of the mix — the reason
   the remaining types are worth asking about — not disabled UI. */
.lvc-table__row--gone > td,
.lvc-table__row--gone > th { color: var(--lvc-soft); }

/* ── Gallery ───────────────────────────────────────────────────────────── */

/* auto-FIT, not auto-fill. auto-fill reserves every column the container is
   wide enough to hold and stretches them all via 1fr, filled or not — so a
   gallery of two photographs rendered two tiles and several empty grid cells
   beside them. auto-fit collapses the empty tracks to zero instead, and the
   1fr redistributes their width across the images that actually exist.

   The two behave identically once there are enough images to fill a row, so
   the large galleries are untouched. Below that the tiles now scale with the
   count — three images become a full-width triptych rather than three small
   tiles marooned beside dead space. That is a real visual change on the many
   pages holding exactly three photographs, and a deliberate one: they were
   already rendering the empty tracks, just less obviously than Stella's two.

   Shared by the property, development and taxonomy galleries. */
.lvc-gallery {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
	gap: 12px;
}

.lvc-gallery img {
	width: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
	border-radius: var(--lvc-radius);
}

/* Floor plans are line drawings on white. Cropping them loses the plan, so they
   are contained on their own surface rather than covered like photography. */
.lvc-gallery--plans img {
	aspect-ratio: 4 / 3;
	object-fit: contain;
	background: var(--lvc-bg-alt);
	padding: 12px;
}

/* ── Documents ─────────────────────────────────────────────────────────── */

.lvc-docs { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }

.lvc-doc {
	display: flex;
	align-items: center;
	gap: 14px;
	padding: 16px 18px;
	border: 1px solid var(--lvc-border);
	border-radius: var(--lvc-radius);
	color: var(--lvc-text);
	text-decoration: none;
	transition: border-color 220ms ease;
}

.lvc-doc:hover { border-color: var(--lvc-accent); }
.lvc-doc::before { content: '↓'; color: var(--lvc-accent); }

/* ── FAQ ───────────────────────────────────────────────────────────────── */

.lvc-faq { margin: 0; }
.lvc-faq__item { padding: 24px 0; border-bottom: 1px solid var(--lvc-border); }

.lvc-faq__q {
	font-family: var(--lvc-font-display);
	font-size: 1.125rem;
	color: var(--lvc-text);
	margin: 0;
}

.lvc-faq__a { margin: 10px 0 0; color: var(--lvc-soft); max-width: 72ch; }

/* ── Forms ─────────────────────────────────────────────────────────────── */

/* The FORM owns the rhythm between its rows. Without this every label after
   the first sits hard against the field above it: `.lvc-form__row`'s gap only
   separates the two columns INSIDE a row, never one row from the next, and
   nothing else in this file gave the rows a margin. Hidden inputs and the
   honeypot are display:none / absolutely positioned, so neither becomes a
   flex item and neither leaves a phantom gap. */
.lvc-form { display: flex; flex-direction: column; gap: 22px; }

.lvc-form__row { display: grid; gap: 18px; grid-template-columns: 1fr; }
.lvc-form__group { display: flex; flex-direction: column; gap: 9px; }

.lvc-form label {
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-muted);
}

.lvc-optional { text-transform: none; letter-spacing: 0; }
.lvc-form textarea { min-height: 130px; resize: vertical; }

/* Sized by its own label. A flex column stretches its children by default, so
   without this the button would span the form's full width on desktop — the
   mobile rule that deliberately sets width:100% still wins where it applies. */
.lvc-form__submit { align-self: flex-start; margin-top: 2px; }

.lvc-form__note {
	margin: 0;
	font-size: 0.8125rem;
	color: var(--lvc-muted);
	max-width: 60ch;
}

/* The consent line is a sentence, not a field name, so it must not inherit the
   uppercase micro-label treatment above — set for one- and two-word labels, it
   turns this into a wall of capitals. The flex belongs on the LABEL too: that
   is what actually wraps the checkbox and the text, so gap on the parent div
   (its only child being this label) did nothing at all. */
.lvc-form__consent label {
	display: flex;
	gap: 11px;
	align-items: flex-start;
	max-width: 60ch;
	font-size: 0.8125rem;
	line-height: 1.55;
	text-transform: none;
	letter-spacing: 0;
	color: var(--lvc-soft);
	cursor: pointer;
}

/* accent-color keeps the control native — real keyboard focus, real screen
   reader semantics — while letting it carry the brand instead of system blue. */
.lvc-form__consent input {
	width: 16px;
	height: 16px;
	flex: none;
	margin-top: 2px;
	accent-color: var(--lvc-accent);
	cursor: pointer;
}

/* ── Enquiry section over a photograph ─────────────────────────────────────
   A reusable modifier, not a one-off: add `lvc-enquiry-scene` plus the img and
   overlay to any section that wraps an enquiry form.

   The image is an <img>, not a CSS background, for three reasons — it can be
   lazy-loaded and served responsively, it never trips the `url()` parsing
   problem that filenames containing parentheses cause (this one is literally
   "… (22).jpg"), and it matches how every other hero on this site is built.

   The form sits on its own near-opaque panel. A photograph directly behind
   input fields is the classic way to make a form unreadable; darkening the
   whole image enough to fix that would leave it a grey texture doing nothing.
   Panel for the fields, gradient for the type, image still legible on the
   right where nothing sits on top of it. */

.lvc-enquiry-scene { position: relative; overflow: hidden; background: var(--lvc-bg); }

.lvc-enquiry-scene__img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.lvc-enquiry-scene__overlay {
	position: absolute;
	inset: 0;
	background:
		linear-gradient(90deg, rgba(9, 11, 14, 0.95) 0%, rgba(9, 11, 14, 0.88) 46%, rgba(9, 11, 14, 0.55) 100%),
		linear-gradient(180deg, rgba(9, 11, 14, 0.55), rgba(9, 11, 14, 0.15) 42%, rgba(9, 11, 14, 0.72));
}

.lvc-enquiry-scene__inner { position: relative; z-index: 1; }

.lvc-enquiry-scene .lvc-form {
	max-width: 760px;
	margin-top: 34px;
	padding: clamp(22px, 2.6vw, 34px);
	border: 1px solid var(--lvc-border);
	border-radius: var(--lvc-radius);
	background: rgba(9, 11, 14, 0.82);
	backdrop-filter: blur(10px);
}

/* Fields need to read as raised ON the panel, not cut into it — the panel is
   already close to --lvc-card, so the default field fill would vanish. */
.lvc-enquiry-scene .lvc-form input,
.lvc-enquiry-scene .lvc-form select,
.lvc-enquiry-scene .lvc-form textarea {
	background: rgba(255, 255, 255, 0.045);
	border-color: var(--lvc-border-strong);
}

/* Below the two-column form layout the content spans the full width, so the
   left-weighted gradient above would leave the heading and intro sitting over
   the LIGHTEST part of the photograph — the one place the desktop composition
   deliberately lets the building show through. There is no empty right side to
   preserve at this size, so go uniform and darker. */
@media (max-width: 900px) {
	.lvc-enquiry-scene__overlay {
		background: linear-gradient(180deg, rgba(9, 11, 14, 0.9), rgba(9, 11, 14, 0.84) 45%, rgba(9, 11, 14, 0.94));
	}
}

@media (max-width: 520px) {
	/* 5% container padding plus 22px of panel was spending roughly a quarter of
	   a 375px screen on gutters before a field began. Also drops the blur: a
	   backdrop-filter over a full-bleed photograph is the expensive kind of
	   compositing on a phone, and at this opacity it buys almost nothing. */
	.lvc-enquiry-scene .lvc-form {
		margin-top: 26px;
		padding: 18px 15px;
		background: rgba(9, 11, 14, 0.9);
		backdrop-filter: none;
	}
}

/* ── Floating WhatsApp ─────────────────────────────────────────────────────
   Rendered once from wp_footer — see inc/conversion/whatsapp-float.php.

   The green is WhatsApp's own and is deliberately exempt from the site
   palette: at 52px the colour IS the affordance, and repainting it in brand
   tones would leave a green-shaped mystery button. */

.lvc-wa {
	position: fixed;
	/* Above the mobile action bars (80), below the sticky header (100) and the
	   mobile nav (110) so an open menu covers it, and far below the lightbox. */
	z-index: 90;
	right: clamp(14px, 2.4vw, 26px);
	bottom: clamp(14px, 2.4vw, 26px);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 52px;
	height: 52px;
	border-radius: 50%;
	background: #25D366;
	box-shadow: 0 6px 20px rgba(0, 0, 0, 0.38);
	transition: transform 0.18s ease, box-shadow 0.18s ease;
}

.lvc-wa svg { width: 27px; height: 27px; fill: #fff; }

.lvc-wa:hover,
.lvc-wa:focus-visible {
	transform: translateY(-2px);
	box-shadow: 0 10px 26px rgba(0, 0, 0, 0.46);
}

.lvc-wa:focus-visible { outline: 2px solid var(--lvc-accent); outline-offset: 3px; }

/* Clear the fixed 64px action bars, each at its OWN breakpoint rather than one
   blanket lift — otherwise the button floats 64px off the floor on every page
   that has no bar under it. */
@media (max-width: 760px) {
	.single-property .lvc-wa { bottom: calc(64px + 14px); }
}

@media (max-width: 780px) {
	.tax-development .lvc-wa { bottom: calc(64px + 14px); }
}

@media (prefers-reduced-motion: reduce) {
	.lvc-wa { transition: none; }
	.lvc-wa:hover,
	.lvc-wa:focus-visible { transform: none; }
}

/* ── Reveal on scroll ──────────────────────────────────────────────────────
   The hidden state lives behind `.lvc-js` — a class an inline <head> script
   adds ONLY when IntersectionObserver exists and reduced motion has not been
   requested. If either is false, or the script is stripped by an optimiser,
   or theme.js never loads, nothing is ever hidden and the page reads exactly
   as it does today.

   That gate is the entire safety story. Content that starts at opacity 0 and
   waits on JavaScript to appear is one failed request from a blank page, and
   a sister site in this portfolio has already shipped that bug once. */

.lvc-js .lvc-reveal {
	opacity: 0;
	transform: translateY(16px);
	transition:
		opacity 620ms cubic-bezier(0.22, 0.61, 0.36, 1),
		transform 620ms cubic-bezier(0.22, 0.61, 0.36, 1);
}

.lvc-js .lvc-reveal.is-in { opacity: 1; transform: none; }

/* Belt and braces: the head script already declines to add `.lvc-js` under
   reduced motion, so this only matters if the preference changes mid-session. */
@media (prefers-reduced-motion: reduce) {
	.lvc-js .lvc-reveal {
		opacity: 1;
		transform: none;
		transition: none;
	}
}

/* ── Blocks and lists ──────────────────────────────────────────────────── */

.lvc-cta-block {
	padding: clamp(32px, 5vw, 60px);
	background: var(--lvc-bg-alt);
	border: 1px solid var(--lvc-border-strong);
	border-radius: var(--lvc-radius);
	text-align: center;
}

.lvc-list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: 10px;
}

.lvc-list--inline {
	display: flex;
	flex-wrap: wrap;
	gap: 10px 28px;
}

.lvc-listitem {
	padding: 22px 0;
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-archive__head { padding-block: clamp(40px, 5vw, 72px) 0; }

/* ── Footer ────────────────────────────────────────────────────────────── */

.lvc-footer {
	position: relative;
	overflow: hidden;
	background: var(--lvc-bg);
	border-top: 1px solid var(--lvc-border);
	font-size: 0.9375rem;
}

.lvc-footer__background {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center 54%;
	transform: scale(1.02);
}

.lvc-footer__overlay {
	position: absolute;
	inset: 0;
	background:
		linear-gradient(90deg, rgba(9, 11, 14, 0.97) 0%, rgba(9, 11, 14, 0.88) 48%, rgba(9, 11, 14, 0.7) 100%),
		linear-gradient(0deg, rgba(9, 11, 14, 0.98) 0%, rgba(9, 11, 14, 0.42) 72%);
}

.lvc-footer__content {
	position: relative;
	z-index: 1;
	padding-block: clamp(72px, 10vw, 136px) 34px;
}

.lvc-footer__lead {
	display: flex;
	justify-content: space-between;
	align-items: end;
	gap: clamp(40px, 8vw, 120px);
	padding-bottom: clamp(52px, 7vw, 82px);
	border-bottom: 1px solid rgba(243, 240, 232, 0.24);
}

.lvc-footer__lead h2 {
	max-width: 14ch;
	margin: 10px 0 0;
	font-family: var(--lvc-font-display);
	font-size: clamp(2.7rem, 6vw, 6.5rem);
	font-weight: 400;
	line-height: 0.95;
	letter-spacing: -0.04em;
	color: var(--lvc-text);
}

.lvc-footer__lead > div > p:last-child {
	max-width: 58ch;
	margin: 24px 0 0;
	font-size: clamp(1rem, 1.4vw, 1.18rem);
	line-height: 1.65;
	color: rgba(243, 240, 232, 0.78);
}

.lvc-footer__lead .lvc-btn { flex: 0 0 auto; }

.lvc-footer__inner {
	display: grid;
	grid-template-columns: 1fr;
	gap: clamp(34px, 4vw, 64px);
	padding-block: clamp(48px, 6vw, 72px);
}

.lvc-footer__title {
	font-family: var(--lvc-font-body);
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-accent);
	margin: 0 0 20px;
}

.lvc-footer__list { list-style: none; margin: 0; padding: 0; display: grid; gap: 12px; }
.lvc-footer__list a {
	display: inline-block;
	color: rgba(243, 240, 232, 0.76);
	line-height: 1.45;
	text-decoration: none;
	transition: color 180ms ease, transform 180ms ease;
}
.lvc-footer__list a:hover { color: var(--lvc-text); }
.lvc-footer__list a:hover { transform: translateX(3px); }

.lvc-footer__col--contact .lvc-footer__list a { overflow-wrap: anywhere; }

.lvc-footer__legal {
	padding-top: 28px;
	border-top: 1px solid rgba(243, 240, 232, 0.18);
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: end;
	gap: 18px 44px;
	font-size: 0.75rem;
	color: rgba(243, 240, 232, 0.54);
}

.lvc-footer__disclaimer { max-width: 82ch; margin: 0; }
.lvc-footer__copy { flex: 0 0 auto; margin: 0; }

.lvc-footer__legal-links {
	display: flex;
	flex-wrap: wrap;
	gap: 10px 24px;
	margin-top: 16px;
}

.lvc-footer__legal-links a {
	color: rgba(243, 240, 232, 0.7);
	text-decoration: none;
}

.lvc-footer__legal-links a:hover { color: var(--lvc-text); }

.lvc-term-index__group-link {
	flex: 0 0 auto;
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-accent);
	text-decoration: none;
}

/* ── Responsive ────────────────────────────────────────────────────────── */

/* The catalogue now carries the complete core navigation as well as the
   advisor CTA. Collapse before that content can exceed the viewport on common
   1280px and 1366px laptop screens; 1380px is the measured content breakpoint,
   not a device-class guess. */
@media (max-width: 1380px) {
	.lvc-editorial-split { grid-template-columns: 1fr; }

	.lvc-header__toggle { display: block; }

	/* Full-screen panel sitting UNDER the sticky header rather than measured
	   from it — an `inset: 72px` would silently break the moment the header
	   grew a line. `display` is driven by aria-expanded via a class on <html>,
	   so the a11y tree is the source of truth and CSS cannot disagree with the
	   screen reader. */
	.lvc-nav {
		position: fixed;
		inset: 0;
		z-index: 90;
		display: none;
		padding: 96px var(--lvc-px) 40px;
		background: var(--lvc-bg);
		overflow-y: auto;
	}

	.lvc-nav-open .lvc-nav { display: block; }
	.lvc-nav-open { overflow: hidden; }

	.lvc-nav__list { flex-direction: column; gap: 4px; }

	.lvc-nav__list a {
		display: block;
		padding: 15px 0;
		font-size: 1rem;
		border-bottom: 1px solid var(--lvc-border);
	}

	.lvc-header__cta { padding: 10px 14px; font-size: 0.6875rem; }
	.lvc-spec__row { gap: 16px; }
}

/* On narrow phones the brand, advisor CTA and menu control cannot all share
   one line. Keep the menu reachable, then surface the advisor CTA inside the
   open navigation panel. Long form-submit labels must wrap inside the viewport. */
@media (max-width: 520px) {
	.lvc-header__inner { gap: 10px; }
	.lvc-header__brand { font-size: 1rem; }
	.lvc-header__cta { display: none; }
	.lvc-header__toggle {
		flex: 0 0 44px;
		margin-left: auto;
	}

	.lvc-nav-open .lvc-nav { padding-bottom: 112px; }
	.lvc-nav-open .lvc-header__cta {
		position: fixed;
		z-index: 110;
		right: var(--lvc-px);
		bottom: 24px;
		left: var(--lvc-px);
		display: block;
		text-align: center;
	}

	.lvc-form__submit {
		display: block;
		width: 100%;
		max-width: 100%;
		padding-inline: 12px;
		white-space: normal;
		line-height: 1.35;
		text-align: center;
	}

	.lvc-footer__lead {
		display: grid;
		align-items: start;
	}

	.lvc-footer__lead h2 { font-size: clamp(2.6rem, 15vw, 4.25rem); }
	.lvc-footer__lead .lvc-btn { width: 100%; text-align: center; }
	.lvc-footer__legal { display: grid; }
}

/* --3 column counts are flex bases, not tracks — see the centring note at
   .lvc-grid--3. The trailing -0.01px absorbs sub-pixel rounding: grid divides
   exactly, flex does not, and without it a full row can wrap one card early on
   fractional container widths. */
@media (min-width: 640px) {
	.lvc-grid { grid-template-columns: repeat(2, 1fr); }
	.lvc-grid--3 > * {
		flex-basis: calc((100% - var(--lvc-gap)) / 2 - 0.01px);
		max-width: 100%; /* two-up: a lone last card may take the full row. */
	}
	.lvc-form__row { grid-template-columns: 1fr 1fr; }
	.lvc-footer__inner { grid-template-columns: repeat(2, 1fr); }
}

@media (min-width: 1000px) {
	.lvc-grid--3 > * {
		flex-basis: calc((100% - 2 * var(--lvc-gap)) / 3 - 0.01px);
		max-width: calc((100% - var(--lvc-gap)) / 2 - 0.01px); /* cap at 2-up */
	}
	.lvc-footer__inner { grid-template-columns: 0.7fr 0.8fr 0.8fr 1.15fr 1.55fr; }
}

/* Ultra-wide. Now the container is unbounded, three columns on a 2560px display
   would render cards nearly 800px across — a property card blown up to the size
   of a hero. A fourth column keeps the card at a sane size and puts the extra
   width into MORE inventory on screen, which is what a catalogue wants. */
@media (min-width: 1700px) {
	.lvc-grid--3 > * {
		flex-basis: calc((100% - 3 * var(--lvc-gap)) / 4 - 0.01px);
		/* Cap at 2-up, not 3-up. A 3-up cap looks right for a lone leftover but
		   strands a TWO-card remainder at 66% of the row with a third of it
		   empty — the exact hole this fix exists to close. At 2-up a remainder
		   of two fills the line exactly, a remainder of three still fills
		   (33% each never reaches the cap), and only a lone card centres. */
		max-width: calc((100% - var(--lvc-gap)) / 2 - 0.01px);
	}
}

/* And stop the edges hugging the viewport on very large screens — a percentage
   gutter keeps growing, but not fast enough to stay comfortable past ~2000px. */
@media (min-width: 2000px) {
	:root { --lvc-px: 6%; }
}

/* Small phones: the 4:3 crop wastes vertical space when cards are full-width. */
@media (max-width: 480px) {
.lvc-card__img,
	.lvc-tcard__img { aspect-ratio: 3 / 2; }
}


/* ==========================================================================
   Canonical single-property sales template
   ========================================================================== */

.lvc-property-page {
	background: var(--lvc-bg);
	color: var(--lvc-soft);
}

.lvc-property-hero {
	position: relative;
	display: flex;
	align-items: flex-end;
	min-height: var(--lvc-hero-h);
	overflow: hidden;
	background:
		radial-gradient(circle at 82% 18%, rgba(200, 183, 155, 0.14), transparent 30%),
		linear-gradient(135deg, var(--lvc-card), var(--lvc-bg));
}

.lvc-property-hero__image {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.lvc-property-hero__overlay {
	position: absolute;
	inset: 0;
	background:
		linear-gradient(90deg, rgba(9, 11, 14, 0.95) 0%, rgba(9, 11, 14, 0.72) 48%, rgba(9, 11, 14, 0.35) 100%),
		linear-gradient(0deg, rgba(9, 11, 14, 0.88) 0%, transparent 54%);
}

.lvc-property-hero__inner {
	position: relative;
	z-index: 1;
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(310px, 390px);
	align-items: end;
	gap: clamp(40px, 7vw, 110px);
	padding-block: clamp(100px, 14vh, 160px) clamp(58px, 8vh, 92px);
}

.lvc-property-hero__copy { max-width: 820px; }

.lvc-property-crumbs {
	display: flex;
	flex-wrap: wrap;
	gap: 7px 10px;
	margin-bottom: 28px;
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: rgba(243, 240, 232, 0.68);
}

.lvc-property-crumbs a {
	color: inherit;
	text-decoration: none;
}

.lvc-property-crumbs a:hover { color: var(--lvc-text); }

.lvc-property-hero__eyebrow {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0 0 16px;
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-accent);
}

.lvc-property-hero__title {
	max-width: 14ch;
	margin: 0;
	font-family: var(--lvc-font-display);
	font-size: clamp(2.8rem, 6vw, 6.25rem);
	font-weight: 400;
	line-height: 0.98;
	letter-spacing: -0.035em;
	color: var(--lvc-text);
	text-wrap: balance;
}

.lvc-property-hero__position {
	max-width: 60ch;
	margin: 24px 0 0;
	font-size: clamp(1.0625rem, 1.6vw, 1.3125rem);
	line-height: 1.55;
	color: rgba(243, 240, 232, 0.86);
}

.lvc-property-hero__actions,
.lvc-property-location__actions,
.lvc-property-close > .lvc-container > div:last-child {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px;
	margin-top: 30px;
}

.lvc-property-hero__gallery-link {
	padding: 12px 0;
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-text);
	text-decoration: none;
	border-bottom: 1px solid var(--lvc-accent);
}

.lvc-property-summary {
	padding: clamp(26px, 3vw, 38px);
	background: rgba(16, 20, 26, 0.84);
	border: 1px solid rgba(243, 240, 232, 0.18);
	backdrop-filter: blur(18px);
	box-shadow: 0 28px 70px rgba(0, 0, 0, 0.25);
}

.lvc-property-summary__label {
	margin: 0;
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-muted);
}

.lvc-property-summary__price {
	margin: 8px 0 0;
	font-family: var(--lvc-font-display);
	font-size: clamp(1.75rem, 3vw, 2.5rem);
	line-height: 1.1;
	color: var(--lvc-text);
}

.lvc-property-summary__facts {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	margin-top: 28px;
	border-top: 1px solid var(--lvc-border);
}

.lvc-property-summary__facts > div {
	display: grid;
	align-content: start;
	gap: 5px;
	min-height: 92px;
	padding: 18px 16px 16px 0;
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-property-summary__facts > div:nth-child(even) {
	padding-left: 16px;
	border-left: 1px solid var(--lvc-border);
}

.lvc-property-summary__facts strong {
	font-family: var(--lvc-font-display);
	font-size: 1.2rem;
	font-weight: 400;
	line-height: 1.2;
	color: var(--lvc-text);
}

.lvc-property-summary__facts span,
.lvc-property-summary__note {
	font-size: 0.75rem;
	line-height: 1.45;
	color: var(--lvc-muted);
}

.lvc-property-summary__cta {
	display: block;
	margin-top: 26px;
	text-align: center;
}

.lvc-property-summary__note { margin: 14px 0 0; }

.lvc-property-confidence {
	background: var(--lvc-bg-alt);
	border-block: 1px solid var(--lvc-border);
}

.lvc-property-confidence__grid {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
}

.lvc-property-confidence__item {
	display: grid;
	align-content: center;
	gap: 4px;
	min-height: 108px;
	padding: 24px clamp(18px, 3vw, 36px);
	border-right: 1px solid var(--lvc-border);
}

.lvc-property-confidence__item:first-child { padding-left: 0; }
.lvc-property-confidence__item:last-child { border-right: 0; }

.lvc-property-confidence__item strong {
	font-size: 0.875rem;
	font-weight: 500;
	color: var(--lvc-text);
}

.lvc-property-confidence__item span {
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: 0.1em;
	color: var(--lvc-muted);
}

.lvc-property-highlights {
	padding-block: 24px;
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-property-highlights ul {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 10px 28px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.lvc-property-highlights li {
	position: relative;
	padding-left: 15px;
	font-size: 0.8125rem;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	color: var(--lvc-soft);
}

.lvc-property-highlights li::before {
	position: absolute;
	top: 0.72em;
	left: 0;
	width: 4px;
	height: 4px;
	background: var(--lvc-accent);
	border-radius: 50%;
	content: '';
}

.lvc-property-section-head {
	display: flex;
	justify-content: space-between;
	align-items: end;
	gap: 30px;
	margin-bottom: clamp(28px, 4vw, 48px);
}

.lvc-property-section-head > p,
.lvc-property-section-head > a {
	max-width: 48ch;
	margin: 0;
	font-size: 0.875rem;
	color: var(--lvc-muted);
}

.lvc-property-section-head > a {
	color: var(--lvc-accent);
	text-decoration: none;
}

/* Flex, not grid, for the same reason .lvc-grid--3 is: a fixed three-column
   grid keeps its third track reserved on a short final row, and on a dark page
   that empty cell reads as a missing-image tile rather than as space. Five
   photos — every Antilia unit — laid out as three plus a black gap. Twenty-five
   of eighty-seven published listings land on a count that does this.

   justify-content matters here: without it a capped final photo strands hard
   left, which is the same shape as the bug. */
.lvc-property-gallery__lead {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 6px;
}

.lvc-property-gallery figure,
.lvc-property-plans figure {
	margin: 0;
	overflow: hidden;
	background: var(--lvc-card);
}

/* Basis reproduces the three-column track exactly, so a FULL row is identical
   to what grid produced. The cap is two-up, not three-up: a three-up cap looks
   right for a lone leftover but pins a TWO-photo remainder at 66% of the row,
   leaving the gap this change exists to close. Capping at two-up also bounds
   how tall a grown photo gets — these carry aspect-ratio, so width buys
   height, and an uncapped final photo would be a full-width banner. */
.lvc-property-gallery__lead figure {
	flex: 1 1 calc((100% - 12px) / 3);
	max-width: calc((100% - 6px) / 2);
	aspect-ratio: 4 / 3;
}

.lvc-property-gallery img,
.lvc-property-plans img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 500ms ease;
}

.lvc-property-gallery figure:hover img { transform: scale(1.018); }

/* The thumbnail is a <button> so it can be reached by keyboard, but it must
   not look like one. Shared by the property, development and taxonomy
   galleries — the only three places a photograph opens full screen. */
.lvc-gallery-thumb {
	display: block;
	width: 100%;
	padding: 0;
	border: 0;
	background: none;
	cursor: zoom-in;
}

/* Inside a fixed-ratio figure the button must fill it exactly: those images
   are height:100%, which against a shrink-wrapped button resolves to zero.
   The taxonomy gallery has no figure — its images carry their own
   aspect-ratio and size the button instead, so it must NOT be forced. */
figure > .lvc-gallery-thumb { height: 100%; }

/* The figure clips its overflow, so the global +3px focus ring would be cut
   off on all four sides. Draw this one inside the thumbnail instead. */
.lvc-gallery-thumb:focus-visible { outline-offset: -3px; }

.lvc-property-gallery__more { margin-top: 20px; }

.lvc-property-gallery__more > summary {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	padding: 13px 0;
	cursor: pointer;
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-accent);
	border-bottom: 1px solid var(--lvc-border-strong);
}

/* The "view all photos" grid has the same defect for its own remainder — the
   slice is everything past the first six, so a ten-photo listing leaves four
   here. Same fix, its own gap value. */
.lvc-property-gallery__all {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 8px;
	margin-top: 28px;
}

.lvc-property-gallery__all figure {
	flex: 1 1 calc((100% - 16px) / 3);
	max-width: calc((100% - 8px) / 2);
	aspect-ratio: 4 / 3;
}

.lvc-property-story__intro {
	max-width: 900px;
	margin-bottom: clamp(44px, 7vw, 84px);
}

.lvc-property-story__overview {
	margin-top: 24px;
	font-size: clamp(1.0625rem, 1.4vw, 1.25rem);
	line-height: 1.8;
}

.lvc-property-story__panels {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr));
	border-top: 1px solid var(--lvc-border-strong);
}

.lvc-property-story-card {
	position: relative;
	padding: clamp(30px, 4vw, 54px);
	border-right: 1px solid var(--lvc-border);
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-property-story-card:first-child { padding-left: 0; }
.lvc-property-story-card:last-child { border-right: 0; }

.lvc-property-story-card__number {
	display: block;
	margin-bottom: 44px;
	font-family: var(--lvc-font-display);
	font-size: 1.1rem;
	color: var(--lvc-accent);
}

.lvc-property-story-card h3,
.lvc-property-feature-group h3,
.lvc-property-bedrooms h3,
.lvc-property-inclusions h3,
.lvc-property-documents h3 {
	margin: 8px 0 18px;
	font-family: var(--lvc-font-display);
	font-size: 1.45rem;
	font-weight: 400;
	line-height: 1.25;
	color: var(--lvc-text);
}

.lvc-property-story-card .lvc-prose { font-size: 0.9375rem; }

.lvc-property-features__grid,
.lvc-property-inclusions {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 250px), 1fr));
	gap: 12px;
}

.lvc-property-feature-group,
.lvc-property-inclusions > div,
.lvc-property-documents {
	padding: clamp(24px, 3vw, 36px);
	background: var(--lvc-bg-alt);
	border: 1px solid var(--lvc-border);
}

.lvc-property-feature-group ul,
.lvc-property-inclusions ul,
.lvc-property-documents ul,
.lvc-property-enquiry__copy ul {
	margin: 0;
	padding: 0;
	list-style: none;
}

.lvc-property-feature-group li,
.lvc-property-inclusions li,
.lvc-property-documents li,
.lvc-property-enquiry__copy li {
	position: relative;
	padding: 10px 0 10px 18px;
	border-bottom: 1px solid var(--lvc-border);
}

/* The marker is DRAWN, never typed. An em-dash is a full-width glyph that sits
   low in its line box, so it reads as a stray underscore beside the text rather
   than as a bullet — and it relies on the webfont carrying the glyph at all.
   The 4px dot already used by .lvc-property-highlights cannot be mis-rendered.
   (A checkmark would read as an OTA amenity list; wrong register for a catalogue.)

   The offset centres the dot on the FIRST line: the list's padding-top, plus
   half a line box, minus half the dot. Half the line box is derived from the
   leading token rather than hardcoded, so the dots follow if the leading moves. */
.lvc-property-feature-group li::before,
.lvc-property-inclusions li::before,
.lvc-property-documents li::before,
.lvc-property-enquiry__copy li::before {
	position: absolute;
	top: calc(10px + 1em * var(--lvc-leading-body) / 2 - 2px);
	left: 0;
	width: 4px;
	height: 4px;
	background: var(--lvc-accent);
	border-radius: 50%;
	content: '';
}

.lvc-property-bedrooms__grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 270px), 1fr));
	gap: 12px;
	margin-top: 42px;
}

.lvc-property-bedrooms__grid article {
	padding: clamp(26px, 3vw, 38px);
	background: var(--lvc-card);
	border: 1px solid var(--lvc-border);
}

.lvc-property-bedrooms__grid article > span {
	font-size: 0.6875rem;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-accent);
}

.lvc-property-bedrooms__grid p {
	margin: 8px 0 0;
	font-size: 0.875rem;
	color: var(--lvc-muted);
}

.lvc-property-bedrooms__grid strong {
	font-weight: 500;
	color: var(--lvc-soft);
}

.lvc-property-details {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	margin: 0;
	border-top: 1px solid var(--lvc-border-strong);
}

.lvc-property-details > div {
	display: grid;
	grid-template-columns: minmax(120px, 0.8fr) minmax(0, 1.2fr);
	gap: 18px;
	padding: 19px 22px 19px 0;
	border-right: 1px solid var(--lvc-border);
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-property-details > div:nth-child(even) {
	padding-left: 22px;
	border-right: 0;
}

.lvc-property-details dt {
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: 0.09em;
	color: var(--lvc-muted);
}

.lvc-property-details dd {
	margin: 0;
	text-align: right;
	color: var(--lvc-text);
}

.lvc-property-inclusions { margin-top: 40px; }

.lvc-property-location__grid,
.lvc-property-enquiry__grid,
.lvc-property-faq__grid {
	display: grid;
	grid-template-columns: minmax(0, 1.15fr) minmax(300px, 0.85fr);
	gap: clamp(44px, 8vw, 120px);
	align-items: start;
}

.lvc-property-location__address {
	margin-top: 24px;
	padding-top: 20px;
	font-size: 0.875rem;
	color: var(--lvc-text);
	border-top: 1px solid var(--lvc-border);
}

.lvc-property-location__profile {
	padding: clamp(26px, 4vw, 42px);
	background: var(--lvc-card);
	border: 1px solid var(--lvc-border);
}

.lvc-property-location__profile > div {
	display: grid;
	grid-template-columns: 0.7fr 1.3fr;
	gap: 20px;
	padding: 17px 0;
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-property-location__profile > div:last-child { border-bottom: 0; }

.lvc-property-location__profile span {
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	color: var(--lvc-muted);
}

.lvc-property-location__profile strong {
	font-weight: 400;
	text-align: right;
	color: var(--lvc-text);
}

.lvc-property-plans {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr));
	gap: 12px;
	margin-top: 38px;
}

.lvc-property-plans figure { aspect-ratio: 4 / 3; }

.lvc-property-media__links {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	margin-top: 30px;
}

.lvc-property-documents {
	max-width: 720px;
	margin-top: 30px;
}

.lvc-property-faq__grid { grid-template-columns: minmax(220px, 0.7fr) minmax(0, 1.3fr); }

.lvc-property-faq .lvc-faq__item { padding: 0; }

.lvc-property-faq summary {
	padding: 24px 44px 24px 0;
	cursor: pointer;
	list-style: none;
}

.lvc-property-faq summary::-webkit-details-marker { display: none; }

.lvc-property-faq summary::after {
	float: right;
	margin-right: -36px;
	color: var(--lvc-accent);
	content: '+';
}

.lvc-property-faq details[open] summary::after { content: '—'; }

.lvc-property-faq .lvc-faq__a { padding: 0 0 24px; }

.lvc-property-enquiry {
	background:
		radial-gradient(circle at 8% 12%, rgba(200, 183, 155, 0.09), transparent 32%),
		var(--lvc-bg);
}

.lvc-property-enquiry__copy {
	position: sticky;
	top: 118px;
}

.lvc-property-enquiry__copy > p:not(.lvc-eyebrow) {
	max-width: 54ch;
	font-size: 1.0625rem;
	line-height: 1.7;
}

.lvc-property-enquiry__copy ul {
	max-width: 520px;
	margin: 28px 0;
}

.lvc-property-enquiry__form {
	padding: clamp(26px, 4vw, 48px);
	background: var(--lvc-card);
	border: 1px solid var(--lvc-border-strong);
}

.lvc-property-related .lvc-property-section-head { align-items: center; }

.lvc-property-close {
	padding-block: clamp(70px, 11vw, 140px);
	text-align: center;
	background:
		linear-gradient(rgba(9, 11, 14, 0.76), rgba(9, 11, 14, 0.94)),
		radial-gradient(circle at 50% 0%, rgba(200, 183, 155, 0.18), transparent 54%),
		var(--lvc-card);
	border-block: 1px solid var(--lvc-border);
}

.lvc-property-close h2 {
	max-width: 15ch;
	margin: 10px auto 0;
	font-family: var(--lvc-font-display);
	font-size: clamp(2.2rem, 5vw, 4.8rem);
	font-weight: 400;
	line-height: 1;
	color: var(--lvc-text);
}

.lvc-property-close p:not(.lvc-eyebrow) {
	max-width: 62ch;
	margin: 24px auto 0;
}

.lvc-property-close > .lvc-container > div:last-child { justify-content: center; }

.lvc-property-disclaimer {
	padding-block: 24px;
	font-size: 0.75rem;
	line-height: 1.6;
	color: var(--lvc-muted);
}

.lvc-property-sticky { display: none; }

@media (max-width: 980px) {
	.lvc-property-hero__inner {
		grid-template-columns: 1fr;
		align-items: end;
	}

	.lvc-property-hero__overlay {
		background:
			linear-gradient(90deg, rgba(9, 11, 14, 0.93), rgba(9, 11, 14, 0.44)),
			linear-gradient(0deg, rgba(9, 11, 14, 0.96) 0%, rgba(9, 11, 14, 0.24) 72%);
	}

	.lvc-property-summary { max-width: 580px; }
	.lvc-property-confidence__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.lvc-property-confidence__item:nth-child(2) { border-right: 0; }
	.lvc-property-confidence__item:nth-child(-n+2) { border-bottom: 1px solid var(--lvc-border); }
	.lvc-property-confidence__item:nth-child(3) { padding-left: 0; }

	.lvc-property-location__grid,
	.lvc-property-enquiry__grid { grid-template-columns: 1fr; }

	.lvc-property-location__profile { max-width: 620px; }
	.lvc-property-enquiry__copy { position: static; }
}

@media (max-width: 760px) {
	.single-property { padding-bottom: 64px; }

	.lvc-property-hero {
		min-height: 760px;
		align-items: flex-end;
	}

	.lvc-property-hero__inner {
		gap: 34px;
		padding-block: 78px 38px;
	}

	.lvc-property-hero__title { font-size: clamp(2.5rem, 12vw, 4.2rem); }
	.lvc-property-summary { padding: 24px; }
	.lvc-property-summary__facts > div { min-height: 78px; }

	/* Two-up. The cap is lifted to a full row here: at this width a lone
	   trailing photo filling the line is the phone layout, not a banner. */
	.lvc-property-gallery__lead figure {
		flex-basis: calc((100% - 6px) / 2);
		max-width: 100%;
	}

	.lvc-property-gallery__all figure {
		flex-basis: calc((100% - 8px) / 2);
		max-width: 100%;
	}

	.lvc-property-section-head {
		display: grid;
		align-items: start;
	}

	.lvc-property-story__panels { grid-template-columns: 1fr; }
	.lvc-property-story-card,
	.lvc-property-story-card:first-child {
		padding: 34px 0;
		border-right: 0;
	}

	.lvc-property-story-card__number { margin-bottom: 24px; }

	.lvc-property-details { grid-template-columns: 1fr; }
	.lvc-property-details > div,
	.lvc-property-details > div:nth-child(even) {
		padding-inline: 0;
		border-right: 0;
	}

	.lvc-property-faq__grid { grid-template-columns: 1fr; }

	.lvc-property-sticky {
		position: fixed;
		z-index: 80;
		right: 0;
		bottom: 0;
		left: 0;
		display: flex;
		height: 64px;
		background: rgba(9, 11, 14, 0.96);
		border-top: 1px solid var(--lvc-border-strong);
		backdrop-filter: blur(14px);
	}

	.lvc-property-sticky a {
		display: grid;
		flex: 1;
		place-items: center;
		padding: 10px 12px;
		font-size: 0.6875rem;
		text-align: center;
		text-transform: uppercase;
		letter-spacing: 0.07em;
		color: var(--lvc-text);
		text-decoration: none;
	}

	.lvc-property-sticky a:first-child {
		background: var(--lvc-accent);
		color: var(--lvc-bg);
	}
}

@media (max-width: 520px) {
	.lvc-property-hero { min-height: 820px; }
	.lvc-property-crumbs { margin-bottom: 20px; }

	.lvc-property-hero__actions .lvc-btn {
		display: block;
		width: 100%;
		text-align: center;
	}

	.lvc-property-hero__gallery-link { width: max-content; }

	.lvc-property-summary__facts strong { font-size: 1.05rem; }

	.lvc-property-confidence__grid { grid-template-columns: 1fr; }
	.lvc-property-confidence__item,
	.lvc-property-confidence__item:first-child,
	.lvc-property-confidence__item:nth-child(3) {
		min-height: 82px;
		padding-inline: 0;
		border-right: 0;
		border-bottom: 1px solid var(--lvc-border);
	}

	.lvc-property-highlights ul { display: grid; justify-content: start; }
	.lvc-property-gallery__lead,
	.lvc-property-gallery__all { gap: 4px; }

	/* Bases follow the smaller gap, or two-up wraps to one-up. */
	.lvc-property-gallery__lead figure,
	.lvc-property-gallery__all figure { flex-basis: calc((100% - 4px) / 2); }

	.lvc-property-details > div { grid-template-columns: 1fr; gap: 6px; }
	.lvc-property-details dd { text-align: left; }

	.lvc-property-location__profile > div { grid-template-columns: 1fr; gap: 5px; }
	.lvc-property-location__profile strong { text-align: left; }

	.lvc-property-media__links { display: grid; }
	.lvc-property-media__links .lvc-doc { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
	.lvc-property-gallery img { transition: none; }
}

/* ==========================================================================
   Canonical development profile
   ========================================================================== */

.lvc-development {
	background: var(--lvc-bg);
	color: var(--lvc-soft);
}

.lvc-development-hero {
	position: relative;
	display: flex;
	align-items: flex-end;
	min-height: var(--lvc-hero-h);
	overflow: hidden;
	background:
		radial-gradient(circle at 78% 18%, rgba(200, 183, 155, 0.16), transparent 30%),
		linear-gradient(135deg, var(--lvc-card), var(--lvc-bg));
}

.lvc-development-hero__image {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
}

.lvc-development-hero__overlay {
	position: absolute;
	inset: 0;
	background:
		linear-gradient(90deg, rgba(9, 11, 14, 0.93) 0%, rgba(9, 11, 14, 0.64) 48%, rgba(9, 11, 14, 0.26) 100%),
		linear-gradient(0deg, rgba(9, 11, 14, 0.94) 0%, rgba(9, 11, 14, 0.1) 62%);
}

.lvc-development-hero__inner {
	position: relative;
	z-index: 1;
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(300px, 390px);
	align-items: end;
	gap: clamp(44px, 8vw, 130px);
	padding-block: clamp(128px, 17vh, 190px) clamp(52px, 8vh, 86px);
}

.lvc-development-hero__copy { max-width: 900px; }

.lvc-development-crumbs {
	display: flex;
	flex-wrap: wrap;
	gap: 7px 10px;
	margin-bottom: 30px;
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: rgba(243, 240, 232, 0.66);
}

.lvc-development-crumbs a {
	color: inherit;
	text-decoration: none;
}

.lvc-development-crumbs a:hover { color: var(--lvc-text); }

.lvc-development-hero__eyebrow {
	margin: 0 0 15px;
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-accent);
}

.lvc-development-hero__title {
	max-width: 13ch;
	margin: 0;
	font-family: var(--lvc-font-display);
	font-size: clamp(3.25rem, 7vw, 7.4rem);
	font-weight: 400;
	line-height: 0.92;
	letter-spacing: -0.045em;
	color: var(--lvc-text);
	text-wrap: balance;
}

.lvc-development-hero__position {
	max-width: 62ch;
	margin: 26px 0 0;
	font-size: clamp(1.0625rem, 1.55vw, 1.32rem);
	line-height: 1.55;
	color: rgba(243, 240, 232, 0.86);
}

.lvc-development-hero__actions {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	margin-top: 34px;
}

.lvc-development-hero__summary {
	padding: clamp(24px, 3vw, 34px);
	background: rgba(16, 20, 26, 0.78);
	border: 1px solid rgba(243, 240, 232, 0.18);
	box-shadow: 0 26px 70px rgba(0, 0, 0, 0.24);
	backdrop-filter: blur(18px);
}

.lvc-development-hero__summary > p {
	margin: 0 0 8px;
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-accent);
}

.lvc-development-hero__summary > div {
	display: grid;
	grid-template-columns: minmax(90px, 0.7fr) minmax(0, 1.3fr);
	align-items: baseline;
	gap: 18px;
	padding: 17px 0;
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-development-hero__summary > div:last-child { border-bottom: 0; }

.lvc-development-hero__summary strong {
	font-family: var(--lvc-font-display);
	font-size: 1.28rem;
	font-weight: 400;
	line-height: 1.15;
	color: var(--lvc-text);
}

.lvc-development-hero__summary span {
	font-size: 0.72rem;
	line-height: 1.45;
	text-align: right;
	text-transform: uppercase;
	letter-spacing: 0.07em;
	color: var(--lvc-muted);
}

.lvc-development-nav {
	position: sticky;
	top: 72px;
	z-index: 50;
	background: rgba(9, 11, 14, 0.92);
	border-bottom: 1px solid var(--lvc-border);
	backdrop-filter: blur(16px);
}

.lvc-development-nav .lvc-container {
	display: flex;
	gap: clamp(24px, 4vw, 54px);
	overflow-x: auto;
	scrollbar-width: none;
}

.lvc-development-nav .lvc-container::-webkit-scrollbar { display: none; }

.lvc-development-nav a {
	flex: 0 0 auto;
	padding: 18px 0 16px;
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-muted);
	text-decoration: none;
	border-bottom: 1px solid transparent;
}

.lvc-development-nav a:hover {
	color: var(--lvc-text);
	border-color: var(--lvc-accent);
}

.lvc-development-story__grid {
	display: grid;
	grid-template-columns: minmax(250px, 0.7fr) minmax(0, 1.7fr);
	gap: clamp(54px, 10vw, 170px);
	align-items: start;
}

.lvc-development-story__intro {
	position: sticky;
	top: 156px;
}

.lvc-development-story__intro h2,
.lvc-development-section-head h2,
.lvc-development-rentals h2,
.lvc-development-faq h2,
.lvc-development-enquiry h2 {
	margin: 8px 0 0;
	font-family: var(--lvc-font-display);
	font-size: clamp(2.15rem, 4.2vw, 4.6rem);
	font-weight: 400;
	line-height: 1.02;
	letter-spacing: -0.03em;
	color: var(--lvc-text);
	text-wrap: balance;
}

.lvc-development-story__intro > p:last-child {
	max-width: 35ch;
	margin-top: 24px;
	font-size: 0.9rem;
	color: var(--lvc-muted);
}

.lvc-development-story__content {
	max-width: none;
	font-size: clamp(1rem, 1.15vw, 1.125rem);
	line-height: 1.8;
}

.lvc-development-story__content > * { max-width: 72ch; }

.lvc-development-story__content > p:first-child {
	margin-top: 0;
	font-family: var(--lvc-font-display);
	font-size: clamp(1.35rem, 2vw, 1.85rem);
	line-height: 1.55;
	color: var(--lvc-text);
}

.lvc-development-story__content h2,
.lvc-development-story__content h3 {
	max-width: 28ch;
	margin: clamp(52px, 7vw, 88px) 0 22px;
	padding-top: clamp(28px, 4vw, 44px);
	font-size: clamp(1.65rem, 2.7vw, 2.65rem);
	line-height: 1.16;
	border-top: 1px solid var(--lvc-border-strong);
}

.lvc-development-story__content strong { color: var(--lvc-text); }

.lvc-development-section-head {
	display: flex;
	justify-content: space-between;
	align-items: end;
	gap: 44px;
	margin-bottom: clamp(38px, 6vw, 68px);
}

.lvc-development-section-head > p {
	max-width: 42ch;
	margin: 0;
	font-size: 0.85rem;
	line-height: 1.6;
	color: var(--lvc-muted);
}

.lvc-development-empty {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 44px;
	padding: clamp(30px, 5vw, 58px);
	background: var(--lvc-card);
	border: 1px solid var(--lvc-border-strong);
}

.lvc-development-empty h3 {
	margin: 0;
	font-size: clamp(1.55rem, 2.5vw, 2.25rem);
}

.lvc-development-empty p {
	max-width: 65ch;
	margin: 12px 0 0;
	color: var(--lvc-muted);
}

.lvc-development-facts {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	margin: 0 0 clamp(42px, 7vw, 78px);
	border-top: 1px solid var(--lvc-border-strong);
	border-left: 1px solid var(--lvc-border);
}

.lvc-development-facts > div {
	display: grid;
	align-content: space-between;
	min-height: 150px;
	padding: clamp(22px, 3vw, 36px);
	border-right: 1px solid var(--lvc-border);
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-development-facts dt {
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-muted);
}

.lvc-development-facts dd {
	margin: 28px 0 0;
	font-family: var(--lvc-font-display);
	font-size: clamp(1.25rem, 2vw, 1.75rem);
	line-height: 1.2;
	color: var(--lvc-text);
}

.lvc-development-details__grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 390px), 1fr));
	gap: 14px;
}

.lvc-development-panel {
	padding: clamp(28px, 4vw, 46px);
	background: var(--lvc-bg-alt);
	border: 1px solid var(--lvc-border);
}

.lvc-development-panel h3,
.lvc-development-documents h3 {
	margin: 8px 0 28px;
	font-size: clamp(1.45rem, 2vw, 2rem);
}

.lvc-development-panel ul,
.lvc-development-enquiry__copy ul {
	margin: 0;
	padding: 0;
	list-style: none;
}

.lvc-development-panel li,
.lvc-development-enquiry__copy li {
	position: relative;
	padding: 12px 0 12px 20px;
	border-bottom: 1px solid var(--lvc-border);
}

/* Same drawn dot as the property lists — see the note there. 12px padding-top. */
.lvc-development-panel li::before,
.lvc-development-enquiry__copy li::before {
	position: absolute;
	top: calc(12px + 1em * var(--lvc-leading-body) / 2 - 2px);
	left: 0;
	width: 4px;
	height: 4px;
	background: var(--lvc-accent);
	border-radius: 50%;
	content: '';
}

.lvc-development-table-wrap { overflow-x: auto; }
.lvc-development-table-wrap .lvc-table { min-width: 540px; }

.lvc-development-documents {
	max-width: 880px;
	margin-top: 54px;
}

.lvc-development-documents .lvc-docs {
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
}

/* The mosaic is deliberate — the first figure spans 2x2 and every 6n+4 spans
   two columns — but those spans do not tile evenly against an arbitrary photo
   count, so grid leaves holes mid-mosaic. Measured on Antilia's nineteen: one
   row ran at 50% fill, a 847px block with two empty tracks beside it, which on
   a dark page reads as a missing image rather than as space.
   `dense` backfills those holes with later small figures.

   It does NOT fill a short FINAL row, and that is accepted: one trailing photo
   is normal in an editorial mosaic; a hole in the middle of one is not. The
   trade is that visual order drifts from gallery order where a backfill
   happens — lightbox indices are data attributes, so clicking still opens the
   photo you clicked. */
.lvc-development-gallery__grid {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	grid-auto-rows: clamp(180px, 21vw, 360px);
	grid-auto-flow: dense;
	gap: 7px;
}

.lvc-development-gallery figure {
	margin: 0;
	overflow: hidden;
	background: var(--lvc-card);
}

.lvc-development-gallery figure:first-child {
	grid-column: span 2;
	grid-row: span 2;
}

.lvc-development-gallery figure:nth-child(6n + 4) { grid-column: span 2; }

.lvc-development-gallery img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 500ms ease;
}

.lvc-development-gallery figure:hover img { transform: scale(1.018); }

.lvc-development-rentals {
	padding-block: clamp(70px, 10vw, 128px);
	background:
		radial-gradient(circle at 10% 10%, rgba(200, 183, 155, 0.11), transparent 34%),
		var(--lvc-card);
	border-block: 1px solid var(--lvc-border);
}

.lvc-development-rentals__grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(300px, 0.75fr);
	gap: clamp(52px, 10vw, 160px);
	align-items: center;
}

.lvc-development-rentals h2 { max-width: 15ch; }

.lvc-development-rentals__grid > div:last-child > p {
	margin: 0 0 28px;
	font-size: 1.05rem;
	line-height: 1.7;
}

.lvc-development-faq__grid {
	display: grid;
	grid-template-columns: minmax(240px, 0.7fr) minmax(0, 1.3fr);
	gap: clamp(54px, 9vw, 140px);
	align-items: start;
}

.lvc-development-faq header {
	position: sticky;
	top: 156px;
}

.lvc-development-faq header > p:last-child {
	margin-top: 22px;
	color: var(--lvc-muted);
}

.lvc-development-faq summary {
	position: relative;
	padding: 25px 42px 25px 0;
	cursor: pointer;
	list-style: none;
}

.lvc-development-faq summary::-webkit-details-marker { display: none; }

.lvc-development-faq summary::after {
	position: absolute;
	top: 25px;
	right: 4px;
	color: var(--lvc-accent);
	content: '+';
}

.lvc-development-faq details[open] summary::after { content: '—'; }
.lvc-development-faq .lvc-faq__item { padding: 0; }
.lvc-development-faq .lvc-faq__a { padding-bottom: 26px; }

.lvc-development-enquiry__grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(340px, 0.9fr);
	gap: clamp(54px, 9vw, 140px);
	align-items: start;
}

.lvc-development-enquiry__copy {
	position: sticky;
	top: 156px;
}

.lvc-development-enquiry__copy > p:not(.lvc-eyebrow) {
	max-width: 58ch;
	margin-top: 26px;
	font-size: 1.05rem;
	line-height: 1.75;
}

.lvc-development-enquiry__copy ul {
	max-width: 560px;
	margin-top: 28px;
}

.lvc-development-enquiry__form {
	padding: clamp(26px, 4vw, 48px);
	background: var(--lvc-card);
	border: 1px solid var(--lvc-border-strong);
}

.lvc-development-sticky { display: none; }

@media (max-width: 1080px) {
	.lvc-development-nav { top: 70px; }

	.lvc-development-hero__inner {
		grid-template-columns: 1fr;
		gap: 38px;
	}

	.lvc-development-hero__summary {
		display: grid;
		grid-template-columns: repeat(2, minmax(0, 1fr));
		max-width: 720px;
	}

	.lvc-development-hero__summary > p { grid-column: 1 / -1; }
	.lvc-development-hero__summary > div:nth-of-type(odd) { padding-right: 22px; }
	.lvc-development-hero__summary > div:nth-of-type(even) { padding-left: 22px; border-left: 1px solid var(--lvc-border); }

	.lvc-development-story__grid { grid-template-columns: minmax(220px, 0.65fr) minmax(0, 1.35fr); gap: 60px; }
	.lvc-development-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.lvc-development-gallery__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

@media (max-width: 780px) {
	.tax-development { padding-bottom: 64px; }

	.lvc-development-hero { min-height: 780px; }

	.lvc-development-hero__overlay {
		background:
			linear-gradient(90deg, rgba(9, 11, 14, 0.86), rgba(9, 11, 14, 0.28)),
			linear-gradient(0deg, rgba(9, 11, 14, 0.98) 0%, rgba(9, 11, 14, 0.28) 75%);
	}

	.lvc-development-hero__inner { padding-block: 104px 38px; }
	.lvc-development-hero__title { font-size: clamp(3rem, 14vw, 5.5rem); }

	.lvc-development-story__grid,
	.lvc-development-rentals__grid,
	.lvc-development-faq__grid,
	.lvc-development-enquiry__grid {
		grid-template-columns: 1fr;
		gap: 42px;
	}

	.lvc-development-story__intro,
	.lvc-development-faq header,
	.lvc-development-enquiry__copy { position: static; }

	.lvc-development-story__intro > p:last-child { max-width: 52ch; }

	.lvc-development-section-head {
		display: grid;
		align-items: start;
		gap: 22px;
	}

	.lvc-development-empty {
		display: grid;
		align-items: start;
	}

	.lvc-development-empty .lvc-btn { width: max-content; }

	.lvc-development-gallery__grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		grid-auto-rows: clamp(160px, 42vw, 300px);
	}

	.lvc-development-gallery figure:nth-child(6n + 4) { grid-column: auto; }

	.lvc-development-sticky {
		position: fixed;
		z-index: 80;
		right: 0;
		bottom: 0;
		left: 0;
		display: flex;
		height: 64px;
		background: rgba(9, 11, 14, 0.96);
		border-top: 1px solid var(--lvc-border-strong);
		backdrop-filter: blur(14px);
	}

	.lvc-development-sticky a {
		display: grid;
		flex: 1;
		place-items: center;
		font-size: 0.6875rem;
		text-transform: uppercase;
		letter-spacing: 0.08em;
		color: var(--lvc-text);
		text-decoration: none;
	}

	.lvc-development-sticky a:first-child { background: var(--lvc-accent); color: var(--lvc-bg); }
}

@media (max-width: 540px) {
	.lvc-development-nav { top: 64px; }
	.lvc-development-hero { min-height: 850px; }
	.lvc-development-crumbs { margin-bottom: 22px; }

	.lvc-development-hero__actions { display: grid; }
	.lvc-development-hero__actions .lvc-btn { width: 100%; text-align: center; }

	.lvc-development-hero__summary { grid-template-columns: 1fr; }
	.lvc-development-hero__summary > div:nth-of-type(odd),
	.lvc-development-hero__summary > div:nth-of-type(even) {
		padding-inline: 0;
		border-left: 0;
	}

	.lvc-development-story__content h2,
	.lvc-development-story__content h3 { margin-top: 46px; }

	.lvc-development-facts { grid-template-columns: 1fr; }
	.lvc-development-facts > div { min-height: 118px; }

	.lvc-development-gallery__grid { gap: 4px; }
	.lvc-development-gallery figure:first-child { grid-column: 1 / -1; grid-row: auto; }

	.lvc-development-enquiry__form { padding: 24px 18px; }
}

@media (prefers-reduced-motion: reduce) {
	.lvc-development-gallery img { transition: none; }
}

/* ==========================================================================
   Core advisory pages
   ========================================================================== */

.lvc-core-page { background: var(--lvc-bg); color: var(--lvc-soft); }

.lvc-core-hero {
	position: relative;
	display: flex;
	align-items: flex-end;
	min-height: clamp(520px, 70vh, 760px);
	overflow: hidden;
	background: var(--lvc-card);
}

.lvc-core-hero--plain {
	background:
		radial-gradient(circle at 78% 16%, rgba(200, 183, 155, 0.17), transparent 31%),
		linear-gradient(135deg, #171C23 0%, var(--lvc-bg) 58%, #0B1016 100%);
}

/* The decorative bordered panel that used to sit here (inset 14% 6% 12% 62%,
   1px border, faint diagonal wash) has been removed deliberately. It existed
   to give the empty right side of an imageless hero some structure, and it
   failed at that: read cold, an empty bordered rectangle in a hero reads as a
   picture that did not load. The site's own owner flagged it as one. An
   imageless hero now falls back to the gradient above, on its own, which is
   quieter and never looks broken. */

.lvc-core-hero__image {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.lvc-core-hero__overlay {
	position: absolute;
	inset: 0;
	background:
		linear-gradient(90deg, rgba(9, 11, 14, 0.94), rgba(9, 11, 14, 0.48) 70%, rgba(9, 11, 14, 0.2)),
		linear-gradient(0deg, rgba(9, 11, 14, 0.9), transparent 62%);
}

.lvc-core-hero--plain .lvc-core-hero__overlay { background: linear-gradient(0deg, rgba(9, 11, 14, 0.5), transparent); }

.lvc-core-hero__inner {
	position: relative;
	z-index: 1;
	padding-block: clamp(120px, 17vh, 180px) clamp(58px, 8vw, 96px);
}

.lvc-core-hero h1 {
	max-width: 15ch;
	margin: 14px 0 0;
	font-family: var(--lvc-font-display);
	font-size: clamp(3rem, 7vw, 7rem);
	font-weight: 400;
	line-height: 0.96;
	letter-spacing: -0.045em;
	color: var(--lvc-text);
	text-wrap: balance;
}

.lvc-core-hero__intro {
	max-width: 66ch;
	margin: 26px 0 0;
	font-size: clamp(1.05rem, 1.5vw, 1.3rem);
	line-height: 1.62;
	color: rgba(243, 240, 232, 0.8);
}

.lvc-core-section-head {
	display: flex;
	justify-content: space-between;
	align-items: end;
	gap: 48px;
	margin-bottom: clamp(38px, 6vw, 68px);
}

.lvc-core-section-head h2,
.lvc-core-editorial h2,
.lvc-core-contact h2,
.lvc-core-form h2,
.lvc-core-seller__grid h2 {
	max-width: 17ch;
	margin: 8px 0 0;
	font-family: var(--lvc-font-display);
	font-size: clamp(2.1rem, 4.2vw, 4.7rem);
	font-weight: 400;
	line-height: 1.02;
	letter-spacing: -0.035em;
	color: var(--lvc-text);
	text-wrap: balance;
}

.lvc-core-section-head > p {
	max-width: 48ch;
	margin: 0;
	font-size: 0.9rem;
	line-height: 1.65;
	color: var(--lvc-muted);
}

.lvc-core-contact__grid,
.lvc-core-seller__grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(340px, 0.88fr);
	gap: clamp(58px, 10vw, 150px);
	align-items: start;
}

.lvc-core-contact__details {
	position: sticky;
	top: 116px;
}

.lvc-core-contact__details > p:not(.lvc-eyebrow) {
	max-width: 58ch;
	margin-top: 26px;
	font-size: 1.05rem;
	line-height: 1.75;
}

.lvc-core-contact__details dl {
	max-width: 680px;
	margin: 38px 0 0;
	border-top: 1px solid var(--lvc-border-strong);
}

.lvc-core-contact__details dl > div {
	display: grid;
	grid-template-columns: 120px minmax(0, 1fr);
	gap: 24px;
	padding: 18px 0;
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-core-contact__details dt {
	font-size: 0.6875rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	color: var(--lvc-muted);
}

.lvc-core-contact__details dd { margin: 0; text-align: right; color: var(--lvc-text); }
.lvc-core-contact__details dd a { color: inherit; text-decoration: none; overflow-wrap: anywhere; }

.lvc-core-note {
	max-width: 64ch;
	margin-top: 28px;
	padding-left: 18px;
	font-size: 0.78rem !important;
	line-height: 1.65 !important;
	color: var(--lvc-muted);
	border-left: 1px solid var(--lvc-accent);
}

.lvc-core-form {
	padding: clamp(28px, 4vw, 50px);
	background: var(--lvc-card);
	border: 1px solid var(--lvc-border-strong);
}

.lvc-core-form h2 {
	max-width: 18ch;
	margin-bottom: 34px;
	font-size: clamp(1.8rem, 3vw, 3.15rem);
}

.lvc-core-cards {
	display: grid;
	border-top: 1px solid var(--lvc-border-strong);
	border-left: 1px solid var(--lvc-border);
}

.lvc-core-cards--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }

.lvc-core-cards article {
	min-height: 300px;
	padding: clamp(28px, 4vw, 50px);
	border-right: 1px solid var(--lvc-border);
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-core-cards article > span,
.lvc-core-steps article > span {
	display: block;
	margin-bottom: clamp(46px, 7vw, 86px);
	font-family: var(--lvc-font-display);
	font-size: 1.05rem;
	color: var(--lvc-accent);
}

.lvc-core-cards h3,
.lvc-core-steps h3,
.lvc-core-checklists h3 {
	margin: 0 0 16px;
	font-family: var(--lvc-font-display);
	font-size: clamp(1.35rem, 2vw, 1.85rem);
	font-weight: 400;
	color: var(--lvc-text);
}

.lvc-core-cards p { margin: 0; font-size: 0.92rem; line-height: 1.7; color: var(--lvc-muted); }

.lvc-core-editorial {
	display: grid;
	grid-template-columns: minmax(260px, 0.78fr) minmax(0, 1.35fr);
	gap: clamp(58px, 10vw, 160px);
	align-items: start;
}

.lvc-core-editorial > header { position: sticky; top: 116px; }
.lvc-core-editorial .lvc-prose { max-width: 70ch; font-size: clamp(1rem, 1.2vw, 1.15rem); line-height: 1.85; }
.lvc-core-editorial .lvc-prose > p:first-child { margin-top: 0; font-family: var(--lvc-font-display); font-size: clamp(1.3rem, 2vw, 1.75rem); line-height: 1.55; color: var(--lvc-text); }

.lvc-core-steps {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	border-top: 1px solid var(--lvc-border-strong);
	border-left: 1px solid var(--lvc-border);
}

.lvc-core-steps article {
	display: grid;
	grid-template-columns: 72px minmax(0, 1fr);
	gap: 26px;
	min-height: 240px;
	padding: clamp(28px, 4vw, 48px);
	border-right: 1px solid var(--lvc-border);
	border-bottom: 1px solid var(--lvc-border);
}

.lvc-core-steps article > span { margin: 3px 0 0; }
.lvc-core-steps p { margin: 0; line-height: 1.72; color: var(--lvc-muted); }

.lvc-core-checklists {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 14px;
}

.lvc-core-checklists > div {
	padding: clamp(28px, 4vw, 44px);
	background: var(--lvc-bg-alt);
	border: 1px solid var(--lvc-border);
}

.lvc-core-checklists ul,
.lvc-core-list {
	margin: 0;
	padding: 0;
	list-style: none;
}

.lvc-core-checklists li,
.lvc-core-list li {
	position: relative;
	padding: 11px 0 11px 20px;
	border-bottom: 1px solid var(--lvc-border);
}

/* Same drawn dot as the property lists — see the note there. 11px padding-top. */
.lvc-core-checklists li::before,
.lvc-core-list li::before {
	position: absolute;
	top: calc(11px + 1em * var(--lvc-leading-body) / 2 - 2px);
	left: 0;
	width: 4px;
	height: 4px;
	background: var(--lvc-accent);
	border-radius: 50%;
	content: '';
}

.lvc-core-seller__grid > div:first-child > h2 { margin-bottom: 34px; }
.lvc-core-seller__grid .lvc-core-note { margin-top: 30px; }

.lvc-core-cta {
	padding-block: clamp(86px, 12vw, 160px);
	text-align: center;
	background:
		radial-gradient(circle at 50% 0%, rgba(200, 183, 155, 0.16), transparent 50%),
		var(--lvc-card);
	border-block: 1px solid var(--lvc-border);
}

.lvc-core-cta h2 {
	max-width: 15ch;
	margin: 10px auto 32px;
	font-family: var(--lvc-font-display);
	font-size: clamp(2.4rem, 5.5vw, 5.6rem);
	font-weight: 400;
	line-height: 1;
	letter-spacing: -0.04em;
	color: var(--lvc-text);
}

.lvc-core-legal { max-width: var(--lvc-max); }
.lvc-core-legal > * { max-width: 76ch; margin-inline: auto; }
.lvc-core-legal__updated { padding-bottom: 24px; font-size: 0.75rem; text-transform: uppercase; letter-spacing: var(--lvc-tracking-ui); color: var(--lvc-muted); border-bottom: 1px solid var(--lvc-border); }
.lvc-core-legal h2 { margin-top: 2.4em; font-size: clamp(1.55rem, 2.6vw, 2.35rem); }
/* Was `padding-top: 0`, which collapsed the block against the section above so
   it read as that section overflowing rather than as its own. That was fine
   while the editor block held a stray closing paragraph; it is wrong now that
   it carries a Spanish-language summary on the two supply-side pages, which is
   a section in its own right.
   Separation is by alternating luminance per the rule further up — NOT by a
   divider. On all three pages that render this block the preceding section is
   `--alt`, so leaving this one on the base ground alternates correctly. */
.lvc-core-editor-content { padding-top: var(--lvc-sec-pad); }

@media (max-width: 900px) {
	.lvc-core-contact__grid,
	.lvc-core-seller__grid,
	.lvc-core-editorial { grid-template-columns: 1fr; gap: 48px; }

	.lvc-core-contact__details,
	.lvc-core-editorial > header { position: static; }
	.lvc-core-cards--3,
	.lvc-core-checklists { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.lvc-core-cards article:last-child,
	.lvc-core-checklists > div:last-child { grid-column: 1 / -1; }
}

@media (max-width: 640px) {
	.lvc-core-hero { min-height: 620px; }
	.lvc-core-hero h1 { font-size: clamp(2.8rem, 15vw, 5rem); }

	.lvc-core-section-head { display: grid; align-items: start; gap: 22px; }
	.lvc-core-cards--3,
	.lvc-core-steps,
	.lvc-core-checklists { grid-template-columns: 1fr; }
	.lvc-core-cards article:last-child,
	.lvc-core-checklists > div:last-child { grid-column: auto; }

	.lvc-core-cards article { min-height: 240px; }
	.lvc-core-cards article > span { margin-bottom: 38px; }
	.lvc-core-steps article { grid-template-columns: 48px minmax(0, 1fr); min-height: 0; }

	.lvc-core-contact__details dl > div { grid-template-columns: 1fr; gap: 5px; }
	.lvc-core-contact__details dd { text-align: left; }
	.lvc-core-form { padding: 24px 18px; }
}

/* ==========================================================================
   Gallery lightbox

   The photograph is the product here, so the overlay gives it the whole
   viewport and puts nothing else in the frame: a counter, a close, two
   chevrons, all at the edges. No captions, no thumbnail strip, no chrome
   competing with the image.

   Every control is DRAWN with borders and pseudo-elements rather than set as
   a character. A typed ✕ or → depends on the webfont carrying that glyph and
   falls back to a system face mid-interface when it does not — the same
   failure the list bullets had.
   ========================================================================== */

/* Scroll lock. Hiding the scrollbar shortens the viewport and reflows the
   page behind the overlay; its width is handed back as padding so nothing
   underneath moves. --lvc-scrollbar is measured and set by theme.js. */
.lvc-lightbox-open {
	overflow: hidden;
	padding-right: var(--lvc-scrollbar, 0px);
}

.lvc-lightbox {
	position: fixed;
	inset: 0;
	z-index: 300;              /* above the sticky header (100) and nav (110) */
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	grid-template-rows: auto minmax(0, 1fr);
	align-items: center;
	gap: clamp(10px, 2vw, 26px);
	padding: clamp(12px, 2vw, 26px);
	background: color-mix(in srgb, var(--lvc-bg) 97%, transparent);
}

/* `display: grid` above outranks the UA rule for [hidden], so the attribute
   stops working unless it is restated here. */
.lvc-lightbox[hidden] { display: none; }

.lvc-lightbox__bar {
	grid-column: 1 / -1;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
}

.lvc-lightbox__count {
	margin: 0;
	color: var(--lvc-accent);
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: var(--lvc-tracking-ui);
	font-variant-numeric: tabular-nums;   /* 9/47 → 10/47 must not shift */
}

.lvc-lightbox__close,
.lvc-lightbox__nav {
	position: relative;
	width: 46px;
	height: 46px;
	padding: 0;
	border: 1px solid var(--lvc-border-strong);
	background: none;
	cursor: pointer;
	transition: border-color 200ms ease, background-color 200ms ease;
}

.lvc-lightbox__close:hover,
.lvc-lightbox__nav:hover {
	border-color: var(--lvc-accent);
	background: color-mix(in srgb, var(--lvc-accent) 8%, transparent);
}

/* Close: two hairlines crossed. */
.lvc-lightbox__close::before,
.lvc-lightbox__close::after {
	position: absolute;
	top: 50%;
	left: 50%;
	width: 15px;
	height: 1px;
	background: var(--lvc-text);
	content: '';
}

.lvc-lightbox__close::before { transform: translate(-50%, -50%) rotate(45deg); }
.lvc-lightbox__close::after  { transform: translate(-50%, -50%) rotate(-45deg); }

/* Chevrons: a square with two adjacent borders, rotated. */
.lvc-lightbox__nav::before {
	position: absolute;
	top: 50%;
	left: 50%;
	width: 10px;
	height: 10px;
	border-top: 1px solid var(--lvc-text);
	border-right: 1px solid var(--lvc-text);
	content: '';
}

.lvc-lightbox__nav--next::before { transform: translate(-70%, -50%) rotate(45deg); }
.lvc-lightbox__nav--prev::before { transform: translate(-30%, -50%) rotate(-135deg); }

.lvc-lightbox.is-single .lvc-lightbox__nav { display: none; }

.lvc-lightbox__stage {
	position: relative;
	grid-column: 2;
	display: flex;
	align-items: center;
	justify-content: center;
	min-width: 0;
	min-height: 0;
	height: 100%;
	margin: 0;
}

/* contain, never cover: a floorplan or a portrait must not be cropped. */
.lvc-lightbox__stage img {
	max-width: 100%;
	max-height: 100%;
	width: auto;
	height: auto;
	object-fit: contain;
	transition: opacity 220ms ease;
}

.lvc-lightbox.is-loading .lvc-lightbox__stage img { opacity: 0; }

/* These are full-size photographs off R2 — on a phone connection the wait is
   long enough that a blank frame reads as a broken gallery. */
.lvc-lightbox.is-loading .lvc-lightbox__stage::after {
	position: absolute;
	width: 22px;
	height: 22px;
	border: 1px solid var(--lvc-border-strong);
	border-top-color: var(--lvc-accent);
	border-radius: 50%;
	animation: lvc-lightbox-wait 700ms linear infinite;
	content: '';
}

@keyframes lvc-lightbox-wait {
	to { transform: rotate(360deg); }
}

/* Below this the side chevrons eat the width the photograph needs, so they
   move to their own row under it — still reachable, and now under a thumb
   rather than at the far edges. Swipe works either way. */
@media (max-width: 700px) {
	.lvc-lightbox {
		grid-template-columns: minmax(0, 1fr);
		grid-template-rows: auto minmax(0, 1fr) auto;
	}

	.lvc-lightbox__stage { grid-column: 1; grid-row: 2; }

	.lvc-lightbox__nav {
		grid-column: 1;
		grid-row: 3;
	}

	.lvc-lightbox__nav--prev { justify-self: start; }
	.lvc-lightbox__nav--next { justify-self: end; }
}
