/* ============================================================
   OAK engineering – Navigation & Drawer (EINE Quelle fuer ALLE Seiten)
   Wird von site.css (@import), index.html und portal/portal.css geladen.
   Aenderungen hier wirken auf Website, Startseite, Portal und Tools zugleich –
   frueher lag dieser Block viermal kopiert vor und lief auseinander.
   Erwartet die CI-Variablen aus :root (mit Fallback).
   ============================================================ */
a{text-decoration:none;}
/* Grundwerte, damit der Kopf auch dort stimmt, wo eine Seite eigene Tokens mitbringt
   (Portal). Seiten mit eigenem :root ueberschreiben sie danach. */
:root{--seite:1140px;--kopf-rand:clamp(1.2rem,4vw,3rem);--ease:cubic-bezier(.4,0,.2,1);
  /* Hoehe der festen Fussleiste – Freiraum unter dem Inhalt und Auflagekante des
     Auswahlblatts haengen daran, deshalb an einer Stelle gepflegt. */
  --tb-h:69px;
  /* Wie viel unten gerade verdeckt ist (Browser-Adressleiste, Tastatur). site.js misst
     das laufend; ohne JS bleibt es 0, dann rechnen die calc() unveraendert weiter. */
  --tb-versatz:0px;}

/* ── NAV ─────────────────────────────────────────────── */
nav{position:sticky;top:0;z-index:130;display:flex;align-items:center;justify-content:space-between;
  padding:0 5vw;height:68px;background:var(--white);
  border-bottom:1px solid var(--border);}
.nav-logo{display:flex;align-items:center;gap:10px;}
.nav-logo img{height:38px;width:auto;}
.nav-wordmark{display:flex;flex-direction:column;line-height:1;font-family:var(--serif);
  font-size:1.25rem;font-weight:600;color:var(--oak-deep);letter-spacing:.02em;}
.nav-wordmark small{font-family:var(--sans);font-size:.58rem;font-weight:500;letter-spacing:.18em;
  text-transform:uppercase;color:var(--muted);margin-top:3px;}
.nav-links{display:flex;align-items:center;gap:1.3rem;font-size:.76rem;font-weight:500;
  letter-spacing:.06em;text-transform:uppercase;color:var(--muted);}
.nav-links a{transition:color .2s;}
.nav-links a:hover{color:var(--oak);}
.nav-links a.active{color:var(--oak-deep);font-weight:600;}
.nav-dd{position:relative;display:flex;align-items:center;}
.nav-dd-btn{font:inherit;letter-spacing:inherit;text-transform:inherit;color:var(--muted);background:none;border:none;cursor:pointer;display:inline-flex;align-items:center;gap:.3rem;padding:0;transition:color .2s;}
.nav-dd-btn svg{width:9px;height:9px;transition:transform .2s;}
.nav-dd:hover .nav-dd-btn,.nav-dd:focus-within .nav-dd-btn{color:var(--oak);}
.nav-dd:hover .nav-dd-btn svg,.nav-dd.open .nav-dd-btn svg{transform:rotate(180deg);}
.nav-dd-menu{position:absolute;top:calc(100% + 16px);left:50%;transform:translateX(-50%);min-width:215px;background:var(--white);border:1px solid var(--border);border-radius:10px;box-shadow:0 14px 34px rgba(27,67,50,.13);padding:.5rem;display:none;flex-direction:column;z-index:200;}
/* Unsichtbare Bruecke ueber die 16px Abstand: sonst verlaesst die Maus .nav-dd auf dem Weg
   ins Menue, :hover endet und das Dropdown klappt weg, bevor man es erreicht. */
.nav-dd-menu::before{content:'';position:absolute;top:-16px;left:0;right:0;height:16px;}
.nav-dd:hover .nav-dd-menu,.nav-dd:focus-within .nav-dd-menu,.nav-dd.open .nav-dd-menu{display:flex;}
.nav-dd-menu a{text-transform:none;letter-spacing:0;font-size:.9rem;color:var(--ink-2);padding:.55rem .7rem;border-radius:7px;}
.nav-dd-menu a:hover{background:var(--oak-ghost);color:var(--oak);}
.nav-cta{background:var(--oak-deep);color:#fff !important;padding:.5rem 1.25rem;border-radius:3px;
  font-size:.76rem;font-weight:500;letter-spacing:.04em;transition:background .2s;}
.nav-cta:hover{background:var(--oak);}
.nav-burger{display:none;background:none;border:none;cursor:pointer;padding:6px;}
.nav-burger span{display:block;width:22px;height:2px;background:var(--ink);margin:5px 0;border-radius:2px;transition:.3s;}
.nav-search{display:flex;align-items:center;background:var(--white);border:1.5px solid var(--border);
  border-radius:99px;padding:0 .15rem 0 .7rem;height:34px;}
.nav-search input{border:none;outline:none;background:none;font-family:var(--sans);font-size:.8rem;width:110px;color:var(--ink);}
.nav-search input::placeholder{color:var(--muted);text-transform:none;letter-spacing:0;}
.nav-search button{border:none;background:none;color:var(--oak);cursor:pointer;display:grid;place-items:center;
  width:28px;height:28px;border-radius:50%;}
.nav-search button:hover{background:var(--oak-ghost);}
.nav-search:focus-within{border-color:var(--oak);box-shadow:0 0 0 3px var(--oak-pale);}


.nav-burger{display:block;}
/* Navigation als Seiten-Drawer: faehrt von rechts ein, statt die volle Breite zu belegen. */
.nav-links{display:flex;flex-direction:column;align-items:stretch;gap:1.1rem;
  position:fixed;top:0;right:0;bottom:0;width:min(320px,82vw);
  transform:translateX(100%);transition:transform .28s var(--ease);
  background:var(--white);border-left:1px solid var(--border);box-shadow:-14px 0 34px rgba(27,67,50,.12);
  padding:5.5rem 1.6rem 2rem;z-index:120;overflow-y:auto;
  text-transform:none;letter-spacing:0;font-size:.95rem;
  visibility:hidden;}
.nav-links.open{transform:translateX(0);visibility:visible;transition:transform .28s var(--ease);}
/* Schlichte Strich-Icons im Drawer – einfarbig, uebernehmen die Textfarbe */
.nav-links a,.nav-links .nav-dd-btn{display:flex;align-items:center;gap:.7rem;}
.nav-ico{width:17px;height:17px;flex:none;opacity:.55;}
.nav-links a:hover .nav-ico,.nav-dd-btn:hover .nav-ico{opacity:1;}
.nav-dd-btn .nav-ico{margin-right:0;}
.nav-dd-menu a{padding-left:1.6rem;}

/* Im Drawer haengt das Untermenue direkt unter dem Punkt – auf ALLEN Breiten, nicht nur mobil. */
.nav-links .nav-dd{flex-direction:column;align-items:stretch;}
/* „Leistungen" ist im Drawer nur die Rubrik-Ueberschrift ueber den vier Links – das Untermenue
   steht dort immer offen. Der Chevron verspraeche ein Auf-/Zuklappen, das es nicht gibt. */
.nav-links .nav-dd-btn{padding:.25rem 0;justify-content:flex-start;width:100%;cursor:default;
  text-transform:uppercase;letter-spacing:.1em;font-size:.7rem;font-weight:600;color:var(--muted);}
.nav-links .nav-dd-btn>svg:last-child{display:none;}
.nav-links .nav-dd-btn .nav-ico{display:none;}
.nav-links .nav-dd-menu{position:static;transform:none;display:flex;min-width:0;border:none;box-shadow:none;background:transparent;padding:.1rem 0 .3rem;}
.nav-links .nav-dd-menu a{font-size:.92rem;padding:.35rem 0;}
.nav-links .nav-search{width:100%;height:42px;}
.nav-links .nav-search input{width:100%;font-size:.95rem;}
/* Abdunklung hinter dem Drawer – Klick darauf schliesst */
body.nav-offen::after{content:'';position:fixed;inset:0;background:rgba(17,26,20,.35);z-index:110;}
/* In der Linkliste keine Buttons */
.nav-links .nav-cta,.nav-links .nav-login{background:none;border:none;padding:.25rem 0;border-radius:0;
  color:var(--ink) !important;font-weight:500;text-align:left;font-size:.95rem !important;letter-spacing:0;}
.nav-links .nav-cta:hover,.nav-links .nav-login:hover{color:var(--oak);}

@media(max-width:1200px){
  .nav-links a{padding:.25rem 0;}
  .nav-dd{flex-direction:column;align-items:stretch;}
  .nav-dd-btn{padding:.25rem 0;justify-content:space-between;width:100%;text-transform:none;letter-spacing:0;font-size:.95rem;}
  .nav-dd-menu{position:static;transform:none;display:flex;min-width:0;border:none;box-shadow:none;background:transparent;padding:.1rem 0 .3rem 1rem;}
  .nav-dd-menu a{font-size:.92rem;padding:.35rem 0;}
  .nav-search{width:100%;height:42px;}
  .nav-search input{width:100%;font-size:.95rem;}
  .nav-cta{text-align:center;}
}

/* ── SUBPAGE-HEADER ──────────────────────────────────── */
.sub-hero{background:linear-gradient(135deg,var(--oak-deep),var(--oak));color:#fff;
  padding:3.2rem 0 2.8rem;}
/* Farbflaeche volle Breite, Text im gemeinsamen Raster */
.sub-hero>.back-link,.sub-hero>h1,.sub-hero>p{max-width:var(--seite);margin-left:auto;margin-right:auto;
  padding-left:var(--kopf-rand);padding-right:var(--kopf-rand);}
.back-link{display:inline-flex;align-items:center;gap:.4rem;margin-bottom:1.5rem;
  font-size:.82rem;color:rgba(255,255,255,.7);transition:color .2s;}
.back-link:hover{color:#fff;}
.sub-eyebrow{font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.14em;
  color:var(--oak-light);display:flex;align-items:center;gap:.6rem;margin-bottom:1rem;}
.sub-eyebrow::before{content:'';width:24px;height:1px;background:var(--oak-light);}
.sub-hero h1{color:#fff;font-family:var(--serif);font-size:clamp(2rem,4vw,3.2rem);font-weight:300;text-wrap:balance;
  line-height:1.12;margin-bottom:1rem;}
.sub-hero h1 em{font-style:italic;color:var(--oak-light);}
.sub-hero p{margin:0 auto;font-size:1rem;font-weight:300;color:rgba(255,255,255,.82);text-wrap:pretty;}


/* ── Sub-Hero mit interaktivem Gitter ────────────────── */
.sub-hero{position:relative;overflow:hidden;}
.sub-hero #gridCanvas{position:absolute;inset:0;z-index:0;width:100%;height:100%;display:block;}
.sub-hero .sub-overlay{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    radial-gradient(ellipse 90% 130% at 18% 35%, rgba(27,67,50,.78) 0%, rgba(27,67,50,.28) 55%, transparent 82%),
    linear-gradient(180deg, rgba(17,26,20,.35), transparent 40%, rgba(17,26,20,.45));}
.sub-hero > *:not(#gridCanvas):not(.sub-overlay):not(.hero-clip){position:relative;z-index:2;}

/* Titelbalken, der einfaehrt, sobald der Kopf weggescrollt ist. Bewusst ein eigenes, fixed
   positioniertes Element: ein schrumpfender sticky-Kopf aendert die Dokumenthoehe und laesst
   die Umschaltschwelle hin- und herkippen – die Ueberschrift zittert dann im Umschaltbereich. */
.kopf-balken{position:fixed;top:68px;left:0;right:0;z-index:120;height:46px;display:flex;
  align-items:center;color:#fff;pointer-events:none;
  background:linear-gradient(135deg,var(--oak-deep),var(--oak));
  box-shadow:0 6px 18px rgba(17,26,20,.18);
  transform:translateY(-115%);transition:transform .25s var(--ease);}
.kopf-balken::before{content:'';position:absolute;inset:0;opacity:.5;
  background-image:radial-gradient(rgba(116,198,157,.55) 1px, transparent 1px);
  background-size:32px 32px;}
.kopf-balken span{position:relative;max-width:var(--seite);width:100%;margin:0 auto;
  padding:0 var(--kopf-rand);font-family:var(--serif);font-size:1.15rem;font-weight:600;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
body.kopf-fest .kopf-balken{transform:translateY(0);}
@media(prefers-reduced-motion:reduce){.kopf-balken{transition:none;}}

/* ── Clip-Fenster rechts im Kopf (Image-Loop, bis dahin Platzhalterbild) ── */
/* Fuellt die rechte Haelfte des Kopfes und laeuft nach links weich ins Gitter aus – so entsteht
   keine sichtbare Kachelkante, und der ohnehin hellere rechte Rand bekommt einen Inhalt. */
.hero-clip{position:absolute;right:0;top:0;bottom:0;width:min(46%,620px);z-index:1;
  overflow:hidden;opacity:.92;transition:opacity .25s var(--ease);pointer-events:none;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 42%);
          mask-image:linear-gradient(90deg,transparent,#000 42%);}
.hero-clip img{width:100%;height:100%;object-fit:cover;
  animation:clipZoom 18s ease-in-out infinite alternate;}
/* Das Video bewegt sich selbst – keine zusaetzliche Zoomfahrt. */
.hero-clip video{width:100%;height:100%;object-fit:cover;display:block;}
/* Kennzeichnung KI-generierter Inhalte – Art. 50 Abs. 4 VO (EU) 2024/1689 (gilt seit 02.08.2026) */
.ki-hinweis{position:absolute;right:.6rem;bottom:.5rem;z-index:2;
  font-size:.68rem;font-weight:600;letter-spacing:.04em;
  color:#fff;background:rgba(17,26,20,.72);padding:.2rem .6rem;border-radius:4px;}
@keyframes clipZoom{from{transform:scale(1)}to{transform:scale(1.09)}}
@media(max-width:900px){.hero-clip{display:none;}}
@media(prefers-reduced-motion:reduce){
  .hero-clip{transition:none;}
  .hero-clip img,.hero-clip video{animation:none;}
}


/* ── TAB BAR (feste Fussleiste, nur schmale Geraete) ──────────────────
   Auf dem Handy fuehrte bisher jeder Weg ueber den Burger oben rechts: antippen,
   Drawer abwarten, Ziel suchen. Die Feld-Tools machen es seit 14.08.2026 anders –
   feste Fussleiste, jede Funktion immer an derselben Stelle, ein Daumendruck.
   Muster uebernommen aus tools/OAK_Begehungsbogen.html (.fussblock/.tabbar).
   Ab 900px verschwindet die Leiste wieder – am Desktop bleibt es beim Drawer.
   Wird von site.js (Website) bzw. portal/app.js (Portal) eingehaengt, NICHT
   ins Seiten-HTML kopiert: das <nav> liegt schon elfmal dupliziert vor. */
/* Die Leiste ist ein <nav> – damit erbt sie die Kopfzeilen-Regel ganz oben
   (position:sticky; top:0; height:68px; padding:0 5vw; border-bottom). Ohne die
   Rueckstellungen haengt sie am oberen Rand statt unten: bei gesetztem top UND
   bottom und automatischer Hoehe gewinnt top. */
/* Der Versatz haelt die Leiste ueber dem, was der Browser unten gerade selbst belegt.
   Ohne ihn steckt sie beim Seitenaufruf hinter der noch voll ausgefahrenen Adressleiste
   und taucht erst auf, wenn man scrollt – „bottom:0" meint den Layout-Viewport, nicht
   den sichtbaren Ausschnitt. */
.tabbar-fest{position:fixed;left:0;right:0;bottom:0;top:auto;z-index:125;display:none;
  height:auto;padding:0;border-bottom:none;
  background:var(--white);border-top:1px solid var(--border);
  box-shadow:0 -2px 12px rgba(27,67,50,.10);
  padding-bottom:env(safe-area-inset-bottom);
  transform:translateY(calc(-1 * var(--tb-versatz)));transition:transform .12s;}
.tabbar-fest .tb-reihe{display:flex;max-width:560px;margin:0 auto;padding:4px 6px 6px;}
.tab-i{flex:1;background:none;border:0;border-radius:10px;padding:7px 2px 6px;cursor:pointer;
  font-family:var(--sans);font-size:11.5px;font-weight:500;letter-spacing:0;text-transform:none;
  color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:3px;
  -webkit-tap-highlight-color:transparent;transition:color .15s,background .15s;}
/* Symbol nimmt die Farbe seines Reiters an – auch im aktiven Zustand. */
.tab-i svg{width:23px;height:23px;flex:none;fill:none;stroke:currentColor;
  stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;}
.tab-i.on{color:var(--oak);font-weight:600;background:var(--oak-ghost);}
.tab-i:active{transform:scale(.96);}
/* „Mehr" traegt die Klasse nav-burger, damit der bestehende Menue-Handler greift.
   Damit erbt seine Beschriftung aber die Burger-Striche (.nav-burger span: 22x2px,
   eingefaerbt) – hier wieder zu normalem Text machen. */
.tabbar-fest .nav-burger span{display:inline;width:auto;height:auto;
  background:none;margin:0;border-radius:0;}

/* Auswahlblatt: faehrt von unten ueber die Leiste, statt sie zu verdecken.
   Bewusst kein zweiter Drawer – der Weg zu den Leistungen soll kurz bleiben. */
/* Das Blatt sitzt auf der Leiste auf und muss deren Versatz mitgehen – hier ueber
   „bottom", nicht ueber transform: dort laeuft schon die Auffahr-Bewegung. */
.tb-blatt{position:fixed;left:0;right:0;z-index:127;display:none;
  bottom:calc(var(--tb-h) + env(safe-area-inset-bottom) + var(--tb-versatz));
  background:var(--white);border-radius:16px 16px 0 0;box-shadow:0 -10px 34px rgba(27,67,50,.22);
  padding:.9rem 1.1rem calc(1.1rem + env(safe-area-inset-bottom));
  transform:translateY(100%);transition:transform .24s var(--ease);}
.tb-blatt.auf{transform:translateY(0);}
.tb-blatt h2{font-family:var(--sans);font-size:.7rem;font-weight:600;text-transform:uppercase;
  letter-spacing:.12em;color:var(--muted);margin:0 0 .5rem;}
.tb-blatt a{display:flex;align-items:center;gap:.7rem;padding:.62rem 0;
  font-size:.98rem;color:var(--ink);border-top:1px solid var(--border);}
.tb-blatt a:first-of-type{border-top:none;}
.tb-blatt a svg{width:19px;height:19px;flex:none;opacity:.55;fill:none;stroke:currentColor;
  stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;}
/* Abdunklung endet ueber der Leiste: die vier Reiter bleiben sichtbar UND antippbar,
   man kann bei offenem Blatt direkt zu einem anderen Bereich wechseln. Ginge sie bis
   ganz unten, faenge sie jeden Druck auf die Leiste ab. */
body.tb-blatt-auf::before{content:'';position:fixed;top:0;left:0;right:0;
  bottom:calc(var(--tb-h) + env(safe-area-inset-bottom));
  background:rgba(17,26,20,.35);z-index:126;}
/* Ist der Drawer offen, gilt er allein – sonst laege die Leiste (125) ueber ihm (120)
   und schnitte seine unteren Punkte ab. Ein Menue zur Zeit. */
body.nav-offen .tabbar-fest{display:none;}
/* Im Portal vor der Anmeldung: die Reiter zeigten ins Leere. site.js setzt die Klasse. */
body.tb-aus .tabbar-fest,body.tb-aus .tb-blatt{display:none;}
body.tb-aus{padding-bottom:0;}

@media(max-width:900px){
  .tabbar-fest{display:block;}
  .tb-blatt{display:block;}
  /* Inhalt darf nicht unter der Leiste enden – Hoehe der Leiste plus Reserve. */
  body{padding-bottom:calc(var(--tb-h) + 8px + env(safe-area-inset-bottom));}
  /* Der schwebende Portal-Hinweis sass genau dort, wo jetzt die Leiste klebt. */
  .update-banner{bottom:calc(88px + env(safe-area-inset-bottom));}
  /* Falls das Chat-Widget je eingebunden wird: nicht auf der Leiste parken. */
  .oakc-launch{bottom:calc(86px + env(safe-area-inset-bottom));}
}
@media print{.tabbar-fest,.tb-blatt{display:none !important;}}
