/* ==========================================================================
   MK Fenster Türen Bauelemente — Design System
   --------------------------------------------------------------------------
   1  Tokens              6  Hero                11  Formulare
   2  Reset & Basis       7  Trust / Zahlen      12  Galerie & Lightbox
   3  Typografie          8  Karten & Raster     13  Footer
   4  Buttons & Links     9  Prozess             14  Animation
   5  Header & Menü      10  FAQ / Stimmen       15  Responsive
   ========================================================================== */

/* ============================ 1 · TOKENS ================================= */
:root{
  /* Blau — Leitfarbe. Diszipliniert: ein Marineblau, ein Akzentblau, Abstufungen. */
  --navy-900:#061426;
  --navy-800:#0A1F38;
  --navy-700:#0E2C4E;
  --navy-600:#164066;
  --navy:#0B2440;
  --blue-700:#1544B4;
  --blue:#1B5AE0;               /* Primär-Aktion */
  --blue-400:#3F86FF;           /* Akzent / Hover / Highlights */
  --blue-200:#9DC4FF;
  --blue-50:#EDF3FF;
  --sky:#F2F6FC;

  --ink:#0A1A2E;                /* Fließtext auf hell */
  --ink-2:#3E5069;              /* Sekundärtext */
  --ink-3:#5C6E88;              /* Tertiär / Meta — auf Weiß 5,2:1, damit auch
                                   Kleintext die WCAG-AA-Schwelle sicher hält */
  --paper:#FFFFFF;
  --mist:#F6F8FB;
  --line:#E3E9F2;
  --line-2:#D2DCEA;

  --on-dark:#EEF4FF;
  --on-dark-2:#A9BEDC;
  --on-dark-3:#7089AC;
  --dark-line:rgba(150,190,255,.16);

  --wa:#25D366;

  /* ---- Kontextfarben ----------------------------------------------------
     Bausteine (Überschrift, Fließtext, Eyebrow, Ghost-Button …) greifen NUR
     auf diese Tokens zu, nie direkt auf --ink oder --blue. In dunklen
     Abschnitten werden die Tokens weiter unten umgeschaltet. Dadurch kann
     kein Baustein mehr dunkle Schrift auf dunklem Grund erzeugen. */
  --c-head:var(--ink);        /* Überschriften            */
  --c-body:var(--ink-2);      /* Fließtext, Lead          */
  --c-faint:var(--ink-3);     /* Meta, Kleintext          */
  --c-accent:var(--blue);     /* Eyebrow, Textlinks, Icons */
  --c-hair:var(--line);       /* Trennlinien              */
  --c-ghost-bd:var(--line-2);
  --c-ghost-hover-bg:var(--blue-50);
  --c-ghost-hover-fg:var(--blue);
  --c-ghost-hover-bd:var(--blue);

  /* Typo */
  --sans:'SF Pro Display', -apple-system, 'Geist', 'Segoe UI', system-ui, Helvetica, Arial, sans-serif;
  --serif:'Instrument Serif', Georgia, 'Times New Roman', serif;

  --t-h1:clamp(40px, 5.4vw, 90px);
  --t-h2:clamp(31px, 3.75vw, 62px);
  --t-h3:clamp(22px, 1.9vw, 34px);
  --t-h4:clamp(19.5px, 1.45vw, 27px);
  --t-lead:clamp(19px, 1.55vw, 29px);
  --t-body:clamp(17.5px, 1.22vw, 23px);
  --t-sm:clamp(15.5px, 1.09vw, 20.5px);
  --t-xs:clamp(14px, .99vw, 18px);
  --t-eyebrow:clamp(13px, .93vw, 17.5px);
  --t-num:clamp(40px, 4.15vw, 72px);

  /* Höhen der fixen Leisten. Der Hero rechnet damit seine Höhe so aus,
     dass Topbar + Header + Hero exakt einen Bildschirm füllen. */
  --hdr-h:92px;
  --topbar-h:42px;

  /* Raster */
  --wrap:1340px;
  --wrap-wide:1640px;
  --wrap-text:74ch;
  --gut:clamp(20px, 3.4vw, 56px);
  --sec:clamp(72px, 8.4vw, 148px);   /* vertikaler Sektionsabstand */

  --r-sm:2px;
  --r:3px;
  --r-lg:4px;
  --r-xl:6px;

  --sh-1:0 1px 2px rgba(10,26,46,.08);
  --sh-2:0 1px 2px rgba(10,26,46,.07), 0 8px 20px rgba(10,26,46,.08);
  --sh-3:0 10px 28px rgba(9,32,66,.17);
  --sh-blue:0 1px 0 rgba(8,32,90,.45);

  --ease:cubic-bezier(.22,.61,.36,1);
  --ease-out:cubic-bezier(.16,1,.3,1);
  --dur:.62s;
}

/* Dunkle Abschnitte: alle Kontextfarben umschalten.
   Diese Liste ist die einzige Stelle, an der ein neuer dunkler Abschnitt
   eingetragen werden muss. */
:is(.on-dark,.on-deep,.hero,.phero,.band,.cat,.ftr,.topbar,.hero-card,.lb){
  --c-head:#fff;
  --c-body:var(--on-dark-2);
  --c-faint:var(--on-dark-3);
  --c-accent:var(--blue-200);
  --c-hair:var(--dark-line);
  --c-ghost-bd:rgba(160,200,255,.34);
  --c-ghost-hover-bg:rgba(63,134,255,.18);
  --c-ghost-hover-fg:#fff;
  --c-ghost-hover-bd:var(--blue-400);
}

/* Helle Inseln innerhalb dunkler Abschnitte schalten wieder zurück
   (weiße Karten, Hinweisboxen, Chips …). */
:is(.tst-card,.trust-in,.note,.map-card,.fig-note,.pcard-body,.vcard-body,.chip,.drawer,.legal,.faq,.g-hint){
  --c-head:var(--ink);
  --c-body:var(--ink-2);
  --c-faint:var(--ink-3);
  --c-accent:var(--blue);
  --c-hair:var(--line);
  --c-ghost-bd:var(--line-2);
  --c-ghost-hover-bg:var(--blue-50);
  --c-ghost-hover-fg:var(--blue);
  --c-ghost-hover-bd:var(--blue);
}

/* ========================= 2 · RESET & BASIS ============================= */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%; scroll-behavior:smooth; scroll-padding-top:calc(var(--hdr-h) + 18px)}
body{
  margin:0; background:var(--paper); color:var(--ink);
  font-family:var(--sans); font-size:var(--t-body); font-weight:400;
  line-height:1.62; letter-spacing:-.005em;
  -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;
  overflow-x:hidden;
}
body.lock{overflow:hidden}
img,svg,video{max-width:100%; display:block}
button{font:inherit; color:inherit; background:none; border:0; cursor:pointer}
input,textarea,select{font:inherit; color:inherit}
a{color:inherit; text-decoration:none}
ul,ol{margin:0; padding:0; list-style:none}
figure{margin:0}
hr{border:0; border-top:1px solid var(--line); margin:0}
::selection{background:var(--blue); color:#fff}
:focus-visible{outline:2.5px solid var(--blue-400); outline-offset:3px; border-radius:4px}

.wrap{width:100%; max-width:var(--wrap); margin-inline:auto; padding-inline:var(--gut)}
.wrap-wide{width:100%; max-width:var(--wrap-wide); margin-inline:auto; padding-inline:var(--gut)}
.sec{padding-block:var(--sec)}
.sec-t{padding-top:var(--sec)}
.sec-b{padding-bottom:var(--sec)}
.skip{position:absolute; left:-9999px; top:0; z-index:999; background:var(--blue); color:#fff; padding:12px 20px; border-radius:0 0 10px 0}
.skip:focus{left:0}

/* Farbflächen */
.on-mist{background:var(--mist)}
.on-sky{background:var(--sky)}
/* Die Textfarben in dunklen Abschnitten kommen aus den Kontext-Tokens
   ganz oben — hier wird nur noch die Fläche gesetzt. */
.on-dark{background:var(--navy); color:var(--on-dark)}
.on-deep{background:var(--navy-900); color:var(--on-dark)}
:is(.on-dark,.on-deep,.hero,.phero,.band,.cat,.ftr) p{color:var(--c-body)}
:is(.tst-card,.trust-in,.note,.map-card,.fig-note,.pcard-body,.vcard-body,.legal,.faq) p{color:var(--c-body)}

/* Blaupausen-Raster für dunkle Flächen */
.blueprint{position:relative; isolation:isolate; overflow:hidden}
.blueprint::before{
  content:''; position:absolute; inset:0; z-index:-1; opacity:.85;
  background-image:linear-gradient(var(--dark-line) 1px,transparent 1px),
                   linear-gradient(90deg,var(--dark-line) 1px,transparent 1px);
  background-size:clamp(52px,5vw,84px) clamp(52px,5vw,84px);
  -webkit-mask-image:radial-gradient(120% 92% at 50% 0%,#000 12%,transparent 78%);
          mask-image:radial-gradient(120% 92% at 50% 0%,#000 12%,transparent 78%);
}
.blueprint::after{
  content:''; position:absolute; z-index:-1; inset:auto -10% -40% -10%; height:70%;
  background:radial-gradient(60% 100% at 50% 100%,rgba(63,134,255,.22),transparent 70%);
  pointer-events:none;
}

/* ========================== 3 · TYPOGRAFIE =============================== */
h1,h2,h3,h4,h5{margin:0; font-weight:680; letter-spacing:-.028em; line-height:1.06; color:var(--c-head); overflow-wrap:break-word}
h1{font-size:var(--t-h1); letter-spacing:-.034em}
h2{font-size:var(--t-h2); line-height:1.08}
h3{font-size:var(--t-h3); line-height:1.18; letter-spacing:-.022em}
h4{font-size:var(--t-h4); line-height:1.28; letter-spacing:-.016em}
p{margin:0}
p + p{margin-top:.85em}
.lead{font-size:var(--t-lead); line-height:1.5; color:var(--c-body); letter-spacing:-.012em}
.sm{font-size:var(--t-sm); line-height:1.55}
.xs{font-size:var(--t-xs); line-height:1.5; color:var(--c-faint)}
.muted{color:var(--c-body)}
.serif{font-family:var(--serif); font-style:italic; font-weight:400; letter-spacing:-.01em}
.nowrap{white-space:nowrap}
.measure{max-width:var(--wrap-text)}

/* Eyebrow: SF Pro 600, moderates Tracking — bewusst kein Monospace */
.eyebrow{
  display:inline-flex; align-items:center; gap:.62em;
  font-size:var(--t-eyebrow); font-weight:600; letter-spacing:.075em;
  text-transform:uppercase; color:var(--c-accent); margin-bottom:.9em;
}
.eyebrow::before{content:''; width:clamp(16px,1.5vw,26px); height:3px; background:currentColor; opacity:.85}

.sec-head{max-width:min(100%,860px)}
.sec-head .lead{margin-top:clamp(16px,1.4vw,24px)}
.sec-head--center{margin-inline:auto; text-align:center}
.sec-head--center .eyebrow::before{display:none}

/* Ecken-Winkel — technisches Detail aus der Bauzeichnung */
.bracket{position:relative}
.bracket::before,.bracket::after{
  content:''; position:absolute; width:16px; height:16px; pointer-events:none;
  border:2px solid var(--blue); opacity:.55; transition:opacity .4s var(--ease)
}
.bracket::before{top:-1px; left:-1px; border-right:0; border-bottom:0}
.bracket::after{bottom:-1px; right:-1px; border-left:0; border-top:0}

/* ======================= 4 · BUTTONS & LINKS ============================= */
.btn{
  --bg:var(--blue); --fg:#fff; --bd:transparent;
  position:relative; display:inline-flex; align-items:center; justify-content:center; gap:.68em;
  padding:clamp(15px,1.12vw,20px) clamp(24px,1.85vw,34px);
  background:var(--bg); color:var(--fg); border:1.5px solid var(--bd);
  border-radius:3px; font-size:var(--t-sm); font-weight:600; letter-spacing:-.008em;
  line-height:1; white-space:nowrap; overflow:hidden; isolation:isolate;
  transition:transform .34s var(--ease-out), box-shadow .34s var(--ease-out), background .28s var(--ease), color .28s var(--ease), border-color .28s var(--ease);
}
.btn .ic{width:1.1em; height:1.1em; flex:none; transition:transform .3s var(--ease-out)}
.btn::before{
  content:''; position:absolute; inset:0; z-index:-1; border-radius:inherit;
  background:var(--blue-700);
  opacity:0; transition:opacity .28s var(--ease);
}
.btn:hover{transform:translateY(-1px)}
.btn:active{transform:translateY(1px)}
.btn:hover .ic{transform:translateX(2px)}

.btn-primary{box-shadow:var(--sh-blue)}
.btn-primary:hover{box-shadow:0 2px 0 rgba(8,32,90,.5)}
.btn-primary:hover::before{opacity:1}

.btn-ghost{--bg:transparent; --fg:var(--c-head); --bd:var(--c-ghost-bd)}
.btn-ghost:hover{--fg:var(--c-ghost-hover-fg); --bd:var(--c-ghost-hover-bd); background:var(--c-ghost-hover-bg)}

.btn-white{--bg:#fff; --fg:var(--navy)}
.btn-white:hover{--fg:var(--blue)}

/* Kein Bonbon-Grün neben dem Blau — sonst wirkt die Seite wie eine Consumer-App. */
.btn-wa{--bg:transparent; --fg:var(--c-head); --bd:var(--c-ghost-bd)}
/* Auf Weiß ist das helle WhatsApp-Grün fast unsichtbar (1,9:1) — dort dunkler. */
.btn-wa .ic{color:#0F7A3D}
:is(.hero,.phero,.on-dark,.on-deep,.band,.cat) .btn-wa .ic{color:#25D366}
.btn-wa:hover{--bd:#25D366; background:rgba(37,211,102,.12)}
.btn-wa::before{display:none}

.btn-sm{padding:11px 19px; font-size:var(--t-xs)}
.btn-lg{padding:clamp(18px,1.36vw,25px) clamp(30px,2.4vw,44px); font-size:var(--t-body)}
.btn-block{width:100%}

.btn-row{display:flex; flex-wrap:wrap; gap:clamp(10px,.9vw,16px); align-items:center}

/* Textlink mit gleitendem Pfeil */
.tlink{
  display:inline-flex; align-items:center; gap:.5em; font-weight:600; font-size:var(--t-sm);
  color:var(--c-accent); position:relative; padding-block:6px 8px; min-height:34px;
}
.tlink .ic{width:1.05em; height:1.05em; transition:transform .38s var(--ease-out)}
.tlink::after{content:''; position:absolute; left:0; right:1.55em; bottom:6px; height:1.5px; background:currentColor; transform:scaleX(0); transform-origin:left; transition:transform .42s var(--ease-out)}
.tlink:hover::after{transform:scaleX(1)}
.tlink:hover .ic{transform:translateX(4px)}

.ic{width:24px; height:24px; flex:none; fill:none}
/* Flächige Inline-Icons (z. B. das Facebook-Logo) bringen fill="currentColor"
   mit — die Regel darüber würde es überstimmen und das Icon unsichtbar machen. */
svg.ic[fill="currentColor"]{fill:currentColor}

/* ========================= 5 · HEADER & MENÜ ============================= */
/* Feste Höhe statt min-height, und die Trennlinie als inset-Schatten statt als
   Rahmen: nur so ist die Topbar-Höhe exakt --topbar-h. Der Hero rechnet damit,
   sonst ragt er um ein paar Pixel über den Bildschirmrand. */
.topbar{
  background:var(--navy-900); color:var(--on-dark-2); font-size:var(--t-xs); line-height:1.25;
  box-shadow:inset 0 -1px 0 rgba(255,255,255,.06); position:relative; z-index:60;
}
.topbar-in{display:flex; align-items:center; justify-content:space-between; gap:12px 20px; min-height:var(--topbar-h); flex-wrap:wrap}
.topbar a,.topbar-l span{display:inline-flex; align-items:center; gap:.5em; min-height:32px; transition:color .25s}
.topbar a:hover{color:#fff}
.topbar .ic{width:1.05em; height:1.05em}
.topbar-l{display:flex; gap:clamp(14px,1.6vw,30px); align-items:center}
.topbar-r{display:flex; gap:clamp(14px,1.6vw,26px); align-items:center}

.hdr{
  position:sticky; top:0; z-index:70; background:transparent;
  transition:background .42s var(--ease), box-shadow .42s var(--ease), backdrop-filter .42s;
}
.hdr::after{content:''; position:absolute; left:0; right:0; bottom:0; height:1px; background:var(--line); opacity:0; transition:opacity .42s}
.hdr-in{display:flex; align-items:center; gap:clamp(14px,1.5vw,32px); min-height:var(--hdr-h); transition:min-height .42s var(--ease)}
.hdr.is-stuck{background:rgba(255,255,255,.9); backdrop-filter:saturate(180%) blur(18px); -webkit-backdrop-filter:saturate(180%) blur(18px); box-shadow:0 6px 30px rgba(10,26,46,.07)}
.hdr.is-stuck::after{opacity:1}
.hdr.is-stuck .hdr-in{min-height:70px}

/* Über dunklem Hero: Header transparent, Inhalte weiß. Bei offenem Menü
   liegt der weiße Drawer darunter — dann gilt wieder die dunkle Variante. */
body:not(.menu-open) .hdr.over-hero:not(.is-stuck){color:#fff}
body:not(.menu-open) .hdr.over-hero:not(.is-stuck) .logo-txt strong{color:#fff}
body:not(.menu-open) .hdr.over-hero:not(.is-stuck) .logo-txt span{color:rgba(255,255,255,.62)}
body:not(.menu-open) .hdr.over-hero:not(.is-stuck) .mainnav > li > a{color:rgba(255,255,255,.9)}
body:not(.menu-open) .hdr.over-hero:not(.is-stuck) .mainnav > li > a:hover{color:#fff}
body:not(.menu-open) .hdr.over-hero:not(.is-stuck) .hdr-tel{color:#fff; border-color:rgba(255,255,255,.28)}
body:not(.menu-open) .hdr.over-hero:not(.is-stuck) .hdr-tel:hover{background:rgba(255,255,255,.14)}
body:not(.menu-open) .hdr.over-hero:not(.is-stuck) .logo-mark{color:#fff}

body:not(.menu-open) .hdr.over-hero:not(.is-stuck) .burger i{background:#fff}

.logo{display:inline-flex; align-items:center; gap:.72em; flex:none}
/* Die Bildmarke färbt sich über --c-head: dunkel auf hellem Grund,
   weiß im Footer und über dem Hero. */
.logo-mark{
  width:clamp(46px,3.5vw,60px); aspect-ratio:1; flex:none;
  display:grid; place-items:center; color:var(--c-head);
  transition:color .3s var(--ease), opacity .3s var(--ease);
}
.logo-mark svg{width:100%; height:100%}
.logo:hover .logo-mark{opacity:.78}
.logo-txt{display:flex; flex-direction:column; line-height:1.08}
.logo-txt strong{font-size:clamp(16.5px,1.12vw,21px); font-weight:650; letter-spacing:-.026em; color:var(--ink)}
.logo-txt span{font-size:clamp(11px,.72vw,13.5px); font-weight:500; letter-spacing:.085em; text-transform:uppercase; color:var(--ink-3)}

.mainnav{display:flex; align-items:center; gap:clamp(2px,.5vw,10px)}
/* Das margin-left:auto muss auf dem <nav> sitzen — das ist das Flex-Kind des
   Headers, nicht die Liste darin. Sonst rückt alles nach links: Am Desktop
   endete der „Jetzt anfragen“-Knopf weit vor dem Rand, am Handy stand der
   Burger direkt neben dem Logo. */
.hdr-in > nav{margin-left:auto}
.mainnav > li{position:relative}
.mainnav > li > a{
  display:flex; align-items:center; gap:.5em; padding:10px clamp(9px,.75vw,14px);
  /* gedeckelt: ungebremst mit vw wachsend wurde der Header auf großen
     Monitoren breiter als das Seitenraster */
  border-radius:3px; font-size:min(var(--t-sm),17px); font-weight:520; color:var(--ink-2);
  letter-spacing:-.01em; white-space:nowrap;
  transition:color .26s var(--ease), background .26s var(--ease);
}
.mainnav > li > a .ic{width:1.3em; height:1.3em; stroke-width:1.6; opacity:.72; transition:opacity .26s, transform .4s var(--ease-out), color .26s}
.mainnav > li > a:hover{color:var(--ink); background:rgba(27,90,224,.06)}
.mainnav > li > a:hover .ic{opacity:1; color:var(--blue); transform:translateY(-1.5px)}
.mainnav > li > a[aria-current="page"]{color:var(--blue); font-weight:620}
.mainnav > li > a[aria-current="page"] .ic{opacity:1; color:var(--blue)}
.mainnav > li > a[aria-current="page"]::after{
  content:''; position:absolute; left:50%; bottom:2px; transform:translateX(-50%);
  width:16px; height:2px; border-radius:2px; background:currentColor;
}

.hdr-right{display:flex; align-items:center; gap:clamp(8px,.8vw,14px); flex:none}
.hdr-right .btn-sm{font-size:min(var(--t-xs),16px)}
.hdr-tel{
  display:inline-flex; align-items:center; gap:.55em; padding:10px 15px; border-radius:3px;
  border:1.5px solid var(--line-2); font-size:min(var(--t-xs),16px); font-weight:600; color:var(--ink); white-space:nowrap;
  transition:background .26s, border-color .26s, color .26s;
}
.hdr-tel .ic{width:1.05em; height:1.05em; color:var(--blue)}
.hdr-tel:hover{border-color:var(--blue); background:var(--blue-50)}

/* justify-content zentriert die drei Striche vertikal — ohne klebten sie
   am oberen Rand des Kastens. Abstand 5px + Strich 2px = 7px Versatz beim X. */
.burger{display:none; width:44px; height:44px; border-radius:3px; flex-direction:column; align-items:center; justify-content:center; gap:5px; padding:0; border:1.5px solid var(--line-2); transition:border-color .3s}
.burger i{display:block; flex:none; width:20px; height:2px; background:var(--ink); border-radius:1px; transition:transform .42s var(--ease-out), opacity .3s, background .3s}
body.menu-open .burger i:nth-child(1){transform:translateY(7px) rotate(45deg)}
body.menu-open .burger i:nth-child(2){opacity:0}
body.menu-open .burger i:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
body:not(.menu-open) .hdr.over-hero:not(.is-stuck) .burger{border-color:rgba(255,255,255,.34)}

/* Mobile-Menü */
.drawer{
  position:fixed; inset:0; z-index:65; background:var(--paper);
  padding:calc(var(--hdr-h) + 26px) var(--gut) 30px;
  display:flex; flex-direction:column; overflow-y:auto;
  opacity:0; visibility:hidden; transform:translateY(-12px);
  transition:opacity .4s var(--ease), transform .5s var(--ease-out), visibility .4s;
}
body.menu-open .drawer{opacity:1; visibility:visible; transform:none}
.drawer-nav{display:flex; flex-direction:column; gap:4px}
.drawer-nav a{
  display:flex; align-items:center; gap:16px; padding:17px 14px; border-radius:3px;
  font-size:clamp(19px,4.6vw,24px); font-weight:600; letter-spacing:-.022em;
  border:1px solid transparent; transition:background .24s, border-color .24s;
  opacity:0; transform:translateY(14px);
}
body.menu-open .drawer-nav a{opacity:1; transform:none; transition:opacity .5s var(--ease) calc(var(--i,0)*55ms + 120ms), transform .6s var(--ease-out) calc(var(--i,0)*55ms + 120ms), background .24s}
.drawer-nav a .ic{width:26px; height:26px; color:var(--blue); stroke-width:1.6}
.drawer-nav a[aria-current="page"]{background:var(--blue-50); border-color:rgba(27,90,224,.16); color:var(--blue)}
.drawer-foot{margin-top:auto; padding-top:28px; display:grid; gap:12px}
.drawer-foot .btn{width:100%}
.drawer-meta{display:flex; flex-wrap:wrap; gap:6px 18px; padding-top:16px; border-top:1px solid var(--line); margin-top:8px}
.drawer-meta a{display:inline-flex; align-items:center; gap:.5em; min-height:34px; font-size:var(--t-xs); color:var(--ink-2)}
.drawer-meta .ic{width:1.05em; height:1.05em; color:var(--blue)}

/* Fortschrittsbalken */
.prog{position:fixed; top:0; left:0; height:2.5px; background:linear-gradient(90deg,var(--blue),var(--blue-400)); width:0; z-index:90; transition:width .1s linear}

/* WhatsApp-Bubble */
.wa-bubble{
  position:fixed; right:clamp(16px,1.6vw,28px); bottom:clamp(16px,1.6vw,28px); z-index:75;
  width:clamp(52px,3.8vw,60px); aspect-ratio:1; border-radius:4px;
  display:grid; place-items:center; background:#128C4A; color:#fff;
  box-shadow:0 6px 18px rgba(6,20,38,.35);
  transform:translateY(90px) scale(.6); opacity:0;
  transition:transform .6s var(--ease-out), opacity .4s, box-shadow .3s;
}
.wa-bubble.in{transform:none; opacity:1}
.wa-bubble:hover{background:#0F7A3D}
.wa-bubble svg{width:56%; height:56%}
.wa-tip{
  position:absolute; right:calc(100% + 12px); top:50%; transform:translateY(-50%) translateX(8px);
  background:var(--navy); color:#fff; font-size:13px; font-weight:550; white-space:nowrap;
  padding:9px 14px; border-radius:3px; opacity:0; pointer-events:none;
  transition:opacity .3s, transform .4s var(--ease-out);
}
.wa-bubble:hover .wa-tip{opacity:1; transform:translateY(-50%)}

/* Handy-Aktionsleiste: Anrufen + WhatsApp. Ersetzt unter 720px die Bubble —
   die lag dort über Formular, Kontaktkarten und Footer-Links. Sie fährt erst
   ein, wenn die Knöpfe im Hero aus dem Bild sind (main.js, Abschnitt 12). */
.mbar{display:none}

/* ============================= 6 · HERO ================================== */
/* Genau ein Bildschirm: 100svh abzüglich der Topbar. svh statt vh, damit die
   ein- und ausfahrende Browserleiste auf dem Handy nichts überstehen lässt.
   min-height (nicht height), damit nichts abgeschnitten wird, falls der Inhalt
   auf sehr flachen Fenstern doch mehr Platz braucht. */
.hero{
  position:relative; margin-top:calc(var(--hdr-h) * -1); padding-top:var(--hdr-h);
  min-height:calc(100vh - var(--topbar-h));
  min-height:calc(100svh - var(--topbar-h));
  display:flex; flex-direction:column;
  background:var(--navy-900); color:#fff; overflow:hidden;
}
.hero-media,.hero-media.ph{position:absolute; inset:0; z-index:0}
.hero-media img,.hero-media .scene{width:100%; height:100%; object-fit:cover}
/* Abdunkelung nur so stark wie nötig: links kräftig, damit die Headline steht —
   rechts fast klar, damit das Bild überhaupt zu sehen ist. */
.hero-media::after{
  content:''; position:absolute; inset:0;
  background:linear-gradient(180deg,rgba(6,20,38,.74) 0%,rgba(6,20,38,.26) 42%,rgba(6,20,38,.44) 78%,rgba(6,20,38,.86) 100%),
             linear-gradient(100deg,rgba(6,20,38,.93) 0%,rgba(6,20,38,.72) 36%,rgba(6,20,38,.26) 76%,rgba(6,20,38,.12) 100%);
}
/* Alle Abstände im Hero skalieren mit der Fensterhöhe (vh), nicht mit der
   Breite — sonst wird der Hero auf flachen Laptop-Displays zu hoch. */
.hero-in{position:relative; z-index:2; flex:1; padding-block:clamp(20px,3.4vh,54px) clamp(24px,4.2vh,62px); display:flex; flex-direction:column; justify-content:center}
.hero-badge{
  display:inline-flex; align-items:center; gap:.6em; align-self:flex-start;
  padding:7px 13px 7px 10px; border-radius:2px; margin-bottom:clamp(14px,2vh,26px);
  background:rgba(255,255,255,.07); border:1px solid rgba(160,200,255,.28);
  backdrop-filter:blur(10px); font-size:clamp(12px,.85vw,15.5px); font-weight:600; color:#fff;
  text-transform:uppercase; letter-spacing:.085em;
}
.hero-badge .dot{width:6px; height:6px; background:var(--blue-400)}
.hero h1{color:#fff; max-width:16ch; font-size:clamp(34px,min(4.9vw,8vh),80px)}
.hero h1 em{font-family:var(--serif); font-style:italic; font-weight:400; color:var(--blue-200)}
.hero .lead{margin-top:clamp(13px,1.9vh,26px); max-width:54ch; font-size:clamp(17.5px,min(1.36vw,2.3vh),25px)}
.hero .btn-row{margin-top:clamp(20px,2.8vh,38px)}
.hero-foot{
  margin-top:clamp(22px,3.4vh,52px); padding-top:clamp(15px,2.2vh,28px);
  border-top:1px solid rgba(160,200,255,.16);
  display:flex; flex-wrap:wrap; gap:clamp(10px,2vw,44px);
}
.hero-foot li{display:flex; align-items:center; gap:.55em; font-size:clamp(14.5px,min(1.05vw,1.85vh),19px); color:rgba(220,232,250,.86); font-weight:500}
.hero-foot .ic{width:1.28em; height:1.28em; color:var(--blue-400)}

/* Hero-Karte (Kurz-Anfrage rechts) */
.hero-grid{display:grid; grid-template-columns:minmax(0,1.18fr) minmax(0,.82fr); gap:clamp(28px,3.4vw,64px); align-items:center}
.hero-card{
  background:rgba(255,255,255,.07); border:1px solid rgba(160,200,255,.2); border-radius:var(--r-lg);
  padding:clamp(20px,1.7vh,28px) clamp(20px,1.5vw,28px);
  backdrop-filter:blur(22px) saturate(160%); -webkit-backdrop-filter:blur(22px) saturate(160%);
  box-shadow:0 30px 80px rgba(0,0,0,.34);
}
.hero-card h3{color:#fff; font-size:clamp(20px,min(1.48vw,2.6vh),26px)}
.hero-card .xs{color:rgba(200,218,244,.78)}
/* kompakter als die großen Formulare — die Karte muss mit auf den Bildschirm */
.hero-card .form{gap:clamp(9px,1.2vh,14px)}
.hero-card .field{gap:5px}
.hero-card .inp{padding:clamp(10px,1.3vh,13px) 14px}
.hero-card .btn{padding:clamp(12px,1.6vh,15px) 22px}

/* Seiten-Hero (Unterseiten) */
.phero{position:relative; margin-top:calc(var(--hdr-h) * -1); padding-top:var(--hdr-h); background:var(--navy-900); color:#fff; overflow:hidden}
.phero-media,.phero-media.ph{position:absolute; inset:0; z-index:0}
.phero-media img{width:100%; height:100%; object-fit:cover}
.phero-media::after{content:''; position:absolute; inset:0; background:linear-gradient(100deg,rgba(6,20,38,.9) 0%,rgba(6,20,38,.6) 48%,rgba(6,20,38,.2) 100%),linear-gradient(180deg,rgba(6,20,38,.5),rgba(6,20,38,.72))}
.phero-in{position:relative; z-index:2; padding-block:clamp(58px,6.6vw,104px) clamp(60px,6.4vw,104px)}
.phero h1{color:#fff; max-width:16ch}
.phero .lead{margin-top:clamp(16px,1.4vw,24px); max-width:52ch; color:rgba(233,241,255,.85)}
.phero .btn-row{margin-top:clamp(26px,2.4vw,38px)}

/* Brotkrumen */
.crumbs{display:flex; flex-wrap:wrap; align-items:center; gap:.5em; font-size:var(--t-xs); color:rgba(203,222,248,.88); margin-bottom:clamp(16px,1.5vw,26px)}
.crumbs a{display:inline-flex; align-items:center; min-height:30px; transition:color .24s}
.crumbs a:hover{color:#fff}
.crumbs .sep{opacity:.7}
.crumbs [aria-current]{color:#fff; font-weight:550}

/* ====================== 7 · TRUST / ZAHLEN =============================== */
.trust{position:relative; z-index:3; margin-top:calc(clamp(46px,4.4vw,74px) * -1)}
.trust-in{
  background:var(--paper); border:1px solid var(--line); border-radius:var(--r-xl);
  box-shadow:var(--sh-2); padding:clamp(24px,2.4vw,42px) clamp(20px,2vw,34px);
  display:grid; grid-template-columns:repeat(4,1fr); gap:clamp(16px,1.6vw,28px);
}
.trust-item{text-align:center; position:relative; padding-inline:8px}
.trust-item + .trust-item::before{content:''; position:absolute; left:calc(clamp(16px,1.6vw,28px)/-2); top:12%; bottom:12%; width:1px; background:var(--line)}
.stat{
  display:block; font-size:var(--t-num); font-weight:640; letter-spacing:-.045em; line-height:1;
  color:var(--navy); font-variant-numeric:tabular-nums; font-weight:700;
}
.stat .suf{color:var(--blue)}
.trust-item .lbl{display:block; margin-top:.7em; font-size:var(--t-xs); font-weight:550; color:var(--ink-2); letter-spacing:-.004em}
.trust-item .ic{width:22px; height:22px; margin:0 auto .7em; color:var(--blue); opacity:.9}

/* Logo-/Marken-Leiste */
.brands{display:flex; flex-wrap:wrap; align-items:center; justify-content:center; gap:clamp(20px,3vw,60px)}
.brands span{font-size:clamp(15px,1.15vw,21px); font-weight:600; letter-spacing:-.02em; color:var(--ink-3); opacity:.72; transition:opacity .3s, color .3s}
.brands span:hover{opacity:1; color:var(--navy)}

/* ====================== 8 · KARTEN & RASTER ============================== */
.grid{display:grid; gap:clamp(16px,1.5vw,26px)}
.g-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g-4{grid-template-columns:repeat(4,minmax(0,1fr))}
/* Fünf Karten: drei oben, zwei darunter mittig */
.g-5{grid-template-columns:repeat(6,minmax(0,1fr))}
.g-5 > *{grid-column:span 2}
.g-5 > :nth-child(4){grid-column:2 / span 2}
.split{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:clamp(30px,4.6vw,88px); align-items:center}
.split--wide-l{grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr)}

/* Produkt-Karte (groß, mit Bild) */
.pcard{
  position:relative; display:flex; flex-direction:column; overflow:hidden;
  border-radius:var(--r-lg); background:var(--paper); border:1px solid var(--line-2);
  transition:transform .55s var(--ease-out), box-shadow .55s var(--ease-out), border-color .4s;
}
.pcard:hover{transform:translateY(-3px); box-shadow:var(--sh-3); border-color:transparent}
.pcard-media{position:relative; aspect-ratio:4/3.05; overflow:hidden; background:var(--sky)}
.pcard-media img{width:100%; height:100%; object-fit:cover; transition:transform 1.05s var(--ease-out)}
.pcard:hover .pcard-media img{transform:scale(1.03)}
.pcard-media::after{
  content:''; position:absolute; inset:0;
  background:linear-gradient(180deg,transparent 42%,rgba(6,20,38,.72) 100%);
  opacity:.82; transition:opacity .5s var(--ease);
}
.pcard:hover .pcard-media::after{opacity:1}
.pcard-ic{
  position:absolute; left:clamp(16px,1.3vw,22px); top:clamp(16px,1.3vw,22px); z-index:2;
  width:clamp(44px,3.3vw,54px); aspect-ratio:1; border-radius:3px; display:grid; place-items:center;
  background:rgba(255,255,255,.92); color:var(--blue); backdrop-filter:blur(10px);
  box-shadow:0 6px 20px rgba(6,20,38,.2);
  transition:background .4s var(--ease), color .4s var(--ease), transform .5s var(--ease-out);
}
.pcard-ic .ic{width:56%; height:56%; stroke-width:1.55}
.pcard:hover .pcard-ic{background:var(--blue); color:#fff}
.pcard-title{position:absolute; left:clamp(18px,1.5vw,26px); right:clamp(18px,1.5vw,26px); bottom:clamp(16px,1.3vw,22px); z-index:2; color:#fff}
.pcard-title h3{color:#fff}
.pcard-title .xs{color:rgba(220,232,250,.8); margin-top:.35em}
.pcard-body{padding:clamp(20px,1.7vw,28px); display:flex; flex-direction:column; gap:clamp(14px,1.2vw,20px); flex:1}
.pcard-body p{color:var(--ink-2); font-size:var(--t-sm)}
.pcard-body p strong{color:var(--ink); font-weight:640}
.pcard-list{display:flex; flex-wrap:wrap; gap:7px}
.chip{
  display:inline-flex; align-items:center; gap:.42em; padding:7.5px 13px; border-radius:3px;
  background:var(--mist); border:1px solid var(--line-2); font-size:clamp(13.5px,.89vw,16.5px);
  font-weight:600; color:var(--c-body); letter-spacing:.005em;
}
.chip .ic{width:1.05em; height:1.05em; color:var(--blue)}
.pcard .tlink{margin-top:auto}
.pcard-link{position:absolute; inset:0; z-index:3}

/* Varianten-Kachel (Produktseiten) */
.vcard{
  position:relative; display:flex; flex-direction:column; overflow:hidden; border-radius:var(--r);
  background:var(--paper); border:1px solid var(--line-2);
  transition:transform .5s var(--ease-out), box-shadow .5s var(--ease-out), border-color .4s;
}
.vcard:hover{transform:translateY(-2px); box-shadow:var(--sh-2); border-color:var(--line-2)}
.vcard-media{aspect-ratio:16/10.4; overflow:hidden; background:var(--sky); position:relative}
.vcard-media img{width:100%; height:100%; object-fit:cover; transition:transform .95s var(--ease-out)}
.vcard:hover .vcard-media img{transform:scale(1.03)}
.vcard-ic{
  position:absolute; right:12px; top:12px; width:38px; aspect-ratio:1; border-radius:3px;
  display:grid; place-items:center; background:rgba(255,255,255,.94); color:var(--blue);
  box-shadow:0 4px 14px rgba(6,20,38,.16);
}
.vcard-ic .ic{width:58%; height:58%}
.vcard-body{padding:clamp(17px,1.4vw,24px); display:flex; flex-direction:column; gap:12px; flex:1}
.vcard-body h3{font-size:var(--t-h4)}
.ticks{display:grid; gap:8px}
.ticks li > span{min-width:0; overflow-wrap:break-word; hyphens:auto}
/* Materialkarten mit längeren Texten: am Desktop Bild links, Text rechts */
@media (min-width:1101px){
  .g-quer > .vcard{flex-direction:row}
  .g-quer .vcard-media{aspect-ratio:auto; flex:0 0 38%}
  .g-quer .vcard-body{justify-content:center}
}
.ticks-head{font-size:var(--t-h4); margin-top:1.7em}
/* Leitsatz, z. B. „Persönlich beraten. Fachgerecht umgesetzt. Zuverlässig betreut.“ */
.claim{margin-top:1.4em; padding-left:14px; border-left:3px solid var(--c-accent); font-weight:640; letter-spacing:-.012em; color:var(--c-head); line-height:1.4}
.ticks li{display:flex; gap:.66em; font-size:var(--t-sm); color:var(--c-body); line-height:1.45}
.ticks .ic{width:1.05em; height:1.05em; margin-top:.34em; color:var(--c-accent); stroke-width:2.4}

/* USP-/Feature-Kachel */
.fcard{
  position:relative; padding:clamp(22px,1.9vw,34px); border-radius:var(--r);
  background:var(--paper); border:1px solid var(--line-2); overflow:hidden;
  transition:transform .5s var(--ease-out), box-shadow .5s var(--ease-out), border-color .4s;
}
.fcard::before{
  content:''; position:absolute; left:0; top:0; height:3px; width:100%;
  background:linear-gradient(90deg,var(--blue),var(--blue-400));
  transform:scaleX(0); transform-origin:left; transition:transform .6s var(--ease-out);
}
.fcard:hover{transform:translateY(-2px); box-shadow:var(--sh-2)}
.fcard:hover::before{transform:scaleX(1)}
.fcard-ic{
  width:clamp(52px,3.8vw,64px); aspect-ratio:1; border-radius:3px; display:grid; place-items:center;
  background:transparent; border:1.5px solid var(--line-2); color:var(--blue); margin-bottom:clamp(16px,1.3vw,22px);
  transition:background .35s var(--ease), color .35s var(--ease), border-color .35s var(--ease);
}
.fcard-ic .ic{width:54%; height:54%; stroke-width:1.55}
.fcard:hover .fcard-ic{background:var(--blue); border-color:var(--blue); color:#fff}
.fcard h3{font-size:var(--t-h4); margin-bottom:.5em}
.fcard p{font-size:var(--t-sm); color:var(--c-body)}
/* Merksatz unter dem Text, z. B. „Mehr Qualität fürs Geld.“ */
.fcard p.fcard-tag{margin-top:.9em; font-weight:640; color:var(--c-accent); letter-spacing:-.01em}
:is(.on-dark,.on-deep,.band,.cat) .fcard{background:rgba(255,255,255,.04); border-color:var(--dark-line)}
:is(.on-dark,.on-deep,.band,.cat) .fcard-ic{background:transparent; border-color:rgba(160,200,255,.3); color:var(--blue-200)}
:is(.on-dark,.on-deep,.band,.cat) .fcard:hover .fcard-ic{background:var(--blue-400); border-color:var(--blue-400); color:#04101f}

/* Bild-Platzhalter-System */
/* Bild-Platzhalter-System
   WICHTIG: Die Markierung sitzt auf ::before, nicht auf ::after. Mehrere
   Bildcontainer (.hero-media, .pcard-media) nutzen ::after bereits für ihren
   Abdunkelungs-Verlauf. Beide auf demselben Pseudo-Element würden verschmelzen —
   der Verlauf verschwindet und die Markierung wird über die ganze Fläche gezogen. */
.ph{position:relative; overflow:hidden; background:var(--sky); border-radius:inherit}
.ph > img{width:100%; height:100%; object-fit:cover}
.ph[data-ph]::before{
  content:attr(data-ph); position:absolute; inset:auto 10px 10px auto; z-index:5;
  max-width:calc(100% - 20px); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  font-size:9.5px; font-weight:600; letter-spacing:.05em; text-transform:uppercase; line-height:1;
  padding:4px 7px; border-radius:2px; background:rgba(6,20,38,.55); color:rgba(255,255,255,.8);
  backdrop-filter:blur(6px); pointer-events:none;
}
body.no-ph .ph[data-ph]::before{content:none}
/* Wo unten schon etwas steht (Kartentitel, WhatsApp-Knopf), wandert die
   Markierung nach oben. */
.pcard-media.ph[data-ph]::before{inset:12px 12px auto auto}
:is(.hero-media,.phero-media).ph[data-ph]::before{inset:calc(var(--hdr-h) + 14px) 14px auto auto}

/* Zweispalter Text + Bild */
.figblock{position:relative; border-radius:var(--r-lg); overflow:hidden; box-shadow:var(--sh-2)}
.figblock img{width:100%; height:100%; object-fit:cover; aspect-ratio:4/3.4}
.figblock--tall img{aspect-ratio:3/3.7}
.fig-note{
  position:absolute; left:clamp(14px,1.2vw,20px); right:clamp(14px,1.2vw,20px); bottom:clamp(14px,1.2vw,20px); z-index:3;
  background:rgba(255,255,255,.94); backdrop-filter:blur(14px); border-radius:3px;
  padding:14px 18px; display:flex; align-items:center; gap:14px; box-shadow:var(--sh-1);
}
.fig-note .ic{width:26px; height:26px; color:var(--blue); flex:none}
.fig-note strong{display:block; font-size:var(--t-sm); letter-spacing:-.014em}
.fig-note span{font-size:var(--t-xs); color:var(--ink-3)}

/* Zitat-/Inhaber-Block */
.owner{display:flex; gap:clamp(14px,1.2vw,20px); align-items:center; padding-top:clamp(20px,1.8vw,30px); margin-top:clamp(20px,1.8vw,30px); border-top:1px solid var(--c-hair)}
.owner-av{width:clamp(48px,3.6vw,60px); aspect-ratio:1; border-radius:3px; overflow:hidden; background:var(--blue-50); display:grid; place-items:center; color:var(--blue); font-weight:650; font-size:clamp(16px,1.1vw,20px); flex:none; border:1px solid var(--line)}
.owner strong{display:block; font-size:var(--t-sm); letter-spacing:-.014em}
.owner strong{color:var(--c-head)}
.owner span{font-size:var(--t-xs); color:var(--c-faint)}

/* ============================ 9 · PROZESS ================================ */
.proc{position:relative}
.proc-grid{display:grid; grid-template-columns:minmax(0,.82fr) minmax(0,1.18fr); gap:clamp(30px,5vw,90px); align-items:start}
.proc-sticky{position:sticky; top:calc(var(--hdr-h) + clamp(24px,3vw,60px))}
.proc-count{display:flex; align-items:baseline; gap:.3em; margin-top:clamp(24px,2.2vw,40px); font-variant-numeric:tabular-nums}
.proc-count b{font-size:clamp(52px,5vw,86px); font-weight:640; letter-spacing:-.05em; line-height:1; color:#fff; transition:opacity .3s}
.proc-count span{font-size:var(--t-h4); color:var(--on-dark-3)}
.proc-bar{margin-top:clamp(20px,1.8vw,30px); height:3px; border-radius:3px; background:rgba(160,200,255,.18); overflow:hidden; max-width:280px}
.proc-bar i{display:block; height:100%; width:0; border-radius:3px; background:linear-gradient(90deg,var(--blue-400),var(--blue-200)); transition:width .5s var(--ease-out)}

.steps{position:relative; display:grid; gap:clamp(14px,1.4vw,22px)}
.steps::before{content:''; position:absolute; left:clamp(23px,1.85vw,31px); top:34px; bottom:34px; width:1.5px; background:rgba(160,200,255,.16)}
.steps-fill{position:absolute; left:clamp(23px,1.85vw,31px); top:34px; width:1.5px; height:0; background:linear-gradient(180deg,var(--blue-400),var(--blue-200)); transition:height .5s var(--ease-out)}
.step{
  position:relative; display:grid; grid-template-columns:clamp(48px,3.8vw,62px) 1fr; gap:clamp(16px,1.5vw,26px);
  padding:clamp(18px,1.5vw,26px) clamp(18px,1.5vw,26px) clamp(18px,1.5vw,26px) 0;
  border-radius:var(--r); transition:background .5s var(--ease), transform .55s var(--ease-out);
}
.step-dot{
  position:relative; z-index:2; width:clamp(48px,3.8vw,62px); aspect-ratio:1; border-radius:3px;
  display:grid; place-items:center; background:var(--navy-800); border:1.5px solid rgba(160,200,255,.2);
  color:var(--on-dark-3); transition:background .5s var(--ease), color .5s var(--ease), border-color .5s var(--ease), transform .6s var(--ease-out);
}
.step-dot .ic{width:46%; height:46%; stroke-width:1.6}
/* Inaktive Schritte sind gedämpft, bleiben aber kontraststark genug zum Lesen. */
.step h3{color:var(--on-dark-2); font-size:var(--t-h4); transition:color .5s var(--ease)}
.step p{font-size:var(--t-sm); color:var(--on-dark-2); margin-top:.5em; max-width:48ch; opacity:.78; transition:opacity .5s, color .5s}
.step-no{font-size:var(--t-xs); font-weight:600; letter-spacing:.09em; color:var(--on-dark-3); display:block; margin-bottom:.5em; transition:color .5s}
.step.is-on{background:rgba(255,255,255,.05)}
.step.is-on .step-dot{background:var(--blue); border-color:var(--blue); color:#fff}
.step.is-on h3{color:#fff}
.step.is-on p{color:var(--on-dark-2); opacity:1}
.step p strong{display:block; margin-top:.55em; color:#fff; font-weight:620}
.step.is-on .step-no{color:var(--blue-200)}
/* Ohne JavaScript gibt es kein Scroll-Highlight — dann alle Schritte voll anzeigen. */
html:not(.js) .step{background:rgba(255,255,255,.05)}
html:not(.js) .step-dot{background:var(--blue); border-color:var(--blue-400); color:#fff}
html:not(.js) .step h3{color:#fff}
html:not(.js) .step p{opacity:1}
html:not(.js) .step-no{color:var(--blue-200)}

/* ====================== 10 · FAQ / KUNDENSTIMMEN ========================= */
.faq{display:grid; gap:0; border-top:1px solid var(--line)}
.faq-item{border-bottom:1px solid var(--line)}
.faq-q{
  width:100%; display:flex; align-items:flex-start; gap:clamp(14px,1.4vw,26px); text-align:left;
  padding:clamp(20px,1.7vw,30px) 0; font-size:clamp(17px,1.28vw,23px); font-weight:600;
  letter-spacing:-.02em; line-height:1.32; color:var(--ink); transition:color .3s;
}
.faq-q:hover{color:var(--blue)}
.faq-q .num{font-size:var(--t-xs); font-weight:600; color:var(--blue); padding-top:.42em; flex:none; font-variant-numeric:tabular-nums}
.faq-q .plus{
  margin-left:auto; flex:none; width:clamp(32px,2.4vw,40px); aspect-ratio:1; border-radius:3px;
  display:grid; place-items:center; border:1.5px solid var(--line-2); color:var(--blue);
  transition:background .35s var(--ease), border-color .35s, transform .5s var(--ease-out), color .35s;
}
.faq-q .plus .ic{width:52%; height:52%; transition:transform .45s var(--ease-out)}
.faq-q:hover .plus{border-color:var(--blue); background:var(--blue-50)}
.faq-item.open .plus{background:var(--blue); border-color:var(--blue); color:#fff; transform:rotate(135deg)}
.faq-a{display:grid; grid-template-rows:0fr; transition:grid-template-rows .55s var(--ease-out)}
.faq-item.open .faq-a{grid-template-rows:1fr}
.faq-a > div{overflow:hidden}
.faq-a p{padding:0 0 0 calc(clamp(14px,1.4vw,26px) + 2.4em); color:var(--ink-2); font-size:var(--t-sm); max-width:80ch}
.faq-a p + p{margin-top:.75em}
.faq-a > div > :last-child{padding-bottom:clamp(22px,1.9vw,32px)}
.faq-a strong{color:var(--ink); font-weight:640}

/* Kundenstimmen */
.tst{position:relative; overflow:hidden}
.tst-track{display:flex; transition:transform .72s var(--ease-out)}
.tst-slide{flex:0 0 100%; padding-inline:2px}
.tst-card{
  background:var(--paper); border:1px solid var(--line); border-radius:var(--r-lg);
  padding:clamp(26px,2.6vw,50px); box-shadow:var(--sh-1); position:relative;
}
.tst-card > .ic-quote{width:clamp(34px,2.6vw,44px); height:clamp(34px,2.6vw,44px); color:var(--blue); opacity:.16; margin-bottom:clamp(14px,1.2vw,20px)}
.tst-stars{display:flex; gap:3px; margin-bottom:clamp(14px,1.2vw,20px)}
/* Etwas dunkleres Gold: die Sterne tragen die Bewertung, sie müssen sich
   auf Weiß deutlich abheben (helles Gold kam nur auf 2,1:1). */
.tst-stars .ic{width:17px; height:17px; color:#B77908; fill:currentColor}
.tst-card blockquote{margin:0; font-size:clamp(18px,1.5vw,27px); line-height:1.42; letter-spacing:-.022em; font-weight:500; color:var(--ink)}
.tst-meta{display:flex; align-items:center; gap:14px; margin-top:clamp(20px,1.8vw,30px); padding-top:clamp(18px,1.6vw,26px); border-top:1px solid var(--line)}
.tst-meta strong{display:block; font-size:var(--t-sm); letter-spacing:-.014em; color:var(--ink); line-height:1.3}
.tst-meta .xs{display:block; margin-top:.15em}
.tst-ctrl{display:flex; align-items:center; gap:10px; margin-top:clamp(20px,1.8vw,30px)}
.tst-btn{width:46px; aspect-ratio:1; border-radius:3px; border:1.5px solid var(--line-2); display:grid; place-items:center; color:var(--ink); transition:background .3s, border-color .3s, color .3s}
.tst-btn:hover{background:var(--blue); border-color:var(--blue); color:#fff}
.tst-btn .ic{width:20px; height:20px}
.tst-btn.prev .ic{transform:rotate(180deg)}
/* Die Punkte bleiben optisch klein, die Klickfläche ist aber 30×40 px groß —
   8 px hohe Schaltflächen sind auf dem Handy nicht treffbar. */
.tst-dots{display:flex; margin-left:auto}
.tst-dots button{width:34px; height:40px; display:grid; place-items:center; background:none}
.tst-dots button::before{
  content:''; width:9px; height:3px; background:var(--line-2);
  transition:background .3s, width .4s var(--ease-out);
}
.tst-dots button:hover::before{background:var(--blue-200)}
.tst-dots button[aria-current="true"]::before{background:var(--blue); width:26px}

/* Google-Hinweis */
.g-hint{display:inline-flex; align-items:center; gap:.6em; font-size:var(--t-xs); color:var(--ink-3); padding:8px 14px; border-radius:3px; background:var(--mist); border:1px dashed var(--line-2)}

/* =========================== 11 · FORMULARE ============================== */
.form{display:grid; gap:clamp(13px,1.05vw,18px)}
.frow{display:grid; grid-template-columns:1fr 1fr; gap:clamp(13px,1.05vw,18px)}
.field{position:relative; display:flex; flex-direction:column; gap:7px}
.field > label{font-size:var(--t-xs); font-weight:600; color:var(--ink-2); letter-spacing:-.004em}
.field .req{color:var(--blue)}
.inp{
  width:100%; padding:14px 16px; border-radius:3px; background:var(--paper);
  border:1.5px solid var(--line-2); color:var(--ink);
  /* nie unter 16px: sonst zoomt Safari auf iPhone/iPad beim Antippen hinein */
  font-size:max(16px, var(--t-sm));
  transition:border-color .28s, box-shadow .28s, background .28s;
}
.inp::placeholder{color:var(--ink-3); opacity:.72}
.inp:hover{border-color:#BECBDD}
.inp:focus{outline:none; border-color:var(--blue); box-shadow:0 0 0 4px rgba(27,90,224,.12)}
textarea.inp{min-height:128px; resize:vertical; line-height:1.55}
select.inp{
  appearance:none; cursor:pointer; padding-right:44px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236C7E97' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m6 9.5 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 14px center; background-size:18px 18px;
}
.field.err .inp{border-color:#D6455B; box-shadow:0 0 0 4px rgba(214,69,91,.1)}
.emsg{display:none; font-size:12.5px; color:#C0394E; font-weight:550}
.field.err .emsg{display:block}

.check{display:flex; gap:12px; align-items:flex-start; cursor:pointer; font-size:var(--t-xs); color:var(--ink-2); line-height:1.5}
.check input{position:absolute; opacity:0; width:0; height:0}
.check .box{
  width:21px; height:21px; flex:none; border-radius:2px; border:1.5px solid var(--line-2);
  display:grid; place-items:center; background:var(--paper); margin-top:1px;
  transition:background .25s, border-color .25s;
}
.check .box .ic{width:13px; height:13px; color:#fff; opacity:0; transform:scale(.5); transition:opacity .22s, transform .32s var(--ease-out); stroke-width:3}
.check input:checked + .box{background:var(--blue); border-color:var(--blue)}
.check input:checked + .box .ic{opacity:1; transform:none}
.check input:focus-visible + .box{outline:2.5px solid var(--blue-400); outline-offset:2px}
.check a{color:var(--blue); text-decoration:underline; text-underline-offset:2px}
.check.err .box{border-color:#D6455B}

/* Auswahl-Kacheln (Interesse an) */
.pick{display:grid; grid-template-columns:repeat(3,1fr); gap:9px}
.pick label{
  position:relative; display:flex; flex-direction:column; align-items:center; gap:7px; cursor:pointer;
  padding:14px 8px; border-radius:3px; border:1.5px solid var(--line-2); background:var(--paper);
  font-size:var(--t-xs); font-weight:600; color:var(--ink-2); text-align:center;
  transition:border-color .28s, background .28s, color .28s, transform .4s var(--ease-out);
}
.pick label .ic{width:24px; height:24px; color:var(--blue); opacity:.8; transition:opacity .28s}
.pick input{position:absolute; opacity:0}
.pick label:hover{border-color:var(--blue)}
.pick input:checked + span{color:var(--blue)}
.pick label:has(input:checked){border-color:var(--blue); background:var(--blue-50); color:var(--blue)}
.pick label:has(input:checked) .ic{opacity:1}
.pick input:focus-visible ~ .ic{outline:2px solid var(--blue-400); outline-offset:4px; border-radius:4px}

/* Formularkarte */
.fcardbox{background:var(--paper); border:1px solid var(--line); border-radius:var(--r-lg); padding:clamp(24px,2.3vw,42px); box-shadow:var(--sh-2)}
/* Formulare auf dunklem Grund — gilt für jede .fcardbox in einem dunklen
   Abschnitt und für die Glas-Karte im Hero. Die Abschnittsliste muss dieselbe
   sein wie oben bei den Kontextfarben. */
:is(.on-dark,.on-deep,.band,.cat) .fcardbox{background:rgba(255,255,255,.055); border-color:var(--dark-line); box-shadow:none}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox,.hero-card{--c-head:#fff; --c-body:var(--on-dark-2); --c-faint:var(--on-dark-3); --c-accent:var(--blue-200)}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .field > label,.hero-card .field > label{color:var(--c-body)}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .req,.hero-card .req{color:var(--blue-200)}
/* Nur background-COLOR setzen — die Kurzform „background" würde das
   Pfeil-Icon der Auswahlfelder zurücksetzen (kachelt sonst über die Feldbreite). */
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .inp,.hero-card .inp{background-color:rgba(255,255,255,.08); border-color:rgba(160,200,255,.24); color:#fff}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .inp::placeholder,.hero-card .inp::placeholder{color:rgba(200,218,244,.62)}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .inp:hover,.hero-card .inp:hover{border-color:rgba(160,200,255,.42)}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .inp:focus,.hero-card .inp:focus{border-color:var(--blue-400); background-color:rgba(255,255,255,.13); box-shadow:0 0 0 4px rgba(63,134,255,.2)}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .check,.hero-card .check{color:var(--c-body)}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .check .box,.hero-card .check .box{background:rgba(255,255,255,.1); border-color:rgba(160,200,255,.34)}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .check input:checked + .box,.hero-card .check input:checked + .box{background:var(--blue-400); border-color:var(--blue-400)}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .check input:checked + .box .ic,.hero-card .check input:checked + .box .ic{color:#04101f}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .check a,.hero-card .check a{color:var(--blue-200)}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .emsg,.hero-card .emsg{color:#FF9AA8}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .field.err .inp,.hero-card .field.err .inp{border-color:#FF7C8E}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .pick label{background:rgba(255,255,255,.05); border-color:rgba(160,200,255,.2); color:var(--c-body)}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .pick label .ic{color:var(--blue-200)}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .pick label:has(input:checked){background:rgba(63,134,255,.2); border-color:var(--blue-400); color:#fff}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox select.inp,.hero-card select.inp{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23A9BEDC' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m6 9.5 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 14px center; background-size:18px 18px;
}
/* Aufklapplisten werden vom Betriebssystem gezeichnet — dort immer hell lassen,
   sonst steht auf manchen Systemen weiß auf weiß. */
select.inp option{color:var(--ink); background:#fff}

/* Fehlermeldung beim Versand */
.form-err{margin:0; padding:12px 14px; border-radius:3px; border:1px solid #F1C4CB; background:#FDF1F3; color:#A3283C; font-size:var(--t-xs); line-height:1.5}
.form-err a{color:inherit; font-weight:650; text-decoration:underline; text-underline-offset:2px}
:is(.on-dark,.on-deep,.band,.cat) .fcardbox .form-err,.hero-card .form-err{background:rgba(255,124,142,.12); border-color:rgba(255,124,142,.4); color:#FFC2CB}

/* Erfolgsmeldung */
.sent{display:none; text-align:center; padding:clamp(26px,2.6vw,44px) clamp(18px,1.6vw,28px)}
.sent.show{display:block; animation:pop .6s var(--ease-out)}
.sent-ic{width:62px; aspect-ratio:1; border-radius:4px; display:grid; place-items:center; background:rgba(37,211,102,.16); color:#0F7A3D; margin:0 auto clamp(16px,1.4vw,24px)}
:is(.on-dark,.on-deep,.band,.cat) .sent-ic,.hero-card .sent-ic{background:rgba(37,211,102,.2); color:#5BE68F}
.sent-ic .ic{width:32px; height:32px; stroke-width:2.6}
@keyframes pop{from{opacity:0; transform:translateY(14px) scale(.97)} to{opacity:1; transform:none}}
.form.hide{display:none}

/* Kontakt-Kacheln */
.ctile{
  display:flex; gap:clamp(14px,1.1vw,18px); align-items:flex-start; padding:clamp(18px,1.5vw,26px);
  border-radius:var(--r); border:1px solid var(--line); background:var(--paper);
  transition:transform .45s var(--ease-out), box-shadow .45s var(--ease-out), border-color .35s;
}
a.ctile:hover{transform:translateY(-2px); box-shadow:var(--sh-2); border-color:var(--blue-200)}
.ctile-ic{width:clamp(46px,3.3vw,56px); aspect-ratio:1; border-radius:3px; display:grid; place-items:center; background:transparent; border:1.5px solid var(--line-2); color:var(--blue); flex:none; transition:background .35s, color .35s, border-color .35s}
.ctile-ic .ic{width:52%; height:52%}
a.ctile:hover .ctile-ic{background:var(--blue); border-color:var(--blue); color:#fff}
.ctile .lbl{display:block; font-size:var(--t-xs); font-weight:600; letter-spacing:.05em; text-transform:uppercase; color:var(--c-faint); margin-bottom:.35em}
.ctile strong{display:block; font-size:var(--t-sm); letter-spacing:-.014em; color:var(--c-head); font-weight:620; overflow-wrap:anywhere}
.ctile > span:last-child{min-width:0}
.ctile .sub{display:block; font-size:var(--t-xs); color:var(--c-faint); margin-top:.28em}
:is(.on-dark,.on-deep,.band,.cat,.phero,.hero) .ctile{background:rgba(255,255,255,.05); border-color:var(--dark-line)}
:is(.on-dark,.on-deep,.band,.cat,.phero,.hero) .ctile-ic{background:transparent; border-color:rgba(160,200,255,.3); color:var(--blue-200)}
:is(.on-dark,.on-deep,.band,.cat,.phero,.hero) a.ctile:hover{border-color:var(--blue-400)}
:is(.on-dark,.on-deep,.band,.cat,.phero,.hero) a.ctile:hover .ctile-ic{background:var(--blue-400); border-color:var(--blue-400); color:#04101f}

/* Karte / Anfahrt */
.mapbox{position:relative; border-radius:var(--r-lg); overflow:hidden; border:1px solid var(--line); min-height:clamp(260px,30vw,440px); background:var(--sky)}
.mapbox iframe{width:100%; height:100%; min-height:inherit; border:0; display:block; filter:grayscale(.28) contrast(1.02)}
.map-card{
  position:absolute; left:clamp(14px,1.2vw,22px); bottom:clamp(14px,1.2vw,22px); z-index:3;
  background:var(--paper); border-radius:3px; padding:16px 20px; box-shadow:var(--sh-2); max-width:min(320px,80%);
}
.map-card strong{display:block; font-size:var(--t-sm); letter-spacing:-.016em}
.map-card span{display:block; font-size:var(--t-xs); color:var(--ink-3); margin-top:.28em}

/* Katalog-CTA */
.cat{
  position:relative; overflow:hidden; border-radius:var(--r-xl);
  background:linear-gradient(120deg,var(--navy-900) 0%,var(--navy-700) 62%,var(--blue-700) 130%);
  color:#fff; padding:clamp(28px,3.2vw,60px);
  display:grid; grid-template-columns:minmax(0,1fr) auto; gap:clamp(24px,3vw,50px); align-items:center;
}
.cat h2{color:#fff; font-size:clamp(24px,2.3vw,40px)}
.cat p{color:var(--on-dark-2); margin-top:.7em; max-width:52ch; font-size:var(--t-sm)}
.cat-file{display:inline-flex; align-items:center; gap:.6em; margin-top:clamp(16px,1.4vw,24px); font-size:var(--t-xs); color:var(--on-dark-3)}
.cat-file .ic{width:1.15em; height:1.15em}
.cat-art{position:relative; width:clamp(120px,11vw,182px); aspect-ratio:3/4; flex:none}
.cat-art .sheet{position:absolute; inset:0; border-radius:3px; background:linear-gradient(160deg,#fff,#DCE7F8); box-shadow:0 20px 50px rgba(0,0,0,.4); transition:transform .7s var(--ease-out)}
.cat-art .sheet:nth-child(1){transform:translate(-15px,-15px); opacity:.32}
.cat-art .sheet:nth-child(2){transform:translate(-8px,-8px); opacity:.58}
.cat-art .sheet:nth-child(3){display:grid; place-items:center; color:var(--blue)}
.cat:hover .cat-art .sheet:nth-child(1){transform:translate(-21px,-21px)}
.cat:hover .cat-art .sheet:nth-child(2){transform:translate(-12px,-12px)}
.cat:hover .cat-art .sheet:nth-child(3){transform:translateY(-3px)}
.cat-art .sheet .ic{width:38%; height:auto; aspect-ratio:1}
.cat::after{content:''; position:absolute; right:-8%; top:-40%; width:44%; aspect-ratio:1; border-radius:50%; background:radial-gradient(circle,rgba(63,134,255,.4),transparent 68%); pointer-events:none}

/* CTA-Band */
.band{position:relative; overflow:hidden; background:var(--navy); color:#fff}
.band-in{display:grid; grid-template-columns:minmax(0,1fr) auto; gap:clamp(24px,3vw,56px); align-items:center; padding-block:clamp(48px,5vw,86px)}
.band h2{color:#fff; max-width:20ch}
.band p{color:var(--on-dark-2); margin-top:.8em; max-width:54ch}

/* ====================== 12 · GALERIE & LIGHTBOX ========================== */
.gfilter{display:flex; flex-wrap:wrap; gap:8px}
.gfilter button{
  display:inline-flex; align-items:center; gap:.5em; padding:10px 18px; border-radius:3px;
  border:1.5px solid var(--line-2); font-size:var(--t-xs); font-weight:600; color:var(--ink-2);
  transition:background .28s, border-color .28s, color .28s, transform .35s var(--ease-out);
}
.gfilter button .ic{width:1.1em; height:1.1em}
.gfilter button:hover{border-color:var(--blue); color:var(--ink)}
.gfilter button[aria-pressed="true"]{background:var(--blue); border-color:var(--blue); color:#fff}

/* Feste Zeilenhöhe statt Seitenverhältnis je Kachel: So sind alle Bilder
   einer Reihe gleich hoch — vorher stand unter den schmalen Kacheln neben
   einem breiten Bild eine große Lücke. Die Breite steuern die Klassen
   w3/w4/w6/w8/w12 (Spalten von 12), nie Inline-Styles — die würden die
   Handy-Regeln überstimmen. */
.gal{display:grid; grid-template-columns:repeat(12,minmax(0,1fr)); grid-auto-rows:clamp(190px,21vw,360px); grid-auto-flow:row dense; gap:clamp(10px,1vw,18px)}
.gal-item{
  position:relative; grid-column:span 4; border-radius:var(--r); overflow:hidden; cursor:zoom-in;
  background:var(--sky); transition:opacity .45s var(--ease), transform .55s var(--ease-out), box-shadow .5s;
}
.gal-item.w3{grid-column:span 3}
.gal-item.w4{grid-column:span 4}
.gal-item.w6{grid-column:span 6}
.gal-item.w8{grid-column:span 8}
.gal-item.w12{grid-column:span 12}
/* Gefiltert passt die Mischbreite nicht mehr auf — dann einheitlich drei pro Reihe */
.gal.is-filtered .gal-item{grid-column:span 4}
.gal-item img{width:100%; height:100%; object-fit:cover; transition:transform 1.1s var(--ease-out)}
.gal-item:hover img{transform:scale(1.035)}
.gal-item:hover{box-shadow:var(--sh-3)}
.gal-item.hide{display:none}
.gal-cap{
  position:absolute; inset:auto 0 0 0; z-index:3; padding:clamp(30px,3vw,54px) clamp(14px,1.2vw,22px) clamp(14px,1.2vw,20px);
  background:linear-gradient(180deg,transparent,rgba(6,20,38,.86)); color:#fff;
  transform:translateY(12px); opacity:0; transition:transform .5s var(--ease-out), opacity .4s;
}
.gal-item:hover .gal-cap{transform:none; opacity:1}
.gal-cap strong{display:block; font-size:var(--t-sm); letter-spacing:-.016em}
.gal-cap span{display:block; font-size:var(--t-xs); color:rgba(210,226,248,.8); margin-top:.2em}
.gal-zoom{
  position:absolute; right:12px; top:12px; z-index:3; width:38px; aspect-ratio:1; border-radius:3px;
  display:grid; place-items:center; background:rgba(255,255,255,.92); color:var(--navy);
  opacity:0; transform:scale(.6); transition:opacity .35s, transform .45s var(--ease-out);
}
.gal-item:hover .gal-zoom{opacity:1; transform:none}
/* Touch-Geräte kennen kein Hover — Bildunterschriften dort immer zeigen */
@media (hover:none){
  .gal-cap{opacity:1; transform:none}
  .gal-zoom{display:none}
}
.gal-zoom .ic{width:50%; height:50%}

.lb{position:fixed; inset:0; z-index:120; background:rgba(4,14,28,.94); backdrop-filter:blur(14px); display:grid; place-items:center; padding:clamp(16px,3vw,50px); opacity:0; visibility:hidden; transition:opacity .4s, visibility .4s}
.lb.open{opacity:1; visibility:visible}
.lb-fig{max-width:min(1180px,100%); max-height:100%; display:flex; flex-direction:column; gap:16px; transform:scale(.96); transition:transform .5s var(--ease-out)}
.lb.open .lb-fig{transform:none}
.lb-fig img{max-height:calc(100vh - 190px); width:auto; margin-inline:auto; border-radius:var(--r); object-fit:contain}
.lb-cap{text-align:center; color:#fff}
.lb-cap strong{display:block; font-size:var(--t-sm)}
.lb-cap span{font-size:var(--t-xs); color:var(--on-dark-3)}
.lb-x,.lb-nav{position:absolute; width:48px; aspect-ratio:1; border-radius:3px; display:grid; place-items:center; background:rgba(255,255,255,.12); color:#fff; border:1px solid rgba(255,255,255,.18); transition:background .3s, transform .4s var(--ease-out)}
.lb-x{top:clamp(14px,2vw,28px); right:clamp(14px,2vw,28px)}
.lb-nav.prev{left:clamp(10px,2vw,28px); top:50%; transform:translateY(-50%)}
.lb-nav.next{right:clamp(10px,2vw,28px); top:50%; transform:translateY(-50%)}
.lb-nav.prev .ic{transform:rotate(180deg)}
.lb-x:hover,.lb-nav:hover{background:var(--blue)}
.lb-nav.prev:hover{transform:translateY(-50%)}
.lb-nav.next:hover{transform:translateY(-50%)}

/* ============================= 13 · FOOTER =============================== */
.ftr{background:var(--navy-900); color:var(--on-dark-2); position:relative; overflow:hidden}
.ftr-top{display:grid; grid-template-columns:1.35fr 1fr 1fr 1.15fr; gap:clamp(26px,3vw,60px); padding-block:clamp(52px,5.6vw,92px) clamp(34px,3.4vw,56px)}
.ftr h4{color:#fff; font-size:var(--t-xs); font-weight:600; letter-spacing:.09em; text-transform:uppercase; margin-bottom:1.5em}
.ftr .logo-txt strong{color:#fff}
.ftr .logo-txt span{color:var(--on-dark-3)}
.ftr-about p{font-size:var(--t-sm); color:var(--on-dark-3); margin-top:clamp(16px,1.4vw,24px); max-width:38ch}
.ftr-links{display:grid; gap:4px}
.ftr-links a{display:inline-flex; align-items:center; gap:.6em; min-height:34px; font-size:var(--t-sm); color:var(--on-dark-2); transition:color .26s, transform .35s var(--ease-out)}
.ftr-links a .ic{width:1.05em; height:1.05em; opacity:.5; transition:opacity .26s, color .26s}
.ftr-links a:hover{color:#fff; transform:translateX(3px)}
.ftr-links a:hover .ic{opacity:1; color:var(--blue-400)}
.ftr-contact{display:grid; gap:6px}
.ftr-contact a,.ftr-contact div{display:flex; gap:.7em; align-items:flex-start; min-height:34px; padding-block:3px; font-size:var(--t-sm); color:var(--on-dark-2); transition:color .26s}
.ftr-contact a:hover{color:#fff}
.ftr-contact .ic{width:1.12em; height:1.12em; color:var(--blue-400); margin-top:.28em; flex:none}
.ftr-hours{margin-top:clamp(18px,1.6vw,26px); padding-top:clamp(16px,1.4vw,22px); border-top:1px solid rgba(255,255,255,.08)}
.ftr-hours dl{display:grid; grid-template-columns:auto 1fr; gap:6px 18px; font-size:var(--t-xs)}
.ftr-hours dt{color:var(--on-dark-3)}
.ftr-hours dd{margin:0; color:var(--on-dark-2); text-align:right; font-variant-numeric:tabular-nums}
.ftr-bot{
  display:flex; flex-wrap:wrap; gap:12px 26px; align-items:center; justify-content:space-between;
  padding-block:clamp(20px,1.8vw,28px); border-top:1px solid rgba(255,255,255,.08); font-size:var(--t-xs); color:var(--on-dark-3);
}
.ftr-bot nav{display:flex; flex-wrap:wrap; gap:2px 18px}
.ftr-bot a{display:inline-flex; align-items:center; min-height:34px; padding-inline:2px; transition:color .26s}
.ftr-bot a:hover{color:#fff}
.ftr-bot > span:first-child{margin-right:auto}
.ftr-credit strong{margin-left:.3em; font-weight:600; color:var(--on-dark-2); transition:color .26s}
.ftr-credit:hover strong{color:#fff}
.socials{display:flex; gap:9px; margin-top:clamp(18px,1.6vw,26px)}
.socials a{width:40px; aspect-ratio:1; border-radius:3px; display:grid; place-items:center; border:1px solid rgba(255,255,255,.12); color:var(--on-dark-2); transition:background .28s, color .28s, transform .4s var(--ease-out), border-color .28s}
.socials a:hover{background:var(--blue); border-color:var(--blue); color:#fff}
.socials .ic{width:20px; height:20px}

/* Rechtstext-Seiten */
.legal{max-width:78ch}
.legal h2{font-size:clamp(21px,1.7vw,30px); margin-top:clamp(34px,3vw,56px); margin-bottom:.7em}
.legal h3{font-size:var(--t-h4); margin-top:clamp(22px,2vw,34px); margin-bottom:.55em}
.legal p,.legal li{font-size:var(--t-sm); color:var(--ink-2)}
.legal ul{list-style:disc; padding-left:1.3em; display:grid; gap:.42em; margin-top:.7em}
.legal a{color:var(--blue); text-decoration:underline; text-underline-offset:2px}
.legal address{font-style:normal; margin-top:.7em}

/* Hinweis-Box */
.note{
  display:flex; gap:14px; padding:clamp(16px,1.4vw,22px); border-radius:var(--r);
  background:var(--blue-50); border:1px solid rgba(27,90,224,.14); font-size:var(--t-xs); color:var(--ink-2); line-height:1.55;
}
.note .ic{width:20px; height:20px; color:var(--blue-700); flex:none; margin-top:.1em}
.note strong{color:var(--ink)}
.note--warn{background:#FFF7E8; border-color:#F3DFB4}
.note--warn .ic{color:#96650A}

/* =========================== 14 · ANIMATION ============================== */
/* Nur wenn JavaScript läuft, wird ausgeblendet — sonst bliebe die Seite
   ohne JS komplett unsichtbar. Das html.js-Flag setzt ein Inline-Script im <head>. */
.js [data-rev]{opacity:0; transform:translateY(26px); transition:opacity .78s var(--ease-out), transform .95s var(--ease-out); transition-delay:calc(var(--d,0) * 85ms)}
.js [data-rev="fade"]{transform:none}
.js [data-rev="left"]{transform:translateX(-30px)}
.js [data-rev="right"]{transform:translateX(30px)}
.js [data-rev="zoom"]{transform:scale(.955)}
.js [data-rev].in{opacity:1; transform:none}

.par{will-change:transform}

/* Seitenübergang */
.pagefade{position:fixed; inset:0; z-index:200; background:var(--navy-900); pointer-events:none; opacity:0; transition:opacity .38s var(--ease)}
body.leaving .pagefade{opacity:1}
body{animation:pageIn .5s var(--ease) both}
@keyframes pageIn{from{opacity:0} to{opacity:1}}

/* ========================== 15 · RESPONSIVE ============================== */
/* Kompaktere Navigationsleiste, sobald der Platz knapp wird */
@media (max-width:1400px){
  .mainnav > li > a{padding-inline:10px; font-size:15px}
  .mainnav > li > a .ic{width:1.18em; height:1.18em}
}
@media (max-width:1380px){
  /* Telefon-Pille weicht — die Nummer steht weiterhin in der Topbar,
     im „Jetzt anfragen“-Bereich und im Footer */
  .hdr-tel{display:none}
}
@media (max-width:1240px){
  /* Öffnungszeiten raus, bevor die Topbar zweizeilig wird — sie ist auf feste
     Höhe gesetzt und würde den Text sonst abschneiden. */
  .topbar-l span{display:none}
}
@media (max-width:1180px){
  .mainnav > li > a{padding-inline:8px; font-size:14.5px}
  .mainnav > li > a .ic{width:1.12em; height:1.12em}
  .trust-in{grid-template-columns:repeat(2,1fr); gap:26px}
  .trust-item:nth-child(3)::before{display:none}
  .trust-item:nth-child(odd)::before{display:none}
}
@media (max-width:1100px){
  :root{--hdr-h:78px}
  /* Ab hier sind die Spalten voll breit — seitliches Einfliegen würde kurz
     horizontal überstehen, deshalb nur noch vertikal einblenden. */
  .js [data-rev="left"],.js [data-rev="right"]{transform:translateY(26px)}
  .hdr.is-stuck .hdr-in{min-height:66px}
  .mainnav,.hdr-tel{display:none}
  .burger{display:flex}
  .hdr-right .btn{display:none}
  /* minmax(0,1fr) statt 1fr: sonst bestimmt der breiteste Knopf die
     Spaltenbreite, und auf 320px ragt der Inhalt aus dem Bildschirm. */
  .hero-grid{grid-template-columns:minmax(0,1fr)}
  .hero-card{display:none}
  .split,.proc-grid,.cat,.band-in{grid-template-columns:minmax(0,1fr)}
  .g-4,.g-3,.g-5{grid-template-columns:repeat(2,minmax(0,1fr))}
  .g-5 > *,.g-5 > :nth-child(4){grid-column:auto}
  .g-5 > :last-child{grid-column:1 / -1}
  .proc-sticky{position:static}
  /* Zähler und Fortschrittsbalken gehören zur klebenden Spalte am Desktop —
     ohne sie stehen sie nur als „00 / 05“ über der Liste. */
  .proc-count,.proc-bar{display:none}
  .split > .figblock{order:-1}
  .split--flip > .figblock{order:0}
  .cat{text-align:left}
  .cat-art{display:none}
  .band-in{gap:26px}
  .ftr-top{grid-template-columns:1fr 1fr; gap:34px}
  .ftr-about{grid-column:1/-1}
  .gal{grid-auto-rows:clamp(190px,30vw,330px)}
  .gal-item,.gal-item.w3,.gal-item.w4,.gal-item.w8,.gal.is-filtered .gal-item{grid-column:span 6}
  .gal-item.w12{grid-column:span 12}
}
@media (max-width:720px){
  :root{--hdr-h:72px; --topbar-h:36px}
  .topbar-l span:not(.tel-only){display:none}
  .topbar-in{justify-content:center}
  .topbar-l{display:none}
  /* Auf dem Handy muss der Hero-Inhalt deutlich kompakter werden,
     damit alles ohne Scrollen auf den Bildschirm passt. */
  .hero h1{font-size:clamp(29px,7.6vw,40px); max-width:none}
  .hero .lead{font-size:clamp(15.5px,4vw,18px); max-width:none}
  .hero-badge{font-size:12px; padding:7px 12px 7px 9px}
  /* Zweiter Teil des Labels steht direkt darunter in der Vorteilsliste —
     auf dem Handy brach das Label sonst auf vier Zeilen um. */
  .hero-badge .hb-more{display:none}
  .hero-foot{gap:8px 18px; margin-top:clamp(18px,2.6vh,30px)}
  .hero-foot li{font-size:13.5px}
  .hero-foot .ic{width:1.15em; height:1.15em}
  .g-3,.g-4,.g-2,.g-5,.frow{grid-template-columns:minmax(0,1fr)}
  /* „10.000+“ muss in die halbe Breite passen */
  .stat{font-size:clamp(26px,8vw,40px)}
  .pick{grid-template-columns:repeat(3,minmax(0,1fr)); gap:7px}
  .pick label{padding:12px 4px; font-size:13px; line-height:1.25}
  /* Knöpfe dürfen umbrechen: mit nowrap wurden lange Beschriftungen wie
     „Angebot für Sonnenschutz anfordern“ rechts abgeschnitten. */
  .btn{white-space:normal; text-align:center; line-height:1.25}
  .btn,.btn-lg{padding-inline:20px}
  .trust-in{grid-template-columns:repeat(2,1fr); gap:22px 16px; padding:24px 16px}
  .trust-item::before{display:none!important}
  .hero-foot{gap:12px 22px}
  /* Zwei Kacheln pro Reihe statt eine: die Galerie war sonst fünf Bildschirme lang */
  .gal{grid-auto-rows:44vw; gap:8px}
  .gal-cap{padding:30px 10px 9px}
  .gal-cap strong{font-size:13.5px; line-height:1.25}
  .gal-cap span{display:none}
  .ftr-links a,.ftr-contact a,.ftr-bot a{min-height:40px}

  /* Die Adresskarte verdeckte auf dem Handy fast die ganze Karte samt Markierung —
     dort steht sie deshalb unter der Karte statt darüber. */
  .mapbox{display:flex; flex-direction:column}
  .mapbox iframe{height:240px; min-height:240px; flex:none}
  .map-card{position:static; max-width:none; border-radius:0; box-shadow:none; border-top:1px solid var(--line)}

  .wa-bubble{display:none}
  .mbar{
    position:fixed; left:0; right:0; bottom:0; z-index:74;
    display:grid; grid-template-columns:1fr 1fr; gap:8px;
    padding:8px 12px calc(8px + env(safe-area-inset-bottom));
    background:rgba(6,20,38,.96); -webkit-backdrop-filter:blur(14px); backdrop-filter:blur(14px);
    box-shadow:0 -1px 0 rgba(160,200,255,.14), 0 -10px 28px rgba(6,20,38,.2);
    transform:translateY(110%); transition:transform .45s var(--ease-out);
  }
  .mbar.in{transform:none}
  body.menu-open .mbar,body.lock .mbar{transform:translateY(110%)}
  .mbar a{display:flex; align-items:center; justify-content:center; gap:.55em; min-height:48px; border-radius:3px; font-size:15.5px; font-weight:600; color:#fff; letter-spacing:-.008em}
  .mbar .ic{width:1.15em; height:1.15em}
  .mbar-call{background:var(--blue); box-shadow:var(--sh-blue)}
  .mbar-wa{border:1.5px solid rgba(160,200,255,.3)}
  .mbar-wa .ic{color:#25D366}
  /* Platz unter dem Footer, damit die Leiste nichts verdeckt */
  .ftr{padding-bottom:calc(64px + env(safe-area-inset-bottom))}
  .btn-row .btn{flex:1 1 100%}
  .step{grid-template-columns:44px 1fr; gap:14px}
  .steps::before,.steps-fill{left:21px}
  .step-dot{width:44px}
  .ftr-top{grid-template-columns:1fr}
  .ftr-bot{justify-content:flex-start}
  .lb-nav{width:42px}
  .tst-card blockquote{font-size:19px}
}

/* Sehr flache Fenster (alte Handys, Querformat, kleine Laptops):
   Der Hero muss trotzdem auf einen Bildschirm passen — die Vorteilsliste
   wiederholt sich ohnehin direkt darunter in der Kennzahlen-Leiste. */
@media (max-height:700px){
  .hero-foot{display:none}
  .hero-in{padding-block:clamp(14px,2.2vh,30px)}
  .hero-badge{margin-bottom:11px; padding:6px 12px 6px 9px}
  .hero .lead{margin-top:10px}
  .hero .btn-row{margin-top:16px}
  .hero h1{font-size:clamp(26px,min(3.6vw,8.4vh),46px)}
}
@media (max-height:520px){
  .hero .lead{display:none}
}

/* Reduced Motion */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms!important; animation-iteration-count:1!important; transition-duration:.001ms!important}
  [data-rev]{opacity:1!important; transform:none!important}
  .par{transform:none!important}
  .wa-bubble{opacity:1; transform:none}
  .wa-bubble::after{display:none}
}

/* Druck */
@media print{
  .hdr,.topbar,.wa-bubble,.mbar,.drawer,.prog,.band,.cat,.pagefade{display:none!important}
  body{color:#000; background:#fff}
  .hero,.phero{background:#fff; color:#000; margin-top:0; padding-top:0}
  .hero-media,.phero-media{display:none}
  .hero h1,.phero h1{color:#000}
}
