/* ============================================================
   typo.css — gemeinsame Typografie-Basis
   katinka.work · v1.0 · 2026-09-09

   Diese Datei ist auf allen Projekten IDENTISCH. Nichts hier
   drin ist seitenspezifisch — Farben, Schriftwahl, Größen und
   Layout bleiben im jeweiligen style.css.

   EINBAU: nach dem Seiten-Stylesheet einbinden.
     <link rel="stylesheet" href="style.css">
     <link rel="stylesheet" href="typo.css">

   Die Selektoren sind bewusst niedrig gewichtet (Element-Ebene),
   damit gestalterische Regeln aus style.css weiter gewinnen.
   ============================================================ */


/* ─── 1. Stellschrauben ────────────────────────────────────── */

:root {
    /* Angenehme Zeilenlänge. In ch gedacht, nicht in px: bleibt
       stabil, auch wenn die Schriftgröße sich ändert. */
    --zeile:      68ch;   /* Fließtext */
    --zeile-eng:  52ch;   /* schmale Spalten, Bildunterschriften */

    /* Sperrung für Versalien-Auszeichnungen (siehe .versalien) */
    --versalien-sperrung: 0.08em;
}


/* ─── 2. Grundeinstellungen ────────────────────────────────── */

html {
    /* iOS Safari bläht Text im Querformat sonst eigenmächtig auf. */
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}

body {
    /* Kerning und Standardligaturen explizit an — nicht jeder
       Browser schaltet sie unter allen Umständen selbst ein. */
    font-kerning: normal;
    font-variant-ligatures: common-ligatures contextual;
}


/* ─── 3. Silbentrennung ────────────────────────────────────── */
/* Braucht lang="de" im <html>. Ohne das passiert gar nichts. */

body {
    -webkit-hyphens: auto;
    hyphens: auto;
    /* Wort mindestens 6 Zeichen, mind. 3 davor, mind. 3 danach.
       Verhindert „ei-nes" und ähnliche Albernheiten. */
    hyphenate-limit-chars: 6 3 3;
}

/* Nie trennen: alles, was als Wortbild gelesen wird. */
h1, h2, h3, h4, h5, h6,
nav, .site-nav,
.btn, button,
th, caption,
.versalien {
    -webkit-hyphens: none;
    hyphens: none;
}

/* Notbremse: überlange Wörter und URLs dürfen im Zweifel brechen,
   statt aus ihrem Kasten zu laufen. Auch Überschriften — die werden
   oben von der Trennung ausgenommen und hätten sonst keinen Ausweg. */
p, li, dd, td, figcaption, blockquote, address,
h1, h2, h3, h4, h5, h6 {
    overflow-wrap: break-word;
}


/* ─── 4. Umbruchqualität ───────────────────────────────────── */

/* Überschriften: gleichmäßig auf die Zeilen verteilen, statt ein
   einzelnes Wort in Zeile 2 hängen zu lassen. */
h1, h2, h3, h4, h5, h6 {
    text-wrap: balance;
}

/* Fließtext: der Browser vermeidet Schusterjungen und zu kurze
   letzte Zeilen.

   ACHTUNG, bewusst NICHT global auf jedes <p>: `pretty` bricht die
   letzten Zeilen mehrfach neu um und verdoppelt damit die Relayout-
   Zeit. Auf kurzen Seiten unmerklich — auf einer Galerieseite mit
   hunderten Bildunterschriften ruckelt dann jeder Browser-Zoom
   (gemessen: 36 ms → 68 ms pro Relayout auf editionen.html).
   Deshalb an die Lesetext-Container gebunden. Die Zuordnung zu den
   seiteneigenen Containern steht im jeweiligen style.css. */
.lesetext p, .lesetext li, .lesetext dd, .lesetext blockquote,
.fliesstext {
    text-wrap: pretty;
}

/* Optischer Randausgleich — hängende Interpunktion.
   Bisher nur Safari, deshalb hinter @supports. */
@supports (hanging-punctuation: first) {
    .lesetext {
        hanging-punctuation: first;
    }
}


/* ─── 5. Zeilenlänge ───────────────────────────────────────── */
/* Container mit .lesetext auszeichnen. Die Zuordnung zu den
   seiteneigenen Textcontainern steht im jeweiligen style.css. */

.lesetext      { max-width: var(--zeile); }
.lesetext-eng  { max-width: var(--zeile-eng); }


/* ─── 6. Ziffern ───────────────────────────────────────────── */

/* Tabellen und Zeitangaben: gleiche Ziffernbreite, damit
   Spalten untereinander stehen. */
table, th, td, time,
.zahlen {
    font-variant-numeric: tabular-nums lining-nums;
}


/* ─── 7. Zeichen und Auszeichnung ──────────────────────────── */

/* Anführungszeichen für <q> und <blockquote> — Guillemets nach
   innen zeigend, wie im übrigen Text auch: »Wort« und ›Wort‹.
   Wer lieber „…“ setzt, tauscht die vier Werte gegen
   "\201E" "\201C" "\201A" "\2018". */
:root:lang(de), [lang="de"] {
    quotes: "\00BB" "\00AB" "\203A" "\2039";
}

/* Abkürzungen mit Erklärung: dezent markiert statt fett gestrichelt. */
abbr[title] {
    text-decoration: underline dotted;
    text-underline-offset: 0.15em;
    cursor: help;
}

/* Versalien-Auszeichnung. Titillium hat keine echten Kapitälchen —
   deshalb Großbuchstaben mit Sperrung statt font-variant-caps,
   das sonst nur gestaucht gerechnet wird. */
.versalien {
    text-transform: uppercase;
    letter-spacing: var(--versalien-sperrung);
    font-weight: 600;
}

/* Was nicht auseinanderfallen darf: <span class="zusammen">14 Uhr</span>
   Alternative zum geschützten Leerzeichen, wenn es im Text
   schlecht zu pflegen ist. */
.zusammen {
    white-space: nowrap;
}

/* Für Fälle, in denen die Automatik danebengreift. */
.keine-trennung {
    -webkit-hyphens: none;
    hyphens: none;
}


/* ─── 8. Druck: Schwarz-Weiß ───────────────────────────────── */

@media print {
    :root {
        --zeile: 100%;
    }

    body {
        color: #000;
        background: #fff;
        font-size: 11pt;
        line-height: 1.45;
    }

    /* Navigation, Buttons und Interaktives gehören nicht aufs Papier. */
    header, footer, nav, .site-nav,
    .btn, .cta-row, .burger, .nav-burger,
    .lightbox, .lb-close, .lb-prev, .lb-next {
        display: none !important;
    }

    /* Links laufen ins Leere, wenn die Adresse fehlt. */
    a[href^="http"]::after {
        content: " (" attr(href) ")";
        font-size: 0.85em;
        word-break: break-all;
    }
    a[href^="#"]::after,
    a[href^="mailto"]::after {
        content: "";
    }

    /* Keine Überschrift allein am Seitenfuß, keine Einzelzeilen. */
    h1, h2, h3, h4 { break-after: avoid; }
    p, li, figure, table, blockquote { break-inside: avoid; }
    p, li { orphans: 3; widows: 3; }

    img {
        max-width: 100% !important;
    }
}


/* ─── 9. Bewegung ──────────────────────────────────────────── */

@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
}
