/**
 * PDSS Managed Offertecalculator – frontend stijl.
 * Scoped onder .pmoc; pas de variabelen aan voor de huisstijl.
 */
.pmoc {
	--pmoc-accent: #f5a623;
	--pmoc-discount: #1a8a4a;
	--pmoc-surcharge: #b3261e;
	--pmoc-border: #e2e2e2;
	--pmoc-bg: #ffffff;
	--pmoc-bg-muted: #f7f7f8;
	--pmoc-text: #1d1d1f;
	--pmoc-text-muted: #6b6b70;
	--pmoc-radius: 10px;
	/* Breakpoints (Divi 5-compatible): phone ≤ 480px, tablet ≤ 980px. */
	color: var(--pmoc-text);
	max-width: 880px;
	width: 100%;
	min-width: 0;
}
.pmoc *, .pmoc *::before, .pmoc *::after { box-sizing: border-box; }
/* Voorkom dat lange productnamen/tokens de container breder dan de viewport duwen. */
.pmoc { overflow-wrap: break-word; word-wrap: break-word; }

.pmoc__title { margin: 0 0 1rem; font-size: 1.4rem; line-height: 1.2; }

.pmoc__grid {
	display: grid;
	grid-template-columns: 1.3fr 1fr;
	gap: 1.5rem;
	align-items: start;
}
.pmoc__grid > * { min-width: 0; }

/* Tablet (Divi 5): grid stackt — samenvatting valt onder de configurator. */
@media (max-width: 980px) {
	.pmoc__grid { grid-template-columns: 1fr; gap: 1rem; }
	.pmoc__summary { position: static !important; max-height: none !important; }
}

/* Layout-varianten — per catalogus instelbaar via shortcode */
.pmoc--layout-equal .pmoc__grid          { grid-template-columns: 1fr 1fr; }
.pmoc--layout-wide-summary .pmoc__grid   { grid-template-columns: 1fr 1.3fr; }
.pmoc--layout-stacked .pmoc__grid        { grid-template-columns: 1fr; }
.pmoc--layout-stacked .pmoc__summary     { position: static; }

@media (max-width: 980px) {
	.pmoc--layout-equal .pmoc__grid,
	.pmoc--layout-wide-summary .pmoc__grid { grid-template-columns: 1fr; }
}

.pmoc-group { border: 0; padding: 0; margin: 0 0 1.25rem; }
/* Groepen met data-requires die niet vervuld is — JS zet [hidden] + .is-hidden.
   We gebruiken display:none zodat de groep volledig uit de flow valt. */
.pmoc-group.is-hidden,
.pmoc-group[hidden] { display: none; }
.pmoc-group__legend {
	font-weight: 700;
	font-size: 0.8rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--pmoc-text-muted);
	margin-bottom: 0.5rem;
	padding: 0;
}

.pmoc-item {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 0.75rem;
	padding: 0.75rem 0.9rem;
	border: 1px solid var(--pmoc-border);
	border-radius: var(--pmoc-radius);
	background: var(--pmoc-bg);
	cursor: pointer;
	margin-bottom: 0.5rem;
	transition: border-color 0.15s ease, box-shadow 0.15s ease, opacity 0.15s ease;
	max-width: 100%;
}
.pmoc-item:hover { border-color: var(--pmoc-accent); }
.pmoc-item:has( input:checked ) { border-color: var(--pmoc-accent); box-shadow: 0 0 0 1px var(--pmoc-accent); }
.pmoc-item.is-disabled { opacity: 0.5; cursor: not-allowed; }

.pmoc-item__radio, .pmoc-item__check { width: 1.15rem; height: 1.15rem; margin: 0; accent-color: var(--pmoc-accent); flex: 0 0 auto; }
.pmoc-item__body { display: flex; flex-direction: column; gap: 0.1rem; flex: 1 1 auto; min-width: 0; }
.pmoc-item__name { font-weight: 600; overflow-wrap: anywhere; }
.pmoc-item__desc { font-size: 0.83rem; color: var(--pmoc-text-muted); overflow-wrap: anywhere; }

/* --- Prijsblok per product (Telenet-stijl: promo + doorgestreepte normaalprijs) --- */
.pmoc-price {
	display: inline-flex;
	flex-direction: column;
	align-items: flex-end;
	gap: 0.1rem;
	font-variant-numeric: tabular-nums;
	white-space: nowrap;
	line-height: 1.15;
	min-width: 6.5rem;
	flex: 0 0 auto;
	margin-left: auto;
}
.pmoc-price__badge {
	font-size: 0.65rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--pmoc-bg);
	background: var(--pmoc-accent);
	padding: 2px 6px;
	border-radius: 4px;
	align-self: flex-end;
	margin-bottom: 0.15rem;
}
.pmoc-price__old {
	font-size: 0.78rem;
	color: var(--pmoc-text-muted);
	text-decoration: line-through;
	text-decoration-thickness: 1px;
}
.pmoc-price__now {
	display: inline-flex;
	align-items: baseline;
	gap: 0.2rem;
}
.pmoc-price__amount {
	font-weight: 700;
	font-size: 1.05rem;
	color: var(--pmoc-text);
}
.pmoc-price--has-promo .pmoc-price__amount { color: var(--pmoc-discount); }
.pmoc-price__per {
	font-size: 0.72rem;
	color: var(--pmoc-text-muted);
}
.pmoc-price__duration {
	font-size: 0.7rem;
	color: var(--pmoc-text-muted);
	font-style: italic;
}
/* [hidden] expliciet verbergen: een aantal van deze spans hebben een eigen
   display-regel die anders zou winnen van de UA-stylesheet. */
.pmoc-price [hidden] { display: none !important; }

/* Aantal-stepper */
.pmoc-qty { display: inline-flex; align-items: center; gap: 0.25rem; flex: 0 0 auto; }
.pmoc-qty__btn {
	width: 1.7rem; height: 1.7rem; line-height: 1;
	border: 1px solid var(--pmoc-border); border-radius: 6px;
	background: var(--pmoc-bg-muted); cursor: pointer; font-size: 1rem;
}
.pmoc-qty__btn:disabled { opacity: 0.4; cursor: not-allowed; }
.pmoc-qty__btn.is-group-cap { cursor: not-allowed; }
.pmoc-group__cap-hint {
	margin-top: 0.4rem;
	padding: 0.4rem 0.6rem;
	font-size: 0.8rem;
	color: var(--pmoc-text-muted);
	background: var(--pmoc-bg-muted);
	border: 1px dashed var(--pmoc-border);
	border-radius: 6px;
}
.pmoc-item__qty { width: 2.6rem; text-align: center; padding: 0.25rem; border: 1px solid var(--pmoc-border); border-radius: 6px; }

/* Resultaat */
.pmoc__summary {
	border: 1px solid var(--pmoc-border);
	border-radius: var(--pmoc-radius);
	background: var(--pmoc-bg-muted);
	padding: 1.1rem 1.2rem;
	position: relative;
	position: sticky;
	top: 1rem;
}
.pmoc-result__placeholder, .pmoc-result__error { margin: 0; color: var(--pmoc-text-muted); }
.pmoc-result__error { color: var(--pmoc-surcharge); }
.pmoc-result__lines, .pmoc-result__adjustments, .pmoc-result__messages { list-style: none; margin: 0 0 0.5rem; padding: 0; }
.pmoc-result__line, .pmoc-result__adjustment, .pmoc-result__row {
	display: flex; justify-content: space-between; gap: 1rem; padding: 0.28rem 0; font-variant-numeric: tabular-nums;
}
.pmoc-result__qty { color: var(--pmoc-text-muted); font-size: 0.85em; }
.pmoc-result__note { color: var(--pmoc-text-muted); font-size: 0.8em; }
.pmoc-result__adjustment.is-discount { color: var(--pmoc-discount); }
.pmoc-result__adjustment.is-surcharge { color: var(--pmoc-surcharge); }
.pmoc-result__messages { margin: 0.5rem 0; }
.pmoc-result__message { position: relative; padding-left: 1.3rem; color: var(--pmoc-discount); font-size: 0.88rem; }
.pmoc-result__message::before { content: "✓"; position: absolute; left: 0; font-weight: 700; }
.pmoc-result__row--total { border-top: 2px solid var(--pmoc-text); margin-top: 0.5rem; padding-top: 0.6rem; font-size: 1.15rem; font-weight: 700; }
.pmoc-result__row--after { color: var(--pmoc-text-muted); font-size: 0.9rem; }
.pmoc-result__timeline { border-top: 1px solid var(--pmoc-border); margin-top: 0.65rem; padding-top: 0.55rem; }
.pmoc-result__timeline-head { font-size: 0.78rem; font-weight: 700; color: var(--pmoc-text-muted); margin-bottom: 0.3rem; }
.pmoc-result__timeline-list { list-style: none; margin: 0; padding: 0; }
.pmoc-result__seg { display: flex; justify-content: space-between; gap: 1rem; padding: 0.18rem 0; font-size: 0.85em; color: var(--pmoc-text-muted); font-variant-numeric: tabular-nums; }
.pmoc-result__disclaimer { margin: 0.7rem 0 0; padding-top: 0.5rem; border-top: 1px solid var(--pmoc-border); font-size: 10px; line-height: 1.4; color: var(--pmoc-text-muted); }
.pmoc-result__disclaimer a { color: inherit; text-decoration: underline; }

.pmoc-result__spinner {
	position: absolute; top: 0.9rem; right: 1rem;
	width: 1.1rem; height: 1.1rem; border: 2px solid var(--pmoc-border);
	border-top-color: var(--pmoc-accent); border-radius: 50%; animation: pmoc-spin 0.7s linear infinite;
}
@keyframes pmoc-spin { to { transform: rotate(360deg); } }

/* Offerteformulier */
.pmoc-offer { margin-top: 1.1rem; border-top: 1px solid var(--pmoc-border); padding-top: 1rem; }
.pmoc-offer__title { margin: 0 0 0.6rem; font-size: 1rem; }
.pmoc-offer__field { margin-bottom: 0.7rem; display: flex; flex-direction: column; gap: 0.25rem; }
.pmoc-offer__field > label { font-size: 0.83rem; color: var(--pmoc-text-muted); }
.pmoc-offer__field input,
.pmoc-offer__field textarea,
.pmoc-offer__field select {
	width: 100%; padding: 0.5rem 0.6rem; border: 1px solid var(--pmoc-border); border-radius: 6px; font: inherit;
	background: var(--pmoc-bg, #fff);
	color: var(--pmoc-text, #1d1d1f);
}
.pmoc-offer__field--checkbox { flex-direction: row; align-items: flex-start; gap: 0.5rem; }
.pmoc-offer__check-label { display: flex; gap: 0.5rem; align-items: flex-start; font-size: 0.88rem; color: var(--pmoc-text); }
.pmoc-offer__check-label input { width: auto; flex: 0 0 auto; margin-top: 0.18rem; }
.pmoc-offer__help { font-size: 0.78rem; color: var(--pmoc-text-muted); }
.pmoc-offer__required { color: var(--pmoc-surcharge, #b3261e); margin-left: 0.15rem; }
.pmoc-offer__input:invalid:not(:focus):not(:placeholder-shown) {
	border-color: var(--pmoc-surcharge, #b3261e);
}
.pmoc-offer__consent { display: flex; gap: 0.5rem; align-items: flex-start; font-size: 0.83rem; color: var(--pmoc-text-muted); margin: 0.4rem 0 0.8rem; }
.pmoc-offer__submit {
	width: 100%; padding: 0.7rem 1rem; border: 0; border-radius: 8px;
	background: var(--pmoc-accent); color: #1d1d1f; font-weight: 700; cursor: pointer; font-size: 1rem;
}
.pmoc-offer__submit:disabled { opacity: 0.6; cursor: progress; }
.pmoc-offer__feedback { margin: 0.6rem 0 0; font-size: 0.9rem; }
.pmoc-offer__feedback.is-ok { color: var(--pmoc-discount); }
.pmoc-offer__feedback.is-error { color: var(--pmoc-surcharge); }

/* Honeypot — onzichtbaar voor mens + screenreader maar NIET via display:none
   (sommige spam-bots filteren display:none-velden weg).
   Off-screen positioning + zero size + tabindex=-1 (in HTML) zorgt dat
   echte gebruikers er nooit op landen, terwijl naive bots elk name="..."
   in het formulier blindelings invullen. */
.pmoc-offer__hp {
	position: absolute !important;
	left: -10000px !important;
	top: auto;
	width: 1px;
	height: 1px;
	overflow: hidden;
	opacity: 0;
	pointer-events: none;
}

/* --- Locked-state na submit (bevriest tot page refresh) -------------
   Visueel én functioneel volledig vergrendeld. CSS + HTML-disabled
   + JS early-return-guard zorgen dat geen enkele reset-pad bestaat
   behalve een echte page refresh. */
.pmoc.is-submitted .pmoc-item,
.pmoc.is-submitted .pmoc-tile__head,
.pmoc.is-submitted .pmoc-tile__info,
.pmoc.is-submitted .pmoc-group__info,
.pmoc.is-submitted .pmoc-item__info {
	pointer-events: none;
	opacity: 0.6;
	cursor: not-allowed;
}
.pmoc.is-submitted .pmoc-offer__field input,
.pmoc.is-submitted .pmoc-offer__field textarea,
.pmoc.is-submitted .pmoc-offer__consent,
.pmoc.is-submitted .pmoc-offer__submit {
	pointer-events: none;
	opacity: 0.7;
	cursor: not-allowed;
}
.pmoc.is-submitted .pmoc-offer__submit {
	opacity: 0.85; /* duidelijker zichtbaar "Aanvraag verstuurd" */
	background: var(--pmoc-discount, #1a8a4a);
	color: #fff;
}

/* --- Product-thumbnail (links in pmoc-item) --- */
.pmoc-item__thumb {
	flex: 0 0 auto;
	width: 48px; height: 48px;
	border-radius: 6px;
	overflow: hidden;
	background: var(--pmoc-bg-muted);
	border: 1px solid var(--pmoc-border);
}
.pmoc-item__thumb img {
	width: 100%; height: 100%;
	object-fit: cover; display: block;
}

/* --- Fullscreen-bevestiging overlay --- */
body.pmoc-fullscreen-open { overflow: hidden; }
.pmoc-fullscreen {
	position: fixed;
	inset: 0;
	background: rgba(0, 0, 0, 0.55);
	display: flex;
	align-items: center;
	justify-content: center;
	/* Boven de portaled mobile basket (2147483600). Inline-style in
	   JS overrult dit verder, dit is enkel een veilige fallback. */
	z-index: 2147483700;
	padding: 1.5rem;
	animation: pmoc-fade-in 0.18s ease-out;
}
@keyframes pmoc-fade-in { from { opacity: 0; } to { opacity: 1; } }
.pmoc-fullscreen__inner {
	/* Harde fallback-kleuren — sinds 0.8.0.8 wordt de overlay naar <body>
	   geportaald en valt de CSS-variabele-cascade van .pmoc weg.
	   Zonder fallback wordt het paneel transparant en lijkt de bevestiging
	   in de calculator te 'versmelten'. */
	background-color: #ffffff;
	background-color: var(--pmoc-bg, #ffffff);
	color: #1d1d1f;
	color: var(--pmoc-text, #1d1d1f);
	border-radius: 15px;
	border-radius: calc(var(--pmoc-radius, 10px) * 1.5);
	padding: 2.5rem 2rem;
	max-width: 560px;
	width: 100%;
	box-shadow: 0 20px 60px rgba(0,0,0,0.25);
	position: relative;
	text-align: center;
}
.pmoc-fullscreen__close {
	position: absolute;
	top: 0.5rem; right: 0.7rem;
	background: none; border: 0;
	font-size: 1.6rem; line-height: 1;
	cursor: pointer;
	color: var(--pmoc-text-muted);
	padding: 0.25rem 0.5rem;
}
.pmoc-fullscreen__close { color: #6b6b70; color: var(--pmoc-text-muted, #6b6b70); }
.pmoc-fullscreen__close:hover { color: #1d1d1f; color: var(--pmoc-text, #1d1d1f); }
.pmoc-fullscreen__title {
	margin: 0 0 1rem;
	color: #f5a623;
	color: var(--pmoc-accent, #f5a623);
	font-size: 1.6rem;
	line-height: 1.2;
}
.pmoc-fullscreen__body {
	font-size: 1rem;
	line-height: 1.5;
}
.pmoc-fullscreen__body a { color: #f5a623; color: var(--pmoc-accent, #f5a623); }

.pmoc .screen-reader-text {
	position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
	overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}

/* =================================================================
   A11Y — keyboard-focus rings (sinds v0.8.3)

   Browser-defaults verbergen vaak outline op buttons binnen flex/grid
   containers wanneer thema-CSS dat doet. We restoren een duidelijk
   zichtbare focus-indicator voor toetsenbord-gebruikers.

   We gebruiken :focus-visible (niet :focus) zodat klik-muis-gebruikers
   geen ring zien — alleen tab-navigatie triggert hem.
   ================================================================= */
.pmoc button:focus-visible,
.pmoc input[type="checkbox"]:focus-visible,
.pmoc input[type="radio"]:focus-visible,
.pmoc input[type="number"]:focus-visible,
.pmoc input[type="text"]:focus-visible,
.pmoc input[type="email"]:focus-visible,
.pmoc input[type="tel"]:focus-visible,
.pmoc textarea:focus-visible,
.pmoc select:focus-visible,
.pmoc .pmoc-item:has(input:focus-visible) {
	outline: 2px solid var(--pmoc-accent, #f5a623);
	outline-offset: 2px;
	border-radius: 4px;
}
.pmoc .pmoc-tile__head:focus-visible {
	outline: 2px solid var(--pmoc-accent, #f5a623);
	outline-offset: -2px; /* binnenkant van de tile */
}
.pmoc-sheet__close:focus-visible,
.pmoc__summary-close:focus-visible,
.pmoc-fullscreen__close:focus-visible,
.pmoc-confirm__cancel:focus-visible,
.pmoc-confirm__ok:focus-visible {
	outline: 2px solid var(--pmoc-accent, #f5a623);
	outline-offset: 2px;
}
.pmoc__summary-toggle:focus-visible {
	outline: 3px solid #1d1d1f;
	outline-offset: -3px; /* binnenkant van de accent-balk */
}

/* =============================================================
   MODERN LAYOUT — configurator-stijl met tiles, info-sheets en
   sticky basket. Geactiveerd via .pmoc--style-modern. Twee
   varianten: --variant-generic (neutraal, gebruikt accent) en
   --variant-telecom (dichter aan op telecom-northstar-look).
   ============================================================= */

.pmoc--style-modern {
	--pmoc-mod-bg-soft: #f5f6fa;
	--pmoc-mod-card-shadow: 0 1px 2px rgba(20,20,30,0.04), 0 4px 14px rgba(20,20,30,0.06);
	--pmoc-mod-card-radius: calc(var(--pmoc-radius) * 1.4);
	--pmoc-mod-tile-pad: 1rem 1.15rem;
	max-width: 1180px;
}

.pmoc--variant-telecom {
	--pmoc-mod-bg-soft: #f3f6fc;
	--pmoc-mod-card-shadow: 0 2px 8px rgba(20,40,80,0.08), 0 12px 28px rgba(20,40,80,0.08);
	--pmoc-mod-card-radius: 18px;
}

.pmoc--style-modern .pmoc__grid {
	grid-template-columns: minmax(0, 1fr) 360px;
	gap: 2rem;
}
/* Tablet (Divi 5): grid stackt — samenvatting verschijnt onder de tiles. */
@media (max-width: 980px) {
	.pmoc--style-modern .pmoc__grid { grid-template-columns: 1fr; gap: 1rem; }
}

.pmoc--style-modern .pmoc-group { margin-bottom: 1rem; }
.pmoc--style-modern .pmoc-group__legend {
	font-size: 0.95rem;
	text-transform: none;
	letter-spacing: 0;
	color: var(--pmoc-text);
	font-weight: 700;
	display: flex;
	align-items: center;
	gap: 0.6rem;
	margin-bottom: 0.65rem;
}
.pmoc--style-modern .pmoc-group--card {
	background: var(--pmoc-bg);
	border: 1px solid var(--pmoc-border);
	border-radius: var(--pmoc-mod-card-radius);
	padding: 1.1rem 1.2rem;
	box-shadow: var(--pmoc-mod-card-shadow);
}

/* --- Group info button (naast de legend) --- */
.pmoc-group__info,
.pmoc-tile__info,
.pmoc-item__info {
	background: none;
	border: 1px solid transparent;
	color: var(--pmoc-accent);
	font: inherit;
	font-size: 0.8rem;
	padding: 0.1rem 0.5rem;
	border-radius: 6px;
	cursor: pointer;
	text-decoration: underline;
	text-underline-offset: 2px;
}
.pmoc-group__info:hover,
.pmoc-tile__info:hover,
.pmoc-item__info:hover {
	background: var(--pmoc-bg-muted);
	border-color: var(--pmoc-border);
	text-decoration: none;
}
.pmoc-item__info {
	align-self: flex-start;
	padding-left: 0;
	font-size: 0.78rem;
}

/* --- Tile (qty-groep in modern) --- */
.pmoc-tile {
	border: 1px solid var(--pmoc-border);
	border-radius: var(--pmoc-mod-card-radius);
	background: var(--pmoc-bg);
	box-shadow: var(--pmoc-mod-card-shadow);
	overflow: hidden;
	position: relative;
	margin-bottom: 1rem;
	transition: border-color 0.18s ease, box-shadow 0.18s ease;
}
.pmoc-tile.is-filled { border-color: var(--pmoc-accent); }
.pmoc-tile__head {
	display: flex;
	align-items: center;
	gap: 0.9rem;
	padding: var(--pmoc-mod-tile-pad);
	width: 100%;
	background: none;
	border: 0;
	text-align: left;
	cursor: pointer;
	font: inherit;
	color: inherit;
}
.pmoc-tile__head:hover { background: var(--pmoc-mod-bg-soft); }
.pmoc-tile__thumb {
	flex: 0 0 auto;
	width: 56px; height: 56px;
	border-radius: 10px;
	overflow: hidden;
	background: var(--pmoc-mod-bg-soft);
	border: 1px solid var(--pmoc-border);
}
.pmoc-tile__thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pmoc-tile__head-body { display: flex; flex-direction: column; gap: 0.15rem; flex: 1 1 auto; min-width: 0; }
.pmoc-tile__legend { font-weight: 700; font-size: 1.02rem; }
.pmoc-tile__hint   { font-size: 0.83rem; color: var(--pmoc-text-muted); }
.pmoc-tile.is-filled .pmoc-tile__hint { color: var(--pmoc-discount); font-weight: 600; }
.pmoc-tile__chevron {
	flex: 0 0 auto;
	width: 1.8rem; height: 1.8rem; line-height: 1.8rem;
	text-align: center;
	border-radius: 50%;
	background: var(--pmoc-mod-bg-soft);
	border: 1px solid var(--pmoc-border);
	font-size: 1.2rem;
	color: var(--pmoc-text-muted);
	transition: transform 0.2s ease;
}
.pmoc-tile[data-tile-state="active"] .pmoc-tile__chevron { transform: rotate(45deg); }
.pmoc-tile__info {
	position: absolute;
	top: 0.6rem; right: 3rem;
	font-size: 0.78rem;
}
.pmoc-tile__body {
	padding: 0 1.15rem 1rem;
	display: none;
}
.pmoc-tile[data-tile-state="active"] .pmoc-tile__body { display: block; }

/* In modern: items binnen een tile worden iets compacter en hebben geen
   eigen schaduw — de tile is de container. */
.pmoc--style-modern .pmoc-item {
	border-radius: 10px;
	padding: 0.7rem 0.85rem;
}
.pmoc--style-modern .pmoc-tile .pmoc-item {
	background: var(--pmoc-mod-bg-soft);
	border-color: transparent;
}
.pmoc--style-modern .pmoc-tile .pmoc-item:has(input:checked),
.pmoc--style-modern .pmoc-tile .pmoc-item:has(.pmoc-item__qty:not([value="0"])) {
	background: var(--pmoc-bg);
	border-color: var(--pmoc-accent);
}

/* --- Summary (sticky basket) --- */
.pmoc--style-modern .pmoc__summary {
	padding: 0;
	background: var(--pmoc-bg);
	border-radius: var(--pmoc-mod-card-radius);
	border: 1px solid var(--pmoc-border);
	box-shadow: var(--pmoc-mod-card-shadow);
	overflow: hidden;
}
.pmoc--style-modern .pmoc__summary-inner { padding: 1.2rem 1.25rem; }
.pmoc--style-modern .pmoc__summary-title  { margin: 0 0 0.6rem; font-size: 1.05rem; }
.pmoc--style-modern .pmoc__summary-close  {
	display: none;
	position: absolute;
	top: 0.5rem; right: 0.6rem;
	background: none; border: 0;
	font-size: 1.6rem; cursor: pointer;
	color: var(--pmoc-text-muted);
	padding: 0.25rem 0.55rem;
}

/* Sticky basket: enkel op desktop (>980px). Op tablet/mobiel valt de
   samenvatting in normale flow onder de tiles, wat veel betrouwbaarder
   werkt achter thema's met `overflow:hidden`-regio's (Divi e.a.). */
@media (min-width: 981px) {
	.pmoc--sticky-basket .pmoc__summary--sticky {
		position: sticky;
		top: 1rem;
		align-self: start;
		max-height: calc(100vh - 2rem);
		overflow: auto;
	}
}

/* Toggle + close zijn standaard verborgen — alleen relevant op portaled
   summary (zie hieronder). De shortcode rendert deze knoppen sowieso enkel
   als sticky_basket aan staat. */
.pmoc--style-modern .pmoc__summary-toggle,
.pmoc--style-modern .pmoc__summary-close { display: none; }

/* -----------------------------------------------------------------
   PORTALED MOBILE STICKY BASKET (sinds 0.8.0.2)

   Op tablet+telefoon (≤ 980px) verplaatst JS de hele .pmoc__summary
   naar document.body — een 'portal'-patroon. Hierdoor ontsnapt het
   element aan ancestors met `transform`, `filter` of `overflow:hidden`
   (Divi, Elementor, en de meeste pagebuilders gebruiken die op hun
   secties — wat de 0.8.0 `position:fixed`-aanpak deed crashen).

   Sinds 0.8.0.5 worden html+body ook gepauzeerd via een class-reset:
   sommige page-builders zetten transform/filter rechtstreeks op body
   voor scroll-animaties, en dán wordt body de containing block voor
   onze position:fixed — wat hem aan de bodem van de pagina plakt
   i.p.v. aan de viewport. De reset geldt enkel zolang de basket
   geportaald is en raakt geen andere site-CSS aan.

   Collapsed = 56px peek (de toggle-knop). Tap → expand tot max 86vh.
   ----------------------------------------------------------------- */
.pmoc-has-portaled-basket,
.pmoc-fullscreen-open {
	transform: none !important;
	filter: none !important;
	perspective: none !important;
	contain: none !important;
	will-change: auto !important;
}
.pmoc__summary.pmoc__summary--portaled {
	position: fixed !important;
	left: 0 !important;
	right: 0 !important;
	bottom: 0 !important;
	top: auto !important;
	z-index: 2147483600 !important;
	/* Solid fallback eerst (= #fff) zodat de bar nooit transparant kan
	   blijven als de CSS-variabele om wat reden dan ook niet beschikbaar
	   is. De var() overschrijft als-ie wel werkt. */
	background-color: #ffffff;
	background-color: var(--pmoc-bg, #ffffff);
	color: #1d1d1f;
	color: var(--pmoc-text, #1d1d1f);
	border-radius: 16px 16px 0 0;
	box-shadow: 0 -8px 30px rgba(0,0,0,0.18);
	/* 95vh: panel mag bijna heel scherm vullen wanneer open.
	   95dvh = dynamic viewport height — houdt rekening met mobile
	   browser chrome (URL-bar etc.) zodat de close-knop bovenaan
	   altijd binnen het zichtbare deel blijft, ook als de bar verschijnt
	   of verdwijnt tijdens scrollen. !important wint van eventuele
	   thema-override van max-height. */
	max-height: 95vh !important;
	max-height: 95dvh !important;
	transform: translateY(calc(100% - 56px));
	transition: transform 0.28s ease;
	overflow: hidden !important;
	display: flex !important;
	flex-direction: column !important;
	padding: 0 !important;
	border: 0 !important;
	margin: 0 !important;
	max-width: 100vw !important;
	width: auto !important;
}
.pmoc__summary--portaled .pmoc__summary-inner {
	/* Inner-container krijgt ook expliciet een achtergrond zodat de
	   semi-transparante overlay (.pmoc-basket-open::before) niet
	   doorheen schemert. */
	background-color: #ffffff;
	background-color: var(--pmoc-bg, #ffffff);
}
.pmoc__summary--portaled.is-empty {
	transform: translateY(100%);
	pointer-events: none;
}
.pmoc__summary--portaled.is-open {
	transform: translateY(0);
}
.pmoc__summary--portaled .pmoc__summary-toggle {
	display: flex;
	flex: 0 0 auto;
	width: 100%;
	min-height: 56px;
	padding: 0 1.1rem;
	border: 0;
	background: var(--pmoc-accent);
	color: #1d1d1f;
	font: inherit;
	font-weight: 700;
	cursor: pointer;
	align-items: center;
	justify-content: space-between;
	border-radius: 16px 16px 0 0;
}
.pmoc__summary--portaled .pmoc__summary-toggle[hidden] { display: none; }
.pmoc__summary--portaled.is-open .pmoc__summary-toggle {
	/* In open-stand fungeert de toggle als header/handle: behoud accent-balk
	   maar geef hem een subtielere uitstraling. */
	background: var(--pmoc-bg-muted);
	color: var(--pmoc-text);
	border-radius: 16px 16px 0 0;
}
.pmoc__summary--portaled.is-open .pmoc__summary-toggle::after {
	content: "▾";
	font-size: 1rem;
	color: var(--pmoc-text-muted);
}
/* Close-knop is enkel zichtbaar wanneer de basket UITGEVOUWEN is. In peek-
   state (= alleen de toggle-bar onderaan) hoort de X weg te blijven —
   tappen op de toggle-bar zelf is dan de manier om hem te openen. */
.pmoc__summary--portaled .pmoc__summary-close { display: none; }
.pmoc__summary--portaled.is-open .pmoc__summary-close {
	display: block;
	position: absolute;
	top: 0.4rem;
	right: 0.5rem;
	width: 2.4rem;
	height: 2.4rem;
	background: rgba(255,255,255,0.92);
	border: 1px solid rgba(0,0,0,0.08);
	border-radius: 50%;
	font-size: 1.5rem;
	line-height: 1;
	cursor: pointer;
	color: #1d1d1f;
	color: var(--pmoc-text, #1d1d1f);
	padding: 0;
	z-index: 10;
	box-shadow: 0 2px 6px rgba(0,0,0,0.12);
}
.pmoc__summary--portaled.is-open .pmoc__summary-close:hover,
.pmoc__summary--portaled.is-open .pmoc__summary-close:focus {
	background: #fff;
	background: var(--pmoc-bg, #fff);
}
.pmoc__summary--portaled .pmoc__summary-inner {
	flex: 1 1 auto;
	overflow-y: auto;
	padding: 1.1rem 1.2rem 1.4rem;
}
body.pmoc-basket-open { /* optioneel: dim achtergrond als basket open is */
	overflow: hidden;
}
body.pmoc-basket-open::before {
	content: "";
	position: fixed;
	inset: 0;
	background: rgba(15,18,30,0.35);
	z-index: 99997;
	animation: pmoc-fade-in 0.18s ease-out;
}

/* --- Info-sheet (slide-out panel) --- */
body.pmoc-sheet-open { overflow: hidden; }
.pmoc-sheet, .pmoc-confirm {
	position: fixed;
	inset: 0;
	background: rgba(15,18,30,0.45);
	display: flex;
	align-items: flex-start;
	justify-content: flex-end;
	z-index: 100000;
	animation: pmoc-fade-in 0.18s ease-out;
}
.pmoc-confirm { align-items: center; justify-content: center; padding: 1.5rem; }
.pmoc-sheet__panel {
	background: var(--pmoc-bg);
	color: var(--pmoc-text);
	width: min(440px, 100%);
	height: 100%;
	overflow: auto;
	padding: 1.6rem 1.6rem 2rem;
	box-shadow: -10px 0 30px rgba(0,0,0,0.18);
	position: relative;
	animation: pmoc-slide-in 0.22s ease-out;
}
@keyframes pmoc-slide-in { from { transform: translateX(20px); opacity: 0; } to { transform: none; opacity: 1; } }
@media (max-width: 720px) {
	.pmoc-sheet { align-items: stretch; }
	.pmoc-sheet__panel { width: 100%; }
}
.pmoc-sheet__close, .pmoc-confirm__panel button.pmoc-confirm__cancel {
	background: none; border: 0; cursor: pointer;
}
.pmoc-sheet__close {
	position: absolute;
	top: 0.5rem; right: 0.6rem;
	font-size: 1.7rem; line-height: 1;
	color: var(--pmoc-text-muted);
	padding: 0.25rem 0.55rem;
}
.pmoc-sheet__close:hover { color: var(--pmoc-text); }
.pmoc-sheet__title { margin: 0 0 0.8rem; font-size: 1.25rem; }
.pmoc-sheet__desc  { margin: 0 0 1rem; color: var(--pmoc-text-muted); }
.pmoc-sheet__body { font-size: 0.95rem; line-height: 1.55; }
.pmoc-sheet__body ul, .pmoc-sheet__body ol { padding-left: 1.2rem; margin: 0.5rem 0; }
.pmoc-sheet__body li { margin: 0.2rem 0; }
.pmoc-sheet__body a { color: var(--pmoc-accent); }

/* --- Confirm-remove modal --- */
.pmoc-confirm__panel {
	background: var(--pmoc-bg);
	border-radius: var(--pmoc-mod-card-radius);
	padding: 1.6rem 1.7rem 1.3rem;
	max-width: 440px;
	width: 100%;
	box-shadow: 0 20px 60px rgba(0,0,0,0.25);
	animation: pmoc-fade-in 0.18s ease-out;
}
.pmoc-confirm__title { margin: 0 0 0.6rem; font-size: 1.15rem; line-height: 1.25; }
.pmoc-confirm__body  { margin: 0 0 1.2rem; color: var(--pmoc-text-muted); font-size: 0.95rem; }
.pmoc-confirm__actions { display: flex; justify-content: flex-end; gap: 0.7rem; }
.pmoc-confirm__cancel, .pmoc-confirm__ok {
	padding: 0.55rem 1rem;
	border-radius: 8px;
	border: 1px solid var(--pmoc-border);
	background: var(--pmoc-bg);
	color: var(--pmoc-text);
	font: inherit;
	cursor: pointer;
}
.pmoc-confirm__ok {
	background: var(--pmoc-surcharge);
	color: #fff;
	border-color: var(--pmoc-surcharge);
	font-weight: 600;
}
.pmoc-confirm__cancel:hover { background: var(--pmoc-mod-bg-soft); }
.pmoc-confirm__ok:hover     { filter: brightness(1.06); }

/* --- Phone (Divi 5 phone breakpoint ≤ 480px) -------------------------- */
@media (max-width: 480px) {
	.pmoc { font-size: 0.96rem; }
	.pmoc__title { font-size: 1.18rem; }

	.pmoc-item { padding: 0.6rem 0.7rem; gap: 0.55rem; }
	.pmoc-item__thumb { width: 40px; height: 40px; }
	.pmoc-item__body { flex: 1 1 100%; }
	.pmoc-price { min-width: 0; align-items: flex-start; margin-left: 0; width: 100%; flex-direction: row; flex-wrap: wrap; gap: 0.35rem; }
	.pmoc-price__now { margin-left: auto; }
	.pmoc-price__amount { font-size: 1rem; }

	.pmoc--style-modern .pmoc-tile__head { padding: 0.85rem 0.9rem; gap: 0.65rem; }
	.pmoc--style-modern .pmoc-tile__thumb { width: 44px; height: 44px; }
	.pmoc--style-modern .pmoc-tile__legend { font-size: 0.98rem; }
	.pmoc--style-modern .pmoc-tile__body { padding: 0 0.85rem 0.85rem; }
	.pmoc--style-modern .pmoc-tile__chevron { width: 1.6rem; height: 1.6rem; line-height: 1.6rem; font-size: 1.05rem; }
	.pmoc--style-modern .pmoc-tile__info { top: 0.5rem; right: 2.6rem; font-size: 0.74rem; }

	.pmoc--style-modern .pmoc__summary-inner { padding: 1rem 1.05rem; }
	.pmoc--style-modern .pmoc-group--card { padding: 0.85rem 0.95rem; }

	.pmoc-qty { gap: 0.2rem; }
	.pmoc-qty__btn { width: 1.85rem; height: 1.85rem; font-size: 1.1rem; } /* iets groter voor vinger-tap */
	.pmoc-item__qty { width: 2.4rem; }

	/* Offerteformulier velden volledig op één rij. */
	.pmoc-offer__field input, .pmoc-offer__field textarea { font-size: 16px; } /* voorkomt iOS-zoom op focus */
}

/* --- Variant: telecom (Telenet-look) --- */
.pmoc--variant-telecom .pmoc-tile { border-radius: 18px; }
.pmoc--variant-telecom .pmoc-tile__thumb { border-radius: 12px; }
.pmoc--variant-telecom .pmoc-tile__chevron {
	background: var(--pmoc-accent);
	color: #fff;
	border-color: transparent;
	font-weight: 600;
}
.pmoc--variant-telecom .pmoc-tile.is-filled { box-shadow: 0 2px 8px rgba(20,40,80,0.08), 0 14px 30px rgba(20,40,80,0.12); }
.pmoc--variant-telecom .pmoc-price__amount { font-size: 1.15rem; }
.pmoc--variant-telecom .pmoc-price__badge {
	color: #1d1d1f;
	background: #ffe17a;
	font-weight: 800;
}
.pmoc--variant-telecom .pmoc__summary { background: linear-gradient(180deg, var(--pmoc-bg), var(--pmoc-mod-bg-soft)); }
.pmoc--variant-telecom .pmoc-offer__submit { border-radius: 10px; box-shadow: 0 6px 14px rgba(245,166,35,0.32); }

