/**
 * Agri-Boss Winkelweergave — Syndified-opmaak.
 *
 * DIT IS HET ENIGE BESTAND WAAR !important IS TOEGESTAAN.
 *
 * Waarom: de Tailwind-build van Syndified zet zijn utilities zelf op
 * !important (622 declaraties op de productpagina) en de app.css
 * wordt als kale <link> midden in de body geprint, ná elke stylesheet
 * die wij netjes kunnen enqueuen. Tegen een !important uit dezelfde
 * origin bestaat maar één verdediging, en dat is er zelf ook een.
 *
 * Spelregels om updates van de plugin te overleven:
 *  - Mik op de componentklassen (.dsw-product-grid-items,
 *    .dsw-primary-site-btn, …), niet op losse utilities — die
 *    veranderen per Tailwind-build.
 *  - Alles is dubbel gescoped op body.ab-eigen-syndified, zodat de
 *    module-schakelaar ook hier geldt.
 */

/* ── KLEURTOKENS ──────────────────────────────────────────────── */

/*
 * Syndified zet --dss-primary-color via JavaScript als INLINE STYLE
 * op <html> (documentElement.style.setProperty). Een inline style
 * verslaat elke normale author-declaratie; alleen author-!important
 * wint. Dit is dus geen stijlkeuze maar de enige werkende route.
 */
html {
	--dss-primary-color: #3B732C !important;
	--dss-brand-color: #3B732C !important;
	--dsw-cta-button-color: #00820D !important;
}

/* ── DE KOOPKNOP ──────────────────────────────────────────────── */

/* Vierkant (radius 0), zoals elke knop op de site sinds de
   unificatielaag; de 5px stamde uit een eerdere fase. */
body.ab-eigen-syndified .dsw-primary-site-btn {
	background-color: #00820D !important;
	border-color: #00820D !important;
	color: #fff !important;
	border-radius: 0 !important;
	box-shadow: none !important;
	font-family: "Mulish", sans-serif !important;
	font-size: 15px !important;
	font-weight: 700 !important;
	text-transform: none !important;
	letter-spacing: normal !important;
	transition: background-color .15s ease !important;
}

body.ab-eigen-syndified .dsw-primary-site-btn:hover {
	background-color: #006A0B !important;
	border-color: #006A0B !important;
	opacity: 1 !important;
}

body.ab-eigen-syndified .dsw-secondary-site-btn {
	background-color: #fff !important;
	color: #3B732C !important;
	border-color: #3B732C !important;
	border-radius: 0 !important;
	font-family: "Mulish", sans-serif !important;
	font-weight: 700 !important;
	text-transform: none !important;
}

body.ab-eigen-syndified .dsw-primary-site-link {
	color: #3B732C !important;
}

body.ab-eigen-syndified .dsw-primary-site-svg {
	fill: #3B732C !important;
	color: #3B732C !important;
}

/*
 * De Tailwind-laag van Syndified geeft afbeeldingen een eigen rand
 * (1px #D1D5DB, met !important) — en die lekte tot op de WooCommerce-
 * archiefkaarten, als binnenkader om elke productfoto. Alleen de
 * kaartrand mag omlijsten. Dit hoort hier en niet in weergave.css:
 * tegen een !important helpt alleen een !important, en dat is enkel
 * in dit bestand toegestaan.
 */
body.ab-eigen-archief ul.products li.product img,
ul.products.ab-raster li.product img {
	border: 0 !important;
}

/* ── DE RASTERPAGINA'S (merk- en takpagina's van Syndified) ────── */

/*
 * Deze pagina's (bv. /maaien-en-grond-bewerken/grasmaaiers/) zijn een
 * TWEEDE Vue-template naast de productpagina, met een eigen hero,
 * filterzijbalk en kaartenraster. Zelfde ontwerptaal als de
 * WooCommerce-archieven: witte kop met Khand-titel in plaats van de
 * donkere fotobanner, en kaarten die één-op-één op onze eigen
 * productkaarten lijken.
 */

/* De hero: van donkere fotobanner naar dezelfde witte winkelkop als
   de archieven. Logo klein bovenaan (dat is hier de "wenkbrauw"),
   titel en tekst links uitgelijnd eronder. */
body.ab-eigen-syndified #app .dsw-hero-without-image-container {
	background: #fff !important;
	background-image: none !important;
	min-height: 0 !important;
	margin: 0 !important;
	padding: 26px 0 0 !important;
	text-align: left !important;
}

body.ab-eigen-syndified #app .dsw-hero-without-image-container .dsw-container {
	flex-direction: column !important;
	align-items: flex-start !important;
}

body.ab-eigen-syndified #app .dsw-hero-without-image-container .dsw-container > div {
	width: 100% !important;
	margin: 0 !important;
	display: block !important;
	text-align: left !important;
}

body.ab-eigen-syndified #app .dsw-hero-without-image-container img {
	max-height: 46px !important;
	width: auto !important;
	max-width: 210px !important;
	margin: 0 0 14px !important;
}

body.ab-eigen-syndified #app .dsw-hero-without-image-container h1 {
	margin: 0 0 10px !important;
	font-family: "Khand", "Mulish", sans-serif !important;
	font-size: clamp(30px, 3.5vw, 42px) !important;
	font-weight: 500 !important;
	line-height: 1.1 !important;
	letter-spacing: 0 !important;
	text-transform: uppercase !important;
	color: #111 !important;
	text-align: left !important;
}

body.ab-eigen-syndified #app .dsw-hero-without-image-container h1 ~ div {
	max-width: 820px !important;
	font-size: 15px !important;
	line-height: 1.6 !important;
	color: #505050 !important;
	text-align: left !important;
}

/* Mulish voor de lopende tekst van de rasterpagina's (app.css zegt
   Lato); koppen regelen hun eigen letter. */
body.ab-eigen-syndified #app .dsw-font-dsw:not(h1):not(h2):not(h3) {
	font-family: "Mulish", sans-serif !important;
}

/*
 * Syndified zet margin-top:100px op de grid-template — en de klasse
 * staat op #app ZELF, dat direct onder <body> hangt. Met de donkere
 * themabody erachter werd die marge een zwarte balk van 100px tussen
 * header en pagina. Beide varianten dekken (klasse op #app én op een
 * kind, per templateversie verschillend).
 */
body.ab-eigen-syndified #app.dsw-products-grid-page,
body.ab-eigen-syndified #app .dsw-products-grid-page,
body.ab-eigen-syndified #app.dsw-single-product {
	margin-top: 0 !important;
}

/* En de bovenmarge van de productsectie zelf wat inhouden. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-wrapper {
	padding-top: 18px !important;
}

/*
 * En het vangnet: op elke pagina met een Syndified-app wordt de body
 * wit. De donkere themabody is een keuze voor de homepage-banden;
 * hier kan hij alleen maar als zwarte kier door naden heen lekken —
 * welke marge een volgende pluginversie ook toevoegt.
 */
body.ab-eigen-syndified:has(#app) {
	background-color: #fff !important;
}

/*
 * Op merkpagina's als /etesia/ ligt een SEO-h1 met dsw-text-white
 * bewust onzichtbaar op het witte logoblok. Onze donkere titelregel
 * zou hem zichtbaar maken — "ETESIA" als tekst naast het
 * ETESIA-logo. Weg ermee; de tekst blijft gewoon in de HTML staan.
 */
body.ab-eigen-syndified #app .dsw-hero-without-image-container h1.dsw-text-white,
body.ab-eigen-syndified #app .dsw-hero-without-image-container .dsw-text-white h1 {
	display: none !important;
}

/* ── Verfraaiing: het karakter van de rest van de site ── */

/* De groene accentstreep boven de paginatitel — de "wenkbrauw" van de
   homepagesecties, hier als vormtaal (tekst toevoegen kan niet in
   andermans Vue-boom, de streep zelf wel). */
body.ab-eigen-syndified #app .dsw-hero-without-image-container h1::before {
	content: "" !important;
	display: block !important;
	width: 46px !important;
	height: 3px !important;
	margin: 0 0 12px !important;
	background: #3B732C !important;
}

/* De filterrijen: van grijze blokken naar witte rijen met een fijne
   lijn — zelfde taal als de kaarten. */
body.ab-eigen-syndified #app .dsw-bg-gray-100[class*="dsw-border"] {
	background: #fff !important;
	border: 0 !important;
	border-bottom: 1px solid #E4E4E4 !important;
}

body.ab-eigen-syndified #app .dsw-bg-gray-100[class*="dsw-border"] legend {
	transition: color .15s ease !important;
}

body.ab-eigen-syndified #app .dsw-bg-gray-100[class*="dsw-border"]:hover legend {
	color: #3B732C !important;
}

/* Focus en aandacht: velden lichten groen op als je erin staat. */
body.ab-eigen-syndified #app select:focus,
body.ab-eigen-syndified #app input:focus {
	border-color: #3B732C !important;
	outline: 2px solid rgba(59, 115, 44, .25) !important;
	outline-offset: 0 !important;
}

/*
 * Leven bij het laden: de kaarten verschijnen zachtjes van onder,
 * de eerste rijen licht gespreid — zelfde gevoel als de
 * scroll-reveal op de homepage. Eén keer, kort, en uit voor wie
 * beweging heeft uitgezet.
 */
@keyframes ab-kaart-in {
	from { opacity: 0; transform: translateY(10px); }
	to   { opacity: 1; transform: none; }
}

body.ab-eigen-syndified .dsw-product-grid-items {
	animation: ab-kaart-in .35s ease both !important;
}

body.ab-eigen-syndified .dsw-product-grid-items:nth-child(2) { animation-delay: .05s !important; }
body.ab-eigen-syndified .dsw-product-grid-items:nth-child(3) { animation-delay: .1s !important; }
body.ab-eigen-syndified .dsw-product-grid-items:nth-child(4) { animation-delay: .15s !important; }
body.ab-eigen-syndified .dsw-product-grid-items:nth-child(5) { animation-delay: .2s !important; }
body.ab-eigen-syndified .dsw-product-grid-items:nth-child(6) { animation-delay: .25s !important; }

@media (prefers-reduced-motion: reduce) {
	body.ab-eigen-syndified .dsw-product-grid-items {
		animation: none !important;
	}
}

/* De filterzijbalk. */
body.ab-eigen-syndified #app .dsw-filters h3,
body.ab-eigen-syndified #app h3.dsw-normal-case {
	font-family: "Khand", "Mulish", sans-serif !important;
	font-size: 20px !important;
	font-weight: 500 !important;
	text-transform: uppercase !important;
	letter-spacing: .02em !important;
	color: #111 !important;
}

/* ── De filterkolom op de MERKpagina's ─────────────────────────── */

/*
 * Syndified bouwt twee soorten filterkolommen.
 *
 * Op een CATEGORIEpagina krijgt elke filtergroep een <legend> met een
 * <h3> erin ("GEBRUIKER", "GEWICHT", "PRIJS"), en die staat hierboven
 * al in de huisstijl: Khand, hoofdletters, zwart.
 *
 * Op een MERKpagina (/stihl/, /gtm-professional/, /kaaz/, …) rendert
 * de app één groep ZONDER legend — en dus zonder enige kop. Wat er
 * overblijft is een kale groene lijst die naast de nette
 * categoriekolom als een ander onderdeel leest. De app geeft daar geen
 * kop, dus zetten we die hier.
 *
 * De selector zegt letterlijk wat het verschil is — een filtergroep
 * zonder koptekst — en raakt daardoor per definitie geen enkele
 * categoriepagina. De maten (12px inspringing, 8px marge, 20px Khand)
 * zijn overgenomen van de <h3> hiernaast, zodat de twee kolommen
 * dezelfde ritmiek houden.
 */
body.ab-eigen-syndified #app .dsw-filters fieldset:not(:has(legend))::before {
	content: "Categorieën";
	display: block;
	margin: 8px 0;
	padding-left: 12px;
	font-family: "Khand", "Mulish", sans-serif;
	font-size: 20px;
	font-weight: 500;
	line-height: 1.6;
	text-transform: uppercase;
	letter-spacing: .02em;
	color: #000;
}

html[lang^="fr"] body.ab-eigen-syndified #app .dsw-filters fieldset:not(:has(legend))::before {
	content: "Catégories";
}

html[lang^="en"] body.ab-eigen-syndified #app .dsw-filters fieldset:not(:has(legend))::before {
	content: "Categories";
}

/*
 * Twee scheefheden in de genestelde variant (die krijg je op /stihl/,
 * waar één hoofdcategorie zijn subcategorieën onder zich heeft).
 *
 * 1. De hoofdregel heeft geen vinkje maar een leeg vakje van zes pixel
 *    breed, waar overal elders een vinkje van zestien staat. Daardoor
 *    begon die ene regel negen pixel links van alle andere. Het vakje
 *    krijgt hier de breedte van een vinkje, zodat de kolom recht loopt.
 *
 * 2. De subregels stonden op 16px terwijl elke andere filterregel in
 *    de winkel op 20px staat. De inspringing blijft wél staan: die
 *    zegt dat het onderliggende categorieën zijn.
 */
body.ab-eigen-syndified #app .dsw-filters fieldset:not(:has(legend)) .dsw-w-2 {
	width: 20px !important;
}

body.ab-eigen-syndified #app .dsw-filters fieldset:not(:has(legend)) .dsw-ml-10 a {
	font-size: 20px !important;
}

body.ab-eigen-syndified #app input[type="checkbox"],
body.ab-eigen-syndified #app input[type="radio"] {
	accent-color: #3B732C !important;
}

/* Invoervelden en dropdowns in de huisstijl; alles vierkant behalve
   wat bewust rond is (badges). */
body.ab-eigen-syndified #app select,
body.ab-eigen-syndified #app input:not([type="checkbox"]):not([type="radio"]) {
	border-radius: 0 !important;
	border-color: #E4E4E4 !important;
	font-family: "Mulish", sans-serif !important;
	font-size: 14px !important;
	background-color: #fff !important;
}

/* ── De kaarten: één-op-één onze productkaart ── */

/*
 * ECHTE rand op de kaartdoos en echte marges als goot. De eerdere
 * truc (transparante rand + inset-ring) liet op hover een witte band
 * zien tussen de groene ring en de schaduw — de ring lag 8px binnen
 * de dooskant. Nu ligt de rand op de kant zelf, zoals op de
 * archiefkaarten; de breedtes verderop compenseren de marges met
 * calc().
 */
body.ab-eigen-syndified .dsw-product-grid-items {
	border: 1px solid #E4E4E4 !important;
	border-radius: 0 !important;
	background: #fff !important;
	background-clip: border-box !important;
	box-shadow: none !important;
	margin: 8px !important;
	transition: border-color .15s ease, box-shadow .18s ease, transform .18s ease !important;
}

body.ab-eigen-syndified .dsw-product-grid-items:hover {
	border-color: #3B732C !important;
	box-shadow: 0 8px 24px rgba(0, 0, 0, .14) !important;
	transform: translateY(-4px) !important;
}

/* De goten zitten nu in de marge, dus de vaste breukbreedtes van de
   app (1/2, 1/3, 1/4) moeten de marge kwijtraken. */
body.ab-eigen-syndified .dsw-product-grid-items {
	width: calc(100% - 16px) !important;
}

@media (min-width: 640px) {
	body.ab-eigen-syndified .dsw-product-grid-items {
		width: calc(50% - 16px) !important;
	}
}

@media (min-width: 1024px) {
	body.ab-eigen-syndified .dsw-product-grid-items {
		width: calc(33.334% - 16px) !important;
	}
}

/*
 * Het snelkijk-oogje op hover (grijze cirkel met oog over de foto):
 * weg. De hele kaart is al klikbaar; de overlay verstopt vooral het
 * product.
 */
body.ab-eigen-syndified .dsw-product-grid-items .dsw-h-72 .dsw-absolute.dsw-z-20 {
	display: none !important;
}

@media (prefers-reduced-motion: reduce) {
	body.ab-eigen-syndified .dsw-product-grid-items:hover {
		transform: none !important;
	}
}

/* Aanraakschermen: geen plakkende hover-lift na een tik. */
@media (hover: none) {
	body.ab-eigen-syndified .dsw-product-grid-items:hover {
		transform: none !important;
		box-shadow: none !important;
		border-color: #E4E4E4 !important;
	}
}

/*
 * GEEN eigen achtergrond op de afbeelding: multiply laat de witte
 * JPEG-achtergrond in het kaartvlak opgaan, zoals op de archieven.
 */
body.ab-eigen-syndified .dsw-product-grid-items img {
	object-fit: contain !important;
	background: transparent !important;
	border-radius: 0 !important;
	mix-blend-mode: multiply !important;
}

/* Het merklabel boven de titel — zelfde vorm als het categorielabel
   op onze kaarten. Mét #app: syndified-inhoud.css zet #app h2 breed
   in de Khand-sectiestijl en wint anders op specificiteit. */
body.ab-eigen-syndified #app .dsw-product-grid-items h2 {
	font-family: "Mulish", sans-serif !important;
	font-size: 11px !important;
	font-weight: 700 !important;
	letter-spacing: .08em !important;
	text-transform: uppercase !important;
	color: #888 !important;
	text-align: left !important;
	margin: 0 !important;
}

/* De titel: Mulish vet, twee regels, zoals op de archieven. */
body.ab-eigen-syndified .dsw-product-grid-items a.dsw-line-clamp-2 {
	font-family: "Mulish", sans-serif !important;
	font-size: 15px !important;
	font-weight: 700 !important;
	line-height: 1.4 !important;
	text-transform: none !important;
	letter-spacing: 0 !important;
	color: #19191E !important;
}

body.ab-eigen-syndified .dsw-product-grid-items:hover a.dsw-line-clamp-2 {
	color: #3B732C !important;
}

/* De cursieve categorielink onder de titel: ruis — onze kaarten
   hebben één label, en dat staat er al (het merk). */
body.ab-eigen-syndified .dsw-product-grid-items h6 {
	display: none !important;
}

/* De voetstrook: wit met een scheidingslijn in plaats van een grijs
   blok — zelfde opbouw als het knopblok op onze kaarten. */
/*
 * DE VOETSTROOK UIT DE ABSOLUTE STAND. De app hangt prijs en knoppen
 * in een absoluut blok van vaste hoogte onder aan de kaart, met
 * gereserveerde padding erboven — vandaar het gapende gat tussen
 * titel en prijs, en een strook die bij afwijkende inhoud buiten het
 * kader zakte. De kaart wordt een gewone flexkolom (zoals onze
 * archiefkaarten): de voet stroomt mee, margin-top:auto duwt hem
 * tegen de onderkant, en kaarten in dezelfde rij blijven gelijk hoog
 * doordat flex-items op elkaars hoogte rekken.
 */
body.ab-eigen-syndified .dsw-product-grid-items {
	display: flex !important;
	flex-direction: column !important;
	padding-bottom: 16px !important;
	height: auto !important;
}

body.ab-eigen-syndified .dsw-product-grid-items .dsw-bg-gray-100 {
	position: static !important;
	inset: auto !important;
	margin-top: auto !important;
	width: 100% !important;
	height: auto !important;
	min-height: 0 !important;
	background: #fff !important;
	/* GEEN lijn hier: op de referentiekaart ligt het lijntje tussen
	   de voorraadregel en de knop, niet boven de prijs. Dat doet de
	   prijsregel hieronder. */
	border-top: 0 !important;
	padding: 4px 0 0 !important;
	box-sizing: border-box !important;
}

/* De (dubbele) binnenwikkels van de app: ook uit de absolute stand. */
body.ab-eigen-syndified .dsw-product-grid-items .dsw-bg-gray-100 .dsw-absolute {
	position: static !important;
	inset: auto !important;
	width: 100% !important;
	padding: 0 !important;
	margin: 0 !important;
}

/* De vaste titelzone mag meegroeien; twee regels blijven de norm. */
body.ab-eigen-syndified .dsw-product-grid-items .dsw-h-16 {
	height: auto !important;
	min-height: 46px !important;
}

/*
 * WAAROM DE KAARTEN ZO HOOG WAREN: de app reserveert een vast
 * beeldvak van 288px (dsw-h-72) plus een badgezone van 40px die
 * meestal leeg is. Beeldvak naar 205px — gelijk aan het 4:3-vak op
 * onze archiefkaarten — en de lege badgezone klapt dicht.
 */
body.ab-eigen-syndified .dsw-product-grid-items .dsw-h-72 {
	height: 205px !important;
	overflow: hidden !important;
}

/*
 * Vaste maat op de afbeelding zelf, niet 100%: de wikkels ertussen
 * zijn fit-content, en "100% van fit-content" begrenst niets — hoge
 * staande foto's (trimmerstelen) liepen zo het vak uit over de titel.
 */
body.ab-eigen-syndified .dsw-product-grid-items .dsw-h-72 img {
	max-height: 205px !important;
	width: auto !important;
	object-fit: contain !important;
}

body.ab-eigen-syndified .dsw-product-grid-items > .dsw-h-10 {
	height: auto !important;
	min-height: 0 !important;
}

/* De prijs in de voetstrook: Khand, donker, links — exact de maat
   van de archiefkaarten. Mét #app en gescoped op de voetstrook: de
   brede Mulish-regel op #app wint anders, en het merklabel draagt
   óók dsw-truncate. */
body.ab-eigen-syndified #app .dsw-product-grid-items .dsw-bg-gray-100 div.dsw-truncate {
	font-family: "Khand", "Mulish", sans-serif !important;
	font-size: 24px !important;
	font-weight: 600 !important;
	color: #19191E !important;
	text-align: left !important;
	/* Het lijntje van de referentiekaart: onder prijs én voorraad,
	   boven de knop. De voorraadregel is een ::after ván dit blok,
	   dus de rand valt er automatisch onder. */
	width: 100% !important;
	padding-bottom: 12px !important;
	margin-bottom: 12px !important;
	border-bottom: 1px solid #E4E4E4 !important;
}

/*
 * DE KOOPKNOP. De app zet alleen een icoontje in de knop en propte
 * hem in een half kaartvak; met tekst erbij en op volle breedte is
 * het dezelfde knop als op de archiefkaarten. De tekst komt uit een
 * ::after (de app levert er geen), en het onderscheid tussen kopen en
 * reserveren maakt het data-attribuut dat de app zelf op de
 * reserveerknop zet.
 */

/*
 * Eén kaart, twee acties: de app zet "In winkelwagen" (een <button>)
 * en "Reserveren" (een <a>) als twee icoontjes naast elkaar in een
 * half vak — samen breder dan de kaart, dus staken ze er links en
 * rechts uit. Hier worden het twee volwaardige knoppen onder elkaar:
 * kopen als primaire groene knop, reserveren als omlijnde tweede.
 * De houders worden via :has() gepakt, wat de tussenlagen ook heten.
 */

/* De knoppenrij: kolom — één hoofdknop, alles eronder is bijzaak.
   Zelfde opbouw als de archiefkaarten. */
body.ab-eigen-syndified .dsw-product-grid-items .dsw-bg-gray-100 .dsw-mb-3 {
	flex-flow: column nowrap !important;
	gap: 4px !important;
	max-width: 100% !important;
}

/*
 * Drie kaarten per rij op brede schermen in plaats van vier: de app
 * schakelt boven 1800px naar kwartbreedte (±230px), en dat is te
 * krap. Op een derde ademen de kaarten zoals op de archieven. De
 * -16px compenseert de goot-marges van de kaartregel hierboven.
 */
@media (min-width: 1800px) {
	body.ab-eigen-syndified .dsw-product-grid-items {
		width: calc(33.334% - 16px) !important;
	}
}

/* De houders: vullen wat er is, zonder de klem-marges van de app.
   Let op de kindcombinators: zonder > matcht :has() ook de rij en
   alle wikkels erboven (alles "bevat" de knop). GEEN min-width:
   max-content hier — dat liet een houder met een 100%-knop erin tot
   buiten de kaart rekken (gemeten: 255px in een rij van 182). */
body.ab-eigen-syndified .dsw-product-grid-items div:has(> a.dsw-cursor-pointer),
body.ab-eigen-syndified .dsw-product-grid-items .dsw-bg-gray-100 div:has(> .dsw-w-24) {
	display: flex !important;
	width: 100% !important;
	flex: 0 0 auto !important;
	min-width: 0 !important;
	max-width: 100% !important;
	margin: 0 !important;
	position: static !important;
}

/*
 * DE VOORRAADREGEL — "Op voorraad" in het groen, tussen prijs
 * en knop, precies als op de archiefkaarten. Alleen wanneer er een
 * koopknop staat: de app verbergt die zelf zodra een product niet op
 * voorraad is, dus de aanwezigheid van de knop ÍS het voorraadsignaal.
 */
body.ab-eigen-syndified .dsw-product-grid-items .dsw-bg-gray-100:has(button.dsw-primary-site-btn) div.dsw-truncate::after {
	content: "Op voorraad" !important;
	display: block !important;
	margin: 4px 0 6px !important;
	font-family: "Mulish", sans-serif !important;
	font-size: 12.5px !important;
	font-weight: 600 !important;
	letter-spacing: 0 !important;
	color: #00820D !important;
}

html[lang^="fr"] body.ab-eigen-syndified .dsw-product-grid-items .dsw-bg-gray-100:has(button.dsw-primary-site-btn) div.dsw-truncate::after {
	content: "En stock" !important;
}

html[lang^="en"] body.ab-eigen-syndified .dsw-product-grid-items .dsw-bg-gray-100:has(button.dsw-primary-site-btn) div.dsw-truncate::after {
	content: "In stock" !important;
}

/*
 * Staan er TWEE acties op de kaart, dan is de koopknop de hoofdknop
 * (vol, met karretje en voluit opschrift — exact de archiefknop) en
 * wordt reserveren een bescheiden tekstlink eronder. Twee volwaardige
 * knoppen met icoon passen aantoonbaar niet naast elkaar, en de
 * referentiekaart heeft er ook maar één.
 */
body.ab-eigen-syndified .dsw-product-grid-items .dsw-mb-3:has(button.dsw-primary-site-btn) a.dsw-cursor-pointer {
	height: auto !important;
	min-height: 0 !important;
	padding: 4px 0 0 !important;
	border: 0 !important;
	background: transparent !important;
	color: #3B732C !important;
	font-size: 13px !important;
	font-weight: 600 !important;
	text-decoration: none !important;
}

body.ab-eigen-syndified .dsw-product-grid-items .dsw-mb-3:has(button.dsw-primary-site-btn) a.dsw-cursor-pointer:hover {
	background: transparent !important;
	color: #2E5A22 !important;
	text-decoration: underline !important;
}

body.ab-eigen-syndified .dsw-product-grid-items .dsw-mb-3:has(button.dsw-primary-site-btn) a.dsw-cursor-pointer svg {
	display: none !important;
}

/* Het opschrift van de koopknop: voluit, zoals op de archiefkaarten. */
body.ab-eigen-syndified .dsw-product-grid-items button.dsw-primary-site-btn::after {
	content: "Toevoegen aan winkelwagen" !important;
}

html[lang^="fr"] body.ab-eigen-syndified .dsw-product-grid-items button.dsw-primary-site-btn::after {
	content: "Ajouter au panier" !important;
}

html[lang^="en"] body.ab-eigen-syndified .dsw-product-grid-items button.dsw-primary-site-btn::after {
	content: "Add to cart" !important;
}

/* De winkelwagenknop eerst — dat is de hoofdhandeling. */
body.ab-eigen-syndified .dsw-product-grid-items .dsw-bg-gray-100 .dsw-mb-3 > div:has(button.dsw-primary-site-btn) {
	order: -1 !important;
}

body.ab-eigen-syndified .dsw-product-grid-items .dsw-bg-gray-100 .dsw-w-24 {
	width: 100% !important;
}

body.ab-eigen-syndified .dsw-product-grid-items .dsw-bg-gray-100 .dsw-w-24 > div {
	width: 100% !important;
}

/* De koopknop: vol groen, met het opschrift uit het aria-label van
   de app zelf — dus vanzelf in de taal van de pagina. */
body.ab-eigen-syndified .dsw-product-grid-items button.dsw-primary-site-btn {
	display: flex !important;
	align-items: center !important;
	justify-content: center !important;
	gap: 8px !important;
	width: 100% !important;
	height: 46px !important;
	border-radius: 0 !important;
	font-size: 13.5px !important;
	font-weight: 700 !important;
}

body.ab-eigen-syndified .dsw-product-grid-items button.dsw-primary-site-btn svg {
	width: 17px !important;
	flex: none !important;
}

/* De reserveerknop: omlijnd wit met merkgroen — aanwezig maar
   ondergeschikt aan de koopknop erboven. */
body.ab-eigen-syndified .dsw-product-grid-items a.dsw-cursor-pointer {
	display: flex !important;
	align-items: center !important;
	justify-content: center !important;
	gap: 8px !important;
	width: 100% !important;
	min-width: 0 !important;
	height: 38px !important;
	background: #fff !important;
	border: 1px solid #3B732C !important;
	border-radius: 0 !important;
	color: #3B732C !important;
	font-family: "Mulish", sans-serif !important;
	font-size: 13px !important;
	font-weight: 700 !important;
	text-decoration: none !important;
	transition: background .15s ease, color .15s ease !important;
}

body.ab-eigen-syndified .dsw-product-grid-items a.dsw-cursor-pointer:hover {
	background: #3B732C !important;
	color: #fff !important;
}

/* Is reserveren de ENIGE actie op de kaart (machines zonder
   online verkoop), dan is het de hoofdknop — vol groen. */
body.ab-eigen-syndified .dsw-product-grid-items .dsw-mb-3:not(:has(button.dsw-primary-site-btn)) a.dsw-cursor-pointer {
	background: #00820D !important;
	border-color: #00820D !important;
	color: #fff !important;
	height: 46px !important;
}

body.ab-eigen-syndified .dsw-product-grid-items .dsw-mb-3:not(:has(button.dsw-primary-site-btn)) a.dsw-cursor-pointer:hover {
	background: #006A0B !important;
	border-color: #006A0B !important;
}

body.ab-eigen-syndified .dsw-product-grid-items a.dsw-cursor-pointer svg,
body.ab-eigen-syndified .dsw-product-grid-items a.dsw-cursor-pointer .dsw-primary-site-svg {
	width: 16px !important;
	fill: currentColor !important;
	color: currentColor !important;
	flex: none !important;
}

/*
 * Sommige templateversies stoppen ÍN de reserveerlink nog een div met
 * dsw-primary-site-btn (het oude groene icoonblokje). Die erfde onze
 * groene knopstijl en stond als vol vlak in de omlijnde knop. Binnen
 * de link is hij louter verpakking: doorzichtig en maatloos.
 */
body.ab-eigen-syndified .dsw-product-grid-items a.dsw-cursor-pointer .dsw-primary-site-btn {
	background: transparent !important;
	border: 0 !important;
	box-shadow: none !important;
	width: auto !important;
	height: auto !important;
	min-height: 0 !important;
	padding: 0 !important;
	margin: 0 !important;
	color: inherit !important;
}

/* Het opschrift: kopen of reserveren, in de taal van de pagina. */
body.ab-eigen-syndified .dsw-product-grid-items a.dsw-cursor-pointer::after {
	content: "In winkelwagen" !important;
}

body.ab-eigen-syndified .dsw-product-grid-items a.dsw-cursor-pointer[data-syndified-cta-button]::after {
	content: "Reserveren" !important;
}

html[lang^="fr"] body.ab-eigen-syndified .dsw-product-grid-items a.dsw-cursor-pointer::after {
	content: "Ajouter au panier" !important;
}

html[lang^="fr"] body.ab-eigen-syndified .dsw-product-grid-items a.dsw-cursor-pointer[data-syndified-cta-button]::after {
	content: "Réserver" !important;
}

html[lang^="en"] body.ab-eigen-syndified .dsw-product-grid-items a.dsw-cursor-pointer::after {
	content: "Add to cart" !important;
}

html[lang^="en"] body.ab-eigen-syndified .dsw-product-grid-items a.dsw-cursor-pointer[data-syndified-cta-button]::after {
	content: "Reserve" !important;
}

/*
 * De filterkoppen en de resultatenteller: vandaag wit-op-wit en
 * lichtgrijs-op-lichtgrijs (gemeten contrast 1,44:1). Dit is de
 * "het leest als kapot"-fix.
 */
body.ab-eigen-syndified [class*="dsw-"] legend,
body.ab-eigen-syndified [class*="dsw-"] fieldset > div:first-child {
	color: #19191E !important;
	font-weight: 700 !important;
}

/* ── DE PRODUCTPAGINA ─────────────────────────────────────────── */

/*
 * De Vue-productpagina (#app.dsw-single-product), naar het model van
 * tuinmachinecenter.be: gallerij in een omrand vak links, een rustige
 * koopkolom rechts met de prijs als grootste element, USP-regels
 * onder de knoppen, en onderstreepte tabs in plaats van kaderknopjes.
 *
 * Alle dsw-top-section-*-haken hebben NUL regels in Syndified's
 * app.css (nagetrokken over de hele bundel) — wij zijn er de enige
 * eigenaar van. #app in de selector wint qua specificiteit van de
 * html-regels uit het WPCode-snippet én van de Tailwind-utilities;
 * !important blijft nodig omdat die utilities het zelf ook dragen.
 * Breekpunten van de app: sm 640, md 1024, lg 1400.
 */

/* De pagina ademt bovenaan; het kruimelpad van Syndified staat uit. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-wrapper {
	padding-top: 28px !important;
}

/* Mulish voor alle lopende tekst (app.css zegt Lato). De koppen
   uitgezonderd: DswH1 draagt dezelfde klasse, en dit vlak wint qua
   specificiteit anders van de Khand-regel voor de h1 verderop. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-font-dsw:not(h1):not(h2):not(h3) {
	font-family: "Mulish", sans-serif !important;
}

/* ── De gallerij: een omrand wit vak, zoals de productkaarten ── */

body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-gallery-wrapper .dsw-bg-white {
	border: 0 !important;
	padding: 0 !important;
}

/*
 * DE GALLERIJ NAAR HET REFERENTIEMODEL: hoofdbeeld groot bovenaan, de
 * miniaturen als rij eronder. De app zet ze standaard in een smalle
 * kolom links, wat 56px van de fotobreedte afsnoept en bij meer dan
 * vijf beelden een verborgen scrollrail wordt.
 *
 * In de DOM staat de rail vóór het hoofdbeeld; column-reverse zet ze
 * dus in de juiste volgorde zonder de opbouw aan te raken.
 */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-gallery-wrapper .dsw-bg-white {
	flex-direction: column-reverse !important;
}

/* De houder van de rail: van smalle kolom naar volle breedte. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-gallery-wrapper .dsw-flex-none {
	width: 100% !important;
	flex: none !important;
	margin-top: 14px !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-gallery-scroll-container {
	flex-direction: row !important;
	justify-content: flex-start !important;
	gap: 10px !important;
	height: auto !important;
	overflow-x: auto !important;
	overflow-y: hidden !important;
	scrollbar-width: none !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-gallery-scroll-container::-webkit-scrollbar {
	display: none !important;
}

/* Elke miniatuur een vast vierkant, niet meer de volle breedte. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-gallery-scroll-container > div {
	width: 72px !important;
	height: 72px !important;
	flex: none !important;
	margin: 0 !important;
}

/* Thumbnails: rand die meekleurt, zodat je ziet wat er actief is. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-gallery-scroll-container .dsw-cursor-pointer {
	width: 100% !important;
	height: 100% !important;
	padding: 0 !important;
	border: 0 !important;
	background: #fff !important;
	opacity: .72 !important;
	transition: opacity .15s ease !important;
}

/* Geen kader maar helderheid als aanwijzing: de miniatuur waar je
   overheen gaat, komt naar voren. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-gallery-scroll-container .dsw-cursor-pointer:hover {
	opacity: 1 !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-gallery-scroll-container img {
	object-fit: contain !important;
}

/* Het hoofdbeeld mag de vrijgekomen breedte innemen. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-gallery-wrapper .dsw-flex-grow {
	width: 100% !important;
}

/*
 * "Bekijk volledige grootte" weg. Het hoofdbeeld is zelf al klikbaar
 * en opent dezelfde vergroting, dus die regel herhaalt alleen wat de
 * foto al doet — en hij stond tussen de foto en de miniaturen in.
 */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-gallery-wrapper .dsw-text-center {
	display: none !important;
}

/*
 * De "meer foto's"-chevron van de app onderaan de miniatuurrij: die
 * opende hun eigen vergroting. Onze lightbox toont alle foto's en
 * heeft pijltjes, dus die knop heeft geen taak meer. Herkenbaar aan
 * het ontbreken van een afbeelding.
 */
body.ab-eigen-syndified #app.dsw-single-product .dsw-gallery-scroll-container > div:has(svg):not(:has(img)) {
	display: none !important;
}

/* Geen kader om het hoofdbeeld, en de volle breedte: de bladerpijlen
   staan onder de foto, dus hier hoeft geen ruimte vrij te blijven. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-gallery-wrapper [class*="dsw-h-72"] {
	border: 0 !important;
	padding: 0 !important;
	box-sizing: border-box !important;
}

/* De rij onder de foto: miniaturen links, bladerpijlen rechts. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-gallery-wrapper .dsw-flex-none {
	display: flex !important;
	align-items: center !important;
	gap: 12px !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-gallery-scroll-container {
	flex: 1 1 auto !important;
	min-width: 0 !important;
}

/* ── De koopkolom ── */

/* Merknaam boven de titel: klein kapitaal, grijs. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-brand-wrapper {
	margin-bottom: 4px !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-brand-wrapper .dsw-font-dsw,
body.ab-eigen-syndified #app.dsw-single-product a.dsw-top-section-content-product-brand {
	font-size: 13px !important;
	font-weight: 700 !important;
	letter-spacing: .08em !important;
	text-transform: uppercase !important;
	color: #888 !important;
}

/* De titel: zelfde Khand-kop als de archieven en de homepage. */
body.ab-eigen-syndified #app.dsw-single-product h1 {
	margin: 6px 0 14px !important;
	font-family: "Khand", "Mulish", sans-serif !important;
	font-size: clamp(30px, 3.5vw, 42px) !important;
	font-weight: 500 !important;
	line-height: 1.08 !important;
	letter-spacing: 0 !important;
	text-transform: uppercase !important;
	color: #111 !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-wrapper hr {
	border-color: #E4E4E4 !important;
	margin: 4px 0 14px !important;
}

/* Artikelnummer en categorie: bijzaak, dus klein en grijs. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-number {
	font-size: 13px !important;
	color: #888 !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-category,
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-category a {
	font-size: 13px !important;
}

/*
 * DE PRIJS — het grootste element van de koopkolom, zoals op de
 * referentie en op onze eigen kaarten: Khand, donker.
 *
 * De haak is smal (dsw-inline-block komt in de koopkolom alleen op
 * het prijsblok voor) omdat het blok zelf alleen utilityklassen
 * draagt; de !dsw-text-2xl-utilities die hij verslaat, zetten hem
 * anders op 24px Lato.
 */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-wrapper .dsw-inline-block {
	font-family: "Khand", "Mulish", sans-serif !important;
	font-size: 34px !important;
	font-weight: 600 !important;
	line-height: 1.1 !important;
	color: #19191E !important;
}

/* De doorstreepte adviesprijs ernaast: klein en grijs. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-wrapper .dsw-line-through {
	font-family: "Mulish", sans-serif !important;
	font-size: 16px !important;
	font-weight: 600 !important;
	color: #888 !important;
}

/* Prijs op aanvraag: geen bedrag, wel gewicht. */
body.ab-eigen-syndified #app.dsw-single-product .dsn-price-on-request {
	font-family: "Khand", "Mulish", sans-serif !important;
	font-size: 24px !important;
	font-weight: 600 !important;
	text-transform: uppercase !important;
	color: #19191E !important;
}

/*
 * De regel "Alle prijzen zijn inclusief 21% BTW." mag weg: sinds de
 * btw-schakelaar hangt er al een incl./excl.-label aan elke prijs,
 * en twee keer hetzelfde zeggen maakt de koopkolom onrustig.
 */
body.ab-eigen-syndified #app.dsw-single-product form > h2 {
	display: none !important;
}

/*
 * Idem voor Syndified's eigen prijs-suffix ("incl. BTW"): naast ons
 * schakelbare label stond er "€679,00 incl. btw incl. BTW". Eén van
 * de twee moet zwijgen, en de onze volgt de schakelaar. Geldt ook op
 * de rasterkaarten, waar hetzelfde duo stond.
 */
body.ab-eigen-btwkeuze #app .woocommerce-price-suffix {
	display: none !important;
}

/* Koppen in de tabpanelen (Uitrusting, Meer details, …) in Khand —
   dit deed voorheen het WPCode-snippet, dat nu is opgeruimd. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-tabs-system ~ .dsw-bg-white h2,
body.ab-eigen-syndified #app.dsw-single-product .dsw-tabs-system ~ .dsw-bg-white h3,
body.ab-eigen-syndified #app.dsw-single-product .dsw-tabs-system ~ .dsw-bg-white h4 {
	font-family: "Khand", "Mulish", sans-serif !important;
	font-weight: 500 !important;
	text-transform: uppercase !important;
	color: #111 !important;
}

/* ── Het koopblok: één omrand paneel ── */

body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-wrapper form {
	border: 1px solid #E4E4E4 !important;
	padding: 18px 20px !important;
	margin-top: 10px !important;
	background: #fff !important;
}

/* Knoppen in het paneel: 48px hoog, als overal op de site. */
body.ab-eigen-syndified #app.dsw-single-product form .dsw-primary-site-btn {
	min-height: 48px !important;
	padding-left: 22px !important;
	padding-right: 22px !important;
}

/* De aantal-invoer ernaast op dezelfde hoogte. */
body.ab-eigen-syndified #app.dsw-single-product form input[name="quantity"] {
	height: 48px !important;
	border: 1px solid #E4E4E4 !important;
	border-radius: 0 !important;
	font-family: "Mulish", sans-serif !important;
	font-size: 15px !important;
	text-align: center !important;
}

/* Variatie-dropdowns. */
body.ab-eigen-syndified #app.dsw-single-product form select {
	border: 1px solid #E4E4E4 !important;
	border-radius: 0 !important;
	font-family: "Mulish", sans-serif !important;
	font-size: 15px !important;
	background: #fff !important;
}

/* Voorraad- en levertijdregels: klein, rustig. De knop zelf niet —
   die houdt zijn 15px uit de knopsectie. */
body.ab-eigen-syndified #app.dsw-single-product form .dsw-font-dsw:not(.dsw-primary-site-btn) {
	font-size: 14px !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-shipping-time {
	color: #888 !important;
}

/*
 * USP-regels onder het koopblok — het "waarom hier kopen"-moment van
 * de referentie. Als ::after en niet als eigen DOM-knoop: Vue is
 * eigenaar van deze boom en een ingeplante knoop kan bij een
 * hertekening (variatiewissel) sneuvelen; een pseudo-element niet.
 */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-wrapper form::after {
	content: "✓  Fysieke winkel in Zaventem — kom kijken en proberen\A✓  Eigen atelier: onderhoud en herstelling in huis\A✓  Advies van mensen die de machines zelf gebruiken\A✓  Veilig online betalen\A✓  Afhalen in de winkel of levering aan huis" !important;
	display: block !important;
	margin-top: 16px !important;
	padding-top: 14px !important;
	border-top: 1px solid #E4E4E4 !important;
	white-space: pre-line !important;
	font-family: "Mulish", sans-serif !important;
	font-size: 13.5px !important;
	font-weight: 600 !important;
	line-height: 1.9 !important;
	color: #505050 !important;
}

/* Zelfde beloftes in de taal van de pagina. */
html[lang^="fr"] body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-wrapper form::after {
	content: "✓  Magasin à Zaventem — venez voir et essayer\A✓  Atelier intégré : entretien et réparation sur place\A✓  Conseils de gens qui utilisent ces machines\A✓  Paiement en ligne sécurisé\A✓  Retrait en magasin ou livraison à domicile" !important;
}

html[lang^="en"] body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-wrapper form::after {
	content: "✓  Physical store in Zaventem — come see and try\A✓  In-house workshop for service and repairs\A✓  Advice from people who use these machines\A✓  Secure online payment\A✓  Collect in store or home delivery" !important;
}

/* De korte beschrijving: leesmaat in plaats van de xl-utilities
   (20px) van de app. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-wrapper p,
body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-wrapper li {
	font-size: 15.5px !important;
	line-height: 1.65 !important;
	color: #505050 !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-top-section-content-product-wrapper li::marker {
	color: #3B732C !important;
}

/* ── De tabs: onderstreept in plaats van kaderknopjes ── */

body.ab-eigen-syndified #app.dsw-single-product .dsw-tabs-system {
	margin-top: 48px !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-tabs-system button {
	border: 0 !important;
	border-bottom: 3px solid transparent !important;
	background: transparent !important;
	padding: 12px 4px !important;
	margin-right: 28px !important;
	font-family: "Khand", "Mulish", sans-serif !important;
	font-size: 18px !important;
	font-weight: 500 !important;
	letter-spacing: .02em !important;
	text-transform: uppercase !important;
	color: #505050 !important;
	transition: color .15s ease, border-color .15s ease !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-tabs-system button:hover {
	color: #111 !important;
}

/*
 * De actieve tab: de app markeert hem met dsw-bg-white (inactief:
 * dsw-bg-gray-200) — live nagemeten door een tab aan te klikken en de
 * klassen te diffen. Daarop haken we de groene onderlijn.
 */
body.ab-eigen-syndified #app.dsw-single-product .dsw-tabs-system button.dsw-bg-white {
	border-bottom-color: #3B732C !important;
	color: #111 !important;
}

/* De mobiele tab-dropdown in dezelfde taal. */
body.ab-eigen-syndified #app.dsw-single-product select.dsw-w-full {
	border: 1px solid #E4E4E4 !important;
	border-radius: 0 !important;
	font-family: "Mulish", sans-serif !important;
	font-size: 15px !important;
}

/* Het tabpaneel: omrand, aansluitend op de tablijn. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-tabs-system ~ .dsw-bg-white {
	border: 1px solid #E4E4E4 !important;
	border-top: 0 !important;
	margin-top: 0 !important;
}

/* Specs en teksten in de tabs op leesmaat. */
body.ab-eigen-syndified #app.dsw-single-product .dsw-specs-table-body {
	font-size: 15px !important;
	color: #19191E !important;
}

/* De attributie onderaan ("Inhoud door"): aanwezig maar bescheiden.
   Boom: #app.dsw-single-product > .dsw-mb-10 > [secties, attributie]. */
body.ab-eigen-syndified #app.dsw-single-product > div > .dsw-flex.dsw-justify-center {
	opacity: .55 !important;
}

/* ── DE LAADTOESTAND ──────────────────────────────────────────── */

/*
 * Syndified reserveert 1000px met een inline <style> op #app en de
 * Vue-app zet na het mounten style="min-height: auto". Zolang dat
 * attribuut er niet is, is de pagina dus aan het laden: dan tonen we
 * een rustige skeleton-glans in plaats van 1000px kaal wit.
 */
body.ab-eigen-syndified #app:not([style]) {
	background-image: linear-gradient(
		100deg,
		rgba(0, 0, 0, 0) 30%,
		rgba(0, 0, 0, .045) 50%,
		rgba(0, 0, 0, 0) 70%
	);
	background-size: 300% 100%;
	animation: ab-skelet 1.4s ease infinite;
}

@keyframes ab-skelet {
	0%   { background-position: 100% 0; }
	100% { background-position: -100% 0; }
}

@media (prefers-reduced-motion: reduce) {
	body.ab-eigen-syndified #app:not([style]) {
		animation: none;
	}
}

/* ── HET KRUIMELPAD OP DE PRODUCTPAGINA ───────────────────────── */

/*
 * Syndified rendert dit pad zelf (optie styles_show_breadcrumbs), met
 * de juiste categorieketen uit zijn eigen boom. Hier alleen de
 * opmaak: klein, grijs, met dezelfde scheidingstekens als het
 * kruimelpad op de archiefpagina's.
 */
body.ab-eigen-syndified #app.dsw-single-product .dsw-breadcrumb-container {
	padding: 0 !important;
	margin: 0 0 4px !important;
	font-family: "Mulish", sans-serif !important;
	font-size: 13px !important;
	color: #888 !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-breadcrumb-container a {
	color: #505050 !important;
	text-decoration: none !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-breadcrumb-container a:hover {
	color: #3B732C !important;
	text-decoration: underline !important;
}

body.ab-eigen-syndified #app.dsw-single-product .dsw-breadcrumb-separator {
	margin: 0 6px !important;
	opacity: .55 !important;
}

/* ── DE KOOPKNOPPEN OP MOBIEL ─────────────────────────────────── */

/*
 * De app zet aantal, koopknop en "Reserveren" op één rij. Op een
 * telefoon is die rij te smal: de linkerhelft krijgt 98px en breekt
 * met flex-wrap in tweeën, waardoor het aantalvak boven een klein
 * los knopje kwam te staan. Hier wordt het een kolom: eerst aantal
 * plus koopknop op één regel, dan "Reserveren" op de volle breedte.
 */
@media (max-width: 767px) {

	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full {
		flex-direction: column !important;
		align-items: stretch !important;
		gap: 10px !important;
	}

	/* Beide helften over de volle breedte. */
	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div {
		width: 100% !important;
		flex: 0 0 auto !important;
		margin: 0 !important;
	}

	/* Helft 1: aantal en koopknop náást elkaar, niet meer wikkelend. */
	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(input) {
		display: flex !important;
		flex-wrap: nowrap !important;
		align-items: stretch !important;
		gap: 10px !important;
	}

	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(input) > div:first-child {
		flex: 0 0 auto !important;
		width: auto !important;
	}

	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(input) > div:last-child {
		flex: 1 1 auto !important;
		padding-left: 0 !important;
	}

	/*
	 * min-width:0 is hier de sleutel. Zonder die regel weigert een
	 * flex-item kleiner te worden dan zijn inhoud: de koopknop hield
	 * de breedte van "+ 🛒 In winkelwagen" (207px) vast en stak
	 * daarmee 44px buiten de koopkolom. Nu mag hij krimpen tot wat er
	 * is; het plusje sneuvelt om het opschrift te laten passen.
	 */
	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(input) > div:last-child {
		min-width: 0 !important;
	}

	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(input) button {
		width: 100% !important;
		min-width: 0 !important;
		padding-left: 10px !important;
		padding-right: 10px !important;
	}

	body.ab-eigen-syndified #app.dsw-single-product form button.dsw-primary-site-btn svg:first-of-type {
		display: none !important;
	}

	body.ab-eigen-syndified #app.dsw-single-product form button.dsw-primary-site-btn::after {
		font-size: 14px !important;
		margin-left: 6px !important;
	}

	/* Helft 2: het woordje "of" krijgt zijn eigen regel in plaats van
	   een kolom van 88px hoog naast de knop. */
	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(a) {
		display: flex !important;
		flex-direction: column !important;
		align-items: stretch !important;
		gap: 6px !important;
	}

	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(a) > div:first-child {
		height: auto !important;
		padding: 0 !important;
		text-align: center !important;
		font-size: 13px !important;
		color: #888 !important;
	}

	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(a) a {
		width: 100% !important;
	}

	/*
	 * Reserveren precies ónder de koopknop, niet over de volle
	 * breedte: naast het aantalvak stond hij anders 90px verder door
	 * te lopen dan de knop erboven, en dat leest als een langere,
	 * belangrijkere knop dan de hoofdactie.
	 *
	 * 90px = de vaste breedte van het aantalvak (80) plus de tussen-
	 * ruimte (10) die we hierboven zetten.
	 */
	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(input) > div:first-child {
		width: 80px !important;
	}

	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(input) > div:first-child input {
		width: 100% !important;
	}

	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(a) {
		margin-left: 90px !important;
		width: calc(100% - 90px) !important;
	}
}

/*
 * De koopknop draagt alleen icoontjes. Zodra hij de volle breedte
 * krijgt is dat te kaal, dus er komt een opschrift bij — dezelfde
 * belofte als op de kaarten in het raster.
 */
body.ab-eigen-syndified #app.dsw-single-product form button.dsw-primary-site-btn::after {
	content: "In winkelwagen" !important;
	margin-left: 8px !important;
	font-family: "Mulish", sans-serif !important;
	font-size: 15px !important;
	font-weight: 700 !important;
}

html[lang^="fr"] body.ab-eigen-syndified #app.dsw-single-product form button.dsw-primary-site-btn::after {
	content: "Ajouter au panier" !important;
}

html[lang^="en"] body.ab-eigen-syndified #app.dsw-single-product form button.dsw-primary-site-btn::after {
	content: "Add to cart" !important;
}

/* ── ÉÉN HOOFDACTIE, ÉÉN TWEEDE KEUZE ─────────────────────────── */

/*
 * De app geeft "In winkelwagen" en "Reserveren" allebei dezelfde
 * volle groene knop, met het woordje "of" ertussen. Twee even zware
 * knoppen naast elkaar laten de bezoeker kiezen tussen twee gelijken
 * — en gestapeld op mobiel oogt dat als een groen blok.
 *
 * Zelfde verdeling als op de productkaarten: kopen is de hoofdactie
 * (vol groen), reserveren is de tweede keuze (omlijnd). Het "of"
 * mag dan weg; het verschil in vorm zegt het al.
 *
 * Het onderscheid zit in het element: de koopknop is een <button>,
 * de reserveerknop een <a>.
 */
body.ab-eigen-syndified #app.dsw-single-product form a.dsw-primary-site-btn {
	background-color: #fff !important;
	border: 1px solid #3B732C !important;
	color: #3B732C !important;
	font-weight: 700 !important;
	/* De app zet items-center maar geen justify: het opschrift kleefde
	   daardoor tegen de linkerrand van de knop. */
	justify-content: center !important;
	text-align: center !important;
	transition: background-color .15s ease, color .15s ease !important;
}

/* Op desktop staan koop- en reserveerknop naast elkaar; zonder het
   verwijderde "of" ertussen raakten ze elkaar. */
@media (min-width: 768px) {

	body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(a) {
		margin-left: 12px !important;
	}
}

body.ab-eigen-syndified #app.dsw-single-product form a.dsw-primary-site-btn:hover {
	background-color: #3B732C !important;
	border-color: #3B732C !important;
	color: #fff !important;
}

/*
 * Het woordje "of" tussen de twee knoppen.
 *
 * LET OP DE TWEE :not()'s — die zijn er niet voor de sier.
 *
 * De regel mikt op het eerste kind van het actieblok, in de aanname
 * dat daar het tekstje "of" staat en de knop erna. Dat klopt zolang er
 * TWEE knoppen zijn. Staat er maar één — en dat komt voor: bij
 * sommige producten levert de app helemaal geen koopknop — dan is dat
 * eerste kind de KNOP ZELF, en verdween de laatste actie van de
 * pagina. Op /product/stihl-rma-448-v-zonder-accu-en-lader/ stond
 * daardoor geen enkele knop meer: niet kopen, niet reserveren.
 *
 * Een blokje dat een link of een knop bevat is per definitie niet het
 * woordje "of". Vandaar dat we die hier uitsluiten.
 */
body.ab-eigen-syndified #app.dsw-single-product form .dsw-flex-row.dsw-w-full > div:has(a) > div:first-child:not(:has(a)):not(:has(button)) {
	display: none !important;
}
