/* Kopfzeile: EIN Auftritt von oben, danach bleibt sie. Immer schmal.
 *
 * ── Was Franky will ────────────────────────────────────────────────
 * 1. Die Bewegung des Themes, die war die schoenere: von oben
 *    hereingleiten, weich. Aber nur EIN Mal, nicht doppelt.
 * 2. Keine Dickenaenderung. Die Kopfzeile ist durchgehend die
 *    SCHMALE Fassung, nicht erst hoch und dann flach.
 *
 * ── Warum sie vorher zwei Mal kam (gemessen) ───────────────────────
 * Zwei Animationen, zwei Schalter, zwei Schwellen:
 *   a) unsere:  kopfzeile.js setzt `kopf-sichtbar` ab  10px, bewegt
 *               das AEUSSERE #brx-header.
 *   b) Theme:   ein Inline-Handler im HTML setzt `scrolling` ab 200px.
 *               Dessen Regel startet `artSlideDown 0.6s ease-out` auf
 *               dem INNEREN .fr-header-alpha.
 * Bei 10px flog der Rahmen herein, bei 200px der Inhalt darin erneut.
 * Der Theme-Handler entfernt die Klasse unter 200px sogar wieder und
 * erzwingt einen Reflow ("allow animation to re-trigger"), also noch
 * ein Einflug bei jedem Kreuzen der Marke.
 *
 * ── Der Weg hier ───────────────────────────────────────────────────
 * Die Bewegung des Themes wird UEBERNOMMEN, aber an genau einer
 * Stelle: als Keyframe auf dem aeusseren Element, ausgeloest von
 * unserem Einwegschalter. Werte 1:1 aus der Theme-Regel:
 *     transform: translateY(-100%) -> 0, opacity 0 -> 1
 *     0.6s ease-out, forwards
 * Die Theme-Fassung am inneren Element wird stillgelegt (Abschnitt 4).
 * Der fremde Handler darf seine Klassen weiter setzen, das ist dann
 * sichtbar folgenlos.
 *
 * !important ueberall, weil das Theme seine Regeln in einem <style>
 * NACH unseren Links wiederholt. Spaeter laden reicht bei Artison nicht.
 */

/* ── 1. Die Leiste ist IMMER da ────────────────────────────────────── */
/* Franky, 26.08.: "lass uns die Navbar immer sichtbar halten, durchgehend
   die nutzen die als erstes kommt, mit dem Strich der dicker ist. wir
   drehen uns sonst im Kreis."
   Richtige Entscheidung, und zwar aus einem harten Grund:

   GEMESSEN, Bild fuer Bild beim Neuladen (Vorzustand):
     160ms  Theme-Leiste sichtbar: grosses Logo, ZWEI Kontakt-Knoepfe
     470ms  immer noch
     590ms  verschwindet, danach erst der Sollzustand
   Rund 500ms sichtbarer Fremdzustand bei JEDEM Aufruf.

   Die Ursache liegt nicht in der Bewegung, sondern in der Abhaengigkeit
   von JavaScript: solange `kopf-steuerung-aktiv` fehlte, galt allein die
   Theme-Fassung. Ein Startzustand, den erst ein Skript korrigiert, ist
   beim Neuladen immer sichtbar - egal wie schnell das Skript ist.

   Deshalb hier KEIN Schalter mehr am Selektor. Die Regeln greifen ab dem
   ersten gemalten Bild. Zusaetzlich stehen sie als Sofortblock inline im
   <head> jeder Seite (siehe `kamui-kopf-sofort` in den HTML-Dateien) -
   ein <link> ist eine eigene Anfrage und kommt zu spaet. */
#brx-header {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  width: 100% !important;
  z-index: 9000 !important;

  /* Kein opacity/visibility/transform mehr. Was keinen Zustand hat,
     kann auch nicht aufblitzen. */
  opacity: 1 !important;
  visibility: visible !important;
  transform: none !important;
  animation: none !important;
  pointer-events: auto !important;
}

/* ── 2. Kein Auftritt mehr ─────────────────────────────────────────── */
/* Die alten Schalter duerfen weiter gesetzt werden (kopfzeile.js setzt
   sie fuer die Glasplatte), sie aendern an der Sichtbarkeit aber nichts
   mehr. Diese Regel faengt ab, falls irgendwo noch eine Animation an
   den Klassen haengt. */
#brx-header,
#brx-header {
  opacity: 1 !important;
  visibility: visible !important;
  transform: none !important;
  animation: none !important;
  pointer-events: auto !important;
}

/* ACHTUNG, hier lag der Fehler (gemessen 25.08.):
   `translateY(-100%)` sah richtig aus, bewegte aber NICHTS. Prozent bezieht
   sich auf die eigene Hoehe des Elements - und #brx-header ist 0px hoch.
   Die sichtbare Leiste ist das KIND .fr-header-alpha mit 88px, das Elternteil
   selbst hat keine Ausdehnung. -100% von 0 ist 0: die Zeile stand die ganze
   Zeit an ihrem Platz und hat nur die Deckkraft hochgezogen.
   Deshalb ein fester Pixelwert, der unabhaengig von der Elternhoehe traegt.
   120px ist die 88px-Leiste plus Reserve, damit sie sicher ausserhalb des
   Bildrands startet. */
/* Der Keyframe bewegt seit 26.08. NICHTS mehr in der Position, er blendet
   nur noch auf. Der alte Kommentar zum -100%-Fehler bleibt als Warnung
   stehen: falls hier je wieder ein translateY eingebaut wird, muss es ein
   fester Pixelwert sein - #brx-header ist 0px hoch, Prozent wirkt nicht.
   Besser: gar keine Positionsbewegung, siehe Regel oben. */
@keyframes kamui-kopf-herein {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* ── 3. Glasgrund, damit die Navigation ueber Bildern lesbar ist ───── */
/* Bewusst NICHT an die Theme-Klasse `scrolling` gebunden: sonst waere
   der Grund unter 200px weg und darueber da, also ein Sprung beim
   Zurueckscrollen. Er gehoert an unseren Schalter. */
/* Franky, 26.08.: "oben den rahmen nicht so transparent machen."
   Bei 0.92 schlug die grosse Ueberschrift der Team-Seite ("KEINE
   ZWISCHENEBENE.") sichtbar durch die Leiste. Gerechnet: 8 Prozent von
   Creme (237) ueber Tusche (22) heben den Grund um rund 17 Stufen an,
   und bei einer Versalzeile in dieser Groesse liest sich das als
   Schmutz, nicht als Glas. Zwischenschritt 0.985: Durchschlag von 17
   auf 6 Stufen, die Zeile war aber immer noch als Zeile zu erkennen.
   Damals: ganz deckend.

   Franky, 26.08. spaeter: "Die Navbar soll bitte wieder durchsichtig
   werden und nicht schwarz."

   Der Grund wandert deshalb aus der Leiste heraus in eine eigene
   Glasplatte an <body> (siehe kopfzeile.js, dort steht die Messung).
   Kurz: `backdrop-filter` wirkt an dieser Leiste nicht, weil
   #brx-header per `transform` einen eigenen Backdrop-Root oeffnet.
   Die Platte liegt ausserhalb davon und filtert die echte Seite.

   Die Leiste selbst bleibt hier mit Tuschegrund stehen. Das ist der
   Rueckfall fuer Browser ohne backdrop-filter: dort baut das Skript
   keine Platte, und eine ruhige dunkle Leiste ist besser als Text,
   der durch die Navigation schlaegt. Sobald die Platte da ist,
   schaltet die Regel darunter den Grund ab. */
#brx-header .fr-header-alpha {
  border-bottom: 1px solid rgba(237, 225, 202, 0.14) !important;
}

/* Rueckfall fuer Browser ohne backdrop-filter: dort baut das Skript keine
   Platte, also braucht die Leiste selbst einen Grund. Eine ruhige dunkle
   Leiste ist besser als Text, der durch die Navigation schlaegt. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  #brx-header .fr-header-alpha {
    background-color: rgb(22, 27, 25) !important;
  }
}

/* ── 3b. Die Glasplatte ────────────────────────────────────────────── */
/* Liegt an <body>, also ausserhalb des Backdrop-Roots von #brx-header.
   Nur so wirkt der Weichzeichner auf die Seite dahinter.

   z-index 8999 haelt sie genau eine Stufe unter der Kopfzeile (9000):
   hinter Logo und Navigation, aber vor allem Seiteninhalt.

   Die Deckkraft ist bewusst niedrig - das Glas kommt aus dem
   Weichzeichner, nicht aus der Farbe.

   NACHGEZOGEN. Entscheidend war, die Navigationslinks nach Farbe zu
   TRENNEN. Vorher lief der goldene Kontakt-Knopf als kleinster Wert in
   jede Messung ein und liess jede Variante durchfallen - die cremefarbene
   Navigation war die ganze Zeit in Ordnung.

     Deckung        creme min   gold min   Leiste-Helligkeit
     nur Theme       5.20        4.20        22 - 50   (dunkel)
     0.18            5.20        4.20        44 - 56
     0.28            5.20        4.20        44 - 54   <- gewaehlt
     0.38            5.20        4.20        45 - 54
     0.60            5.20        4.20        47 - 81   (zu dunkel)

   Die Creme-Links stehen bei jeder Deckung auf 5.20, also ueber den
   geforderten 4.5. Der Weichzeichner traegt die Lesbarkeit, nicht die
   Farbe - deshalb kann die Deckung niedrig bleiben.

   0.28 statt 0.6: bei 0.6 war die Leiste mit 79 dunkler als der
   Theme-Zustand mit 93, also genau das Gegenteil des Auftrags.

   Gold 4.20 ist KEIN Fehler dieser Platte - der Wert steht bei jeder
   Deckung, auch ohne sie. Das ist der goldene Kontakt-Knopf gegen
   Tusche. Siehe Hinweis am Dateiende. */
.kamui-kopf-glas {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 92px;
  z-index: 8999;
  pointer-events: none;
  background-color: rgba(22, 27, 25, 0.28);
  backdrop-filter: blur(32px) saturate(115%);
  -webkit-backdrop-filter: blur(32px) saturate(115%);
  /* NAHT VERMEIDEN. Ohne diese Maske endet die Platte an einer harten
     Kante bei 92px: der Weichzeichner glaettet die Bildtextur INNERHALB
     der Leiste, darunter bleibt sie koernig, und genau dort sieht man
     einen Absatz quer durch das Bild. Im direkten Vergleich fiel das
     sofort auf, obwohl die gemessene Helligkeit fast gleich war
     (44.3 neu gegen 43.1 alt) - ein Fall, den nur das Auge findet.
     Die Maske laesst Glas und Weichzeichner nach unten auslaufen. */
  -webkit-mask-image: linear-gradient(to bottom,
                      rgba(0, 0, 0, 1) 0%,
                      rgba(0, 0, 0, 1) 62%,
                      rgba(0, 0, 0, 0) 100%);
  mask-image: linear-gradient(to bottom,
              rgba(0, 0, 0, 1) 0%,
              rgba(0, 0, 0, 1) 62%,
              rgba(0, 0, 0, 0) 100%);
  opacity: 0;
  transition: opacity 0.45s ease;
}

/* Damit die Navigation auf hellem Untergrund nicht verliert, was die
   Leiste an Deckung abgibt: ein weicher Schattenwurf an Schrift und
   Logo. Er kostet nichts, wenn es dunkel ist, und traegt, wenn das
   Bild dahinter hell wird. */
.kopf-glas-aktiv #brx-header .fr-header-alpha a,
.kopf-glas-aktiv #brx-header .fr-header-alpha .brx-submenu-toggle > * {
  text-shadow: 0 1px 12px rgba(0, 0, 0, 0.85),
               0 0 3px rgba(0, 0, 0, 0.6);
}

.kopf-glas-aktiv #brx-header .fr-header-alpha__logo img {
  filter: drop-shadow(0 1px 10px rgba(0, 0, 0, 0.7));
}

/* ── 3c. Den schwarzen Verlauf des Themes abschalten ───────────────── */
/* DAS hier war die eigentliche Schwaerze, nicht die Deckkraft der
   Leiste. Das Theme haengt ein ::before an .fr-header-alpha:

     linear-gradient(rgba(0,0,0,0.84), rgba(0,0,0,0.64))
     172px hoch, inset -80px, filter: blur(40px)

   Ein fast undurchsichtiger Schwarzverlauf, der ueber den unteren Rand
   der Leiste hinausragt. Solange der steht, ist jede Arbeit an der
   Deckkraft der Leiste wirkungslos - gemessen ueber hellem Bild, als
   mittlere Helligkeit in der Leiste:

     Platte 0.42                          51.6
     Platte 0.22                          53.4   (Halbierung: kein Effekt)
     Platte ganz aus                      57.5   (immer noch dunkel!)
     Platte aus UND ::before aus          92.8   (das ist Glas)

   Die ersten drei Zeilen sind der Beweis, dass die Leiste nicht der
   Grund war. Deshalb faellt der Verlauf weg; die Lesbarkeit uebernimmt
   die Glasplatte, die im Gegensatz dazu wirklich weichzeichnet. */
.kopf-glas-aktiv #brx-header .fr-header-alpha::before {
  display: none !important;
}

/* Die Platte gehoert zur Leiste, und die ist jetzt immer da. Also auch
   die Platte: kein Aufblenden an einen Scrollschalter gebunden.
   Die kurze Blende bleibt nur fuer den Moment, in dem das Skript sie
   nachtraegt - ohne sie waere ihr Erscheinen ein harter Sprung. */
.kamui-kopf-glas {
  opacity: 1;
}

/* Sobald die Platte existiert, traegt SIE den Grund - die Leiste wird
   durchsichtig. Ohne Platte (kein backdrop-filter im Browser) greift
   diese Regel nicht und der Tuschegrund oben bleibt stehen. */
/* GEMESSEN 26.08. (Bild-fuer-Bild): dieser Wechsel war der letzte
   sichtbare Sprung beim Neuladen. Bis 468ms stand die Leiste in Tusche,
   ab 576ms schaltete `kopf-glas-aktiv` sie durchsichtig - ein deutlicher
   Helligkeitssprung mitten im Aufbau.

   Der Grund gehoert deshalb NICHT mehr an die Leiste, sondern von Anfang
   an an die Platte. Die Leiste ist ab dem ersten Bild durchsichtig, die
   Platte bringt den Grund mit, sobald sie da ist. Kein Zustandswechsel
   mehr, nur noch ein Element, das dazukommt.

   Rueckfall ohne backdrop-filter: siehe @supports weiter unten. */
#brx-header .fr-header-alpha {
  background-color: transparent !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

/* ── 4. Die zweite Bewegung stilllegen ─────────────────────────────── */
/* Der eigentliche Fix gegen das Doppelte. Egal ob der fremde Handler
   `scrolling` gerade gesetzt hat: das innere Element bewegt sich nie. */
#brx-header .fr-header-alpha,
#brx-header.scrolling .fr-header-alpha,
#brx-header.sticky .fr-header-alpha {
  animation: none !important;
  transform: none !important;
  opacity: 1 !important;
}

/* ── 5. Immer schmal ───────────────────────────────────────────────── */
/* Gemessen: ohne `scrolling` 108px hoch (Logo 3.5rem), mit `scrolling`
   92px (Logo 2.5rem). Das war das Dick-dann-duenn. Wir nehmen die
   schmale Fassung als EINZIGEN Zustand, auf beiden Seiten der Marke. */
#brx-header .fr-header-alpha__logo.brxe-block,
#brx-header .fr-header-alpha__logo.brxe-image,
#brx-header.scrolling .fr-header-alpha__logo.brxe-block,
#brx-header.scrolling .fr-header-alpha__logo.brxe-image {
  height: 2.5rem !important;
  width: auto !important;
  max-width: 258px !important;
  flex-shrink: 0 !important;
}

/* Keine Groessenanimation auf dem Logo: die Kopfzeile hat nur noch
   einen Zustand, also gibt es nichts zu ueberblenden. Ohne das wandert
   das Logo beim Laden sichtbar von 3.5rem auf 2.5rem
   (navigation.css legt eine transition auf width/max-width). */
#brx-header .fr-header-alpha__logo,
#brx-header .fr-header-alpha__logo img {
  transition: none !important;
}

/* Das BILD IM Logo, nicht nur der Rahmen darum.
   Gemessen 25.08.: der <a> war korrekt 40px hoch, das <img> darin aber
   67px - es ragte oben und unten heraus und wurde beschnitten, deshalb
   fehlte auf dem Bildschirm der Schriftzug KAMUI und nur CONSULTING
   blieb stehen. Die vorherigen Regeln zielten alle auf den <a>, das
   Bild darin hat nie eine Hoehe bekommen. */
#brx-header .fr-header-alpha__logo img,
#brx-header.scrolling .fr-header-alpha__logo img {
  height: 100% !important;
  max-height: 2.5rem !important;
  width: auto !important;
  object-fit: contain !important;
  object-position: left center !important;
  display: block !important;
}

/* AUSGLEICH DES LEERRANDS IM SIGNET
   ---------------------------------
   Franky am 25.08.: "Das Logo muss genau so gross sein wie der
   Schriftzug, das sieht unausgewogen aus." Er hat recht, und die
   Boxmasse verraten es NICHT: beide <img> messen exakt 40px hoch.

   Gemessen an den Dateien selbst (Alphakanal, nicht Box):
     kamui-signet-creme.png     2185x2039, Tinte 1867x1721
                                rundum 159px durchsichtiger Rand
                                --> nur 84.4% der Hoehe ist Zeichen
     kamui-wortmarke-creme.png   640x103, Tinte 640x103
                                --> 100% der Hoehe ist Zeichen

   Bei gleicher Boxhoehe steht das Signet also mit 33.8px sichtbar
   neben 40px Schriftzug. Diese 6px sind das Unausgewogene.

   WARUM NICHT DIE DATEI BESCHNEIDEN
   Dieselbe Datei traegt das Intro-Zeichen, das CTA-Zeichen und das
   Scroll-Logo. Ein Zuschnitt wuerde dort ueberall die Groesse
   veraendern, ohne dass jemand danach gefragt hat. Der Ausgleich
   gehoert deshalb hierhin, in den Kopf, und nur hierhin.

   RECHNUNG: 2.5rem / 0.844 = 2.962rem Box ergibt wieder 40px Tinte.
   Die Tinte sitzt mittig im Rand (159 oben wie unten), die Mitte
   verschiebt sich also nicht. Der Kopf ist mit 88px hoch genug. */
#brx-header .fr-header-alpha__logo img:not(.kopf-wortmarke),
#brx-header.scrolling .fr-header-alpha__logo img:not(.kopf-wortmarke),
#brx-header.sticky .fr-header-alpha__logo img:not(.kopf-wortmarke) {
  height: 2.962rem !important;
  max-height: 2.962rem !important;
}

/* ── Schriftzug 25% kleiner als das Signet (Franky, 25.08.) ──────────────
   Ausgangslage war absichtlich gleichauf: beide Zeichen 40.0px sichtbar.
   Optisch gleich hoch ist aber nicht dasselbe wie ausgewogen. Das Signet
   ist ein kompaktes Zeichen, der Schriftzug ein breites Wort ueber zwei
   Zeilen (KAMUI ueber CONSULTING) - bei gleicher Hoehe draengt sich das
   Wort vor. Kleiner gesetzt ordnet es sich dem Zeichen unter.

   RECHNUNG: 2.5rem minus 25% = 1.875rem.
   Die Datei hat keinen durchsichtigen Rand (Tinte 100% der Hoehe,
   gemessen: Zeilen 0..102 von 103), Box und sichtbare Hoehe sind hier
   also dasselbe. Erwartung: 40.0px -> 30.0px sichtbar, das Signet
   unveraendert bei 40.0px.

   Die Breite laeuft ueber `width:auto` mit: die Datei ist 640x103, also
   6.214 mal so breit wie hoch. Ohne diese Zeile behaelt das Bild seine
   Vorgabebreite und wird gestaucht. */
#brx-header .fr-header-alpha__logo img.kopf-wortmarke,
#brx-header.scrolling .fr-header-alpha__logo img.kopf-wortmarke,
#brx-header.sticky .fr-header-alpha__logo img.kopf-wortmarke {
  height: 1.875rem !important;
  max-height: 1.875rem !important;
  width: auto !important;
}

/* Das Logo darf sich unter KEINEN Umstaenden bewegen.
   Es sitzt im Kopf, der Kopf bewegt sich - das reicht. Jede eigene
   Bewegung darin liest sich als Wackeln. Deshalb hier ausdruecklich
   stillgelegt, auch gegen Theme-Keyframes und fremde transforms. */
#brx-header .fr-header-alpha__logo,
#brx-header .fr-header-alpha__logo img,
#brx-header.scrolling .fr-header-alpha__logo,
#brx-header.scrolling .fr-header-alpha__logo img,
#brx-header.sticky .fr-header-alpha__logo,
#brx-header.sticky .fr-header-alpha__logo img {
  animation: none !important;
  transform: none !important;
  opacity: 1 !important;
}

/* Die Kopfhoehe selbst festnageln, damit nichts nachwaechst. */
#brx-header .fr-header-alpha.brxe-section,
#brx-header.scrolling .fr-header-alpha.brxe-section {
  padding-top: var(--space-s) !important;
  padding-bottom: 0 !important;
  transition: none !important;
}

/* ── 6. Was der fremde Handler sonst noch umschaltet ───────────────── */
/* Alles unten laeuft ab 200px los und wuerde die Zeile umbauen. Wir
   nageln jeden Punkt auf den Zustand fest, den wir sehen wollen. */

/* Das Wortmarken-Logo bleibt, das Ersatz-Signet des Themes bleibt weg. */
#brx-header .fr-header-alpha__logo,
#brx-header.scrolling .fr-header-alpha__logo {
  display: flex !important;
}
#brx-header .art-logo-scroll,
#brx-header.scrolling .art-logo-scroll,
#brx-header a:has(.art-logo-scroll),
#brx-header.scrolling a:has(.art-logo-scroll) {
  display: none !important;
}

/* Inhalt bleibt links/rechts verteilt, nicht zentriert. */
#brx-header .fr-header-alpha__inner,
#brx-header.scrolling .fr-header-alpha__inner {
  justify-content: space-between !important;
}

/* Navigation bleibt Navigation, kein Wechsel block <-> flex. */
#brx-header .fr-header-alpha .art-nav--default,
#brx-header.scrolling .fr-header-alpha .art-nav--default {
  display: flex !important;
  justify-content: flex-end !important;
}

/* Der Ersatzknopf, den das Theme ab 200px einblendet, bleibt draussen. */
#brx-header .fr-header-alpha .art-header-button-scroll,
#brx-header.scrolling .fr-header-alpha .art-header-button-scroll {
  display: none !important;
}

/* Burger erst auf schmalen Fenstern (siehe navigation.css), nicht ab
   200px Scrollweg auf dem Desktop. */
@media (min-width: 992px) {
  #brx-header .fr-header-alpha .art-nav--burger,
  #brx-header.scrolling .fr-header-alpha .art-nav--burger {
    display: none !important;
  }
}

/* ── 7. Wer Bewegung abbestellt hat, bekommt nur ein Aufblenden ────── */
@media (prefers-reduced-motion: reduce) {
  #brx-header {
    animation: none !important;
    transform: none !important;
    opacity: 1 !important;
    transition: opacity 0.25s ease !important;
  }
}
