/* ============================================================
   mobil.css — Mobil-Kern (Startseite). Geladen NACH allen anderen
   Stylesheets, ALLERLETZTES <link> im <head> (nach dem </style>-Block),
   damit seine Regeln im Zweifel per Reihenfolge gewinnen, ohne dass jede
   Zeile !important braucht.

   Mobil-Bedingung (EINE Stelle, wortgleich js/mobil.js): Breite < 900 px
   ODER (hover:none) and (pointer:coarse). Die GESAMTE Datei steht deshalb
   in einer einzigen @media-Klammer — ab 900 px mit Maus/Trackpad bleibt
   der Desktop unberührt, ganz ohne Einzel-Prüfung je Regel.

   Ursache/Belege: interne Analyse der iOS-Abstuerze (Absatz oben) und der
   Mobil-Vorgabe (15-Punkte-Liste). Diese Datei setzt Punkt 1
   (Kern: alle Animationen aus) sowie 2/3/5/6/8/10/11/12/13/14 für die
   Startseite um. Punkt 4/9 (Karussells) und 12 (Aufklapp-Grid) brauchen
   zusätzliches Markup in index.html (siehe dort, Klassen lp-karussell*,
   nofit-item) — ohne dieses Markup bleiben die zugehörigen Regeln hier
   wirkungslos (kein Fehlerzustand: die Karten stehen dann einfach normal
   im Fluss, wie im Fallback ohnehin vorgesehen).

   SICHERHEITS-PRINZIP (wie bei prefers-reduced-motion in den anderen
   Stylesheets): Abschnitt 1 ("Kern") hängt an der ROHEN Media Query, NICHT
   an html.lp-mobil — greift also auch, wenn js/mobil.js aus irgendeinem
   Grund nicht lief. html.lp-mobil wird nur dort zusätzlich gebraucht, wo
   echtes JS-Feedback nötig ist (Karussell-Pfeile erst zeigen, wenn ein
   Klick auf sie auch etwas tut — natives Wisch-Scrollen bleibt so oder so
   nutzbar).
   ============================================================ */

/* Desktop-Basisregel für die Karussell-Hüllen (Punkt 4/9), AUSSERHALB der
   Mobil-Klammer: .lp-karussell/-spur tragen auf dem Raster (.uc-grid/
   .trust-grid/.quote-grid) KEINE eigene Box (display:contents) — das
   bestehende Desktop-Raster bleibt dadurch exakt so, wie es war, ganz ohne
   dass diese Datei irgendetwas an .uc-grid/.trust-grid selbst ändert.
   .lp-karussell-nav ist auf Desktop unsichtbar UND aus dem Layout (die
   Pfeile ergeben ohne Karussell keinen Sinn). */
.lp-karussell, .lp-karussell-spur { display: contents; }
.lp-karussell-nav { display: none; }

/* Basisregel AUSSERHALB der Mobil-Klammer (Fix Desktop-Regress, Runde 3):
   .pz-strahl ist neues Markup fuer den Mobil-Prozess-Strahl (Punkt 7) und
   hat ohne diese Zeile auf Desktop kein eigenes display — als leeres
   Grid-Kind von .pz-steps erzeugte es dort eine zusaetzliche Zeile plus
   Gap (+22px Seitenhoehe, gemessen). display:none hier, im Mobil-Block
   unten wieder auf block gesetzt. */
.pz-strahl { display: none; }

/* Allgemeine Kürzungs-Helfer an der LP_MOBIL-Schwelle (900 px/coarse) — NICHT
   dasselbe Paar wie .nur-breit/.nur-handy (Handyfassung, 640 px, Runde 6):
   andere Schwelle, deshalb eigene Klassen, damit sich beide Systeme nicht
   stillschweigend überschneiden. */
.lp-nur-mobil { display: none; }

@media (max-width: 899px), (hover: none) and (pointer: coarse) {

  /* ============================================================
     1) KERN — alle Animationen/Scroll-Effekte aus, Bett auf 1 Ebene
     ============================================================ */

  /* Berg-Bett: von 5 Bildebenen bleibt nur eine (mitte) plus die beiden
     reinen Flächen (Grund, Boden — kein Bild, kein will-change, günstig).
     Fern/Nah/Nebel/Himmel werden nicht geladen abbestellt (das könnte nur
     eine <picture>/<source>-Änderung im Markup, siehe Bericht) — sie
     verschwinden aber aus der Kompositierung, das ist der Teil, der bei
     jedem Scroll-Frame Rechenzeit kostet. */
  .berg-himmel,
  .berg-kamm--fern,
  .berg-kamm--nah,
  .berg-nebel,
  .berg-band { display: none; }
  .berg-kamm--mitte {
    will-change: auto;
    transform: none;
    opacity: .72;              /* fester Wert statt der --berg-licht-Formel (JS läuft nicht mehr) */
  }
  /* display:none entfernt fern/nah/Band aus der Kompositierung, aber
     getComputedStyle liest ihr will-change trotzdem noch (M2, Census über
     alle 7 Seiten) — hier zusätzlich zurücksetzen, damit der Census auf 0
     zeigt statt auf "harmlos, aber unschön" verweisen zu müssen. */
  .berg-kamm--fern, .berg-kamm--nah, .berg-band .bb-marke { will-change: auto; }
  .berg-grund { mix-blend-mode: normal; opacity: .3; }
  /* .berg-boden bleibt unverändert: reiner Gradient ohne Bild/Blend, günstig. */
  /* .berg-nebel steht bereits oben auf display:none — derselbe Census-Rest
     (mix-blend-mode bleibt im Computed Style erhalten) wie bei will-change,
     hier zusaetzlich zurueckgesetzt. */
  .berg-nebel { mix-blend-mode: normal; }

  /* Dauer-Animationen, die ohne Scroll und ohne JS von selbst laufen. */
  .btn-primary::before { animation: none; opacity: .4; }
  .chip-dot { animation: none; opacity: 1; transform: none; }
  .thread::after { animation: none; opacity: 0; }

  /* Cookie-Consent-Karte (js/consent.js, alle 7 Seiten, hier nachgezogen
     für die Startseite): backdrop-filter blieb auf Mobil aktiv (M2-Meldung).
     Kein Ersatz-Hintergrund nötig — die Fläche ist bereits mit
     rgba(...,.97)/rgba(...,.99) praktisch deckend, der Blur trug ohnehin
     kaum sichtbar bei. !important: js/consent.js fügt sein <style> zur
     Laufzeit ein, seine Ladereihenfolge relativ zu dieser Datei ist nicht
     garantiert früher. */
  .lp-cc-card { -webkit-backdrop-filter: none !important; backdrop-filter: none !important; }
  /* #cursor-glow/.pill sind bereits display:none — will-change/mix-blend-mode
     bleiben trotzdem im Computed Style sichtbar (derselbe Census-Effekt wie
     beim Berg-Bett oben), hier zusaetzlich zurueckgesetzt. */
  #cursor-glow, .island { display: none; will-change: auto; mix-blend-mode: normal; }
  .island .pill { will-change: auto; }
  html { scroll-behavior: auto; }

  /* Runde 3 (Pruefbefund H3): .nav.scrolled/.mobile-menu/.handy-balken tragen
     backdrop-filter (Live-Blur ueber dem Bett) im eigenen <style>-Block jeder
     Seite. Auf den Unterseiten deckt css/mobil-seiten.css das schon ab
     (P1d) — die Startseite laedt diese Datei nicht, deshalb hier zentral
     fuer ALLE 7 Seiten, ohne Doppelpflege. Deckender, unbewegter Grund
     ersetzt den Blur (gleicher Lesekontrast, kein GPU-Kostenfaktor). */
  .nav.scrolled {
    -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
    background: rgba(5,8,15,.94) !important;
  }
  .mobile-menu {
    -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
    background: rgba(5,8,15,.98) !important;
  }
  .handy-balken {
    -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
    background: rgba(5,8,15,.97) !important;
  }

  /* Ausnahme (Mobil-Vorgabe Punkt 1): die Tool-Laufschrift bleibt animiert —
     "passiert wenig", einzige erlaubte Bewegung neben den Karussells unten.
     Runde 3 (Pruefbefund H7): NUR ohne reduzierte Bewegung — sonst gewann
     diese Regel gegen die bestehende prefers-reduced-motion-Abschaltung in
     index.html (spaetere Ladereihenfolge dieser Datei), die Laufschrift lief
     also mobil auch mit aktivierter Systemeinstellung weiter. */
  @media (prefers-reduced-motion: no-preference) {
    .marquee-track { animation: marquee 46s linear infinite; }
  }

  /* Scroll-craft-Zustände: dieselben Eigenschaften wie im bestehenden
     prefers-reduced-motion-Pfad (css/akte.css, css/scroll-fx.css,
     css/layering.css), hier zusätzlich auf die rohe Mobil-Bedingung
     angewandt statt nur auf reduzierte Bewegung — der No-JS/No-Animation-
     Zustand ist in beiden Fällen derselbe Ruhezustand. */
  /* Runde 3 (Pruefbefund N6): [data-reveal][data-reveal] statt [data-reveal] —
     css/scroll-fx.css setzt [data-reveal][data-reveal]{...} (Spezifitaet 0,2,0)
     als eigene Notbremse; unsere einfache [data-reveal]-Regel (0,1,0) verlor
     dagegen trotz spaeterer Ladereihenfolge. Gleiche Spezifitaet + spaetere
     Reihenfolge gewinnt zuverlaessig. */
  [data-reveal][data-reveal], [data-reveal][data-sfx], .sfx-line-inner {
    opacity: 1; transform: none; transition: none; animation: none; will-change: auto;
  }
  [data-scrub] { transform: none; opacity: 1; will-change: auto; }
  .kin-line > span, .kin-wort > span { transform: none; }
  .akt-gipfel { clip-path: none; }
  .akt-slide-links { translate: none; }
  .akt-wischer, .akt-wischer-auf { clip-path: none; will-change: auto; }
  .pz-marke { will-change: auto; }   /* Prozess-Marke: --akt-p ist jetzt fest, keine Animation mehr, kein Layer noetig */
  [data-berg-cue] { transform: none; }
  [data-berg-rail] { transform: none; }
  .rv-wort { opacity: 1; transform: none; }
  .ly-stagger > *:nth-child(2n), .ly-stagger > *:nth-child(3n) { --ly-y: 0px; }

  /* ============================================================
     2) Hero: Die Pillen-Reihe .hero-chips gibt es seit 22.09.2026 nicht mehr
        (ersatzlos aus dem Startseiten-Hero entfernt, Entscheidung Alex). Die
        Regel war danach tot und ist mit raus. Die drei Punkte unter den
        Knöpfen (.hero-trust) bleiben unverändert stehen. */

  /* ============================================================
     3) Services: Beschreibung unter dem Titel raus (nur der Titel bleibt).
        Beide Fassungen (nur-breit ab 640, nur-handy darunter) sind hier
        gemeint — ID-Anker gibt genug Spezifität, um beide zu schlagen. */
  #services .svc-titel .sec-sub { display: none; }
  /* Karten ohne Rail = Stapel: fällt automatisch zurück, weil js/berg.js
     unter LP_MOBIL nie html.berg-akt setzt (siehe js/berg.js) — .svc-rail/
     .svc-karten stehen dann in ihrer Basis-Form (display:grid, 1 Spalte,
     index.html). Keine eigene Regel hier nötig. */

  /* ============================================================
     4) + 9) Karussells (Use-Cases, Marktlage). Markup: .lp-karussell >
        .lp-karussell-spur (Karten unverändert) + eigene .lp-karussell-nav
        mit .lp-karussell-zurueck/-weiter. Auf Desktop (siehe Basisregel
        unten, AUSSERHALB dieser @media) ist beides display:contents/none —
        hier die eigentliche Karussell-Form. */
  .lp-karussell {
    /* Schlägt die Desktop-Basisregel (display:contents) — ohne eigene Box
       hätte overflow-x:auto keine Wirkung und die Karten liefen über den
       ganzen Viewport hinaus (gemessen: scrollWidth +1718px). */
    display: block;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    margin: 0 -24px;              /* bis an den Viewport-Rand, wie .wrap-Innenabstand es sonst verhindert */
    /* Kein Scrollbalken-Layoutsprung noetig: die Seite braucht ohnehin
       keinen sichtbaren Balken hier, iOS/Android blenden ihn beim
       Touch-Scrollen automatisch aus. */
  }
  .lp-karussell-spur {
    display: flex;               /* schlägt die Grid-Basisregel (.uc-grid/.trust-grid) per Ladereihenfolge */
    flex-wrap: nowrap;
    gap: 16px;
  }
  /* Runde 4 (Pruefbefund H1, zweiter Anlauf): weder Padding auf der
     scrollenden Box (Original, Runde 2) noch Padding auf der Spur (erster
     Fix-Versuch) zaehlt zuverlaessig vollstaendig zu scrollWidth, sobald
     Flex-Kinder mit flex:0 0 100% ihren Container ueberlaufen — die Spur
     selbst bleibt dabei auf die Breite ihres Elternelements begrenzt
     (normales Block-Verhalten), waechst NICHT mit den ueberlaufenden
     Kindern mit; ihr eigenes Padding-Right liegt dadurch "vergraben"
     mitten im ueberlaufenden Inhalt, statt danach echten Platz zu
     reservieren (gemessen: weiterhin exakt 24px Differenz). Echte
     Flex-ITEMS ueberlaufen dagegen immer korrekt und zaehlen deshalb
     zuverlaessig zu scrollWidth — ::before/::after der Spur werden hier
     bewusst zu echten (leeren) Flex-Items statt zu Padding. */
  .lp-karussell-spur::before,
  .lp-karussell-spur::after {
    content: "";
    /* 8px statt 24px: die Spur traegt gap:16px zwischen ALLEN Flex-Items
       (auch zu ::before/::after) — 8px Spacer + 16px Gap = die gewuenschten
       24px Randabstand vor der ersten / nach der letzten Karte. */
    flex: 0 0 8px;
  }
  /* .uc-grid/.trust-grid/.quote-grid liegen je eine Ebene TIEFER als
     .lp-karussell-spur (eigene Elemente, NICHT dieselbe Klasse — siehe
     Begründung an .uc-grid in index.html: display:contents auf demselben
     Element wie eine display:grid-Eigenschaft würde die Grid-Regel
     zunichtemachen). Unter der Mobil-Bedingung werden sie selbst zu
     display:contents, ihre Karten ruecken damit fuer die BOX-Teilnahme
     direkt in die Spur ein. WICHTIG: display:contents loescht dabei alle
     Flex-Item-Eigenschaften, die auf dem contents-Element selbst staenden
     (kein Element = keine Box, die sie tragen koennte) — deshalb stehen
     scroll-snap-align/flex unten direkt auf den echten Karten, nicht auf
     ".lp-karussell-spur > *" (das traefe im DOM nur .uc-grid/.trust-grid
     selbst, nicht ihre Kinder). */
  #uc-karussell .uc-grid,
  #trust-karussell .trust-grid,
  #trust-karussell .quote-grid { display: contents; }
  .lp-karussell-spur > *,
  #uc-karussell .uc-card,
  #trust-karussell .trust-card,
  #trust-karussell .quote {
    scroll-snap-align: center;
    /* Runde 2 (Mobil-Vorgabe Runde 2, Punkt 2): exakt 100% statt calc(100% - 8px) — die
       vorherigen 8px Slack liessen die Nachbarkarte 4px hervorlugen
       ("Wisch-Affordanz"), verschoben die aktive Karte aber 4px aus der
       Viewport-Mitte (gemessen) und verletzten damit die neue Vorgabe
       "|Kartenmitte - Viewportmitte| <= 2px". Mit voller Breite deckt sich
       die Kartenmitte exakt mit der Box-Mitte (0px Differenz, gemessen). */
    flex: 0 0 100%;
    min-width: 0;
  }
  .lp-karussell-nav {
    display: flex;
    justify-content: center;
    gap: 14px;
    margin-top: 18px;
  }
  .lp-karussell-nav button {
    -webkit-appearance: none; appearance: none;
    width: 44px; height: 44px; flex: none;
    display: inline-flex; align-items: center; justify-content: center;
    border: 1px solid var(--line-strong); border-radius: 50%;
    background: rgba(13,21,38,.6); color: var(--text);
    cursor: pointer;
  }
  .lp-karussell-nav button:disabled { opacity: .35; cursor: default; }
  .lp-karussell-nav button:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
  /* Pfeile nur mit Bestätigung durch js/mobil.js zeigen — ohne JS bleibt
     die Spur trotzdem mit dem Finger/Trackpad wischbar (scroll-snap ist
     reines CSS), nur ohne die beiden Zusatzknöpfe. Runde 3 (Pruefbefund N7):
     display:none statt visibility:hidden — sonst blieb ohne JS ein
     44px+18px hoher Leerraum unter dem Karussell stehen. */
  .lp-karussell-nav { display: none; }
  html.lp-mobil .lp-karussell-nav { display: flex; }
  /* Beide Pfeile sind bei Endlos-Karussells (Punkt 1/2 Runde 2) NIE
     ausgegraut — kein disabled mehr gesetzt, Regel bleibt als Fallback. */

  /* ============================================================
     5) Use-Cases-CTA: Vertrauenszeile auf 2 Punkte kürzen ("1 Minute" raus) */
  #usecases .mid-panel-uc .cta-trust li:nth-child(3) { display: none; }
  /* Runde 3 (Pruefbefund N1): das ausgeblendete DRITTE <li> bleibt
     :last-child (DOM-Position, nicht Sichtbarkeit) — das jetzt sichtbar
     letzte <li> (2.) behielte sonst seinen Trennpunkt ("Kostenlos · ohne
     Anmeldung ·"). Punkt am neuen visuellen Ende hier explizit entfernt. */
  #usecases .mid-panel-uc .cta-trust li:nth-child(2)::after { content: none; }

  /* ============================================================
     6) Branchen-CTA: "Unverbindlich" raus */
  .mid-panel-br .cta-trust li:nth-child(3) { display: none; }
  .mid-panel-br .cta-trust li:nth-child(2)::after { content: none; }

  /* ============================================================
     3 (Mobil-Vorgabe Runde 2, Punkt 3): Info-Symbol + Tooltip unter der
     Use-Cases-Unterzeile mobil ausblenden. "RICHTWERT" an den Karten
     selbst (.uc-label) bleibt unveraendert stehen — nur der Hinweistext
     zur Methodik verschwindet. Desktop unveraendert (Regel steht nur
     hier, in der Mobil-Klammer). */
  #usecases .ihint-zeile { display: none; }

  /* ============================================================
     7) Prozess: senkrechter Strahl, Variante A (ruhige Grafik, keine
        Bewegung — die drei Karten stehen ohnehin untereinander im Fluss,
        da html.berg-akt auf Mobil nie gesetzt wird). Die alte waagerechte
        Route (.process-line, für die 3-Spalten-Desktop-Reihe gebaut) passt
        nicht mehr zu gestapelten Karten und wird hier ersetzt.
        .pz-strahl ist ein einzelnes Element HINTER den Karten (z-index 0
        gegen 1), das exakt von der Oberkante der ersten bis zur Unterkante
        der letzten Karte reicht (top/bottom:-32px auf .pz-steps selbst,
        das im Fluss GENAU die drei Karten umschließt, kein Messen per JS
        nötig) — sichtbar bleibt er dadurch nur in den drei Lücken (über
        Karte 1, 1↔2, 2↔3, unter Karte 3), weil die Karten selbst (.step,
        background:var(--surface), deckend, unverändert) ihn dort
        überdecken. Der Regler-Lichtpunkt sitzt fest am oberen Ende
        (::before, gleiche Glow-Werte wie .pz-marke::before in berg.css). */
  .pz-steps { position: relative; }
  .process-line { display: none; }
  .pz-strahl {
    display: block;    /* Basisregel ausserhalb dieser Klammer setzt none (Desktop-Fix) */
    position: absolute;
    top: -32px; bottom: -32px;
    left: 50%; width: 2px;
    transform: translateX(-50%);
    background: linear-gradient(180deg, var(--blue), var(--ice));
    z-index: 0;
  }
  .pz-strahl::before {
    content: ""; position: absolute; top: 0; left: 50%;
    transform: translate(-50%, -50%);
    width: 10px; height: 10px; border-radius: 50%;
    background: var(--ice);
    box-shadow: 0 0 0 4px rgba(125,211,252,.14), 0 0 14px rgba(125,211,252,.55);
  }
  .pz-steps .step { position: relative; z-index: 1; }

  /* Allgemeiner Kürzungs-Helfer, Gegenstück zur Basisregel oben. */
  .lp-nur-mobil { display: inline; }
  .lp-nur-desktop { display: none; }

  /* ============================================================
     8) "Wo fangen Sie an?": nur "Kostenlos" + "Quick-Win-Map inklusive",
        "unverbindlich" (2. Punkt) raus. */
  .mid-cta .cta-trust li:nth-child(2) { display: none; }
  /* Runde 4 (Pruefbefund H2): "Quick-Win-Map inklusive" ist laenger als die
     Zeilen bei Punkt 5/6/13 (DE braucht gemessen ~320-323px, verfuegbar
     sind 301-316px bei 375/390px — reicht bei 13px-Schrift NICHT). Die
     13px-Lesbarkeitsgrenze (vereinbarte Untergrenze, NIEDRIG a) hat Vorrang
     vor dem strikten Einzeiligkeits-Wunsch: DE bricht deshalb bei 320/375/
     390px bewusst um (.trust-line ist ohnehin flex-wrap:wrap, kein
     Layout-Fehler), bei 414px reicht der Platz wieder (340px verfuegbar).
     EN ist kuerzer und bleibt an allen vier Breiten einzeilig. Trennpunkt
     nach "Kostenlos" wird bis 410px unterdrueckt, damit er nicht als
     "Kostenlos ·" allein am Zeilenende haengt, wenn die Zeile umbricht. */
  .mid-cta .cta-trust { font-size: .8125rem; row-gap: 4px; column-gap: 8px; }
  @media (max-width: 410px) {
    .mid-cta .cta-trust li:nth-child(1)::after { content: none; }
  }

  /* ============================================================
     10) ROI-Rechner-Teaser: alle Vertrauenspunkte raus, nur das
         Infozeichen bleibt, zentriert. */
  #roi .roi-teaser .cta-trust { display: none; }
  /* text-align statt eines flex/.ihint-zeile-Umbaus: die Zeile bleibt auf
     Desktop dieselbe reine <p style="margin-top:16px"> wie vorher (0 px
     Unterschied, gemessen) — hier reicht Zentrieren des Inline-Inhalts.
     Runde 3 (Pruefbefund N3): auf ≤639px begrenzt — der Button ist ab
     640px linksbuendig (bestehendes Layout), Zentrieren des Absatzes
     passte dort nicht mehr zur Buttonposition (dx 135-195px gemessen). */
  @media (max-width: 639px) {
    #roi .roi-teaser .ihint-absatz { text-align: center; }
  }

  /* ============================================================
     11) Über mich: Badge raus, zweiter Absatz raus, Vertrauenszeile unter
         den Buttons raus (nur die zwei Buttons bleiben). */
  .founder-badge { display: none; }
  #founder .founder-p2 { display: none; }
  #founder .founder-text > .cta-trust { display: none; }

  /* ============================================================
     12) Sektion 09 "Passt das?": Symbol + Kurzüberschrift, Beschreibung
         hinter Tap. Struktur/Erläuterung siehe index.html (.nofit-item
         ersetzt die bisherige <li>, summary{display:contents} hält das
         DESKTOP-Layout pixelgleich, s. Basisregel im <style>-Block).
         Auf Mobil wird das Grid bewusst NICHT weiterverwendet: .nofit-body
         mit grid-column:1/-1 in DERSELBEN Zeile wie Icon/Kurztitel (die
         Desktop-Regel setzt zusätzlich grid-row:1, hier nicht überschrieben)
         renderte gemessen nur 24 px breit statt der vollen Zeile — die
         Ueberlappung zweier Grid-Items in einer Reihe war nicht zuverlässig
         aufzuloesen. Einfacher, geprüft robuster Ersatz: summary bekommt auf
         Mobil eine EIGENE Box zurück (display:flex statt contents), der
         Body flieszt normal darunter. */
  .nofit-item { display: block; cursor: pointer; }
  /* Runde 3 (Pruefbefund H8b): min-height 44px + vertikales Padding, vorher
     nur 25px hoch (Padding lag auf .nofit-item, nicht auf summary selbst). */
  .nofit-item summary { display: flex; align-items: center; gap: 14px; min-height: 44px; padding: 10px 0; pointer-events: auto; }
  .nofit-item .ik { flex: none; }
  .nofit-item .nofit-kurz { display: block; flex: 1; font-weight: 600; color: var(--text); }
  .nofit-item .nofit-plus { display: inline-block; flex: none; color: var(--blue); transition: transform .3s var(--ease-out); }
  .nofit-item[open] .nofit-plus { transform: rotate(45deg); }
  .nofit-item .nofit-body { display: none; margin-top: 8px; }
  .nofit-item[open] .nofit-body { display: block; }

  /* ============================================================
     13) Newsletter: "kein Spam" raus, Zeile bleibt einzeilig. */
  .news .cta-trust li:nth-child(3) { display: none; }
  .news .cta-trust li:nth-child(2)::after { content: none; }

  /* Punkte 5/6/13: bei 320-374 px reichte der Innenraum trotz gekürzter
     Liste nicht immer für 1 Zeile. Runde 4 (Niedrig a): Schriftstufe auf
     die 13px-Untergrenze angehoben (vorher .62rem/9,92px) — kürzt keinen
     Text, nur den Weißraum; Punkt 8 hat seit Runde 4 eine eigene, breitere
     Stufe (siehe oben, H2). */
  @media (max-width: 389px) {
    .mid-panel .cta-trust, .news .cta-trust {
      font-size: .8125rem; row-gap: 5px; column-gap: 5px;
    }
    .mid-panel .cta-trust li:not(:last-child),
    .news .cta-trust li:not(:last-child) { margin-right: 6px; }
  }

  /* ============================================================
     15/H4 (Runde 3, Pruefbefund): roi-rechner CTA/Formular und kontakt
     Formular verwenden .trust-punkt (Spans, nicht <li>) statt .trust-line —
     eigenes, engeres Schrift-/Abstandsmuster noetig. Gemessen zweizeilig:
     roi CTA (.cta-panel .cta-trust) bei 320 DE+EN/375 DE/390 DE; roi
     Formular (.micro-trust) bei 320 DE; kontakt Formular (.k-nachricht
     .cta-trust) bei 320 DE+EN. Bis 390px abgedeckt (deckt alle gemessenen
     Faelle ab, 414px war in keinem Fall betroffen). */
  /* Runde 4 (Niedrig a): Schriftstufen auf die 13px-Untergrenze angehoben
     (vorher .68rem/.6rem/.54rem, teils unter 9px) — .cta-trust UND
     .micro-trust tragen beide flex-wrap:wrap (css/berg-seiten.css,
     roi-rechner.html), brechen bei sehr schmalen Breiten also gefahrlos
     in eine zweite Zeile um, statt weiter zu schrumpfen. */
  @media (max-width: 410px) {
    .micro-trust, .k-nachricht .cta-trust, .cta-panel .cta-trust {
      font-size: .8125rem; column-gap: 8px; row-gap: 4px;
    }
    /* .k-nachricht .cta-trust .trust-punkt entfernt (Pruefbefund vor
       Livegang): seit dem Umbau der Formular-Vertrauenszeile auf
       .trust-line.trust-bars (<ul>/<li>) gibt es dort kein .trust-punkt
       mehr — die Regel traf ins Leere. .micro-trust/.cta-panel .cta-trust
       (roi-rechner.html) nutzen .trust-punkt weiterhin, bleiben stehen. */
    .micro-trust .trust-punkt,
    .cta-panel .cta-trust .trust-punkt { gap: 5px; }
  }

  /* ============================================================
     Mobile Daempfung der Prozess-Karten (.ns-cards/.ns-card). URSPRUENGLICH
     nur fuer index.html ".next-card" (Karte "Was passiert nach der
     Buchung?") — RICHTIGGESTELLT (Pruefbefund vor Livegang): seit dem
     Folgeauftrag 22.09. (sechster Durchgang) stylt dieser Block GENAUSO die
     Kartensektion "01 · Termin" auf kontakt.html (.k-card .ns-cards). Die
     Regeln unten sind unscoped (.ns-card, .ns-badge, ...), treffen also
     beide Seiten gleich — nur ".next-card { padding }" ist index.html-
     spezifisch (kontakt.html hat dafuer keine .next-card, die Karten sitzen
     dort direkt in .k-card).
     SPIEGELSTELLE: der .ns-*-Block existiert dreifach — hier UND als
     Basis-Definition 1:1 in index.html und kontakt.html (jeweils eigener
     <style>-Block, kein gemeinsames Stylesheet). Aenderungen an einer
     Stelle IMMER an den anderen zwei nachziehen.
     Vorherige Regeln hier (.next-card ol/li, .ns-zeile, .next-arrow)
     zeigten auf das VORHERIGE Markup (eine <ol> mit <li><b>Ziffer</b>
     <span>Text</span></li>) und griffen seither ins Leere (Pruefbefund vor
     Livegang, 22.09.). Ersetzt durch eine Daempfung der Kartenhoehe fuer
     .ns-card: Mobil stapeln sich drei volle Karten (Badge 64px + Icon 56px +
     Text, je 30px Padding) zu einer sehr hohen Sektion. Erste Fassung (Badge
     48px/Icon 40px/Padding 22px) kam nur auf 830px, kaum weniger als vorher
     (Pruefbefund: "immer noch ~790px" war der Ausgangswert, den es zu senken
     galt) — jetzt staerker gedaempft (Badge 40px/Icon 32px/Padding 16px
     vertikal, engere Gaps), gemessen 390px breit: Karte jetzt 156px statt
     199px, Sektion insgesamt 700px statt 830px. Text bleibt bei .94rem
     (~15px, ueber der 13px-Lesbarkeitsgrenze unten in dieser Datei) und wird
     nicht abgeschnitten — nur Badge/Icon/Abstaende sind kompakter. */
  .next-card { padding: 24px 18px; }
  .ns-rule { margin-top: 14px; }
  .ns-cards { margin-top: 20px; gap: 14px; }
  .ns-card { padding: 16px 18px; gap: 8px; }
  .ns-badge { inline-size: 40px; block-size: 40px; font-size: 1rem; }
  .ns-icon .ik { --ik-gr: 32px; }
  .ns-icon-person { inline-size: 32px; block-size: 32px; }
  .ns-icon-person .ns-icon-badge { --ik-gr: 16px; }
  .ns-text { font-size: .94rem; }
  .ns-connector { --ik-gr: 16px; }

  /* Folgeauftrag 22.09. (sechster Durchgang): .k-steps/.k-arrow (Karte
     "01 · Termin") sind durch die Kartenvariante von index.html ersetzt
     (.ns-cards, siehe kontakt.html eigener <style>-Block) — die alten Regeln
     hier zeigten auf das entfernte Markup und sind raus.
     WEITERHIN NOETIG (uebernommen, nur die Selektoren angepasst): css/
     berg-seiten.css definiert .nur-handy/.nur-breit als EIGENES System
     (Handy-Ueberschriften-Kuerzungen) mit `.nur-handy{display:none}` als
     Basis UND zusaetzlich `@media(min-width:640px){.nur-handy{display:
     none!important}}` — unter 640px erlaubt es nur `h1.nur-handy,
     h2.nur-handy{display:block}` wieder, generische Elemente (die neuen
     `span.nur-handy` in .ns-text) blieben dadurch bei JEDER Breite
     unsichtbar. kontakt.html laedt berg-seiten.css, index.html nicht
     (eigenes, generisches nur-breit/nur-handy im <style>-Block) — deshalb
     betrifft das nur kontakt.html. */
  @media (max-width: 639px) {
    .ns-text .nur-handy { display: block !important; }
  }

  /* ============================================================
     14) Footer: Menü mittig + 4 Punkte in einer Zeile, darunter
         Rechtliches/Kontakt nebeneinander, dann Marke, dann Copyright.
         .foot-base (Copyright-Zeile) ist im DOM schon die letzte Zeile der
         Seite (Geschwister von .foot-grid, nicht sein Kind) — sie bleibt
         also ganz ohne eigene Regel an Position 4, `order` würde dort
         ohnehin nichts bewirken (ihr Elternelement .wrap ist kein
         Flex-/Grid-Container). Umsortiert wird deshalb nur INNERHALB von
         .foot-grid (Marke <-> foot-cols) und INNERHALB von .foot-cols
         (Menu zuerst, ueber die volle Breite, Rechtliches/Kontakt daneben). */
  .foot-grid { display: flex; flex-direction: column; }
  /* Runde 9 (09.09.): Marke und Beschreibung stehen nebeneinander
     (Logo links, Text rechts daneben) statt untereinander. flex+center legt
     beide auf dieselbe Y-Mittelachse; der Text bekommt den Rest der Zeile
     (flex:1, max-width aufgehoben — der Desktop-Wert 22em wuerde ihn sonst
     unnoetig frueh umbrechen). Gemessen: ab 375px Breite bleibt die
     Beschreibung dabei zweizeilig; siehe Kommentar bei .foot-tag unten. */
  .foot-grid > div:first-child {
    order: 2;
    display: flex; align-items: center; gap: 10px;
    text-align: left;
  }
  /* Logo eine Stufe kleiner (1,3rem -> 1,15rem, 72,9px -> 64,5px) und
     Beschreibung auf 13px (.8125rem, dieselbe Untergrenze wie die
     Footer-Links) — beides zusammen gibt dem Text die Breite zurueck, die
     ihm das danebenstehende Logo nimmt. Gemessen braucht der deutsche Satz
     bei 13px 259,8px fuer zwei Zeilen; mit 64,5px Logo + 10px Abstand ist
     das ab 383px Viewport erfuellt (390/393/414/430 = alle aktuellen
     iPhones). Darunter (320-375px) wird er dreizeilig — bei 320px waeren
     dafuer 9,9px Schrift noetig, das unterschreitet die 13px-Untergrenze
     deutlich, deshalb bewusst nicht erzwungen.
     !important nur beim Logo: index.html traegt dort ein Inline-
     `style="font-size:1.3rem"`, das sonst gewinnt. Beide Groessen stehen
     ausschliesslich in dieser Mobil-Klammer, Desktop bleibt bei 1,3rem
     bzw. .85rem. */
  .foot-grid > div:first-child .logo-grad { flex: 0 0 auto; font-size: 1.15rem !important; }
  .foot-grid > div:first-child .foot-tag {
    margin-top: 0; flex: 1 1 auto; min-width: 0; max-width: none;
    font-size: .8125rem; line-height: 1.5;
  }
  .foot-cols {
    order: 1;
    display: grid;
    grid-template-columns: 1fr 1fr;
    row-gap: 28px;
  }
  .foot-cols > div:first-child {
    grid-column: 1 / -1;
    text-align: center;
  }
  .foot-cols > div:first-child .foot-h { text-align: center; }
  /* Runde 9 (09.09.): zurueck zu EINER Zeile fuer alle vier Punkte —
     ohne die 13px-Untergrenze aus Runde 5 anzutasten. Gemessen (Chromium,
     Archivo, 13px): die vier Linktexte brauchen zusammen 206,6px (DE) bzw.
     213,3px (EN, "ROI calculator"); die Menuespalte ist selbst bei 320px
     Viewport 272px breit. Mit 2px Seitenpolster je Link (statt 4px, in
     Summe 16px) und mindestens 10px Abstand belegt der schlimmste Fall
     (EN bei 320px) 258px von 272px — passt ohne Umbruch und ohne kleinere
     Schrift. space-between verteilt den Rest gleichmaessig, max-width
     haelt die Reihe bei breiten Handys/Tablets (bis 899px) zusammen.
     Ersetzt die 2x2-Anordnung aus Runde 5. */
  .foot-cols > div:first-child ul {
    display: flex;
    flex-wrap: nowrap;
    justify-content: space-between;
    column-gap: 10px;
    max-width: 420px;
    margin-inline: auto;
  }
  .foot-cols > div:first-child li { min-width: 0; }
  /* Runde 4 (Niedrig b): Rechtliches/Kontakt-Spalten hatten auf index/
     impressum/datenschutz nur 27px Linkhoehe (die 44px-Regel dafuer liegt
     in css/berg-seiten.css und laedt dort nicht) — hier zentral fuer alle
     7 Seiten, ohne die Spaltenlage (2 Spalten nebeneinander) zu aendern. */
  .foot-cols > div:not(:first-child) .footer-link {
    display: flex; align-items: center; min-height: 44px;
  }
  .foot-cols > div:first-child .footer-link {
    display: flex; align-items: center; justify-content: center;
    min-height: 44px; padding: 5px 2px;
    font-size: .8125rem; white-space: nowrap;
  }

  /* ============================================================
     Höhenband, Island, Dynamic-Pill: bereits oben (Kern) entfernt/
     ausgeblendet — hier keine doppelte Regel nötig.
     ============================================================ */
}
