/* =============================================================================
   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: Biennale, "Inter", system-ui, -apple-system, "Segoe UI", sans-serif !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: Biennale, "Inter", system-ui, -apple-system, "Segoe UI", sans-serif !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 — Tastaturbedienung im Kundenmenü
   darf nicht schlechter sein als auf der Website. */
:focus-visible {
    outline: 2px solid #2B4358;
    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 48px, darin
   .mk-nav__inner mit max-width 1280px und margin: 0 auto. 48 und 1280 sind
   FREMDZAHLEN aus dem Website-CSS: Ä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 48px;
    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);
}

/* 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);
}

/* 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);
}

/* ----------------------------------------------------------------------------
   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;
}

/* Unter 980 px blendet das Website-CSS die rechte Gruppe aus (marketing.css
   Zeile 427) 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.
   980 ist eine Fremdzahl aus marketing.css, kein eigener Umbruch. */
@media (max-width: 980px) {
    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; }

/* ── 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; }
.hw-db__karte-titel b { display: block; font-size: 15.5px; font-weight: 700; }
.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;
    background: #E8F4EE; color: #2E7D5B;
}
.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: #2E7D5B; }
.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);
}
