/* =============================================================================
   HOSTWORLD — Theme-Stylesheet
   =============================================================================
   Eingebunden über resources/views/storefront/layouts/meta.twig.
   Reines CSS ohne Bauschritt — hostware kompiliert Theme-SCSS nicht
   (am 07.08.2026 geprüft, Begründung im Kommentar der meta.twig).

   Werte gemessen am Mockup der Website,
   Rahmen-Token #E5E8ED. Schatten sind in Navy getönt
   (rgba(43,67,88,…)), nie neutral schwarz — bewusstes Merkmal des Systems.
   ========================================================================== */

:root {
    /* Farbtoken aus src/styles/tokens.css der Website */
    --hw-navy-deep: #2B4358;
    --hw-brand-yellow: #FBDE37;
    --hw-amber-gold: #FBA837;
    --hw-cloud-white: #FAFBFF;
    --hw-cloud: #EDEFF7;
    --hw-graphite: #63677A;
    --hw-steel: #5D616E;
    --hw-steel-light: #BCBFCC; /* nur auf dunklen Flächen */
    --hw-smoke: #D3D6E0;
    --hw-phantom: #1E1E24;
    --hw-border-header: #E5E8ED;
    --hw-bg-navy-tint: #F5F7FA;
    --hw-status-ok: #1F9D55;
    --hw-status-warn: #FBA837;
    --hw-status-error: #D64545;
    --hw-status-info: #2B4358;

    /* Breite der Seitenleiste. Das Mockup rechnet mit 160px und kurzen
       Wörtern (Dashboard, Dienste, Domains). Die echten Namen aus dem
       Menü-Manager sind länger ("Meine Produkte und Dienste" braucht 159px
       Textbreite). 260px, weil die Leiste bei 220 im
       Verhältnis zur Website zu schmal wirkte. Werden die
       Menüpunkte gekürzt, kann dieser eine Wert zurück auf 160px. */
    --hw-rail-width: 260px;

    /* Höhe des Fragment-Headers über der Leiste. Der einzige geschätzte Wert
       in dieser Datei — nach dem ersten Upload am lebenden System messen
       (Konsole: document.querySelector('.hw-rail').getBoundingClientRect().top
       gegen die Unterkante des Headers) und hier nachziehen. */
    --hw-rail-top: 87px;
}

/* ----------------------------------------------------------------------------
   Grundregeln aus Abschnitt 6: Schrift, Überschriften, Links, Fokus.
   ------------------------------------------------------------------------- */

/* !important ist hier NÖTIG und war kurzzeitig raus:
   ohne !important rendert der Kern in Poppins. Die Annahme, Poppins käme aus
   Evolution und sei mit dem eigenen Theme erledigt, war falsch: Die Vorgabe
   steckt in der pro Verkaufskanal kompilierten Kern-Datei
   (5.2.1_bootstrap-sc<Kanal>.min.css) und trägt dort selbst !important.
   Der saubere Weg wäre, die Schrift im Admin unter Verkaufskanal → Branding
   auf Biennale zu stellen — das geht in hostware v1.1.8 NICHT: eigene
   Schriften kommen laut Hersteller erst mit einem künftigen Update.
   Bis dahin bleibt diese Zeile samt
   !important. Nebenwirkung: Der Kern lädt weiterhin Poppins-Dateien, die
   niemand benutzt. */
body {
    font-family: var(--font-sans) !important;
}

/* Schrift auch auf den Bootstrap-Bausteinen, die eine eigene font-family
   setzen. Selektorenliste aus dem Admin-Feld übernommen, Ersatzkette
   wie oben.
   !important aus demselben Grund wie oben. */
h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6,
.btn, button, input, select, textarea, .form-control, .form-select,
.tooltip-inner, .dropdown-menu, .nav-link, .table {
    font-family: var(--font-sans) !important;
}

/* Deckt auch die .h1–.h6-Klassen ab — Obermenge der Feld-Zeile
   (dort nur h1–h3 samt Klassen), die damit zur Dublette wird. */
h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {
    letter-spacing: -0.015em;
}

/* Links ohne Unterstreichung, wie bisher im Feld — aber ohne !important.
   Die Unterstreichung der Zustimmungs-Links im Warenkorb (Feld, Abschnitt 5)
   behält ihr !important, bis dieser Block regulär umzieht; danach reicht
   dort die höhere Spezifität. */
a {
    text-decoration: none;
}

/* Fokus wie in global.css der Website (Zeile 122-127: Umriss 2px aus
   --border-focus, Schein 5px Gelb 55 %) — Tastaturbedienung im Kundenmenü
   darf nicht schlechter sein als auf der Website. --border-focus kommt über
   das Kopf-Fragment mit und kippt im Dunkeln auf Gelb; der zweite Wert ist der
   Rückfall ohne Fragment. Lädt das Fragment, gewinnt dessen gleichlautende
   Regel ohnehin (gleiche Spezifität, später geladen). */
:focus-visible {
    outline: 2px solid var(--border-focus, #2B4358);
    outline-offset: 2px;
    box-shadow: 0 0 0 5px rgba(251, 222, 55, .55);
}

/* Knöpfe: Bootstrap setzt .btn:focus-visible auf outline: 0 und seinen eigenen
   Schatten (--bs-btn-focus-box-shadow, gemessen rgba(38,143,255,.5), also
   Blau auf dem gelben Knopf), während Leiste und Reiter den Ring oben tragen
   (Briefing 194, Block 3a). Gleiche Spezifität (0,2,0) wie der Kern, diese
   Datei lädt später und gewinnt. Umriss UND Schatten setzen: nur das Merkmal
   zu ersetzen ließe das outline: 0 des Kerns stehen. */
.btn:focus-visible {
    outline: 2px solid var(--border-focus, #2B4358);
    outline-offset: 2px;
    box-shadow: 0 0 0 5px rgba(251, 222, 55, .55);
}

/* ----------------------------------------------------------------------------
   Schmale Kopfzeile (ersetzt die Kern-Navbar; Sprache, Warenkorb,
   Zugangswechsel, Kind-Login-Abmeldung)
   ------------------------------------------------------------------------- */

/* Der Warenkorb sitzt bündig unter dem „Zur Website"-Knopf des
   Website-Headers (Variante b) — nicht per vw-Rechnung, sondern mit derselben
   Container-Mechanik wie dort: .mk-nav hat padding 22px clamp(20px, 4vw, 32px),
   darin .mk-nav__inner mit max-width 1280px und margin: 0 auto. 32 und 1280
   sind FREMDZAHLEN aus dem Website-CSS (32 seit der Verdichtung der Leiste,
   30.08.2026, vorher 48): Ändert die Website ihren Container, laufen Knopf
   und Warenkorb auseinander — dann hier nachziehen.

   Die Kopfzeile läuft dafür über die volle Fensterbreite (das frühere
   margin-left neben der Leiste entfällt ersatzlos; das calc(-1*…) aus dem
   früheren Schnipsel war als Aufhebung dieses margins gemeint — beim
   direkten Bearbeiten der Regel ist Weglassen die korrekte Form, denn
   Überschreiben summiert nicht). Links entsteht nur leerer Raum, die Leiste
   (z-index 100) liegt darüber; der Inhalt ist rechtsbündig.

   Rahmen und eigener Hintergrund entfallen:
   transparent statt Farbe, damit die Kopfzeile künftigen Branding-Änderungen
   des Rumpfs folgt. Senkrechte Polsterung bleibt 10px — Höhen-Vorschlag
   zurückgezogen; ohne den 1px-Rahmen ergeben sich 58px Höhe. */
.hw-topbar {
    padding: 10px 32px;
    background: transparent;
}

.hw-topbar-inner {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: 10px;
    max-width: 1280px;
    margin: 0 auto;
}

/* ----------------------------------------------------------------------------
   Seitenleiste — links neben dem Inhalt, unterhalb des Fragment-Headers, kein Logo
   ------------------------------------------------------------------------- */

.hw-rail {
    /* Die Leiste läuft mit der Seite mit. Zwei Alternativen sind am 07.08.
       geprüft und verworfen: fest im Fenster (lag über der Fußzeile bzw.
       wurde von ihr mitten im Menüpunkt abgeschnitten) und ein Raster auf
       <body> mit klebender Leiste (die Fußzeile verlor dabei die volle
       Breite, und die Klemmung am Rasterfeld griff nicht — die Leiste ragte
       weiter in die Fußzeile). Dauerhaft sichtbar hält sie inzwischen
       public/js/rail-pin.js über die Klasse is-pinned (Regel direkt unter
       diesem Block) — ohne JavaScript gilt weiter dieser Grundzustand.

       bottom: 0 reicht die Fläche bis zum Seitenende durch — sonst klaffte
       zwischen dem letzten Menüpunkt und der Fußzeile eine weiße Lücke. Der
       Teil, der unter die Fußzeile ragt, ist unsichtbar: die Fußzeile liegt
       mit z-index 101 darüber. */
    /* ── Farben der Leiste ────────────────────────────────────────────
       Als eigene Merkmale, damit der Dunkelmodus in hw.css sieben Werte
       setzt statt siebzehn Regeln zu wiederholen. Wer hier etwas aendert,
       aendert es fuer beide Modi an einer Stelle.

       Kontraste gegen die jeweilige Flaeche, gerechnet nach WCAG:
         Menuepunkt   #5D616E auf #F5F7FA   5.75:1
         aktiv        #1E1E24 auf #FFFFFF  16.58:1
         Name         #1E1E24 auf #F5F7FA  15.45:1
         leise        #63677A auf #F5F7FA   5.22:1
       Alle ueber den 4.5:1 der Stufe AA. */
    --rail-bg:        #F5F7FA;
    --rail-fg:        #5D616E;   /* Menuepunkte, Sprachzeile */
    --rail-fg-stark:  #1E1E24;   /* aktiv, Name, Hover */
    --rail-fg-leise:  #63677A;   /* Gruppenlabel, E-Mail-Zeile */
    --rail-hover:     rgba(43, 67, 88, .06);
    --rail-aktiv:     #FFFFFF;
    --rail-linie:     #E5E8ED;

    position: absolute;
    top: var(--hw-rail-top);
    bottom: 0;
    left: 0;
    z-index: 100;
    display: flex;
    flex-direction: column;
    width: var(--hw-rail-width);
    /* 14px rundum statt der 18px/14px aus dem Mockup: Alle
       Blockabstände in der Leiste
       (nav → Nutzerblock → Sprachzeile) sind 14px — die Innenpolsterung
       zieht nach. Begründung ist die Konsistenz, nicht die Höhe; dass auf
       der Domain-Seite damit zufällig Fall 3 (846 → 838 bei 840er-
       Ausschnitt) entfällt, ist Nebeneffekt, keine Zielgröße. */
    padding: 14px;
    overflow-y: auto;
    background: var(--rail-bg);
    color: var(--rail-fg-stark);
    /* Auf heller Flaeche braucht die Leiste eine Kante, sonst verlaeuft
       sie in die Seite. Im Dunkeln uebernimmt --rail-linie den Wert der
       Modus-Schicht. */
    border-right: 1px solid var(--rail-linie);
}

/* Dauerhaft sichtbare Leiste. Die Klasse setzt
   ausschließlich public/js/rail-pin.js, und nur oberhalb 720px; top, bottom
   und height kommen fensterbezogen als Inline-Werte aus der Messung.
   Durchgehend gilt die Sollhöhe
   min(natürliche Höhe, Fensterhöhe − Header-Unterkante): Reicht der Platz
   über der Fußzeile nicht dafür, behält die Leiste die Sollhöhe (height
   gesetzt, bottom: auto) und wird von der Fußzeile als Ganzes aus dem Bild
   geschoben — eine zu hohe Leiste scrollt dabei innen, wird aber nie mehr
   an der Fußzeile gestaucht. Die Fallwahl steht im Skript. Die Media-Query
   ist das Sicherheitsnetz: Sollte die Klasse beim Verkleinern des Fensters
   einen Moment stehen bleiben, gewinnt unter 720px trotzdem die waagerechte
   Leiste. Ohne JavaScript existiert die Klasse nicht. */
@media (min-width: 720px) {
    .hw-rail.is-pinned {
        position: fixed;
    }
}

.hw-rail nav {
    display: flex;
    flex-direction: column;
}

.hw-rail-list {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin: 0;
    padding: 0;
    list-style: none;
}

/* Navigationspunkt: 14px Schrift, 8px/10px Polsterung, Radius 8px,
   links ein 3px breiter transparenter Balken.

   Das Mockup nennt 12px — das galt für eine 160px schmale Leiste. Seit sie
   260px breit ist, wirkte 12px gegen den Inhalt zu klein: dort stehen
   15,5px (Listenpunkte) bis 16px (Fließtext, Tabellen, Knöpfe), gemessen am
   07.08. 14px hält den Abstand zur Inhaltsschrift, ohne winzig zu wirken.
   Unterpunkte 13px, damit die Ebene erkennbar bleibt. */
.hw-rail-link {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 10px;
    border-left: 3px solid transparent;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 500;
    line-height: 1.3;
    color: var(--rail-fg);
    text-decoration: none;
    cursor: pointer;
}

.hw-rail-link > i {
    flex: 0 0 auto;
    width: 14px;
    text-align: center;
}

.hw-rail-link > span {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.hw-rail-link:hover {
    color: var(--rail-fg-stark);
    background: var(--rail-hover);
}

/* Aktiver Punkt: eigene Flaeche aus --rail-aktiv, Text aus
   --rail-fg-stark, linker Balken in Markengelb, font-weight 600.
   Die Farbwerte stehen bewusst NICHT hier, sondern bei den Merkmalen
   oben im .hw-rail-Block und in hw.css. Ein Kommentar, der einen Wert
   wiederholt, wird beim naechsten Wechsel zur Falschaussage - genau das
   war er nach Briefing P. */
.hw-rail-link.is-active {
    background: var(--rail-aktiv);
    border-left-color: var(--hw-brand-yellow);
    color: var(--rail-fg-stark);
    font-weight: 600;
}

.hw-rail-link .badge,
.hw-rail-sublink .badge {
    flex: 0 0 auto;
    margin-left: auto;
}

/* Aufklapper (details/summary) für Punkte mit Kindern */
.hw-rail summary {
    list-style: none;
}

.hw-rail summary::-webkit-details-marker {
    display: none;
}

.hw-rail-caret {
    flex: 0 0 auto;
    margin-left: auto;
    transition: transform .15s ease;
}

.hw-rail-details[open] > summary .hw-rail-caret {
    transform: rotate(180deg);
}

/* Reduzierte Bewegung: der Pfeil ist die einzige Bewegung im Theme, er dreht
   dann ohne Übergang. Website und App haben diesen Rückfall, das Kundenmenü
   hatte ihn nicht (Briefing 194, Block 3b). */
@media (prefers-reduced-motion: reduce) {
    .hw-rail-caret {
        transition: none;
    }
}

/* Kinder: eingerückt, dünnere Schrift, kein gelber Balken */
.hw-rail-children {
    margin: 2px 0 4px;
    padding: 0;
    list-style: none;
}

.hw-rail-sublink {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 10px 6px 35px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 400;
    line-height: 1.3;
    color: var(--rail-fg);
    text-decoration: none;
}

.hw-rail-sublink > i {
    flex: 0 0 auto;
    width: 14px;
    text-align: center;
}

.hw-rail-sublink > span {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.hw-rail-sublink:hover {
    color: var(--rail-fg-stark);
    background: var(--rail-hover);
}

.hw-rail-sublink.is-active {
    background: var(--rail-aktiv);
    color: var(--rail-fg-stark);
    font-weight: 600;
}

/* Zwischenüberschriften aus dem Menü-Manager (Typ DEVIDER) */
.hw-rail-group-label {
    display: block;
    padding: 8px 10px 2px 35px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: var(--rail-fg-leise);
}

/* Konto-Punkte, optisch abgesetzt unter den globalen Punkten */
.hw-rail-account {
    margin-top: 18px;
    padding-top: 12px;
    border-top: 1px solid var(--rail-linie);
}

/* Nutzerblock ganz unten: Gravatar, Name, E-Mail-Adresse */
.hw-rail-user {
    display: flex;
    align-items: center;
    gap: 10px;
    /* KEIN margin-top: auto. Seit die Leiste bis zum Seitenende reicht,
       würde der Block sonst ganz nach unten wandern und läge hinter der
       Fußzeile. Er sitzt jetzt direkt unter dem letzten Menüpunkt. */
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--rail-linie);
}

.hw-rail-user img {
    flex: 0 0 auto;
    width: 32px;
    height: 32px;
    border-radius: 50%;
}

.hw-rail-user-text {
    min-width: 0;
}

.hw-rail-user-text strong {
    display: block;
    overflow: hidden;
    font-size: 13px;
    font-weight: 600;
    color: var(--rail-fg-stark);
    text-overflow: ellipsis;
    white-space: nowrap;
}

.hw-rail-user-text small {
    display: block;
    overflow: hidden;
    font-size: 12px;
    color: var(--rail-fg-leise);
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Sprachwechsler als flache Zeile, letztes Kind der Leiste.
   Kein Dropdown — .hw-rail schneidet mit overflow-y: auto
   jedes aufklappende Menü an der Leistenkante ab. KEIN margin-top: auto,
   sonst hinge die Kindposition an der Containerhöhe und die Fallwahl in
   rail-pin.js kippte; feste 14px wie beim Nutzerblock darüber. 12px trennen
   die Sprachen, 4px die Zeilen bei Umbruch. */
.hw-rail-lang {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 4px 12px;
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--rail-linie);
}

.hw-rail-lang form {
    margin: 0;
}

/* Ein Eintrag: Fahne + Text, 13px wie die Untereinträge der Leiste,
   gedämpft, im Hover heller — kein Bootstrap-Knopf (gilt für die aktive
   Sprache als <span> und die Umschalter als <button> gleichermaßen).
   6px zwischen Fahne und Text — enger als die 8px der Menüpunkte, die
   Zeile ist gedrängter. */
.hw-rail-lang-item {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 6px;
    border: 0;
    border-radius: 8px;
    background: none;
    font-size: 13px;
    line-height: 1.3;
    color: var(--rail-fg);
}

button.hw-rail-lang-item {
    cursor: pointer;
}

button.hw-rail-lang-item:hover {
    color: var(--rail-fg-stark);
    background: var(--rail-hover);
}

/* Aktive Sprache: sichtbar hervorgehoben, aber kein Klickziel */
.hw-rail-lang-item.is-current {
    color: var(--rail-fg-stark);
    font-weight: 600;
}

/* ----------------------------------------------------------------------------
   Inhalt bekommt links Platz. main.page-main aus base.twig und cms/page.twig,
   main.hw-main aus base-normal.twig, .mk-footer ist der Website-Footer aus dem
   Fragment. Der Fragment-Header darüber bleibt bewusst volle Breite.
   ------------------------------------------------------------------------- */

/* padding-left, NICHT margin-left: main.hw-main ist im Kern width:100%.
   Mit margin-left lief es 220px über den rechten Fensterrand hinaus (am
   07.08. gemessen: main von 220 bis 1930 bei 1710px Fensterbreite), und die
   letzte Kennzahlen-Kachel wurde abgeschnitten. Padding verschiebt den
   Inhalt, ohne die Breite zu vergrößern. */
body:has(.hw-rail) main.page-main,
body:has(.hw-rail) main.hw-main {
    padding-left: var(--hw-rail-width);
}

/* Die Fußzeile bekommt KEINE Einrückung. Sie stammt aus dem Website-Fragment
   und soll im Kundenmenü genauso aussehen wie auf der Website — gemessen am
   07.08.: mit Einrückung begann ihr Inhalt bei 321 statt bei 205, also 260px
   zu weit rechts. Die Leiste liegt hinter ihr (z-index 101 gegen 100) und
   wird verdeckt, eine Einrückung ist deshalb nicht nötig. */

/* ----------------------------------------------------------------------------
   Unter 720 px: Leiste waagerecht, aktiver Punkt mit gelbem Balken unten
   ------------------------------------------------------------------------- */

@media (max-width: 719.98px) {
    body:has(.hw-rail) main.page-main,
    body:has(.hw-rail) main.hw-main {
        padding-left: 0;
    }

    .hw-rail {
        position: static;
        flex-direction: row;
        align-items: center;
        width: 100%;
        padding: 8px 14px;
        overflow-x: auto;
        overflow-y: hidden;
    }

    .hw-rail nav {
        flex-direction: row;
        align-items: center;
    }

    .hw-rail-list {
        flex-direction: row;
        align-items: center;
    }

    .hw-rail-item {
        flex: 0 0 auto;
    }

    .hw-rail-link,
    .hw-rail-sublink {
        border-left: none;
        border-bottom: 3px solid transparent;
        border-radius: 8px 8px 0 0;
        white-space: nowrap;
    }

    .hw-rail-link.is-active {
        border-bottom-color: var(--hw-brand-yellow);
    }

    /* Kinder behalten auch waagerecht keinen gelben Balken */
    .hw-rail-sublink {
        padding: 8px 10px;
    }

    .hw-rail-details {
        display: flex;
        align-items: center;
    }

    .hw-rail-children {
        display: flex;
        flex-direction: row;
        align-items: center;
        margin: 0;
    }

    .hw-rail-group-label {
        padding: 8px 6px 2px;
        white-space: nowrap;
    }

    .hw-rail-account {
        margin: 0 0 0 10px;
        padding: 0 0 0 10px;
        border-top: none;
        border-left: 1px solid var(--rail-linie);
    }

    /* Name und Adresse haben in der waagerechten Leiste keinen Platz;
       Abmelden bleibt als Punkt der Konto-Gruppe erreichbar. */
    .hw-rail-user {
        display: none;
    }

    /* Der Sprachwechsler reiht sich in die waagerechte Leiste ein,
       abgesetzt wie die Konto-Gruppe (rail-pin.js ist hier untätig,
       die Höhenmessung spielt keine Rolle). */
    .hw-rail-lang {
        flex-wrap: nowrap;
        margin: 0 0 0 10px;
        padding: 0 0 0 10px;
        border-top: none;
        border-left: 1px solid var(--rail-linie);
    }

    .hw-rail-lang-item {
        white-space: nowrap;
    }
}

/* ----------------------------------------------------------------------------
   Zwei Befunde aus der Messung am laufenden System
   ------------------------------------------------------------------------- */

/* 1. Hauptpunkte dürfen umbrechen statt abzuschneiden.
      Die Namen kommen aus dem Menü-Manager und bleiben, wie sie sind.
      "Meine Produkte und Dienste" braucht 159px
      Textbreite und passte auch bei 220px Leistenbreite nicht in eine Zeile,
      weil Symbol und Aufklapp-Pfeil mitzählen. Zwei Zeilen sind besser als
      abgeschnittene Wörter.
      Die UNTERpunkte behalten die Auslassungspunkte: dort stehen echte
      Produktnamen ("Hosting Start (Nr. 10003)"), deren Länge nicht
      vorhersehbar ist — die würden die Leiste sonst beliebig hoch machen. */
@media (min-width: 720px) {
    .hw-rail-link > span {
        overflow: visible;
        text-overflow: clip;
        white-space: normal;
    }
}

/* 2. Der Inhalt darf nicht unter der Leiste hervorlaufen.
      Die 1300px-Breitenangleichung setzte früher das Admin-Feld, jetzt steht
      sie in dieser Datei (im Abschnitt weiter unten). Bei 1512px Fensterbreite
      bleiben neben der Leiste weniger als 1300px — die Kennzahlen-Kacheln
      liefen rechts aus dem Bild. body:has(.hw-rail) ist spezifischer als die
      1300px-Regel und gewinnt ohne !important; auf breiten Bildschirmen
      bleibt es bei 1300px. Diese Ausnahme bleibt dauerhaft — sie gehört zur
      Leiste, nicht zum Feld. */
body:has(.hw-rail) nav.navbar,
body:has(.hw-rail) .page-main,
body:has(.hw-rail) .hw-container {
    max-width: min(1300px, 100%);
}

/* Die Angleichung an den Website-Header (max-width 1304, margin-Formel) steht
   im @media (min-width: 720px)-Block am Dateiende — sie
   existiert nur wegen der senkrechten Leiste. */


/* ----------------------------------------------------------------------------
   Drei weitere Befunde aus der Durchsicht
   ------------------------------------------------------------------------- */

/* 1. Die Kopfzeile bleibt oben stehen.
      Das Fragment bringt .mk-nav bereits als position:sticky mit z-index 901
      und eigenem Hintergrund (#F8F9FB) mit — sie klebt nur nicht, weil ihr
      Elternteil <header> genauso hoch ist wie sie selbst und beim Scrollen
      sofort aus dem Bild läuft. Ein sticky-Element klebt aber nur, solange
      sein umgebender Block sichtbar ist. Deshalb klebt hier das <header>.
      z-index über der Leiste (100), damit deren Oberkante darunter liegt.
      :not(.hw-topbar) ist nötig: unsere eigene schmale Kopfzeile ist ebenfalls
      ein <header> direkt unter <body> und wurde sonst mitgeklebt — sie lag dann
      über der Marke, und das Logo war beim Scrollen verdeckt. Sie scrollt
      bewusst mit weg; die Leiste bleibt ja ohnehin stehen. */
body:has(.hw-rail) > header:not(.hw-topbar) {
    position: sticky;
    top: 0;
    z-index: 902;
}

/* 2. Der Umbruch der Hauptpunkte gilt nur für die senkrechte Leiste (oben auf
      min-width 720px begrenzt). Ohne die Begrenzung wirkte white-space:normal
      auch in der waagerechten Fassung — dort liefen die Beschriftungen
      übereinander, weil overflow:visible sie über die Nachbarn schreiben ließ. */




/* ----------------------------------------------------------------------------
   Nachtrag 3 vom 07.08.2026 — Leiste läuft mit, Fußzeile bleibt unangetastet
   ------------------------------------------------------------------------- */

/* Bezugspunkt für die absolut gesetzte Leiste. */
body:has(.hw-rail) {
    position: relative;
}

/* Der Inhalt ist mindestens eine Bildschirmhöhe hoch. Ohne das zöge die
   Fußzeile auf kurzen Seiten nach oben und läge neben der Leiste statt
   darunter. 146px = Kopfzeile (87) + schmale Kopfzeile (59). */
body:has(.hw-rail) main.page-main,
body:has(.hw-rail) main.hw-main {
    min-height: calc(100vh - 146px);
}

/* Sicherheitsnetz: Sollte die Leiste auf einer Seite doch einmal länger sein
   als der Inhalt, liegt die Fußzeile vorn statt die Leiste über ihr. */
body:has(.hw-rail) .mk-footer {
    position: relative;
    z-index: 101;
}

@media (max-width: 719.98px) {
    body:has(.hw-rail) main.page-main,
    body:has(.hw-rail) main.hw-main {
        min-height: 0;
    }
}

/* ----------------------------------------------------------------------------
   Reiterzeile über dem Inhalt
   Ersetzt die seitenbezogene linke Spalte. Die Leiste trägt den gelben
   Balken links, die Reiter unten — Gelb markiert, wo man ist.
   ------------------------------------------------------------------------- */

/* Die Zeile scrollt waagerecht statt umzubrechen. Unter 720px ist das
   gefordert; oberhalb ist es unschädlich und fängt den Fall ab, dass sieben
   Reiter bei 992px nicht nebeneinander passen. */
.hw-tabs {
    display: flex;
    align-items: flex-end;
    /* Abstand zum Inhalt darunter: 24px laut Vorgabe */
    margin-bottom: 24px;
    overflow-x: auto;
}

/* Die 1px-Linie sitzt als ::after auf der Liste, nicht als border auf
   .hw-tabs: Im Scroll-Container kann kein Kind über den Rahmen des
   Containers zeichnen (der liegt außerhalb des Clips), und negative
   margins erzeugten dort eine senkrechte Scrollleiste. So läuft die Linie
   mit dem Inhalt mit und deckt per flex-grow trotzdem die volle Breite. */
.hw-tabs-list {
    position: relative;
    display: flex;
    flex: 1 1 auto;
    min-width: max-content;
    margin: 0;
    padding: 0;
    list-style: none;
}

.hw-tabs-list::after {
    content: "";
    position: absolute;
    right: 0;
    bottom: 0;
    left: 0;
    height: 1px;
    background: var(--hw-border-header);
}

.hw-tabs-list li {
    flex: 0 0 auto;
}

/* Reiter: 14px Schrift, 10px/14px Polsterung, Radius oben, Farbe Graphit.
   Der transparente 3px-Balken hält die Höhe, damit beim Aktivwerden nichts
   springt; z-index 1 legt den Reiter über die 1px-Linie, damit Gelb sie
   überdeckt. */
.hw-tab {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 10px 14px;
    border-bottom: 3px solid transparent;
    border-radius: 8px 8px 0 0;
    font-size: 14px;
    line-height: 1.3;
    color: var(--hw-graphite);
    text-decoration: none;
    white-space: nowrap;
}

/* Symbol wie in der Leiste: 14px breit, mittig, 8px Abstand zum Text
   (der Abstand kommt aus dem gap des Reiters) */
.hw-tab > i {
    flex: 0 0 auto;
    width: 14px;
    text-align: center;
}

.hw-tab:hover {
    color: var(--hw-navy-deep);
    background: var(--hw-cloud);
}

/* Aktiver Reiter: Navy, 600, unten 3px Gelb über der 1px-Linie */
.hw-tab.is-active {
    color: var(--hw-navy-deep);
    font-weight: 600;
    border-bottom-color: var(--hw-brand-yellow);
}

/* Knopf rechts in der Reiterzeile. Rechtsbündig, weil die Liste
   per flex-grow den Platz nimmt. 12px Abstand zur Liste; 6px über der
   1px-Linie, damit der Knopf nicht auf ihr aufsitzt — ersetzt die
   Abstands-Utilities mt-2/mb-2 aus der alten Spalte. width:auto neutralisiert
   ein eventuelles btn-block (volle Breite) aus den beibehaltenen
   Kern-Klassen, falls der Kanal-Bootstrap die Klasse noch mitbringt. */
.hw-tabs .hw-tabs-action {
    flex: 0 0 auto;
    width: auto;
    margin-left: 12px;
    margin-bottom: 6px;
    white-space: nowrap;
}

/* Aktionsgruppe der Produkt-Detailseiten in der Seitenkopfzeile:
   Statusabzeichen und die aus der alten Spalte verschobenen Knöpfe
   (Aktionen, Up-/Downgrade, Vertrag) nebeneinander, rechtsbündig im
   Aktions-Slot von base-normal, mit Umbruch bei Platznot. 8px Abstand —
   ersetzt die alten Spalten-Utilities btn-block/mb-2 der Knöpfe. */
.hw-page-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
}

/* ----------------------------------------------------------------------------
   Aus dem Admin-Feld „Eigenes CSS" umgezogene Regeln

   Das Feld wird NACH dieser Datei eingebunden: Solange eine Regel noch in
   beiden steht, gewinnt das Feld — erwünscht während des Umzugs, es kann
   nichts kaputtgehen. Sichtbar wird die jeweilige Theme-Regel erst, wenn
   die Feld-Zeile gelöscht wird. Schrift, letter-spacing und a-Regel stehen
   oben bei den Grundregeln, wohin sie gehören.
   ------------------------------------------------------------------------- */

/* Farben. Link-Farben Navy statt Bootstrap-Blau; der Hover-Wert #1B2C3B ist
   bewusst eine Stufe dunkler als --hw-navy-deep und hat kein eigenes Token
   (Wert aus dem Feld übernommen). --bs-secondary hält Phantom: Ohne die
   Zeile fiele der Wert auf das Branding-Paket des Kanals zurück
   (branding_secondary = #FBDE37) — ob die Zeile entbehrlich ist, klärt
   später ein Einzeltest, nicht dieser Umzug. */
:root {
    --bs-link-color: var(--hw-navy-deep);
    --bs-link-hover-color: #1B2C3B;
    --bs-secondary: var(--hw-phantom);
}

/* Knöpfe. Gelb mit Navy-Schrift, Amber für Hover und Aktiv — die neun
   Bootstrap-Knopfvariablen aus dem Feld, Hex-Werte durch Token ersetzt. */
.btn-primary {
    --bs-btn-color: var(--hw-navy-deep);
    --bs-btn-bg: var(--hw-brand-yellow);
    --bs-btn-border-color: var(--hw-brand-yellow);
    --bs-btn-hover-color: var(--hw-navy-deep);
    --bs-btn-hover-bg: var(--hw-amber-gold);
    --bs-btn-hover-border-color: var(--hw-amber-gold);
    --bs-btn-active-color: var(--hw-navy-deep);
    --bs-btn-active-bg: var(--hw-amber-gold);
    --bs-btn-active-border-color: var(--hw-amber-gold);
}

/* Umriss-Knopf: Phantom statt reinem Schwarz
   (var(--hw-phantom) statt #000). */
.btn-outline-primary {
    color: var(--hw-phantom);
}

/* Zweiter Umriss-Knopf. Der Kanal kompiliert Bootstrap mit
   branding_secondary = #FBDE37, und 5.2 setzt die Knopf-Merkmale AM Bauteil -
   die :root-Zeile fuer --bs-secondary weiter oben kann sie deshalb nicht
   erreichen. Ergebnis: Markengelb als Schrift- und Rahmenfarbe, auf Weiss
   1,35:1 statt der geforderten 4,5:1. Betrifft unter anderem
   "Vertrag kuendigen" auf der Vertragsseite.
   Nur fuer den hellen Modus noetig: Im Dunkeln setzt hw.css Zeile 71
   .dark-mode .btn { --bs-btn-color: var(--fg) } und gewinnt ueber die
   Spezifitaet. Deshalb hier bewusst KEINE dark-mode-Fassung.
   Rahmen aus --border, weil das hier das semantisch richtige Merkmal ist.
   ACHTUNG, frueher stand hier das Gegenteil: --hw-border-header kippt sehr
   wohl mit dem Modus - die tokens.css der Website definiert es im
   Dunkelblock ein zweites Mal (Z. 238, rgba(255,255,255,.10) gegen #E5E8ED
   in Z. 92), und das Kundenmenue laedt diese Stilvorlage fuer Kopf und Fuss
   mit. Dasselbe gilt fuer --hw-bg-header, --hw-bg-navy-tint und
   --hw-bg-yellow-tint. Alle uebrigen --hw-* stehen fest. Der zweite Wert
   ist der Rueckfall, falls das Website-Fragment einmal ohne seine
   Stilvorlage ankommt. */
.btn-outline-secondary {
    --bs-btn-color: var(--hw-navy-deep);
    --bs-btn-border-color: var(--border, var(--hw-border-header));
    --bs-btn-hover-color: var(--hw-navy-deep);
    --bs-btn-hover-bg: var(--hw-brand-yellow);
    --bs-btn-hover-border-color: var(--hw-brand-yellow);
    --bs-btn-active-color: var(--hw-navy-deep);
    --bs-btn-active-bg: var(--hw-amber-gold);
    --bs-btn-active-border-color: var(--hw-amber-gold);
}

/* Layout. Breitenangleichung ans Website-Raster, wörtlich aus dem Feld.
   Auf Seiten mit Leiste überstimmt die Ausnahme body:has(.hw-rail) … weiter
   oben diese Regel mit min(1300px, 100%) — höhere Spezifität, die
   Reihenfolge in der Datei spielt keine Rolle. Das footer-Glied trifft
   hostwares eigene (ausgeblendete) Fußzeile; .mk-footer behält sein
   max-width: unset !important im Admin-Feld (Abschnitt 3, bleibt dort). */
nav.navbar,
.page-main,
footer,
.hw-container {
    max-width: 1300px;
}

/* CMS-Seiten (z. B. /domain): Dort steht im <main> nur der leere Alarm-Wrapper,
   der Inhalt liegt in den .cms-section-Geschwistern daneben. Der Kern nimmt dem
   <main> deshalb die Mindesthöhe (.cms-page-main > .page-main { min-height: unset }).
   Unsere Regel weiter oben ist spezifischer und hat das überschrieben — dadurch
   stand ein 782 px hoher leerer Block vor dem Inhalt (am 08.08. gemessen).
   Hier wird die Ausnahme des Kerns wiederhergestellt. */
body:has(.hw-rail) .cms-page-main > main.page-main {
    min-height: unset;
}

/* Die Positionierung der .cms-section und die Neutralisierung des inneren
   .hw-container stehen im @media (min-width: 720px)-Block am
   Dateiende — sie existieren nur wegen der senkrechten Leiste. */

/* Abstand über und unter dem CMS-Inhalt. 50 px sind keine gegriffene Zahl, sondern
   der Wert, den der Kern für alle Panel-Seiten benutzt: .hw-header-section hat
   padding-top: 50px, .hw-content-section padding-bottom: 50px (storefront.min.css).
   :first-of-type / :last-of-type, damit bei mehreren Sections nicht 100 px
   dazwischen entstehen. */
body:has(.hw-rail) .cms-page-main > .cms-section:first-of-type {
    padding-top: 50px;
}

body:has(.hw-rail) .cms-page-main > .cms-section:last-of-type {
    padding-bottom: 50px;
}

/* Die Knopf-Regeln der Domainsuche stehen im
   @media (min-width: 720px)-Block am Dateiende — unter 720 px steht der Knopf
   unter dem Feld, dort ist die volle Breite aus .btn-block richtig. */

/* ----------------------------------------------------------------------------
   Seitenspezifisches — Warenkorb
   ------------------------------------------------------------------------- */

/* Sperrgrund einer Zahlungsart, sichtbar im Kasten (Markup in
   der Theme-Kopie page/checkout/include/agreement-methods.twig, ersetzt dort
   den Bootstrap-Tooltip der Kernfassung). Eine Einschränkung, kein Fehler:
   gedämpft statt alarmrot, aber mit --hw-steel dunkler als text-muted, damit
   der Text lesbar bleibt. 13px wie die Untereinträge der Leiste, ruhige
   Zeilenhöhe; 6px Abstand zwischen Schloss-Symbol und Text bzw. über dem
   Block — kompakt, im Maßstab der small-Zeilen des Kastens. */
.hw-payment-restriction {
    display: flex;
    align-items: flex-start;
    gap: 6px;
    margin-top: 6px;
    font-size: 13px;
    line-height: 1.5;
    color: var(--hw-steel);
}

/* Symbol an der ersten Textzeile ausgerichtet (13px × 1.5 ≈ 20px Zeile,
   das Symbol ist ~13px hoch — 3px setzen es optisch auf die Grundlinie) */
.hw-payment-restriction > i {
    flex: 0 0 auto;
    margin-top: 3px;
}

/* Die Gründe-Liste ohne Punkte und ohne Einzug, damit sie im Kasten
   nicht ausbricht */
.hw-payment-restriction ul {
    margin: 2px 0 0;
    padding: 0;
    list-style: none;
}

/* Der Kern graut gesperrte Zahlungsarten mit opacity: 0.5 aus
   (.payment-method-selection .custom-control.is--disabled in storefront.min.css).
   Deckkraft wirkt auf den ganzen Teilbaum und lässt sich von Kindern nicht
   zurücknehmen: Bei 0.5 über Weiß erreicht selbst reines Schwarz nur 3,98:1,
   WCAG AA verlangt 4,5:1 für Text unter 18 pt. Der Sperrgrund
   wäre damit grundsätzlich nicht lesbar. Deshalb volle Deckkraft und die
   Ausgrauung über die Textfarbe — cursor: not-allowed aus dem Kern bleibt.
   Eng auf .payment-method-selection begrenzt: .is--disabled kommt im
   ausgelieferten DOM nur an diesen beiden Elementen vor (07.08. gezählt). */
body:has(.hw-rail) .payment-method-selection .custom-control.is--disabled {
    opacity: 1;
}

body:has(.hw-rail) .payment-method-selection .custom-control.is--disabled .custom-control-label,
body:has(.hw-rail) .payment-method-selection .custom-control.is--disabled .custom-control-label .text-muted {
    color: var(--hw-steel);
}

/* .text-muted: der Kanal-Bootstrap setzt die Utility fest auf #6c757d mit
   !important. Auf der grauen Kartenfußzeile (#F7F7F7, „Noch kein Konto?" der
   Anmeldung) sind das 4,38:1, unter AA (Briefing 190, Abschnitt 3.1).
   --fg-muted (#63677A) kommt dort auf 5,22:1. !important wie im Kern und wie
   hw.css für den Dunkelmodus, dessen .dark-mode .text-muted durch die höhere
   Spezifität weiter gewinnt. Der zweite Wert ist der Rückfall ohne
   Website-Fragment. */
.text-muted { color: var(--fg-muted, #63677A) !important; }

/* ----------------------------------------------------------------------------
   Ab 720 px: alles, was nur wegen der SENKRECHTEN Leiste existiert
   ---------------------------------------------------------------------------
   Unter 720 px baut der Block „Unter 720 px: Leiste waagerecht" weiter oben
   die Leiste zur waagerechten Zeile um und nimmt main das padding-left. Die
   folgenden Regeln hatten diesen Rückbau nie bekommen und rechneten weiter
   mit --hw-rail-width: 260px. Auf einem 390-px-Telefon ergab das
   margin-left: 272px und eine 118 px schmale Spalte (am 08.08. gemessen:
   Überschrift 94 px breit und 197 px hoch, Suchfeld 55 px, Inhalt 215 px
   über den Rand). Deshalb gelten sie ab hier nur noch dort, wo die Leiste
   tatsächlich senkrecht links steht.
   ------------------------------------------------------------------------- */

@media (min-width: 720px) {

    /* Der Website-Header zentriert .mk-nav__inner (max-width 1280) im Fenster; unser
       Inhalt zentriert sich im Bereich rechts der Leiste und stand deshalb 132 px weiter
       rechts. Hier wird derselbe Bezugspunkt hergestellt.

       1280 ist eine FREMDZAHL aus dem Website-CSS (.mk-nav__inner). 1304 = 1280 + 2 × 12,
       weil .hw-container 12 px Gutter je Seite hat — nur so kommt der INHALT auf 1280.
       652 = 1304 / 2.

       Kein 100vw: vw enthält die Breite der Bildlaufleiste (am 07.08. gemessen: innerWidth
       2880 gegen clientWidth 2865, also 15 px). 50 % bezieht sich dagegen auf den Elternteil,
       der die echte Innenbreite minus Leiste hat — damit stimmt es auch mit Bildlaufleiste.

       Herleitung: Elternbreite P = Fensterbreite W − Leistenbreite L. Gewünschte linke
       Boxkante, vom Elternanfang aus gemessen:
           (W − 1304) / 2 − L  =  (P + L − 1304) / 2 − L  =  P/2 − 652 − L/2
       Das max(12px, …) ist die Untergrenze: Sobald der Header-Container unter die Leiste
       liefe, bleibt der Inhalt an der Leiste stehen statt darunter zu verschwinden.

       Untergrenze von 0 auf 12px angehoben.
       Die 12px sind der halbe Bootstrap-Gutter; zusammen mit der 12-px-Polsterung
       des Containers ergibt das 24px sichtbaren Abstand zur Leiste, wo die
       Fluchtung mit dem Website-Header nicht möglich ist. Ab ~1824px Fensterbreite
       gewinnt der zweite Term und die Fluchtung bleibt unverändert bei 0. Gleiche
       Untergrenze auch an der .cms-section-Regel darunter — sonst entstünden
       zwei verschiedene Abstände im selben Panel.

       Muss NACH der min(1300px, 100%)-Regel stehen — gleiche Spezifität, die
       spätere gewinnt. */
    body:has(.hw-rail) .hw-container {
        max-width: 1304px;
        margin-left: max(12px, calc(50% - 652px - var(--hw-rail-width) / 2));
        margin-right: auto;
    }

    /* Die .cms-section-Geschwister tragen zwar die Klasse page-main, sind aber kein
       <main> — unsere padding-left-Regel greift dort nicht, deshalb lagen ihre linken
       55 px unter der Leiste. Dieselbe Mechanik wie bei .hw-container:
       an der Leiste anschlagen, sonst mit dem Header-Container fluchten.
       Untergrenze var(--hw-rail-width) + 12px, im Gleichschritt
       mit der .hw-container-Regel oben — macht 24px sichtbaren Abstand zur Leiste.
       Korrektur vom 08.08.: Die Section trägt dieselben Maße wie .hw-container
       (1304 = 1280 + 2 × 12 Gutter, 652 = 1304/2), weil der Inhalt der
       CMS-Elemente noch einmal in einem .hw-container steckt — dessen 12 px
       Polsterung bringen den Inhalt auf die Header-Linie. Der innere Container
       selbst wird direkt darunter neutralisiert, sonst rückte er ein zweites
       Mal ein. */
    body:has(.hw-rail) .cms-page-main > .cms-section {
        max-width: 1304px;
        margin-left: max(calc(var(--hw-rail-width) + 12px), calc(50% - 652px));
        margin-right: auto;
    }

    /* Der .hw-container INNERHALB einer CMS-Section darf nicht ein zweites Mal
       einrücken — sonst addieren sich die Untergrenzen (gemessen: 12 + 12 + 12 = 36 px
       statt 24). Die Section übernimmt die Positionierung, der Container nur noch
       seine Polsterung. Greift bewusst auf jeden .hw-container in CMS-Sections,
       auch bei künftigen CMS-Elementen. */
    body:has(.hw-rail) .cms-page-main .cms-section .hw-container {
        max-width: none;
        margin-left: 0;
        margin-right: 0;
    }

    /* Der Knopf der Domainsuche stand 25 px zu hoch — genau die Höhe des Labels
       „Domain", weil in seiner Spalte kein Label steht. Die Spalte streckt sich über
       die volle Zeilenhöhe; wird der Knopf darin mittig gesetzt, liegt er auf dem Feld.
       Und btn-block streckte ihn auf 403 px, obwohl er von Natur aus 112 px breit ist.
       Zusatz 08.08.: nur ab 720 px. Unter 720 px steht der Knopf unter dem Feld,
       dort ist die volle Breite aus .btn-block (storefront.min.css) richtig. */
    body:has(.hw-rail) .hw-domain-search-form-action {
        display: flex;
        align-items: center;
    }

    body:has(.hw-rail) .hw-domain-search-form-action .btn {
        width: auto;
    }
}

/* ----------------------------------------------------------------------------
   Anmelden und Registrieren: geteilte Fläche
   ---------------------------------------------------------------------------
   Gilt nur, wo .hw-auth-split im Dokument steht — also auf genau den zwei
   Seiten, deren Vorlage wir kopiert haben. Die anderen acht Seiten auf
   base-center.twig (Passwort vergessen, 2FA, KYC, Bestellbestätigung,
   Konto wechseln, Newsletter-Abmeldung …) sind unberührt.
   ------------------------------------------------------------------------- */

/* Website-Kopf und -Fuß kommen aus den Theme-Feldern „Eigenes PHP" und liegen
   außerhalb von Twig — sie lassen sich nur hier abschalten. */
body:has(.hw-auth-split) .mk-footer { display: none; }

/* Der Kopf verschwindet, aber NICHT mit display:none — sonst rendert der
   Darstellungs-Umschalter darin überhaupt nicht mehr, und nachbauen lässt er
   sich nicht: seine Logik hängt an einem <script> im Website-Fragment
   (10.08. am DOM abgelesen). Also unsichtbar UND aus dem Fluss genommen,
   damit keine Höhe bleibt; das Kind unten schaltet visibility zurück.
   Gemessen: Höhe des Kopfes im Fluss 0, .hw-auth-split beginnt weiter bei 0. */
body:has(.hw-auth-split) .mk-nav {
    display: block;
    visibility: hidden;
    position: absolute;
    top: 0; left: 0; width: 100%; height: 0;
    overflow: visible;
    border: 0; background: transparent; padding: 0; margin: 0;
}

/* Nur der Schreibtisch-Knopf, nicht der aus der Schublade — sonst lägen beide
   übereinander an derselben Stelle. */
body:has(.hw-auth-split) .mk-nav__right > .hw-ts {
    visibility: visible;
    position: fixed;
    top: 16px;
    right: 16px;
    z-index: 15;
}

/* Bis 1359 px blendet das Website-CSS die rechte Gruppe aus (marketing.css,
   Schubladen-Block) und zeigt stattdessen die Drawer-Fassung des Umschalters — die
   aber in der geschlossenen Schublade sitzt und ohne den Hamburger nicht
   erreichbar ist. Auf diesen beiden Seiten holen wir deshalb die rechte
   Gruppe zurück und lassen darin nur den Umschalter stehen; die Regel aus
   Nachtrag 28 legt ihn dann wie am Schreibtisch oben rechts hin.
   1359 ist eine Fremdzahl aus marketing.css (Umschaltpunkt der Leiste seit
   09.09.2026: Schublade bis 1359, Leiste ab 1360; vorher 1271/1272), kein eigener
   Umbruch. */
@media (max-width: 1359px) {
    body:has(.hw-auth-split) .mk-nav__right { display: block; }
    body:has(.hw-auth-split) .mk-nav__right > *:not(.hw-ts) { display: none; }
}

/* Der Kern gibt hw-center-main Polsterung und Maximalbreite; für eine
   vollflächige Aufteilung muss beides weg. display: block dazu:
   im Kern ist hw-center-main ein Flex-Container — unsere Hülle wurde als
   Flex-Element auf Inhaltsbreite geschrumpft (965 statt 2865 px gemessen),
   und die 42 % der Navy-Fläche bezogen sich auf diese 965 px. */
body:has(.hw-auth-split) main.hw-center-main {
    display: block;
    max-width: none;
    padding: 0;
    margin: 0;
}

/* Unter 720 px: nur die Karte, Navy-Fläche weg. Nicht quetschen — das war
   ein früherer Fehler. */
.hw-auth-side { display: none; }
.hw-auth-form { padding: 32px 16px; }

/* Sprachwechsler in der Formularspalte (Nachtrag 26b). Klassen und Markup sind
   aus base.twig übernommen; dort stehen sie auf dunklem Grund und tragen helle
   Farben. Hier ist der Grund hell, deshalb werden nur die Farben umgesetzt —
   Aufbau, Abstände und Fahnen bleiben, wie sie sind. Bewusst außerhalb der
   720-px-Medienabfrage: Der Wechsler ist in jeder Breite sichtbar.
   Gilt seit Nachtrag 31 auch fuer die Registrierung: Die fruehere
   --schmal-Regel (justify-content: flex-start, passend zur damals
   linksbuendigen Spalte) wurde nach der Zentrierung der Karte deckungsgleich
   mit dieser Regel und entfiel ersatzlos — am 10.08. auf
   /account/register gemessen: nur diese Regel und die gestrichene setzten
   justify-content am Element, keine dritte Quelle. */
.hw-auth-form .hw-rail-lang {
    margin-top: 18px;
    padding-top: 0;
    border-top: none;
    justify-content: center;
}

.hw-auth-form .hw-rail-lang-item {
    color: var(--hw-steel);
}

.hw-auth-form button.hw-rail-lang-item:hover {
    color: var(--hw-navy-deep);
    background: rgba(43, 67, 88, .06);
}

.hw-auth-form .hw-rail-lang-item.is-current {
    color: var(--hw-phantom);
}

/* Rücklink unter der Anmelde-Karte. Stand bis Nachtrag 26c in der
   720-px-Medienabfrage — unter 720 px fiel der Link dadurch auf die
   allgemeine Linkfarbe des Themes zurück (Navy mit gelber Unterstreichung,
   auf dem iPhone gemessen). Er gehört zur Formularspalte und ist in jeder
   Breite sichtbar; die Deklarationen sind unverändert. */
.hw-auth-back {
    display: inline-flex; align-items: center; gap: 8px;
    margin-top: 20px; font-size: 13.5px;
    color: var(--hw-steel); text-decoration: none;
}
.hw-auth-back:hover { color: var(--hw-navy-deep); }

@media (min-width: 720px) {
    .hw-auth-split {
        display: grid;
        grid-template-columns: minmax(360px, 42%) 1fr;
        min-height: 100vh;
    }

    /* Registrieren: schmaler Streifen, damit dem mehrspaltigen Formular die
       Breite bleibt — aber mitwachsend, sonst wirkt er bei sehr breiten
       Fenstern wie ein Rest (bei 2880 px waren es 11 %, Tim am 10.08.).
       minmax hält die Untergrenze: unter 320 px fällt er nie, das Formular
       behält also bei mittleren Fenstern seinen Platz. 26 % ist gewählt,
       nicht abgeleitet — bei 2880 px ergibt das 749 px. */
    .hw-auth-split--schmal {
        grid-template-columns: minmax(320px, 26%) 1fr;   /* vorher: 320px 1fr */
    }

    .hw-auth-side {
        display: flex;
        flex-direction: column;
        padding: 44px 48px;
        color: var(--hw-cloud-white);
        background: linear-gradient(160deg, #2B4358 0%, #22384A 55%, #1B2E3D 100%);
        position: relative;
        overflow: hidden;
    }

    .hw-auth-split--schmal .hw-auth-side { padding: 36px 30px; }

    /* Gelber Lichtschein unten rechts — dasselbe Mittel wie im Mockup. */
    .hw-auth-side::after {
        content: "";
        position: absolute;
        right: -140px; bottom: -160px; width: 420px; height: 420px;
        border-radius: 50%;
        background: radial-gradient(circle, rgba(251,222,55,.16), transparent 62%);
    }

    .hw-auth-logo { align-self: flex-start; height: 26px; width: auto; }
    .hw-auth-split--schmal .hw-auth-logo { height: 24px; }

    .hw-auth-headline {
        /* Ohne eigene Farbe stand hier Navy auf Navy: Die h1–h6-Farbregel
           weiter oben ist spezifischer als die Vererbung von der Fläche
           (Nachtrag 26, gemessen). */
        color: var(--hw-cloud-white);
        margin: 56px 0 14px;
        font-size: 34px; line-height: 1.2; font-weight: 700;
        letter-spacing: -0.02em; max-width: 16ch;
    }
    .hw-auth-split--schmal .hw-auth-headline {
        margin: 38px 0 12px; font-size: 21px; line-height: 1.3; font-weight: 600;
    }

    /* Gelber Schlusspunkt — Markenmerkmal der Website. Dort heißt die Klasse
       „dot" (auf /domain-kaufen 35-mal, Farbe rgb(251,222,55), Gewicht 800,
       am 10.08. gemessen). Hier bewusst mit Präfix, damit sie nicht mit der
       Klasse aus dem Website-Fragment kollidiert. */
    .hw-auth-dot { color: var(--hw-brand-yellow); font-weight: 800; }

    .hw-auth-sub {
        margin: 0 0 40px; font-size: 15.5px; line-height: 1.65;
        color: #C6D2DC; max-width: 44ch;
    }
    .hw-auth-split--schmal .hw-auth-sub { margin: 0; font-size: 14px; }

    .hw-auth-points {
        list-style: none; margin: 0; padding: 0;
        display: flex; flex-direction: column; gap: 12px;
        position: relative; z-index: 1;
    }
    .hw-auth-points li {
        display: flex; align-items: center; gap: 13px;
        font-size: 14.5px; font-weight: 500;
        background: rgba(255,255,255,.055);
        border: 1px solid rgba(255,255,255,.09);
        border-radius: 11px; padding: 12px 15px;
    }
    .hw-auth-points i {
        width: 30px; height: 30px; border-radius: 8px; flex: none;
        background: rgba(251,222,55,.14);
        display: flex; align-items: center; justify-content: center;
        color: var(--hw-brand-yellow); font-size: 15px;
    }

    .hw-auth-foot { margin: auto 0 0; padding-top: 36px; font-size: 12.5px; color: #8FA3B3; }

    .hw-auth-form {
        display: flex; flex-direction: column;
        align-items: center; justify-content: center;
        padding: 48px 24px; background: var(--hw-cloud-white);
    }
    .hw-auth-split--schmal .hw-auth-form {
        align-items: stretch; justify-content: flex-start; padding: 44px 40px;
    }

    /* Die Karte ist heute 348 px schmal und schwimmt in der Fläche. */
    .hw-auth-form .card-wrapper { width: 100%; max-width: 440px; }
    /* Registrieren: gedeckelt auf 1280 — die Fremdzahl aus
       .mk-nav__inner des Website-CSS, mit der auch die .hw-container-Regeln
       rechnen; ohne Deckel lief das Formular bei 2880px
       Fensterbreite auf 2465px. margin: auto zentriert die Karte in der
       Spalte: .hw-auth-form ist flex-direction: column, dort
       steuert justify-content die SENKRECHTE Achse — waagerecht zentriert
       nur margin am Kind. */
    .hw-auth-split--schmal .hw-auth-form .card-wrapper {
        max-width: 1280px;
        margin-left: auto;      /* NEU */
        margin-right: auto;     /* NEU */
    }

    /* Der Alarm-Bereich liegt in base-center.twig als erstes Kind von
       main.hw-center-main, also VOR unserer Hülle. Mit Inhalt schob er die
       geteilte Fläche um 59 px nach unten; da sie min-height: 100vh trägt, wuchs
       die Seite auf 1504 px und bekam eine Bildlaufleiste.
       Deshalb hier aus dem Fluss genommen: schwebend oben rechts, sichtbar, ohne
       das Bild zu verschieben. Leer hat der Bereich Höhe 0 und stört ohnehin nie.

       Bewusst INNERHALB der Medienabfrage: min-height: 100vh gilt nur ab 720 px,
       darunter gibt es also nichts zu verschieben. Am Telefon lag die schwebende
       Meldung auf dem E-Mail-Feld, weil die Karte dort oben beginnt — unter
       720 px bleibt sie deshalb im Fluss. */
    body:has(.hw-auth-split) .hw-alerting-wrapper {
        position: fixed;
        top: 68px;      /* darüber sitzt der Umschalter (38 px + 2 × 16) */
        right: 16px;
        z-index: 20;
        width: min(420px, calc(100% - 32px));
        max-width: none;
    }
}

/* =============================================================================
   Bestellprozess — Auswahlkarten auf schmalen Bildschirmen
   =============================================================================
   Laufzeit und Zahlungsintervall legen ihre Auswahlkarten in einen Behaelter
   mit d-flex flex-wrap gap-2. Die Karten kommen aus der Kernvorlage
   component/ui/radio-card.twig und tragen dort card border mb-0 flex-fill.

   Der Kern setzt darauf in storefront.min.css (am 15.08.2026 an der
   ausgelieferten Datei gemessen):

       .hw-radio-option.flex-fill { flex: 0 0 calc((100% - 1rem) / 3) !important; }

   Das sind DREI Karten pro Zeile, auf jeder Breite - eine Medienabfrage gibt
   es dort nicht. Am Telefon bleiben davon rund 110 px je Karte. Darin passt
   weder "Vierteljaehrlich" noch die Plakette "20% Rabatt" noch "29,57 €":
   Bootstrap gibt .card ein word-wrap: break-word, deshalb bricht der Text
   mitten im Wort, und Plakette und Preis stehen ueber den Rand hinaus.

   FRUEHERER FEHLVERSUCH, damit ihn niemand wiederholt: Hier stand
   'width: 100%' mit der Begruendung, flex-fill lasse flex-basis auf auto und
   die Breite richte sich dann nach width. Das stimmt fuer die reine
   Bootstrap-Klasse, aber nicht hier - der Kern setzt flex-basis ausdruecklich.
   Bei gesetzter flex-basis wird width fuer die Ausgangsbreite gar nicht
   angesehen. Die Regel war nicht zu schwach, sie war wirkungslos.

   Deshalb jetzt derselbe Weg wie der Kern: flex, mit !important, und
   .flex-fill im Selektor. Damit stehen drei Klassen gegen zwei - unter
   !important-Regeln gewinnt die hoehere Spezifitaet.

   Bis 767.98 px, nicht nur bis 576 px: Auch auf einem Tablet im Hochformat
   stehen fuenf Felder mit "Vierteljaehrlich" und Preis zu eng. Eine Liste
   untereinander liest sich dort besser als eine gequetschte Reihe.
   ========================================================================== */
@media (max-width: 767.98px) {
    .hw-contract-term-card .hw-radio-option.flex-fill,
    .hw-payment-period-card .hw-radio-option.flex-fill {
        flex: 0 0 100% !important;
    }
}

/* =============================================================================
   Startseite des Kundenmenues
   =============================================================================
   Gegenstueck zu page/account/dashboard.twig im selben Theme. Die Meldungen
   im Handlungsbereich sind Bootstrap-Alerts aus dem Kern — sie werden hier
   nur in Abstand und Radius eingepasst, ihr Markup bleibt unberuehrt.
   ========================================================================== */
.hw-db { display: block; }

/* ── Lagezeile ───────────────────────────────────────────────────── */
.hw-db__lage {
    display: flex; align-items: center; flex-wrap: wrap; gap: 10px;
    margin: 0 0 22px; font-size: 15px; font-weight: 600;
}
.hw-db__punkt { width: 9px; height: 9px; border-radius: 50%; background: currentColor; }
.hw-db__lage--gut   { color: #2E7D5B; }
.hw-db__lage--acht  { color: #8A5A00; }
.hw-db__lage--alarm { color: #B23A3A; }
.hw-db__nr {
    margin-left: auto; font-weight: 500; font-size: 13px;
    color: var(--bs-secondary-color, #63677A);
}
.dark-mode .hw-db__lage--gut   { color: #7BCFA5; }
.dark-mode .hw-db__lage--acht  { color: #F0C36B; }
.dark-mode .hw-db__lage--alarm { color: #F09393; }
/* Kundennummer im Dunkeln: --bs-secondary-color gibt es in Bootstrap 5.2 nicht,
   der Rückfall #63677A oben gilt deshalb immer und stand im Dunkeln bei 3,08:1
   auf #131C24 (Briefing 190, Abschnitt 3.1). --fg-muted kommt über das
   Website-Fragment (im Dunkeln #A2ADBA, 7,56:1), der zweite Wert ist der
   Rückfall ohne Fragment. */
.dark-mode .hw-db__nr { color: var(--fg-muted, #A2ADBA); }

/* ── Handlungsbereich ────────────────────────────────────────────── */
.hw-db__tun:empty { display: none; }
.hw-db__tun .alert { margin-top: 0; margin-bottom: 10px; border-radius: 12px; }

.hw-db__zahlart {
    display: flex; flex-wrap: wrap; align-items: center; gap: 14px;
    padding: 16px 18px; margin-bottom: 10px; border-radius: 12px;
    background: var(--bs-light, #EDEFF7);
    border: 1px solid var(--bs-border-color, #D3D6E0);
}
.hw-db__zahlart-txt { flex: 1 1 260px; min-width: 0; }
.hw-db__zahlart-txt b { display: block; }
.hw-db__zahlart-txt span { font-size: 13.5px; opacity: .8; }

/* ── Abschnitte ──────────────────────────────────────────────────── */
.hw-db__abschnitt { margin-top: 34px; }
.hw-db__kopf {
    display: flex; align-items: baseline; justify-content: space-between;
    gap: 12px; margin-bottom: 14px;
}
.hw-db__kopf h2 { font-size: 19px; font-weight: 700; margin: 0; }
.hw-db__kopf a { font-size: 13.5px; font-weight: 600; text-decoration: none; opacity: .75; }
.hw-db__kopf a:hover { opacity: 1; }

/* ── Produktkarten ───────────────────────────────────────────────── */
.hw-db__gitter {
    display: grid; gap: 14px;
    grid-template-columns: repeat(auto-fill, minmax(290px, 1fr));
}
.hw-db__karte {
    display: flex; flex-direction: column; gap: 12px;
    padding: 18px; border-radius: 12px;
    background: var(--bs-body-bg, #FFFFFF);
    border: 1px solid var(--bs-border-color, #EDEFF7);
}
.hw-db__karte-kopf { display: flex; align-items: flex-start; gap: 12px; }
.hw-db__marke {
    flex: 0 0 40px; width: 40px; height: 40px; border-radius: 10px;
    display: flex; align-items: center; justify-content: center;
    background: linear-gradient(135deg, #FBDE37 0%, #FBA837 100%);
    color: #2B4358;
}
.hw-db__karte-titel { flex: 1; min-width: 0; }
/* Bezeichnungen beginnen mit einem Rechnernamen. Ein solcher Name ist ein
   einziges Wort ohne Trennstelle, deshalb muss der Umbruch mitten im Wort
   erlaubt sein. Sonst laeuft der Name durch die Ampel und ueber den Rand. */
.hw-db__karte-titel b {
    display: block; font-size: 15.5px; font-weight: 700;
    overflow-wrap: anywhere;
}
.hw-db__karte-titel > span { font-size: 13px; opacity: .7; word-break: break-word; }
.hw-db__ampel {
    flex: 0 0 auto; font-size: 12px; font-weight: 700;
    padding: 4px 10px; border-radius: 999px;
    /* #276B4E statt #2E7D5B: das alte Grün kam auf der blassen Fläche nur auf
       4,43:1 (12px, Briefing 190, Abschnitt 3.1), dieses auf 5,64:1. */
    background: #E8F4EE; color: #276B4E;
}
.hw-db__ampel--acht  { background: #FFF6E0; color: #8A5A00; }
.hw-db__ampel--alarm { background: #FBECEC; color: #B23A3A; }
.dark-mode .hw-db__ampel       { background: rgba(46,125,91,.18);  color: #7BCFA5; }
.dark-mode .hw-db__ampel--acht { background: rgba(251,168,55,.14); color: #F0C36B; }
.dark-mode .hw-db__ampel--alarm{ background: rgba(178,58,58,.18);  color: #F09393; }
.hw-db__karte-datum { font-size: 14px; }
.hw-db__karte-fuss { margin-top: auto; padding-top: 4px; }
.hw-db__mini {
    display: inline-block; font-size: 13px; font-weight: 600; text-decoration: none;
    padding: 7px 14px; border-radius: 999px;
    border: 1px solid var(--bs-border-color, #D3D6E0);
}

/* ── leerer Zustand ──────────────────────────────────────────────── */
.hw-db__leer {
    padding: 26px; text-align: center; border-radius: 12px;
    background: var(--bs-body-bg, #FFFFFF);
    border: 1px dashed var(--bs-border-color, #D3D6E0);
}
.hw-db__leer h3 { font-size: 17px; font-weight: 700; margin: 0 0 6px; }
.hw-db__leer p { max-width: 46ch; margin: 0 auto 16px; font-size: 14px; opacity: .8; }

/* ── Nachschlagewerte ────────────────────────────────────────────── */
.hw-db__neben {
    display: grid; gap: 12px;
    grid-template-columns: repeat(auto-fit, minmax(215px, 1fr));
}
.hw-db__kachel {
    display: flex; align-items: center; gap: 13px; text-decoration: none;
    padding: 15px 17px; border-radius: 12px;
    background: var(--bs-body-bg, #FFFFFF);
    border: 1px solid var(--bs-border-color, #EDEFF7);
    color: inherit;
}
.hw-db__kachel--breit { max-width: 460px; }
.hw-db__kachel-sym {
    flex: 0 0 34px; width: 34px; height: 34px; border-radius: 9px;
    display: flex; align-items: center; justify-content: center;
    background: var(--bs-light, #EDEFF7);
}
.hw-db__kachel-txt { min-width: 0; }
.hw-db__kachel-txt b { display: block; font-size: 16px; font-weight: 700; line-height: 1.25; }
.hw-db__kachel-txt > span { font-size: 12.5px; opacity: .75; }
.hw-db__kachel-txt form { margin: 0; }
.hw-db__link {
    padding: 0; border: 0; background: none; font: inherit;
    font-size: 12.5px; text-decoration: underline; cursor: pointer; color: inherit;
}

/* ── Knoepfe ─────────────────────────────────────────────────────── */
.hw-db__knopf {
    display: inline-flex; align-items: center; gap: 8px; white-space: nowrap;
    font-size: 14px; font-weight: 700; text-decoration: none;
    padding: 10px 20px; border: 0; border-radius: 999px;
    background: #FBDE37; color: #2B4358;
}
.hw-db__knopf--stumm {
    background: transparent; color: inherit;
    border: 1px solid var(--bs-border-color, #D3D6E0);
}

/* ── Hilfe ───────────────────────────────────────────────────────── */
.hw-db__hilfe {
    display: flex; flex-wrap: wrap; align-items: center; gap: 16px;
    margin-top: 34px; padding: 20px 22px; border-radius: 12px;
    background: var(--bs-body-bg, #FFFFFF);
    border: 1px solid var(--bs-border-color, #EDEFF7);
}
.hw-db__hilfe-txt { flex: 1 1 300px; }
.hw-db__hilfe-txt b { display: block; font-size: 16px; }
.hw-db__hilfe-txt span { font-size: 13.5px; opacity: .8; }

@media (max-width: 640px) {
    .hw-db__nr { margin-left: 0; width: 100%; }
    .hw-db__hilfe .hw-db__knopf { flex: 1 1 100%; justify-content: center; }
}

.hw-db__tun .alert .btn {
    background: #FBDE37;
    border: 0;
    color: #2B4358;
    font-size: 14px;
    font-weight: 700;
    padding: 10px 20px;
    border-radius: 999px;
    white-space: nowrap;
}
.hw-db__tun .alert .btn:hover,
.hw-db__tun .alert .btn:focus {
    background: #FBA837;
    color: #2B4358;
}

/* =============================================================================
   Kundenmenue — Form der Bootstrap-Bausteine
   =============================================================================
   Gleicht Knoepfe, Plaketten, Karten und Tabellen an das Aussehen der
   Startseite an. Geaendert werden nur Form und Rhythmus. Die Farben der
   Knopfvarianten stehen weiter oben und bleiben unberuehrt, die
   Dunkelmodus-Farben fuer Karten und Tabellen in hw.css ebenso.
   ========================================================================== */

/* ── A. Knoepfe ──────────────────────────────────────────────────────
   Pillenform wie .hw-db__knopf. Nur Form und Schrift, keine Farbe. */
.btn {
    border-radius: 999px;
    font-size: 14px;
    font-weight: 700;
    padding: 10px 20px;
}
.btn-sm {
    font-size: 13px;
    padding: 7px 14px;
}
.btn-lg {
    font-size: 15px;
    padding: 12px 26px;
}

/* ── B. Plaketten ────────────────────────────────────────────────────
   Bootstrap faerbt text-bg-* kraeftig und schreibt weiss darauf. Auf der
   Startseite tragen die Zustandsplaketten eine blasse Flaeche mit dunkler
   Schrift (.hw-db__ampel). Dieselben Werte hier fuer die Kernseiten.
   Zwei Klassen im Selektor schlagen die eine von .text-bg-*, ein
   Vorrang per Ausrufezeichen ist deshalb nicht noetig. */
.badge {
    border-radius: 999px;
    font-size: 12px;
    font-weight: 700;
    padding: 5px 11px;
}
.badge.text-bg-success   { background-color: #E8F4EE; color: #276B4E; } /* Grün wie .hw-db__ampel, 5,64:1 */
.badge.text-bg-warning   { background-color: #FFF6E0; color: #8A5A00; }
.badge.text-bg-danger    { background-color: #FBECEC; color: #B23A3A; }
.badge.text-bg-primary   { background-color: #FFF6D1; color: #2B4358; }
.badge.text-bg-secondary { background-color: #EDEFF7; color: #63677A; }

.dark-mode .badge.text-bg-success   { background-color: rgba(46,125,91,.18);  color: #7BCFA5; }
.dark-mode .badge.text-bg-warning   { background-color: rgba(251,168,55,.14); color: #F0C36B; }
.dark-mode .badge.text-bg-danger    { background-color: rgba(178,58,58,.18);  color: #F09393; }
.dark-mode .badge.text-bg-primary   { background-color: rgba(251,222,55,.16); color: #FBDE37; }
.dark-mode .badge.text-bg-secondary { background-color: rgba(255,255,255,.08); color: #A2ADBA; }

/* ── C. Karten ───────────────────────────────────────────────────────
   12 Pixel wie .hw-db__karte, ein Rahmen statt eines Schattens. Die
   Kopfzeile verliert ihr graues Band und wird zur blossen Trennlinie. */
.card {
    border-radius: 12px;
    box-shadow: none;
}
.card-header {
    background-color: transparent;
    padding: 16px 18px;
    font-weight: 700;
}

/* ── D. Tabellen ─────────────────────────────────────────────────────
   Luft in den Zeilen und eine zurueckgenommene Kopfzeile. Die Spalten-
   ueberschriften bleiben in normaler Schreibweise — Kapitaelchen waeren
   eine neue Formensprache, die es auf der Startseite nicht gibt. */
.table > thead > tr > th {
    background-color: transparent;
    font-size: 13.5px;
    font-weight: 700;
    padding: 14px 16px;
}
.table > tbody > tr > td {
    padding: 15px 16px;
    vertical-align: middle;
}

/* ── E. Zwischenueberschriften der Kernseiten ────────────────────────
   Der Kern setzt Abschnittsueberschriften als nacktes <h2> ohne Klasse,
   etwa "Aktive Mandate" unter den Zahlungsarten. Ohne eigene Groesse
   gilt der Bootstrap-Wert von zwei Rem, und die Zwischenueberschrift
   wird groesser als die Seitenueberschrift darueber.
   19 Pixel ist derselbe Wert wie .hw-db__kopf h2 auf der Startseite.

   Bewusst nur h2: Die Kartenkoepfe des Kerns sind h5 und sitzen richtig,
   h1 gehoert der Seitenueberschrift. Bewusst ohne Aussenabstaende - daran
   zu drehen verschiebt Layouts, die heute stimmen.

   :not([class]) ist der Kern der Sache und kam nachtraeglich dazu. Ohne
   die Einschraenkung traf die Regel jedes h2 im Container, auch die
   Beschriftungen des Schrittbalkens im Bestellprozess - die stehen dort
   als <h2 class="hw-stepper-step-label"> und wurden von 16 auf 19 Pixel
   und von Halbfett auf Fett gezogen. Gemeint waren immer nur die nackten
   Ueberschriften ohne Klasse, und genau die trifft es jetzt. */
.page-main h2:not([class]),
.hw-container h2:not([class]) {
    font-size: 19px;
    font-weight: 700;
}

/* ── F. Mengenknoepfe im Bestellprozess ──────────────────────────────
   Der Kern baut die Zusatz-Disks als Bootstrap-Knopfgruppe, aber seine
   Bootstrap-Fassung enthaelt die Knopfgruppe gar nicht - das Wort kommt
   in keiner der beiden Kern-Stilvorlagen vor. Ohne display:inline-flex
   ist der Behaelter ein gewoehnlicher Block: die beiden Knoepfe sind
   inline-block, das <div class="value"> dazwischen ist ein Block, und
   ein Block zwischen zwei inline-block-Elementen erzwingt zwei
   Umbrueche. Deshalb standen Minus, Zahl und Plus untereinander.

   Aelter als Briefing 154 - dort wurden die Knoepfe nur runder und
   groesser und die Sache damit sichtbar. */
.hw-slot-action .btn-group {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

/* Die Zahl zwischen den Knoepfen traegt vom Kern eine weisse Flaeche mit
   dunkler Schrift, ohne Ruecksicht auf den Dunkelmodus. Der Selektor
   wiederholt die vier Klassen des Kerns und stellt .dark-mode voran -
   damit wiegt er schwerer und gilt nur im Dunkelmodus. */
.dark-mode .hw-slots-wrapper .hw-slot-item .hw-slot-action .value {
    background-color: transparent;
    color: var(--fg-strong);
    border-color: var(--border-strong);
}

/* ── G. Zaehlkacheln ueber den Zusatz-Disks im Dunkelmodus ───────────
   Der Kern gibt den vier Kacheln eine feste helle Flaeche (#ebebeb) und
   keine eigene Schriftfarbe. Im Dunkelmodus erbt die Schrift die helle
   Grundfarbe und steht damit hell auf hell - die Zahlen sind praktisch
   unsichtbar. Die belegte Kachel bekommt vom Kern zusaetzlich weisse
   Schrift auf der Handlungsfarbe, und die ist im Dunkeln bei uns das
   Markengelb. Weiss auf Gelb ist nicht lesbar, dort gehoert das Navy
   aus --fg-on-yellow hin.

   Beide Regeln gelten nur im Dunkelmodus. Im Hellen stimmt die Vorgabe
   des Kerns: dunkle Schrift auf hellgrau, weisse Schrift auf dem
   violetten Bootstrap-Primaerton.

   Das :not() ist noetig, sonst naehme die erste Regel der belegten
   Kachel ihre gelbe Flaeche weg - sie waere gleich schwer wie die des
   Kerns und gewaenne aus unserer spaeter geladenen Datei. */
.dark-mode .hw-slots-wrapper .hw-slots-overview .slots > div:not(.is--active) {
    background-color: rgba(255, 255, 255, .08);
    color: var(--fg-muted);
}
.dark-mode .hw-slots-wrapper .hw-slots-overview .slots > div.is--active {
    color: var(--fg-on-yellow);
}

/* ── H. Ortsvorschlaege zur Postleitzahl ─────────────────────────────
   Gehoeren zu einer Postleitzahl mehrere Orte, stehen sie als Knoepfe
   unter dem Ortsfeld. Form und Farbe kommen von .btn-outline-primary
   und den Regeln aus Block A, hier wird nur die Anordnung geregelt.

   Die zweite Regel ist noetig und kein Beiwerk: display:flex schlaegt
   die eingebaute Regel des Browsers fuer hidden, ohne sie bliebe die
   Reihe nach einer Auswahl stehen. */
.hw-plz-vorschlaege {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 8px;
}
.hw-plz-vorschlaege[hidden] {
    display: none;
}

/* =============================================================================
   Bestellprozess — Schrittzeile auf schmalen Bildschirmen
   =============================================================================
   Der Kern legt die Schritte waagerecht nebeneinander und verbietet dabei
   jedes Nachgeben (an der ausgelieferten storefront.min.css gemessen):

       .hw-stepper-bar  { display: flex; flex-wrap: nowrap; }
       .hw-stepper-step { display: flex; flex-shrink: 0; }
       .hw-stepper-step-label { white-space: nowrap; }
       .hw-stepper-connector  { flex: 0 0 3rem; margin: 0 0.75rem; }

   Die WebHosting-Strecke hat DREI Schritte. Mit zwei Verbindungsstrichen sind
   das rund 620px - in einem Behaelter von rund 366px geht das auch mit jeder
   Verkleinerung nicht auf. Deshalb wird hier nicht enger gestellt, sondern
   umgestellt: untereinander statt nebeneinander.

   FRUEHERER FEHLVERSUCH (Briefing L), damit ihn niemand wiederholt: Hier
   standen min-width: 0 und white-space: normal als "Sicherheitsnetz" - die
   Beschriftung sollte notfalls umbrechen. Sie hat es nie getan. min-width: 0
   erlaubt einem Flex-Element, unter seine Mindestbreite zu schrumpfen, aber
   flex-shrink: 0 verbietet ihm das Schrumpfen ueberhaupt. Die beiden Regeln
   wirken nur zusammen, und flex-shrink war nicht ueberschrieben. Merksatz:
   Was nicht schrumpfen darf, bricht auch nicht um.

   Der Verbindungsstrich entfaellt. Er zeigt Zusammenhang zwischen
   nebeneinanderstehenden Schritten; untereinander traegt er nichts bei und
   saehe als waagerechter Strich zwischen zwei Zeilen falsch aus.

   Die seitlichen 18px sind noetig, weil die Kartenkopfzeile des Kerns p-0
   traegt und damit auch die .card-header-Regel dieses Themes aussticht.
   Mittig gesetzt fiel das nicht auf; linksbuendig kleben die Kreise sonst
   an der Kante. 18px ist derselbe Wert wie in .card-header, damit die
   Schrittzeile mit den uebrigen Kartenkoepfen fluchtet.

   Bis 575.98px: Ab etwa 600px reicht der Platz fuer die Kernfassung.
   ========================================================================== */
@media (max-width: 575.98px) {
    .hw-stepper-bar {
        flex-wrap: wrap;
        justify-content: flex-start;
        row-gap: 10px;
        padding: 1rem 18px 1.25rem;
    }

    /* 100% Ausgangsbreite plus flex-wrap oben ergibt eine Zeile je Schritt.
       min-width: 0 bleibt noetig, damit die Beschriftung im Schritt selbst
       umbrechen darf - der Schritt ist seinerseits ein Flex-Behaelter. */
    .hw-stepper-step {
        flex: 0 0 100%;
        min-width: 0;
    }

    .hw-stepper-step-circle {
        width: 28px;
        height: 28px;
        font-size: 0.8125rem;
    }

    .hw-stepper-step-label {
        min-width: 0;
        font-size: 0.875rem;
        white-space: normal;
    }

    .hw-stepper-connector { display: none; }
}

/* =============================================================================
   Warenkorb — Tabelle auf schmalen Bildschirmen stapeln
   =============================================================================
   Der Kern baut den Warenkorb als dreispaltige Tabelle und schreibt die
   Spaltenbreiten als INLINE-Stil ins Markup (am 15.08.2026 an
   /checkout/cart gemessen):

       <td style="min-width: 250px;">   Produktbeschreibung
       <td style="min-width: 100px;">   Preis
       <td style="width: 200px; text-align: right">   Entfernen / Konfigurieren

   Zusammen mit der Zellenpolsterung dieses Themes (2 x 16px je Spalte) sind
   das rund 646px. Auf 390px fehlen gut 250px - die Knopfspalte steht
   ausserhalb des Bildes. Der Kern legt dafuer ein
   <div style="overflow-x:auto;"> um die Tabelle; der waagerechte Bildlauf
   wird auf einem Telefon aber kaum gefunden.

   Inline-Stile schlagen jeden Selektor - nur !important kommt dagegen an.
   Daher hier mehr davon als sonst in dieser Datei.

   Drei Spalten auf 390px liessen der Beschreibung rund 150px. Deshalb wird
   nicht enger gestellt, sondern gestapelt: Beschreibung, Preis, Knoepfe
   untereinander. Die Kopfzeile entfaellt - sie beschriftet Spalten, die es
   dann nicht mehr gibt.

   NUR im Warenkorb: Die Klammer .page-checkout-cart kommt vom <body> des
   Kerns. Ohne sie traefe die Regel auch Rechnungen, Bestellungen und
   Vertraege - dort mag Stapeln ebenfalls richtig sein, aber das ist eine
   eigene Entscheidung mit eigener Sichtpruefung.

   Bis 575.98px, wie bei der Schrittzeile.
   ========================================================================== */
@media (max-width: 575.98px) {

    /* Der Bildlauf-Behaelter des Kerns wird nicht mehr gebraucht - gestapelt
       ist nichts mehr breiter als die Karte. Stehen lassen wuerde einen
       Scroll-Behaelter erzeugen, der bei einem einzigen zu breiten Kind
       wieder eine Leiste zeigt. */
    .page-checkout-cart .card-table > div[style*="overflow-x"] {
        overflow-x: visible !important;
    }

    .page-checkout-cart .card-table .table,
    .page-checkout-cart .card-table .table > tbody,
    .page-checkout-cart .card-table .table > tbody > tr {
        display: block;
        width: 100%;
    }

    .page-checkout-cart .card-table .table > thead {
        display: none;
    }

    /* Die Polsterung wandert von der Zelle auf die Zeile: gestapelt soll der
       Abstand einmal um den ganzen Eintrag stehen, nicht um jedes Feld. */
    .page-checkout-cart .card-table .table > tbody > tr {
        padding: 15px 16px;
        border-bottom: 1px solid var(--bs-border-color, #E5E8ED);
    }
    .page-checkout-cart .card-table .table > tbody > tr:last-child {
        border-bottom: 0;
    }

    /* width, min-width und text-align stehen inline am <td> - ohne
       !important bleibt jedes davon stehen. */
    .page-checkout-cart .card-table .table > tbody > tr > td {
        display: block;
        width: auto !important;
        min-width: 0 !important;
        text-align: left !important;
        padding: 0;
        border: 0;
    }

    /* Luft zwischen Beschreibung, Preis und Knoepfen. */
    .page-checkout-cart .card-table .table > tbody > tr > td + td {
        margin-top: 10px;
    }
}

/* =============================================================================
   DNS-Seite im Kundenmenue
   =============================================================================
   Zwei Kleinigkeiten, beide am 16.08.2026 an
   /account/domain/<domain>/dns gemessen.

   1. Die Kopfzeile mit dem Knopf „DNS Eintrag erstellen" traegt kein
      margin-bottom, die Tabellenkarte darunter kein margin-top. Gemessener
      Abstand: 0.0px. Die Karte hat zwar mb-4, aber das wirkt nach unten.

   2. Der Warnhinweis unter der Tabelle ist ein klassenloser <p> in
      Fliesstextgroesse. Er sieht aus wie eine Bildunterschrift und nicht wie
      eine Warnung. Stelle und Wortlaut gehoeren dem Kern und sind hier nicht
      zu aendern - das Aussehen schon.

   Die Klammer .page-account-domain-dns kommt vom <body> des Kerns. Ohne sie
   traefe die erste Regel jede Kopfzeile im Kundenmenue, denn
   .d-flex.align-items-center.justify-content-between ist eine
   Hilfsklassen-Kombination, die ueberall vorkommt.

   Die Flaeche des Hinweises ist bewusst rgba und keine feste Farbe: So legt
   sie sich als Tonung ueber den jeweiligen Untergrund und braucht keinen
   eigenen Zweig fuer den Dunkelmodus. Die Textfarbe bleibt geerbt und ist
   damit in beiden Modi richtig.
   ========================================================================== */
.page-account-domain-dns .module-content > .d-flex {
    margin-bottom: 16px;
}

.page-account-domain-dns .module-content > p {
    margin-top: 0;
    padding: 12px 16px;
    border-left: 3px solid var(--hw-amber-gold);
    border-radius: 8px;
    background: rgba(251, 168, 55, .08);
}

/* 3. Die Tabellenkarte hat hier keinen Bildlauf-Behälter. Produktliste und
      Rechnungen bekommen vom Kern ein <div style="overflow-x:auto"> um die
      Tabelle, die DNS-Seite nicht: bei 390 px war die Karte 455 px breit und
      ragte 78 px über den rechten Rand, die Aktionsspalte lag draußen
      (Briefing 190, Abschnitt 1.3). Bildlauf in der Karte, wie bei den beiden
      anderen Tabellen (Briefing 194, Block 2). Keine Aufklappmenüs in der
      Karte, die der Bildlauf beschneiden könnte (am 29.08. am DOM gezählt: 0). */
.page-account-domain-dns .card-table {
    overflow-x: auto;
}

/* 3b. Bestellstrecke, Schritt "Domains konfigurieren" (Briefing 202, Block 4,
      30.08.2026): dieselbe Lage wie auf der DNS-Seite. Die Tabelle
      (Domain / Typ / Preis / Aktionen) liegt ohne Kern-<div> direkt in der
      Karte und ist bei 390 px 561 px breit in einer 326-px-Karte; die Zelle
      "Konfigurieren" stand bei 401-595 px, also ausserhalb des Fensters, und
      war ohne Bildlauf nicht erreichbar. overflow: clip aus Block 2 (die
      Kurzform .card-table im Karten-Abschnitt weiter unten) hat daran nichts
      geaendert, nur die Schnittkante vom Fenster an die Karte verschoben. Darum Bildlauf in der Karte, dasselbe Muster wie
      1926: overflow-x: auto gewinnt mit (0,2,0) gegen die Kurzform clip
      (0,1,0), die y-Achse wird neben auto zu hidden, die Karte beschneidet
      weiter senkrecht am Radius. Body-Klasse am 30.08. am laufenden
      Kundenmenue gelesen: page-checkout-cart-domain-selection. */
.page-checkout-cart-domain-selection .card-table {
    overflow-x: auto;
}

/* 4. DynDNS-Zeilen: der Kern graut sie mit opacity: 0.5 als Inline-Stil aus.
      Deckkraft wirkt auf den ganzen Teilbaum, gemessen 3,25:1 für #1E1E24 bei
      0,5 auf Weiß (Briefing 190, Abschnitt 3.1). Wie bei den gesperrten
      Zahlungsarten im Warenkorb volle Deckkraft und Ausgrauen über die
      Schriftfarbe: --fg-muted ist hell #63677A (5,60:1 auf Weiß), dunkel
      #A2ADBA. Die Zelle braucht die Farbe selbst, weil Bootstrap sie über
      --bs-table-color direkt an jede Zelle schreibt und die Zeile nichts
      vererbt. !important, weil der Inline-Stil sonst gewinnt. Plaketten und
      Knöpfe in der Zeile behalten ihre Farben. */
.page-account-domain-dns .card-table tr[style*="opacity"] {
    opacity: 1 !important;
}
.page-account-domain-dns .card-table tr[style*="opacity"] > td {
    color: var(--fg-muted, #63677A);
}

/* =============================================================================
   Markenbild R3 im Kundenmenue — Fassung A "wie die Website"
   =============================================================================
   Briefing 196 (30.08.2026), Block 0 von Max entschieden: 22 px Radius,
   --shadow-lg, --bg-elevated als Flaeche auf --bg als Grund, gelbe Kante
   links (3 px --hw-brand-yellow) an jeder Karte und Kachel.

   Nur Token, die ueber das Kopf-Fragment der Website ankommen
   (global.css -> tokens.css): --bg, --bg-elevated, --bg-muted, --fg,
   --fg-muted, --fg-strong, --border, --border-strong, --r-md, --shadow-lg,
   --hw-brand-yellow. markenbild-r3.css wird bewusst NICHT geladen (fester
   Kopf, Scroll-Zeitleisten, body.mk-app-Abstand passen nicht zu einer
   Bootstrap-Seite mit eigener Leiste). Die Dunkelwerte kommen aus den
   Token selbst (:root[data-theme="dark"], die Bruecke in meta.twig setzt
   data-theme und die Klasse dark-mode zusammen).

   Eine Regel je Bausteinart, keine je Seite. Kopf und Fuss (Fragment)
   werden nicht angefasst. Die Regeln aus Briefing 194 (Kontraststellen,
   Fokusring, DNS-Bildlauf, prefers-reduced-motion) bleiben unberuehrt.
   Bootstrap deklariert Karten- und Tabellenmerkmale AM BAUTEIL, deshalb
   stehen sie hier als --bs-*-Merkmale an .card und .table, nicht als
   direkte Eigenschaften (fuenfter Durchgang, hw.css). hw.css laedt
   spaeter und setzt fuer .dark-mode dieselben Token, nichts kollidiert.
   ========================================================================== */
:root {
    --km-radius:   22px;
    --km-schatten: var(--shadow-lg);
    --km-kante:    3px solid var(--hw-brand-yellow);
}

/* ── Grund ──────────────────────────────────────────────────────────
   Der Kern faerbt body ueber --bs-body-bg (#fbfbfb). Website-Grund
   --bg: hell #FAFBFF, dunkel #131C24. Alle Kundenmenue-Seiten tragen
   die Leiste, die Anmeldeseiten den Split. */
body:has(.hw-rail),
body:has(.hw-auth-split) { background: var(--bg); }

/* ── Leiste ─────────────────────────────────────────────────────────
   Die sieben Merkmale aus dem .hw-rail-Block ueber die Website-Token:
   Flaeche --bg-muted, aktiver Punkt --bg-elevated, Schrift --fg-muted /
   --fg-strong, Linien --border. hw.css:566 setzt dieselben Merkmale fuer
   .dark-mode ueber dieselben Token (0,2,0, spaeter geladen), leise Schrift
   dort --fg-subtle (#87919E), hier --fg-muted (#63677A, wie bisher).
   Gemessene Kontraste stehen im Bericht 196. --rail-hover bleibt rgba
   (Ueberfahren, kein Token dafuer). */
.hw-rail {
    --rail-bg:        var(--bg-muted);
    --rail-fg:        var(--fg-muted);
    --rail-fg-stark:  var(--fg-strong);
    --rail-fg-leise:  var(--fg-muted);
    --rail-aktiv:     var(--bg-elevated);
    --rail-linie:     var(--border);
}

/* ── Karten (Bootstrap .card) ────────────────────────────────────────
   Ersetzt die 12 px aus Block C (1618): Radius und Innenradius ueber die
   Bootstrap-Merkmale, damit Kopf- und Fusszeile mitrunden; Flaeche und
   Rahmen ueber Token, Schatten --shadow-lg, gelbe Kante links.
   .card-table (DNS, Warenkorb) bleibt in Bildlauf und Zeilenform, wie
   Briefing 194 sie gesetzt hat. */
.card {
    --bs-card-bg:                  var(--bg-elevated);
    --bs-card-border-color:        var(--border);
    --bs-card-border-radius:       var(--km-radius);
    --bs-card-inner-border-radius: calc(var(--km-radius) - 1px);
    border-radius: var(--km-radius);
    box-shadow: var(--km-schatten);
    border-left: var(--km-kante);
}

/* ── Tabellenkarten beschneiden am Radius (Briefing 202, 30.08.2026) ──
   Befund Max: An Produkte, Addons, Rechnungen, Domains und Tickets ragt die
   Kopfzeile der Tabelle ueber die runde Ecke. Die Karte ist rund (22 px,
   Kante links 3 px), alles darin ist eckig: auf Produkte, Rechnungen,
   Domains und Tickets legt der Kern ein <div style="overflow-x:auto">
   (Radius 0) um die Tabelle, auf Addons und DNS liegt die Tabelle direkt in
   der Karte; thead und th sind durchsichtig, die Flaeche malt das <tr> der
   Kopfzeile mit rgba(0,0,0,.09). Nichts davon wurde auf den Kartenradius
   beschnitten, weil die Karte overflow: visible hatte. Gemessen: 6,5 px
   diagonal, 51,9 px² je Ecke (hell; dunkel malt dieselbe Regel, auf #1B2833
   unsichtbar). Weil Addons kein Kern-<div> hat, haette ein Innenradius am
   <div> die Seite nicht erreicht - deshalb beschneidet die Karte selbst.

   clip, NICHT hidden: hidden macht die Karte zum Bildlauf-Container
   (scrollTop, Verschieben durch Fokus), clip beschneidet nur. Und die
   DNS-Falle: .page-account-domain-dns .card-table (Zeile 1926, Briefing 194)
   setzt overflow-x: auto, die Karte ist dort selbst der waagerechte
   Bildlauf. Die Kurzform overflow: hidden mit hoeherer Spezifitaet wuerde ihn
   abwuergen. Diese Regel (0,1,0) verliert gegen die DNS-Regel (0,2,0) auf der
   x-Achse, auf der y-Achse wird clip neben auto zu hidden: gemessen auto/
   hidden, 455 > 362 px, 93 px gescrollt. Klappmenues und sticky in
   Tabellenkarten: 0 (am 30.08. in sechs Ansichten gezaehlt), Fokusringe
   liegen 40 px und mehr vom Kartenrand. Der Warenkorb unter 576 px
   (Zeile 1840, gestapelt, inneres div visible) bleibt in der Karte. */
.card-table {
    overflow: clip;
}

/* ── Tabellen (Bootstrap .table) ─────────────────────────────────────
   Farben ueber die --bs-table-Merkmale, Form bleibt aus Block D. Im
   Dunkeln setzt hw.css:223 dieselben Merkmale mit denselben Token. */
.table {
    --bs-table-border-color:  var(--border);
    --bs-table-striped-bg:    var(--bg-muted);
    --bs-table-hover-bg:      var(--bg-muted);
}

/* ── Meldungen (Bootstrap .alert) ────────────────────────────────────
   Nur Form: Radius und Schatten wie die Karten. Die Farbflaechen kommen
   aus --bs-alert-* (hell Kern, dunkel hw.css:416 ff.) und bleiben. */
.alert {
    border-radius: var(--km-radius);
    box-shadow: var(--km-schatten);
}

/* ── Startseite (.hw-db__*) — Fassung A aus Block 0 ──────────────────
   Karten, leerer Zustand, Kacheln, Zahlungsart-Hinweis und Hilfe-Kasten
   ersetzen ihre 12 px, den 1-px-Rahmen und --bs-body-bg (1443 ff.). */
.hw-db__karte, .hw-db__leer, .hw-db__kachel, .hw-db__zahlart, .hw-db__hilfe {
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-left: var(--km-kante);
    border-radius: var(--km-radius);
    box-shadow: var(--km-schatten);
}
.hw-db__leer { border-style: solid; border-left: var(--km-kante); }
.hw-db__kachel-sym { background: var(--bg-muted); border-radius: var(--r-md); }
.hw-db__mini, .hw-db__knopf--stumm { border-color: var(--border-strong); }
.hw-db__tun .alert { border-radius: var(--km-radius); box-shadow: var(--km-schatten); }

/* ── Anmeldung und Registrierung (.hw-auth-form) ─────────────────────
   Die Formularspalte traegt ihre Karte als Bootstrap .card (Regel oben).
   Die Spalte selbst bekommt den Website-Grund, im Dunkeln setzt hw.css:540
   dasselbe Token. */
.hw-auth-form { background: var(--bg); }

/* =============================================================================
   Kopf wie die Website (Briefing 200, 30.08.2026, Entscheidung Max: schrumpfen)
   =============================================================================
   Befund Max nach dem Livegang: vier fast gleiche Weisstoene (Kopf #F8F9FB,
   Seite #FAFBFF, Leiste #EDEFF7, Fuss #F1F3F7) plus zwei Haarlinien wirkten
   zusammengestueckelt. Auf der Website ist der Kopf in Ruhe durchsichtig und
   bekommt seine Flaeche erst beim Scrollen (markenbild-r3.css:143-159). Das
   wird hier nachgebaut, nur fuer den Kopf und nur mit den Token aus dem
   Fragment; markenbild-r3.css bleibt draussen, der Fuss bleibt unangetastet
   (Sockel-Entscheidung vom 29.08.).

   Bei sticky belegte der Kopf Platz im Fluss, nichts scrollte unter ihm
   hindurch. Jetzt fixed; den Platz oben bekommt der Inhalt ueber body
   padding-top zurueck, html scroll-padding-top faengt Tastaturfokus unter
   dem Kopf ab. Die Leiste folgt der Kopfunterkante ueber rail-pin.js, das
   seit diesem Briefing bei jedem Scrollen misst.

   Kopfhoehen aus der Messung vom 30.08. (Playwright): volle Leiste 86,7 px,
   Schublade 85 px. Umschaltpunkt am 09.09. auf 1359/1360 nachgezogen. --hw-rail-top wird deshalb
   an den Umschaltpunkt der Leiste gebunden (Fremdzahl 1359/1360 aus
   marketing.css, wie die Anmeldeseiten-Regel oben) statt an die feste 87:
   mit 87 blieb bei 390 px eine 2-px-Luecke zwischen Kopf und .hw-topbar. */
:root { --hw-rail-top: 85px; }
@media (min-width: 1360px) {
    :root { --hw-rail-top: 86.7px; }
}

/* ── Kopf: fixiert, Platz zurueck an den Inhalt ────────────────────── */
body:has(.hw-rail) > header:not(.hw-topbar) {
    position: fixed;
    top: 0; left: 0; right: 0;
    z-index: 902;
}
body:has(.hw-rail) { padding-top: var(--hw-rail-top); }
html:has(.hw-rail) { scroll-padding-top: calc(var(--hw-rail-top) + 16px); }

/* Ruhezustand und Rueckfall (ohne Scroll-Zeitleiste, bei reduzierter
   Bewegung): dieselbe Flaeche wie die Seite, deckend, keine Haarlinie,
   kein Schatten. Deckend, damit ohne Animation kein Text durch den Kopf
   laeuft. */
body:has(.hw-rail) .mk-nav {
    background: var(--bg);
    border-bottom-color: transparent;
    box-shadow: none;
}

/* Offenes Menue: deckender Grund in beiden Themen. !important, weil die
   laufende Animation (Zeitleiste unten) normale Regeln schlaegt, wichtige
   nicht (wie marketing.css / markenbild-r3.css:150). */
body:has(.hw-rail) .mk-nav:has(.mk-nav__group[data-open="true"]),
body:has(.hw-rail) .mk-nav[data-menu-open="true"] {
    background: var(--bg-elevated) !important;
    border-bottom-color: var(--hw-border-header) !important;
}

/* Beim Scrollen: Polsterung 22 -> 10, Flaeche auf 86 % mit Unschaerfe,
   ueber die Scroll-Zeitleiste der Seite in den ersten 200 px. Zeitleiste und
   Bereich stehen in einem EIGENEN Regelblock mit anderem Selektor: ein
   Minifier zoege animation-timeline sonst in die Kurzform und die Animation
   fiele stumm aus (Briefing 187). */
@media (prefers-reduced-motion: no-preference) {
    @supports ((animation-timeline: scroll()) and (animation-range: 0% 100%)) {
        @keyframes km-kopf {
            to {
                padding-top: 10px;
                padding-bottom: 10px;
                background: color-mix(in srgb, var(--bg) 86%, transparent);
                backdrop-filter: blur(10px);
            }
        }
        body:has(.hw-rail) .mk-nav {
            background: transparent;
            animation: km-kopf auto linear both;
        }
        body:has(.hw-rail) header > .mk-nav {
            animation-timeline: scroll(block root);
            animation-range: 0px 200px;
        }
    }
}

/* ── Leiste: Flaeche der Seite, keine Kante rechts, der aktive Punkt
   traegt die Erkennbarkeit (Block 2) ──────────────────────────────────
   Ersetzt --rail-bg: var(--bg-muted) aus dem R3-Block oben (spaetere Regel,
   gleiche Spezifitaet). Die inneren Linien (--rail-linie, Nutzerblock,
   Sprachzeile) bleiben; nur die rechte Kante der Leiste faellt. Der aktive
   Punkt bekommt zur erhobenen Flaeche den kleinen Schatten, sonst waere er
   auf der gleichen Flaeche wie die Seite nur noch an der gelben Kante zu
   erkennen. Leistenschrift --fg-muted auf --bg: 5,41:1 hell (vorher 4,88
   auf --bg-muted), 8,01 dunkel. */
.hw-rail {
    --rail-bg: var(--bg);
    border-right-color: transparent;
}
.hw-rail-link.is-active {
    background: var(--bg-elevated);
    box-shadow: var(--shadow-sm);
}
