/* ============================================================================
   Responsive-Layer fuer buwen.com
   ----------------------------------------------------------------------------
   Das Desktop-Layout steckt vollstaendig in style="..."-Attributen der Seiten
   bzw. in React-style-Objekten in _ds/.../_ds_bundle.js. Inline-Styles schlagen
   jede Stylesheet-Regel, deshalb arbeiten die Layout-Regeln hier mit
   !important.

   Alle Overrides liegen ausschliesslich in @media (max-width: ...). Oberhalb
   von 1024px ist diese Datei damit wirkungslos - das Desktop-Layout ist
   konstruktionsbedingt unveraendert.

   Diese Datei greift NICHT in _ds_bundle.js ein; DS-Komponenten (NavBar,
   Footer, Callout, ProcessStep, Input) werden von aussen ueber ihre
   semantischen Elemente bzw. ueber Klassen-Hooks der Seiten adressiert.
   Ein Design-System-Sync ueberschreibt den Responsive-Umbau also nicht.

   Breakpoints:  <=640px Handy   641-1024px Tablet
   ========================================================================= */


/* --- 1. Grundsicherung: nichts darf breiter sein als der Viewport --------- */

/* Bewusst `clip` und nicht `hidden`: `overflow-x:hidden` macht das Element zum
   Scroll-Container. Auf <html> gesetzt kollabiert dadurch die Dokumenthoehe
   (scrollHeight bleibt auf Viewporthoehe stehen) und die Seite laesst sich
   vertikal nicht mehr scrollen. `clip` beschneidet nur und erzeugt keinen
   Scroll-Container, das vertikale Scrollen bleibt unberuehrt. */
body { overflow-x: clip; }
img, image-slot, svg, video, table { max-width: 100%; }


/* --- 2. Burger-Toggle ----------------------------------------------------
   Der Button liegt im Seiten-Markup (nicht im DS-Bundle) und wird per
   position:absolute ueber die vom DS gerenderte <nav> gelegt. */

.r-nav { position: relative; }

.r-nav-toggle {
  display: none;
  position: absolute;
  top: 50%;
  right: 16px;
  transform: translateY(-50%);
  z-index: 20;
  width: 44px;              /* 44px = Mindest-Antippflaeche */
  height: 44px;
  padding: 0;
  border: 0;
  background: transparent;
  cursor: pointer;
  color: var(--color-petrol);
}

/* Burger aus drei Balken, per CSS - kein Icon-Font, keine Lucide-Abhaengigkeit
   (Impressum und Datenschutz laden Lucide gar nicht). */
.r-nav-toggle::before,
.r-nav-toggle::after,
.r-nav-toggle span {
  content: "";
  display: block;
  position: absolute;
  left: 11px;
  width: 22px;
  height: 2px;
  background: currentColor;
  transition: transform var(--duration-fast, .15s) var(--ease-standard, ease),
              opacity   var(--duration-fast, .15s) var(--ease-standard, ease);
}
.r-nav-toggle::before { top: 15px; }
.r-nav-toggle span    { top: 21px; }
.r-nav-toggle::after  { top: 27px; }

/* Geoeffnet: Balken werden zum X */
html.nav-open .r-nav-toggle::before { top: 21px; transform: rotate(45deg); }
html.nav-open .r-nav-toggle span    { opacity: 0; }
html.nav-open .r-nav-toggle::after  { top: 21px; transform: rotate(-45deg); }


/* ==========================================================================
   TABLET  (641px - 1024px)
   ========================================================================== */

@media (max-width: 1024px) {

  /* Split-Sektionen: Spalten angleichen statt schon umbrechen */
  .r-split { gap: 32px !important; }

  /* 5er-Prozessleiste bricht auf 2 pro Zeile um.
     ProcessStep hat flex:1 (flex-basis:0), wuerde also sonst nur schrumpfen. */
  .r-process > .sc-host-x > div,
  .r-process > div {
    flex: 0 0 calc(50% - 16px) !important;
  }

  /* Verbindungsstrich zeigt im Umbruch ins Leere */
  .r-process div[style*="dotted"] { display: none !important; }

  /* Callout: 48px Innenabstand links+rechts sind hier schon zu viel */
  .r-callout > .sc-host-x > div,
  .r-callout > div { padding: 32px 28px !important; }

  /* NavBar/Footer: 40px Seitenabstand auf 24px */
  .r-nav nav { padding: 20px 24px !important; }
  footer     { padding: 28px 24px !important; }
}


/* ==========================================================================
   HANDY  (<= 640px)
   ========================================================================== */

@media (max-width: 640px) {

  /* --- 3. Design-Tokens verkleinern -------------------------------------
     Der wirksamste Hebel: die Inline-Styles referenzieren durchgehend
     var(--text-*), eine Neudefinition hier propagiert also in jede
     Ueberschrift und jeden Absatz, ohne ein einziges Element anzufassen. */
  :root {
    --text-4xl: 2.25rem;    /* 60px -> 36px */
    --text-3xl: 2rem;       /* 48px -> 32px */
    --text-2xl: 1.625rem;   /* 38px -> 26px */
    --text-xl:  1.375rem;   /* 30px -> 22px */
    --text-lg:  1.25rem;    /* 24px -> 20px */
    --text-md:  1.0625rem;  /* 20px -> 17px */
    --container-padding: 16px;
  }

  /* --- 4. Navigation: Links werden zum Dropdown ------------------------- */

  .r-nav-toggle { display: block; }

  .r-nav nav {
    padding: 16px 20px !important;
    /* Platz fuer den Burger rechts */
    padding-right: 68px !important;
  }

  /* Zweites Kind der <nav> = Link-Gruppe inkl. CTA-Button
     (siehe NavBar in _ds_bundle.js: <nav> > [<a>Logo, <div>Links+CTA]) */
  .r-nav nav > div:last-child {
    display: none !important;
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 15;
    flex-direction: column !important;
    align-items: stretch !important;
    gap: 0 !important;
    margin: 0;
    padding: 4px 20px 20px;
    background: var(--surface-card);
    border-bottom: 1px solid var(--border-subtle);
    box-shadow: var(--shadow-md, 0 8px 24px rgba(0,0,0,.08));
  }

  html.nav-open .r-nav nav > div:last-child { display: flex !important; }

  /* Links als grosszuegig antippbare Zeilen */
  .r-nav nav > div:last-child > a {
    padding: 14px 0;
    font-size: var(--text-base) !important;
    border-bottom: 1px solid var(--border-subtle);
  }
  /* letzter Eintrag ist der CTA-Wrapper, der braucht keine Trennlinie */
  .r-nav nav > div:last-child > a:last-child {
    border-bottom: 0;
    padding: 16px 0 0;
  }
  .r-nav nav > div:last-child > a:last-child button { width: 100%; }

  /* --- 5. Split-Layouts einspaltig --------------------------------------
     order zuruecksetzen, damit auf dem Handy immer Text vor Bild steht -
     die Homepage dreht die Reihenfolge im Modus "bildbetont" per order. */
  .r-split {
    grid-template-columns: 1fr !important;
    gap: 28px !important;
  }
  .r-split > * { order: 0 !important; }

  /* --- 6. Kartenraster einspaltig --------------------------------------- */
  .r-cards {
    grid-template-columns: 1fr !important;
    gap: 16px !important;
  }
  /* IconFeature-Karte: 28px Innenabstand auf 20px */
  .r-cards div[style*="padding: 28px"],
  .r-cards div[style*="padding:28px"] { padding: 20px !important; }

  /* --- 7. Prozessleiste untereinander ----------------------------------- */
  .r-process {
    flex-direction: column !important;
    gap: 24px !important;
  }
  .r-process > .sc-host-x > div,
  .r-process > div {
    flex: 0 0 auto !important;
    width: 100% !important;
    align-items: flex-start !important;
    text-align: left !important;
  }
  /* die maxWidth:160 der Beschriftung ist einspaltig unnoetig eng */
  .r-process div[style*="max-width: 160px"],
  .r-process div[style*="maxWidth"] { max-width: none !important; }

  /* --- 8. Callout ------------------------------------------------------- */
  .r-callout > .sc-host-x > div,
  .r-callout > div {
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 16px !important;
    padding: 28px 20px !important;
  }

  /* --- 9. Formular ------------------------------------------------------
     Input rendert ein <input> ohne width/min-width; im 2-spaltigen Grid
     erzwingt dessen intrinsische Mindestbreite (~180px) sonst Ueberlauf. */
  .r-formrow {
    grid-template-columns: 1fr !important;
    gap: 16px !important;
  }
  form input,
  form textarea,
  form select {
    width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
    /* <16px loest auf iOS beim Fokus einen Auto-Zoom aus */
    font-size: 16px !important;
  }
  form label { display: block; }

  /* --- 10. Footer ------------------------------------------------------- */
  footer {
    flex-wrap: wrap !important;
    flex-direction: column !important;
    justify-content: center !important;
    text-align: center;
    gap: 16px !important;
    padding: 28px 20px !important;
  }
  footer > div {
    flex-wrap: wrap !important;
    justify-content: center !important;
    gap: 8px 20px !important;
  }

  /* --- 11. Typografie- und Textkorrekturen ------------------------------ */

  /* Ueberschriften: die Zeilenhoehe 1.12 ist bei umbrechenden Zeilen zu eng */
  h1, h2 { line-height: var(--leading-snug) !important; }

  /* Lange URLs (z.B. die ODR-Adresse im Impressum) sonst breiter als 375px */
  a, p, li, td { overflow-wrap: anywhere; }

  /* Sektionen: die durchgaengigen 24px Seitenabstand auf 16px */
  section { padding-left: 16px !important; padding-right: 16px !important; }
}


/* --- 12. Bedienbarkeit ---------------------------------------------------- */

@media (prefers-reduced-motion: reduce) {
  .r-nav-toggle::before,
  .r-nav-toggle::after,
  .r-nav-toggle span { transition: none; }
}
