/* Hausschrift Barlow und Barlow Condensed, SELBST ausgeliefert aus /static/fonts,
   der Browser fragt NIE bei Google an (DSGVO). font-display:swap: der Text steht sofort
   da und wird nachtraeglich in Barlow gesetzt.
   HERKUNFT (Schnitt 1 Nr. 4, 11.09.2026): Repository github.com/google/fonts, Ordner
   ofl/barlow (Commit 6cdf01867df0, 26.02.2026) und ofl/barlowcondensed (Commit
   60824dce48f7, 26.02.2026), Schriftversion 1.408, Lizenz SIL OFL 1.1 in
   /static/fonts/OFL.txt. Aus den TTF mit fontTools 4.65.0 gewandelt:
   pyftsubset <ttf> --unicodes=<Google-latin-Bereich, 227 Zeichen inkl. Euro, sz, Umlaute,
   Anfuehrungszeichen> --layout-features='*' --flavor=woff2. Laufweiten und Zeilenmasse
   identisch mit den Dateien vom 09.09. (A5673, Version ebenfalls 1.408).
   SCHNITTE: nur die, deren Gewicht in dieser Datei vorkommt (Regel Marcel 11.09. 21:09):
   Barlow 400 (12 Regeln), 500 (4), 600 (53), 700 (76); Barlow Condensed 700 (h1-h3 und
   7 Regeln), 800 (9), 900 (2). Barlow Condensed 600 hatte 0 Regeln und ist geloescht.
   Gewichte 800 und 900 auf Barlow (kein eigener Schnitt) nimmt der Browser aus 700, wie
   bisher. Kein local(): die Datei aus dem Haus gewinnt immer, damit jeder Kunde dieselbe
   Version sieht. Dateinamen tragen die Schriftversion (.v1408), weil /static/fonts ein Jahr
   immutable gecacht wird (Marcel 12.09.2026 07:55): neue Schrift = neuer Name, nie derselbe Pfad. */
@font-face{font-family:'Barlow';src:url('/static/fonts/Barlow-400.v1408.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'Barlow';src:url('/static/fonts/Barlow-500.v1408.woff2') format('woff2');font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:'Barlow';src:url('/static/fonts/Barlow-600.v1408.woff2') format('woff2');font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:'Barlow';src:url('/static/fonts/Barlow-700.v1408.woff2') format('woff2');font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:'Barlow Condensed';src:url('/static/fonts/BarlowCondensed-700.v1408.woff2') format('woff2');font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:'Barlow Condensed';src:url('/static/fonts/BarlowCondensed-800.v1408.woff2') format('woff2');font-weight:800;font-style:normal;font-display:swap}
@font-face{font-family:'Barlow Condensed';src:url('/static/fonts/BarlowCondensed-900.v1408.woff2') format('woff2');font-weight:900;font-style:normal;font-display:swap}
/* Go-Live-Pruefung 12.09.2026 Punkt 15 (CLS 0,23 auf Kategorie, Artikel, Suche; Ursache: Schrifttausch bei ~2 s auf
   gedrosseltem Netz liess Kopf und Fahrzeugzeile 4 px springen). Ersatzschriften mit angeglichenen Metriken: solange
   Barlow noch laedt, zeichnet der Browser Arial/Helvetica (Windows, macOS, iOS) bzw. Roboto (Android) in Barlow-Breite
   und -Zeilenhoehe, der Tausch verschiebt dann nichts mehr. Werte gemessen 12.09. 21:0x mit fontTools:
   Barlow upm 1000, Ascent 1000, Descent 200, mittlere Zeichenbreite 0,4745 em (Condensed 700: 0,3935 em);
   Arial 0,5093 em, Roboto 0,4997 em. size-adjust = Barlow-Breite / Ersatz-Breite, Overrides = Metrik / size-adjust. */
@font-face{font-family:'Barlow Ersatz';src:local('Arial'),local('Helvetica Neue'),local('Liberation Sans');size-adjust:93.16%;ascent-override:107.34%;descent-override:21.47%;line-gap-override:0%}
@font-face{font-family:'Barlow Ersatz Roboto';src:local('Roboto');size-adjust:94.95%;ascent-override:105.31%;descent-override:21.06%;line-gap-override:0%}
@font-face{font-family:'Barlow Condensed Ersatz';src:local('Arial'),local('Helvetica Neue'),local('Liberation Sans');size-adjust:77.27%;ascent-override:129.41%;descent-override:25.88%;line-gap-override:0%}
@font-face{font-family:'Barlow Condensed Ersatz Roboto';src:local('Roboto');size-adjust:78.75%;ascent-override:126.99%;descent-override:25.40%;line-gap-override:0%}

:root{
  /* ===== FARBEN: 12 Grundwerte, jeder mit genau EINER Bedeutung (Schnitt 1 Nr. 6,
     Marcel 11.09.2026 21:09). Werte unveraendert seit A5674/A5720 - kein Ton wurde
     verschoben, nur benannt und gruppiert. Ausserhalb dieses Blocks steht kein Hex-Wert
     (Riegel: staffel_literale in abnahme-golive.sh). ============================== */
  --paper:#f4f3f0;        /* Papier: Seitenhintergrund */
  --card:#ffffff;         /* Weiss: Karten, Felder, Text auf dunklem Grund */
  --asphalt:#15181e;      /* Asphalt: Kopf, Fuss, dunkle Knoepfe */
  --signal:#ffb400;       /* Signalgelb: Kaufknoepfe, Marke, Fokusring */
  --ok:#188a52;           /* Gruen: Punkte, Symbole, Rahmen fuer lieferbar/Passung. Als TEXT nur --ok-ink: 188a52 hat auf Weiss 4,37:1 (axe, A10620 29.09.2026) */
  --danger:#c2362b;       /* Rot: nicht lieferbar, Fehler */
  --signal-ink:#7a6000;   /* Bernstein: Hinweis-Auszeichnung (Abzeichen, Warnwort); A10620 28.09.2026: dunkler (vorher 8a6d00), Kontrast auf Papier 4,43 -> 5,41, auf Weiss 4,92 -> 6,00, auf Hinweisband 4,41 -> 5,38 */
  --ink:#1a1d23;          /* Grau 1: Fliesstext */
  --ink-soft:#5a6170;     /* Grau 2: Nebentext */
  --ink-mute:#8b93a3;     /* Grau 3: gedaempfter Text auf Asphalt (Kopf, Fuss, Menue), Symbole, Platzhalter. Auf Papier/Weiss nur 3,08:1 - Text dort --ink-soft (A10620 29.09.2026) */
  --line-2:#c4cad4;       /* Grau 4: starker Rahmen (Hover, aktiv) */
  --line:#e3e1db;         /* Grau 5: Rahmen und Trennlinien */
  /* --- abgeleitete Toene: feste Werte, jeder aus genau einem Grundwert ------------- */
  --asphalt-2:#1e222b;    /* aufgehellte Flaeche auf Asphalt (Topbar, Hover im Kopf); abgeleitet aus --asphalt */
  --ink-2:#3f4552;        /* Zweittext in Bildzaehlern und Symbolen; abgeleitet aus --ink (Grau 1) */
  --ink-3:#a4abb8;        /* Symbole, Punkte, gesperrte Felder, hellstes Grau (2,3:1 - seit A10620 29.09.2026 kein Text mehr); abgeleitet aus --ink-mute (Grau 3) */
  --signal-bg:#fdf2d4;    /* Hintergrund Hinweisband; abgeleitet aus --signal */
  --signal-line:#f0d79a;  /* Rahmen Hinweisband; abgeleitet aus --signal */
  --signal-ink-2:#634f10; /* Fliesstext im Hinweisband; abgeleitet aus --signal-ink */
  --ok-bg:#e7f6ee;        /* Hintergrund Passungsmeldung; abgeleitet aus --ok */
  --ok-line:#bfe0cc;      /* Rahmen Passungsmeldung; abgeleitet aus --ok */
  --ok-ink:#1a6440;       /* gruener Text: lieferbar, Lieferdatum, Passung (7,1:1 auf Weiss, A10620 29.09.2026); abgeleitet aus --ok */
  --danger-bg:#fdecea;    /* Hintergrund Fehlermeldung; abgeleitet aus --danger */

  /* ===== SCHRIFT: Staffel 11/12/13/14/16/20/26/34 (A5674, Stufe 10 gestrichen in
     Schnitt 1 Nr. 5). Zuordnung alter Werte: bis 12.5 -> t-12, 13/13.5 -> t-13,
     14/14.5 -> t-14, 15 bis 17.5 -> t-16, 18 bis 22 -> t-20, 25/27 -> t-26, 30 bis 54 -> t-34.
     t-fluid-1/2 und t-hero wachsen mit dem Fenster (Ueberschriften je Seitenebene). ===== */
  --t-11:11px;
  --t-12:12px;
  --t-13:13px;
  --t-14:14px;
  --t-16:16px;
  --t-20:20px;
  --t-26:26px;
  --t-34:34px;
  --t-fluid-1:clamp(21px,3vw,30px);
  --t-fluid-2:clamp(24px,3.4vw,38px);
  --t-hero:clamp(42px,5.4vw,72px);

  /* ===== ABSTAENDE in ZWEI Gruppen (Schnitt 1 Nr. 2, Marcel 11.09.2026 21:09 und 21:39).
     Gruppe 1, Staffel fuer Abschnitts- und Layoutabstaende (zwischen Bloecken, Karten,
     Spalten, Abschnitten; Innenabstand von Kaesten und Leisten): NUR diese sechs.
     Gruppe 2, Feinstufen NUR fuer Bedienelemente, Zellen und Felder (Knoepfe, Links,
     Eingabe- und Auswahlfelder, Beschriftungen, Tabellenzellen, Listenzeilen, Abzeichen).
     Jede Ausnahme steht mit Begruendung im Kommentar an der Regel.
     Kein px-Wert in margin/padding/gap ausserhalb dieses Blocks (A5776). ================ */
  --s-8:8px;
  --s-16:16px;
  --s-24:24px;
  --s-32:32px;
  --s-48:48px;
  /* --- Gruppe 2, Feinstufen --- */
  --f-4:4px;
  --f-12:12px;

  /* ===== RADIEN: zwei Werte (Marcel 11.09.2026 09:50). --radius-bedien tragen Knoepfe,
     Eingabe- und Auswahlfelder; --radius-raster alles im Raster (Tabellen, Karten,
     Kacheln, Bildboxen, Hinweisflaechen). Zugeordnet nach dem Subjekt des Selektors.
     Pillen behalten --radius-pille, echte Kreise 50 %: eine Form, kein Radius. ========= */
  --radius-bedien:6px;
  --radius-raster:0;
  --radius-pille:999px;

  /* ===== SCHATTEN: genau zwei, nur fuer Dinge, die wirklich schweben (Schnitt 1 Nr. 2c,
     Audit 09.09. Abschnitt 5). Karten, Kaesten, Tabellen tragen einen 1-px-Rahmen und
     keinen Schatten; Hover = Rahmen in Grau 4 (--line-2), kein Anheben. Ein Ring
     (0 0 0 Npx) ist keine Erhebung, sondern eine Form. ================================ */
  --shadow-kopf:0 2px 4px rgba(21,24,30,.08),0 24px 48px -12px rgba(21,24,30,.22);   /* klebender Kopf, klebende Kaufleiste */
  --shadow-menue:0 1px 2px rgba(21,24,30,.06),0 8px 24px -8px rgba(21,24,30,.14);    /* offene Menues, Panels, Knoepfe ueber Bildern */
  --ring:0 0 0 1px var(--signal);
  --ring-innen:0 0 0 2px var(--signal) inset;

  /* ===== BREITEN nach Rolle (Schnitt 1 Nr. 3): eng = Fliesstext und Rechtstexte,
     std = Shopseiten, std-xl = Shopseiten ab 1700 px Bildschirm (wie bisher),
     breit = Listen mit Baum links. Kein Seitenbreiten-Wert steht als Zahl ausserhalb. == */
  --w-eng:880px;
  --w-std:1240px;
  --w-std-xl:1520px;
  --w-breit:1560px;

  /* ===== BEWEGUNG: ein Token fuer Hover und Zustandswechsel (Schnitt 1 Nr. 2c). ======== */
  --t:120ms ease-out;

  /* ===== OVERLAYS (Schnitt 2): halbdurchsichtige Flaechen ueber Bildern (Galerie-Pfeile,
     Bildzaehler, 360-Grad-Hinweis, Silhouetten-Kasten im Fahrzeugkopf). Nur hier steht rgba(),
     sonst nirgends (Schnitt 3, Marcel 12.09.2026 19:52 C2: die letzten 3 rgba ausserhalb sind weg). == */
  --overlay-hell:rgba(255,255,255,.9);
  --overlay-dunkel:rgba(21,24,30,.75);
  --overlay-signal:rgba(255,180,0,.12);   /* Signalgelb-Hauch auf Asphalt: Kasten der Fahrzeug-Silhouette */
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{font-family:'Barlow','Barlow Ersatz','Barlow Ersatz Roboto',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;background:var(--paper);color:var(--ink);font-size:var(--t-16);line-height:1.55}
/* A5673 (09.09.2026): Versalien NUR noch dort, wo sie gewollt sind.
   Vorher stand text-transform:uppercase global auf h1, h2 und h3. Folge: auf der
   Trefferliste standen die Produktnamen in Grossbuchstaben, und an zwei Stellen
   (.prod h3 und .pdp-info h1) hatte jemand das lokal mit text-transform:none
   wieder herausgenommen - ein Zeichen dafuer, dass die Regel zu weit ging.
   Die Schriftart bleibt fuer alle Ueberschriften, die Versalien bleiben der
   Auszeichnungsklasse .disp und der Navigation. Die beiden lokalen Reparaturen
   sind damit wirkungslos, aber harmlos - ich lasse sie stehen, statt an zwei
   weiteren Stellen etwas zu aendern, das niemand geprueft hat. */
h1,h2,h3{font-family:'Barlow Condensed','Barlow Condensed Ersatz','Barlow Condensed Ersatz Roboto','Barlow','Arial Narrow',system-ui,sans-serif;letter-spacing:.01em}
.disp{font-family:'Barlow Condensed','Barlow Condensed Ersatz','Barlow Condensed Ersatz Roboto','Barlow','Arial Narrow',system-ui,sans-serif;letter-spacing:.01em}
/* Versalien gibt es nur noch hier (Schnitt 1 Nr. 8, Marcel 11.09.2026): fuer Abschnitts-
   ueberschriften und Preisschilder, die Vorlagen setzen die Klasse ab Schnitt 2.
   Beschriftungen, Tabellenkoepfe und Markenzeilen behalten ihr eigenes uppercase. */
.versal{text-transform:uppercase;letter-spacing:.06em}
/* Schnitt 3 (Marcel 12.09.2026 19:52 C2, Audit I2): Haken im Fliesstext kommt aus dem Tabler-Satz statt als Textzeichen;
   1em gross, sitzt wie ein Buchstabe auf der Zeile, aendert keine Zeilenhoehe (gemessen: .such-passt 20.14 px vorher und nachher). */
.ico-text{width:1em;height:1em;vertical-align:-.125em}
/* Zahlenspalten (OE-Nummern, Artikelnummern, HSN/TSN, Preise): gleich breite Ziffern,
   die Vorlagen setzen die Klasse ab Schnitt 2 (Schnitt 1 Nr. 8). */
.nr{font-variant-numeric:tabular-nums}

/* Schnitt 1 Nr. 8 (Marcel 11.09.2026): EIN Fokusring fuer alles Bedienbare, 2 px Signalgelb
   mit 2 px Abstand, kein outline:none mehr in dieser Datei (11 Feldregeln bereinigt).
   A5673: Tastaturbedienung sichtbar machen. Gemessen 09.09.: 0 von 507 Regeln
   hatten :focus-visible - wer mit der Tabulatortaste durch den Shop geht, sieht
   nicht, wo er steht. Das ist auch fuer das Barrierefreiheitsstaerkungsgesetz
   relevant. :focus-visible statt :focus, damit ein Mausklick keinen Ring malt. */
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,
textarea:focus-visible,summary:focus-visible,[tabindex]:focus-visible,[role="button"]:focus-visible{
  outline:2px solid var(--signal);outline-offset:2px}
button{font-family:inherit;cursor:pointer}
/* 11.09.2026 (Marcel 07:17): Mengenfelder haben eigene Minus/Plus-Knoepfe (Artikelseite,
   Warenkorb). Der Browser malte daneben noch seine eigenen Pfeile - doppelte Bedienung.
   Standard-Fix, gilt fuer jedes type="number" im Shop (gezaehlt 11.09.: 3 Vorlagen). */
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
input[type="number"]{-moz-appearance:textfield;appearance:textfield}
a{color:inherit}
.wrap{max-width:var(--w-std);margin:0 auto;padding:0 var(--s-24)}
@media(min-width:1700px){.wrap{max-width:var(--w-std-xl)}}

/* ===== Warnstreifen-Deko ===== */
.hazard{height:6px;background:repeating-linear-gradient(-45deg,var(--signal) 0 14px,var(--asphalt) 14px 28px)}

/* ===== Topbar ===== */
.topbar{background:var(--asphalt-2);color:var(--ink-mute);font-size:var(--t-13)}
.topbar .wrap{display:flex;justify-content:space-between;padding-top:var(--s-8);padding-bottom:var(--s-8)}
.topbar span b{color:var(--card);font-weight:600}
.topbar .right{display:flex;gap:var(--s-24)}
.topbar a{text-decoration:none;transition:var(--t)}
.topbar a:hover{color:var(--card)}
@media(max-width:760px){.topbar .right{display:none}}
/* 30.09.2026: Telefon-Regeln (.topbar .tel, .hdr-tel) entfernt, Marcel veroeffentlicht keine Telefonnummer. */

/* ===== Header ===== */
/* A5674: der Kopf trug einen eigenen, viel harten Schatten (0 4px 20px schwarz .35),
   waehrend jede Karte darunter einen Schatten nahm (seit Schnitt 1 Nr. 2c nur Rahmen). Jetzt beide aus derselben Quelle:
   der Kopf bekommt den grossen Schatten, weil er ueber allem klebt. Der dunkle Kopf
   selbst bleibt unberuehrt - so steht es in der Aufgabe. */
header.site{background:var(--asphalt);color:var(--card);position:sticky;top:0;z-index:50;box-shadow:var(--shadow-kopf)}
.header-in{display:flex;align-items:center;gap:var(--s-24);padding:var(--s-16) var(--s-24)}
.logo{display:flex;align-items:baseline;gap:var(--s-8);text-decoration:none;flex-shrink:0}
/* A10686 (29.09.2026): das Logo nimmt bis zum Laden der Schrift die angepasste Ersatzschrift (gleiche Breite).
   Vorher stand es in der breiten Ersatzschrift (188 statt 125 px bei 412 px Fensterbreite), mit dem vierten
   Knopf (Merkzettel) brach die Knopfreihe um, der Kopf war 175 statt 129 px hoch und die ganze Seite sprang
   nach dem Laden der Schrift um 46 px (Sprungwert 0,094 auf jeder Seite, vorher 0,003). */
.logo .mark{font-family:'Barlow Condensed','Barlow Condensed Ersatz','Barlow Condensed Ersatz Roboto','Arial Narrow',system-ui,sans-serif;font-weight:900;font-size:var(--t-34);letter-spacing:.04em;color:var(--card)}
.logo .mark em{font-style:normal;color:var(--signal)}
.logo .sub{font-size:var(--t-12);letter-spacing:.28em;text-transform:uppercase;color:var(--ink-mute)}
/* 23.08.2026 (Marcel 21:02: "das suchfeld soll mehr nach rechts gezogen werden mit
   einer lupe als button den gelben box"): margin-left:auto schiebt das Feld vom Logo
   weg nach rechts, margin-right haelt Abstand zu Garage/Warenkorb. Breiter darf es
   auch werden (560 -> 660). Die Mobilregel weiter unten setzt beides zurueck. */
/* A5674 (09.09.2026, arbeiter13): die Ecken sitzen jetzt am RAHMEN, nicht an den zwei
   Kindern. Vorher trug das Feld "6px 0 0 6px" und der Knopf "0 6px 6px 0" - zwei eigene
   Radien fuer EIN Bauteil, und beide waren von der Staffel abgeschnitten. Der Rahmen
   rundet und schneidet ab (overflow:hidden), die Kinder brauchen gar keinen Radius mehr.
   Das sieht identisch aus und nimmt zwei Werte aus der Zaehlung. */
/* A10620 Punkt 12 (28.09.2026): overflow:hidden am Formular hat die Vorschlagsbox (position:absolute unter dem Feld)
   komplett abgeschnitten - gemessen 28.09. 22:4x am Live-Shop mit Playwright: 3 Vorschlaege im DOM, Box 240 x 106 px unter
   dem Feld, elementFromPoint in der Box trifft den Kopf, Screenshot ohne Box. Die Rundung tragen jetzt Feld (links) und
   Knopf (rechts) mit demselben Token; das Formular ist nur noch der Bezug fuer die Box. */
.search{flex:1;display:flex;max-width:660px;margin-left:auto;margin-right:var(--s-16);position:relative}
.search input{flex:1;border:none;background:var(--card);padding:var(--f-12) var(--s-16);font:inherit;font-size:var(--t-16);min-width:0;border-top-left-radius:var(--radius-bedien);border-bottom-left-radius:var(--radius-bedien);border-top-right-radius:0;border-bottom-right-radius:0}
.search button{background:var(--signal);border:none;padding:0 var(--s-24);font-size:var(--t-13);display:flex;align-items:center;color:var(--asphalt);transition:background var(--t);border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--radius-bedien);border-bottom-right-radius:var(--radius-bedien)}
.search button:hover{filter:brightness(1.08)}
/* Die Lupe war unsichtbar: das SVG im Knopf traegt nur ein viewBox, keine Groesse —
   in einem Flex-Container faellt es damit auf 0 x 0 zusammen, der gelbe Knopf sah
   leer aus (Marcels Screenshot 21:02). Feste Groesse macht sie sichtbar. */
.search button svg{width:21px;height:21px;display:block;flex-shrink:0}
/* A10620 Punkt 12: Vorschlagsbox der Kopfsuche (shop.js haengt sie ans Formular). Lage wie vorher: 2 px unter dem Feld,
   linksbuendig. Farben, Radius und Schatten aus dem Token-System, Hervorhebung (Tastatur, Hover) im Hinweisband-Ton. */
.suchvorschlaege{position:absolute;left:0;top:calc(100% + 2px);z-index:60;min-width:240px;max-height:320px;overflow:auto;padding:var(--f-4) 0;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-bedien);box-shadow:var(--shadow-menue)}
.suchvorschlaege button{display:block;width:100%;text-align:left;border:0;background:var(--card);padding:var(--s-8) var(--f-12);font:inherit;font-size:var(--t-16);color:var(--ink);cursor:pointer}
.suchvorschlaege button:hover,.suchvorschlaege button.akt{background:var(--signal-bg)}
.hdr-actions{display:flex;gap:var(--s-8);margin-left:auto}
.hdr-btn{display:flex;flex-direction:column;align-items:center;gap:var(--f-4);background:none;border:none;color:var(--ink-mute);font-size:var(--t-12);padding:var(--f-4) var(--f-12);border-radius:var(--radius-bedien);transition:var(--t);position:relative;text-transform:uppercase;letter-spacing:.05em;text-decoration:none}
.hdr-btn:hover{background:var(--asphalt-2);color:var(--card)}
.hdr-btn svg{width:23px;height:23px}
.cart-n:empty{display:none}
.cart-n{position:absolute;top:0;right:4px;background:var(--signal);color:var(--asphalt);font-weight:700;font-size:var(--t-12);width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center}
@media(max-width:900px){
  /* Header wie autoteiledirekt: ☰ links · Logo MITTE · Korb rechts */
  .header-in{flex-wrap:wrap;gap:var(--f-12);padding:var(--s-8) var(--s-16)}
  .logo .sub{display:none}
  .burger{display:flex;order:0}
  .logo{order:1;flex:1;justify-content:center}
  .hdr-actions{order:2}
  /* A5674: statt die Schriftgroesse auf null zu setzen wird das Wort selbst versteckt.
     Die Null war eine achte Stufe in der Staffel und stand fuer "gar keine Schrift" -
     eine Groesse, die nichts groesst. Jetzt tragen die zwei Woerter im Kopf eine
     eigene Huelle (.hdr-lab in base.html) und die wird hier ausgeblendet. Gleiches
     Bild, ein Wert weniger. WICHTIG: display:none nimmt das Wort auch dem Vorlese-
     programm weg, deshalb tragen beide Knoepfe im Kopf ein aria-label - der Garage-
     Knopf hatte schon eines, dem Warenkorb-Verweis habe ich in base.html eines
     gegeben. Ohne das waere aus einer Design-Aufgabe ein Barrierefehler geworden. */
  /* Go-Live-Pruefung 12.09. Punkt 20: Fingerflaeche 44x44 (vorher 34x34). Polster 9 px plus Gegenrand -5 px:
     die Trefferflaeche waechst, der Platz im Kopf bleibt 34 px, keine Hoehenaenderung. */
  .hdr-btn{padding:9px;margin:-5px;min-width:44px;min-height:44px;justify-content:center}
  .hdr-btn .hdr-lab{display:none}
  .hdr-btn svg{width:26px;height:26px}
  .cart-n{font-size:var(--t-12)}
  .search{order:3;flex-basis:100%;max-width:none;margin-left:0;margin-right:0}
  /* A10686 (29.09.2026): mit dem vierten Knopf (Merkzettel) brauchte die erste Kopfzeile 358 px. Bei 390 px
     Fensterbreite sind genau 358 px Platz, bei 360 px nur 328: die Knopfreihe brach um, der Kopf war 175 statt
     129 px hoch. Gemessen mit kopf_breiten.py. Jetzt: engere Spalten (Zeilenabstand bleibt), unter 381 px ein
     kleineres Logo, unter 341 px war der Anruf-Knopf weg; seit 30.09. gibt es keinen Anruf-Knopf mehr. */
  .header-in{column-gap:var(--s-8)}
  .hdr-actions{gap:var(--f-4)}
}
@media(max-width:380px){.logo .mark{font-size:var(--t-26)}}

/* Kategorienav */
/* Mobile-first: auf kleinen Screens den (hohen) Header NICHT festkleben — er würde
   sonst ~⅓ der Höhe fressen. Header scrollt weg, nur die Filterleiste bleibt oben. */
@media(max-width:900px){header.site{position:static}}
/* Burger + Mobile-Menü (nur ≤900px sichtbar) */
.search.kba{max-width:280px;flex:0 1 auto}
/* A5976: Bedienteil, darum die Bedienstaffel. Der Knopf ist heute durch-
   sichtig, der Radius wird erst bei einem Hintergrund oder Fokusring sichtbar -
   er steht trotzdem hier, damit die Staffel keine Luecke hat. */
.burger{display:none;flex-direction:column;justify-content:center;gap:var(--f-4);width:44px;height:44px;padding:0;background:none;border:none;border-radius:var(--radius-bedien);cursor:pointer;flex-shrink:0;font-size:var(--t-13)}
.burger span{display:block;width:24px;height:2.5px;background:var(--card);border-radius:var(--radius-raster);transition:var(--t)}
.burger.on span:nth-child(1){transform:translateY(7.5px) rotate(45deg)}
.burger.on span:nth-child(2){opacity:0}
.burger.on span:nth-child(3){transform:translateY(-7.5px) rotate(-45deg)}
.mmenu{display:none;background:var(--asphalt-2);border-top:1px solid var(--asphalt-2);max-height:75vh;overflow-y:auto}
.mmenu.open{display:block}
.mmenu a{display:block;color:var(--ink-mute);text-decoration:none;padding:var(--f-12) var(--s-24);border-bottom:1px solid var(--asphalt-2);font-size:var(--t-16)}
.mmenu a:hover{background:var(--asphalt-2);color:var(--card)}
.mm-h{color:var(--ink-mute);font-size:var(--t-12);text-transform:uppercase;letter-spacing:.12em;padding:var(--f-12) var(--s-24) var(--f-4)}
@media(min-width:901px){.mmenu{display:none !important}}
@media(max-width:900px){.burger{display:flex}}
/* A10620 Punkt 6 (28.09.2026): .kicker steht auf Papier (DHL-Zeile index.html, fw-head auf /fahrzeugwahl und /td) - Signalgelb
   auf Papier war 1,61:1 (Design-Katalog N1). Text jetzt Bernstein (5,41:1), der Strich davor bleibt Signalgelb (kein Text). */
.kicker{display:inline-flex;align-items:center;gap:var(--s-8);color:var(--signal-ink);font-weight:600;font-size:var(--t-13);letter-spacing:.02em;margin-bottom:var(--s-16)}
.kicker::before{content:"";width:26px;height:2px;background:var(--signal)}

/* Fahrzeugsuche-Panel */
.vrow{display:grid;grid-template-columns:1fr 1fr;gap:var(--f-12);margin-bottom:var(--f-12)}
/* A5674 (09.09.2026, arbeiter13): ZWEI KNOEPFE, NICHT VIER.
   Der Shop hatte zwei Hauptknoepfe mit vertauschten Farben: .btn-y und .addcart sind
   GELB mit dunkler Schrift (Warenkorb, Kasse, "in den Warenkorb", Kaufen aus der
   Trefferliste - der ganze Geldweg), .vgo ist DUNKEL. Wer von der Artikelseite in den
   Warenkorb und weiter zur Fahrzeugwahl geht, sah den wichtigsten Knopf zweimal
   umklappen.
   ENTSCHEIDUNG: gelb ist der Hauptknopf, dunkel der Nebenknopf. Gelb gewinnt, weil es
   den Geldweg besitzt (7 Verwendungen von .btn-y/.addcart in cart, checkout, product,
   search, withdrawal) und weil --signal die Hausfarbe ist. .vgo bleibt also der dunkle
   Nebenknopf.
   Die Schriftfarbe von .vgo stand hier auf weiss, in den fuenf Vorlagen, in denen .vgo
   ueberhaupt vorkommt (_fzwahl, baugruppe, fahrzeugwahl, tdkategorie, tdwahl), aber auf
   gelb - diese Zeile war also toter Code, der etwas anderes behauptete als der Kunde
   sieht. Jetzt steht hier, was wirklich gerendert wird.
   NICHT ERLEDIGT und bewusst nicht heute: dieselben fuenf Vorlagen setzen .vgo auch noch
   auf 9px Radius und 15.5px Schrift und ueberschreiben damit die Staffel auf ihren
   Seiten. Das sind fuenf Vorlagen, in denen heute Abend andere Fenster arbeiten - der
   Umbau gehoert in eine eigene Runde, sonst raeume ich in fremden Baustellen auf. */
.vgo{width:100%;background:var(--asphalt);color:var(--signal);border:none;padding:var(--s-16);font-size:var(--t-16);font-weight:700;border-radius:var(--radius-bedien);display:flex;justify-content:center;align-items:center;gap:var(--s-8);transition:var(--t);text-transform:uppercase;letter-spacing:.06em;font-family:'Barlow Condensed','Barlow','Arial Narrow',system-ui,sans-serif}
.vgo:hover{background:var(--asphalt-2)}
.vgo svg{width:18px;height:18px;color:var(--signal)}
.vmsg{display:none;margin-top:var(--f-12);font-size:var(--t-13);color:var(--danger);background:var(--danger-bg);border:1px solid var(--danger-bg);border-radius:var(--radius-raster);padding:var(--s-8) var(--s-8)}
@media(max-width:980px){}

/* ===== Trust ===== */

/* ===== Sections ===== */

/* Hauptkategorien */
.maincats{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s-16)}
.maincat{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--s-24) var(--s-24);transition:var(--t);position:relative;overflow:hidden}
.maincat::before{content:"";position:absolute;left:0;top:0;right:0;height:3px;background:var(--signal);transform:scaleX(0);transition:var(--t);transform-origin:left}
.maincat:hover{border-color:var(--line-2)}
.maincat:hover::before{transform:scaleX(1)}
.maincat .mc-head{display:flex;align-items:center;gap:var(--f-12);margin-bottom:var(--s-16)}
.maincat h3{font-size:var(--t-20);font-weight:800;letter-spacing:.02em}
.maincat ul{list-style:none}
.maincat li{border-bottom:1px dashed var(--line)}
.maincat li:last-child{border-bottom:none}
.maincat li a{display:flex;justify-content:space-between;align-items:center;text-decoration:none;font-size:var(--t-14);padding:var(--s-8) var(--f-4);color:var(--ink);transition:var(--t)}
.maincat li a:hover{color:var(--ink);padding-left:var(--s-8)}
.maincat li a::after{content:"→";color:var(--signal);font-weight:700;opacity:0;transition:var(--t)}
.maincat li a:hover::after{opacity:1}
.maincat .all{margin-top:var(--f-12);display:inline-block;font-size:var(--t-13);font-weight:700;color:var(--ink);text-decoration:none;border-bottom:2px solid var(--signal)}
@media(max-width:980px){.maincats{grid-template-columns:1fr}}

/* Produktkarten */
.prod{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);overflow:hidden;display:flex;flex-direction:column;transition:var(--t);cursor:pointer;text-decoration:none;color:inherit}
.prod:hover{border-color:var(--line-2)}
.prod .brand{font-size:var(--t-12);font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft)}
.prod h3{font-family:'Barlow',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;font-size:var(--t-16);font-weight:600;line-height:1.35;margin:var(--f-4) 0 var(--s-8);letter-spacing:0}
.prod .oe{font-size:var(--t-12);color:var(--ink-soft);font-feature-settings:"tnum"}
.price{font-family:'Barlow Condensed','Barlow','Arial Narrow',system-ui,sans-serif;font-size:var(--t-26);font-weight:800}
.price small{display:block;font-family:'Barlow',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;font-size:var(--t-12);font-weight:400;color:var(--ink-soft);letter-spacing:0}
.noprice{font-family:'Barlow Condensed','Barlow','Arial Narrow',system-ui,sans-serif;font-size:var(--t-20);font-weight:700;color:var(--ink-soft)}
.stock{font-size:var(--t-12);font-weight:600;color:var(--ok-ink);display:flex;align-items:center;gap:var(--f-4)}
.stock::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--ok)}
.stock.out{color:var(--ink-soft)}
.stock.out::before{background:var(--ink-mute)}

/* ===== Footer ===== */
footer.site{background:var(--asphalt);color:var(--ink-mute);margin-top:var(--s-48)}
.foot-in{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:var(--s-32);padding:var(--s-48) var(--s-24) var(--s-32)}
.foot-in h4{font-family:'Barlow Condensed','Barlow','Arial Narrow',system-ui,sans-serif;color:var(--card);font-size:var(--t-16);font-weight:700;text-transform:uppercase;letter-spacing:.06em;margin-bottom:var(--f-12)}
.foot-in ul{list-style:none}
.foot-in li{margin-bottom:var(--s-8)}
.foot-in a{text-decoration:none;font-size:var(--t-14);transition:var(--t)}
.foot-in a:hover{color:var(--signal)}
.foot-in p{font-size:var(--t-14);line-height:1.7;max-width:34ch;margin-top:var(--f-12)}
.foot-mark{font-size:var(--t-26);font-weight:900;color:var(--card)}
.foot-mark em{font-style:normal;color:var(--signal)}
.paychips{display:flex;gap:var(--s-8);flex-wrap:wrap;margin-top:var(--f-12)}
.paychips span{background:var(--card);color:var(--asphalt);font-size:var(--t-12);font-weight:700;padding:var(--f-4) var(--f-12);border-radius:var(--radius-raster);letter-spacing:.02em}
.withdraw-btn{display:inline-block;margin-top:var(--f-12);border:1.5px solid var(--signal);color:var(--signal) !important;font-weight:700;font-size:var(--t-14);padding:var(--s-8) var(--s-16);border-radius:var(--radius-bedien);text-decoration:none;transition:var(--t)}
.withdraw-btn:hover{background:var(--signal);color:var(--asphalt) !important}
.legal{border-top:1px solid var(--asphalt-2);font-size:var(--t-12)}
.legal .wrap{display:flex;justify-content:space-between;gap:var(--s-16);padding-top:var(--s-16);padding-bottom:var(--s-16);flex-wrap:wrap}
@media(max-width:860px){.foot-in{grid-template-columns:1fr 1fr}}

/* ===== Produktdetail ===== */
.crumbs{font-size:var(--t-13);color:var(--ink-soft);padding:var(--s-24) 0 0}
.crumbs a{text-decoration:none}
.crumbs a:hover{color:var(--ink)}
.pdp{display:grid;grid-template-columns:1.05fr .95fr;gap:var(--s-48);padding:var(--s-24) 0 0;align-items:start}
.pdp-gallery{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);overflow:hidden}
.pdp-main{background:linear-gradient(160deg,var(--line),var(--paper));aspect-ratio:4/3;display:flex;align-items:center;justify-content:center}
.pdp-main svg{width:54%;height:auto;color:var(--ink)}
.pdp-info .brand{font-size:var(--t-12);font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft)}
.pdp-info h1{font-family:'Barlow',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;font-size:var(--t-26);font-weight:700;line-height:1.25;margin:var(--s-8) 0 var(--s-8);letter-spacing:0}
.pdp-meta{font-size:var(--t-13);color:var(--ink-soft);display:flex;gap:var(--s-16);flex-wrap:wrap}
.pdp-meta b{color:var(--ink);font-weight:600}
.buybox{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--s-24);margin-top:var(--s-16)}
.buybox .ptag{font-family:'Barlow Condensed','Barlow','Arial Narrow',system-ui,sans-serif;font-size:var(--t-34);font-weight:800;line-height:1}
.buybox .ptag small{display:block;font-family:'Barlow',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;font-size:var(--t-12);font-weight:400;color:var(--ink-soft);margin-top:var(--f-4);text-transform:none;letter-spacing:0}
.buyrow{display:flex;gap:var(--f-12);margin-top:var(--s-16)}
/* A5976: die Mengen-Staffel der Artikelseite ist ein BEDIENteil, kein Raster-
   kasten - sie stand auf der Rasterstaffel und damit auf 0, direkt neben dem
   Kaufknopf .addcart, der 6 px traegt. Wie bei .search rundet der Rahmen und
   schneidet ab (overflow:hidden), die Kinder brauchen keinen eigenen Radius. */
.qty{display:flex;border:1.5px solid var(--line);border-radius:var(--radius-bedien);overflow:hidden}
.qty button{width:44px;min-height:44px;background:var(--paper);border:none;font-size:var(--t-16);color:var(--ink-soft)}
.qty input{width:44px;border:none;text-align:center;font:inherit;font-weight:600}
.addcart{flex:1;background:var(--signal);border:none;border-radius:var(--radius-bedien);font-family:'Barlow Condensed','Barlow','Arial Narrow',system-ui,sans-serif;font-size:var(--t-20);font-weight:800;text-transform:uppercase;letter-spacing:.05em;display:flex;align-items:center;justify-content:center;gap:var(--s-8);transition:var(--t);padding:var(--f-12);color:var(--ink)}
.addcart:hover{filter:brightness(1.08)}
/* A10704 (30.09.2026): Kaufknopf eines nicht lieferbaren Artikels. Grau aus den vorhandenen Token, kein Zeiger. */
.addcart[disabled]{background:var(--line-2);color:var(--ink-2);cursor:not-allowed;filter:none}
.addcart svg{width:20px;height:20px}
.buymeta{margin-top:var(--s-16);font-size:var(--t-13);color:var(--ink-soft);display:grid;gap:var(--s-8)}
.buymeta div{display:flex;gap:var(--s-8);align-items:center}
.buymeta svg{width:16px;height:16px;color:var(--ok);flex-shrink:0}
.buymeta div.out svg{color:var(--ink-mute)}
.pdp-pay{display:flex;gap:var(--s-8);margin-top:var(--s-16);flex-wrap:wrap}
.pdp-pay span{border:1px solid var(--line);background:var(--card);font-size:var(--t-12);font-weight:700;padding:var(--f-4) var(--s-8);border-radius:var(--radius-raster);color:var(--ink-soft)}

@media(max-width:980px){.pdp{grid-template-columns:1fr}}
/* A10620 sichtbar Nachtrag (29.09.2026): bis 980 px lag die Beschreibung ZWISCHEN Galerie und Preis, weil sie im DOM in der linken
   Huelle unter der Galerie steht (gemessen 390, Teststand 8934: Galerie 360, Beschreibung 641, Titel 924, Kaufbox 1070 - der Preis
   710 px unter dem Bild). Die Huelle loest sich auch hier auf (display:contents, wie ab 981 px in der Artikel-Regel unten), die
   Reihenfolge kommt aus order: Galerie, dann Titel/Nummer/Preis/Kaufbox/Zusagen (.pdp-info), dann Beschreibung; danach folgen wie
   bisher OE-Nummern, Fahrzeuge, Hersteller & Sicherheit ausserhalb des Rasters. min-width 0, weil die drei jetzt Rasterkinder sind
   (die 760-px-Regel unten trifft nur .pdp>*). Die Beschreibung behaelt ihren oberen Rand --s-24 aus der Artikel-Regel unten
   (gleiche Spezifitaet, spaetere Regel gewinnt): mit der Rasterluecke 24 px stehen 48 px zwischen den Zusagen-Kacheln und der
   Ueberschrift "Beschreibung" (gemessen 390: Kacheln unten 1218, Beschreibung 1266), Seitenhoehe 390 dadurch +24 px (3435 -> 3459).
   Ab 981 px unveraendert. Keine Vorlagenaenderung, Sticky-Kaufleiste (scrollIntoView auf .buybox) unberuehrt. */
@media(max-width:980px){
  body.seite-artikel .pdp>div:first-child{display:contents}
  body.seite-artikel .pdp-gallery,body.seite-artikel .pdp-info,body.seite-artikel .psec-under{min-width:0}
  body.seite-artikel .pdp-gallery{order:1}
  body.seite-artikel .pdp-info{order:2}
  body.seite-artikel .psec-under{order:3}
}

/* ===== Seiten-Bausteine (Suche, Warenkorb, Kasse, Widerruf, Recht) ===== */
.page-head{display:flex;align-items:baseline;gap:var(--s-16);margin:var(--s-32) 0 var(--s-24)}
/* Kopf mit Unterzeile: der optische Abstand blieb 12 px (vorher 24 minus Negativrand 12),
   jetzt ohne Negativrand (Schnitt 1 Nr. 8). */
.page-head:has(+.page-sub),.reihe-motoren-titel:has(+.page-sub){margin-bottom:var(--f-12)} /* Feinstufe erlaubt: Kopf und Unterzeile sind EIN Element, Abstand gemessen 12 px vorher und nachher */
.page-head h1{font-size:var(--t-34);font-weight:800}
.page-head .rule{flex:1;height:2px;background:repeating-linear-gradient(90deg,var(--line) 0 8px,transparent 8px 16px)}
.page-sub{margin:0 0 var(--s-24);color:var(--ink-soft);font-size:var(--t-14)}
.muted{color:var(--ink-soft)}
.panel{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--s-24)}
.empty{padding:var(--s-48) var(--s-24);text-align:center;color:var(--ink-soft)}
.btn-y{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-8);background:var(--signal);color:var(--ink);border:none;border-radius:var(--radius-bedien);font-family:'Barlow Condensed','Barlow','Arial Narrow',system-ui,sans-serif;font-size:var(--t-20);font-weight:800;text-transform:uppercase;letter-spacing:.05em;padding:var(--f-12) var(--s-24);text-decoration:none;transition:var(--t);cursor:pointer}
.btn-y:hover{filter:brightness(1.08)}
.btn-ghost{display:inline-flex;align-items:center;gap:var(--s-8);background:none;border:1.5px solid var(--line);color:var(--ink-soft);border-radius:var(--radius-bedien);padding:var(--s-8) var(--s-16);font-size:var(--t-14);font-weight:600;text-decoration:none;transition:var(--t);cursor:pointer}
.btn-ghost:hover{border-color:var(--asphalt);color:var(--ink)}

/* Formulare */
/* A10620 (29.09.2026, Kasse): Feldbeschriftungen ohne Versalien und Sperrung, t-14 statt t-12 - Versalien bleiben
   den Abschnittsueberschriften (.versal). Gilt fuer beide .fform-Formulare (Kasse, Widerruf). */
.fform label{display:block;font-size:var(--t-14);font-weight:600;color:var(--ink-soft);margin:0 0 var(--f-4) var(--f-4)}
.fform input[type="text"],.fform input[type="email"],.fform textarea{width:100%;padding:var(--f-12) var(--f-12);font:inherit;font-size:var(--t-16);border:1.5px solid var(--line);border-radius:var(--radius-bedien);background:var(--card);color:var(--ink);transition:border var(--t)}
.fform input:focus,.fform textarea:focus{border-color:var(--signal)}
.ffield{margin-bottom:var(--f-12)}
.frow{display:grid;grid-template-columns:1fr 2fr;gap:var(--f-12)}
@media(max-width:640px){.frow{grid-template-columns:1fr}}

/* Warenkorb */
.cart-scroll{overflow-x:auto}
.cart-table{width:100%;border-collapse:collapse;font-size:var(--t-14);min-width:660px}
.cart-table th{text-align:left;font-size:var(--t-12);font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);padding:var(--f-12) var(--f-12);border-bottom:1px solid var(--line);background:var(--paper)}
.cart-table td{padding:var(--f-12);border-bottom:1px solid var(--line);vertical-align:middle}
.cart-table tbody tr:last-child td{border-bottom:none}
.cart-table .num{text-align:right;white-space:nowrap;font-feature-settings:"tnum"}
.cart-item-name{font-weight:600}
.cart-item-name a{text-decoration:none}
.cart-item-name a:hover{text-decoration:underline}
.cart-mpn{font-size:var(--t-12);color:var(--ink-soft)}
.qty-form{display:flex;gap:var(--s-8);align-items:center}
.qty-form input{width:62px;padding:var(--s-8);border:1.5px solid var(--line);border-radius:var(--radius-bedien);text-align:center;font:inherit}
.qty-form input:focus{border-color:var(--signal)}
.qty-form button{background:none;border:1.5px solid var(--line);border-radius:var(--radius-bedien);padding:var(--s-8) var(--f-12);font-size:var(--t-13);font-weight:600;color:var(--ink-soft);transition:var(--t)}
.qty-form button:hover{border-color:var(--asphalt);color:var(--ink)}
.rm-btn{background:none;border:none;color:var(--danger);font-size:var(--t-13);font-weight:600;text-decoration:underline;padding:var(--f-4) var(--f-4)}
.totals{max-width:400px;margin-left:auto;margin-top:var(--s-16)}
.trow{display:flex;justify-content:space-between;gap:var(--s-16);padding:var(--s-8) 0;font-size:var(--t-14)}
.trow span:last-child{font-feature-settings:"tnum";white-space:nowrap}
.trow-mwst{font-size:var(--t-12);margin-top:var(--f-4)}  /* "inkl. 19 % MwSt." unter der Summe, Warenkorb und Kasse (Paket 1, 10.09.) */
.trow.grand{border-top:2px solid var(--line);margin-top:var(--s-8);padding-top:var(--f-12);font-family:'Barlow Condensed','Barlow','Arial Narrow',system-ui,sans-serif;font-size:var(--t-26);font-weight:800}

/* Kasse */
.co-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:var(--s-24);align-items:start;margin-bottom:var(--s-16)}
@media(max-width:900px){.co-grid{grid-template-columns:1fr}}
.co-h{font-size:var(--t-20);font-weight:800;margin-bottom:var(--s-16)}
.co-sum{list-style:none}
.co-sum li{display:flex;justify-content:space-between;gap:var(--f-12);padding:var(--s-8) 0;border-bottom:1px dashed var(--line);font-size:var(--t-14)}
.co-sum li span:last-child{white-space:nowrap;font-feature-settings:"tnum"}
.payopt{display:flex;gap:var(--f-12);align-items:flex-start;border:1.5px solid var(--line);border-radius:var(--radius-bedien);padding:var(--f-12) var(--s-16);margin-bottom:var(--s-8);cursor:pointer;background:var(--card);transition:var(--t)}
.payopt input{margin-top:var(--f-4);accent-color:var(--asphalt)}
/* A5674: der Ring um die gewaehlte Zahlungsart war als box-shadow gebaut und damit ein
   dritter Schatten in der Zaehlung, obwohl er kein Schatten IST - er wirft kein Licht,
   er markiert eine Auswahl. Als outline sieht er gleich aus, folgt der Ecke von selbst
   und braucht keinen eigenen Wert in der Staffel. */
.payopt:has(input:checked){border-color:var(--signal);outline:2px solid var(--signal);outline-offset:-2px}
.payopt.off{opacity:.55;cursor:not-allowed}
.payopt b{display:block;font-size:var(--t-16)}
.payopt .pdesc{font-size:var(--t-13);color:var(--ink-soft)}
.agbcheck{display:flex;gap:var(--s-8);align-items:flex-start;font-size:var(--t-14);margin:var(--s-16) 0;cursor:pointer}
.agbcheck input{margin-top:var(--f-4);width:17px;height:17px;accent-color:var(--asphalt);flex-shrink:0}
/* A10620 sichtbar Punkt 5 (29.09.2026): .payopt und .agbcheck sind <label> in form.fform und erbten von ".fform label" (oben)
   Versalien, --t-12, Sperrung UND display:block - Spezifitaet 0,1,1 schlaegt die beiden Klassenregeln (0,1,0). Gemessen
   Teststand 8934: Zahlart-Text und AGB-Satz in Versalien, der Auswahlknopf stand UEBER statt neben dem Text. Versalien nur fuer
   Abschnittsueberschriften (.versal); hier Fliesstext --t-14 und das Zeilenlayout, das die Regeln oben meinen. */
.fform .payopt,.fform .agbcheck{display:flex;font-size:var(--t-14);font-weight:400;letter-spacing:0;text-transform:none;color:var(--ink)}
.fform .payopt{margin:0 0 var(--s-8)}
.fform .agbcheck{margin:var(--s-16) 0}

/* Bestätigungen */
.okbox{border:1.5px solid var(--ok);background:var(--ok-bg);border-radius:var(--radius-raster);padding:var(--s-16) var(--s-16);display:flex;gap:var(--f-12);font-size:var(--t-14);margin-bottom:var(--s-24)}
.okbox svg{width:22px;height:22px;color:var(--ok);flex-shrink:0;margin-top:var(--f-4)}
.okbox b{color:var(--ok-ink)}
.errbox{border:1.5px solid var(--danger);background:var(--danger-bg);color:var(--danger);border-radius:var(--radius-raster);padding:var(--f-12) var(--s-16);font-size:var(--t-14);font-weight:600;margin-bottom:var(--s-24)}
.confirm-card{max-width:660px;margin:var(--s-48) auto;text-align:center;padding:var(--s-48) var(--s-32)}
.confirm-icon{width:64px;height:64px;margin:0 auto var(--s-16);background:var(--ok-bg);border-radius:50%;display:flex;align-items:center;justify-content:center}
.confirm-icon svg{width:32px;height:32px;color:var(--ok)}
.onum{font-family:'Barlow Condensed','Barlow','Arial Narrow',system-ui,sans-serif;font-size:var(--t-34);font-weight:800;line-height:1.05;margin:var(--s-8) 0 var(--f-4);letter-spacing:.02em}

/* Rechtstexte */
.prose{max-width:var(--w-eng);font-size:var(--t-16);line-height:1.7}
.prose h2{font-size:var(--t-20);margin:var(--s-24) 0 var(--s-8)}
.prose h2:first-child{margin-top:0}
.prose h3{font-size:var(--t-20);margin:var(--s-16) 0 var(--s-8)}
.prose p{margin-bottom:var(--f-12)}
.prose ul,.prose ol{margin:0 0 var(--f-12) var(--s-24)}

/* Reveal-Animation */

/* 16.08.2026 (var(--ok)): Baum links auch auf Fahrzeug-Kategorieseiten — global statt nur in baugruppe.html */
/* Zweispalter: Baum links, Liste rechts (Marcel 16.08.) — auf Mobil untereinander */
.bg-layout{display:grid;grid-template-columns:280px minmax(0,1fr);gap:var(--s-16);align-items:start}
@media(max-width:900px){.bg-layout{grid-template-columns:minmax(0,1fr)}}/* 02.09.2026 A4287: 1fr hat min-width auto, also hat die Trefferliste (9 Spalten, th mit white-space nowrap, Mindestbreite 716 bis 737 px) die Spur aufgezogen und die ganze Seite mit ihr. Gemessen bei 390 px Fensterbreite: scrollWidth 718 bis 739. minmax(0,1fr) laesst die Spur schrumpfen, dann greift das overflow auto der .artbox und die Tabelle scrollt in SICH statt die Seite breit zu machen. Der Baum links bleibt unveraendert stehen - Marcels Regel vom 23.08. */
.bg-tree{background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--f-12) var(--s-8);font-size:var(--t-13);position:sticky;top:calc(var(--header-h,90px) + 78px);max-height:calc(100vh - 120px);overflow:auto}
@media(max-width:900px){.bg-tree{position:static;max-height:280px}}
.bg-tree h3{font-size:var(--t-16);margin:0 0 var(--s-8)}
.bg-tree h3 a{color:var(--asphalt);text-decoration:none}
.bg-tree ul{list-style:none;margin:0;padding:0 0 0 var(--f-12)}
.bg-tree>ul{padding-left:0}
.bg-tree li{margin:var(--f-4) 0}
.bg-tree summary{cursor:pointer;font-weight:600;padding:var(--f-4) 0;color:var(--ink)}
/* A10620 (29.09.2026): Baum links - Link und Aufklapper getrennt (axe nested-interactive, 108 Knoten Startseite,
   gemessen 15:58 auf 8934). <summary> ist der Aufklapper: Pfeil-Icon absolut links im Einzug --s-16, der Name als
   unsichtbarer Platzhalter .ast-echo (gleiche Schrift, gleicher Umbruch), die Zahl sichtbar. Der Link .ast-link ist
   Geschwister der <details> und liegt absolut ueber dem Platzhalter: gleicher Einzug, gleiches Innenmass, gleiche
   Breite - deshalb bricht er an derselben Stelle um. Klickflaechen wie vorher (Name = Seite, Rest = auf/zu).
   Gilt fuer alle Baeume; die seitenspezifischen Bloecke unten setzen nur noch Farben. */
.bg-tree li.ast{position:relative}
.bg-tree li.ast>details>summary{list-style:none;position:relative;padding-left:var(--s-16)}
.bg-tree li.ast>details>summary::-webkit-details-marker{display:none}
.bg-tree li.ast>details>summary .ast-mark{position:absolute;left:0;top:0;bottom:0;margin:auto 0;transition:transform var(--t)}
.bg-tree li.ast>details[open]>summary .ast-mark{transform:rotate(90deg)}
.bg-tree li.ast>details>summary .ast-echo{visibility:hidden}
.bg-tree li.ast>details>summary .ast-echo.akt{font-weight:800}
.bg-tree li.ast>a.ast-link{position:absolute;left:var(--s-16);top:0;max-width:calc(100% - var(--s-16));padding:var(--f-4) 0;font-weight:600;color:var(--ink);text-decoration:none}
.bg-tree li.ast>a.ast-link:hover{text-decoration:underline}
.bg-tree a.blatt{display:block;padding:var(--f-4) 0;color:var(--ink);text-decoration:none}
.bg-tree a.blatt:hover{color:var(--asphalt);text-decoration:underline}
.bg-tree em{font-style:normal;font-size:var(--t-12);color:var(--ink-soft)}
.bg-tree a.akt{color:var(--ink);font-weight:800}

/* ── A5569 (08.09.2026, arbeiter5): Fingerflaechen auf dem Handy ────────────────
   Gemessen am 08.09. um 22:12 bei 390x844 mit drei Posten im Korb: 13 von 17
   antippbaren Elementen waren niedriger als die 44 px, die Apple und Google als
   Mindestflaeche fuer einen Finger nennen - Entfernen 27 px, Aktualisieren 33 px,
   Mengenfeld 40,5 px, Artikelname 16 px, "Weiter einkaufen" 43,7 px. Zwischen
   Mengenfeld und Aktualisieren lagen 8 px, ein Fehlgriff traf also den Nachbarn.
   NUR Handy-Breiten: der Block steht in einer Medienabfrage, das Tischrechner-
   Layout bleibt unveraendert (Vorgabe der Aufgabe).
   Warum min-height und nicht height: die Elemente sollen wachsen duerfen, wenn der
   Text zweizeilig wird. box-sizing, weil .btn-ghost seine 1,5-px-Rahmen sonst
   AUSSERHALB der 44 px setzt und wieder bei 47 px statt sauberen 44 landet. */
@media(max-width:640px){
  .qty-form{gap:var(--f-12)}
  .qty-form input,.qty-form button{min-height:44px;box-sizing:border-box}
  .rm-btn{min-height:44px;padding:var(--f-4) var(--s-8);box-sizing:border-box}
  .btn-ghost{min-height:44px;box-sizing:border-box}
  /* Der Artikelname ist der wichtigste Treffer der Zeile und war mit 16 px der
     kleinste. inline-flex statt block, damit die Trefferflaeche nur so breit wird
     wie der Name und nicht die ganze Zeile schluckt. */
  .cart-item-name a{display:inline-flex;align-items:center;min-height:44px}

  /* Kasse. Bei Ankreuzfeld und Auswahlknopf ist die Trefferflaeche die UMGEBENDE
     Beschriftung - ein Tipp auf das Wort schaltet das Feld mit. Darum bekommt die
     Beschriftung die 44 px und das Feld selbst wird von 17 auf 24 px vergroessert,
     damit es fuer sich schon sichtbar trifft (gemessen 08.09. 22:1x: Auswahlknopf
     13 px, Ankreuzfeld 17 px). Die beiden Verweise auf AGB und Widerrufsbelehrung
     bleiben BEWUSST klein: sie stehen mitten in einem Satz, und genau dafuer nimmt
     die Richtlinie (WCAG 2.5.8) Verweise im Fliesstext aus - 44 px hohe Woerter
     wuerden den Satz auseinanderreissen. Das ist eine erklaerte Ausnahme, kein
     uebersehener Fall. */
  .payopt,.agbcheck{min-height:44px;box-sizing:border-box}
  .agbcheck{align-items:center}
  .payopt input[type="radio"],.agbcheck input[type="checkbox"]{width:24px;height:24px}
}

/* ── A5665, 09.09.2026: Artikelseite passt auf ein Handy ──────────────────────
   Gemessen mit Playwright bei 390x844 an 15 zufaelligen Artikelseiten: ALLE 15
   waren breiter als das Fenster, die schmalste 402 und die breiteste 528 Pixel.
   Folge: der Browser zoomt die ganze Seite heraus, Schrift und Kaufknopf werden
   winzig.
   Ursache war NICHT eine einzelne breite Tabelle, sondern das zweispaltige Raster
   .pdp (1.05fr .95fr, 44px Abstand), das mobil nie auf eine Spalte umbrach - und
   darunter die Standardregel von CSS, dass Rasterkinder min-width:auto haben und
   deshalb NICHT unter ihre Inhaltsbreite schrumpfen. Ohne min-width:0 bleibt das
   Raster breit, egal wie schmal das Fenster ist. Genau daran scheiterte auch der
   Kasten .trustgrid, der mit 1fr 1fr eigentlich passen muesste.
   Nachgemessen mit derselben Stichprobe: 14 der 15 Seiten liegen danach exakt auf
   390. Die 15. (tourmax-bremsfluessigkeitsbehaelter) bleibt bei 423 - dort ist der
   Ueberstand noch nicht gefunden, siehe Aufgabe A5665.
   .vehtab und .cart-table sind ausgenommen: die sitzen bereits in einem eigenen
   Scroll-Kasten und sollen waagerecht scrollen duerfen. */
@media(max-width:760px){
  .pdp{grid-template-columns:1fr !important;gap:var(--s-24) !important}
  .pdp>*,.pdp-info,.pdp-info>*{min-width:0 !important}
  .trustgrid div{overflow-wrap:anywhere !important;min-width:0 !important}
  table:not(.vehtab):not(.cart-table){width:100% !important;table-layout:fixed !important}
  table:not(.vehtab):not(.cart-table) td,
  table:not(.vehtab):not(.cart-table) th{overflow-wrap:anywhere !important}
  img,svg{max-width:100% !important;height:auto}
}

/* Galerie-Pfeile (Marcel 12.09.2026 10:40): immer sichtbar, Chevron aus dem Tabler-Satz, Icon 14 px
   im 17 x 26 px Knopf; Fokusring kommt aus der :focus-visible-Regel oben. Die reihe_teileart-Liste
   (body.seite-reihe) bekommt dieselben Regeln wie die Baugruppen-Liste. */
.gal .gp svg,.gal .gn svg{width:14px;height:14px;display:block;margin:0 auto}
body.seite-reihe .gal{position:relative;display:block;width:56px}
body.seite-reihe .gal img{width:56px;height:56px;object-fit:contain;border-radius:var(--radius-raster);background:var(--paper);display:block}
body.seite-reihe .gal .gp,body.seite-reihe .gal .gn{position:absolute;top:50%;transform:translateY(-50%);width:17px;height:26px;border:none;border-radius:var(--radius-bedien);background:var(--overlay-dunkel);color:var(--card);cursor:pointer;opacity:1;padding:0}
body.seite-reihe .gal .gp{left:-2px}body.seite-reihe .gal .gn{right:-2px}
body.seite-reihe .gal em{position:absolute;left:50%;bottom:-1px;transform:translateX(-50%);font-style:normal;font-size:var(--t-11);background:var(--overlay-dunkel);color:var(--card);border-radius:var(--radius-raster);padding:0 var(--f-4);line-height:1.4}
/* A10658 C1 (Welle 2, 29.09.2026): Filterleiste Einbauseite auf der Seite Modell x Teileart. Dieselben Token wie
   body.seite-tdkategorie .tdfilter, nicht klebend (Grund steht dort im Kommentar vom 23.08.). */
body.seite-reihe .tdfilter{display:flex;gap:var(--f-12);align-items:center;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--f-12);margin:0 0 var(--f-12);font-size:var(--t-14)}
body.seite-reihe .tdfilter select{margin-left:var(--f-4);padding:var(--s-8);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;background:var(--card);max-width:230px}
body.seite-reihe .tdf-go{background:var(--asphalt);color:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--s-8) var(--s-16);font-weight:700;font-size:var(--t-13);cursor:pointer}
body.seite-reihe .tdf-go:hover{background:var(--asphalt-2)}
body.seite-reihe .tdf-x{font-size:var(--t-13);color:var(--signal-ink);text-decoration:none;font-weight:600}
body.seite-reihe .tdf-x:hover{text-decoration:underline}

/* ===== A5676 (09.09.2026), zwei Nachtraege ==================================
   1. BEWEGUNG: Wer im Betriebssystem "weniger Bewegung" eingestellt hat, bekam
      hier trotzdem alles: .rv legt sich auf JEDE Trefferzeile (gemessen 09.09.:
      24 Zeilen mit derselben Einblendung), dazu die Panel-Animation rise und
      rund ein Dutzend transition-Regeln. Die Datei kannte prefers-reduced-motion
      bis heute an 0 Stellen. Abgeschaltet wird die BEWEGUNG, nicht die Sichtbar-
      keit: Ziel ist der Endzustand sofort, nie ein Element, das unsichtbar bleibt.
   2. ZAHLEN: Nummern und Preise liefen in Listen ohne feste Ziffernbreite und
      standen dadurch nicht buendig untereinander. An fuenf Stellen stand schon
      die alte Schreibweise font-feature-settings:"tnum"; hier kommt die heutige
      Eigenschaft dazu und deckt die Stellen mit ab, die bisher gar nichts hatten.
      Neue Klasse .nr fuer alles, was kuenftig eine Nummernspalte ist.           */
@media (prefers-reduced-motion: reduce) {
  :root{--t:0s}
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
}
/* A5676, Nachtrag 09.09.2026 22:3x (arbeiter13): die Liste war ein Anfang, nicht die
   Umsetzung. Inventar aller Vorlagen an diesem Abend: 141 Stellen drucken eine Nummer,
   einen Preis oder eine Menge, davon trafen die 10 Wahlwoerter oben nur 19 - 122 Stellen
   liefen weiter mit unterschiedlich breiten Ziffern, darunter JEDER Preis der Trefferliste
   (.price), jede Artikel- und OE-Nummer der Tabellen (.at-nr, .at-oe, .tr-num) und jede
   Trefferzahl im Baum links (.cnt, .catbadge, .catn). Zwei der alten Wahlwoerter treffen
   ueberhaupt keine Vorlage mehr (.prod .oe, .oewrap span) und bleiben nur stehen, weil sie
   nichts kosten.
   Bewusst per KLASSE statt per Vorlage: drei Fenster arbeiten heute Abend in denselben
   Dateien, und eine Zeile CSS erreicht 122 Stellen, ohne eine einzige Vorlage anzufassen.
   .nr bleibt das Wahlwort fuer alles, was kuenftig neu dazukommt.                        */
.nr, .prod .oe, .cart-table .num, .trow span:last-child,
.co-sum li span:last-child, .tz, .bg-tree em,
/* Preise */
.price, .ptag, .sb-price, .vk-preis, .fzr-preis, .tdpreis, .tr-price,
/* Artikel-, Hersteller-, OE- und Bestellnummern */
.at-nr, .at-oe, .tr-num, .cart-mpn, .onum, .v-mono, .v-kba span,
/* Mengen und Lagerstand */
.lager, .pli-stock, .tr-ok,
/* Zaehler in Baum, Kacheln und Reitern */
.cnt, .catbadge, .catn, .catmore, .veh-cnt, .veh-n, .tsub-alle,
.btab span + span, .modelcard span, .brandcard span,
/* Seitenzaehler und Zeilen mit "N von M" */
.pinfo, .pg-num, .pg-info, .trp-info, .page-sub, .tdch-sub, .tdveh-sub, .katsub,
/* Baujahr, Leistung, Einschraenkung in Fahrzeugtabellen */
.v-nowrap, .v-einschr, .gz,
/* Eingabefelder, in die der Kunde Ziffern tippt */
input[type="number"], input[inputmode="numeric"], input[inputmode="decimal"],
select[name="qty"] {
  font-variant-numeric: tabular-nums;
}


/* ============================================================
   A5675 Design 3: die Stilbloecke der Vorlagen, ans ENDE gehaengt.
   Reihenfolge ist Absicht - im Dokument standen sie NACH dem Stylesheet
   und haben es geschlagen; am Ende gewinnen sie genauso.
   Jede SEITENregel traegt ihre Seitenklasse (body.seite-...), damit sie
   nur dort gilt, wo sie vorher galt. base.html bleibt global.
   ============================================================ */

/* ===== base.html  (global)  A5675 Design 3, 20260910-0610 ===== */
  .myveh{background:var(--signal-bg);border-bottom:1px solid var(--signal-line)}
  .myveh .wrap{display:flex;justify-content:space-between;align-items:center;gap:var(--f-12);padding-top:var(--s-8);padding-bottom:var(--s-8);flex-wrap:wrap}
  .mv-car{display:flex;align-items:center;gap:var(--s-8);font-size:var(--t-14);color:var(--ink)}
  .mv-car svg{width:20px;height:20px;color:var(--asphalt)}
  /* A5826 (12.09.2026): the vehicle name IS the link to its parts now - the separate
     "Passende Teile" link next to it was a second reference to the same address. Same
     look as before (bold, ink colour), underline only on hover, so the bar does not
     suddenly read like a link row. */
  .mv-nm{color:var(--asphalt);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}
  .mv-nm:hover{color:var(--ink)}
  .mv-act{display:flex;gap:var(--f-12);align-items:center;font-size:var(--t-13)}
  .mv-act a{text-decoration:none;font-weight:600;color:var(--asphalt)}
  .mv-act a:hover{text-decoration:underline}
  .mv-x{color:var(--signal-ink) !important}
  .mv-aendern{color:var(--asphalt)}
  
  .vehprompt{display:block;background:var(--asphalt);color:var(--card);text-decoration:none;border-bottom:2px solid var(--signal)}
  .vehprompt:hover{background:var(--asphalt-2)}
  .vp-in{display:flex;justify-content:space-between;align-items:center;gap:var(--f-12);flex-wrap:wrap;padding-top:var(--s-8);padding-bottom:var(--s-8)}
  .vp-txt{font-size:var(--t-14)}
  .vehprompt b{color:var(--signal)}
  .vehprompt svg{width:18px;height:18px;color:var(--signal);vertical-align:-4px;margin-right:var(--f-4)}
  .vehprompt .vp-go svg{width:1em;height:1em;vertical-align:-.125em;margin:0}/* A10620 Punkt 10: Winkel statt Textzeichen, Textgroesse */
  .vp-go{font-weight:700;color:var(--signal);white-space:nowrap}
  
.header-in{position:relative}
.garage-panel{position:absolute;top:calc(100% + 8px);right:0;z-index:300;width:330px;max-width:92vw;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);box-shadow:var(--shadow-menue);padding:var(--s-8)}
.gp-head{display:flex;justify-content:space-between;align-items:center;font-weight:800;font-size:var(--t-14);color:var(--asphalt);padding:var(--s-8) var(--s-8) var(--s-8);border-bottom:1px solid var(--line)}
/* A5976: Bedienteil (Schliessknopf der Garage), darum die Bedienstaffel. */
.gp-close{background:none;border:none;border-radius:var(--radius-bedien);font-size:var(--t-16);color:var(--ink-soft);cursor:pointer;line-height:1}
.gp-close svg{width:16px;height:16px;display:block}
.gp-list{display:flex;flex-direction:column;gap:var(--f-4);padding:var(--f-4) 0;max-height:54vh;overflow:auto}
.gp-item{display:flex;align-items:center;gap:var(--f-4);border-radius:var(--radius-raster);padding:var(--f-4)}
.gp-item.on{background:var(--signal-bg)}
.gp-go{flex:1;display:flex;align-items:center;justify-content:space-between;gap:var(--s-8);padding:var(--s-8) var(--s-8);color:var(--ink);text-decoration:none;font-size:var(--t-13);font-weight:600;border-radius:var(--radius-bedien);min-width:0}
.gp-go:hover{background:var(--paper)}
.gp-nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gp-act{font-size:var(--t-11);font-weight:800;color:var(--signal-ink);text-transform:uppercase;letter-spacing:.04em;white-space:nowrap}
.gp-ic{background:none;border:none;cursor:pointer;color:var(--ink-soft);font-size:var(--t-13);padding:var(--s-8) var(--s-8);border-radius:var(--radius-raster);line-height:1}
.gp-ic svg{width:13px;height:13px;display:block}
.gp-ic:hover{background:var(--paper);color:var(--asphalt)}.gp-rm:hover{color:var(--danger)}
.gp-rename{flex:1;font-size:var(--t-13);padding:var(--s-8) var(--s-8);border:1.5px solid var(--signal);border-radius:var(--radius-bedien);font-family:inherit;min-width:0}
.gp-empty{padding:var(--s-16) var(--f-12);text-align:center;color:var(--ink-soft);font-size:var(--t-13);line-height:1.5}
.gp-add{display:block;text-align:center;margin-top:var(--f-4);padding:var(--s-8);background:var(--asphalt);color:var(--signal);border-radius:var(--radius-bedien);font-weight:800;font-size:var(--t-13);text-decoration:none;transition:var(--t)}
.gp-add:hover{background:var(--asphalt-2)}/* A10704 Design: dunkler Knopf ohne Hover. */

/* ===== search.html  (gekapselt in body.seite-suche)  A5675 Design 3, 20260910-0610 ===== */
/* Listenansicht (ATP-Stil): eine Zeile pro Artikel */

body.seite-suche .plist{display:flex;flex-direction:column;gap:var(--s-8);margin-top:var(--f-4)}
body.seite-suche .pli{display:grid;grid-template-columns:96px 1fr 230px;gap:var(--s-16);background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--s-16);align-items:center;transition:var(--t)}
body.seite-suche .pli:hover{border-color:var(--line-2)}
body.seite-suche .pli-img{width:96px;height:76px;background:linear-gradient(160deg,var(--line),var(--paper));border-radius:var(--radius-raster);display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}
body.seite-suche .pli-img svg{width:50%;color:var(--ink-2)}
body.seite-suche .pli-img img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:var(--card);border-radius:var(--radius-raster)}
body.seite-suche .pli-info{min-width:0}
body.seite-suche .pli-info .brand{font-size:var(--t-11);font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft)}
body.seite-suche .pli-info h3{margin:var(--f-4) 0 var(--f-4);font-size:var(--t-16);line-height:1.3}
body.seite-suche .pli-info h3 a{text-decoration:none;color:inherit;overflow-wrap:anywhere}/* A5665 (arbeiter10, 09.09.2026): ein einziger langer Artikelname schob die Fahrzeug-Kategorie
   auf 404 statt 390 Pixel und erzwang seitliches Wischen auf der ganzen Seite. Gemessen am
   09.09. um 20:49 auf /karosserieteile/abarth/...: <A> in .pli-info h3, 273 Pixel breit, lief
   von 131 bis 404. overflow-wrap:anywhere bricht nur diesen einen zu langen Namen um und
   aendert an kurzen Namen nichts. */

body.seite-suche .pli-info h3 a:hover{text-decoration:underline}
body.seite-suche .pli-info .meta{font-size:var(--t-13);color:var(--ink-soft)}
body.seite-suche .pli-stock{display:inline-flex;align-items:center;gap:var(--f-4);font-size:var(--t-12);font-weight:600;color:var(--ok-ink);margin-top:var(--s-8)}
body.seite-suche .pli-stock::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--ok)}
body.seite-suche .pli-stock.out{color:var(--ink-soft)}body.seite-suche .pli-stock.out::before{background:var(--ink-3)}
body.seite-suche .pli-buy{border-left:1px dashed var(--line);padding-left:var(--s-16);text-align:right}
body.seite-suche .pli-buy .price{font-family:'Barlow Condensed',system-ui;font-size:var(--t-26);font-weight:800;line-height:1}
body.seite-suche .pli-buy small{display:block;font-size:var(--t-11);color:var(--ink-soft);margin:var(--f-4) 0 var(--f-4)}
body.seite-suche .pli-buy .del{font-size:var(--t-12);color:var(--ok-ink);font-weight:600;margin-bottom:var(--s-8);display:block}
body.seite-suche .pli-buy .buystock{display:flex;justify-content:flex-end;margin:var(--f-4) 0 var(--s-8)}
body.seite-suche .pli-buy form{display:flex;gap:var(--s-8);justify-content:flex-end;align-items:center}
body.seite-suche .pli-buy select{padding:var(--s-8);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;background:var(--card)}
body.seite-suche .pli-buy button{background:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--s-8) var(--s-16);font-weight:700;cursor:pointer;font-size:var(--t-14);white-space:nowrap;transition:var(--t)}
body.seite-suche .pli-buy button:hover{filter:brightness(1.08)}/* A10704 Design 30.09.2026: --signal-hover war nie definiert, der Knopf wurde beim Hover transparent (gemessen 8979: rgb(255,180,0) -> rgba(0,0,0,0)). Hausmuster der gelben Knoepfe (.btn-y, .addcart, .search button). */
body.seite-suche .pli-buy button{display:inline-flex;align-items:center;gap:var(--s-8);padding:var(--s-8) var(--f-12)}
body.seite-suche .pli-buy button svg{width:18px;height:18px}/* A5679 (arbeiter4, 09.09.2026): Das Wort "Kaufen" stand unter 900 px auf display:none,
   auf dem Handy blieb nur ein Einkaufswagen-Symbol - im Mensch-Test vom 09.09. hat eine
   Persona den Knopf deshalb nicht als Kaufknopf erkannt. Platz ist da: unter 820 px faellt
   .pli-buy ohnehin auf die volle Breite (grid-column:1/-1, justify-content:space-between),
   der Knopf steht also allein in seiner Zeile. Das Wort bleibt jetzt in jeder Breite stehen. */

body.seite-suche .pli-buy .kauf-txt{display:inline}
body.seite-suche .pli-buy .noprice{font-size:var(--t-14);color:var(--ink-soft)}
@media(max-width:820px){
  body.seite-suche .pli{grid-template-columns:72px 1fr}
  body.seite-suche .pli-img{width:72px;height:60px}
  body.seite-suche .pli-buy{grid-column:1 / -1;border-left:none;border-top:1px dashed var(--line);padding:var(--f-12) 0 0;display:flex;justify-content:space-between;align-items:center;text-align:left}
}
@media(max-width:560px){/* Handy: Kaufbereich stapeln, „In den Warenkorb" voll & tappbar (sonst rechts abgeschnitten) */
  
  body.seite-suche .pli-buy{flex-direction:column;align-items:stretch;gap:var(--s-8)}
  body.seite-suche .pli-buy form{width:100%}
  body.seite-suche .pli-buy form button{flex:1;padding:var(--f-12)}
}
  body.seite-suche .lagehinweis{background:var(--signal-bg);border:1px solid var(--signal-line);border-radius:var(--radius-raster);padding:var(--s-8) var(--f-12);
               margin:var(--s-8) 0 var(--f-4);font-size:var(--t-14);line-height:1.5;color:var(--signal-ink-2)}
  
  body.seite-suche .lagehinweis{background:var(--signal-bg);border:1px solid var(--signal-line);border-radius:var(--radius-raster);padding:var(--s-8) var(--f-12);
               margin:var(--s-8) 0 var(--f-4);font-size:var(--t-14);line-height:1.5;color:var(--signal-ink-2)}
  
  body.seite-suche .fzerkannt{background:var(--paper);border:1px solid var(--ok-line);border-radius:var(--radius-raster);padding:var(--s-8) var(--f-12);
             margin:var(--s-8) 0 var(--f-4);font-size:var(--t-14);line-height:1.5;color:var(--ok-ink)}
  body.seite-suche .fzerkannt a{color:var(--ok-ink)}
  
  body.seite-suche .fzvor{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--s-16);margin:var(--f-12) 0 var(--f-4)}
  body.seite-suche .fzvor h2{font-size:var(--t-16);margin:0 0 var(--s-8);letter-spacing:.02em}
  body.seite-suche .fzvor ul{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:var(--s-8)}
  body.seite-suche .fzvor a{display:block;text-decoration:none;color:inherit;border:1px solid var(--line);border-radius:var(--radius-bedien);padding:var(--s-8) var(--f-12);transition:var(--t)}
  body.seite-suche .fzvor a:hover{border-color:var(--ok)}
  body.seite-suche .fzvor .fz-t{font-weight:650;font-size:var(--t-14)}
  body.seite-suche .fzvor .fz-m{font-size:var(--t-12);color:var(--ink-soft);margin-top:var(--f-4)}
  
  body.seite-suche .fzfilter{display:flex;align-items:center;gap:var(--s-8);flex-wrap:wrap;background:var(--paper);border:1px solid var(--ok-line);
            border-radius:var(--radius-bedien);padding:var(--s-8) var(--f-12);margin:var(--s-8) 0 var(--f-4);font-size:var(--t-14)}
  body.seite-suche .fzfilter.aus{background:var(--paper);border-color:var(--line);color:var(--ink-soft)}
  body.seite-suche .fzfilter svg{width:20px;height:20px;color:var(--ok);flex:none}
  body.seite-suche .fzfilter.aus svg{color:var(--ink-mute)}
  body.seite-suche .fzfilter a{margin-left:auto;font-weight:700;color:var(--asphalt);white-space:nowrap}
  body.seite-suche .fzhint{background:var(--signal-bg);border:1px solid var(--signal-line);border-radius:var(--radius-raster);padding:var(--f-12) var(--f-12);margin:var(--s-8) 0;font-size:var(--t-14)}
  
  body.seite-suche .fzbar{display:flex;justify-content:space-between;align-items:center;gap:var(--f-12);flex-wrap:wrap;background:var(--card);border:1.5px solid var(--line);border-left:4px solid var(--signal);border-radius:var(--radius-raster);padding:var(--f-12) var(--s-16);margin:var(--s-8) 0;font-size:var(--t-14)}
  body.seite-suche .fzbar.on{border-left-color:var(--ok);background:var(--paper)}
  body.seite-suche .fzbar a{font-weight:700;color:var(--asphalt);text-decoration:none;white-space:nowrap}
  body.seite-suche .fzbar a:hover{text-decoration:underline}
  
  body.seite-suche .ftoolbar{display:flex;gap:var(--s-16);align-items:center;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--s-16);margin:var(--f-12) 0 var(--f-4);font-size:var(--t-14);position:sticky;top:calc(var(--header-h,90px) + 8px);z-index:30}
  body.seite-suche .ftoolbar select{margin-left:var(--f-4);padding:var(--s-8);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;background:var(--card)}
  body.seite-suche .ftoolbar .fcheck{display:flex;align-items:center;gap:var(--s-8);font-weight:600}
  body.seite-suche .sgrid{display:grid;grid-template-columns:230px 1fr;gap:var(--s-16);align-items:start;margin-top:var(--s-8)}
  body.seite-suche .s-side{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--s-8);position:sticky;top:calc(var(--header-h,90px) + 8px)}
  body.seite-suche .s-side h3{font-size:var(--t-12);letter-spacing:.08em;color:var(--ink-soft);margin-bottom:var(--s-8)}
  body.seite-suche .s-side a{display:block;padding:var(--f-4) var(--s-8);font-size:var(--t-13);text-decoration:none;color:var(--ink);border-radius:var(--radius-bedien)}
  body.seite-suche .s-side a:hover{background:var(--paper)}
  body.seite-suche .s-side .hk{font-weight:800;margin-top:var(--s-8);border-top:1px dashed var(--line);padding-top:var(--s-8)}
  @media(max-width:900px){body.seite-suche .sgrid{grid-template-columns:1fr}body.seite-suche .s-side{position:static}body.seite-suche .ftoolbar{top:8px}/* A5665 (arbeiter10, 09.09.2026): auf dem Handy stand die Filterspalte UEBER den Treffern.
     Gemessen am 09.09. um 20:31 bei 390x844 fuer "bremsscheibe golf 7": Kopf 232, Ueberschrift
     158, Fahrzeugzeile 106, Fahrzeugkasten 136, Werkzeugleiste 257 und dann die Filterspalte mit
     664 Pixeln - der erste Treffer kam erst bei 1.747 Pixeln, also nach gut zwei Bildschirmen.
     Am Rechner bleibt die Spalte links stehen, dort ist sie richtig. Auf dem Handy gehoert sie
     unter die Ware: wer sucht, will zuerst Treffer sehen und erst dann filtern.
     Die Grenze 900 ist die vorhandene, keine neue. */
  
  body.seite-suche .sgrid>.s-side{order:2}/* Die Ueberschrift war 158 Pixel hoch, weil sie die volle Suchanfrage in Desktop-Groesse
     traegt. Auf 390 Pixel Breite passt das in zwei Zeilen statt vier. */
  
  body.seite-suche .page-head h1{font-size:var(--t-20);line-height:1.25}}
  
      body.seite-suche .berswitch{margin:0 0 var(--f-12);padding-bottom:var(--f-12);border-bottom:1px solid var(--line)}
      body.seite-suche .berswitch .bsw{display:flex;align-items:center;justify-content:space-between;gap:var(--s-8);padding:var(--s-8) var(--f-12);margin:var(--f-4) 0;font-size:var(--t-13);font-weight:700;text-decoration:none;border:1.5px solid var(--line);border-radius:var(--radius-raster);color:var(--ink);background:var(--paper)}
      body.seite-suche .berswitch a.bsw:hover{border-color:var(--line-2);background:var(--card)}
      body.seite-suche .berswitch .bsw.on{background:var(--asphalt);border-color:var(--asphalt);color:var(--card);cursor:default}
      body.seite-suche .berswitch .bsw .cnt{float:none;font-weight:600;font-size:var(--t-11);color:var(--ink-soft)}
      body.seite-suche .berswitch .bsw.on .cnt{color:var(--line-2)}
    
body.seite-suche .s-side .cnt{float:right;color:var(--ink-soft);font-size:var(--t-11);font-weight:400}body.seite-suche .s-side a.on{background:var(--signal-bg)}
    body.seite-suche .s-side .s-back{display:block;font-size:var(--t-12);font-weight:700;color:var(--ink-soft);text-decoration:none;margin-bottom:var(--f-4)}
    body.seite-suche .s-side .s-back:hover{color:var(--asphalt)}
  body.seite-suche .pager{display:flex;gap:var(--f-4);justify-content:center;align-items:center;flex-wrap:wrap;margin:var(--s-24) 0 var(--f-4)}
  body.seite-suche .pg-btn,body.seite-suche .pg-num{display:inline-flex;align-items:center;justify-content:center;gap:var(--f-4);min-width:38px;height:38px;padding:0 var(--f-12);border:1.5px solid var(--line);border-radius:var(--radius-bedien);background:var(--card);text-decoration:none;color:var(--ink);font-weight:600;font-size:var(--t-14);transition:var(--t)}
  body.seite-suche .pg-btn:hover,body.seite-suche .pg-num:hover{border-color:var(--asphalt)}
  body.seite-suche .pg-num.on{background:var(--asphalt);color:var(--signal);border-color:var(--asphalt)}
  /* A10620 (29.09.2026): gesperrter Blaetter-Schritt war ein <span class=off> mit opacity .4 - als Text 2,54:1 (axe).
     Jetzt ein echter <button disabled>: inaktive Bedienelemente sind von 1.4.3 ausgenommen, Aussehen gleich. */
  body.seite-suche .pg-btn[disabled]{opacity:.4;cursor:default;pointer-events:none}
  body.seite-suche .pg-dots{padding:0 var(--f-4);color:var(--ink-soft)}
  body.seite-suche .pg-info{text-align:center;color:var(--ink-soft);font-size:var(--t-13);margin-bottom:var(--s-8)}
  
/* Mini-Galerie in der Trefferliste (weitere Bilder, Marcel 16.08.) */

body.seite-suche .pli-img.gal{position:relative}
body.seite-suche .pli-img.gal .gp,body.seite-suche .pli-img.gal .gn{position:absolute;top:50%;transform:translateY(-50%);width:20px;height:30px;border:none;border-radius:var(--radius-bedien);background:var(--overlay-dunkel);color:var(--card);font-size:var(--t-16);line-height:1;cursor:pointer;padding:0;opacity:1;transition:var(--t);z-index:2}
body.seite-suche .pli-img.gal .gp{left:2px}body.seite-suche .pli-img.gal .gn{right:2px}

body.seite-suche .pli-img.gal .gz{position:absolute;left:50%;bottom:2px;transform:translateX(-50%);font-style:normal;font-size:var(--t-11);background:var(--overlay-dunkel);color:var(--card);border-radius:var(--radius-raster);padding:0 var(--f-4);pointer-events:none;z-index:2}

  /* Paket 2 (10.09.2026): benannte Klassen statt der u-Hilfsklassen aus A5675. Werte 1:1.
     .such-passt und .such-marken haengen auf demselben Element wie .meta - die alte Regel
     stand deshalb VIERFACH verkettet am Dateiende (Spezifitaets-Kruecke). Hier gewinnt der
     Selektor sauber: body.seite-suche .pli-info .meta.such-passt (0,4,1) schlaegt
     body.seite-suche .pli-info .meta ohne jede Verkettung. */
  body.seite-suche .such-filterfeld{margin-left:var(--f-4);width:170px;padding:var(--s-8);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit}
  body.seite-suche .such-knopf-hell{background:none;border:1.5px solid var(--line);border-radius:var(--radius-bedien);padding:var(--s-8) var(--f-12);font-size:var(--t-13);font-weight:600;color:var(--ink-soft);cursor:pointer;transition:var(--t)}
  body.seite-suche .such-knopf-hell:hover{border-color:var(--asphalt);color:var(--ink)}/* A10704 Design: Anwenden-Knopf ohne Hover. */
  body.seite-suche .such-preisfeld{width:80px;padding:var(--s-8);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit}
  body.seite-suche .such-preisfeld-von{margin-left:var(--f-4)}
  body.seite-suche .such-knopf-dunkel{background:var(--asphalt);color:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--s-8) var(--s-16);font-weight:700;font-size:var(--t-13);cursor:pointer;transition:var(--t)}
  body.seite-suche .such-knopf-dunkel:hover{background:var(--asphalt-2)}/* A10704 Design: Anwenden-Knopf ohne Hover. */
  body.seite-suche .such-unterkat{padding-left:var(--s-16)}
  body.seite-suche .pli-info .meta.such-passt{color:var(--ok-ink);font-weight:600}
  body.seite-suche .pli-info .meta.such-marken{color:var(--ok-ink)}
  body.seite-suche .such-hinweis-titel{font-size:var(--t-20);margin-bottom:var(--s-8)}
  body.seite-suche .such-hinweis-text{margin-bottom:var(--s-16)}

/* ===== product.html  (gekapselt in body.seite-artikel)  A5675 Design 3, 20260910-0610 ===== */
  body.seite-artikel .backbtn{display:inline-flex;align-items:center;gap:var(--s-8);margin-top:var(--s-16);padding:var(--s-8) var(--f-12);
           background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius-bedien);
           font-size:var(--t-13);font-weight:600;color:var(--ink);text-decoration:none}
  body.seite-artikel .backbtn:hover{border-color:var(--signal)}
  body.seite-artikel .backbtn svg{width:15px;height:15px}
  body.seite-artikel .backbtn + .crumbs{padding-top:var(--f-12)}
  
      body.seite-artikel .pdp-main{position:relative}
      body.seite-artikel .pdp-main img{width:100%;height:100%;object-fit:contain;background:var(--card);user-select:none;-webkit-user-drag:none}
      /* Paket 2 (10.09.2026): benannte Klassen statt u-Hilfsklassen, Werte 1:1.
         .pdp-kein-bild bleibt bewusst SCHWAECHER als .pdp-main img eine Zeile darueber -
         genau wie die alte .u-wd-100-h-auto, die dort ebenfalls verlor. Wer den Selektor
         staerker macht, aendert die Hoehe des Platzhalters von 100% auf auto. */
      body.seite-artikel .pdp-kein-bild{width:100%;height:auto}
      body.seite-artikel .pdp-versandlink{color:inherit}
      body.seite-artikel .ptag.pdp-anfrage{font-size:var(--t-34)}
      body.seite-artikel .pdp-quelle{margin-top:var(--s-8);font-size:var(--t-12)}
      body.seite-artikel .galarrow{position:absolute;top:50%;transform:translateY(-50%);width:38px;height:38px;border-radius:50%;border:1px solid var(--line);background:var(--overlay-hell);color:var(--ink);font-size:var(--t-26);line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow-menue)}
      body.seite-artikel .galarrow:hover{border-color:var(--signal)}
      body.seite-artikel .galarrow.prev{left:10px}body.seite-artikel .galarrow.next{right:10px}
      body.seite-artikel .galcount{position:absolute;right:12px;bottom:10px;font-size:var(--t-12);background:var(--overlay-hell);border-radius:var(--radius-pille);padding:var(--f-4) var(--s-8);color:var(--ink-2)}
      body.seite-artikel .pdp-thumbs{display:flex;gap:var(--s-8);padding:var(--s-8);flex-wrap:wrap;border-top:1px solid var(--line)}
      body.seite-artikel .pdp-thumbs img{width:64px;height:52px;object-fit:contain;background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius-raster);cursor:pointer}
      body.seite-artikel .pdp-thumbs img.on{border-color:var(--signal);box-shadow:var(--ring)}
      body.seite-artikel .g360{position:absolute;inset:0;background:var(--card);cursor:grab;touch-action:pan-y}
      body.seite-artikel .g360.drag{cursor:grabbing}
      body.seite-artikel .g360 img{pointer-events:none}
      body.seite-artikel .g360hint{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);font-size:var(--t-12);background:var(--overlay-dunkel);color:var(--card);border-radius:var(--radius-pille);padding:var(--f-4) var(--s-8);pointer-events:none}
      body.seite-artikel .g360btn{position:absolute;left:10px;top:10px;display:flex;align-items:center;gap:var(--f-4);font-size:var(--t-12);font-weight:700;padding:var(--f-4) var(--s-8);border-radius:var(--radius-pille);border:1px solid var(--line);background:var(--overlay-hell);color:var(--ink);cursor:pointer;box-shadow:var(--shadow-menue)}
      body.seite-artikel .g360btn svg{width:15px;height:15px}
      body.seite-artikel .g360btn.on{background:var(--signal);border-color:var(--signal)}
      
      body.seite-artikel .tdfit{display:flex;gap:var(--s-8);align-items:flex-start;background:var(--ok-bg);border:1.5px solid var(--ok-line);border-radius:var(--radius-raster);padding:var(--s-8) var(--s-8);margin:0 0 var(--s-8);color:var(--ok-ink);font-size:var(--t-14)}
      body.seite-artikel .tdfit svg{flex:0 0 auto;width:20px;height:20px;margin-top:var(--f-4)}
      body.seite-artikel .tdfit-sub{display:block;font-size:var(--t-12);color:var(--ink-soft);margin-top:var(--f-4)}
      
  body.seite-artikel .trustgrid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-8);margin-top:var(--s-8)}
  body.seite-artikel .trustgrid div{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--s-8) var(--s-8);font-size:var(--t-12);color:var(--ink-soft)}
  body.seite-artikel .trustgrid b{display:block;font-size:var(--t-12);color:var(--ink);margin-bottom:var(--f-4)}
  body.seite-artikel .stickybar{position:fixed;top:0;left:0;right:0;background:var(--asphalt);color:var(--card);display:none;align-items:center;gap:var(--f-12);padding:var(--s-8) var(--s-16);z-index:100;box-shadow:var(--shadow-kopf)}
  body.seite-artikel .stickybar.show{display:flex}
  body.seite-artikel .sb-name{flex:1;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  body.seite-artikel .sb-price{font-weight:800;font-size:var(--t-20);color:var(--signal);white-space:nowrap}
  body.seite-artikel .sb-price .sb-mwst{display:block;font-size:var(--t-11);font-weight:400;color:var(--ink-soft);text-align:right}
  body.seite-artikel .stickybar button{background:var(--signal);color:var(--asphalt);border:none;border-radius:var(--radius-bedien);padding:var(--s-8) var(--s-16);min-height:44px;font-weight:800;cursor:pointer;white-space:nowrap;transition:var(--t)}
  body.seite-artikel .stickybar button:hover{filter:brightness(1.08)}/* A10704 Design: Kaufknopf der Klebeleiste ohne Hover. */
  /* A5720 (10.09.2026, arbeiter13): hier stand ein Vorlagen-Kommentar in der Form
     {# ... #}. Der gehoert in eine HTML-Vorlage, nicht in ein Stylesheet - beim Umzug
     der Stilbloecke (A5675) ist er woertlich mitgewandert. Fuer den Browser ist die
     geschweifte Klammer der Anfang eines Blocks ohne Auswahl: er verwirft alles bis
     zur naechsten schliessenden Klammer, und das ist die von .psec direkt darunter.
     Ausserdem las die Farbzaehlung die Ziffernfolge dahinter als Farbwert.
     Frueherer Text: feste Abschnitte statt Reiter - Reihenfolge Bild, Beschreibung,
     OE-Nummern, Passende Fahrzeuge, Hersteller und Sicherheit. */
  body.seite-artikel .psec{margin-top:var(--s-32);font-size:var(--t-16);max-width:var(--w-eng)}/* Fliesstext der Beschreibung (Marcel 24.08.) — steht ueber der Merkmal-Tabelle *//* A4489 02.09.2026 (arbeiter8): white-space:pre-line. Der erzeugte Artikeltext ist
     ZEILENWEISE aufgebaut (Name / Herstellernummer: / Passend fuer: / OE-Nummern:).
     Ohne diese Zeile faltet der Browser die Umbrueche im <p> zu Leerzeichen und
     Marcel sieht EINE Bandwurmzeile. Gemessen 02.09. 21:0x in der Shop-Kopie:
     67.449 aktive Artikel tragen so einen mehrzeiligen Text. Artikel ohne Umbruch
     aendern sich dadurch nicht, pre-line faltet Leerzeichen weiter wie normal. */
  
  
  body.seite-artikel .pdesc{margin:0 0 var(--s-8);color:var(--ink-2);font-size:var(--t-14);line-height:1.55;white-space:pre-line}
  body.seite-artikel .psec-under{margin-top:var(--s-24);max-width:none}
  body.seite-artikel .psec h2{font-family:'Barlow Condensed','Barlow','Arial Narrow',system-ui,sans-serif;font-size:var(--t-20);font-weight:700;letter-spacing:.04em;color:var(--ink);border-bottom:2px solid var(--line);padding-bottom:var(--s-8);margin-bottom:var(--f-12)}
  body.seite-artikel .psec table{width:100%;border-collapse:collapse;font-size:var(--t-14)}
  body.seite-artikel .psec td,body.seite-artikel .psec th{text-align:left;padding:var(--s-8) var(--f-12);border-bottom:1px solid var(--line)}
  body.seite-artikel .psec th{font-weight:600;color:var(--ink-soft);width:38%}
  body.seite-artikel .oe-block{border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--s-16);margin-top:var(--s-8)}
  body.seite-artikel .oe-block summary{cursor:pointer;font-weight:700;font-size:var(--t-16);color:var(--ink)}
  body.seite-artikel .oe-block[open] summary{margin-bottom:var(--s-8);border-bottom:1px solid var(--line);padding-bottom:var(--s-8)}
  body.seite-artikel .oe-h{font-size:var(--t-14);font-weight:700;margin:var(--s-16) 0 var(--s-8);color:var(--ink)}
  body.seite-artikel .oe-h:first-of-type{margin-top:0}
  body.seite-artikel .veh-make{font-size:var(--t-16);font-weight:800;margin:var(--s-16) 0 var(--f-4);color:var(--ink)}
  body.seite-artikel .veh-make:first-of-type{margin-top:0}
  
  body.seite-artikel .oe-hint{margin:0 0 var(--f-12);padding:var(--s-8) var(--f-12);background:var(--signal-bg);border:1px solid var(--signal-line);border-radius:var(--radius-raster);color:var(--signal-ink-2);font-size:var(--t-13)}
  body.seite-artikel .oelist{list-style:none;margin:0 0 var(--f-4);padding:0;columns:2;column-gap:var(--s-24);font-size:var(--t-14)}
  body.seite-artikel .oelist li{padding:var(--f-4) 0;border-bottom:1px solid var(--line);break-inside:avoid}
  @media (max-width:640px){body.seite-artikel .oelist{columns:1}}
  
  body.seite-artikel .verwandt .vkarten{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--f-12);margin-top:var(--s-8)}
  body.seite-artikel .verwandt .vkarte{display:flex;flex-direction:column;gap:var(--f-4);padding:var(--s-8);border:1px solid var(--line);border-radius:var(--radius-raster);text-decoration:none;color:inherit;background:var(--card)}
  body.seite-artikel .verwandt .vkarte:hover{border-color:var(--line-2)}
  body.seite-artikel .verwandt .vkarte img{width:100%;height:96px;object-fit:contain}
  body.seite-artikel .verwandt .vk-marke{font-size:var(--t-11);color:var(--ink-soft);text-transform:uppercase}
  body.seite-artikel .verwandt .vk-name{font-size:var(--t-13);line-height:1.3}
  body.seite-artikel .verwandt .vk-preis{font-weight:700;font-size:var(--t-16)}
  /* A5786: Zwischenueberschrift je Zielknoten im Block "Dazu brauchst du". Nur vorhandene
     Token, kein fester Pixelwert, kein neues Token (Marcels Staffel A5776). */
  body.seite-artikel #dazu .dazu-ziel{font-size:var(--t-14);font-weight:600;margin:var(--s-16) 0 0;color:var(--ink)}
  body.seite-artikel #dazu .dazu-ziel .dazu-rolle{font-weight:400;color:var(--ink-soft);text-transform:none}
  body.seite-artikel .psec-wide{max-width:none}
  /* A10620 sichtbar Punkt 4 (29.09.2026): bei 1440 lief die linke Spalte (Galerie + Beschreibung, 712 px) allein unter der
     Kaufbox weiter (rechte Spalte 517 px), und die Abschnitte darunter hingen mit max-width 880 wie eine dritte Spalte links
     (gemessen Teststand 8934). Ab 981 px (Zweispalten-Schwelle der .pdp-Regel oben, 980 px): die linke Huelle loest sich im
     Raster auf (display:contents), Galerie Spalte 1, Kaufbox Spalte 2, Beschreibung als volle Zeile darunter, alle .psec ohne
     Breitendeckel; nur der Fliesstext .pdesc behaelt --w-eng (Zeilenlaenge). Bis 980 px unveraendert (eine Spalte, Zeile 556). */
  @media(min-width:981px){
    body.seite-artikel .pdp{row-gap:var(--s-32)}
    body.seite-artikel .pdp>div:first-child{display:contents}
    body.seite-artikel .pdp-gallery{grid-column:1;grid-row:1}
    body.seite-artikel .pdp-info{grid-column:2;grid-row:1}
    body.seite-artikel .psec-under{grid-column:1/-1;margin-top:0}
    body.seite-artikel .psec{max-width:none}
    body.seite-artikel .pdesc{max-width:var(--w-eng)}
  }
  body.seite-artikel .veh-cnt{font-size:var(--t-14);font-weight:600;letter-spacing:0;text-transform:none;color:var(--ink-soft)}
  body.seite-artikel .vehgrp{border:1px solid var(--line);border-radius:var(--radius-raster);margin:0 0 var(--s-8);background:var(--card)}
  body.seite-artikel .vehgrp summary{cursor:pointer;padding:var(--f-12) var(--f-12);font-size:var(--t-16);list-style:none;display:flex;align-items:center;gap:var(--s-8)}
  body.seite-artikel .vehgrp summary::-webkit-details-marker{display:none}
  body.seite-artikel .vehgrp summary::before{content:"";width:8px;height:8px;border-right:2px solid var(--ink-soft);border-bottom:2px solid var(--ink-soft);transform:rotate(-45deg);transition:var(--t);margin-left:var(--f-4)}
  body.seite-artikel .vehgrp[open] summary::before{transform:rotate(45deg)}
  body.seite-artikel .vehgrp .veh-make{font-weight:800;margin:0}
  body.seite-artikel .vehgrp .veh-n{font-size:var(--t-12);color:var(--ink-soft);font-weight:500}
  body.seite-artikel .vehtab-wrap{overflow-x:auto;border-top:1px solid var(--line)}
  body.seite-artikel .vehtab{width:100%;border-collapse:collapse;font-size:var(--t-13)}
  body.seite-artikel .vehtab th{background:var(--paper);font-weight:700;color:var(--ink);text-align:left;padding:var(--s-8) var(--s-8);white-space:nowrap;border-bottom:1px solid var(--line);width:auto}
  body.seite-artikel .vehtab td{padding:var(--s-8) var(--s-8);border-bottom:1px solid var(--line);vertical-align:top;color:var(--ink)}
  body.seite-artikel .vehtab tbody tr:hover{background:var(--signal-bg)}
  body.seite-artikel .v-fz b{font-weight:700}
  body.seite-artikel .v-einschr{color:var(--signal-ink);font-size:var(--t-12);max-width:220px}
  body.seite-artikel .v-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--t-12)}
  body.seite-artikel .v-nowrap{white-space:nowrap}
  body.seite-artikel .v-kba{font-size:var(--t-12);white-space:nowrap}
  body.seite-artikel .v-kba span{display:block}
  

/* ===== cart.html  (gekapselt in body.seite-warenkorb)  A5675 Design 3, 20260910-0610 ===== */
  body.seite-warenkorb /* A5567: Vorschaubild links neben Artikelname und Nummer. float statt flex,body.seite-warenkorb weil die
     erste Zelle auf dem Handy per td:first-child{display:block} body.seite-warenkorb gestapelt wird — ein
     flex-Container hier wuerde diese Regel aushebeln und Name und Nummer nebeneinander
     quetschen. Feste 64 px,body.seite-warenkorb damit die Zeilenhoehe nicht springt,body.seite-warenkorb waehrend die Bilder laden. */
  .cart-bild{float:left;margin:var(--f-4) var(--f-12) var(--f-4) 0;line-height:0}
  body.seite-warenkorb .cart-bild img{width:64px;height:64px;object-fit:contain;border:1px solid var(--line);border-radius:var(--radius-raster);background:var(--card)}
  body.seite-warenkorb .cart-table td:first-child{overflow:hidden}
  /* Mobil: Warenkorb-Tabelle gestapelt (sonst horizontales Scrollen → Preis/Entfernen versteckt) */
  @media(max-width:640px){
    body.seite-warenkorb .cart-scroll{overflow:visible}
    body.seite-warenkorb .cart-table{min-width:0;display:block}
    body.seite-warenkorb .cart-table thead{display:none}
    body.seite-warenkorb .cart-table tbody,body.seite-warenkorb .cart-table tr,body.seite-warenkorb .cart-table td{display:block;width:100%}
    body.seite-warenkorb .cart-table tr{border-bottom:1px solid var(--line);padding:var(--f-4) 0 var(--s-8)}
    body.seite-warenkorb .cart-table tr:last-child{border-bottom:none}
    body.seite-warenkorb .cart-table td{display:flex;justify-content:space-between;align-items:center;gap:var(--f-12);border:none;padding:var(--s-8) var(--f-12);text-align:right}
    body.seite-warenkorb .cart-table td[data-label]::before{content:attr(data-label);font-weight:600;color:var(--ink-soft);text-align:left}
    body.seite-warenkorb .cart-table td:first-child{display:block;text-align:left;padding-top:var(--f-12)}
    body.seite-warenkorb .cart-table .qty-form{justify-content:flex-end}
  }/* A5568: Hinweis auf einen geaenderten Preis. Bewusst zurueckhaltend - es gilt der
     heutige Preis, die Zeile erklaert nur, dass er sich seit dem Hineinlegen bewegt hat. *//* A5679: Rueckgaengig-Kasten. Bewusst ruhig (kein Rot, kein Warnton) - es ist keine
     Stoerung, sondern ein Angebot. Auf dem Handy bricht er in zwei Zeilen um. */
  
  
  body.seite-warenkorb .undo-box{display:flex;flex-wrap:wrap;gap:var(--s-8) var(--s-16);align-items:center;justify-content:space-between;
            background:var(--paper);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--s-8) var(--s-8);margin-bottom:var(--s-8);font-size:var(--t-14)}
  body.seite-warenkorb .undo-box button{background:var(--card);border:1.5px solid var(--line-2);border-radius:var(--radius-bedien);padding:var(--s-8) var(--f-12);
                   font:inherit;font-weight:700;cursor:pointer;min-height:38px}
  body.seite-warenkorb .undo-box button:hover{border-color:var(--asphalt);color:var(--ink)}/* A10704 Design: Hover setzte den Ruhewert (card auf card). Muster der hellen Knoepfe (.qty-form button:hover). */
  body.seite-warenkorb .preisdrift{font-size:var(--t-12);font-weight:600;margin-top:var(--f-4);white-space:nowrap}
  body.seite-warenkorb .preisdrift.teurer{color:var(--danger)}
  body.seite-warenkorb .preisdrift.guenstiger{color:var(--ok-ink)}
  

/* ===== trade.html  (gekapselt in body.seite-haendler)  A5675 Design 3, 20260910-0610 ===== */
body.seite-haendler .tr-wrap{display:grid;grid-template-columns:240px 1fr;gap:var(--s-16);align-items:start}
body.seite-haendler .tr-hint{font-size:var(--t-12);color:var(--ink-soft);margin-bottom:var(--s-8)}
body.seite-haendler table.tr{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);overflow:hidden;font-size:var(--t-13)}
body.seite-haendler table.tr th{background:var(--asphalt);color:var(--card);text-align:left;padding:var(--s-8) var(--s-8);font-size:var(--t-11);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap}
body.seite-haendler table.tr td{padding:var(--f-4) var(--s-8);border-bottom:1px solid var(--paper);vertical-align:middle}
body.seite-haendler table.tr tr:hover td{background:var(--signal-bg)}
body.seite-haendler table.tr a{color:inherit;text-decoration:none;font-weight:600}
body.seite-haendler table.tr a:hover{text-decoration:underline}
body.seite-haendler .tr-num{font-family:ui-monospace,Consolas,monospace;font-size:var(--t-12);white-space:nowrap}
body.seite-haendler .tr-ok{color:var(--ok-ink);font-weight:700;white-space:nowrap}
body.seite-haendler .tr-no{color:var(--ink-soft);white-space:nowrap}
body.seite-haendler .tr-price{font-weight:800;white-space:nowrap;text-align:right}
body.seite-haendler td form{display:flex;gap:var(--f-4);justify-content:flex-end}
body.seite-haendler td form input[type=number]{width:48px;padding:var(--f-4);border:1px solid var(--line);border-radius:var(--radius-bedien);text-align:center}
body.seite-haendler td form button{background:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--f-4) var(--s-8);font-weight:700;cursor:pointer;font-size:var(--t-12);white-space:nowrap}
body.seite-haendler .tr-side{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12);position:sticky;top:90px}
body.seite-haendler .tr-side h3{font-size:var(--t-13);letter-spacing:.08em;color:var(--ink-soft);margin-bottom:var(--s-8)}
body.seite-haendler .tr-side a{display:block;padding:var(--f-4) var(--s-8);font-size:var(--t-13);text-decoration:none;color:var(--ink);border-radius:var(--radius-bedien)}
body.seite-haendler .tr-side a:hover{background:var(--paper)}
body.seite-haendler .tr-side .hk{font-weight:800;margin-top:var(--s-8);border-top:1px dashed var(--line);padding-top:var(--s-8)}
@media(max-width:900px){body.seite-haendler .tr-wrap{grid-template-columns:1fr}body.seite-haendler .tr-side{position:static;order:-1}}
body.seite-haendler .tr-side .cnt{float:right;color:var(--ink-soft);font-size:var(--t-11);font-weight:400}body.seite-haendler .tr-side a.on{background:var(--signal-bg)}
      body.seite-haendler .trpager{display:flex;gap:var(--f-12);align-items:center;justify-content:center;margin:var(--s-8) 0 var(--s-8);font-size:var(--t-14)}
      body.seite-haendler .trpager a{background:var(--asphalt);color:var(--signal);text-decoration:none;font-weight:700;padding:var(--s-8) var(--s-16);border-radius:var(--radius-bedien)}
      body.seite-haendler .trpager a:hover{background:var(--asphalt-2)}/* A10704 Design: Hover setzte den Ruhewert. Muster der dunklen Knoepfe (.vgo:hover). */
      body.seite-haendler .trpager .off{opacity:.4;padding:var(--s-8) var(--s-16)}
      body.seite-haendler .trp-info{color:var(--ink-soft)}
      

/* ===== model.html  (gekapselt in body.seite-modell)  A5675 Design 3, 20260910-0610 ===== */
  body.seite-modell .engtable{width:100%;border-collapse:collapse;font-size:var(--t-14);min-width:640px}
  body.seite-modell .engtable th{text-align:left;font-size:var(--t-12);font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);padding:var(--f-12) var(--f-12);border-bottom:1px solid var(--line);background:var(--paper)}
  body.seite-modell .engtable td{padding:var(--f-12) var(--f-12);border-bottom:1px solid var(--line)}
  body.seite-modell .engtable tbody tr:last-child td{border-bottom:none}
  body.seite-modell .engtable a{text-decoration:none}
  body.seite-modell .engtable td a b:hover{text-decoration:underline}
  body.seite-modell .goparts{background:var(--signal);border-radius:var(--radius-raster);padding:var(--s-8) var(--f-12);font-weight:700;font-size:var(--t-13);white-space:nowrap}
  body.seite-modell .goparts:hover{filter:brightness(1.08)}/* A10704 Design: --signal-hover undefiniert, siehe .pli-buy button:hover */
  /* Mobil: Motor-Tabelle gestapelt statt horizontal scrollen */
  @media(max-width:640px){
    body.seite-modell .panel{overflow:visible !important}
    body.seite-modell .engtable{min-width:0;display:block}
    body.seite-modell .engtable thead{display:none}
    body.seite-modell .engtable tbody,body.seite-modell .engtable tr,body.seite-modell .engtable td{display:block;width:100%}
    body.seite-modell .engtable tr{border-bottom:1px solid var(--line);padding:var(--f-4) 0 var(--s-8)}
    body.seite-modell .engtable td{display:flex;justify-content:space-between;gap:var(--f-12);border:none;padding:var(--f-4) var(--f-12);text-align:right}
    body.seite-modell .engtable td[data-label]::before{content:attr(data-label);font-weight:600;color:var(--ink-soft)}
    body.seite-modell .engtable td:first-child{padding-top:var(--f-12)}
    body.seite-modell .engtable .goparts{display:block;text-align:center;margin:var(--f-4) var(--f-12) 0}
  }
  

/* ===== brand.html  (gekapselt in body.seite-marke)  A5675 Design 3, 20260910-0610 ===== */
  body.seite-marke .modelgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--s-16);margin-top:var(--s-8)}
  body.seite-marke .modelcard{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--s-16);text-decoration:none;transition:var(--t)}
  body.seite-marke .modelcard:hover{border-color:var(--line-2)}
  body.seite-marke .modelcard b{display:block;font-size:var(--t-16)}
  body.seite-marke .modelcard span{font-size:var(--t-12);color:var(--ink-soft)}
  

/* ===== brands.html  (gekapselt in body.seite-marken)  A5675 Design 3, 20260910-0610 ===== */
  body.seite-marken .brandgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--f-12);margin-top:var(--s-8)}
  body.seite-marken .brandcard{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--s-16) var(--s-16);text-decoration:none;transition:var(--t)}
  body.seite-marken .brandcard:hover{border-color:var(--line-2)}
  body.seite-marken .brandcard b{display:block;font-size:var(--t-16)}
  body.seite-marken .brandcard span{font-size:var(--t-12);color:var(--ink-soft)}
  

  /* Paket 1 (10.09.2026, Marcels Go 18:52): benannte Klassen statt der u-Hilfsklassen aus
     A5675. Werte 1:1 aus den alten Regeln, nur Token. */
  body.seite-warenkorb .wk-tabelle{padding:0;overflow:hidden}
  body.seite-warenkorb .wk-warnung{color:var(--danger);font-size:var(--t-13);font-weight:600;margin-top:var(--f-4)}
  body.seite-warenkorb .wk-summe{padding:var(--s-16) var(--s-16)}
  body.seite-warenkorb .wk-frei{color:var(--ok-ink)}
  body.seite-warenkorb .wk-hinweis{background:var(--signal-bg);border-radius:var(--radius-raster);padding:var(--s-8) var(--f-12);font-size:var(--t-13);margin:var(--f-4) 0}
  body.seite-warenkorb .wk-hinweis-ok{background:var(--ok-bg);color:var(--ok-ink)}
  body.seite-warenkorb .wk-kasse-knopf{width:100%;margin-top:var(--f-12)}
  body.seite-warenkorb .wk-weiter{margin-top:var(--s-16)}
  body.seite-warenkorb .wk-leer-titel{font-size:var(--t-20);margin-bottom:var(--s-8)}
  body.seite-warenkorb .wk-leer-text{margin-bottom:var(--s-16)}

/* ===== confirm.html  (gekapselt in body.seite-bestaetigung)  A5675 Design 3, 20260910-0610 ===== */
    body.seite-bestaetigung .bankt{border-collapse:collapse;margin-top:var(--s-8);font-size:var(--t-14)}
    body.seite-bestaetigung .bankt th{text-align:left;color:var(--ink-soft);font-weight:600;padding:var(--f-4) var(--s-16) var(--f-4) 0;white-space:nowrap}
    body.seite-bestaetigung .bankt td{padding:var(--f-4) 0;font-feature-settings:"tnum"}
    /* Paket 1 (10.09.2026): benannte Klassen statt u-Hilfsklassen, Werte 1:1. */
    body.seite-bestaetigung .bs-titel{font-size:var(--t-34)}
    body.seite-bestaetigung .bs-nummer-label{margin-top:var(--s-8)}
    body.seite-bestaetigung .bs-summe{margin:var(--f-12) 0 var(--f-4)}
    body.seite-bestaetigung .bs-zahlung{text-align:left;margin-top:var(--s-24);margin-bottom:0}
    body.seite-bestaetigung .bs-mail{font-size:var(--t-13);margin-top:var(--s-8)}
    body.seite-bestaetigung .bs-zurueck{margin-top:var(--s-24)}

/* ===== checkout.html  (gekapselt in body.seite-kasse)  Paket 1, 10.09.2026 ===== */
    body.seite-kasse .ks-block{margin-bottom:var(--s-16)}
    body.seite-kasse .ks-zwischensumme{margin-top:var(--s-8)}
    body.seite-kasse .ks-bestellen{width:100%}
    

/* ===== category.html  (gekapselt in body.seite-kategorie)  Paket 2, 10.09.2026 =====
   ACHTUNG: Diese Vorlage ist heute ueber KEINE Route erreichbar. /kategorie/<uuid> leitet
   seit 29.08.2026 (A3247) mit 301 auf /kategorien um, der Rumpf _category_page_polcar in
   pages.py wird von nichts aufgerufen, in keiner Sitemap steht eine /kategorie/-Adresse.
   Der Block steht hier, damit die Vorlage keine u-Hilfsklassen mehr braucht. Wird die
   Vorlage geloescht, kommt dieser Block mit weg. Nicht mit body.seite-kategorien
   (Mehrzahl, /kategorien) verwechseln - das ist eine andere, lebende Seite. */
body.seite-kategorie .page-head.kat-kopf{margin-top:var(--s-16)}
body.seite-kategorie .maincats.kat-liste{margin-bottom:var(--s-48)}
body.seite-kategorie .kat-titel-link{text-decoration:none;color:inherit}
body.seite-kategorie .kat-anzahl{color:var(--ink-soft);font-size:var(--t-12)}

/* ===== 404.html  (gekapselt in body.seite-404)  A5675 Design 3, 20260910-0610 ===== */
body.seite-404 .nf{padding:var(--s-24) 0 var(--s-48);max-width:760px}
body.seite-404 .nf h1{margin:0 0 var(--f-4)}
body.seite-404 .nf-lead{color:var(--ink-soft);margin:0 0 var(--s-16)}
body.seite-404 .nf-suche label{display:block;font-size:var(--t-13);color:var(--ink-soft);margin-bottom:var(--f-4)}
body.seite-404 .nf-zeile{display:flex;gap:var(--s-8)}
body.seite-404 .nf-zeile input{flex:1;padding:var(--f-12) var(--f-12);font:inherit;font-size:var(--t-16);border:1.5px solid var(--line);border-radius:var(--radius-bedien)}
body.seite-404 .nf-zeile button{background:var(--signal);border:none;padding:0 var(--s-16);border-radius:var(--radius-bedien);font-weight:700;cursor:pointer}
body.seite-404 .nf-wege{list-style:none;display:flex;flex-wrap:wrap;gap:var(--s-8) var(--s-16);padding:0;margin:var(--s-16) 0 0}
body.seite-404 .nf-wege a{color:var(--asphalt)}
body.seite-404 .nf-h2{font-size:var(--t-16);margin:var(--s-24) 0 var(--s-8)}
body.seite-404 .nf-kat{display:flex;flex-wrap:wrap;gap:var(--s-8) var(--s-16)}
body.seite-404 .nf-kat a{color:var(--ink-2);text-decoration:none}
body.seite-404 .nf-kat a:hover{text-decoration:underline}
body.seite-404 .nf-kat em{font-style:normal;color:var(--ink-soft);font-size:var(--t-11);margin-left:var(--f-4);font-variant-numeric:tabular-nums}

/* ===== _kat_baum.html  (Baustein, gekapselt auf die Seiten, die ihn EINBINDEN:
   seite-start, seite-kategorien - gemessen mit grep -l. Global gemacht faerbte er
   Seiten ein, auf denen er gar nicht vorkommt: .bg-tree em bekam auf
   /baugruppe und der Teileart-Seite margin-left 5px statt 0.)
   A5675 Design 3 ===== */
/* Uebernommen aus baugruppe.html, damit der Baum auf allen Seiten gleich aussieht. */
body.seite-start .bg-tree,body.seite-kategorien .bg-tree{background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--f-12) var(--s-8);font-size:var(--t-13);position:sticky;top:calc(var(--header-h,90px) + 12px);max-height:calc(100vh - 120px);overflow:auto}
@media(max-width:900px){body.seite-start .bg-tree,body.seite-kategorien .bg-tree{position:static;max-height:280px}}
body.seite-start .bg-tree h3,body.seite-kategorien .bg-tree h3{font-size:var(--t-16);margin:0 0 var(--s-8)}
body.seite-start .bg-tree h3 a,body.seite-kategorien .bg-tree h3 a{color:var(--asphalt);text-decoration:none}
body.seite-start .bg-tree h3 em,body.seite-kategorien .bg-tree h3 em{font-style:normal;color:var(--ink-soft);font-size:var(--t-12);font-feature-settings:"tnum"}
body.seite-start .bg-tree ul,body.seite-kategorien .bg-tree ul{list-style:none;margin:0;padding:0 0 0 var(--f-12)}
body.seite-start .bg-tree>ul,body.seite-kategorien .bg-tree>ul{padding-left:0}
body.seite-start .bg-tree li,body.seite-kategorien .bg-tree li{margin:var(--f-4) 0}
body.seite-start .bg-tree summary,body.seite-kategorien .bg-tree summary{cursor:pointer;font-weight:600;padding:var(--f-4) 0;color:var(--ink)}
body.seite-start .bg-tree a.blatt,body.seite-kategorien .bg-tree a.blatt{display:block;padding:var(--f-4) 0;color:var(--ink-2);text-decoration:none}
body.seite-start .bg-tree a.blatt:hover,body.seite-kategorien .bg-tree a.blatt:hover{color:var(--asphalt);text-decoration:underline}
body.seite-start .bg-tree em,body.seite-kategorien .bg-tree em{font-style:normal;color:var(--ink-soft);font-size:var(--t-11);font-feature-settings:"tnum";margin-left:var(--f-4)}/* Zwei Spalten: Baum links, Seiteninhalt rechts. Auf dem Handy untereinander. */

body.seite-start .katzwei,body.seite-kategorien .katzwei{display:grid;grid-template-columns:280px minmax(0,1fr);gap:var(--s-16);align-items:start}
body.seite-start .katzwei{gap:var(--s-16)}
body.seite-start .bg-tree{border-width:1px;padding:var(--f-12) var(--f-12) var(--s-8)}
@media(max-width:900px){body.seite-start .katzwei,body.seite-kategorien .katzwei{grid-template-columns:1fr}}

/* ===== _fzwahl.html  (Baustein, gekapselt auf die Seiten, die ihn EINBINDEN:
   seite-baugruppe, seite-start, seite-suche - gemessen mit grep -l. Global gemacht faerbte er
   Seiten ein, auf denen er gar nicht vorkommt: .bg-tree em bekam auf
   /baugruppe und der Teileart-Seite margin-left 5px statt 0.)
   A5675 Design 3 ===== */
/* Geführte Auswahl (Autodoc-Aufbau: Schlüsselnummer + Marke/Modell/Typ, TecDoc-Daten) */
body.seite-baugruppe .vsel,body.seite-start .vsel,body.seite-suche .vsel{background:var(--card);color:var(--ink);border-radius:var(--radius-raster);margin:var(--s-16) 0 var(--s-8);padding:var(--s-24) var(--s-24) var(--s-16);display:grid;grid-template-columns:1fr 1fr;gap:var(--s-16)}
body.seite-baugruppe .vstep,body.seite-start .vstep,body.seite-suche .vstep{display:flex;flex-direction:column;min-width:0}
body.seite-baugruppe .vstep-wide,body.seite-start .vstep-wide,body.seite-suche .vstep-wide,body.seite-baugruppe .vmsg,body.seite-start .vmsg,body.seite-suche .vmsg,body.seite-baugruppe .vload,body.seite-start .vload,body.seite-suche .vload{grid-column:1 / -1}
body.seite-baugruppe .vsel label,body.seite-start .vsel label,body.seite-suche .vsel label{font-size:var(--t-12);font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-soft);margin:0 0 var(--s-8) var(--f-4);display:flex;align-items:center;gap:var(--s-8)}
body.seite-baugruppe .vnum,body.seite-start .vnum,body.seite-suche .vnum{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--signal);color:var(--asphalt);font-size:var(--t-12);font-weight:800;flex:0 0 auto}/* A5676: Zeichnung im Abzeichen statt Emoji - Groesse hier, damit sie in jedem
   Browser gleich sitzt und nicht von der Schriftgroesse des Umfelds abhaengt. */

body.seite-baugruppe .vnum svg,body.seite-start .vnum svg,body.seite-suche .vnum svg{width:12px;height:12px;display:block}
body.seite-baugruppe .vsel select,body.seite-start .vsel select,body.seite-suche .vsel select{width:100%;padding:var(--f-12) var(--f-12);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;font-size:var(--t-16);background:var(--card)}
body.seite-baugruppe .vsel select:focus,body.seite-start .vsel select:focus,body.seite-suche .vsel select:focus{border-color:var(--signal)}
body.seite-baugruppe .vsel select:disabled,body.seite-start .vsel select:disabled,body.seite-suche .vsel select:disabled{background:var(--paper);color:var(--ink-3)}
body.seite-baugruppe .vhide,body.seite-start .vhide,body.seite-suche .vhide{display:none}
body.seite-baugruppe .kbarow,body.seite-start .kbarow,body.seite-suche .kbarow{display:flex;gap:var(--s-8);flex-wrap:wrap}
body.seite-baugruppe .kbarow input,body.seite-start .kbarow input,body.seite-suche .kbarow input{flex:1 1 130px;padding:var(--f-12) var(--f-12);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;font-size:var(--t-16);text-transform:uppercase}
body.seite-baugruppe .kbarow input:focus,body.seite-start .kbarow input:focus,body.seite-suche .kbarow input:focus{border-color:var(--signal)}
body.seite-baugruppe .kbarow .vgo,body.seite-start .kbarow .vgo,body.seite-suche .kbarow .vgo{flex:1 1 200px;cursor:pointer}
body.seite-baugruppe .kba-first,body.seite-start .kba-first,body.seite-suche .kba-first{flex-direction:row;align-items:center;gap:var(--s-16);flex-wrap:wrap}
body.seite-baugruppe .vsel .kba-lab,body.seite-start .vsel .kba-lab,body.seite-suche .vsel .kba-lab{margin:0;font-size:var(--t-16);font-weight:800;text-transform:none;letter-spacing:0;color:var(--ink);flex:0 1 auto;min-width:0}
body.seite-baugruppe .kba-lab .kl-t,body.seite-start .kba-lab .kl-t,body.seite-suche .kba-lab .kl-t{display:flex;flex-direction:column;gap:var(--f-4)}
body.seite-baugruppe .vsel .kba-lab small,body.seite-start .vsel .kba-lab small,body.seite-suche .vsel .kba-lab small{font-size:var(--t-12);font-weight:600;color:var(--ink-soft)}
body.seite-baugruppe .kba-first .kbarow,body.seite-start .kba-first .kbarow,body.seite-suche .kba-first .kbarow{flex:1 1 380px}
body.seite-baugruppe .vstep3,body.seite-start .vstep3,body.seite-suche .vstep3{grid-column:1 / -1;display:grid;grid-template-columns:1fr 1fr 1.4fr;gap:var(--f-12)}
body.seite-baugruppe .vsel-or,body.seite-start .vsel-or,body.seite-suche .vsel-or{position:relative;text-align:center;margin:var(--f-4) 0}
body.seite-baugruppe .vsel-or:before,body.seite-start .vsel-or:before,body.seite-suche .vsel-or:before{content:"";position:absolute;left:0;right:0;top:50%;height:1px;background:var(--line)}
body.seite-baugruppe .vsel-or span,body.seite-start .vsel-or span,body.seite-suche .vsel-or span{position:relative;background:var(--card);padding:0 var(--f-12);color:var(--ink-soft);font-size:var(--t-12);font-weight:700;text-transform:uppercase;letter-spacing:.08em}

body.seite-baugruppe .vgo,body.seite-start .vgo,body.seite-suche .vgo{display:flex;align-items:center;justify-content:center;gap:var(--s-8);background:var(--asphalt);color:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--s-16);font-weight:800;font-size:var(--t-16);text-decoration:none}
body.seite-baugruppe .vgo:hover,body.seite-start .vgo:hover,body.seite-suche .vgo:hover{background:var(--asphalt-2)}
body.seite-baugruppe .vgo svg,body.seite-start .vgo svg,body.seite-suche .vgo svg{width:18px;height:18px}/* Typ-/Fahrzeug-Tabelle */


body.seite-baugruppe .motorbox,body.seite-start .motorbox,body.seite-suche .motorbox{border:1.5px solid var(--line);border-radius:var(--radius-raster);overflow:auto;max-height:420px}
body.seite-baugruppe .motortab,body.seite-start .motortab,body.seite-suche .motortab{width:100%;border-collapse:collapse;font-size:var(--t-14)}
body.seite-baugruppe .motortab th,body.seite-start .motortab th,body.seite-suche .motortab th{position:sticky;top:0;background:var(--paper);text-align:left;font-size:var(--t-11);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);padding:var(--s-8) var(--f-12);border-bottom:1px solid var(--line);white-space:nowrap}
body.seite-baugruppe .motortab td,body.seite-start .motortab td,body.seite-suche .motortab td{padding:var(--f-12) var(--f-12);border-bottom:1px solid var(--line)}
body.seite-baugruppe .motortab tbody tr,body.seite-start .motortab tbody tr,body.seite-suche .motortab tbody tr{cursor:pointer;transition:var(--t)}
body.seite-baugruppe .motortab tbody tr:hover,body.seite-start .motortab tbody tr:hover,body.seite-suche .motortab tbody tr:hover{background:var(--signal-bg)}
body.seite-baugruppe .motortab tbody tr:last-child td,body.seite-start .motortab tbody tr:last-child td,body.seite-suche .motortab tbody tr:last-child td{border-bottom:none}
body.seite-baugruppe .motortab .mt-name,body.seite-start .motortab .mt-name,body.seite-suche .motortab .mt-name{font-weight:700}
body.seite-baugruppe .motortab .mt-sub,body.seite-start .motortab .mt-sub,body.seite-suche .motortab .mt-sub{display:block;font-size:var(--t-12);font-weight:400;color:var(--ink-soft)}
body.seite-baugruppe .motortab .num,body.seite-start .motortab .num,body.seite-suche .motortab .num{font-feature-settings:"tnum";white-space:nowrap}
body.seite-baugruppe .motortab .mt-empty,body.seite-start .motortab .mt-empty,body.seite-suche .motortab .mt-empty{padding:var(--s-16) var(--f-12);color:var(--ink-soft)}

body.seite-baugruppe .vmsg,body.seite-start .vmsg,body.seite-suche .vmsg{color:var(--danger);font-size:var(--t-13);display:none}
body.seite-baugruppe .vload,body.seite-start .vload,body.seite-suche .vload{color:var(--ink-soft);font-size:var(--t-13)}

@media(max-width:760px){
  body.seite-baugruppe .vsel,body.seite-start .vsel,body.seite-suche .vsel{grid-template-columns:1fr;gap:var(--f-12);padding:var(--s-16)}
  body.seite-baugruppe .vstep3,body.seite-start .vstep3,body.seite-suche .vstep3{grid-template-columns:1fr}
  body.seite-baugruppe .vsel .kba-lab,body.seite-start .vsel .kba-lab,body.seite-suche .vsel .kba-lab{font-size:var(--t-16)}
  body.seite-baugruppe .motortab th.opt,body.seite-start .motortab th.opt,body.seite-suche .motortab th.opt,body.seite-baugruppe .motortab td.opt,body.seite-start .motortab td.opt,body.seite-suche .motortab td.opt{display:none}
}/* Kasten-Variante auf Listen-Seiten (vbox): auffällig, aber kompakt */


body.seite-baugruppe .fzwahl-box,body.seite-start .fzwahl-box,body.seite-suche .fzwahl-box{background:var(--signal-bg);color:var(--ink);border:1.5px solid var(--signal-line);border-radius:var(--radius-raster);margin:var(--f-12) 0 var(--s-16)}/* A10704 Design 30.09.2026: der 5-px-Balken links ist weg (Katalog K4; auf Suche und Baugruppe seit 11.09. Listen kompakt ohnehin ueberschrieben, sichtbar war er nur noch auf der Startseite mit Fahrzeug). Gelbe Flaeche und gelber Rahmen bleiben. */
body.seite-baugruppe .fzwahl-box>summary,body.seite-start .fzwahl-box>summary,body.seite-suche .fzwahl-box>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:var(--s-8);flex-wrap:wrap;padding:var(--f-12) var(--s-16);font-size:var(--t-16)}
body.seite-baugruppe .fzwahl-box>summary::-webkit-details-marker,body.seite-start .fzwahl-box>summary::-webkit-details-marker,body.seite-suche .fzwahl-box>summary::-webkit-details-marker{display:none}
body.seite-baugruppe .fzwahl-box>summary svg,body.seite-start .fzwahl-box>summary svg,body.seite-suche .fzwahl-box>summary svg{width:22px;height:22px;color:var(--asphalt);flex:none}
body.seite-baugruppe .fzwahl-box>summary .fzb-sub,body.seite-start .fzwahl-box>summary .fzb-sub,body.seite-suche .fzwahl-box>summary .fzb-sub{color:var(--ink-soft);font-size:var(--t-13)}
/* A10704 Design 30.09.2026: der Aufklapp-Pfeil war ein Textzeichen (Dreieck) als ::after (Schnitt 3: Symbole kommen aus dem Tabler-Satz). Jetzt das Chevron aus _fzwahl.html (Klasse klapp-pfeil), 1em, wie .ast-mark im Baum links; offen = 90 Grad gedreht. Die Regel ist spezifischer als die svg-Regel der Kopfzeile, damit die 22-px-Groesse des Auto-Symbols nicht auf den Pfeil faellt. */
body.seite-baugruppe .fzwahl-box>summary .klapp-pfeil,body.seite-start .fzwahl-box>summary .klapp-pfeil,body.seite-suche .fzwahl-box>summary .klapp-pfeil{width:1em;height:1em;margin-left:auto;color:var(--ink-soft);transition:transform var(--t)}
body.seite-baugruppe .fzwahl-box[open]>summary .klapp-pfeil,body.seite-start .fzwahl-box[open]>summary .klapp-pfeil,body.seite-suche .fzwahl-box[open]>summary .klapp-pfeil{transform:rotate(90deg)}
body.seite-baugruppe .fzwahl-box .fzwahl-in,body.seite-start .fzwahl-box .fzwahl-in,body.seite-suche .fzwahl-box .fzwahl-in{padding:0 var(--f-12) var(--f-12)}
/* A5665 (arbeiter10, 09.09.2026): auf dem Handy zeigt der ZUGEKLAPPTE Fahrzeugkasten trotzdem
   seinen ganzen Inhalt. Gemessen am 09.09. um 20:38 bei 390x844 auf der Suchseite
   "bremsscheibe golf 7": das <details> hat kein open-Merkmal, ist also zu, und der Inhalt
   .fzwahl-in rendert trotzdem 599 Pixel hoch mit display block - eine Regel dieser Datei
   ueberschreibt das Zuklappen des Browsers. Zusammen mit dem Rahmen sind das 735 der 1.747
   Pixel, nach denen der erste Suchtreffer erst kam.
   Nur mobil, und nur solange der Kasten wirklich zu ist: wer ihn antippt, bekommt ihn ganz.
   Die Grenze 900 ist dieselbe, die die Suchseite fuer ihr mobiles Raster benutzt - eine zweite
   Zahl waere eine zweite Wahrheit. */
@media(max-width:900px){body.seite-baugruppe .fzwahl-box:not([open]) .fzwahl-in,body.seite-start .fzwahl-box:not([open]) .fzwahl-in,body.seite-suche .fzwahl-box:not([open]) .fzwahl-in{display:none}/* Der Nebensatz "wir zeigen dir dann nur Teile, die wirklich passen" umbricht auf 390 Pixel in
   mehrere Zeilen und macht die Kopfzeile des Kastens 134 Pixel hoch. Gemessen 09.09. um 20:49.
   Auf dem Handy bleibt die Aufforderung selbst stehen, der Nebensatz geht. */

body.seite-baugruppe .fzwahl-box>summary .fzb-sub,body.seite-start .fzwahl-box>summary .fzb-sub,body.seite-suche .fzwahl-box>summary .fzb-sub{display:none}}
body.seite-baugruppe .fzwahl-box .vsel,body.seite-start .fzwahl-box .vsel,body.seite-suche .fzwahl-box .vsel{border:1px solid var(--line);margin:0;padding:var(--s-16) var(--s-16) var(--f-12)}

/* ===== index.html  (gekapselt in body.seite-start)  A5675 Design 3, 20260910-0616 ===== */
/* Design-Vertrag Startseite (Marcel 10.09.2026 17:19, Freigabe): EIN Abschnittsraster,
   EINE Karte, EIN Kopf. Gemessen vorher (startseite-messung-1009.md): acht vertikale
   Werte, fuenf verschiedene Luecken, zwei Kartensprachen, Vertrauensleiste in 291 statt
   1192 px, weil .trust .wrap (oben, Zeile ~301) ein 4-Spalten-Grid ist und die Startseite
   ein einziges <ul> hineinlegte. Die Leiste ist seit 10.09. 18:01 auf Marcels Wort weg. */
body.seite-start main{padding-bottom:var(--s-48)}
body.seite-start footer.site{margin-top:0}
/* A10620 sichtbar Punkt 2 (29.09.2026): Leerraum zwischen dunklem Waehlerblock und "Autoteile nach Baugruppen" war 91 px
   (gemessen 1440, Teststand 8934). Jetzt 16 px ueber der Versandzeile (.kicker, block-flex statt inline-flex, damit keine
   Zeilenbox-Luft dazukommt, kein unterer Rand) und 16 px Abschnittspolster darunter = --s-32 Leerraum um die Zeile. */
body.seite-start .abschnitt{padding:var(--s-16) 0 0}
body.seite-start .kicker{display:flex;margin:var(--s-16) 0 0}
body.seite-start .abschnitt-kopf{margin:0 0 var(--s-16)}
body.seite-start .abschnitt-kopf h2{font-size:var(--t-26);font-weight:800;line-height:1.15;margin:0}
body.seite-start .abschnitt-kopf .src{color:var(--ink-soft);font-size:var(--t-13);margin:var(--f-4) 0 0}
body.seite-start .abschnitt-kopf .src a{color:var(--asphalt);font-weight:600}
/* DIE Karte: Rahmen, Ruheschatten, Hover hebt 2 px und schattiert - fuer Ware, Baugruppen
   und den Baum links. min-width:0, damit lange Woerter das Raster nicht sprengen
   (gemessen 10.09.: 9 px Querlauf auf 390 px durch "Stoßstangenverstärkung"). */
body.seite-start .karte{display:flex;flex-direction:column;gap:var(--f-4);min-width:0;padding:var(--f-12);background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);color:inherit;text-decoration:none;transition:border-color var(--t)}
body.seite-start .karte:hover{border-color:var(--line-2)}
body.seite-start .hero2{background:var(--asphalt-2);color:var(--card);padding:var(--s-48) 0 var(--s-32)}
/* A10620 Punkt 8 (28.09.2026): h1 der Startseite als sichtbare Ueberschrift (vorher .kicker in --t-12). Hoehe der Zeile
   18 px -> 31 px, der Abstand zum Waehler bleibt dessen margin-top (--s-16). */
body.seite-start .hero2 h1{color:var(--card);font-size:var(--t-26);font-weight:700;line-height:1.2;margin:0}



/* TecDoc-Baugruppen-Kacheln (Startseite, Layout 16.08.) — native <details>, kein JS */


body.seite-start .bg-mehr{margin:var(--s-16) 0 0;text-align:center}
body.seite-start .bg-mehr a{display:inline-block;padding:var(--s-8) var(--s-16);border:1.5px solid var(--line);border-radius:var(--radius-pille);background:var(--card);color:var(--asphalt);font-size:var(--t-14);font-weight:700;text-decoration:none;transition:var(--t)}
body.seite-start .bg-mehr a:hover{border-color:var(--signal);background:var(--signal-bg)}
body.seite-start #baugruppen .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--s-16);align-items:start}
body.seite-start .tile{padding:0;gap:0}
body.seite-start .tile[open],body.seite-start .tile.aktiv{border-color:var(--signal);box-shadow:var(--ring-innen)}
body.seite-start .tile>summary{list-style:none;cursor:pointer;padding:var(--f-12) var(--f-12) var(--f-12);display:flex;flex-direction:column;align-items:flex-start;gap:var(--f-4)}
body.seite-start .tile>summary::-webkit-details-marker{display:none}
body.seite-start .tile .ico{width:54px;height:54px;border-radius:var(--radius-raster);background:var(--signal);display:flex;align-items:center;justify-content:center;flex-shrink:0}
body.seite-start .tile .ico.foto{width:100%;height:auto;aspect-ratio:4/3;background:var(--paper);border-radius:var(--radius-raster);overflow:hidden;align-self:stretch}
body.seite-start .tile .ico.foto img{width:100%;height:100%;object-fit:contain;mix-blend-mode:multiply}
body.seite-start .tile>summary b{font-size:var(--t-16)}
@media(min-width:1600px){body.seite-start #baugruppen .grid{grid-template-columns:repeat(6,1fr)}}
/* Handy: zwei Kacheln je Reihe. Gemessen 10.09. 17:46 bei 390 px: eine Spalte, 18 Kacheln je 340 px hoch, Sektion 6.877 px. */
@media(max-width:520px){body.seite-start #baugruppen .grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-8)}}
body.seite-start .tile .ico svg{width:30px;height:30px;stroke:var(--asphalt);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
body.seite-start .tile .ico:not(.foto){width:100%;height:auto;aspect-ratio:4/3;border-radius:var(--radius-raster);background:var(--paper);align-self:stretch}
body.seite-start .tile .ico:not(.foto) svg{width:46px;height:46px;stroke:var(--signal)}
body.seite-start .tile b{font-size:var(--t-16);line-height:1.3;overflow-wrap:anywhere;hyphens:auto}
body.seite-start .tile .tz{font-size:var(--t-12);color:var(--ink-soft)}
body.seite-start .tile .tsub{display:none}
body.seite-start .tile>summary b{display:block;min-height:2.5em;line-height:1.25;margin-top:var(--f-4)}/* Schnitt 3: Luecke 4 px + 4 px oben = 8 px zum Bild wie vorher, 4 px zur Artikelzahl ohne negativen Rand */
body.seite-start .bg-panel{grid-column:1 / -1;position:relative;background:var(--card);border:1px solid var(--signal);border-radius:var(--radius-raster);padding:var(--s-24) var(--s-24) var(--s-16);margin:var(--s-8) 0 var(--s-8)}
body.seite-start .bg-panel[hidden]{display:none}
/* A5976: Bedienteil (Schliessknopf der Baugruppen-Tafel), Bedienstaffel. */
body.seite-start .bg-close{position:absolute;top:8px;right:12px;border:0;background:none;border-radius:var(--radius-bedien);font-size:var(--t-26);line-height:1;cursor:pointer;color:var(--ink-soft)}
body.seite-start .bg-close svg{width:26px;height:26px;display:block}
body.seite-start .bg-panel h4{margin:0 0 var(--f-12);font-size:var(--t-20);font-weight:800}
body.seite-start .bg-panel .tsub{display:block;columns:4 240px;column-gap:var(--s-32);padding:0;border:0;max-height:none;overflow:visible}
body.seite-start .bg-panel .tsub>.lf{column-span:all;padding:0 0 var(--f-12)}
body.seite-start .bg-panel .lf{display:flex;flex-direction:column;gap:var(--f-4);padding:0}
body.seite-start .bg-panel .tsub .lf a{background:none;border:0;padding:var(--f-4) 0;font-size:var(--t-13);color:var(--ink-2);border-radius:var(--radius-raster)}
body.seite-start .bg-panel .tsub .lf a:hover{color:var(--asphalt);text-decoration:underline;background:none}
body.seite-start .bg-panel .tsub .lf{display:flex;flex-direction:column;gap:var(--f-4);padding:0}
body.seite-start .bg-panel .tsub>.lf{flex-direction:row;flex-wrap:wrap;gap:var(--f-4) var(--s-16)}
body.seite-start .tsub{padding:var(--f-4) var(--f-12) var(--f-12);max-height:340px;overflow:auto;border-top:1px dashed var(--line)}
body.seite-start .tsub .lf{display:flex;flex-wrap:wrap;gap:var(--s-8);padding:var(--s-8) 0 var(--f-4)}
body.seite-start .tsub .lf:empty{display:none}
body.seite-start .tsub .lf a{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius-pille);padding:var(--f-4) var(--f-12);font-size:var(--t-13);color:var(--ink-2);text-decoration:none}
body.seite-start .tsub .lf a:hover{border-color:var(--signal);background:var(--signal-bg);color:var(--asphalt)}
body.seite-start .lf a em{font-style:normal;font-size:var(--t-11);color:var(--ink-soft)}
body.seite-start .tsub-alle{display:inline-block;margin-top:var(--f-12);padding:var(--s-8) var(--s-16);border:1.5px solid var(--line);border-radius:var(--radius-pille);background:var(--card);color:var(--asphalt);font-size:var(--t-13);font-weight:700;text-decoration:none}
body.seite-start .tsub-alle:hover{border-color:var(--signal);background:var(--signal-bg)}
body.seite-start .bg-panel .tsub{columns:auto;column-gap:0}
body.seite-start .bg-panel .tsub>.lf{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:var(--f-4) var(--s-24);padding:0}
body.seite-start .bg-panel .tsub .lf a{display:flex;justify-content:space-between;gap:var(--s-8);padding:var(--f-4) 0;border-bottom:1px dashed var(--line);font-size:var(--t-13);color:var(--ink-2);background:none;border-radius:var(--radius-raster)}
body.seite-start .bg-panel .tsub .lf a em{color:var(--ink-soft);font-feature-settings:"tnum";flex:0 0 auto}

/* ===== kategorien.html  (gekapselt in body.seite-kategorien)  A5675 Design 3, 20260910-0616 ===== */
body.seite-kategorien .katkopf{margin-bottom:var(--s-16)}
body.seite-kategorien .katkopf h1{font-size:var(--t-fluid-1);font-weight:800;line-height:1.12;margin:0 0 var(--f-4)}
body.seite-kategorien .katsub{color:var(--ink-soft);font-size:var(--t-14);margin:0}
body.seite-kategorien .katsub b{color:var(--asphalt)}
body.seite-kategorien .katsub a{color:var(--asphalt)}

body.seite-kategorien .catgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:var(--s-16)}
body.seite-kategorien .catcard{display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);overflow:hidden;transition:var(--t)}
body.seite-kategorien .catcard:hover{border-color:var(--line-2)}
body.seite-kategorien .cathead{display:flex;align-items:center;gap:var(--s-8);padding:var(--s-8) var(--s-16) var(--s-8);text-decoration:none;color:var(--asphalt)}
body.seite-kategorien .catfoto{flex:0 0 auto;width:44px;height:44px;border-radius:var(--radius-raster);background:var(--paper);display:flex;align-items:center;justify-content:center;overflow:hidden}
body.seite-kategorien .catfoto img{max-width:100%;max-height:100%;object-fit:contain}
body.seite-kategorien .cathead-name{flex:1;font-size:var(--t-16);font-weight:800;line-height:1.2;min-width:0}
body.seite-kategorien .cathead:hover .cathead-name{text-decoration:underline}
body.seite-kategorien .catbadge{flex:0 0 auto;background:var(--paper);border-radius:var(--radius-pille);padding:var(--f-4) var(--s-8);font-size:var(--t-12);font-weight:700;color:var(--ink-soft);font-feature-settings:"tnum"}
body.seite-kategorien .catlist{list-style:none;margin:0;padding:var(--s-8) var(--s-16) var(--s-8);flex:1}
body.seite-kategorien .catlist li{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-8);padding:var(--f-4) 0;border-bottom:1px dashed var(--line);font-size:var(--t-13)}
body.seite-kategorien .catlist li:last-child{border-bottom:none}
body.seite-kategorien .catlist a{color:var(--ink-2);text-decoration:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
body.seite-kategorien .catlist a:hover{color:var(--asphalt);text-decoration:underline}
body.seite-kategorien .catn{color:var(--ink-soft);font-size:var(--t-12);font-feature-settings:"tnum";flex:0 0 auto}
body.seite-kategorien .catmore{display:flex;align-items:center;justify-content:center;gap:var(--s-8);margin-top:auto;padding:var(--s-8) var(--s-16);background:var(--paper);border-top:1px solid var(--line);color:var(--asphalt);font-size:var(--t-13);font-weight:700;text-decoration:none;transition:var(--t)}
body.seite-kategorien .catmore:hover{background:var(--signal)}
body.seite-kategorien .catmore svg{width:15px;height:15px}
body.seite-kategorien .katleer{color:var(--ink-soft);font-size:var(--t-16)}

/* ===== baugruppe.html  (gekapselt in body.seite-baugruppe)  A5675 Design 3, 20260910-0616 ===== */
body.seite-baugruppe .crumbs{font-size:var(--t-13);color:var(--ink-soft);margin-bottom:var(--f-12)}
body.seite-baugruppe .crumbs a{color:var(--ink-soft);text-decoration:none}
body.seite-baugruppe .crumbs a:hover{color:var(--asphalt)}
body.seite-baugruppe .tdch h1{font-size:var(--t-fluid-1);font-weight:800;line-height:1.12;margin:0 0 var(--f-4)}
body.seite-baugruppe .tdch-sub{color:var(--ink-soft);font-size:var(--t-14);margin:0 0 var(--f-12) /* Feinstufe erlaubt: Unterzeile gehoert zur Ueberschrift */}
body.seite-baugruppe .tdch-sub a{color:var(--asphalt)}
body.seite-baugruppe .fzhin{background:var(--signal-bg);border:1px solid var(--signal);border-radius:var(--radius-raster);padding:var(--s-8) var(--f-12);font-size:var(--t-13);margin:0 0 var(--f-12)}
body.seite-baugruppe .fzhin.aus{background:var(--paper);border-color:var(--line);color:var(--ink-soft)}
body.seite-baugruppe .fzhin a{color:var(--signal-ink);font-weight:600}/* Zweispalter: Baum links, Liste rechts (Marcel 16.08.) — auf Mobil untereinander */


body.seite-baugruppe .bg-layout{display:grid;grid-template-columns:280px minmax(0,1fr);gap:var(--s-16);align-items:start}
@media(max-width:900px){body.seite-baugruppe .bg-layout{grid-template-columns:minmax(0,1fr)}}/* 02.09.2026 A4287: 1fr hat min-width auto, also hat die Trefferliste (9 Spalten, th mit white-space nowrap, Mindestbreite 716 bis 737 px) die Spur aufgezogen und die ganze Seite mit ihr. Gemessen bei 390 px Fensterbreite: scrollWidth 718 bis 739. minmax(0,1fr) laesst die Spur schrumpfen, dann greift das overflow auto der .artbox und die Tabelle scrollt in SICH statt die Seite breit zu machen. Der Baum links bleibt unveraendert stehen - Marcels Regel vom 23.08. */
body.seite-baugruppe .bg-tree{background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--f-12) var(--s-8);font-size:var(--t-13);position:sticky;top:calc(var(--header-h,90px) + 78px);max-height:calc(100vh - 120px);overflow:auto}
@media(max-width:900px){body.seite-baugruppe .bg-tree{position:static;max-height:280px}}
body.seite-baugruppe .bg-tree h3{font-size:var(--t-16);margin:0 0 var(--s-8)}
body.seite-baugruppe .bg-tree h3 a{color:var(--asphalt);text-decoration:none}
body.seite-baugruppe .bg-tree ul{list-style:none;margin:0;padding:0 0 0 var(--f-12)}
body.seite-baugruppe .bg-tree>ul{padding-left:0}
body.seite-baugruppe .bg-tree li{margin:var(--f-4) 0}
body.seite-baugruppe .bg-tree summary{cursor:pointer;font-weight:600;padding:var(--f-4) 0;color:var(--ink)}
body.seite-baugruppe .bg-tree a.ast-link:hover{color:var(--signal-ink);text-decoration:none}
body.seite-baugruppe .bg-tree a.blatt{display:block;padding:var(--f-4) 0;color:var(--ink-2);text-decoration:none}
body.seite-baugruppe .bg-tree a.blatt:hover{color:var(--asphalt);text-decoration:underline}
body.seite-baugruppe .bg-tree em{font-style:normal;font-size:var(--t-11);color:var(--ink-soft)}
body.seite-baugruppe .bg-tree a.akt{color:var(--signal-ink);font-weight:800}

body.seite-baugruppe .artbox{border:1.5px solid var(--line);border-radius:var(--radius-raster);overflow:auto;background:var(--card)}
body.seite-baugruppe .arttab{width:100%;border-collapse:collapse;font-size:var(--t-14)}
body.seite-baugruppe .arttab th{position:sticky;top:0;background:var(--paper);text-align:left;font-size:var(--t-11);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);padding:var(--f-12) var(--f-12);border-bottom:1px solid var(--line);white-space:nowrap}
body.seite-baugruppe .arttab td{padding:var(--f-12) var(--f-12);border-bottom:1px solid var(--line)}
body.seite-baugruppe .arttab tbody tr{cursor:pointer;transition:var(--t)}
body.seite-baugruppe .arttab tbody tr:hover{background:var(--signal-bg)}
body.seite-baugruppe .arttab tbody tr:last-child td{border-bottom:none}
body.seite-baugruppe .at-name{font-weight:700;display:block;min-width:160px}/* 25.08.2026: gleiche Spalten-Optik wie tdkategorie.html */

body.seite-baugruppe .wrap-breit{max-width:var(--w-breit)}
body.seite-baugruppe .arttab{font-size:var(--t-13)}
body.seite-baugruppe .arttab th{padding:var(--s-8) var(--s-8)}
body.seite-baugruppe .arttab td{padding:var(--s-8) var(--s-8);vertical-align:middle}
body.seite-baugruppe .arttab td.tdimg{width:64px;padding-left:var(--f-12)}
body.seite-baugruppe .arttab td.tdimg img{width:56px;height:56px;object-fit:contain}
/* A5826 (Marcel 12.09.2026): kein Fliesstext in der Bildzelle. Der alt-Text des Platzhalters
   ("Fuer ... liegt noch kein Bild vor") bleibt im HTML fuer Vorleser und Suchmaschinen, wird
   aber nie als Text in der Zelle gemalt (transparent) und die Zelle schneidet ab. */
.arttab td.tdimg{overflow:hidden}
.arttab td.tdimg img{color:transparent}
body.seite-baugruppe .at-marke{font-weight:700;max-width:130px;overflow-wrap:anywhere}
body.seite-baugruppe .at-nr{font-feature-settings:"tnum";color:var(--ink-2);max-width:140px;overflow-wrap:anywhere;font-size:var(--t-13)}
body.seite-baugruppe .at-seite,body.seite-baugruppe .at-lage{color:var(--ink-2);font-size:var(--t-12);max-width:110px}
body.seite-baugruppe .at-oe{font-feature-settings:"tnum";font-size:var(--t-12);color:var(--ink-2);max-width:150px;overflow-wrap:anywhere}
body.seite-baugruppe .at-oe em{display:block;font-style:normal;font-size:var(--t-11);color:var(--ink-soft)}
body.seite-baugruppe .at-fit{display:inline-flex;align-items:flex-start;gap:var(--f-4);margin-top:var(--f-4);padding:var(--f-4) var(--s-8);border-radius:var(--radius-raster);background:var(--signal-bg);border:1px solid var(--signal-line);color:var(--signal-ink-2);font-size:var(--t-12);line-height:1.35;max-width:420px}
body.seite-baugruppe .at-fit svg{flex:0 0 auto;width:15px;height:15px;margin-top:var(--f-4)}
@media(max-width:1400px){body.seite-baugruppe .at-oe,body.seite-baugruppe .arttab th.th-oe{display:none}}
@media(max-width:1300px){body.seite-baugruppe .at-seite,body.seite-baugruppe .at-lage,body.seite-baugruppe .arttab th.th-lage,body.seite-baugruppe .arttab th.th-seite{display:none}}/* 23.08.2026: at-name ist jetzt ein echter Link — Aussehen bleibt wie vorher,
   Browser-Blau und Unterstreichung wuerden die Tabelle sonst zerreissen. */

body.seite-baugruppe a.at-name{color:inherit;text-decoration:none}
body.seite-baugruppe a.at-name:hover{text-decoration:underline}
body.seite-baugruppe .num{font-feature-settings:"tnum";white-space:nowrap}
body.seite-baugruppe .at-empty{padding:var(--s-16) var(--s-8);color:var(--ink-soft);cursor:default}
body.seite-baugruppe .tdimg{width:64px}
body.seite-baugruppe .tdimg img{width:56px;height:56px;object-fit:contain;border-radius:var(--radius-raster);background:var(--paper);display:block}
body.seite-baugruppe .lager{font-size:var(--t-12);color:var(--ink-soft);white-space:normal;line-height:1.3}
body.seite-baugruppe .lager.ok{color:var(--ok-ink);font-weight:700}/* A5664 (09.09.2026): Lieferdatum unter dem Lagerstand, gleiche Regel wie auf
   tdkategorie.html. .del gab es nur in search.html unter .pli-buy, hier also wirkungslos. */

body.seite-baugruppe .arttab .del{display:block;margin-top:var(--f-4);font-size:var(--t-12);color:var(--ok-ink);font-weight:600;white-space:normal;line-height:1.25}
body.seite-baugruppe .tdpreis{text-align:right}
body.seite-baugruppe .tdpreis b{font-size:var(--t-16)}
body.seite-baugruppe .tdpreis .tdmwst{display:block;font-size:var(--t-11);color:var(--ink-soft);font-weight:400}
body.seite-baugruppe .tdkauf{display:flex;gap:var(--f-4);justify-content:flex-end;align-items:center;margin-top:var(--s-8)}
body.seite-baugruppe .tdkauf select{padding:var(--f-4) var(--f-4);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;font-size:var(--t-13);background:var(--card)}
body.seite-baugruppe .tdkauf button{display:flex;align-items:center;justify-content:center;gap:var(--f-4);min-width:38px;height:32px;padding:0 var(--s-8);background:var(--signal);border:none;border-radius:var(--radius-bedien);cursor:pointer;color:var(--asphalt);font:inherit;font-size:var(--t-13);font-weight:800;white-space:nowrap}/* A5679 (arbeiter4, 09.09.2026, Marcel 21:31 "mach die tecdoc-tabellen auch"): Das Wort auf
   dem Kaufknopf stand unter 900 px auf display:none - auf dem Handy blieb nur ein
   Einkaufswagen-Symbol. Es einfach einzublenden half hier NICHT: die Tabelle laeuft auf
   table-layout:fixed, die Preisspalte war bei 390 px nur 85 px breit, und der Knopf blieb
   deshalb auf seiner Mindestbreite von 38 px stehen - das Wort waere im Knopf abgeschnitten
   worden. Gemessen am 09.09. um 21:3x auf /baugruppe/9000060 im 390-Pixel-Fenster.
   Deshalb bekommt die Preisspalte unter 900 px 118 statt 85 Pixel, und der Knopf rutscht
   unter die Mengenwahl und nimmt die volle Zellenbreite. Die 33 Pixel kommen vom
   Artikelnamen (175 -> 156), der laenger ist als er sein muss. Die Mengenwahl bleibt.
   Nachgemessen mit derselben Seite: Knopf 38 -> 108 x 40 px, Wort sichtbar, kein Ueberlauf,
   Tabelle unveraendert 388 px, Seitenbreite unveraendert 390 px - es entsteht also kein
   seitliches Wischen (das war der Fehler von A4287, der hier nicht wiederkommen darf). */

body.seite-baugruppe .tdkauf .kauf-txt{display:inline}
@media(max-width:899px){
  body.seite-baugruppe .arttab .tdpreis{width:118px}
  body.seite-baugruppe .tdkauf{flex-wrap:wrap;gap:var(--f-4);justify-content:flex-end}
  body.seite-baugruppe .tdkauf select{flex:0 0 44px;padding:var(--f-4) var(--f-4)}
  body.seite-baugruppe .tdkauf button{flex:1 1 100%;min-width:0;white-space:normal;line-height:1.15;
                 height:auto;min-height:34px;padding:var(--f-4) var(--s-8);font-size:var(--t-12)}
}
body.seite-baugruppe .tdkauf button:hover{filter:brightness(1.08)}/* A10704 Design: --signal-hover undefiniert, siehe .pli-buy button:hover */
body.seite-baugruppe .tdkauf button svg{width:18px;height:18px}
body.seite-baugruppe .tdpager{display:flex;align-items:center;gap:var(--f-12);margin-top:var(--s-8)}
body.seite-baugruppe .pinfo{color:var(--ink-soft);font-size:var(--t-13)}
body.seite-baugruppe .vgo{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-8);background:var(--asphalt);color:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--f-12) var(--s-16);font-weight:800;font-size:var(--t-14);text-decoration:none}
body.seite-baugruppe .vgo:hover{background:var(--asphalt-2)}
@media(max-width:760px){ body.seite-baugruppe .arttab th.opt,body.seite-baugruppe .arttab td.opt{display:none} }
/* A4287, 02.09.2026: auf dem Handy stand der PREIS ausserhalb des Bildschirms. Gemessen im
   390-Pixel-Fenster (21:23:18): die Seite ist zwar 390 breit, die Tabelle aber 715,9 - sie
   scrollt in sich, und die linke Kante der Preisspalte lag bei x=610, also 220 Pixel hinter
   dem rechten Rand. Ein Kunde sieht auf dem Telefon jede Zeile OHNE Preis, solange er nicht
   seitlich schiebt. Das ist genau Marcels "auf dem handy wie eine bombe" und sein "kunden
   kein kauferlebnis".
   Spaltenbreiten bei 390 px, gemessen 21:23:59: Bild 78, Hersteller 107,4, Artikelnummer
   139,5, Artikelname 180, Verfuegbar 104, Preis 107 - zusammen 715,9.
   Dieselbe Stufenlogik wie oben (1400 px OE weg, 1300 px Lage und Seite weg) wird
   fortgesetzt: unter 560 px fallen Hersteller und Artikelnummer weg, die Kopfzeilen duerfen
   umbrechen statt nowrap zu erzwingen, das Bild wird kleiner und die Polster schmaler.
   Am Desktop aendert sich NICHTS. */
@media(max-width:560px){/* Feste Spaltenaufteilung statt Inhaltsbreite: nur so KANN die Tabelle nicht breiter
     werden als der Kasten. Mit Inhaltsbreite blieben nach dem Ausblenden der zwei Spalten
     immer noch 435 px uebrig (Bild 68, Artikelname 172, Verfuegbar 96, Preis 99, gemessen
     21:25:50) und der Preis stand weiter 46 px hinter dem Rand. */
  
  body.seite-baugruppe .arttab{table-layout:fixed;width:100%}
  body.seite-baugruppe .arttab th{white-space:normal;padding:var(--s-8) var(--f-4);line-height:1.15;font-size:var(--t-11)}
  body.seite-baugruppe .arttab td{padding:var(--s-8) var(--f-4);overflow-wrap:anywhere}
  body.seite-baugruppe .arttab td.tdimg{padding-left:var(--f-4)}
  body.seite-baugruppe .arttab td.tdimg img{width:40px;height:40px}
  body.seite-baugruppe .at-marke,body.seite-baugruppe .arttab th.th-marke{display:none}
  body.seite-baugruppe .at-nr,body.seite-baugruppe .arttab th.th-nr{display:none}/* A5679 (arbeiter4, 09.09.2026): Spaltenaufteilung neu gerechnet, damit der Kaufknopf sein
     Wort tragen kann. Gemessen bei 390 px (Tabelle 388 breit): Bild 70, Artikelname 124,
     Verfuegbar 78, Preis 116 - der Knopf wird damit 106 x 40 statt 38 x 34 und das Wort steht
     auf EINER Zeile. Zwei Dinge muessen dabei mitwandern, sonst wird Text abgeschnitten:
     die Bildspalte braucht 63 px fuer den Blaetterer unter dem Foto (sie hatte nur 50 und
     schnitt ihn schon vor dieser Aenderung ab), und .at-name traegt ein min-width von 160 px,
     das in eine 124 Pixel breite Spalte nicht passt. Das Mindestmass faellt hier weg, der
     Name bricht dann einfach um (overflow-wrap:anywhere steht schon darueber). */
  
  body.seite-baugruppe .at-name{min-width:0}
  body.seite-baugruppe .arttab th.th-bild{width:18%}
  body.seite-baugruppe .arttab th.th-name{width:32%}
  body.seite-baugruppe .arttab th.th-verf{width:20%}
  body.seite-baugruppe .arttab th.th-preis{width:30%}
}

body.seite-baugruppe .tdfilter{display:flex;gap:var(--f-12);align-items:center;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--f-12);margin:0 0 var(--f-12);font-size:var(--t-14);position:sticky;top:calc(var(--header-h,90px) + 8px);z-index:30}
@media(max-width:900px){body.seite-baugruppe .tdfilter{top:8px}}
body.seite-baugruppe .tdfilter select{margin-left:var(--f-4);padding:var(--s-8);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;background:var(--card);max-width:230px}
body.seite-baugruppe .tdfilter .tdpr input{width:84px;margin-left:var(--f-4);padding:var(--s-8);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit}
body.seite-baugruppe .tdf-go{background:var(--asphalt);color:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--s-8) var(--s-16);font-weight:700;font-size:var(--t-13);cursor:pointer}
body.seite-baugruppe .tdf-go:hover{background:var(--asphalt-2)}
body.seite-baugruppe .tdf-x{font-size:var(--t-13);color:var(--signal-ink);text-decoration:none;font-weight:600}
body.seite-baugruppe .tdf-x:hover{text-decoration:underline}

body.seite-baugruppe .gal{position:relative;display:block;width:56px}
body.seite-baugruppe .gal img{width:56px;height:56px;object-fit:contain;border-radius:var(--radius-raster);background:var(--paper);display:block}
body.seite-baugruppe .gal .gp,body.seite-baugruppe .gal .gn{position:absolute;top:50%;transform:translateY(-50%);width:17px;height:26px;border:none;border-radius:var(--radius-bedien);background:var(--overlay-dunkel);color:var(--card);font-size:var(--t-13);line-height:1;cursor:pointer;padding:0;opacity:1;transition:var(--t)}
body.seite-baugruppe .gal .gp{left:-2px}body.seite-baugruppe .gal .gn{right:-2px}

body.seite-baugruppe .gal em{position:absolute;left:50%;bottom:-1px;transform:translateX(-50%);font-style:normal;font-size:var(--t-11);background:var(--overlay-dunkel);color:var(--card);border-radius:var(--radius-raster);padding:0 var(--f-4);pointer-events:none}

/* ===== tdkategorie.html  (gekapselt in body.seite-tdkategorie)  A5675 Design 3, 20260910-0616 ===== */
body.seite-tdkategorie .crumbs{font-size:var(--t-13);color:var(--ink-soft);margin-bottom:var(--f-12)}
body.seite-tdkategorie .crumbs a{color:var(--ink-soft);text-decoration:none}
body.seite-tdkategorie .crumbs a:hover{color:var(--asphalt)}
body.seite-tdkategorie .tdch h1{font-size:var(--t-fluid-1);font-weight:800;line-height:1.12;margin:0 0 var(--f-4)}
body.seite-tdkategorie .tdch .hl{color:var(--ink-soft);font-weight:700}
body.seite-tdkategorie .tdch-sub{color:var(--ink-soft);font-size:var(--t-14);margin:0 0 var(--f-12) /* Feinstufe erlaubt: Unterzeile gehoert zur Ueberschrift */}
body.seite-tdkategorie .tdch-sub a{color:var(--asphalt)}
/* Zweispalter: Baum links, Trefferliste rechts (Marcel 24.08.) — auf Mobil untereinander.
   Gleiche Masse wie auf den /baugruppe-Seiten, damit der Shop nicht zwei Baeume mit
   verschiedenem Aussehen hat. */


body.seite-tdkategorie .bg-layout{display:grid;grid-template-columns:280px minmax(0,1fr);gap:var(--s-16);align-items:start}
@media(max-width:900px){body.seite-tdkategorie .bg-layout{grid-template-columns:minmax(0,1fr)}}/* 02.09.2026 A4287: 1fr hat min-width auto, also hat die Trefferliste (9 Spalten, th mit white-space nowrap, Mindestbreite 716 bis 737 px) die Spur aufgezogen und die ganze Seite mit ihr. Gemessen bei 390 px Fensterbreite: scrollWidth 718 bis 739. minmax(0,1fr) laesst die Spur schrumpfen, dann greift das overflow auto der .artbox und die Tabelle scrollt in SICH statt die Seite breit zu machen. Der Baum links bleibt unveraendert stehen - Marcels Regel vom 23.08. */
body.seite-tdkategorie .bg-tree{background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--f-12) var(--s-8);font-size:var(--t-13);position:sticky;top:calc(var(--header-h,90px) + 20px);max-height:calc(100vh - 120px);overflow:auto}
@media(max-width:900px){body.seite-tdkategorie .bg-tree{position:static;max-height:320px}}
body.seite-tdkategorie .bg-tree h3{font-size:var(--t-16);margin:0 0 var(--s-8)}
body.seite-tdkategorie .bg-tree h3 em{font-style:normal;font-weight:600;font-size:var(--t-11);letter-spacing:.05em;color:var(--ink-soft);display:block}
body.seite-tdkategorie .bg-tree ul{list-style:none;margin:0;padding:0 0 0 var(--f-12)}
body.seite-tdkategorie .bg-tree>ul{padding-left:0}
body.seite-tdkategorie .bg-tree li{margin:var(--f-4) 0}
body.seite-tdkategorie .bg-tree summary{cursor:pointer;font-weight:600;padding:var(--f-4) 0;color:var(--ink)}
body.seite-tdkategorie .bg-tree a.ast-link:hover{color:var(--signal-ink);text-decoration:none}
body.seite-tdkategorie .bg-tree a.blatt{display:block;padding:var(--f-4) 0;color:var(--ink-2);text-decoration:none}
body.seite-tdkategorie .bg-tree a.blatt:hover{color:var(--asphalt);text-decoration:underline}
body.seite-tdkategorie .bg-tree em{font-style:normal;font-size:var(--t-11);color:var(--ink-soft)}
body.seite-tdkategorie .bg-tree a.akt{color:var(--signal-ink);font-weight:800}
body.seite-tdkategorie .bg-leer{color:var(--ink-soft);font-size:var(--t-13);margin:0}

body.seite-tdkategorie .artbox{border:1.5px solid var(--line);border-radius:var(--radius-raster);overflow:auto;background:var(--card)}
body.seite-tdkategorie .arttab{width:100%;border-collapse:collapse;font-size:var(--t-14)}
body.seite-tdkategorie .arttab th{position:sticky;top:0;background:var(--paper);text-align:left;font-size:var(--t-11);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);padding:var(--f-12) var(--f-12);border-bottom:1px solid var(--line);white-space:nowrap}
body.seite-tdkategorie .arttab td{padding:var(--f-12) var(--f-12);border-bottom:1px solid var(--line)}
body.seite-tdkategorie .arttab tbody tr{cursor:pointer;transition:var(--t)}
body.seite-tdkategorie .arttab tbody tr:hover{background:var(--signal-bg)}
body.seite-tdkategorie .arttab tbody tr:last-child td{border-bottom:none}
body.seite-tdkategorie .at-name{font-weight:700}/* 23.08.2026: at-name ist jetzt ein echter Link — Aussehen bleibt wie vorher,
   Browser-Blau und Unterstreichung wuerden die Tabelle sonst zerreissen. */

body.seite-tdkategorie a.at-name{color:inherit;text-decoration:none}
body.seite-tdkategorie a.at-name:hover{text-decoration:underline}
/* 25.08.2026: Acht Spalten brauchen Platz — im Browser gerendert (1600 px breit) lagen
   Lage, Verfuegbar und Preis rechts ausserhalb der Box hinter einem Querscroll, weil
   .wrap bei 1240 px endet. Diese Seite darf breiter: 1560 px. Zellen kompakter,
   Hersteller/Nummer duerfen umbrechen, unter 1300 px fallen Seite/Lage weg. */

body.seite-tdkategorie .wrap-breit{max-width:var(--w-breit)}
body.seite-tdkategorie .arttab{font-size:var(--t-13)}
body.seite-tdkategorie .arttab th{padding:var(--s-8) var(--s-8)}
body.seite-tdkategorie .arttab td{padding:var(--s-8) var(--s-8);vertical-align:middle}
body.seite-tdkategorie .arttab td.tdimg{width:64px;padding-left:var(--f-12)}
body.seite-tdkategorie .arttab td.tdimg img{width:56px;height:56px;object-fit:contain}
body.seite-tdkategorie .at-marke{font-weight:700;max-width:130px;overflow-wrap:anywhere}
body.seite-tdkategorie .at-nr{font-feature-settings:"tnum";color:var(--ink-2);max-width:140px;overflow-wrap:anywhere;font-size:var(--t-13)}
body.seite-tdkategorie .at-name{display:block;min-width:160px}
body.seite-tdkategorie .at-seite,body.seite-tdkategorie .at-lage{color:var(--ink-2);font-size:var(--t-12);max-width:110px}
body.seite-tdkategorie .at-oe{font-feature-settings:"tnum";font-size:var(--t-12);color:var(--ink-2);max-width:150px;overflow-wrap:anywhere}
body.seite-tdkategorie .at-oe em{display:block;font-style:normal;font-size:var(--t-11);color:var(--ink-soft)}/* Fahrzeugeinschraenkung als Hinweis-Plakette unter dem Namen (Marcel 25.08.: "anders
   positioniert") — gleiche Farbwelt wie "Passt an dein Fahrzeug" auf der Artikelseite. */

body.seite-tdkategorie .at-fit{display:inline-flex;align-items:flex-start;gap:var(--f-4);margin-top:var(--f-4);padding:var(--f-4) var(--s-8);border-radius:var(--radius-raster);background:var(--signal-bg);border:1px solid var(--signal-line);color:var(--signal-ink-2);font-size:var(--t-12);line-height:1.35;max-width:420px}
body.seite-tdkategorie .at-fit svg{flex:0 0 auto;width:15px;height:15px;margin-top:var(--f-4)}
/* A5826 (arbeiter11, 12.09.2026): these two rules named their headers BY POSITION. Since
   95bd0f7 the columns Lage and Seite are only rendered when a list carries values, so on a
   list without them position 6 is "Verfuegbar" and position 7 is "Preis" - the price header
   would vanish below 1300 px while its cells stay. The headers carry th-* classes now
   (tdkategorie.html, baugruppe.html, reihe_teileart.html), so the rule no longer depends on
   how many columns exist. Same change one block further down for seite-baugruppe. */
@media(max-width:1400px){body.seite-tdkategorie .at-oe,body.seite-tdkategorie .arttab th.th-oe{display:none}}
@media(max-width:1300px){body.seite-tdkategorie .at-seite,body.seite-tdkategorie .at-lage,body.seite-tdkategorie .arttab th.th-lage,body.seite-tdkategorie .arttab th.th-seite{display:none}}
body.seite-tdkategorie .num{font-feature-settings:"tnum";white-space:nowrap}
body.seite-tdkategorie .at-empty{padding:var(--s-16) var(--s-8);color:var(--ink-soft);cursor:default}
body.seite-tdkategorie .tdimg{width:64px}
body.seite-tdkategorie .tdimg img{width:56px;height:56px;object-fit:contain;border-radius:var(--radius-raster);background:var(--paper);display:block}
/* A5679 (arbeiter4, 09.09.2026): Diese Datei hatte ZWEI .lager-Regeln, die sich
   widersprachen - eine mit white-space:normal weiter oben, und diese hier mit nowrap
   darunter. Die spaetere gewann, also brach "Auf Lager: 10+ Stueck" nie um. Gemessen am
   09.09. um 21:5x im 390-Pixel-Fenster: 30 Zellen der Verfuegbar-Spalte brauchten 136 px
   und hatten 78 - der Text lief unter dem Preis weiter. baugruppe.html hat an derselben
   Stelle seit jeher normal. Die obere Regel ist entfernt, diese traegt den Umbruch. */

body.seite-tdkategorie .lager{font-size:var(--t-12);color:var(--ink-soft);white-space:normal;line-height:1.3}
body.seite-tdkategorie .lager.ok{color:var(--ok-ink);font-weight:700}/* A5664 (09.09.2026): Lieferdatum unter dem Lagerstand. Die Klasse .del gab es nur in
   search.html und dort NUR unter .pli-buy, also hier ohne Wirkung - deshalb eine eigene
   Regel statt eines Verweises. Gleiches Gruen wie .lager.ok, aber leichter, damit die
   Stueckzahl die Hauptaussage bleibt. Umbruch erlaubt: der Satz ist laenger als die Spalte. */

body.seite-tdkategorie .arttab .del{display:block;margin-top:var(--f-4);font-size:var(--t-12);color:var(--ok-ink);font-weight:600;white-space:normal;line-height:1.25}
body.seite-tdkategorie .tdpreis{text-align:right}
body.seite-tdkategorie .tdpreis b{font-size:var(--t-16)}
body.seite-tdkategorie .tdpreis .tdmwst{display:block;font-size:var(--t-11);color:var(--ink-soft);font-weight:400}/* Direkt-in-den-Warenkorb (Mengenfeld + Korb-Symbol, Marcel 16.08.) */

body.seite-tdkategorie .tdkauf{display:flex;gap:var(--f-4);justify-content:flex-end;align-items:center;margin-top:var(--s-8)}
body.seite-tdkategorie .tdkauf select{padding:var(--f-4) var(--f-4);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;font-size:var(--t-13);background:var(--card)}
body.seite-tdkategorie .tdkauf button{display:flex;align-items:center;justify-content:center;gap:var(--f-4);min-width:38px;height:32px;padding:0 var(--s-8);background:var(--signal);border:none;border-radius:var(--radius-bedien);cursor:pointer;color:var(--asphalt);font:inherit;font-size:var(--t-13);font-weight:800;white-space:nowrap}/* A5679 (arbeiter4, 09.09.2026, Marcel 21:31 "mach die tecdoc-tabellen auch"): Das Wort auf
   dem Kaufknopf stand unter 900 px auf display:none - auf dem Handy blieb nur ein
   Einkaufswagen-Symbol. Es einfach einzublenden half hier NICHT: die Tabelle laeuft auf
   table-layout:fixed, die Preisspalte war bei 390 px nur 85 px breit, und der Knopf blieb
   deshalb auf seiner Mindestbreite von 38 px stehen - das Wort waere im Knopf abgeschnitten
   worden. Gemessen am 09.09. um 21:3x auf /baugruppe/9000060 im 390-Pixel-Fenster.
   Deshalb bekommt die Preisspalte unter 900 px 118 statt 85 Pixel, und der Knopf rutscht
   unter die Mengenwahl und nimmt die volle Zellenbreite. Die 33 Pixel kommen vom
   Artikelnamen (175 -> 156), der laenger ist als er sein muss. Die Mengenwahl bleibt.
   Nachgemessen mit derselben Seite: Knopf 38 -> 108 x 40 px, Wort sichtbar, kein Ueberlauf,
   Tabelle unveraendert 388 px, Seitenbreite unveraendert 390 px - es entsteht also kein
   seitliches Wischen (das war der Fehler von A4287, der hier nicht wiederkommen darf). */

body.seite-tdkategorie .tdkauf .kauf-txt{display:inline}
@media(max-width:899px){
  body.seite-tdkategorie .arttab .tdpreis{width:118px}
  body.seite-tdkategorie .tdkauf{flex-wrap:wrap;gap:var(--f-4);justify-content:flex-end}
  body.seite-tdkategorie .tdkauf select{flex:0 0 44px;padding:var(--f-4) var(--f-4)}
  body.seite-tdkategorie .tdkauf button{flex:1 1 100%;min-width:0;white-space:normal;line-height:1.15;
                 height:auto;min-height:34px;padding:var(--f-4) var(--s-8);font-size:var(--t-12)}
}
body.seite-tdkategorie .tdkauf button:hover{filter:brightness(1.08)}/* A10704 Design: --signal-hover undefiniert, siehe .pli-buy button:hover */
body.seite-tdkategorie .tdkauf button svg{width:18px;height:18px}
body.seite-tdkategorie .tdpager{display:flex;align-items:center;gap:var(--f-12);margin-top:var(--s-8)}
body.seite-tdkategorie .pinfo{color:var(--ink-soft);font-size:var(--t-13)}
body.seite-tdkategorie .vgo{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-8);background:var(--asphalt);color:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--f-12) var(--s-16);font-weight:800;font-size:var(--t-14);text-decoration:none}
body.seite-tdkategorie .vgo:hover{background:var(--asphalt-2)}
@media(max-width:760px){ body.seite-tdkategorie .arttab th.opt,body.seite-tdkategorie .arttab td.opt{display:none} }

/* A5679 (arbeiter4, 09.09.2026, Marcel 21:31 "mach die tecdoc-tabellen auch"): Diese Seite
   hatte als einzige der beiden TecDoc-Tabellen ueberhaupt keinen Bauplan fuer schmale
   Bildschirme - der Umbau von A4287 hat am 02.09. nur baugruppe.html erreicht. Gemessen am
   09.09. um 21:4x auf .../wischblatt-298.html im 390-Pixel-Fenster: neun Spalten teilten sich
   die Breite, Artikelname und Preis bekamen je 65 Pixel, die Tabelle war mit 408 Pixel breiter
   als das Fenster. Ab jetzt gilt hier derselbe Bauplan wie in der Baugruppen-Tabelle:
   Hersteller und Artikelnummer fallen weg, die vier verbleibenden Spalten haben feste
   Anteile, und die Preisspalte ist breit genug fuer den beschrifteten Kaufknopf. */
@media(max-width:560px){
  body.seite-tdkategorie .arttab{table-layout:fixed;width:100%}
  body.seite-tdkategorie .arttab th{white-space:normal;padding:var(--s-8) var(--f-4);line-height:1.15;font-size:var(--t-11)}
  body.seite-tdkategorie .arttab td{padding:var(--s-8) var(--f-4);overflow-wrap:anywhere}
  body.seite-tdkategorie .arttab td.tdimg{padding-left:var(--f-4)}
  body.seite-tdkategorie .arttab td.tdimg img{width:40px;height:40px}
  body.seite-tdkategorie .at-marke,body.seite-tdkategorie .arttab th.th-marke{display:none}
  body.seite-tdkategorie .at-nr,body.seite-tdkategorie .arttab th.th-nr{display:none}/* A5679 (arbeiter4, 09.09.2026): Spaltenaufteilung neu gerechnet, damit der Kaufknopf sein
     Wort tragen kann. Gemessen bei 390 px (Tabelle 388 breit): Bild 70, Artikelname 124,
     Verfuegbar 78, Preis 116 - der Knopf wird damit 106 x 40 statt 38 x 34 und das Wort steht
     auf EINER Zeile. Zwei Dinge muessen dabei mitwandern, sonst wird Text abgeschnitten:
     die Bildspalte braucht 63 px fuer den Blaetterer unter dem Foto (sie hatte nur 50 und
     schnitt ihn schon vor dieser Aenderung ab), und .at-name traegt ein min-width von 160 px,
     das in eine 124 Pixel breite Spalte nicht passt. Das Mindestmass faellt hier weg, der
     Name bricht dann einfach um (overflow-wrap:anywhere steht schon darueber). */
  
  body.seite-tdkategorie .at-name{min-width:0}
  body.seite-tdkategorie .arttab th.th-bild{width:18%}
  body.seite-tdkategorie .arttab th.th-name{width:32%}
  body.seite-tdkategorie .arttab th.th-verf{width:20%}
  body.seite-tdkategorie .arttab th.th-preis{width:30%}
}/* Filterleiste (16.08.) — bleibt beim Scrollen stehen (Marcel 12:00), wie die
   Toolbar der Suche: unter dem sticky Header, auf Mobil (statischer Header) oben. */


body.seite-tdkategorie .tdfilter{display:flex;gap:var(--f-12);align-items:center;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--f-12);margin:0 0 var(--f-12);font-size:var(--t-14)}/* 23.08.2026 (Marcel: "siehst du den balken Sortieren der steht nicht oben"):
   Der Balken war position:sticky mit top:calc(var(--header-h,90px)+8px). Die
   Variable --header-h ist nirgends gesetzt, also galt immer der Ruecktfallwert
   90px — zu wenig, seit unter dem Kopf zusaetzlich die gelbe Fahrzeug-Leiste
   sitzt. Der Balken schwebte dadurch ueber der Ueberschrift. Jetzt steht er
   normal oben ueber der Liste und verdeckt nichts mehr. */

body.seite-tdkategorie .tdfilter select{margin-left:var(--f-4);padding:var(--s-8);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;background:var(--card);max-width:230px}/* A5664 (09.09.2026): Haekchen "Nur Lagerware". .fcheck stand nur in search.html unter
   .ftoolbar und war hier wirkungslos. Kein margin-left wie bei select, weil das Kaestchen
   VOR dem Text steht. */

body.seite-tdkategorie .tdfilter .fcheck{display:flex;align-items:center;gap:var(--s-8);font-weight:600;cursor:pointer}
body.seite-tdkategorie .tdfilter .fcheck input{width:16px;height:16px;cursor:pointer}
body.seite-tdkategorie .tdfilter .tdpr input{width:84px;margin-left:var(--f-4);padding:var(--s-8);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit}
body.seite-tdkategorie .tdf-go{background:var(--asphalt);color:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--s-8) var(--s-16);font-weight:700;font-size:var(--t-13);cursor:pointer}
body.seite-tdkategorie .tdf-go:hover{background:var(--asphalt-2)}
body.seite-tdkategorie .tdf-x{font-size:var(--t-13);color:var(--signal-ink);text-decoration:none;font-weight:600}
body.seite-tdkategorie .tdf-x:hover{text-decoration:underline}/* Mini-Galerie in der Trefferliste (weitere Bilder, 16.08.) */


body.seite-tdkategorie .gal{position:relative;display:block;width:56px}
body.seite-tdkategorie .gal img{width:56px;height:56px;object-fit:contain;border-radius:var(--radius-raster);background:var(--paper);display:block}
body.seite-tdkategorie .gal .gp,body.seite-tdkategorie .gal .gn{position:absolute;top:50%;transform:translateY(-50%);width:17px;height:26px;border:none;border-radius:var(--radius-bedien);background:var(--overlay-dunkel);color:var(--card);font-size:var(--t-13);line-height:1;cursor:pointer;padding:0;opacity:1;transition:var(--t)}
body.seite-tdkategorie .gal .gp{left:-2px}body.seite-tdkategorie .gal .gn{right:-2px}

body.seite-tdkategorie .gal em{position:absolute;left:50%;bottom:-1px;transform:translateX(-50%);font-style:normal;font-size:var(--t-11);background:var(--overlay-dunkel);color:var(--card);border-radius:var(--radius-raster);padding:0 var(--f-4);pointer-events:none}

/* ===== tdfahrzeug.html  (gekapselt in body.seite-tdfahrzeug)  A5675 Design 3, 20260910-0616 ===== */
  body.seite-tdfahrzeug .fzrenner,body.seite-start-fz .fzrenner{margin:var(--s-16) 0 var(--f-4)}
  body.seite-tdfahrzeug .fzrenner h2,body.seite-start-fz .fzrenner h2{font-size:var(--t-20);margin:0 0 var(--f-4)}
  body.seite-tdfahrzeug .fzrenner .fzr-src,body.seite-start-fz .fzrenner .fzr-src{font-size:var(--t-14);color:var(--ink-soft);margin:0 0 var(--f-12)}
  body.seite-tdfahrzeug .fzrenner .fzr-grid,body.seite-start-fz .fzrenner .fzr-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(175px,1fr));gap:var(--f-12)}
  body.seite-tdfahrzeug .fzrenner .fzr-card,body.seite-start-fz .fzrenner .fzr-card{display:flex;flex-direction:column;gap:var(--f-4);padding:var(--s-8);border:1px solid var(--line);border-radius:var(--radius-raster);background:var(--card);text-decoration:none;color:inherit;transition:border-color var(--t)}
  body.seite-tdfahrzeug .fzrenner .fzr-card:hover,body.seite-start-fz .fzrenner .fzr-card:hover{border-color:var(--line-2)}
  body.seite-tdfahrzeug .fzrenner .fzr-img,body.seite-start-fz .fzrenner .fzr-img{display:block;aspect-ratio:1/1;background:var(--card);border-radius:var(--radius-raster);overflow:hidden}
  body.seite-tdfahrzeug .fzrenner .fzr-img img,body.seite-start-fz .fzrenner .fzr-img img{width:100%;height:100%;object-fit:contain}
  body.seite-tdfahrzeug .fzrenner .fzr-name,body.seite-start-fz .fzrenner .fzr-name{font-size:var(--t-14);line-height:1.25;min-height:2.3em}
  body.seite-tdfahrzeug .fzrenner .fzr-preis,body.seite-start-fz .fzrenner .fzr-preis{font-weight:700;font-size:var(--t-16)}
  @media(max-width:520px){body.seite-tdfahrzeug .fzrenner .fzr-grid,body.seite-start-fz .fzrenner .fzr-grid{grid-template-columns:repeat(2,1fr);gap:var(--s-8)}}
  
body.seite-tdfahrzeug .crumbs,body.seite-start-fz .crumbs{font-size:var(--t-13);color:var(--ink-soft);margin-bottom:var(--f-12)}
body.seite-tdfahrzeug .crumbs a,body.seite-start-fz .crumbs a{color:var(--ink-soft);text-decoration:none}
body.seite-tdfahrzeug .crumbs a:hover,body.seite-start-fz .crumbs a:hover{color:var(--asphalt)}

body.seite-tdfahrzeug .tdveh,body.seite-start-fz .tdveh{display:flex;align-items:center;gap:var(--s-16);background:var(--asphalt);color:var(--card);border-radius:var(--radius-raster);padding:var(--s-16) var(--s-24);margin-bottom:var(--s-24)}/* 02.09.2026 (A4213): aus dem 52er Symbolkasten wird ein Bildfeld. Marcel prueft auf
   dem Handy, darum bleibt es dort sichtbar - nur schmaler. */

body.seite-tdfahrzeug .tdveh-ico,body.seite-start-fz .tdveh-ico{flex:0 0 auto;width:112px;height:64px;border-radius:var(--radius-raster);background:var(--overlay-signal);display:flex;align-items:center;justify-content:center;color:var(--signal)}
body.seite-tdfahrzeug .tdveh-ico svg,body.seite-start-fz .tdveh-ico svg{width:92px;height:42px}
body.seite-tdfahrzeug .tdveh h1,body.seite-start-fz .tdveh h1{font-size:var(--t-fluid-1);font-weight:800;line-height:1.15;margin:0 0 var(--f-4)}
body.seite-tdfahrzeug .tdveh .hl,body.seite-start-fz .tdveh .hl{color:var(--signal)}
body.seite-tdfahrzeug .tdveh-sub,body.seite-start-fz .tdveh-sub{color:var(--line-2);font-size:var(--t-13);margin:0}
body.seite-tdfahrzeug .tdveh-sub b,body.seite-start-fz .tdveh-sub b{color:var(--card)}
body.seite-tdfahrzeug .tdveh-sub a,body.seite-start-fz .tdveh-sub a{color:var(--signal);text-decoration:underline;text-underline-offset:.15em}
body.seite-tdfahrzeug .tdveh-sub a:hover,body.seite-start-fz .tdveh-sub a:hover{text-decoration-thickness:.12em}

body.seite-tdfahrzeug .catgrid,body.seite-start-fz .catgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:var(--s-16)}
body.seite-tdfahrzeug .catcard,body.seite-start-fz .catcard{display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);overflow:hidden;transition:var(--t)}
body.seite-tdfahrzeug .catcard:hover,body.seite-start-fz .catcard:hover{border-color:var(--line-2)}
body.seite-tdfahrzeug .cathead,body.seite-start-fz .cathead{display:flex;align-items:center;justify-content:space-between;gap:var(--s-8);padding:var(--s-8) var(--s-16) var(--s-8);text-decoration:none;color:var(--asphalt)}
/* A10620 sichtbar Punkt 5 (29.09.2026): "Kommunikations-/Informationssysteme, Universal" ragte bei 1440 samt Zaehler 38 px
   ueber die Karte (gemessen Teststand 8934: Name 288 px in 298 px Karte, Flex-Kind schrumpft nicht unter min-content).
   min-width:0 plus Umbruch wie bei den Startseiten-Kacheln (.tile b). */
body.seite-tdfahrzeug .cathead-name,body.seite-start-fz .cathead-name{flex:1 1 auto;min-width:0;overflow-wrap:anywhere;hyphens:auto;font-size:var(--t-16);font-weight:800;line-height:1.2}
body.seite-tdfahrzeug .cathead:hover .cathead-name,body.seite-start-fz .cathead:hover .cathead-name{text-decoration:underline}
body.seite-tdfahrzeug .catbadge,body.seite-start-fz .catbadge{flex:0 0 auto;background:var(--paper);border-radius:var(--radius-pille);padding:var(--f-4) var(--s-8);font-size:var(--t-12);font-weight:700;color:var(--ink-soft);font-feature-settings:"tnum"}
body.seite-tdfahrzeug .catlist,body.seite-start-fz .catlist{list-style:none;margin:0;padding:var(--s-8) var(--s-16) var(--s-8);flex:1}
body.seite-tdfahrzeug .catlist li,body.seite-start-fz .catlist li{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-8);padding:var(--f-4) 0;border-bottom:1px dashed var(--line);font-size:var(--t-13)}
body.seite-tdfahrzeug .catlist li:last-child,body.seite-start-fz .catlist li:last-child{border-bottom:none}
body.seite-tdfahrzeug .catlist a,body.seite-start-fz .catlist a{color:var(--ink-2);text-decoration:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
body.seite-tdfahrzeug .catlist a:hover,body.seite-start-fz .catlist a:hover{color:var(--asphalt);text-decoration:underline}
body.seite-tdfahrzeug .catn,body.seite-start-fz .catn{color:var(--ink-soft);font-size:var(--t-12);font-feature-settings:"tnum";flex:0 0 auto}
body.seite-tdfahrzeug .catmore,body.seite-start-fz .catmore{display:flex;align-items:center;justify-content:center;gap:var(--s-8);margin-top:auto;padding:var(--s-8) var(--s-16);background:var(--paper);border-top:1px solid var(--line);color:var(--asphalt);font-size:var(--t-13);font-weight:700;text-decoration:none;transition:var(--t)}
body.seite-tdfahrzeug .catmore:hover,body.seite-start-fz .catmore:hover{background:var(--signal)}
body.seite-tdfahrzeug .catmore svg,body.seite-start-fz .catmore svg{width:15px;height:15px}
body.seite-tdfahrzeug .tdempty,body.seite-start-fz .tdempty{color:var(--ink-soft);font-size:var(--t-16)}
@media(max-width:600px){ body.seite-tdfahrzeug .tdveh,body.seite-start-fz .tdveh{padding:var(--s-16)}
  body.seite-tdfahrzeug .tdveh-ico,body.seite-start-fz .tdveh-ico{width:84px;height:48px;border-radius:var(--radius-raster)}body.seite-tdfahrzeug .tdveh-ico svg,body.seite-start-fz .tdveh-ico svg{width:70px;height:32px} }

/* ===== tdwahl.html  (gekapselt in body.seite-tdwahl)  A5675 Design 3, 20260910-0616 ===== */
body.seite-tdwahl .crumbs{font-size:var(--t-13);color:var(--ink-soft);margin-bottom:var(--f-12)}
body.seite-tdwahl .crumbs a{color:var(--ink-soft);text-decoration:none}
body.seite-tdwahl .crumbs a:hover{color:var(--asphalt)}
body.seite-tdwahl .fw-head .kicker{color:var(--signal-ink);font-size:var(--t-12);font-weight:700;letter-spacing:.02em}
body.seite-tdwahl .fw-head h1{font-size:var(--t-fluid-2);font-weight:800;line-height:1.08;margin:var(--s-8) 0 var(--s-8)}
body.seite-tdwahl .fw-head .hl{color:var(--ink-soft)}
body.seite-tdwahl .fw-head .lead{color:var(--ink-soft);font-size:var(--t-16);max-width:680px;line-height:1.5;margin-bottom:var(--s-16)}
body.seite-tdwahl .fwbox{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);margin:var(--s-24) 0 var(--s-8);padding:var(--s-24);display:grid;gap:var(--s-16);max-width:760px}
body.seite-tdwahl .vstep{display:flex;flex-direction:column;min-width:0}
body.seite-tdwahl .fwbox label{font-size:var(--t-12);font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-soft);margin:0 0 var(--s-8) var(--f-4);display:flex;align-items:center;gap:var(--s-8)}
body.seite-tdwahl .vnum{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--signal);color:var(--asphalt);font-size:var(--t-12);font-weight:800}
body.seite-tdwahl .fwbox select{width:100%;padding:var(--f-12) var(--f-12);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;font-size:var(--t-16);background:var(--card)}
body.seite-tdwahl .fwbox select:focus{border-color:var(--signal)}
body.seite-tdwahl .fwbox select:disabled{background:var(--paper);color:var(--ink-3)}
body.seite-tdwahl .kbarow{display:flex;gap:var(--s-8);flex-wrap:wrap}
body.seite-tdwahl .kbarow input{flex:1 1 120px;padding:var(--f-12) var(--f-12);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;font-size:var(--t-16);text-transform:uppercase}
body.seite-tdwahl .kbarow input:focus{border-color:var(--signal)}
body.seite-tdwahl .kbarow .vgo{flex:1 1 180px}
body.seite-tdwahl .vhide{display:none}
body.seite-tdwahl .vgo{display:flex;align-items:center;justify-content:center;gap:var(--s-8);background:var(--asphalt);color:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--s-16);font-weight:800;font-size:var(--t-16);text-decoration:none;cursor:pointer}
body.seite-tdwahl .vgo:hover{background:var(--asphalt-2)}
body.seite-tdwahl .motorbox{border:1.5px solid var(--line);border-radius:var(--radius-raster);overflow:auto;max-height:460px}
body.seite-tdwahl .motortab{width:100%;border-collapse:collapse;font-size:var(--t-14)}
body.seite-tdwahl .motortab th{position:sticky;top:0;background:var(--paper);text-align:left;font-size:var(--t-11);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);padding:var(--s-8) var(--f-12);border-bottom:1px solid var(--line);white-space:nowrap}
body.seite-tdwahl .motortab td{padding:var(--f-12) var(--f-12);border-bottom:1px solid var(--line)}
body.seite-tdwahl .motortab tbody tr{cursor:pointer;transition:var(--t)}
body.seite-tdwahl .motortab tbody tr:hover{background:var(--signal-bg)}
body.seite-tdwahl .motortab tbody tr:last-child td{border-bottom:none}
body.seite-tdwahl .motortab .mt-name{font-weight:700}
body.seite-tdwahl .motortab .mt-sub{display:block;font-size:var(--t-12);font-weight:400;color:var(--ink-soft)}
body.seite-tdwahl .motortab .num{font-feature-settings:"tnum";white-space:nowrap}
body.seite-tdwahl .motortab .mt-empty{padding:var(--s-16) var(--f-12);color:var(--ink-soft)}
body.seite-tdwahl .vmsg{color:var(--danger);font-size:var(--t-13);display:none}
body.seite-tdwahl .vload{color:var(--ink-soft);font-size:var(--t-13)}
@media(max-width:760px){
  body.seite-tdwahl .fwbox{padding:var(--s-16)}
  body.seite-tdwahl .motortab th.opt,body.seite-tdwahl .motortab td.opt{display:none}
}

/* ===== fahrzeugwahl.html  (gekapselt in body.seite-fahrzeugwahl)  A5675 Design 3, 20260910-0616 ===== */
body.seite-fahrzeugwahl .crumbs{font-size:var(--t-13);color:var(--ink-soft);margin-bottom:var(--f-12)}
body.seite-fahrzeugwahl .crumbs a{color:var(--ink-soft);text-decoration:none}
body.seite-fahrzeugwahl .crumbs a:hover{color:var(--asphalt)}
body.seite-fahrzeugwahl .fw-head .kicker{color:var(--signal-ink);font-size:var(--t-12);font-weight:700;letter-spacing:.02em}
body.seite-fahrzeugwahl .fw-head h1{font-size:var(--t-fluid-2);font-weight:800;line-height:1.08;margin:var(--s-8) 0 var(--s-8)}
body.seite-fahrzeugwahl .fw-head .hl{color:var(--ink-soft)}
body.seite-fahrzeugwahl .fw-head .lead{color:var(--ink-soft);font-size:var(--t-16);max-width:680px;line-height:1.5;margin-bottom:var(--s-16)}/* Bereich-Reiter (wie Startseite/Polcar) */


body.seite-fahrzeugwahl .btabs{display:flex;flex-wrap:wrap;gap:var(--s-8);margin-bottom:var(--s-8)}
body.seite-fahrzeugwahl .btab{flex:0 1 auto;min-width:150px;background:var(--paper);border:1.5px solid var(--line);border-radius:var(--radius-bedien);padding:var(--f-12) var(--f-12);text-decoration:none;color:var(--ink);transition:var(--t)}
body.seite-fahrzeugwahl a.btab:hover{border-color:var(--line-2);background:var(--card)}
body.seite-fahrzeugwahl .btab.on{background:var(--asphalt);border-color:var(--asphalt);color:var(--card)}
body.seite-fahrzeugwahl .btab b{display:block;font-size:var(--t-14);font-weight:700}
body.seite-fahrzeugwahl .btab span{font-size:var(--t-12);color:var(--ink-soft)}
body.seite-fahrzeugwahl .btab.on span{color:var(--line-2)}

body.seite-fahrzeugwahl .fwbox{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);margin:var(--s-24) 0 var(--s-8);padding:var(--s-24);display:grid;gap:var(--s-16);max-width:760px}
body.seite-fahrzeugwahl .vstep{display:flex;flex-direction:column;min-width:0}
body.seite-fahrzeugwahl .fwbox label{font-size:var(--t-12);font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-soft);margin:0 0 var(--s-8) var(--f-4);display:flex;align-items:center;gap:var(--s-8)}
body.seite-fahrzeugwahl .vnum{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--signal);color:var(--asphalt);font-size:var(--t-12);font-weight:800}
body.seite-fahrzeugwahl .fwbox select{width:100%;padding:var(--f-12) var(--f-12);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;font-size:var(--t-16);background:var(--card)}
body.seite-fahrzeugwahl .fwbox select:focus{border-color:var(--signal)}
body.seite-fahrzeugwahl .fwbox select:disabled{background:var(--paper);color:var(--ink-3)}
body.seite-fahrzeugwahl .vhide{display:none}

body.seite-fahrzeugwahl .vgo{display:flex;align-items:center;justify-content:center;gap:var(--s-8);background:var(--asphalt);color:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--s-16);font-weight:800;font-size:var(--t-16);text-decoration:none}
body.seite-fahrzeugwahl .vgo:hover{background:var(--asphalt-2)}
body.seite-fahrzeugwahl .vgo svg{width:18px;height:18px}

body.seite-fahrzeugwahl .motorbox{border:1.5px solid var(--line);border-radius:var(--radius-raster);overflow:auto;max-height:460px}
body.seite-fahrzeugwahl .motortab{width:100%;border-collapse:collapse;font-size:var(--t-14)}
body.seite-fahrzeugwahl .motortab th{position:sticky;top:0;background:var(--paper);text-align:left;font-size:var(--t-11);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);padding:var(--s-8) var(--f-12);border-bottom:1px solid var(--line);white-space:nowrap}
body.seite-fahrzeugwahl .motortab td{padding:var(--f-12) var(--f-12);border-bottom:1px solid var(--line)}
body.seite-fahrzeugwahl .motortab tbody tr{cursor:pointer;transition:var(--t)}
body.seite-fahrzeugwahl .motortab tbody tr:hover{background:var(--signal-bg)}
body.seite-fahrzeugwahl .motortab tbody tr:last-child td{border-bottom:none}
body.seite-fahrzeugwahl .motortab .mt-name{font-weight:700}
body.seite-fahrzeugwahl .motortab .mt-sub{display:block;font-size:var(--t-12);font-weight:400;color:var(--ink-soft)}
body.seite-fahrzeugwahl .motortab .num{font-feature-settings:"tnum";white-space:nowrap}
body.seite-fahrzeugwahl .motortab .mt-empty{padding:var(--s-16) var(--f-12);color:var(--ink-soft)}
body.seite-fahrzeugwahl .motortab tr.mt-universal{background:var(--signal-bg)}
body.seite-fahrzeugwahl .motortab tr.mt-universal:hover{background:var(--signal-bg)}
body.seite-fahrzeugwahl .motortab tr.mt-universal .mt-name{color:var(--signal-ink)}
body.seite-fahrzeugwahl .vmsg{color:var(--danger);font-size:var(--t-13);display:none}
body.seite-fahrzeugwahl .vload{color:var(--ink-soft);font-size:var(--t-13)}

@media(max-width:760px){
  body.seite-fahrzeugwahl .fwbox{padding:var(--s-16)}
  body.seite-fahrzeugwahl .btab{min-width:0;flex:1 1 auto}
  body.seite-fahrzeugwahl .motortab th.opt,body.seite-fahrzeugwahl .motortab td.opt{display:none}
}


/* ===== Listen kompakt (Marcel 11.09.2026 06:46, drei Vorgaben fuer die Kategorie-/Fahrzeuglisten) =====
   Gemessen live 11.09. 06:47 auf /baugruppe/9000078 (Lenkung) und der GLC-Lenkungsliste bei 1440:
   Fahrzeugkasten 282 px hoch (Inhalt beginnt bei 704 px), gelbe Flaeche mit 5-px-Balken,
   Auswahlfelder 215 px; jede Artikelzeile 100 px (Preis, MwSt-Zeile und Kaufknopf
   untereinander), Bild 56 px. Diese Regeln stehen HINTER den Seitenbloecken und gewinnen
   bei gleicher Spezifitaet ueber die Quellreihenfolge. Nur Token, kein neuer Wert.
   1. Fahrzeugkasten: weisse Karte, --radius, --shadow-sm, Felder in einer Reihe.
   2. Zeile: Preis und MwSt in einer Zeile, Kaufzeile enger, Zellen 8 px statt 10 px.
   3. Bild 64 px statt 56 px (Handy 48 statt 40), Spalte 72 px. */
body.seite-baugruppe .fzwahl-box,body.seite-suche .fzwahl-box{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);margin:var(--s-8) 0 var(--f-12)}
body.seite-baugruppe .fzwahl-box>summary,body.seite-suche .fzwahl-box>summary{padding:var(--s-8) var(--f-12);font-size:var(--t-14)}
body.seite-baugruppe .fzwahl-box>summary svg,body.seite-suche .fzwahl-box>summary svg{width:18px;height:18px}
body.seite-baugruppe .fzwahl-box .fzwahl-in,body.seite-suche .fzwahl-box .fzwahl-in{padding:0 var(--f-12) var(--f-12)}
body.seite-baugruppe .fzwahl-box .vsel,body.seite-suche .fzwahl-box .vsel{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--s-8) var(--f-12);padding:var(--s-8) var(--f-12);border:1px solid var(--line);margin:0}
body.seite-baugruppe .fzwahl-box .vsel label,body.seite-suche .fzwahl-box .vsel label{font-size:var(--t-11);margin:0 0 var(--f-4) var(--f-4)}
body.seite-baugruppe .fzwahl-box .vsel select,body.seite-suche .fzwahl-box .vsel select,body.seite-baugruppe .fzwahl-box .kbarow input,body.seite-suche .fzwahl-box .kbarow input{padding:var(--s-8) var(--s-8);font-size:var(--t-14)}
body.seite-baugruppe .fzwahl-box .vsel .kba-lab,body.seite-suche .fzwahl-box .vsel .kba-lab{font-size:var(--t-14)}
body.seite-baugruppe .fzwahl-box .vsel .kba-lab small,body.seite-suche .fzwahl-box .vsel .kba-lab small{font-size:var(--t-11)}
body.seite-baugruppe .fzwahl-box .kba-first,body.seite-suche .fzwahl-box .kba-first{flex:1 1 300px;gap:var(--s-8);min-width:0}
@media(max-width:1500px){body.seite-baugruppe .fzwahl-box .kba-lab small,body.seite-suche .fzwahl-box .kba-lab small{display:none}}
body.seite-baugruppe .fzwahl-box .kba-first .kbarow,body.seite-suche .fzwahl-box .kba-first .kbarow{flex:1 1 220px;gap:var(--f-4);min-width:0}
body.seite-baugruppe .fzwahl-box .kbarow .vgo,body.seite-suche .fzwahl-box .kbarow .vgo{flex:1 1 120px;padding:var(--s-8) var(--s-8);font-size:var(--t-14)}
body.seite-baugruppe .fzwahl-box .kbarow input,body.seite-suche .fzwahl-box .kbarow input{flex:1 1 84px}
body.seite-baugruppe .fzwahl-box .vsel-or,body.seite-suche .fzwahl-box .vsel-or{flex:0 0 auto;margin:0;align-self:center;padding-bottom:var(--f-4)}
body.seite-baugruppe .fzwahl-box .vsel-or:before,body.seite-suche .fzwahl-box .vsel-or:before{display:none}
body.seite-baugruppe .fzwahl-box .vsel-or span,body.seite-suche .fzwahl-box .vsel-or span{padding:0;font-size:var(--t-11)}
body.seite-baugruppe .fzwahl-box .vstep3,body.seite-suche .fzwahl-box .vstep3{flex:1 1 300px;gap:var(--s-8);grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1.3fr);min-width:0}
body.seite-baugruppe .fzwahl-box .vsel select,body.seite-suche .fzwahl-box .vsel select,body.seite-baugruppe .fzwahl-box .vstep,body.seite-suche .fzwahl-box .vstep{min-width:0}
body.seite-baugruppe .fzwahl-box #kba-result,body.seite-suche .fzwahl-box #kba-result{flex:1 1 100%}
body.seite-baugruppe .fzwahl-box .vmsg,body.seite-suche .fzwahl-box .vmsg,body.seite-baugruppe .fzwahl-box .vload,body.seite-suche .fzwahl-box .vload{flex:1 1 100%}
@media(max-width:760px){
  body.seite-baugruppe .fzwahl-box .vsel,body.seite-suche .fzwahl-box .vsel{gap:var(--s-8);padding:var(--s-8)}
  body.seite-baugruppe .fzwahl-box .vsel-or,body.seite-suche .fzwahl-box .vsel-or{flex:1 1 100%;text-align:left;padding:0}
}
body.seite-baugruppe .arttab td,body.seite-tdkategorie .arttab td{padding:var(--s-8) var(--s-8)}
body.seite-baugruppe .arttab .tdimg,body.seite-tdkategorie .arttab .tdimg{width:72px}
body.seite-baugruppe .arttab td.tdimg img, body.seite-tdkategorie .arttab td.tdimg img{width:64px;height:64px}
body.seite-baugruppe .arttab .del,body.seite-tdkategorie .arttab .del{margin-top:var(--f-4)}
body.seite-baugruppe .tdpreis .tdmwst,body.seite-tdkategorie .tdpreis .tdmwst{display:inline;margin-left:var(--f-4)}
body.seite-baugruppe .tdkauf,body.seite-tdkategorie .tdkauf{margin-top:var(--f-4)}
body.seite-baugruppe .tdkauf select,body.seite-tdkategorie .tdkauf select{padding:var(--f-4) var(--f-4)}
body.seite-baugruppe .tdkauf button,body.seite-tdkategorie .tdkauf button{height:30px}
/* Go-Live-Pruefung 13.09. Punkt 20 (Recht): der Zusatz "inkl. 19 % MwSt." je Zeile ragte bei 390 px 21 bis 77 px ueber den
   rechten Rand (gemessen /baugruppe/1 rechts 411-420 px, Fahrzeug-Kategorie 452-467 px) und war auf dem Handy unsichtbar;
   auch die Kurzform "inkl. MwSt." passte nicht in die Preiszelle (116 px), ein Umbruch machte jede Zeile 17 bis 20 px
   hoeher. Darum unter 900 px: Hinweis je Zeile aus, die Preis-Spalte heisst "Preis inkl. MwSt." (Spaltenkopf bleibt
   bei 390 px sichtbar, 116 px breit, eine Zeile). Zeilen- und Seitenhoehe unveraendert. */
@media(max-width:899px){
  body.seite-baugruppe .tdpreis .tdmwst,body.seite-tdkategorie .tdpreis .tdmwst{display:none}
  body.seite-baugruppe .arttab td.tdimg img,body.seite-tdkategorie .arttab td.tdimg img{width:48px;height:48px}
  body.seite-baugruppe .arttab td,body.seite-tdkategorie .arttab td{padding:var(--f-4) var(--f-4)}
}

/* ============================================================
   A5775 (11.09.2026, Paket 5): der Hilfsklassen-Block von A5675 ist WEG.
   Seine u-Regeln sind in Paket 1 bis 4 durch benannte Klassen ersetzt und
   zuletzt entfernt worden; hier stand nur noch sein Kopf ueber einem leeren
   Block. Der EINE Satz daraus, der weiter gilt, weil er die Reihenfolge
   erklaert: die benannten Klassen darunter stehen bewusst ganz am Dateiende,
   damit sie bei gleicher Spezifitaet gewinnen.
   ============================================================ */

/* --- A5773 (11.09.2026): benannte Klassen statt u-Hilfsklassen in den Listen-Vorlagen ---
   Ein Name je BEDEUTUNG. Die Werte sind unveraendert aus den alten u-Regeln uebernommen -
   dieses Paket benennt um, es gestaltet nicht um; das Umstellen der Abstaende auf die
   8er-Staffel ist Ticket T4 und braucht eine eigene, gewollte Messung.
   Der Seitenrahmen-Abstand ist EINE Klasse, sein Wert kommt aus dem Seitenblock:
   20/0/44 ist der Normalfall (baugruppe, tdkategorie, reihe_teileart), die beiden
   Abweichungen stehen als Seitenblock-Regel darueber. */
.seite-abstand{padding:var(--s-16) 0 var(--s-48)}
body.seite-kategorien .seite-abstand,body.seite-tdfahrzeug .seite-abstand,body.seite-start-fz .seite-abstand{padding:var(--s-8) 0 var(--s-48)}
body.seite-tdwahl .seite-abstand,
body.seite-fahrzeugwahl .seite-abstand{padding:var(--s-16) 0 var(--s-32)}
.hinweis-signal{background:var(--signal-bg);border:1px solid var(--signal-line);padding:var(--s-24) var(--s-16)}/* A10704 Design: Balken links weg (Katalog K4), Rahmen wie die anderen Hinweiskaesten (.oe-hint, .lagehinweis). */
.panel-scroll{padding:0;overflow-x:auto}
.zelle-rechts{text-align:right}
.reihe-hersteller{margin:var(--s-8) 0 var(--s-8)}
.pager-abstand{margin-top:var(--s-16)}
.reihe-motoren-titel{margin-top:var(--s-32)}
.reihe-motoren-hinweis{margin-top:var(--f-4)}
.motorliste{columns:2;list-style:none;padding:0;margin-top:var(--s-8)}
.motorliste li{break-inside:avoid;padding:var(--f-4) 0}

/* A5774: letzte u-Hilfsregeln entfernt - nach Paket 3 und 4 nutzt KEINE Vorlage mehr eine
   u-Klasse (geprueft je Regel ueber alle Vorlagen, .py und .js; der einzige Treffer in
   search.html steht in einem Kommentar). Damit ist der u-Block leer. */
/* --- A5774 (11.09.2026): benannte Klassen statt u-Hilfsklassen in trade, versand, widerruf ---
   Fortsetzung von A5773, gleiche Regel: EIN Name je BEDEUTUNG, Werte unveraendert aus den
   alten u-Regeln uebernommen. Dieses Paket benennt um, es gestaltet NICHT um - das Umstellen
   der Abstaende auf die 8er-Staffel ist Ticket T4 und braucht seine eigene, gewollte Messung.
   .zelle-rechts wird NICHT neu angelegt: die Regel von A5773 hat dieselbe Bedeutung
   (rechtsbuendige Tabellenzelle) und wird hier nur mitbenutzt. */
.tr-hint-fahrzeug{font-weight:700;color:var(--asphalt)}
.tr-hint-link{font-weight:700}
.tr-treffer-titel{font-weight:800;font-size:var(--t-16);margin-bottom:var(--s-8)}
.tr-fussnote{margin-top:var(--s-8)}
/* .tr-kat-kind traegt den Wert der alten u-Regel unveraendert weiter. GEMESSEN 11.09. 10:33:
   auf den Kategorie-Verweisen wirkt er NICHT - dort gilt eine speziellere Regel mit 8px, die
   alte u-Klasse war an dieser Stelle also schon wirkungslos. Die Regel bleibt trotzdem stehen,
   weil dieses Paket umbenennt und nicht umgestaltet; wer sie entfernen will, braucht eine
   eigene gewollte Messung (Ticket T4). */
.tr-kat-kind{padding-left:var(--s-16)}
.vs-tabelle-rollen{overflow-x:auto;margin-bottom:var(--s-16)}
.vs-tabelle-eng{min-width:0}
.wd-spalte{max-width:640px}
.wd-absatz{margin-bottom:var(--s-16)}

/* Grundpreis (PAngV, A5900, Marcel 12.09.2026): fertiger Text aus dem Kontext "(19,68 €/l)", direkt neben dem
   Preis, gleiche Groesse wie der MwSt-Hinweis daneben (Listen --t-11, Kaufbox --t-12), Klasse .nr aus dem Token-System. */
/* A10620 Punkt 6: Grundpreis (PAngV-Pflichtangabe) und MwSt-Hinweis in Grau 2 statt Grau 3 - Grau 3 auf Papier 2,78:1, auf Weiss 3,09:1;
   Grau 2 auf Papier 5,60:1, auf Weiss 6,22:1 (WCAG-Rechnung 28.09.2026). */
.grundpreis{font-size:var(--t-11);font-weight:400;color:var(--ink-soft);white-space:nowrap;margin-left:var(--f-4)}
.buybox .ptag .grundpreis{display:inline;font-size:var(--t-12);color:var(--ink-soft);margin-left:var(--s-8)}
body.seite-artikel .sb-price .grundpreis{font-size:var(--t-11);color:var(--ink-soft)}
body.seite-suche .pli-buy .grundpreis{display:inline;margin:0 0 0 var(--f-4)}

/* A5901 Startseite mit Fahrzeug: die Fahrzeugseiten-Regeln oben gelten ueber body.seite-start-fz mit (mechanisch
   verdoppelte Selektoren), dazu nur die zugeklappte Wahl-Box unter dem Einstieg. */
body.seite-start-fz .hero2-zu{padding-top:0}
body.seite-start-fz .hero2-zu .fz-alle{margin:var(--s-8) 0 0}

/* --- A5785 (11.09.2026): Set als Sparangebot am Einzelteil, Bestandteile am Set ---------
   Marcel 11.09. 10:06: "Set als Sparangebot am Einzelteil". Die Karte sitzt DIREKT unter der
   Kaufbox, weil sie eine Kaufentscheidung ist und keine Empfehlung am Seitenende.
   Farbe: die gruene Bedeutungsfamilie (--ok-*) wie die Passungsmeldung .tdfit darueber, nicht
   das Signalgelb der Kaufbox. Der gelbe Knopf ist der Hauptweg; ein zweiter gelber Knopf
   daneben waere zwei Hauptwege.
   Welle 2 (29.09.2026), Anpassung an den Live-Stand 1e2b612: nur Token (Staffel --s/--f,
   --radius-raster fuer Karten, --radius-bedien fuer den Knopf, --t fuer transition), kein
   Schatten (Karten tragen 1-px-Rahmen), Knopf auf Asphalt statt Gruen: Weiss auf --ok hat
   4,37:1 (axe, A10620 29.09.), Weiss auf --asphalt besteht; Asphalt ist laut Token-System die
   Farbe "dunkle Knoepfe". */
.setspar{margin-top:var(--s-16);background:var(--ok-bg);border:1px solid var(--ok-line);border-radius:var(--radius-raster);padding:var(--s-16)}
.setspar-kopf{font-size:var(--t-16);font-weight:700;color:var(--ok-ink);margin:0 0 var(--s-8)}
.setspar-karte{display:flex;align-items:center;gap:var(--s-16);background:var(--card);border:1px solid var(--ok-line);border-radius:var(--radius-raster);padding:var(--s-8)}
.setspar-karte + .setspar-karte{margin-top:var(--s-8)}
.setspar-bild{flex:0 0 auto;display:block;width:72px;height:72px}
.setspar-bild img{width:100%;height:100%;object-fit:contain}
.setspar-text{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:var(--f-4)}
.setspar-name{font-weight:700;color:var(--ink);text-decoration:none}
.setspar-name:hover{text-decoration:underline}
.setspar-teile{font-size:var(--t-12);color:var(--ink-soft)}
/* A10704 Teil 2: worin sich zwei Sets mit gleichem Titel unterscheiden */
.setspar-unterschied{font-size:var(--t-12);font-weight:600;color:var(--ink);overflow-wrap:anywhere}
.setspar-preis{font-weight:800;font-size:var(--t-20);color:var(--ink)}
.setspar-einzeln{font-weight:400;font-size:var(--t-12);color:var(--ink-soft);text-decoration:line-through}
.setspar-ersparnis{font-weight:700;font-size:var(--t-13);color:var(--ok-ink)}
.setspar-form{flex:0 0 auto}
.setspar-knopf{background:var(--asphalt);border:none;border-radius:var(--radius-bedien);color:var(--card);font-weight:700;font-size:var(--t-14);padding:var(--s-8) var(--s-16);transition:var(--t);cursor:pointer}
.setspar-knopf:hover{background:var(--asphalt-2)}
/* Schmales Fenster: die Karte bricht auf zwei Zeilen, der Knopf laeuft ueber die volle
   Breite - sonst quetscht er den Namen auf zwei Zeichen (gemessen bei 390px). */
@media(max-width:560px){
  .setspar-karte{flex-wrap:wrap}
  .setspar-form{flex:1 1 100%}
  .setspar-knopf{width:100%}
}
.setinhalt{list-style:none;padding:0;margin:var(--s-8) 0 0}
.setinhalt li{display:flex;align-items:baseline;gap:var(--s-8);padding:var(--s-8) 0;border-bottom:1px solid var(--line)}
.setinhalt li:last-child{border-bottom:none}
.setinhalt-name{font-weight:700;color:var(--ink);text-decoration:none}
.setinhalt-name:hover{text-decoration:underline}
.setinhalt-marke{font-size:var(--t-13);color:var(--ink-soft)}
.setinhalt-menge{margin-left:auto;font-weight:700}
/* Set-Marke in den Trefferlisten (A5785). Bewusst die ruhige Pille und nicht das Signalgelb:
   sie sagt, WAS die Zeile ist, nicht dass sie ein Angebot ist. */
.setmarke{display:inline-block;margin-left:var(--s-8);padding:0 var(--s-8);border:1px solid var(--ok-line);background:var(--ok-bg);color:var(--ok-ink);border-radius:var(--radius-pille);font-family:'Barlow','Barlow Ersatz','Barlow Ersatz Roboto',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;font-size:var(--t-11);font-weight:700;text-transform:none;letter-spacing:0;vertical-align:middle}
/* A10704 (29.09.2026): Anzeigename eines Sets in den Listen. Der Name aus dem Inhalt ist laenger als
   der Name aus den Stammdaten. Am Handy machte er einzelne Zeilen hoeher (gemessen bei 390 px:
   Baugruppenliste 103,8 -> 129,8, Suche 270,6 -> 281). Er endet dort deshalb nach vier bzw. zwei
   Zeilen - so viel Platz hatten Name und Pille vorher. Der volle Name steht auf der Artikelseite. */
@media(max-width:560px){
  body.seite-baugruppe a.at-name.setname,body.seite-tdkategorie a.at-name.setname{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;line-clamp:4;overflow:hidden}
}
@media(max-width:820px){
  body.seite-suche .pli-info h3 a.setname{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}
}
/* ============================================================
   A10658 D3 (29.09.2026): Merkzettel. Knopf .mv-btn (data-merk) auf Artikelseite und in allen
   Listen, Seite /merkzettel. Bedienteil -> --radius-bedien, Feinstufen; Zustand "on" = Herz
   gefuellt in Signalgelb (fill ueber Token). Der Kopf-Zaehler ist die vorhandene .cart-n.
   ============================================================ */
.mv-knoepfe{display:inline-flex;gap:var(--f-4);align-items:center;flex-wrap:wrap}
.mv-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--f-4);min-width:32px;height:32px;padding:0 var(--s-8);background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius-bedien);color:var(--ink-soft);cursor:pointer;font:inherit;font-size:var(--t-13);font-weight:600;white-space:nowrap;transition:var(--t)}
.mv-btn:hover{border-color:var(--line-2);color:var(--ink)}
.mv-btn:disabled{opacity:.6;cursor:wait}
.mv-btn svg{width:18px;height:18px;flex-shrink:0}
.mv-btn.on{border-color:var(--signal);color:var(--ink)}
.mv-btn.on[data-merk] svg{fill:var(--signal);color:var(--signal-ink)}
.mv-hinweis{font-size:var(--t-12);color:var(--signal-ink);margin-left:var(--s-8)}
.mv-hinweis:empty{display:none}
.mv-gross{margin-top:var(--f-12)}
.mv-gross .mv-btn{height:40px;padding:0 var(--f-12)}
/* Seite /merkzettel: Zeile = Bild, Text, Kaufblock (Bauart der Suchliste, eigene Klassen, weil die
   Suchregeln an body.seite-suche haengen). Ab 640 px abwaerts stapelt der Kaufblock unter den Text. */
body.seite-merkzettel .merk-liste{display:grid;gap:var(--f-12);margin-top:var(--s-16)}
body.seite-merkzettel .merk-zeile{display:grid;grid-template-columns:96px minmax(0,1fr) auto;gap:var(--s-16);align-items:center;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--s-16)}
body.seite-merkzettel .merk-zeile:hover{border-color:var(--line-2)}
body.seite-merkzettel .merk-bild img{width:96px;height:76px;object-fit:contain;background:var(--paper);display:block;border-radius:var(--radius-raster)}
body.seite-merkzettel .merk-name{margin:0 0 var(--f-4);font-size:var(--t-16);line-height:1.3;font-weight:600}
body.seite-merkzettel .merk-name a{text-decoration:none;color:inherit;overflow-wrap:anywhere}
body.seite-merkzettel .merk-name a:hover{text-decoration:underline}
body.seite-merkzettel .merk-meta{font-size:var(--t-13);color:var(--ink-soft)}
body.seite-merkzettel .merk-liefer{font-size:var(--t-12);color:var(--ok-ink);font-weight:600;margin-top:var(--f-4)}
body.seite-merkzettel .merk-liefer.out{color:var(--ink-soft)}
body.seite-merkzettel .merk-kauf{display:grid;gap:var(--s-8);justify-items:end;text-align:right;border-left:1px dashed var(--line);padding-left:var(--s-16)}
body.seite-merkzettel .merk-preis{font-family:'Barlow Condensed',system-ui;font-size:var(--t-26);font-weight:800;line-height:1}
body.seite-merkzettel .merk-mwst{font-size:var(--t-11);color:var(--ink-soft)}
body.seite-merkzettel .merk-kauf form{display:flex;gap:var(--s-8);align-items:center}
body.seite-merkzettel .merk-kauf select{padding:var(--s-8);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;background:var(--card)}
body.seite-merkzettel .merk-kauf form button{display:inline-flex;align-items:center;gap:var(--s-8);background:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--s-8) var(--f-12);font-weight:700;font-size:var(--t-14);color:var(--ink);cursor:pointer;white-space:nowrap;transition:var(--t)}
body.seite-merkzettel .merk-kauf form button svg{width:18px;height:18px}
body.seite-merkzettel .merk-kauf form button:hover{filter:brightness(1.08)}/* A10704 Design: Kaufknopf hatte transition, aber keinen Hover. */
body.seite-merkzettel .merk-weg{font-size:var(--t-13);padding:var(--f-4) var(--f-12)}
body.seite-merkzettel .noprice{font-size:var(--t-14);color:var(--ink-soft)}
@media(max-width:640px){
  body.seite-merkzettel .merk-zeile{grid-template-columns:72px minmax(0,1fr)}
  body.seite-merkzettel .merk-bild img{width:72px;height:60px}
  body.seite-merkzettel .merk-kauf{grid-column:1 / -1;border-left:none;border-top:1px dashed var(--line);padding:var(--f-12) 0 0;justify-items:stretch;text-align:left}
  body.seite-merkzettel .merk-kauf form{flex-wrap:wrap}
  body.seite-merkzettel .merk-kauf form button{flex:1;justify-content:center;padding:var(--f-12)}
}

/* A10658 D3 Pfand (29.09.2026): fertiger Text aus dem Kontext "inkl. 23,80 € Pfand" direkt neben dem Preis,
   gleiche Groesse und Farbe wie der Grundpreis-Hinweis (.grundpreis): Listen --t-11, Kaufbox --t-12, Grau 2. */
.pfand{font-size:var(--t-11);font-weight:400;color:var(--ink-soft);white-space:nowrap;margin-left:var(--f-4)}
.buybox .ptag .pfand{display:inline;font-size:var(--t-12);color:var(--ink-soft);margin-left:var(--s-8)}
body.seite-artikel .sb-price .pfand{font-size:var(--t-11);color:var(--ink-soft)}
body.seite-suche .pli-buy .pfand{display:inline;margin:0 0 0 var(--f-4)}
body.seite-merkzettel .merk-preis .pfand,body.seite-merkzettel .merk-preis .grundpreis{font-family:'Barlow',system-ui,sans-serif}
/* Pfand UNTER dem Preis: die Preise der Zeilen stehen sonst nicht buendig (mit Pfand rueckt der Preis nach links). */
body.seite-merkzettel .merk-preis .pfand{display:block;margin:var(--f-4) 0 0}

/* ============================================================
   A10658 D4 (29.09.2026): Produktvergleich. Knopf .mv-btn[data-vgl] (Zustand "on" = Hinweisgrund),
   Leiste .vgl-leiste am unteren Fensterrand, Seite /vergleich (Tabelle, Spalte je Artikel, rollt in sich).
   ============================================================ */
.mv-btn.on[data-vgl]{background:var(--signal-bg)}
.vgl-leiste{position:fixed;left:0;right:0;bottom:0;z-index:90;display:flex;align-items:center;justify-content:center;gap:var(--s-8);min-height:44px;background:var(--asphalt);color:var(--card);padding:var(--s-8) var(--s-16);border-top:2px solid var(--signal);box-shadow:var(--shadow-kopf);text-decoration:none;font-size:var(--t-14);font-weight:700;transition:var(--t)}
.vgl-leiste[hidden]{display:none}
.vgl-leiste:hover{background:var(--asphalt-2)}
.vgl-leiste svg{width:18px;height:18px}
.vgl-leiste b{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 var(--f-4);border-radius:var(--radius-pille);background:var(--signal);color:var(--asphalt);font-size:var(--t-12)}
@media print{.vgl-leiste{display:none}}
body.seite-vergleich .vgl-rollen{padding:0;overflow-x:auto;margin-top:var(--s-16)}
body.seite-vergleich .vgl-tab{width:100%;border-collapse:collapse;font-size:var(--t-14);table-layout:fixed;min-width:560px}
body.seite-vergleich .vgl-tab th,body.seite-vergleich .vgl-tab td{padding:var(--f-12);border-bottom:1px solid var(--line);vertical-align:top;text-align:left;overflow-wrap:anywhere}
body.seite-vergleich .vgl-tab tbody th,body.seite-vergleich .vgl-tab thead th:first-child{width:150px;color:var(--ink-soft);font-weight:600;background:var(--paper)}
body.seite-vergleich .vgl-tab tbody th{hyphens:manual;overflow-wrap:normal}
body.seite-vergleich .vgl-tab tbody tr:last-child th,body.seite-vergleich .vgl-tab tbody tr:last-child td{border-bottom:none}
body.seite-vergleich .vgl-kopf{font-size:var(--t-12);text-transform:uppercase;letter-spacing:.08em}
body.seite-vergleich .vgl-bild{display:block}
body.seite-vergleich .vgl-bild img{width:100%;max-width:160px;height:120px;object-fit:contain;background:var(--paper);display:block;border-radius:var(--radius-raster)}
body.seite-vergleich .vgl-name{display:block;margin-top:var(--s-8);font-size:var(--t-16);font-weight:600;line-height:1.3;color:inherit;text-decoration:none}
body.seite-vergleich .vgl-name:hover{text-decoration:underline}
body.seite-vergleich .vgl-preis{display:inline-block;font-family:'Barlow Condensed',system-ui;font-size:var(--t-26);font-weight:800;line-height:1}
body.seite-vergleich .vgl-mwst{display:block;font-size:var(--t-11);color:var(--ink-soft);margin-top:var(--f-4)}
body.seite-vergleich .vgl-liefer{display:block;font-size:var(--t-13);color:var(--ok-ink);font-weight:600}
body.seite-vergleich .vgl-liefer.out{color:var(--ink-soft)}
body.seite-vergleich .vgl-datum{display:block;font-size:var(--t-12);color:var(--ink-soft);margin-top:var(--f-4)}
body.seite-vergleich .vgl-abschnitt th{background:var(--card);color:var(--ink);font-size:var(--t-12);text-transform:uppercase;letter-spacing:.08em;width:auto}
body.seite-vergleich .vgl-aktion form{margin-bottom:var(--s-8)}
body.seite-vergleich .vgl-kauf{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-8);min-height:40px;background:var(--signal);border:none;border-radius:var(--radius-bedien);padding:var(--s-8) var(--f-12);font-weight:700;font-size:var(--t-14);color:var(--ink);cursor:pointer;transition:var(--t)}
body.seite-vergleich .vgl-kauf svg{width:18px;height:18px;flex-shrink:0}
body.seite-vergleich .vgl-kauf:hover{filter:brightness(1.08)}/* A10704 Design: Kaufknopf hatte transition, aber keinen Hover. */
body.seite-vergleich .vgl-weg{font-size:var(--t-13);padding:var(--f-4) var(--f-12)}
body.seite-vergleich .vgl-hinweis{margin-top:var(--s-16);font-size:var(--t-14);color:var(--ink-soft)}
body.seite-vergleich .noprice{font-size:var(--t-14);color:var(--ink-soft)}
@media(max-width:640px){
  body.seite-vergleich .vgl-tab tbody th,body.seite-vergleich .vgl-tab thead th:first-child{width:104px}
  body.seite-vergleich .vgl-tab th,body.seite-vergleich .vgl-tab td{padding:var(--s-8)}
  body.seite-vergleich .vgl-bild img{height:88px}
}

/* ============================================================
   A10658 D4 (29.09.2026): Bewertungen. Sterne (.sterne) auf Artikelseite und in Listen, Block
   #bewertungen, Seite /bewertung/<token>. Rand der Sterne in Bernstein (--signal-ink, 6,0:1 auf Weiss),
   Fuellung Signalgelb - Signalgelb allein haette als Linie auf Weiss zu wenig Kontrast.
   ============================================================ */
.sterne{display:inline-flex;align-items:center;gap:0;vertical-align:middle;white-space:nowrap}
.sterne svg{width:16px;height:16px;flex-shrink:0}
.sterne .st-voll{color:var(--signal-ink);fill:var(--signal)}
.sterne .st-leer{color:var(--ink-3);fill:none}
.sterne-n{font-size:var(--t-12);color:var(--ink-soft);margin-left:var(--f-4)}
svg.st-voll{color:var(--signal-ink);fill:var(--signal)}
.pdp-sterne{display:inline-flex;text-decoration:none;margin:0 0 var(--s-8)}
.at-sterne{display:block;margin-top:var(--f-4)}
body.seite-artikel .bw-kopf{display:flex;align-items:center;gap:var(--s-8);flex-wrap:wrap;font-size:var(--t-14)}
body.seite-artikel .bw-kopf b{font-size:var(--t-20)}
body.seite-artikel .bw-herkunft{font-size:var(--t-13);margin-top:var(--f-4)}
.bw-liste{list-style:none;padding:0;margin:var(--s-16) 0 0;display:grid;gap:var(--f-12)}
.bw-liste li{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);padding:var(--f-12) var(--s-16)}
.bw-liste p{margin:var(--s-8) 0 0;font-size:var(--t-14);line-height:1.5;overflow-wrap:anywhere}
.bw-datum{font-size:var(--t-12);color:var(--ink-soft);margin-left:var(--s-8)}
body.seite-bewertung .bw-form{display:grid;gap:var(--s-16);max-width:var(--w-eng)}
body.seite-bewertung .bw-danke{margin-bottom:var(--s-24);border-color:var(--ok-line);background:var(--ok-bg)}
body.seite-bewertung .bw-artikel{margin:0;min-width:0}
body.seite-bewertung .bw-artikel legend{font-weight:700;font-size:var(--t-16);padding:0 var(--s-8)}
body.seite-bewertung .bw-wahl{display:flex;gap:var(--s-8);flex-wrap:wrap}
body.seite-bewertung .bw-wahl label{display:inline-flex;align-items:center;gap:var(--f-4);min-height:44px;padding:var(--s-8) var(--f-12);border:1.5px solid var(--line);border-radius:var(--radius-bedien);background:var(--card);font-size:var(--t-14);cursor:pointer;transition:var(--t)}
body.seite-bewertung .bw-wahl label:hover{border-color:var(--line-2)}
body.seite-bewertung .bw-wahl label:has(input:checked){border-color:var(--signal-ink);background:var(--signal-bg)}
body.seite-bewertung .bw-wahl input{margin:0}
body.seite-bewertung .bw-wort{color:var(--ink-soft)}
body.seite-bewertung .bw-textfeld{display:block;margin:var(--s-16) 0 var(--f-4);font-size:var(--t-13);font-weight:600;color:var(--ink-soft)}
body.seite-bewertung textarea{width:100%;padding:var(--f-12);border:1.5px solid var(--line);border-radius:var(--radius-bedien);font:inherit;background:var(--card);resize:vertical}
body.seite-bewertung .bw-hinweis{font-size:var(--t-13)}
body.seite-bewertung .bw-form .btn-y{justify-self:start}
body.seite-bewertung .bw-erledigt{margin-top:var(--s-32);max-width:var(--w-eng)}

/* A10658 D4 Nachtrag: Sterne in Listen sind ein Verweis auf den Block Bewertungen der Artikelseite (dort steht,
   wie die Echtheit sichergestellt wird). Kein Unterstrich unter den Sternen, Fokusring aus der Hausregel. */
.sterne-link{text-decoration:none;display:inline-flex}
a.at-sterne{display:flex}

/* ============================================================
   A10658 D3/D4 Nachtrag (29.09.2026): Stellen OHNE Zeilenwachstum. Gemessen gegen den Stand vorher
   (messen_zellen.py): Tabellenzeile 81 px bei 1440 und 104 px bei 390, Suchzeile 151 px. Die erste Fassung
   stand unter dem Kaufformular und machte jede Zeile 29 bis 40 px hoeher (Kurzcheck: Stopp).
   ============================================================ */
/* Tabellen: Knoepfe in der Bildzelle. Ohne Rahmen und Flaeche, damit sie neben dem Bild nicht als Kasten wirken. */
.arttab td.tdimg{position:relative}
.arttab .mv-bild .mv-btn{min-width:28px;height:28px;padding:0}
.arttab .mv-bild .mv-btn.on[data-vgl]{background:var(--signal-bg)}
@media(min-width:900px){
  /* 72 px Bildspalte plus 32 px fuer die Knopfspalte. Absolut gestellt: die Zeilenhoehe kommt weiter allein vom Bild. */
  body.seite-baugruppe .arttab td.tdimg,body.seite-tdkategorie .arttab td.tdimg,body.seite-reihe .arttab td.tdimg{width:108px;padding-right:36px}
  .arttab .mv-bild{position:absolute;right:var(--f-4);top:50%;transform:translateY(-50%);flex-direction:column;flex-wrap:nowrap;gap:var(--f-4)}
  /* Pfand auf der Preiszeile (an der Stelle des Zeilenhinweises zur MwSt.) */
  body.seite-baugruppe .tdpreis .pfand,body.seite-tdkategorie .tdpreis .pfand{display:inline;margin-left:var(--f-4)}
}
@media(max-width:899px){
  /* Unter dem Bild: dort sind 47 bis 48 px frei (Zeile 104, Bild 40 bis 48). Knopf 28 x 24. */
  .arttab .mv-bild{display:flex;flex-wrap:nowrap;gap:var(--f-4);margin-top:var(--f-4)}
  .arttab .mv-bild .mv-btn{height:24px}
  .arttab .mv-bild .mv-btn svg{width:16px;height:16px}
  /* Pfand als eigene Zeile unter dem Preis: die Preiszelle ist hier 116 px breit, Preis und Hinweis passen nicht
     nebeneinander. Die Zeile wird dadurch 14 px hoeher (104 -> 118), NUR bei Artikeln mit Pfand. */
  body.seite-baugruppe .tdpreis .pfand,body.seite-tdkategorie .tdpreis .pfand{display:block;margin-left:0;white-space:nowrap;line-height:1.2}
}
/* Suche: zwei Stellen, je Breite ist genau eine sichtbar. */
body.seite-suche .pli-info .mv-info{margin-top:var(--s-8)}
body.seite-suche .pli-buy .mv-form{display:none}
body.seite-suche .pli-buy .mv-btn{flex:0 0 auto;min-width:32px;height:32px;padding:0 var(--s-8);background:var(--card);border:1.5px solid var(--line);color:var(--ink-soft);font-weight:600}
body.seite-suche .pli-buy .mv-btn:hover{background:var(--card);border-color:var(--line-2);color:var(--ink)}
body.seite-suche .pli-buy .mv-btn.on{border-color:var(--signal);color:var(--ink)}
body.seite-suche .pli-buy .mv-btn.on[data-vgl]{background:var(--signal-bg)}
@media(max-width:820px){
  body.seite-suche .pli-info .mv-info{display:none}
  body.seite-suche .pli-buy .mv-form{display:inline-flex;flex-wrap:nowrap}
}
@media(max-width:560px){
  body.seite-suche .pli-buy form .mv-btn{flex:0 0 auto;min-width:40px;height:40px;padding:0}
}

/* A10658 Nachtrag Sichtpruefung (29.09.2026): solange die Vergleich-Leiste sichtbar ist, bekommt die Seite ihre
   Hoehe (44 px) als Luft nach unten - das Seitenende liegt dann ueber der Leiste, nicht darunter. */
body:has(#vglleiste:not([hidden])){padding-bottom:44px}
/* Abstaende, die bisher nur der Warenkorb hatte (Regeln an body.seite-warenkorb): gleiche Werte. */
body.seite-merkzettel .wk-weiter,body.seite-vergleich .wk-weiter,body.seite-bewertung .wk-weiter{margin-top:var(--s-16)}
body.seite-merkzettel .wk-leer-titel,body.seite-vergleich .wk-leer-titel,body.seite-bewertung .wk-leer-titel{font-size:var(--t-20);margin-bottom:var(--s-8)}
body.seite-merkzettel .wk-leer-text,body.seite-vergleich .wk-leer-text{margin-bottom:var(--s-16)}

/* A10658 D4 Nachtrag zweite Sichtpruefung (29.09.2026): Vergleich am Handy. Merkmalspalte 88 px, Artikelspalten je
   150 px - bei 390 px ist die zweite Spalte sofort zu 120 px sichtbar, die dritte kommt beim Wischen. Die Tabelle
   rollt weiter in ihrem Kasten (.vgl-rollen), die Seite selbst bekommt keinen Querlauf. */
body.seite-vergleich .vgl-wisch{display:none}
body.seite-vergleich .vgl-tab tbody th,body.seite-vergleich .vgl-tab thead th:first-child{hyphens:manual}
@media(max-width:640px){
  body.seite-vergleich .vgl-wisch{display:block;margin:var(--s-8) 0 0;font-size:var(--t-13);color:var(--ink-soft)}
  body.seite-vergleich .vgl-tab{width:auto;min-width:0;font-size:var(--t-13)}
  body.seite-vergleich .vgl-tab tbody th,body.seite-vergleich .vgl-tab thead th:first-child{width:88px}
  body.seite-vergleich .vgl-tab th.vgl-art,body.seite-vergleich .vgl-tab td{width:150px}
  body.seite-vergleich .vgl-preis{font-size:var(--t-20)}
  body.seite-vergleich .vgl-name{font-size:var(--t-14)}
  body.seite-vergleich .vgl-kauf{width:100%;padding:var(--s-8)}
}

/* --- A10704 (Welle 3, 29.09.2026): Filterleiste am Handy eingeklappt (_filt_klapp_auf.html) ----------------------
   Ab 761 px unveraendert: die Huelle ist offen, ihre Kopfzeile unsichtbar. Das Kleben am oberen Rand wandert vom
   Formular auf die Huelle, sonst klebte das Formular nur noch innerhalb der Huelle (also gar nicht). */
.filt-klapp>summary{display:none}
body.seite-baugruppe .filt-klapp,body.seite-suche .filt-klapp{position:sticky;top:calc(var(--header-h,90px) + 8px);z-index:30}
body.seite-baugruppe .filt-klapp>.tdfilter,body.seite-suche .filt-klapp>.ftoolbar{position:static}
@media(max-width:900px){body.seite-baugruppe .filt-klapp,body.seite-suche .filt-klapp{top:8px}}
@media(max-width:760px){
  .filt-klapp{margin:var(--s-8) 0 var(--f-12)}
  .filt-klapp>summary{display:flex;align-items:center;gap:var(--s-8);list-style:none;cursor:pointer;min-height:44px;padding:var(--s-8) var(--f-12);background:var(--card);border:1px solid var(--line);border-radius:var(--radius-raster);font-weight:700;font-size:var(--t-14);color:var(--ink)}
  .filt-klapp>summary::-webkit-details-marker{display:none}
  .filt-klapp>summary svg{width:20px;height:20px;flex:none;color:var(--asphalt)}
  .filt-klapp>summary .klapp-pfeil{width:1em;height:1em;margin-left:auto;color:var(--ink-soft);transition:transform var(--t)}/* A10704 Design: Chevron statt Textzeichen, siehe .fzwahl-box */
  .filt-klapp[open]>summary .klapp-pfeil{transform:rotate(90deg)}
  .filt-klapp[open]>summary{border-bottom-left-radius:0;border-bottom-right-radius:0}
  .filt-klapp .filt-n{font-size:var(--t-12);font-weight:600;background:var(--signal-bg);border:1px solid var(--signal-line);border-radius:var(--radius-pille);padding:0 var(--s-8);color:var(--ink)}
  body .filt-klapp[open]>form.tdfilter,body .filt-klapp[open]>form.ftoolbar{margin-top:0;margin-bottom:0;border-top:none;border-top-left-radius:0;border-top-right-radius:0}
}
/* ============================================================
   A10704 Teil 3 (29.09.2026): Altbefunde der Sichtpruefung, nachgemessen am Stand 0f8dfc6.
   ============================================================ */
/* M5: .seite-abstand setzt das Polster als Kurzform (oben, 0, unten) und nimmt dem Rahmen .wrap damit das
   seitliche Polster. Solange der Rahmen schmaler ist als das Fenster, faellt das nicht auf. Reicht er von
   Rand zu Rand, stand der Text bei 0 px. Die Kaesten und Tabellen bleiben randlos (die Handy-Tabelle ist auf
   388 px gerechnet, A5679), nur der Text bekommt sein Polster zurueck. */
@media(max-width:1699px){
  body.seite-baugruppe main .crumbs,body.seite-baugruppe main .tdch,
  body.seite-tdkategorie main .crumbs,body.seite-tdkategorie main .tdch{padding-left:var(--s-16);padding-right:var(--s-16)}
}
@media(max-width:1300px){
  body.seite-reihe main .crumbs,body.seite-reihe main .tdch,body.seite-reihe main .page-sub,
  body.seite-reihe main .reihe-motoren-titel,body.seite-reihe main .motorliste,
  body.seite-kategorien main .katkopf{padding-left:var(--s-16);padding-right:var(--s-16)}
}
@media(max-width:899px){
  body.seite-baugruppe .tdpager,body.seite-tdkategorie .tdpager,body.seite-reihe .tdpager{padding-left:var(--s-16);padding-right:var(--s-16)}
}
/* M13: der Zaehler sitzt am Symbol und nicht an der rechten Kante des Knopfs. Vorher hing er bei 1440 px am
   Merkzettel 18 px neben dem Herz, an der Garage 1 px neben dem Auto - der Knopf mit dem laengeren Wort ist
   breiter. Am Handy (Knopf 44 px, ohne Wort) bleibt die Stelle dieselbe wie bisher. */
.hdr-btn .cart-n{right:auto;left:calc(50% + var(--f-12))}
@media(max-width:900px){
  .hdr-btn .cart-n{left:50%}
}
/* M17: die drei Auswahlfelder der Fahrzeugwahl stehen in der Liste am Handy untereinander, wie auf der Startseite
   (dort grid-template-columns:1fr unter 760 px). Nebeneinander waren sie bei 390 px 82, 82 und 112 px breit. */
@media(max-width:760px){
  body.seite-baugruppe .fzwahl-box .vstep3,body.seite-suche .fzwahl-box .vstep3{grid-template-columns:minmax(0,1fr)}
}
/* M18: ein zu langer Platzhalter im Suchfeld endet mit Auslassungspunkten statt mitten im Buchstaben */
.search input{text-overflow:ellipsis}
/* welle4-express (30.09.2026): Lieferzusage je Warenkorb- und Kassenposition (core/delivery.py, A6169) und das
   Versand-Kennzeichen je Artikel (core/express.py, Schalter express_anzeige_aktiv). Nur vorhandene Token,
   keine neuen Pixelwerte; das Symbol folgt der Schriftgroesse. flow-root: im Korb am Handy steht die Zeile
   neben dem Bild (.cart-bild ist float) statt mit der zweiten Zeile darunter durchzulaufen. */
.cart-liefer{display:flow-root;font-size:var(--t-12);font-weight:600;color:var(--ok-ink);margin-top:var(--f-4)}
.cart-liefer.out{color:var(--ink-soft)}
.versandzusage{display:flex;align-items:center;gap:var(--f-4);margin-top:var(--f-4);font-size:var(--t-12);font-weight:600;color:var(--ok-ink);line-height:1.25}
.versandzusage svg{width:1em;height:1em;flex-shrink:0}
.vz svg{width:1em;height:1em;flex-shrink:0}
.lager.vz{display:inline-flex;align-items:center;gap:var(--f-4)}
body.seite-suche .pli-stock.vz::before{content:none}
/* A10704 (30.09.2026): Marke und Artikelnummer je Position in der Bestelluebersicht, Hinweis Liefergebiet am PLZ-Feld. */
.co-sum .co-merkmal{display:block;color:var(--ink-soft);font-size:var(--t-12)}
.co-hinweis{color:var(--ink-soft);font-size:var(--t-13);margin-top:var(--s-8)}
/* A10763 (30.09.2026): Versandkosten-Hinweis ueber den Tabellenlisten, gleiche Schrift wie die uebrigen Randhinweise. */
.preis-hinweis{color:var(--ink-soft);font-size:var(--t-13);margin:0 0 var(--s-8);padding:0 var(--s-8)}
.preis-hinweis a{color:inherit;text-decoration:underline}

