/**
 * Village Fleet Sales — front end.
 *
 * Self-contained: no dependency on the design-system bundle from the handoff.
 * Everything is scoped under .vfs-fs and prefixed vfs-, so it cannot leak into
 * the theme and the theme cannot easily leak in.
 *
 * Tokens are the light-theme values from the handoff.
 */

.vfs-fs {
	--vfs-bg: #f6f7f9;
	--vfs-surface: #ffffff;
	--vfs-text: #1c2b3a;
	--vfs-divider: rgba(28, 43, 58, 0.14);

	--vfs-accent: #17457c;
	--vfs-accent-dark: #123a69;
	--vfs-accent-price: #0f3d75;
	--vfs-accent-100: #173f70;
	--vfs-accent-200: #d8e3f2;
	--vfs-accent-300: #0f3d75;
	--vfs-warn-300: #7a4a12;
	--vfs-warn-800: #f6ecdc;
	--vfs-accent-800: #e3ebf6;
	--vfs-accent-900: #f0f5fb;

	--vfs-red: #b01c2e;
	--vfs-red-bg: #fbe9ec;

	--vfs-muted: #6b7f95;
	--vfs-muted-2: #8194a9;
	--vfs-neutral-100: #2a3646;
	--vfs-neutral-400: #8194a9;
	--vfs-neutral-700: #c3cedc;
	--vfs-neutral-800: #e7ecf2;
	--vfs-neutral-900: #eef1f5;

	--vfs-shadow-sm: 0 0 0 1px rgba(28, 43, 58, 0.10), 0 1px 3px rgba(28, 43, 58, 0.06);
	--vfs-shadow-md: 0 0 0 1px rgba(28, 43, 58, 0.12), 0 6px 18px rgba(28, 43, 58, 0.10);

	--vfs-radius: 8px;
	--vfs-radius-sm: 5px;

	--vfs-gutter: 32px;

	box-sizing: border-box;
	background: var(--vfs-bg);
	color: var(--vfs-text);
	font-family: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
	font-size: 14px;
	line-height: 1.5;
}

.vfs-fs *,
.vfs-fs *::before,
.vfs-fs *::after {
	box-sizing: inherit;
}

.vfs-fs img {
	max-width: 100%;
}

.vfs-wrap {
	max-width: 1200px;
	margin: 0 auto;
	padding: 28px var(--vfs-gutter) 40px;
}

.vfs-fs :focus-visible {
	outline: 2px solid var(--vfs-accent);
	outline-offset: 2px;
}

/* ---------------------------------------------------------------- Typography */

.vfs-fs h1,
.vfs-fs h2,
.vfs-fs h3,
.vfs-fs h4,
.vfs-fs h5 {
	font-weight: 500;
	line-height: 1.12;
	letter-spacing: -0.015em;
	margin: 0 0 6px;
	color: var(--vfs-text);
}

.vfs-fs h1,
.vfs-fs h2 {
	font-size: 28px;
}

.vfs-fs h3 {
	font-size: 22px;
}

.vfs-fs h5 {
	font-size: 16px;
}

.vfs-muted {
	color: var(--vfs-muted);
}

.vfs-kicker {
	font-size: 11px;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--vfs-accent);
}

/* -------------------------------------------------------------------- Header */

.vfs-head {
	display: flex;
	align-items: flex-end;
	gap: 16px;
	margin-bottom: 20px;
	flex-wrap: wrap;
}

.vfs-head p {
	margin: 6px 0 0;
	font-size: 14px;
}

.vfs-count {
	margin-left: auto;
	font-size: 13px;
	color: var(--vfs-muted);
}

.vfs-crumb {
	font-size: 12.5px;
	color: var(--vfs-muted);
	margin-bottom: 16px;
}

.vfs-crumb a {
	color: inherit;
	text-decoration: none;
}

.vfs-crumb a:hover {
	text-decoration: underline;
}

.vfs-crumb span {
	opacity: 0.5;
	margin: 0 4px;
}

/* --------------------------------------------------------------------- Cards */

.vfs-card {
	display: flex;
	flex-direction: column;
	gap: 6px;
	padding: 14px;
	border-radius: var(--vfs-radius);
	background: var(--vfs-surface);
	box-shadow: var(--vfs-shadow-sm);
}

/* ------------------------------------------------------------- Listing cards */

.vfs-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 18px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.vfs-grid > li {
	margin: 0;
}

.vfs-tile {
	display: block;
	text-decoration: none;
	color: inherit;
	height: 100%;
}

.vfs-tile-inner {
	display: flex;
	flex-direction: column;
	height: 100%;
	background: var(--vfs-surface);
	border-radius: var(--vfs-radius);
	box-shadow: var(--vfs-shadow-sm);
	overflow: hidden;
	transition: box-shadow 0.15s ease;
}

.vfs-tile:hover .vfs-tile-inner,
.vfs-tile:focus-visible .vfs-tile-inner {
	box-shadow: var(--vfs-shadow-md);
}

.vfs-photo {
	position: relative;
	height: 170px;
	background: linear-gradient(135deg, #e9edf3, #d5dde7);
	display: grid;
	place-items: center;
	color: #9fb0c4;
	overflow: hidden;
}

.vfs-photo img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.vfs-photo .vfs-tag {
	position: absolute;
	top: 10px;
	left: 10px;
}

/* Division strip between photo and body */
.vfs-strip {
	display: flex;
	align-items: center;
	gap: 8px;
	padding: 9px 14px;
	border-bottom: 1px solid var(--vfs-divider);
	background: rgba(28, 43, 58, 0.03);
}

.vfs-strip img {
	height: 14px;
	width: auto;
	display: block;
}

.vfs-strip-name {
	font-size: 11px;
	font-weight: 500;
	color: var(--vfs-text);
}

.vfs-strip-unit {
	margin-left: auto;
	font-size: 11px;
	color: var(--vfs-muted);
}

.vfs-tile-body {
	display: flex;
	flex-direction: column;
	gap: 6px;
	padding: 14px;
	flex: 1;
}

.vfs-tile-title {
	font-size: 15px;
	font-weight: 600;
	line-height: 1.25;
}

.vfs-tile-meta {
	display: flex;
	gap: 12px;
	flex-wrap: wrap;
	font-size: 12.5px;
	color: var(--vfs-muted);
}

.vfs-tile-price {
	display: flex;
	align-items: baseline;
	margin-top: auto;
	padding-top: 4px;
}

.vfs-tile-price .vfs-price {
	font-size: 15px;
	color: var(--vfs-accent-price);
}

.vfs-tile-price .vfs-listed {
	margin-left: auto;
	font-size: 11px;
	color: var(--vfs-muted);
}

/*
 * A sold listing has no price, so the placeholder is muted rather than rendered
 * in the price colour — an accent-blue em dash reads as a missing value.
 */
.vfs-price--none {
	color: var(--vfs-neutral-400);
	font-weight: 400;
}

/* ---------------------------------------------------------------------- Tags */

.vfs-tag {
	display: inline-flex;
	align-items: center;
	font-size: 11px;
	letter-spacing: 0.02em;
	padding: 3px 10px;
	border-radius: 6px;
	background: var(--vfs-neutral-800);
	color: var(--vfs-neutral-100);
	white-space: nowrap;
}

.vfs-tag--new {
	background: var(--vfs-red-bg);
	color: var(--vfs-red);
}

.vfs-tag--accent {
	background: var(--vfs-accent-800);
	color: var(--vfs-accent-100);
}

.vfs-tag--sold {
	background: var(--vfs-neutral-100);
	color: #fff;
}

/* ------------------------------------------------------------------- Filters */

.vfs-filters {
	display: flex;
	gap: 10px;
	align-items: flex-end;
	flex-wrap: wrap;
	margin-bottom: 24px;
}

.vfs-field {
	display: flex;
	flex-direction: column;
}

.vfs-field > label {
	display: block;
	font-size: 12px;
	margin-bottom: 5px;
	color: rgba(28, 43, 58, 0.7);
}

.vfs-input {
	width: 100%;
	min-height: 36px;
	padding: 6px 10px;
	font: inherit;
	font-size: 14px;
	color: var(--vfs-text);
	background: var(--vfs-surface);
	border: 1px solid var(--vfs-divider);
	border-radius: var(--vfs-radius);
}

.vfs-input:hover {
	border-color: rgba(28, 43, 58, 0.45);
}

textarea.vfs-input {
	min-height: 90px;
	resize: vertical;
}

.vfs-filters .vfs-sort {
	margin-left: auto;
}

.vfs-filter-actions {
	display: flex;
	gap: 8px;
	align-items: flex-end;
}

/* -------------------------------------------------- Quote unit preview */

.vfs-unit-preview {
	margin-top: 10px;
	border: 1px solid var(--vfs-divider);
	border-radius: var(--vfs-radius);
	overflow: hidden;
	background: var(--vfs-surface);
}

.vfs-unit-preview[hidden] {
	display: none;
}

.vfs-unit-preview-strip {
	display: flex;
	align-items: center;
	gap: 8px;
	padding: 8px 12px;
	border-bottom: 1px solid var(--vfs-divider);
	background: rgba(28, 43, 58, 0.03);
	min-height: 30px;
}

.vfs-unit-preview-strip img {
	height: 14px;
	width: auto;
	display: block;
}

.vfs-unit-preview-strip img[hidden] {
	display: none;
}

.vfs-unit-preview-unit {
	margin-left: auto;
	font-size: 11px;
	color: var(--vfs-muted);
}

.vfs-unit-preview-body {
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 10px 12px;
}

.vfs-unit-preview-thumb {
	width: 72px;
	height: 48px;
	flex: none;
	border-radius: var(--vfs-radius-sm);
	overflow: hidden;
	background: linear-gradient(135deg, #e9edf3, #d5dde7);
	display: grid;
	place-items: center;
	color: #9fb0c4;
}

.vfs-unit-preview-thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.vfs-unit-preview-text {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
}

.vfs-unit-preview-title {
	font-weight: 600;
	font-size: 14px;
}

.vfs-unit-preview-meta {
	font-size: 12px;
	color: var(--vfs-muted);
}

.vfs-unit-preview-price {
	margin-left: auto;
	flex: none;
	font-size: 14px;
	color: var(--vfs-accent-price);
}

/* ------------------------------------------------------------------- Buttons */

.vfs-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 6px;
	cursor: pointer;
	text-decoration: none;
	font-family: inherit;
	font-weight: 500;
	font-size: 14px;
	line-height: 1.2;
	min-height: 38px;
	padding: 8px 14px;
	border: 1px solid transparent;
	border-radius: var(--vfs-radius);
	background: transparent;
	color: var(--vfs-text);
}

.vfs-btn svg {
	display: block;
	flex: none;
}

.vfs-btn--primary {
	color: #fff;
	background: var(--vfs-accent);
	border-color: var(--vfs-accent);
}

.vfs-btn--primary:hover {
	background: var(--vfs-accent-dark);
	border-color: var(--vfs-accent-dark);
	color: #fff;
}

.vfs-btn--secondary {
	border-color: var(--vfs-divider);
	background: var(--vfs-surface);
}

.vfs-btn--secondary:hover {
	background: rgba(28, 43, 58, 0.05);
}

.vfs-btn--ghost {
	color: var(--vfs-accent);
	padding-inline: 8px;
}

.vfs-btn--ghost:hover {
	background: rgba(23, 69, 124, 0.1);
}

.vfs-btn--block {
	width: 100%;
	margin-top: 6px;
}

/* -------------------------------------------------------------- Unit gallery */

.vfs-detail {
	display: grid;
	grid-template-columns: 1fr 360px;
	gap: 32px;
	align-items: start;
}

.vfs-detail-main {
	display: flex;
	flex-direction: column;
	gap: 24px;
	min-width: 0;
}

.vfs-fs button.vfs-hero,
.vfs-fs button.vfs-thumb {
	/*
	 * These are image surfaces that happen to be buttons. Themes style `button`
	 * heavily — padding, borders, background, text-transform, min-height — and a
	 * single-class rule loses to `.entry-content button`. Reset hard here.
	 *
	 * Width is deliberately NOT reset here. A `width: auto` at this specificity
	 * beat the frame's `width: 100%` and collapsed the photo to its content width.
	 * Each element sets its own width below instead.
	 */
	-webkit-appearance: none;
	appearance: none;
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	font: inherit;
	line-height: 0;
	letter-spacing: normal;
	text-transform: none;
	text-align: left;
	color: inherit;
	min-height: 0;
	min-width: 0;
	cursor: pointer;
}

/*
 * The main photo is a fixed box. Unit photos arrive at every aspect ratio, and a
 * box that resizes to each one makes the page jump as you step through the
 * gallery, so the frame stays put and the photo is fitted into it.
 *
 * --vfs-hero-h  the fixed height, overridden per breakpoint
 *
 * The photo stretches to the frame unless a gallery variant says otherwise; see
 * the fit options below.
 */
.vfs-fs .vfs-hero {
	--vfs-hero-h: 420px;

	width: 100%;
	height: var(--vfs-hero-h);
	border-radius: var(--vfs-radius);
	overflow: hidden;
	position: relative;
}

/* With a photo, the frame is a button wrapping a single image. */
.vfs-fs button.vfs-hero {
	display: block;
	width: 100%;
	cursor: zoom-in;
}

/*
 * With no photo it is a plain div holding the placeholder, which has to be
 * centred in the frame. `display: block` here previously overrode the grid
 * centring from .vfs-photo and pinned the placeholder to the top.
 */
.vfs-fs div.vfs-hero {
	display: grid;
	place-items: center;
}

/*
 * Centred, scaled to fit, never distorted. `contain` is the default because a
 * coach shot into a wide frame loses its roof and wheels under `cover`, and on a
 * sales listing seeing the whole vehicle matters more than filling the corners.
 */
.vfs-fs .vfs-hero img {
	width: 100%;
	height: 100%;
	object-position: center;
	display: block;
	margin: 0;
}

/*
 * Fit options, applied to the image rather than through a variable, so the
 * default rule above carries no object-fit at all and the photo simply fills the
 * frame.
 */

/* The whole photo, letterboxed against the backdrop. */
.vfs-fs .vfs-gallery--fit .vfs-hero img {
	object-fit: contain;
}

/* Fills the frame and crops the edges, keeping the photo's proportions. */
.vfs-fs .vfs-gallery--fill .vfs-hero img {
	object-fit: cover;
}

.vfs-thumbs {
	display: flex;
	gap: 10px;
	margin: 10px 0 0;
	flex-wrap: wrap;
	padding: 0;
	list-style: none;
}

.vfs-thumbs > li {
	margin: 0;
}

/*
 * Thumbnails past the fifth stay in the markup so the lightbox can still reach
 * them, but are not shown in the strip.
 */
.vfs-thumbs > li.vfs-thumb-more {
	display: none;
}

.vfs-gallery-actions {
	margin: 12px 0 0;
}

.vfs-fs button.vfs-thumb {
	display: block;
	width: 96px;
	height: 64px;
}

.vfs-thumb {
	width: 96px;
	height: 64px;
	border-radius: var(--vfs-radius-sm);
	overflow: hidden;
	padding: 0;
	border: 0;
	background: linear-gradient(135deg, #e9edf3, #d5dde7);
	cursor: pointer;
	display: block;
}

.vfs-thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.vfs-thumb[aria-current="true"] {
	outline: 2px solid var(--vfs-accent);
	outline-offset: 0;
}

.vfs-photo-count {
	position: absolute;
	right: 10px;
	bottom: 10px;
	padding: 12px 10px;
	border-radius: 4px;
	background: rgba(28, 43, 58, 0.3);
	color: #fff;
	font-size: 12px;
}

/* -------------------------------------------------------------- Lightbox */

body.vfs-lb-open {
	overflow: hidden;
}

.vfs-lightbox {
	/*
	 * Appended to <body>, so it sits outside .vfs-fs and inherits none of the
	 * scoped resets. Everything it needs is declared here.
	 */
	position: fixed;
	inset: 0;
	z-index: 100000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 56px 64px;
	background: rgba(16, 24, 33, 0.92);
	box-sizing: border-box;
	font-family: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
	font-size: 14px;
	line-height: 1.5;
}

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

.vfs-lightbox[hidden] {
	display: none;
}

.vfs-lightbox .vfs-lb-stage {
	margin: 0;
	max-width: 100%;
	max-height: 100%;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 12px;
}

.vfs-lightbox .vfs-lb-stage img {
	/*
	 * Beats theme rules such as `figure img { width: 100% }`, which would stretch
	 * the photo and lose its aspect ratio.
	 */
	width: auto;
	height: auto;
	max-width: 100%;
	max-height: calc(100vh - 150px);
	object-fit: contain;
	border-radius: 4px;
	display: block;
	margin: 0;
}

.vfs-lb-stage figcaption {
	color: #e7ecf2;
	font-size: 13px;
	text-align: center;
}

.vfs-lightbox .vfs-lb-close,
.vfs-lightbox .vfs-lb-nav {
	-webkit-appearance: none;
	appearance: none;
	margin: 0;
	padding: 0;
	min-height: 0;
	text-transform: none;
	letter-spacing: normal;
	position: absolute;
	display: flex;
	align-items: center;
	justify-content: center;
	border: 0;
	cursor: pointer;
	background: rgba(255, 255, 255, 0.12);
	color: #fff;
	border-radius: 50%;
	line-height: 1;
	font-family: inherit;
}

.vfs-lightbox .vfs-lb-close:hover,
.vfs-lightbox .vfs-lb-nav:hover {
	background: rgba(255, 255, 255, 0.24);
}

.vfs-lightbox .vfs-lb-close {
	top: 16px;
	right: 16px;
	width: 40px;
	height: 40px;
	font-size: 26px;
}

.vfs-lightbox .vfs-lb-nav {
	top: 50%;
	transform: translateY(-50%);
	width: 46px;
	height: 46px;
	font-size: 30px;
}

.vfs-lb-prev {
	left: 12px;
}

.vfs-lb-next {
	right: 12px;
}

.vfs-lightbox .vfs-lb-nav[hidden] {
	display: none;
}

.vfs-lb-count {
	position: absolute;
	bottom: 18px;
	left: 50%;
	transform: translateX(-50%);
	color: #c3cedc;
	font-size: 12px;
	font-variant-numeric: tabular-nums;
}

.vfs-lightbox :focus-visible {
	outline: 2px solid #fff;
	outline-offset: 2px;
}

/* --------------------------------------------------------------- Recent work */

.vfs-rw {
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.vfs-rw details {
	border-radius: var(--vfs-radius);
	background: var(--vfs-surface);
	box-shadow: var(--vfs-shadow-sm);
}

.vfs-rw summary {
	list-style: none;
	cursor: pointer;
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 12px 14px;
	font-weight: 500;
	font-size: 14px;
}

.vfs-rw summary::-webkit-details-marker {
	display: none;
}

.vfs-rw summary:hover {
	background: rgba(28, 43, 58, 0.05);
}

.vfs-rw .vfs-chev {
	margin-left: auto;
	flex: none;
	transition: transform 0.15s;
	color: var(--vfs-muted);
}

.vfs-rw details[open] .vfs-chev {
	transform: rotate(180deg);
}

.vfs-rw-body {
	padding: 2px 14px 14px;
	font-size: 12.5px;
	line-height: 1.65;
	color: rgba(28, 43, 58, 0.72);
	white-space: pre-line;
	margin: 0;
}

/* Visits inside a year — values from the handoff spec. */

.vfs-rw-sum {
	flex: 1;
	min-width: 0;
	/* Ellipsizes so a long first category cannot push "+N more" off the row. */
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
	font-weight: 400;
	font-size: 12.5px;
	color: rgba(28, 43, 58, 0.65);
}

.vfs-rw-more {
	flex: none;
	font-size: 11px;
	color: var(--vfs-muted);
}

.vfs-rw-log {
	padding: 2px 14px 12px;
	display: flex;
	flex-direction: column;
}

.vfs-rw-visit {
	display: flex;
	flex-direction: column;
	gap: 5px;
	padding: 10px 0;
	border-top: 1px solid var(--vfs-divider);
}

.vfs-rw-visit:first-child {
	border-top: 0;
	padding-top: 4px;
}

.vfs-rw-vhead {
	display: flex;
	align-items: baseline;
	gap: 10px;
	font-size: 11.5px;
	color: var(--vfs-muted);
}

.vfs-rw-date {
	font-weight: 600;
	font-size: 12px;
	color: var(--vfs-text);
	white-space: nowrap;
}

.vfs-rw-cat {
	display: flex;
	gap: 8px;
	align-items: baseline;
	font-size: 12.5px;
	line-height: 1.45;
	color: rgba(28, 43, 58, 0.78);
}

/*
 * PM and CM chips. Same shape, different weight: planned work in the accent
 * colour, corrective work in a warmer neutral so a column of repairs reads as
 * distinct without looking like a warning.
 */
.vfs-rw-tag {
	flex: none;
	font-size: 9.5px;
	font-weight: 600;
	letter-spacing: 0.05em;
	padding: 1px 5px;
	border-radius: 4px;
	/* Signals the hover tip is there. */
	cursor: help;
}

.vfs-rw-tag--pm {
	background: var(--vfs-accent-800);
	color: var(--vfs-accent-300);
}

.vfs-rw-tag--cm {
	background: var(--vfs-warn-800);
	color: var(--vfs-warn-300);
}

.vfs-rw-cost {
	margin-left: 6px;
	font-size: 12px;
	color: var(--vfs-muted);
	font-variant-numeric: tabular-nums;
}

/* -------------------------------------------------------------- Summary card */

.vfs-aside {
	display: flex;
	flex-direction: column;
	gap: 16px;
	position: sticky;
	top: 16px;
}

.vfs-summary {
	padding: 20px;
	gap: 10px;
}

.vfs-summary-head {
	display: flex;
	align-items: flex-start;
	gap: 10px;
	min-height: 15px;
}

/* Division logo leads, status is pushed to the right. */
.vfs-summary-head .vfs-tag {
	margin-left: auto;
}

.vfs-fs h1.vfs-summary-title {
	/*
	 * 3em of the 14px base. Clamped so a theme that changes the inherited font
	 * size cannot make the title absurd in either direction.
	 */
	font-size: clamp( 26px, 3em, 46px );
	margin: 0;
	line-height: 1.05;
	letter-spacing: -0.02em;
}

.vfs-brandchip {
	flex: none;
	display: inline-flex;
	align-items: center;
}

.vfs-brandchip img {
	height: 15px;
	width: auto;
	display: block;
	margin-bottom: 1em;
}

.vfs-summary-price {
	font-size: 20px;
	color: var(--vfs-accent-price);
}

.vfs-hr {
	height: 1px;
	background: var(--vfs-divider);
	margin: 4px 0;
}

.vfs-specs {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 6px 16px;
	font-size: 13.5px;
	margin: 0;
}

.vfs-specs dt {
	color: var(--vfs-muted);
}

.vfs-specs dd {
	margin: 0;
}

.vfs-asof {
	color: var(--vfs-muted);
	font-size: 11.5px;
}

.vfs-cta-pair {
	display: flex;
	gap: 8px;
	margin-top: 2px;
}

.vfs-cta-pair .vfs-btn {
	flex: 1;
	font-size: 13px;
}

.vfs-byline {
	font-size: 12px;
	color: var(--vfs-muted);
}

/* ------------------------------------------------------------ Sales contact */

.vfs-contact-tile {
	padding: 18px 20px;
	gap: 14px;
}

.vfs-contact-tile-head {
	display: flex;
	align-items: flex-start;
	gap: 16px;
	/* Stacks rather than squeezing when the column is too narrow for both. */
	flex-wrap: wrap;
}

/*
 * Squared with the card's own radius rather than a circle. A circle crops a
 * headshot hard at this size, and the softened square sits better next to the
 * other tiles.
 */
.vfs-contact-tile-photo {
	width: 112px;
	height: 128px;
	border-radius: var(--vfs-radius);
	object-fit: cover;
	object-position: center top;
	flex: none;
	display: block;
	background: var(--vfs-neutral-900);
}

/* Initial, when there is no photo — better than an empty panel. */
.vfs-contact-tile-photo--blank {
	display: grid;
	place-items: center;
	background: var(--vfs-accent-900);
	color: var(--vfs-accent);
	font-size: 44px;
	font-weight: 500;
	line-height: 1;
}

.vfs-contact-tile-who {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 3px;
	/*
	 * Wide enough for "Call 123-456-7890" at 13.5px including its icon and
	 * padding. Below this the photo drops to its own row rather than the button
	 * being squeezed or wrapped.
	 */
	min-width: 184px;
	flex: 1 1 184px;
	min-height: 0;
}

.vfs-contact-tile-name {
	font-size: 18px;
	font-weight: 600;
	line-height: 1.2;
	letter-spacing: -0.01em;
}

.vfs-contact-tile-role {
	font-size: 13px;
	color: var(--vfs-muted);
	line-height: 1.3;
}

.vfs-contact-tile-email {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	margin-top: 5px;
	font-size: 13px;
	color: var(--vfs-text);
	text-decoration: none;
	max-width: 100%;
}

.vfs-contact-tile-email span {
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.vfs-contact-tile-email svg {
	flex: none;
	color: var(--vfs-muted);
}

.vfs-contact-tile-email:hover {
	color: var(--vfs-accent);
	text-decoration: underline;
}

.vfs-contact-tile-email:hover svg {
	color: var(--vfs-accent);
}

/* Sits under the details rather than spanning the tile, so it stays tied to the
   person rather than reading as a page-level action. */
.vfs-fs a.vfs-contact-tile-call {
	margin-top: 10px;
	font-size: 13.5px;
	padding-inline: 16px;
	white-space: nowrap;
	max-width: 100%;
}

/* Inline role, used by the shortcode contact block. */
.vfs-rep-role {
	font-size: 11.5px;
	color: var(--vfs-muted);
}

/* ------------------------------------------------------- Vehicle detail */

.vfs-spec-table {
	margin: 0;
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 0 24px;
}

.vfs-spec-row {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	gap: 12px;
	padding: 7px 0;
	/* Holds the row open when the value is blank, so the two columns stay level. */
	min-height: 32px;
	border-bottom: 1px solid var(--vfs-divider);
	font-size: 13.5px;
}

/* Nothing recorded: keep the label readable but do not shout about the gap. */
.vfs-spec-row--empty dt {
	color: var(--vfs-neutral-400);
}

.vfs-spec-row dt {
	color: var(--vfs-muted);
}

.vfs-spec-row dd {
	margin: 0;
	text-align: right;
	font-weight: 500;
}

/* ---------------------------------------------------------------- Amenities */

/*
 * Multi-column rather than a grid, so the list reads down each column and back
 * to the top of the next — the way a printed list reads. A grid would run
 * left-to-right across the columns, which is harder to scan for single words.
 */
.vfs-amenity-cols {
	/*
	 * At most three columns, each at least 200px wide. The browser drops to two
	 * and then one on its own as the space narrows, which tracks the actual
	 * available width rather than guessing at breakpoints.
	 */
	columns: 200px 3;
	column-gap: 28px;
}

.vfs-amenity-cols li {
	/* Stops an amenity being split across a column break. */
	break-inside: avoid;
	page-break-inside: avoid;
}

.vfs-list {
	margin: 0;
	padding-left: 18px;
	font-size: 13.5px;
}

.vfs-list li {
	margin-bottom: 4px;
}

.vfs-block h5 {
	margin: 0 0 10px;
}

/* ------------------------------------------------------------- Contact form */

.vfs-contact {
	display: grid;
	grid-template-columns: 1fr 340px;
	gap: 40px;
	align-items: start;
}

.vfs-form {
	max-width: 620px;
}

.vfs-form-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 16px;
}

.vfs-form-grid .vfs-wide {
	grid-column: 1 / -1;
}

.vfs-seg {
	display: inline-flex;
	flex-wrap: wrap;
	overflow: hidden;
	border: 1px solid var(--vfs-divider);
	border-radius: var(--vfs-radius);
	background: var(--vfs-surface);
}

.vfs-seg-opt {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 7px 12px;
	font-size: 13px;
	cursor: pointer;
}

.vfs-seg-opt + .vfs-seg-opt {
	border-left: 1px solid var(--vfs-divider);
}

.vfs-seg-opt input {
	position: absolute;
	opacity: 0;
	width: 0;
	height: 0;
}

.vfs-seg-opt:has(input:checked),
.vfs-seg-opt.is-checked {
	color: var(--vfs-accent);
	box-shadow: inset 0 0 0 1px var(--vfs-accent);
}

.vfs-seg-opt:has(input:focus-visible) {
	outline: 2px solid var(--vfs-accent);
	outline-offset: -2px;
}

.vfs-form-actions {
	display: flex;
	gap: 12px;
	margin-top: 20px;
	align-items: center;
	flex-wrap: wrap;
}

.vfs-privacy {
	font-size: 12px;
	color: var(--vfs-muted);
}

.vfs-notice {
	padding: 12px 14px;
	border-radius: var(--vfs-radius);
	margin-bottom: 20px;
	font-size: 13.5px;
}

.vfs-notice--ok {
	background: #edfaef;
	color: #0b6b23;
	box-shadow: inset 0 0 0 1px #b8e0c2;
}

.vfs-notice--error {
	background: var(--vfs-red-bg);
	color: var(--vfs-red);
	box-shadow: inset 0 0 0 1px #f0b7b8;
}

.vfs-error {
	display: block;
	margin-top: 4px;
	font-size: 12px;
	color: var(--vfs-red);
}

.vfs-input[aria-invalid="true"] {
	border-color: var(--vfs-red);
}

/* Honeypot: off-screen rather than display:none, which some bots skip. */
.vfs-hp {
	position: absolute !important;
	left: -9999px !important;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

.vfs-side-card p {
	margin: 0;
	font-size: 13px;
	color: rgba(28, 43, 58, 0.8);
}

.vfs-side-card .vfs-tile-title {
	font-size: 17px;
}

/* -------------------------------------------------- Location / company page */

/*
 * Side-reveal hero.
 *
 * The photo is anchored right at 62% width and masked so its left edge fades to
 * nothing, landing on a solid surface the copy sits against. A wash over the top
 * carries that fade across the middle, so text never sits on busy pixels however
 * the photo is cropped.
 */
.vfs-hero-band {
	position: relative;
	background: var(--vfs-surface);
	border-bottom: 1px solid var(--vfs-divider);
	overflow: hidden;
}

.vfs-hero-photo {
	position: absolute;
	top: 0;
	right: 0;
	width: 62%;
	height: 100%;
	object-fit: cover;
	object-position: 60% 58%;
	-webkit-mask-image: linear-gradient(90deg, transparent, black 45%);
	mask-image: linear-gradient(90deg, transparent, black 45%);
}

.vfs-hero-wash {
	position: absolute;
	inset: 0;
	background: linear-gradient(
		90deg,
		var(--vfs-surface) 38%,
		rgba(255, 255, 255, 0.55) 58%,
		rgba(255, 255, 255, 0.12)
	);
}

/* Above the photo and the wash. */
.vfs-hero-inner {
	position: relative;
	padding-top: 26px;
	padding-bottom: 24px;
}

.vfs-hero-grid {
	display: grid;
	grid-template-columns: 520px 1fr;
	gap: 32px;
	align-items: start;
	min-height: 250px;
}

.vfs-hero-copy {
	display: flex;
	flex-direction: column;
	gap: 14px;
}

.vfs-hero-logo img {
	height: 22px;
	width: auto;
	display: block;
}

.vfs-fs .vfs-hero-copy h1 {
	margin: 0;
	font-size: 24px;
}

.vfs-hero-about p {
	margin: 0 0 12px;
	font-size: 14.5px;
	line-height: 1.7;
	color: var(--vfs-text);
	text-wrap: pretty;
}

.vfs-hero-about p:last-child {
	margin-bottom: 0;
}

.vfs-hero-actions {
	display: flex;
	gap: 10px;
	margin-top: 2px;
	flex-wrap: wrap;
}

.vfs-hero-actions .vfs-btn {
	font-size: 13px;
	gap: 8px;
}

/* The full address on a wide screen, one word on a narrow one. */
.vfs-hero-short {
	display: none;
}

/* No photo: the band is a plain surface and the copy can use its full width. */
.vfs-hero-band--plain .vfs-hero-grid {
	grid-template-columns: 1fr;
	min-height: 0;
}

/* Locations, inside the hero band under a rule. */
.vfs-hero-locations {
	border-top: 1px solid var(--vfs-divider);
	padding-top: 18px;
	margin-top: 22px;
}

.vfs-hero-locations .vfs-kicker {
	display: block;
	margin-bottom: 10px;
}

.vfs-locchips {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}

.vfs-locchip {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 6px 13px;
	border: 1px solid var(--vfs-divider);
	border-radius: 999px;
	background: var(--vfs-surface);
	font-size: 12.5px;
	color: var(--vfs-text);
	text-decoration: none;
	white-space: nowrap;
}

.vfs-locchip:hover {
	border-color: var(--vfs-accent);
	color: var(--vfs-accent);
}

.vfs-locchip-count {
	font-size: 11px;
	color: var(--vfs-muted);
	font-variant-numeric: tabular-nums;
}

.vfs-locchip:hover .vfs-locchip-count {
	color: inherit;
}

/* Rule between one location's units and the next. */
.vfs-head--ruled {
	border-top: 1px solid var(--vfs-divider);
	margin-top: 30px;
	padding-top: 22px;
}

.vfs-loc-link {
	font-size: 12.5px;
	text-decoration: none;
	color: var(--vfs-accent);
}

.vfs-loc-link:hover {
	text-decoration: underline;
}

/* --------------------------------------------------------------- Empty state */

.vfs-empty-state {
	padding: 48px 20px;
	text-align: center;
	color: var(--vfs-muted);
	background: var(--vfs-surface);
	border-radius: var(--vfs-radius);
	box-shadow: var(--vfs-shadow-sm);
}

/* --------------------------------------------------------------- Pagination */

.vfs-pagination {
	display: flex;
	gap: 6px;
	justify-content: center;
	margin-top: 28px;
	flex-wrap: wrap;
}

.vfs-pagination .page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 36px;
	height: 36px;
	padding: 0 10px;
	border-radius: var(--vfs-radius);
	background: var(--vfs-surface);
	box-shadow: var(--vfs-shadow-sm);
	text-decoration: none;
	color: var(--vfs-text);
	font-size: 13px;
}

.vfs-pagination .page-numbers.current {
	background: var(--vfs-accent);
	color: #fff;
}

/* ------------------------------------------------------- Mobile CTA bar */

.vfs-sticky-cta {
	display: none;
}

/* ============================================================== Responsive */

@media (max-width: 1024px) {
	/*
	 * Stacked, and reordered.
	 *
	 * Side by side, the summary card sits alongside the photos. Stacked in source
	 * order it lands after the amenities, so the VIN, mileage, seats and location
	 * — the first things a buyer checks — end up below everything else.
	 *
	 * `display: contents` dissolves the two columns so their children become
	 * direct flex items of .vfs-detail and can be ordered individually. Without it
	 * only whole columns could move, and the summary card cannot be separated from
	 * the sales contact below it.
	 */
	/*
	 * Stacked: the photo runs full width and fades downward instead of sideways,
	 * with the copy overlapping its lower edge.
	 */
	.vfs-hero-photo {
		position: static;
		width: 100%;
		height: 190px;
		object-position: 50% 55%;
		-webkit-mask-image: linear-gradient(180deg, black 35%, transparent 80%);
		mask-image: linear-gradient(180deg, black 35%, transparent 80%);
	}

	.vfs-hero-wash {
		display: none;
	}

	.vfs-hero-inner {
		margin-top: -26px;
		padding-top: 0;
	}

	.vfs-hero-grid {
		grid-template-columns: 1fr;
		min-height: 0;
		gap: 20px;
	}

	.vfs-detail {
		display: flex;
		flex-direction: column;
		gap: 18px;
	}

	.vfs-detail-main,
	.vfs-aside {
		display: contents;
	}

	/*
	 * The catch-all comes first on purpose. These selectors carry the same
	 * specificity as the ones below, so whichever is written last wins — putting
	 * the default after the specific rules would silently undo every one of them.
	 */
	.vfs-detail-main > *,
	.vfs-aside > * {
		order: 3;
	}

	/* What a buyer checks first, above the photos. */
	.vfs-summary {
		order: 1;
	}

	.vfs-gallery {
		order: 2;
	}

	/* Order 3 is everything else in source order: detail, work, amenities. */

	.vfs-contact-tile {
		order: 4;
	}

	.vfs-aside > .vfs-card:not(.vfs-contact-tile):not(.vfs-summary) {
		order: 5;
	}

	.vfs-byline {
		order: 99;
	}






	.vfs-aside {
		position: static;
	}

	.vfs-contact {
		grid-template-columns: 1fr;
		gap: 24px;
	}
}

@media (max-width: 782px) {
	.vfs-hero-actions {
		gap: 8px;
	}

	.vfs-hero-actions .vfs-btn {
		flex: 1;
		min-height: 44px;
		justify-content: center;
	}

	/* "Call" and "Directions" rather than a number and a full address. */
	.vfs-hero-full {
		display: none;
	}

	.vfs-hero-short {
		display: inline;
	}

	.vfs-fs {
		--vfs-gutter: 16px;
	}

	.vfs-wrap {
		padding: 20px var(--vfs-gutter) 40px;
	}

	.vfs-fs h1,
	.vfs-fs h2 {
		font-size: 23px;
	}

	.vfs-grid {
		grid-template-columns: 1fr;
	}

	.vfs-photo {
		height: 180px;
	}

	.vfs-fs .vfs-hero {
		--vfs-hero-h: 240px;
		border-radius: 0;
		margin: 0 calc(var(--vfs-gutter) * -1);
		width: auto;
	}

	/* Filters collapse to a horizontally scrolling chip row. */
	.vfs-filters {
		flex-wrap: nowrap;
		overflow-x: auto;
		scrollbar-width: none;
		padding-bottom: 4px;
		margin-left: calc(var(--vfs-gutter) * -1);
		margin-right: calc(var(--vfs-gutter) * -1);
		padding-left: var(--vfs-gutter);
		padding-right: var(--vfs-gutter);
	}

	.vfs-filters::-webkit-scrollbar {
		display: none;
	}

	.vfs-field {
		flex: none;
		width: auto !important;
	}

	.vfs-field > label {
		display: none;
	}

	.vfs-input {
		min-height: 44px;
		border-radius: 20px;
		padding-inline: 14px;
	}

	.vfs-filters .vfs-sort {
		margin-left: 0;
	}

	.vfs-form-grid {
		grid-template-columns: 1fr;
	}

	/* Segmented control becomes a radio list. */
	.vfs-seg {
		display: flex;
		flex-direction: column;
		width: 100%;
	}

	.vfs-seg-opt {
		min-height: 44px;
		padding: 10px 14px;
	}

	.vfs-seg-opt + .vfs-seg-opt {
		border-left: 0;
		border-top: 1px solid var(--vfs-divider);
	}

	.vfs-btn {
		min-height: 44px;
	}

	.vfs-thumb {
		width: 84px;
		height: 56px;
	}

	.vfs-lightbox {
		padding: 56px 12px 64px;
	}

	.vfs-lb-nav {
		width: 42px;
		height: 42px;
		background: rgba(255, 255, 255, 0.18);
	}

	.vfs-lb-prev {
		left: 8px;
	}

	.vfs-lb-next {
		right: 8px;
	}

	.vfs-lb-stage img {
		max-height: calc(100vh - 170px);
	}


	.vfs-spec-table {
		grid-template-columns: 1fr;
	}

	.vfs-contact-tile-photo {
		width: 104px;
		height: 118px;
	}

	.vfs-contact-tile-photo--blank {
		font-size: 38px;
	}

	.vfs-loc-intro h1 {
		font-size: 23px;
	}

	/* Sticky bottom CTA bar on the unit detail page. */
	.vfs-has-sticky-cta {
		padding-bottom: 84px;
	}

	.vfs-sticky-cta {
		display: flex;
		gap: 10px;
		position: fixed;
		left: 0;
		right: 0;
		bottom: 0;
		z-index: 40;
		padding: 10px 16px calc(10px + env(safe-area-inset-bottom));
		background: var(--vfs-surface);
		box-shadow: 0 -1px 0 var(--vfs-divider), 0 -6px 18px rgba(28, 43, 58, 0.08);
	}

	.vfs-sticky-cta .vfs-btn {
		flex: 1;
		min-height: 44px;
	}

	.vfs-aside .vfs-summary {
		padding: 16px;
	}
}

@media (prefers-reduced-motion: reduce) {
	.vfs-fs * {
		transition: none !important;
	}
}
