/**
 * Butterfields Products - front end.
 *
 * One stylesheet, plain CSS, custom properties for the palette. Everything is
 * scoped under `.bfp` so nothing leaks into the theme and nothing the theme
 * sets can reshape the catalogue.
 *
 * Two faces only: Cormorant Garamond for display type, Manrope for everything
 * else. Both are enqueued from Google Fonts by the plugin. To self-host them
 * instead, drop the woff2 files into `assets/fonts/`, uncomment the block
 * below, and remove the `bfp-fonts` stylesheet from the enqueue in
 * class-bfp-frontend.php.
 *
 * @font-face { font-family: 'Cormorant Garamond'; font-style: normal;
 *   font-weight: 600; font-display: swap;
 *   src: url('../fonts/cormorant-garamond-600.woff2') format('woff2'); }
 * @font-face { font-family: 'Manrope'; font-style: normal; font-weight: 400 700;
 *   font-display: swap;
 *   src: url('../fonts/manrope-variable.woff2') format('woff2'); }
 */

.bfp {
	/* Palette */
	--bfp-paper: #faf9f4;
	--bfp-surface: #ffffff;
	--bfp-fill: #ecebe2;
	--bfp-ink: #2a2c24;
	--bfp-muted: #71746a;
	--bfp-faint: #9a9c90;
	--bfp-line: #d2d2c6;
	--bfp-line-strong: #b9b9ab;
	--bfp-brand: #b1ba22;
	--bfp-brand-deep: #5e6712;
	--bfp-on-brand: #ffffff;
	--bfp-radius: 3px;

	/*
	 * White on the brand green measures 1.9:1, which is not readable, so
	 * every filled surface carrying text - the active pill, the enquiry
	 * button - takes the deep variant instead (6.1:1). The lighter green is
	 * used for borders and hover states, where contrast rules do not apply.
	 */
	--bfp-brand-fill: var(--bfp-brand-deep);

	--bfp-display: 'Cormorant Garamond', Georgia, serif;
	--bfp-text: 'Manrope', sans-serif;

	--bfp-columns: 4;
	--bfp-card-ratio: 4 / 3;

	color: var(--bfp-ink);
	font-family: var(--bfp-text);
	font-size: 16px;
	line-height: 1.55;
	-webkit-font-smoothing: antialiased;
}

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

/*
 * The catalogue has to look the same inside any theme, and themes routinely
 * underline links, recolour buttons and set their own type on both. These
 * are the only things the plugin takes back by force.
 */
.bfp a {
	text-decoration: none;
	box-shadow: none;
	color: inherit;
}

.bfp button {
	font-family: var(--bfp-text);
	letter-spacing: normal;
	text-transform: none;
	border-radius: 0;
	box-shadow: none;
}

.bfp img,
.bfp svg {
	max-width: 100%;
	height: auto;
}

/*
 * Themes and page builders force widths onto form controls, and a hidden
 * element that keeps its width pushes the page sideways on a phone. The
 * width here is held with `!important` and capped as well, so it cannot.
 */
.bfp-sr-only {
	position: absolute !important;
	width: 1px !important;
	max-width: 1px !important;
	height: 1px !important;
	margin: -1px;
	padding: 0;
	border: 0;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	clip-path: inset(50%);
	white-space: nowrap;
}

.bfp [hidden] {
	display: none !important;
}

/* Focus is always visible, and never removed. */
.bfp a:focus-visible,
.bfp button:focus-visible,
.bfp input:focus-visible {
	outline: 2px solid var(--bfp-brand-deep);
	outline-offset: 2px;
}

.bfp-notice {
	margin: 0 0 20px;
	padding: 12px 16px;
	border: 1px solid var(--bfp-line-strong);
	border-radius: var(--bfp-radius);
	background: var(--bfp-fill);
	font-family: var(--bfp-text);
	font-size: 14px;
	color: var(--bfp-ink);
}

/* ------------------------------------------------------------------ */
/* 1. Intro                                                            */
/* ------------------------------------------------------------------ */

.bfp .bfp-intro {
	margin: 0 0 28px;
}

.bfp .bfp-eyebrow {
	margin: 0 0 12px;
	font-family: var(--bfp-text);
	font-size: 11px;
	font-weight: 600;
	line-height: 1.4;
	text-transform: uppercase;
	letter-spacing: 0.22em;
	color: var(--bfp-brand-deep);
}

.bfp .bfp-heading {
	margin: 0 0 16px;
	font-family: var(--bfp-display);
	font-size: clamp(32px, 5vw, 46px);
	font-weight: 600;
	line-height: 1.02;
	letter-spacing: -0.5px;
	color: var(--bfp-ink);
}

.bfp .bfp-lede {
	margin: 0;
	max-width: 60ch;
	font-family: var(--bfp-text);
	font-size: 19px;
	font-weight: 400;
	line-height: 1.6;
	color: var(--bfp-muted);
}

/* ------------------------------------------------------------------ */
/* 2. Filter + search                                                  */
/* ------------------------------------------------------------------ */

.bfp .bfp-controls {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 10px;
	margin: 0 0 18px;
	padding: 0 0 18px;
	border-bottom: 1px solid var(--bfp-line);
}

.bfp .bfp-filter-label {
	font-family: var(--bfp-text);
	font-size: 11px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.18em;
	color: var(--bfp-muted);
}

.bfp .bfp-pills {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}

.bfp .bfp-pill {
	display: inline-flex;
	align-items: baseline;
	gap: 6px;
	margin: 0;
	padding: 8px 16px;
	border: 1px solid var(--bfp-line-strong);
	border-radius: 999px;
	background: var(--bfp-surface);
	font-family: var(--bfp-text);
	font-size: 13px;
	font-weight: 600;
	line-height: 1.3;
	color: var(--bfp-muted);
	cursor: pointer;
	transition: border-color 150ms ease, background-color 150ms ease, color 150ms ease;
}

.bfp .bfp-pill:hover:not(:disabled) {
	border-color: var(--bfp-brand);
	color: var(--bfp-ink);
}

.bfp .bfp-pill.is-active {
	border-color: var(--bfp-brand-fill);
	background: var(--bfp-brand-fill);
	color: var(--bfp-on-brand);
}

.bfp .bfp-pill:disabled {
	opacity: 0.32;
	cursor: default;
}

.bfp .bfp-pill-count {
	font-size: 11px;
	font-weight: 400;
	color: var(--bfp-muted);
}

.bfp .bfp-pill.is-active .bfp-pill-count {
	color: var(--bfp-on-brand);
	opacity: 0.8;
}

.bfp .bfp-search {
	position: relative;
	margin-left: auto;
	/* Sits on the same row as the pills wherever there is room for it, and
	   drops to a row of its own when there is not. */
	flex: 1 1 180px;
	max-width: 280px;
}

.bfp .bfp-search-input {
	width: 100%;
	margin: 0;
	padding: 9px 38px 9px 16px;
	border: 1px solid var(--bfp-line-strong);
	border-radius: 999px;
	background: var(--bfp-surface);
	font-family: var(--bfp-text);
	font-size: 13px;
	font-weight: 500;
	line-height: 1.3;
	color: var(--bfp-ink);
	transition: border-color 150ms ease;
	-webkit-appearance: none;
	appearance: none;
}

.bfp .bfp-search-input:hover,
.bfp .bfp-search-input:focus {
	border-color: var(--bfp-brand);
}

/*
 * The palette's --bfp-faint measures 2.8:1, which is too pale for text even
 * in a placeholder, so the placeholder takes the muted tone (4.8:1).
 */
.bfp .bfp-search-input::placeholder {
	color: var(--bfp-muted);
	opacity: 1;
}

.bfp .bfp-search-input::-webkit-search-cancel-button {
	-webkit-appearance: none;
}

.bfp .bfp-search-icon {
	position: absolute;
	top: 50%;
	right: 14px;
	width: 16px;
	height: 16px;
	transform: translateY(-50%);
	color: var(--bfp-muted);
	pointer-events: none;
}

/* ------------------------------------------------------------------ */
/* 3. Result line                                                      */
/* ------------------------------------------------------------------ */

.bfp .bfp-result {
	display: flex;
	align-items: center;
	gap: 14px;
	margin: 0 0 18px;
	font-family: var(--bfp-text);
	font-size: 11px;
	font-weight: 500;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	color: var(--bfp-muted);
}

.bfp .bfp-clear {
	font-family: var(--bfp-text);
	font-size: 11px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	color: var(--bfp-brand-deep);
	text-decoration: none;
	border-bottom: 1px solid transparent;
	transition: border-color 150ms ease;
	cursor: pointer;
	background: none;
	border-top: 0;
	border-left: 0;
	border-right: 0;
	padding: 0;
}

.bfp .bfp-clear:hover {
	border-bottom-color: var(--bfp-brand-deep);
}

/* ------------------------------------------------------------------ */
/* 4. The grid                                                         */
/* ------------------------------------------------------------------ */

/*
 * Cards are never narrower than 220px and never more than `columns` to a
 * row. The track size is worked out from the container rather than the
 * viewport, because the plugin has to sit correctly inside any theme's
 * content area - a 600px column on a 1400px screen is common, and a viewport
 * media query would put four cards in it.
 */
.bfp .bfp-grid {
	--bfp-gap: 20px;
	--bfp-card-min: 220px;

	display: grid;
	gap: var(--bfp-gap);
	grid-template-columns: repeat(
		auto-fill,
		minmax(
			max(
				var(--bfp-card-min),
				(100% - (var(--bfp-columns) - 1) * var(--bfp-gap)) / var(--bfp-columns)
			),
			1fr
		)
	);
}

.bfp .bfp-card {
	display: flex;
	border: 1px solid var(--bfp-line);
	border-radius: var(--bfp-radius);
	background: var(--bfp-surface);
	overflow: hidden;
	transition: border-color 150ms ease;
}

.bfp .bfp-card:hover,
.bfp .bfp-card:focus-within {
	border-color: var(--bfp-brand);
}

.bfp .bfp-card-link {
	display: flex;
	flex-direction: column;
	width: 100%;
	color: inherit;
	text-decoration: none;
	box-shadow: none;
}

.bfp .bfp-card-link:focus-visible {
	outline: 2px solid var(--bfp-brand-deep);
	outline-offset: -2px;
}

.bfp .bfp-card-media {
	display: block;
	width: 100%;
	aspect-ratio: var(--bfp-card-ratio);
	background: var(--bfp-fill);
	overflow: hidden;
}

.bfp .bfp-card-image {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border: 0;
	border-radius: 0;
}

.bfp .bfp-card-image--none {
	background: repeating-linear-gradient(
		135deg,
		var(--bfp-fill),
		var(--bfp-fill) 10px,
		var(--bfp-paper) 10px,
		var(--bfp-paper) 20px
	);
}

.bfp .bfp-card-body {
	display: flex;
	flex: 1 1 auto;
	flex-direction: column;
	gap: 6px;
	padding: 14px 16px 12px;
}

.bfp .bfp-card-cat {
	display: block;
	font-family: var(--bfp-text);
	font-size: 10px;
	font-weight: 600;
	line-height: 1.4;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--bfp-brand-deep);
}

.bfp .bfp-card-name {
	margin: 0;
	font-family: var(--bfp-display);
	font-size: 18px;
	font-weight: 600;
	line-height: 1.2;
	color: var(--bfp-ink);
}

.bfp .bfp-card-desc {
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	font-family: var(--bfp-text);
	font-size: 14px;
	font-weight: 400;
	line-height: 1.5;
	color: var(--bfp-muted);
}

.bfp .bfp-card-more {
	display: block;
	margin-top: auto;
	padding-top: 10px;
	font-family: var(--bfp-text);
	font-size: 11px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	color: var(--bfp-muted);
	transition: color 150ms ease;
}

.bfp .bfp-card:hover .bfp-card-more {
	color: var(--bfp-brand-deep);
}

/* ------------------------------------------------------------------ */
/* 4b. Browsing by sub-category                                        */
/* ------------------------------------------------------------------ */

.bfp .bfp-tiles {
	--bfp-gap: 20px;
	--bfp-card-min: 240px;

	display: grid;
	gap: var(--bfp-gap);
	grid-template-columns: repeat(
		auto-fill,
		minmax(
			max(
				var(--bfp-card-min),
				(100% - (var(--bfp-columns) - 1) * var(--bfp-gap)) / var(--bfp-columns)
			),
			1fr
		)
	);
}

.bfp .bfp-tile {
	display: flex;
	flex-direction: column;
	border: 1px solid var(--bfp-line);
	border-radius: var(--bfp-radius);
	background: var(--bfp-surface);
	overflow: hidden;
	color: inherit;
	text-decoration: none;
	transition: border-color 150ms ease;
}

.bfp a.bfp-tile:hover,
.bfp a.bfp-tile:focus,
.bfp a.bfp-tile:active {
	border-color: var(--bfp-brand);
	color: inherit;
	text-decoration: none;
}

.bfp .bfp-tile-media {
	display: block;
	width: 100%;
	aspect-ratio: var(--bfp-card-ratio);
	background: var(--bfp-fill);
	overflow: hidden;
}

.bfp .bfp-tile-image {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.bfp .bfp-tile-image--none {
	background: repeating-linear-gradient(
		135deg,
		var(--bfp-fill),
		var(--bfp-fill) 10px,
		var(--bfp-paper) 10px,
		var(--bfp-paper) 20px
	);
}

.bfp .bfp-tile-body {
	display: block;
	padding: 14px 16px 16px;
}

.bfp .bfp-tile-name {
	display: block;
	margin: 0 0 4px;
	font-family: var(--bfp-display);
	font-size: 21px;
	font-weight: 600;
	line-height: 1.15;
	color: var(--bfp-ink);
}

.bfp .bfp-tile-count {
	display: block;
	font-family: var(--bfp-text);
	font-size: 11px;
	font-weight: 500;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	color: var(--bfp-muted);
}

.bfp a.bfp-tile:hover .bfp-tile-count {
	color: var(--bfp-brand-deep);
}

/* The way back out of a sub-category */
.bfp .bfp-back {
	display: flex;
	align-items: baseline;
	flex-wrap: wrap;
	gap: 10px;
	margin: 0 0 14px;
}

.bfp .bfp-back-link {
	font-family: var(--bfp-text);
	font-size: 11px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	color: var(--bfp-brand-deep);
	text-decoration: none;
	border-bottom: 1px solid transparent;
	transition: border-color 150ms ease;
}

.bfp a.bfp-back-link:hover,
.bfp a.bfp-back-link:focus,
.bfp a.bfp-back-link:active {
	color: var(--bfp-brand-deep);
	text-decoration: none;
	border-bottom-color: var(--bfp-brand-deep);
}

.bfp .bfp-back-current {
	font-family: var(--bfp-display);
	font-size: 20px;
	font-weight: 600;
	color: var(--bfp-ink);
}

.bfp .bfp-back-current:empty {
	display: none;
}

/* ------------------------------------------------------------------ */
/* 5. Empty state                                                      */
/* ------------------------------------------------------------------ */

.bfp .bfp-empty {
	margin: 32px 0;
	padding: 40px 20px;
	border: 1px dashed var(--bfp-line);
	border-radius: var(--bfp-radius);
	text-align: center;
	font-family: var(--bfp-display);
	font-size: 18px;
	color: var(--bfp-muted);
}

/* ------------------------------------------------------------------ */
/* 6. Detail view                                                      */
/* ------------------------------------------------------------------ */

.bfp .bfp-modal {
	position: fixed;
	inset: 0;
	z-index: 100000;
	display: flex;
	align-items: flex-start;
	justify-content: center;
	padding: 24px 16px;
	overflow-y: auto;
}

.bfp .bfp-modal-backdrop {
	position: fixed;
	inset: 0;
	background: rgba(42, 44, 36, 0.55);
}

.bfp .bfp-modal-panel {
	position: relative;
	width: 100%;
	/* Wide enough that the photograph, its thumbnails and the specification
	   are all in view at once on a desktop, without scrolling to find them. */
	max-width: 1040px;
	margin: auto;
	border: 1px solid var(--bfp-line);
	border-radius: var(--bfp-radius);
	background: var(--bfp-surface);
	overflow: hidden;
}

.bfp .bfp-modal-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	padding: 16px 20px;
	border-bottom: 1px solid var(--bfp-line);
	background: var(--bfp-paper);
}

.bfp .bfp-modal-title {
	margin: 0;
	font-family: var(--bfp-display);
	font-size: 24px;
	font-weight: 600;
	line-height: 1.15;
	color: var(--bfp-ink);
}

.bfp .bfp-modal-close {
	flex: 0 0 auto;
	width: 32px;
	height: 32px;
	padding: 0;
	border: 1px solid transparent;
	border-radius: 999px;
	background: transparent;
	font-family: var(--bfp-text);
	font-size: 22px;
	line-height: 1;
	color: var(--bfp-muted);
	cursor: pointer;
	transition: border-color 150ms ease, color 150ms ease;
}

.bfp .bfp-modal-close:hover {
	border-color: var(--bfp-brand);
	color: var(--bfp-ink);
}

.bfp .bfp-modal-body {
	max-height: calc(100vh - 160px);
	overflow-y: auto;
}

.bfp .bfp-detail {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	align-items: start;
}

/*
 * The photograph column stays put while the description beside it is read,
 * so the thumbnails never scroll out of reach.
 */
.bfp .bfp-detail-media {
	position: sticky;
	top: 0;
	background: var(--bfp-fill);
	border-right: 1px solid var(--bfp-line);
}

.bfp .bfp-detail-image {
	display: block;
	width: 100%;
	min-height: 280px;
	/* Capped so the thumbnail strip underneath is on screen from the start. */
	height: min(56vh, 520px);
}

.bfp .bfp-detail-image--none {
	background: repeating-linear-gradient(
		135deg,
		var(--bfp-fill),
		var(--bfp-fill) 10px,
		var(--bfp-paper) 10px,
		var(--bfp-paper) 20px
	);
}

/*
 * `contain`, not `cover`: a coffin photographed against white and a pendant
 * shot square are both shown whole. Cropping the middle out of a product
 * photograph is the one thing this view must not do.
 */
.bfp .bfp-detail-img {
	display: block;
	width: 100%;
	height: 100%;
	min-height: 280px;
	object-fit: contain;
	padding: 16px;
}

.bfp .bfp-thumbs {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 6px;
	padding: 10px;
	border-top: 1px solid var(--bfp-line);
	background: var(--bfp-surface);
}

.bfp .bfp-thumb {
	width: 52px;
	height: 52px;
	padding: 0;
	border: 1px solid var(--bfp-line-strong);
	border-radius: var(--bfp-radius);
	background: var(--bfp-surface);
	overflow: hidden;
	cursor: pointer;
	transition: border-color 150ms ease;
}

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

.bfp .bfp-thumb:hover,
.bfp .bfp-thumb.is-active {
	border-color: var(--bfp-brand-deep);
}

.bfp .bfp-detail-body {
	padding: 28px;
}

.bfp .bfp-detail-tags {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin: 0 0 12px;
}

.bfp .bfp-detail-tag {
	font-family: var(--bfp-text);
	font-size: 10px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	color: var(--bfp-brand-deep);
}

.bfp .bfp-detail-tag + .bfp-detail-tag::before {
	content: '·';
	margin-right: 6px;
	color: var(--bfp-line-strong);
}

.bfp .bfp-detail-lede {
	margin: 0 0 14px;
	font-family: var(--bfp-text);
	font-size: 15px;
	font-weight: 500;
	line-height: 1.6;
	color: var(--bfp-ink);
}

.bfp .bfp-detail-content {
	margin: 0 0 20px;
	font-family: var(--bfp-text);
	font-size: 14px;
	line-height: 1.7;
	color: var(--bfp-muted);
}

.bfp .bfp-detail-content p {
	margin: 0 0 12px;
}

.bfp .bfp-detail-content p:last-child {
	margin-bottom: 0;
}

/* The specification table */
.bfp .bfp-spec {
	width: 100%;
	margin: 0 0 20px;
	border: 0;
	border-collapse: collapse;
	background: none;
}

.bfp .bfp-spec tr {
	border-top: 1px solid var(--bfp-line);
	background: none;
}

.bfp .bfp-spec tr:last-child {
	border-bottom: 1px solid var(--bfp-line);
}

.bfp .bfp-spec-label,
.bfp .bfp-spec-value {
	padding: 9px 0;
	border: 0;
	text-align: left;
	vertical-align: top;
}

.bfp .bfp-spec-label {
	width: 38%;
	padding-right: 16px;
	font-family: var(--bfp-text);
	font-size: 11px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.1em;
	color: var(--bfp-muted);
}

.bfp .bfp-spec-value {
	font-family: var(--bfp-text);
	font-size: 14px;
	font-weight: 400;
	color: var(--bfp-ink);
}

/* Colours and variations */
.bfp .bfp-variations {
	margin: 0 0 20px;
}

.bfp .bfp-variations-label {
	margin: 0 0 8px;
	font-family: var(--bfp-text);
	font-size: 11px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.1em;
	color: var(--bfp-muted);
}

.bfp .bfp-variation-list {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.bfp .bfp-variation {
	margin: 0;
}

.bfp .bfp-variation-button {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin: 0;
	padding: 6px 13px;
	border: 1px solid var(--bfp-line-strong);
	border-radius: 999px;
	background: var(--bfp-surface);
	font-family: var(--bfp-text);
	font-size: 13px;
	font-weight: 500;
	line-height: 1.3;
	text-align: left;
	white-space: normal;
	color: var(--bfp-ink);
	cursor: pointer;
	transition: border-color 150ms ease, background-color 150ms ease;
}

.bfp .bfp-variation-button--static {
	cursor: default;
}

.bfp button.bfp-variation-button:hover,
.bfp button.bfp-variation-button:focus {
	border-color: var(--bfp-brand);
	background-color: var(--bfp-surface);
	color: var(--bfp-ink);
}

.bfp .bfp-variation-button.is-active {
	border-color: var(--bfp-brand-deep);
	box-shadow: inset 0 0 0 1px var(--bfp-brand-deep);
}

.bfp .bfp-variation-dot {
	width: 14px;
	height: 14px;
	border: 1px solid var(--bfp-line-strong);
	border-radius: 999px;
	flex: 0 0 auto;
}

/*
 * The variation picker: a product sold in dozens of designs. The grid of
 * designs is on the right; the chosen one - photograph, code, prices and the
 * enquiry button - stays in view on the left while the grid is scrolled.
 */
.bfp .bfp-detail--picker .bfp-detail-media {
	/* Its own scroll, so a long price table never pushes the enquiry button
	   out of reach under the sticky column. */
	max-height: calc(100vh - 160px);
	overflow-y: auto;
}

.bfp .bfp-detail--picker .bfp-detail-image {
	/* Shorter than usual, so the prices and the enquiry button fit under it. */
	height: min(32vh, 360px);
	min-height: 220px;
	background: var(--bfp-surface);
}

.bfp .bfp-detail--picker .bfp-detail-img {
	min-height: 220px;
}

.bfp .bfp-pick-panel {
	padding: 14px 20px 18px;
	border-top: 1px solid var(--bfp-line);
	background: var(--bfp-surface);
}

.bfp .bfp-pick-eyebrow {
	margin: 0 0 4px;
	font-family: var(--bfp-text);
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.1em;
	color: var(--bfp-brand-deep);
}

.bfp .bfp-pick-title {
	margin: 0 0 12px;
	font-family: var(--bfp-display);
	font-size: 22px;
	font-weight: 600;
	line-height: 1.15;
	color: var(--bfp-ink);
}

.bfp .bfp-pick-hint {
	margin: 0 0 16px;
	font-family: var(--bfp-text);
	font-size: 14px;
	line-height: 1.5;
	color: var(--bfp-muted);
}

.bfp .bfp-pick-prices {
	width: 100%;
	margin: 0 0 14px;
	border: 0;
	border-collapse: collapse;
	background: none;
}

.bfp .bfp-pick-prices tr {
	border-top: 1px solid var(--bfp-line);
	background: none;
}

.bfp .bfp-pick-prices tr:last-child {
	border-bottom: 1px solid var(--bfp-line);
}

.bfp .bfp-pick-prices th,
.bfp .bfp-pick-prices td {
	padding: 5px 0;
	border: 0;
	background: none;
	font-family: var(--bfp-text);
	font-size: 14px;
	line-height: 1.35;
	vertical-align: baseline;
}

.bfp .bfp-pick-prices th {
	padding-right: 12px;
	font-weight: 500;
	text-align: left;
	color: var(--bfp-muted);
}

.bfp .bfp-pick-prices td {
	font-weight: 600;
	text-align: right;
	white-space: nowrap;
	font-variant-numeric: tabular-nums;
	color: var(--bfp-ink);
}

.bfp .bfp-pick-amount {
	margin: 0 0 14px;
	font-family: var(--bfp-display);
	font-size: 26px;
	font-weight: 600;
	line-height: 1.1;
	color: var(--bfp-ink);
}

.bfp .bfp-pick-note {
	margin: -4px 0 14px;
	font-family: var(--bfp-text);
	font-size: 13px;
	line-height: 1.5;
	color: var(--bfp-muted);
}

.bfp .bfp-detail--picker .bfp-enquire {
	padding: 14px 16px;
}

.bfp .bfp-detail--picker .bfp-enquire-line {
	margin-bottom: 10px;
	font-size: 13px;
}

.bfp .bfp-picker {
	margin: 0 0 20px;
}

.bfp .bfp-picker-head {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 8px 16px;
	margin: 0 0 10px;
}

.bfp .bfp-picker-head .bfp-variations-label {
	margin: 0;
}

.bfp .bfp-picker-search {
	flex: 1 1 180px;
	max-width: 240px;
	margin: 0;
	padding: 7px 11px;
	border: 1px solid var(--bfp-line-strong);
	border-radius: var(--bfp-radius);
	background: var(--bfp-surface);
	font-family: var(--bfp-text);
	font-size: 14px;
	line-height: 1.3;
	color: var(--bfp-ink);
	box-shadow: none;
}

.bfp .bfp-picker-search:focus {
	border-color: var(--bfp-brand-deep);
	outline: none;
	box-shadow: 0 0 0 2px rgba(177, 186, 34, 0.35);
}

.bfp .bfp-picker-tabs {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin: 0 0 14px;
}

.bfp button.bfp-picker-tab {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin: 0;
	padding: 6px 12px;
	border: 1px solid var(--bfp-line-strong);
	border-radius: 999px;
	background: var(--bfp-surface);
	font-size: 13px;
	font-weight: 500;
	line-height: 1.3;
	color: var(--bfp-ink);
	cursor: pointer;
	transition: border-color 150ms ease, background-color 150ms ease;
}

.bfp button.bfp-picker-tab:hover,
.bfp button.bfp-picker-tab:focus {
	border-color: var(--bfp-brand);
	background: var(--bfp-surface);
	color: var(--bfp-ink);
}

.bfp button.bfp-picker-tab.is-active,
.bfp button.bfp-picker-tab.is-active:hover,
.bfp button.bfp-picker-tab.is-active:focus {
	border-color: var(--bfp-brand-fill);
	background: var(--bfp-brand-fill);
	color: var(--bfp-on-brand);
}

.bfp .bfp-picker-tab-count {
	font-size: 11px;
	font-weight: 600;
	opacity: 0.7;
}

.bfp .bfp-picker-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
	gap: 8px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.bfp .bfp-pick-item {
	margin: 0;
}

.bfp .bfp-pick-item[hidden] {
	display: none;
}

.bfp button.bfp-pick {
	display: flex;
	flex-direction: column;
	width: 100%;
	height: 100%;
	margin: 0;
	padding: 6px 6px 9px;
	border: 1px solid var(--bfp-line);
	border-radius: var(--bfp-radius);
	background: var(--bfp-surface);
	text-align: left;
	/* The theme stops button text wrapping, which pushed long names out
	   past the edge of the dialog. */
	white-space: normal;
	color: var(--bfp-ink);
	cursor: pointer;
	transition: border-color 150ms ease, box-shadow 150ms ease;
}

.bfp button.bfp-pick:hover,
.bfp button.bfp-pick:focus {
	border-color: var(--bfp-brand);
	background: var(--bfp-surface);
	color: var(--bfp-ink);
}

.bfp button.bfp-pick:focus-visible {
	outline: 2px solid var(--bfp-brand-deep);
	outline-offset: 1px;
}

.bfp button.bfp-pick.is-active {
	border-color: var(--bfp-brand-deep);
	box-shadow: inset 0 0 0 1px var(--bfp-brand-deep);
}

.bfp .bfp-pick-img {
	display: block;
	aspect-ratio: 1;
	margin: 0 0 7px;
	border-radius: 2px;
	background: var(--bfp-paper);
	overflow: hidden;
}

.bfp .bfp-pick-img img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: contain;
}

.bfp .bfp-pick-code {
	display: block;
	font-family: var(--bfp-text);
	font-size: 12px;
	font-weight: 700;
	line-height: 1.3;
	letter-spacing: 0.02em;
	color: var(--bfp-ink);
	overflow-wrap: anywhere;
}

.bfp .bfp-pick-name {
	display: -webkit-box;
	margin-top: 1px;
	font-family: var(--bfp-text);
	font-size: 12px;
	line-height: 1.35;
	color: var(--bfp-muted);
	overflow: hidden;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 2;
}

.bfp .bfp-pick-price {
	display: block;
	margin-top: auto;
	padding-top: 5px;
	font-family: var(--bfp-text);
	font-size: 12px;
	font-weight: 600;
	line-height: 1.3;
	color: var(--bfp-brand-deep);
}

.bfp .bfp-picker-empty {
	margin: 12px 0 0;
	padding: 20px;
	border: 1px dashed var(--bfp-line);
	border-radius: var(--bfp-radius);
	text-align: center;
	font-family: var(--bfp-text);
	font-size: 14px;
	color: var(--bfp-muted);
}

/* Options chips */
.bfp .bfp-options {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin: 0 0 20px;
	padding: 0;
	list-style: none;
}

.bfp .bfp-option {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	margin: 0;
	padding: 5px 12px;
	border: 1px solid var(--bfp-line);
	border-radius: 999px;
	font-family: var(--bfp-text);
	font-size: 13px;
	font-weight: 500;
	color: var(--bfp-ink);
}

.bfp .bfp-option-dot {
	width: 5px;
	height: 5px;
	border-radius: 999px;
	background: var(--bfp-brand);
}

/* The enquiry box */
.bfp .bfp-enquire {
	padding: 18px 20px;
	border: 1px solid var(--bfp-line);
	border-radius: var(--bfp-radius);
	background: var(--bfp-fill);
}

.bfp .bfp-enquire-line {
	margin: 0 0 14px;
	font-family: var(--bfp-text);
	font-size: 14px;
	line-height: 1.5;
	color: var(--bfp-ink);
}

.bfp .bfp-enquire-actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 16px;
}

.bfp .bfp-btn {
	display: inline-block;
	padding: 11px 20px;
	border: 1px solid var(--bfp-brand-fill);
	border-radius: var(--bfp-radius);
	background: var(--bfp-brand-fill);
	font-family: var(--bfp-text);
	font-size: 13px;
	font-weight: 600;
	letter-spacing: 0.02em;
	line-height: 1.2;
	color: var(--bfp-on-brand);
	text-decoration: none;
	transition: background-color 150ms ease, border-color 150ms ease;
}

.bfp .bfp-btn:hover {
	background: var(--bfp-ink);
	border-color: var(--bfp-ink);
	color: var(--bfp-on-brand);
}

.bfp .bfp-phone {
	font-family: var(--bfp-display);
	font-size: 20px;
	font-weight: 600;
	line-height: 1.2;
	color: var(--bfp-brand-deep);
	text-decoration: none;
	border-bottom: 1px solid transparent;
	transition: border-color 150ms ease;
}

.bfp .bfp-phone:hover {
	border-bottom-color: var(--bfp-brand-deep);
}

.bfp .bfp-reassure {
	margin: 12px 0 0;
	font-family: var(--bfp-text);
	font-size: 13px;
	line-height: 1.5;
	color: var(--bfp-muted);
}

/* ------------------------------------------------------------------ */
/* The single-product page                                             */
/* ------------------------------------------------------------------ */

.bfp.bfp-single {
	padding: 40px 20px 64px;
	background: var(--bfp-paper);
}

.bfp.bfp-single .bfp-single-inner {
	max-width: 880px;
	margin: 0 auto;
	border: 1px solid var(--bfp-line);
	border-radius: var(--bfp-radius);
	background: var(--bfp-surface);
	overflow: hidden;
	padding: 28px;
}

.bfp .bfp-single-title {
	margin: 0 0 20px;
	font-family: var(--bfp-display);
	font-size: clamp(28px, 4vw, 38px);
	font-weight: 600;
	line-height: 1.05;
	letter-spacing: -0.4px;
	color: var(--bfp-ink);
}

.bfp.bfp-single .bfp-detail {
	gap: 28px;
	border: 1px solid var(--bfp-line);
	border-radius: var(--bfp-radius);
	overflow: hidden;
}

/* ------------------------------------------------------------------ */
/* Responsive                                                          */
/* ------------------------------------------------------------------ */

@media (max-width: 680px) {
	.bfp .bfp-search {
		flex: 1 1 100%;
		margin-left: 0;
	}

	.bfp .bfp-detail {
		grid-template-columns: 1fr;
	}

	.bfp .bfp-detail-media {
		position: static;
		border-right: 0;
		border-bottom: 1px solid var(--bfp-line);
	}

	.bfp .bfp-detail-image {
		height: 46vh;
	}

	.bfp .bfp-detail--picker .bfp-detail-media {
		max-height: none;
		overflow: visible;
	}

	.bfp .bfp-detail--picker .bfp-detail-image {
		height: 38vh;
	}

	.bfp .bfp-picker-grid {
		grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
	}

	.bfp .bfp-picker-search {
		max-width: none;
	}

	.bfp .bfp-detail-body {
		padding: 22px 20px;
	}

	.bfp .bfp-enquire-actions {
		flex-direction: column;
		align-items: stretch;
		gap: 12px;
	}

	.bfp .bfp-btn,
	.bfp .bfp-phone {
		display: block;
		width: 100%;
		text-align: center;
	}

	.bfp .bfp-modal {
		padding: 0;
	}

	.bfp .bfp-modal-panel {
		max-width: none;
		min-height: 100%;
		border: 0;
		border-radius: 0;
	}

	.bfp .bfp-modal-body {
		max-height: none;
	}

	.bfp.bfp-single {
		padding: 24px 16px 40px;
	}

	.bfp.bfp-single .bfp-single-inner {
		padding: 20px 16px;
	}
}

@media (max-width: 420px) {
	.bfp .bfp-controls {
		gap: 8px;
	}
}

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

/* Scroll is locked while a detail view is open. */
html.bfp-modal-open,
body.bfp-modal-open {
	overflow: hidden;
}

/* ------------------------------------------------------------------ */
/* Parent-theme guard                                                  */
/* ------------------------------------------------------------------ */

/*
 * Hello Elementor's reset.css paints every button magenta the moment it is
 * hovered or focused, and repaints every link on hover:
 *
 *     button:focus, button:hover { background-color:#c36; color:#fff }
 *     a:active, a:hover          { color:#336 }
 *
 * Both sit at (0,1,1), which ties with or beats a single-class rule, so the
 * plugin's own states have to be restated at (0,2,1) or better. Only the
 * properties the parent forces are listed; everything else keeps working from
 * the rules above. Removing this block brings the magenta straight back.
 */
.bfp button.bfp-pill:hover,
.bfp button.bfp-pill:focus,
.bfp button.bfp-pill:active {
	background-color: var(--bfp-surface);
	color: var(--bfp-ink);
	text-decoration: none;
}

.bfp button.bfp-pill.is-active:hover,
.bfp button.bfp-pill.is-active:focus,
.bfp button.bfp-pill.is-active:active {
	background-color: var(--bfp-brand-fill);
	color: var(--bfp-on-brand);
}

.bfp button.bfp-pill:disabled:hover,
.bfp button.bfp-pill:disabled:focus {
	background-color: var(--bfp-surface);
	color: var(--bfp-muted);
}

.bfp button.bfp-modal-close:hover,
.bfp button.bfp-modal-close:focus,
.bfp button.bfp-modal-close:active {
	background-color: transparent;
	color: var(--bfp-ink);
	text-decoration: none;
}

.bfp button.bfp-thumb:hover,
.bfp button.bfp-thumb:focus,
.bfp button.bfp-thumb:active {
	background-color: var(--bfp-surface);
}

.bfp a.bfp-card-link:hover,
.bfp a.bfp-card-link:active,
.bfp a.bfp-card-link:focus {
	color: inherit;
	text-decoration: none;
}

.bfp a.bfp-btn:hover,
.bfp a.bfp-btn:active,
.bfp a.bfp-btn:focus {
	color: var(--bfp-on-brand);
	text-decoration: none;
}

.bfp a.bfp-phone:hover,
.bfp a.bfp-phone:active,
.bfp a.bfp-phone:focus,
.bfp a.bfp-clear:hover,
.bfp a.bfp-clear:active,
.bfp a.bfp-clear:focus {
	color: var(--bfp-brand-deep);
	text-decoration: none;
}
