/* ══════════════════════════════════════════════════════════════════════
   vc-handy.css — Handy-Ansicht von Vermittco (Amazon-App-Vorbild)

   🚨 EISERNE REGEL: In dieser Datei steht KEINE einzige Regel ausserhalb
      des Blocks  @media (max-width:760px){ … }.
      Ab 761px bekommt der Browser damit buchstaeblich null zusaetzliche
      Regeln — Desktop UND Tablet bleiben unberuehrt. Das Band 761–768px
      behaelt bewusst seine heutigen 768er-Regeln (Konto-Schublade,
      .vc-tab-strip): sie herunterzuziehen waere eine Aenderung dort.

   Einbinden (im <head>, damit nichts aufblitzt):
     <link rel="stylesheet" href="vc-handy.css?v=1" media="(max-width:760px)">
   Das media-Attribut ist die ZWEITE Sperre: der Browser wendet die Datei
   oberhalb 760px gar nicht erst an.

   Namensraum: alles Neue heisst .vch-… bzw. #vcHandy… — nie eine
   bestehende Klasse oder id wiederverwenden (getElementById nimmt immer
   den ERSTEN Treffer; eine doppelte id braeche den Desktop still).
   ══════════════════════════════════════════════════════════════════════ */

@media (max-width: 760px) {

  /* ═══════════════════════════════════════════════════════════
     1. FARBEN & MASSE
     Bewusst eigene Variablen: die Seiten definieren --card nur in
     9 von 53 Faellen, der Kanon ist der HELLE Rueckfall (#fff).
     ═══════════════════════════════════════════════════════════ */
  :root {
    --vch-leiste-h: 56px;          /* untere Navigationsleiste  */
    --vch-kopf-h: 96px;            /* Kopfzeile: Suche + Chips  */
    --vch-unten: calc(var(--vch-leiste-h) + env(safe-area-inset-bottom, 0px));

    --vch-blau: #1B56CC;
    --vch-blau-weich: rgba(27, 86, 204, .10);
    --vch-flaeche: #ffffff;
    --vch-grund: #F3F5F9;
    --vch-rand: #E4E8EF;
    --vch-text: #0F1722;
    --vch-mitte: #3D4A5C;
    --vch-leise: #586479;
    --vch-schatten: 0 2px 12px rgba(15, 23, 34, .07);
  }

  html[data-theme="dark"] {
    --vch-blau: #2E5FB5;
    --vch-blau-weich: rgba(46, 95, 181, .18);
    --vch-flaeche: #17171c;
    --vch-grund: #0f0f12;
    --vch-rand: #2c2c33;
    --vch-text: #E8EDF5;
    --vch-mitte: #A0AABA;
    --vch-leise: #68788F;
    --vch-schatten: 0 2px 12px rgba(0, 0, 0, .5);
  }

  /* Systemeinstellung „dunkel", solange der Betreiber nicht ausdruecklich
     hell gewaehlt hat (Hausregel: jede prefers-color-scheme-Regel braucht
     :not([data-theme="light"])). */
  @media (prefers-color-scheme: dark) {
    html:not([data-theme="light"]) {
      --vch-blau: #2E5FB5;
      --vch-blau-weich: rgba(46, 95, 181, .18);
      --vch-flaeche: #17171c;
      --vch-grund: #0f0f12;
      --vch-rand: #2c2c33;
      --vch-text: #E8EDF5;
      --vch-mitte: #A0AABA;
      --vch-leise: #68788F;
      --vch-schatten: 0 2px 12px rgba(0, 0, 0, .5);
    }
  }

  /* ═══════════════════════════════════════════════════════════
     2. DESKTOP-HUELLE STILLLEGEN
     🚨 NUR verstecken, NIE entfernen: an #vcNavAuth haengen sich die
     Brief-Glocke (vc-msg.js:81) und die Benachrichtigungs-Glocke
     (vc-notify.js:164) per insertBefore ein. Ohne den Anker erscheinen
     sie nie wieder — auch nicht auf dem Desktop.
     ═══════════════════════════════════════════════════════════ */
  html.vch-an .nav { display: none !important; }

  /* Die beiden vorhandenen 768er-Handy-Bauteile wuerden sonst DOPPELT
     neben der neuen Ebene stehen. Gilt nur <=760px, 761–768px bleibt. */
  html.vch-an .vc-tab-strip,
  html.vch-an .ham-btn,
  html.vch-an .mob-overlay { display: none !important; }

  /* 🚨 Der gemeinsame Suchkopf laesst sich NICHT ueber data-vcsk-eigen
     abmelden: vc-suchkopf.js laeuft auf den Kategorieseiten VOR
     vc-handy.js und hat seine Pruefung (vc-suchkopf.js:112) da laengst
     hinter sich. Deshalb wird er hier ausgeblendet — die eigene
     Kopfzeile ersetzt ihn. */
  html.vch-an .vcsk-header { display: none !important; }

  /* 🚨 Jede Seite bringt ihre EIGENE Suchansicht-Kopfzeile mit. Auf dem
     Telefon standen dadurch zwei Suchleisten uebereinander (gemessen:
     #vcHandyKopf 95px + #vcFsHeader 66px). Die eigene Kopfzeile zeigt in
     der Suchansicht den Begriff und einen Zurueck-Pfeil; der Ausstieg
     klickt weiterhin DEREN Knopf, damit die Seitenlogik greift. */
  html.vch-an #vcFsHeader,
  html.vch-an #vcKatFsHeader { display: none !important; }

  /* Aktions-Banner → wird zur Pille neben dem Standort.
     🚨 Nur verstecken: vc-publicoffer.js haengt es alle 1,5 s neu ein. */
  html.vch-an #vcOfferBanner,
  html.vch-an #vcEventBanner { display: none !important; }

  /* ═══════════════════════════════════════════════════════════
     3. SCHWEBENDE KNOEPFE — Platz fuer die untere Leiste
     🚨 !important ist Pflicht: vc-chat.js schreibt alle 800 ms einen
     INLINE-Stil auf den Knopf (visTick, vc-chat.js:394-416). Eine Regel
     ohne !important verliert und der Kreis blitzt im Sekundentakt auf.
     🚨 Knoten NIE entfernen: fahrzeuge.html:3136 klickt .vcchat-btn,
     und der Vermi-Reiter klickt ihn ebenfalls.
     ═══════════════════════════════════════════════════════════ */
  html.vch-an .vcchat-btn { display: none !important; }
  html.vch-an .vcphone-pill { display: none !important; }
  html.vch-an .vcbacktop { display: none !important; }

  /* Der runde „Rundgang starten"-Knopf (vc-account-tour.js) tauchte auf dem
     Telefon quer durch die Seiten auf — im Warenkorb, in den Einstellungen,
     ueberall unten rechts. Betreiber 24.08.2026: „das soll nicht sein, nur
     in der Webversion." Auf Desktop und Tablet bleibt er unangetastet. */
  html.vch-an #vcTourBtn { display: none !important; }

  /* Alles Uebrige am unteren Rand um die Leistenhoehe hochschieben. */
  html.vch-an .vct-wrap { bottom: calc(var(--vch-unten) + .8rem) !important; }
  html.vch-an #vcSlBar { bottom: calc(var(--vch-unten) + .8rem) !important; }
  html.vch-an #vcCmpBar { bottom: calc(var(--vch-unten) + .7rem) !important; }

  /* Bei offener Detailansicht gehoert der Schirm dem Inserat (Amazon):
     Kopfzeile und Leiste treten zurueck, die Kaufleiste #vcduStickyBar
     bleibt allein unten. Das Muster :has() nutzt das Projekt bereits
     (vc-detail-upgrade.js:808 blendet so die .nav aus). */
  html.vch-an body:has(#listingDetailModal.open) #vcHandyNav,
  html.vch-an body:has(#listingDetailModal.open) #vcHandyKopf { display: none !important; }
  html.vch-an body:has(#listingDetailModal.open) { padding-top: 0 !important; }

  /* ═══════════════════════════════════════════════════════════
     4. SEITENGRUNDRISS
     ═══════════════════════════════════════════════════════════ */
  html.vch-an body {
    padding-top: var(--vch-kopf-h) !important;
    padding-bottom: var(--vch-unten) !important;
    background: var(--vch-grund) !important;
    overflow-x: hidden;
  }

  /* Ohne Chip-Zeile (Unterseiten) ist der Kopf flacher. */
  html.vch-an.vch-kopf-schmal body { padding-top: 56px !important; }

  /* 🚨 Anmelden · Registrieren · Passwort: KEINE Balken, oben wie unten
     (Betreiber 24.08.2026). vc-handy.js baut dort weder Kopfzeile noch
     Leiste — hier faellt zusaetzlich das Polster weg, sonst blieben leere
     Streifen stehen. `.panel-right` haben genau diese drei Seiten. */
  html.vch-an body:has(.panel-right) {
    padding-top: 0 !important;
    padding-bottom: 0 !important;
  }

  /* Wenn eine Handy-Ebene den ganzen Schirm einnimmt, scrollt nur sie. */
  html.vch-an.vch-fest body { overflow: hidden !important; }

  /* ═══════════════════════════════════════════════════════════
     5. KOPFZEILE  (Suchleiste + Standort-Chip)
     Als <header> gebaut — steht in den TABU-Listen von
     vc-knopfdesign.js:52 und vc-schlicht.js:70 und wird deshalb
     nicht uebermalt.
     ═══════════════════════════════════════════════════════════ */
  #vcHandyKopf {
    position: fixed;
    top: 0; left: 0; right: 0;
    z-index: 900;
    background: var(--vch-flaeche);
    border-bottom: 1px solid var(--vch-rand);
    font-family: 'Manrope', system-ui, -apple-system, sans-serif;
  }

  .vch-suchzeile {
    display: flex;
    align-items: center;
    gap: .5rem;
    padding: .5rem .7rem;
  }

  .vch-zurueck {
    flex: 0 0 auto;
    width: 34px; height: 34px;
    display: none;
    align-items: center; justify-content: center;
    border: none; background: transparent;
    color: var(--vch-text);
    border-radius: 50%;
    cursor: pointer; padding: 0;
  }
  .vch-zurueck:active { background: var(--vch-blau-weich); }
  html.vch-zurueck-an .vch-zurueck { display: flex; }

  .vch-suchfeld {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    align-items: center;
    gap: .55rem;
    height: 40px;
    padding: 0 .85rem;
    border-radius: 999px;
    border: 1.5px solid var(--vch-rand);
    background: var(--vch-grund);
    color: var(--vch-leise);
    font-size: .92rem;
    text-align: left;
    cursor: pointer;
    font-family: inherit;
  }
  .vch-suchfeld svg { flex: 0 0 auto; opacity: .75; }
  .vch-suchfeld span {
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }

  .vch-logo {
    flex: 0 0 auto;
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: 1.05rem;
    letter-spacing: -.02em;
    color: var(--vch-text);
    text-decoration: none;
  }
  .vch-logo b { color: var(--vch-blau); font-weight: 800; }

  /* — Chip-Zeile: Standort + Schnellwege — */
  .vch-chips {
    display: flex;
    align-items: center;
    gap: .45rem;
    padding: 0 .7rem .5rem;
    overflow-x: auto;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
  }
  .vch-chips::-webkit-scrollbar { display: none; }

  .vch-chip {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    height: 30px;
    padding: 0 .7rem;
    border-radius: 999px;
    border: 1px solid var(--vch-rand);
    background: transparent;
    color: var(--vch-mitte);
    font-size: .78rem;
    font-weight: 600;
    font-family: inherit;
    white-space: nowrap;
    cursor: pointer;
    text-decoration: none;
  }
  .vch-chip svg { opacity: .8; }
  .vch-chip:active { background: var(--vch-blau-weich); }
  .vch-chip.vch-chip-ort { color: var(--vch-text); }
  .vch-chip.vch-chip-ort b { font-weight: 800; }

  /* Laufende Aktion als Perle. Farblich abgesetzt, damit sie neben dem
     Standort auffaellt, ohne zu schreien. */
  .vch-chip.vch-chip-aktion {
    border-color: transparent;
    background: var(--vch-blau);
    color: #fff;
  }
  .vch-chip.vch-chip-aktion b { font-weight: 800; }
  .vch-chip.vch-chip-aktion svg { opacity: 1; }
  .vch-chip.vch-chip-aktion:active { background: var(--vch-blau); filter: brightness(.9); }

  /* Laufender Suchbegriff in der Kopfzeile statt des Platzhalters. */
  .vch-suchfeld.vch-suchfeld-aktiv { color: var(--vch-text); font-weight: 600; }

  /* ═══════════════════════════════════════════════════════════
     6. UNTERE NAVIGATIONSLEISTE
     Als <nav> gebaut (TABU-Liste) + data-vckd-nie + data-vcsl-nie
     als Guertel und Hosentraeger gegen die Uebermal-Bausteine.
     z-index bewusst UNTER #vcduStickyBar (2147483005).
     ═══════════════════════════════════════════════════════════ */
  #vcHandyNav {
    position: fixed;
    left: 0; right: 0; bottom: 0;
    z-index: 2147482500;
    display: flex;
    align-items: stretch;
    background: var(--vch-flaeche);
    border-top: 1px solid var(--vch-rand);
    padding-bottom: env(safe-area-inset-bottom, 0px);
    font-family: 'Manrope', system-ui, -apple-system, sans-serif;
    box-shadow: 0 -1px 10px rgba(15, 23, 34, .06);
  }
  html[data-theme="dark"] #vcHandyNav { box-shadow: 0 -1px 10px rgba(0, 0, 0, .45); }

  .vch-reiter {
    flex: 1 1 0;
    min-width: 0;
    height: var(--vch-leiste-h);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    border: none;
    background: transparent;
    color: var(--vch-mitte);
    font-family: inherit;
    font-size: .625rem;
    font-weight: 600;
    letter-spacing: .01em;
    text-decoration: none;
    cursor: pointer;
    padding: 0;
    position: relative;
    -webkit-tap-highlight-color: transparent;
  }
  .vch-reiter svg { width: 23px; height: 23px; flex: 0 0 auto; }
  .vch-reiter span {
    max-width: 100%;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .vch-reiter[aria-current="page"] { color: var(--vch-blau); }
  .vch-reiter:active { background: var(--vch-blau-weich); }

  /* ── Markierung des gewaehlten Reiters ─────────────────────────────────
     🚨 Betreiber 25.08.2026: „mach die Welle und das Design weg und mach
     eine schöne Taskbar und Markierung wie bei Amazon, nicht so."

     Vorher stand hier ein gezeichneter Wellenberg samt weichem Schein
     hinter dem Symbol — zusammen zu laut und zu verspielt.

     Was App-Leisten tatsaechlich machen: ein KURZER, ruhiger Balken an
     der Oberkante ueber dem gewaehlten Reiter, dazu Symbol und
     Beschriftung in der Akzentfarbe. Sonst nichts. Der Balken gleitet
     beim Wechsel mit — das ist der einzige Effekt, den es braucht.

     🚨 `overflow: visible` bleibt Voraussetzung: der Balken sitzt auf der
     Randlinie der Leiste. */
  #vcHandyNav { overflow: visible; }

  .vch-welle {
    position: absolute;
    top: -1px;                 /* liegt auf der Randlinie der Leiste */
    left: 0;
    height: 3px;
    border-radius: 0 0 3px 3px;
    background: var(--vch-blau);
    pointer-events: none;      /* darf keinen Fingertipp abfangen */
    opacity: 0;
  }
  .vch-welle.an { opacity: 1; }

  /* 🚨 Erst ab `bereit` wird bewegt. Beim ersten Zeichnen sitzt die
     Markierung sofort richtig — sonst fluege sie bei jedem Seitenaufruf
     von links herein, und genau dieses „erst falsch, dann richtig" hat
     der Betreiber mehrfach beanstandet. */
  .vch-welle.bereit {
    transition: transform .26s cubic-bezier(.4, 0, .2, 1),
                width .26s cubic-bezier(.4, 0, .2, 1),
                opacity .16s ease;
  }
  @media (prefers-reduced-motion: reduce) {
    .vch-welle.bereit { transition: opacity .16s ease; }
  }

  /* Zaehler-Plakette (Warenkorb). Die Klasse vc-cart-badge wird von
     vc-cart.js:61-68 automatisch beschriftet — kein eigener Zaehler. */
  .vch-zahl {
    position: absolute;
    top: 4px;
    left: calc(50% + 5px);
    min-width: 16px; height: 16px;
    padding: 0 4px;
    border-radius: 999px;
    background: var(--vch-blau);
    color: #fff;
    font-size: .6rem;
    font-weight: 800;
    line-height: 16px;
    text-align: center;
    box-sizing: border-box;
  }
  .vch-zahl:empty { display: none; }
  .vch-zahl[data-leer="1"] { display: none; }

  /* ═══════════════════════════════════════════════════════════
     7. VOLLBILD-EBENEN (Suche, Kategorien, Vermi)
     ═══════════════════════════════════════════════════════════ */
  .vch-ebene {
    position: fixed;
    inset: 0;
    z-index: 2147482600;
    background: var(--vch-grund);
    display: flex;
    flex-direction: column;
    font-family: 'Manrope', system-ui, -apple-system, sans-serif;
    color: var(--vch-text);
    transform: translateY(8px);
    opacity: 0;
    pointer-events: none;
    transition: opacity .18s ease, transform .18s ease;
  }
  .vch-ebene.auf {
    transform: none;
    opacity: 1;
    pointer-events: auto;
  }
  @media (prefers-reduced-motion: reduce) {
    .vch-ebene { transition: none; }
  }

  .vch-ebene-kopf {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    gap: .5rem;
    padding: .5rem .7rem;
    background: var(--vch-flaeche);
    border-bottom: 1px solid var(--vch-rand);
  }
  .vch-ebene-titel {
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: 1.02rem;
    color: var(--vch-text);
    margin: 0;
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .vch-ebene-koerper {
    flex: 1 1 auto;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding-bottom: calc(var(--vch-unten) + 1rem);
  }

  /* ═══════════════════════════════════════════════════════════
     8. SUCH-EBENE  (Antippen der Suchleiste)
     ═══════════════════════════════════════════════════════════ */
  .vch-such-eingabe {
    flex: 1 1 auto;
    min-width: 0;
    height: 40px;
    padding: 0 .9rem;
    border-radius: 999px;
    border: 1.5px solid var(--vch-blau);
    background: var(--vch-flaeche);
    color: var(--vch-text);
    font-size: 16px;   /* nicht kleiner: iOS zoomt sonst beim Antippen (siehe 99.) */
    font-family: inherit;
    outline: none;
    -webkit-appearance: none;
  }
  .vch-such-eingabe::placeholder { color: var(--vch-leise); }

  .vch-gruppe-titel {
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: .92rem;
    color: var(--vch-text);
    margin: 0;
    padding: 1rem .9rem .5rem;
  }

  .vch-verlauf { list-style: none; margin: 0; padding: 0; }
  .vch-verlauf li {
    display: flex;
    align-items: center;
    gap: .7rem;
    padding: 0 .9rem;
    border-bottom: 1px solid var(--vch-rand);
    background: var(--vch-flaeche);
  }
  .vch-verlauf-wort {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    align-items: center;
    gap: .7rem;
    padding: .8rem 0;
    border: none;
    background: transparent;
    color: var(--vch-text);
    font-size: .93rem;
    font-family: inherit;
    text-align: left;
    cursor: pointer;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .vch-verlauf-wort svg { flex: 0 0 auto; opacity: .55; }
  .vch-verlauf-weg {
    flex: 0 0 auto;
    width: 30px; height: 30px;
    display: flex; align-items: center; justify-content: center;
    border: none; background: transparent;
    color: var(--vch-leise);
    border-radius: 50%;
    cursor: pointer; padding: 0;
  }
  .vch-verlauf-weg:active { background: var(--vch-blau-weich); }

  .vch-leer {
    padding: 2.2rem 1.2rem;
    text-align: center;
    color: var(--vch-leise);
    font-size: .88rem;
    line-height: 1.55;
  }

  /* ═══════════════════════════════════════════════════════════
     9. KATEGORIE-EBENE  („Shop by category")
     ═══════════════════════════════════════════════════════════ */
  .vch-katliste {
    display: flex;
    flex-direction: column;
    gap: .5rem;
    padding: .7rem;
  }
  .vch-kat {
    display: flex;
    align-items: center;
    gap: .85rem;
    padding: 0;
    border: 1px solid var(--vch-rand);
    border-radius: 12px;
    background: var(--vch-flaeche);
    color: var(--vch-text);
    text-decoration: none;
    overflow: hidden;
    font-family: inherit;
    cursor: pointer;
    text-align: left;
    width: 100%;
    box-sizing: border-box;
  }
  .vch-kat:active { border-color: var(--vch-blau); }
  .vch-kat-bild {
    flex: 0 0 auto;
    width: 62px; height: 62px;
    display: flex; align-items: center; justify-content: center;
    background: var(--vch-blau-weich);
    color: var(--vch-blau);
  }
  .vch-kat-bild svg { width: 26px; height: 26px; }

  /* ── Hero-Foto statt Symbol ────────────────────────────────────────────
     🚨 Betreiber 25.08.2026: „nimm da statt Symbole das Herobild als
     Kategorie, der bei Web ist."

     Das Foto liegt UEBER dem Symbol, nicht an seiner Stelle. So steht von
     der ersten Zeichnung an etwas Richtiges da (das Symbol), und das Foto
     blendet sich ein, sobald es geladen ist — kein leeres Feld, kein
     Hineinspringen. Faellt das Bild aus, bleibt das Symbol einfach
     stehen, ohne dass jemand etwas merkt.

     Das Feld wird zugleich breiter: ein 62x62-Quadrat zeigt von einem
     Querformat-Hero fast nichts. 86x86 bei 62px Zeilenhoehe gibt dem Bild
     Flaeche, ohne die Zeile zu strecken. */
  .vch-kat-bild {
    position: relative;
    width: 86px !important;
    align-self: stretch;
    min-height: 62px;
    height: auto !important;
  }
  .vch-kat-foto {
    position: absolute;
    inset: 0;
    width: 100%; height: 100%;
    object-fit: cover;
    opacity: 0;
    transition: opacity .28s ease;
  }
  .vch-kat-bild.hat-bild .vch-kat-foto { opacity: 1; }
  @media (prefers-reduced-motion: reduce) {
    .vch-kat-foto { transition: none; }
  }
  /* Sobald ein Foto liegt, braucht das Feld keinen Farbgrund mehr —
     sonst blitzt bei durchscheinenden Raendern das Blau durch. */
  .vch-kat-bild.hat-bild { background: #0b0d12; }
  .vch-kat-name {
    flex: 1 1 auto;
    min-width: 0;
    font-size: .95rem;
    font-weight: 700;
    padding: .5rem 0;
  }
  .vch-kat-zahl {
    display: block;
    font-size: .74rem;
    font-weight: 500;
    color: var(--vch-leise);
    margin-top: 1px;
  }
  .vch-kat-pfeil {
    flex: 0 0 auto;
    padding-right: .9rem;
    color: var(--vch-leise);
    display: flex; align-items: center;
  }

  /* ═══════════════════════════════════════════════════════════
     10. STARTSEITE — Amazon-Aufbau statt Hero-Marketing
     Alles nur per CSS: index.html selbst wird nicht umgebaut.
     ═══════════════════════════════════════════════════════════ */
  /* Der Hero-Block faellt auf JEDER Seite weg — die Suche sitzt jetzt oben
     in der Kopfzeile. Auf der Startseite war er allein 939 px hoch (bei
     812 px Schirm) und sein Inhalt lief 45 px ueber den rechten Rand
     hinaus; auf den Kategorieseitem traegt er nur die Filterbox. */
  html.vch-an .hero { display: none !important; }

  /* Fahrzeuge: die mobile.de-Filterbox ueberlagerte sich auf dem Telefon
     (Marke/Modell/Erstzulassung uebereinander, „Kilometer bis" unter
     „Leasen"). Betreiber-Vorgabe: bei Fahrzeugen soll es aussehen wie auf
     der Startseite. Die Filter bleiben ueber die Ergebnisansicht
     erreichbar (.mobile-filterbar / Filter-Schublade). */
  html.vch-an .mde-filterbox { display: none !important; }

  /* Linkfarm am Seitenende (SEO) — auf dem Telefon 2.696 px Fuellung. */
  html.vch-an #fzLinksWrap { display: none !important; }

  /* Uebrig gebliebener Entwickler-Stempel; auf dem Telefon lag er ueber
     der unteren Leiste. (Auf Desktop/Tablet bleibt er unangetastet —
     das ist ein eigener Befund.) */
  html.vch-an #vcBuildStamp { display: none !important; }

  html.vch-an.vch-start .cats-sec,
  html.vch-an.vch-start .explore,
  html.vch-an.vch-start .how2,
  html.vch-an.vch-start .benefits,
  html.vch-an.vch-start .duo,
  html.vch-an.vch-start .cta-band,
  html.vch-an.vch-start section.faq,
  html.vch-an.vch-start #vcTrust,
  html.vch-an.vch-start #vcReg,
  html.vch-an.vch-start #vcFakt,
  html.vch-an.vch-start #vcHdl,
  html.vch-an.vch-start #vcWeg,
  html.vch-an.vch-start #vcDritt,
  html.vch-an.vch-start #vcLogoband,
  html.vch-an.vch-start #vcNlCta { display: none !important; }

  /* Die Empfehlungsflaechen tragen die Startseite. */
  html.vch-an.vch-start #vcHomeReco,
  html.vch-an.vch-start #vcRecentHome,
  html.vch-an.vch-start #vcOfferBanner,
  html.vch-an.vch-start #vcEventBanner { background: transparent !important; }

  /* ── Vorschlaege auf der Startseite (ohne Anmeldung) ── */
  #vcHandyVorschlaege { padding: .4rem 0 1rem; }
  .vch-vtitel {
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: 1.05rem;
    color: var(--vch-text);
    margin: 1rem 0 .6rem;
    padding: 0 .9rem;
  }
  .vch-vkats {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: .55rem;
    padding: 0 .9rem;
  }
  .vch-vkat {
    display: flex;
    align-items: center;
    gap: .55rem;
    min-height: 60px;
    padding: .5rem .7rem;
    border: 1px solid var(--vch-rand);
    border-radius: 12px;
    background: var(--vch-flaeche);
    color: var(--vch-text);
    text-decoration: none;
    font-size: .82rem;
    font-weight: 600;
    line-height: 1.25;
    box-sizing: border-box;
  }
  .vch-vkat:active { border-color: var(--vch-blau); }
  .vch-vkat-sym {
    flex: 0 0 auto;
    width: 34px; height: 34px;
    display: flex; align-items: center; justify-content: center;
    border-radius: 9px;
    background: var(--vch-blau-weich);
    color: var(--vch-blau);
  }
  .vch-kpreis {
    font-size: .88rem;
    font-weight: 800;
    color: var(--vch-text);
  }

  /* — Fusszeile VOLLSTAENDIG —
     Betreiber 24.08.2026: „weil es noch Web ist, nur eine Handyversion —
     die komplette Fusszeile soll unten sein." Die frueher hier stehende
     Kuerzung (Vorteilszeile, Spalten, Schnellzugriff, Partner ausgeblendet)
     ist damit zurueckgenommen; es bleibt nur die Anpassung der Polster. */
  html.vch-an .vcftr-bottom { padding: 1rem .9rem !important; }
  html.vch-an .vcftr-top,
  html.vch-an .vcftr-quick { padding-left: .9rem !important; padding-right: .9rem !important; }

  /* ═══════════════════════════════════════════════════════════
     11. KARTEN — Symbole runter, Platz sparen
     🚨 NUR per CSS. vc-kartenleiste.js beobachtet den ganzen body und
     baut eine Karte KOMPLETT neu, wenn die Symbole fehlen
     (vc-kartenleiste.js:606-608, 818-821) — ein Entfernen per
     JavaScript ergaebe eine Endlosschleife.
     ═══════════════════════════════════════════════════════════ */
  html.vch-an .vckl-sym { display: none !important; }
  html.vch-an .vccmp-chk { display: none !important; }
  html.vch-an .deal-heart { display: none !important; }

  /* ── Merken („Parken") nach RECHTS OBEN aufs Bild ──
     Betreiber 24.08.2026: „mach das Like nicht da unten hin, sondern rechts
     oben vom Kärtchen."
     Die Klasse heisst je Kartenform anders (srpeg-/srpim-/srpmi-/srpit-/
     srpc-/vcl-btn-park), der Namensteil ist aber ueberall gleich — deshalb
     die Teilzeichen-Auswahl statt sechs Einzelregeln. */
  html.vch-an #grid > *,
  html.vch-an #listingGrid > * { position: relative; }

  html.vch-an [class*="-btn-park"] {
    position: absolute !important;
    top: 10px; right: 10px; left: auto !important; bottom: auto !important;
    z-index: 4;
    width: 38px !important;
    height: 38px !important;
    min-width: 0 !important;
    max-width: none !important;
    flex: 0 0 auto !important;
    padding: 0 !important;
    margin: 0 !important;
    border: none !important;
    border-radius: 50% !important;
    background: rgba(255, 255, 255, .94) !important;
    color: #0F1722 !important;
    box-shadow: 0 2px 8px rgba(15, 23, 34, .18) !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    /* Schrift auf 0: der Text „Parken" verschwindet, das Symbol bleibt. */
    font-size: 0 !important;
    line-height: 0 !important;
    overflow: hidden;
  }
  html.vch-an [class*="-btn-park"] svg {
    width: 19px !important; height: 19px !important; flex: 0 0 auto;
  }
  html[data-theme="dark"].vch-an [class*="-btn-park"] {
    background: rgba(23, 23, 28, .92) !important;
    color: #E8EDF5 !important;
  }

  /* ── Aktionszeile: EIN Knopf ueber die volle Kartenbreite ── */
  html.vch-an [class*="-actions"] {
    display: flex !important;
    width: 100% !important;
    gap: .5rem !important;
    align-items: stretch !important;
  }
  html.vch-an [class*="-btn-contact"],
  html.vch-an .vch-kartenknopf-voll {
    flex: 1 1 auto !important;
    width: auto !important;
    min-width: 0 !important;
    min-height: 44px !important;
    justify-content: center !important;
  }
  html.vch-an .vch-versteckt { display: none !important; }

  /* Eigene Karten-Knoepfe (Kaufen + Warenkorb) im Hausstil. */
  .vch-kartenknopf {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .4rem;
    height: 44px;
    border: none;
    border-radius: 999px;
    background: var(--vch-blau);
    color: #fff;
    font-family: 'Manrope', system-ui, -apple-system, sans-serif;
    font-size: .9rem;
    font-weight: 700;
    cursor: pointer;
    padding: 0 1rem;
    box-sizing: border-box;
  }
  .vch-kartenknopf:active { filter: brightness(.92); }
  /* Beim Kaufen nur das Symbol — damit der Kaufen-Knopf Platz hat. */
  .vch-kartenknopf-symbol {
    flex: 0 0 auto;
    width: 44px;
    padding: 0;
    background: transparent;
    color: var(--vch-text);
    border: 1.5px solid var(--vch-rand);
  }
  .vch-kartenknopf-symbol:active { background: var(--vch-blau-weich); filter: none; }

  /* Kennzeichen wie „Neu", „Top-Angebot" BLEIBEN — das sind Auskuenfte,
     keine Bedienelemente; Amazon zeigt sie ebenfalls auf der Karte. */

  /* ═══════════════════════════════════════════════════════════
     12. DETAILANSICHT — Amazon-Reihenfolge

     Zwei Bauarten, gleiche Form (nachgemessen):
       Rolle          | ldm (fz·eg·im·kategorie) | dm (mi·it·wm·vp)
       Top-Raster     | .ldm-top                 | .dp-top
       linke Spalte   | .ldm-gallery             | .vcdu-left
       Galerie        | .vcdu-gal                | .vcdu-gal  (gleich!)
       Beschreibung   | .vcdu-descspalte         | .vcdu-descspalte
       rechte Spalte  | .ldm-info.vcdu-hasheart  | .dp-info.vcdu-hasheart
       Kaufkarte      | .vcdu-ctcard             | .vcdu-ctcard
     Die .vcdu-*-Klassen stammen aus vc-detail-upgrade.js und sind auf
     beiden Bauarten identisch — deshalb reicht EIN Regelsatz fuer alle
     acht Kategorien und alle kuenftigen.

     🚨 Umgestellt wird ausschliesslich per CSS `order`. Kein Knoten wird
     verschoben: vc-detail-upgrade.js, vc-360.js und vc-checkout.js
     suchen ihre Anker per getElementById (vc-checkout.js:1993 bricht
     ohne #ldmCtaBtn sofort ab).
     ═══════════════════════════════════════════════════════════ */

  /* Die beiden Spalten aufloesen, damit ihre Kinder EINE Reihe bilden
     und frei sortierbar werden. Beide Huellen tragen nachgemessen KEINE
     eigene Optik (kein Hintergrund, kein Polster, kein Rahmen). */
  html.vch-an #listingDetailModal .ldm-top,
  html.vch-an #listingDetailModal .dp-top {
    display: flex !important;
    flex-direction: column !important;
    /* 🚨 Ohne stretch bleiben die Bloecke auf ihrer Inhaltsbreite stehen —
       nachgemessen: die Kaufkarte war 209 statt 343 px breit, weil
       vc-detail-upgrade.js hier `align-items:start` setzt. */
    align-items: stretch !important;
    grid-template-columns: none !important;
    gap: 0 !important;
    padding: 0 !important;
  }
  html.vch-an .ldm-top > .ldm-gallery,
  html.vch-an .ldm-top > .ldm-info,
  html.vch-an .dp-top > .vcdu-left,
  html.vch-an .dp-top > .dp-info { display: contents !important; }

  /* Grundordnung: alles Unbenannte hinter die benannten Bloecke. */
  html.vch-an .ldm-top > * > *,
  html.vch-an .dp-top > * > * { order: 20; width: 100%; box-sizing: border-box; }

  html.vch-an .vcdu-gal,
  html.vch-an .dp-gallery                       { order: 1 !important; }
  html.vch-an .ldm-title,
  html.vch-an .dp-title                         { order: 2 !important; }
  html.vch-an .ldm-price,
  html.vch-an .dp-price                         { order: 3 !important; }
  html.vch-an .ldm-top #vcpbDetail,
  html.vch-an .dp-top  #vcpbDetail              { order: 4 !important; }
  html.vch-an .ldm-price-label,
  html.vch-an .dp-price-label                   { order: 5 !important; }
  html.vch-an .vcdu-shiprow,
  html.vch-an #vcduShipPanel                    { order: 6 !important; }
  html.vch-an .ldm-badges,
  html.vch-an .dp-badges                        { order: 7 !important; }
  html.vch-an #ldmEgOptions,
  html.vch-an .vcdu-varsplit                    { order: 8 !important; }
  html.vch-an .vcdu-ctcard                      { order: 9 !important; }

  /* Merken-Herz sitzt auf DERSELBEN Zeile wie der Haendlername, ganz rechts
     (Betreiber 24.08.2026). Beide sind Geschwister in einer Spalte — deshalb
     bekommt die Haendlerzeile die Hoehe des Herzens, und das Herz wird um
     genau diese Hoehe hochgezogen. Feste Werte statt gemessener: so stimmt
     es in jeder Kategorie, unabhaengig von deren Zeilenabstaenden. */
  html.vch-an .ldm-loc,
  html.vch-an .dp-loc {
    order: 10 !important;
    min-height: 44px !important;
    margin-bottom: 0 !important;
    padding-right: 54px !important;
    display: flex !important;
    align-items: center !important;
  }
  html.vch-an .ldm-top .vcdu-heart,
  html.vch-an .dp-top  .vcdu-heart {
    order: 11 !important;
    margin-top: -44px !important;
    margin-bottom: .8rem !important;
  }
  html.vch-an #ldmFinLine,
  html.vch-an #dmFinLine                        { order: 12 !important; }
  html.vch-an .vcdu-descspalte                  { order: 13 !important; }
  html.vch-an .ldm-specs-grid                   { order: 14 !important; }

  /* 🚨 Das Herz war absolut in der rechten Spalte verankert. Durch
     display:contents verliert es seinen Bezugsrahmen — deshalb wird es
     hier zu einem normalen Element in der Reihe (Amazon setzt „Merken"
     ebenfalls in den Kaufbereich, nicht schwebend aufs Bild). */
  html.vch-an .ldm-top .vcdu-heart,
  html.vch-an .dp-top .vcdu-heart {
    position: static !important;
    top: auto !important; right: auto !important;
    width: 44px !important;
    height: 44px !important;
    align-self: flex-end !important;
    border-radius: 50% !important;
    border: 1.5px solid var(--vch-rand) !important;
    background: transparent !important;
  }

  /* — Bildergalerie als Wischstrecke — */
  html.vch-an .vcdu-gal {
    display: flex !important;
    grid-template-columns: none !important;
    grid-template-rows: none !important;
    gap: 0 !important;
    /* 4:3 statt quadratisch: die Inseratsfotos sind ueberwiegend 16:9,
       im Quadrat blieben oben und unten je ~90 px weisse Balken. */
    aspect-ratio: 4 / 3 !important;
    max-height: 56vh;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    border-radius: 0 !important;
    margin: 0 -1rem .2rem !important;
    width: calc(100% + 2rem) !important;
    background: var(--vch-flaeche);
  }
  html.vch-an .vcdu-gal::-webkit-scrollbar { display: none; }
  html.vch-an .vcdu-gal > .vcdu-gk {
    flex: 0 0 100% !important;
    width: 100% !important;
    height: 100% !important;
    grid-area: auto !important;
    grid-column: auto !important;
    grid-row: auto !important;
    scroll-snap-align: center;
    border-radius: 0 !important;
    margin: 0 !important;
  }
  /* 🚨 Hier steht die kanonische Bildregel — eine zweite weiter unten
     verliert gegen sie (diese hat zwei Klassen mehr). `cover` statt
     `contain`: hochkante Fotos liessen sonst dicke Balken links und
     rechts stehen (Betreiber 24.08.2026: „fuelle das mit dem Bild"). */
  html.vch-an .vcdu-gal > .vcdu-gk img {
    width: 100% !important;
    height: 100% !important;
    object-fit: cover !important;
    background: var(--vch-flaeche);
  }

  /* Bildpunkte unter der Galerie, von vc-handy.js gepflegt.
     Bewusst IM FLUSS statt ueberlagert: die Galerie ist der Rollbehaelter,
     ein absolut gesetztes Kind wuerde mitrollen, und die aufgeloesten
     Spalten (display:contents) geben keinen Bezugsrahmen her. */
  .vch-punkte {
    order: 1 !important;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    height: 22px;
    margin: 0 0 .2rem !important;
    width: 100%;
  }
  .vch-punkte i {
    width: 6px; height: 6px;
    border-radius: 50%;
    background: var(--vch-rand);
    transition: width .18s ease, background .18s ease;
  }
  .vch-punkte i.an { width: 18px; border-radius: 999px; background: var(--vch-blau); }
  .vch-punkte:empty, .vch-punkte[hidden] { display: none; }

  /* — Abschnitte unterhalb in Amazon-Reihenfolge —
     Bilder/Titel/Preis/Kaufen · Produkt im Detail · Technik ·
     Bewertungen · Fragen · Anbieter · Zubehoer · Vergleich · Aehnliches */
  html.vch-an #listingDetailModal .ldm-page,
  html.vch-an #listingDetailModal .dm-page {
    display: flex !important;
    flex-direction: column !important;
    padding-top: 0 !important;
    padding-left: 1rem !important;
    padding-right: 1rem !important;
  }
  /* 🚨 Die Abschnitte heissen je nach Seite ANDERS — kategorie.html
     bringt z.B. #ldmDealerSection, #vcQARow, .ldm-bottom und
     #vcduMapBand mit, elektrogeraete.html dagegen #ldmDealer und
     #ldmCommunityQA. Deshalb wird hier nach Kennung gesucht und NICHT
     nach Seite verzweigt (Hausregel: keine festen Seitenlisten). */
  html.vch-an #listingDetailModal .ldm-page > *,
  html.vch-an #listingDetailModal .dm-page > * { order: 15; }

  html.vch-an #listingDetailModal .ldm-top,
  html.vch-an #listingDetailModal #dmBody           { order: 0 !important; }

  /* Beschreibung direkt hinter den Kaufbereich (Amazon: „About this item").
     immobilien.html haelt sie als eigenen Abschnitt #ldmDescRow ausserhalb
     von .ldm-top. */
  html.vch-an #listingDetailModal #ldmDescRow       { order: 1 !important; }

  /* 🚨 Die Aufklapp-Abschnitte gehoeren ÜBER die grossen Produktbilder und
     ueber das Haendlerkaertchen (Betreiber 24.08.2026). Bei Amazon stehen
     „Kunden kauften auch" und „Im Vergleich" gleich nach der Beschreibung,
     die grossen Bilder und der Verkaeufer kommen erst danach. */
  html.vch-an #listingDetailModal #ldmAlsoBoughtSec,
  html.vch-an #listingDetailModal #dmBought         { order: 2 !important; }

  html.vch-an #listingDetailModal #ldmCompareSec,
  html.vch-an #listingDetailModal #dmCompare        { order: 3 !important; }

  html.vch-an #listingDetailModal #ldmSimilarSec,
  html.vch-an #listingDetailModal #dmSimilar        { order: 4 !important; }

  html.vch-an #listingDetailModal .ldm-page > .ldm-sec,
  html.vch-an #listingDetailModal .ldm-bottom       { order: 5 !important; }

  html.vch-an #listingDetailModal #ldmProdGallerySec,
  html.vch-an #listingDetailModal .ldm-prodgallerysec,
  html.vch-an #listingDetailModal .dm-page > .dp-sec { order: 6 !important; }

  html.vch-an #listingDetailModal #ldmProductReviews,
  html.vch-an #listingDetailModal #dmProductReviews,
  html.vch-an #listingDetailModal .ldm-revsec       { order: 7 !important; }

  html.vch-an #listingDetailModal #ldmCommunityQA,
  html.vch-an #listingDetailModal #dmQaMount,
  html.vch-an #listingDetailModal #vcQARow          { order: 8 !important; }

  /* 🚨 Feste Raender: vc-detail-upgrade.js zieht das Kartenband am Desktop
     mit einem errechneten negativen margin-top hinter die Info-Spalte
     (vcduMapTopToGallery). In der Handy-Spalte ergibt dieser Zug keinen
     Sinn und wuerde Abschnitte uebereinanderschieben. */
  html.vch-an #listingDetailModal #vcduMapBand {
    order: 9 !important;
    margin-top: 0 !important;
    margin-bottom: 1rem !important;
  }

  html.vch-an #listingDetailModal #ldmDealer,
  html.vch-an #listingDetailModal #dmDealer,
  html.vch-an #listingDetailModal #ldmDealerSection,
  html.vch-an #listingDetailModal .ldm-dealersec    { order: 10 !important; }

  html.vch-an #listingDetailModal #vcRecoRow        { order: 11 !important; }

  /* 🚨 Seitlicher Ueberlauf: gemessen lief die Detailansicht bis 1196 px
     Breite auf einem 375-px-Schirm. Verursacher waren die
     Empfehlungsregale (1180 px) und die Karten-Einbettung (660 px).
     Die Regale rollen INNEN weiter waagrecht — nur ihr Rahmen wird
     begrenzt. Danach gemessen: 377 px. */
  html.vch-an #listingDetailModal #vcRecoRow,
  html.vch-an #listingDetailModal iframe {
    width: 100% !important;
    max-width: 100% !important;
  }
  html.vch-an #listingDetailModal .ldm-dstatx { flex-wrap: wrap !important; }

  /* Das Werbeband ueber dem Inserat faellt auf dem Telefon weg — es war
     170px hoch, und der Zurueck-Knopf lag darueber.
     🚨 NICHT ueber `display` zu erreichen: vc-detail-upgrade.js schreibt
     `display:block !important` als INLINE-Stil auf den Knoten (im Browser
     nachgelesen), und dagegen kommt kein Stilblatt an. `visibility` und
     `height` stehen dort nicht — darueber laeuft es. */
  html.vch-an #listingDetailModal .ldm-topbanner {
    height: 0 !important;
    min-height: 0 !important;
    overflow: hidden !important;
    visibility: hidden !important;
  }
  html.vch-an #listingDetailModal .ldm-topbanner img { height: 0 !important; }

  /* ── Kein Werbeband, kein Glas, kein Verlauf ──
     Betreiber 24.08.2026: „bei der Detailansicht Banner und Hintergrund
     komplett weglassen, einfach genau der Aufbau wie Amazon."
     Amazon zeigt eine ruhige, einfarbige Seite. #vcduCutLayer ist die
     ganzseitige Verlaufsebene des Banner-Modus (gemessen: 6.398 px hoch)
     — sie faellt weg, ebenso das Milchglas der Abschnitte. */
  html.vch-an #vcduCutLayer { display: none !important; }

  /* 🚨 Der eigentliche „Hintergrund" sind ZWEI fixierte Schein-Ebenen am
     Fenster selbst (vc-detail-upgrade.js:753 und :767): ::before traegt das
     Bannerbild ueber den ganzen Schirm, ::after einen Verlauf darueber.
     Beide sind nur ueber die Pseudo-Elemente erreichbar — ohne sie bliebe
     der Schimmer hinter dem Inhalt stehen. */
  html.vch-an #listingDetailModal.vcdu-bannerbg::before,
  html.vch-an #listingDetailModal.vcdu-bannerbg::after {
    display: none !important;
    content: none !important;
    background: none !important;
  }

  html.vch-an #listingDetailModal.open,
  html.vch-an #listingDetailModal.vcdu-bannerbg,
  html.vch-an #listingDetailModal .ldm-page,
  html.vch-an #listingDetailModal .dm-page {
    background: var(--vch-flaeche) !important;
    background-image: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
  }

  /* Abschnitte flach: keine Schatten, keine Glaskarten — nur eine feine
     Trennlinie, wie Amazon sie zwischen den Bloecken zieht. */
  html.vch-an #listingDetailModal .vcdu-card,
  html.vch-an #listingDetailModal .ldm-sec,
  html.vch-an #listingDetailModal .dp-sec {
    background: transparent !important;
    background-image: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    box-shadow: none !important;
    border: none !important;
    border-top: 1px solid var(--vch-rand) !important;
    border-radius: 0 !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  /* Der alte Textlink „Zurueck zu den Suchergebnissen" wird durch die
     eigene Kopfzeile ersetzt. NUR verstecken — vc-zurueck.js verwaltet
     ihn weiter, und die Kopfzeile klickt genau diesen Knopf. */
  html.vch-an #listingDetailModal .ldm-close { display: none !important; }

  /* — Schriftgroessen auf App-Mass — */
  html.vch-an #listingDetailModal .ldm-title,
  html.vch-an #listingDetailModal .dp-title {
    font-size: 1.12rem !important;
    line-height: 1.35 !important;
    margin: .5rem 0 .35rem !important;
    /* Der freie Streifen rechts war fuer das schwebende Herz reserviert —
       das steht jetzt als eigener Knopf in der Reihe. */
    padding-right: 0 !important;
  }
  html.vch-an .ldm-price,
  html.vch-an .dp-price {
    font-size: 1.7rem !important;
    margin: 0 0 .1rem !important;
  }
  html.vch-an .vcdu-descspalte {
    margin-top: .9rem !important;
    border-top: 1px solid var(--vch-rand);
    padding-top: .9rem !important;
  }

  /* ── Ausfuehrungen (Farbe, Groesse, Speicher …) wie bei Amazon ──
     Betreiber 24.08.2026: „mit Auswahl wie z. B. Farbe vom Produkt."
     Dort stehen die Auswahlfelder KOMPAKT nebeneinander und brechen um —
     nicht als Knopf ueber die volle Breite. Farbfelder sind runde Punkte,
     alles andere kleine Kacheln mit Beschriftung. */
  /* ── Aufklapp-Köpfe wie bei Amazon: LINKSBÜNDIG, Pfeil am rechten Rand ──
     Gemessen war `.vcdu-acch` zentriert (text-align + justify-content
     center) — die Überschriften brachen dadurch mittig um und standen wie
     Zwischentitel statt wie anklickbare Zeilen. */
  html.vch-an #listingDetailModal .vcdu-acch {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    text-align: left !important;
    gap: .6rem !important;
    width: 100% !important;
    padding: 1rem 0 !important;
    min-height: 0 !important;
  }
  html.vch-an #listingDetailModal .vcdu-acch > * { text-align: left !important; }
  html.vch-an #listingDetailModal .vcdu-acch svg {
    flex: 0 0 auto !important;
    margin-left: auto !important;
  }
  /* Überschriften einheitlich: eine Größe, linksbündig, kein Umbruch mittig. */
  html.vch-an #listingDetailModal .ldm-col-title,
  html.vch-an #listingDetailModal .vcqa-h,
  html.vch-an #listingDetailModal .dp-sec-h,
  html.vch-an #listingDetailModal .ldm-sec-title {
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif !important;
    font-size: 1.02rem !important;
    font-weight: 800 !important;
    text-align: left !important;
    color: var(--vch-text) !important;
    margin: 0 !important;
  }

  /* ── „Verfügbar" ohne Kasten: nur die Schrift in Grün ──
     Betreiber 24.08.2026. Gemessen war es eine hellgrüne Fläche
     (rgb(220,252,231)) mit dunkelgrüner Schrift. */
  html.vch-an #listingDetailModal .ldm-badge,
  html.vch-an #listingDetailModal .dp-badges > * {
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    padding: 0 !important;
    border-radius: 0 !important;
    font-weight: 700 !important;
  }
  html.vch-an #listingDetailModal .ldm-badge-green { color: #16a34a !important; }
  html[data-theme="dark"].vch-an #listingDetailModal .ldm-badge-green { color: #34D399 !important; }

  /* Kennzeichen-Zeile eng halten — sie brach auf zwei Zeilen mit einem
     leeren Streifen darunter (gemessen 65 px hoch + 35 px Abstand). */
  html.vch-an #listingDetailModal .ldm-badges,
  html.vch-an #listingDetailModal .dp-badges {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    gap: .4rem !important;
    margin: .3rem 0 .5rem !important;
  }
  html.vch-an #listingDetailModal #ldmEgOptions,
  html.vch-an #listingDetailModal .vcdu-varsplit { margin-top: .5rem !important; }

  html.vch-an #listingDetailModal .vcvar { margin: .2rem 0 .6rem !important; }
  html.vch-an #listingDetailModal .vcvar-g { margin-bottom: .85rem !important; }
  html.vch-an #listingDetailModal .vcvar-gl {
    display: block;
    font-size: .88rem !important;
    font-weight: 600 !important;
    color: var(--vch-mitte) !important;
    margin-bottom: .45rem !important;
  }
  html.vch-an #listingDetailModal .vcvar-gl .cur {
    color: var(--vch-text) !important;
    font-weight: 800 !important;
  }
  html.vch-an #listingDetailModal .vcvar-row {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: .5rem !important;
    width: 100% !important;
  }
  /* 🚨 Zwei Kennungen noetig: vc-detail-upgrade setzt
     `#listingDetailModal #ldmVarPick .vcvar-opt{flex:1 1 150px!important}` —
     mit nur EINER Kennung verliert die Regel und die Felder dehnen sich
     wieder ueber die halbe Zeile. */
  html.vch-an #listingDetailModal #ldmVarPick .vcvar-opt,
  html.vch-an #listingDetailModal .vcvar-opt {
    flex: 0 0 auto !important;
    width: auto !important;
    min-width: 0 !important;
    max-width: none !important;
    min-height: 42px !important;
    padding: 0 .9rem !important;
    border-radius: 10px !important;
    border: 1.5px solid var(--vch-rand) !important;
    background: transparent !important;
    color: var(--vch-text) !important;
    font-size: .87rem !important;
    font-weight: 600 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    gap: .45rem !important;
  }
  /* Gewaehlte Ausfuehrung: kraeftiger Rahmen, wie Amazon. */
  html.vch-an #listingDetailModal .vcvar-opt.on,
  html.vch-an #listingDetailModal .vcvar-opt[aria-pressed="true"],
  html.vch-an #listingDetailModal .vcvar-opt.sel {
    border-color: var(--vch-blau) !important;
    border-width: 2px !important;
    background: var(--vch-blau-weich) !important;
  }
  /* Nicht mehr lieferbare Kombination bleibt sichtbar, aber matt. */
  html.vch-an #listingDetailModal .vcvar-opt[disabled],
  html.vch-an #listingDetailModal .vcvar-opt.aus { opacity: .4 !important; }
  /* Farbpunkt */
  html.vch-an #listingDetailModal .vcvar-sw {
    width: 20px !important; height: 20px !important;
    border-radius: 50% !important;
    flex: 0 0 auto !important;
    border: 1px solid rgba(15, 23, 34, .18) !important;
  }

  /* — Kaufbereich: EINE volle Aktion je Zeile (Fingerbreite) — */
  html.vch-an .vcdu-ctcard {
    margin: .8rem 0 !important;
    padding: .9rem !important;
    border: 1px solid var(--vch-rand) !important;
    border-radius: 14px !important;
    background: var(--vch-flaeche) !important;
  }
  html.vch-an .vcdu-ctcard .ldm-cta-btn,
  html.vch-an .vcdu-ctcard .vctm-btn {
    width: 100% !important;
    min-height: 46px !important;
    justify-content: center !important;
  }

  /* — Untere Kaufleiste — */
  html.vch-an #vcduStickyBar {
    padding: .6rem .8rem calc(.6rem + env(safe-area-inset-bottom, 0px)) !important;
  }
  html.vch-an #vcduStickyBar .vcdu-sb-btns {
    gap: 0 !important;
    max-width: 100% !important;
    overflow: visible !important;
  }
  html.vch-an #vcduStickyBar .vcdu-sb-btn { min-height: 46px !important; }
  /* Amazon zeigt unten GENAU EINE Handlung. Die uebrigen stehen
     unverkuerzt in der Kaufkarte weiter oben — hier wurden sie nur
     seitlich abgeschnitten und sahen kaputt aus. */
  html.vch-an #vcduStickyBar .vcdu-sb-btn:not(.primary) { display: none !important; }
  html.vch-an #vcduStickyBar .vcdu-sb-btn.primary {
    flex: 1 1 auto !important;
    width: 100% !important;
    justify-content: center !important;
  }

  /* — Amazon schreibt kein „Preis" unter den Preis. Die graue Zeile
       stand allein da und sagte nichts, was der Betrag nicht sagt.
       🚨 Zwei Namensfamilien: die ID auf elektrogeraete/immobilien/
       fahrzeuge/kategorie, die KLASSE auf maschinen/werkstoffe/
       verpackungen/software. Nur die ID zu treffen liess die Haelfte stehen. */
  html.vch-an #listingDetailModal #ldmPriceLabel,
  html.vch-an #listingDetailModal .ldm-price-label,
  html.vch-an #dmBody .dp-price-label,
  html.vch-an .dm-page .dp-price-label { display: none !important; }

  /* 🚨 DER Fehler, den der Betreiber gemeldet hat („Ueberschrift ganz unten,
     Beschreibung oben"): auf kategorie.html — also in ALLEN neun dynamischen
     Kategorien — liegt `#ldmDescRow` INNERHALB von `.ldm-gallery`. Die habe
     ich auf `display:contents` gesetzt, damit `order` ueber die Spalten
     hinweg wirkt. Dadurch wird die Beschreibung zum Geschwister der Galerie
     und traegt wie diese `order:1`. Bei Gleichstand entscheidet die
     Dokumentreihenfolge → Beschreibung landete VOR dem Titel (order 2).
     Steckt sie in `.ldm-top`, gehoert sie an die Stelle der Beschreibung (13).
     Als direktes Kind von `.ldm-page` bleibt `order:1` richtig. */
  html.vch-an #listingDetailModal .ldm-top #ldmDescRow,
  html.vch-an #listingDetailModal .dp-top #ldmDescRow,
  html.vch-an #dmBody .dp-top #ldmDescRow { order: 13 !important; }

  /* ═══════════════════════════════════════════════════════════
     27. WERKZEUGLEISTE UND DETAIL-GESTALTUNG (Betreiber 24.08.2026)
     ═══════════════════════════════════════════════════════════ */

  /* — Die dicken Pillen im Kasten (Bild 1) werden zur ruhigen Zeile aus
       Bild 2: nur Schrift und ein kleines Zeichen, kein Kasten, keine
       Fuellung. Dieselbe Optik dann auf allen Seiten. — */
  html.vch-an .mobile-filterbar {
    display: flex !important;
    gap: 1.4rem !important;
    padding: .55rem 1rem .7rem !important;
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    border-bottom: 1px solid var(--vch-rand) !important;
  }
  /* 🚨 Dreifach-Klasse noetig: vc-knopfdesign.js faerbt ueber
     `[data-theme="dark"] .vckd.vckd.vckd { background: … !important }`.
     Das sind vier Klassen — eine gewoehnliche Regel verliert dagegen,
     auch mit `!important`. Dieselbe Technik gegenhalten. */
  html.vch-an .mobile-filterbar .mfb-btn.mfb-btn.mfb-btn {
    flex: 0 0 auto !important;
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    border-radius: 0 !important;
    padding: 0 !important;
    min-height: 34px !important;
    color: var(--vch-text) !important;
    font-size: .88rem !important;
    font-weight: 600 !important;
    gap: .4rem !important;
  }

  .vch-werkzeug {
    display: flex;
    gap: 1.4rem;
    padding: .1rem 1rem .7rem;
    border-bottom: 1px solid var(--vch-rand);
  }
  .vch-wz-knopf {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    min-height: 34px;
    padding: 0;
    border: none;
    background: none;
    color: var(--vch-text);
    font-family: inherit;
    font-size: .88rem;
    font-weight: 600;
    cursor: pointer;
  }
  .vch-blatt-fuss { padding: .9rem 1.1rem calc(1.1rem + env(safe-area-inset-bottom, 0px)); }
  .vch-filterinhalt { max-height: 60vh; overflow-y: auto; }
  /* Der echte Filterkasten liegt jetzt im Blatt — einspaltig und ohne
     seine Desktop-Huelle. */
  .vch-filterinhalt .vc-scard-filters {
    display: grid !important;
    grid-template-columns: 1fr !important;
    gap: .7rem !important;
    width: 100% !important;
  }
  .vch-filterinhalt select,
  .vch-filterinhalt input { width: 100% !important; min-height: 44px !important; }

  /* — Detailansicht: klare Rangfolge statt gleichfoermiger Bloecke.
       Betreiber: „ich weiss nicht wie man das schoen gestaltet" —
       Entscheidung: EINE Haupthandlung, alles andere leiser; Text
       gross genug zum Lesen; Abschnitte durch Luft getrennt, nicht
       durch Kaesten. — */
  html.vch-an #listingDetailModal .ldm-title,
  html.vch-an #listingDetailModal #ldmTitle,
  html.vch-an .dm-page .dp-title,
  html.vch-an .dm-page .vcdp-title {
    font-size: 1.16rem !important;
    line-height: 1.32 !important;
    font-weight: 650 !important;
    letter-spacing: -.005em !important;
    margin: .9rem 0 .15rem !important;
  }
  html.vch-an #listingDetailModal .ldm-price,
  html.vch-an #listingDetailModal #ldmPrice,
  html.vch-an .dm-page .dp-price,
  html.vch-an .dm-page .vcdp-price {
    font-size: 1.95rem !important;
    font-weight: 800 !important;
    letter-spacing: -.02em !important;
    line-height: 1.1 !important;
    margin: .35rem 0 .2rem !important;
  }
  /* Luft zwischen den Abschnitten — das trennt besser als jeder Rahmen. */
  html.vch-an #listingDetailModal .ldm-page > *,
  html.vch-an .dm-page > * { margin-bottom: 1.15rem !important; }

  /* Aufklapper: eine ruhige Zeile mit Pfeil, Haarlinie nur dazwischen. */
  html.vch-an #listingDetailModal .vcdu-acch,
  html.vch-an .dm-page .vcdu-acch {
    min-height: 52px !important;
    padding: 0 1rem !important;
    font-size: .97rem !important;
    font-weight: 650 !important;
    border-top: 1px solid var(--vch-rand) !important;
  }

  /* Farb- und Ausfuehrungswahl als Chips — antippen statt aufklappen. */
  html.vch-an #listingDetailModal .vcvar-opt,
  html.vch-an .dm-page .vcvar-opt {
    min-height: 42px !important;
    padding: 0 .85rem !important;
    border-radius: 10px !important;
    border: 1.5px solid var(--vch-rand) !important;
    background: transparent !important;
    font-size: .88rem !important;
    font-weight: 600 !important;
  }
  html.vch-an #listingDetailModal .vcvar-opt[aria-pressed="true"],
  html.vch-an #listingDetailModal .vcvar-opt.aktiv,
  html.vch-an #listingDetailModal .vcvar-opt.sel {
    border-color: var(--vch-blau) !important;
    background: var(--vch-blau-weich) !important;
  }

  /* Beschreibung: lesbare Zeilenlaenge und Zeilenhoehe. */
  html.vch-an #listingDetailModal .ldm-desc,
  html.vch-an .dm-page .vcdp-descwrap,
  html.vch-an .dm-page .dp-desc {
    font-size: .93rem !important;
    line-height: 1.62 !important;
  }

  /* Haupthandlung deutlich groesser als alles andere. */
  html.vch-an .vcdu-ctcard > .vcdu-primar,
  html.vch-an .vcdu-ctcard > .ldm-cta-btn:first-of-type,
  html.vch-an .vcdu-ctcard > .dm-btn.contact {
    min-height: 52px !important;
    font-size: 1rem !important;
    font-weight: 700 !important;
  }
  /* — Perlenform mit sichtbarem hellem Umriss: so erkennt man auf dunklem
       Grund sofort, dass es ein Knopf ist, ohne dass eine Fuellung mit der
       Haupthandlung streitet. Gilt fuer die sichtbaren Nebenhandlungen UND
       fuer alles, was im Blatt „Weitere Moeglichkeiten" liegt. — */
  /* 🚨 GEMESSEN 25.08.2026: `:not([data-vch-kauf])` ist hier PFLICHT.
     Diese Regel ist GENAUER als die Kauffarben-Regel weiter unten und hat
     die beiden Kaufknoepfe wieder auf `transparent` gesetzt — sichtbar nach
     dem Schliessen von „Weitere Moeglichkeiten", wenn vc-detail-upgrade die
     Knoepfe neu baut und noch kein Inline-Stil da ist. Die Farbe kam dann
     aus dem Stylesheet, und dort gewann die falsche Regel. Nicht die
     Reihenfolge entscheidet, sondern die Genauigkeit des Selektors. */
  html.vch-an #listingDetailModal .vcdu-ctcard > button:not(.vcdu-primar):not(.vch-mehrakt):not([data-vch-kauf]),
  html.vch-an #listingDetailModal .vcdu-ctcard > a:not(.vcdu-primar):not([data-vch-kauf]),
  html.vch-an #dmBody .vcdu-ctcard > button:not(.vcdu-primar):not(.vch-mehrakt):not([data-vch-kauf]),
  html.vch-an #dmBody .vcdu-ctcard > a:not(.vcdu-primar):not([data-vch-kauf]),
  html.vch-an .vch-aktinhalt button,
  html.vch-an .vch-aktinhalt a {
    border: 1.5px solid rgba(255, 255, 255, .55) !important;
    border-radius: 999px !important;
    background: transparent !important;
    font-size: .93rem !important;
    font-weight: 600 !important;
  }
  html.vch-an .vcdu-ctcard > .ldm-cta-btn:first-of-type { border: none !important; }

  /* Im Hellmodus waere ein weisser Umriss unsichtbar. */
  html.vch-an:not([data-theme="dark"]) #listingDetailModal .vcdu-ctcard > button:not(.vcdu-primar):not(.vch-mehrakt):not([data-vch-kauf]),
  html.vch-an:not([data-theme="dark"]) #listingDetailModal .vcdu-ctcard > a:not(.vcdu-primar):not([data-vch-kauf]),
  html.vch-an:not([data-theme="dark"]) .vch-aktinhalt button,
  html.vch-an:not([data-theme="dark"]) .vch-aktinhalt a {
    border-color: rgba(15, 23, 34, .35) !important;
  }

  /* — „Weitere Möglichkeiten": eine ruhige Zeile statt vier weiterer
       Knoepfe. Muster aus Booking und Airbnb — die Ausweichhandlungen
       liegen hinter einer Zeile, nicht nebeneinander im Blickfeld. — */
  html.vch-an #listingDetailModal .vch-mehrakt,
  html.vch-an #dmBody .vch-mehrakt {
    grid-column: 1 / -1 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    width: 100% !important;
    min-height: 50px !important;
    padding: 0 !important;
    margin-top: .2rem !important;
    border: none !important;
    border-top: 1px solid var(--vch-rand) !important;
    background: none !important;
    color: var(--vch-text) !important;
    font-family: inherit !important;
    font-size: .93rem !important;
    font-weight: 600 !important;
    cursor: pointer !important;
  }
  .vch-mehrakt-pf { color: var(--vch-leise); display: flex; }

  /* Im Blatt stehen die Handlungen als Liste untereinander — dort ist
     Platz, dort duerfen sie ihre Beschriftung tragen. */
  .vch-aktinhalt { display: flex; flex-direction: column; gap: .55rem; padding-bottom: .6rem; }
  .vch-aktinhalt button,
  .vch-aktinhalt a {
    width: 100% !important;
    min-height: 50px !important;
    justify-content: center !important;
    gap: .6rem !important;
    padding: 0 1rem !important;
    box-shadow: none !important;
  }
  /* Die Dreier-Gruppe verliert im Blatt ihr Raster — hier ist Platz. */
  .vch-aktinhalt .vcdu-actrow,
  .vch-aktinhalt .vcdu-trio {
    display: flex !important;
    flex-direction: column !important;
    width: 100% !important;
    gap: .1rem !important;
  }
  .vch-aktinhalt .vcdu-trio button { font-size: .95rem !important; }
  .vch-aktinhalt .vcdu-trio button > span { display: inline !important; }

  /* ═══════════════════════════════════════════════════════════
     26. KARTENBAND  (Betreiber 24.08.2026: „die Karte ist verbuggt")
     🚨 Der Karten-Rahmen steht auf `left:-280px; top:-90px` und ist
     648 px hoch — am Rechner ein gewollter Bildausschnitt aus einer
     groesseren Karte. Auf 390 px schiebt derselbe Versatz die Karte
     fast vollstaendig aus dem sichtbaren Feld: sichtbar blieben rund
     107 px, daneben stand eine schwarze Flaeche.
     Am Telefon fuellt der Rahmen das Band einfach ganz aus.
     ═══════════════════════════════════════════════════════════ */

  html.vch-an #vcduMapBand,
  html.vch-an #vcduMapBand .ldm-map,
  html.vch-an #vcduMapBand .ldm-info-map {
    width: 100% !important;
    max-width: 100% !important;
    left: 0 !important;
    right: auto !important;
    overflow: hidden !important;
  }
  html.vch-an #vcduMapBand iframe,
  html.vch-an .ldm-map iframe,
  html.vch-an .ldm-dmap iframe {
    position: absolute !important;
    left: 0 !important;
    top: 0 !important;
    width: 100% !important;
    height: 100% !important;
    border: 0 !important;
  }
  html.vch-an .ldm-dmap { position: relative !important; }

  /* 🚨 Ein Kartenband von 560 px frisst am Telefon zwei Drittel des Schirms.
     Die Hoehe kommt aus ZWEI Seitenregeln mit je zwei IDs:
       #listingDetailModal #vcduMapBand                 { height:430px !important }
       #listingDetailModal.vcdu-bannerbg #vcduMapBand   { height:560px !important }
     Eine Regel mit nur einer ID verliert dagegen, auch mit `!important`.
     Darum hier bewusst zwei IDs UND zwei Klassen. */
  html.vch-an #listingDetailModal #vcduMapBand,
  html.vch-an #listingDetailModal.vcdu-bannerbg #vcduMapBand {
    height: 260px !important;
    min-height: 0 !important;
  }
  html.vch-an #listingDetailModal #vcduMapBand iframe,
  html.vch-an #listingDetailModal.vcdu-bannerbg #vcduMapBand iframe {
    height: 100% !important;
    min-height: 0 !important;
  }

  /* 🚨 Die Karte war zu dunkel — zwei Ursachen, beide fuer den Rechner
     gedacht, wo Text darueber liegt:
       1. der Rahmen traegt `filter: brightness(.45) saturate(.7)`
       2. `#vcduMapBand::after` legt einen dunklen Verlauf darueber
     Am Telefon liegt kein Text auf der Karte — sie darf hell sein. */
  html.vch-an #vcduMapBand iframe,
  html.vch-an .ldm-map iframe,
  html.vch-an .ldm-dmap iframe { filter: none !important; }
  html.vch-an #vcduMapBand::after,
  html.vch-an #vcduMapBand::before,
  html.vch-an .ldm-map::after { content: none !important; display: none !important; }
  html.vch-an #vcduMapBand .ldm-map { background: transparent !important; }

  /* — Randlos von links nach rechts: das Band sass 38 px eingerueckt in der
       Seitenpolsterung. `100vw` plus Mittigstellung sprengt jede Polsterung,
       egal wie breit sie auf der jeweiligen Seite ist. — */
  html.vch-an #listingDetailModal #vcduMapBand,
  html.vch-an #listingDetailModal.vcdu-bannerbg #vcduMapBand {
    width: 100vw !important;
    max-width: 100vw !important;
    margin-left: 50% !important;
    transform: translateX(-50%) !important;
    border-radius: 0 !important;
  }

  /* — Produktbilder ebenso randlos: „so gut wie moeglich links rechts
       alles fuellen". `contain` bleibt, damit nichts abgeschnitten wird —
       aber der Rahmen ist jetzt so breit wie der Schirm. — */
  /* 🚨 Nicht nur die Bildbahn `.vcdu-gal`, sondern auch ihre Huelle
     (`.dp-gallery` / `.vcdp-gallery`) — sonst begrenzt die Huelle die
     Bahn wieder auf die Spaltenbreite. Auf maschinen war die Galerie
     deshalb 352 statt 390. */
  html.vch-an #listingDetailModal .vcdu-gal,
  html.vch-an #dmBody .vcdu-gal,
  html.vch-an .dm-page .vcdu-gal,
  html.vch-an #listingDetailModal .dp-gallery,
  html.vch-an #listingDetailModal .vcdp-gallery,
  html.vch-an #dmBody .dp-gallery,
  html.vch-an #dmBody .vcdp-gallery,
  html.vch-an .dm-page .dp-gallery,
  html.vch-an .dm-page .vcdp-gallery {
    width: 100vw !important;
    max-width: 100vw !important;
    margin-left: 50% !important;
    transform: translateX(-50%) !important;
    border-radius: 0 !important;
  }
  /* Steckt die Bahn in einer schon randlosen Huelle, darf sie nicht ein
     zweites Mal verschoben werden — sonst waere sie um eine halbe
     Schirmbreite daneben. */
  html.vch-an .dp-gallery .vcdu-gal,
  html.vch-an .vcdp-gallery .vcdu-gal {
    margin-left: 0 !important;
    transform: none !important;
    width: 100% !important;
  }
  html.vch-an .vcdu-gal .vcdu-gk img { width: 100% !important; }

  /* ═══════════════════════════════════════════════════════════
     25. KONTO UND WARENKORB OHNE KOPFLEISTE  (Betreiber 24.08.2026)
     Beide Ebenen erreicht man ueber die untere Leiste; ein eigener
     Zurueck-Balken kostete nur 52 px und sagte nichts Neues.
     Die Detail- und Kategorie-Ebenen behalten ihren Kopf — dort ist
     „zurueck" die einzige Rueckreise.
     ═══════════════════════════════════════════════════════════ */

  html.vch-an #vcHandyKonto > .vch-ebene-kopf,
  html.vch-an #vcHandyKorb  > .vch-ebene-kopf { display: none !important; }
  html.vch-an #vcHandyKonto > .vch-ebene-koerper,
  html.vch-an #vcHandyKorb  > .vch-ebene-koerper { padding-top: .6rem; }

  /* ═══════════════════════════════════════════════════════════
     24. BILDER, AUFKLAPPER, SCHWEBENDE KNOEPFE  (Betreiber 24.08.2026)
     ═══════════════════════════════════════════════════════════ */

  /* — Bilder passten nicht: der Rahmen war 4:3, viele Inserats-Fotos sind
       aber hochkant (1200×1600). In einem 384×288-Kasten blieb davon nur
       216×288 uebrig, mit breiten Balken links und rechts. Ein quadratischer
       Rahmen — wie bei Amazon — laesst hochkant UND quer gross werden,
       ohne etwas abzuschneiden. — */
  html.vch-an #listingDetailModal .vcdu-gal,
  html.vch-an #dmBody .vcdu-gal,
  html.vch-an .dm-page .vcdu-gal {
    aspect-ratio: 1 / 1 !important;
    height: auto !important;
    max-height: none !important;
  }
  html.vch-an .vcdu-gal .vcdu-gk,
  html.vch-an .vcdu-gal .vcdu-gk img {
    height: 100% !important;
    max-height: 100% !important;
  }
  /* 🚨 `contain` liess bei hochkanten Fotos (1200×1600) dicke Balken links
     und rechts stehen. Betreiber-Entscheid 24.08.2026: „fuelle das mit dem
     Bild" → `cover`. Das fuellt den Rahmen randlos; oben und unten wird
     etwas beschnitten, waagrecht bleibt nichts leer. */
  html.vch-an .vcdu-gal img,
  html.vch-an .vcdu-gk img { object-fit: cover !important; }

  /* — Die Aufklapp-Bereiche standen verstreut: „Detailinformationen" bei
       1309, „Fragen & Antworten" erst bei 2963, der Anbieter bei 3651.
       Jetzt stehen sie zusammen (5 · 6 · 7), danach erst Produktbilder,
       Bewertungen und Empfehlungen. — */
  html.vch-an #listingDetailModal #vcQARow,
  html.vch-an #listingDetailModal #ldmCommunityQA,
  html.vch-an #listingDetailModal #dmQaMount,
  html.vch-an #listingDetailModal #dmCommunityQa { order: 6 !important; }

  html.vch-an #listingDetailModal #ldmDealerSection,
  html.vch-an #listingDetailModal #ldmDealer,
  html.vch-an #listingDetailModal #dmDealer { order: 7 !important; }

  html.vch-an #listingDetailModal #ldmProdGallerySec { order: 8 !important; }

  html.vch-an #listingDetailModal #ldmProductReviews,
  html.vch-an #listingDetailModal #dmProductReviews { order: 9 !important; }

  /* — Knoepfe schweben, wie alles in den Einstellungen. Die „Box" war nicht
       der Rahmen der Kaufkarte (die ist laengst durchsichtig), sondern die
       FUELLFARBE jedes einzelnen Nebenknopfes (#1f1f26). Die faellt weg;
       nur der Hauptknopf behaelt seine Farbe, weil er die Handlung ist.
       🚨 Die Knoepfe tragen Inline-`style` — ohne `!important` gewinnt der. — */
  html.vch-an #listingDetailModal .vcdu-ctcard button,
  html.vch-an #listingDetailModal .vcdu-ctcard a,
  html.vch-an #dmBody .vcdu-ctcard button,
  html.vch-an #dmBody .vcdu-ctcard a {
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
  }
  html.vch-an .vcdu-ctcard .vcdu-primar,
  html.vch-an .vcdu-ctcard .ldm-cta-btn:first-of-type,
  html.vch-an .vcdu-ctcard .dm-btn.contact {
    background: var(--vch-blau) !important;
    color: #fff !important;
  }

  /* — Zwei Knoepfe nebeneinander statt vier volle Breiten untereinander
       (Betreiber 24.08.2026). Der Hauptknopf bleibt allein und voll. — */
  /* 🚨 Raster statt Flex: beim Umbrechen blieben sonst Luecken (rechts
     „Preisalarm", links nichts). Und die Ausnahmen brauchen DIESELBE
     ID-Tiefe wie die allgemeine Regel — eine Regel ohne `#listingDetailModal`
     verliert gegen eine mit, auch mit `!important` und mehr Klassen.
     Genau daran ist die volle Breite des Hauptknopfes zuerst gescheitert. */
  /* 🚨 Seit die Nebenhandlungen im Blatt liegen, bleiben nur zwei bis drei
     Zeilen uebrig. Zwei Spalten liessen den einzelnen Nebenknopf halbbreit
     und allein stehen — untereinander und voll ist ruhiger und entspricht
     dem Muster von Amazon und Booking. */
  html.vch-an #listingDetailModal .vcdu-ctcard,
  html.vch-an #dmBody .vcdu-ctcard {
    display: grid !important;
    grid-template-columns: 1fr !important;
    gap: .5rem !important;
    align-items: stretch !important;
  }
  /* Das Herz doppelt sich mit „Parken" im Blatt — und schwebte ueber der
     Zeile „Weitere Moeglichkeiten". */
  html.vch-an #listingDetailModal .vcdu-ctcard > .vcdu-heart,
  html.vch-an #dmBody .vcdu-ctcard > .vcdu-heart { display: none !important; }

  /* — Kaufzeile: „Kaufen" traegt die Beschriftung, der Warenkorb steht als
       runder Knopf mit Umriss daneben (Betreiber 24.08.2026). — */
  html.vch-an .vch-kaufzeile {
    display: flex !important;
    align-items: stretch !important;
    gap: .5rem !important;
    width: 100% !important;
  }
  html.vch-an .vch-kaufzeile > *:first-child { flex: 1 1 auto !important; min-width: 0 !important; }
  html.vch-an .vch-korbknopf {
    flex: 0 0 auto !important;
    width: 52px !important;
    height: 52px !important;
    min-height: 52px !important;
    padding: 0 !important;
    border-radius: 50% !important;
    border: 1.5px solid rgba(255, 255, 255, .55) !important;
    background: transparent !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    font-size: 0 !important;          /* nur das Zeichen */
    gap: 0 !important;
  }
  html.vch-an .vch-korbknopf > span:not([class*="ic"]) { display: none !important; }
  html.vch-an .vch-korbknopf svg { width: 22px !important; height: 22px !important; }
  html.vch-an:not([data-theme="dark"]) .vch-korbknopf { border-color: rgba(15, 23, 34, .35) !important; }

  /* — Titelzeile: Ueberschrift links, Merken-Herz rechts daneben — */
  .vch-titelzeile {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: .8rem;
    width: 100%;
  }
  .vch-titelzeile > *:first-child { flex: 1 1 auto; min-width: 0; }
  html.vch-an .vch-titelzeile .vcdu-heart {
    flex: 0 0 auto !important;
    width: 42px !important;
    height: 42px !important;
    margin-top: .55rem !important;
    border-radius: 999px !important;
    border: 1.5px solid rgba(255, 255, 255, .5) !important;
    background: transparent !important;
    align-items: center !important;
    justify-content: center !important;
  }
  html.vch-an:not([data-theme="dark"]) .vch-titelzeile .vcdu-heart {
    border-color: rgba(15, 23, 34, .3) !important;
  }
  html.vch-an #listingDetailModal .vcdu-ctcard > *,
  html.vch-an #dmBody .vcdu-ctcard > * {
    min-width: 0 !important;
    margin: 0 !important;
  }
  /* Haupthandlung und Sammelreihen ueber beide Spalten. */
  html.vch-an #listingDetailModal .vcdu-ctcard > .vcdu-primar,
  html.vch-an #listingDetailModal .vcdu-ctcard > .ldm-cta-btn:first-of-type,
  html.vch-an #listingDetailModal .vcdu-ctcard > .dm-btn.contact,
  html.vch-an #listingDetailModal .vcdu-ctcard > .vcdu-actrow,
  html.vch-an #dmBody .vcdu-ctcard > .vcdu-primar,
  html.vch-an #dmBody .vcdu-ctcard > .ldm-cta-btn:first-of-type,
  html.vch-an #dmBody .vcdu-ctcard > .dm-btn.contact,
  html.vch-an #dmBody .vcdu-ctcard > .vcdu-actrow {
    grid-column: 1 / -1 !important;
  }
  /* Die Sammelreihe traegt drei Knoepfe — die bekommen ihre eigenen Spalten,
     statt zu dritt in eine halbe Breite gequetscht zu werden. */
  /* 🚨 In `.vcdu-actrow` steckt noch `.vcdu-trio`, das die drei Knoepfe
     haelt. Das Dreier-Raster gehoert deshalb auf `.vcdu-trio` — lag es
     auf `.vcdu-actrow`, landete das Trio komplett in EINER 112-px-Spalte
     und die Knoepfe waren 32 px breit. */
  html.vch-an #listingDetailModal .vcdu-actrow,
  html.vch-an #dmBody .vcdu-actrow {
    display: block !important;
    width: 100% !important;
  }
  html.vch-an #listingDetailModal .vcdu-trio,
  html.vch-an #dmBody .vcdu-trio {
    display: grid !important;
    grid-template-columns: repeat(3, 1fr) !important;
    gap: .5rem !important;
    width: 100% !important;
  }
  html.vch-an .vcdu-trio > button,
  html.vch-an .vcdu-trio > a { width: 100% !important; }
  /* 🚨 Drei Beschriftungen nebeneinander passen auf 390 px nicht — sie
     wurden mitten im Wort abgeschnitten („Teilei Preisala Parke").
     Betreiber 24.08.2026: „einfach nur Symbol". Der Text bleibt im
     `aria-label` fuer die Sprachausgabe. */
  html.vch-an #listingDetailModal .vcdu-actrow button,
  html.vch-an #listingDetailModal .vcdu-actrow a,
  html.vch-an #listingDetailModal .vcdu-trio button,
  html.vch-an #listingDetailModal .vcdu-trio a,
  html.vch-an #dmBody .vcdu-actrow button,
  html.vch-an #dmBody .vcdu-actrow a,
  html.vch-an #dmBody .vcdu-trio button,
  html.vch-an #dmBody .vcdu-trio a {
    font-size: 0 !important;
    gap: 0 !important;
    padding: 0 !important;
    min-height: 46px !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
  }
  html.vch-an .vcdu-actrow button > span,
  html.vch-an .vcdu-actrow a > span { display: none !important; }
  html.vch-an .vcdu-actrow svg {
    width: 21px !important;
    height: 21px !important;
    flex: 0 0 auto !important;
  }
  /* Das Herz gehoerte in die Reihe, nicht darunter frei schwebend. */
  html.vch-an #listingDetailModal .vcdu-ctcard > .vcdu-heart,
  html.vch-an #dmBody .vcdu-ctcard > .vcdu-heart {
    position: static !important;
    justify-self: center !important;
  }
  html.vch-an .vcdu-ctcard button,
  html.vch-an .vcdu-ctcard a {
    min-height: 46px !important;
    justify-content: center !important;
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
  }

  /* ═══════════════════════════════════════════════════════════
     23. DRITTE MARKUP-FAMILIE `vcdp-*`  (werkstoffe · verpackungen ·
         software — und jede kuenftige Kategorie, die dieselbe
         Feld-Bibliothek benutzt)
     🚨 Diese Familie war NIE abgedeckt. Aufbau einspaltig:
        .vcdp-top
        ├─ .vcdu-left  → .vcdp-gallery, .vcdp-sec (Beschreibung)
        └─ .vcdp-info  → .vcdp-badges, .vcdp-title, .vcdp-company,
                         .vcdp-pricebox, .vcdu-ctcard, .vcdu-heart
     Daraus wurde: Galerie → BESCHREIBUNG → Abzeichen → TITEL → Preis.
     Genau die Meldung „Ueberschrift ganz unten, Beschreibung oben".
     ═══════════════════════════════════════════════════════════ */

  html.vch-an #dmBody .vcdp-top,
  html.vch-an .dm-page .vcdp-top {
    display: flex !important;
    flex-direction: column !important;
    align-items: stretch !important;
    grid-template-columns: none !important;
    gap: 0 !important;
    padding: 0 !important;
  }
  /* 🚨 Die zweite Spalte heisst NICHT ueberall gleich: `.vcdp-info` auf
     software, `.vcdp-buy` auf werkstoffe — und die naechste Kategorie
     bringt womoeglich einen dritten Namen mit. Darum werden ALLE direkten
     Kinder von `.vcdp-top` aufgeloest; es sind immer nur Spalten-Huellen.
     Nur so wirkt `order` ueber die Spalten hinweg, und nur so haelt es
     auch fuer kuenftige Kategorien. */
  html.vch-an .vcdp-top > * { display: contents !important; }
  /* 🚨 `.vcdp-head` haelt Titel, Untertitel und Abzeichen als weitere Huelle
     zusammen (werkstoffe). Bleibt sie stehen, wandern alle drei als EIN Block
     ans Ende — Titel und Preis landeten unter der Beschreibung. */
  html.vch-an .vcdp-top .vcdp-head { display: contents !important; }

  /* Alles Unbenannte hinter die benannten Stufen. */
  html.vch-an .vcdp-top > * > * { order: 20; width: 100%; box-sizing: border-box; }

  html.vch-an .vcdp-gallery   { order: 1 !important; }
  html.vch-an .vcdp-title     { order: 2 !important; }
  html.vch-an .vcdp-sub,
  html.vch-an .vcdp-company   { order: 3 !important; }
  html.vch-an .vcdp-price,
  html.vch-an .vcdp-pricebox  { order: 4 !important; }
  html.vch-an .vcdp-top #vcpbDetail,
  html.vch-an .vcdp-top > * > .vcpb { order: 5 !important; }
  html.vch-an .vcdp-mwst      { order: 6 !important; }
  html.vch-an .vcdp-badges    { order: 7 !important; }
  html.vch-an .vcdp-top #ldmVarPick,
  html.vch-an .vcdp-top .vcvar-wrap { order: 8 !important; }
  html.vch-an .vcdp-top .vcdu-ctcard { order: 9 !important; }
  html.vch-an .vcdp-top .vcdu-heart  { order: 10 !important; }
  html.vch-an .vcdp-sec       { order: 13 !important; }

  html.vch-an .vcdp-price-label { display: none !important; }

  /* Titel in Amazon-Groesse, damit er als Ueberschrift wirkt. */
  html.vch-an #dmBody .vcdp-title {
    font-size: 1.06rem !important;
    line-height: 1.3 !important;
    font-weight: 700 !important;
    margin: .5rem 0 .1rem !important;
  }
  /* „Verfuegbar" ohne Kasten, nur gruene Schrift — wie in den anderen Familien. */
  html.vch-an #dmBody .vcdp-badges > * {
    background: transparent !important;
    border: none !important;
    padding: 0 !important;
  }

  /* — „Haeufig zusammen gekauft" — bei Amazon eine Zeile Bildchen mit
       + dazwischen. `.vcbndl-it` steht fest auf 132 px; zwei davon plus
       das Zeichen brauchen 297 px, der Kasten hat innen 271 — also
       brach jede Karte auf eine eigene Zeile um und rechts blieb ein
       leeres Feld. Mitwachsende Breite legt die drei nebeneinander. — */
  html.vch-an #vcRecoRow .vcbndl {
    gap: .3rem !important;
    padding: .75rem !important;
  }
  html.vch-an #vcRecoRow .vcbndl-it {
    flex: 1 1 0 !important;
    width: auto !important;
    min-width: 0 !important;
  }
  html.vch-an #vcRecoRow .vcbndl-op {
    width: 15px !important;
    font-size: 1.05rem !important;
  }
  html.vch-an #vcRecoRow .vcbndl-it .bb { padding: .35rem .3rem .45rem !important; }
  html.vch-an #vcRecoRow .vcbndl-it .bt { font-size: .68rem !important; }
  html.vch-an #vcRecoRow .vcbndl-it .bp { font-size: .72rem !important; }

  /* — Haendlerkarte: drei Spalten auf 289 px liessen die Beschriftungen
       senkrecht ausfransen — jede Kachel 146 px hoch. Zwei Spalten
       reichen fuer „Bei Vermittco seit / 2 Monaten" auf zwei Zeilen. — */
  html.vch-an #ldmDealer .ldm-dstatgrid {
    grid-template-columns: 1fr 1fr !important;
    gap: .85rem .7rem !important;
  }
  /* Die zweite Spalte (Ansprechpartner) ist meist leer und nahm 112 px. */
  html.vch-an #ldmDealer .ldm-dgrid2 {
    grid-template-columns: 1fr !important;
    gap: .7rem !important;
  }

  /* ═══════════════════════════════════════════════════════════
     13. KOPFZEILE DER DETAILANSICHT
     Muss ueber dem Vollbild-Fenster liegen (#listingDetailModal.open
     hat z-index 2500, vc-detail-upgrade.js:722).
     ═══════════════════════════════════════════════════════════ */
  #vcHandyDetailKopf {
    position: fixed;
    top: 0; left: 0; right: 0;
    z-index: 2600;
    display: flex;
    align-items: center;
    gap: .5rem;
    height: 52px;
    padding: 0 .6rem;
    background: var(--vch-flaeche);
    border-bottom: 1px solid var(--vch-rand);
    font-family: 'Manrope', system-ui, -apple-system, sans-serif;
  }
  .vch-dk-knopf {
    flex: 0 0 auto;
    width: 36px; height: 36px;
    display: flex; align-items: center; justify-content: center;
    border: none; background: transparent;
    color: var(--vch-text);
    border-radius: 50%;
    cursor: pointer; padding: 0;
    position: relative;
  }
  .vch-dk-knopf:active { background: var(--vch-blau-weich); }
  .vch-dk-titel {
    flex: 1 1 auto;
    min-width: 0;
    font-size: .92rem;
    font-weight: 700;
    color: var(--vch-text);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    opacity: 0;
    transition: opacity .18s ease;
  }
  #vcHandyDetailKopf.vch-gescrollt .vch-dk-titel { opacity: 1; }

  html.vch-an #listingDetailModal.open { padding-top: 52px !important; }

  /* ═══════════════════════════════════════════════════════════
     14. VERMI — schlichter Chat statt Buehne

     Betreiber 24.08.2026: „unten bei Vermi soll da einfach der Chatbot
     sein, ohne Animation, ohne dass da Frage/Antworten steht, einfach
     wie ChatGPT."

     🚨 Es gibt DREI Bewegungs-Ebenen in vc-chat.js, die einzeln
     abgeschaltet werden muessen, sonst bleibt eine uebrig:
       (1) Kreis-Aufblende  clip-path circle(), Klasse „auf"
       (2) Phasen-Gleiten   flex-grow .45s an .vcbot-fill
       (3) Milchglas        backdrop-filter blur(30px) saturate(180%)
     ═══════════════════════════════════════════════════════════ */

  html.vch-an .vcchat-panel {
    clip-path: none !important;
    -webkit-clip-path: none !important;
    transition: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    background: var(--vch-grund) !important;
  }
  html.vch-an .vcchat-panel .vcbot-fill {
    flex: 0 0 0 !important;
    transition: none !important;
    min-height: 0 !important;
    height: 0 !important;
  }
  /* Die grosse Begruessung faellt weg — der Name steht schon im Reiter. */
  html.vch-an .vcchat-panel .vcbot-hi { display: none !important; }

  /* Buehne wird ein schlichter Spaltenfluss: Verlauf oben, Eingabe unten. */
  html.vch-an .vcchat-panel .vcbot-stage {
    position: absolute !important;
    inset: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: flex-end !important;
    padding-top: 46px !important;
  }
  html.vch-an .vcchat-panel .vcchat-body {
    flex: 1 1 auto !important;
    overflow-y: auto !important;
    width: 100% !important;
    max-height: none !important;
    transition: none !important;
  }
  html.vch-an .vcchat-panel .vcbot-barwrap {
    flex: 0 0 auto !important;
    transition: none !important;
    /* Platz fuer die untere Navigationsleiste. */
    padding-bottom: calc(var(--vch-unten) + .5rem) !important;
  }
  html.vch-an .vcchat-panel .vcchat-note { transition: none !important; }

  /* Die Leiste bleibt sichtbar — Vermi ist ein Reiter, kein Fenster.
     vc-chat.js legt die Ebene auf z-index 2147483000; die Leiste muss
     darueber, sonst kaeme man aus dem Chat nicht mehr heraus. */
  html.vch-an #vcHandyNav { z-index: 2147483100; }

  /* ═══════════════════════════════════════════════════════════
     15. SUCHANSICHT — Vorschlaege statt leerer Seite
     ═══════════════════════════════════════════════════════════ */
  .vch-nichts {
    padding: .2rem .9rem 1.4rem;
    font-family: 'Manrope', system-ui, -apple-system, sans-serif;
  }
  .vch-nichts h3 {
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: .98rem;
    color: var(--vch-text);
    margin: 1.2rem 0 .2rem;
  }
  .vch-nichts p {
    font-size: .87rem;
    line-height: 1.55;
    color: var(--vch-leise);
    margin: 0 0 .8rem;
  }
  .vch-vorschlaege {
    display: flex;
    flex-wrap: wrap;
    gap: .45rem;
    margin-bottom: .4rem;
  }
  .vch-vorschlag {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    height: 34px;
    padding: 0 .8rem;
    border-radius: 999px;
    border: 1px solid var(--vch-rand);
    background: var(--vch-flaeche);
    color: var(--vch-text);
    font-family: inherit;
    font-size: .84rem;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
  }
  .vch-vorschlag:active { border-color: var(--vch-blau); }
  .vch-vorschlag svg { opacity: .7; }

  /* ═══════════════════════════════════════════════════════════
     16. KONTO-EBENE
     ═══════════════════════════════════════════════════════════ */
  .vch-kkopf {
    display: flex;
    align-items: center;
    gap: .7rem;
    padding: 1rem .9rem .7rem;
  }
  .vch-kavatar {
    flex: 0 0 auto;
    width: 44px; height: 44px;
    border-radius: 50%;
    background: var(--vch-blau);
    color: #fff;
    display: flex; align-items: center; justify-content: center;
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: 1.1rem;
  }
  .vch-kgruss {
    flex: 1 1 auto;
    min-width: 0;
    border: none;
    background: transparent;
    padding: 0;
    text-align: left;
    font-family: inherit;
    cursor: pointer;
    color: inherit;
  }
  .vch-kgruss-pfeil { flex: 0 0 auto; display: flex; opacity: .7; }
  .vch-kgruss b {
    display: flex;
    align-items: center;
    gap: .15rem;
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: 1.05rem;
    color: var(--vch-text);
    min-width: 0;
  }
  /* Nur der Name wird gekuerzt, der Pfeil bleibt daneben stehen. */
  .vch-kgruss b > :not(.vch-kgruss-pfeil) { min-width: 0; }
  .vch-kgruss span {
    display: block;
    font-size: .78rem;
    color: var(--vch-leise);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .vch-kicon {
    flex: 0 0 auto;
    width: 40px; height: 40px;
    display: flex; align-items: center; justify-content: center;
    border-radius: 50%;
    color: var(--vch-text);
    text-decoration: none;
    position: relative;
  }
  .vch-kicon:active { background: var(--vch-blau-weich); }

  .vch-kchips {
    display: flex;
    flex-wrap: wrap;
    gap: .45rem;
    padding: 0 .9rem .3rem;
  }
  .vch-kchip {
    display: inline-flex;
    align-items: center;
    height: 36px;
    padding: 0 .95rem;
    border-radius: 999px;
    border: 1px solid var(--vch-rand);
    background: var(--vch-flaeche);
    color: var(--vch-text);
    font-family: inherit;
    font-size: .85rem;
    font-weight: 600;
    text-decoration: none;
  }
  .vch-kchip:active { border-color: var(--vch-blau); }

  /* — Waagrechte Regale — */
  .vch-kregalkopf {
    display: flex;
    align-items: center;
    gap: .5rem;
    padding: 1.2rem .9rem .5rem;
  }
  .vch-kregalkopf h3 {
    flex: 1 1 auto;
    margin: 0;
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: 1.05rem;
    color: var(--vch-text);
  }
  .vch-kmehr {
    flex: 0 0 auto;
    width: 34px; height: 34px;
    display: flex; align-items: center; justify-content: center;
    color: var(--vch-text);
    border-radius: 50%;
    text-decoration: none;
  }
  .vch-kregal {
    display: flex;
    gap: .6rem;
    overflow-x: auto;
    padding: 0 .9rem .3rem;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
  }
  .vch-kregal::-webkit-scrollbar { display: none; }

  .vch-kkarte-klein {
    flex: 0 0 auto;
    width: 148px;
    display: flex;
    flex-direction: column;
    gap: .4rem;
    border: 1px solid var(--vch-rand);
    border-radius: 12px;
    padding: .5rem;
    background: var(--vch-flaeche);
    color: var(--vch-text);
    text-decoration: none;
    box-sizing: border-box;
  }
  /* `contain` passte das Bild ins Quadrat ein und liess oben und unten
     dunkle Balken stehen — genau die kantige Optik, die weg sollte.
     `cover` fuellt den Rahmen, der Radius schneidet sauber ab. */
  .vch-kbild {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    aspect-ratio: 1 / 1;
    border-radius: 10px;
    overflow: hidden;
    background: var(--vch-grund) center/cover no-repeat;
    color: var(--vch-rand);
  }
  .vch-kbild.vch-kbild-voll svg { display: none; }
  .vch-ktitel {
    font-size: .82rem;
    line-height: 1.3;
    font-weight: 600;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }
  .vch-kwieder {
    font-size: .76rem;
    font-weight: 700;
    color: var(--vch-blau);
  }
  .vch-kmenge { font-size: .76rem; color: var(--vch-leise); }
  .vch-kleer {
    padding: .2rem .9rem 1rem;
    font-size: .87rem;
    color: var(--vch-leise);
  }

  /* — Karte „nicht angemeldet" — */
  .vch-kkarte {
    margin: .9rem;
    padding: 1.2rem 1rem;
    border: 1px solid var(--vch-rand);
    border-radius: 14px;
    background: var(--vch-flaeche);
  }
  .vch-kkarte h3 {
    margin: 0 0 .4rem;
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: 1.06rem;
    color: var(--vch-text);
  }
  .vch-kkarte p {
    margin: 0 0 1rem;
    font-size: .88rem;
    line-height: 1.55;
    color: var(--vch-mitte);
  }
  .vch-kbtns { display: flex; gap: .5rem; flex-wrap: wrap; }
  .vch-kbtn {
    flex: 1 1 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 44px;
    padding: 0 1rem;
    border-radius: 999px;
    border: 1.5px solid var(--vch-rand);
    background: transparent;
    color: var(--vch-text);
    font-family: inherit;
    font-size: .9rem;
    font-weight: 700;
    text-decoration: none;
  }
  .vch-kbtn-voll {
    border-color: transparent;
    background: var(--vch-blau);
    color: #fff;
  }

  .vch-kliste {
    display: flex;
    flex-direction: column;
    padding: 0 .9rem;
  }
  /* Keine Haarlinien zum Trennen — die Gruppenflaeche trennt schon. */
  .vch-kzeile {
    display: flex;
    align-items: center;
    gap: .6rem;
    padding: .68rem .2rem;
    border-bottom: none;
    color: var(--vch-text);
    text-decoration: none;
    font-size: .92rem;
    font-weight: 600;
  }
  .vch-kzeile span:first-child { flex: 1 1 auto; }
  .vch-kpfeil { flex: 0 0 auto; color: var(--vch-leise); display: flex; }

  /* ═══════════════════════════════════════════════════════════
     17. EINSTELLUNGEN auf account.html
     ═══════════════════════════════════════════════════════════ */

  /* Titel statt Suchleiste auf Seiten ohne Suche. */
  .vch-kopftitel {
    flex: 1 1 auto;
    min-width: 0;
    margin: 0;
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: 1.06rem;
    color: var(--vch-text);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  /* Ohne Suche braucht der Kopf keine zweite Zeile. */
  html.vch-an.vch-ohne-suche body { padding-top: 52px !important; }
  html.vch-an.vch-ohne-suche #vcHandyKopf .vch-chips { display: none; }

  /* Der Desktop-Rahmen der Konto-Seite tritt zurueck. */
  html.vch-an .layout > .sidebar { display: none !important; }
  html.vch-an .layout { display: block !important; }
  html.vch-an .main {
    margin-left: 0 !important;
    padding: 0 0 1.5rem !important;
    width: 100% !important;
    max-width: 100% !important;
  }

  /* 🚨 `#vc-main` traegt auf den Kategorieseiten `margin-top: -160px` —
     am Rechner zieht das den Inhalt hoch unter den Hero. Am Telefon ist
     der Hero `display:none`, also zog derselbe Wert das Raster hinter die
     feste Kopfleiste: Raster bei y 7, Kopf bis y 95 → das erste Inserat
     war verdeckt. Am Telefon gibt es nichts, worunter man ziehen koennte. */
  html.vch-an #vc-main.main,
  html.vch-an #vc-main,
  html.vch-an .main { margin-top: 0 !important; }

  /* Liste ⇄ Sektion */
  html.vch-an.vch-konto-liste .main > .section { display: none !important; }
  html.vch-an:not(.vch-konto-liste) #vcHandyEinst { display: none !important; }

  #vcHandyEinst { padding: .2rem 0 1rem; }
  .vch-egruppe {
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: .78rem;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--vch-leise);
    margin: 1.05rem 0 .25rem;
    padding: 0 1.05rem;
  }
  /* Gruppe = eine ruhige Flaeche. Keine Linie oben, keine unten,
     keine zwischen den Zeilen — die Ueberschrift trennt. */
  #vcHandyEinst .vch-kliste {
    padding: 0;
    background: var(--vch-flaeche);
    border: none;
  }
  #vcHandyEinst .vch-kzeile {
    width: 100%;
    box-sizing: border-box;
    padding: .75rem 1.05rem;   /* 44 px — kleinere Ziele trifft man nicht */
    border: none;
    background: transparent;
    font-family: inherit;
    text-align: left;
    cursor: pointer;
  }
  #vcHandyEinst .vch-kzeile:active { background: var(--vch-blau-weich); }
  #vcHandyEinst .vch-kzeile-warn { color: #dc2626; font-weight: 700; }

  /* — Die Sektions-Inhalte handygerecht — */
  html.vch-an .main > .section {
    padding: 1rem .9rem 2rem !important;
    margin: 0 !important;
    max-width: 100% !important;
    box-sizing: border-box;
  }
  /* Formularraster einspaltig, Felder fingerbreit. */
  html.vch-an .main .form-grid,
  html.vch-an .main .stats-grid,
  html.vch-an .main .perm-grid,
  html.vch-an .main .grid-2,
  html.vch-an .main .grid-3 { grid-template-columns: 1fr !important; }
  html.vch-an .main input:not([type="checkbox"]):not([type="radio"]),
  html.vch-an .main select,
  html.vch-an .main textarea {
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box;
    min-height: 44px;
    font-size: 16px;   /* verhindert das Hineinzoomen von iOS */
  }
  /* ═══════════════════════════════════════════════════════════
     „MEINE INSERATE" — schlanke Ansicht zum ANSEHEN

     Betreiber 24.08.2026: „in der Handyversion sollte so was wie eine
     Lite-Version sein, was das Inserat-Ansehen angeht — das passt alles
     nicht. Knöpfe wie Bearbeiten, die man auf dem Handy nicht richtig
     machen kann, weg."

     Gemessen: die Tabelle war 840 px breit auf einem 375-px-Schirm und
     hatte sieben Spalten (Inserat · Kategorie · Preis · Status · Erstellt ·
     Aufrufe · Aktionen). Hier wird daraus eine Karte je Inserat, und die
     verwaltenden Knöpfe fallen weg. Verwaltet wird am Rechner.
     ═══════════════════════════════════════════════════════════ */
  html.vch-an #allListingsContent thead { display: none !important; }
  html.vch-an #allListingsContent table,
  html.vch-an #allListingsContent tbody,
  html.vch-an #allListingsContent tr,
  html.vch-an #allListingsContent td,
  html.vch-an #allListingsContent .vcid-scell,
  html.vch-an #allListingsContent .vcid-acell,
  html.vch-an #allListingsContent .vcla-actions {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    /* 🚨 Der eigentliche Sperriegel: die Tabelle traegt `min-width:840px`
       (und einzelne Zellen 186/260 px). Ohne diese Zeile bleibt sie
       840 px breit, egal was width sagt. */
    min-width: 0 !important;
    box-sizing: border-box;
    white-space: normal !important;
    overflow-x: visible !important;
  }
  html.vch-an #allListingsContent { overflow-x: visible !important; }
  html.vch-an #allListingsContent tr {
    border: 1px solid var(--vch-rand) !important;
    border-radius: 12px;
    background: var(--vch-flaeche);
    margin-bottom: .6rem;
    padding: .75rem;
  }
  html.vch-an #allListingsContent td {
    border: none !important;
    padding: .12rem 0 !important;
    font-size: .84rem;
  }
  html.vch-an #allListingsContent td:nth-child(1) {
    font-size: .95rem !important;
    font-weight: 700;
    margin-bottom: .35rem;
  }
  /* Ohne Kopfzeile braucht jeder Wert seine eigene Beschriftung. */
  html.vch-an #allListingsContent td:nth-child(2)::before { content: 'Bereich: '; color: var(--vch-leise); }
  html.vch-an #allListingsContent td:nth-child(3)::before { content: 'Preis: ';   color: var(--vch-leise); }
  html.vch-an #allListingsContent td:nth-child(4)::before { content: 'Status: ';  color: var(--vch-leise); }
  html.vch-an #allListingsContent td:nth-child(5)::before { content: 'Erstellt: ';color: var(--vch-leise); }
  html.vch-an #allListingsContent td:nth-child(6)::before { content: 'Aufrufe: '; color: var(--vch-leise); }

  /* 🚨 Die verwaltenden Knöpfe tragen KEINE Klassen, sondern nur Inline-
     Stile — sie werden deshalb über ihr onclick getroffen. Die Zusatz-
     knöpfe aus vc-listingactions.js haben `.vcla-btn`.

     Betreiber 28.08.2026: „alles von Funktionen soll gleich sein" — bis dahin
     standen Bearbeiten, Löschen, Hervorheben und Statistik hier auf
     `display:none`, dazu ein Hinweis „gehen am Rechner oder Tablet". Das war
     eine ABGESPECKTE Ansicht, kein anderes Design. Der eigentliche Grund war
     nie die Funktion, sondern die Größe: die Inline-Stile setzen
     `font-size:.72rem` und `padding:.28rem .7rem` — ein Ziel von rund 24 px,
     mit dem Finger nicht zu treffen (Richtwert 44 px). Deshalb werden sie hier
     auf Fingermaß gebracht statt ausgeblendet. Die Inline-Stile stehen am
     Element, also gewinnt hier nur `!important`. */
  html.vch-an #allListingsContent [onclick^="vcEditListing"],
  html.vch-an #allListingsContent [onclick^="deleteMyListing"],
  html.vch-an #allListingsContent [onclick^="vcPromo"],
  html.vch-an #allListingsContent [onclick^="vcListingStats"],
  html.vch-an #allListingsContent [onclick^="mySetListingStatus"],
  html.vch-an #allListingsContent [onclick^="viewMyListing"],
  html.vch-an #allListingsContent .vcla-btn {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    flex: 1 1 calc(50% - .3rem) !important;
    min-height: 44px !important;
    padding: .5rem .8rem !important;
    font-size: .84rem !important;
    margin: 0 !important;
    box-sizing: border-box !important;
    white-space: nowrap !important;
  }
  /* Die Knopfreihe der Zeile: umbrechen statt rechtsbündig aus der Karte
     laufen. Das Markup hat dort ein klassenloses <div> (account.html:5770),
     deshalb über :has() — dasselbe Muster nutzt die Datei schon oben. */
  html.vch-an #allListingsContent td:has(> div > [onclick]) > div,
  html.vch-an #allListingsContent td:has(> [onclick]),
  html.vch-an #allListingsContent .vcla-actions {
    display: flex !important;
    flex-wrap: wrap !important;
    justify-content: stretch !important;
    gap: .6rem !important;
    margin-top: .6rem !important;
    row-gap: .6rem !important;
  }
  /* Gesperrte Knöpfe (ohne Abo) bleiben sichtbar und lesbar — sie erklären
     im Titel, warum sie gerade nicht gehen. */
  html.vch-an #allListingsContent button[disabled] { opacity: 1 !important; }

  .vch-lite-hinweis {
    display: flex;
    align-items: flex-start;
    gap: .5rem;
    margin: 0 0 .9rem;
    padding: .7rem .85rem;
    border-radius: 10px;
    background: var(--vch-blau-weich);
    color: var(--vch-mitte);
    font-family: 'Manrope', system-ui, sans-serif;
    font-size: .82rem;
    line-height: 1.5;
  }
  .vch-lite-hinweis svg { flex: 0 0 auto; color: var(--vch-blau); margin-top: 1px; }

  /* Breite Tabellen rollen in sich statt die Seite zu sprengen. */
  html.vch-an .main table {
    display: block;
    width: 100% !important;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    white-space: nowrap;
  }
  html.vch-an .main .card,
  html.vch-an .main .panel,
  html.vch-an .main .box {
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box;
  }

  /* ═══════════════════════════════════════════════════════════
     18. AUSWAHLBLATT VON UNTEN  (Lieferort)
     ═══════════════════════════════════════════════════════════ */
  .vch-blatt {
    position: fixed;
    inset: 0;
    z-index: 2147483200;
    background: rgba(15, 23, 34, .45);
    display: flex;
    align-items: flex-end;
    opacity: 0;
    transition: opacity .2s ease;
    font-family: 'Manrope', system-ui, -apple-system, sans-serif;
  }
  .vch-blatt.auf { opacity: 1; }
  .vch-blatt-karte {
    width: 100%;
    max-height: 84vh;
    display: flex;
    flex-direction: column;
    background: var(--vch-flaeche);
    border-radius: 18px 18px 0 0;
    padding-bottom: env(safe-area-inset-bottom, 0px);
    transform: translateY(100%);
    transition: transform .24s cubic-bezier(.22, 1, .36, 1);
  }
  .vch-blatt.auf .vch-blatt-karte { transform: none; }
  @media (prefers-reduced-motion: reduce) {
    .vch-blatt, .vch-blatt-karte { transition: none; }
  }
  .vch-blatt-griff {
    display: block;
    width: 38px; height: 4px;
    margin: .55rem auto .2rem;
    border-radius: 999px;
    background: var(--vch-rand);
  }
  .vch-blatt-kopf {
    display: flex;
    align-items: center;
    gap: .5rem;
    padding: .4rem 1rem .2rem;
  }
  .vch-blatt-kopf h3 {
    flex: 1 1 auto;
    margin: 0;
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: 1.06rem;
    color: var(--vch-text);
  }
  .vch-blatt-zu {
    flex: 0 0 auto;
    width: 34px; height: 34px;
    display: flex; align-items: center; justify-content: center;
    border: none; background: transparent;
    color: var(--vch-text);
    border-radius: 50%;
    cursor: pointer; padding: 0;
  }
  .vch-blatt-inhalt {
    flex: 1 1 auto;
    overflow-y: auto;
    padding: .3rem 1rem 1.2rem;
    -webkit-overflow-scrolling: touch;
  }
  .vch-blatt-hinweis {
    margin: .2rem 0 .8rem;
    font-size: .86rem;
    line-height: 1.5;
    color: var(--vch-leise);
  }
  .vch-blatt-unter {
    margin: 1.2rem 0 .5rem;
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: .9rem;
    color: var(--vch-text);
  }
  .vch-blatt-link {
    display: inline-block;
    margin-top: 1rem;
    font-size: .87rem;
    font-weight: 700;
    color: var(--vch-blau);
    text-decoration: none;
  }

  .vch-adrliste { display: flex; flex-direction: column; gap: .5rem; }
  .vch-adr {
    display: flex;
    align-items: center;
    gap: .7rem;
    width: 100%;
    box-sizing: border-box;
    padding: .8rem .9rem;
    border: 1.5px solid var(--vch-rand);
    border-radius: 12px;
    background: transparent;
    color: var(--vch-text);
    font-family: inherit;
    text-align: left;
    cursor: pointer;
  }
  .vch-adr.gewaehlt { border-color: var(--vch-blau); background: var(--vch-blau-weich); }
  .vch-adr-text { flex: 1 1 auto; min-width: 0; }
  .vch-adr-text b {
    display: block;
    font-size: .92rem;
    font-weight: 700;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .vch-adr-text span {
    display: block;
    font-size: .8rem;
    color: var(--vch-leise);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .vch-adr-haken { flex: 0 0 auto; color: var(--vch-blau); display: flex; }

  /* — Konto-Blatt „Wer kauft ein?" — */
  .vch-profilzeile {
    display: flex;
    align-items: center;
    gap: .8rem;
    padding: .85rem .9rem;
    border-radius: 12px;
    background: var(--vch-grund);
  }
  .vch-profiltext { flex: 1 1 auto; min-width: 0; }
  .vch-profiltext b {
    display: block;
    font-size: .95rem;
    font-weight: 700;
    color: var(--vch-text);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .vch-profiltext span { display: block; font-size: .8rem; color: var(--vch-leise); }
  .vch-blatt-strich {
    border: none;
    border-top: 1px solid var(--vch-rand);
    margin: 1.1rem 0 .8rem;
  }
  .vch-blatt-link-mitte {
    display: block;
    width: 100%;
    margin-top: .9rem;
    padding: .6rem 0;
    border: none;
    background: transparent;
    font-family: inherit;
    text-align: center;
    cursor: pointer;
  }

  .vch-plzreihe { display: flex; gap: .5rem; }
  .vch-plzfeld {
    flex: 1 1 auto;
    min-width: 0;
    height: 44px;
    padding: 0 .9rem;
    border-radius: 999px;
    border: 1.5px solid var(--vch-rand);
    background: var(--vch-grund);
    color: var(--vch-text);
    font-family: inherit;
    font-size: 16px;
    outline: none;
    -webkit-appearance: none;
  }
  .vch-plzreihe .vch-kbtn { flex: 0 0 auto; }

  /* ═══════════════════════════════════════════════════════════
     19. GERAETE-SPERRE fuer Admin/Editor
     ═══════════════════════════════════════════════════════════ */
  #vcHandySperre {
    position: fixed;
    inset: 0;
    z-index: 2147483640;
    background: var(--vch-grund);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 1.6rem;
    font-family: 'Manrope', system-ui, -apple-system, sans-serif;
  }
  .vch-sperre-karte {
    max-width: 22rem;
    width: 100%;
    background: var(--vch-flaeche);
    border: 1px solid var(--vch-rand);
    border-radius: 16px;
    padding: 1.8rem 1.4rem;
    text-align: center;
    box-shadow: var(--vch-schatten);
  }
  .vch-sperre-karte svg {
    width: 42px; height: 42px;
    color: var(--vch-blau);
    margin-bottom: .9rem;
  }
  .vch-sperre-karte h2 {
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-weight: 800;
    font-size: 1.12rem;
    color: var(--vch-text);
    margin: 0 0 .6rem;
  }
  .vch-sperre-karte p {
    font-size: .89rem;
    line-height: 1.6;
    color: var(--vch-mitte);
    margin: 0 0 1.2rem;
  }
  .vch-sperre-karte .vch-sperre-weg {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 42px;
    padding: 0 1.3rem;
    border-radius: 999px;
    border: none;
    background: var(--vch-blau);
    color: #fff;
    font-family: inherit;
    font-size: .9rem;
    font-weight: 700;
    text-decoration: none;
    cursor: pointer;
  }

  /* ═══════════════════════════════════════════════════════════
     22. THEMEN-PILLEN, WARENKORB-EBENE  (Betreiber 24.08.2026)
     ═══════════════════════════════════════════════════════════ */

  /* Themen sitzen in DERSELBEN Chip-Zeile wie der Lieferort (Bild 5). */
  .vch-chip-thema { font-weight: 600; }

  /* — Aktions-Kacheln (Bild 1): grosse farbige Karten, waagrecht scrollend — */
  .vch-aktionen {
    display: flex;
    gap: .6rem;
    overflow-x: auto;
    scrollbar-width: none;
    padding: .2rem .9rem 1rem;
    scroll-snap-type: x proximity;
    -webkit-overflow-scrolling: touch;
  }
  .vch-aktionen::-webkit-scrollbar { display: none; }
  /* Amazon-Mass: rund 70 % der Schirmbreite, deutlich hoch, Ueberschrift
     oben, darunter das Produktbild — nicht ein Rubriken-Symbol. */
  .vch-aktion {
    position: relative;
    flex: 0 0 auto;
    scroll-snap-align: start;
    width: 72vw;
    max-width: 290px;
    height: 430px;
    display: flex;
    flex-direction: column;
    gap: .15rem;
    padding: 1.1rem 1.1rem 0;
    border-radius: 14px;
    overflow: hidden;
    color: #fff;
    text-decoration: none;
    box-sizing: border-box;
  }
  .vch-aktion-titel {
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-size: 1.72rem;
    font-weight: 800;
    line-height: 1.08;
    letter-spacing: -.01em;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }
  .vch-aktion-sub {
    font-size: .95rem;
    opacity: .92;
    margin-bottom: .7rem;
  }
  /* Das Produktbild fuellt den Rest der Kachel. */
  .vch-aktion-bild {
    flex: 1 1 auto;
    margin: 0 -1.1rem;
    background: center/cover no-repeat;
  }

  /* — Warenkorb: oeffnet aus dem localStorage, ohne Seitenwechsel — */
  .vch-korb-leer { padding: 2.2rem 1.1rem; text-align: center; }
  .vch-korb-leer h3 {
    margin: 0 0 .35rem;
    font-family: 'Satoshi', 'Manrope', system-ui, sans-serif;
    font-size: 1.02rem;
    font-weight: 800;
  }
  .vch-korb-leer p { margin: 0 0 1.1rem; font-size: .88rem; color: var(--vch-leise); }

  .vch-korb-zeile {
    display: grid;
    grid-template-columns: 76px 1fr auto;
    gap: .7rem;
    align-items: start;
    padding: .8rem .9rem;
    border-bottom: 1px solid var(--vch-rand);
  }
  .vch-korb-bild {
    width: 76px; height: 76px;
    border-radius: 10px;
    overflow: hidden;
    background: var(--vch-grund) center/cover no-repeat;
  }
  .vch-korb-mitte { min-width: 0; display: flex; flex-direction: column; gap: .2rem; }
  .vch-korb-titel {
    font-size: .88rem; font-weight: 600; line-height: 1.3;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  }
  .vch-korb-var { font-size: .76rem; color: var(--vch-leise); }
  .vch-korb-preis { font-size: .95rem; font-weight: 800; }
  .vch-korb-menge { display: flex; align-items: center; gap: .5rem; margin-top: .25rem; }
  .vch-korb-mbtn {
    width: 32px; height: 32px;
    border-radius: 999px;
    border: 1px solid var(--vch-rand);
    background: var(--vch-flaeche);
    color: var(--vch-text);
    font-size: 1.05rem; line-height: 1;
    cursor: pointer;
  }
  .vch-korb-mzahl { min-width: 20px; text-align: center; font-size: .9rem; font-weight: 700; }
  .vch-korb-weg {
    border: none; background: none; padding: .1rem 0;
    color: var(--vch-leise); font-family: inherit; font-size: .8rem; cursor: pointer;
  }
  .vch-korb-fuss { padding: 1rem .9rem 1.6rem; }
  .vch-korb-summe {
    display: flex; justify-content: space-between; align-items: baseline;
    margin-bottom: .8rem; font-size: .95rem;
  }
  .vch-korb-summe b { font-size: 1.2rem; font-weight: 800; }

  /* ═══════════════════════════════════════════════════════════
     21. KEINE KASTEN-HUELLEN  (Betreiber 24.08.2026)
     „Die etwas hellere schwarze Box, die die Kaertchen in sich haelt,
      soll nirgendwo sein — auch nicht in den Einstellungen."
     Die Huelle kostet auf 390 px doppelte Polsterung plus Rand und
     bringt keine Information. Der Inhalt bleibt, nur die Schale faellt.
     ═══════════════════════════════════════════════════════════ */

  html.vch-an #vcRecoRow .vcreco-sec,
  html.vch-an .vcreco-sec,
  html.vch-an .vcrg-huelle,
  html.vch-an .main > .section > .card,
  html.vch-an .main .card,
  html.vch-an #vcHandyEinst .vch-kliste,
  html.vch-an .vch-kliste {
    background: transparent !important;
    border: none !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
  }
  /* Der Kartenkoerper selbst behaelt seine Flaeche — nur die Huelle faellt. */
  html.vch-an .vch-kkarte-klein,
  html.vch-an .vch-kkarte,
  html.vch-an [class*="-card"] .vch-kbild { background: var(--vch-flaeche) !important; }
  html.vch-an .vch-kkarte-klein { border: 1px solid var(--vch-rand) !important; }

  /* In der Detailansicht blieben zuletzt noch zwei Kaesten stehen: der
     Q&A-Aufklapper und die fuenf Produktbild-Rahmen. Beide flach auf den
     Grund, wie der Betreiber es verlangt hat. */
  html.vch-an #listingDetailModal .vcdu-card,
  html.vch-an #listingDetailModal .ldm-sec,
  html.vch-an #listingDetailModal .ldm-prodfig,
  html.vch-an #listingDetailModal .ldm-dcard {
    background: transparent !important;
    border: none !important;
    border-radius: 0 !important;
    box-shadow: none !important;
  }
  /* Die Kaufkarte behaelt ihre Flaeche — sie ist die Handlung, nicht Inhalt. */
  html.vch-an #listingDetailModal .vcdu-ctcard {
    background: var(--vch-flaeche) !important;
    border: 1px solid var(--vch-rand) !important;
    border-radius: 14px !important;
  }

  /* Die Bestell-/Buendelkarten in den Regalen behalten ihren Rahmen,
     damit die Reihe nicht zu einer Bilderwand verschwimmt. */
  html.vch-an #vcRecoRow .vcbndl {
    background: var(--vch-flaeche) !important;
    border: 1px solid var(--vch-rand) !important;
    border-radius: 14px !important;
  }

  /* ═══════════════════════════════════════════════════════════
     20. DASHBOARD — kompakt statt hoch
     ═══════════════════════════════════════════════════════════ */

  /* — „Konto vervollstaendigen" war 231 px hoch, fast ein Drittel
       des Schirms. Kopf + Balken + eine Zeile reichen. — */
  html.vch-an #vcOnboardKarte { margin-bottom: .8rem; }
  html.vch-an #vcOnboardKarte .vcob-kopf { padding: .6rem .85rem; gap: .5rem; }
  html.vch-an #vcOnboardKarte .vcob-titel { font-size: .88rem; }
  html.vch-an #vcOnboardKarte .vcob-balken { height: 5px; margin-top: .38rem; }

  /* 🚨 Acht Schritte à 74 px = 592 px auf einem 375-px-Schirm. Die Leiste
     lief aus dem Bild und schnitt die Woerter ab („Nachw…"). Der Balken
     darueber sagt dasselbe auf einer Zeile — am Rechner bleibt sie. */
  html.vch-an #vcOnboardKarte .vcob-leiste { display: none !important; }

  html.vch-an #vcOnboardKarte .vcob-jetztzeile {
    padding: 0 .85rem .7rem;
    gap: .55rem;
    flex-wrap: nowrap;
  }
  html.vch-an #vcOnboardKarte .vcob-jetzttext { font-size: .78rem; line-height: 1.35; }
  html.vch-an #vcOnboardKarte .vcob-weiter {
    padding: .5rem .85rem;
    font-size: .78rem;
    white-space: nowrap;
  }

  /* — Profil-Banner: `clamp(220px,24vw,300px)` steht als Inline-Stil an
       #profileBannerPreview. 24vw sind am Telefon 90 px, also greift der
       Boden 220 px — auf 293 px Breite ein fast quadratischer Klotz.
       Ein Seitenverhaeltnis waechst stattdessen mit der Breite mit. — */
  html.vch-an #profileBannerPreview {
    height: auto !important;
    min-height: 0 !important;
    aspect-ratio: 2.8 / 1 !important;
  }
  /* Im schmalen Band sass das 76-px-Bild mitten auf „Banner hochladen". */
  html.vch-an #profileBannerPreview > div:not(#bannerHint) {
    left: .6rem !important;
    bottom: .6rem !important;
  }
  html.vch-an #profilePicPreview {
    width: 58px !important;
    height: 58px !important;
    border-width: 2px !important;
  }
  html.vch-an #profilePicInitial { font-size: 1.25rem !important; }
  html.vch-an #bannerHint { padding-left: 66px !important; }

  /* — Kein Haarlinien-Raster in den Konto-Angaben — */
  html.vch-an .main .info-row.info-row {
    border-bottom: none !important;
    padding: .42rem 0 !important;
  }

  /* Kopfzeile der Karten: „2 Aktive Inserate" lief rechts aus dem Bild. */
  html.vch-an .main .card-header {
    flex-wrap: wrap !important;
    gap: .3rem .6rem !important;
  }

  /* ═══════════════════════════════════════════════════════════
     28. DETAILANSICHT NACH DER VORLAGE (Betreiber 25.08.2026)
     ═══════════════════════════════════════════════════════════
     Drei Bildschirmfotos als Vorgabe, „1 zu 1", ausdruecklich auch
     „gleiche Farbe, Schrift, mal blau manche, dick manche duenne".

     Gelesen wurde aus den Bildern:
       · Blau markiert IMMER etwas Anklickbares (Shop, Verkaeufer,
         Rueckgabe, Melden) — nie blosse Auszeichnung.
       · Die Ueberschrift ist GROSS aber NICHT fett; darunter steht
         eine graue, duennere Beschreibungszeile.
       · Genau eine Zahl ist fett und gross: der Preis.
       · Zwei Kaufknoepfe, gelb und orange, mit schwarzer Schrift.
       · Die Eckdaten stehen als ruhige Tabelle, Beschriftung grau
         links, Wert rechts — ohne Kasten, ohne Linien.

     🚨 Diese Regeln haengen alle an `html.vch-an` und stehen im
     760px-Block. Ab 761px gilt davon NICHTS ([[handy-ansicht-eigene-ebene]]).
     ═══════════════════════════════════════════════════════════ */

  :root {
    /* Betreiber 25.08.2026: „statt gelb Knoepfe blau machen und dieses
       dunkle Gelb dunkles Blau." Haupthandlung = Vermittco-Blau. */
    --vch-az-gelb:   #1B56CC;
    --vch-az-orange: #0E3487;
    --vch-az-rot:    #CC0C39;
    --vch-az-gruen:  #067D62;
    --vch-az-grau:   #565959;
    --vch-az-pille:  #F0F2F2;
  }
  html[data-theme="dark"] {
    --vch-az-rot:   #FF6B81;
    --vch-az-gruen: #4BC46B;
    --vch-az-grau:  #A0AABA;
    --vch-az-pille: rgba(255, 255, 255, .10);
  }
  @media (prefers-color-scheme: dark) {
    html:not([data-theme="light"]) {
      --vch-az-rot:   #FF6B81;
      --vch-az-gruen: #4BC46B;
      --vch-az-grau:  #A0AABA;
      --vch-az-pille: rgba(255, 255, 255, .10);
    }
  }

  /* — 1. Anzeige ganz oben: gerahmter Kasten, kleines Bild links — */
  html.vch-an #vchAzAnzeige:empty { display: none !important; }
  html.vch-an #vchAzAnzeige {
    margin: .55rem .9rem .75rem !important;
    border: 1px solid var(--vch-rand) !important;
    border-radius: 10px !important;
    overflow: hidden !important;
    background: var(--vch-flaeche) !important;
  }
  html.vch-an .vch-aza-karte {
    display: flex !important;
    align-items: center !important;
    gap: .7rem !important;
    padding: .6rem .7rem !important;
    cursor: pointer !important;
  }
  html.vch-an .vch-aza-bild {
    flex: 0 0 54px !important;
    width: 54px !important; height: 54px !important;
    background-size: contain !important;
    background-repeat: no-repeat !important;
    background-position: center !important;
  }
  html.vch-an .vch-aza-text { min-width: 0 !important; flex: 1 1 auto !important; }
  html.vch-an .vch-aza-titel {
    font-size: .93rem !important;
    line-height: 1.3 !important;
    font-weight: 600 !important;
    color: var(--vch-text) !important;
    display: -webkit-box !important;
    -webkit-line-clamp: 2 !important;
    -webkit-box-orient: vertical !important;
    overflow: hidden !important;
  }
  html.vch-an .vch-aza-fuss {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    margin-top: .3rem !important;
  }
  html.vch-an .vch-aza-marke {
    background: var(--vch-az-rot) !important;
    color: #fff !important;
    font-size: .7rem !important;
    font-weight: 800 !important;
    padding: 2px 7px !important;
    border-radius: 4px !important;
    letter-spacing: .02em !important;
  }
  html.vch-an .vch-aza-spo {
    font-size: .78rem !important;
    color: var(--vch-az-grau) !important;
    font-weight: 400 !important;
  }

  /* — 2. Shopzeile: blauer Shop-Link links, Sterne rechts — */
  html.vch-an #vchAzShop {
    display: flex !important;
    align-items: baseline !important;
    justify-content: space-between !important;
    gap: .6rem !important;
    padding: 0 .9rem !important;
    margin: .2rem 0 .35rem !important;
  }
  html.vch-an .vch-azs-link {
    font-size: .97rem !important;
    font-weight: 400 !important;
    color: var(--vch-blau) !important;
    text-decoration: none !important;
    min-width: 0 !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    white-space: nowrap !important;
  }
  /* Ohne Ziel kein blauer Link — Blau heisst hier „anklickbar". */
  html.vch-an .vch-azs-tot { color: var(--vch-az-grau) !important; }
  html.vch-an .vch-azs-sterne {
    flex: 0 0 auto !important;
    font-size: .93rem !important;
    white-space: nowrap !important;
  }
  html.vch-an .vch-azs-sterne .n { color: var(--vch-blau) !important; }

  /* — 3. Ueberschrift: gross, aber NICHT fett (so steht es im Bild) — */
  html.vch-an #listingDetailModal .ldm-title,
  html.vch-an #listingDetailModal #ldmTitle,
  html.vch-an .dm-page .dp-title,
  html.vch-an .dm-page .vcdp-title {
    font-size: 1.42rem !important;
    line-height: 1.28 !important;
    font-weight: 500 !important;
    letter-spacing: -.01em !important;
    color: var(--vch-text) !important;
    padding: 0 .9rem !important;
    margin: .1rem 0 .3rem !important;
  }

  /* — 4. Graue, duennere Beschreibungszeile darunter — */
  html.vch-an #vchAzSub {
    font-size: 1.06rem !important;
    line-height: 1.34 !important;
    font-weight: 300 !important;
    color: var(--vch-az-grau) !important;
    padding: 0 .9rem !important;
    margin: 0 0 .55rem !important;
    display: -webkit-box !important;
    -webkit-line-clamp: 3 !important;
    -webkit-box-orient: vertical !important;
    overflow: hidden !important;
  }

  /* — 5. Auszeichnungen: erste dunkle Plakette, Rest ruhig — */
  html.vch-an #listingDetailModal #ldmBadges,
  html.vch-an #listingDetailModal .ldm-badges {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: .38rem !important;
    padding: 0 .9rem !important;
    margin: 0 0 .6rem !important;
  }
  /* 🚨 GEMESSEN: hier stand `rgba(15,23,34,.06)` — auf dunklem Grund ist
     das unsichtbar, „Computer & Tablets" und „Neu" standen als nackter
     Text mit Aufzaehlungspunkt da. Die Fuellung kommt jetzt aus einer
     Variablen, die in beiden Themen traegt. */
  /* 🚨 Betreiber 25.08.2026: „die Woerter oben in Farbe machen, die Schrift
     nicht in eine Box, und Verfuegbar gruene Schrift." Also KEINE Pille mehr:
     nur Schrift, durch einen Mittelpunkt getrennt. Die Seiten setzen Fuellung
     und Farbe teils INLINE (fahrzeuge.html: `background:rgba(229,50,12,.12)`)
     — dagegen kommt nur `!important` an. */
  html.vch-an #listingDetailModal #ldmBadges > *,
  html.vch-an #listingDetailModal .ldm-badges > *,
  html.vch-an #listingDetailModal .dp-badges > *,
  html.vch-an #listingDetailModal .vcdp-badges > * {
    display: inline-flex !important;
    align-items: center !important;
    gap: .3rem !important;
    font-size: .93rem !important;
    font-weight: 500 !important;
    letter-spacing: 0 !important;
    text-transform: none !important;
    padding: 0 !important;
    border-radius: 0 !important;
    background: none !important;
    background-color: transparent !important;
    color: var(--vch-mitte) !important;
    border: none !important;
  }
  /* Mittelpunkt als Trenner statt Kasten. */
  html.vch-an #listingDetailModal #ldmBadges > * + *::before,
  html.vch-an #listingDetailModal .ldm-badges > * + *::before,
  html.vch-an #listingDetailModal .dp-badges > * + *::before,
  html.vch-an #listingDetailModal .vcdp-badges > * + *::before {
    content: "·" !important;
    margin-right: .45rem !important;
    color: var(--vch-leise) !important;
  }
  /* „Verfuegbar" und Verwandte in Gruen — gesetzt von azPlakettenFaerben().
     🚨 GEMESSEN: als `.vch-plak-gruen` allein verlor diese Regel gegen die
     Grundregel darueber — die traegt ZWEI IDs, diese nur eine. Gruen kam
     nicht durch. Darum hier dieselben zwei IDs. */
  html.vch-an #listingDetailModal #ldmBadges > .vch-plak-gruen,
  html.vch-an #listingDetailModal .ldm-badges > .vch-plak-gruen,
  html.vch-an #listingDetailModal .dp-badges > .vch-plak-gruen,
  html.vch-an #listingDetailModal .vcdp-badges > .vch-plak-gruen {
    color: var(--vch-az-gruen) !important;
    font-weight: 700 !important;
  }
  /* Der Aufzaehlungspunkt zwischen den Plaketten gehoert nicht in die
     Vorlage — dort stehen reine Pillen nebeneinander. */
  html.vch-an #listingDetailModal #ldmBadges > *::before,
  html.vch-an #listingDetailModal #ldmBadges > *::after,
  html.vch-an #listingDetailModal .ldm-badges > *::before,
  html.vch-an #listingDetailModal .ldm-badges > *::after {
    content: none !important;
  }
  /* (Die dunkle Plakette von gestern ist raus — der Betreiber will Schrift
     in Farbe, keine Flaeche.) */

  /* — 6. Grossbild: eine Buehne, randlos, quadratisch wie im Bild — */
  html.vch-an #listingDetailModal .ldm-stage {
    width: 100% !important;
    aspect-ratio: 1 / 1 !important;
    height: auto !important;
    min-height: 0 !important;
    background: var(--vch-flaeche) !important;
    border-radius: 0 !important;
  }
  html.vch-an #listingDetailModal .ldm-main-img {
    width: 100% !important;
    height: 100% !important;
    background-size: contain !important;
    background-repeat: no-repeat !important;
    background-position: center !important;
  }
  /* Zaehler und Pfeile gehoeren nicht ins Bild — die Punkte zeigen es. */
  html.vch-an #listingDetailModal #ldmCounter,
  html.vch-an #listingDetailModal .ldm-nav,
  html.vch-an #listingDetailModal #ldmThumbs { display: none !important; }

  /* — 7. Leiste unter dem Bild: Punkte mittig, Herz und Teilen rechts — */
  /* 🚨 GEMESSEN: als Raster mit `grid-column:3` landeten Herz UND Teilen
     in derselben Spalte und stapelten sich uebereinander — die Leiste war
     128px hoch statt 60. Punkte gehoeren mittig, die zwei Knoepfe daneben
     nach rechts: also eine Zeile, die Punkte schwebend zentriert. */
  html.vch-an #vchAzGal {
    position: relative !important;
    display: flex !important;
    align-items: center !important;
    justify-content: flex-end !important;
    gap: .35rem !important;
    min-height: 44px !important;
    padding: .35rem .9rem .8rem !important;
    margin: 0 !important;
  }
  html.vch-an #vchAzGal .vch-punkte {
    position: absolute !important;
    left: 50% !important;
    top: 50% !important;
    transform: translate(-50%, -60%) !important;
    margin: 0 !important;
  }
  html.vch-an #vchAzGal .vch-azg-knopf,
  html.vch-an #vchAzGal .vcdu-heart {
    position: static !important;
    flex: 0 0 auto !important;
    width: 42px !important; height: 42px !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    border: none !important;
    background: transparent !important;
    box-shadow: none !important;
    color: var(--vch-text) !important;
    padding: 0 !important;
    margin: 0 !important;
  }
  /* Herz links vom Teilen — im Bild steht es in dieser Reihenfolge. */
  html.vch-an #vchAzGal .vcdu-heart { order: 1 !important; }
  html.vch-an #vchAzGal .vch-azg-teilen { order: 2 !important; }

  /* — 8. Farbe und Ausfuehrung: Beschriftung duenn, Wert fett — */
  html.vch-an #listingDetailModal .vcdu-varsplit,
  html.vch-an #listingDetailModal #ldmEgOptions,
  html.vch-an #listingDetailModal .vcvar-wrap { padding: 0 .9rem !important; }
  html.vch-an #listingDetailModal .vcvar-label,
  html.vch-an #listingDetailModal .vcdu-varlabel {
    font-size: .97rem !important;
    font-weight: 400 !important;
    color: var(--vch-text) !important;
    margin-bottom: .4rem !important;
  }
  html.vch-an #listingDetailModal .vcvar-label b,
  html.vch-an #listingDetailModal .vcvar-label strong { font-weight: 700 !important; }

  /* — 9. Preis: die einzige grosse fette Zahl — */
  html.vch-an #listingDetailModal .ldm-price,
  html.vch-an #listingDetailModal #ldmPrice,
  html.vch-an .dm-page .dp-price,
  html.vch-an .dm-page .vcdp-price {
    font-size: 1.85rem !important;
    font-weight: 700 !important;
    letter-spacing: -.02em !important;
    line-height: 1.12 !important;
    color: var(--vch-text) !important;
    padding: 0 .9rem !important;
    margin: .25rem 0 .1rem !important;
  }
  /* Streichpreis und USt-Hinweis: klein, grau, duenn. */
  html.vch-an #listingDetailModal .vcdu-oldprice,
  html.vch-an #listingDetailModal .ldm-oldprice,
  html.vch-an #listingDetailModal .vcdp-mwst,
  html.vch-an #listingDetailModal .ldm-mwst {
    font-size: .84rem !important;
    font-weight: 300 !important;
    color: var(--vch-az-grau) !important;
    padding: 0 .9rem !important;
  }
  html.vch-an #listingDetailModal #vcpbDetail { padding: 0 .9rem !important; }

  /* — 10. Versandzeile: Datum fett, Rest duenn (wie im Bild) — */
  html.vch-an #listingDetailModal #vcduShipRow,
  html.vch-an #listingDetailModal .vcdu-shiprow {
    font-size: .93rem !important;
    font-weight: 400 !important;
    color: var(--vch-text) !important;
    padding: 0 .9rem !important;
    margin: .3rem 0 .5rem !important;
  }
  html.vch-an #listingDetailModal .vcdu-shiprow b,
  html.vch-an #listingDetailModal .vcdu-shiprow strong { font-weight: 700 !important; }

  /* — 11. Kaufteil: Kasten weg, zwei farbige Pillen wie in der Vorlage — */
  html.vch-an #listingDetailModal .vcdu-ctcard {
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    padding: 0 .9rem !important;
    margin: .2rem 0 1rem !important;
    gap: .6rem !important;
  }
  html.vch-an #listingDetailModal .vcdu-ctcard .vcdu-ct-h {
    font-size: 1.02rem !important;
    font-weight: 700 !important;
    color: var(--vch-az-gruen) !important;
    margin: 0 0 .1rem !important;
    padding: 0 !important;
  }
  /* Haupthandlung = gelb, schwarze Schrift. Zweite = orange. So im Bild. */
  html.vch-an #listingDetailModal .vcdu-ctcard > .vcdu-primar,
  html.vch-an #listingDetailModal .vcdu-ctcard > .ldm-cta-btn:first-of-type,
  html.vch-an #listingDetailModal .vch-kaufzeile > :first-child {
    min-height: 50px !important;
    border-radius: 999px !important;
    background: var(--vch-az-gelb) !important;
    color: #ffffff !important;
    border: none !important;
    box-shadow: none !important;
    font-size: 1rem !important;
    font-weight: 600 !important;
  }
  html.vch-an #listingDetailModal .vcdu-ctcard > #vcMsgAskBtn,
  html.vch-an #listingDetailModal .vcdu-ctcard > .vcdu-zweit,
  html.vch-an #listingDetailModal .vch-kaufzeile > .vch-korbknopf {
    min-height: 50px !important;
    border-radius: 999px !important;
    background: var(--vch-az-orange) !important;
    color: #ffffff !important;
    border: none !important;
    box-shadow: none !important;
    font-size: 1rem !important;
    font-weight: 600 !important;
  }

  /* — 12. „Weitere Moeglichkeiten" bleibt die ruhige Zeile von vorher — */
  html.vch-an .vch-mehrakt {
    background: transparent !important;
    border: none !important;
    color: var(--vch-blau) !important;
    font-weight: 400 !important;
  }

  /* — 13. Eckdaten: Beschriftung grau links, Wert rechts, keine Linien — */
  html.vch-an #vchAzInfo {
    padding: 0 .9rem !important;
    margin: .2rem 0 1rem !important;
  }
  html.vch-an .vch-azi-zeile {
    display: grid !important;
    grid-template-columns: 8.6rem 1fr !important;
    gap: .2rem .7rem !important;
    align-items: start !important;
    padding: .22rem 0 !important;
  }
  html.vch-an .vch-azi-k {
    font-size: .9rem !important;
    font-weight: 300 !important;
    color: var(--vch-az-grau) !important;
  }
  html.vch-an .vch-azi-w {
    font-size: .9rem !important;
    font-weight: 500 !important;
    color: var(--vch-text) !important;
    text-align: left !important;
    background: none !important;
    border: none !important;
    padding: 0 !important;
    line-height: 1.4 !important;
  }
  html.vch-an .vch-azi-blau { color: var(--vch-blau) !important; font-weight: 400 !important; }
  html.vch-an .vch-azi-recht {
    font-size: .88rem !important;
    font-weight: 300 !important;
    line-height: 1.5 !important;
    color: var(--vch-text) !important;
    margin: .8rem 0 0 !important;
  }

  /* — 14. Merken: Ueberschrift fett, Knopf als heller Umriss — */
  html.vch-an #vchAzMerken { padding: 0 .9rem !important; margin: 0 0 1rem !important; }
  html.vch-an .vch-azm-h {
    font-size: 1.02rem !important;
    font-weight: 700 !important;
    color: var(--vch-text) !important;
    margin: 0 0 .5rem !important;
  }
  html.vch-an .vch-azm-knopf {
    width: 100% !important;
    min-height: 46px !important;
    border-radius: 999px !important;
    border: 1px solid var(--vch-rand) !important;
    background: transparent !important;
    color: var(--vch-text) !important;
    font-size: .95rem !important;
    font-weight: 400 !important;
    box-shadow: none !important;
  }

  /* — 15. Melden: blaue Zeile mit Fahne, kein Knopf-Aussehen — */
  html.vch-an #vchAzMelden { padding: 0 .9rem !important; margin: 0 0 1.2rem !important; }
  html.vch-an .vch-azmd-knopf {
    display: inline-flex !important;
    align-items: center !important;
    gap: .5rem !important;
    background: none !important;
    border: none !important;
    box-shadow: none !important;
    padding: .3rem 0 !important;
    color: var(--vch-blau) !important;
    font-size: .95rem !important;
    font-weight: 400 !important;
  }
  html.vch-an .vch-azmd-f { display: inline-flex !important; color: var(--vch-az-grau) !important; }

  /* — 16. Empfehlungsregal: Ueberschrift wie im Bild, „Gesponsert" grau — */
  html.vch-an #listingDetailModal #vcRecoRow > :first-child {
    font-size: 1.08rem !important;
    font-weight: 700 !important;
    padding: 0 .9rem !important;
  }


  /* — 17. Standortzeile wie „Deliver to …" im Bild: Nadel + blaue Schrift — */
  html.vch-an #listingDetailModal #ldmLoc,
  html.vch-an #listingDetailModal .ldm-loc {
    display: flex !important;
    align-items: center !important;
    gap: .4rem !important;
    padding: 0 .9rem !important;
    margin: .1rem 0 .7rem !important;
    font-size: .92rem !important;
    font-weight: 400 !important;
    color: var(--vch-blau) !important;
    background: none !important;
    border: none !important;
  }
  html.vch-an #listingDetailModal #ldmLoc svg,
  html.vch-an #listingDetailModal .ldm-loc svg {
    flex: 0 0 auto !important;
    width: 15px !important; height: 15px !important;
    color: var(--vch-az-grau) !important;
  }

  /* — 18. Nachmessungen am lebenden Fenster (25.08.2026) — */

  /* Leere Sternereihe: die Vorlage zeigt bei 0 Bewertungen NICHTS.
     Fuenf graue Umriss-Sterne neben dem Preis sahen aus wie ein Fehler. */
  html.vch-an #listingDetailModal .vcpb-empty { display: none !important; }

  /* Standortzeile: die Schrift steckt in Kind-Elementen mit eigener Farbe —
     das Blau musste deshalb bis zu den Kindern durchgereicht werden. */
  html.vch-an #listingDetailModal #ldmLoc span,
  html.vch-an #listingDetailModal .ldm-loc span,
  html.vch-an #listingDetailModal #ldmLocText,
  html.vch-an #listingDetailModal #ldmLocText2 {
    color: var(--vch-blau) !important;
    font-weight: 400 !important;
  }

  /* Verfuegbarkeit ueber dem Kaufteil steht in der Vorlage gruen. */
  html.vch-an #listingDetailModal .vcdu-ctcard .vcdu-ct-h {
    color: var(--vch-az-gruen) !important;
  }

  /* — 19. Nachbesserungen aus der Betreiber-Rueckmeldung 25.08.2026 — */

  /* „mach die schatten der knöpfe weg" — gilt fuer die Detailansicht UND
     fuer das Blatt. vc-knopfdesign.js setzt den Schatten zusaetzlich
     INLINE; dagegen arbeitet `azKaufknoepfe()` und
     `knoepfeSchwebenLassen()` in vc-handy.js. */
  html.vch-an #listingDetailModal button,
  html.vch-an #listingDetailModal a,
  html.vch-an #listingDetailModal .vcdu-card,
  html.vch-an .vch-blatt-karte,
  html.vch-an .vch-aktinhalt button,
  html.vch-an .vch-aktinhalt a {
    box-shadow: none !important;
    text-shadow: none !important;
  }

  /* Steht oben eine bezahlte Anzeige, weicht die Shopzeile. */
  html.vch-an #vchAzShop.vch-az-weicht { display: none !important; }

  /* Die Sponsorenkarte sitzt jetzt ganz oben — sie bringt ihre eigene
     Gestaltung mit, braucht hier also nur Platz und Abstand. */
  html.vch-an #vchAzAnzeige > .vch-az-sponsorkarte {
    margin: 0 !important;
    width: 100% !important;
    box-sizing: border-box !important;
  }
  html.vch-an #vchAzAnzeige:has(> .vch-az-sponsorkarte) {
    border: none !important;
    margin: .3rem .9rem .8rem !important;
    background: transparent !important;
  }

  /* Aufklapper stehen jetzt direkt unter der Beschreibung und bilden dort
     EINEN ruhigen Stapel: Haarlinie nur zwischen ihnen, kein Kasten. */
  html.vch-an #listingDetailModal .vcdu-accsec,
  html.vch-an #listingDetailModal .ldm-bottom,
  html.vch-an #listingDetailModal .ldm-sec.vcdu-card {
    background: transparent !important;
    border: none !important;
    border-radius: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
  }

  /* 🚨 GEMESSEN (Betreiber-Bild 25.08.2026: drei Pillen ohne Schrift):
     Die Dreier-Gruppe „Teilen · Preisalarm · Parken" kommt aus der
     Kartenleiste. Stehen die drei Knoepfe NEBENEINANDER, blendet sie ihre
     Beschriftungen aus und zeigt nur die Zeichen — sonst passten sie nicht
     in die Zeile. Im Blatt stehen sie aber UNTEREINANDER ueber die volle
     Breite: dort ist das Ausblenden sinnlos und macht aus dem Knopf ein
     Raetsel. Hier bekommen Zeichen UND Beschriftung ihren Platz zurueck.
     Belegt: erzwungenes `display` liess „Teilen" mit 42px Breite erscheinen. */
  html.vch-an .vch-aktinhalt button > span,
  html.vch-an .vch-aktinhalt a > span {
    display: inline-flex !important;
    align-items: center !important;
    width: auto !important;
    overflow: visible !important;
  }
  html.vch-an .vch-aktinhalt .vckl-k-ic { flex: 0 0 auto !important; }
  /* Die Knoepfe tragen INLINE `flex:1 1 0` und `overflow:hidden` aus der
     Kartenleiste — im Blatt darf beides nicht mehr abschneiden. */
  html.vch-an .vch-aktinhalt button,
  html.vch-an .vch-aktinhalt a {
    overflow: visible !important;
    white-space: normal !important;
    padding-left: .9rem !important;
    padding-right: .9rem !important;
  }

  /* Gemessen: das Blatt haelt 8.8px Abstand, die Dreier-Gruppe nur 1.6px —
     die letzten drei Pillen klebten dadurch sichtbar enger zusammen als die
     oberen. Gleicher Abstand fuer alle. */
  html.vch-an .vch-aktinhalt .vcdu-trio,
  html.vch-an .vch-aktinhalt .vcdu-actrow {
    display: flex !important;
    flex-direction: column !important;
    gap: .55rem !important;
    width: 100% !important;
  }

  /* Modellzeile unter der Ueberschrift — gleicher Rand wie alles andere;
     ohne diese Regel klebte „Camaro VI" am linken Bildrand. */
  html.vch-an #listingDetailModal #ldmSubtitle,
  html.vch-an #listingDetailModal .ldm-subtitle,
  html.vch-an #listingDetailModal .dp-subtitle,
  html.vch-an #listingDetailModal .vcdp-subtitle,
  html.vch-an #listingDetailModal .vcdp-sub,
  html.vch-an #listingDetailModal .ldm-sub,
  html.vch-an #listingDetailModal .dp-sub {
    padding: 0 .9rem !important;
    margin: 0 0 .25rem !important;
    font-size: .95rem !important;
    font-weight: 400 !important;
    color: var(--vch-az-grau) !important;
  }

  /* Finanzierungszeile im Geldblock — gleicher Rand, ruhige Schrift. */
  html.vch-an #listingDetailModal #ldmFinLine,
  html.vch-an #listingDetailModal #dmFinLine,
  html.vch-an #listingDetailModal .ldm-finline,
  html.vch-an #listingDetailModal .dp-finline {
    padding: 0 .9rem !important;
    margin: .15rem 0 .5rem !important;
    font-size: .9rem !important;
    font-weight: 400 !important;
  }

  /* Anbieterzeile und Preis-Beschriftung: gleicher Rand, ruhige Schrift. */
  html.vch-an #listingDetailModal .vcdp-company,
  html.vch-an #listingDetailModal .ldm-company,
  html.vch-an #listingDetailModal .dp-company,
  html.vch-an #listingDetailModal .vcdp-pricelbl,
  html.vch-an #listingDetailModal .dp-price-label {
    padding: 0 .9rem !important;
    margin: 0 0 .35rem !important;
    font-size: .9rem !important;
    font-weight: 400 !important;
    color: var(--vch-az-grau) !important;
  }

  /* Vertrauens-Zeile unter dem Kaufteil — gleicher Rand, ruhige Schrift. */
  html.vch-an #listingDetailModal .vcdp-trust,
  html.vch-an #listingDetailModal .ldm-trust,
  html.vch-an #listingDetailModal .dp-trust {
    padding: 0 .9rem !important;
    margin: 0 0 .9rem !important;
    font-size: .86rem !important;
    color: var(--vch-az-grau) !important;
  }

  /* Melde-Zeile: die vorhandene Huelle der Seite, als EINE ruhige blaue
     Zeile gesetzt — Beschriftung und Knopf nebeneinander, kein Kasten. */
  html.vch-an #vchAzMelden .vch-azmd-zeile {
    display: flex !important;
    align-items: center !important;
    gap: .5rem !important;
    flex-wrap: wrap !important;
    background: none !important;
    border: none !important;
    box-shadow: none !important;
    padding: 0 !important;
    margin: 0 !important;
    font-size: .92rem !important;
    color: var(--vch-az-grau) !important;
  }
  html.vch-an #vchAzMelden .vch-azmd-zeile button,
  html.vch-an #vchAzMelden .vch-azmd-zeile a {
    background: none !important;
    border: none !important;
    box-shadow: none !important;
    padding: 0 !important;
    min-height: 0 !important;
    color: var(--vch-blau) !important;
    font-size: .92rem !important;
    font-weight: 400 !important;
    text-decoration: none !important;
  }

  /* ═══════════════════════════════════════════════════════════
     20. ECKDATEN OBEN, OHNE SYMBOLE (Betreiber 25.08.2026)
     „die Symbole bei jeder Kategorie sollten nicht in der Detailansicht
     sein, sondern einfach oben aufgelistet mit normaler Schrift."
     Die Eckdaten stehen jetzt direkt unter den Plaketten; ihre Zeichen
     werden ausgeblendet, Beschriftung und Wert bleiben als Schrift.
     ═══════════════════════════════════════════════════════════ */
  html.vch-an #listingDetailModal #ldmSpecs,
  html.vch-an #listingDetailModal .ldm-specs-grid,
  html.vch-an #listingDetailModal .vcdu-secgrid {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: .35rem .9rem !important;
    padding: 0 .9rem !important;
    margin: .1rem 0 .9rem !important;
    background: none !important;
    border: none !important;
  }
  html.vch-an #listingDetailModal #ldmSpecs > *,
  html.vch-an #listingDetailModal .ldm-specs-grid > *,
  html.vch-an #listingDetailModal .vcdu-secgrid > * {
    display: block !important;
    background: none !important;
    border: none !important;
    padding: 0 !important;
    margin: 0 !important;
    text-align: left !important;
    font-size: .9rem !important;
  }
  /* Die Zeichen raus — genau das war die Ansage. */
  html.vch-an #listingDetailModal #ldmSpecs svg,
  html.vch-an #listingDetailModal .ldm-specs-grid svg,
  html.vch-an #listingDetailModal .vcdu-secgrid svg,
  html.vch-an #listingDetailModal .ldm-spec svg,
  html.vch-an #listingDetailModal .vcdu-faktico { display: none !important; }
  /* Wert kraeftig, Beschriftung leise — normale Schrift, kein Kasten. */
  html.vch-an #listingDetailModal .ldm-spec b,
  html.vch-an #listingDetailModal .ldm-spec strong,
  html.vch-an #listingDetailModal .ldm-spec-v { font-weight: 600 !important; color: var(--vch-text) !important; }
  html.vch-an #listingDetailModal .ldm-spec small,
  html.vch-an #listingDetailModal .ldm-spec-l { font-weight: 400 !important; color: var(--vch-az-grau) !important; }

  /* Anzeige mitten in der Ansicht: etwas Luft davor und danach. */
  html.vch-an #vchAzAnzeige { margin: 1rem .9rem 1.2rem !important; }

  /* ═══════════════════════════════════════════════════════════
     21. KEIN AUFBLITZEN DES ALTEN ZUSTANDS (Betreiber 25.08.2026)
     „bei der Handyversion soll nicht erst die alte Farbe / das alte Design
     kommen und dann das neue — es soll immer sofort das Neue sein."

     Die Ansicht bleibt unsichtbar, bis die Handy-Ebene sie EINMAL geordnet
     hat; dann setzt `detailFreigeben()` `data-vch-fertig`.

     🚨 NOTBREMSE: Sollte das JavaScript gar nicht laufen (Fehler, Datei
     blockiert), darf die Ansicht nicht dauerhaft leer bleiben. Die
     Zeitspur deckt sie nach 600 ms von selbst auf. Ein unsichtbarer
     Bruchteil einer Sekunde ist hinnehmbar — eine leere Seite nie.
     ═══════════════════════════════════════════════════════════ */
  @keyframes vch-notbremse { to { opacity: 1; } }

  html.vch-an #listingDetailModal .ldm-page,
  html.vch-an #listingDetailModal .dm-page {
    opacity: 0;
    animation: vch-notbremse .01s linear .6s forwards;
  }
  html.vch-an #listingDetailModal .ldm-page[data-vch-fertig],
  html.vch-an #listingDetailModal .dm-page[data-vch-fertig] {
    opacity: 1 !important;
    animation: none !important;
  }
  /* 🚨 KEINE Ausnahme fuer „Bewegung reduzieren": der Schleier ist keine
     Bewegung, sondern ein Vorhang von einem Sekundenbruchteil. Haette ich
     ihn dort abgeschaltet, waere genau fuer diese Nutzer das Aufblitzen
     zurueckgekommen — also das Gegenteil von Ruhe. */

  /* Sterne unter der Ueberschrift — eine ruhige Zeile, Zahl in Blau. */
  html.vch-an #vchAzSterne {
    padding: 0 .9rem !important;
    margin: 0 0 .4rem !important;
    font-size: .95rem !important;
    line-height: 1.3 !important;
  }
  html.vch-an #vchAzSterne:empty { display: none !important; }
  html.vch-an #vchAzSterne .n { color: var(--vch-blau) !important; }

  /* ═══════════════════════════════════════════════════════════
     22. FILTERLEISTE (Betreiber 25.08.2026: „Filter zeigt es nicht
         gut und schoen an")
     GEMESSEN: `.mobile-filterbar` war durchsichtig, die zwei Knoepfe
     ebenfalls — keine Fuellung, kein Rand, keine Form. Auf dem grauen
     Seitengrund sah das aus wie ausgegraut/abgeschaltet.
     Jetzt: eigene Flaeche mit Haarlinie, Knoepfe als klare Umriss-Pillen,
     die Trefferzahl als blaue Perle.
     ═══════════════════════════════════════════════════════════ */
  html.vch-an .mobile-filterbar {
    background: var(--vch-flaeche) !important;
    border-bottom: 1px solid var(--vch-rand) !important;
    gap: .55rem !important;
    padding: .5rem .9rem !important;
    min-height: 0 !important;
    height: auto !important;
  }
  html.vch-an .mobile-filterbar .mfb-btn {
    flex: 1 1 0 !important;
    min-height: 40px !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    gap: .4rem !important;
    border: 1.5px solid var(--vch-rand) !important;
    border-radius: 999px !important;
    background: var(--vch-flaeche) !important;
    color: var(--vch-text) !important;
    font-size: .93rem !important;
    font-weight: 600 !important;
    box-shadow: none !important;
    padding: 0 .9rem !important;
  }
  /* Aktive Filter: blauer Umriss statt blasser Schrift. */
  html.vch-an .mobile-filterbar .mfb-btn[data-aktiv="1"],
  html.vch-an .mobile-filterbar .mfb-btn.aktiv {
    border-color: var(--vch-blau) !important;
    color: var(--vch-blau) !important;
    background: var(--vch-blau-weich) !important;
  }
  /* Die Zahl hinter „Filter" als Perle, damit sie nicht wie Text mitlaeuft. */
  html.vch-an .mobile-filterbar .mfb-btn .mfb-zahl,
  html.vch-an .mobile-filterbar .mfb-btn b,
  html.vch-an .mobile-filterbar .mfb-btn .badge {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    min-width: 20px !important;
    height: 20px !important;
    padding: 0 .3rem !important;
    border-radius: 999px !important;
    background: var(--vch-blau) !important;
    color: #fff !important;
    font-size: .74rem !important;
    font-weight: 800 !important;
  }
  html.vch-an .mobile-filterbar .mfb-btn svg {
    width: 17px !important; height: 17px !important;
    opacity: .75 !important;
  }

  /* Zweites Netz zur Inline-Faerbung: greift, sobald vc-knopfdesign KEINEN
     Inline-Stil (mehr) geschrieben hat. Zwei IDs, damit es dessen
     Klassen-Regeln schlaegt. */
  /* 🚨 GEMESSEN 25.08.2026: ein NACKTER Knopf mit `data-vch-kauf` wurde blau,
     derselbe Knopf mit `class="ldm-cta-btn"` blieb weiss. Die Klassenregel der
     Seite ist genauer als eine reine Attributregel. Deshalb steht das Attribut
     hier ZUSAETZLICH neben `[class]` — das zaehlt wie eine weitere Klasse und
     schlaegt damit jede Ein-Klassen-Regel der Seite, ohne dass ich jeden
     einzelnen Klassennamen kennen muss (die heissen je Familie anders:
     `ldm-cta-btn`, `dm-btn`, `vcdu-primar` …). */
  html.vch-an #listingDetailModal [data-vch-kauf="1"],
  html.vch-an #listingDetailModal [data-vch-kauf="1"][class],
  html.vch-an #listingDetailModal .vcdu-ctcard [data-vch-kauf="1"][class],
  html.vch-an #listingDetailModal .vcdu-buy [data-vch-kauf="1"][class] {
    background: var(--vch-az-gelb) !important;
    background-image: none !important;
    color: #fff !important;
    border: none !important;
    border-radius: 999px !important;
    box-shadow: none !important;
  }
  html.vch-an #listingDetailModal [data-vch-kauf="2"],
  html.vch-an #listingDetailModal [data-vch-kauf="2"][class],
  html.vch-an #listingDetailModal .vcdu-ctcard [data-vch-kauf="2"][class],
  html.vch-an #listingDetailModal .vcdu-buy [data-vch-kauf="2"][class] {
    background: var(--vch-az-orange) !important;
    background-image: none !important;
    color: #fff !important;
    border: none !important;
    border-radius: 999px !important;
    box-shadow: none !important;
  }
  /* „Weitere Moeglichkeiten" bleibt eine Zeile — nie eine Pille. */
  html.vch-an #listingDetailModal .vch-mehrakt,
  html.vch-an #listingDetailModal .vch-mehrakt[class],
  html.vch-an #listingDetailModal .vcdu-ctcard .vch-mehrakt[class],
  html.vch-an #listingDetailModal .vcdu-buy .vch-mehrakt[class],
  html.vch-an #dmBody .vch-mehrakt {
    background: transparent !important;
    background-image: none !important;
    border: none !important;
    border-radius: 0 !important;
    box-shadow: none !important;
  }

  /* Laufender Suchbegriff oben: kraeftige Schrift statt Platzhaltergrau,
     daneben ein Kreuz zum Loeschen. */
  html.vch-an #vcHandyKopf .vch-suchfeld.vch-suchfeld-aktiv span {
    color: var(--vch-text) !important;
    font-weight: 600 !important;
  }
  html.vch-an #vcHandyKopf .vch-such-weg {
    flex: 0 0 auto !important;
    width: 38px !important; height: 38px !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    border: none !important;
    background: transparent !important;
    box-shadow: none !important;
    color: var(--vch-mitte) !important;
    padding: 0 !important;
    margin-left: -6px !important;
  }

  /* ═══════════════════════════════════════════════════════════
     23. KEINE LEEREN BALKEN LINKS UND RECHTS (Betreiber 25.08.2026)
     „das nervt bei der Handyansicht, dass links und rechts einfach leere
     Balken sind — es soll alles mit Inhalt gefuellt werden."

     GEMESSEN auf der Detailansicht bei 375px:
       `.vcreco-sec`   links 32 / rechts 32  → nur 311px nutzbar
       `.vcreco-track` links 46 / rechts 46  → nur 282px
       Karte 214px breit
     Also 92px — ein VIERTEL des Bildschirms — leer, und man sah nur eine
     Karte plus einen Streifen. Die Einrueckung stammt vom Rechner-Aufbau,
     wo neben dem Regal noch eine Spalte steht; auf dem Telefon gibt es die
     nicht.

     Regel: Ueberschrift und Text behalten den Seitenrand (.9rem), die
     SPUR laeuft randlos durch und traegt den Rand nur als Innenabstand —
     so beginnt die erste Karte buendig mit dem Text und die letzte darf
     bis an die Kante scrollen. Genau so machen es Amazon und Netflix.
     ═══════════════════════════════════════════════════════════ */
  html.vch-an .vcreco-sec,
  html.vch-an .vcrg-rail,
  html.vch-an .vhr-sec,
  html.vch-an #vcRecoRow > *,
  html.vch-an .vcrec-sec {
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    max-width: none !important;
    width: 100% !important;
    box-sizing: border-box !important;
  }

  /* Ueberschriftzeile der Regale: normaler Seitenrand. */
  html.vch-an .vcreco-hrow,
  html.vch-an .vcrg-tcrow,
  html.vch-an .vhr-pnrow,
  html.vch-an .vhr-dlrow {
    padding-left: .9rem !important;
    padding-right: .9rem !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
  }

  /* Die Spur selbst: randlos, Rand nur als Innenabstand. */
  html.vch-an .vcreco-track,
  html.vch-an .vcrg-track,
  html.vch-an .vhr-dltrack,
  html.vch-an .vhr-offtrack,
  html.vch-an .vcrec-track {
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: .9rem !important;
    padding-right: .9rem !important;
    width: 100% !important;
    max-width: none !important;
    box-sizing: border-box !important;
    scroll-padding-left: .9rem !important;
  }

  /* Eckdaten-Tabelle: sass die Beschriftungsspalte zu breit, blieb rechts
     Luft. Beschriftung nur so breit wie noetig. */
  html.vch-an .vch-azi-zeile {
    grid-template-columns: minmax(6.5rem, max-content) 1fr !important;
  }

  /* 🚨 GEMESSEN: die Seitenraender STAPELN sich.
       `.ldm-page`   16px
       `#vcRecoRow`  +16px  → 32
       `.vcreco-sec` +14.4  → 46 fuer die Spur
     Dazu kommt auf jedem Textblock nochmal mein eigener `.9rem`. Ergebnis
     waren 30px Rand am Text und 46px am Regal — bei 375px Bildschirm ein
     Viertel leerer Balken.

     Ab hier gibt es GENAU EINE Quelle fuer den Seitenrand: die Bloecke
     selbst (.9rem). Die Huelle traegt keinen mehr — dadurch koennen Bild,
     Kartenband und die Regal-Spuren randlos durchlaufen. */
  html.vch-an #listingDetailModal .ldm-page,
  html.vch-an #listingDetailModal .dm-page,
  html.vch-an #listingDetailModal #vcRecoRow {
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  /* Bloecke, die bisher vom Rand der Huelle gelebt haben, brauchen ihn
     jetzt selbst — sonst klebten sie an der Kante. */
  html.vch-an #listingDetailModal #ldmDealer,
  html.vch-an #listingDetailModal #dmDealer,
  html.vch-an #listingDetailModal .ldm-dealersec,
  html.vch-an #listingDetailModal #ldmDealerSection,
  html.vch-an #listingDetailModal .vcdu-qasec,
  html.vch-an #listingDetailModal #ldmProductReviews,
  html.vch-an #listingDetailModal #dmProductReviews,
  html.vch-an #listingDetailModal .vcdu-accsec,
  html.vch-an #listingDetailModal .ldm-bottom,
  html.vch-an #listingDetailModal [data-vch-prodgal] {
    padding-left: .9rem !important;
    padding-right: .9rem !important;
    box-sizing: border-box !important;
  }
  /* Bild, Kartenband und Regal-Spuren bleiben ausdruecklich randlos. */
  html.vch-an #listingDetailModal .vcdu-gal,
  html.vch-an #listingDetailModal .ldm-stage,
  html.vch-an #listingDetailModal #vcduMapBand {
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  /* 🚨 GEMESSEN: die Aufklapp-Ueberschriften klebten nach dem Entfernen des
     Huellen-Randes an der linken Kante. Grund: die aeltere Regel traf sie
     ueber `.ldm-sec.vcdu-card` (DREI Klassen) und setzte `padding: 0` —
     genauer als mein `.vcdu-accsec` mit zwei Klassen. Statt Selektoren
     gegeneinander aufzuruesten bekommt hier die UEBERSCHRIFT selbst ihren
     Rand; sie ist das, was man sehen kann. */
  /* (Der Rand der Ueberschriften wird in vc-handy.js gesetzt — hier verlor
     die Regel gegen eine aeltere mit drei Klassen. Nur der Fliesstext
     bleibt hier.) */
  html.vch-an #listingDetailModal .vcdu-accbody,
  html.vch-an #listingDetailModal .ldm-sec > p,
  html.vch-an #listingDetailModal .vcdp-sec > p {
    padding-left: .9rem !important;
    padding-right: .9rem !important;
    box-sizing: border-box !important;
  }
  /* Der Aufklapper-Inhalt darf innen keinen zweiten Rand mehr aufschlagen. */
  html.vch-an #listingDetailModal .vcdu-accbody > * {
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  /* Kaesten mit eigenem Innenrand: auf 375px zaehlt jeder Pixel.
     GEMESSEN: Haendlerkarte 38px je Seite (24 eigene + 14 von aussen),
     VIN-Werkzeug 21px. Der Rand von aussen reicht — innen genuegt wenig. */
  html.vch-an #listingDetailModal .ldm-dcard,
  html.vch-an #listingDetailModal .dm-dcard,
  html.vch-an #listingDetailModal .vcvin-card,
  html.vch-an #listingDetailModal #vcVinMount > * {
    padding-left: .35rem !important;
    padding-right: .35rem !important;
    border-radius: 12px !important;
    box-sizing: border-box !important;
  }
  /* Das Hero-Bild der Haendlerkarte darf randlos laufen. */
  html.vch-an #listingDetailModal .ldm-dhero {
    margin-left: -.35rem !important;
    margin-right: -.35rem !important;
    width: calc(100% + .7rem) !important;
  }

  /* ═══════════════════════════════════════════════════════════
     24. KOPFZEILE DARF NICHTS VERDECKEN (Betreiber 25.08.2026)
     „bei fahrzeuge verdeckt die suchleiste das erste inserat."
     GEMESSEN: Kopfzeile fest, 95px hoch; `body` traegt zwar
     `padding-top: 96px`, die erste Karte lag trotzdem bei top=0 und war
     oben abgeschnitten. Statt der Huelle bekommt deshalb der Inhalt selbst
     den Abstand — das wirkt unabhaengig davon, was mit dem Body-Rand
     passiert. `scroll-margin-top` sorgt zusaetzlich dafuer, dass beim
     Springen zu einem Inserat nichts unter der Leiste landet.
     ═══════════════════════════════════════════════════════════ */
  /* 🚨 18.09.2026 auf 0 gesetzt — Betreiber: „es buggt alles in der
     Handyansicht". GEMESSEN bei 390px: `body` traegt den Kopf-Abstand
     inzwischen auf ALLEN Kategorieseiten wirksam (Huelle beginnt bei
     top=96, Kopf endet bei 95). Dieser Zusatz legte darum 92px LEERE
     Flaeche unter die Suchleiste — auf maschinen, verpackungen,
     werkstoffe, software, kategorie (alle dynamischen), auf immobilien/
     elektrogeraete zwischen Filterleiste und Treffern, und auf der
     fahrzeuge-Trefferliste DOPPELT, weil dort `.browse-layout` in
     `.browse-wrap.mde-results` steckt (Brotkrumen erst bei y=206).
     Der Sog `margin-top:-56vh`, der damals die erste Karte unter den Kopf
     zog, wird weiter unten eigens abgefangen. Gegenprobe nach der
     Aenderung: erste Karte auf allen 8 Seiten unterhalb des Kopfes. */
  html.vch-an .browse-wrap,
  html.vch-an .browse-layout,
  html.vch-an .mde-results {
    padding-top: 0 !important;
    margin-top: 0 !important;
  }
  /* 🚨 Hier stand eine Ausnahme „traegt schon die Filterleiste den Abstand".
     GEMESSEN: auf fahrzeuge.html EXISTIERT `.mobile-filterbar`, ist dort
     aber 0px hoch — die Ausnahme griff und setzte den Abstand wieder auf
     null, die erste Karte blieb verdeckt. `:has()` kann keine Hoehe pruefen;
     eine Ausnahme, die auf Vorhandensein statt auf Wirkung schaut, ist
     darum wertlos. Doppelter Abstand ist harmloser als verdeckter Inhalt. */
  html.vch-an [data-id],
  html.vch-an .srpeg,
  html.vch-an .fzcard {
    scroll-margin-top: calc(var(--vch-kopf-h) + 10px) !important;
  }

  /* 🚨 GEMESSEN auf fahrzeuge.html: `#fzHomeSecs` begann bei top=-32px, die
     erste Ueberschrift lag hinter der Kopfzeile. URSACHE steht in
     fahrzeuge.html:481 — `.mde-wrap:has(.mde-filterbox){margin-top:-56vh}`.
     Dieser Sog gehoert zur Rechner-Gestaltung, wo der Inhalt bewusst in den
     Hero hineinragt. Auf dem Telefon blendet die Handy-Ebene den Hero aus
     — der Sog blieb aber und zog alles unter die feste Leiste. */
  html.vch-an .mde-wrap,
  html.vch-an .mde-wrap:has(.mde-filterbox) {
    margin-top: 0 !important;
  }
  /* 🚨 GEMESSEN: mit `margin-top: 0` steht der Behaelter schon korrekt bei
     96px (der Body-Rand traegt). Mein zusaetzlicher Innenabstand von 102px
     war doppelt gezaehlt — daraus wurde eine 250px hohe Leerflaeche, genau
     das Gegenteil von „rutsche alles weiter hinauf". Der Sog war das
     Problem, nicht der fehlende Abstand. */
  html.vch-an #fzHomeSecs,
  html.vch-an .mde-wrap:first-of-type {
    padding-top: 0 !important;
  }

  /* ═══════════════════════════════════════════════════════════
     25. ENGER UND KLEINER (Betreiber 25.08.2026)
     „rutsche alles weiter hinauf und mach alles kleiner, Schrift usw."
     „die Eckdaten alle 3 in einer Linie, um Platz zu sparen."
     „die Beschreibung verkürze das etwas, dass früher das … kommt."
     ═══════════════════════════════════════════════════════════ */

  /* Eckdaten: drei nebeneinander statt zwei — spart eine ganze Zeile. */
  html.vch-an #listingDetailModal #ldmSpecs,
  html.vch-an #listingDetailModal .ldm-specs-grid,
  html.vch-an #listingDetailModal .vcdu-secgrid {
    grid-template-columns: repeat(3, 1fr) !important;
    gap: .3rem .6rem !important;
    margin: .05rem 0 .6rem !important;
  }
  html.vch-an #listingDetailModal #ldmSpecs > *,
  html.vch-an #listingDetailModal .ldm-specs-grid > *,
  html.vch-an #listingDetailModal .vcdu-secgrid > * {
    font-size: .82rem !important;
    line-height: 1.25 !important;
  }
  html.vch-an #listingDetailModal .ldm-spec b,
  html.vch-an #listingDetailModal .ldm-spec strong,
  html.vch-an #listingDetailModal .ldm-spec-v { font-size: .84rem !important; }
  html.vch-an #listingDetailModal .ldm-spec small,
  html.vch-an #listingDetailModal .ldm-spec-l { font-size: .75rem !important; }

  /* Alles eine Spur kleiner und enger — mehr Inhalt im ersten Blick. */
  html.vch-an #listingDetailModal .ldm-title,
  html.vch-an #listingDetailModal #ldmTitle,
  html.vch-an .dm-page .dp-title,
  html.vch-an .dm-page .vcdp-title {
    font-size: 1.2rem !important;
    line-height: 1.24 !important;
    margin: .05rem 0 .2rem !important;
  }
  html.vch-an #vchAzSub {
    font-size: .93rem !important;
    line-height: 1.3 !important;
    margin: 0 0 .35rem !important;
    -webkit-line-clamp: 2 !important;   /* frueher „…" — so die Ansage */
  }
  html.vch-an #vchAzShop { margin: .1rem 0 .2rem !important; font-size: .9rem !important; }
  html.vch-an #vchAzShop .vch-azs-link { font-size: .9rem !important; }
  html.vch-an #vchAzSterne { margin: 0 0 .25rem !important; font-size: .88rem !important; }
  html.vch-an #listingDetailModal #ldmSubtitle,
  html.vch-an #listingDetailModal .ldm-subtitle,
  html.vch-an #listingDetailModal .vcdp-sub { font-size: .86rem !important; margin: 0 0 .15rem !important; }
  html.vch-an #listingDetailModal #ldmBadges,
  html.vch-an #listingDetailModal .ldm-badges { margin: 0 0 .35rem !important; }
  html.vch-an #listingDetailModal #ldmBadges > *,
  html.vch-an #listingDetailModal .ldm-badges > * { font-size: .84rem !important; }
  html.vch-an #listingDetailModal .ldm-price,
  html.vch-an #listingDetailModal #ldmPrice,
  html.vch-an .dm-page .dp-price,
  html.vch-an .dm-page .vcdp-price {
    font-size: 1.6rem !important;
    margin: .15rem 0 .05rem !important;
  }
  /* Weniger Luft zwischen den Abschnitten. */
  html.vch-an #listingDetailModal .ldm-page > *,
  html.vch-an .dm-page > * { margin-bottom: .7rem !important; }
  html.vch-an #vchAzInfo { margin: .1rem 0 .7rem !important; }
  html.vch-an .vch-azi-zeile { padding: .14rem 0 !important; }
  html.vch-an .vch-azi-k, html.vch-an .vch-azi-w { font-size: .85rem !important; }
  html.vch-an .vch-azi-recht { font-size: .82rem !important; margin: .5rem 0 0 !important; }
  html.vch-an #vchAzMerken { margin: 0 0 .6rem !important; }
  html.vch-an .vch-azm-knopf { min-height: 42px !important; font-size: .9rem !important; }
  html.vch-an #vchAzMelden { margin: 0 0 .8rem !important; }
  html.vch-an #listingDetailModal .vcdu-ctcard { margin: .1rem 0 .7rem !important; gap: .45rem !important; }

  /* ═══════════════════════════════════════════════════════════
     26. PERSONALISIERUNG OHNE KAESTEN (Betreiber 25.08.2026)
     „mach bei der Personalisierung da im Hintergrund die Boxen weg."
     Die Regale bringen fuer jedes Panel eine eigene Flaeche mit Rahmen
     und Schatten mit. Untereinander gestapelt ergibt das auf dem Telefon
     eine Treppe aus Kaesten. Passt zu [[personalisierung-optik-schlicht]]:
     keine Umrandung, keine Flaeche — nur Inhalt.
     ═══════════════════════════════════════════════════════════ */
  /* 🚨 GEMESSEN 25.08.2026: `transparent` war der falsche Wert. Der Body
     traegt auf der Startseite bewusst #F3F5F9 ([[homepage-band-hero-bis-kategorien]]);
     durchsichtige Abschnitte liessen genau diesen Grauton durchscheinen —
     und was der Betreiber als „Box im Hintergrund" sah, war das Loch
     zwischen zwei weissen Nachbarn. Die Abschnitte bekommen darum die
     FLAECHE statt gar nichts: eine durchgehende Bahn ohne sichtbare Kanten. */
  html.vch-an .vhr-pn,
  html.vch-an .vhr-sec,
  html.vch-an .vhr-bento,
  html.vch-an .vhr-au,
  html.vch-an .vhr-aubg,
  html.vch-an .vcreco-sec,
  html.vch-an .vcrg-rail,
  html.vch-an .mde-sec,
  html.vch-an .fz-sec,
  html.vch-an #vcHomeRecoHint,
  html.vch-an .vhr-hint,
  html.vch-an #fzHomeSecs > * {
    background: var(--vch-flaeche) !important;
    background-image: none !important;
    border: none !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    padding-top: .2rem !important;
    padding-bottom: .2rem !important;
    margin-top: .4rem !important;
    margin-bottom: .4rem !important;
  }

  /* ═══════════════════════════════════════════════════════════
     27. LEISTE WEG, ALLES HINAUF (Betreiber 25.08.2026)
     „rutsch alle Symbole runter und mach die Leiste oben weg" +
     „den Preis hinaufschieben, so dass der bei der Kante vom Bild ist —
      wir müssen so viel Platz machen, dass alles auf den 1. Blick da ist."

     GEMESSEN vorher (375×812): Kopfleiste 52px · Bild ab 241 · Bildleiste
     619–679 · Preis erst bei 693 — weit unter dem Bildschirmrand.
     Zwei Flaechen ohne Inhalt: die weisse Leiste oben (52px) und die
     Bildleiste unter dem Bild (60px). Beide werden zu Auflagen:
       · Die Kopfleiste schwebt jetzt UEBER dem Inhalt (kein Platzverbrauch).
       · Die Punkt-/Herz-/Teilen-Leiste legt sich auf den unteren Bildrand.
     Damit ruecken Preis und Kaufknoepfe um rund 112px nach oben.

     🚨 Lesbarkeit: ueber einem hellen Foto waeren schwarze Zeichen weg.
     Jedes Zeichen bekommt darum eine weiche runde Auflage. Sobald man
     scrollt, setzt `vch-gescrollt` die Leiste wieder auf Flaeche — dann
     steht sie ueber weissem Inhalt und braucht die Auflage nicht mehr.
     ═══════════════════════════════════════════════════════════ */
  /* 🚨 Kein Platz mehr fuer eine LEISTE — aber die schwebenden Zeichen
     duerfen den Titel nicht ueberdecken. Reserviert wird darum nur noch
     die Hoehe der Zeichen, ohne Flaeche und ohne Trennlinie: die Leiste
     ist weg, der Platzverbrauch von 52px auf 42px gesunken. */
  html.vch-an #listingDetailModal.open { padding-top: 42px !important; }

  html.vch-an #vcHandyDetailKopf {
    height: 60px !important;
    padding: 10px .6rem 0 !important;   /* Zeichen etwas tiefer */
    background: transparent !important;
    border-bottom: none !important;
    box-shadow: none !important;
    transition: background .18s ease, box-shadow .18s ease;
  }
  html.vch-an #vcHandyDetailKopf .vch-dk-knopf {
    background: rgba(255, 255, 255, .82) !important;
    box-shadow: 0 1px 4px rgba(15, 23, 34, .18) !important;
    backdrop-filter: saturate(160%) blur(6px);
    -webkit-backdrop-filter: saturate(160%) blur(6px);
    color: #0F1722 !important;
  }
  /* Gescrollt: wieder eine echte Leiste, Auflagen weg. */
  html.vch-an #vcHandyDetailKopf.vch-gescrollt {
    background: var(--vch-flaeche) !important;
    border-bottom: 1px solid var(--vch-rand) !important;
    padding-top: 0 !important;
    height: 52px !important;
  }
  html.vch-an #vcHandyDetailKopf.vch-gescrollt .vch-dk-knopf {
    background: transparent !important;
    box-shadow: none !important;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    color: var(--vch-text) !important;
  }

  /* Bildleiste als Auflage auf den unteren Bildrand — spart 60px.
     🚨 NICHT `position:absolute`: `#vchAzGal` ist ein Geschwister der
     Galerie, kein Kind. Absolut gesetzt suchte es sich den naechsten
     positionierten Vorfahren — die ganze Seite — und landete bei 5623px.
     Ein negativer oberer Abstand legt es auf den Bildrand, ohne den
     Bezugsrahmen zu verlassen. */
  /* 🚨 Betreiber 25.08.2026: „mach das ins Bild hinein, rechts unten — man
     soll es aber anklicken koennen, also ohne diese Quadrate rundherum."
     Die Leiste liegt jetzt VOLLSTAENDIG im Bild und braucht keine eigene
     Hoehe mehr: nochmal ~50px gespart. Ohne Flaechen hinter den Zeichen
     waeren sie auf einem dunklen Foto unsichtbar — statt eines Kastens
     bekommen sie darum einen weichen Schlagschatten. Das ist eine Kontur,
     kein Rahmen. */
  html.vch-an #vchAzGal {
    position: relative !important;
    z-index: 3 !important;
    min-height: 0 !important;
    padding: 0 .7rem .5rem !important;
    margin: -46px 0 0 !important;
    background: none !important;
  }
  /* 🚨 Liegt die Leiste IM Bild (vc-handy.js setzt dann
     `data-vch-imbild`), gelten weder Negativ-Abstand noch Fluss: sie
     haengt absolut am unteren Bildrand. Damit kann sie nichts mehr
     verschieben und der Preis kann nicht mehr unter das Bild geraten.
     Diese Regel MUSS nach der obigen stehen — sie nimmt deren
     `margin` zurueck. */
  html.vch-an #vchAzGal[data-vch-imbild] {
    position: absolute !important;
    left: 0; right: 0; bottom: 0;
    margin: 0 !important;
    padding: 0 .7rem .6rem !important;
    z-index: 4 !important;
    pointer-events: none;          /* das Bild bleibt antippbar … */
  }
  /* … nur die Zeichen selbst nehmen den Tipp an. */
  html.vch-an #vchAzGal[data-vch-imbild] > * { pointer-events: auto; }
  html[data-theme="dark"].vch-an #vchAzGal {
    background: linear-gradient(to top, rgba(15,15,18,.92), rgba(15,15,18,0)) !important;
  }
  /* Die Galerie wird zum Bezugsrahmen fuer die Auflage. */
  html.vch-an #listingDetailModal .vcdu-gal { position: relative !important; }
  html.vch-an #vchAzGal .vcdu-heart,
  html.vch-an #vchAzGal .vch-azg-knopf,
  html.vch-an #vchAzGal .vch-azg-teilen {
    background: none !important;
    box-shadow: none !important;
    border: none !important;
    color: #0F1722 !important;
    width: 36px !important; height: 36px !important;
    /* Kontur statt Kasten — bleibt auf hellem UND dunklem Foto lesbar. */
    filter: drop-shadow(0 0 2px rgba(255,255,255,.95)) drop-shadow(0 1px 3px rgba(0,0,0,.45)) !important;
  }
  html.vch-an #vchAzGal .vch-punkte i {
    filter: drop-shadow(0 0 2px rgba(255,255,255,.9)) !important;
  }
  /* Der Preis darf jetzt direkt an die Bildkante ruecken. */
  html.vch-an #listingDetailModal .ldm-price,
  html.vch-an #listingDetailModal #ldmPrice {
    margin-top: .35rem !important;
  }

  /* Anzeigen-Anreisszeile oben bei den Angaben: eine ruhige Zeile mit
     Zeichen, Betrag kraeftig, „ANZEIGE" als kleines Etikett. */
  html.vch-an #listingDetailModal #ldmVersTeaser,
  html.vch-an #listingDetailModal #dmVersTeaser,
  html.vch-an #listingDetailModal .ldm-adteaser {
    display: flex !important;
    align-items: center !important;
    gap: .45rem !important;
    flex-wrap: wrap !important;
    padding: .35rem .9rem .5rem !important;
    margin: 0 0 .5rem !important;
    background: none !important;
    border: none !important;
    border-top: 1px solid var(--vch-rand) !important;
    font-size: .9rem !important;
    color: var(--vch-text) !important;
  }
  html.vch-an #listingDetailModal #ldmVersTeaser b,
  html.vch-an #listingDetailModal #ldmVersTeaser strong { font-weight: 700 !important; }
  html.vch-an #listingDetailModal .ldm-vers-ad {
    font-size: .68rem !important;
    letter-spacing: .04em !important;
    color: var(--vch-az-grau) !important;
    border: 1px solid var(--vch-rand) !important;
    border-radius: 4px !important;
    padding: .05rem .3rem !important;
    background: none !important;
  }

  /* 🚨 „alles auf den 1. Blick": GEMESSEN lag der Kaufteil bei 824px — der
     Bildschirm endet bei 812. Groesster Einzelposten war das quadratische
     Bild mit 375px. Auf 4:3 (281px) bleibt es gross, spart aber 94px; damit
     stehen Preis UND beide Kaufknoepfe ohne Scrollen da. */
  html.vch-an #listingDetailModal .vcdu-gal,
  html.vch-an #listingDetailModal .vcdu-gk,
  html.vch-an #listingDetailModal .ldm-stage {
    aspect-ratio: 4 / 3 !important;
    height: auto !important;
    max-height: 46vh !important;
  }
  html.vch-an #listingDetailModal .vcdu-gk img {
    width: 100% !important; height: 100% !important;
    object-fit: contain !important;
  }
  /* Abstaende noch eine Spur enger. */
  html.vch-an #listingDetailModal .ldm-page > *,
  html.vch-an .dm-page > * { margin-bottom: .45rem !important; }
  html.vch-an #vchAzSub { margin: 0 0 .25rem !important; }
  html.vch-an #listingDetailModal #ldmSpecs,
  html.vch-an #listingDetailModal .ldm-specs-grid { margin: 0 0 .4rem !important; }

  /* Letzte Feinarbeit: gemessen endete der zweite Kaufknopf bei 821px, der
     Bildschirm bei 812 — neun Pixel fehlten. Die hole ich aus den beiden
     groessten verbliebenen Luecken (je 13px), nicht aus der Schriftgroesse. */
  html.vch-an #listingDetailModal .ldm-price,
  html.vch-an #listingDetailModal #ldmPrice { margin-top: .1rem !important; }
  /* 🚨 Dieser Wert war der eigentliche Ueberlappungs-Grund: er zog ALLES
     Nachfolgende 56px hinauf, auch den Preis. Er gilt nur noch, solange
     die Leiste ausnahmsweise NICHT im Bild liegt (Galerie nicht
     gefunden) — dann ist sie ein normaler Block im Fluss. */
  html.vch-an #vchAzGal:not([data-vch-imbild]) { margin-top: -56px !important; }
  html.vch-an #listingDetailModal .vcdu-ctcard { margin-top: 0 !important; }

  /* Der Teilen-Knopf in der Bildleiste erbte keine Rundung — er stand als
     weisses Rechteck neben dem runden Herz. */
  html.vch-an #vchAzGal .vcdu-heart,
  html.vch-an #vchAzGal .vch-azg-knopf,
  html.vch-an #vchAzGal .vch-azg-teilen {
    border-radius: 50% !important;
    border: none !important;
  }
  /* Etwas Luft zwischen den schwebenden Zeichen und der Shopzeile. */
  html.vch-an #vchAzShop { margin-top: .25rem !important; }

  /* Punkte nach links, Herz und Teilen nach rechts — beides im Bild. */
  html.vch-an #vchAzGal .vch-punkte {
    position: static !important;
    transform: none !important;
    margin-right: auto !important;
  }
  html.vch-an #vchAzGal { justify-content: space-between !important; }
  html.vch-an #vchAzGal .vcdu-heart,
  html.vch-an #vchAzGal .vch-azg-knopf,
  html.vch-an #vchAzGal .vch-azg-teilen { border-radius: 0 !important; }

  /* Teilen oben in der Kopfzeile entfaellt (siehe vc-handy.js). */
  html.vch-an #vcHandyDetailKopf .vch-dk-weg { display: none !important; }

  /* USt-Angabe direkt unter dem Preis — klein, ruhig, aber da. */
  html.vch-an #vchAzUst {
    padding: 0 .9rem !important;
    margin: 0 0 .2rem !important;
    font-size: .82rem !important;
    font-weight: 400 !important;
    color: var(--vch-az-grau) !important;
    line-height: 1.3 !important;
  }
  html.vch-an #vchAzUst:empty { display: none !important; }

  /* 🚨 „mach den grauen Stich weg bei Versicherungen" + „kleiner machen und
     in Luecken quetschen": keine Trennlinie, kein grauer Grund, kleinere
     Schrift, und die Zeile darf umbrechen statt eine eigene Bahn zu belegen. */
  html.vch-an #listingDetailModal #ldmVersTeaser,
  html.vch-an #listingDetailModal #dmVersTeaser,
  html.vch-an #listingDetailModal .ldm-adteaser {
    border-top: none !important;
    background: none !important;
    padding: .1rem .9rem .15rem !important;
    margin: 0 0 .25rem !important;
    font-size: .8rem !important;
    color: var(--vch-mitte) !important;
  }
  html.vch-an #listingDetailModal #ldmVersTeaser svg { width: 14px !important; height: 14px !important; }
  html.vch-an #listingDetailModal .ldm-vers-ad { font-size: .62rem !important; padding: 0 .25rem !important; }

  /* Noch enger: die letzten Abstaende, die niemand braucht. */
  html.vch-an #listingDetailModal .ldm-page > *,
  html.vch-an .dm-page > * { margin-bottom: .3rem !important; }
  html.vch-an #listingDetailModal #ldmBadges,
  html.vch-an #listingDetailModal .ldm-badges { margin: 0 0 .2rem !important; }
  html.vch-an #listingDetailModal #ldmSpecs,
  html.vch-an #listingDetailModal .ldm-specs-grid { margin: 0 0 .25rem !important; gap: .2rem .6rem !important; }
  html.vch-an #vchAzSub { margin: 0 0 .15rem !important; }
  html.vch-an #listingDetailModal #ldmSubtitle,
  html.vch-an #listingDetailModal .vcdp-sub { margin: 0 0 .1rem !important; }
  html.vch-an #vchAzShop { margin: .15rem 0 .1rem !important; }
  html.vch-an #listingDetailModal #vcpbDetail { margin: 0 0 .25rem !important; }

  /* Listenansicht: der Kopf-Abstand kommt allein vom `body` (siehe 24.). */
  html.vch-an .mobile-filterbar { padding: .35rem .9rem !important; }

  /* ═══════════════════════════════════════════════════════════
     28. FUSSZEILE AUF DAS RECHTLICHE EINDAMPFEN (Betreiber 25.08.2026)
     „verkleinere den Footer so, dass nur mehr alle rechtlichen Sachen sind
     wie Impressum, AGB usw. — alles was nicht rechtlich ist, weg. Fragen &
     Antworten kannst du drinnen lassen, alles was so Infos sind auch."

     GEMESSEN: die Fusszeile war auf dem Telefon **3466px** hoch — mehr als
     vier Bildschirme. Aufteilung:
       .vcftr-benefits   265px  „Geprüfte Anbieter / Sichere Zahlung …"
       Spalte Marktplatz 488px  (Kategorien — stehen schon in der Leiste unten)
       Spalte Unternehmen 205px (So funktioniert es, Für Kunden …)
       .vcftr-brand > p  108px  Marketingtext
       .vcftr-tchips      54px  „SSL-verschlüsselt / DSGVO-konform …"
       .vcftr-social      36px
     Das sind rund 1150px reine Werbung. Es bleiben: Rechtliches,
     Kundenservice (FAQ, Dokumente, Bestellungen) und Kontakt.

     🚨 NUR ausblenden, nichts entfernen — am Rechner steht alles unveraendert,
     und ein spaeterer Umbau der Fusszeile findet seine Bausteine wieder.
     ═══════════════════════════════════════════════════════════ */
  html.vch-an .vcftr .vcftr-benefits,
  html.vch-an .vcftr .vcftr-tchips,
  html.vch-an .vcftr .vcftr-social,
  html.vch-an .vcftr .vcftr-brand p {
    display: none !important;
  }
  /* (Die Werbe-Spalten blendet `fusszeileEindampfen()` in vc-handy.js aus —
     ueber die UEBERSCHRIFT. `:nth-of-type` zaehlt Tags, nicht Klassen, und
     traf dadurch die falsche Spalte.) */
  /* Schnellzugriff (Kategorien, stehen schon in der Leiste unten) und die
     Zahlungsart-Logos sind Werbung, kein Rechtstext. */
  html.vch-an .vcftr .vcftr-quick,
  html.vch-an .vcftr .vcftr-partners,
  html.vch-an .vcftr .vcftr-pblock { display: none !important; }

  /* 🚨 „Partner & Dienste" (Stripe & Co.) ist die Drittanbieter-Offenlegung.
     Der Betreiber will sie auf dem Telefon trotzdem weg — sie bleibt über
     die Datenschutzerklaerung erreichbar, die in der Spalte „Rechtliches"
     direkt darunter steht. Am Rechner bleibt der Block unveraendert. */

  /* Zwei Spalten nebeneinander statt untereinander. */
  html.vch-an .vcftr .vcftr-top {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: .3rem .7rem !important;
    align-items: start !important;
  }
  html.vch-an .vcftr .vcftr-brand { grid-column: 1 / -1 !important; }
  /* 🚨 GEMESSEN: die Spalten trugen eine feste Breite von 253px — im
     282px breiten Raster passten nie zwei nebeneinander, sie brachen um
     und standen doch wieder untereinander. Ohne `min-width: 0` bricht
     ausserdem kein langer Link um, sondern sprengt die Spalte. */
  html.vch-an .vcftr .vcftr-top { width: 100% !important; max-width: none !important; }
  /* 🚨 GEMESSEN: unter der letzten Spalte klaffte eine Luecke von 50px —
     `padding-bottom: 41.6px` am Raster plus 8px Spaltenabstand. Dieses
     Polster war fuer „Schnellzugriff" und „Partner & Dienste" gedacht, die
     darunter folgten; beide sind auf dem Telefon jetzt aus, das Polster
     polstert also gegen nichts. */
  html.vch-an .vcftr .vcftr-top { padding-bottom: .5rem !important; }
  html.vch-an .vcftr .vcftr-col:last-of-type { margin-bottom: 0 !important; }
  html.vch-an .vcftr .vcftr-col {
    margin: 0 0 .5rem !important;
    width: auto !important;
    min-width: 0 !important;
    max-width: none !important;
    flex: none !important;
  }
  /* 🚨 GEMESSEN am Bildschirmfoto: mit `overflow-wrap: anywhere` brach der
     Browser mitten im Wort um — „Datenschutzerkläru/ng",
     „Widerrufsbelehrun/g", „vermittco@gmail.co/m". Das sieht kaputt aus.
     `break-word` bricht nur, wenn ein Wort wirklich nicht passt, und
     `hyphens: auto` setzt dabei einen echten Trennstrich an einer
     erlaubten Stelle — die Seiten tragen `lang="de"`, der Browser trennt
     also nach deutschen Regeln. Zusammen mit der kleineren Schrift passen
     die meisten Begriffe jetzt ohnehin in eine Zeile. */
  html.vch-an .vcftr .vcftr-col a,
  html.vch-an .vcftr .vcftr-col li {
    overflow-wrap: break-word !important;
    word-break: normal !important;
    -webkit-hyphens: auto !important;
    hyphens: auto !important;
    font-size: .72rem !important;
    line-height: 1.35 !important;
  }
  /* Die Zeilen sassen 8px auseinander — bei 1.35 Zeilenhoehe reicht die
     Haelfte, und die Spalte wird spuerbar kuerzer. */
  html.vch-an .vcftr .vcftr-col li { margin-bottom: .22rem !important; }
  html.vch-an .vcftr .vcftr-col h3,
  html.vch-an .vcftr .vcftr-col h4,
  html.vch-an .vcftr .vcftr-col > *:first-child {
    font-size: .68rem !important;
    letter-spacing: .06em !important;
    margin: 0 0 .2rem !important;
  }
  html.vch-an .vcftr .vcftr-logo { font-size: 1.1rem !important; }
  html.vch-an .vcftr .vcftr-fine,
  html.vch-an .vcftr .vcftr-bottom {
    font-size: .74rem !important;
    line-height: 1.55 !important;
    padding-top: .6rem !important;
  }
  /* Schmalerer Seitenrand = breitere Spalten (118 -> 130px), damit lange
     Begriffe seltener ueberhaupt umbrechen muessen. */
  html.vch-an .vcftr .vcftr-in { padding: .8rem .7rem 1rem !important; }
  /* 🚨 GEMESSEN: hier stand eine aeltere Fassung derselben Regeln — mit
     `display: block` fuer `.vcftr-top`. Weil sie WEITER UNTEN im Blatt
     steht als das Zwei-Spalten-Raster, hat sie es bei gleicher Genauigkeit
     geschlagen: `gridTemplateColumns` war gesetzt, aber `display` war
     `block` — das Raster damit wirkungslos, die Spalten standen weiter
     untereinander. Die alte Fassung ist entfernt; es gilt nur noch der
     Block weiter oben. */

  /* Bild 1: die schwebenden Zeichen duerfen noch enger sitzen. */
  html.vch-an #listingDetailModal.open { padding-top: 34px !important; }
  html.vch-an #vcHandyDetailKopf { padding-top: 4px !important; height: 46px !important; }
  html.vch-an #vcHandyDetailKopf .vch-dk-knopf { width: 34px !important; height: 34px !important; }
  html.vch-an #vchAzShop { margin-top: 0 !important; }

  /* ═══════════════════════════════════════════════════════════
     29. COOKIE-BANNER AUF DEM TELEFON (Betreiber 25.08.2026)
     „mach den Cookiebanner wie große Firmen das mit Handy machen: nur
     Schrift mit ‚Wir verwenden Cookies‘, ohne Symbole, ohne den Fuchs,
     kurzgefasst 1 Satz was es macht — nicht mehr. Es soll kein
     Runterschauen sein und nicht den Bildschirm bedecken."

     Der Entwurf am Rechner ist eine grosse Buehne (Logo, Kicker, Fuchs,
     handschriftliche Notiz, vier Kategorie-Kacheln). Auf 375px wurde daraus
     eine bildschirmfuellende Seite zum Scrollen.
     Hier bleibt: Ueberschrift · EIN Satz · die Knoepfe. Als schmales Blatt
     unten, der Inhalt darueber bleibt sichtbar.

     🚨 Die granulare Auswahl geht nicht verloren — „Cookie-Einstellungen"
     oeffnet weiterhin die vollstaendige Ansicht (`.vccc-set`). Das ist die
     Voraussetzung dafuer, dass die Kurzfassung zulaessig bleibt
     ([[cookie-consent]] · fail-closed).
     ═══════════════════════════════════════════════════════════ */
  html.vch-an .vccc-ov {
    align-items: flex-end !important;
    padding: 0 !important;
    background: rgba(8, 17, 32, .35) !important;
  }
  html.vch-an .vccc-banner .vccc-card {
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
    max-height: none !important;
    height: auto !important;
    border-radius: 16px 16px 0 0 !important;
    box-shadow: 0 -8px 30px rgba(8, 17, 32, .22) !important;
    overflow: visible !important;
    transform: none !important;
  }
  html.vch-an .vccc-banner .vccc-pad { padding: 1rem .95rem !important; }

  /* Alles Schmuckwerk raus: Logo, Kicker, Fuchs, Notiz, Kategorie-Kacheln. */
  html.vch-an .vccc-banner .vccc-logo,
  html.vch-an .vccc-banner .vccc-kicker,
  html.vch-an .vccc-banner .vccc-art,
  html.vch-an .vccc-banner .vccc-note,
  html.vch-an .vccc-banner .vccc-cats,
  html.vch-an .vccc-banner .vccc-cat-ico,
  html.vch-an .vccc-banner .vccc-net { display: none !important; }

  /* 🚨 GEMESSEN: `.vccc-foot-txt` auszublenden hat „Cookie-Einstellungen",
     „Datenschutzerklärung" und „Impressum" mitgenommen — die liegen darin.
     Das darf nicht passieren: die granulare Auswahl und die Pflichtlinks
     muessen auf der ERSTEN Ebene erreichbar bleiben, sonst waere die
     Kurzfassung nicht mehr zulaessig ([[cookie-consent]] · [[doc-consent-gates]]).
     Der Block bleibt also sichtbar — nur schmal gesetzt. */
  html.vch-an .vccc-banner .vccc-foot-txt {
    display: block !important;
    margin: .55rem 0 0 !important;
    padding: 0 !important;
    /* 🚨 GEMESSEN: der Block war 300px hoch, obwohl sein Inhalt nur 21px
       misst. Grund: `.vccc-foot` ist eine Flex-Spalte und der Block traegt
       `flex: 1 1 300px` — die 300px sind die BASIS, nicht der Inhalt. Ohne
       `flex: 0 0 auto` bleibt er aufgeblasen, egal wie wenig drinsteht. */
    flex: 0 0 auto !important;
    order: 2 !important;      /* Linkzeile unter die Knoepfe */
  }
  html.vch-an .vccc-banner .vccc-acts { order: 1 !important; }
  html.vch-an .vccc-banner .vccc-foot { height: auto !important; }
  /* 🚨 GEMESSEN: der Block war 300px hoch — darin steckt neben den Links
     noch Fliesstext. Gebraucht wird auf dem Telefon NUR die Linkzeile
     (Cookie-Einstellungen · Datenschutzerklärung · Impressum); der Rest
     steht ausfuehrlich hinter „Cookie-Einstellungen". */
  html.vch-an .vccc-banner .vccc-foot-txt > :not(.vccc-links) { display: none !important; }
  html.vch-an .vccc-banner .vccc-links {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: wrap !important;
    justify-content: center !important;
    align-items: center !important;
    gap: .15rem .8rem !important;
    margin: 0 !important;
  }
  html.vch-an .vccc-banner .vccc-links > * { font-size: .78rem !important; line-height: 1.7 !important; }
  html.vch-an .vccc-banner .vccc-links i { display: none !important; }   /* Trennzeichen */

  html.vch-an .vccc-banner .vccc-h1 {
    font-size: 1.12rem !important;
    line-height: 1.25 !important;
    margin: 0 0 .3rem !important;
    letter-spacing: -.01em !important;
  }
  html.vch-an .vccc-banner .vccc-lead {
    font-size: .88rem !important;
    line-height: 1.45 !important;
    max-width: none !important;
    margin: 0 0 .8rem !important;
  }
  /* Knoepfe: voll breit untereinander, damit nichts abgeschnitten wird. */
  html.vch-an .vccc-banner .vccc-foot,
  html.vch-an .vccc-banner .vccc-acts {
    display: flex !important;
    flex-direction: column !important;
    align-items: stretch !important;
    gap: .45rem !important;
    padding: 0 !important;
    margin: 0 !important;
  }
  html.vch-an .vccc-banner .vccc-btn,
  html.vch-an .vccc-banner .vccc-sbtn {
    width: 100% !important;
    min-height: 44px !important;
    font-size: .93rem !important;
    border-radius: 999px !important;
  }
  html.vch-an .vccc-banner .vccc-links {
    display: flex !important;
    justify-content: center !important;
    gap: 1rem !important;
    font-size: .8rem !important;
    margin-top: .5rem !important;
  }

  /* ── 30) Preiszeile der Regal-Karten: nicht auf Null quetschen ──────────
     🚨 GEMESSEN am Bildschirmfoto der Startseite: der Preis stand in DREI
     Zeilen — „€" / „1 zzgl." / „MwSt." — und „Ansehen →" war am rechten
     Rand abgeschnitten.

     URSACHE (vc-homereco.js:1077):
       .vhr-tcrow { display:flex; justify-content:space-between; gap:.5rem }
     Auf dem Rechner ist die Karte breit genug fuer Preis UND Knopf
     nebeneinander. Im Zweier-Raster auf 375px ist sie rund 150px breit:
     „Ansehen →" schrumpft nicht, also schrumpft die Preisgruppe — bis
     unter die Breite von „€ 1" und der Browser bricht sogar zwischen
     Waehrungszeichen und Zahl um.

     Die Zeile darf umbrechen, die Bestandteile nicht. Der Preis ist die
     Angabe, wegen der die Karte ueberhaupt da ist — er geht zuerst auf
     eine eigene Zeile, der Knopf rutscht darunter.
     Rein additiv, nur unter 760px: am Rechner bleibt die Zeile wie sie ist. */
  html.vch-an #vcHomeReco .vhr-tcrow {
    flex-wrap: wrap !important;
    justify-content: flex-start !important;
    gap: .15rem .4rem !important;
  }
  html.vch-an #vcHomeReco .vhr-tcp,
  html.vch-an #vcHomeReco .vhr-tcalt,
  html.vch-an #vcHomeReco .vhr-tcgo {
    white-space: nowrap !important;
    flex: 0 0 auto !important;
    min-width: 0 !important;
  }
  /* „zzgl. MwSt." ist eine Fussnote, keine Schlagzeile — sie darf klein
     sein, muss aber in einer Zeile stehen bleiben (Pflichtangabe). */
  html.vch-an #vcHomeReco .vhr-tcrow em {
    white-space: nowrap !important;
    font-size: .62rem !important;
    opacity: .75 !important;
    flex: 0 0 auto !important;
  }


  /* ── 31) Ladezeile in der Konto-Ebene ───────────────────────────────────
     Solange die Sitzung geklaert wird, steht hier NICHTS Falsches — weder
     „Melden Sie sich an" noch ein halb gefuelltes Konto. Siehe die
     Begruendung ueber `sitzungSicher()` in vc-handy.js. */
  .vch-kwarten {
    display: flex;
    align-items: center;
    gap: .6rem;
    padding: 1.4rem .9rem;
    color: var(--vch-grau, #6b7280);
    font-size: .86rem;
  }
  .vch-kspinner {
    width: 17px; height: 17px;
    flex: 0 0 auto;
    border-radius: 50%;
    border: 2px solid currentColor;
    border-top-color: transparent;
    opacity: .55;
    animation: vch-dreht .7s linear infinite;
  }
  @keyframes vch-dreht { to { transform: rotate(360deg); } }
  @media (prefers-reduced-motion: reduce) {
    .vch-kspinner { animation-duration: 2.4s; }
  }


  /* ══════════════════════════════════════════════════════════════════════
     32) HAENDLER-PROFIL (haendler.html)

     🚨 Betreiber 25.08.2026: „wenn man Händler-Profil ansieht, kommt man
     nicht zu der Ansicht wie normal."

     GEMESSEN auf 375px, vor dieser Aenderung:
       • Kopfbereich .shop-head          487px hoch
       • Bannerbild                      250px (zwei Drittel des Bildes)
       • Chip-Reihe                      136px = VIER Zeilen
       • Suchfeld                         26px hoch — kaum zu treffen
       • Seitenhoehe                  66 506px bei 510 Karten
       • Angaben-Zeile zerrissen: „… · 4 / abgeschlossene Verkäufe" und
         „… · 510 / Inserate" — Zahl am Zeilenende, Wort in der naechsten.

     Die Seite hatte als EINZIGE nie eine Handy-Fassung bekommen.
     Alles hier ist additiv und nur unter 760px; haendler.html selbst
     bleibt fuer den Rechner unveraendert.
     ══════════════════════════════════════════════════════════════════════ */

  /* ── Angaben-Zeile: der eigentliche Fehler ──────────────────────────────
     🚨 URSACHE GEFUNDEN, nicht geraten: `.meta` ist ein Flex-Kasten
     (haendler.html:126), die Eintraege sind aber KEINE geschlossenen
     Elemente — `'<b>4</b> abgeschlossene Verkäufe'` ergibt ein <b> UND
     einen losen Textknoten. Flex macht daraus ZWEI Kaesten, die
     unabhaengig voneinander umbrechen. Genau daher stand die Zahl allein
     am Zeilenende.
     Im normalen Textfluss (`display: block`) gehoert die Zahl wieder zu
     ihrem Wort. Die Trenner „ · " sind ebenfalls Text und fliessen mit. */
  html.vch-an .meta {
    display: block !important;
    line-height: 1.6 !important;
    font-size: .8rem !important;
  }
  html.vch-an .meta .mic { display: inline !important; vertical-align: -.12em !important; }
  html.vch-an .meta .stars { white-space: nowrap !important; }
  /* Zahl und Wort duerfen nie getrennt werden. */
  html.vch-an .meta b { white-space: nowrap !important; }

  /* ── Banner: ein Drittel des Bildschirms ist zu viel ────────────────────
     Das hochgeladene Titelbild ist hochkant (864x1821, siehe Notiz zum
     Profilkopf) — auf einem breiten Banner zeigt `cover` ohnehin nur einen
     schmalen Streifen. 250px kosten auf dem Telefon nur Platz. */
  html.vch-an .banner { height: 132px !important; }
  /* 🚨 `.banner:before` beginnt 240px OBERHALB des Banners
     (haendler.html:61) — dort blutet das Titelbild nach oben aus und
     lag hinter der Zeile „← Zum Marktplatz". Bei 250px Bannerhoehe war
     das Verhaeltnis in Ordnung; bei 132px reicht der Ueberstand fast
     doppelt so weit ueber das Banner hinaus, und der graublaue Link
     (rgb(159,178,204)) stand auf einem beliebigen Foto. Der Ueberstand
     wird darum mitverkleinert. */
  html.vch-an .banner:before { top: -96px !important; }
  /* Und die Rueckwege bekommen dieselbe Kontur, die schon der
     Blockier-Schalter braucht: auf einem hochgeladenen Bild traegt
     weisse Schrift mit Schatten nicht, eine Kontur am Buchstaben schon
     (siehe Notiz zum Profilkopf — drei Anlaeufe mit text-shadow sind
     dort gescheitert). */
  html.vch-an .topbar .home {
    color: #fff !important;
    font-weight: 700 !important;
    -webkit-text-stroke: 2.4px rgba(0, 0, 0, .55) !important;
    paint-order: stroke fill !important;
  }
  html.vch-an .shop-head { margin-top: -22px !important; padding-bottom: .7rem !important; }
  html.vch-an .logo {
    width: 62px !important; height: 62px !important;
    margin-top: -38px !important; font-size: 1.4rem !important;
    border-width: 2px !important;
  }
  html.vch-an .firm { font-size: 1.15rem !important; margin-top: .5rem !important; }

  /* ── Werkzeugleiste: Suchfeld gross genug fuer einen Finger ─────────────
     26px war unter jeder Empfehlung; ein Fingertipp braucht ~44px. */
  html.vch-an .tools { margin: .9rem 0 .2rem !important; }
  html.vch-an .search { padding: .7rem .85rem !important; border-radius: 12px !important; }
  html.vch-an .search input { font-size: 16px !important; }
  /* 🚨 16px ist kein Schoenheitswert: iOS zoomt die ganze Seite hinein,
     sobald ein Eingabefeld kleiner als 16px ist. Danach steht die Seite
     schief und der Nutzer muss von Hand herauszoomen. */

  /* ── Chips: EINE Zeile zum Wischen statt vier Zeilen ────────────────────
     Dieselbe Loesung wie ueberall sonst in der Handy-Ebene. */
  html.vch-an .chips {
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
    overflow-y: hidden !important;
    scrollbar-width: none !important;
    -webkit-overflow-scrolling: touch !important;
    margin: .8rem -.9rem .3rem !important;
    padding: 0 .9rem !important;
  }
  html.vch-an .chips::-webkit-scrollbar { display: none !important; }
  html.vch-an .chip { flex: 0 0 auto !important; }

  /* ── Karten-Raster ─────────────────────────────────────────────────────
     `minmax(220px, 1fr)` ergibt auf 351px genau EINE Spalte. Zwei sind
     hier richtig — dieselbe Dichte wie in den Trefferlisten. */
  html.vch-an .grid {
    grid-template-columns: 1fr 1fr !important;
    gap: .7rem !important;
    margin-top: .9rem !important;
  }
  /* „510 Inserate" stand DREIMAL: in der Angaben-Zeile, auf dem
     „Alle"-Chip und noch einmal darunter. Auf dem Telefon zaehlt jede
     Zeile — der dritte faellt weg. Sobald gefiltert wird, nennt der
     aktive Chip die Zahl. */
  html.vch-an #shopCount { display: none !important; }

  html.vch-an .ptitle { font-size: .82rem !important; line-height: 1.3 !important; }
  html.vch-an .pcat   { font-size: .68rem !important; }
  html.vch-an .pprice { font-size: .92rem !important; }

  /* ── „Mehr ansehen" (von vc-handy.js gesetzt, siehe dort) ──────────────*/
  html.vch-an #vcHandyShopMehr {
    display: block;
    width: 100%;
    margin: 1rem 0 .2rem;
    padding: .85rem 1rem;
    border: 0;
    border-radius: 999px;
    background: var(--vch-blau);
    color: #fff;
    font: 600 .9rem/1 'Manrope', system-ui, sans-serif;
    cursor: pointer;
  }
  html.vch-an #vcHandyShopMehr:active { filter: brightness(.92); }
  html.vch-an #vcHandyShopMehr[hidden] { display: none; }


  /* ══════════════════════════════════════════════════════════════════════
     33) FILTER-BLATT — alle Filter, alle bedienbar

     Begruendung der Aenderungen steht bei `filterKaesten()` in
     vc-handy.js. Kurz: drei verschiedene Bauarten je Kategorie, zwei
     zugeklappte Gruppen, und ein 323px breiter Desktop-Schub auf einem
     375px-Schirm.

     Gestaltungsregeln, nach denen hier gearbeitet wurde:
       • Ein Filter-Blatt ist eine ARBEITSFLAECHE, kein Hinweis — es
         darf fast den ganzen Schirm nehmen (92vh), damit man nicht in
         einem 4-Zeilen-Fenster scrollt.
       • Tippflaechen mindestens 44px hoch. Kaestchen von 15px sind mit
         dem Finger nicht zu treffen; die ganze ZEILE wird zur Flaeche.
       • Der Abschluss-Knopf bleibt IMMER sichtbar (klebende Fussleiste)
         und liegt ueber der Navigationsleiste — sonst tippt man auf
         „Konto" statt auf „Ergebnisse anzeigen".
       • Eingabefelder 16px, sonst zoomt iOS die Seite hinein.
     ══════════════════════════════════════════════════════════════════════ */

  .vch-filterblatt .vch-blatt-karte {
    max-height: 92vh !important;
    height: 92vh !important;
  }
  /* 🚨 Die Hoehe muss FEST sein, nicht nur begrenzt: nur dann kann der
     Inhalt dazwischen scrollen und die Fussleiste unten kleben. Mit
     `max-height` allein waere die Karte bei wenigen Filtern kurz und der
     Knopf klebte mitten im Bild. */

  .vch-filterblatt .vch-blatt-inhalt {
    flex: 1 1 auto !important;
    min-height: 0 !important;
    overflow-y: auto !important;
    -webkit-overflow-scrolling: touch !important;
  }
  .vch-filterblatt .vch-filterinhalt { max-height: none !important; }

  /* Die Fussleiste klebt und liegt ueber allem im Blatt. */
  .vch-filterblatt .vch-filterfuss {
    flex: 0 0 auto !important;
    display: flex !important;
    gap: .6rem !important;
    align-items: center !important;
    border-top: 1px solid var(--vch-rand);
    background: var(--vch-flaeche);
  }
  .vch-filterblatt .vch-filterfuss .vch-kbtn-voll { flex: 1 1 auto !important; }
  .vch-filterblatt .vch-filter-reset {
    flex: 0 0 auto !important;
    background: transparent !important;
    border: 0 !important;
    color: var(--vch-mitte) !important;
    text-decoration: underline !important;
    padding: .6rem .2rem !important;
  }

  /* ── Der hineingelegte Desktop-Kasten ──────────────────────────────────
     #filterSidebar ist am Rechner eine feste Spalte mit eigener Breite,
     eigenem Rand und eigenem Kopf. Im Blatt muss davon nichts uebrig
     bleiben — es ist jetzt Inhalt, kein Behaelter mehr. */
  .vch-filterblatt .vch-filterinhalt #filterSidebar,
  .vch-filterblatt .vch-filterinhalt .filter-sidebar {
    position: static !important;
    width: 100% !important;
    max-width: none !important;
    min-width: 0 !important;
    height: auto !important;
    max-height: none !important;
    transform: none !important;
    inset: auto !important;
    z-index: auto !important;
    overflow: visible !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    padding: 0 !important;
    background: transparent !important;
  }
  /* Eigener Kopf und eigene Fussknoepfe des Kastens: das Blatt hat beides
     schon. Die Knoepfe werden NICHT entfernt — der Fussknopf des Blattes
     klickt sie ja — nur ausgeblendet. */
  .vch-filterblatt .vch-filterinhalt .fs-drawer-head,
  .vch-filterblatt .vch-filterinhalt .fs-head,
  .vch-filterblatt .vch-filterinhalt .fs-apply,
  .vch-filterblatt .vch-filterinhalt .fs-reset { display: none !important; }

  /* ── Gruppen ───────────────────────────────────────────────────────────*/
  .vch-filterblatt .vch-filterinhalt .fs-group {
    border: 0 !important;
    border-bottom: 1px solid var(--vch-rand) !important;
    border-radius: 0 !important;
    padding: .5rem 0 .8rem !important;
    margin: 0 !important;
    max-height: none !important;
    overflow: visible !important;
  }
  .vch-filterblatt .vch-filterinhalt .fs-group:last-of-type { border-bottom: 0 !important; }
  /* 🚨 Die Gruppenueberschrift heisst `.fs-gtitle` (elektrogeraete.html:121)
     — ein <div> mit `onclick="fsToggle(this)"`, KEIN <button> und kein
     <h3>. Eine erste Fassung dieser Regel zielte auf `.fs-gt`/`button`
     und lief vollstaendig ins Leere. Sie ist zugleich die Tippflaeche
     zum Auf- und Zuklappen und braucht darum echte Hoehe. */
  .vch-filterblatt .vch-filterinhalt .fs-gtitle {
    min-height: 46px !important;
    align-items: center !important;
    font-size: .95rem !important;
    font-weight: 700 !important;
    margin: 0 !important;
    -webkit-tap-highlight-color: rgba(27, 86, 204, .1);
  }
  .vch-filterblatt .vch-filterinhalt .fs-gtitle:active { background: var(--vch-blau-weich); }
  /* Der Pfeil bleibt — Zuklappen laeuft ueber `.fs-group.collapsed
     .fs-body { display: none }` (elektrogeraete.html:125) und
     funktioniert im Blatt unveraendert. Bei fuenf Gruppen ist Zuklappen
     nuetzlich; wir machen sie nur beim Oeffnen alle auf. */
  .vch-filterblatt .vch-filterinhalt .fs-gtitle svg {
    width: 18px !important; height: 18px !important;
  }

  /* ── Die ganze Zeile ist die Tippflaeche ───────────────────────────────
     🚨 GEMESSEN: die Kaestchen sind 15x15px. Das trifft niemand mit dem
     Finger zuverlaessig (Empfehlung: 44px). Das Kaestchen bleibt klein,
     aber sein Label wird zur vollen Zeile — Text UND Kaestchen loesen
     denselben Klick aus, weil das <input> im <label> liegt. */
  .vch-filterblatt .vch-filterinhalt label {
    display: flex !important;
    align-items: center !important;
    gap: .7rem !important;
    min-height: 46px !important;
    padding: 0 .1rem !important;
    margin: 0 !important;
    font-size: .92rem !important;
    cursor: pointer !important;
    -webkit-tap-highlight-color: rgba(27, 86, 204, .1);
  }
  .vch-filterblatt .vch-filterinhalt label:active { background: var(--vch-blau-weich); }
  .vch-filterblatt .vch-filterinhalt input[type="checkbox"],
  .vch-filterblatt .vch-filterinhalt input[type="radio"] {
    width: 21px !important; height: 21px !important;
    min-height: 0 !important;
    flex: 0 0 auto !important;
    accent-color: var(--vch-blau);
  }
  /* Die Zahl hinter dem Namen („Computer & Tablets 25") nach rechts. */
  .vch-filterblatt .vch-filterinhalt label > span:last-child,
  .vch-filterblatt .vch-filterinhalt label > b:last-child,
  .vch-filterblatt .vch-filterinhalt .fs-count {
    margin-left: auto !important;
    color: var(--vch-mitte) !important;
    font-size: .82rem !important;
    font-weight: 600 !important;
  }

  /* ── Auswahl- und Eingabefelder ────────────────────────────────────────*/
  .vch-filterblatt .vch-filterinhalt select,
  .vch-filterblatt .vch-filterinhalt input[type="text"],
  .vch-filterblatt .vch-filterinhalt input[type="number"],
  .vch-filterblatt .vch-filterinhalt input[type="search"] {
    width: 100% !important;
    min-height: 48px !important;
    font-size: 16px !important;   /* darunter zoomt iOS die Seite hinein */
    border-radius: 12px !important;
    box-sizing: border-box !important;
  }
  /* Min./Max.-Preis nebeneinander — sie gehoeren zusammen. */
  .vch-filterblatt .vch-filterinhalt .fs-row,
  .vch-filterblatt .vch-filterinhalt .fs-price {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: .6rem !important;
  }

  /* Der Kopfstreifen `.vc-scard-filters` wird im Blatt einspaltig —
     dort steckt z. B. „Auflösung", die es sonst nirgends gibt. */
  .vch-filterblatt .vch-filterinhalt .vc-scard-filters {
    display: grid !important;
    grid-template-columns: 1fr !important;
    gap: .8rem !important;
    width: 100% !important;
    padding: .4rem 0 .8rem !important;
    border-bottom: 1px solid var(--vch-rand) !important;
  }
  .vch-filterblatt .vch-filterinhalt .vc-scard-filters label,
  .vch-filterblatt .vch-filterinhalt .vc-scard-filters > div {
    display: block !important;
    min-height: 0 !important;
  }


  /* ── Zeile „Weitere Filter" im Blatt ───────────────────────────────────*/
  .vch-filterblatt .vch-mehrfilter {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    min-height: 52px;
    margin-top: .4rem;
    padding: 0 .1rem;
    border: 0;
    border-top: 1px solid var(--vch-rand);
    background: transparent;
    color: var(--vch-blau);
    font: 700 .95rem/1.2 'Manrope', system-ui, sans-serif;
    cursor: pointer;
    -webkit-tap-highlight-color: rgba(27, 86, 204, .1);
  }
  .vch-filterblatt .vch-mehrfilter:active { background: var(--vch-blau-weich); }

  /* ══════════════════════════════════════════════════════════════════════
     34) DETAILSUCHE (#egDS, #fzDS, #imDS, #miDS, #wmDS, #vpDS, #itDS)

     🚨 GEMESSEN auf maschinen.html: das Fenster traegt `z-index: 13000`,
     meine Navigationsleiste **2147483100**. Der Uebernehmen-Knopf
     („73 Angebote") sitzt am unteren Rand bei y=756 — die Leiste beginnt
     bei y=755. Er lag also GENAU darunter und war nicht zu treffen.
     Das ist ein gutes Stueck von „man kann nichts machen".

     Ein bildschirmfuellendes Filterfenster gehoert ueber die
     Navigationsleiste — so wie mein eigenes Filter-Blatt auch
     (2147483200). Nur unter 760px; am Rechner bleibt 13000 stehen.
     ══════════════════════════════════════════════════════════════════════ */
  html.vch-an div[id$="DS"].open,
  html.vch-an div[id$="DS"][style*="display: flex"],
  html.vch-an div[id$="DS"][style*="display:flex"] {
    z-index: 2147483200 !important;
  }
  /* Der Inhalt darf nicht unter dem Rand des Geraets enden. */
  html.vch-an div[id$="DSBody"] {
    padding-bottom: calc(1rem + env(safe-area-inset-bottom, 0px)) !important;
  }


  /* ══════════════════════════════════════════════════════════════════════
     35) EINSTELLUNGEN auf dem Telefon

     🚨 Betreiber 25.08.2026: „pass alles in Einstellungen an, wenn man auf
     Handy sieht — nimm all deine Erfahrung, wie man was machen sollte."

     GEMESSEN vorher: **68 Zeilen, neun Gruppen, 3 447px** Seitenhoehe,
     alle Zeilen gleich aussehend, ohne Symbole, mit abgeschnittenen
     Beschriftungen („Büro- & Ladeneinrichtung ver…"), Zaehler als
     nackte Zahl im Fliesstext („Nachrichten 0").

     Was eine Einstellungsliste auf dem Telefon braucht — so machen es
     iOS, Android und die Amazon-App uebereinstimmend:
       1. OBEN DAS KONTO SELBST. Ohne Bild/Name/Adresse weiss man nicht,
          wessen Einstellungen man sieht.
       2. EIN SUCHFELD, sobald es mehr als etwa 20 Eintraege sind.
       3. SYMBOLE je Zeile — reine Textzeilen kann man nicht ueberfliegen.
       4. GRUPPEN ZUM ZUKLAPPEN, wenn eine Gruppe zweistellig wird.
       5. ZAEHLER RECHTS als Plakette, und eine 0 gar nicht.
       6. KEIN ABSCHNEIDEN — lieber zwei Zeilen als „…".
     ══════════════════════════════════════════════════════════════════════ */

  /* ── 1. Kopfkarte ──────────────────────────────────────────────────────*/
  html.vch-an #vcHandyEinst .vch-eprofil {
    display: flex;
    align-items: center;
    gap: .8rem;
    margin: .2rem .9rem .9rem;
    padding: .85rem .9rem;
    border-radius: 14px;
    background: var(--vch-flaeche2, rgba(127, 127, 127, .08));
    text-decoration: none;
    color: inherit;
  }
  html.vch-an #vcHandyEinst .vch-eavatar {
    width: 46px; height: 46px;
    flex: 0 0 auto;
    display: flex; align-items: center; justify-content: center;
    border-radius: 50%;
    background: var(--vch-blau);
    color: #fff;
    font: 800 1.15rem/1 'Manrope', system-ui, sans-serif;
  }
  /* 🚨 Das Bild liegt UEBER der Initiale, es ersetzt sie nicht
     ([[profilbild-quelle]]). Faellt es aus, steht der Buchstabe noch da
     statt eines leeren blauen Kreises. */
  html.vch-an #vcHandyEinst .vch-eavatar { position: relative; overflow: hidden; }
  html.vch-an #vcHandyEinst .vch-eavatar img {
    position: absolute;
    inset: 0;
    width: 100%; height: 100%;
    object-fit: cover;
    border-radius: inherit;
  }

  html.vch-an #vcHandyEinst .vch-eptext {
    display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto;
  }
  html.vch-an #vcHandyEinst .vch-eptext b { font-size: .98rem; font-weight: 700; }
  html.vch-an #vcHandyEinst .vch-eptext span {
    font-size: .8rem; color: var(--vch-mitte);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }

  /* ── 2. Suchfeld ───────────────────────────────────────────────────────*/
  html.vch-an #vcHandyEinst .vch-esuche {
    display: flex; align-items: center; gap: .55rem;
    margin: 0 .9rem 1rem;
    padding: 0 .85rem;
    min-height: 46px;
    border-radius: 999px;
    background: var(--vch-flaeche2, rgba(127, 127, 127, .08));
  }
  html.vch-an #vcHandyEinst .vch-esuche-ico { display: flex; color: var(--vch-mitte); flex: 0 0 auto; }
  html.vch-an #vcHandyEinst .vch-esuche input {
    flex: 1 1 auto; min-width: 0;
    border: 0; background: transparent; outline: none;
    color: var(--vch-text);
    /* 16px, sonst zoomt iOS beim Antippen die ganze Seite hinein. */
    font: 400 16px/1.2 'Manrope', system-ui, sans-serif;
  }
  html.vch-an #vcHandyEinst .vch-esuche input::-webkit-search-cancel-button { -webkit-appearance: none; }

  /* Waehrend gesucht wird, sind zugeklappte Gruppen offen — sonst faende
     man einen Treffer, der in einer geschlossenen Gruppe liegt, nicht. */
  html.vch-an #vcHandyEinst.vch-esucht .vch-kliste.zu { display: block !important; }
  html.vch-an #vcHandyEinst.vch-esucht .vch-egruppe .vch-ekappe { opacity: .3; }

  /* ── 3./5./6. Die Zeile ────────────────────────────────────────────────*/
  html.vch-an #vcHandyEinst .vch-kzeile {
    display: flex;
    align-items: center;
    gap: .75rem;
    min-height: 50px;
    height: auto;
    padding: .55rem .9rem;
    text-align: left;
  }
  html.vch-an #vcHandyEinst .vch-ksym {
    display: flex; flex: 0 0 auto;
    width: 20px; height: 20px;
    align-items: center; justify-content: center;
    color: var(--vch-mitte);
  }
  html.vch-an #vcHandyEinst .vch-ksym svg { width: 18px; height: 18px; }
  /* 🚨 KEIN `text-overflow: ellipsis`. „Büro- & Ladeneinrichtung ver…"
     sagt nichts mehr aus; zwei Zeilen kosten 18px und sagen alles. */
  html.vch-an #vcHandyEinst .vch-ktext {
    flex: 1 1 auto; min-width: 0;
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
    line-height: 1.3;
  }
  html.vch-an #vcHandyEinst .vch-kzahl {
    flex: 0 0 auto;
    min-width: 20px;
    padding: .1rem .42rem;
    border-radius: 999px;
    background: var(--vch-blau);
    color: #fff;
    font: 800 .68rem/1.5 'Manrope', system-ui, sans-serif;
    text-align: center;
  }

  /* ── 4. Gruppen zum Zuklappen ──────────────────────────────────────────*/
  html.vch-an #vcHandyEinst .vch-egruppe {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    min-height: 44px;
    margin: .5rem 0 0;
    padding: 0 .9rem;
    border: 0;
    background: transparent;
    color: var(--vch-mitte);
    font: 800 .72rem/1.2 'Manrope', system-ui, sans-serif;
    letter-spacing: .07em;
    text-transform: uppercase;
    text-align: left;
    cursor: pointer;
    -webkit-tap-highlight-color: rgba(27, 86, 204, .1);
  }
  html.vch-an #vcHandyEinst .vch-ekappe {
    display: flex; flex: 0 0 auto;
    transform: rotate(90deg);            /* offen: Pfeil zeigt nach unten */
    transition: transform .18s ease;
  }
  html.vch-an #vcHandyEinst .vch-egruppe.zu .vch-ekappe { transform: rotate(0deg); }
  html.vch-an #vcHandyEinst .vch-kliste.zu { display: none; }
  @media (prefers-reduced-motion: reduce) {
    html.vch-an #vcHandyEinst .vch-ekappe { transition: none; }
  }


  /* ══════════════════════════════════════════════════════════════════════
     36) „Mehr anzeigen" raus — die Beschreibung steht ganz da

     🚨 Betreiber 25.08.2026: „mach das ,Mehr anzeigen' und ,Besuche …
     Store' weg, überall bei jeder Kategorie, und rutsche alles hinauf."

     Auf dem Telefon ist eine geklemmte Beschreibung mit Aufklapp-Knopf
     ein Umweg: man tippt, wartet auf den Sprung und liest dann doch
     alles. Ohne Klemme steht der Text sofort ganz da — ein Handgriff
     weniger und keine Verlaufsmaske, die das letzte Wort verschluckt.

     Es werden ALLE Bauarten erfasst: die von vc-detail-upgrade
     (`.vcdu-descfold` + `.vcdu-descmore`) und die eigenen der
     Kategorie-Bausteine (fz, it, wm …), die eigene Textlinks setzen.
     ══════════════════════════════════════════════════════════════════════ */

  /* Klemme und Verlaufsmaske aufheben — der Text steht vollstaendig. */
  html.vch-an .vcdu-descfold {
    max-height: none !important;
    overflow: visible !important;
    -webkit-mask-image: none !important;
    mask-image: none !important;
  }
  /* Alle Aufklapp-Schalter der Beschreibung. */
  html.vch-an .vcdu-descmore,
  html.vch-an .fz-more-link,
  html.vch-an .it-more-link,
  html.vch-an .wm-more-link,
  html.vch-an [class$="-more-link"],
  html.vch-an [class*="descmore"] { display: none !important; }

  /* Die Shopzeile wird gar nicht mehr gebaut (siehe azShopzeile in
     vc-handy.js). Diese Regel faengt nur ab, was aus einem frueheren
     Zwischenspeicher noch im Baum haengt. */
  html.vch-an #vchAzShop { display: none !important; }


  /* ══════════════════════════════════════════════════════════════════════
     37) Bestell-Knoepfe: EIN Knopf je Karte fuehrt

     🚨 Betreiber 25.08.2026 (Bild): „Bestelldetails ansehen" und „Erneut
     bestellen" standen als blaue RECHTECKE da, daneben zwei richtige
     Pillen — „mach das so wie es bei web ist, das sieht hässlich aus."

     Die Vorgabe dazu ist aelter und steht in account.html:1814:
     „nur Rechnung herunterladen mit Perlenform, alle anderen nur in
     Schrift" (23.08.2026). So fuehrt genau EIN Knopf je Karte.

     ⚠️ NACHGEMESSEN und NICHT reproduzierbar: in `#cartPurchasesBox`
     sind die Knoepfe in hell wie dunkel korrekt (durchsichtig, Radius 0,
     nur `.kf-btn-inv` blau mit 999px). Wahrscheinlichste Erklaerung fuer
     das Bild ist ein veralteter Stand aus dem Service-Worker-Speicher —
     dieselbe Falle, die in dieser Sitzung schon zweimal zuschlug.

     Diese Regeln sind darum die Absicherung: sie setzen die Vorgabe
     durch, OHNE an `#cartPurchasesBox` gebunden zu sein. Taucht dieselbe
     Karte in einem anderen Kasten auf, sieht sie trotzdem richtig aus.
     Nur unter 760px — am Rechner bleibt alles wie es ist.
     ══════════════════════════════════════════════════════════════════════ */
  html.vch-an .kf-btn,
  html.vch-an .kf-btn-re {
    background: none !important;
    background-image: none !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    padding: 10px 2px !important;
    min-height: 40px !important;
    font-weight: 700 !important;
  }
  html.vch-an .kf-btn { color: var(--vch-text) !important; }
  html.vch-an .kf-btn-re { color: var(--vch-blau) !important; }
  /* Der eine fuehrende Knopf bleibt die Perle. */
  html.vch-an .kf-btn-inv,
  html.vch-an .kf-btn-pri,
  html.vch-an .kf-btn-ok {
    border-radius: 999px !important;
    box-shadow: none !important;
    min-height: 44px !important;
  }


  /* ══════════════════════════════════════════════════════════════════════
     38) Leiste weicht beim Lesen zur Seite

     🚨 Betreiber 25.08.2026: „die Toolbar soll, wenn man runterscrollt,
     verschwinden, und wenn man wieder hinaufscrollt, soll die wieder
     kommen." Die Entscheidung, WANN, trifft `leisteScrollen()` in
     vc-handy.js; hier steht nur, WIE sie geht.

     Sie schiebt sich nach unten hinaus statt auszublenden — eine
     verschwindende Flaeche wirkt wie ein Fehler, eine weichende wie
     Absicht. `transform` statt `bottom`, damit der Browser dafuer nicht
     das Seitenlayout neu rechnen muss.
     ══════════════════════════════════════════════════════════════════════ */
  #vcHandyNav {
    transition: transform .24s cubic-bezier(.4, 0, .2, 1);
    will-change: transform;
  }
  html.vch-leiste-weg #vcHandyNav {
    /* 100 % der eigenen Hoehe plus der Geraeterand — sonst bliebe auf
       Telefonen mit Balken unten ein Streifen stehen. */
    transform: translateY(calc(100% + env(safe-area-inset-bottom, 0px)));
  }
  @media (prefers-reduced-motion: reduce) {
    #vcHandyNav { transition: none; }
  }

  /* 🚨 Was AUF der Leiste sitzt, muss mitgehen — sonst schwebt es ueber
     dem leeren Platz. Der schwebende Chat-Knopf ist der Fall. */
  html.vch-leiste-weg .vcchat-fab,
  html.vch-leiste-weg #vcChatFab {
    transform: translateY(calc(100% + 12px));
    transition: transform .24s cubic-bezier(.4, 0, .2, 1);
  }

  /* Der Merk-Knopf zeigt jetzt einen Zustand (siehe
     `merkZustandNachziehen`). Gemerkt = blaue Schrift und gefuellter
     Haken-Eindruck, aber KEIN zweiter blauer Block: es fuehrt weiter nur
     ein Knopf je Ansicht. */
  html.vch-an .vch-azm-knopf.vch-azm-an {
    color: var(--vch-blau) !important;
    border-color: var(--vch-blau) !important;
    font-weight: 700 !important;
  }

}

/* ══ BETREIBER-AUFTRAG 10.09.2026 (Bild „Search or ask a question") ══════════
   „Mache Bild 1 bei jeder Kategorie nicht so grau einfärben, nur Umrandung."
   Das Suchfeld im Handy-Kopf trug die graue Grundfläche (--vch-grund). Jetzt:
   keine Füllung, nur der vorhandene Rand (--vch-rand) bleibt. Gilt überall,
   wo der Handy-Kopf das Feld zeigt. Nur Optik — Tippen/Öffnen unverändert. */
html.vch-an #vcHandyKopf .vch-suchfeld,
.vch-suchfeld {
  background: transparent !important;
  box-shadow: none !important;
}

@media (max-width: 760px) {

  /* ═══════════════════════════════════════════════════════════
     99. iOS-ZOOM BEIM ANTIPPEN VON EINGABEFELDERN (18.09.2026)
     Betreiber: „die Suchleiste rutscht runter … es buggt alles in der
     Handyansicht." GEMESSEN im iPhone-Simulator (Safari, iOS 26):
     Antippen der Suche → die ganze Seite blieb VERGROESSERT stehen,
     rechts abgeschnitten, die untere Leiste halb unter der Safari-Leiste.
     Ursache: Safari zoomt automatisch in jedes Eingabefeld mit weniger
     als 16px Schrift und zoomt danach nicht zurueck. Das Suchfeld hatte
     15,2px (.95rem); PLZ-Feld, Filter-Auswahlen und Formulare ebenso.
     16px ist die Grenze — darunter zoomt iOS, ab 16px nie.
     Bewusst NICHT per viewport `maximum-scale=1`: das sperrt auf Android
     das Zoomen mit zwei Fingern (Barrierefreiheit). */
  html.vch-an input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="image"]),
  html.vch-an textarea,
  html.vch-an select {
    font-size: 16px !important;
  }
  /* Sprach- und Währungswahl in der Fußzeile (der einzige Ort, an dem man sie am
     Handy umstellt): vc-footer.js setzt dort `html:not(#vcftrx) body .vcftr
     .vcftr-sel {font-size:.8rem!important}` — die ID im :not() schlägt die Regel
     oben. Gemessen 12,8px → iOS zoomte beim Antippen. Gleiche ID-Tiefe + Klasse. */
  html.vch-an:not(#vcftrx) body .vcftr .vcftr-sel {
    font-size: 16px !important;
  }

  /* ═══════════════════════════════════════════════════════════
     100. HINWEISBAND „Angebot von … automatisch übernommen" (18.09.2026)
     vc-fremd.js setzt das Band `position:sticky; top:0` an den Anfang der
     Detailansicht. Am Telefon sind das vier Zeilen (~95px), die beim
     Scrollen oben kleben blieben — halb unter dem Detail-Kopf, und in
     Safari lief der Text darunter sichtbar durch (gemessen: „Verkauft von"
     und der Bandtext uebereinander). Am Telefon steht das Band deshalb
     einfach am Anfang und scrollt mit; lesbar bleibt es unveraendert
     (rechtliche Kennzeichnung, UWG). Am Rechner bleibt es klebend. */
  html.vch-an #vcFremdBand {
    position: static !important;
  }

}
