/* ==========================================================================
   Hundewegweiser – Stylesheet
   Schritt 1 (Formulare) + Schritt 2 (Inhalte, Druckansicht)
   ==========================================================================

   Farben und Schriften sind von der Coming-Soon-Seite übernommen, damit
   Startseite und Mitgliederbereich zusammengehören. Die Werte stehen alle im
   :root-Block unten – wer sie dort ändert, ändert die ganze Seite.

   Alle Klassennamen beginnen mit "hw-". Ausnahme sind die Klassen INNERHALB
   von .hw-inhalt (.hinweis, .warnung, .frage, .notiz, .linie): die werden von
   Hand im body-Feld in phpMyAdmin getippt und sollen dort kurz sein.
   ========================================================================== */


/* --------------------------------------------------------------------------
   1. Farben und Schriften
   -------------------------------------------------------------------------- */
:root {
    /* --- Übernommen von der Coming-Soon-Seite (styles.css, Zeile 1–14) --- */
    --forest: #173f25;
    --forest-light: #355d35;
    --forest-dark: #0f301c;
    --olive: #7d8e5d;
    --olive-light: #aeba82;
    --cream: #fbf6e9;
    --cream-deep: #efe6ce;
    --paper: rgba(255, 253, 247, 0.9);
    --ink: #1d2a22;
    --muted: #526155;
    --white: #ffffff;
    --shadow: 0 18px 50px rgba(62, 65, 40, 0.13);

    /* --- Ergänzung: eine Linienfarbe für Rahmen und Trenner ---
       Die Coming-Soon-Seite braucht keine, weil sie keine Formulare und
       Tabellen hat. Der Wert liegt bewusst zwischen --cream-deep und --olive. */
    --line: #e0d7bd;

    /* --- Rückwärtskompatible Namen ---
       Die Seiten aus Schritt 1 (Registrierung, Login, Testseite) benutzen die
       alten Variablennamen. Statt in allen Dateien zu suchen und zu ersetzen,
       zeigen die alten Namen jetzt einfach auf die neuen Farben. Vorteil: die
       Schritt-1-Seiten bekommen das neue Aussehen automatisch, und es kann
       dabei nichts kaputtgehen. */
    --hw-text: var(--ink);
    --hw-text-leise: var(--muted);
    --hw-hintergrund: var(--cream);
    --hw-flaeche: var(--white);
    --hw-rand: var(--line);
    --hw-akzent: var(--forest);
    --hw-akzent-dunkel: var(--forest-dark);

    /* Meldungsfarben: bleiben eigenständig, weil Rot und Grün hier eine
       Bedeutung tragen (Fehler / Erfolg) und nicht zur Deko gehören.
       Leicht an die wärmere Palette angepasst. */
    --hw-fehler-bg: #fbeae6;
    --hw-fehler-rand: #e3b3a8;
    --hw-fehler-text: #8a2c1c;
    --hw-erfolg-bg: #eaf2e2;
    --hw-erfolg-rand: #b7cd9c;
    --hw-erfolg-text: #33532a;
    --hw-info-bg: #eef1ea;
    --hw-info-rand: #c3cdb6;
    --hw-info-text: #3b4a37;

    /* Schriftfamilien an einer Stelle. Georgia für Überschriften wie auf der
       Coming-Soon-Seite, System-Schrift für Fließtext (lädt nichts nach). */
    --hw-serif: Georgia, "Times New Roman", serif;
    --hw-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

/* border-box: Innenabstand und Rahmen werden in die Breite eingerechnet.
   Ohne das werden Eingabefelder mit width:100% breiter als ihr Container. */
*, *::before, *::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    padding: 0;
    font-family: var(--hw-sans);
    font-size: 16px;
    line-height: 1.6;
    color: var(--ink);
    background: var(--cream);
}

h1, h2, h3 {
    font-family: var(--hw-serif);
    color: var(--forest);
    line-height: 1.25;

    /* Deutsch baut lange Woerter: "Verbraucherstreitbeilegung" hat 26
       Zeichen und passt auf einem schmalen Handy in keine Zeile. Eine
       Ueberschrift ist gross gesetzt, deshalb faellt es dort zuerst auf –
       das Wort ragte ueber den Rand und die Seite liess sich seitlich
       schieben.

       hyphens: auto trennt nach den Regeln der Sprache, die im <html>
       steht (lang="de"), und nur dann, wenn das Wort sonst nicht passt.
       In einer Zeile, die ohnehin aufgeht, aendert sich nichts.

       overflow-wrap: break-word ist die Rueckfallebene fuer den Fall, dass
       ein Browser die deutschen Trennregeln nicht mitbringt: dann wird hart
       umgebrochen, ohne Trennstrich. Haesslicher als eine saubere Trennung,
       aber immer noch besser als eine Seite, die seitlich wegrutscht. */
    hyphens: auto;
    overflow-wrap: break-word;
}

h1 {
    margin: 0 0 0.75rem;
    font-size: 1.7rem;
}

h2 {
    margin: 2rem 0 0.6rem;
    font-size: 1.25rem;
    padding-bottom: 0.3rem;
    border-bottom: 1px solid var(--line);
}

h3 {
    margin: 0;
    font-size: 1.05rem;
}

a {
    color: var(--forest-light);
    text-decoration-thickness: 1px;
    text-underline-offset: 2px;
}

a:hover {
    color: var(--forest);
}

/* Kein Bild ist breiter als der Platz, den es hat.

   Heute faellt das nirgends auf: Das Portrait auf ueber-mich.php und das
   Logo auf der Startseite bringen ihre eigene Breite mit. Die Regel gilt
   dem, was noch kommt – vor allem den Inhaltsbausteinen aus der Datenbank
   (content/view.php). Ein Bild, das dort mit 1200 Pixeln Breite eingefuegt
   wird, wuerde die Seite auf dem Handy sonst breitziehen, und man merkt es
   erst, wenn es zu spaet ist.

   height: auto gehoert dazu: sonst behaelt das Bild die Hoehe aus dem
   height-Attribut und wird beim Verkleinern gestaucht. Regeln mit hoeherer
   Spezifitaet (.hw-marke img, .hw-hero-logo, .hw-portrait) bleiben davon
   unberuehrt. */
img {
    max-width: 100%;
    height: auto;
}

/* <picture> ist kein sichtbares Element, sondern nur ein Umschlag: es sagt dem
   Browser, welche Dateiformate zur Auswahl stehen (WebP oder PNG), und tritt
   danach beiseite. Angezeigt wird immer das <img> darin.

   Von sich aus ist <picture> allerdings ein Inline-Element – so breit wie sein
   Inhalt, mitten in der Textzeile. Ein Bild darin, das per
   "display: block; margin: 0 auto" zentriert werden soll (das Logo auf der
   Startseite), zentriert sich dann innerhalb dieses Umschlags: also gar nicht.

   display: block macht den Umschlag so breit wie den Platz, den er hat. Das
   Bild darin verhält sich dadurch wieder genau so, wie es sich ohne den
   Umschlag verhalten hat.

   Warum nicht display: contents, was wörtlich "tu so, als wärst du nicht da"
   bedeutet? Weil einige Screenreader Elemente damit samt Inhalt aus dem
   Vorlesebaum entfernt haben – das Bild verschwände dann samt seinem
   alt-Text. Der Umweg über block hat diese Nebenwirkung nicht. */
picture {
    display: block;
}


/* --------------------------------------------------------------------------
   2. Kopfzeile, Navigation, Fußzeile   (Schritt 2, includes/layout.php)
   -------------------------------------------------------------------------- */
.hw-kopf {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem 1.25rem;
    align-items: center;
    justify-content: space-between;
    padding: 0.7rem 1.25rem;
    background: var(--paper);
    border-bottom: 1px solid var(--line);
}

/* Kopfzeile ohne Navigation (öffentliche Seiten: Über mich, Beratung,
   Mantrailing, Termin, Impressum, Kontakt).

   justify-content: center rückt das Logo in die Mitte. Links allein sähe es
   aus, als wäre daneben etwas verlorengegangen – in der Mitte wirkt es wie
   eine Absicht. Die Zeile darf außerdem etwas schmaler sein, weil sie nur
   noch eine Zeile trägt. */
.hw-kopf--schlicht {
    justify-content: center;
    padding: 0.55rem 1.25rem;
}

.hw-marke {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    font-family: var(--hw-serif);
    font-size: 1.15rem;
    font-weight: 700;
    color: var(--forest);
    text-decoration: none;
}

.hw-marke img {
    display: block;
    width: 52px;
    height: 52px;
    border-radius: 50%;
}

.hw-nav {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem 1rem;
    align-items: center;
    font-size: 0.95rem;
}

/* Das Abmelden-Formular soll in der Navigation nicht wie ein Formular
   aussehen, sondern wie die anderen Punkte daneben. */
.hw-nav-form {
    display: inline;
    margin: 0;
}

/* Ein Knopf, der wie ein Link aussieht. Nötig, weil Abmelden technisch ein
   Formular sein muss (siehe auth/logout.php), optisch aber ein Link sein soll. */
.hw-linkbutton {
    padding: 0;
    font: inherit;
    color: var(--forest-light);
    background: none;
    border: none;
    text-decoration: underline;
    text-underline-offset: 2px;
    cursor: pointer;
}

.hw-linkbutton:hover {
    color: var(--forest);
}

.hw-main {
    padding: 2rem 1rem 3rem;
}

/* Die Fußzeile ist auf ALLEN Seiten dieselbe – Startseite, Unterseiten,
   Inhalte. Sie ist die einzige Stelle, an der Impressum und Kontakt stehen,
   und sie muss auf jeder Seite erreichbar sein (§ 5 DDG, siehe hw_fuss()
   in includes/layout.php).

   Der Verlauf setzt einen weichen helleren Schein an die Oberkante, damit
   der grüne Block nicht wie ein abgeschnittener Balken wirkt. */
.hw-seitenfuss {
    padding: 1.15rem 1.25rem;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    /* Kleiner als frueher (0.55rem), weil die Links unten jetzt eigenen
       Innenabstand haben – der Abstand dazwischen bleibt dadurch gleich. */
    gap: 0.25rem;
    font-size: 0.95rem;
    text-align: center;
    color: var(--cream);
    background:
        radial-gradient(circle at 50% 0, rgba(74, 105, 60, 0.32), transparent 27rem),
        var(--forest);
}

/* Die Pfote steht allein in der ersten Zeile: width: 100% zwingt alles
   Folgende in eine neue Zeile.
   brightness(2) hellt das dunkle Emoji so weit auf, dass es auf dem grünen
   Grund überhaupt sichtbar wird. */
.hw-fuss-pfote {
    width: 100%;
    filter: grayscale(1) brightness(2);
    font-size: 1.3rem;
    line-height: 1;
    opacity: 0.88;
}

/* display: inline-block + padding, damit die Flaeche zum Antippen rund
   44 Pixel hoch wird. Als reine Textzeile war sie 24 Pixel hoch – lesbar,
   aber mit dem Daumen trifft man auf einem Handy dann leicht den Nachbarn.
   Die Links stehen hier dicht nebeneinander, deshalb lohnt es sich.

   Nur hier und nicht bei Links mitten im Fliesstext: dort wuerden sich die
   vergroesserten Flaechen benachbarter Zeilen ueberlappen, und man traefe
   am Ende die falsche. */
.hw-seitenfuss a {
    display: inline-block;
    padding: 0.55rem 0.3rem;
    color: var(--cream);
    font-weight: 600;
    text-decoration: none;
    text-underline-offset: 3px;
}

.hw-seitenfuss a:hover {
    color: var(--white);
    text-decoration: underline;
}

/* Trennpunkte und Jahreszahl treten zurück, damit die Links führen. */
.hw-seitenfuss-trenner,
.hw-fuss-jahr {
    color: rgba(251, 246, 233, 0.7);
}

.hw-fuss-jahr {
    /* Auf breiten Bildschirmen steht die Jahreszahl in derselben Zeile wie
       die Links, auf schmalen rutscht sie von selbst darunter. */
    font-size: 0.8rem;
}


/* --------------------------------------------------------------------------
   3. Der zentrierte Kasten (von allen Seiten benutzt)
   -------------------------------------------------------------------------- */
.hw-box {
    max-width: 30rem;
    margin: 0 auto;
    padding: 1.75rem;
    background: var(--white);
    border: 1px solid var(--line);
    border-radius: 12px;
    box-shadow: var(--shadow);
}

.hw-box--breit {
    max-width: 46rem;
}

/* Sonderfall Schritt-1-Seiten (Registrierung, Login, Logout, Kontoseite):
   Die haben noch keine Kopfzeile und kein <main class="hw-main">, ihr Kasten
   liegt direkt im <body>. Dort kommt der Abstand zum Fensterrand also nicht
   von .hw-main – deshalb hier.
   Das "> " bedeutet: nur direkte Kinder von body. Kästen INNERHALB von
   .hw-main sind davon nicht betroffen.
   width mit calc() statt fester Seitenabstände: auf breiten Bildschirmen
   gewinnt max-width und "margin: auto" zentriert weiterhin, auf schmalen
   bleiben links und rechts 0,6rem Luft. */
body > .hw-box {
    margin: 2rem auto 3rem;
    width: calc(100% - 1.2rem);
}


/* --------------------------------------------------------------------------
   4. Formulare   (Schritt 1)
   -------------------------------------------------------------------------- */
label {
    display: block;
    margin: 1rem 0 0.3rem;
    font-weight: 600;
    font-size: 0.95rem;
}

input[type="text"],
input[type="email"],
input[type="password"],
textarea {
    width: 100%;
    padding: 0.6rem 0.7rem;
    font-size: 1rem;
    /* font-family: inherit – ohne das nähme der Browser für Eingabefelder
       seine eigene Schrift, und das Textfeld sähe anders aus als die Seite. */
    font-family: inherit;
    color: var(--ink);
    background: var(--white);
    border: 1px solid var(--line);
    border-radius: 6px;
}

/* resize: vertical – das Nachrichtenfeld darf höher gezogen werden, aber
   nicht breiter: sonst schiebt es den Kasten auseinander. */
textarea {
    line-height: 1.5;
    resize: vertical;
}

input:focus,
textarea:focus {
    border-color: var(--olive);
}

/* --- Die Zustimmungszeile mit Ankreuzfeld (Kontaktformular) ---
   Ein <label> ist normalerweise ein eigener Block über dem Feld. Hier steht
   der Text NEBEN dem Kästchen, deshalb werden beide Regeln aufgehoben.
   align-items: start – bei mehrzeiligem Text bleibt das Kästchen oben auf
   Höhe der ersten Zeile stehen und rutscht nicht in die Mitte. */
.hw-datenschutz-zeile {
    display: flex;
    align-items: start;
    gap: 0.6rem;
    margin: 1.5rem 0 0;
    font-size: 0.9rem;
    color: var(--muted);
}

.hw-datenschutz-zeile label {
    display: inline;
    margin: 0;
    font-weight: 400;
    font-size: inherit;
}

/* Etwas größer als die Voreinstellung: ein Kästchen von 13 Pixeln trifft man
   auf dem Handy nur mit Glück.
   margin-top rückt es auf die Schriftlinie der ersten Textzeile. */
.hw-datenschutz-zeile input[type="checkbox"] {
    flex-shrink: 0;
    width: 1.15rem;
    height: 1.15rem;
    margin-top: 0.15rem;
    accent-color: var(--forest);
}

/* Sichtbare Markierung des aktiven Elements – wichtig für alle, die mit der
   Tastatur navigieren. Bitte nicht durch "outline: none" ersetzen. */
input:focus-visible,
button:focus-visible,
a:focus-visible {
    outline: 2px solid var(--olive);
    outline-offset: 2px;
}

.hw-pflicht {
    color: var(--hw-fehler-text);
    font-weight: 400;
}

.hw-optional,
.hw-feldhinweis {
    font-weight: 400;
    font-size: 0.85rem;
    color: var(--muted);
}

.hw-feldhinweis {
    display: block;
    margin-top: 0.3rem;
}


/* --------------------------------------------------------------------------
   5. Schaltflächen
   -------------------------------------------------------------------------- */
.hw-btn {
    display: inline-block;
    margin-top: 1.5rem;
    padding: 0.7rem 1.3rem;
    font-size: 1rem;
    font-family: inherit;
    color: var(--white);
    background: var(--forest);
    border: none;
    border-radius: 999px;
    text-decoration: none;
    cursor: pointer;
}

.hw-btn:hover {
    color: var(--white);
    background: var(--forest-dark);
}

.hw-btn--sekundaer {
    color: var(--ink);
    background: var(--cream-deep);
}

.hw-btn--sekundaer:hover {
    color: var(--ink);
    background: var(--line);
}

/* Kleine Variante für Navigation und Listeneinträge – dort wäre der
   Standardabstand nach oben unpassend. */
.hw-btn--klein {
    margin-top: 0;
    padding: 0.35rem 0.9rem;
    font-size: 0.9rem;
}

/* Ein Knopf, der (noch) nirgendwo hinführt.
   Gedacht für Angebote, die angekündigt, aber noch nicht freigeschaltet sind.
   Im HTML ist das kein <a>, sondern ein <span> ohne href: dadurch ist er
   weder anklickbar noch mit der Tabulatortaste erreichbar – ein Link, der ins
   Leere führt, wäre für Tastatur- und Screenreader-Nutzer eine Sackgasse.

   cursor: default statt "not-allowed": der Knopf ist nicht verboten,
   sondern schlicht noch nicht so weit. */
.hw-btn--aus {
    color: var(--muted);
    background: var(--cream-deep);
    cursor: default;
}

.hw-btn--aus:hover {
    color: var(--muted);
    background: var(--cream-deep);
}

/* Der Zusatz "in Vorbereitung" direkt neben dem Knopf. */
.hw-btn-notiz {
    margin-left: 0.6rem;
    font-size: 0.9rem;
    color: var(--muted);
}


/* --------------------------------------------------------------------------
   6. Meldungen (Fehler, Erfolg, Info)
   -------------------------------------------------------------------------- */
.hw-meldung {
    margin: 1rem 0;
    padding: 0.8rem 1rem;
    border: 1px solid;
    border-radius: 8px;
    font-size: 0.95rem;
}

.hw-meldung p:first-child { margin-top: 0; }
.hw-meldung p:last-child  { margin-bottom: 0; }

.hw-meldung ul {
    margin: 0.4rem 0 0;
    padding-left: 1.2rem;
}

/* Die Namen entsprechen den Typen aus hw_flash_setzen(): fehler/erfolg/info. */
.hw-meldung--fehler {
    color: var(--hw-fehler-text);
    background: var(--hw-fehler-bg);
    border-color: var(--hw-fehler-rand);
}

.hw-meldung--erfolg {
    color: var(--hw-erfolg-text);
    background: var(--hw-erfolg-bg);
    border-color: var(--hw-erfolg-rand);
}

.hw-meldung--info {
    color: var(--hw-info-text);
    background: var(--hw-info-bg);
    border-color: var(--hw-info-rand);
}

.hw-hinweis {
    margin-top: 0;
    font-size: 0.95rem;
    color: var(--muted);
}


/* --------------------------------------------------------------------------
   7. Kleinteile: Stufen-Abzeichen, Marker, Datumsangabe
   -------------------------------------------------------------------------- */
.hw-badge {
    display: inline-block;
    padding: 0.15rem 0.7rem;
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--white);
    background: var(--olive);
    border-radius: 999px;
}

.hw-badge--klein {
    padding: 0.1rem 0.55rem;
    font-size: 0.75rem;
}

/* Kennzeichnung "Zum Ausdrucken" / "Fragebogen" */
.hw-marker {
    display: inline-block;
    padding: 0.1rem 0.55rem;
    font-size: 0.75rem;
    color: var(--forest);
    background: var(--cream-deep);
    border-radius: 999px;
    white-space: nowrap;
}

.hw-stand {
    font-size: 0.85rem;
    color: var(--muted);
}

.hw-fussnote {
    margin: 2rem 0 0;
    padding-top: 1rem;
    border-top: 1px solid var(--line);
    font-size: 0.9rem;
    color: var(--muted);
}

/* Technische Bezeichnungen im Fließtext – Cookie-Namen, IP-Adressen.
   Ohne eigene Regel nähme der Browser eine Schreibmaschinenschrift in
   Originalgröße, die neben dem Fließtext deutlich zu groß wirkt. Deshalb
   0.92em: gleiche Zeilenhöhe, ruhigeres Bild. */
code {
    padding: 0.1rem 0.35rem;
    background: var(--cream-deep);
    border-radius: 4px;
    font-size: 0.92em;
}

/* Absatz unter den Formularen aus Schritt 1 ("Schon registriert? …").
   Nicht mit .hw-seitenfuss verwechseln – das ist die Fußzeile der Seite. */
.hw-fuss {
    margin: 1.5rem 0 0;
    padding-top: 1rem;
    border-top: 1px solid var(--line);
    font-size: 0.9rem;
    color: var(--muted);
}

.hw-logout {
    margin-top: 2rem;
    padding-top: 1rem;
    border-top: 1px solid var(--line);
}


/* --------------------------------------------------------------------------
   8. Tabelle auf der Kontoseite   (Schritt 1)
   -------------------------------------------------------------------------- */
.hw-tabelle {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.95rem;
}

.hw-tabelle th,
.hw-tabelle td {
    padding: 0.55rem 0.4rem;
    text-align: left;
    vertical-align: top;
    border-bottom: 1px solid var(--line);
}

.hw-tabelle th {
    width: 38%;
    font-weight: 600;
    color: var(--muted);
}

.hw-tabelle small {
    color: var(--muted);
}

.hw-liste {
    margin: 0.5rem 0 0;
    padding-left: 1.2rem;
    font-size: 0.95rem;
}

.hw-liste li {
    margin-bottom: 0.3rem;
}


/* --------------------------------------------------------------------------
   9. Übersichtsseite   (content/index.php)
   -------------------------------------------------------------------------- */
.hw-kategorie {
    margin-bottom: 2.5rem;
}

.hw-inhaltsliste {
    margin: 1rem 0 0;
    padding: 0;
    list-style: none;   /* die Einträge sind Kästen, keine Aufzählung */
}

.hw-eintrag {
    margin-bottom: 0.9rem;
    padding: 1rem 1.1rem;
    background: var(--cream);
    border: 1px solid var(--line);
    border-left: 4px solid var(--olive);
    border-radius: 8px;
}

/* Gesperrte Einträge: sichtbar, aber zurückgenommen. Absichtlich nicht
   ausgegraut bis zur Unlesbarkeit – der Titel soll neugierig machen. */
.hw-eintrag--gesperrt {
    border-left-color: var(--line);
    background: var(--white);
}

.hw-eintrag-kopf {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: baseline;
    justify-content: space-between;
}

.hw-eintrag-kopf h3 {
    margin: 0;
}

.hw-eintrag-kopf a {
    text-decoration: none;
}

.hw-eintrag-kopf a:hover {
    text-decoration: underline;
}

.hw-teaser {
    margin: 0.4rem 0 0.7rem;
    color: var(--muted);
}

.hw-teaser--gross {
    font-size: 1.1rem;
    color: var(--ink);
}

.hw-eintrag-fuss {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem 0.75rem;
    align-items: center;
    margin: 0;
    font-size: 0.9rem;
}

.hw-schloss {
    font-size: 0.9rem;
}

.hw-gesperrt-text {
    color: var(--muted);
}


/* --------------------------------------------------------------------------
   10. Einzelansicht   (content/view.php)
   -------------------------------------------------------------------------- */
.hw-zurueck {
    /* Weniger Abstand unten als frueher (1rem), weil der Link selbst jetzt
       Innenabstand mitbringt – siehe die Regel darunter. */
    margin: 0 0 0.5rem;
    font-size: 0.9rem;
}

/* Auch dieser Link war als reine Textzeile nur 19 Pixel hoch. Er steht zwar
   allein, aber 19 Pixel sind auch ohne Nachbarn wenig fuer einen Daumen. */
.hw-zurueck a {
    display: inline-block;
    padding: 0.4rem 0.2rem;
    margin-left: -0.2rem;
}

/* Zweites Vorkommen am Seitenende: oben Abstand zum letzten Absatz bzw. zur
   Fussnote, damit der Link nicht daran klebt. Unten reicht der Innenabstand
   des Rahmens (.hw-seite). */
.hw-zurueck-unten {
    margin: 2rem 0 0;
}

.hw-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem 0.75rem;
    align-items: center;
    margin: 0 0 1.5rem;
    padding-bottom: 1rem;
    border-bottom: 1px solid var(--line);
}

/* Leiste mit dem Drucken-Knopf über einem Fragebogen */
.hw-druckleiste {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem 1.5rem;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 1.75rem;
    padding: 1rem 1.1rem;
    background: var(--cream);
    border: 1px dashed var(--olive-light);
    border-radius: 8px;
}

.hw-druckleiste p {
    margin: 0;
    font-size: 0.9rem;
    color: var(--muted);
}

.hw-druckleiste .hw-btn {
    margin-top: 0;
    flex-shrink: 0;
}

/* Die Bezahlschranke, wenn die Stufe nicht reicht */
.hw-schranke {
    margin-top: 1.5rem;
    padding: 1.5rem;
    text-align: center;
    background: var(--cream);
    border: 1px solid var(--olive-light);
    border-radius: 12px;
}

.hw-schranke-kopf {
    margin-top: 0;
    font-family: var(--hw-serif);
    font-size: 1.15rem;
    color: var(--forest);
}

.hw-schranke-aktionen {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    justify-content: center;
    margin-bottom: 0;
}

.hw-schranke-aktionen .hw-btn {
    margin-top: 0.5rem;
}


/* --------------------------------------------------------------------------
   11. Der Inhalt selbst   (das HTML aus content_items.body)
   --------------------------------------------------------------------------
   Diese Regeln gelten für das HTML, das von Hand im body-Feld in phpMyAdmin
   eingetragen wird. Deshalb sind hier auch die einfachen Elemente (p, ul,
   table) gestaltet – so muss beim Schreiben keine Klasse angegeben werden.
   -------------------------------------------------------------------------- */
.hw-inhalt {
    font-size: 1.02rem;
}

.hw-inhalt > *:first-child {
    margin-top: 0;
}

.hw-inhalt p {
    margin: 0 0 1rem;
}

.hw-inhalt ul,
.hw-inhalt ol {
    margin: 0 0 1.2rem;
    padding-left: 1.4rem;
}

.hw-inhalt li {
    margin-bottom: 0.45rem;
}

/* Die folgenden Tabellenregeln gelten nur für Tabellen OHNE Klasse.
   Grund: Die echten Inhalte benutzen eigene Tabellenklassen (.kosten,
   .procontra, .verzeichnis, .kopf), die weiter unten im Abschnitt
   "Content-Baustein-Stile" ihr eigenes Aussehen mitbringen. Ohne das
   :not([class]) würden sich beide Regelsätze überlagern: die Tabellen bekämen
   von hier ein volles Gitter und von dort nur Trennlinien – ein Mischbild, das
   keine der beiden Vorlagen so wollte. */
.hw-inhalt table {
    width: 100%;
    margin: 0 0 1.5rem;
    border-collapse: collapse;
    font-size: 0.95rem;
}

.hw-inhalt table:not([class]) th,
.hw-inhalt table:not([class]) td {
    padding: 0.55rem 0.7rem;
    text-align: left;
    vertical-align: top;
    border: 1px solid var(--line);
}

.hw-inhalt table:not([class]) thead th {
    color: var(--forest);
    background: var(--cream-deep);
    font-weight: 600;
}

/* Zebrastreifen für einfache Tabellen ohne eigene Klasse. */
.hw-inhalt table:not([class]) tbody tr:nth-child(even) {
    background: var(--cream);
}

/* --- Kästen, die im body-Feld benutzt werden dürfen --- */

/* ACHTUNG, falls du die alte Anleitung aus Schritt 2 kennst:
   Hier stand früher eine Regel, die .hinweis als KASTEN gestaltet hat.
   Sie ist entfernt – in den echten Inhalten bedeutet .hinweis das Gegenteil,
   nämlich einen kurzen Hinweis in Kleinschrift (siehe "p.hinweis" im Abschnitt
   Content-Baustein-Stile weiter unten). Bliebe die alte Regel stehen, würde sie
   die neue überstimmen und aus jedem kleinen Hinweis einen grünen Kasten
   machen – z. B. aus "Stand: Juli 2026" im Finanzen-Infoblatt.
   Der Kasten heißt jetzt .hinweisbox. */

/* <div class="warnung"> … </div>  – Achtung, Risiko, häufiger Fehler */
.hw-inhalt .warnung {
    margin: 0 0 1.5rem;
    padding: 1rem 1.1rem;
    background: var(--hw-fehler-bg);
    border-left: 4px solid var(--hw-fehler-rand);
    border-radius: 6px;
}

.hw-inhalt .warnung > *:last-child,
.hinweisbox > *:last-child {
    margin-bottom: 0;
}

/* --- Bausteine für Fragebögen --- */

/* <p class="frage">  – die Frage selbst */
.hw-inhalt .frage {
    margin-bottom: 0.2rem;
    font-weight: 600;
}

/* <p class="notiz">  – Hinweis in Kleinschrift unter einer Frage */
.hw-inhalt .notiz {
    margin-bottom: 0.6rem;
    font-size: 0.88rem;
    color: var(--muted);
}

/* <div class="linie"></div>  – leere Zeile zum Ausfüllen mit der Hand.
   Am Bildschirm dezent, auf Papier deutlich (siehe @media print). */
.hw-inhalt .linie {
    height: 1.6rem;
    margin: 0 0 1rem;
    border-bottom: 1px solid var(--line);
}


/* --------------------------------------------------------------------------
   12. Sichtbarkeit: Bildschirm oder Papier
   -------------------------------------------------------------------------- */
/* Nur beim Ausdrucken sichtbar (Quellenangabe unter dem Fragebogen). */
.hw-nur-druck {
    display: none;
}


/* --------------------------------------------------------------------------
   16. Über-mich-Seite: Foto, Fakten-Leiste, Zeitstrahl, Zitat
   -------------------------------------------------------------------------- */

/* Foto neben der Einleitung. wrap-reverse: auf schmalen Bildschirmen steht
   das Foto zuerst (Reihenfolge im HTML), aber optisch soll der Text zuerst
   kommen – deshalb liegt der Text im Markup vor dem Foto und wrap-reverse
   dreht die Zeilenfolge beim Umbruch wieder um, sodass das Foto oben landet. */
.hw-vorstellung {
    display: flex;
    flex-wrap: wrap;
    gap: 1.5rem;
    align-items: center;
    margin-bottom: 0.5rem;
}

.hw-vorstellung-text {
    flex: 2 1 16rem;
    min-width: 16rem;
}

.hw-portrait {
    flex: 1 1 12rem;
    max-width: 12rem;
    width: 100%;
    height: auto;
    display: block;
    border-radius: 12px;
    border: 1px solid var(--line);
    box-shadow: var(--shadow);
    object-fit: cover;
}

@media (max-width: 40rem) {
    .hw-vorstellung {
        flex-direction: column-reverse;
    }

    /* Die min-width von 16rem oben hat nur eine Aufgabe: solange Text und
       Foto NEBENEINANDER stehen, erzwingt sie den Umbruch, bevor der Text
       zu einer schmalen Spalte zusammengequetscht wird.

       Hier stehen sie untereinander – die Aufgabe ist damit erledigt, und
       uebrig bleibt nur der Schaden: 16rem sind 256 Pixel, und auf einem
       Display, das schmaler ist (Galaxy Fold zugeklappt, 280 Pixel), schob
       der Text die Seite auseinander. */
    .hw-vorstellung-text {
        min-width: 0;
    }

    .hw-portrait {
        /* min(): 14rem, solange die auch hineinpassen – auf einem sehr
           schmalen Display (Galaxy Fold zugeklappt, 280 Pixel) sind 14rem
           breiter als der Kasten, und das Bild schob die Seite auseinander. */
        max-width: min(14rem, 100%);
        margin: 0 auto;
    }
}

/* Kleine Abzeichen mit den wichtigsten Eckdaten auf einen Blick. */
.hw-fakten {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin: 0.9rem 0 0;
    padding: 0;
    list-style: none;
}

.hw-fakten li {
    padding: 0.3rem 0.85rem;
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--forest);
    background: var(--cream-deep);
    border-radius: 999px;
}

/* Zeitstrahl für "Mein Weg zum Hund": eine senkrechte Linie mit Punkten statt
   Fließtext-Absätzen. */
.hw-zeitstrahl {
    margin: 1rem 0 1.5rem;
    padding: 0;
    list-style: none;
    border-left: 2px solid var(--olive-light);
}

.hw-zeitstrahl li {
    position: relative;
    margin-bottom: 1.1rem;
    padding-left: 1.3rem;
}

.hw-zeitstrahl li:last-child {
    margin-bottom: 0;
}

.hw-zeitstrahl li::before {
    content: "";
    position: absolute;
    left: -0.4rem;
    top: 0.35rem;
    width: 0.65rem;
    height: 0.65rem;
    background: var(--forest);
    border-radius: 50%;
}

.hw-zeitstrahl-jahr {
    display: block;
    font-family: var(--hw-serif);
    font-weight: 700;
    color: var(--forest);
    font-size: 0.95rem;
}

/* Hervorgehobener Kernsatz. */
.hw-zitat {
    margin: 1.5rem 0;
    padding: 1.1rem 1.3rem;
    font-family: var(--hw-serif);
    font-size: 1.1rem;
    font-style: italic;
    color: var(--forest-dark);
    background: var(--cream);
    border-left: 4px solid var(--forest);
    border-radius: 6px;
}

.hw-zitat p {
    margin: 0;
}


/* --------------------------------------------------------------------------
   17. Termin-Seite: die Zeeg-Einbettung   (termin.php)
   --------------------------------------------------------------------------
   Der Buchungskalender kommt von zeeg.me und wird per Skript in ein leeres
   <div> gesetzt. Der Schnipsel von Zeeg schrieb dem <div> style="min-width:
   320px" vor. Im Kasten auf termin.php bleiben aber nur rund 314 Pixel
   uebrig, wenn das Fenster 375 Pixel breit ist – und noch weniger darunter.
   Gemessen bei 320 Pixeln Fensterbreite: 30 Pixel Ueberstand, die ganze
   Seite liess sich seitlich schieben.

   min-width: 0 hebt eine Besonderheit von Flex- und Grid-Kindern auf: die
   weigern sich von sich aus, schmaler zu werden als ihr Inhalt.

   overflow-x: auto ist die Rueckfalloption. Wenn der Kalender, den Zeeg
   nachlaedt, doch auf einer festen Breite besteht, scrollt dann er – und
   nicht die ganze Seite unter dem Finger weg.
   -------------------------------------------------------------------------- */
.zeeg-inline-widget {
    width: 100%;
    min-width: 0;
    max-width: 100%;
    overflow-x: auto;
}

/* Zeeg setzt den Kalender in ein <iframe>. Ohne diese Zeile bringt es
   seine eigene Breite mit und ignoriert den Kasten darum. */
.zeeg-inline-widget iframe {
    max-width: 100%;
}


/* ==========================================================================
   13. DRUCKANSICHT
   ==========================================================================
   Diese Seiten werden für die Beratung vor Ort ausgedruckt und abgeheftet.
   Ziel: nur Titel und Inhalt auf dem Papier, keine Navigation, keine Knöpfe,
   keine Farbflächen – und links genug Rand für den Locher.
   ========================================================================== */
@media print {

    /* Seitenränder des Papiers: oben/unten 1,5 cm, rechts 1,5 cm,
       links 2,5 cm für die Lochung. */
    @page {
        margin: 1.5cm 1.5cm 1.5cm 2.5cm;
    }

    /* Schwarz auf Weiß spart Tinte und bleibt auch als Kopie lesbar.
       pt statt px, weil pt die Maßeinheit für Papier ist. */
    body {
        padding: 0;
        font-size: 11pt;
        line-height: 1.45;
        color: #000;
        background: #fff;
    }

    /* Alles, was auf Papier nichts zu suchen hat.
       !important ist hier angebracht: diese Regel soll jede andere schlagen. */
    .hw-noprint,
    .hw-kopf,
    .hw-nav,
    .hw-seitenfuss,
    .hw-zurueck,
    .hw-druckleiste,
    .hw-btn,
    .hw-logout,
    .hw-meldung,
    .hw-schranke,
    .hw-fussnote {
        display: none !important;
    }

    /* Der Kasten wird auf Papier zum reinen Textblock: keine Schatten,
       keine Rundungen, keine Begrenzung der Breite. */
    .hw-main,
    .hw-box,
    .hw-box--breit {
        max-width: none;
        margin: 0;
        padding: 0;
        background: none;
        border: none;
        border-radius: 0;
        box-shadow: none;
    }

    h1 {
        margin-bottom: 0.3cm;
        font-size: 18pt;
        color: #000;
    }

    h2, h3 {
        color: #000;
    }

    /* Eine Überschrift soll nicht allein am Seitenende stehen. */
    h1, h2, h3 {
        break-after: avoid;
        page-break-after: avoid;
    }

    /* Zeile mit Stufe und Stand: schlicht, aber drauf – sonst weiß man beim
       abgehefteten Blatt später nicht mehr, von wann es ist. */
    .hw-meta {
        margin-bottom: 0.5cm;
        padding-bottom: 0.2cm;
        border-bottom: 1pt solid #000;
        font-size: 9pt;
    }

    .hw-badge,
    .hw-marker {
        padding: 0;
        color: #000;
        background: none;
        font-weight: 600;
    }

    .hw-badge::after,
    .hw-marker::after {
        content: " ·";
    }

    /* Tabellen, Kästen und Aufzählungspunkte nicht mitten durchreißen. */
    table, tr, td, th,
    .hinweisbox,
    .hw-inhalt .warnung,
    li {
        break-inside: avoid;
        page-break-inside: avoid;
    }

    .hw-inhalt table {
        font-size: 10pt;
    }

    /* Wieder nur Tabellen ohne eigene Klasse – die Tabellen der echten Inhalte
       bringen ihr Druckbild selbst mit (siehe Content-Baustein-Stile unten). */
    .hw-inhalt table:not([class]) th,
    .hw-inhalt table:not([class]) td {
        border: 0.5pt solid #000;
    }

    .hw-inhalt table:not([class]) thead th {
        background: none;
        font-weight: 700;
    }

    .hw-inhalt table:not([class]) tbody tr:nth-child(even) {
        background: none;
    }

    /* Kästen behalten ihre Kante, damit sie sich vom Text abheben – aber ohne
       Farbfläche.
       Gilt bewusst NICHT für .hinweisbox: die Content-Baustein-Stile wollen
       diesen Kasten ausdrücklich auch auf Papier in Markenfarbe (dort steht
       print-color-adjust: exact). Stünde .hinweisbox hier mit drin, würde ihm
       diese Regel die Hintergrundfläche wieder wegnehmen. */
    .hw-inhalt .warnung {
        padding: 0.3cm 0.4cm;
        background: none;
        border: 0.5pt solid #000;
        border-left-width: 2pt;
    }

    /* Schreiblinien: auf Papier klar sichtbar und hoch genug für Handschrift. */
    .hw-inhalt .linie {
        height: 1.1cm;
        border-bottom: 0.5pt solid #000;
    }

    .hw-inhalt .notiz {
        color: #333;
        font-size: 9pt;
    }

    /* Die Quellenangabe erscheint nur hier. */
    .hw-nur-druck {
        display: block;
        margin-top: 0.8cm;
        padding-top: 0.2cm;
        border-top: 0.5pt solid #000;
        font-size: 8pt;
    }

    /* Ein Link auf Papier ist wertlos, wenn man das Ziel nicht sieht –
       deshalb die Adresse in Klammern dahinter. Nur bei echten
       Internetadressen, nicht bei internen Verweisen. */
    .hw-inhalt a[href^="http"]::after {
        content: " (" attr(href) ")";
        font-size: 8pt;
        word-break: break-all;
    }
}


/* --------------------------------------------------------------------------
   14. Kleine Bildschirme
   -------------------------------------------------------------------------- */
@media (max-width: 40rem) {
    .hw-main {
        padding: 1.25rem 0.6rem 2rem;
    }

    .hw-box {
        padding: 1.25rem;
    }

    .hw-kopf {
        padding: 0.6rem 0.8rem;
    }

    .hw-marke span {
        /* Auf schmalen Displays reicht das Logo – der Schriftzug steht sowieso
           im Logo selbst und würde die Navigation umbrechen. */
        display: none;
    }

    /* Ausnahme: In der schlichten Kopfzeile gibt es keine Navigation, die
       umbrechen könnte. Dort bleibt der Schriftzug stehen – sonst schwebt
       ein einzelnes kleines Logo allein über der Seite. */
    .hw-kopf--schlicht .hw-marke span {
        display: inline;
    }

    /* Breite Tabellen im Inhalt dürfen seitlich gescrollt werden, statt die
       ganze Seite auseinanderzuschieben. */
    .hw-inhalt table {
        display: block;
        overflow-x: auto;
    }

    /* Kontoseite: Bezeichnung über den Wert statt daneben. */
    .hw-tabelle th,
    .hw-tabelle td {
        display: block;
        width: 100%;
    }

    .hw-tabelle th {
        border-bottom: none;
        padding-bottom: 0;
    }
}


/* ==========================================================================
   15. CONTENT-BAUSTEIN-STILE
   ==========================================================================
   Ab hier unveraendert uebernommen aus sql/schritt3_content_stile.css.
   Bitte Aenderungen an diesen Regeln dort vornehmen und erneut einfuegen,
   damit beide Dateien gleich bleiben.
   Diese Regeln stehen bewusst am ENDE: bei gleicher Spezifitaet gewinnt in
   CSS die spaetere Regel, sie haben hier also das letzte Wort.
   ========================================================================== */

/* ============================================================
   Content-Baustein-Stile für Hundewegweiser
   Basiert auf der bestehenden Dokumenten-Marke: #2E4B3F
   Gilt einheitlich für Bildschirm UND Druck (siehe @media print unten)
   ============================================================ */

/* --hw-rand fehlt hier absichtlich, anders als in sql/schritt3_content_stile.css:
   Dort steht die Datei für sich allein und braucht einen eigenen Wert. Hier in
   style.css gibt es --hw-rand schon (Abschnitt 1, gekoppelt an --line), und ein
   zweiter :root mit eigenem Wert hätte ihn stillschweigend überschrieben –
   Randfarbe #e0d7bd wurde dadurch zu #d8d2c0. Beim Abgleich mit der sql-Datei
   bitte NUR die vier Marke-Variablen übernehmen, --hw-rand nicht. */
:root {
  --hw-marke: #2E4B3F;
  --hw-marke-hell: #4a6b57;
  --hw-marke-dunkel: #1c3227;
  --hw-creme: #fbf6e9;
  --hw-text: #1d2a22;
  --hw-muted: #526155;
}

/* Überschriften innerhalb von Inhalten (content_items.body) */
.content-body h3 {
  font-family: Georgia, "Times New Roman", serif;
  color: var(--hw-marke);
  font-size: 1.3rem;
  margin-top: 2rem;
  border-bottom: 2px solid var(--hw-marke);
  padding-bottom: 0.3rem;
}

.content-body h4 {
  font-family: Georgia, "Times New Roman", serif;
  color: var(--hw-marke-dunkel);
  font-size: 1.1rem;
  margin-top: 1.5rem;
}

/* Hinweis-/Warnbox */
.hinweisbox {
  background: var(--hw-creme);
  border-left: 4px solid var(--hw-marke);
  padding: 1rem 1.2rem;
  margin: 1.2rem 0;
  font-size: 0.95rem;
}
.hinweisbox strong {
  color: var(--hw-marke);
  display: block;
  margin-bottom: 0.4rem;
}

/* Pro/Contra-Tabelle */
table.procontra {
  width: 100%;
  border-collapse: collapse;
  margin: 1rem 0;
}
table.procontra th {
  background: var(--hw-marke);
  color: white;
  padding: 0.6rem;
  text-align: left;
}
table.procontra td {
  padding: 0.6rem;
  border-bottom: 1px solid var(--hw-rand);
  vertical-align: top;
}

/* Kostentabelle */
table.kosten {
  width: 100%;
  border-collapse: collapse;
  margin: 1rem 0;
}
table.kosten th {
  background: var(--hw-marke-hell);
  color: white;
  padding: 0.5rem 0.8rem;
  text-align: left;
}
table.kosten td {
  padding: 0.5rem 0.8rem;
  border-bottom: 1px solid var(--hw-rand);
}
table.kosten td:last-child {
  text-align: right;
  white-space: nowrap;
}

/* Verzeichnis-Tabelle (Tierärzte, Tierkliniken etc.) */
table.verzeichnis {
  width: 100%;
  border-collapse: collapse;
  margin: 0.8rem 0 1.5rem;
  font-size: 0.95rem;
}
table.verzeichnis th {
  background: var(--hw-marke-dunkel);
  color: white;
  padding: 0.5rem 0.7rem;
  text-align: left;
}
table.verzeichnis td {
  padding: 0.5rem 0.7rem;
  border-bottom: 1px solid var(--hw-rand);
}

/* --------------------------------------------------------------------------
   Seite »Nützliche Kontakte« (links.php) – aufklappbare Kategorien + Verzeichnis-Tabellen
   -------------------------------------------------------------------------- */

/* Die Kategorie-Liste (Tierärzte, Kliniken, Hundesportvereine …). Jede Kategorie
   ist ein <details>; zu ist die Seite kurz, ein Tipp auf die Überschrift
   klappt sie auf. Kein JavaScript. */
.hw-kategorien {
  margin-top: 1.5rem;
  border-top: 1px solid var(--line);
}

.hw-links .hw-kat {
  border-bottom: 1px solid var(--line);
}

.hw-links .hw-kat > summary {
  list-style: none;          /* Firefox: Standard-Dreieck weg */
  cursor: pointer;
  padding: 0.85rem 0.2rem;   /* großzügige Antippfläche über die ganze Zeile */
}
.hw-links .hw-kat > summary::-webkit-details-marker {
  display: none;             /* WebKit/Chrome/Safari: Standard-Dreieck weg */
}

/* Die Kategorie-Überschrift steht als <h2> in der <summary> (bleibt so eine
   echte Überschrift für Screenreader). Den eigenständigen h2-Look – Serifen,
   Unterlinie – braucht sie hier nicht, die Linie kommt von .hw-kat. */
.hw-links .hw-kat > summary h2 {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 1.2rem;
}

/* Der Pfeil vor der Überschrift: ein gedrehtes Eck aus zwei Rändern. Zeigt
   geschlossen nach rechts, aufgeklappt nach unten. */
.hw-links .hw-kat > summary h2::before {
  content: "";
  flex: 0 0 auto;
  width: 0.5rem;
  height: 0.5rem;
  margin-left: 0.15rem;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(-45deg);
  transition: transform 150ms ease;
}
.hw-links .hw-kat[open] > summary h2::before {
  transform: rotate(45deg);
}

.hw-links .hw-kat > summary:hover h2 {
  color: var(--forest-light);
}
.hw-links .hw-kat > summary:focus-visible {
  outline: 3px solid var(--olive-light);
  outline-offset: 2px;
  border-radius: 6px;
}

.hw-links .hw-kat-inhalt {
  padding: 0 0.2rem 1.3rem;
}
/* Erste Ort-Überschrift direkt unter der Kategorie: kein großer Abstand nach
   oben. */
.hw-links .hw-kat-inhalt > h3:first-child {
  margin-top: 0.3rem;
}

/* Die Verzeichnis-Tabellen können auf sehr schmalen Displays breiter werden
   als der Kasten. Der Umschlag lässt dann NUR die Tabelle seitlich scrollen,
   statt die ganze Seite auseinanderzuschieben – dieselbe Lösung wie bei den
   Zeeg-Einbettungen und den Tabellen in .hw-inhalt.

   Ab 34rem Bildschirmbreite abwärts greift zusätzlich der Block weiter unten,
   der die Tabellen ganz auflöst. Der Umschlag bleibt trotzdem: Er ist die
   Rückfallebene für den Bereich dazwischen und für alles, was hier später
   noch an Tabellen dazukommt. */
.hw-verzeichnis-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

/* --------------------------------------------------------------------------
   Verzeichnis-Tabellen auf dem Handy: aus Zeilen werden Blöcke
   --------------------------------------------------------------------------
   NACHGEMESSEN AM 01.09.2026, warum das nötig war:

   Bei 360 Pixeln Bildschirmbreite bleiben im Kasten 293 Pixel für die Tabelle.
   Die Klinik-Tabelle braucht 445. Die Seite selbst rutschte dabei NICHT zur
   Seite – der Umschlag oben hat seine Arbeit getan –, aber 152 Pixel der
   Tabelle standen außerhalb des Sichtbaren, und zwar die beiden letzten
   Spalten: "Entfernung" und "Notdienst".

   Das ist genau die Information, für die es diese Tabelle gibt. Und nichts am
   Bildschirm deutete darauf hin, dass da noch etwas ist: kein abgeschnittener
   Buchstabe, kein Rollbalken (den blendet ein Handy von sich aus aus). Wer
   nachts mit einem kranken Hund auf diese Seite schaut, sieht fünf Kliniken
   und keinen Notdienst.

   DIE LÖSUNG

   Unterhalb von 34rem hören die Tabellen auf, Tabellen zu sein: Jede Zeile
   wird ein Block, jede Zelle eine eigene Zeile darin. Statt der Kopfzeile
   steht die Spaltenbezeichnung vor dem Wert – sie kommt aus dem Attribut
   data-spalte, das links.php an die Zellen schreibt. Nichts wird mehr
   abgeschnitten, nichts muss geschoben werden.

   Die erste Zelle jeder Zeile (der Name der Praxis, Klinik oder Schule) trägt
   bewusst KEIN data-spalte: Vor einem Namen "Klinik:" zu schreiben, wo der
   Name ohnehin fett und oben steht, ist eine Beschriftung ohne Nutzen.

   Leere Zellen (Vereine ohne Telefonnummer) bekommen in links.php ebenfalls
   kein data-spalte und verschwinden hier ganz. Ein "Telefon:" ohne Nummer
   dahinter wäre schlechter als gar nichts.

   WARUM 34rem UND NICHT DIE 40rem VON ABSCHNITT 14

   Zwischen 34 und 40rem (544–640 Pixel) passen die Tabellen noch. Sie dort
   schon aufzulösen würde eine gut lesbare Tabelle gegen eine lange Liste
   tauschen, ohne dass es einen Grund gäbe. Der Wert ist gemessen, nicht
   geerbt.
   -------------------------------------------------------------------------- */
@media (max-width: 34rem) {

  /* display: block hebt das Tabellenverhalten auf – ab hier fließen die
     Elemente untereinander wie Absätze. */
  .hw-links .verzeichnis,
  .hw-links .verzeichnis tbody,
  .hw-links .verzeichnis tr,
  .hw-links .verzeichnis td {
    display: block;
    width: 100%;
  }

  /* Die Kopfzeile wird nicht mehr gebraucht – ihre Beschriftungen stehen
     jetzt vor den einzelnen Werten.

     display: none und nicht "nur optisch verstecken": Der Zusammenhang
     zwischen Spaltenkopf und Zelle geht durch das display: block oben ohnehin
     verloren, ein Screenreader liest die Kopfzeile hier also nicht mehr
     sinnvoll vor. Die Beschriftung im ::before-Text steht dafür in jeder
     Zeile, wird mitgelesen und trägt die Information zuverlässiger. */
  .hw-links .verzeichnis thead {
    display: none;
  }

  /* Jede Zeile ist jetzt ein eigener kleiner Block mit Trennlinie darunter. */
  .hw-links .verzeichnis tr {
    padding: 0.75rem 0;
    border-bottom: 1px solid var(--hw-rand);
  }
  .hw-links .verzeichnis tr:last-child {
    border-bottom: none;
  }

  .hw-links .verzeichnis td {
    padding: 0.1rem 0;
    border-bottom: none;
  }

  /* Der Name steht oben und bekommt etwas Luft nach unten. */
  .hw-links .verzeichnis td:first-child {
    margin-bottom: 0.25rem;
  }

  /* Die Spaltenbezeichnung vor dem Wert. attr() liest den Text aus dem
     data-spalte-Attribut der Zelle – dadurch steht die Beschriftung nur an
     einer Stelle im HTML und nicht noch einmal hier im Stylesheet. */
  .hw-links .verzeichnis td[data-spalte]::before {
    content: attr(data-spalte) ": ";
    color: var(--muted);
  }

  /* Zellen ohne Beschriftung, die nicht die erste sind, sind leer (ein Verein
     ohne Telefonnummer). Eine leere Zeile im Block hilft niemandem. */
  .hw-links .verzeichnis td:not([data-spalte]):not(:first-child) {
    display: none;
  }

  /* Der Innenabstand des Kastens frisst auf einem 320-Pixel-Display ein
     Viertel der Breite. Die Kategorien dürfen deshalb bis an dessen Rand. */
  .hw-links .hw-kat-inhalt {
    padding-left: 0;
    padding-right: 0;
  }
}

/* Die Ort-Überschriften (Freising, Eching …) stehen dicht über ihrer Tabelle,
   brauchen aber Abstand nach oben zur vorherigen. h3 bringt von Haus aus
   margin: 0 mit (siehe Abschnitt 1). */
.hw-links h3 {
  margin: 1.7rem 0 0.5rem;
}

/* Telefonnummern nicht umbrechen – eine zerrissene Nummer liest sich schlecht
   und lässt sich schlechter antippen. */
.hw-links .hw-tel {
  white-space: nowrap;
}

/* Praxis-/Klinik-Namen, die auf eine externe Website verlinken, bekommen
   einen kleinen Pfeil dahinter – so ist vor dem Klick erkennbar, dass es von
   Hundewegweiser.de wegführt. Nur echte Website-Links tragen target="_blank"
   (siehe hw_praxis_name() in links.php); die tel:-Links in derselben Tabelle
   bleiben davon unberührt. */
.hw-links .verzeichnis a[target="_blank"]::after {
  /* \00a0 ist ein geschütztes Leerzeichen: An dieser Stelle darf die Zeile
     nicht umbrechen. Mit einem gewöhnlichen Leerzeichen landete der Pfeil bei
     langen Namen ("Hundsgaudi Hundetraining & Fellpflege") auf einer eigenen
     Zeile und stand dort allein unter dem Namen. */
  content: "\00a0↗";
  font-size: 0.85em;
}

/* Auf Papier alle Kategorien offen zeigen – ein Ausdruck mit zugeklappten
   Abschnitten wäre fast leer. Das <details>-Element klappt beim Drucken nicht
   von selbst auf; diese Regel erzwingt den Inhalt sichtbar. */
@media print {
  .hw-links .hw-kat-inhalt {
    display: block !important;
  }
  .hw-links .hw-kat > summary h2::before {
    display: none;
  }
}

/* Kopf-Tabelle bei Fragebögen (Name/Datum/Berater) */
table.kopf {
  width: 100%;
  margin-bottom: 1.5rem;
}
table.kopf td:first-child {
  font-weight: bold;
  width: 30%;
  padding: 0.4rem 0.5rem 0.4rem 0;
}

/* Fragebogen-Elemente */
p.frage {
  font-weight: bold;
  margin-bottom: 0.2rem;
}
p.frage .hinweis {
  font-weight: normal;
  font-style: italic;
  color: var(--hw-muted);
  font-size: 0.85rem;
}
p.checkboxen {
  margin: 0.3rem 0 1rem;
}
div.antwortzeile {
  border-bottom: 1px solid var(--hw-muted);
  min-height: 1.6rem;
  margin-bottom: 0.8rem;
}

/* Allgemeine Hinweistexte */
p.hinweistext,
p.hinweis {
  color: var(--hw-muted);
  font-size: 0.9rem;
}

/* ============================================================
   Druck-Stylesheet — identische Marke wie am Bildschirm, kein Bruch
   ============================================================ */
@media print {
  nav, header.site-header, footer.site-footer, .no-print, button {
    display: none !important;
  }
  body {
    color: var(--hw-text);
    background: white;
  }
  .content-body h3, .content-body h4 {
    color: var(--hw-marke) !important;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }
  table.procontra th, table.kosten th, table.verzeichnis th {
    background: var(--hw-marke) !important;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }
  .hinweisbox {
    border-left-color: var(--hw-marke) !important;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }
  /* Kein @page hier: der Locher-Rand (1.5cm 1.5cm 1.5cm 2.5cm) ist schon oben
     in Abschnitt 13 gesetzt. Eine zweite @page-Regel hier würde die Werte
     nicht ergänzen, sondern komplett ersetzen – beim Abgleich mit der
     sql-Datei bitte nicht mit übernehmen. */
}
