/* =========================================================================
   iSupply Displays — single product

   Loaded only on product screens, after style.css (and therefore after
   kadence-global and Kadence's Customizer CSS), so plain selectors here beat
   theme defaults. The few !important marks are annotated with the rule they
   are fighting.

   ISD_Single::full_width_layout() asks Kadence for `fullwidth` + `unboxed` + no
   vertical padding, which removes the parent's 1290px container, white card and
   wrapper margins. This sheet then gives the product screen its deliberate
   1450px maximum while retaining fluid small-screen gutters inside each band.
   ====================================================================== */

/* Match the site's established non-product typography without adding a
   remote font request. Both families are variable fonts already shipped by
   the child theme, so the intermediate weights used below remain native. */
@font-face {
	font-family: "Archivo";
	font-style: normal;
	font-weight: 400 800;
	font-display: swap;
	src: url("../fonts/archivo-latin-variable.woff2") format("woff2");
}

@font-face {
	font-family: "Inter";
	font-style: normal;
	font-weight: 400 800;
	font-display: swap;
	src: url("../fonts/inter-latin-variable.woff2") format("woff2");
}

/*
 * Tokens are scoped to the body, not to .isd-single, because two things that
 * need them sit outside that element: Kadence's breadcrumb, which is printed
 * on woocommerce_before_single_product and so lands before .product, and the
 * full screen viewer, which isd-single.js appends to <body>. Scoped to
 * .isd-single both would resolve every var() to nothing.
 */
body.single-product {
	--isd-body-font: "Inter", Arial, sans-serif;
	--isd-heading-font: "Archivo", Arial, sans-serif;

	--isd-navy: #0a315f;
	--isd-primary-blue: var(--opt1-blue, #1769ff);
	--isd-primary-blue-dark: var(--opt1-blue-dark, #084fcc);
	--isd-band: #ececec;
	--isd-ink: #1a2a4a;
	--isd-muted: #5c6b81;
	--isd-line: #e2e6ec;
	--isd-tile: #f4f5f7;

	--isd-gutter: clamp(20px, 3vw, 64px);
	--isd-ease: cubic-bezier(0.4, 0, 0.2, 1);
	--isd-prose: 78ch;

	--isd-sticky-top: 24px;
	--isd-rail-w: 112px;

	/*
	 * The spotlight is square, so its height is its width. Capping both to the
	 * usable viewport height is what lets the media column be sticky without
	 * any part of it becoming unreachable, and it is why the stage no longer
	 * stretches to whatever the column happens to be.
	 */
	--isd-stage-max: calc(100vh - var(--isd-sticky-top) - 64px);
}

/* Keep the complete product experience, including breadcrumbs and notices,
   within the requested 1450px page measure. This out-specifies Kadence's
   full-width max-width:none rule without affecting any other content type. */
body.single-product .content-container.site-container {
	width: 100%;
	max-width: 1450px;
	margin-inline: auto;
	padding-inline: 0;
	font-family: var(--isd-body-font);
}

/* Keep the typography contract within the product-page content. Site chrome
   remains governed by the global Kadence typography used everywhere else. */
body.single-product .content-container.site-container :is(h1, h2, h3, h4, h5, h6),
.isd-accordion__summary {
	font-family: var(--isd-heading-font);
	text-transform: uppercase;
}

body.single-product .content-container.site-container :is(button, input, select, textarea) {
	font-family: var(--isd-body-font);
}

@media (max-width: 1024px) {
	body.single-product {
		/* Stacked layout: nothing is sticky, so the square can simply fill
		   the column. */
		--isd-stage-max: none;
		--isd-rail-w: 88px;
	}
}

/* -------------------------------------------------------------------------
   Bands
   Each band fills the constrained product parent and owns its responsive
   inner edge padding.
   ---------------------------------------------------------------------- */

.isd-band,
.isd-section__inner {
	padding-inline: var(--isd-gutter);
}

/*
 * Kadence prints the product breadcrumb from output_product_above(), hooked to
 * woocommerce_before_single_product — which this template fires, so it lands
 * as a sibling before .product rather than inside it. With the container gone
 * it would sit hard against the viewport edge without this.
 */
body.single-product .product-title.product-above {
	padding: 20px var(--isd-gutter) 0;
}

.isd-single__crumbs {
	padding-top: 20px;
}

.isd-single__crumbs:empty {
	display: none;
}

body.single-product.content-vertical-padding-hide .kadence-breadcrumbs {
	margin-top: 0;
}

body.single-product .kadence-breadcrumbs,
body.single-product .kadence-breadcrumbs a,
body.single-product .kadence-breadcrumbs a:visited,
body.single-product .kadence-breadcrumbs a:hover,
body.single-product .kadence-breadcrumbs a:focus {
	color: var(--isd-navy);
}

body.single-product .kadence-breadcrumbs a,
body.single-product .kadence-breadcrumbs a:focus,
body.single-product .kadence-breadcrumbs a:focus-visible {
	text-decoration: none;
}

body.single-product .kadence-breadcrumbs a:hover {
	text-decoration: underline;
	text-underline-offset: 0.14em;
}

body.single-product .kadence-breadcrumbs a:focus-visible {
	outline: 2px solid var(--isd-primary-blue);
	outline-offset: 2px;
}

body.single-product .kadence-breadcrumbs .bc-delimiter {
	display: inline-flex;
	align-items: center;
	margin-inline: clamp(6px, 0.65vw, 9px);
	color: var(--isd-primary-blue);
	vertical-align: middle;
	line-height: 1;
}

body.single-product .kadence-breadcrumbs .bc-delimiter svg {
	display: block;
	width: 0.8em;
	height: 0.8em;
}

body.single-product .kadence-breadcrumbs .kadence-bread-current {
	color: var(--isd-navy);
	font-weight: 700;
}

/* -------------------------------------------------------------------------
   Two column body
   ---------------------------------------------------------------------- */

.isd-single__top {
	display: grid;
	grid-template-columns: minmax(0, 54fr) minmax(0, 46fr);
	gap: clamp(16px, 1.5vw, 28px);
	align-items: start;
	padding-block: clamp(24px, 3vw, 40px) clamp(24px, 3vw, 40px);
}

@media (max-width: 1024px) {
	.isd-single__top {
		grid-template-columns: minmax(0, 1fr);
		gap: 32px;
	}
}

.isd-single__media {
	position: relative;
	min-width: 0;
	/* The column keeps its full height so the inner block has something to
	   stick against; align-items: start would otherwise collapse it. */
	align-self: stretch;
}

.isd-single__summary {
	min-width: 0;
	align-self: stretch;
}

/*
 * Only the shorter desktop column sticks within the shared grid row. If it
 * exceeds the viewport, it scrolls until its bottom is visible before sticking.
 */
@media (min-width: 1025px) {
	.isd-single__top.is-media-sticky .isd-single__media-inner {
		position: sticky;
		top: var(--isd-media-sticky-top, var(--isd-sticky-top));
	}

	.isd-single__top.is-summary-sticky .isd-single__summary-inner {
		position: sticky;
		top: var(--isd-summary-sticky-top, var(--isd-sticky-top));
	}
}

/* -------------------------------------------------------------------------
   Why Choose

   Product-authored prose and existing product media below the complete
   media/summary row. No generated feature cards or bullet columns are added.
   ---------------------------------------------------------------------- */

.isd-single__why-choose {
	width: 100%;
	padding-block: clamp(48px, 6vw, 84px);
}

.isd-single__why-choose-inner {
	display: grid;
	grid-template-columns: minmax(0, 1.08fr) minmax(340px, 0.92fr);
	gap: clamp(36px, 5vw, 72px);
	align-items: center;
	width: 100%;
	margin: 0;
}

.isd-single__why-choose-inner.is-without-media {
	grid-template-columns: minmax(0, 1fr);
}

.isd-single__why-choose-copy {
	min-width: 0;
}

.isd-single__why-choose-inner.is-without-media .isd-single__why-choose-copy {
	max-width: var(--isd-prose);
}

.isd-single__why-choose-eyebrow {
	display: flex;
	align-items: center;
	gap: 18px;
	margin: 0 0 18px;
	color: var(--isd-muted);
	font-family: var(--isd-heading-font);
	font-size: 13px;
	font-weight: 800;
	letter-spacing: 0.24em;
	line-height: 1.2;
	text-transform: uppercase;
}

.isd-single__why-choose-eyebrow::after {
	width: 58px;
	height: 2px;
	background: var(--isd-primary-blue);
	content: "";
}

.isd-single__why-choose-title,
.isd-single__why-choose-content :is(h2, h3, h4) {
	font-family: var(--isd-heading-font);
	font-weight: 800;
	line-height: 1.3;
	text-transform: uppercase;
	color: var(--isd-ink);
}

.isd-single__why-choose-title {
	margin: 0 0 22px;
	font-size: clamp(2rem, 3.7vw, 3.25rem);
	letter-spacing: -0.035em;
	line-height: 1.08;
}

.isd-single__why-choose-content {
	font-size: clamp(16px, 1.45vw, 18px);
	font-weight: 400;
	line-height: 1.7;
	color: var(--isd-muted);
}

.isd-single__why-choose-content > :first-child {
	margin-top: 0;
}

.isd-single__why-choose-content > :last-child {
	margin-bottom: 0;
}

.isd-single__why-choose-content :is(h2, h3, h4) {
	margin: 1.6em 0 0.6em;
}

.isd-single__why-choose-content h2 {
	font-size: clamp(1.35rem, 2vw, 1.65rem);
}

.isd-single__why-choose-content h3 {
	font-size: clamp(1.2rem, 1.8vw, 1.4rem);
}

.isd-single__why-choose-content h4 {
	font-size: 1.1rem;
}

.isd-single__why-choose-content :is(p, ul, ol, blockquote) {
	margin: 0 0 1em;
}

.isd-single__why-choose-content :is(ul, ol) {
	padding-left: 1.4em;
}

.isd-single__why-choose-content li + li {
	margin-top: 0.4em;
}

.isd-single__why-choose-content a {
	color: var(--isd-navy);
	text-decoration: underline;
	text-underline-offset: 0.16em;
}

.isd-single__why-choose-content strong {
	font-weight: 700;
}

.isd-single__why-choose-content blockquote {
	padding-left: 1em;
	border-left: 3px solid var(--isd-line);
}

.isd-single__why-choose-cta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 18px;
	min-height: 56px;
	margin-top: 22px;
	padding: 14px 30px;
	border: 1px solid var(--isd-primary-blue);
	border-radius: 999px;
	background: var(--isd-primary-blue);
	box-shadow: 0 12px 28px rgba(10, 49, 95, 0.14);
	color: #fff;
	font-family: var(--isd-body-font);
	font-size: 16px;
	font-weight: 700;
	letter-spacing: 0.02em;
	line-height: 1.3;
	text-align: center;
	text-decoration: none;
	transition:
		background-color 0.2s var(--isd-ease),
		border-color 0.2s var(--isd-ease),
		box-shadow 0.2s var(--isd-ease),
		transform 0.2s var(--isd-ease);
}

.isd-single__why-choose-cta:hover,
.isd-single__why-choose-cta:focus {
	border-color: var(--isd-primary-blue-dark);
	background: var(--isd-primary-blue-dark);
	color: #fff;
	transform: translateY(-2px);
}

.isd-single__why-choose-cta:visited {
	color: #fff;
}

.isd-single__why-choose-cta:focus-visible {
	outline: 3px solid var(--isd-primary-blue);
	outline-offset: 3px;
}

.isd-single__why-choose-cta .kadence-svg-iconset,
.isd-single__why-choose-cta .kadence-svg-icon {
	display: block;
	width: 18px;
	height: 18px;
	flex: 0 0 auto;
}

.isd-single__why-choose-media {
	display: flex;
	align-items: center;
	justify-content: center;
	min-width: 0;
	aspect-ratio: 4 / 3;
	background:
		radial-gradient(circle at 54% 42%, rgba(10, 49, 95, 0.055), transparent 55%),
		linear-gradient(145deg, rgba(247, 249, 252, 0.5), rgba(255, 255, 255, 0));
}

.isd-single__why-choose-image {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: contain;
}

@media (max-width: 1024px) {
	.isd-single__why-choose-inner {
		grid-template-columns: minmax(0, 1fr);
		gap: clamp(30px, 5vw, 48px);
	}

	.isd-single__why-choose-copy {
		max-width: var(--isd-prose);
	}

	.isd-single__why-choose-media {
		width: min(100%, 760px);
		margin-inline: auto;
	}
}

@media (max-width: 560px) {
	.isd-single__why-choose-eyebrow {
		gap: 14px;
		font-size: 12px;
	}

	.isd-single__why-choose-eyebrow::after {
		width: 44px;
	}

	.isd-single__why-choose-title {
		font-size: clamp(1.8rem, 9vw, 2.4rem);
	}

	.isd-single__why-choose-cta {
		width: 100%;
	}

	.isd-single__why-choose-media {
		aspect-ratio: 5 / 4;
	}
}

/* -------------------------------------------------------------------------
   Kadence WooCommerce reset

   The gallery deliberately carries WooCommerce's own class names — `images`,
   `flex-control-nav` / `flex-control-thumbs`, `woocommerce-product-gallery*`,
   `wp-post-image` — because that is how the variation script finds and swaps
   the product image. See ISD_Gallery for the contract.

   Those are also precisely the names Kadence's 141kb woocommerce.min.css
   styles for the native two-column, flexslider gallery, at specificities this
   sheet cannot beat with plain class selectors. Every rule below neutralises
   one named Kadence rule; the selectors are built to out-specify it rather
   than reaching for !important. Each is annotated with what it is undoing and
   what that rule did to this layout.

   If Kadence's stylesheet changes, re-derive this list rather than adding to
   it blindly: scan woocommerce.min.css for rules whose rightmost compound is
   one of the class names above.
   ---------------------------------------------------------------------- */

/*
 * `.woocommerce div.product div.images { float:left; width:48% }`
 * — the gallery is a grid item here, so 48% simply made the spotlight a bit
 * under half the width it should be. This was the small image.
 * Also `{ margin-bottom:1em; padding-bottom:1em }`.
 */
.woocommerce div.product div.images.isd-gallery {
	float: none;
	width: 100%;
	margin: 0;
	padding: 0;
}

/*
 * `.woocommerce div.product div.images img { height:auto; margin:0 auto }`
 * — forced the spotlight image to its intrinsic height, so it never filled
 * the square stage.
 */
.woocommerce div.product div.images.isd-gallery .isd-gallery__image {
	height: 100%;
	margin: 0;
}

/*
 * `... .woocommerce-product-gallery__wrapper { transition: all … .5s }` plus a
 * clearfix `::after`. The transition on `all` animated our own layout changes;
 * the clearfix added a stray table box inside the stage.
 */
.woocommerce div.product div.images.isd-gallery .isd-gallery__viewport {
	height: 100%;
	transition: none;
}

.woocommerce div.product div.images.isd-gallery .isd-gallery__viewport::after {
	content: none;
}

/*
 * `... .flex-control-thumbs { display:inline-flex; flex-wrap:wrap; width:100%;
 * max-width:94%; position:relative; left:50%; transform:translate(-50%,0);
 * margin-top:-32px; overflow:hidden; justify-content:center }`
 * — this is the native horizontal thumbnail strip. Against a vertical rail it
 * wrapped the thumbnails into extra columns, shifted the whole list sideways
 * by half its width, and pulled it up over the spotlight.
 */
.woocommerce div.product div.images.isd-gallery .isd-gallery__rail {
	display: flex;
	flex-wrap: nowrap;
	justify-content: flex-start;
	width: auto;
	max-width: none;
	margin: 0;
	padding: 0;
	transform: none;
	left: auto;
	/*
	 * These three have to live at this specificity, not on the plain
	 * .isd-gallery__rail rule: Kadence sets `position: relative` and
	 * `overflow: hidden` on the same selector. Losing `position` would leave
	 * the rail in flow, so it would size the grid row instead of being sized
	 * by it — the spotlight-height behaviour depends on this. Losing
	 * `overflow` would clip the extra thumbnails instead of scrolling them.
	 */
	position: absolute;
	inset: 0;
	overflow-x: hidden;
	overflow-y: auto;
}

/*
 * `... .flex-control-thumbs li { width:60px; height:65px; display:inline-flex;
 * background:… }`, plus `:first-child` and `:nth-child(6|7|9)` variants that
 * set `width:65px; padding-left:5px`. The fixed 60/65px box is what pinned the
 * thumbnails to one size, and the nth-child rules are what pushed individual
 * thumbnails out of line with the rest.
 */
.woocommerce div.product div.images.isd-gallery .isd-gallery__rail li.isd-gallery__thumb {
	display: block;
	width: auto;
	height: auto;
	padding: 0;
	background: none;
}

/*
 * `... .flex-control-thumbs li img { opacity:.5; border-top:5px solid;
 * border-right:5px solid }` and its `:hover` / `.flex-active` pair at a
 * specificity above ours — the borders cropped the thumbnails and the opacity
 * fought this sheet's own active state.
 */
.woocommerce div.product div.images.isd-gallery .isd-gallery__rail li.isd-gallery__thumb img {
	border: 0;
	margin: 0;
	opacity: 0.72;
	/*
	 * `.woocommerce div.product div.images img { height: auto }` also wins
	 * against the plain thumbnail rule, which left every rail image at its
	 * intrinsic height instead of filling its square.
	 */
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.woocommerce div.product div.images.isd-gallery .isd-gallery__rail li.isd-gallery__thumb .isd-gallery__thumb-btn:hover img,
.woocommerce div.product div.images.isd-gallery .isd-gallery__rail li.is-active .isd-gallery__thumb-btn img,
.woocommerce div.product div.images.isd-gallery .isd-gallery__rail li.isd-gallery__thumb.is-active img {
	opacity: 1;
}

/*
 * `.woocommerce div.product div.summary { float:right; width:48%; clear:none;
 * margin-bottom:2em }` — the same 48% applied to the summary column, which is
 * what left the empty band down the right of the page.
 */
.woocommerce div.product div.summary.isd-single__summary {
	float: none;
	width: 100%;
	margin-bottom: 0;
}

/*
 * `.entry-summary { margin: var(--global-xs-spacing) 0 0 }` in
 * kadence-content — a top margin that pushed the summary column out of line
 * with the top of the gallery.
 */
.isd-single .entry-summary.isd-single__summary {
	margin-top: 0;
}

/*
 * Kadence styles bare `button` as a filled brand button — background, padding,
 * radius, shadow, transition — and its `:hover`, `:focus` and `:active` rules
 * sit at [0,1,1], which outranks a plain class selector. Every control in this
 * gallery and its viewer is a <button>, so without these the thumbnails turn
 * brand blue with a drop shadow the moment the pointer touches them. Each rule
 * below re-states the component's own resting or hover colours at a
 * specificity that wins.
 */
.isd-gallery__thumb-btn:hover,
.isd-gallery__thumb-btn:focus,
.isd-gallery__thumb-btn:active {
	background: var(--isd-tile);
	box-shadow: none;
}

.isd-gallery__arrow:hover,
.isd-gallery__arrow:focus,
.isd-gallery__arrow:active {
	background: var(--isd-primary-blue);
	color: #fff;
	box-shadow: 0 6px 22px rgba(10, 49, 95, 0.22);
}

.isd-gallery__play:hover,
.isd-gallery__play:focus,
.isd-gallery__play:active {
	background: var(--isd-primary-blue-dark);
	box-shadow: none;
}

.isd-viewer__btn:hover,
.isd-viewer__btn:focus,
.isd-viewer__btn:active {
	background: var(--isd-ink);
	color: #fff;
	box-shadow: 0 2px 10px rgba(10, 49, 95, 0.1);
}

/* -------------------------------------------------------------------------
   Gallery
   ---------------------------------------------------------------------- */

.isd-gallery {
	position: relative;
	/* The coded template omits the stock `style="opacity: 0"`, so the gallery
	   is never waiting on a script to become visible. This holds that true
	   against the inline opacity WooCommerce's ProductGallery still writes on
	   the root when it initialises. */
	opacity: 1 !important;
}

.isd-gallery__layout {
	display: grid;
	grid-template-columns: var(--isd-rail-w) minmax(0, 1fr);
	gap: 16px;
	/* stretch, so the rail wrapper takes the row height the spotlight sets. */
	align-items: stretch;
}

/* Single image or none at all: no rail, so the spotlight takes the full width.
   Keyed off the count the template writes rather than :has(), so a browser
   without :has() support cannot leave an empty 104px column behind. */
.isd-gallery[data-isd-count="0"] .isd-gallery__layout,
.isd-gallery[data-isd-count="1"] .isd-gallery__layout {
	grid-template-columns: minmax(0, 1fr);
}

/* Stacked: the rail becomes a horizontal strip under the spotlight, so it is
   never a tall vertical list on a phone. */
@media (max-width: 782px) {
	.isd-gallery__layout {
		grid-template-columns: minmax(0, 1fr);
	}

	.isd-gallery__stage {
		order: 1;
		justify-self: stretch;
	}

}

/* --- Rail --------------------------------------------------------------- */

/*
 * The wrapper holds nothing but the absolutely positioned list, so it adds no
 * height of its own: the grid row is sized by the spotlight, the wrapper
 * stretches to it, and the rail is pinned to the wrapper's edges. The rail is
 * therefore exactly as tall as the spotlight whether the product has two
 * images or nineteen, and the overflow scrolls inside it.
 */
.isd-gallery__rail-wrap {
	position: relative;
	min-height: 0;
}

.isd-gallery__rail {
	position: absolute;
	inset: 0;
	display: flex;
	flex-direction: column;
	gap: 10px;
	margin: 0;
	padding: 0;
	list-style: none;
	overflow-y: auto;
	overflow-x: hidden;
	overscroll-behavior: contain;
	scrollbar-width: none;
	-ms-overflow-style: none;
}

.isd-gallery__rail::-webkit-scrollbar {
	display: none;
	width: 0;
	height: 0;
}

.isd-gallery__thumb {
	margin: 0;
	list-style: none;
	flex: 0 0 auto;
}

/* Override the desktop rail reset at its own specificity. The mobile rail
   must occupy a real grid row so it cannot overlap the summary or spotlight. */
@media (max-width: 782px) {
	.isd-gallery__rail-wrap {
		order: 2;
		position: static;
		min-width: 0;
	}

	.woocommerce div.product div.images.isd-gallery .isd-gallery__rail {
		position: static;
		flex-direction: row;
		overflow-x: auto;
		overflow-y: hidden;
		padding: 3px;
	}

	.isd-gallery__thumb {
		flex: 0 0 var(--isd-rail-w);
	}
}

.isd-gallery__thumb-btn {
	position: relative;
	display: block;
	width: 100%;
	padding: 0;
	border: 0;
	border-radius: 10px;
	background: var(--isd-tile);
	cursor: pointer;
	overflow: hidden;
	aspect-ratio: 1 / 1;
	transition: box-shadow 0.24s var(--isd-ease), transform 0.24s var(--isd-ease);
}

.isd-gallery__thumb-btn::after {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: 10px;
	box-shadow: inset 0 0 0 1px rgba(10, 49, 95, 0.08);
	transition: box-shadow 0.24s var(--isd-ease);
	pointer-events: none;
}

.isd-gallery__thumb-btn img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	opacity: 0.72;
	transition: opacity 0.24s var(--isd-ease), transform 0.5s var(--isd-ease);
}

.isd-gallery__thumb-btn:hover img {
	opacity: 1;
	transform: scale(1.06);
}

.isd-gallery__thumb.is-active .isd-gallery__thumb-btn img {
	opacity: 1;
}

.isd-gallery__thumb.is-active .isd-gallery__thumb-btn::after {
	box-shadow: inset 0 0 0 2px var(--isd-navy);
}

.isd-gallery__thumb-btn:focus-visible {
	outline: 2px solid var(--isd-navy);
	outline-offset: 2px;
}

/* Marks a thumbnail whose image has a video attached. */
.isd-gallery__thumb-video {
	position: absolute;
	right: 6px;
	bottom: 6px;
	width: 18px;
	height: 18px;
	border-radius: 50%;
	background: rgba(10, 49, 95, 0.86);
}

.isd-gallery__thumb-video::after {
	content: "";
	position: absolute;
	top: 50%;
	left: 52%;
	transform: translate(-50%, -50%);
	border-top: 4px solid transparent;
	border-bottom: 4px solid transparent;
	border-left: 6px solid #fff;
}

/* --- Spotlight ---------------------------------------------------------- */

.isd-gallery__stage {
	position: relative;
	border-radius: 14px;
	background: var(--isd-tile);
	overflow: hidden;
	aspect-ratio: 1 / 1;
	/* Square, and never taller than the viewport — capping width by the same
	   number is what keeps it square when the height is the binding limit. */
	max-width: var(--isd-stage-max, none);
	max-height: var(--isd-stage-max, none);
	justify-self: start;
	width: 100%;
	/* start, not stretch: the spotlight's own aspect ratio decides the row
	   height, and the rail then follows it. */
	align-self: start;
}

.isd-gallery__viewport {
	margin: 0;
	padding: 0;
	height: 100%;
}

.isd-gallery__slide {
	height: 100%;
}

.isd-gallery__link {
	display: block;
	height: 100%;
	cursor: zoom-in;
}

.isd-gallery__image {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: contain;
	transition: opacity 0.26s var(--isd-ease), transform 0.26s var(--isd-ease);
}

/* Crossfade while the new source is applied. */
.isd-gallery.is-swapping .isd-gallery__image {
	opacity: 0;
	transform: scale(1.02);
}

/* 48 published products have no image at all; the placeholder has to read as
   deliberate rather than broken. */
.isd-gallery__slide--placeholder {
	display: flex;
	align-items: center;
	justify-content: center;
}

.isd-gallery__slide--placeholder img {
	width: 100%;
	height: 100%;
	object-fit: contain;
	opacity: 0.5;
}

/* --- Arrows ------------------------------------------------------------- */

.isd-gallery__arrow {
	position: absolute;
	top: 50%;
	z-index: 3;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: #fff;
	color: var(--isd-ink);
	box-shadow: 0 4px 18px rgba(10, 49, 95, 0.16);
	cursor: pointer;
	opacity: 0;
	transition:
		opacity 0.3s var(--isd-ease),
		transform 0.3s var(--isd-ease),
		background 0.2s var(--isd-ease);
}

/* Parked outside the frame, so they travel inward rather than just fading. */
.isd-gallery__arrow--prev {
	left: 14px;
	transform: translate(-14px, -50%);
}

.isd-gallery__arrow--next {
	right: 14px;
	transform: translate(14px, -50%);
}

.isd-gallery__stage:hover .isd-gallery__arrow,
.isd-gallery__arrow:focus-visible {
	opacity: 1;
	transform: translate(0, -50%);
}

.isd-gallery__arrow:hover {
	background: var(--isd-primary-blue);
	color: #fff;
}

.isd-gallery__arrow:focus-visible {
	outline: 2px solid var(--isd-primary-blue);
	outline-offset: 2px;
}

/* Touch has no hover state to reveal them with. */
@media (hover: none) {
	.isd-gallery__arrow {
		opacity: 1;
		transform: translate(0, -50%);
	}
}

/* --- Video -------------------------------------------------------------- */

.isd-gallery__play {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	z-index: 4;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 68px;
	height: 68px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: var(--isd-primary-blue);
	cursor: pointer;
	transition: background 0.2s var(--isd-ease), transform 0.2s var(--isd-ease);
}

.isd-gallery__play:hover,
.isd-gallery__play:focus-visible {
	background: var(--isd-primary-blue-dark);
	transform: translate(-50%, -50%) scale(1.06);
}

.isd-gallery__play:focus-visible {
	outline: 3px solid #fff;
	outline-offset: 2px;
}

.isd-gallery__play-icon {
	display: block;
	width: 0;
	height: 0;
	margin-left: 5px;
	border-top: 12px solid transparent;
	border-bottom: 12px solid transparent;
	border-left: 20px solid #fff;
}

.isd-gallery__stage.is-playing {
	background: #000;
}

.isd-gallery__stage.is-playing .isd-gallery__viewport,
.isd-gallery__stage.is-playing .isd-gallery__arrow,
.isd-gallery__stage.is-playing .isd-gallery__play {
	display: none;
}

.isd-gallery__video {
	display: block;
	width: 100%;
	height: 100%;
	border: 0;
}

.isd-single .onsale {
	position: absolute;
	top: 14px;
	left: 14px;
	z-index: 5;
	margin: 0;
	padding: 5px 12px;
	border-radius: 999px;
	background: var(--isd-primary-blue);
	color: #fff;
	font-size: 12px;
	font-weight: 700;
	letter-spacing: 0.04em;
	text-transform: uppercase;
}

/* -------------------------------------------------------------------------
   Full screen viewer
   ---------------------------------------------------------------------- */

.isd-viewer-open {
	overflow: hidden;
}

.isd-viewer {
	position: fixed;
	inset: 0;
	z-index: 9999;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	background: #fff;
	opacity: 0;
	transition: opacity 0.22s var(--isd-ease);
}

.isd-viewer.is-open {
	opacity: 1;
}

.isd-viewer__frame {
	display: flex;
	align-items: center;
	justify-content: center;
	flex: 1 1 auto;
	width: 100%;
	min-height: 0;
	padding: 4vh 4vw 0;
}

.isd-viewer__image {
	display: block;
	/* Natural dimensions are applied inline as a further cap: most originals
	   in this catalogue are ~1024px square, and scaling past that only makes
	   the image soft. */
	max-width: min(92vw, 1100px);
	max-height: min(84vh, 1100px);
	width: auto;
	height: auto;
	object-fit: contain;
	transform: scale(0.98);
	transition: transform 0.22s var(--isd-ease);
}

.isd-viewer.is-open .isd-viewer__image {
	transform: scale(1);
}

.isd-viewer__controls {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 16px;
	flex: 0 0 auto;
	padding: 24px 0 32px;
}

.isd-viewer__btn {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 48px;
	height: 48px;
	padding: 0;
	border: 1px solid var(--isd-line);
	border-radius: 50%;
	background: #fff;
	color: var(--isd-ink);
	cursor: pointer;
	box-shadow: 0 2px 10px rgba(10, 49, 95, 0.1);
	transition: background 0.2s var(--isd-ease), color 0.2s var(--isd-ease), transform 0.2s var(--isd-ease);
}

.isd-viewer__btn:hover {
	background: var(--isd-ink);
	color: #fff;
	transform: translateY(-2px);
}

.isd-viewer__btn:focus-visible {
	outline: 2px solid var(--isd-navy);
	outline-offset: 3px;
}

/* -------------------------------------------------------------------------
   Summary column
   ---------------------------------------------------------------------- */

.isd-single__summary .product_title {
	margin: 0 0 8px;
	padding-bottom: 0;
	border-bottom: 0;
	font-family: var(--isd-heading-font);
	font-size: clamp(1.75rem, 2.4vw, 2.75rem);
	font-weight: 800;
	line-height: 1.2;
	color: var(--isd-ink);
	overflow-wrap: anywhere;
}

.isd-single__summary .product_meta {
	margin: 0 0 16px;
	color: var(--isd-muted);
	font-size: 14px;
}

.isd-single__summary .product_meta > span {
	display: block;
	margin-bottom: 3px;
}

.isd-single__summary .woocommerce-product-rating {
	margin: 0 0 6px;
}

.isd-overview__sku {
	margin: 0 0 12px;
	color: var(--isd-muted);
	font-size: 15px;
	line-height: 1.45;
	overflow-wrap: anywhere;
}

.isd-overview__sku span {
	font-weight: 500;
}

.isd-single__price {
	min-height: 34px;
}

.isd-single__summary .price {
	display: block;
	margin: 0 0 16px;
	color: var(--isd-primary-blue-dark);
	font-size: clamp(1.35rem, 2vw, 1.75rem);
	font-weight: 800;
	line-height: 1.2;
}

.isd-single__summary .price del {
	opacity: 0.6;
	font-weight: 500;
}

.isd-single__summary .price ins {
	text-decoration: none;
}

.isd-single__summary .isd-quote-price {
	color: var(--isd-primary-blue-dark);
	font-size: 20px;
	font-weight: 700;
}

.isd-single__summary form.cart {
	margin: 24px 0 18px;
}

/* --- Variation choices -------------------------------------------------

	WooCommerce's select fields stay in the DOM as the authoritative form
	controls and as the no-JavaScript fallback. Once the enhancement has built
	its buttons, only the visual presentation changes. */

.isd-single__summary .variations {
	width: 100%;
	margin: 0 0 18px;
	border: 0;
}

.isd-single__summary .isd-variation-form--enhanced .variations,
.isd-single__summary .isd-variation-form--enhanced .variations tbody,
.isd-single__summary .isd-variation-form--enhanced .variations tr,
.isd-single__summary .isd-variation-form--enhanced .variations th,
.isd-single__summary .isd-variation-form--enhanced .variations td {
	display: block;
	width: 100%;
}

.isd-single__summary .isd-variation-form--enhanced .variations tr + tr {
	margin-top: 24px;
}

.isd-single__summary .isd-variation-form--enhanced .variations th.label {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 16px;
	padding: 0 0 11px;
	text-align: left;
}

.isd-single__summary .isd-variation-form--enhanced .variations th.label label {
	margin: 0;
	color: var(--isd-ink);
	font-family: var(--isd-heading-font);
	font-size: clamp(16px, 1.4vw, 20px);
	font-weight: 800;
	line-height: 1.25;
	letter-spacing: 0.02em;
	text-transform: uppercase;
}

.isd-variation-picker__current {
	color: var(--isd-muted);
	font-size: 13px;
	font-weight: 600;
	line-height: 1.4;
	text-align: right;
}

.isd-single__summary .isd-variation-form--enhanced .variations td.value {
	position: relative;
	padding: 0;
}

.isd-single__summary .isd-variation-form--enhanced .variations select.isd-variation-select--enhanced {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	border: 0;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	overflow: hidden;
	white-space: nowrap;
}

.isd-variation-picker {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(220px, 100%), 1fr));
	gap: 12px;
	align-items: start;
}

.isd-variation-card {
	min-width: 0;
	border-radius: 13px;
	transition: border-color 0.2s var(--isd-ease), box-shadow 0.2s var(--isd-ease);
}

.isd-single__summary button.isd-variation-option {
	position: relative;
	display: grid;
	grid-template-columns: 24px minmax(0, 1fr);
	gap: 13px;
	align-items: start;
	box-sizing: border-box;
	min-height: 112px;
	padding: 23px 20px 20px;
	border: 1px solid #cfd7e2;
	border-radius: 13px;
	background: #fff;
	box-shadow: 0 5px 18px rgba(10, 49, 95, 0.045);
	color: var(--isd-ink);
	text-align: left;
	cursor: pointer;
	overflow: hidden;
	transition:
		background 0.2s var(--isd-ease),
		border-color 0.2s var(--isd-ease),
		box-shadow 0.2s var(--isd-ease),
		color 0.2s var(--isd-ease),
		transform 0.2s var(--isd-ease);
	width: 100%;
}

.isd-single__summary button.isd-variation-option::before {
	position: absolute;
	inset: 0 0 auto;
	height: 4px;
	background: var(--isd-primary-blue);
	content: "";
	opacity: 0;
	transform: scaleX(0.45);
	transform-origin: left;
	transition: opacity 0.2s var(--isd-ease), transform 0.2s var(--isd-ease);
}

.isd-single__summary button.isd-variation-option:hover {
	border-color: rgba(10, 49, 95, 0.5);
	box-shadow: 0 8px 24px rgba(10, 49, 95, 0.1);
	transform: translateY(-2px);
}

.isd-single__summary button.isd-variation-option:focus-visible {
	outline: 3px solid var(--isd-primary-blue);
	outline-offset: 3px;
}

.isd-single__summary button.isd-variation-option.is-selected {
	border: 2px solid var(--isd-navy);
	background: #fff;
	box-shadow:
		0 0 0 3px rgba(10, 49, 95, 0.1),
		0 8px 24px rgba(10, 49, 95, 0.13);
	color: var(--isd-ink);
}

.isd-single__summary button.isd-variation-option.is-selected::before {
	opacity: 0;
}

/* A variation with a description is always one continuous card. The native
	select remains empty until the customer chooses an option, while the
	collapsed configuration brief stays discoverable from the initial state. */
.isd-variation-card.has-brief {
	border: 1px solid #cfd7e2;
	background: #fff;
	box-shadow: 0 5px 18px rgba(10, 49, 95, 0.045);
	overflow: hidden;
}

.isd-single__summary .isd-variation-card.has-brief > button.isd-variation-option {
	border: 0;
	border-radius: 12px 12px 0 0;
	box-shadow: none;
}

.isd-single__summary .isd-variation-card.has-brief > button.isd-variation-option:hover {
	background: #f9fafc;
	box-shadow: none;
	transform: none;
}

.isd-variation-card.is-selected.has-brief {
	border: 2px solid var(--isd-navy);
	background: #fff;
	box-shadow:
		0 0 0 3px rgba(10, 49, 95, 0.1),
		0 8px 24px rgba(10, 49, 95, 0.13);
}

.isd-single__summary .isd-variation-card.is-selected.has-brief > button.isd-variation-option {
	border: 0;
	border-radius: 11px 11px 0 0;
	background: #fff;
	box-shadow: none;
	transform: none;
}

.isd-single__summary .isd-variation-card.is-selected.has-brief > button.isd-variation-option:hover {
	background: #f9fafc;
	box-shadow: none;
	transform: none;
}

.isd-variation-option__indicator {
	position: relative;
	display: block;
	width: 22px;
	height: 22px;
	margin-top: 1px;
	border: 2px solid #93a0b3;
	border-radius: 50%;
	background: #fff;
	transition: border-color 0.2s var(--isd-ease), background 0.2s var(--isd-ease);
}

.isd-variation-option__indicator::after {
	position: absolute;
	inset: 4px;
	border-radius: 50%;
	background: #fff;
	content: "";
	opacity: 0;
	transform: scale(0.55);
	transition: opacity 0.2s var(--isd-ease), transform 0.2s var(--isd-ease);
}

.isd-variation-option.is-selected .isd-variation-option__indicator {
	border-color: var(--isd-navy);
	background: #fff;
}

.isd-variation-option.is-selected .isd-variation-option__indicator::after {
	background: var(--isd-navy);
	opacity: 1;
	transform: scale(1);
}

.isd-variation-option__content {
	display: flex;
	min-width: 0;
	height: 100%;
	flex-direction: column;
}

.isd-variation-option__title {
	font-size: 16px;
	font-weight: 800;
	line-height: 1.35;
	overflow-wrap: anywhere;
}

.isd-variation-option__meta {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: 10px;
	margin-top: auto;
	padding-top: 14px;
}

.isd-variation-option__price {
	color: var(--isd-primary-blue-dark);
	font-size: 17px;
	font-weight: 800;
	line-height: 1.2;
}

.isd-variation-option__availability {
	color: var(--isd-muted);
	font-size: 12px;
	font-weight: 650;
	line-height: 1.3;
}

.isd-variation-option.is-selected .isd-variation-option__availability {
	color: var(--isd-muted);
}

/* --- In-card configuration brief -------------------------------------- */

.isd-variation-brief {
	display: none;
	border-top: 1px dashed rgba(10, 49, 95, 0.24);
	border-radius: 0 0 11px 11px;
	background: #f8fafc;
}

.isd-variation-card.has-brief > .isd-variation-brief {
	display: block;
}

.isd-single__summary button.isd-variation-brief__toggle {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	width: 100%;
	min-height: 50px;
	padding: 15px 18px 11px;
	border: 0;
	border-radius: 0 0 10px 10px;
	background: transparent;
	box-shadow: none;
	color: var(--isd-ink);
	text-align: left;
	cursor: pointer;
}

.isd-single__summary button.isd-variation-brief__toggle::before {
	position: absolute;
	top: 7px;
	left: 50%;
	width: 38px;
	height: 3px;
	border-radius: 999px;
	background: color-mix(in srgb, var(--isd-primary-blue) 78%, transparent);
	content: "";
	transform: translateX(-50%);
}

.isd-single__summary button.isd-variation-brief__toggle:hover,
.isd-single__summary button.isd-variation-brief__toggle:focus {
	background: rgba(10, 49, 95, 0.045);
	box-shadow: none;
	color: var(--isd-ink);
}

.isd-single__summary button.isd-variation-brief__toggle:focus-visible {
	outline: 3px solid var(--isd-primary-blue);
	outline-offset: -3px;
}

.isd-variation-brief__heading {
	font-family: var(--isd-heading-font);
	font-size: 11px;
	font-weight: 800;
	line-height: 1.3;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}

.isd-variation-brief__state {
	color: var(--isd-primary-blue-dark);
	font-size: 12px;
	font-weight: 750;
	line-height: 1.3;
	text-decoration: underline;
	text-decoration-color: rgba(10, 49, 95, 0.35);
	text-underline-offset: 3px;
}

.isd-variation-brief__panel {
	display: grid;
	grid-template-rows: 0fr;
	visibility: hidden;
	opacity: 0;
	transition:
		grid-template-rows 0.32s var(--isd-ease),
		opacity 0.22s var(--isd-ease),
		visibility 0s linear 0.32s;
}

.isd-variation-card.is-brief-open .isd-variation-brief__panel {
	grid-template-rows: 1fr;
	visibility: visible;
	opacity: 1;
	transition-delay: 0s;
}

.isd-variation-brief__panel-inner {
	min-height: 0;
	overflow: hidden;
}

.isd-variation-brief__list {
	position: relative;
	margin: 0;
	padding: 5px 18px 20px 44px;
	list-style: none;
}

.isd-variation-brief__list::before {
	position: absolute;
	top: 12px;
	bottom: 27px;
	left: 25px;
	width: 1px;
	background: linear-gradient(to bottom, var(--isd-primary-blue), rgba(23, 105, 255, 0.18));
	content: "";
}

.isd-variation-brief__list li {
	position: relative;
	margin: 0;
	padding: 0 0 10px;
	color: var(--isd-muted);
	font-size: 13px;
	font-weight: 550;
	line-height: 1.45;
	opacity: 0;
	transform: translateY(-4px);
	transition: opacity 0.22s var(--isd-ease), transform 0.22s var(--isd-ease);
}

.isd-variation-brief__list li:last-child {
	padding-bottom: 0;
}

.isd-variation-brief__list li::before {
	position: absolute;
	top: 0.48em;
	left: -23px;
	width: 8px;
	height: 8px;
	border: 2px solid #fff;
	border-radius: 50%;
	background: var(--isd-primary-blue);
	box-shadow: 0 0 0 1px var(--isd-navy);
	content: "";
}

.isd-variation-card.is-brief-open .isd-variation-brief__list li {
	opacity: 1;
	transform: translateY(0);
}

.isd-variation-card.is-brief-open .isd-variation-brief__list li:nth-child(2) { transition-delay: 0.025s; }
.isd-variation-card.is-brief-open .isd-variation-brief__list li:nth-child(3) { transition-delay: 0.05s; }
.isd-variation-card.is-brief-open .isd-variation-brief__list li:nth-child(4) { transition-delay: 0.075s; }
.isd-variation-card.is-brief-open .isd-variation-brief__list li:nth-child(5) { transition-delay: 0.1s; }
.isd-variation-card.is-brief-open .isd-variation-brief__list li:nth-child(n + 6) { transition-delay: 0.125s; }

/* WooCommerce continues rendering its native description for no-JavaScript
	fallback. Hide that duplicate only after a brief was built successfully. */
.isd-single__summary .isd-variation-descriptions--embedded .woocommerce-variation-description {
	display: none;
}

.isd-single__summary button.isd-variation-option.is-unavailable,
.isd-single__summary button.isd-variation-option:disabled {
	border-color: var(--isd-line);
	background: #f4f5f7;
	box-shadow: none;
	color: #8893a4;
	cursor: not-allowed;
	opacity: 0.72;
	transform: none;
}

.isd-single__summary button.isd-variation-option.is-unavailable .isd-variation-option__indicator,
.isd-single__summary button.isd-variation-option:disabled .isd-variation-option__indicator {
	border-color: #b8c0cb;
	background: transparent;
}

.isd-single__summary .isd-variation-form--enhanced .reset_variations {
	display: inline-flex;
	min-height: 38px;
	align-items: center;
	margin-top: 8px;
	color: var(--isd-navy);
	font-size: 13px;
	font-weight: 700;
	text-decoration: underline;
	text-underline-offset: 3px;
}

.isd-single__summary .isd-variation-form--enhanced .reset_variations:hover,
.isd-single__summary .isd-variation-form--enhanced .reset_variations:focus-visible {
	color: var(--isd-primary-blue-dark);
}

.isd-single__summary .woocommerce-variation-description {
	margin: 4px 0 18px;
	padding: 15px 17px;
	border-left: 3px solid var(--isd-primary-blue);
	background: #f7f8fa;
	color: var(--isd-muted);
}

.isd-single__summary .woocommerce-variation-description > * {
	margin-block: 0;
	font-size: 14px;
	line-height: 1.65;
}

.isd-single__summary form.cart:not(.variations_form):not(.grouped_form),
.isd-single__summary .woocommerce-variation-add-to-cart,
.isd-single__disabled-cart {
	display: grid;
	grid-template-columns: minmax(132px, 0.34fr) minmax(0, 1fr);
	gap: 12px;
	align-items: stretch;
}

.isd-single__disabled-cart {
	margin: 24px 0 12px;
}

.isd-single__summary .quantity {
	display: grid;
	grid-template-columns: 42px minmax(42px, 1fr) 42px;
	align-items: stretch;
	min-height: 56px;
	margin: 0;
	border: 1px solid var(--isd-line);
	border-radius: 999px;
	background: #fff;
	overflow: hidden;
}

.isd-single__summary .quantity .qty {
	width: 100%;
	min-width: 0;
	height: 100%;
	padding: 0 4px;
	border: 0;
	background: transparent;
	color: var(--isd-ink);
	font-size: 17px;
	font-weight: 700;
	text-align: center;
	box-shadow: none;
	appearance: textfield;
}

.isd-single__summary .quantity .qty::-webkit-inner-spin-button,
.isd-single__summary .quantity .qty::-webkit-outer-spin-button {
	margin: 0;
	appearance: none;
}

.isd-single__summary .isd-quantity-button,
.isd-single__summary .quantity .plus,
.isd-single__summary .quantity .minus {
	display: grid;
	place-items: center;
	min-width: 0;
	padding: 0;
	border: 0;
	background: transparent;
	color: var(--isd-muted);
	font: 400 25px/1 var(--isd-body-font);
	cursor: pointer;
}

.isd-single__summary .isd-quantity-button:hover,
.isd-single__summary .isd-quantity-button:focus-visible,
.isd-single__summary .quantity .plus:hover,
.isd-single__summary .quantity .plus:focus-visible,
.isd-single__summary .quantity .minus:hover,
.isd-single__summary .quantity .minus:focus-visible {
	background: #f4f6f8;
	color: var(--isd-ink);
}

.isd-single__summary .quantity.is-disabled {
	background: #f4f4f4;
	opacity: 0.72;
}

.isd-single__summary .quantity :disabled {
	cursor: not-allowed;
}

.isd-single__summary .single_add_to_cart_button,
.isd-single__summary .isd-single__enquire-btn,
.isd-single__summary .isd-single__buy-now {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 0;
	min-height: 56px;
	padding: 13px clamp(18px, 2vw, 30px);
	border: 1px solid transparent;
	border-radius: 999px;
	font: 750 clamp(15px, 1.1vw, 17px)/1.25 var(--isd-body-font);
	text-align: center;
	text-decoration: none;
	transition:
		background 0.2s var(--isd-ease),
		border-color 0.2s var(--isd-ease),
		box-shadow 0.2s var(--isd-ease),
		color 0.2s var(--isd-ease);
}

.isd-single__summary .single_add_to_cart_button {
	background: #ececec;
	color: #050505;
	font-weight: 750;
}

.isd-single__summary .single_add_to_cart_button:hover,
.isd-single__summary .single_add_to_cart_button:focus-visible {
	background: #dedede;
	color: #050505;
}

.isd-single__summary .single_add_to_cart_button.disabled,
.isd-single__summary .single_add_to_cart_button:disabled,
.isd-single__summary .isd-single__buy-now:disabled {
	border-color: #e2e2e2;
	background: #ececec;
	color: #8b8b8b;
	opacity: 1;
	cursor: not-allowed;
	box-shadow: none;
}

.isd-single__summary .single_add_to_cart_button.disabled:hover,
.isd-single__summary .single_add_to_cart_button:disabled:hover,
.isd-single__summary .isd-single__buy-now:disabled:hover {
	border-color: #e2e2e2;
	background: #ececec;
	color: #8b8b8b;
}

.isd-single__purchase-actions {
	display: grid;
	grid-column: 1 / -1;
	gap: 12px;
	margin-top: 2px;
}

.isd-single__purchase-actions.is-enquiry-only {
	margin: 24px 0 18px;
}

.isd-single__enquiry-prompt {
	margin: 6px 0 -4px;
	color: var(--isd-muted);
	font-size: 14px;
	font-weight: 650;
	line-height: 1.4;
}

.isd-single__summary .isd-single__enquire-btn {
	border-color: var(--isd-primary-blue);
	background: #fff;
	color: var(--isd-primary-blue);
}

.isd-single__summary .isd-single__enquire-btn:hover,
.isd-single__summary .isd-single__enquire-btn:focus-visible {
	border-color: var(--isd-primary-blue-dark);
	background: var(--isd-primary-blue-dark);
	color: #fff;
}

.isd-single__summary .isd-single__buy-now {
	width: 100%;
	border-color: #050505;
	background: #050505;
	color: #fff;
}

.isd-single__summary .isd-single__buy-now:hover,
.isd-single__summary .isd-single__buy-now:focus-visible {
	border-color: #222;
	background: #222;
	color: #fff;
}

.isd-single__summary .woocommerce-variation-price {
	display: none;
}

.isd-single__product-details {
	width: 100%;
	margin: 0 0 18px;
}

/* JavaScript only adds
   the clamp when the natural content is taller than the configured limit, so
   the full copy remains available when scripting is disabled. */
.isd-single__description {
	position: relative;
	max-width: var(--isd-prose);
	margin-top: 0;
}

.isd-single__description-viewport {
	position: relative;
}

.isd-single__description-content {
	color: var(--isd-muted);
	font-size: 16px;
	line-height: 1.65;
}

.isd-single__description-content > *:first-child {
	margin-top: 0;
}

.isd-single__description-content > *:last-child {
	margin-bottom: 0;
}

.isd-single__description-content iframe,
.isd-single__description-content img {
	max-width: 100%;
}

.isd-single__description-content .rte__video-wrapper {
	position: relative;
	aspect-ratio: 16 / 9;
}

.isd-single__description-content .rte__video-wrapper iframe {
	width: 100%;
	height: 100%;
}

.isd-single__description.is-collapsible:not(.is-expanded) .isd-single__description-viewport {
	max-height: var(--isd-description-limit, 11.55em);
	overflow: hidden;
}

.isd-single button.isd-single__description-toggle {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
	margin: 6px 0 0;
	padding: 6px 0;
	border: 0;
	background: transparent;
	box-shadow: none;
	color: var(--isd-navy);
	font: 700 14px/1.4 var(--isd-body-font);
	text-decoration: underline;
	text-underline-offset: 3px;
	cursor: pointer;
}

.isd-single button.isd-single__description-toggle[hidden] {
	display: none;
}

.isd-single button.isd-single__description-toggle:hover,
.isd-single button.isd-single__description-toggle:focus,
.isd-single button.isd-single__description-toggle:active {
	background: transparent;
	box-shadow: none;
	color: var(--isd-primary-blue-dark);
}

.isd-single button.isd-single__description-toggle:focus-visible {
	outline: 2px solid var(--isd-navy);
	outline-offset: 3px;
}

/* In the compact state the disclosure reads as the end of the final visible
   line instead of becoming a separate row. The inline-start gradient clears
   only the text immediately behind the control; the rest of the last line
   stays crisp. Expanded copy returns to the ordinary button flow above. */
.isd-single__description.is-collapsible:not(.is-expanded) button.isd-single__description-toggle {
	position: absolute;
	z-index: 1;
	inset-block-end: 0;
	inset-inline-end: 0;
	min-height: 26px;
	margin: 0;
	padding: 3px 0 3px 32px;
	background: linear-gradient(to right, rgba(255, 255, 255, 0), #fff 27px);
}

.isd-single__description.is-collapsible:not(.is-expanded) button.isd-single__description-toggle::before {
	display: inline-block;
	margin-inline-end: 4px;
	text-decoration: none;
	content: "\2026";
}

.isd-single__description.is-collapsible:not(.is-expanded) button.isd-single__description-toggle:hover,
.isd-single__description.is-collapsible:not(.is-expanded) button.isd-single__description-toggle:focus,
.isd-single__description.is-collapsible:not(.is-expanded) button.isd-single__description-toggle:active {
	background: linear-gradient(to right, rgba(255, 255, 255, 0), #fff 27px);
}

@media (max-width: 560px) {
	.isd-single__description-content { font-size: 15px; }

	.isd-single__summary .isd-variation-form--enhanced .variations th.label {
		align-items: flex-start;
		flex-direction: column;
		gap: 4px;
	}

	.isd-variation-picker__current {
		text-align: left;
	}

	.isd-variation-picker {
		grid-template-columns: minmax(0, 1fr);
	}

	.isd-single__summary button.isd-variation-option {
		min-height: 100px;
		padding: 20px 18px 17px;
	}

	.isd-single__summary button.isd-variation-brief__toggle {
		padding-inline: 16px;
	}

	.isd-variation-brief__list {
		padding-inline: 40px 16px;
	}

	.isd-variation-brief__list::before {
		left: 22px;
	}

	.isd-single__summary form.cart:not(.variations_form):not(.grouped_form),
	.isd-single__summary .woocommerce-variation-add-to-cart,
	.isd-single__disabled-cart {
		grid-template-columns: 126px minmax(0, 1fr);
	}
}

.isd-resources {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: 12px;
	margin: 0 0 30px;
}

.isd-accordion__body .isd-resources {
	margin-bottom: 0;
}

.isd-artwork-card {
	display: grid;
	grid-template-columns: 56px minmax(0, 1fr);
	gap: 0 16px;
	padding: 20px;
	border: 1px solid var(--isd-line);
	border-radius: 16px;
	background: linear-gradient(145deg, #fff 0%, #fdfdfd 100%);
	box-shadow: 0 8px 28px rgba(26, 42, 74, 0.055);
}

.isd-artwork-card__file-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	grid-row: 1;
	width: 56px;
	height: 56px;
	border-radius: 50%;
	background: color-mix(in srgb, var(--isd-primary-blue) 13%, white);
	color: var(--isd-primary-blue-dark);
}

.isd-artwork-card__file-icon svg {
	display: block;
	width: 25px;
	height: 25px;
}

.isd-artwork-card__content {
	min-width: 0;
}

.isd-artwork-card__title {
	margin: 0;
	color: var(--isd-ink);
	font: 750 clamp(15px, 1.35vw, 18px)/1.35 var(--isd-heading-font);
	overflow-wrap: anywhere;
}

.isd-artwork-card__meta {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 6px 9px;
	margin: 4px 0 0;
	color: var(--isd-muted);
	font-size: 13px;
	line-height: 1.45;
}

.isd-artwork-card__meta-divider {
	width: 4px;
	height: 4px;
	border-radius: 50%;
	background: currentColor;
	opacity: 0.7;
}

.isd-artwork-card__description {
	max-width: 68ch;
	margin: 10px 0 0;
	color: var(--isd-muted);
	font-size: 13px;
	line-height: 1.55;
}

.isd-artwork-card__actions {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 150px), 1fr));
	grid-column: 1 / -1;
	gap: 10px;
	margin-top: 18px;
}

.isd-artwork-card__button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 9px;
	min-width: 0;
	min-height: 46px;
	padding: 10px 14px;
	border: 1px solid #d7dde6;
	border-radius: 9px;
	background: #fff;
	box-shadow: 0 1px 2px rgba(26, 42, 74, 0.025);
	color: var(--isd-ink);
	font-size: 13px;
	font-weight: 750;
	line-height: 1.3;
	text-align: center;
	text-decoration: none;
	transition: border-color 0.2s var(--isd-ease), box-shadow 0.2s var(--isd-ease), color 0.2s var(--isd-ease), transform 0.2s var(--isd-ease);
}

.isd-artwork-card__button:hover {
	border-color: color-mix(in srgb, var(--isd-primary-blue) 72%, #d7dde6);
	box-shadow: 0 5px 15px rgba(26, 42, 74, 0.07);
	color: var(--isd-primary-blue-dark);
	transform: translateY(-1px);
}

.isd-artwork-card__button.is-primary {
	border-color: var(--isd-primary-blue);
	background: var(--isd-primary-blue);
	box-shadow: none;
	color: #fff;
}

.isd-artwork-card__button.is-primary:hover {
	border-color: var(--isd-primary-blue-dark);
	background: var(--isd-primary-blue-dark);
	box-shadow: none;
	color: #fff;
}

.isd-artwork-card__button-icon {
	display: flex;
	flex: 0 0 auto;
}

.isd-artwork-card__button-icon svg {
	display: block;
	width: 20px;
	height: 20px;
}

.isd-addons {
	margin: 30px 0 24px;
	container-type: inline-size;
}

.isd-addons__heading {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 8px 16px;
	margin-bottom: 16px;
}

.isd-addons__heading h2 {
	margin: 0;
	color: var(--isd-ink);
	font: 750 21px/1.3 var(--isd-heading-font);
}

.isd-addons__all {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	color: var(--isd-primary-blue-dark);
	font-size: 12px;
	font-weight: 650;
	text-underline-offset: 3px;
}

.isd-addons__all svg {
	width: 16px;
	height: 16px;
}

.isd-addons__grid {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 12px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.isd-addon {
	display: flex;
	flex-direction: column;
	box-sizing: border-box;
	min-width: 0;
	margin: 0;
	padding: 12px;
	border: 1px solid var(--isd-line);
	border-radius: 7px;
	background: #fff;
}

.isd-addon__image {
	display: grid;
	place-items: center;
	aspect-ratio: 1;
	margin: -4px -4px 12px;
	overflow: hidden;
	border-radius: 4px;
	background: #fafbfc;
}

.isd-addon__image img {
	width: 100%;
	height: 100%;
	object-fit: contain;
}

.isd-addon h3 {
	margin: 0 0 8px;
	font: 750 13px/1.4 var(--isd-heading-font);
	overflow-wrap: anywhere;
}

.isd-addon h3 a {
	color: var(--isd-ink);
	text-decoration: none;
}

.isd-addon__description {
	margin: 0 0 14px;
	color: var(--isd-muted);
	font-size: 12px;
	line-height: 1.55;
}

.isd-addon__button {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 40px;
	margin-top: auto;
	padding: 8px;
	border: 1px solid var(--isd-primary-blue);
	border-radius: 4px;
	color: var(--isd-primary-blue-dark);
	font-size: 12px;
	font-weight: 700;
	line-height: 1.4;
	text-align: center;
	text-decoration: none;
}

.isd-addon__button:hover {
	background: var(--isd-primary-blue);
	color: #fff;
}

.isd-applications {
	margin: 28px 0;
	padding: 20px 0 0;
	border-top: 1px solid var(--isd-line);
}

.isd-applications h2 {
	margin: 0 0 14px;
	color: var(--isd-muted);
	font: 700 12px/1.4 var(--isd-heading-font);
	letter-spacing: 0.07em;
	text-transform: uppercase;
}

.isd-applications__list {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin: 0;
	padding: 0;
	list-style: none;
	color: var(--isd-ink);
	font-weight: 700;
}

.isd-applications .isd-applications__list > .isd-application-pill {
	display: inline-flex;
	align-items: center;
	gap: 9px;
	max-width: 100%;
	min-height: 44px;
	margin: 0;
	padding: 10px 16px;
	border: 1px solid var(--isd-line);
	border-radius: 999px;
	background: #fff;
	font-size: 13px;
	line-height: 1.45;
	overflow-wrap: anywhere;
}

.isd-application-pill__check {
	display: flex;
	flex: 0 0 18px;
	color: var(--isd-primary-blue-dark);
}

.isd-application-pill__check svg {
	display: block;
	width: 18px;
	height: 18px;
}

.isd-product-video {
	aspect-ratio: 16 / 9;
	margin-block: 12px;
}

.isd-product-video iframe,
.isd-product-video video {
	display: block;
	width: 100%;
	height: 100%;
	border: 0;
}

.isd-artwork-card__button:focus-visible,
.isd-addon a:focus-visible,
.isd-addons__all:focus-visible {
	outline: 2px solid var(--isd-navy);
	outline-offset: 3px;
}

@container (max-width: 600px) {
	.isd-addons__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

@container (max-width: 480px) {
	.isd-addons__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@container (max-width: 360px) {
	.isd-addons__grid { grid-template-columns: minmax(0, 1fr); }
}

/* On phones the cards become a native scroll-snap carousel. With a fixed
   10px gap, this basis exposes exactly two cards and one third of the next. */
@media (max-width: 700px) {
	.isd-addons__grid {
		display: flex;
		gap: 10px;
		overflow-x: auto;
		overflow-y: hidden;
		scroll-snap-type: x mandatory;
		scrollbar-width: none;
		overscroll-behavior-inline: contain;
		-webkit-overflow-scrolling: touch;
	}

	.isd-addons__grid::-webkit-scrollbar {
		display: none;
	}

	.isd-addon {
		flex: 0 0 calc(42.8571429% - 8.5714286px);
		scroll-snap-align: start;
	}
}

@media (max-width: 600px) {
	.isd-artwork-card {
		grid-template-columns: 46px minmax(0, 1fr);
		gap: 0 12px;
		padding: 16px;
		border-radius: 13px;
	}

	.isd-artwork-card__file-icon {
		width: 46px;
		height: 46px;
	}

	.isd-artwork-card__file-icon svg {
		width: 22px;
		height: 22px;
	}

	.isd-artwork-card__actions {
		grid-template-columns: minmax(0, 1fr);
	}
}

/* Cards respond to the actual summary width, including narrow desktops. */
.isd-single__summary-inner { container-type: inline-size; }

/* --- Reassurance row ---------------------------------------------------
   Renders nothing unless the site supplies copy through
   `isd_single_assurances`; see ISD_Single::assurances(). */

.isd-single__assurances {
	margin: 20px 0 0;
	padding: 18px 0 0;
	border-top: 1px solid var(--isd-line);
	list-style: none;
	display: grid;
	gap: 10px;
}

.isd-single__assurance {
	display: flex;
	align-items: center;
	gap: 10px;
	margin: 0;
	color: var(--isd-muted);
	font-size: 15px;
}

.isd-single__assurance-icon {
	flex: 0 0 auto;
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: var(--isd-primary-blue);
}

/* -------------------------------------------------------------------------
   Bands beneath the summary
   ---------------------------------------------------------------------- */

.isd-section {
	margin: 0 0 clamp(32px, 4vw, 56px);
}

.isd-section__inner {
	padding-block: clamp(28px, 3vw, 44px);
}

.isd-section--upsells {
	background: var(--isd-primary-blue);
	box-shadow: 0 0 0 100vmax var(--isd-primary-blue);
	clip-path: inset(0 -100vmax);
}

.isd-section--related {
	overflow: hidden;
	background:
		radial-gradient(circle at 72% 16%, rgba(10, 49, 95, 0.035), transparent 34%),
		linear-gradient(145deg, #fff 0%, #f7f9fc 100%);
}

.isd-section:has(> .isd-section__inner:empty) {
	display: none;
}

/* -------------------------------------------------------------------------
   Responsive product sections
   One instance moves below desktop media and after mobile accessories.
   ---------------------------------------------------------------------- */

.isd-single__sections-slot:empty {
	display: none;
}

.isd-single__sections {
	margin-top: clamp(24px, 3vw, 36px);
}

/* -------------------------------------------------------------------------
   Accordion

   <details>/<summary>: works with no JavaScript, and keeps the links inside a
   closed panel out of the tab order — which matters because the Artwork
   sections are mostly link lists. isd-single.js only adds the animation.
   ---------------------------------------------------------------------- */

.isd-accordion {
	max-width: 100%;
}

.isd-accordion__item {
	border-bottom: 1px solid var(--isd-line);
}

.isd-accordion__item:first-child {
	border-top: 1px solid var(--isd-line);
}

.isd-accordion__summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 20px;
	padding: 22px 0;
	list-style: none;
	cursor: pointer;
	color: var(--isd-ink);
	font-family: var(--isd-heading-font);
	font-size: clamp(1.1rem, 1.4vw, 1.5rem);
	font-weight: 800;
	line-height: 1.25;
	transition: color 0.2s var(--isd-ease);
}

/* `list-style: none` above covers Firefox; Safari needs the pseudo element. */
.isd-accordion__summary::-webkit-details-marker {
	display: none;
}

.isd-accordion__summary:hover {
	color: var(--isd-navy);
}

.isd-accordion__summary:focus-visible {
	outline: 2px solid var(--isd-navy);
	outline-offset: -2px;
}

/* The + / − mark: two bars, one of which rotates away when the panel opens. */
.isd-accordion__mark {
	position: relative;
	flex: 0 0 auto;
	width: 18px;
	height: 18px;
}

.isd-accordion__mark::before,
.isd-accordion__mark::after {
	content: "";
	position: absolute;
	top: 50%;
	left: 0;
	width: 100%;
	height: 2px;
	margin-top: -1px;
	background: currentColor;
	transition: transform 0.3s var(--isd-ease), opacity 0.3s var(--isd-ease);
}

.isd-accordion__mark::after {
	transform: rotate(90deg);
}

.isd-accordion__item[open] .isd-accordion__mark::after {
	transform: rotate(0deg);
	opacity: 0;
}

.isd-accordion__panel {
	overflow: hidden;
	transition: height 0.32s var(--isd-ease);
}

.isd-accordion__body {
	padding: 0 0 26px;
	max-width: var(--isd-prose);
	color: var(--isd-muted);
}

.isd-accordion__body > *:first-child {
	margin-top: 0;
}

.isd-accordion__body > *:last-child {
	margin-bottom: 0;
}

.isd-accordion__body a {
	color: var(--isd-navy);
	text-decoration: underline;
	text-underline-offset: 2px;
}

/* Wide content — the specification tables and any embedded frame — scrolls
   inside its own box rather than pushing the page sideways. */
.isd-accordion__body table {
	display: block;
	width: 100%;
	max-width: 100%;
	overflow-x: auto;
	border-collapse: collapse;
}

.isd-accordion__body iframe {
	max-width: 100%;
}

/* WooCommerce's attribute table, on the one product that has one. */
.isd-accordion__body .woocommerce-product-attributes {
	width: 100%;
}

.isd-accordion__body .woocommerce-product-attributes th,
.isd-accordion__body .woocommerce-product-attributes td {
	padding: 12px 16px;
	border: 0;
	text-align: left;
}

.isd-accordion__body .woocommerce-product-attributes tr:nth-child(odd) th,
.isd-accordion__body .woocommerce-product-attributes tr:nth-child(odd) td {
	background: var(--isd-tile);
}

/* -------------------------------------------------------------------------
   Upsells
   ---------------------------------------------------------------------- */

.isd-section--upsells .up-sells.products > h2 {
	margin: 0 0 20px;
	color: var(--opt1-white, #fff);
	font-family: var(--isd-heading-font);
	font-size: clamp(1.4rem, 2vw, 1.9rem);
	font-weight: 800;
	line-height: 1.2;
}

/*
 * The site's global Additional CSS styles `ul.products li.product` with a long
 * run of !important declarations written for the archive grid. Those selectors
 * also match the upsell grid that this screen introduces, so its cards arrive
 * pre-styled for a context they were never designed for.
 *
 * The rules below re-assert only what the blue band needs, at the same weight,
 * because they cannot win otherwise. This is a counter-measure, not the fix.
 * The real fix is to scope the global rules to the archive, i.e. change
 * `ul.products li.product` to `.isd-shop ul.products li.product` in
 * Appearance > Customize > Additional CSS, after which this whole block can be
 * deleted.
 */
.isd-section--upsells ul.products {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 18px;
	margin: 0;
	padding: 0;
	list-style: none;
}

@media (min-width: 1600px) {
	.isd-section--upsells ul.products {
		grid-template-columns: repeat(5, minmax(0, 1fr));
	}
}

@media (max-width: 1024px) {
	.isd-section--upsells ul.products {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 480px) {
	.isd-section--upsells ul.products {
		grid-template-columns: minmax(0, 1fr);
	}
}

.isd-section--upsells ul.products li.product {
	width: auto !important;
	margin: 0 !important;
	float: none !important;
	clear: none !important;
	background: #fff !important;
	border: 0 !important;
	border-radius: 12px !important;
	padding: 12px !important;
}

.isd-section--upsells ul.products li.product a {
	text-decoration: none;
}

.isd-section--upsells ul.products li.product .woocommerce-loop-product__title {
	font-size: 15px;
	line-height: 1.35;
}

/* -------------------------------------------------------------------------
   Related products carousel

   The unenhanced list is a complete responsive grid. JavaScript adds
   .is-enhanced only after it has bound working controls, at which point the
   same list becomes a touch-scrollable, scroll-snap carousel.
   ---------------------------------------------------------------------- */

.isd-related {
	--isd-related-gap: clamp(16px, 1.35vw, 24px);
	color: var(--isd-ink);
}

.isd-related__header {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	align-items: end;
	gap: clamp(24px, 4vw, 72px);
	margin-bottom: clamp(28px, 3.2vw, 48px);
}

.isd-related__intro {
	min-width: 0;
}

.isd-related__eyebrow {
	display: flex;
	align-items: center;
	gap: 16px;
	max-width: 380px;
	margin: 0 0 14px;
	color: var(--isd-muted);
	font-family: var(--isd-heading-font);
	font-size: 12px;
	font-weight: 800;
	letter-spacing: 0.2em;
	line-height: 1.2;
	text-transform: uppercase;
}

.isd-related__eyebrow::after {
	content: "";
	width: 58px;
	height: 2px;
	background: var(--isd-primary-blue);
}

.isd-related__title {
	margin: 0;
	color: var(--isd-ink);
	font-family: var(--isd-heading-font);
	font-size: clamp(2rem, 4vw, 4rem);
	font-weight: 800;
	letter-spacing: -0.04em;
	line-height: 1.02;
}

.isd-related__description {
	max-width: 720px;
	margin: 16px 0 0;
	color: var(--isd-muted);
	font-size: clamp(15px, 1.4vw, 20px);
	line-height: 1.55;
}

.isd-related__navigation {
	display: grid;
	justify-items: center;
	gap: 18px;
	padding-bottom: 4px;
}

.isd-related__navigation[hidden] {
	display: none;
}

.isd-related__arrows {
	display: flex;
	gap: 12px;
}

.isd-related__arrow {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 54px;
	height: 54px;
	margin: 0;
	padding: 0;
	border: 1px solid #dce2eb;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.92);
	box-shadow: 0 8px 24px rgba(26, 42, 74, 0.07);
	color: var(--isd-ink);
	cursor: pointer;
	transition:
		border-color 0.2s var(--isd-ease),
		background-color 0.2s var(--isd-ease),
		color 0.2s var(--isd-ease),
		transform 0.2s var(--isd-ease);
}

.isd-related__arrow:hover:not(:disabled) {
	border-color: var(--isd-primary-blue);
	background: var(--isd-primary-blue);
	color: #fff;
	transform: translateY(-2px);
}

.isd-related__arrow:focus-visible {
	outline: 2px solid var(--isd-primary-blue);
	outline-offset: 3px;
}

.isd-related__arrow:disabled {
	opacity: 0.36;
	cursor: default;
}

.isd-related__arrow .kadence-svg-iconset,
.isd-related__arrow .kadence-svg-icon {
	display: block;
	width: 22px;
	height: 22px;
}

.isd-related__dots {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
}

.isd-related__dot {
	width: 10px;
	height: 10px;
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: #c9d0dc;
	box-shadow: none;
	cursor: pointer;
	transition: background-color 0.2s var(--isd-ease), transform 0.2s var(--isd-ease);
}

.isd-related__dot:hover,
.isd-related__dot[aria-current="true"] {
	background: var(--isd-primary-blue-dark);
	transform: scale(1.15);
}

.isd-related__dot:focus-visible {
	outline: 2px solid var(--isd-navy);
	outline-offset: 4px;
}

.isd-related__viewport {
	min-width: 0;
}

.isd-related__track {
	display: grid;
	grid-template-columns: repeat(5, minmax(0, 1fr));
	gap: var(--isd-related-gap);
	margin: 0;
	padding: 0;
	list-style: none;
}

.isd-related.is-enhanced .isd-related__track {
	display: flex;
	overflow-x: auto;
	overflow-y: hidden;
	scroll-snap-type: x mandatory;
	scrollbar-width: none;
	overscroll-behavior-inline: contain;
	-webkit-overflow-scrolling: touch;
}

.isd-related.is-enhanced .isd-related__track {
	cursor: grab;
}

@media (max-width: 700px) {
	.isd-addons__grid {
		cursor: grab;
	}
}

[data-isd-drag-track].is-dragging {
	cursor: grabbing;
	scroll-snap-type: none !important;
	user-select: none;
}

.isd-related.is-enhanced .isd-related__track::-webkit-scrollbar {
	display: none;
}

.isd-related__item {
	min-width: 0;
	margin: 0;
	list-style: none;
}

.isd-related.is-enhanced .isd-related__item {
	flex: 0 0 calc((100% - (4 * var(--isd-related-gap))) / 5);
	scroll-snap-align: start;
}

.isd-related-card {
	display: flex;
	flex-direction: column;
	height: 100%;
	overflow: hidden;
	border: 1px solid #dfe4ec;
	border-radius: 16px;
	background: #fff;
	box-shadow: 0 8px 24px rgba(26, 42, 74, 0.04);
	transition: border-color 0.24s var(--isd-ease), box-shadow 0.24s var(--isd-ease), transform 0.24s var(--isd-ease);
}

.isd-related-card:hover,
.isd-related-card:focus-within {
	border-color: #cbd4e1;
	box-shadow: 0 16px 36px rgba(26, 42, 74, 0.1);
	transform: translateY(-3px);
}

.isd-related-card__media {
	display: flex;
	align-items: center;
	justify-content: center;
	aspect-ratio: 4 / 3;
	margin: 10px 10px 0;
	overflow: hidden;
	border-radius: 12px;
	background: #fff;
}

.isd-related-card__media img,
.isd-related-card__image {
	display: block;
	width: 100% !important;
	height: 100% !important;
	margin: 0 !important;
	object-fit: contain;
	transition: transform 0.35s var(--isd-ease);
}

.isd-related-card:hover .isd-related-card__image,
.isd-related-card:focus-within .isd-related-card__image {
	transform: scale(1.025);
}

.isd-related-card__body {
	display: flex;
	flex: 1 1 auto;
	flex-direction: column;
	padding: clamp(16px, 1.5vw, 22px);
}

.isd-related-card__eyebrow {
	margin: 0 0 10px;
	color: var(--isd-muted);
	font-family: var(--isd-heading-font);
	font-size: 11px;
	font-weight: 800;
	letter-spacing: 0.13em;
	line-height: 1.35;
	text-transform: uppercase;
}

.isd-related-card__title {
	margin: 0 0 20px;
	font-family: var(--isd-heading-font);
	font-size: clamp(17px, 1.35vw, 22px);
	font-weight: 800;
	letter-spacing: -0.025em;
	line-height: 1.28;
}

.isd-related-card__title a {
	display: -webkit-box;
	overflow: hidden;
	color: var(--isd-ink);
	text-decoration: none;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 2;
	line-clamp: 2;
}

.isd-related-card__title a:hover {
	color: var(--isd-navy);
}

.isd-related-card__title a:focus-visible,
.isd-related-card__link:focus-visible {
	outline: 2px solid var(--isd-navy);
	outline-offset: 3px;
}

.isd-related-card__link {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	margin-top: auto;
	padding-top: 16px;
	border-top: 1px solid var(--isd-line);
	color: var(--isd-ink);
	font-family: var(--isd-body-font);
	font-size: 14px;
	font-weight: 800;
	line-height: 1.2;
	text-decoration: none;
}

.isd-related-card__link:hover {
	color: var(--isd-navy);
}

.isd-related-card__link .kadence-svg-iconset,
.isd-related-card__link .kadence-svg-icon {
	display: block;
	flex: 0 0 auto;
	width: 20px;
	height: 20px;
}

@media (max-width: 1279px) {
	.isd-related__track {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}

	.isd-related.is-enhanced .isd-related__item {
		flex-basis: calc((100% - (3 * var(--isd-related-gap))) / 4);
	}
}

@media (max-width: 1024px) {
	.isd-related__track {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	.isd-related.is-enhanced .isd-related__item {
		flex-basis: calc((100% - (2 * var(--isd-related-gap))) / 3);
	}
}

@media (max-width: 700px) {
	.isd-related {
		--isd-related-gap: 10px;
	}

	.isd-related__track {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.isd-related.is-enhanced .isd-related__item {
		flex-basis: calc(42.8571429% - 8.5714286px);
	}

	.isd-related__header {
		grid-template-columns: minmax(0, 1fr);
		align-items: start;
		gap: 22px;
	}

	.isd-related__navigation {
		justify-items: start;
	}

	.isd-related__dots {
		padding-inline: 4px;
	}
}

@media (max-width: 560px) {
	.isd-related__arrow {
		width: 48px;
		height: 48px;
	}

	.isd-related-card__title {
		font-size: 19px;
	}
}

/* -------------------------------------------------------------------------
   Motion
   ---------------------------------------------------------------------- */

@media (prefers-reduced-motion: reduce) {
	.isd-gallery__thumb-btn,
	.isd-gallery__thumb-btn img,
	.isd-gallery__image,
	.isd-gallery__arrow,
	.isd-gallery__play,
	.isd-viewer,
	.isd-viewer__image,
	.isd-viewer__btn,
	.isd-single__why-choose-cta,
	.isd-accordion__summary,
	.isd-accordion__panel,
	.isd-accordion__mark::before,
	.isd-accordion__mark::after,
	.isd-variation-card,
	.isd-single__summary button.isd-variation-option,
	.isd-variation-option__indicator,
	.isd-variation-option__indicator::after,
	.isd-single__summary button.isd-variation-brief__toggle,
	.isd-variation-brief__panel,
	.isd-variation-brief__list li,
	.isd-single__summary .isd-single__enquire-btn,
	.isd-single__summary .isd-single__buy-now,
	.isd-single__summary .isd-quantity-button,
	.isd-artwork-card__button,
	.isd-related__arrow,
	.isd-related__dot,
	.isd-related-card,
	.isd-related-card__image,
	.isd-single__summary .single_add_to_cart_button {
		transition: none !important;
		animation: none !important;
	}

	.isd-related.is-enhanced .isd-related__track {
		scroll-behavior: auto;
	}

	/* Arrows never depend on a transition to become reachable. */
	.isd-gallery__arrow {
		opacity: 1;
		transform: translate(0, -50%);
	}
}
