/*
 * Vergelijker — resultaatkaarten, filters, badges, prijzen en CTA's.
 *
 * HERKOMST VAN DE WAARDEN
 * -----------------------
 * De originele site rendert de vergelijker met een extern React-widget van TDS
 * dat styled-components gebruikt; er bestaat geen .css-bestand. De CSS is
 * daarom uit de widgetbundles geëxtraheerd met
 * `_migration/tools/extract_tds_css.py`. Resultaat:
 *   - `_migration/raw/tds/extracted_theme.json`  — het volledige TDS-thema
 *   - `_migration/raw/tds/extracted_css.txt`     — 315 styled-components
 *
 * Elke regel hieronder is gemarkeerd:
 *   [TDS]    letterlijk uit de geëxtraheerde bron-CSS of het TDS-thema;
 *            de componentId staat erbij (bv. sc-13m9tqj-0).
 *   [SHOT]   gereconstrueerd uit de screenshots in
 *            `_migration/shots/original/<viewport>/vergelijker-*.png`.
 *   [GTA]    eigen keuze: hoort bij onze server-side filter-UI, die het
 *            origineel niet heeft (het widget filtert client-side).
 *
 * RESPONSIVE
 * ----------
 * Het widget schakelt op *containerbreedte* via een klasse die het in JS zet
 * (`mediaSizeName: "smtablet-down"` → container ≤ 600px). Dat is hier vertaald
 * naar echte media queries op de breakpoints uit het TDS-thema
 * (`media.smtablet: 600`, `media.mdtablet: 768`, `media.smdesktop: 992`),
 * zodat alles ook zonder JavaScript klopt.
 */

/* ==========================================================================
   0. Het lettertype van het widget — [TDS] font.family
   --------------------------------------------------------------------------
   `--gta-font` stond hier vanaf het begin op `'Open Sans', Helvetica, Arial`,
   maar het lettertype zelf werd nergens geladen: er was geen @font-face en geen
   Google-Fonts-verwijzing. De hele vergelijker rende dus in Arial terwijl de
   bron Open Sans gebruikt. Dat is geen detail: de letterbak van Arial is
   1,117 x de korpsgrootte en die van Open Sans 1,362, en de tekst is ~5 %
   smaller. Daardoor was de knop "Bekijken" 87,6 in plaats van 91,06 px breed
   en liepen alle kolommen in de kaart mee.

   De bron laadt exact deze drie bestanden (`raw/tds/vergelijker-sim-only/
   {023,036,035}.meta.json`):
     https://pcf.tdscd.com/static/media/open-sans-v15-latin-regular.cffb686d.woff2
     https://pcf.tdscd.com/static/media/open-sans-v15-latin-600.223a277b.woff2
     https://pcf.tdscd.com/static/media/open-sans-v15-latin-700.d08c09f2.woff2
   Ze staan nu in `assets/fonts/`. Open Sans staat onder de Apache-2.0-licentie
   en mag dus zelf gehost worden.
   ========================================================================== */

@font-face {
	font-family: 'Open Sans';
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url('../fonts/open-sans-v15-latin-regular.woff2') format('woff2');
}

@font-face {
	font-family: 'Open Sans';
	font-style: normal;
	font-weight: 600;
	font-display: swap;
	src: url('../fonts/open-sans-v15-latin-600.woff2') format('woff2');
}

@font-face {
	font-family: 'Open Sans';
	font-style: normal;
	font-weight: 700;
	font-display: swap;
	src: url('../fonts/open-sans-v15-latin-700.woff2') format('woff2');
}

/* ==========================================================================
   1. Tokens — [TDS] extracted_theme.json
   ========================================================================== */

.gta-comparison {
	/* Kleurenpalet, letterlijk uit het TDS-thema. */
	--gta-c-cornflower: #4A90E2;   /* [TDS] color.cornFlowerBlue */
	--gta-c-orange: #FF8A17;       /* [TDS] color.darkOrange */
	--gta-c-orange-hover: #FC7D00; /* [TDS] darken(.05, darkOrange) */
	--gta-c-orange-shadow: #FFD0A3;/* [TDS] lighten(.274, darkOrange) */
	--gta-c-blue-shadow: #C2DAF5;  /* [TDS] lighten(.274, cornFlowerBlue) */
	--gta-c-slate: #4B4D54;        /* [TDS] color.darkSlateGray = font.color */
	--gta-c-slate-blue: #2D4C77;   /* [TDS] color.darkSlateBlue (badge 5G) */
	--gta-c-gray: #AAAAAA;         /* [TDS] color.darkGray */
	--gta-c-card-shadow: #DDDDDD;  /* [DOM] offerResults.borderColor van portaal nlTelecom */
	--gta-c-silver: #BFC5CC;       /* [TDS] color.silver */
	--gta-c-smoke: #EEEEEE;        /* [TDS] color.whiteSmoke */
	--gta-c-snow: #FBFBFB;         /* [TDS] color.snow */
	--gta-c-ghost: #F6FAFC;        /* [TDS] color.ghostWhite */
	--gta-c-alice: #ECF3FC;        /* [TDS] color.aliceBlue */
	--gta-c-azure: #F3FCFF;        /* [TDS] color.azure */
	--gta-c-lavender: #E1F0FC;     /* [TDS] color.lavender */
	--gta-c-powder: #C6D9EF;       /* [TDS] color.powderBlue */
	--gta-c-select-border: #E2EAF4;/* [DOM] bron: rand van sc-12zp8ht-2 (het keuzemenu) */
	--gta-c-select-shadow: #BDCEE6;/* [DOM] bron: slagschaduw van datzelfde menu */
	--gta-c-turquoise: #5BC0DE;    /* [TDS] color.mediumTurquoise */
	--gta-c-olive: #6EB918;        /* [TDS] color.oliveDrab */
	--gta-c-olive-dark: #417505;   /* [TDS] color.darkOliveGreen */
	--gta-c-olive-bg: #EBFFD3;     /* [TDS] color.lightGoldenRodyel */
	--gta-c-white: #FFFFFF;        /* [TDS] color.white */

	/* Typografie. */
	--gta-font: 'Open Sans', Helvetica, Arial, Sans-Serif; /* [TDS] font.family */
	--gta-fs: 14px;                /* [TDS] font.size */
	--gta-fs-lg: 16px;             /* [TDS] font.sizeLg */
	--gta-fs-sm: 13px;             /* [TDS] font.sizeSm */
	--gta-fs-xs: 12px;             /* [TDS] font.sizeXs */
	--gta-fs-xxs: 11px;            /* [TDS] font.sizeXxs */
	--gta-fs-xxxs: 10px;           /* [TDS] font.sizeXxxs — badge 4G/5G */
	--gta-fs-xl: 18px;             /* [TDS] font.sizeXl */
	--gta-fs-xxl: 20px;            /* [TDS] font.sizeXxl */
	--gta-fw-normal: 400;          /* [TDS] font.weightNormal */
	--gta-fw-semi: 600;            /* [TDS] font.weightSemiBold */
	--gta-fw-bold: 700;            /* [TDS] font.weightBold */

	/* Spacing-schaal. */
	--gta-sp-xxs: 1px;             /* [TDS] spacing.xxs */
	--gta-sp-xs: 2px;              /* [TDS] spacing.xs */
	--gta-sp-sm: 5px;              /* [TDS] spacing.sm */
	--gta-sp-smm: 8px;             /* [TDS] spacing.smm */
	--gta-sp-md: 10px;             /* [TDS] spacing.md */
	--gta-sp-lg: 15px;             /* [TDS] spacing.lg */
	--gta-sp-xl: 20px;             /* [TDS] spacing.xl */
	--gta-sp-xxl: 25px;            /* [TDS] spacing.xxl */

	--gta-radius: 2px;             /* [TDS] generic.borderRadius */

	font-family: var(--gta-font);
	font-size: var(--gta-fs);
	color: var(--gta-c-slate);
	/*
	 * [TDS] pc-inpage.js injecteert BINNEN de widgetwortel een eigen reset
	 * (een normalize-variant) met letterlijk `line-height:1.15`, plus een regel
	 * `div,span,a,img,input,dl,dt,dd,ol,ul,li,form,label,table,… { border:0;
	 * box-sizing:border-box; color:font.color; float:none; margin:0; padding:0;
	 * font-family:font.family; font-size:font.size; font-weight:font.weightNormal;
	 * letter-spacing:font.letterSpacing; text-align:left; vertical-align:baseline;
	 * word-break:normal; position:static }`.
	 *
	 * Die reset was nooit overgenomen. Hier stond `1.4` — een eigen aanname. Het
	 * verschil is 0,25 em op ELKE regel in de kaart: de bundelbalk werd 56,39 in
	 * plaats van 51,89 px, de bijschriften 16,8 in plaats van 13,8 px en het
	 * maandbedrag 28 in plaats van 23 px. Nagemeten aan de live bron @1280:
	 * `getComputedStyle` geeft daar overal `line-height: 16.1px` (= 14 x 1,15).
	 *
	 * Het tweede deel van die reset — font-size erft NIET, elk element valt terug
	 * op 14px — is niet als algemene regel overgenomen (dat zou met CSS-
	 * specificiteit niet na te bouwen zijn zonder alle klassen te overschrijven),
	 * maar per plek waar het zichtbaar wordt; zie `.gta-card__tco` hieronder.
	 */
	line-height: 1.15;
}

.gta-comparison *,
.gta-comparison *::before,
.gta-comparison *::after {
	box-sizing: border-box;
}

/*
 * DE VERGELIJKER MAG OP 320 PX WEL OVERLOPEN — bewuste keuze, want de bron doet
 * het ook.
 *
 * Hier stond `overflow-x: hidden`, met als reden "de vergelijker mag nooit
 * horizontaal overlopen". Dat is correcter dan de bron, maar niet gelijk aan de
 * bron, en de opdracht is een 1-op-1 reconstructie.
 *
 * [DOM] bron @320, `vergelijker-sim-only`: het blokelement `sc-14f0y3g-0` meet
 * x 15..305 (290 px), maar het widgetomhulsel `r7ha0i-0` daarbinnen draagt
 * `min-width: 310px; max-width: 1500px` en meet daardoor x 15..325 — 20 px
 * BUITEN zijn eigen kolom. Het resultatenblok `r7ha0i-15` (#FBFBFB) loopt
 * daarin mee tot 325 en de kaart wordt 290 px (x 25..315). `scrollWidth` van
 * het document is daar 325 in plaats van 320.
 *
 * Bij ons hield deze regel de kaart binnen de kolom op 270 px. Dat is geen
 * cosmetisch verschil: de tekst brak eerder, de kaarten werden hoger (176,17
 * in plaats van 160,08) en negen pagina's die op 1 a 2 px klopten werden op
 * 320 px 99 tot 682 px te lang. De ondermaat staat nu op
 * `.gta-comparison__body`, precies waar de bron hem heeft, en dit blok mag hem
 * weer laten uitsteken.
 *
 * De compacte toplijst en de in-artikel-vergelijker hebben in de bron een ANDER
 * omhulsel (`sc-1snaqs1-0`, `min-width: 250px`) en lopen op 320 px niet over.
 * Zij hebben bij ons geen `.gta-comparison__body`, dus de ondermaat raakt ze
 * niet — nagemeten: kaart 270 px aan beide kanten.
 */
.gta-comparison {
	max-width: 100%;
}

/*
 * De 10 px onder het vergelijkerblok (RESPONSIVE_GAPS.md A15) — en waar hij NIET
 * hoort.
 *
 * Het widget zelf heeft in de bron nooit een ondermarge: `#tds-comparer-…` en
 * het element dat TDS erin zet (`#tdsp1.tdsa`) meten beide `margin-bottom: 0px`.
 * Die 10 px komt van de LEGE ALINEA die de CMSMS-editor achterlaat wanneer de
 * `<div>` van de widget midden in een `<p>` staat: de browser sluit de alinea
 * bij de bloktag, en de losse `</p>` erna wordt een lege alinea van 10 px via
 * `p { margin: 0 0 10px }`. Hetzelfde mechanisme als A21 en A27.
 *
 * Dat is dus geen eigenschap van het blok maar van de plek waar het staat, en
 * die plek verschilt per variant. Geteld over alle 144 opgeslagen bronpagina's:
 * `tds-comparer-1` 51 x binnen een alinea (de 2 uitzonderingen zijn de
 * VERBORGEN eerste vergelijker op `/telefoonabonnement`), `tds-comparer-2` 38 x
 * binnen een alinea, en `tds-comparer-in-article` (22 x) en
 * `tds-comparer-bottom` (31 x) altijd erbuiten.
 *
 * Nagemeten @1280 op de live bron:
 *   hoofdvergelijker `/goedkoopste-telefoon-abonnement-zonder-telefoon`:
 *     blok eindigt op y 1592,05, volgende `<h2>` begint op y 1602,05 -> 10 px;
 *   in-artikel `/telefoonnummer-blokkeren-blokkade-provider-of-toestel`:
 *     blok eindigt op y 1188,25, volgende `<h5>` begint op y 1188,25 -> 0 px;
 *   onder het artikel: `#tds-comparer-bottom` eindigt op y 3174,50, de
 *     `div.divider` erna begint op y 3194,50 en dat zijn diens eigen 20 px
 *     `margin-top`.
 *
 * PHP zet daarom `gta-comparison--trailing-paragraph` op elke vergelijker die
 * in de bron een lege alinea achter zich heeft; zie
 * `gta_comparison_elements_without_trailing_paragraph()` in inc/comparison.php.
 * De laatste kaart heeft zelf al `margin-bottom`, maar dat valt binnen het blok.
 */
.gta-comparison--trailing-paragraph {
	margin-bottom: var(--gta-sp-md);
}

/* ==========================================================================
   2. Layout: filterkolom + resultaten — [SHOT] 1280/vergelijker-sim-only.png
   ========================================================================== */

.gta-comparison__body {
	display: flex;         /* [TDS] r7ha0i-0 { display:flex } */
	flex-direction: row;
	align-items: flex-start;
	/*
	 * [TDS] r7ha0i-0 { min-width: 310px; max-width: 1500px } — nagemeten op de
	 * live bron. Boven 310 px beschikbare breedte doet deze ondermaat niets; op
	 * 320 px zorgt zij voor de overloop van de bron. Zie de toelichting bij
	 * `.gta-comparison` hierboven.
	 */
	min-width: 310px;
	max-width: 1500px;
	/*
	 * GEEN flex-gap. De bron heeft er geen: de 10 px tussen filterkolom en
	 * resultaten komt uit `r7ha0i-1 { padding-right:5px }` plus de 10 px padding
	 * van het resultatenblok (`r7ha0i-15`), en de tellerregel begint daardoor
	 * WEL op de linkerrand van de resultatenkolom (x 295 @1280) terwijl de
	 * kaarten 10 px verder inspringen (x 305). Met een gap van 10 px stonden
	 * teller en kaart bij ons op dezelfde x (300) en was de kaart 15 px te breed.
	 */
}

.gta-comparison__filters {
	/*
	 * [TDS] sc-1k8cnet-0 { width:220px } zit BINNEN r7ha0i-1, en die heeft
	 * { padding-right:5px }. De kolom is in de bron dus 225 px breed met 220 px
	 * inhoud — nagemeten @1280: x 70…295, `padding: 0px 5px 0px 0px`.
	 * Hier stond alleen de 220 van de binnenkant.
	 */
	flex: 0 0 225px;
	width: 225px;
	max-width: 225px;
	padding-right: 5px;
}

.gta-comparison__results {
	flex: 1 1 auto;
	min-width: 0;      /* [GTA] voorkomt overflow van de flexkolom */
	max-width: 100%;
	/*
	 * De 10 px onder de laatste kaart zat hier als `padding-bottom`. Dat was maar
	 * de helft van het verhaal: in de bron is het de padding van het
	 * RESULTATENBLOK `r7ha0i-15`, en dat blok heeft die padding aan alle vier de
	 * kanten plus een eigen achtergrond. Zie `.gta-results` hieronder; deze kolom
	 * heeft zelf geen padding meer.
	 */
}

@media (max-width: 991px) {
	/* [SHOT] 768/375: filters boven de resultaten, volle breedte. */
	.gta-comparison__body {
		flex-direction: column;
		/* In kolomrichting zou flex-start de kinderen op max-content zetten;
		   dat liep op 320px 17px buiten beeld. */
		align-items: stretch;
		/*
		 * GEEN tussenruimte tussen de filterbalk en de resultaten.
		 *
		 * De bron zet de tellerregel met de knop "Filter" direct onder de balk:
		 * de balk is daar exact 150 px hoog EN de afstand tot de eerste kaart is
		 * ook exact 150 px (RESPONSIVE_GAPS.md par. 2 en 4). Bij ons is de balk
		 * 114 px en de tellerregel 36 px — samen precies die 150 — maar er zat
		 * 10 px flex-gap tussen, waardoor de eerste kaart op 159 px begon. Dit is
		 * de laatste 9 px van A5.
		 *
		 * NAGEMETEN, 2026-08-26: het is geen 0 maar 5 — de bron zet
		 * `padding-bottom: 5px` op het omhulsel van de balk ([TDS] r7ha0i-7).
		 * @768 eindigt de azuren balk op 97,88 en begint de knoppenrij op 102,88.
		 */
		row-gap: var(--gta-sp-sm);
	}

	.gta-comparison__filters,
	.gta-comparison__results {
		flex: 0 0 auto;
		width: 100%;
		max-width: 100%;
	}

	/* [TDS] r7ha0i-1 vervalt onder 992 px (`display:none` in de bron; bij ons
	   wordt hij een balk over de volle breedte), dus ook zijn 5 px rechts. */
	.gta-comparison__filters {
		padding-right: 0;
	}
}

/* ==========================================================================
   3. Tabs "met toestel" / "zonder toestel"
   Bootstrap .nav-tabs blijft leidend (staat al in site.css); alleen de
   afwijking uit het origineel.  — [SHOT] beide vergelijkerpagina's
   ========================================================================== */

.gta-comparison .tds-picker,
.gta-comparison .gta-picker {
	margin-bottom: var(--gta-sp-md);
}

/*
 * De tabbalk staat in de bron BOVEN de vergelijker, niet erin. Daartussen zit
 * in de bron-HTML een leeg <p> (de widget-div staat in dezelfde alinea als de
 * inline scripts, waardoor de browser de <p> ervoor sluit). Dat lege <p> levert
 * via Bootstraps `p { margin: 0 0 10px }` precies 10px op.
 * [SHOT/DOM] origineel @768: tabbalk eindigt op 378, #tds-comparer-1 begint op
 * 388. Zonder deze regel begint onze vergelijker op 378.
 */
ul.tds-picker {
	margin-bottom: 10px;
}

.gta-comparison .gta-picker > li > a {
	cursor: pointer;
}

/* ==========================================================================
   4. Resultatenkop "De beste 12 SIM Only deals."
   ========================================================================== */

.gta-results__count {
	color: var(--gta-c-gray);     /* [TDS] sc-1j9z4f9-0 { color:#AAAAAA } */
	/*
	 * [TDS] sc-1j9z4f9-0 { font-size:12px }. Hier stond `font.size` (14px), de
	 * standaardmaat van het thema. Nagemeten op de live bron @1280: de span met
	 * "De beste 12 SIM Only deals." meet `font-size: 12px`, `line-height: 13.8px`
	 * en 154,83 px breed; bij ons 14 px, 19,6 px en 178,22 px. Op de
	 * toestelvergelijker: 170,80 tegen 190,70 px voor dezelfde tekst.
	 */
	font-size: var(--gta-fs-xs);
	margin: 0 0 var(--gta-sp-sm);
}

.gta-results__count b {
	color: var(--gta-c-slate);    /* [SHOT] alleen het getal is donker/vet */
	font-weight: var(--gta-fw-bold);
}

/*
 * [TDS] r7ha0i-4 { padding-bottom:5px } — de kop van de resultatenkolom.
 *
 * Hier stond `margin-bottom: 9px`, een compensatie: onze tellerregel was
 * 19,59 px hoog in plaats van de 13,8 px van de bron, en met 9 px eronder kwam
 * de eerste kaart toevallig op dezelfde y uit. Nu de regel 12 px is en de
 * regelhoogte 1,15, klopt de opbouw van de bron zelf:
 *   13,8 (tellerregel) + 5 (r7ha0i-4) + 10 (padding van `.gta-results`) = 28,8
 * en de eerste kaart begint op y 283,80 net als in de bron.
 */
@media (min-width: 992px) {
	.gta-results__count {
		margin-bottom: var(--gta-sp-sm);
	}
}

/*
 * [SHOT/DOM] origineel @1280 en @768: boven de resultatenlijst staat precies
 * EEN regel — "De beste 12 SIM Only deals." — en de afstand tussen de bovenkant
 * van de vergelijker en de eerste rij is 29px. Onze sorteerkeuze (een eigen
 * toevoeging, zie COMPARISON_ENGINE.md B4) stond op een eigen regel en maakte
 * die zone 53px; daardoor schoof alles eronder 24px op. Op tabletbreedte en
 * hoger staat de sorteerkeuze daarom op dezelfde regel als de telling.
 */
@media (min-width: 768px) {
	.gta-comparison__results {
		display: flex;
		flex-wrap: wrap;
		align-items: baseline;
		column-gap: var(--gta-sp-md);
	}

	.gta-comparison__results > .gta-results__head {
		flex: 0 0 auto;
	}

	.gta-comparison__results > .gta-results,
	.gta-comparison__results > .gta-no-results,
	.gta-comparison__results > .gta-pagination {
		flex: 0 0 100%;
	}
}

/*
 * Het RESULTATENBLOK — [TDS] r7ha0i-15 { background-color:#FBFBFB; padding:10px }
 * (`offerResults.blockBackgroundColor`).
 *
 * Dit blok was nooit gebouwd. Gevolg: de kaarten liepen tot aan de rand van de
 * resultatenkolom en waren daardoor 20 px te breed, en de zachtgrijze band die
 * de bron rond en tussen de kaarten toont ontbrak volledig.
 *
 * Nagemeten in de referentiebeelden (kleurbanden op een rij tussen twee
 * kaarten), bron tegen herbouw:
 *   @1280 bron  x 295-1209 #FBFBFB, kaart 305-1199;  herbouw alles #FFFFFF,
 *               kaart 300-1209
 *   @768  bron  x  24- 743 #FBFBFB, kaart  34- 733;  herbouw alles #FFFFFF
 *   @375  bron  x  15- 359 #FBFBFB, kaart  25- 349;  herbouw alles #FFFFFF
 * Ook de compacte toplijst in een nieuwsartikel heeft hem
 * (`shots/original/1280/nieuws-archief.png`, x 70-1209 tegen kaart 80-1199).
 *
 * De opsomming had zijn opmaak als inline `style` in results.php staan; die is
 * daar weggehaald zodat deze regel hem kan zetten.
 */
.gta-results {
	background-color: var(--gta-c-snow); /* [TDS] offerResults.blockBackgroundColor */
	list-style: none;
	margin: 0;
	padding: var(--gta-sp-md);
}

/* ==========================================================================
   5. Resultaatkaart
   Basis letterlijk uit [TDS] sc-13m9tqj-0 / vb06ic-0 / sc-1v3hu4w-0.
   ========================================================================== */

.gta-card {
	background-color: var(--gta-c-white);
	border-radius: var(--gta-radius);
	/*
	 * [DOM] bron @1280: `box-shadow: rgb(221, 221, 221) 0px 1px 3px 0px`.
	 * Het geëxtraheerde THEMA zegt `offerResults.borderColor: #AAAAAA` en die
	 * waarde is hier destijds overgenomen, maar dat is de FABRIEKSINSTELLING van
	 * het widget; de portaalinstelling voor `nlTelecom` zet hem op #DDDDDD. Dat
	 * is te zien in de referentiebeelden: naast de kaart loopt de schaduw bij de
	 * bron van #FBFBFB via #FAFAFA/#F7F7F7/#F0F0F0 naar wit, bij ons van #FFFFFF
	 * via #FEFEFE/#FCFCFC/#F8F8F8 — en aan de rechterkant was onze schaduw zelfs
	 * volledig weg omdat de kaart daar tegen de rand van de kolom aan lag.
	 * De gesponsorde variant houdt zijn eigen kleur (zie hieronder).
	 */
	box-shadow: 0 1px 3px 0 var(--gta-c-card-shadow);
	margin-bottom: var(--gta-sp-md);
	padding: var(--gta-sp-md);      /* [TDS] de ${…} in sc-13m9tqj-0 is spacing.md */
	position: relative;
}

.gta-card--sponsored {
	box-shadow: 0 1px 3px 0 var(--gta-c-orange); /* [TDS] offerResults.sponsoredBorderColor */
}

.gta-card__sponsored-label {
	color: var(--gta-c-orange);      /* [TDS] sc-1s3ow8v-0 */
	font-size: var(--gta-fs-xs);
	font-weight: var(--gta-fw-normal);
	margin-bottom: var(--gta-sp-sm);
}

/* Positienummer linksboven — [TDS] sc-13m9tqj-2 */
.gta-card__rank {
	background-color: var(--gta-c-cornflower);
	border-radius: 17px;
	color: var(--gta-c-white);
	display: inline-block;
	font-size: var(--gta-fs-xxs);
	font-weight: var(--gta-fw-bold);
	left: -5px;
	line-height: 17px;
	position: absolute;
	text-align: center;
	top: -5px;
	width: 17px;
	z-index: 1;
}

/* Kaartkop: toestelnaam + opslag + eenmalig — [TDS] sc-13m9tqj-1 / vb06ic-1 */
.gta-card__head {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	/*
	 * GEEN flex-gap. In de bron staan de vier onderdelen als inline-inhoud naast
	 * elkaar en komt de tussenruimte uit `ji1rnf-3 { padding-right:2px }` en
	 * `f635ir-3 { padding-right:2px }`; nagemeten @1280 sluit de toestelnaam
	 * direct op het beeldje aan (beide x 37). Met een gap van 5 px schoof de hele
	 * kop 5 px naar rechts.
	 */
	gap: 0;
	padding-bottom: var(--gta-sp-sm); /* [TDS] sc-13m9tqj-1 { padding-bottom:5px } */
}

/* [TDS] ji1rnf-3 { height:27px; width:27px; padding-right:2px;
   vertical-align:middle; img { max-width:25px; max-height:25px } } — hier stond
   een uit het beeld geschatte 22 px breed. */
.gta-card__device-image {
	flex: 0 0 auto;
	/* Het beeldje zit in de bron in een blokje van 27 x 27 px met een afbeelding
	   van maximaal 25 x 25 erin. Hier is het beeldje zelf het element, dus die
	   2 px staan als padding eromheen — met `content-box`, anders zou de
	   `max-height` van 25 px de padding er weer af snoepen en bleef de kop 30 in
	   plaats van 32 px hoog. */
	box-sizing: content-box;
	max-height: 25px;
	max-width: 25px;
	padding: 1px 2px 1px 0;
	width: auto;
}

.gta-card__device-name {
	font-weight: var(--gta-fw-bold);  /* [TDS] f635ir-1 { font-weight:700 } */
	font-size: var(--gta-fs-sm);      /* [TDS] f635ir-1 { font-size:13px } */
	color: var(--gta-c-slate);        /* [TDS] ji1rnf-2 / offerTitle.textColor */
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	min-width: 0;
}

/* Opslagbadge "256GB" — [TDS] kbtez5-0 { color:#4B4D54; border:1px #4B4D54
   solid; border-radius:2px; background-color:#FFFFFF; font-size:12px;
   font-weight:400; line-height:13px; padding:1px 2px }.
   De rand stond hier op `silver` (#BFC5CC) met regelhoogte 1,4 en 4 px padding;
   de bron gebruikt de tekstkleur en een badge van 17 px hoog. */
.gta-card__storage {
	background-color: var(--gta-c-white);
	border: 1px solid var(--gta-c-slate);
	border-radius: var(--gta-radius);
	color: var(--gta-c-slate);
	display: inline-block;
	font-size: var(--gta-fs-xs);
	font-weight: var(--gta-fw-normal);
	line-height: 13px;
	margin-right: 2px;   /* [TDS] f635ir-3 { padding-right:2px } */
	padding: 1px 2px;
	white-space: nowrap;
}

/* Eenmalig bedrag naast de toestelnaam; groen zodra het € 0,- is.
   [TDS] spuq8k-0 + sc-15fr68a-0 { color:#417505; background-color:#EBFFD3 }.
   De badge is in de bron VET met een regelvak van 16 px en 1px/4px padding,
   dus 18 px hoog; hier stond alleen de korpsgrootte. */
.gta-card__upfront-inline {
	font-size: var(--gta-fs-xs);
	font-weight: var(--gta-fw-bold);
	/*
	 * De gewone eenmalige prijs is bij de bron KALE tekst en staat dus op de
	 * 1,15 van de widgetreset: [DOM] `bundel-onbeperkt-internet` @1280,
	 * "EUR 16,- eenmalig" -> `span.` fs12px lh13,8px. Alleen de gratis variant
	 * is een badge ([TDS] spuq8k-0, lh 16 px); die staat hieronder.
	 *
	 * Hier stond 16 px voor allebei. Dat viel niet op zolang de kop op één regel
	 * paste — het beeldje van 27 px bepaalt daar het regelvak — maar zodra de
	 * prijs naar een TWEEDE regel brak, werd de kop 27 + 16 = 43 px waar de bron
	 * 27 + 13,8 = 40,8 rekent. [DOM] `provider-kpn` @320, eerste kaart met
	 * identiek aanbod (Apple iPhone 16 128 GB / EUR 264,- eenmalig / 10 GB 5G /
	 * 150 min / EUR 35,50 p.m.): bron 217,67 px, wij 219,88 — precies die
	 * 2,21 px. Dat is de oorzaak van de twee kaarthoogten die de bron nooit
	 * produceert; ze staat LOS van de actieregel (B3) en van de contractrij (B4).
	 */
	line-height: 13.8px;
	/*
	 * GEEN `margin-left` hier. Wat de bron tussen de badgegroep en het eenmalige
	 * bedrag heeft is een gewone SPATIE, een tekstknoop in `vb06ic-2` op 14 px
	 * ([DOM] bron `provider-kpn` @375, kaart 4: de badgewrapper eindigt op
	 * x 271,52 en het bedrag begint op 275,16 — 3,64 px, precies één spatie in
	 * Open Sans 14).
	 *
	 * Een spatie VERDWIJNT bij een regelovergang, een `margin-left` niet. Met de
	 * marge hier stond het bedrag op een tweede regel op x 14 waar de bron het op
	 * x 10 zet. De spatie staat daarom hieronder op het element ERVOOR.
	 */
	white-space: nowrap;
}

/*
 * De spatie vóór het eenmalige bedrag. Het bedrag is altijd het laatste kind van
 * de kop, dus `:nth-last-child(2)` is wat eraan voorafgaat: de laatste badge, of
 * de toestelnaam wanneer er geen badges zijn.
 *
 * Op een badge komt hij BOVENOP de 2 px van de badgewrapper ([TDS] f635ir-3
 * { padding-right:2px }) — de bron heeft daar allebei: wrapper 2 px, dan de
 * spatie. Vandaar 2 + 3,64 px.
 */
.gta-card__head > :nth-last-child(2) {
	margin-right: 3.64px;
}

.gta-card__head > .gta-card__storage:nth-last-child(2) {
	margin-right: 5.64px;
}

.gta-card__upfront-inline--free {
	background-color: var(--gta-c-olive-bg);
	color: var(--gta-c-olive-dark);
	border-radius: var(--gta-radius);
	padding: 1px 4px;   /* [TDS] spuq8k-0 { padding:1px 4px } */
	/* [TDS] spuq8k-0 { line-height: small ? "12px" : "16px" } — alleen de
	   gratis-badge is een badge; [DOM] bron @320 `span.spuq8k-0 sc-15fr68a-0`
	   meet 34,3 x 18 met lh 16 px. */
	line-height: 16px;
}

/* Kaartrij: bundelblok links, prijs/CTA rechts.
   Verhoudingen letterlijk uit [TDS] vb06ic-5 (flex:2 1 0%; order:0) en
   vb06ic-6 (flex:3 1 0%; order:1; padding-left:10px). */
.gta-card__row {
	/* [TDS] vb06ic-4 / sc-13m9tqj-5 { display:flex; flex-direction:row;
	   flex-wrap:wrap; justify-content:space-between } */
	display: flex;
	flex-direction: row;
	flex-wrap: wrap;
	justify-content: space-between;
	/*
	 * GEEN `align-items: center`. Die stond hier maar komt in de bron nergens
	 * voor: `vb06ic-4` laat `align-items` op de standaard `stretch`, waardoor de
	 * twee kolommen even hoog worden en hun inhoud BOVENAAN begint. Met de
	 * centrering zakte de hele kaartinhoud naar het midden — de bundelbalk stond
	 * op y 20,84 in plaats van y 10 en het providerlogo 14 beeldrijen te laag
	 * (LEBARA-logo: bron beeldrij 313-325, herbouw 327-338).
	 */
}

/* Bundelblok: providerlogo, data, minuten
   [TDS] sc-1cqfm6i-0 { background:#F6FAFC; border-radius:2px; display:flex;
                        justify-content:space-between; font-size:14px;
                        min-width:190px; padding:10px 5px } */
/* [TDS] vb06ic-5 / sc-13m9tqj-7 { flex:2 1 0%; order:0 } — de KOLOM waarin de
   balk staat. Zie de toelichting in card.php: de padding van de balk zelf mag
   niet meetellen in de 2:3-verdeling van de rij. */
.gta-card__bundle-col {
	flex: 2 1 0%;
	order: 0;
	min-width: 0;
}

.gta-card__bundle {
	background-color: var(--gta-c-ghost);
	border-radius: var(--gta-radius);
	display: flex;
	justify-content: space-between;
	font-size: var(--gta-fs);
	min-width: 190px;
	/*
	 * [TDS] sc-1cqfm6i-0: `padding: 10px 5px`, niet 10 px rondom, en GEEN gap.
	 * Nagemeten @1280: de balk staat op x 10 en is 346 px breed; de eerste cel
	 * begint op x 15 en de laatste eindigt op x 351 — dus 5 px links en rechts.
	 * De 10 px rondom plus een gap van 10 px maakte de cellen te smal en zette
	 * het logo op x 20 in plaats van x 29,14.
	 */
	padding: var(--gta-sp-md) var(--gta-sp-sm);
}

/*
 * [TDS] sc-1cqfm6i-2 en -4 { flex:4 1 0% }. De cellen zijn NIET gelijk
 * verdeeld: de providercel krijgt 3 delen en data en minuten elk 4.
 */
.gta-card__bundle-cell {
	flex: 4 1 0%;
	min-width: 0;
}

/* [TDS] sc-1cqfm6i-1 { height:31px; flex:3 1 0%; order:0; padding-right:5px;
   text-align:center; img { max-width:70px; max-height:31px } } */
.gta-card__bundle-cell--provider {
	flex: 3 1 0%;
	height: 31px;
	padding-right: var(--gta-sp-sm);
	text-align: center;
}

.gta-card__provider-logo {
	display: block;
	margin: 0 auto;     /* [TDS] ls5wz8-2 { img { margin-left:auto; margin-right:auto } } */
	/*
	 * [TDS] sc-1cqfm6i-1 { img { max-width:70px; max-height:31px } } — die regel
	 * staat dichter op het element dan de 30 px van ls5wz8-2 en wint dus. Met
	 * 30 px werd het LEBARA-logo 60x30 in plaats van de 62x31 van de bron.
	 */
	max-height: 31px;
	max-width: 70px;
	width: auto;
}

.gta-card__bundle-value {
	display: block;
	font-weight: var(--gta-fw-bold);
	white-space: nowrap;
}

.gta-card__bundle-label {
	display: block;
	color: var(--gta-c-gray);         /* [TDS] sc-1cqfm6i-3 { color:#AAAAAA } */
	font-size: var(--gta-fs-xs);      /* [TDS] sc-1cqfm6i-3 { font-size:12px } */
	margin-top: var(--gta-sp-xs);     /* [TDS] sc-1cqfm6i-3 { margin-top:2px } */
}

/* Netwerkbadge 4G/5G — [TDS] spuq8k-0 + spuq8k-3 */
.gta-badge {
	display: inline-block;
	background-color: var(--gta-c-gray);
	border-radius: var(--gta-radius);
	color: var(--gta-c-white);
	/*
	 * [DOM] bron @1280: de badge "5G" meet `font-size: 10px`, `line-height: 12px`
	 * en 20,97 x 14 px. Hier stond `font.sizeXxs` (11px) met regelhoogte 1,4, wat
	 * 22,69 x 17,39 px opleverde — een badge die anderhalve pixel te hoog en twee
	 * px te breed is, op elke kaart.
	 */
	font-size: var(--gta-fs-xxxs);
	font-weight: var(--gta-fw-bold);
	line-height: 12px;
	padding: 1px 4px;
	text-align: center;
	white-space: nowrap;
	/*
	 * [TDS] spuq8k-0: `vertical-align: ${e.small ? "1.5px" : ""}`
	 * (`chunks/2_f2db2223_chunk.js`). De kleine badge — en dat is precies deze,
	 * de 4G/5G-badge — wordt 1,5 px boven de basislijn gezet. Hier stond
	 * `middle`, wat hem 1,67 px te laag zette en de bundelregel 0,08 px te hoog
	 * maakte.
	 */
	vertical-align: 1.5px;
}

.gta-badge--gen5 {
	background-color: var(--gta-c-slate-blue); /* [TDS] spuq8k-3 #2D4C77 */
}

.gta-badge--gen4 {
	background-color: var(--gta-c-turquoise);  /* [TDS] spuq8k-2 #5BC0DE */
}

/* Prijs- en CTA-deel van de kaart — [TDS] vb06ic-6 */
.gta-card__foot {
	display: flex;
	flex: 3 1 0%;
	order: 1;
	flex-direction: row;
	flex-wrap: wrap;
	justify-content: space-between;
	/*
	 * GEEN `align-items: center` en GEEN `gap`: `vb06ic-6` heeft alleen
	 * `display:flex; flex:3 1 0%; justify-content:space-between; order:1;
	 * padding-left:10px`. De kolommen erin rekken dus mee met de kaart en hun
	 * inhoud begint bovenaan, precies zoals in de bron.
	 *
	 * Die gap van 10 px was bovendien de reden dat het bundelblok 364 in plaats
	 * van 346 px breed was: hij telt mee in de minimummaat van deze kolom en
	 * verschoof daarmee de 2:3-verdeling van de rij.
	 */
	padding-left: var(--gta-sp-md);
	min-width: 0;
}

.gta-card__contract {
	flex: 1 1 0%;
	color: var(--gta-c-gray);        /* [TDS] vb06ic-8 { * { color:#AAAAAA; font-size:12px } } */
	font-size: var(--gta-fs-xs);
	min-width: 0;
}

.gta-card__contract-term {
	display: block;
}

/* Maandbedrag — [TDS] sc-13m9tqj-10 / vb06ic-11 */
.gta-card__monthly {
	flex: 1 1 0%;
	min-width: 0;
	padding-right: var(--gta-sp-sm); /* [TDS] vb06ic-11 { padding-right:5px } */
}

.gta-price__symbol,
.gta-price__main {
	font-size: var(--gta-fs-xxl);
	font-weight: var(--gta-fw-bold);
	letter-spacing: 1px;
}

.gta-price__trail {
	font-size: var(--gta-fs-xs);
	font-weight: var(--gta-fw-bold);
}

.gta-card__monthly-suffix {
	color: var(--gta-c-gray);
	font-size: var(--gta-fs-xs);
}

.gta-card__standard-monthly {
	color: var(--gta-c-gray);
	font-size: var(--gta-fs-xxs);
}

.gta-card__promotion-term {
	display: block;
}

/* Gemiddelde/totale kosten — [TDS] vb06ic-12 */
.gta-card__tco {
	flex: 1 1 0%;
	font-size: var(--gta-fs-xs);   /* [TDS] vb06ic-12 { font-size:12px } */
	min-width: 0;
	white-space: normal;
}

/*
 * ... maar de INHOUD staat op 14 px, niet op 12.
 *
 * Dit is het tweede deel van de reset die pc-inpage.js in de widgetwortel zet
 * (zie de toelichting bij `line-height` in §1): `div,span,a,… { font-size:14px }`
 * wint daar van overerving, dus de 12 px van `vb06ic-12` geldt alleen voor het
 * omhulsel en elke <span> erbinnen valt terug op `font.size`. Nagemeten @1280:
 * "Gem. kosten" is bij de bron 14 px op y 8 en 82,31 px breed; bij ons 12 px op
 * y 30,25 en 68,03 px breed. Hetzelfde geldt voor het bedrag eronder.
 *
 * Alleen de kostenspecificatie in de uitklap houdt 12 px: die staat in de bron
 * in een modal met een eigen opmaak.
 */
.gta-card__tco > span,
.gta-card__tco-details > summary > span {
	font-size: var(--gta-fs);
}

.gta-card__tco-value {
	border-color: var(--gta-c-slate);
	border-style: dotted;
	border-width: 0 0 1px 0;
	display: table;
	padding-top: var(--gta-sp-sm);
	font-weight: var(--gta-fw-bold);
}

/* CTA-kolom — [TDS] sc-4tqysy-0 / sc-4tqysy-3 */
.gta-card__cta {
	flex: 0 1 auto;
	text-align: center;
}

/*
 * De CTA-kolom houdt de rijmaat, ook op kaarten zonder "Alle shops".
 *
 * Zo doet de bron het ook, alleen met een ander middel: `vb06ic-14` (de regel
 * "Alle shops") krijgt daar `visibility: ${…}` en wordt bij één winkel
 * ONZICHTBAAR gemaakt in plaats van weggelaten — de 21,09 px blijft staan. Dat
 * is de reden dat elke toestelrij in de bron 130,19 px meet en elke Sim
 * Only-rij 98,19, of er nu "Alle shops" onder staat of niet; op 375 px is het
 * net zo (187,08 respectievelijk 160,08).
 *
 * Bij ons rendert de template die regel niet als er maar één winkel is, dus
 * staat de maat hier: 32,09 (knop) + 25 (winkellogo) + 21,09 = 78,19.
 *
 * Niet in de compacte toplijst: die toont winkellogo noch "Alle shops".
 */
.gta-comparison:not(.gta-comparison--toplist) .gta-card__cta {
	min-height: 78.19px;
}

.gta-btn-clickout {
	appearance: none;
	background-color: var(--gta-c-orange);
	border: 0;
	border-radius: var(--gta-radius);
	box-shadow: 0 1px 4px 0 var(--gta-c-orange-shadow);
	color: var(--gta-c-white);
	cursor: pointer;
	display: inline-block;
	font-family: var(--gta-font);
	font-size: 1em;
	font-weight: var(--gta-fw-bold);
	/*
	 * [DOM] bron @1280: de knop "Bekijken" is 32,09 px hoog en 91,06 px breed.
	 * Dat is precies `padding: 8px 15px` (spacing.smm / spacing.lg) op een
	 * regelvak van 16,1 px: 8 + 16,1 + 8 = 32,1. Hier stond `5px 20px` met een
	 * `min-height: 32px` als noodgreep om toch op 32 uit te komen; daardoor was
	 * de knop 97,59 px breed en de hele CTA-kolom 6,5 px te breed.
	 */
	box-sizing: border-box;
	padding: var(--gta-sp-smm) var(--gta-sp-lg);
	text-align: center;
	text-decoration: none;
	user-select: none;
	vertical-align: middle;
	white-space: nowrap;
}

.gta-btn-clickout:hover,
.gta-btn-clickout:focus,
.gta-btn-clickout:active,
.gta-btn-clickout:visited {
	background-color: var(--gta-c-orange-hover); /* [TDS] darken(.05, darkOrange) */
	color: var(--gta-c-white);
	text-decoration: none;
}

.gta-btn-clickout:focus-visible {
	outline: 2px solid var(--gta-c-slate); /* [GTA] toegankelijkheid */
	outline-offset: 2px;
}

.gta-card__shop {
	/* [SHOT] origineel 1280/768: het winkellogo staat ONDER de Bekijken-knop,
	   niet ernaast; daaronder komt "Alle shops". Een <span> is inline, dus
	   width:100% deed niets — vandaar display:block. Zonder deze regel is de
	   resultaatrij op desktop 76px in plaats van de 98px van de bron. */
	display: block;
	padding-top: var(--gta-sp-sm);
	text-align: center;
	width: 100%;
}

.gta-card__shop img {
	max-width: 60px;    /* [TDS] sc-4tqysy-3 */
	max-height: 20px;
	vertical-align: middle;
	/*
	 * [DOM] bron @1280: het blokje met het winkellogo is exact 25,00 px hoog
	 * (5 px padding + 20 px logo). Bij ons was het 25,38: een inline <img>
	 * krijgt er de ruimte onder de basislijn bij. Als blokelement met
	 * automatische zijmarges staat het logo nog steeds gecentreerd, maar zonder
	 * die 0,38 px. Samen met de regel bij `.gta-card__shop-count` brengt dit de
	 * CTA-kolom van 79,18 op 78,10 px — en daarmee de Sim Only-rij van 99 op de
	 * 98 px van de bron (A24).
	 */
	display: block;
	margin: 0 auto;
}

.gta-card__shop-name {
	color: var(--gta-c-cornflower); /* [SHOT] shopnaam in blauw onder de knop */
	font-size: var(--gta-fs-xs);
	font-weight: var(--gta-fw-bold);
}

.gta-card__shop-count {
	color: var(--gta-c-cornflower); /* [TDS] vb06ic-14 / offerResults.shopsLinkColor */
	display: block;                 /* [SHOT] eigen regel onder het winkellogo */
	/*
	 * [DOM] bron @1280: `vb06ic-14` meet `font-size: 14px` — het element krijgt
	 * geen eigen maat en valt dus terug op `font.size`. Hier stond 12 px.
	 * De regel is 21,09 px hoog: 5 px `padding-top` plus een regelvak van 16,1,
	 * en die 16,1 komt nu uit de regelhoogte 1,15 in §1 in plaats van uit een
	 * losse pixelwaarde.
	 */
	font-size: var(--gta-fs);
	padding-top: var(--gta-sp-sm);
	text-decoration: none;
}

/*
 * Het filtericoontje achter "Alle shops".
 *
 * De bron zet daar de Material-Icons-ligatuur `filter_list` op 14 px
 * ([TDS] ejpm89-0: `font-family:'Material Icons'; font-size:14px`), een blokje
 * van exact 14 x 14 px. Sinds de prelive-ronde van 2026-10-13 is het bij ons
 * datzelfde icoon als inline SVG (`gta_icon_filter_list()` in
 * inc/template-tags.php), ook bij de knoppen "Filter" en "Meer filters";
 * daarvoor stonden er Font-Awesome-glyphs (`fa-filter`, `fa-sliders`).
 */
.gta-icon {
	display: inline-block;
	flex: none;
	height: 14px;
	vertical-align: -2px;
	width: 14px;
}

/* Acties/kortingen onder de kaart — [TDS] sc-1f4u48f-0 / sc-7dsqeu-0 */
.gta-card__promotions {
	list-style: none;
	/*
	 * [TDS] sc-13m9tqj-16 / vb06ic-16 { flex:1 1 100%; order:2; padding-top:0 }
	 * met daarbinnen sc-1hawtph-1 { padding-top:2px }. Er zit dus GEEN marge
	 * boven de actieregel, alleen 2 px padding. Hier stond 5 px marge met een
	 * uitzondering voor de toestelkaart; dat is nu één regel voor beide.
	 */
	margin: 0;
	padding: var(--gta-sp-xs) 0 0;
	flex: 1 1 100%;
	order: 2;
}

.gta-card__promotion {
	color: var(--gta-c-slate);     /* [TDS] offerExtraText.textColor */
	font-size: var(--gta-fs-xs);
	font-weight: var(--gta-fw-normal);
	white-space: normal;
	/*
	 * De regelhoogte is gewoon de geërfde 1,15 (12 x 1,15 = 13,8). Alleen de
	 * EERSTE regel is 14,8 px hoog, en dat komt van het icoon ervoor; zie
	 * `::before` hieronder.
	 */
}

.gta-card__promotion--strong {
	color: var(--gta-c-olive);     /* [TDS] offerExtraText.strongTextColor */
	font-weight: var(--gta-fw-semi);
}

.gta-card__promotion::before {
	content: "+ ";                 /* [SHOT] "+ Tijdelijk geen aansluitkosten" */
	/*
	 * [DOM] bron @1280: het actieblok is 16,80 px hoog — precies het verschil
	 * tussen een toestelkaart mét (146,98) en zonder actieregel (130,19). Daarvan
	 * is 2 px de padding van `.gta-card__promotions`, dus het EERSTE regelvak is
	 * 14,80 px, en dat is geen 12 x regelhoogte: in de bron staat vóór de tekst
	 * de Material-Icons-ligatuur "add" als inline-block van 14 px
	 * (`ejpm89-0`, gemeten 14 x 14 op y 122,19).
	 *
	 * Hier stond die 14,8 als regelhoogte op de HELE regel. Dat klopte voor
	 * actieteksten van één regel, maar op telefoonbreedte breken ze vaak over
	 * twee: de bron rekent dan 14,8 + 13,8 = 28,6 en wij 29,6. Met het icoon
	 * als eigen inline-block valt de 14,8 weer op alleen de eerste regel.
	 *
	 * DE BREEDTE ONTBRAK, en dat is wat deze regel toevoegt. De vorige versie
	 * beschreef het blokje van 14 px wél in dit commentaar maar zette alleen
	 * `display` en `line-height`; het blokje kreeg daardoor de breedte van zijn
	 * eigen inhoud ("+" is 6,86 px in Open Sans 12) in plaats van 14 px.
	 * [DOM] bron `bundel-onbeperkt-internet` @1280, kaart met identiek aanbod
	 * (Apple iPhone Air 256 GB / EUR 16,- eenmalig / onbeperkt 5G / 150 min /
	 * EUR 55,50 p.m. / "Tijdelijk geen aansluitkosten"): het icoonblokje staat
	 * op x 10 en is 14 px breed, dan volgt één spatie van 3,13 px (Open Sans 12)
	 * en pas daarna de tekst — inkt op x 27,13. Bij ons begon de inkt op 16,86.
	 * De spatie zit bij ons in de witruimte van de template tussen `<li>` en de
	 * tekst; die telt alleen mee ZOLANG de ::before een inline-block is, en dat
	 * is hij.
	 */
	display: inline-block;
	width: 14px;
	/*
	 * 14,8 px en GEEN `height`. Nagemeten alternatief: met `height:14px;
	 * line-height:14px` (de letterlijke maten van `i.tds-material-icon`)
	 * wordt het actieblok 16,0 in plaats van 16,8 px en zakken de
	 * kaarthoogten naar 203,08 / 216,88 -- 0,8 px onder de bron. De inkt van
	 * de actietekst blijft 1 px hoger dan bij de bron (y 120,19 tegen
	 * 121,19 @1280); dat is de grondlijn van een pseudo-element met een
	 * "+" tegenover een Material-Icons-ligatuur, en het is de enige maat
	 * van deze regel die niet sluit.
	 */
	line-height: 14.8px;
}

/* Kostenspecificatie. Het origineel toont die in een modal achter "Gem.
   kosten"; hier is het een <details>, zodat het ook zonder JS werkt.
   Labels: [TDS] locales/nl/modal.json → "tco". */
.gta-card__tco-details summary {
	cursor: pointer;
	list-style: none;
}

.gta-card__tco-details summary::-webkit-details-marker {
	display: none;
}

.gta-card__tco-details summary:focus-visible {
	outline: 2px solid var(--gta-c-cornflower);
	outline-offset: 2px;
}

.gta-card__costs {
	list-style: none;
	margin: var(--gta-sp-sm) 0 0;
	padding: 0;
	color: var(--gta-c-gray);
	font-size: var(--gta-fs-xs);
}

.gta-card__costs li {
	display: flex;
	justify-content: space-between;
	gap: var(--gta-sp-md);
	white-space: nowrap;
}

.gta-card__costs .gta-card__cost-cashback {
	color: var(--gta-c-olive);     /* [TDS] cashbackText.textColor */
	font-weight: var(--gta-fw-semi);
}

.gta-card__costs .gta-card__cost-total {
	border-top: 1px solid var(--gta-c-smoke);
	color: var(--gta-c-slate);
	font-weight: var(--gta-fw-bold);
	margin-top: var(--gta-sp-xs);
	padding-top: var(--gta-sp-xs);
}

/*
 * [DOM] origineel @768 en @1280: ELKE Sim Only-resultaatrij is exact 98px hoog,
 * ongeacht of er een winkellogo of "Alle shops" onder de knop staat. De bron
 * houdt de rijen dus uniform. Onze kaarten waren 81-83px en bovendien ongelijk;
 * deze ondergrens maakt ze uniform op de gemeten bronhoogte.
 *
 * DE TOESTELKAART HEEFT PRECIES DEZELFDE VASTE MAAT NODIG (A23).
 * Gemeten aan de live bron op 2026-08-25, `vergelijker-met-toestel` @768 en
 * @1280, alle twintig rijen, met de afstand tussen de knoppen "Bekijken" als
 * onafhankelijke controle (157 px rijafstand = kaart 147 + 10 px marge):
 *
 *   - kaart ZONDER actieregel  -> 130 px   (rij 4 en rij 12: "na 6 maanden"
 *                                           wél, actieregel niet)
 *   - kaart MÉT actieregel     -> 147 px   (de overige achttien)
 *
 * De bron laat de kaarthoogte dus NIET afhangen van de regels "na n maanden /
 * € x p.m." en evenmin van "Alle shops": rij 7 en 8 hebben geen "Alle shops"
 * en zijn toch 147, rij 9 heeft "na 6 maanden" en is óók 147. Alleen de
 * actieregel telt, en die is 17 px — precies het verschil 147 - 130.
 *
 * Bij ons hing de hele kaart wél aan de inhoud, omdat het kaartlichaam
 * meegroeide met de hoogste kolom: `gta-card__cta` is 79 px mét "Alle shops"
 * en 57 px zonder, `gta-card__monthly` 63 px mét de regels "na n maanden" en
 * 28 px zonder. Zolang die twee regels ONVOORWAARDELIJK werden gerenderd viel
 * dat niet op — de kaart was toen overal 152 px. Sinds ze conditioneel zijn
 * (`has_promotion_price()` in card.php) varieert de kaart van 104 tot 148 px.
 * Dat is de regressie.
 *
 * Het herstel legt de maat op waar de bron hem legt: het KAARTLICHAAM krijgt
 * een vaste hoogte en de actieregel komt daar als losse regel onder.
 *   kaartlichaam = 10 px padding boven + 27 px kop + 83 px voet + 10 px padding
 *                  onder = 130 px
 *   actieregel   = 17 px (dus zonder de eigen marge van 5 px, want de bron
 *                  telt precies 17 px verschil)
 * De hoogste inhoud in de voet is 79 px (CTA mét "Alle shops"), dus 83 px
 * knelt nergens.
 */
@media (min-width: 601px) {
	/* De bron meet 98,19 px per Sim Only-rij; op 98 px liep het blok over twaalf
	   rijen ruim 1 px achter. */
	.gta-result-card.gta-card--sim-only {
		min-height: 98.19px;
	}

	/*
	 * De CTA-kolom houdt de rijmaat, ook op kaarten zonder "Alle shops".
	 *
	 * Zo doet de bron het ook, alleen met een ander middel: `vb06ic-14` (de regel
	 * "Alle shops") krijgt daar `visibility: ${…}` en wordt bij één winkel
	 * ONZICHTBAAR gemaakt in plaats van weggelaten — de 21,09 px blijft staan.
	 * Dat is de reden dat elke toestelrij in de bron 130,19 px meet en elke Sim
	 * Only-rij 98,19, of er nu "Alle shops" onder staat of niet.
	 *
	 * Bij ons rendert de template die regel niet als er maar één winkel is, dus
	 * staat de maat hier: 32,09 (knop) + 25 (winkellogo) + 21,09 = 78,19.
	 *
	 * Hier stond `.gta-card--device .gta-card__foot { min-height: 83px }`, een
	 * noodgreep uit de tijd dat onze kaartkop 27 in plaats van 32 px hoog was.
	 * Die is vervallen; met kop 32 + rij 78,19 + 2 x 10 padding komt de
	 * toestelkaart vanzelf op 130,19 uit.
	 */

	.gta-card--device .gta-card__promotions {
		margin-top: 0;
	}
}

/* --- Kaart op smalle schermen ------------------------------------------- */
/* [TDS] sc-13m9tqj-1/-5/-8 onder "smtablet-down" (container ≤ 600px):
   bundel en prijsdeel gaan naar 100% en wisselen van volgorde. */
@media (max-width: 600px) {
	/* [TDS] vb06ic-5 / sc-13m9tqj-7 onder smtablet-down { flex:1 1 100% } */
	.gta-card__bundle-col {
		flex: 1 1 100%;
	}

	.gta-card__bundle {
		flex-wrap: wrap;
		min-width: 0;
	}

	/*
	 * [SHOT/DOM] origineel @375 (shots/original/375/vergelijker-sim-only.png):
	 * onder de bundelbalk blijft het onderste deel DRIEKOLOMS —
	 *   links   "2 jaar contract" met daaronder "Gem. kosten € 3,50"
	 *   midden  het maandbedrag met de actieregels eronder
	 *   rechts  "Bekijken" met daaronder het winkellogo en "Alle shops"
	 * De volledige kaart is daar 160px hoog. Met de eerdere opzet (alles op
	 * eigen regel, knop over de volle breedte) werd de kaart 246-275px, wat het
	 * grootste hoogteverschil op mobiel veroorzaakte.
	 */
	/*
	 * [DOM] bron @375, eerste Sim Only-kaart (identiek aanbod): de voet is een
	 * flexrij met LINKS een groep van 213,94 px (`vb06ic-7`) en RECHTS de
	 * knoppenkolom van 91,06 px (`vb06ic-13`). In die linkergroep staat
	 * "2 jaar contract" op een EIGEN regel over de volle 213,94 px, met 10 px
	 * eronder, en pas daaronder — op y 95,67 — "Gem. kosten" (108,73 px) naast
	 * het maandbedrag (105,20 px). Op de toestelvergelijker is diezelfde
	 * verdeling 106,16 naast 107,78: de twee kolommen worden dus door hun eigen
	 * INHOUD verdeeld en niet door een vaste verhouding. `auto`-sporen doen dat
	 * in een raster net als `flex: 1 1 auto` in een flexrij.
	 *
	 * Hier stond `1.15fr / 1fr / 1fr` met een gat van 5 px en "contract" naast
	 * het maandbedrag. Gevolg op 375 px: de prijskolom stond 23,78 px te hoog,
	 * "Gem. kosten" 5,61 px te laag en de knoppenkolom 2,60 px te ver naar
	 * links en 2,58 px te breed.
	 */
	.gta-card__foot {
		flex: 1 1 100%;
		order: 2;
		padding-left: 0;
		padding-top: var(--gta-sp-md);
		display: grid;
		grid-template-columns: auto auto max-content;
		grid-template-areas:
			"contract contract cta"
			"tco      monthly  cta";
		/*
		 * Hier stond `grid-template-rows: min-content 1fr` — de contractregel op
		 * zijn eigen hoogte en de rest voor rij twee. Dat was een compensatie
		 * voor een contractregel die 2,7 px te hoog was (12 px / 13,8 px plus
		 * 10 px lucht in plaats van de 14 px / 16,1 px plus 5 px van de bron);
		 * ze klopte op de Sim Only-kaart zonder actieregel en zat er 6,75 px
		 * naast op elke kaart mét.
		 *
		 * De bron verdeelt de vrije ruimte namelijk WEL gelijk. `vb06ic-7` is
		 * daar een `flex-wrap: wrap` met twee flexregels en de standaard
		 * `align-content: stretch`; de knoppenkolom staat ernaast en duwt beide
		 * regels dus even ver uit elkaar. [DOM] `looptijd-per-maand-opzegbaar`
		 * @375: bron `vb06ic-8` 30,55 hoog en rij twee op y 119,23, terwijl
		 * dezelfde kolom op `vergelijker-sim-only` @375 23,78 meet — de hoogte
		 * volgt de vrije ruimte, ze ligt niet vast.
		 *
		 * Twee `auto`-sporen doen in een raster precies dat: een item dat over
		 * beide sporen loopt (de knoppenkolom) verdeelt zijn extra hoogte gelijk
		 * over de sporen die het overspant. Met de contractregel op de maten van
		 * de bron komt dat aan beide kanten op dezelfde px uit.
		 */
		grid-template-rows: auto auto;
		align-items: start;
		/*
		 * De basisregel zet `justify-content: space-between` (voor de flexrij op
		 * brede schermen). In een raster verdeelt dat de vrije ruimte TUSSEN de
		 * sporen in plaats van ze te laten meegroeien: de sporen bleven op hun
		 * max-content staan en er viel 26 px gat tussen. `normal` laat de twee
		 * `auto`-sporen de vrije ruimte in gelijke delen opnemen — precies wat
		 * `flex: 1 1 auto` in de bron doet.
		 */
		justify-content: normal;
		gap: 0;
	}

	/*
	 * De contractkolom hoort op één regel te passen: de bron toont op 375 px
	 * "2 jaar contract" ongebroken, met daaronder "Gem. kosten € 51,25"
	 * (`shots/original/375/vergelijker-met-toestel.png`). Bij ons brak hij over
	 * twee regels en werd de kaart daardoor hoger.
	 */
	.gta-card__contract {
		grid-area: contract;
		/*
		 * [TDS] vb06ic-8 { padding: 0 0 5px; * { color:#AAAAAA; font-size:12px } }
		 *
		 * Onder 601 px staat de contractregel op een EIGEN regel, en dan bepaalt
		 * de strut van dit omhulsel het regelvak. De bron laat dat omhulsel op de
		 * 14 px / 16,1 px van de widgetreset staan en zet de 12 px alleen op de
		 * KINDEREN; wij hadden 12 px / 13,8 px op het omhulsel zelf plus 10 px
		 * lucht eronder in plaats van 5. De tekst viel daardoor 2 px te hoog in
		 * het regelvak en de rij eronder begon 6,75 px te vroeg.
		 *
		 * [DOM] `looptijd-per-maand-opzegbaar` @375, kaart met identiek aanbod
		 * (1 GB 5G / 250 min / 1 maand / EUR 6,- p.m. / "Niet tevreden? Geld
		 * terug!"): bron "1 maand contract" op y 88,69 en "Gem. kosten" op
		 * y 117,23; wij stonden op 86,69 en 110,48.
		 *
		 * Alleen HIER, niet in de basisregel. Vanaf 601 px is
		 * `gta-card__contract-term` bij ons een BLOK met zijn eigen regelhoogte
		 * en staat het woord "contract" in een anonieme regel eronder; de strut
		 * van het omhulsel telt daar wél mee, en met 16,1 px verspringt die
		 * tweede regel. Op die breedtes stond de kolom al goed (bron en herbouw
		 * allebei "2 jaar" op y 40 en "contract" op y 53,8, @1280), dus daar
		 * blijft alles zoals het was.
		 */
		font-size: var(--gta-fs);
		line-height: 16.1px;
		padding-bottom: var(--gta-sp-sm);
		white-space: nowrap;
	}

	.gta-card__contract > * {
		color: var(--gta-c-gray);
		font-size: var(--gta-fs-xs);
		line-height: 13.8px;
	}

	/*
	 * Op brede schermen staat "2 jaar" boven "contract" (zo doet de bron het
	 * ook), maar op telefoonbreedte zet de bron ze op EEN regel: "2 jaar
	 * contract" (`shots/original/375/vergelijker-met-toestel.png`).
	 */
	.gta-card__contract-term {
		display: inline;
	}

	.gta-card__monthly {
		grid-area: monthly;
	}

	.gta-card__tco {
		grid-area: tco;
	}

	.gta-card__cta {
		grid-area: cta;
		padding-top: 0;
	}

	/*
	 * De kaartkop staat op telefoonbreedte 5 px HOGER dan zijn eigen doos.
	 *
	 * Hier stond dat de 5 px `padding-bottom` er op deze breedte niet in zou
	 * zitten. Dat klopt niet: [DOM] bron `provider-kpn` @375, `vb06ic-1` heeft
	 * `height:27px; padding:0 0 5px; box-sizing:border-box` — de padding is er
	 * wél. Wat er gebeurt is dit: het component wisselt naar
	 * `flex-direction: column` en zet dan TWEE kinderen in die kolom —
	 * `vb06ic-3`, een strook van 5 px met `margin:-10px 0 0 -10px` (order 0), en
	 * daarna `vb06ic-2` met de eigenlijke kop (order 1). De strook trekt zichzelf
	 * 10 px omhoog en beslaat y 0…5; de kop volgt op y 5…32 en past daarmee exact
	 * in het inhoudsvak van 22 px (5 + 27 − 10 = 22).
	 *
	 * Netto: de INHOUD van de kop begint op y 5, niet op y 10, terwijl de rij
	 * eronder gewoon op y 37 blijft. Bij ons begon alles op y 10 en stond de hele
	 * kop dus 5 px te laag — nagemeten in de opname `provider-kpn` @375: de eerste
	 * inktrij van het beeldje en van de naam staat bij de bron op y 636 en bij ons
	 * op 642, en dat gold voor ELKE toestelkaart.
	 *
	 * `margin-top:-5px` met `padding-bottom:5px` levert precies diezelfde
	 * geometrie: de inhoud schuift 5 px omhoog en de onderkant van de doos blijft
	 * op y 37 (5 + 27 + 5), respectievelijk op y 55 wanneer de kop naar een tweede
	 * regel breekt (5 + 45 + 5). De kop heeft geen achtergrond of rand, dus alleen
	 * die twee dingen zijn zichtbaar.
	 */
	.gta-card__head {
		margin-top: -5px;
		padding-bottom: 5px;
	}

	/*
	 * Actieregels tussen de bundelbalk (order 0) en de onderkant (order 2), zoals
	 * de bron ze op telefoonbreedte toont.
	 */
	.gta-card__promotions {
		order: 1;
		/*
		 * Geen extra marge: de 2 px staat sinds deze ronde als `padding-top` op de
		 * basisregel ([TDS] sc-1hawtph-1). Met allebei werd de actieregel 18,8 px
		 * en de toestelkaart @375 205,88 in plaats van de 203,88 van de bron.
		 */
	}

	/*
	 * [SHOT] 375: de bron houdt op de Sim Only-kaart een hoogte van 160 px aan
	 * met een rijafstand van 170 px. Met de contractkolom op één regel kwam onze
	 * kaart op 149 px; deze extra tussenruimte brengt hem op de gemeten maat.
	 * De toestelkaart heeft die ruimte niet nodig — die heeft een eigen kop met
	 * toestelfoto erboven en is van zichzelf al hoger dan de bron.
	 */
	/*
	 * De bron houdt de Sim Only-rij op telefoonbreedte op een VASTE maat: de
	 * knoppen "Bekijken" staan op y 684, 854 en 1024 in
	 * `shots/original/375/vergelijker-sim-only.png` -- rijafstand 170, dus een
	 * kaart van 160 px, en dat geldt ook voor de rijen met een regel "Alle
	 * shops" eronder. Die regel past daar dus in de bestaande speling.
	 *
	 * Bij ons kwam hij er bovenop: de kaart groeide van 160 naar 176 zodra de
	 * datalaag de tweede winkel ging leveren. Vandaar dezelfde vaste maat als de
	 * bron, met minder loze ruimte boven de knop zodat de inhoud er ook in past.
	 */
	/*
	 * Hier stond `min-height: 160.08px` op de Sim Only-kaart en `204px` op de
	 * toestelkaart: twee vaste rijmaten die de kaart op de gemeten bronhoogte
	 * dwongen omdat het binnenwerk niet klopte. Met de maten van de bron
	 * (bundelbalk 51,89, voet 88,19 en de CTA-kolom op 78,19) komt de kaart daar
	 * vanzelf uit — en dan volgt hij de bron ook wáár die twee hoogten heeft:
	 * 203,88 met actieregel en 187,08 zonder, in plaats van overal 204.
	 */

	/*
	 * Dezelfde vaste rijmaat voor de toestelvergelijker: de knoppen "Bekijken"
	 * staan in `shots/original/375/vergelijker-met-toestel.png` op y 713, 927 en
	 * 1141 -- rijafstand 214, dus een kaart van 204 px. Ook hier is de rij in de
	 * bron even hoog met en zonder de regel "Alle shops".
	 */
	/*
	 * Hier stond `padding-top: 3px` voor de toestelkaart en 5 px voor Sim Only.
	 * Allebei compensaties. De bron gebruikt één waarde voor beide:
	 * [TDS] vb06ic-6 / sc-13m9tqj-8 onder smtablet-down { padding-left:0;
	 * padding-top:10px; order:2 } — en die 10 px staat al in de basisregel van
	 * `.gta-card__foot` hierboven. Nagemeten @375: de voet begint 10 px onder de
	 * bundelbalk (bron y 88,89 met inhoud op 98,89) en de kaart komt daarmee op
	 * 187,08 (toestel, zonder actieregel) respectievelijk 160,08 (Sim Only) uit.
	 */

	.gta-btn-clickout {
		width: 100%;
	}
}

/*
 * GEEN eigen breekpunt op 360px meer.
 *
 * Hier stond een `@media (max-width: 360px)`-blok dat elke bundelcel op een
 * eigen regel zette. Het origineel doet dat niet: `shots/original/320` en
 * `shots/original/375` van vergelijker-sim-only tonen exact dezelfde
 * kaartindeling, en de blokhoogte van het origineel is op 320, 375, 390 en
 * 414 px identiek (2201 px — RESPONSIVE_GAPS.md par. 4). Onze kaart sprong door
 * dat blok van 165 px naar 231 px zodra het scherm smaller werd dan 361 px, wat
 * over twaalf rijen 852 px kostte op Sim Only en over twintig rijen 1620 px op
 * de toestelvergelijker.
 *
 * Er is nu dus GEEN enkele regel meer die onder 361 px iets anders doet: de
 * kaart is van 320 tot 600 px identiek, precies zoals in de bron.
 */
/* ==========================================================================
   6. Filters
   Kleuren en randen [TDS] filter.* uit het thema; de vorm van de UI is [GTA]
   omdat het origineel geen server-side filterformulier heeft.
   ========================================================================== */

.gta-filters {
	background-color: var(--gta-c-white); /* [TDS] filter.secondaryFiltersBackgroundColor */
	border: 1px solid var(--gta-c-smoke); /* [TDS] filter.secondaryFiltersBorderColor */
	border-radius: var(--gta-radius);
	margin: 0;
}

/*
 * De hoofdfilters (Data, Minuten, Maandelijks) staan op het origineel in een
 * eigen lichtblauw paneel; de rest van de filters staat op wit. Bewijs:
 * `shots/original/1024/vergelijker-sim-only.png` — de drie sliders liggen op
 * een blauw vlak, "Providers" eronder op wit.
 */
.gta-filters__quick {
	background-color: var(--gta-c-azure);  /* [TDS] filter.mainFiltersBackgroundColor */
	border-bottom: 1px solid var(--gta-c-powder); /* [TDS] filter.mainFiltersBorderColor */
	border-radius: var(--gta-radius) var(--gta-radius) 0 0; /* [TDS] sc-1k8cnet-1 */
}

.gta-filters__quick .gta-filters__group {
	border-bottom: none;
}

/*
 * De balk is in de bron 98 px hoog (gemeten op
 * `shots/original/768/vergelijker-sim-only.png`, y 388-485); bij ons 114 px.
 * Die 16 px gaan naar de knoppenrij eronder, waar de bron ze ook heeft staan.
 */
@media (max-width: 991px) {
	.gta-filters__quick .gta-filters__group--quick {
		padding-bottom: var(--gta-sp-md);
		padding-top: var(--gta-sp-md);
	}

	.gta-filters__more {
		padding-bottom: var(--gta-sp-md);
	}
}

.gta-filters__group {
	border-bottom: 1px solid var(--gta-c-smoke); /* [TDS] sc-1k8cnet-3 & > div */
	padding: var(--gta-sp-md);
}

.gta-filters__group:last-of-type {
	border-bottom: none;                         /* [TDS] sc-1k8cnet-3 :last-child */
}

.gta-filters__legend {
	border: 0;
	display: flex;
	font-size: var(--gta-fs);
	font-weight: var(--gta-fw-bold);   /* [TDS] sc-1vr7wsw-2 { font-weight:700 } */
	justify-content: space-between;
	align-items: center;
	margin: 0 0 var(--gta-sp-sm);
	padding: 0;
	width: 100%;
	/*
	 * Hier stond `line-height: 1.4`, nog zo'n eigen aanname; het bijschrift erft
	 * nu de 1,15 van het widget. In de smalle balk klopt daarmee de hele reeks
	 * (labelregel 18,94 -> groep 70,94 -> balk 97,88, exact de bron).
	 *
	 * OOK IN DE ZIJKOLOM. Hier stond tot ronde 14 een media query die vanaf
	 * 992 px alsnog 1,4 zette: een compensatie voor een groep die te kort was.
	 * Ronde 14 heeft de oorzaak weggenomen (§23.x hieronder, blok "zijkolom op
	 * de maat van de bron"), dus de compensatie is vervallen. [DOM] bron @1280:
	 * het bijschrift in het azuren paneel meet 18,94 (chip 2 + 13 x 1,15 + 2) en
	 * in het witte paneel 16,09 (14 x 1,15) — allebei regelhoogte 1,15.
	 */
	color: var(--gta-c-slate);
}

/* Waardechip naast de labelnaam — [TDS] sc-1vr7wsw-3 { padding: 2px 5px }.
   [DOM] bron @768: de chip meet 18,94 px hoog (2 + 13 x 1,15 + 2); hier stond
   geen verticale padding, wat er 18,19 van maakte. */
.gta-filters__value {
	background-color: var(--gta-c-lavender);
	color: var(--gta-c-cornflower);
	font-size: var(--gta-fs-sm);
	font-weight: var(--gta-fw-semi);
	padding: var(--gta-sp-xs) var(--gta-sp-sm);
	border-radius: var(--gta-radius);
	white-space: nowrap;
}

.gta-filters__scale {
	display: flex;
	font-size: var(--gta-fs-xs);   /* [TDS] sc-1vr7wsw-4 { font-size:12px } */
	justify-content: space-between;
	width: 100%;
}

.gta-filters__check {
	cursor: pointer;
	display: block;
	font-size: var(--gta-fs-sm);   /* [TDS] sc-19ydw6r-2 label { font-size } */
	font-weight: var(--gta-fw-normal);
	margin-bottom: var(--gta-sp-sm);
	padding-left: 22px;            /* [TDS] sc-19ydw6r-2 { padding-left:22px } */
	position: relative;
	user-select: none;
}

.gta-filters__check input {
	cursor: pointer;
	position: absolute;
	left: 0;
	top: 2px;
	margin: 0;
	width: 14px;                   /* [TDS] sc-19ydw6r-3 { height:14px; width:14px } */
	height: 14px;
	accent-color: var(--gta-c-cornflower); /* [TDS] filter.checkboxList.checkedBackgroundColor */
}

.gta-filters__check:hover {
	background-color: var(--gta-c-lavender); /* [TDS] filter.checkboxList.hoverBackgroundColor */
}

/*
 * [DOM] bron @1280, het keuzemenu "Huidige provider" in de groep Verlengen:
 * 14 px, `padding: 2px 5px`, rand #E2EAF4 en schaduw #BDCEE6. Hier stond 13 px
 * zonder padding, met de rand- en schaduwkleur van het paneel eromheen; de
 * tekst begon daardoor 5 px te ver naar links en zat een korpsgrootte te klein.
 */
.gta-filters__select {
	background-color: var(--gta-c-white);
	border: 1px solid var(--gta-c-select-border);
	border-radius: var(--gta-radius);
	box-shadow: 0 1px 3px 0 var(--gta-c-select-shadow); /* [TDS] sc-12zp8ht-2 */
	color: var(--gta-c-cornflower);             /* [TDS] filter.selectFilter.textColor */
	font-family: var(--gta-font);
	font-size: var(--gta-fs);
	/*
	 * [DOM] bron `vergelijker-sim-only` @1280: het keuzemenu bij "Verlengen"
	 * staat op `font-weight: 700`. Alle andere berekende waarden waren al
	 * gelijk (81..279, 30 px hoog, 14 px, padding 2px 5px, rand #E2EAF4,
	 * schaduw #BDCEE6, kleur #4A90E2); dit was het enige verschil, en het is
	 * de hele reden dat het menu nog 0,663 % van zijn uitsnede afweek. Het is
	 * dus NIET de pijl van de native <select>, zoals par. 25.7 vermoedde:
	 * beide kanten tekenen dezelfde native pijl.
	 */
	font-weight: var(--gta-fw-bold);
	height: 30px;                               /* [TDS] sc-12zp8ht-2 { height:30px } */
	outline: 0;
	padding: var(--gta-sp-xs) var(--gta-sp-sm);
	width: 100%;
}

/* Providerlogo-raster — [TDS] sc-56jwml-5 */
.gta-filters__logos {
	display: flex;
	flex-wrap: wrap;
	justify-content: flex-start;
	gap: var(--gta-sp-sm);
	margin: 0;
	padding: 0;
	list-style: none;
}

.gta-filters__logo {
	align-items: center;
	background-color: var(--gta-c-white);
	border: 1px solid var(--gta-c-cornflower);
	border-radius: var(--gta-radius);
	cursor: pointer;
	display: flex;
	height: 55px;
	justify-content: center;
	width: 55px;
	margin: 0;
	position: relative;
}

.gta-filters__logo img {
	display: block;
	flex: 0 0 auto;
	width: 45px;
}

/* Zonder providerlogo valt de naam terug op tekst; die mag het 55px-tegeltje
   niet uit lopen. [GTA] — het origineel heeft altijd een logo. */
.gta-filters__logo > span[aria-hidden="true"] {
	display: block;
	font-size: var(--gta-fs-xxs);
	font-weight: var(--gta-fw-semi);
	line-height: 1.2;
	max-width: 100%;
	overflow: hidden;
	padding: 0 2px;
	text-align: center;
	overflow-wrap: anywhere;
}

.gta-filters__logo:hover {
	background-color: var(--gta-c-alice); /* [TDS] filter.logoListFilter.hoverBackgroundColor */
}

.gta-filters__logo input {
	position: absolute;
	opacity: 0;
	width: 100%;
	height: 100%;
	margin: 0;
	cursor: pointer;
}

.gta-filters__logo--selected,
.gta-filters__logo:focus-within {
	border-width: 3px;                    /* [TDS] sc-56jwml-5 &.selected */
}

/* Range-slider — [TDS] sc-1vr7wsw-10, één op één overgenomen. */
.gta-filters__range {
	appearance: none;
	-webkit-appearance: none;
	background-color: transparent;
	outline: none;
	padding: var(--gta-sp-md) 0;
	width: 100%;
}

.gta-filters__range:focus {
	outline: none;
}

.gta-filters__range::-webkit-slider-runnable-track {
	width: 100%;
	height: 2px;
	cursor: pointer;
	background: var(--gta-c-cornflower);
	border-radius: 0;
	border: 0 solid var(--gta-c-white);
}

.gta-filters__range::-webkit-slider-thumb {
	border: 1px solid var(--gta-c-cornflower);
	height: 15px;
	width: 15px;
	border-radius: 50%;
	background: var(--gta-c-cornflower);
	cursor: pointer;
	-webkit-appearance: none;
	margin-top: -6.5px;
}

.gta-filters__range::-moz-range-track {
	width: 100%;
	height: 2px;
	cursor: pointer;
	background: var(--gta-c-cornflower);
	border-radius: 0;
	border: 0 solid var(--gta-c-white);
}

.gta-filters__range::-moz-range-thumb {
	border: 1px solid var(--gta-c-cornflower);
	height: 15px;
	width: 15px;
	border-radius: 50%;
	background: var(--gta-c-cornflower);
	cursor: pointer;
}

.gta-filters__range:focus-visible {
	outline: 2px solid var(--gta-c-cornflower); /* [GTA] toegankelijkheid */
	outline-offset: 4px;
}

/* Reset- en toon-meer-links — [TDS] sc-1k8cnet-5 / sc-6gl3v1-3 */
.gta-filters__reset,
.gta-filters__more {
	color: var(--gta-c-cornflower);
	cursor: pointer;
	display: inline-block;
	font-size: var(--gta-fs-sm);
	padding-top: var(--gta-sp-md);
	text-align: center;
	user-select: none;
	width: 100%;
}

/*
 * Het pijltje voor "Reset alle filters" op de maat van de bron.
 *
 * [DOM] bron `vergelijker-sim-only` @1280: `sc-1k8cnet-5` is 220 px breed en
 * bevat de Material-Icons-ligatuur "autorenew" als `i.tds-material-icon` van
 * 14 px / lh 14 px -- een blokje van exact 14 x 14 op x 123,48 -- dan een
 * spatie van 3,4 px (Open Sans 13) en dan de tekst op x 140,88 (95,64 breed).
 * Onze Font-Awesome-glyph nam de maat van de regel over en werd 11,16 x 13,
 * waardoor de hele gecentreerde groep 1,4 px naar links stond. Zelfde ingreep
 * als bij `.gta-icon` (het filtericoon) hierboven; de glyph blijft `fa-refresh`.
 */
.gta-filters__reset .fa {
	font-size: var(--gta-fs);
	line-height: 14px;
	width: 14px;
}

.gta-filters__actions {
	padding: var(--gta-sp-md);
}

/* Primaire knop (Filter / Bekijk resultaten) — [TDS] sc-1inxm92-1 */
.gta-btn-primary {
	appearance: none;
	background-color: var(--gta-c-cornflower);
	border: 0;
	border-radius: var(--gta-radius);
	box-shadow: 0 1px 4px 0 var(--gta-c-blue-shadow);
	color: var(--gta-c-white);
	cursor: pointer;
	display: inline-block;
	font-family: var(--gta-font);
	font-size: 1em;
	font-weight: var(--gta-fw-bold);
	padding: var(--gta-sp-smm) var(--gta-sp-lg);
	text-align: center;
	text-decoration: none;
	user-select: none;
	white-space: nowrap;
}

.gta-btn-primary:hover,
.gta-btn-primary:focus,
.gta-btn-primary:visited {
	background-color: var(--gta-c-cornflower);
	color: var(--gta-c-white);
	text-decoration: none;
}

/* Actieve-filterchips — [TDS] sc-14u7urg-1 */
.gta-active-filters {
	list-style: none;
	margin: 0 0 var(--gta-sp-md);
	padding: 0;
}

.gta-active-filters li {
	background-color: var(--gta-c-lavender);
	color: var(--gta-c-cornflower);
	display: inline-block;
	font-size: var(--gta-fs-sm);
	font-weight: var(--gta-fw-semi);
	margin-bottom: var(--gta-sp-sm);
	margin-right: var(--gta-sp-sm);
	padding: 0 var(--gta-sp-sm);
	border-radius: var(--gta-radius);
}

.gta-active-filters a {
	color: var(--gta-c-cornflower);
	text-decoration: none;
}


/* ==========================================================================
   7. Geen resultaten — [TDS] noResults.headerSize = font.sizeXxl
   ========================================================================== */

.gta-no-results {
	background-color: var(--gta-c-snow);  /* [TDS] offerResults.blockBackgroundColor */
	border-radius: var(--gta-radius);
	padding: var(--gta-sp-xl);
	text-align: center;
}

.gta-no-results__title {
	font-size: var(--gta-fs-xxl);
	font-weight: var(--gta-fw-semi);
	margin: 0 0 var(--gta-sp-md);
	padding: 0;
	color: var(--gta-c-slate);
}

/* ==========================================================================
   8. Paginering — VERVALLEN

   Hier stond de opmaak van `nav.gta-pagination-results`. Die balk is weg: het
   thema `pagination.*` uit [TDS] hoort bij het `phoneOffer`-widget, het enige
   waarvoor `P.base` `pagination:!0` zet, en dat widget draait op deze site
   nergens. `simOnly` en `proposition` staan op `pagination:!1` en begrenzen hun
   lijst met `initialFilter.limit`. De volledige onderbouwing en de gevolgen
   voor `?pagina=N` staan in `template-parts/comparison/results.php`.
   ========================================================================== */

/* ==========================================================================
   9. Zonder JavaScript
   ========================================================================== */

.gta-comparison__submit {
	margin-top: var(--gta-sp-md);
}

.js .gta-comparison__submit--auto {
	display: none;   /* [GTA] met JS verzendt het formulier zichzelf */
}

/* ==========================================================================
   10. Filterpaneel per breedte
   Gemeten op de originele schermafdrukken van `vergelijker-sim-only`:
     1024 / 1280 / 1440 -> zijkolom met simkaart-icoon, drie sliders onder
                           elkaar, providerlogo's in een raster van drie.
     768 / 414          -> horizontale lichtblauwe balk met Data + Minuten
                           naast elkaar, eindlabel afgekort tot "Onbrkt".
     390 / 375 / 320    -> dezelfde balk, maar alleen Data.
   Het omslagpunt zijkolom <-> balk valt tussen 768 en 1024 en is hier 992px
   (Bootstrap 3 `md`, wat dit theme al gebruikt). Het omslagpunt een/twee
   sliders valt tussen 390 (een) en 414 (twee); hier 400px.  [SHOT]
   ========================================================================== */

/* Simkaart-icoon — [TDS] SimOnlyChanger rendert de Material-ligatuur
   `sim_card` (raw/tds/bundel-onbeperkt-internet/009.body.js). Hier als inline
   SVG in de primaire kleur. Alleen in de zijkolom; op de gemeten smalle
   breedtes staat het er niet. */
.gta-filters__icon {
	display: none;
}

@media (min-width: 992px) {
	/*
	 * HET ICOONVAK IS 140 PX HOOG — bij Sim Only en bij de toestelvergelijker,
	 * en dus ook op een merkpagina. [SHOT] gemeten op de verse referentie van
	 * 2026-08-25, telkens vanaf de bovenrand van de filterkaart tot de bovenrand
	 * van het blauwe filterpaneel respectievelijk de knop eronder:
	 *
	 *   vergelijker-sim-only      kaartrand 255 -> paneelrand 396   = 140
	 *   vergelijker-met-toestel   kaartrand 255 -> knop 396         = 140
	 *   merk-nokia/-iphone/-...   kaartrand 203 -> knop 344         = 140
	 *
	 * Dat is 10 + 120 + 10 bij de telefoon en 25 + 90 + 25 bij de simkaart.
	 *
	 * `line-height: 0` hoort erbij: de SVG is een inline-block en sleepte
	 * anders de basislijnruimte van de regel mee (bij ons 35,6 px), waardoor het
	 * vak 175,6 px werd in plaats van 140.
	 */
	.gta-filters__icon {
		display: block;
		line-height: 0;
		margin: 0;
		/*
		 * De 5 px rechts is geen sierpadding maar een MEETRESULTAAT, en hij
		 * geldt voor alle drie de varianten. [SHOT] de inkt staat in de bron
		 * telkens 2,5 px links van het midden van de kolom (midden 179,5):
		 * simkaart x 147-207 (midden 177), telefoon x 142-212 (177), NOKIA
		 * x 142-213 (177,5), Samsung x 143-212 (177,5), Apple x 159-195 (177).
		 * Bij ons stond alles op 179,5. [TDS] `r7ha0i-1 { padding-right: 5px }`
		 * geeft precies die verschuiving.
		 */
		padding: var(--gta-sp-xxl) var(--gta-sp-sm) var(--gta-sp-xxl) 0;
		text-align: center;
	}

	.gta-filters__icon svg {
		display: inline-block;
		/*
		 * [SHOT] gemeten op 1280/vergelijker-sim-only.png: het blauwe blok inkt
		 * loopt van x 147-207 (61px breed) en y 288-363 (76px hoog). Het
		 * Material-glyph `sim_card` vult binnen zijn 24x24-viewBox x 4-20 en
		 * y 2-22, dus 16/24 breed en 20/24 hoog. Terugrekenen geeft in beide
		 * richtingen een tekenvlak van ~90px — en 25 + 90 + 25 is exact de
		 * 140 px die het vak in de bron hoog is.
		 */
		width: 90px;
		height: 90px;
		fill: var(--gta-c-cornflower);  /* [TDS] color.cornFlowerBlue #4A90E2 */
	}

	/*
	 * De toestelvergelijker heeft een telefoon in plaats van een simkaart, en in
	 * een andere kleur. Gemeten op
	 * `shots/original/1280/vergelijker-met-toestel.png`: inkt 71x110 px in
	 * #ECF3FC, met de bovenkant op y 271. Het Material-glyph `phone_android`
	 * vult 14/24 breed en 22/24 hoog, wat terugrekent op een tekenvlak van
	 * 120 px; met 10 px padding erboven begint de inkt op 256 + 10 + 5 = 271.
	 */
	.gta-filters__icon--device {
		padding-top: var(--gta-sp-md);
		padding-bottom: var(--gta-sp-md);
	}

	.gta-filters__icon--device svg {
		width: 120px;
		height: 120px;
		fill: var(--gta-c-alice);   /* [TDS] color.aliceBlue #ECF3FC */
	}

	/*
	 * Merkpagina: het logo staat op zijn eigen maat (80x53, de `image80x_*.png`
	 * van TDS) gecentreerd in hetzelfde vak van 120 px.
	 *
	 * [SHOT] merk-nokia @1280: het vak loopt van 204 tot 344, het PNG dus van
	 * y 247,5 tot 300,5 en de inkt van het woordmerk (y 20-32 in het bestand)
	 * op 268-280 — precies wat de bron toont. Horizontaal: kolominhoud
	 * 71-284 na de 5 px rechts, midden 177,5, dus het PNG op 137,5-217,5 en de
	 * NOKIA-inkt (x 4-74) op 141,5-211,5.
	 */
	.gta-filters__icon--brand {
		align-items: center;
		box-sizing: border-box;
		display: flex;
		justify-content: center;
		min-height: 140px;
	}

	.gta-filters__brand-logo {
		display: block;
		height: auto;
		max-width: 100%;
	}
}

/*
 * "Kies Smartphone" — GEEN OMRANDE KNOP MAAR EEN WITTE PIL MET EEN ZACHTE
 * SLAGSCHADUW.
 *
 * [TDS] `sc-1inxm92-0` (de romp) plus `sc-1inxm92-2` (de witte variant), uit
 * `raw/tds/extracted_css.txt`:
 *
 *   sc-1inxm92-0 { appearance: none; border-radius: 2px; border-width: 0px;
 *                  border-style: none; display: inline-block; font-size: 1em;
 *                  text-align: center; vertical-align: middle;
 *                  white-space: nowrap }
 *   sc-1inxm92-2 { background-color: #FFFFFF; color: #4A90E2; font-weight: 700;
 *                  border-color: none;
 *                  box-shadow: 0 1px 4px 0 lighten(.274, cornFlowerBlue);
 *                  &:hover,&:focus { background-color: #ECF3FC } }
 *
 * `lighten(.274, #4A90E2)` is HSL(212, 72,4%, 58,8% + 27,4%) = **#C2DAF5**.
 *
 * [SHOT] bevestigd op `shots/original/1280/vergelijker-met-toestel.png`. Er is
 * daar GEEN rand: langs de knoprand loopt een verloop 252,253,255 ->
 * 248,251,254 -> 240,246,253 -> 230,240,251, dus de kleur wordt met dalende
 * dekking naar buiten uitgesmeerd. De verhouding van de drie kanalen is op elke
 * afstand 0,41 : 0,40 : 0,40 van (255-#C2DAF5) — dat is dit schaduwkleurtje en
 * geen andere. De verticale doorsnede is asymmetrisch (boven drie rijen,
 * onder vijf) en dat is precies de 1 px verschuiving naar beneden.
 *
 * MAATVOERING [SHOT], @1280, identiek op `vergelijker-met-toestel` en op alle
 * drie de merkpagina's: de knop is **32 px hoog en 166 px breed**, met de
 * tekstinkt 136 px breed. 166 - 136 = 30, dus `padding: 0 15px`
 * ([TDS] spacing.lg). Hij is GECENTREERD in de kolom (knopmidden 179,5 =
 * kolommidden) en dus niet zo breed als de kolom.
 */
.gta-btn-outline {
	background-color: var(--gta-c-white);
	border: 0;
	border-radius: var(--gta-radius);   /* [TDS] generic.borderRadius 2px */
	box-shadow: 0 1px 4px 0 #C2DAF5;    /* [TDS] lighten(.274, cornFlowerBlue) */
	box-sizing: border-box;
	color: var(--gta-c-cornflower);
	cursor: pointer;
	display: inline-block;
	font-family: var(--gta-font);
	font-size: 1em;
	font-weight: var(--gta-fw-bold);
	/* 32 px hoog zonder rand: de regelhoogte draagt de hele hoogte. [SHOT] */
	line-height: 32px;
	padding: 0 var(--gta-sp-lg);
	text-align: center;
	text-decoration: none;
	user-select: none;
	vertical-align: middle;
	white-space: nowrap;
}

.gta-btn-outline:hover,
.gta-btn-outline:focus {
	background-color: var(--gta-c-alice);
	color: var(--gta-c-cornflower);
	text-decoration: none;
}

.gta-btn-outline .fa {
	margin-left: var(--gta-sp-sm);
}

/*
 * In de zijkolom staat "Kies Smartphone" onder het icoon of het merklogo,
 * GECENTREERD en op zijn eigen breedte — niet over de volle kolom.
 *
 * [SHOT] @1280 sluit de rij precies: het icoonvak eindigt op 396 (merkpagina:
 * 344), de knop staat van 396 tot 428 (344-376) en de bovenrand van het blauwe
 * filterpaneel ligt op 438 (386). De 10 px ertussen is de onderpadding van dit
 * blok; er is geen bovenpadding.
 */
.gta-filters__device-picker {
	display: none;
}

@media (min-width: 992px) {
	.gta-filters__device-picker {
		display: block;
		margin: 0;
		padding: 0 var(--gta-sp-md) var(--gta-sp-md);
		text-align: center;
		/*
		 * [DOM] bron: dit blok is bij de bron GEEN eigen kader maar de onderste
		 * helft van `r7ha0i-2` (y255-438,09), dat over zijn volle hoogte een
		 * rand van 1 px links en rechts heeft. Bij ons houdt de rand op waar het
		 * icoonvak ophoudt (396) en liep hij 42 px lang niet door. De zijranden
		 * lopen nu door tot aan het azuren paneel, en de inhoud staat daarmee op
		 * x 81 met een breedte van 198 — precies de bron.
		 */
		border-left: 1px solid var(--gta-c-smoke);
		border-right: 1px solid var(--gta-c-smoke);
	}
}

/* Het eindlabel van de sliders: voluit in de zijkolom, afgekort in de balk. */
.gta-filters__scale-short {
	display: none;
}

@media (max-width: 991px) {
	.gta-filters__scale-long {
		display: none;
	}

	.gta-filters__scale-short {
		display: inline;
	}
}

/* --- De horizontale filterbalk onder 992px --------------------------------- */

@media (max-width: 991px) {
	.gta-filters__quick {
		border-bottom: none;
		border-radius: var(--gta-radius);
		display: flex;
		flex-wrap: wrap;
		align-items: flex-start;
	}

	.gta-filters__quick .gta-filters__group--quick {
		flex: 1 1 0;
		min-width: 0;
	}

	/* Het maandbedrag valt op smalle breedtes weg — zo doet het origineel het
	   ook (COMPARISON_ENGINE.md A3: "maandbedrag valt weg op mobiel"). */
	.gta-filters__quick .gta-filters__group--money {
		display: none;
	}

	/*
	 * Op de toestelvergelijker is de tweede regelaar in de balk "Eenmalig" en
	 * niet "Minuten" — `shots/original/768/vergelijker-met-toestel.png` toont
	 * Data naast Eenmalig, met Minuten alleen in de zijkolom.
	 */
	.gta-filters--device .gta-filters__quick .gta-filters__group--minutes {
		display: none;
	}

	.gta-filters__more {
		flex: 0 0 100%;
		margin: 0;
		padding: 0 var(--gta-sp-md) var(--gta-sp-md);
		text-align: center;
	}

	/* Zonder JS staat het paneel open en heeft deze knop niets te doen. */
	.gta-filters--collapsible.is-collapsed .gta-filters__body {
		display: none;
	}
}

/* Onder 400px past alleen de dataslider; [SHOT] 390 toont er een, 414 twee. */
@media (max-width: 399px) {
	.gta-filters__quick .gta-filters__group--minutes,
	.gta-filters__quick .gta-filters__group--upfront {
		display: none;
	}
}

/* De zijkolom heeft geen "Meer filters"-knop: daar staat alles al open. */
.gta-filters__more {
	display: none;
}

@media (max-width: 991px) {
	.js .gta-filters__more {
		display: block;
	}
}

.gta-filters__more-button {
	background: none;
	border: 0;
	color: var(--gta-c-cornflower);   /* [TDS] filter.moreFiltersColor = cornFlowerBlue */
	cursor: pointer;
	font-family: var(--gta-font);
	font-size: var(--gta-fs-sm);      /* [TDS] moreFilters: font.sizeSm */
	padding: 0;
	text-align: center;
	user-select: none;
}

/*
 * "Toon 3 meer" / "Toon 5 meer" — in de bron een blauwe tekstlink met een
 * caret erachter, geen omrand knopje (RESPONSIVE_GAPS.md A11/D7).
 */
.gta-filters__list-more {
	display: block;
	margin-top: var(--gta-sp-sm);
	text-align: left;
}

.gta-filters__list-more .fa {
	margin-left: var(--gta-sp-xs);
}

/* Combivoordelen: een gewone lijst met vinkjes, zonder opsommingstekens. */
.gta-filters__checks {
	list-style: none;
	margin: 0;
	padding: 0;
}

.gta-filters__checks .gta-filters__check {
	margin-bottom: var(--gta-sp-xs);
}

/* --- Providerlogo's: drie per rij ----------------------------------------- */

/*
 * [SHOT] 1024/1280/1440: negen tegels in drie rijen van drie, met "Toon 3 meer"
 * eronder. De tegel zelf is 55px ([TDS] sc-56jwml-5); een vast raster van drie
 * kolommen houdt de rijen gelijk, ook als een tegel smaller uitvalt.
 */
.gta-filters__logos {
	display: grid;
	grid-template-columns: repeat(3, 55px);
	justify-content: start;
}

/* --- Kopregel van de resultaten ------------------------------------------- */

/*
 * [SHOT] 768/414/375: de tellerregel staat links en de blauwe knop "Filter"
 * rechts, op dezelfde regel. Vanaf 992px is er geen knop; dan is dit gewoon de
 * tellerregel.
 */
/*
 * De knoppenrij naast de tellerregel.
 *
 * GEMETEN op `shots/original/768/vergelijker-sim-only.png`: de lichtblauwe balk
 * loopt van y 388 tot 485 (98 px hoog) en de eerste kaart begint op 538. De
 * knoppenrij is daar dus 53 px hoog, met een knop van 32 px die er middenin
 * zweeft. Bij ons was de balk 114 px en de knoppenrij 36 px — samen dezelfde
 * 150 px, maar met de knop klem tussen de balk en de eerste kaart (0 px lucht
 * boven en 0 px onder, gemeten in de DOM).
 *
 * De 16 px die de bron minder in de balk stopt, geeft zij aan de knoppenrij. Dat
 * doen wij nu ook: hieronder wat lucht rond de knop, en in
 * `.gta-filters__quick` evenveel minder. De filterzone blijft daardoor op 149.
 */
.gta-results__head {
	align-items: center;
	display: flex;
	gap: var(--gta-sp-md);
	justify-content: space-between;
}

.gta-results__filter-toggle,
.gta-results__device-picker {
	display: none;
	/*
	 * [DOM] bron @768 en @375: de knop "Filter" is 32,09 px hoog en 84,58 breed,
	 * met `padding: 8px 15px` — dezelfde maat als de clickoutknop. Hier stond
	 * 5 px met een `min-height` eromheen om toch op 32 uit te komen.
	 */
	padding-bottom: var(--gta-sp-smm);
	padding-top: var(--gta-sp-smm);
}

/*
 * Beide knoppen even hoog, en op de maat van de bron: 32 px (gemeten op
 * `shots/original/375/vergelijker-sim-only.png`, knop y 565-596).
 *
 * "Kies Smartphone" had hier een randcompensatie van -1 px boven en onder,
 * omdat de knop toen nog een rand van 1 px had. Die rand bestaat niet meer --
 * de bron gebruikt een slagschaduw, zie `.gta-btn-outline` -- en de hoogte komt
 * nu uit `line-height: 32px`. De compensatie is daarmee vervallen; `min-height`
 * blijft staan als ondergrens voor de knop "Filter" ernaast.
 */
.gta-results__filter-toggle,
.gta-results__device-picker > .gta-dp__opener {
	box-sizing: border-box;
	min-height: 32px;
}

/*
 * De kiezer in de zijkolom heeft ruimte boven en onder nodig; in de knoppenrij
 * juist niet -- daar bepaalt de rij zelf de lucht (8 px boven, 12 px onder).
 */
.gta-results__device-picker {
	padding: 0;
}

/*
 * Op telefoonbreedte zet de bron de twee knoppen van de toestelvergelijker op
 * een eigen regel onder de tellerregel: de filterzone is daar 169 px tegen
 * 150 px bij Sim Only (RESPONSIVE_GAPS.md par. 4 en 5). Bij ons stonden teller
 * en knoppen op een regel geperst, waardoor de teller over twee regels brak en
 * de zone op 158 px uitkwam. Vanaf 768 px past alles wel op een regel en is de
 * zone in beide gevallen 150 px.
 */
@media (max-width: 767px) {
	.gta-results__head--device {
		/*
		 * [TDS] r7ha0i-9 { flex-wrap: wrap-reverse } — in wrap-reverse komt de
		 * EERSTE regel onderaan. De tellerregel staat als eerste in de DOM en
		 * belandt daarmee ONDER de knoppen. [DOM] bron @375: de knoppenregel
		 * staat op y 531,88 en de teller op 563,97; met `wrap` stond het bij ons
		 * andersom en week de hele kop af.
		 */
		flex-wrap: wrap-reverse;
		row-gap: 0;
		/*
		 * "Kies Smartphone" en "Filter" horen in de bron BIJ ELKAAR, rechts
		 * uitgelijnd met een kleine tussenruimte — geen knop tegen elke rand.
		 * Gemeten op `shots/original/768/vergelijker-met-toestel.png`, rij
		 * y=472: de omrande knop loopt tot x=648, de gevulde begint op x=659
		 * (11 px ertussen) en eindigt op x=743, met 24 px tot de rand. Op 375 px
		 * is het beeld gelijk: omrand tot ~265, gevuld 275-359. Met
		 * `space-between` werden ze juist uit elkaar geduwd.
		 */
		justify-content: flex-end;
	}

	.gta-results__head--device .gta-results__count {
		flex: 1 1 100%;
	}
}

@media (max-width: 991px) {
	.js .gta-results__filter-toggle,
	.js .gta-results__device-picker {
		display: inline-block;
		flex: 0 0 auto;
	}

	/* Lucht rond de knop; zie de toelichting bij `.gta-results__head`. Alleen
	   hier, want vanaf 992 px is er geen knoppenrij. */
	/*
	 * [DOM] bron @768, gemeten vanaf de bovenkant van het blok: de azuren balk
	 * loopt tot 97,88, de knoppenrij `r7ha0i-9` staat op 102,88 en is 32,09 px
	 * hoog (één knop, geen padding eromheen), en het resultatenblok begint op
	 * 139,97 — dus 5 px onder de knoppenrij ([TDS] r7ha0i-4 { padding-bottom:5px }).
	 * De 5 px tussen balk en knoppenrij is [TDS] r7ha0i-7 { padding-bottom:5px };
	 * die staat als `row-gap` op `.gta-comparison__body`.
	 *
	 * Hier stond `padding: 8px 0 12px`: een knoppenrij van 52 px. Dat was een
	 * compensatie uit de tijd dat de resultatenlijst nog geen eigen 10 px padding
	 * had.
	 */
	.js .gta-results__head {
		padding: 0 0 var(--gta-sp-sm);
	}

	/*
	 * [TDS] r7ha0i-9 { align-items:flex-start; flex-wrap:wrap-reverse } — in
	 * wrap-reverse is "flex-start" de ONDERkant, dus de tellerregel staat met zijn
	 * onderkant gelijk aan die van de knop. Nagemeten @768: knoppenrij 102,88 tot
	 * 134,97, tellerblok 116,17 tot 134,97.
	 */
	.gta-results__head {
		align-items: flex-end;
	}

	/* [TDS] r7ha0i-10 onder mdtablet-down { padding: 5px 10px 0 0 } */
	.gta-results__head .gta-results__count {
		margin: 0;
		padding: var(--gta-sp-sm) var(--gta-sp-md) 0 0;
	}

	/*
	 * De teller neemt de vrije ruimte, zodat de knoppen als groep rechts
	 * blijven staan in plaats van uit elkaar geduwd te worden. Gemeten op
	 * `shots/original/768/vergelijker-met-toestel.png`: de omrande knop eindigt
	 * op x=648 en de gevulde begint op x=659 — 11 px ertussen.
	 */
	.gta-results__head .gta-results__count {
		flex: 1 1 auto;
	}

	.gta-comparison__results > .gta-results__head {
		flex: 1 1 100%;
	}

}

/* --- Actieve filters: de resetlink is geen chip --------------------------- */

.gta-active-filters__reset {
	background-color: transparent;
	font-weight: var(--gta-fw-normal);
	padding: 0;
}

.gta-active-filters__reset .fa {
	margin-right: var(--gta-sp-xs);
}

/* ==========================================================================
   11. Bijwerken zonder herlading
   ========================================================================== */

/*
 * Laadtoestand. De bestaande lijst blijft staan en wordt gedempt — hem leeg
 * maken zou de pagina laten springen, precies wat we willen voorkomen.
 */
.gta-comparison.is-loading .gta-comparison__results {
	opacity: 0.55;
	transition: opacity 120ms linear;
}

.gta-comparison.is-loading .gta-comparison__results::after {
	content: "";
	display: block;
	height: 2px;
	background-color: var(--gta-c-cornflower);
	animation: gta-progress 900ms ease-in-out infinite;
	margin-top: var(--gta-sp-sm);
}

@keyframes gta-progress {
	0%   { opacity: 0.25; }
	50%  { opacity: 1; }
	100% { opacity: 0.25; }
}

@media (prefers-reduced-motion: reduce) {
	.gta-comparison.is-loading .gta-comparison__results::after {
		animation: none;
	}
}

/* Het resultatenblok krijgt focus als een vervangen link verdwenen is; dat mag
   geen focusring op een heel blok opleveren. */
.gta-comparison__results:focus {
	outline: none;
}

.gta-comparison__error {
	background-color: var(--gta-c-lavender);
	border-radius: var(--gta-radius);
	color: var(--gta-c-slate);
	margin: var(--gta-sp-md) 0 0;
	padding: var(--gta-sp-md);
}

.gta-comparison__error[hidden] {
	display: none;
}

/* ==========================================================================
   12. Compacte toplijst in nieuwsartikelen — [SHOT] 1280/nieuws-archief.png
   band y 2470-3171

   De bron gebruikt onder een nieuwsartikel en onderaan het nieuwsarchief NIET
   de volledige zevenkoloms resultaatkaart, maar een compacte genummerde top-5:
   genummerd bolletje, logo, data, minuten, maandbedrag met info-icoon, en
   "Bekijken". Geen contractkolom, geen "Gem. kosten", geen winkellogo en geen
   tellerregel. Rijafstand ongeveer 82 px tegen 108 px bij de volle kaart.
   ========================================================================== */

/*
 * [TDS] sc-1snaqs1-0 { min-width: generic.minWidgetWidth || 250px;
 *                      max-width: generic.maxWidgetWidth || 950px }
 * De toplijstwidget is dus STANDAARD op 950 px begrensd. Alleen het
 * nieuwsarchief stuurt een eigen thema mee (`options.themeVariable:
 * "myCustomTDSTheme"`, `raw/tds/page_widgets.json`) dat er 100% van maakt; alle
 * 29 toplijsten BINNEN een artikel draaien op het standaardthema.
 *
 * Nagemeten @1280: bron `/telefoonabonnement-afkopen` blok x 70…1020 met de
 * kaart op 80…1010 (930 px), tegenover `/nieuws` blok 70…1210 met de kaart op
 * 80…1200 (1120 px). Bij ons was de in-artikel-kaart 1120 px op 1280, 1366,
 * 1440 en 1920; op 1024 en smaller bindt de kolom en klopte hij al.
 *
 * De klasse komt uit `gta_render_comparison()`; zie de toelichting daar.
 */
.gta-comparison--toplist.gta-comparison--in-article {
	max-width: 950px;
}

.gta-comparison--toplist .gta-card__contract,
.gta-comparison--toplist .gta-card__shop,
.gta-comparison--toplist .gta-card__shop-count,
.gta-comparison--toplist .gta-card__promotions {
	display: none;
}

/*
 * De kostenspecificatie blijft bereikbaar, maar krimpt tot het info-icoon dat
 * de bron naast het maandbedrag zet. Zonder JavaScript blijft het een
 * <details>, dus de specificatie is er nog steeds.
 */
.gta-comparison--toplist .gta-card__tco {
	flex: 0 0 auto;
	min-width: 0;
}

.gta-comparison--toplist .gta-card__tco > span,
.gta-comparison--toplist .gta-card__tco summary > span {
	display: none;
}

.gta-comparison--toplist .gta-card__tco-details > summary {
	list-style: none;
	cursor: pointer;
	color: var(--gta-c-gray);
}

.gta-comparison--toplist .gta-card__tco-details > summary::-webkit-details-marker {
	display: none;
}

.gta-comparison--toplist .gta-card__tco-details > summary::after {
	content: "\f05a";               /* Font Awesome 4: info-circle */
	font-family: FontAwesome;
	font-size: var(--gta-fs-lg);
	font-weight: normal;
	/*
	 * [DOM] bron @1280: de icoonkolom `sc-13m9tqj-11` is 33 px breed. Het icoon
	 * zit erin als `i.tds-material-icon` (14 px, lh 14) met
	 * `padding: 5px 0 0 5px` en een ligatuur die 28 px breed uitvalt. Onze glyph
	 * was 13,72 px breed en verschoof daarmee de hele gecentreerde groep hierboven.
	 * Alleen de MAAT is overgenomen; de tekening verschilt (Font Awesome tegen
	 * Material Icons) en dat is geen maat die te repareren valt.
	 */
	display: inline-block;
	width: 28px;
	margin-left: 5px;
	text-align: left;
}

/*
 * Rijmaat van de bron, gemeten op `shots/original/1280/nieuws-archief.png`: de
 * vijf rijen beginnen op y 2592, 2674, 2755, 2837 en 2919 -- rijafstand 82 px,
 * met een rijblok van 52 px.
 *
 * De padding stond hier op `5px 10px`. De bron zet op `sc-13m9tqj-0` ook in de
 * compacte rij `padding: 10px` rondom -- [DOM] @1280 `/nieuws`: kaart 71,73 px
 * met een rij (`sc-13m9tqj-5`) van 51,73 px, dus 10 px boven en onder. De 5 px
 * hier was een compensatie voor een binnenwerk dat te hoog was; zie de
 * korpsgrootte hieronder.
 */
.gta-comparison--toplist .gta-card {
	margin-bottom: var(--gta-sp-md);
	padding: var(--gta-sp-md);
}

/*
 * De verhouding tussen bundelband en prijs/knop-deel is in de bron ongeveer 3:2
 * (band tot x 745, rest tot 1202 binnen een kaart van x 77-1202); in de volle
 * kaart is dat juist 2:3. Zonder deze correctie was onze band 450 px breed waar
 * de bron er 665 heeft, en stond het info-icoon te ver naar rechts.
 */
.gta-comparison--toplist .gta-card__bundle-col {
	flex: 3 1 0%;
}

.gta-comparison--toplist .gta-card__foot {
	flex: 2 1 0%;
}

/*
 * Het maandbedrag met het info-icoon staat in de bron GECENTREERD in de ruimte
 * tussen de bundelband en de knop, niet links ertegenaan.
 *
 * [DOM] bron @1280 `/nieuws`, rij met identiek aanbod: de voet `sc-13m9tqj-8`
 * loopt van x 664 tot 1110 met 10 px padding links; daarin staat
 * `sc-13m9tqj-9` van 674 tot 1018,94 (344,94 breed) met daarbinnen het
 * maandbedrag (`sc-13m9tqj-10`, 73,77 px) en het info-icoon (`sc-13m9tqj-11`,
 * 33 px) op x 793,08 respectievelijk 866,84 -- 119,08 px vrij aan beide zijden.
 * De knop begint op 1018,94. Bij ons stond het bedrag op x 674, dus 119 px te
 * ver naar links; de knop stond wel goed.
 *
 * Twee automatische marges doen hetzelfde zonder een extra omhulsel: de vrije
 * ruimte voor het bedrag en die na het icoon worden gelijk verdeeld, en de knop
 * sluit daar direct op aan.
 */
.gta-comparison--toplist .gta-card__monthly {
	flex: 0 1 auto;
	/* [TDS] sc-13m9tqj-10 heeft geen padding-right; de 5 px van `vb06ic-11` uit
	   de volle kaart maakte deze kolom 78,77 in plaats van 73,77 px. */
	padding-right: 0;
}

/*
 * De centrering geldt ALLEEN vanaf 601 px. Onder die breedte zakt de voet in de
 * bron onder de bundelband en staat het bedrag gewoon links: [DOM] bron @375,
 * `sc-13m9tqj-8` op x 10 met `sc-13m9tqj-9` van 10 tot 223,94 en het maandbedrag
 * op x 10. Met de automatische marges ook daar schoof de hele groep naar het
 * midden en werd de uitsnede van het toplijstblok @375 slechter in plaats van
 * beter (3,639 -> 4,658 %).
 */
@media (min-width: 601px) {
	.gta-comparison--toplist .gta-card__monthly {
		margin-left: auto;
	}

	.gta-comparison--toplist .gta-card__tco {
		margin-right: auto;
	}
}

/*
 * Hier stond `min-height: 72px` op de compacte rij -- een ronde maat die de rij
 * op de bronhoogte DWONG terwijl het binnenwerk te hoog was. De bron meet
 * 71,73 px (@1280) en 132,73 px (@375) en heeft daar geen ondergrens voor
 * nodig: met de bundelband op 51 px (logo 31 plus 2 x 10) komt de rij daar
 * vanzelf op uit. De ondergrens is daarom vervallen; de korpsgrootte hierboven
 * doet het werk.
 *
 * Wat er wél moet blijven staan is dat de compacte rij NIET de vaste rijmaat
 * van de volle Sim Only-kaart overneemt. Die 98,19 px hoort bij `vb06ic-0`; de
 * compacte rij is in de bron een ander component (`sc-13m9tqj-0`) met een eigen
 * hoogte. Zonder deze regel viel de rij vanaf 601 px terug op 98,19.
 */
.gta-comparison--toplist .gta-result-card.gta-card--sim-only {
	min-height: 0;
}

/*
 * De bundelband houdt in de compacte rij dezelfde 10 px padding als in de volle
 * kaart ([TDS] sc-1cqfm6i-0). Met 5 px was de band 46 in plaats van 51 px hoog.
 *
 * Hier stond ook `line-height: 16,1px` op de waarde EN het bijschrift. Dat was
 * voor het bijschrift fout: de bron zet daar 13,8 px, net als in de volle kaart
 * ([TDS] sc-1cqfm6i-3, 12 px met de 1,15 van de widgetreset). De cel werd
 * daardoor 34,18 in plaats van 31,89 px en de band 54,19 in plaats van 51,89.
 *
 * Bewijs uit de referentieopname zelf, `shots/original/1280/nieuws-archief.png`
 * op x 448 (buiten de tekst, binnen de band): de vijf banden beslaan 52, 51,
 * 52, 52 en 52 beeldrijen met bovenkanten op y 2592, 2674, 2755, 2837 en 2919.
 * Chrome legt zo'n achtergrond op hele beeldpixels, dus een band van exact
 * 51,00 zou ALTIJD 51 rijen geven; alleen een band van 51,89 met een steek van
 * 81,89 levert precies deze reeks (bovenkant 2591,70; afronden geeft 2592 /
 * 2674 / 2755 / 2837 / 2919 en hoogten 52 / 51 / 52 / 52 / 52). De rij is daar
 * dus 71,89 px, niet de 71,73 die een LIVE DOM-meting soms geeft -- zie de
 * waarschuwing hieronder.
 *
 * Er is nu geen enkele eigen regelhoogte meer in de compacte band: hij volgt de
 * volle kaart, en dat is wat de bron ook doet.
 */

/*
 * ... behalve wanneer de band ZELF 250 px of smaller is.
 *
 * [TDS] sc-1cqfm6i-0 in `raw/tds/chunks/3_3a022991_chunk.js`:
 *     { ... min-width:190px; font-size: font.size }
 *     @xsphone-down { * { font-size: font.sizeXxs } }
 * met de maatbuckets uit `pc-inpage.js`:
 *     { xsphone:250, smphone:320, mdphone:360, lgphone:414, smtablet:600, ... }
 * Dat is een CONTAINERmaat: de widget meet zijn eigen omhulsel
 * (`sc-1ozbd1q-0`) en zet er een `tds-<maat>-down`-klasse op. Zodra de band
 * 250 px of smaller is, valt ALLES erin terug op font.sizeXxs (11 px).
 *
 * Waar raakt ons dat? Alleen de compacte rij op 320 px: de kaart is daar 270 px
 * en de band dus precies 250. De volle kaart is op 320 px 290 px breed met een
 * band van 270 en blijft daarmee op 14 px; op 375 px is de compacte band 305 px
 * en dus ook 14. Nagemeten in de referentieopnamen (kolom buiten de tekst):
 *   320 `nieuws-archief` x 280 -> band 51 px, vijf keer, dus 11 px;
 *   375 `nieuws-archief` x 337 -> band 52 px, vijf keer, dus 51,89 en 14 px;
 *  1280 `nieuws-archief` x 448 -> 52/51/52/52/52, dus 51,89 en 14 px.
 *
 * CSS kent hier geen net gereedschap voor zonder `container-type` op de band te
 * zetten, en dat maakt van dit flexitem een inperkingscontext met gevolgen voor
 * zijn eigen breedte. De schermmaat hieronder is de rekensom terug: de compacte
 * band is 70 px smaller dan het scherm (2 x 15 kolommarge, 2 x 10 blokpadding,
 * 2 x 10 kaartpadding), dus band <= 250 komt neer op scherm <= 320.
 */
@media (max-width: 320px) {
	.gta-comparison--toplist .gta-card__bundle-value,
	.gta-comparison--toplist .gta-card__bundle-label,
	.gta-comparison--toplist .gta-card__bundle-cell strong {
		font-size: var(--gta-fs-xxs);
		line-height: 12.65px;
	}

	/*
	 * Op een uitzondering na, en die is van de bron zelf: het bijschrift onder de
	 * MINUTEN is daar geen `sc-1cqfm6i-3` maar `tds-voice-credits-unit`, en dat
	 * element gaat niet mee omlaag. [DOM] bron @320 `/nieuws`: "data" 11 px /
	 * lh 12,65 naast "minuten" 12 px / lh 13,8. Beide cellen worden toch door het
	 * providerlogo tot 31 px uitgerekt, dus dit verandert alleen de inkt.
	 */
	.gta-comparison--toplist .gta-card__bundle-cell:last-child .gta-card__bundle-label {
		font-size: var(--gta-fs-xs);
		line-height: 13.8px;
	}
}

/*
 * Hier stond `line-height: 1,35` op de twee kleine regels onder het maandbedrag
 * vanaf 601 px -- nog een compensatie uit de tijd dat de basisregelhoogte 1,4
 * was. De widgetreset zet 1,15 en die erft hier als getal door, dus
 * 11 x 1,15 = 12,65 px. [DOM] bron @1280 `/nieuws`: "na 6 maanden" (`h4i2h-4`)
 * en het bedrag eronder staan allebei op 11 px met regelhoogte 12,65.
 */

/*
 * [DOM] bron @375 en @1280: het omkaderde blok begint 10 px BOVEN de eerste rij
 * en houdt 20 px onder de laatste (de 10 px ondermarge van de kaart plus 10 px
 * van het blok zelf). Bij ons was dat 0 en 10. Zie A26.
 */
/*
 * Hier stond `padding: 10px 0` op het toplijstblok. Dat was de losse
 * compensatie voor de 10 px die het RESULTATENBLOK van de bron rondom zijn
 * kaarten heeft ([TDS] sc-1snaqs1-4 { background-color:#FBFBFB; padding:10px },
 * de toplijstvariant van r7ha0i-15). Die padding staat nu op `.gta-results`
 * zelf, aan alle vier de kanten en met de achtergrond erbij; met allebei stond
 * er 20 px boven en onder de rijen. Nagemeten @1280 `nieuws-archief`: bron blok
 * y 2571,63 hoogte 428,83 met de eerste rij op 2581,63; herbouw vóór deze
 * ronde 450 hoog met de eerste rij op 2591,63.
 */

/*
 * [DOM] bron @375: de compacte rij is daar 134 px — bundelband over de volle
 * breedte (51,89) met daaronder één regel met maandbedrag, info-icoon en
 * "Bekijken" (61,73), plus 2 x 10 px kaartpadding.
 *
 * Bij ons pakte de compacte rij op telefoonbreedte de opmaak van de VOLLE kaart
 * over: `.gta-card__foot` wordt onder 601 px een raster van drie kolommen
 * (contract | maandbedrag | knop). In de compacte rij is de contractkolom
 * verborgen, dus bleef er een zeer smalle middenkolom over waarin
 * "€ 2,– p.m. / na 6 maanden / € 4,– p.m." over zes regels brak: de
 * maandkolom werd 146 px en de rij 161 in plaats van 134.
 *
 * Hier gaat de voet daarom terug naar één rij, net als op desktop — alleen
 * onder de bundelband in plaats van ernaast, precies zoals de bron het toont.
 */
@media (max-width: 600px) {
	.gta-comparison--toplist .gta-card__bundle-col {
		flex: 1 1 100%;
	}

	/*
	 * [DOM] bron @375, compacte rij met identiek aanbod: de voet
	 * (`sc-13m9tqj-8`) staat op y 61,89 met 10 px padding-top; daarbinnen het
	 * maandbedrag op x 10 (73,77 breed), het info-icoon er DIRECT naast op
	 * x 83,77 (33 breed) en de knop rechts uitgelijnd op x 223,94 (91,06), alle
	 * drie met hun inhoud BOVENAAN de 51,73 px hoge regel.
	 *
	 * Hier stond `align-items: center` met een kier van 10 px, en de knop kreeg
	 * zijn rechteruitlijning van een losse regel `margin-left: auto` op
	 * `.gta-card__cta`. Die regel is bij het centreren van de prijsgroep op
	 * desktop weggevallen; zonder hem sprong de knop bij ons naar x 136,77.
	 * De uitsnede van het toplijstblok @375 ging daardoor van 3,639 naar
	 * 10,015 %. Nu staat de uitlijning weer waar hij hoort, en meteen op de
	 * maten van de bron: geen kier, inhoud bovenaan.
	 */
	.gta-comparison--toplist .gta-card__foot {
		align-items: flex-start;
		display: flex;
		flex: 1 1 100%;
		flex-direction: row;
		gap: 0;
		padding-left: 0;
		padding-top: var(--gta-sp-md);
	}

	.gta-comparison--toplist .gta-card__monthly {
		flex: 0 1 auto;
	}

	.gta-comparison--toplist .gta-card__cta {
		margin-left: auto;
	}

	.gta-comparison--toplist .gta-btn-clickout {
		width: auto;
	}
}

/*
 * A26 (rest) — de compacte rij op telefoonbreedte exact op de maat van de bron.
 *
 * [DOM] bron @375, eerste rij: kaart 133,63 px = 10 px padding boven + 10 px
 * onder, bundelband 51,89 en voetregel 61,73. De rij zonder actieregel is daar
 * 113,98 px. Bij ons was dat 137,14 en 105,9: te hoog én te laag tegelijk,
 * omdat drie fouten elkaar deels opheven —
 *
 *   1. onze kaartpadding was 5 px in plaats van 10 (-10 px);
 *   2. de 5G-badge rekte de bovenste regel van de bundelband van 16,1 naar
 *      18,06 px, want hij is bij ons 11 px/1,4 met `vertical-align: middle`
 *      terwijl [TDS] spuq8k-0 10 px/12 px met `vertical-align: 1.5px` is
 *      (+2,27 px op de band);
 *   3. de maandkolom stond op onze eigen regelhoogtes (bedrag 1,4 = 28 px,
 *      "na n maanden" 15,4 px) waar [TDS] h4i2h-1/-3 23 px en 12,65 px geeft
 *      (+11,25 px).
 *
 * Alleen onder 601 px. Daarboven bepaalt de bundelband de rijmaat en komt die
 * sinds deze ronde vanzelf op de bronmaat uit (51,89 -> rij 71,89 @1280); de
 * `min-height: 72px` die dat eerder afdwong is vervallen, zie hierboven.
 */
@media (max-width: 600px) {
	.gta-comparison--toplist .gta-card {
		padding-bottom: var(--gta-sp-md);
		padding-top: var(--gta-sp-md);
	}

	.gta-comparison--toplist .gta-badge {
		font-size: 10px;
		line-height: 12px;
		vertical-align: 1.5px;
	}

	/* [TDS] sc-1cqfm6i-3: "data"/"minuten" op 13,8 px met 2 px erboven. */
	.gta-comparison--toplist .gta-card__bundle-label {
		line-height: 13.8px;
		margin-top: 2px;
	}

	/*
	 * De maandkolom draait bij ons op de regelhoogte van het theme (1,4 = 19,6
	 * px); [TDS] sc-13m9tqj-10 staat op 16,1 px. Dat scheelt op de regel met het
	 * bedrag en nog eens op de regel "€ x,- p.m." eronder.
	 */
	.gta-comparison--toplist .gta-card__monthly {
		line-height: 16.1px;
	}

	.gta-comparison--toplist .gta-price__symbol,
	.gta-comparison--toplist .gta-price__main {
		line-height: 23px;
	}

	.gta-comparison--toplist .gta-price__trail,
	.gta-comparison--toplist .gta-card__monthly-suffix {
		line-height: 13.8px;
	}

	.gta-comparison--toplist .gta-card__standard-monthly,
	.gta-comparison--toplist .gta-card__promotion-term {
		line-height: 12.65px;
	}
}

/* ---------------------------------------------------------------------------
 * Filters als uitschuifpaneel op smalle breedtes
 *
 * Het origineel toont de filters onder 992 px niet in de pagina maar als paneel
 * dat van rechts inschuift over een verduisterde pagina, met een kop
 * "Filter jouw resultaten" en een sluitkruis rechtsboven. De knop "Filter"
 * naast de tellerregel en de link "Meer filters" in de balk openen allebei
 * datzelfde paneel.
 *
 * De stijlen hangen aan `.gta-filters--drawer`, een klasse die pas door
 * JavaScript wordt gezet. Zonder JavaScript blijft het filterblok gewoon in de
 * pagina staan en is er niets dat het zou kunnen openen of sluiten.
 * [SHOT] paneelbreedte en kop gereconstrueerd uit de schermafdracht van het
 * origineel; kleuren uit het bestaande palet.
 * ------------------------------------------------------------------------ */

.gta-filters__backdrop,
.gta-filters__drawer-head {
	display: none;
}

@media (max-width: 991px) {

	/*
	 * [TDS] guq94t-1 { background-color: #000000; opacity: 0.5; position: fixed;
	 * inset: 0 } — dezelfde verduistering als bij de toestelkiezer en de
	 * winkelpop-up, want het is bij de bron dezelfde component. Hier stond
	 * `rgba(0,0,0,.45)`; die 0,05 verschil in dekking kleurt de HELE pagina
	 * achter de lade net anders en telt daardoor over een heel scherm mee.
	 */
	.gta-filters--drawer .gta-filters__backdrop {
		display: block;
		position: fixed;
		inset: 0;
		z-index: 1040;
		background-color: #000000;
		opacity: 0.5;
		transition: opacity 0.2s ease;
	}

	.gta-filters--drawer.is-collapsed .gta-filters__backdrop {
		opacity: 0;
		pointer-events: none;
	}

	/*
	 * LET OP BIJ HET UITBREIDEN VAN DIT BLOK. De klasse `gta-filters--drawer`
	 * staat op het FORMULIER, en dat formulier bevat NIET alleen de lade maar
	 * ook de horizontale filterbalk (`.gta-filters__quick`) die in de pagina
	 * blijft staan. Een selector als `.gta-filters--drawer .gta-filters__group`
	 * raakt die balk dus net zo goed. Dat is hier een keer misgegaan: de regel
	 * voor de regelaargroepen zette `display: flex` en overschrijpte daarmee
	 * `.gta-filters__quick .gta-filters__group--money { display: none }` -- even
	 * specifiek, maar later in het bestand. De balk kreeg er op Sim Only een
	 * derde regelaar bij, het badge "Max. EUR 150,-" paste niet en de pagina
	 * werd 430 px breed op een scherm van 375. Alles wat de INHOUD van de lade
	 * betreft draagt daarom `.gta-filters__body` in de selector.
	 *
	 * HET PANEEL IS 240 PX BREED EN HET IS DE ZIJKOLOM ZELF.
	 *
	 * Wat de bron doet, nagemeten aan de LIVE bron op acht breedtes in dezelfde
	 * run (320, 360, 375, 390, 414, 600, 601 en 768 px): de lade is TELKENS
	 * 240 px breed en staat telkens tegen de rechterrand (x + 240 = de
	 * viewportbreedte, en op 320 px tegen de 325 van de bekende overloop). De
	 * ouderketen daarbij @375:
	 *
	 *   guq94t-2      fixed 0,0 375x667, overflow-y:auto      de schuiflaag
	 *   guq94t-3      375x667  flex-kolom
	 *   guq94t-6      375x1224,75  flex-rij
	 *   guq94t-8      x135 y0 240x1224,75                     het paneel
	 *   guq94t-10     x135 y0 240x1189,75  padding:10px
	 *   sc-1y3nfmv-0  x145 y10 220x1169,75                    de titel + kolom
	 *   sc-1k8cnet-0  x145 y41,09 220x1076,56                 DE ZIJKOLOM
	 *
	 * De lade is dus niet iets eigens: het is `sc-1k8cnet-0`, hetzelfde blok van
	 * 220 px dat op brede schermen links van de resultaten staat, in de
	 * vensterschil van 240. Alles wat in de sectie "De zijkolom op de maat van
	 * de bron" hieronder is uitgemeten geldt hier onverkort -- en dat is precies
	 * wat er ontbrak: bij ons was de lade `min(360px, 92vw)` breed (nagemeten
	 * 294 tot 360 px) met de MOBIELE filterbalk erin, dus met de bijschriften
	 * NAAST de schuifbalk in plaats van erboven en met providertegels op een
	 * steek van 60 in plaats van 65.
	 *
	 * Het paneel blijft hier een eigen schuifgebied in plaats van een
	 * schuivende laag eromheen. Dat is zichtbaar hetzelfde: de lade van de bron
	 * is 1224 px hoog en begint op y 0, dus in beeld is dat een witte kolom van
	 * rand tot rand die je doorscrollt.
	 */
	.gta-filters--drawer .gta-filters__body {
		display: block;
		position: fixed;
		top: 0;
		right: 0;
		bottom: 0;
		z-index: 1050;
		width: 240px;                       /* [TDS] guq94t-8 om sc-1y3nfmv-0 (220) heen */
		max-width: 100%;
		overflow-y: auto;
		-webkit-overflow-scrolling: touch;
		margin: 0;
		padding: var(--gta-sp-md);          /* [TDS] guq94t-10 { padding: spacing.md } */
		background: #fff;
		box-shadow: -2px 0 12px rgba(0, 0, 0, 0.2);
		transform: translateX(0);
		transition: transform 0.25s ease;
	}

	/* Overschrijft de oudere regel die het blok simpelweg verborg. */
	.gta-filters--drawer.is-collapsed .gta-filters__body {
		display: block;
		transform: translateX(100%);
		visibility: hidden;
		transition: transform 0.25s ease, visibility 0s linear 0.25s;
	}

	/*
	 * [TDS] sc-1y3nfmv-1 { font-weight: 700; padding-bottom: 15px } -- geen eigen
	 * korpsgrootte (dus font.size = 14px), geen rand, en niet vastgeplakt.
	 * Nagemeten: de zijkolom begint bij de bron op y 41,09, dat is 10 (padding)
	 * + 16,1 (regelhoogte) + 15 (padding-bottom). Hier stond een kop van 15px/600
	 * met een onderrand en `position: sticky`.
	 */
	.gta-filters--drawer .gta-filters__drawer-head {
		display: block;
		margin: 0;
		padding: 0 0 var(--gta-sp-lg);
		background: transparent;
		border-bottom: 0;
		position: static;
	}

	/*
	 * `sc-1y3nfmv-1` is een `<div>`, dus een blok van de volle 220 px met de
	 * regelhoogte van de widget. [DOM] bron @375: 220 x 31,09 op y 10 (16,1
	 * regel plus 15 padding-bottom). Bij ons was het een inline `<span>` van
	 * 151,48 x 19 op y 8.
	 */
	.gta-filters__drawer-title {
		display: block;
		font-size: var(--gta-fs);
		font-weight: var(--gta-fw-bold);
		color: var(--gta-c-slate);
	}

	/*
	 * De bijschriftregel van een filtergroep is bij de bron zo hoog als het
	 * BADGE ernaast (13px/600, 18,94 px) en de naam staat er met de bovenkant
	 * tegenaan. [DOM] bron @375: "Data" 33,36 x 18,94 op y 52,09; bij ons
	 * 33,36 x 16,09 op y 53,52 -- het gevolg van `align-items: center` op de
	 * `<legend>`, die de naam 1,43 px omlaag duwt.
	 */
	.gta-filters--drawer .gta-filters__body .gta-filters__legend {
		align-items: stretch;
	}

	/* [TDS] guq94t-11 `.material-icon { font-size: 24px }`: het kruis is 24 px,
	   niet 20. */
	.gta-filters--drawer .gta-filters__drawer-close svg {
		height: 24px;
		vertical-align: middle;
		width: 24px;
	}

	/*
	 * [TDS] guq94t-11 { background:#ECF3FC; border-radius:2px; color:#4A90E2;
	 * height:35px; position:absolute; right:0; top:0; width:35px;
	 * .material-icon { font-size:24px; line-height:35px } } -- hetzelfde
	 * sluitkruis als bij de toestelkiezer en de winkelpop-up, want het is bij de
	 * bron letterlijk dezelfde component. Het zit in de hoek van het VENSTER,
	 * dus buiten de padding van 10 px.
	 */
	.gta-filters--drawer .gta-filters__drawer-close {
		background: var(--gta-c-alice);
		border-radius: var(--gta-radius);
		color: var(--gta-c-cornflower);
		height: 35px;
		line-height: 35px;
		padding: 0;
		position: absolute;
		right: 0;
		top: 0;
		width: 35px;
		z-index: 1;
	}

	.gta-filters--drawer .gta-filters__drawer-close:hover,
	.gta-filters--drawer .gta-filters__drawer-close:focus-visible {
		background: #d6e5f9;                /* [TDS] darken(.05, aliceBlue) */
	}

	/* ------------------------------------------------------------------
	 * DE ZIJKOLOM-OPMAAK IN DE LADE.
	 *
	 * Woordelijk dezelfde maten als het blok `@media (min-width: 992px)`
	 * verderop, want bij de bron IS het datzelfde blok. Ze staan hier apart
	 * omdat CSS geen "deze breedte OF deze klasse" kent; de selectors dragen
	 * `.gta-filters--drawer` en winnen daarmee van de mobiele varianten
	 * hierboven.
	 * ------------------------------------------------------------------ */

	/* labelPosition: "top" -- de bijschriften BOVEN de balk, niet ernaast.
	   [DOM] bron @375 in de lade: "0" en "Onbeperkt" op y 81,03, de balk op
	   y 97,13 en 198 px breed. Bij ons stonden ze op dezelfde regel als de balk
	   (y 99,89 respectievelijk 97,89) en was de balk 196,61 breed. */
	.gta-filters--drawer .gta-filters__body .gta-filters__group--quick,
	.gta-filters--drawer .gta-filters__body .gta-filters__group--money {
		display: flex;
		flex-direction: column;
		align-items: stretch;
		column-gap: 0;
	}

	.gta-filters--drawer .gta-filters__body .gta-filters__group--quick .gta-filters__legend,
	.gta-filters--drawer .gta-filters__body .gta-filters__group--money .gta-filters__legend {
		order: 0;
		margin: 0 0 var(--gta-sp-md);
		padding-top: var(--gta-sp-md);
	}

	.gta-filters--drawer .gta-filters__body .gta-filters__group--quick .gta-filters__scale,
	.gta-filters--drawer .gta-filters__body .gta-filters__group--money .gta-filters__scale {
		display: flex;
		justify-content: space-between;
		order: 1;
		margin-bottom: 0;
	}

	.gta-filters--drawer .gta-filters__body .gta-filters__group--quick .gta-filters__range,
	.gta-filters--drawer .gta-filters__body .gta-filters__group--money .gta-filters__range {
		order: 2;
	}

	/* [DOM] bron: de bijschriftregel staat op 14px -- de widgetreset zet elk kind
	   terug op font.size. "0" meet daar 8,02 px, niet 6,88. */
	.gta-filters--drawer .gta-filters__body .gta-filters__scale > * {
		font-size: var(--gta-fs);
	}

	/*
	 * GEEN lucht naast de bijschriften. `sc-1vr7wsw-8 { padding-right: 10px }`
	 * en `-9 { padding-left: 10px }` horen bij `labelPosition: "side"` -- daar
	 * staan de labels NAAST de balk en moeten ze er niet tegenaan plakken. In
	 * de lade staat de bron op "top" en zijn die twee er niet: [DOM] bron @375
	 * in de lade meet "0" 8,02 px, tegen 18,02 bij ons (8,02 + 10).
	 */
	.gta-filters--drawer .gta-filters__body .gta-filters__group--quick .gta-filters__scale > :first-child {
		padding-right: 0;
	}

	.gta-filters--drawer .gta-filters__body .gta-filters__group--quick .gta-filters__scale > :last-child {
		padding-left: 0;
	}

	/* [TDS] sc-1k8cnet-4 { padding: 10px 0 } plus de binnenwrapper met
	   `padding-bottom: 10px`: samen 20 px onder de laatste inhoud; bij een
	   regelaargroep 10, want die heeft geen binnenwrapper met padding. */
	.gta-filters--drawer .gta-filters__body .gta-filters__group {
		padding: 0 0 var(--gta-sp-xl);
	}

	.gta-filters--drawer .gta-filters__body .gta-filters__group--quick,
	.gta-filters--drawer .gta-filters__body .gta-filters__group--money {
		padding-bottom: var(--gta-sp-md);
	}

	.gta-filters--drawer .gta-filters__body .gta-filters__legend {
		margin: 0 0 var(--gta-sp-md);
		padding-top: var(--gta-sp-md);
	}

	/* [DOM] bron: de keuzelabels meten 16,09 (14 x 1,15), met 5 px eronder. */
	.gta-filters--drawer .gta-filters__body .gta-filters__check,
	.gta-filters--drawer .gta-filters__body .gta-filters__checks .gta-filters__check {
		font-size: var(--gta-fs);
		margin-bottom: var(--gta-sp-sm);
	}

	/* [TDS] sc-56jwml-4 { padding: 5px } om een tegel van 55 px: steek 65, geen
	   rasterkier. [DOM] bron in de lade @375: de drie kolommen staan op x 166,
	   231 en 296 -- 65 uit elkaar. Bij ons op 55, 115 en 175, dus 60. */
	.gta-filters--drawer .gta-filters__body .gta-filters__logos {
		gap: 0;
		grid-template-columns: repeat(3, 65px);
	}

	.gta-filters--drawer .gta-filters__body .gta-filters__logos > li {
		padding: var(--gta-sp-sm);
	}

	/* [TDS] sc-56jwml-6 / sc-1cvb8qm-7: 14 px, direct tegen het raster aan. */
	.gta-filters--drawer .gta-filters__body .gta-filters__list-more {
		font-size: var(--gta-fs);
		padding-top: 4px;
	}

	.gta-filters--drawer .gta-filters__body .gta-filters__logos + .gta-filters__list-more {
		margin-top: 0;
	}

	/* [TDS] sc-1k8cnet-1 (azuur, rand rondom, padding 0 10px) om de
	   hoofdfilters, sc-1k8cnet-3 (wit, rand 0 1px 1px 1px, padding 0 10px) om
	   de rest. Samen leveren ze de inhoudsbreedte van 198 px die de bron in de
	   lade laat zien: 240 - 2x10 (venster) - 2x1 (rand) - 2x10 (paneel). */
	.gta-filters--drawer .gta-filters__body .gta-filters__mirror {
		border: 1px solid var(--gta-c-powder);
		border-radius: var(--gta-radius) var(--gta-radius) 0 0;
		margin-bottom: 0;
		padding: 0 var(--gta-sp-md);
	}

	.gta-filters--drawer .gta-filters__body .gta-filters__panel {
		background-color: var(--gta-c-white);
		border: 1px solid var(--gta-c-smoke);
		border-top: 0;
		display: block;
		padding: 0 var(--gta-sp-md);
	}

	/* De bron laat de rand ook op de LAATSTE groep staan; daaronder komt de
	   rand van het witte paneel zelf. */
	.gta-filters--drawer .gta-filters__body .gta-filters__panel .gta-filters__group:last-of-type {
		border-bottom: 1px solid var(--gta-c-smoke);
	}

	/*
	 * Voluit "Onbeperkt" op een EIGEN regelvak. [DOM] bron in de lade: het
	 * eindbijschrift meet 16,09 hoog (14 x 1,15), net als "0"; bij ons was het
	 * een inline `<span>` en dus 19 hoog, waardoor de hele bijschriftregel
	 * 2 px hoger begon.
	 */
	.gta-filters--drawer .gta-filters__body .gta-filters__scale-long {
		display: block;
	}
}

@media (prefers-reduced-motion: reduce) {
	.gta-filters--drawer .gta-filters__body,
	.gta-filters--drawer .gta-filters__backdrop {
		transition: none;
	}
}

/* ==========================================================================
   13. Pop-up "Alle shops" — hetzelfde abonnement bij meerdere winkels
   ==========================================================================

   Herkomst van elke waarde hieronder:

   * De vensterschil (achtergrond, venster, sluitkruis, sluitbalk) staat in
     `raw/tds/pc-inpage.js` rond de vertaalsleutel `all.close`, als de
     styled-components `guq94t-1` t/m `guq94t-12`.
   * De inhoud (titel, samenvattingsregel, tabel) staat in
     `raw/tds/chunks/8_330b2a24_chunk.js` als `sc-17em4r0-0` t/m `-12`.
   * De kleuren komen uit `raw/tds/extracted_theme.json`, tak `modal`:
     `backgroundColor #FFFFFF`, `closeButtonsBackgroundColor #ECF3FC`,
     `textColor #4A90E2`.

   Zonder JavaScript is dit een gewone `<details>` die onder de kaart openklapt;
   alle pop-upvormgeving hangt aan `.gta-shops--dialog`, een klasse die pas door
   JavaScript wordt gezet. Precies de werkwijze van het filterpaneel
   (`gta-filters--drawer`) hierboven.
   ========================================================================== */

.gta-shops {
	/* Mag de kaartrij niet hoger maken: de opener staat op exact dezelfde plek
	   en met exact dezelfde opmaak als de `<span>` die hij vervangt. */
	display: block;
	margin: 0;
}

.gta-shops__opener {
	cursor: pointer;
	list-style: none;
}

.gta-shops__opener::-webkit-details-marker {
	display: none;
}

.gta-shops__opener:focus-visible {
	outline: 2px solid var(--gta-c-cornflower); /* [GTA] toegankelijkheid */
	outline-offset: 2px;
}

/* --- Terugval zonder JavaScript ------------------------------------------ */

/*
 * Zonder JavaScript klapt het venster gewoon open onder de kaart. De
 * sluitknoppen zijn `<button>`s en zouden daar niets doen: de
 * samenvattingsregel "Alle shops" is dan zelf de sluitknop. De verduisterde
 * achtergrond hoort er evenmin, want er is niets om te verduisteren.
 */
.gta-shops__backdrop {
	display: none;
}

/*
 * EEN DICHTGEKLAPTE `<details>` MAG DE PAGINA NIET BREDER MAKEN.
 *
 * Chrome geeft de inhoud van een gesloten `<details>` nog steeds een
 * rechthoek -- dat staat al in par. 24.5, waar het een meetscript op het
 * verkeerde been zette. Het gaat verder dan meten: die inhoud telt ook mee in
 * de MIN-CONTENT van zijn voorouders. De winkeltabel zit in de knoppenkolom van
 * de kaart, en die kolom is een flexitem; zodra de tabel breder wordt dan de
 * kolom groeit de min-content van dat item mee, duwt de kaart uit en daarmee de
 * hele pagina.
 *
 * Gemeten @320 op `/goedkoopste-telefoon-abonnement-zonder-telefoon`: de
 * `scrollWidth` liep op naar 407 px (de bron: 325) met de tabel van de
 * DICHTGEKLAPTE pop-up op x 224,9 ... 494,4. Op
 * `/goedkoopste-telefoon-abonnement-met-telefoon` was het 336. Zichtbaar was er
 * niets van: het venster is dicht en wordt niet geschilderd.
 *
 * `display: none` zolang de `<details>` dicht is haalt die bijdrage weg. Voor de
 * bezoeker verandert er niets -- de inhoud was al onzichtbaar -- en de
 * terugval zonder JavaScript blijft werken, want zodra hij hem openklapt geldt
 * `[open]` en staat alles er weer.
 *
 * De bron heeft dit probleem niet: daar bestaat het venster pas ZODRA het
 * geopend wordt (React rendert het dan pas), dus er is nooit een gesloten
 * venster dat breedte inneemt.
 */
.gta-shops:not([open]) > .gta-shops__viewport,
.gta-shops:not([open]) > .gta-shops__backdrop {
	display: none;
}

html:not(.js) .gta-shops__close,
html:not(.js) .gta-shops__close-bar {
	display: none;
}

.gta-shops__panel {
	background-color: var(--gta-c-white);  /* [TDS] modal.backgroundColor */
	border: 1px solid var(--gta-c-smoke);
	border-radius: var(--gta-radius);      /* [TDS] generic.borderRadius */
	margin-top: var(--gta-sp-sm);
	position: relative;
	text-align: left;
}

.gta-shops__inner {
	padding: var(--gta-sp-md);             /* [TDS] guq94t-10 { padding: spacing.md } */
}

/*
 * [TDS] sc-17em4r0-1 { padding-bottom: spacing.lg } — rechts blijft 35 px vrij
 * voor het sluitkruis. GEEN eigen korpsgrootte op het omhulsel: de naam
 * erbinnen krijgt zijn 13px van `ji1rnf-1` / `f635ir-1`. Hier stond
 * `--gta-fs-lg` (16px); nagemeten was de bron daar 13px vet.
 */
.gta-shops__title {
	font-size: var(--gta-fs);
	font-weight: var(--gta-fw-bold);
	margin: 0;
	padding: 0 35px var(--gta-sp-lg) 0;
}

/*
 * [TDS] ji1rnf-3 { display:inline-block; height:27px; padding-right:spacing.xs;
 *                  vertical-align:middle; width:27px;
 *                  img { max-width:25px; max-height:25px } }
 * en ji1rnf-1 / f635ir-1 { font-size: font.sizeSm; font-weight: weightBold }.
 * Dezelfde maten als in de kaartkop, want het is bij de bron dezelfde
 * component. De kop van de pop-up toont GEEN eenmalig bedrag — `OfferTitle`
 * rendert alleen beeldje en naam.
 */
/*
 * EIGEN KLASSE, geen `.gta-card__device-name`. Het is bij de bron dezelfde
 * component, maar aan onze kant is `.gta-card__device-name` de haak waarmee het
 * testharnas de TOESTELNAMEN VAN DE RESULTAATKAARTEN opsomt
 * (`17-toestelkiezer.spec.js`: "het formulier draagt de toestelkeuze mee"). De
 * pop-up staat binnen `[data-testid="comparer-result"]`, dus met dezelfde
 * klasse telde elke kaart twee namen mee en zag die test er twee verschillende.
 * De opmaak is regel voor regel dezelfde.
 */
.gta-shops__device-name {
	color: var(--gta-c-slate);        /* [TDS] ji1rnf-2 / offerTitle.textColor */
	font-size: var(--gta-fs-sm);      /* [TDS] f635ir-1 { font-size:13px } */
	font-weight: var(--gta-fw-bold);  /* [TDS] f635ir-1 { font-weight:700 } */
	min-width: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* [TDS] sc-17em4r0-2 { display:flex; justify-content:space-between;
                        padding-bottom: spacing.md } */
/*
 * Geen `align-items`. `sc-17em4r0-2` heeft alleen `display:flex` en
 * `justify-content:space-between`, dus de standaard `stretch` geldt en de
 * contractduur begint op dezelfde regel als de bundelbalk. Hier stond
 * `align-items: center` — dezelfde eigen toevoeging die in par. 24 al uit de
 * kaartrij is gehaald.
 */
.gta-shops__summary {
	display: flex;
	justify-content: space-between;
	padding-bottom: var(--gta-sp-md);
}

/* [TDS] sc-17em4r0-3 { width:270px } / lgphone-down 240px / mdphone-down 200px */
.gta-shops__summary > .gta-card__bundle {
	flex: 0 1 270px;
	width: 270px;
}

/*
 * DE WAARDE IN DE BUNDELBALK MAG AFBREKEN, op elke breedte. `sc-1cqfm6i-2`
 * zet nergens `white-space`, en juist daarom zakt het 5G-badge bij de bron naar
 * een eigen regel zodra de cel te smal wordt. In deze pop-up is de balk altijd
 * smaller dan op de kaart (270 / 240 / 200 px tegen 346 op de kaart), dus daar
 * gebeurt dat ook altijd:
 *   @1280 bron balk 270 × 65,89 — wij 270 × 51,89, want het badge bleef naast
 *         "onbeperkt" staan en de balk kreeg geen tweede regel;
 *   @375  bron "onbeperkt" op y 193,39 en het badge op y 208,03, allebei op
 *         x 94,73 — bij ons stond het badge op dezelfde regel, liep het de cel
 *         uit en viel het over het woord "onbeperkt" van de MINUTEN-cel heen.
 *         Dat is de "onbeperkt [5G]beperkt" uit het auditrapport.
 * De kaart zelf houdt zijn `nowrap`: daar is de cel breed genoeg en is er niets
 * gemeten dat om een wijziging vraagt.
 */
.gta-shops__summary > .gta-card__bundle .gta-card__bundle-value {
	white-space: normal;
}

/* [TDS] sc-17em4r0-4 { padding: none sm; * { color: darkGray; font-size: sizeXs } } */
.gta-shops__contract {
	flex: 0 0 auto;
	padding: 0 var(--gta-sp-sm);
	text-align: right;
}

.gta-shops__contract .gta-card__retention {
	font-weight: var(--gta-fw-bold);       /* [TDS] sc-17em4r0-6 */
}

/* [TDS] sc-17em4r0-5 is een `<div>`: "contract" staat op een eigen regel. */
.gta-shops__contract-word {
	display: block;
}

/*
 * De looptijd zelf blijft INLINE. [DOM] bron @1280 meet "2 jaar" 31,27 px
 * breed (de tekst) op y 210; bij ons was het een blok van 46,09 px (de
 * blokbreedte) op y 212. `vb06ic-8` maakt er op de KAART onder 601 px wel een
 * blok van, maar in deze pop-up is het `ContractTerm` in de inline stroom van
 * `sc-17em4r0-4`.
 */
.gta-shops__contract .gta-card__contract-term {
	display: inline;
}

/*
 * De waarde in de bundelbalk is inline, want het netwerkbadge is haar BUUR en
 * niet haar kind (zie `shops.php`). Als blok zou zij over twee regels lopen en
 * de balk 2,09 px hoger maken dan bij de bron.
 */
.gta-shops__summary > .gta-card__bundle .gta-card__bundle-value {
	display: inline;
}

/*
 * Het bijschrift onder de DATA-cel staat strak tegen de regel van het
 * netwerkbadge aan; alleen het bijschrift onder de MINUTEN-cel heeft de 2 px
 * van `sc-1cqfm6i-3` / `.tds-voice-credits-unit`.
 * [DOM] bron @1280 in de pop-up: waarde-regel 222 ... 238,09, badgeregel
 * 238,09 ... 254,09, en "data" begint op 254,09 -- geen tussenruimte. Bij ons
 * stond daar 2 px marge, en dat maakte de bundelbalk 67,98 in plaats van 65,89
 * en het hele venster 293,98 in plaats van 291,89, met elke tabelrij eronder
 * 2 px te laag.
 */
.gta-shops__summary > .gta-card__bundle .gta-card__bundle-cell--data .gta-card__bundle-label {
	margin-top: 0;
}

/*
 * Een brede tabel mag de PAGINA nooit laten schuiven -- vandaar dit
 * schuifgebied in de terugval zonder JavaScript, waar de tabel gewoon onder de
 * kaart openklapt en dus in een kolom van 91 px terechtkomt.
 *
 * In het VENSTER geldt dat niet, en daar moet hij ook weg: de bron kent geen
 * schuifgebied om de tabel en laat het venster liever buiten de pagina steken.
 * Op 320 px is dat zichtbaar -- de bron meet daar een venster van 334,52 px op
 * een pagina van 325 en snijdt het sluitkruis half af, terwijl onze tabel zich
 * liet samendrukken tot 305 en de kolommen verschoven. Zelfde afweging als de
 * 320-px-overloop in par. 25.5: de bron volgen gaat voor "wij zijn correcter".
 */
.gta-shops__table-wrap {
	overflow-x: auto;
}

.gta-shops--dialog[open] .gta-shops__table-wrap {
	overflow-x: visible;
}

/* [TDS] sc-17em4r0-7 */
/*
 * De winkeltabel heeft geen randen. `site.css` regel 38 zet
 * `table, th, td { border: 1px solid #666 }` — dat komt letterlijk uit de
 * stylesheet van het origineel en hoort daar te blijven voor de redactionele
 * tabellen in de content. De pop-up erfde die randen ten onrechte mee; het
 * origineel toont daar een rasterloze tabel. Daarom hier expliciet terugzetten
 * in plaats van de globale regel aan te passen. [SHOT]
 */
.gta-shops__table,
.gta-shops__table th,
.gta-shops__table td {
	border: 0;
}

.gta-shops__table {
	border-collapse: collapse;
	font-size: var(--gta-fs-sm);           /* [TDS] font.sizeSm */
	width: 100%;
}

/*
 * REGELHOOGTE `normal` IN DE TABEL, en dat is gemeten en niet aangenomen.
 * De widgetreset zet `line-height: 1.15` op de widgetwortel en alles binnen de
 * vergelijker erft dat — de toestelnaam in de kop van deze pop-up meet dan ook
 * 14,95px (13 × 1,15). De TABEL doet dat niet: [DOM] bron @375 geeft op de
 * koppen "Shop" / "Per maand" / "Gem." en op de bestelknop `line-height:
 * normal`. Dat is voor 14px Open Sans 19,07px in plaats van 16,1px, en het
 * verklaart de drie maten die overbleven:
 *   kopregel   29 tegen 26,09  (19,07 + 10 padding)
 *   datarij    45 tegen 36,09
 *   knop       35 tegen 32,09  (19,07 + 2 × 8 padding)
 * Waarom de erfelijke 1,15 de tabel niet bereikt is niet te zien in het
 * bundel; de maat is aan beide kanten in dezelfde run genomen en eenduidig.
 */
.gta-shops__table th,
.gta-shops__table td {
	line-height: normal;
}

.gta-shops__table th {
	font-weight: var(--gta-fw-bold);
	overflow: hidden;
	padding: 0 var(--gta-sp-sm) var(--gta-sp-md);
	text-align: left;
}

.gta-shops__table td {
	overflow: hidden;
	padding: 0 var(--gta-sp-sm) var(--gta-sp-md);
	vertical-align: middle;
}

/* De bestelknop erft die `normal` mee: bij de bron is hij 91,06 × 35. */
.gta-shops__cta .gta-btn-clickout {
	line-height: normal;
}

.gta-shops__table td * {
	font-weight: var(--gta-fw-bold);
}

/*
 * [TDS] sc-17em4r0-8 { width:60px; height:20px; img{max-width:50px;
 * max-height:20px; vertical-align:middle} }. Die 60 px is de maat van het
 * BLOKJE IN de cel, niet van de cel zelf: de cel heeft daarnaast nog
 * `padding: 0 5px 10px`. Nagemeten aan de bron @375 is de kolom "Shop" 70 px
 * breed. Bij ons stond de 60 op de cel (met `border-box` dus 50 px inhoud) en
 * was de hele tabel — en daarmee het venster — 10 px te smal: 324,5 tegen
 * 334,52.
 */
.gta-shops__shop {
	height: 20px;
	width: 70px;
}

.gta-shops__shop img {
	max-height: 20px;
	max-width: 50px;
	vertical-align: middle;
}

.gta-shops__monthly {
	font-weight: var(--gta-fw-bold);
	white-space: nowrap;
}

/* [TDS] sc-17em4r0-11: stippellijn onder het gemiddelde, in de tekstkleur. */
.gta-shops__avg-value {
	border-color: var(--gta-c-slate);      /* [TDS] font.color */
	border-style: dotted;
	border-width: 0 0 1px 0;
	display: table;
	white-space: nowrap;
}

/* [TDS] sc-17em4r0-12 { text-align:right } */
.gta-shops__cta {
	text-align: right;
}

/*
 * De bestelknop in de tabel is de GEWONE clickoutknop. `sc-17em4r0-*` bevat
 * geen enkele regel die hem kleiner maakt; de pop-up rendert dezelfde
 * `ClickOutButton` als de kaart, met de padding uit het thema
 * (`spacing.smm spacing.lg` = 8px 15px, hoogte 32,09 — par. 24.2). Hier stond
 * `5px 15px`, en dat maakte de tabelrij 36,09 in plaats van 45 px hoog.
 * De regel is daarom weg; wat overblijft is de rechtsuitlijning van
 * `sc-17em4r0-12`.
 */

/* --- Sluitknoppen — [TDS] guq94t-11 en guq94t-12 -------------------------- */

.gta-shops__close {
	background-color: var(--gta-c-alice);  /* [TDS] modal.closeButtonsBackgroundColor */
	border: 0;
	border-radius: var(--gta-radius);
	color: var(--gta-c-cornflower);        /* [TDS] modal.textColor */
	cursor: pointer;
	display: block;
	height: 35px;
	line-height: 35px;
	padding: 0;
	position: absolute;
	right: 0;
	text-align: center;
	top: 0;
	user-select: none;
	width: 35px;
}

.gta-shops__close:hover,
.gta-shops__close:focus {
	background-color: #D6E5F9;             /* [TDS] darken(.05, aliceBlue) */
}

.gta-shops__close svg {
	vertical-align: middle;
}

.gta-shops__close-bar {
	background-color: var(--gta-c-alice);  /* [TDS] modal.closeButtonsBackgroundColor */
	border: 0;
	border-radius: var(--gta-radius);
	color: var(--gta-c-cornflower);        /* [TDS] modal.textColor */
	cursor: pointer;
	display: block;
	font-family: var(--gta-font);
	font-size: var(--gta-fs);
	height: 35px;
	line-height: 35px;
	padding: 0;
	text-align: center;
	user-select: none;
	vertical-align: middle;
	width: 100%;
}

.gta-shops__close-bar:hover,
.gta-shops__close-bar:focus {
	background-color: #C0D7F5;             /* [TDS] darken(.1, aliceBlue) */
}

/* --- Als venster, zodra JavaScript het overneemt -------------------------- */

/* [TDS] `body.{prefix}-modal-open { overflow: hidden }` — de pagina eronder mag
   niet meeschuiven zolang het venster open staat. */
body.gta-modal-open {
	overflow: hidden;
}

.gta-shops--dialog[open] .gta-shops__backdrop {
	/* [TDS] guq94t-1 { background-color: color.black; opacity:0.5; position:fixed } */
	background-color: #000000;
	bottom: 0;
	display: block;
	left: 0;
	opacity: 0.5;
	position: fixed;
	right: 0;
	top: 0;
	z-index: 1060;
}

/*
 * DE VENSTERSCHIL — dezelfde als bij de toestelkiezer, en om dezelfde reden
 * hier uit elkaar gehaald. `guq94t-2` is een vast vlak over de hele viewport
 * met `overflow-y:auto`; `guq94t-3` is een flexkolom met daarin `guq94t-4`
 * (`flex:0 1 20%`), de rij met het venster en `guq94t-5` (`flex:1 1 auto`).
 * Het venster hangt dus op 20 % van boven, niet in het midden, en het is de
 * LAAG die schuift zodra het venster niet past.
 *
 * Nagemeten aan de bron, y van het venster tegen 20 % van de viewporthoogte:
 * @375 133,39 / 133,40 · @390 168,80 / 168,80 · @414 179,19 / 179,20 ·
 * @768 204,80 / 204,80 · @1024 153,59 / 153,60 · @1280 160,00 / 160,00.
 * Bij ons stond `top:50%; transform:translate(-50%,-50%)`, wat @375 op 209,22
 * uitkwam — 75,8 px te laag.
 */
/*
 * De schuiflaag vangt GEEN muisklikken. Bij de bron dragen de vier lege vlakken
 * om het venster heen (`guq94t-4`, `-5`, `-7`, `-9`) allemaal
 * `onClick: resetModal`: klikken naast het venster sluit het. Bij ons doet de
 * verduistering eronder dat al, en die zou door deze laag afgedekt worden.
 * `pointer-events: none` laat de klik erdoorheen vallen; het venster zelf zet
 * hem weer aan, zodat klikken IN het venster gewoon werken.
 */
.gta-shops--dialog[open] .gta-shops__viewport {
	display: flex;
	pointer-events: none;
	flex-direction: column;
	inset: 0;
	overflow-x: hidden;
	overflow-y: auto;
	position: fixed;
	z-index: 1070;
}

/* [TDS] guq94t-4 { flex: 0 1 20%; order: 1 } */
.gta-shops--dialog[open] .gta-shops__viewport::before {
	content: "";
	flex: 0 1 20%;
}

/* [TDS] guq94t-5 { flex: 1 1 auto; order: 3 } */
.gta-shops--dialog[open] .gta-shops__viewport::after {
	content: "";
	flex: 1 1 auto;
}

.gta-shops--dialog[open] .gta-shops__panel {
	pointer-events: auto;
	/* [TDS] guq94t-8 { flex:0 0 auto; margin:auto; position:relative } plus
	   sc-17em4r0-0 { max-width:390px; min-width:300px } op de INHOUD. Met
	   `box-sizing: border-box` en 10px padding is dat hier 410 respectievelijk
	   320 op het venster. Alleen de zijmarges op `auto`, anders slokt het
	   venster ook de verticale ruimte van guq94t-4 op. */
	border: 0;
	box-shadow: 0 2px 12px rgba(0, 0, 0, 0.25);
	flex: 0 0 auto;
	margin: 0 auto;
	max-width: 410px;
	min-width: 320px;
	position: relative;
	/*
	 * `max-content`, niet `auto`. Bij de bron is `guq94t-8` een item in een
	 * flexRIJ met `flex: 0 0 auto` -- krimpfactor 0, dus het venster zakt nooit
	 * onder zijn natuurlijke breedte. Bij ons is de schil een flexKOLOM (de
	 * 20 %-ruimte erboven vraagt daarom) en daar geldt `flex` niet voor de
	 * breedte; zonder deze regel rekt het venster mee met de laag en wordt het
	 * op 320 px afgeknepen tot 325 terwijl de bron 334,52 aanhoudt en het
	 * sluitkruis half buiten beeld laat vallen.
	 */
	width: max-content;
}

.gta-shops--dialog[open] .gta-shops__panel:focus {
	/* Het venster krijgt focus bij openen; dat mag geen focusring om het hele
	   venster opleveren. De knoppen en links erin houden die wel. */
	outline: none;
}

/*
 * [TDS] sc-17em4r0-3 { width:270px } met `lgphone-down` 240px en
 * `mdphone-down` 200px. Dat zijn de KLASSEN van de widget zelf (dus de breedte
 * van het vergelijkerblok, niet van het scherm) met de maten 414 en 360; het
 * blok is onder 768px `viewport − 30`, dus de omslag ligt op 444 en 390 px
 * schermbreedte. Hier stond 414 en 360, waardoor de balk op 375 en 390 px een
 * maatstap te breed was.
 *
 * EN DAAR HANGT DE KORPSGROOTTE AAN VAST. `sc-1cqfm6i-0` heeft
 * `@xsphone-down { * { font-size: font.sizeXxs } }` met bucket xsphone = 250,
 * en die klasse volgt de breedte van de BALK zelf. 270 valt in de bucket
 * smphone (320) en blijft 14px; 240 en 200 vallen in xsphone en gaan naar 11px.
 * Nagemeten aan de bron @375: "onbeperkt" 11px / regelhoogte 12,65 en 57,56
 * breed, met het 5G-badge op een EIGEN regel eronder. Bij ons stond dat op
 * 14px en 81,83 breed, waardoor het badge de cel uit liep en over het woord
 * "onbeperkt" van de MINUTEN-cel heen viel — de "onbeperkt [5G]beperkt" uit
 * het auditrapport. Het is dus geen badge dat verkeerd staat, maar een balk
 * die te groot gezet is.
 */
@media (max-width: 444px) {
	.gta-shops__summary > .gta-card__bundle {
		flex: 0 1 240px;
		width: 240px;
	}

	/* [TDS] sc-1cqfm6i-0 `@xsphone-down { * { font-size: font.sizeXxs } }` */
	.gta-shops__summary > .gta-card__bundle * {
		font-size: var(--gta-fs-xxs);
	}

	/*
	 * `.tds-data-label` is HET 5G-BADGE, niet het grijze woord "data".
	 * [TDS] sc-1cqfm6i-2 `@xsphone-down { .tds-data-label { font-size:10px;
	 * line-height:12px; padding: 0 spacing.xs; vertical-align:baseline } }`.
	 * Nagemeten aan de bron @375 in de winkelpop-up: het 5G-badge is daar
	 * 16,97 × 12 met korpsgrootte 10px, regelhoogte 12 en padding `0px 2px` —
	 * smaller dan het badge op de kaart (20,95 × 14, padding 1px 4px). Zonder
	 * deze regel trok de `*` hierboven het badge naar 11px en bleef het
	 * 22,25 × 14.
	 */
	.gta-shops__summary > .gta-card__bundle .gta-badge {
		font-size: var(--gta-fs-xxxs);
		line-height: 12px;
		padding: 0 var(--gta-sp-xs);
		vertical-align: baseline;
	}

	/*
	 * De grijze bijschriften blijven 12px. Bij de bron is dat `sc-1cqfm6i-3`
	 * respectievelijk `.tds-voice-credits-unit`, allebei KLASSEselectoren, en
	 * die winnen van de `* { font-size: 11px }` van sc-1cqfm6i-0. Nagemeten:
	 * "minuten" 12px / regelhoogte 13,8 in een balk waarin de waarde 11px is.
	 */
	.gta-shops__summary > .gta-card__bundle .gta-card__bundle-label {
		font-size: var(--gta-fs-xs);
	}
}

@media (max-width: 390px) {
	.gta-shops__summary > .gta-card__bundle {
		flex: 0 1 200px;
		width: 200px;
	}
}

/* ==========================================================================
   14. Laadindicator — [TDS] `static/media/loader.80e08abf.svg`
   ==========================================================================

   De bron vervangt het resultatenblok tijdens het ophalen door één enkel
   element: `raw/tds/chunks/2_f2db2223_chunk.js` rendert bij `offerDataFetching()`
   een `<div>` met `max-height:50px; max-width:50px; margin:auto` en daarin
   `loader.svg`. Dat blok staat in het grijze resultatenvlak
   (`chunks/19_09541cca_chunk.js`: `background-color:
   offerResults.blockBackgroundColor` = `#FBFBFB`, `padding: spacing.md`,
   `width:100%`).

   `loader.svg` zelf is opgehaald en opgeslagen als `raw/tds/loader.svg` en
   bevat de exacte maatvoering: viewBox 135 x 140, VIJF balken (niet zes) van 15
   breed met 15 ertussen, `rx="6"`, `fill="#AAAAAA"` (= color.darkGray). De
   animatie duurt 1 s, loopt over elf waarden 120 -> 40 -> 140 -> 120 en houdt
   het midden van elke balk op y = 70; de balken starten met `begin` 0,5 s /
   0,25 s / 0 s / 0,25 s / 0,5 s. Hieronder staat diezelfde animatie als
   CSS-keyframes, zodat `prefers-reduced-motion` hem kan stilzetten — iets wat
   een SMIL-animatie in het SVG-bestand niet toelaat.

   De indicator wordt uitsluitend door JavaScript in de pagina gezet, en pas na
   een korte drempel. In de server-render bestaat hij niet: zonder JavaScript is
   er geen tussenstand, dan laadt de pagina in zijn geheel.
   ========================================================================== */

.gta-loader {
	background-color: var(--gta-c-snow);   /* [TDS] offerResults.blockBackgroundColor */
	padding: var(--gta-sp-md);             /* [TDS] spacing.md */
	width: 100%;
}

.gta-loader__bars {
	align-items: center;
	display: flex;
	height: 50px;
	justify-content: space-between;
	margin: 0 auto;                        /* [TDS] `margin:auto` */
	max-height: 50px;                      /* [TDS] max-height:50px */
	max-width: 50px;                       /* [TDS] max-width:50px */
	width: 50px;
}

.gta-loader__bars > span {
	/* 15 breed op 135: vijf balken van 11,111 % met vier gaten van 11,111 %.
	   `space-between` levert precies die verdeling. */
	animation: gta-loader-bars 1s linear infinite;
	background-color: var(--gta-c-gray);   /* [TDS] fill="#AAAAAA" */
	border-radius: 2px;                    /* [TDS] rx="6" op breedte 15 -> 2,2 px op 50 px */
	display: block;
	flex: 0 0 11.111%;
	height: 100%;
	transform: scaleY(0.857);              /* [TDS] rusthoogte 120 van 140 */
}

/* [TDS] `begin` per balk: 0.5s / 0.25s / 0s / 0.25s / 0.5s. */
.gta-loader__bars > span:nth-child(1),
.gta-loader__bars > span:nth-child(5) {
	animation-delay: 0.5s;
}

.gta-loader__bars > span:nth-child(2),
.gta-loader__bars > span:nth-child(4) {
	animation-delay: 0.25s;
}

.gta-loader__bars > span:nth-child(3) {
	animation-delay: 0s;
	transform: scaleY(1);                  /* [TDS] middelste balk staat op 140 */
}

/* [TDS] values="120;110;100;90;80;70;60;50;40;140;120", calcMode linear, dur 1s.
   Gedeeld door 140 en om het midden geschaald — de bron houdt y + hoogte/2
   constant op 70. */
@keyframes gta-loader-bars {
	0%   { transform: scaleY(0.857); }
	10%  { transform: scaleY(0.786); }
	20%  { transform: scaleY(0.714); }
	30%  { transform: scaleY(0.643); }
	40%  { transform: scaleY(0.571); }
	50%  { transform: scaleY(0.500); }
	60%  { transform: scaleY(0.429); }
	70%  { transform: scaleY(0.357); }
	80%  { transform: scaleY(0.286); }
	90%  { transform: scaleY(1); }
	100% { transform: scaleY(0.857); }
}

@media (prefers-reduced-motion: reduce) {
	.gta-loader__bars > span {
		/* Stilstaande weergave: exact de rustwaarden uit het SVG-bestand. */
		animation: none;
	}
}

/*
 * Zolang de indicator staat, is het resultatenblok zelf uit beeld — precies wat
 * de bron doet: `offerDataFetching() ? <Loader/> : <Results/>`. De tellerregel
 * en de knop "Filter" blijven staan, zoals op de schermafdruk van de
 * opdrachtgever.
 */
.gta-comparison.is-loading-shown [data-gta-results] > *:not(.gta-loader):not(.gta-results__head) {
	display: none;
}

/* De demping hoort bij de korte tussenstand zonder indicator; staat de
   indicator er, dan is er niets meer om te dempen. */
.gta-comparison.is-loading.is-loading-shown .gta-comparison__results {
	opacity: 1;
}

.gta-comparison.is-loading.is-loading-shown .gta-comparison__results::after {
	display: none;
}

/* ==========================================================================
   15. De hoofdfilters in het uitschuifpaneel
   ==========================================================================

   Data, Minuten en Maandelijks staan in `.gta-filters__quick`, een BROER van
   `.gta-filters__body`. Dat is bewust: die balk blijft op smalle schermen staan
   terwijl het body-blok dichtklapt. Sinds `.gta-filters__body` een
   uitschuifpaneel werd, bleven de regelaars daardoor buiten dat paneel.

   Het origineel toont ze twee keer: de mobiele filterbalk is een eigen
   component met hooguit twee regelaars en afgekorte labels
   (`raw/tds/chunks/2_f2db2223_chunk.js`, `labelShort:!0` en `if (c <= 2)`),
   terwijl het filtervenster de volledige filterkolom rendert
   (`raw/tds/chunks/14_47de877e_chunk.js`, module 689). Het venster overlapt de
   pagina, dus de bezoeker ziet die dubbeling nooit.

   `comparison.js` (`mirrorMainFilters()`) maakt daarom een kopie in het paneel.
   Die kopie bestaat alleen mét JavaScript — net als het paneel zelf — en is op
   brede schermen verborgen: daar staan de originelen al bovenaan de zijkolom.
   ========================================================================== */

.gta-filters__mirror {
	display: none;
}

/*
 * Buiten de lade is `.gta-filters__panel` geen doos: onder 992 px is het
 * filterblok de horizontale balk in de pagina en daar hoort geen tweede
 * omranding. `display: contents` laat de groepen daar rechtstreeks kind van
 * `.gta-filters__body` blijven, precies zoals voor deze wrapper bestond.
 */
.gta-filters__panel {
	display: contents;
}

@media (max-width: 991px) {

	.gta-filters--drawer .gta-filters__body .gta-filters__mirror {
		/* Hetzelfde lichtblauwe vlak als de hoofdfilters in de zijkolom.
		   [TDS] filter.mainFiltersBackgroundColor / mainFiltersBorderColor.
		   GEEN marge eronder: bij de bron staat de rand van `sc-1k8cnet-1`
		   direct tegen die van `sc-1k8cnet-3` aan. De 5 px die hier stond
		   duwde alles vanaf "Maandelijks" 5 px omlaag -- nagemeten @375:
		   "Maandelijks" op 320,61 tegen 314,19, "Providers" op 407,22 tegen
		   402,22, en cumulatief alles daaronder. */
		background-color: var(--gta-c-azure);
		border-bottom: 1px solid var(--gta-c-powder);
		border-radius: var(--gta-radius);
		display: block;
		margin-bottom: 0;
	}

	.gta-filters--drawer .gta-filters__body .gta-filters__mirror .gta-filters__group {
		border-bottom: none;
	}

	/*
	 * Voluit "Onbeperkt", niet de afkorting "Onbrkt". [TDS] `labelShort` staat
	 * uitsluitend aan in de mobiele filterbalk; de hoofdfilters gebruiken de
	 * standaardwaarde `false` (`labelShort:!1`) en schrijven het label voluit.
	 */
	.gta-filters--drawer .gta-filters__body .gta-filters__mirror .gta-filters__scale-long {
		display: inline;
	}

	.gta-filters--drawer .gta-filters__body .gta-filters__mirror .gta-filters__scale-short {
		display: none;
	}
}

/* ==========================================================================
   15. Plaatsing van de min/max-bijschriften bij de regelaars  (A18)

   De bron rendert die bijschriften NIET onder de balk maar afhankelijk van de
   weergave: de range-component in `raw/tds/chunks/1_ce859578_chunk.js` kent een
   prop `labelPosition` met twee standen. Bij `"top"` komen beide labels in een
   eigen regel VOOR de balk; bij `"side"` staan ze links en rechts ERNAAST, op
   dezelfde regel. De standaard is `"top"` (`B.defaultProps`), en de smalle
   filterbalk zet expliciet `labelPosition:"side"` (84 treffers tegenover 22 voor
   "top"). Zichtbaar in `shots/original/1024/vergelijker-sim-only.png` ("0" en
   "Onbeperkt" boven de balk) en `shots/original/768/...` ("0 —balk— Onbrkt").
   ========================================================================== */

@media (min-width: 992px) {
	/*
	 * labelPosition: "top".
	 * OOK voor `--money` zonder `--quick`: op toestelpagina's staat het
	 * maandbedrag in het witte paneel, maar de bron rendert de regelaar daar
	 * met dezelfde "top"-opmaak — [DOM] mtt @1280 toont "0" en "150" BOVEN de
	 * balk, net als in het azuren paneel. Zonder deze regel viel de
	 * bijschriftregel in de blokopmaak ONDER de balk.
	 */
	.gta-filters__group--quick,
	.gta-filters__group--money {
		display: flex;
		flex-direction: column;
	}

	.gta-filters__group--quick .gta-filters__legend,
	.gta-filters__group--money .gta-filters__legend {
		order: 0;
	}

	.gta-filters__group--quick .gta-filters__scale,
	.gta-filters__group--money .gta-filters__scale {
		order: 1;
		margin-bottom: var(--gta-sp-xxs);
	}

	.gta-filters__group--quick .gta-filters__range,
	.gta-filters__group--money .gta-filters__range {
		order: 2;
	}
}

@media (max-width: 991px) {
	/* labelPosition: "side" */
	.gta-filters__group--quick {
		display: grid;
		grid-template-columns: auto minmax(0, 1fr) auto;
		align-items: center;
		column-gap: var(--gta-sp-sm);
	}

	.gta-filters__group--quick .gta-filters__legend {
		grid-column: 1 / -1;
		grid-row: 1;
		/*
		 * [TDS] sc-1vr7wsw-1 { padding-bottom: 10px } — in de smalle balk staat er
		 * 10 px tussen de labelregel en de schuifbalk, niet 5. Nagemeten @768:
		 * bron labelregel 18,94 + 10 + schuif 22 = 50,94 en de filtergroep 70,94;
		 * bij ons 46,59 en 66,59. Die 4,35 px per balk is precies het bedrag
		 * waarmee het hele vergelijkerblok te kort was.
		 */
		margin-bottom: var(--gta-sp-md);
	}

	/*
	 * `display: contents` laat de twee bijschriften zelf rastercellen worden,
	 * zodat de balk er tussenin past. De wrapper blijft in de opmaak staan zodat
	 * de zijkolom hem als één regel kan blijven gebruiken.
	 */
	.gta-filters__group--quick .gta-filters__scale {
		display: contents;
	}

	.gta-filters__group--quick .gta-filters__scale > :first-child {
		grid-column: 1;
		grid-row: 2;
	}

	.gta-filters__group--quick .gta-filters__range {
		grid-column: 2;
		grid-row: 2;
	}

	/*
	 * Op het LAATSTE bijschrift mikken, niet op de klasse `--max`: die staat
	 * alleen bij Data en Minuten (waar het eindlabel een lange en een korte
	 * vorm heeft). Bij Eenmalig en Maandelijks is het een kaal getal, en dat
	 * viel zonder deze regel buiten het raster op een derde rij -- gemeten: de
	 * groep "Eenmalig" was daardoor 83 px in plaats van 67, en de hele
	 * filterbalk van de toestelvergelijker 114 px in plaats van 98.
	 */
	.gta-filters__group--quick .gta-filters__scale > :last-child {
		grid-column: 3;
		grid-row: 2;
	}
}

/* --- De zijkolom op de maat van de bron (vanaf 992 px) --------------------
 *
 * [DOM] de live bron @1280, `vergelijker-sim-only`. De filterkolom `r7ha0i-1`
 * is 225 px met `padding-right:5px`; daarbinnen liggen DRIE los omrande blokken
 * van 220 px, elk met een EIGEN rand, en daaronder — buiten alle randen — de
 * resetlink:
 *
 *   r7ha0i-2        y255 h141  border 1px 1px 0 1px      padding 10px
 *   sc-1k8cnet-1    y396 h263,09  border 1px (azuur)     padding 0 10px
 *   sc-1k8cnet-3    y659,09 h700,5  border 0 1px 1px 1px padding 0 10px
 *   sc-1k8cnet-5    y1359,59 h24,94  geen rand           padding-top 10px
 *
 * De veldgroep `sc-1k8cnet-4` / `sc-1k8cnet-2` is daardoor 198 px breed (220
 * min 2 x rand min 2 x 10 padding) en heeft zelf `padding: 10px 0` plus een
 * scheidingsrand van 1 px — die rand is dus ook 198 px breed, niet 218.
 *
 * Bij ons zat de rand op het `<form>` en de 10 px op de veldgroep. Netto stond
 * de INHOUD op dezelfde x (81) en even breed (198), maar:
 *   - de scheidingsranden liepen van 71 tot 289 in plaats van 81 tot 279;
 *   - het `<legend>` van een `<fieldset>` gaat BOVEN de padding staan, dus de
 *     eerste groep begon 10 px te laag (406 in plaats van 397) terwijl het
 *     bijschrift zelf 10 px te hoog stond;
 *   - onder de laatste inhoud van een groep zet de bron 20 px (10 in de
 *     binnenwrapper plus 10 in de groep), wij 10.
 * Samen: elke groep 3,05 px te kort (83,98 tegen 87,03) en alles eronder
 * cumulatief te hoog.
 *
 * Uitsluitend vanaf 992 px. Onder die breedte is ditzelfde blok de horizontale
 * filterbalk, en die is met veel moeite op 149 px gezet (par. 4 en 5 van
 * RESPONSIVE_GAPS.md); daar mag niets bij.
 */
@media (min-width: 992px) {
	/*
	 * De wrapper om de secundaire filters bestaat alleen voor de LADE (zie
	 * daar). Vanaf 992 px is `.gta-filters__body` zelf het witte paneel, en
	 * `display: contents` haalt de wrapper volledig uit de opmaak -- de
	 * zijkolom is er niet van veranderd.
	 */
	.gta-filters__panel {
		display: contents;
	}

	/* De rand verhuist van het formulier naar de drie blokken, zoals in de bron. */
	.gta-filters {
		background-color: transparent;
		border: 0;
	}

	.gta-filters__icon {
		border: 1px solid var(--gta-c-smoke);  /* [TDS] r7ha0i-2 */
		border-bottom: 0;
	}

	.gta-filters__quick {
		border: 1px solid var(--gta-c-powder); /* [TDS] sc-1k8cnet-1 */
		padding: 0 var(--gta-sp-md);
	}

	.gta-filters__body {
		background-color: var(--gta-c-white);
		border: 1px solid var(--gta-c-smoke);  /* [TDS] sc-1k8cnet-3 */
		border-top: 0;
		padding: 0 var(--gta-sp-md);
	}

	/*
	 * [TDS] sc-1k8cnet-5 staat BUITEN het witte paneel: de onderrand van dat
	 * paneel loopt BOVEN de resetlink door, en onder de link staat geen lijn.
	 * De link zelf kan hier niet uit `.gta-filters__body` verhuizen — onder
	 * 992 px is dat blok het uitschuifpaneel en hoort de knop "Bekijk
	 * resultaten" er juist in — dus krijgt hij de onderrand van het paneel als
	 * eigen bovenrand. Resultaat: link op y 1359,59, breedte 220, midden op 180,
	 * precies de bron.
	 *
	 * De twee ZIJranden liepen daarbij nog 25 px door langs de link, waar de
	 * bron ze boven de link afsluit (uitsnede x 70…295 y 1330…1400 mat daardoor
	 * 2,521 %). Dat is nu opgelost door dit blok 1 px verder naar buiten te
	 * laten steken dan de padding — tot precies OP de zijranden — en het een
	 * eigen witte achtergrond te geven. Een in-flow kind wordt boven de rand van
	 * zijn voorouder geschilderd, dus over die 25 px staat geen lijn meer, en de
	 * bovenrand van dit blok is nu net als de onderrand van het paneel in de
	 * bron 220 px breed in plaats van 218.
	 */
	.gta-filters__body {
		border-bottom: 0;
	}

	.gta-filters__actions {
		border-top: 1px solid var(--gta-c-smoke);
		margin: 0 calc(-1 * (var(--gta-sp-md) + 1px));
		padding: 0;
		background-color: var(--gta-c-white);
	}

	/*
	 * [TDS] sc-1k8cnet-4 { padding: 10px 0 } plus de binnenwrapper
	 * (sc-56jwml-0 / sc-12zp8ht-0 / sc-1cvb8qm-0 / sc-19ydw6r-0) met
	 * `padding-bottom: 10px`: samen 20 px onder de laatste inhoud. De 10 px
	 * BOVEN de groep zit hier op het bijschrift, want een `<legend>` negeert de
	 * padding-top van zijn `<fieldset>`.
	 */
	.gta-filters__group {
		padding: 0 0 var(--gta-sp-xl);
	}

	/*
	 * Een REGELAARgroep heeft in de bron geen binnenwrapper met padding-bottom
	 * (sc-1vr7wsw-0 staat op `padding: 0`), dus daar blijft het bij de 10 px van
	 * de groep zelf. Dat geldt ook voor "Maandelijks" als die op een
	 * toestelpagina in het WITTE paneel staat: [DOM] bron mtt @1280 meet die
	 * groep 88,03 — 10 + 18,94 + 10 + 16,09 + 22 + 10 + 1 — en niet 98.
	 */
	.gta-filters__group--quick,
	.gta-filters__group--money {
		padding-bottom: var(--gta-sp-md);
	}

	/*
	 * De bron laat de rand ook op de LAATSTE groep staan; daaronder komt de
	 * rand van het witte paneel zelf. Samen de dubbele lijn die de bron toont.
	 */
	.gta-filters__body .gta-filters__group:last-of-type {
		border-bottom: 1px solid var(--gta-c-smoke);
	}

	/*
	 * 10 px boven (de padding-top van sc-1k8cnet-4) en 10 px onder (de
	 * padding-bottom van sc-1vr7wsw-1 / sc-56jwml-1 / ...). Boven MOET het
	 * padding zijn: Chrome plaatst een `<legend>` in de rand van zijn
	 * `<fieldset>` en negeert daar zowel de padding-top van de fieldset als een
	 * eigen margin-top — nagemeten, met margin-top bleef elke groep exact 10 px
	 * te kort.
	 */
	.gta-filters__legend {
		margin: 0 0 var(--gta-sp-md);
		padding-top: var(--gta-sp-md);
	}

	/*
	 * [DOM] bron: de wrapper sc-1vr7wsw-4 staat op 12 px, maar de widgetreset
	 * zet ELK kind terug op font.size — "0" meet 8,02 px breed (14 px Open
	 * Sans), niet 6,88 (12 px). De regel wordt daarmee 16,09 hoog in plaats van
	 * 13,80, en er staat geen marge onder.
	 */
	.gta-filters__scale > * {
		font-size: var(--gta-fs);
	}

	.gta-filters__group--quick .gta-filters__scale,
	.gta-filters__group--money .gta-filters__scale {
		margin-bottom: 0;
	}

	/* [DOM] bron: de keuzelabels meten 16,09 (14 x 1,15), met 5 px eronder. */
	.gta-filters__check,
	.gta-filters__checks .gta-filters__check {
		font-size: var(--gta-fs);
		margin-bottom: var(--gta-sp-sm);
	}

	/*
	 * [TDS] sc-56jwml-4 { padding: 5px } om de tegel van 55 px heen, zonder
	 * raster-gap: de steek is 65 px en het raster wordt 3 x 65 = 195 hoog. Met
	 * onze gap van 5 was dat 175 en stonden de tegels 5 px te ver naar links.
	 */
	.gta-filters__logos {
		gap: 0;
		grid-template-columns: repeat(3, 65px);
	}

	.gta-filters__logos > li {
		padding: var(--gta-sp-sm);
	}

	/*
	 * [TDS] sc-56jwml-6 / sc-1cvb8qm-7: 14 px, en direct tegen het raster aan.
	 * [DOM] bron: de regel meet 20,09 px — de regelhoogte 16,09 plus de 5 px
	 * padding-top van de inline span erin, waarvan Chrome er 4 in de regelbak
	 * kwijt kan. Wij zetten die 4 px expliciet.
	 */
	.gta-filters__list-more {
		font-size: var(--gta-fs);
		padding-top: 4px;
	}

	.gta-filters__logos + .gta-filters__list-more {
		margin-top: 0;
	}
}

/* --- De KOP van het blok onder 992 px, op de maat van de bron --------------
 *
 * [DOM] bron @375, `vergelijker-sim-only`. De azuren filterbalk `sc-6gl3v1-0`
 * meet x 15 y 462 345 x 97,88 met `border: 1px` EN `padding: 5px`; daarbinnen
 * staat de regelaargroep op x 36 y 478 (dus nog eens 15 px links en 10 px
 * boven) en meet 303 px. De bijschriften naast de balk staan op 14 px met
 * 10 px lucht naar de balk toe: "0" is 18,02 breed (8,02 + 10) en "Onbrkt"
 * 56,09 (46,09 + 10); de balk zelf 228,89. Onder de groep staat "Meer filters"
 * als een regel van 14,94 px, zonder eigen padding.
 *
 * Bij ons had de balk geen binnenmarge: de inhoud stond 10 px naar links en
 * 14 px te hoog, de bijschriften stonden op 12 px zonder lucht en er zat een
 * kolomgat van 5 px in plaats van 0. De hoogte klopte al (97,88) doordat de
 * ontbrekende 10 px binnenmarge elders als extra padding stond.
 *
 * De HOOGTEN blijven ongemoeid: 1 + 5 + 70,94 + 14,94 + 5 + 1 = 97,88, exact
 * de reeks uit par. 4/5 van RESPONSIVE_GAPS.md.
 */
@media (max-width: 991px) {
	.gta-filters__quick {
		padding: var(--gta-sp-sm);          /* [TDS] sc-6gl3v1-0 { padding: 5px } */
	}

	.gta-filters__quick .gta-filters__group--quick {
		column-gap: 0;                      /* de bron zet de bijschriften tegen de balk aan */
		padding: 0 var(--gta-sp-lg) var(--gta-sp-md);
	}

	/*
	 * Chrome plaatst een `<legend>` in de rand van zijn `<fieldset>` en negeert
	 * daar de padding-top van dat fieldset; de 10 px boven het bijschrift moet
	 * dus op het bijschrift zelf staan.
	 */
	.gta-filters__quick .gta-filters__group--quick .gta-filters__legend {
		padding-top: var(--gta-sp-md);
	}

	/*
	 * De widgetreset zet elk kind van de bijschriftregel terug op font.size;
	 * [TDS] sc-1vr7wsw-8 { padding-right: 10px } en sc-1vr7wsw-9
	 * { padding-left: 10px } geven de lucht naar de balk.
	 */
	.gta-filters__group--quick .gta-filters__scale > * {
		font-size: var(--gta-fs);
	}

	.gta-filters__group--quick .gta-filters__scale > :first-child {
		padding-right: var(--gta-sp-md);
	}

	.gta-filters__group--quick .gta-filters__scale > :last-child {
		padding-left: var(--gta-sp-md);
	}

	/* [TDS] sc-6gl3v1-3: een kale regel van 14,94 px binnen de padding van de balk. */
	.gta-filters__more {
		padding: 0;
	}

	/*
	 * De glyphs van de bron zijn Material Icons van 14 px breed; onze
	 * Font-Awesome-tekens zijn 11 tot 12 px. Daardoor was de knop "Filter"
	 * 82,58 in plaats van 84,58 px en stond de regel "Meer filters" 1,4 px
	 * naast het midden.
	 */
	.gta-filters__more .gta-icon,
	.gta-results__filter-toggle .gta-icon,
	.gta-results__device-picker .fa {
		margin-left: 0;
		text-align: center;
		width: 14px;
	}
}

/*
 * De tellerregel van de TOESTELvergelijker houdt onder 768 px zijn eigen regel.
 *
 * [DOM] bron @390, `vergelijker-met-toestel`: `r7ha0i-9` is 50,89 hoog en
 * bestaat uit twee regels — bovenaan `r7ha0i-11` (de twee knoppen samen, 360 px
 * breed) en daaronder `r7ha0i-10` met de teller. Bij de bron staan die twee
 * knoppen in EEN omhulsel; bij ons zijn het losse flexitems, en met
 * `flex: 1 1 auto` op de teller paste de knop "Kies Smartphone" er op 390 en
 * 414 px nog naast. De kop werd daardoor 69,09 in plaats van 50,89 px hoog en
 * alles eronder schoof 13,2 px mee.
 *
 * Deze regel stond al op `.gta-results__head--device .gta-results__count`
 * (§ "Op telefoonbreedte zet de bron de twee knoppen ... op een eigen regel"),
 * maar werd verderop door `.gta-results__head .gta-results__count
 * { flex: 1 1 auto }` overschreven — gelijke specificiteit, latere regel wint.
 * Daarom staat hij hier, achteraan.
 */
@media (max-width: 767px) {
	.gta-results__head--device .gta-results__count {
		flex: 1 1 100%;
	}
}
