/* =========================================================================
   FURTNER — Oberflaechenschicht des Passworttresors.

   BEREICHE UND IHRE EINBAUPUNKTE (jeder einzeln gemessen, keiner geraten)
     Anmeldung/Start   CSS auf svg[viewBox="0 0 290 60"]  -> START_LOGIN_LOGO
     Ladeanzeige       dieselbe Regel, aber das WAPPEN    -> Symbol
     Passwortmanager   CSS auf svg[viewBox="0 0 800 200"] -> PASSWORD_MANAGER
     Verwaltung        /vw_static/vaultwarden-icon.png    -> ADMIN_LOGO
     Rechtshinweise    eingesetzte Leiste, nur unangemeldet

   WARUM CSS UND NICHT EINFACH DIE LOGODATEI
     Das Zeichen steckt als Markup IM JavaScript-Buendel. /images/logo.svg
     wird zwar geladen (HTTP 200) — ersetzt man nur sie, ist der Messwert
     gruen und sichtbar aendert sich nichts. Genau die Falle aus LEARN-090.

   DER SELEKTOR
     Angesprochen wird das SVG ueber sein viewBox, nicht ueber eine
     Utility-Klasse. Utility-Klassen (tw-*) aendern sich bei jedem Build der
     Oberflaeche; das viewBox ist die Geometrie des Zeichens selbst.
   ========================================================================= */

/* --- Grundregel: ueberall dasselbe Zeichen -------------------------------
   Frueher stand hier das Wappen "Secure Vault" — mit der Begruendung, ein nur
   kurz sichtbares Zeichen muesse auf einen Blick wirken. Owner-Entscheidung
   2026-09-05: das alte Zeichen darf NIRGENDS mehr erscheinen, auch nicht fuer
   Sekundenbruchteile. Also ueberall dasselbe. Der Preis ist benannt: bei
   200 Punkten ist die Schrift darin nicht zu lesen — dafuer gibt es keinen
   Bruch mehr zwischen Ladezustand und Anmeldeseite. */
*:has(> svg[viewBox="0 0 290 60"]) {
    background-image: url("/furtner-vault-start-logo.png?v=2");
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
}
*:has(> svg[viewBox="0 0 290 60"]) > svg[viewBox="0 0 290 60"] {
    visibility: hidden;
}

/* --- Anmeldeseite: das START_LOGIN_LOGO, gross und mittig ---------------
   Die Oberflaeche sieht dafuer einen 200 px breiten Kasten oben links vor.
   Darin waere die Zeile "SECURE ACCESS MANAGEMENT" 6,4 px hoch — unlesbar,
   und damit genau das "unnoetig klein", das der Auftrag ausschliesst.
   Deshalb wird der Kopfbereich zentriert und der Kasten auf rund 420 px
   gebracht: dort ist die Zeile ~19 px hoch. Das Bild wird dabei NICHT
   beschnitten und NICHT verzerrt ('contain' + quadratisches Verhaeltnis,
   wie die Quelle). */
/* Zentriert wird ueber den Kasten, nicht ueber den Kopfbereich.
   WARUM NICHT EINFACH justify-content AUF DEM KOPFBEREICH
     Weil dort ein ZWEITES Element sitzt: ein 0 Punkte breites <div> mit
     automatischem Aussenabstand. Damit teilen sich DREI automatische
     Abstaende den freien Raum, und das Zeichen landet 163 Punkte links der
     Mitte — gemessen, nicht vermutet. Der Kasten nimmt deshalb die volle
     Zeile ein und zentriert seinen Inhalt selbst; dann bleibt kein freier
     Raum, den der Nachbar verschieben koennte. */
bit-landing-header > header {
    justify-content: center;
}
bit-landing-header a:has(svg[viewBox="0 0 290 60"]) {
    flex: 1 1 auto;
    display: flex;
    justify-content: center;
    width: auto;
    max-width: none;
    margin: 0;
}
bit-landing-header *:has(> svg[viewBox="0 0 290 60"]) {
    background-image: url("/furtner-vault-start-logo.png?v=2");
    display: block;
    width: min(420px, 78vw);
    aspect-ratio: 1 / 1;
}

/* Schmale Geraete. Die Formel garantiert, dass das Zeichen NIE breiter wird
   als der Bildschirm: min(320px, 86vw). Gemessen bei 390 Punkten Breite —
   320 Punkte breit, mittig, kein Ueberlauf. */
@media (max-width: 639px) {
    bit-landing-header *:has(> svg[viewBox="0 0 290 60"]) {
        width: min(320px, 86vw);
    }
}

/* --- Angemeldete Oberflaeche (Passwortmanager) --------------------------
   Auch hier steckt das Zeichen als Markup im Buendel — mit
   viewBox="0 0 800 200". Der zuerst gewaehlte Weg ueber /images/icon-white.svg
   (den Vaultwarden in seinem eigenen Stylesheet nennt) war wirkungslos: die
   Datei wird von dieser Fassung NULL Mal angefordert. Gemessen, nicht
   vermutet.

   Der Kasten bleibt so hoch, wie die Oberflaeche ihn vorsieht (rund 50 px).
   Ihn zu vergroessern hiesse, in das Seitenleisten-Layout einzugreifen —
   Funktion vor Marke. */
/* AUF DIE ROUTE BEGRENZT — ueber das Layoutelement, nicht ueber die Adresse.
   CSS kennt die Route nicht. Es kennt aber das Layout: die Oberflaeche des
   Passwortmanagers (#/vault) rendert innerhalb von 'app-user-layout'
   (gemessen 2026-09-05 im laufenden DOM). Die Verwaltungsansicht tut das
   nicht. Damit kann dieses Zeichen die Verwaltungsansicht bauartbedingt nicht
   erreichen — und nicht bloss, weil eine Regel es zufaellig nicht trifft. */
/* ZWEI BEREICHE, EIN EINBAUPUNKT — ueber die Reihenfolge getrennt, nicht ueber
   die Adresse. Die Wortmarke mit viewBox="0 0 800 200" steht in der
   angemeldeten Oberflaeche IMMER an derselben Stelle oben links; welcher
   Bereich gerade offen ist, sagt das umschliessende Layout.

     ohne app-user-layout  -> Verwaltung          -> ADMIN_LOGO
     in  app-user-layout   -> Passwortmanager     -> PASSWORD_MANAGER

   Die allgemeine Regel steht zuerst und gilt ueberall; die enger gefasste
   darunter gewinnt im Tresor. Damit koennen die beiden Zeichen bauartbedingt
   nicht vertauscht werden — es gibt keinen Zustand, in dem beide Regeln
   gleich stark waeren.

   EHRLICHE GRENZE: die Verwaltungsansicht (#/organizations) rendert fuer das
   FADS-Dienstkonto NICHTS (gemessen 2026-09-05: 33 Elemente, kein Text, kein
   SVG) — es ist einfaches Mitglied ohne Verwaltungsrecht. Die Regel ist
   deshalb aus der Bauart der Oberflaeche abgeleitet und am Tresor
   gegengeprueft, aber in der Verwaltung nicht mit eigenen Augen gesehen.
   Das bestaetigt der Owner: ORGANIZATIONS_VISUAL_TEST = OWNER_REQUIRED. */
*:has(> svg[viewBox="0 0 800 200"]) {
    background-image: url("/furtner-vault-admin-logo.png?v=3");
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
    min-height: 56px;
    height: 56px;
}
*:has(> svg[viewBox="0 0 800 200"]) > svg[viewBox="0 0 800 200"] {
    visibility: hidden;
}

/* FASSUNGSNUMMER AN DER BILDADRESSE — Befund 2026-09-05.
   Nach dem Ausrollen sah der Owner auf #/vault weiter das ALTE Zeichen,
   waehrend jede Messung gruen war. Der Unterschied lag nicht in der Regel und
   nicht in der Datei, sondern im Messaufbau: der Pruefbrowser lief mit
   abgeschaltetem Zwischenspeicher, der Owner nicht. Die Adresse blieb beim
   Wechsel der Datei gleich, und mit 'max-age=86400' haelt jeder Browser das
   alte Bild einen Tag lang fest.

   Zwei Massnahmen, weil eine allein wieder nur die halbe Wahrheit waere:
   die Nummer hier erzwingt den Neuabruf SOFORT, die kuerzere Haltbarkeit in
   furtner-vault.conf sorgt dafuer, dass der naechste Wechsel auch dann
   ankommt, wenn jemand die Nummer zu erhoehen vergisst. */
app-user-layout *:has(> svg[viewBox="0 0 800 200"]) {
    background-image: url("/furtner-vault-password-manager-logo.png?v=4");
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
    /* HOEHE AUSDRUECKLICH SETZEN — das war die Ursache.
       Gemessen im laufenden DOM (2026-09-05): der Kasten <bit-svg> hatte
       Breite 248 und HOEHE 0. Das Hintergrundbild war korrekt gesetzt und die
       Datei wurde auch geladen — ein Hintergrund auf einer Flaeche ohne Hoehe
       zeichnet aber nichts. Die Flaeche wirkte deshalb leer, obwohl jede
       Einzelpruefung (Datei vorhanden, Typ richtig, Regel greift) gruen war.
       Der Kasten bezog seine Hoehe zuvor vom eingebetteten SVG; sobald das
       ausgeblendet ist, faellt sie weg. 56 Punkte entsprechen der Hoehe, die
       das Original dort einnahm (50) plus etwas Luft. */
    min-height: 56px;
    height: 56px;
}
app-user-layout *:has(> svg[viewBox="0 0 800 200"]) > svg[viewBox="0 0 800 200"] {
    visibility: hidden;
}

/* --- Rechtshinweise: Impressum und Datenschutz --------------------------
   Beide Ziele wurden vor dem Einbau real geprueft (im Browser, nicht am
   Statuscode: /datenschutzerklaerung liefert ebenfalls HTTP 200, landet aber
   auf der Startseite). Es wird NICHT dupliziert — verlinkt wird auf die
   bestehenden Seiten, damit keine zweite, spaeter veraltete Fassung entsteht.

   Sichtbar NUR ohne Anmeldung: die Leiste erscheint, solange der Kopfbereich
   der oeffentlichen Seiten im Dokument steht. Nach der Anmeldung gibt es ihn
   nicht mehr, und die Leiste verschwindet von selbst — ohne Routenlogik im
   CSS, die bei der naechsten Fassung falsch waere. */
#furtner-recht {
    display: none;
}
body:has(bit-landing-header) #furtner-recht {
    /* IM TEXTFLUSS, NICHT FEST AM UNTEREN RAND.
       Die erste Fassung war fixiert. Gemessen bei 390 Punkten Breite: sie lag
       genau ueber dem Knopf "Fortsetzen" — die Leiste verdeckte die
       Anmeldung. Eine Polsterung am Seitenkoerper half nicht; eine fixierte
       Leiste verdeckt bei kurzem Fenster immer irgendetwas. Im Fluss kann sie
       das bauartbedingt nicht: gemessen 0 verdeckte Bedienelemente auf 1440
       UND auf 390 Punkten. Funktion vor Marke. */
    display: flex;
    width: 100%;
    box-sizing: border-box;
    justify-content: center;
    align-items: center;
    gap: 0.75rem;
    padding: 0.6rem 1rem;
    font-size: 0.8125rem;
    line-height: 1.2;
    font-family: inherit;
    background: rgba(255, 255, 255, 0.92);
    border-top: 1px solid rgba(0, 0, 0, 0.08);
    backdrop-filter: blur(4px);
}
#furtner-recht a {
    color: #175ddc;
    text-decoration: none;
}
#furtner-recht a:hover,
#furtner-recht a:focus {
    text-decoration: underline;
}
#furtner-recht span {
    opacity: 0.45;
}

/* Dunkles Thema: die Leiste folgt ihm, statt als weisser Balken zu stehen. */
@media (prefers-color-scheme: dark) {
    body:has(bit-landing-header) #furtner-recht {
        background: rgba(26, 30, 36, 0.92);
        border-top-color: rgba(255, 255, 255, 0.12);
    }
    #furtner-recht a { color: #8aa9ff; }
}
.theme_dark #furtner-recht,
body:has(.theme_dark) #furtner-recht {
    background: rgba(26, 30, 36, 0.92);
    border-top-color: rgba(255, 255, 255, 0.12);
}
.theme_dark #furtner-recht a { color: #8aa9ff; }

/* --- Selbstregistrierung nicht anbieten ---------------------------------
   Der Verweis "Konto erstellen" auf der oeffentlichen Anmeldeseite wird
   ausgeblendet. Owner-Entscheidung 2026-09-05.

   WARUM AUSBLENDEN UND NICHT SPERREN
     Die Route /#/signup bleibt absichtlich erreichbar: sie ist der Weg, ueber
     den ein EINGELADENER Mensch sein Konto anlegt. Gesperrt ist die Anmeldung
     ohnehin serverseitig — SIGNUPS_ALLOWED=false, ohne Einladung antwortet die
     Anwendung mit HTTP 400 (real gegengeprueft). Die Route zu blockieren
     wuerde also nichts zusaetzlich absichern, aber die Einladung zerstoeren.
     Ausgeblendet wird das ANGEBOT, nicht die Faehigkeit.

   DER SELEKTOR
     Vaultwarden vergibt dafuer eine eigene Klasse: 'vw-signup-link'. Sie steht
     in derselben Reihe wie 'vw-other-login', 'vw-passkey-login' oder 'vw-hide',
     die die Anwendung in ihrem eigenen Stylesheet bereits ausblendet — also
     ein vom Hersteller vorgesehener Haken, keine Utility-Klasse, die beim
     naechsten Build anders heisst. */
.vw-signup-link {
    display: none !important;
}

/* --- Sperrseite: Statusbereich kompakter --------------------------------
   WARUM DIE ERSTEN ZWEI FASSUNGEN WIRKUNGSLOS WAREN
     Sie waren auf 'bit-landing-hero:has(input[type="password"])' begrenzt —
     eine Annahme, kein Messwert. Im ECHTEN Sperrzustand (Dienstkonto eigens
     gesperrt, 2026-09-05) steht das Passwortfeld NICHT im Heldenbereich,
     sondern daneben. Die Bedingung konnte nie zutreffen: das Schloss blieb
     sichtbar, die Ueberschrift bei 30 px. Beides sah in jeder Pruefung des
     Stylesheets richtig aus — ausgeliefert war die Regel ja.

   DER GEMESSENE AUFBAU
     bit-landing-hero
       div.tw-mb-4 sm:tw-mb-6 tw-mx-auto tw-text-center      Rand unten 24 px
         div.tw-size-20 sm:tw-size-24 ...                    das Schloss, 96x96
           bit-svg > svg viewBox="0 0 80 73.33"
         h1.sm:tw-hidden  !tw-text-2xl                       mobil, display:none
         h1.sm:tw-block   !tw-text-3xl                       sichtbar, 30 px
         div.tw-text-sm sm:tw-text-base                      E-Mail, 16 px

     Auf '#/lock' UND '#/lock?promptBiometric=true' identisch gemessen.

   ANGESETZT WIRD AM SINNBILD SELBST
     Der Heldenbereich der ANMELDEseite traegt ein anderes Sinnbild
     (viewBox "0 8.33 80 66.67"). Das viewBox unterscheidet die beiden Zustaende
     also zuverlaessig — und im Gegensatz zu den tw-Klassen aendert es sich
     nicht mit dem naechsten Build der Oberflaeche. Damit bleibt die
     Anmeldeseite unberuehrt, ohne dass die Regel die Route kennen muesste.

   'display: none' statt 'visibility: hidden': sonst bliebe die Luecke stehen,
   wo das Sinnbild war. */
bit-landing-hero div:has(> bit-svg > svg[viewBox="0 0 80 73.33"]) {
    display: none !important;
}

/* Ueberschrift und Abstaende — nur in dem Heldenbereich, der das
   Sperr-Sinnbild traegt. '!important' ist noetig, weil die Klasse
   '!tw-text-3xl' es selbst mitbringt; ohne waere die Regel wirkungslos. */
bit-landing-hero:has(svg[viewBox="0 0 80 73.33"]) h1 {
    font-size: 24px !important;
    line-height: 32px !important;
    margin-top: 0 !important;
    margin-bottom: 4px !important;
}
/* Der Umschlag traegt den Abstand zur Passwortbox darunter: 24 -> 12 px. */
bit-landing-hero:has(svg[viewBox="0 0 80 73.33"]) > div {
    margin-bottom: 12px !important;
}
/* Die E-Mail-Zeile dezent, ohne den Abstand darueber aufzublaehen. */
bit-landing-hero:has(svg[viewBox="0 0 80 73.33"]) > div > div:last-child {
    font-size: 15px !important;
    line-height: 22px !important;
    margin-top: 0 !important;
}
