/*
Theme Name: fasnacht2027
Theme URI: https://fasnacht.ch
Author: Ivo Birrer, fasnacht.ch
Author URI: https://fasnacht.ch
Description: Neues Theme für fasnacht.ch, löst branfordmagazine ab.
Version: 0.34.3
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: fasnacht2027
Domain Path: /languages
Requires at least: 6.4
Requires PHP: 8.0
Update URI: https://github.com/plusmail-ch/fasnacht2027
*/

/* ==========================================================================
   Schriften (selbst gehostet, kein Google-Fonts-Request)
   ========================================================================== */

@font-face {
	font-family: 'Inter';
	font-style: normal;
	font-weight: 400 700;
	font-display: swap;
	src: url('assets/fonts/inter-normal-latin.woff2') format('woff2');
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
	font-family: 'Inter';
	font-style: normal;
	font-weight: 400 700;
	font-display: swap;
	src: url('assets/fonts/inter-normal-latin-ext.woff2') format('woff2');
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
	font-family: 'Inter';
	font-style: italic;
	font-weight: 400 700;
	font-display: swap;
	src: url('assets/fonts/inter-italic-latin.woff2') format('woff2');
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
	font-family: 'Inter';
	font-style: italic;
	font-weight: 400 700;
	font-display: swap;
	src: url('assets/fonts/inter-italic-latin-ext.woff2') format('woff2');
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
	font-family: 'Courier Prime';
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url('assets/fonts/courier-prime-400-latin.woff2') format('woff2');
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
	font-family: 'Courier Prime';
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url('assets/fonts/courier-prime-400-latin-ext.woff2') format('woff2');
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
	font-family: 'Courier Prime';
	font-style: normal;
	font-weight: 700;
	font-display: swap;
	src: url('assets/fonts/courier-prime-700-latin.woff2') format('woff2');
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
	font-family: 'Courier Prime';
	font-style: normal;
	font-weight: 700;
	font-display: swap;
	src: url('assets/fonts/courier-prime-700-latin-ext.woff2') format('woff2');
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* ==========================================================================
   Variablen (Grundlage fuer den spaeter nachgeruesteten Dark Mode:
   ausschliesslich ueber diese Custom Properties gehen, keine verstreuten
   Hex-Werte im restlichen Stylesheet)
   ========================================================================== */

:root {
	--fasnacht-color-text: #1a1a1a;
	--fasnacht-color-black: #000000;
	--fasnacht-color-accent: #006699;
	--fasnacht-color-accent-hover: #005580;
	--fasnacht-color-accent-active: #004466;
	--fasnacht-color-text-muted: #666666;
	--fasnacht-color-meta: #707070;
	--fasnacht-color-bg: #f6f5f2;
	--fasnacht-color-surface: #ffffff;
	--fasnacht-color-border: #e0ded8;
	--fasnacht-color-subnav-bg: #ececec;
	--fasnacht-font-body: 'Inter', system-ui, sans-serif;
	--fasnacht-font-tagline: 'Courier Prime', monospace;
	--fasnacht-radius: 4px;
	/* Eigene, grosszuegigere Rundung nur fuer Buttons (Pillenform wie beim
	   Morgenstraich-Rechner-Button) -- bewusst von --fasnacht-radius
	   getrennt, das weiterhin fuer alles andere (Such-Panel, Eingabefelder,
	   Tooltip) gilt. Bild-/Karten-Rahmen bleiben wie entschieden ohne
	   jeden Radius (siehe CI-Manual Abschnitt 7). */
	--fasnacht-radius-button: 999px;
	--fasnacht-container-width: 1100px;
	--fasnacht-gutter: 40px;
	--fasnacht-header-navs-max-height: 100px;
	/* Partner-Werbung im rechten Seitenrand (Plugin fasnacht-ch-bloecke,
	   Bereich "fasn8-partner-seitenrand"): Breite der Fläche, Abstand
	   zum Content-Rahmen, Restabstand zum Fensterrand, Mindest-Abstand
	   links. Zusammen bestimmen sie, ab welcher Fensterbreite die
	   Werbung im Rand Platz hat (siehe --fasnacht-frame-left unten und
	   den 1464px-Breakpoint bei .fasn8-partner-seitenrand). */
	--fasnacht-partner-width: 300px;
	--fasnacht-partner-gap: 24px;
	--fasnacht-partner-edge: 8px;
	--fasnacht-frame-min-left: 16px;
	/* Linker Rand des gesamten Seiten-Rahmens (Header-Inhalt, Navi,
	   Main, Footer, Werbe-Block). Standard: zentriert, wie zuvor per
	   "margin: 0 auto". Prozent beziehen sich beim Verwenden auf die
	   Breite des jeweiligen Elternelements (= Seitenbreite), max(0px,
	   ...) verhindert einen negativen Rand bei schmalen Fenstern (das
	   hatte "auto" bisher von selbst abgefangen). Ab 1464px wird dieser
	   Wert unten ueberschrieben, damit der Rahmen nach links rueckt und
	   rechts Platz fuer die Werbung bleibt. */
	--fasnacht-frame-left: max(0px, calc((100% - var(--fasnacht-container-width)) / 2));
}

/* Ab 1464px Fensterbreite hat die Partner-Werbung rechts neben dem
   Rahmen Platz: 16px links + 1100px Rahmen + 24px Abstand + 300px
   Werbung + 8px Rand = 1448px Seitenbreite, plus ca. 15px klassische
   Scrollbar (Media Queries zaehlen sie mit, die Seitenbreite nicht)
   = 1464px. Der Rahmen rueckt dann nur so weit nach links wie noetig
   (Untergrenze 16px) und bleibt oberhalb von ca. 1750px, wo links und
   rechts ohnehin genug Platz ist, wieder zentriert (Obergrenze =
   zentrierter Wert). Header, Navi, Main und Footer nutzen alle
   dieselbe Variable und ruecken dadurch gemeinsam mit. */
@media (min-width: 1464px) {
	:root {
		--fasnacht-frame-left: clamp(
			var(--fasnacht-frame-min-left),
			calc(100% - var(--fasnacht-container-width) - var(--fasnacht-partner-gap) - var(--fasnacht-partner-width) - var(--fasnacht-partner-edge)),
			calc((100% - var(--fasnacht-container-width)) / 2)
		);
	}
}

/* ==========================================================================
   Basis
   ========================================================================== */

*,
*::before,
*::after {
	box-sizing: border-box;
}

/* Keine automatische Silbentrennung (Ivo, 2026-10-31): Das Basis-Plugin
   liefert seit dem ersten Commit global "body, p, div { hyphens: auto; }"
   (assets/css/fasnacht_ch_styles.css, Altlast aus der Zeit des alten
   Themes). Der Browser trennte damit mit seinem eingebauten Woerterbuch
   falsch ("Archi-vquellen") und mitten in Webadressen ("fasnacht.di-gital").
   "html" davor erhoeht die Spezifitaet (0,0,2/0,0,3 gegen 0,0,1), die
   Regel gewinnt damit unabhaengig von der Ladereihenfolge der Stylesheets.
   Wer an einer Stelle trennen will, setzt dort gezielt "hyphens: auto". */
html body,
html body p,
html body div {
	-webkit-hyphens: manual;
	hyphens: manual;
}

html {
	-webkit-text-size-adjust: 100%;
	/* Der Header aendert waehrend der Navi-Ein-/Ausblend-Animation seine
	   eigene Hoehe. Browser mit "Scroll Anchoring" (Chrome u.a. default an)
	   waehlen dabei ein Element im sichtbaren Bereich unterhalb des Headers
	   als Anker und passen window.scrollY an, um dessen Position auszu-
	   gleichen -- das wiederum loest ein neues scroll-Event aus, das
	   sticky-nav.js als Richtungswechsel liest und die Navi-Klasse erneut
	   umschaltet: sichtbares Flackern in beide Richtungen. overflow-anchor
	   nur auf .site-header haette lediglich den Header selbst als
	   moeglichen Anker ausgeschlossen, nicht aber den eigentlich gewaehlten
	   Anker darunter -- daher hier global deaktiviert. */
	overflow-anchor: none;
	/* Verdacht (2026-10-17, noch nicht bestaetigt): seit dem Partner-
	   Seitenrand-Bereich (.fasn8-partner-seitenrand, position:fixed am
	   rechten Rand) meldete Ivo erneutes Navi-"Pumpen" in Chrome, nicht
	   in Safari. Sprengt dessen Inhalt (z.B. ein zu breites Testbild)
	   die eigene max-width, kann ein fixiertes Element am Viewport-Rand
	   die Seite horizontal ueberlaufen lassen -- Chrome und Safari
	   behandeln das unterschiedlich, was zum Chrome-only-Muster passen
	   wuerde. overflow-x:hidden als Sicherheitsnetz, verhindert jeden
	   horizontalen Seiten-Scrollbalken unabhaengig von der Ursache. */
	overflow-x: hidden;
	/* Zweiter Verdacht (2026-10-17, noch nicht bestaetigt): das Pumpen
	   kam zurueck, seit body per min-height:100vh (Sticky-Footer-Fix)
	   kurze Seiten exakt auf Viewport-Hoehe wachsen laesst. Aendert sich
	   waehrend der Navi-Ein-/Ausblend-Animation (.site-header__navs,
	   max-height-Uebergang) dadurch, ob die Seite insgesamt scrollbar
	   ist, kann Chromes vertikale Scrollbar ein-/ausblenden -- das
	   aendert die effektive Breite, loest Reflow aus, was die Hoehe
	   erneut knapp ueber/unter die Viewport-Grenze verschieben kann
	   (Rueckkopplungsschleife). Safari nutzt standardmaessig Overlay-
	   Scrollbars (beeinflussen die Breite nicht), Chrome nicht -- passt
	   zum Chrome-only-Muster. scrollbar-gutter reserviert den Platz der
	   vertikalen Scrollbar dauerhaft, unabhaengig davon ob sie gerade
	   gebraucht wird, verhindert das Ein-/Ausblenden und damit den
	   Ausloeser der Schleife komplett. */
	scrollbar-gutter: stable;
}

/* 1rem = 16px, da html keine eigene font-size setzt (Browser-Default,
   respektiert aber die Schriftgrössen-Praeferenz der Nutzer:in). Alle
   font-size-Werte im Theme sind bewusst in rem statt px (2026-10-17
   site-weit umgestellt) -- rem skaliert mit, wenn jemand in den
   Browser-Einstellungen die Standard-Schriftgroesse erhoeht (reine
   Textvergroesserung, ohne das ganze Layout zu zoomen), px ignoriert
   das. Browser-Zoom (Cmd/Ctrl +/-) funktioniert mit beiden Einheiten
   gleich gut, der Unterschied betrifft nur diesen spezifischeren Fall
   -- WCAG 2.1, Kriterium 1.4.4 "Resize Text".
   Abstaende/Breiten/Radien bleiben grundsaetzlich in px (Seiten-
   Layout/-Rhythmus, unabhaengig von einzelnen Textgroessen) -- MIT
   einer gezielten Ausnahme: padding, das direkt eine einzelne
   Text-Komponente umschliesst (Buttons, Eingabefelder, Navi-Links,
   Tooltip, Tabellenzellen), ist zusaetzlich in em statt px gesetzt,
   jeweils relativ zur font-size genau dieser Regel -- waechst die
   Schrift (z.B. ueber die Browser-Standard-Schriftgroesse), waechst
   dieser Innenabstand proportional mit, statt dass der Text gegen den
   Rand gedraengt wirkt. em (anders als rem) bewusst nur fuer genau
   diesen Fall verwendet, nie fuer font-size selbst (compoundiert sich
   sonst unvorhersehbar bei Verschachtelung). Grossflaechigere, nicht
   text-umschliessende Innenabstaende (Seitenraender, Karten/Panels,
   Widget-Flaechen) bleiben bewusst px. */
body {
	margin: 0;
	background: var(--fasnacht-color-bg);
	color: var(--fasnacht-color-text);
	font-family: var(--fasnacht-font-body);
	font-size: 1rem;
	line-height: 1.5;
}

/* "Sticky Footer"-Muster, Anlauf 2 (0.20.3): verhindert, dass kurze
   Seiten/Beitraege (z.B. eine knappe Service-Seite) den Footer mit
   einer grossen, unbeabsichtigt wirkenden Luecke "schweben" lassen.
   Gilt fuer jedes Template gleichermassen (id="main-content" bei
   Single/Seite/Startseite, class="fasn8-container" bei Archiv/Index/
   Redaktoren-Archiv) -- bewusst der Element-Selektor, nicht eine der
   beiden Klassen/IDs, damit kuenftige Templates das automatisch
   erben.
   Anlauf 1 (0.20.0, body als Flex-Spalte + flex-grow auf <main>)
   verursachte zwei Regressionen: (a) #main-content/.fasn8-container
   schrumpften als Flex-Kind auf die Breite ihres Inhalts
   (margin:auto + kein eigenes width loest "Shrink-to-fit" statt
   "Stretch" aus), (b) staerkerer Verdacht: flex-grow berechnete sich
   LIVE anhand der aktuellen Header-Hoehe -- waehrend der
   0.25s-Transition von .site-header__navs (Ein-/Ausblenden der
   Navi-Balken) musste <main> dadurch kontinuierlich mitwachsen/
   -schrumpfen, was in Chrome das zuvor schon einmal beobachtete
   Navi-"Pumpen" reaktivierte (vermutlich darueber ausgeloeste
   Scroll-Events waehrend der laufenden Animation).
   Anlauf 2 (0.20.3) koppelte <main> nicht mehr live an die Header-
   Hoehe, sondern gab ihm eine feste, HANDGESCHAETZTE Mindesthoehe
   (100vh minus 320px) -- einmalig in CSS, nicht bei jedem
   Animationsframe neu berechnet. Die Schaetzung war zu grosszuegig
   (main zu kurz), sichtbar als graue Luecke unterhalb der Fusszeile
   in Safari (Ivo-Screenshot, privates Fenster, 2026-10-17) -- eine
   von Hand gepflegte Pixel-Konstante kann aber grundsaetzlich nie
   zuverlaessig zur tatsaechlichen Header-/Footer-Hoehe passen, schon
   gar nicht dauerhaft ueber kuenftige Design-Anpassungen hinweg.
   Anlauf 3 (0.20.5): min-height kommt jetzt per JavaScript
   (assets/js/main-min-height.js) aus ECHT GEMESSENEN Pixel-Werten
   (Header-Markenzeile + reservierte Navi-Hoehe + Fusszeile), gesetzt
   als Inline-Style auf <main>. Bewusst nur bei Laden/Resize gemessen,
   nie bei Scroll/Navi-Umschalten -- exakt diese Kopplung an den
   animierten/wechselnden Zustand war in beiden vorigen Anlaeufen die
   Ursache der Probleme (Chrome-Pumpen bzw. haengende Navi in Safari,
   siehe Kommentar bei .site-footer unten). 100vh als CSS-Fallback,
   falls JavaScript deaktiviert ist -- grosszuegig, aber immerhin ohne
   Lücke oberhalb des Footers (auf Kosten von etwas Leerraum darunter,
   in diesem Ausnahmefall unvermeidbar ohne echte Messung). */
main {
	min-height: 100vh;
	box-sizing: border-box;
}

/* Editor-Vorschau (add_editor_style() in functions.php laedt dieses
   Stylesheet komplett): die graue Seiten-Randfarbe oben ist fuer die
   Seitenraender gedacht, sickert ohne eine Gegenregel aber auch in die
   Schreibbereiche durch (grau statt weiss) -- Klassenselektoren gewinnen
   automatisch gegen die obige body-Regel, kein !important noetig.
   Bewusst in zwei getrennte Regeln aufgeteilt (bis 0.18.3 eine
   gemeinsame Regel mit max-width:680px fuer beide):
   .editor-styles-wrapper (Block-Editor) bleibt auf 680px begrenzt,
   damit Bloecke unter Design -> Widgets in ihrer echten, schmalen
   Breite erscheinen (TinyMCE wird dort nicht verwendet). .mce-content-
   body (Classic Editor, fuer normale Beitraege im Einsatz) bekommt
   dieselbe max-width NICHT mehr -- schraenkte dort nur versehentlich
   die Schreibbreite ein, ohne den eigentlichen Zweck (Widgets-Vorschau)
   je zu erfuellen. Innenabstand dort bewusst auf --fasnacht-gutter
   (40px statt vorher 24px) erhoeht: bei voller Breite (statt 680px)
   wirkte derselbe Abstand proportional kaum noch sichtbar.
   !important auf padding noetig (Ausnahme nach AGENTS.md-Vorgabe,
   sachlich begruendet, per Chrome-DevTools-Computed-Panel verifiziert
   statt nur vermutet): WordPress' eigenes Editor-Stylesheet enthaelt
   `body.wp-autoresize { padding-top/-bottom: 1px !important;
   padding-left/-right: 0 !important; ... }` (TinyMCEs Autoresize-
   Plugin, nicht unser Code). Kein Inline-Style wie urspruenglich
   vermutet, sondern eine echte Regel mit HOEHERER Spezifitaet
   (Element+Klasse) als eine blosse `.mce-content-body`-Regel
   (nur Klasse) -- bei beidseitigem !important gewinnt die hoehere
   Spezifitaet unabhaengig von der Ladereihenfolge. Fix: zweiter,
   spezifischerer Selektor ergaenzt (Element + beide tatsaechlich
   vorhandenen Body-Klassen), damit unsere Regel die WordPress-Regel
   sicher schlaegt. Einfache .mce-content-body-Variante bleibt zusaetzlich
   bestehen fuer den (unwahrscheinlichen) Fall, dass wp-autoresize einmal
   fehlt -- dann greift ohnehin keine konkurrierende Regel. */
.mce-content-body,
body.mce-content-body.wp-autoresize {
	background: var(--fasnacht-color-surface);
	padding: var(--fasnacht-gutter) !important;
	box-sizing: border-box;
}
.editor-styles-wrapper {
	background: var(--fasnacht-color-surface);
	max-width: 680px;
	margin: 0 auto;
	padding: 24px;
}

a {
	color: var(--fasnacht-color-accent);
}

img {
	max-width: 100%;
	height: auto;
}

/* padding:0 explizit noetig: eine andernorts im Projekt geladene, globale
   Fremd-Regel "img { padding: 1px; }" (alter Browser-Rahmen-Reset, nicht
   Teil dieses Themes) hat dieselbe Spezifitaet wie ein blosser img-
   Selektor und wuerde je nach Ladereihenfolge gewinnen -- verursachte
   einen Luftspalt zwischen Bild und Rahmen, unabhaengig vom
   Seitenverhaeltnis des Bilds. Darum hier mit einer garantiert
   spezifischeren Klassen-Regel ueberschrieben statt mit einem blossen
   img-Selektor. */
.fasn8-container img,
.fasn8-media img,
.fasn8-strom-widget-slot img,
.fasn8-strom-einstieg img,
.fasn8-strom-ausklang img,
.fasn8-strom-widget-full img {
	padding: 0;
}

:focus-visible {
	outline: 3px solid var(--fasnacht-color-accent);
	outline-offset: 2px;
}

/* Im Editor (Block-Editor/.editor-styles-wrapper und Classic Editor/
   .mce-content-body, beide laden style.css per add_editor_style() mit)
   wieder auf den Browser-Standard zurueck -- die generische Regel oben
   ist fuers Frontend gedacht. Im Editor kann sie an einem leeren/
   whitespace-only verlinkten Element (z.B. ein uebrig gebliebenes
   "&nbsp;" direkt nach einem verlinkten Bild) wie eine durchgehende
   blaue Linie quer durchs Editor-Feld wirken, weil die Link-Box dort
   extrem flach und volle Breite wird (Ivo, 2026-10-20). Hoehere
   Spezifitaet (1 Klasse + Pseudoklasse) gewinnt zuverlaessig gegen die
   Regel oben, kein !important noetig. */
:is(.editor-styles-wrapper, .mce-content-body) :focus-visible {
	outline: revert;
	outline-offset: revert;
}

.fasn8-container {
	max-width: var(--fasnacht-container-width);
	margin-left: var(--fasnacht-frame-left);
	margin-right: auto;
	padding: var(--fasnacht-gutter);
	box-sizing: border-box;
}

/* ==========================================================================
   Header
   ========================================================================== */

.site-header {
	position: sticky;
	top: 0;
	z-index: 100;
	background: var(--fasnacht-color-surface);
	/* Inset statt normalem box-shadow: Haupt- und Sub-Navi sitzen ohne
	   Abstand direkt ueber dem Content, ein nach aussen bleender Schatten
	   wuerde vom opaken Hintergrund darunter komplett verdeckt. Inset
	   zeichnet den weichen Verlauf stattdessen innerhalb des Headers
	   selbst, am unteren Rand -- sichtbar unabhaengig davon, was folgt
	   bzw. davon, ob die Navi-Balken gerade ein- oder ausgeblendet sind
	   (Header ist IN BEIDEN Faellen dieselbe einzelne sticky-Box, nur
	   deren Gesamthoehe aendert sich). */
	box-shadow: inset 0 -8px 8px -8px rgba(0, 0, 0, 0.18);
}

/* Die WordPress-Admin-Leiste ist "position: fixed; top: 0;" mit sehr
   hohem z-index und steht ausserhalb unseres Markups -- WordPress
   gleicht sie nur per "margin-top" auf <html> aus, davon weiss unser
   eigener sticky Header nichts. Mit "top: 0" klebt er beim Scrollen
   sonst genau hinter der Admin-Leiste, deren oberste ~32px werden
   dauerhaft verdeckt. Fix: Sticky-Offset um die (von WordPress selbst
   vergebene) Admin-Leisten-Hoehe ergaenzen, inkl. deren eigenem
   Breakpoint (gleiche Werte/Grenze wie WordPress' admin-bar.css,
   nicht mit dem Mobile-Breakpoint dieses Themes zu verwechseln).
   Betrifft nur angemeldete Redaktor:innen -- Besuchende sehen keine
   Admin-Leiste. */
body.admin-bar .site-header {
	top: 32px;
}
@media screen and (max-width: 782px) {
	body.admin-bar .site-header {
		top: 46px;
	}
}

/* Beide Navi-Balken als gemeinsame, kollabierbare Einheit -- beim
   Scrollen nach unten blendet assets/js/sticky-nav.js per Body-Klasse
   die Hoehe auf 0, Logo/Tagline-Zeile (.site-header__brand) bleibt
   immer sichtbar. max-height statt z.B. display:none, damit der
   Uebergang animiert werden kann; 100px liegt deutlich ueber der
   tatsaechlichen Hoehe beider Balken zusammen.
   overflow:hidden ist dabei NUR waehrend des Ein-/Ausblendens noetig,
   um den auf 0 schrumpfenden Inhalt sichtbar abzuschneiden -- im
   eingeblendeten Ruhezustand schneidet es sonst permanent auch die
   Hover-Dropdown-Untermenues ab (.site-nav ul ul, oeffnet sich NACH
   UNTEN ueber die Balken-Hoehe hinaus), die dann wie "hinter" der
   Unter-Navi/dem Content verschwunden wirken, obwohl technisch nicht
   die Stapelreihenfolge (z-index) das Problem ist, sondern das harte
   Abschneiden durch overflow. Fix: overflow wechselt verzoegert
   (diskrete Eigenschaft, CSS-Spec-Standardverhalten, kein Spezialfall)
   erst NACH Abschluss der max-height-Animation auf "visible", beim
   Ausblenden dagegen sofort zurueck auf "hidden" -- Dropdowns bleiben
   dadurch ausserhalb der kurzen Animationsphase frei sichtbar. */
.site-header__navs {
	overflow: visible;
	max-height: var(--fasnacht-header-navs-max-height);
	transition: max-height 0.25s ease, overflow 0s linear 0.25s;
}
body.fasn8-nav-hidden .site-header__navs {
	overflow: hidden;
	max-height: 0;
	transition: max-height 0.25s ease, overflow 0s linear 0s;
}
@media (prefers-reduced-motion: reduce) {
	.site-header__navs {
		transition: none;
	}
}

.site-header__brand {
	max-width: var(--fasnacht-container-width);
	margin-left: var(--fasnacht-frame-left);
	margin-right: auto;
	padding: 8px var(--fasnacht-gutter) 20px;
	box-sizing: border-box;
	display: flex;
	justify-content: space-between;
	align-items: flex-end;
	flex-wrap: wrap;
	gap: 16px;
}

.site-logo {
	display: block;
	width: 300px;
	max-width: 70vw;
	color: var(--fasnacht-color-black);
}

.site-logo svg {
	display: block;
	width: 100%;
	height: auto;
}

.site-tagline {
	font-family: var(--fasnacht-font-tagline);
	font-size: 0.875rem;
	line-height: 1.5;
	color: var(--fasnacht-color-text);
	margin: 0 0 4px;
	text-align: right;
}

/* Navi-Balken auf Content-Breite begrenzt (wie die weisse Lesespalte),
   statt ueber die volle Viewport-Breite zu laufen -- der Hintergrund
   (schwarz/grau) der Balken selbst ist dadurch schmaler, nicht nur
   deren Inhalt. */
.site-nav {
	max-width: var(--fasnacht-container-width);
	margin-left: var(--fasnacht-frame-left);
	margin-right: auto;
	box-sizing: border-box;
}
.site-nav > ul {
	margin: 0;
	padding: 0 var(--fasnacht-gutter);
	box-sizing: border-box;
	display: flex;
	flex-wrap: wrap;
	gap: 24px;
	list-style: none;
}

.site-nav li {
	position: relative;
}

.site-nav a {
	display: inline-block;
	text-decoration: none;
}

.site-nav a:hover {
	text-decoration: underline;
}

.site-nav--primary {
	background: var(--fasnacht-color-black);
	/* Platz fuer die Suche am rechten Rand (.fasn8-nav-search, als
	   zweites Flex-Kind nach dem Menue): das Menue behaelt seinen
	   eigenen linken Gutter-Abstand (ueber .site-nav > ul), der rechte
	   Gutter-Abstand kommt stattdessen von .fasn8-nav-search selbst --
	   sonst gaebe es zwischen letztem Menuepunkt und Suche-Icon einen
	   unnoetigen Doppel-Abstand on top von justify-content: space-between. */
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 12px;
}
.site-nav--primary > ul {
	padding-right: 0;
}

.site-nav--primary > ul > li > a {
	color: #ffffff;
	font-size: 0.875rem;
	line-height: 1.35;
	padding: 0.7857em 0;
}

.site-nav--primary > ul > li > a:focus-visible {
	outline-color: #ffffff;
}

/* Aktiver Menuepunkt: WordPress setzt current-menu-item/-parent/-ancestor
   automatisch anhand der aktuellen URL -- bei einem Punkt mit Submenue
   bekommen so Haupt- UND Unterpunkt gleichzeitig ihre Markierung. */
.site-nav--primary > ul > li.current-menu-item > a,
.site-nav--primary > ul > li.current-menu-parent > a,
.site-nav--primary > ul > li.current-menu-ancestor > a {
	font-weight: 700;
	box-shadow: inset 0 -3px 0 0 #ffffff;
}

/* Fasnacht-Live/Notfall-Badges: saisonale Hervorhebung einzelner
   Menüpunkte waehrend der Fasnacht (Ivo setzt die Klassen manuell im
   Menü-Editor, Feld "CSS-Klassen (optional)"). Betrifft sowohl die
   Hauptnavi direkt (z.B. "Fasnacht Live!") als auch Dropdown-Punkte
   (z.B. "Notreparaturdienste" unter "Service") -- Selektoren darum
   mit .site-nav--primary vorangestellt, um in beiden Kontexten genug
   Spezifitaet gegenueber den jeweiligen Grundstilen zu haben, ohne
   !important (das machte die alte, inzwischen abgeloeste Basis-
   Plugin-Version schwer ueberschreibbar).
   Kleines, abgerundetes Badge statt vollflaechiger Farbe ueber den
   ganzen Menuepunkt -- passte nicht zum sonst reduzierten Navi-Stil.
   Im "aktiv"-Zustand (Hover/aktuelle Seite) wird das Rot dunkler
   statt heller: die bisherige Variante hellte dort auf #ff9090 auf,
   was gegen weisse Schrift nur 2.18:1 Kontrast ergab (WCAG-Minimum
   fuer Normaltext: 4.5:1). Werte hier eigens gegen Weiss
   nachgerechnet: #d32f2f = 4.98:1, #991b1b = 8.31:1. */
.site-nav--primary .fasn8-menu-live,
.site-nav--primary .fasn8-menu-notfall {
	display: flex;
	align-items: center;
}
.site-nav--primary .fasn8-menu-live > a,
.site-nav--primary .fasn8-menu-notfall > a {
	background: #d32f2f;
	color: #ffffff;
	font-weight: 700;
	padding: 0.2857em 0.8571em;
	border-radius: 999px;
	text-decoration: none;
}
.site-nav--primary .fasn8-menu-live:hover > a,
.site-nav--primary .fasn8-menu-live.current-menu-item > a,
.site-nav--primary .fasn8-menu-live.current-menu-parent > a,
.site-nav--primary .fasn8-menu-notfall:hover > a,
.site-nav--primary .fasn8-menu-notfall.current-menu-item > a {
	background: #991b1b;
	/* Farbe hier nochmals explizit setzen (nicht nur in der
	   Basis-Badge-Regel oben): fuer aktuelle Dropdown-Punkte existiert
	   bereits eine Blau-Regel (.site-nav ul ul li.current-menu-item > a),
	   deren Spezifitaet hoeher ist als die der Basis-Badge-Regel allein
	   -- ohne diese Wiederholung hier gewinnt sie und der Text wird
	   blau statt weiss. */
	color: #ffffff;
	box-shadow: none;
	text-decoration: none;
}

.site-nav--secondary {
	background: var(--fasnacht-color-subnav-bg);
}

.site-nav--secondary a {
	color: var(--fasnacht-color-text);
	font-size: 0.8125rem;
	padding: 0.7692em 0;
}

.site-nav--secondary li.current-menu-item > a,
.site-nav--secondary li.current-menu-parent > a,
.site-nav--secondary li.current-menu-ancestor > a {
	color: var(--fasnacht-color-accent);
	font-weight: 700;
}

/* Suche: Icon am rechten Rand der Hauptnavi, oeffnet ein schwebendes
   Suchfeld (assets/js/nav-search.js nur fuer Komfort -- Fokus/Escape/
   Klick-aussen, die Grundfunktion auf/zu ist natives <details>/
   <summary>). Der Browser blendet den Inhalt dadurch von sich aus zu,
   solange kein "open"-Attribut gesetzt ist -- kein Aufblitzen beim
   Laden, kein JS fuer die Grundfunktion noetig (anders als der erste
   Versuch mit einer JS-gesetzten Klasse). Das Formular selbst ist
   "position: absolute" und schwebt ueber dem Content, statt als
   normales Flex-Kind der Navi-Zeile mitzuwirken -- sonst bricht die
   Zeile bei wenig Platz auf zwei Zeilen um (genau das war der zweite
   gemeldete Bug). Gleiches Prinzip wie die Hover-Dropdown-Untermenues
   weiter unten (.site-nav ul ul). */
.fasn8-nav-search {
	position: relative;
	flex-shrink: 0;
	padding-right: var(--fasnacht-gutter);
}
.fasn8-nav-search-toggle {
	list-style: none;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	border-radius: 50%;
	color: #ffffff;
	cursor: pointer;
}
.fasn8-nav-search-toggle::-webkit-details-marker {
	display: none;
}
.fasn8-nav-search-toggle:hover {
	background: rgba(255, 255, 255, 0.15);
}
.fasn8-nav-search-toggle:focus-visible {
	outline: 3px solid #ffffff;
	outline-offset: 2px;
}
.fasn8-nav-search-form {
	position: absolute;
	top: 100%;
	right: 0;
	margin-top: 8px;
	display: flex;
	/* Neutrales Chrome-Grau statt Weiss -- liegt tonal zwischen dem
	   Schwarz der Hauptnavi und dem helleren Grau der Sub-Navi, bindet
	   das schwebende Panel damit optisch an die Navi an. Reines Weiss
	   liess den Weissraum zwischen blauem Fokus-Rahmen (Input) und
	   Panel-Rand wie einen unbeabsichtigten Doppelrahmen wirken. */
	background: var(--fasnacht-color-meta);
	border-radius: var(--fasnacht-radius);
	box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15);
	padding: 8px;
	z-index: 10;
}
.fasn8-nav-search-form input[type="search"] {
	width: 220px;
	max-width: 60vw;
	box-sizing: border-box;
	border: 1px solid var(--fasnacht-color-border);
	border-radius: var(--fasnacht-radius);
	padding: 0.5em 0.8571em;
	font-family: inherit;
	font-size: 0.875rem;
	color: var(--fasnacht-color-text);
}
.fasn8-nav-search-form input[type="search"]:focus-visible {
	/* Abweichend vom generischen, blauen Fokus-Rahmen (Akzentfarbe, sonst
	   ueberall im Theme): auf dem neuen Grau-Panel wirkte Blau als Fremd-
	   koerper. Dunkles Nahe-Schwarz passt zum Schwarz-Grau-Weiss-Look
	   dieses Panels, bleibt aber klar sichtbar (hoher Kontrast zu Weiss). */
	outline: 2px solid var(--fasnacht-color-text);
	outline-offset: 1px;
}

/* Dropdown-Untermenues (z.B. "Service") -- WordPress gibt fuer Menuepunkte
   mit Kindern automatisch ein verschachteltes <ul class="sub-menu"> aus,
   hier nur die Darstellung dazu. Oeffnet per Hover und -- fuer Tastatur-
   Bedienung -- per :focus-within, sobald ein Kind-Link den Fokus erhaelt. */
.site-nav ul ul {
	display: none;
	position: absolute;
	top: 100%;
	left: 0;
	flex-direction: column;
	flex-wrap: nowrap;
	gap: 0;
	min-width: 280px;
	margin: 0;
	padding: 8px 0;
	list-style: none;
	background: #ececec;
	box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15);
	z-index: 20;
}

.site-nav li:hover > ul,
.site-nav li:focus-within > ul {
	display: flex;
}

.site-nav ul ul a {
	display: block;
	width: 100%;
	box-sizing: border-box;
	color: var(--fasnacht-color-text);
	font-size: 0.8125rem;
	padding: 0.6923em 1.5385em;
}

.site-nav ul ul a:hover {
	background: #dddddd;
	text-decoration: none;
}

.site-nav ul ul li.current-menu-item > a {
	color: var(--fasnacht-color-accent);
	font-weight: 700;
}

/* ==========================================================================
   Mobile Navigation (Hamburger, bis 1100px Fensterbreite)
   ==========================================================================
   Ab 1089px begann die Desktop-Navi umzubrechen (Hoehe wuchs, Suchfeld
   rutschte aus dem Bild) -- 1100px deckt sich mit dem Content-Rahmen.
   Das Panel faehrt vom rechten Rand ein (Ivo, 2026-10-21): Suche
   zuoberst, dann Hauptmenue, dann Rubriken. Alle Panel-Regeln haengen an
   der Klasse "js" auf <html> (header.php): ohne JavaScript bliebe das
   Panel sonst unerreichbar, so bleibt die Desktop-Navi als Fallback.
   Die Navi-Balken werden hier nie ein-/ausgeblendet (sticky-nav.js ist
   bis 1100px inaktiv), die Markenzeile bleibt stehen. */

/* Elemente nur fuer Mobile: auf dem Desktop unsichtbar. */
.site-nav-toggle,
.site-nav-panel-head,
.site-nav-backdrop,
.fasn8-nav-search-mobile,
.site-nav .submenu-toggle {
	display: none;
}

@media (max-width: 1100px) {
	html.js {
		/* Keine reservierte Hoehe fuer Navi-Balken mehr (main-min-height.js). */
		--fasnacht-header-navs-max-height: 0px;
	}
	html.js.fasn8-nav-open {
		overflow: hidden;
	}

	.site-header__brand {
		align-items: center;
		padding-bottom: 12px;
	}

	.js .site-nav-toggle {
		display: inline-flex;
		align-items: center;
		justify-content: center;
		flex-shrink: 0;
		width: 44px;
		height: 44px;
		padding: 0;
		border: 0;
		border-radius: var(--fasnacht-radius);
		background: transparent;
		color: var(--fasnacht-color-black);
		cursor: pointer;
	}
	/* Icon 35px statt der 24px aus dem SVG-Attribut (Ivo, 2026-10-23); die
	   44px grosse Tippflaeche des Knopfs bleibt unveraendert. */
	.js .site-nav-toggle svg {
		width: 35px;
		height: 35px;
	}
	.js .site-nav-toggle:focus-visible,
	.js .site-nav-close:focus-visible,
	.js .submenu-toggle:focus-visible {
		outline: 3px solid var(--fasnacht-color-accent);
		outline-offset: 2px;
	}

	/* Das Panel selbst. Zwei Selektoren pro Zustand, weil die Desktop-Regel
	   body.fasn8-nav-hidden .site-header__navs (max-height:0, overflow) sonst
	   gewaenne, falls die Klasse vor dem Verkleinern des Fensters gesetzt
	   wurde. visibility nimmt das geschlossene Panel aus der Tab-
	   Reihenfolge. Ein-/Ausfahren (und die Ueberblendung unter "Bewegung
	   reduzieren") animiert assets/js/mobile-nav.js per Web Animations
	   API -- bewusst keine CSS-Transition auf dem Klassenwechsel: Safari
	   schaltete damit beim Schliessen sofort weg (Ivo, 2026-10-21). */
	html.js .site-header__navs,
	html.js body.fasn8-nav-hidden .site-header__navs {
		position: fixed;
		top: 0;
		right: 0;
		bottom: 0;
		width: min(88vw, 380px);
		max-height: none;
		overflow-x: hidden;
		overflow-y: auto;
		-webkit-overflow-scrolling: touch;
		background: var(--fasnacht-color-surface);
		box-shadow: -8px 0 24px rgba(0, 0, 0, 0.25);
		transform: translateX(100%);
		visibility: hidden;
		z-index: 300;
	}
	html.js.fasn8-nav-open .site-header__navs,
	html.js.fasn8-nav-open body.fasn8-nav-hidden .site-header__navs {
		transform: translateX(0);
		visibility: visible;
	}
	/* Panel beginnt unterhalb der WordPress-Admin-Leiste (nur angemeldet
	   sichtbar): 32px, ab 782px Breite 46px -- gleiche Grenze wie bei
	   body.admin-bar .site-header weiter oben. */
	html.js body.admin-bar .site-header__navs,
	html.js body.admin-bar.fasn8-nav-hidden .site-header__navs {
		top: 32px;
	}

	.js .site-nav-backdrop {
		display: block;
		position: fixed;
		inset: 0;
		background: rgba(0, 0, 0, 0.45);
		opacity: 0;
		visibility: hidden;
		z-index: 250;
	}
	html.js.fasn8-nav-open .site-nav-backdrop {
		opacity: 1;
		visibility: visible;
	}

	.js .site-nav-panel-head {
		display: flex;
		justify-content: flex-end;
		padding: 8px 8px 0;
	}
	.js .site-nav-close {
		display: inline-flex;
		align-items: center;
		justify-content: center;
		width: 44px;
		height: 44px;
		padding: 0;
		border: 0;
		border-radius: var(--fasnacht-radius);
		background: transparent;
		color: var(--fasnacht-color-black);
		cursor: pointer;
	}

	/* Suche zuoberst. 1rem Schrift: kleinere Eingabefelder zoomt iOS beim
	   Fokussieren automatisch heran. */
	.js .fasn8-nav-search-mobile {
		display: block;
		padding: 4px 20px 16px;
	}
	.js .fasn8-nav-search-mobile input[type="search"] {
		width: 100%;
		box-sizing: border-box;
		border: 1px solid var(--fasnacht-color-border);
		border-radius: var(--fasnacht-radius);
		padding: 0.7em 1em;
		font-family: inherit;
		font-size: 1rem;
		color: var(--fasnacht-color-text);
		background: var(--fasnacht-color-surface);
	}
	/* Die schwebende Desktop-Suche faellt im Panel weg. */
	.js .fasn8-nav-search {
		display: none;
	}

	/* Menues: untereinander statt nebeneinander. */
	.js .site-nav {
		max-width: none;
		margin-left: 0;
		margin-right: 0;
	}
	.js .site-nav--primary {
		display: block;
	}
	.js .site-nav > ul {
		flex-direction: column;
		flex-wrap: nowrap;
		gap: 0;
		padding: 8px 0;
	}
	.js .site-nav--primary > ul {
		padding-right: 0;
	}
	.js .site-nav > ul > li:not(.fasn8-menu-live):not(.fasn8-menu-notfall) > a {
		display: block;
		padding: 0.9em 20px;
		text-align: right;
	}
	.js .site-nav--primary > ul > li:not(.fasn8-menu-live):not(.fasn8-menu-notfall) > a {
		font-size: 1rem;
	}
	.js .site-nav--secondary > ul > li > a {
		font-size: 0.9375rem;
	}
	/* Aktiver Punkt: Balken an beiden Seitenraendern (Ivo, 2026-10-21;
	   Menue ist im Panel rechtsbuendig) statt unten. Nicht bei den Badge-Pillen (Fasnacht
	   Live/Notfall): ein inset-Schatten folgt dort der runden Form und
	   zeichnet einen weissen Halbmond -- die Pille wird im aktiven
	   Zustand ohnehin dunkler. */
	.js .site-nav--primary > ul > li.current-menu-item > a,
	.js .site-nav--primary > ul > li.current-menu-parent > a,
	.js .site-nav--primary > ul > li.current-menu-ancestor > a {
		box-shadow: inset 4px 0 0 0 #ffffff, inset -4px 0 0 0 #ffffff;
	}
	.js .site-nav--primary > ul > li.fasn8-menu-live.current-menu-item > a,
	.js .site-nav--primary > ul > li.fasn8-menu-live.current-menu-parent > a,
	.js .site-nav--primary > ul > li.fasn8-menu-live.current-menu-ancestor > a,
	.js .site-nav--primary > ul > li.fasn8-menu-notfall.current-menu-item > a,
	.js .site-nav--primary > ul > li.fasn8-menu-notfall.current-menu-parent > a,
	.js .site-nav--primary > ul > li.fasn8-menu-notfall.current-menu-ancestor > a {
		box-shadow: none;
	}
	/* Aufklappbare Punkte: der Balken sitzt am <li> statt am Link, sonst
	   stuende er links NEBEN dem Pfeil-Knopf (der Link beginnt erst
	   dahinter) statt am Panel-Rand (Ivo, 2026-10-22). Hinter dem
	   aufgeklappten Untermenue (eigener Hintergrund) verschwindet er. */
	.js .site-nav--primary > ul > li.menu-item-has-children.current-menu-item > a,
	.js .site-nav--primary > ul > li.menu-item-has-children.current-menu-parent > a,
	.js .site-nav--primary > ul > li.menu-item-has-children.current-menu-ancestor > a {
		box-shadow: none;
	}
	.js .site-nav--primary > ul > li.menu-item-has-children.current-menu-item,
	.js .site-nav--primary > ul > li.menu-item-has-children.current-menu-parent,
	.js .site-nav--primary > ul > li.menu-item-has-children.current-menu-ancestor {
		box-shadow: inset 4px 0 0 0 #ffffff, inset -4px 0 0 0 #ffffff;
	}
	/* Fasnacht-Live/Notfall-Badges behalten ihre Pillenform, nur der
	   Aussenabstand zum Panel-Rand kommt vom <li>; rechtsbuendig wie
	   die uebrigen Punkte. */
	.js .site-nav--primary .fasn8-menu-live,
	.js .site-nav--primary .fasn8-menu-notfall {
		justify-content: flex-end;
		padding: 6px 20px;
	}

	/* Untermenues als Aufklapp-Eintraege (Knopf legt mobile-nav.js an).
	   Text rechtsbuendig, der Pfeil-Knopf steht per order links davon
	   am linken Rand. */
	.js .site-nav li.menu-item-has-children {
		display: flex;
		flex-wrap: wrap;
		align-items: center;
	}
	/* Trigger-Zone: der Knopf fuellt den ganzen Raum zwischen Panel-Rand
	   und Link-Text (nicht nur 44px um den Pfeil), der Link nimmt nur
	   die Breite seines Textes -- ein Tipp irgendwo links vom Text klappt
	   das Untermenue auf (Ivo, 2026-10-22). */
	.js .site-nav li.menu-item-has-children > a {
		flex: 0 1 auto;
		min-width: 0;
	}
	.js .site-nav .submenu-toggle {
		order: -1;
		display: inline-flex;
		align-items: center;
		justify-content: flex-start;
		flex: 1 1 0;
		min-width: 44px;
		align-self: stretch;
		min-height: 44px;
		padding: 0 0 0 16px;
		border: 0;
		background: transparent;
		cursor: pointer;
	}
	.js .site-nav--primary .submenu-toggle {
		color: #ffffff;
	}
	.js .site-nav--secondary .submenu-toggle {
		color: var(--fasnacht-color-text);
	}
	.js .site-nav .submenu-toggle::before {
		content: "";
		width: 8px;
		height: 8px;
		border-right: 2px solid currentColor;
		border-bottom: 2px solid currentColor;
		transform: rotate(45deg) translate(-2px, -2px);
		transition: transform 0.2s ease;
	}
	.js .site-nav li.is-open > .submenu-toggle::before {
		transform: rotate(225deg) translate(-2px, -2px);
	}
	.js .site-nav ul ul {
		position: static;
		display: none;
		flex-basis: 100%;
		min-width: 0;
		padding: 0;
		box-shadow: none;
	}
	/* Hover/Fokus oeffnen auf Touch nichts mehr: nur der Knopf. */
	.js .site-nav li:hover > ul,
	.js .site-nav li:focus-within > ul {
		display: none;
	}
	.js .site-nav li.is-open > ul {
		display: flex;
	}
	.js .site-nav ul ul a {
		padding: 0.85em 36px 0.85em 20px;
		text-align: right;
	}
}

/* Tagline nur solange sie neben dem Logo Platz hat, auf dem Handy
   entfaellt sie. Schwelle 799px (Ivo, 2026-10-22, am echten Layout in
   Chrome geprueft): bei ca. 722px blieb zwischen Logo und Tagline nur
   noch rund 20px Luft, das wirkte zu eng -- ab 800px sind es genug. */
@media (max-width: 799px) {
	.site-tagline {
		display: none;
	}
}

@media (max-width: 782px) {
	html.js body.admin-bar .site-header__navs,
	html.js body.admin-bar.fasn8-nav-hidden .site-header__navs {
		top: 46px;
	}
}

/* ==========================================================================
   Lesespalte: weisse Flaeche im Lesebereich, Seitenrand bleibt grau
   (--fasnacht-color-bg vom body). Gilt fuer #main-content aus home.php,
   single.php, archive.php UND taxonomy-fasn8_redaktor.php (gleiches
   Prinzip, Ivo wollte den Content-Bereich ueberall im gleichen Weiss wie
   auf der Startseite). Archiv-spezifisches Innenleben (Kacheln, Featured-
   Zeile) siehe Abschnitt "Archiv" weiter unten.
   ========================================================================== */

#main-content {
	max-width: var(--fasnacht-container-width);
	margin-left: var(--fasnacht-frame-left);
	margin-right: auto;
	box-sizing: border-box;
	background: var(--fasnacht-color-surface);
	border-left: 1px solid var(--fasnacht-color-border);
	border-right: 1px solid var(--fasnacht-color-border);
	box-shadow: 0 0 32px rgba(0, 0, 0, 0.04);
	/* flow-root faengt den Aussenabstand des ersten/letzten Kindes ab,
	   damit er die weisse Flaeche nicht am oberen/unteren Rand
	   "durchrutschend" verkleinert (gleiches Prinzip wie bei den
	   Widget-Flaechen/Gruppen-Bloecken weiter unten). */
	display: flow-root;
}

/* Lesespalte innerhalb der weissen #main-content-Flaeche (nur Single bisher):
   680px statt der vollen 1100px -- reine 1100px-Breite waere fuer
   Fliesstext zu breit (Ivo verglich mit bazonline.ch/bzbasel.ch, die den
   Text deutlich schmaler darstellen als ihren 1100px-Seitenrahmen). Die
   Widget-Flaechen "Beitrag: Ueber/Unter dem Inhalt" (siehe unten) bleiben
   bewusst ausserhalb davon, auf voller #main-content-Breite -- analog zu
   Strom-Einstieg/-Ausklang auf der Startseite, beantwortet damit auch Ivos
   Frage nach "Werbung ausserhalb des Content-Bereichs": nicht ausserhalb
   der 1100px-Flaeche (das bleibt den beiden sitewide Partner-Bannern in den
   Seitenraendern vorbehalten, siehe REDESIGN-KONZEPT.md), sondern breiter
   als die schmale Lesespalte, aber innerhalb der weissen Flaeche. */
.fasn8-article {
	max-width: 680px;
	margin: 0 auto;
	padding: 0 20px;
	box-sizing: border-box;
}

/* flow-root faengt eigene Floats (z.B. ein Bild mit alignleft/alignright
   im Beitragstext) auf -- ohne eigenen Block-Formatierungskontext ragt
   ein hoher Float sonst ueber das Ende des Inhalts hinaus und ueberlappt
   mit dem direkt folgenden Geschwister-Element (single.php/page.php:
   die Widget-Flaeche "Beitrag: Unter dem Inhalt",
   .fasn8-single-below-content) -- sichtbar als Inhalt, der scheinbar
   "von unten hochgezogen" neben dem Float auftaucht statt sauber
   darunter zu stehen (Ivo, 2026-10-20: QR-Code-Bild mit alignleft vor
   einem Gönner-Formular, direkt danach die Partner-Werbe-Widget-
   Flaeche). Gleiches Prinzip wie bei #main-content/.site-footer__widgets
   oben, hier aber gegen Floats statt durchrutschende Kind-Margins. */
.fasn8-reading-progress-target {
	display: flow-root;
}

/* Modifier fuer Seiten mit der Checkbox "Breite Darstellung" (Plugin
   fasnacht-ch, fasnacht-ch-seiten-breite.php, page.php) -- weitet Titel
   UND Inhalt gemeinsam auf die Content-Rahmen-Breite aus, fuer Seiten
   ohne echten Fliesstext (z.B. eine reine Bildergalerie-Uebersicht).
   Anders als .alignwide/.alignfull unten braucht das keine Breakout-
   Mathematik -- .fasn8-article selbst bekommt einfach ein breiteres
   max-width, kein Kind-Element muss aus einem schmaleren Elternteil
   ausbrechen. Funktioniert darum auch ohne min-width-Wache: schrumpft
   auf schmaleren Bildschirmen ganz normal mit #main-content mit. */
.fasn8-article--breit {
	max-width: var(--fasnacht-container-width);
}

/* "Ausbrechen" aus der 680px-Lesespalte fuer einzelne Bloecke/Shortcode-
   Ausgaben -- Gutenberg-Standardvokabular alignwide/alignfull. theme.json
   (settings.layout.contentSize/wideSize) schaltet dafuer die "Breit"/
   "Volle Breite"-Buttons im Block-Editor frei und sorgt dafuer, dass ein
   so gestellter Block automatisch die Klasse alignwide/alignfull
   bekommt -- die eigentliche Ausbrech-Mechanik hier ist eigenes CSS, das
   bekommt ein klassisches PHP-Vorlagen-Theme (anders als ein Block-
   Theme) nicht automatisch mitgeliefert. Shortcode-Ausgaben (z.B. aus
   fasnacht-ch) koennen ihre eigene Markup-Wurzel ebenso direkt in
   <div class="alignwide">/<div class="alignfull"> einwickeln, ganz ohne
   Block-Editor-Zutun -- gleiches Ergebnis.
   alignwide = bis zur #main-content-Breite (1100px, wie die Strom-
   Einstieg/-Ausklang-Flaechen auf der Startseite), alignfull = echtes
   Rand-zu-Rand (Viewport-Breite, bricht auch aus #main-content selbst
   aus -- fuer Inhalte wie Karten, bei denen Ivo das ausdruecklich
   wollte). Die Breakout-Mathematik stimmt nur, wenn #main-content
   tatsaechlich seine volle 1100px-Breite erreicht hat, darum erst ab
   min-width:1100px -- darunter bewusst (noch) kein Ausbrechen,
   gleiches Sicherheitsnetz-Prinzip wie beim Rest des Themes. Eine
   eigene, bewusste mobile Loesung (vermutlich alignwide/alignfull dort
   einfach auf normale Spaltenbreite zurueckstufen) folgt in der
   separaten Mobile-Anpassungs-Etappe (Ivo, 2026-10-18). */
@media (min-width: 1100px) {
	/* width bewusst NICHT gesetzt (nur negative margin-left/-right) --
	   mit width + beiden margins waere die Gleichung ueberbestimmt
	   (CSS ignoriert dann den rechten margin-Wert und berechnet ihn
	   neu, siehe CSS2.1 10.3.3), was bei Ivos erstem Test (fasnacht-ch-
	   gallery, 2026-10-18) zu einem rechts ueberlaufenden Inhalt
	   fuehrte. Mit width:auto (Default) + beiden Margins explizit
	   gesetzt ist nur EIN Wert "auto" (width selbst), die Gleichung
	   damit eindeutig loesbar, Breite ergibt sich korrekt aus den
	   beiden Margins. Referenzbreite fuer die 680px-Spalte ist hier
	   640px, nicht 680px -- .fasn8-article hat box-sizing:border-box
	   UND 20px Padding je Seite, die tatsaechliche Innenbreite (wo
	   .alignwide als Kind sitzt) ist darum 680-40=640px.
	   :not(.fasn8-article--breit) noetig: diese 640px-Referenzbreite
	   stimmt nur, wenn .fasn8-article selbst in der normalen, schmalen
	   680px-Fassung vorliegt. Ist zusaetzlich "Breite Darstellung"
	   aktiv (.fasn8-article--breit, 1100px Aussenbreite, ~1060px
	   Innenbreite), rechnete .alignwide weiterhin mit der alten
	   640px-Annahme und ueberschoss dadurch deutlich nach rechts bis in
	   die Partner-Seitenrand-Werbung hinein (Ivo, 2026-10-18, Galerie-
	   Seite mit BEIDEM aktiv: alignwide am Shortcode-Wrapper UND die
	   neue Checkbox). Ist die Seite bereits ueber --breit auf
	   Content-Rahmen-Breite gestellt, braucht ein Kind-Element gar kein
	   zusaetzliches Ausbrechen mehr -- alignwide wird dort zum reinen
	   No-Op (volle Breite ergibt sich automatisch aus dem bereits
	   breiten Elternteil). alignfull bleibt unveraendert wirksam, auch
	   kombiniert -- dessen 50%/-50vw-Formel balanciert sich selbst aus,
	   unabhaengig von der tatsaechlichen Elternbreite. */
	.fasn8-article:not(.fasn8-article--breit) .alignwide {
		margin-left: calc((640px - var(--fasnacht-container-width)) / 2);
		margin-right: calc((640px - var(--fasnacht-container-width)) / 2);
	}
	.fasn8-article .alignfull {
		width: 100vw;
		max-width: 100vw;
		margin-left: calc(50% - 50vw);
		margin-right: calc(50% - 50vw);
	}
}

/* Vertikales Padding nur am Rand der weissen Flaeche -- nicht mehr pauschal
   oben UND unten an jedem .fasn8-article-Block, das ergab ohne Widget
   dazwischen einen unnoetigen 80px-Gap (40px Fuss des Titel/By-Line-Blocks
   + 40px Kopf des Inhalt-Blocks). :first-child/:last-child greifen nur,
   wenn dort kein Widget-Aside liegt (das uebernimmt in dem Fall selbst die
   Randspannung). Der direkte Abstand zwischen Titel/By-Line- und
   Inhalt-Block (kein Widget dazwischen) kommt gezielt ueber den
   Adjacent-Sibling-Selektor, gleiches Prinzip wie beim bestehenden
   Strom-Einstieg weiter unten -- liegt ein Widget dazwischen, greift diese
   Regel nicht, dessen eigenes Padding trennt dann stattdessen. */
.fasn8-article:first-child { padding-top: var(--fasnacht-gutter); }
.fasn8-article:last-child { padding-bottom: var(--fasnacht-gutter); }
.fasn8-article + .fasn8-article { margin-top: 24px; }

/* Titel war bisher ungestylt (reine Browser-Vorgabe, je nach Verschachtelung
   ca. 1.5em) -- wirkte in der 680px-Lesespalte unnötig breit/brach schon
   bei kurzen Titeln um. Bewusste, moderatere Grösse statt die Lesespalte
   dafür wieder zu verbreitern (die war gezielt auf die Lesbarkeit von
   Fliesstext ausgelegt, siehe oben) -- Zeilenumbruch bei längeren Titeln
   bleibt normal/gewollt, wie bei Tageszeitungs-Schlagzeilen üblich.
   font-weight: 700 (nicht mehr), da die Variable-Font-Datei nur den Bereich
   400–700 abdeckt. */
.fasn8-article h1 {
	margin: 0 0 16px;
	font-size: 1.75rem;
	line-height: 1.25;
	font-weight: 700;
}

/* ==========================================================================
   Beitragsinhalt-Typografie (the_content()-Ausgabe)
   ========================================================================== */

/* Bewusst auf .fasn8-reading-progress-target statt .fasn8-article
   beschraenkt: Letztere Klasse traegt auch der Titel/By-Line-Block, der
   eigene Regeln hat (h1 oben, .fasn8-byline-* in single.php) und nicht
   die hier folgende Beitragsinhalt-Skala erben soll. Skala/Zeilenhoehe
   per Mockup (https://claude.ai/artifact/6gLovcRsNFb5U51p8EhX2j) von
   Ivo abgenommen (2026-10-17).
   Zusaetzlich .editor-styles-wrapper (Block-Editor) und
   .mce-content-body (Classic Editor, hier im Einsatz) im selben :is()
   (statt alle Selektoren zu verdreifachen): .fasn8-reading-progress-
   target existiert nur im echten Frontend-Markup (von single.php um
   the_content() gelegt), in keinem der beiden Editor-DOMs -- ohne
   diese zwei weiteren Klassen würde die Skala dort nicht greifen und
   der Editor liefe weiterhin auf WordPress-Core-Default
   (add_editor_style() laedt zwar dieselbe style.css auch im Editor,
   aber eben nur fuer Selektoren, die dort tatsaechlich treffen). */

:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) p {
	margin: 0 0 20px;
	font-size: 1rem;
	line-height: 1.7;
}

:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) a {
	color: var(--fasnacht-color-accent);
	text-decoration: none;
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) a:hover,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) a:focus-visible {
	text-decoration: underline;
}

:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) h2 {
	margin: 40px 0 14px;
	font-size: 1.5rem;
	line-height: 1.3;
	font-weight: 700;
}

:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) h3 {
	margin: 32px 0 12px;
	font-size: 1.25rem;
	line-height: 1.35;
	font-weight: 700;
}

:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) h4 {
	margin: 28px 0 10px;
	font-size: 1.125rem;
	line-height: 1.4;
	font-weight: 700;
}

:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) h5 {
	margin: 24px 0 8px;
	font-size: 1rem;
	line-height: 1.4;
	font-weight: 700;
}

:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) h6 {
	margin: 24px 0 8px;
	font-size: 0.8125rem;
	line-height: 1.4;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var(--fasnacht-color-meta);
}

/* Erstes/letztes Element im Inhalt ohne oberen/unteren Rand-Leerraum --
   die Randspannung uebernimmt bereits .fasn8-article (padding-top/-bottom
   am :first-child/:last-child, siehe oben). Bewusst nur fuers Frontend
   (.fasn8-reading-progress-target): im Block-Editor-DOM liegen die
   Bloecke nicht als direkte Kinder von .editor-styles-wrapper, der
   Direktkind-Selektor wuerde dort ohnehin nie greifen. */
.fasn8-reading-progress-target > :first-child {
	margin-top: 0;
}
.fasn8-reading-progress-target > :last-child {
	margin-bottom: 0;
}

:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) ul,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) ol {
	margin: 0 0 20px;
	padding-left: 22px;
	font-size: 1rem;
	line-height: 1.7;
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) li {
	margin-bottom: 8px;
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) li:last-child {
	margin-bottom: 0;
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) ul li::marker,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) ol li::marker {
	color: var(--fasnacht-color-accent);
}

/* Zitat bewusst ohne Rahmen/Linie (wirkt sonst schnell wie eine
   Standard-Karte) -- stattdessen ein grosses Anfuehrungszeichen per
   ::before, funktioniert unabhaengig davon, ob WordPress das Zitat als
   <blockquote><p>...</p><cite>...</cite></blockquote> (Block-Editor) oder
   mit <footer> statt <cite> rendert. Eingerueckt (padding-left), damit es
   sich z.B. in Interview-Artikeln (fette Sprecher-Labels + Fliesstext)
   klar vom umgebenden Text absetzt -- Anfuehrungszeichen/Text/Zuschreibung
   ruecken dadurch gemeinsam ein.
   width:fit-content statt der vollen Spaltenbreite (Ivo, 2026-10-20):
   bei einem kurzen Zitat klebte das rechtsbuendige Schliesszeichen
   (siehe weiter unten) sonst weit draussen am rechten Rand der ganzen
   Lesespalte, statt an der tatsaechlichen Textbreite. max-width:100%
   als Sicherheitsnetz, damit ein langes Zitat trotzdem normal umbricht
   statt die Spalte zu sprengen. */
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote {
	width: fit-content;
	max-width: 100%;
	box-sizing: border-box;
	margin: 32px 0;
	padding: 0 0 0 24px;
	/* Groesse der Anfuehrungszeichen und Luecke zum Text, proportional zur
	   Textgroesse: Standard-Blockquote 16px Text (hier), Format "Zitat"
	   19px Text (siehe dort). */
	--fasn8-zitat-zeichen: 2.3rem;
	--fasn8-zitat-zeichen-luecke: -8px;
}
/* Ist eine Zuschreibung vorhanden, schliesst sie das Zitat optisch
   bereits ab -- die vollen 32px darunter wirken dann zu viel
   (Ivo, 2026-10-20, DevTools-Screenshot). Ohne Zuschreibung bleibt es
   bei den vollen 32px. Deckt sowohl die verschachtelte Variante
   (:has(cite, footer), Nachfahren-Pruefung) als auch die haeufigere
   Geschwister-Variante ab (:has(+ cite, ...) -- :has() mit
   Kombinator prueft folgende Geschwister, inkl. des von wpautop
   zusaetzlich erzeugten <p> um ein alleinstehendes <cite>, siehe
   Kommentar weiter unten bei den cite/footer-Regeln). Im konkreten
   Beispiel von Ivo (Gilbert Oberson) war es genau dieser zweite Fall
   -- :has(cite, footer) allein deckte ihn nicht ab, da dort gar kein
   cite/footer im Blockquote selbst verschachtelt war. */
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote:has(cite, footer),
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote:has(+ cite, + footer, + p > cite, + p > footer) {
	margin-bottom: 0;
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote::before {
	content: "\201C";
	display: block;
	/* Negativer Wert statt nur kleinerem Positivwert (Ivo, 2026-10-20:
	   "Abstand halbieren", wirkte deutlich weiter als die expliziten
	   4px) -- der grosse Teil der Luecke kommt vom Schriftbild selbst
	   (Leerraum unterhalb des Anfuehrungszeichen-Glyphen bei 2.75rem
	   Schriftgroesse), nicht von margin allein. Schätzwert, da nicht
	   live pruefbar -- ggf. nachjustieren. */
	margin: 0 0 var(--fasn8-zitat-zeichen-luecke);
	font-family: Georgia, serif;
	font-size: var(--fasn8-zitat-zeichen);
	line-height: 0.6;
	font-weight: 700;
	color: var(--fasnacht-color-accent);
}
/* Standard-Zitat (Blockquote) fuer zitierte Textpassagen, z.B.
   Schnitzelbank-Verse: gleiche Schriftgroesse und Zeilenhoehe wie der
   normale Fliesstext (Ivo, 2026-10-29), sonst identisch zum Zitat unten
   (Einzug, Anfuehrungszeichen, Kursiv, Zuschreibung). */
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote p {
	margin: 0 0 8px;
	font-size: 1rem;
	line-height: 1.7;
	font-style: italic;
}
/* Format "Zitat" (Aussage-Zitat): die bisherige, groessere Darstellung des
   Blockquotes. Classic Editor: Dropdown "Format" > "Zitat" setzt die Klasse
   fasn8-zitat (siehe functions.php), Block-Editor: Stil "Zitat" des
   Zitat-Blocks (is-style-fasn8-zitat). */
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote:is(.fasn8-zitat, .is-style-fasn8-zitat) {
	--fasn8-zitat-zeichen: 2.75rem;
	--fasn8-zitat-zeichen-luecke: -10px;
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote:is(.fasn8-zitat, .is-style-fasn8-zitat) p {
	font-size: 1.1875rem;
	line-height: 1.5;
}
/* Classic Editor: Wendet man "Format" > "Zitat" auf ein bereits
   bestehendes Blockquote an, kann TinyMCE die Klasse nicht am vorhandenen
   Element setzen, sondern schachtelt ein zweites Blockquote hinein
   (<blockquote><blockquote class="fasn8-zitat">). Das aeussere bekommt
   dann keine eigene Darstellung, sonst waere alles doppelt eingerueckt
   und mit doppelten Anfuehrungszeichen versehen. */
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote:has(> blockquote:only-child) {
	margin: 0;
	padding: 0;
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote:has(> blockquote:only-child)::before,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote:has(> blockquote:only-child)::after {
	content: none;
}
/* Schliessendes Anfuehrungszeichen -- NUR wenn keine Zuschreibung
   irgendwo im Blockquote verschachtelt ist (:not(:has(cite, footer))).
   Grund: ::after rendert als generierter Inhalt IMMER an der Position
   des "letzten Kindes", also hinter einer verschachtelten
   Zuschreibung, egal wie tief verschachtelt (z.B. auch wenn <cite> nur
   per <br> im selben Absatz wie der Zitattext steckt) -- optisch VOR
   statt nach dem Schliesszeichen, was Ivo ausdruecklich nicht will
   (2026-10-20). Fuer den verschachtelten Fall siehe stattdessen
   cite::before/footer::before weiter unten. text-align:right ergaenzt
   (Ivo, 2026-10-20: "hängt immer noch links") -- macht dank
   width:fit-content oben jetzt auch Sinn, da die Box nicht mehr breiter
   ist als der tatsaechliche Zitattext. */
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote:not(:has(cite, footer))::after {
	content: "\201D";
	display: block;
	text-align: right;
	/* -10px unten, gleicher Grund wie beim oeffnenden Zeichen oben
	   (Schriftbild-Leerraum unterhalb des Glyphen, nicht nur Margin) --
	   Ivo, 2026-10-20: Abstand zur folgenden Zuschreibung wirkte trotz
	   margin-bottom:0 auf dem Blockquote selbst noch spuerbar. */
	margin: 4px 0 var(--fasn8-zitat-zeichen-luecke);
	font-family: Georgia, serif;
	font-size: var(--fasn8-zitat-zeichen);
	line-height: 0.6;
	font-weight: 700;
	color: var(--fasnacht-color-accent);
}
/* Zuschreibung entweder verschachtelt (<blockquote><p>...</p><cite>...
   </cite></blockquote>, z.B. Gutenbergs Zitat-Block, oder auch per
   <br> im selben Absatz wie der Zitattext) ODER als eigener Absatz
   NACH dem Blockquote (<blockquote>...</blockquote><cite>...</cite>)
   -- Letzteres entsteht zwangsläufig, wenn die Zuschreibung als eigene
   Zeile nach dem Zitat getippt und dort per "Zitat-Autor"-Format
   (siehe functions.php) markiert wird: das Format wrapt nur die
   Textauswahl in <cite>, verschiebt sie aber nicht in den Blockquote
   hinein (Ivo, 2026-10-20, genau dieser Fall). Deshalb beide Varianten
   gleichwertig angesprochen (Nachfahren- UND direkter-Geschwister-
   Selektor). Beim Geschwister-Fall zusaetzlich margin-left, da das
   Element dann nicht mehr vom padding-left des Blockquotes selbst
   profitiert.
   Zusaetzlich "blockquote + p cite"/"blockquote + p footer": WordPress'
   automatische Absatz-Erkennung (wpautop()) verpackt eine alleinstehende
   <cite>-Zeile zusaetzlich in ein <p> -- <cite> steht (anders als
   <footer>) nicht auf wpautop's Liste der Elemente, die unveraendert
   bleiben. <cite> ist dann kein direktes Geschwister des Blockquotes
   mehr, sondern ein Enkelkind (Ivo, 2026-10-20, Screenshot zeigte
   weiterhin ungestyltes Beispiel trotz Geschwister-Regel). */
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote cite,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote footer,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote + cite,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote + footer,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote + p cite,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote + p footer {
	display: block;
	margin: 0;
	font-size: 0.8125rem;
	font-style: normal;
	color: var(--fasnacht-color-meta);
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote + cite,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote + footer,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote + p cite,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote + p footer {
	margin-left: 24px;
}
/* Gedankenstrich vor der Zuschreibung, wie im urspruenglichen
   Design-Mockup (Ivo, 2026-10-20). Bei einer VERSCHACHTELTEN
   Zuschreibung zusaetzlich das schliessende Anfuehrungszeichen direkt
   davor (ein Pseudoelement kann nur EINEN content liefern -- das
   Schliesszeichen teilt sich hier darum zwangslaeufig Schriftgroesse/
   -farbe mit dem Gedankenstrich, statt gross/blau wie im einfachen
   Fall oben). Fuer die grosse, blaue Schliesszeichen-Variante auch bei
   vorhandener Zuschreibung: diese als eigenen Absatz NACH dem bereits
   geschlossenen Blockquote schreiben, nicht darin verschachteln. */
/* Geschuetztes Leerzeichen (\00A0) statt normalem Leerschlag nach dem
   Strich -- ein normaler Leerschlag direkt am Zeilenende/-anfang
   (z.B. wenn der generierte Inhalt auf einer eigenen Zeile landet)
   wird vom Browser unsichtbar "weggeschluckt", die Zuschreibung klebte
   dadurch direkt am Strich (Ivo, 2026-10-20). */
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote cite::before,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote footer::before {
	content: "\201D\2014\00A0";
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote + cite::before,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote + footer::before,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote + p cite::before,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) blockquote + p footer::before {
	content: "\2014\00A0";
}

:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) figure.wp-block-image {
	margin: 32px 0;
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) .wp-block-image img {
	display: block;
	width: 100%;
	height: auto;
	border: 1px solid var(--fasnacht-color-border);
	box-sizing: border-box;
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) figcaption,
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) .wp-caption-text {
	margin: 8px 0 0;
	font-size: 0.8125rem;
	line-height: 1.5;
	font-style: italic;
	color: var(--fasnacht-color-meta);
}

/* WordPress wrapt den Tabellen-Block serienmaessig in <figure
   class="wp-block-table"> -- dort statt auf <table> selbst der
   Aussenabstand, plus overflow-x:auto als Sicherheitsnetz gegen zu breite
   Tabellen auf schmalen Bildschirmen (Mobile-Anpassung folgt separat, das
   hier verhindert nur ein Aufbrechen des Layouts in der Zwischenzeit). */
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) .wp-block-table {
	margin: 0 0 24px;
	overflow-x: auto;
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) table {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.875rem;
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) th {
	text-align: left;
	padding: 0.7143em 0.8571em;
	border-bottom: 2px solid var(--fasnacht-color-text);
	font-weight: 700;
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) td {
	padding: 0.7143em 0.8571em;
	border-bottom: 1px solid var(--fasnacht-color-border);
}
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) tbody tr:last-child td {
	border-bottom: none;
}

/* Kurze zentrierte Linie statt voller Breite -- wirkt als Abschnittstrenner
   leichter als ein harter, durchgehender Strich. */
:is(.fasn8-reading-progress-target, .editor-styles-wrapper, .mce-content-body) hr {
	width: 48px;
	height: 2px;
	margin: 40px auto;
	border: none;
	background: var(--fasnacht-color-border);
}

/* Padding auf allen vier Seiten (nicht nur Richtung Rand von #main-content):
   diese Flaechen sitzen teils zwischen zwei .fasn8-article-Bloecken, die an
   dieser Stelle selbst kein Padding mitbringen (siehe :first-child/
   :last-child oben, greift nur am echten Rand) -- ohne eigenes Padding auf
   beiden Seiten wirkte der Abstand zu Titel bzw. Inhalt zu knapp. */
.fasn8-single-above-title,
.fasn8-single-above-content,
.fasn8-single-below-content {
	padding: var(--fasnacht-gutter);
	box-sizing: border-box;
}

/* ==========================================================================
   Footer
   ========================================================================== */

.site-footer {
	background: var(--fasnacht-color-black);
	padding: 28px 0;
	margin-top: 40px;
}

/* Der sticky Header ueberlappt den Viewport von oben, ohne dass der
   Browser dafuer zusaetzlichen Scroll-Weg einrechnet (das max-scrollY
   richtet sich allein nach der Dokument-Hoehe). Blenden sich die
   Navi-Balken nahe am Seitenende wieder ein, wird der Header hoeher
   UND man ist bereits am Scroll-Anschlag -- der Footer rutscht hinter
   den Header, ohne dass man noch weiter scrollen koennte, um ihn
   wieder hervorzuholen.
   Puffer seit 0.20.3 bewusst auf <main> statt auf .site-footer (war
   dort bis 0.20.2 als padding-bottom): auf kurzen, durch das
   Sticky-Footer-Muster (siehe main-Regel oben) bereits auf
   Viewport-Hoehe gestreckten Seiten machte der Puffer die sichtbare
   Fusszeile dauerhaft deutlich dicker ("ultra fett", Ivo-Screenshot) --
   die Fusszeile soll aber immer gleich hoch bleiben. Als
   padding-bottom auf <main> verlaengert derselbe Puffer stattdessen
   den weissen Inhaltsbereich, was Ivo ausdruecklich lieber ist
   ("Weissbereich am Ende des Textes ist mir optisch lieber als eine
   so fette Fusszeile").
   Seit 0.20.3 bis 0.20.4 an body:not(.fasn8-nav-hidden) gekoppelt
   (nur reserviert, wenn die Navi-Balken sichtbar sind) -- das brach im
   Admin-Modus in Safari das Wiederaufklappen der Navi: assets/js/
   sticky-nav.js erkennt Safaris elastischen Rubber-Band-Bounce daran,
   dass window.scrollY ausserhalb von [0, maxScrollY] liegt, und setzt
   dann JEDE Zustandsaenderung aus, bis sich der Wert wieder normalisiert
   -- maxScrollY wird aber aus document.documentElement.scrollHeight
   berechnet, die sich durch das An-/Abschwellen dieses Puffers bei
   jedem Navi-Umschalten selbst aenderte. Die Dokumenthoehe war damit ein
   bewegliches Ziel genau waehrend das Skript sie als stabil voraussetzt
   -- in Safari offenbar stoeranfaelliger als in Chrome (dort unbemerkt
   geblieben), loeste faelschlich die Bounce-Erkennung aus und liess die
   Navi haengen.
   Fix (0.20.5): Puffer wieder entkoppelt, jetzt permanent reserviert
   statt bedingt -- macht die Dokumenthoehe stabil, kein transition
   mehr noetig (kein An-/Abschwellen mehr). Kostet dauerhaft etwas mehr
   Weissraum am Seitenende, laut Ivo unproblematisch.
   Zwischenzeitlich (0.9.3, lange vor dem Sticky-Footer-Muster)
   versuchsweise bereits einmal auf .site-footer selbst permanent
   reserviert statt bedingt -- damals wirkungslos UND "dauerhaft
   hässlich" (sichtbar dicker schwarzer Block), darum seinerzeit
   zurueckgebaut. Diesmal anders: der Puffer liegt auf dem weissen
   <main> statt dem schwarzen Footer, UND das eigentliche Problem war
   nicht das Permanent-vs-Bedingt an sich, sondern die durch das
   Umschalten verursachte Instabilitaet -- beides spricht dafuer, dass
   der jetzige Fix nicht an derselben Stelle scheitert. */
main {
	padding-bottom: var(--fasnacht-header-navs-max-height);
}

.site-footer__inner {
	max-width: var(--fasnacht-container-width);
	margin-left: var(--fasnacht-frame-left);
	margin-right: auto;
	padding: 0 var(--fasnacht-gutter);
	box-sizing: border-box;
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 16px;
}

.site-footer p {
	font-size: 0.8125rem;
	color: #cccccc;
	margin: 0;
}

/* Footer-Widget-Flaeche (z.B. Social-Icons) -- site-weit, rechts neben
   dem Copyright-Hinweis. flow-root gegen durchrutschende Kind-Margins,
   gleiches Prinzip wie bei den uebrigen Widget-Flaechen. */
.site-footer__widgets {
	display: flow-root;
}

/* ==========================================================================
   Buttons
   ========================================================================== */

/* Jede Regel gilt doppelt: einmal fuer die direkte Verwendung in
   unseren eigenen Templates (<a class="fasn8-btn fasn8-btn-primary">),
   einmal fuer WordPress' Button-Block -- dessen "Zusaetzliche
   CSS-Klasse(n)" landet auf dem AEUSSEREN .wp-block-button-Wrapper,
   nicht auf dem eigentlichen <a class="wp-block-button__link">, das
   das Aussehen bestimmt. Ohne diese zweite Selektor-Variante laeuft
   die Klasse im Block-Editor darum ins Leere.

   WICHTIG: der erste (bare) Selektor jeder Regel traegt darum ein
   :not(.wp-block-button) -- ohne diesen Schutz matcht z.B. die blosse
   .fasn8-btn-large-Regel sowohl unser eigenes Template-<a> ALS AUCH
   den .wp-block-button-Wrapper selbst (der im Block-Kontext dieselbe
   Klasse traegt). Ohne Schutz bekaeme der Wrapper SEIN EIGENES
   Padding/Hintergrund zusaetzlich zum inneren Link -- zwei
   verschachtelte, unabhaengig gepolsterte Boxen statt einer, sichtbar
   als "Rand"/Ring rund um den eigentlichen Button. Gefunden am Button
   "Gönner werden" (Widget "Gönner-Anmeldung", 18.10.2026): Ivo hatte
   dort fasn8-btn/-primary/-large bereits korrekt gesetzt, trotzdem
   wirkte der Button zu gross/doppelt gepolstert -- Computed-Tab
   zeigte Padding direkt am .wp-block-button-Wrapper, nicht nur am
   inneren Link.

   Den Eckenradius braucht es hier trotzdem nicht pro Block: theme.json
   setzt (styles.blocks.core/button.border.radius) denselben Wert als
   Standard fuer JEDEN Button-Block site-weit, auch ohne fasn8-btn-
   Klasse. fasn8-btn/-primary/-secondary/-tertiary bleiben trotzdem
   noetig fuer Farbe, Padding und Layout (inline-flex, Fokus-Ring)
   sowie fuer eigene <a>-Templates, die kein Button-Block sind. Fuer
   Buttons aus FREMDEN Plugins mit eigener Markup/Klasse (z.B.
   .tnp-submit) greift theme.json nicht -- dafuer bleibt eine gezielte
   Regel wie unten bei .tnp-submit noetig.

   Primary/Secondary/Tertiary gibt es seit 18.10.2026 ZUSAETZLICH als
   per register_block_style() registrierte Block-Styles (functions.php,
   fasn8_2027_register_block_styles()) -- erscheinen im Button-Block
   als anklickbare Vorschau-Swatches im Sidebar-Tab "Stile", setzen
   automatisch is-style-fasn8-{primary|secondary|tertiary} auf den
   AEUSSEREN Wrapper. Kein Eintippen einer CSS-Klasse mehr noetig.
   Die alten fasn8-btn-*-Klassen bleiben als dritte, gleichwertige
   Selektor-Variante bestehen (Abwaertskompatibilitaet zu bereits
   bestehenden Inhalten). Groessen-Varianten (large/medium/small)
   bleiben bewusst nur per Klasse -- Block-Styles sind pro Block
   gegenseitig exklusiv (wie WordPress' eigene "Fuellung"/"Outline"),
   liessen sich darum nicht unabhaengig mit der Farbe kombinieren. */
.fasn8-btn:not(.wp-block-button),
.wp-block-button.fasn8-btn .wp-block-button__link,
.wp-block-button:is(.is-style-fasn8-primary, .is-style-fasn8-secondary, .is-style-fasn8-tertiary) .wp-block-button__link {
	font-family: inherit;
	border-radius: var(--fasnacht-radius-button);
	cursor: pointer;
	display: inline-flex;
	align-items: center;
	gap: 8px;
	border: none;
	text-decoration: none;
}

.fasn8-btn-primary:not(.wp-block-button),
.wp-block-button.fasn8-btn-primary .wp-block-button__link,
.wp-block-button.is-style-fasn8-primary .wp-block-button__link {
	background: var(--fasnacht-color-accent);
	color: #ffffff;
}
.fasn8-btn-primary:not(.wp-block-button):hover,
.wp-block-button.fasn8-btn-primary .wp-block-button__link:hover,
.wp-block-button.is-style-fasn8-primary .wp-block-button__link:hover { background: var(--fasnacht-color-accent-hover); }
.fasn8-btn-primary:not(.wp-block-button):active,
.wp-block-button.fasn8-btn-primary .wp-block-button__link:active,
.wp-block-button.is-style-fasn8-primary .wp-block-button__link:active { background: var(--fasnacht-color-accent-active); }
.fasn8-btn-primary:disabled { background: #a8c5d4; color: #ffffff; cursor: not-allowed; }
.fasn8-btn-primary:not(.wp-block-button):focus-visible,
.wp-block-button.fasn8-btn-primary .wp-block-button__link:focus-visible,
.wp-block-button.is-style-fasn8-primary .wp-block-button__link:focus-visible { outline: 3px solid var(--fasnacht-color-accent); outline-offset: 3px; }

.fasn8-btn-secondary:not(.wp-block-button),
.wp-block-button.fasn8-btn-secondary .wp-block-button__link,
.wp-block-button.is-style-fasn8-secondary .wp-block-button__link {
	background: transparent;
	color: var(--fasnacht-color-accent);
	border: 2px solid var(--fasnacht-color-accent);
}
.fasn8-btn-secondary:not(.wp-block-button):hover,
.wp-block-button.fasn8-btn-secondary .wp-block-button__link:hover,
.wp-block-button.is-style-fasn8-secondary .wp-block-button__link:hover { background: #e8f2f7; }
.fasn8-btn-secondary:not(.wp-block-button):active,
.wp-block-button.fasn8-btn-secondary .wp-block-button__link:active,
.wp-block-button.is-style-fasn8-secondary .wp-block-button__link:active { background: #d3e7f0; }
.fasn8-btn-secondary:disabled { border-color: #cccccc; color: #999999; cursor: not-allowed; background: transparent; }
/* Die Hover-/Active-Regeln oben (mit :not(.wp-block-button)) haben hoehere
   Spezifitaet als :disabled und faerbten einen inaktiven Button beim
   Ueberfahren hellblau -- hier zurueck auf transparent. */
.fasn8-btn-secondary:not(.wp-block-button):disabled:hover,
.fasn8-btn-secondary:not(.wp-block-button):disabled:active { background: transparent; }
.fasn8-btn-secondary:not(.wp-block-button):focus-visible,
.wp-block-button.fasn8-btn-secondary .wp-block-button__link:focus-visible,
.wp-block-button.is-style-fasn8-secondary .wp-block-button__link:focus-visible { outline: 3px solid var(--fasnacht-color-accent); outline-offset: 3px; }

.fasn8-btn-tertiary:not(.wp-block-button),
.wp-block-button.fasn8-btn-tertiary .wp-block-button__link,
.wp-block-button.is-style-fasn8-tertiary .wp-block-button__link {
	background: transparent;
	color: var(--fasnacht-color-accent);
	font-weight: 600;
	padding: 0.25em 0.125em;
}
.fasn8-btn-tertiary:not(.wp-block-button):hover,
.wp-block-button.fasn8-btn-tertiary .wp-block-button__link:hover,
.wp-block-button.is-style-fasn8-tertiary .wp-block-button__link:hover { text-decoration: underline; }
.fasn8-btn-tertiary:not(.wp-block-button):active,
.wp-block-button.fasn8-btn-tertiary .wp-block-button__link:active,
.wp-block-button.is-style-fasn8-tertiary .wp-block-button__link:active { color: var(--fasnacht-color-accent-active); }
.fasn8-btn-tertiary:disabled { color: #999999; cursor: not-allowed; }
.fasn8-btn-tertiary:not(.wp-block-button):focus-visible,
.wp-block-button.fasn8-btn-tertiary .wp-block-button__link:focus-visible,
.wp-block-button.is-style-fasn8-tertiary .wp-block-button__link:focus-visible { outline: 3px solid var(--fasnacht-color-accent); outline-offset: 3px; border-radius: 2px; }

.fasn8-btn-large:not(.wp-block-button),
.wp-block-button.fasn8-btn-large .wp-block-button__link { padding: 0.8em 1.6em; font-size: 0.9375rem; }
.fasn8-btn-medium:not(.wp-block-button),
.wp-block-button.fasn8-btn-medium .wp-block-button__link { padding: 0.7143em 1.4286em; font-size: 0.875rem; }
.fasn8-btn-small:not(.wp-block-button),
.wp-block-button.fasn8-btn-small .wp-block-button__link { padding: 0.6154em 1.2308em; font-size: 0.8125rem; }
.fasn8-btn-tertiary.fasn8-btn-large:not(.wp-block-button),
.wp-block-button.fasn8-btn-tertiary.fasn8-btn-large .wp-block-button__link { padding: 0.2667em 0.1333em; font-size: 0.9375rem; }
.fasn8-btn-tertiary.fasn8-btn-medium:not(.wp-block-button),
.wp-block-button.fasn8-btn-tertiary.fasn8-btn-medium .wp-block-button__link { padding: 0.2857em 0.1429em; font-size: 0.875rem; }
.fasn8-btn-tertiary.fasn8-btn-small:not(.wp-block-button),
.wp-block-button.fasn8-btn-tertiary.fasn8-btn-small .wp-block-button__link { padding: 0.3077em 0.1538em; font-size: 0.8125rem; }

.fasn8-btn-icon:not(.wp-block-button),
.wp-block-button.fasn8-btn-icon .wp-block-button__link { width: 40px; height: 40px; padding: 0; justify-content: center; }

.fasn8-btn-ghost-icon:not(.wp-block-button),
.wp-block-button.fasn8-btn-ghost-icon .wp-block-button__link {
	background: transparent;
	border: none;
	color: var(--fasnacht-color-meta);
	width: 40px;
	height: 40px;
	padding: 0;
	justify-content: center;
	border-radius: 50%;
}
.fasn8-btn-ghost-icon:not(.wp-block-button):hover,
.wp-block-button.fasn8-btn-ghost-icon .wp-block-button__link:hover { background: #e9e7e1; color: var(--fasnacht-color-text); }
.fasn8-btn-ghost-icon:not(.wp-block-button):active,
.wp-block-button.fasn8-btn-ghost-icon .wp-block-button__link:active { background: #dddddd; }
.fasn8-btn-ghost-icon:not(.wp-block-button):focus-visible,
.wp-block-button.fasn8-btn-ghost-icon .wp-block-button__link:focus-visible { outline: 3px solid var(--fasnacht-color-accent); outline-offset: 2px; }

.fasn8-icon-divider { width: 1px; height: 20px; background: #dddddd; }

/* Tooltip-Utility fuer Icon-only-Buttons (z.B. Teilen/Drucken in der
   By-Line): reines CSS, kein JS. Erscheint bei :hover UND :focus-visible --
   ein blosses title-Attribut waere bei Tastaturbedienung je nach Browser
   nicht zuverlaessig sichtbar, das verletzt den WCAG-Anspruch des Themes. */
[data-tooltip] { position: relative; }
[data-tooltip]::after {
	content: attr(data-tooltip);
	position: absolute;
	bottom: calc(100% + 8px);
	left: 50%;
	transform: translateX(-50%);
	background: var(--fasnacht-color-text);
	color: #ffffff;
	font-size: 0.75rem;
	font-weight: 400;
	white-space: nowrap;
	padding: 0.3333em 0.6667em;
	border-radius: var(--fasnacht-radius);
	opacity: 0;
	pointer-events: none;
	transition: opacity 0.15s ease;
	z-index: 10;
}
[data-tooltip]:hover::after,
[data-tooltip]:focus-visible::after { opacity: 1; }

/* "The Newsletter Plugin" (Klasse .tnp-submit): eigenes Plugin-CSS
   stylt ueber spezifischere Selektoren wie ".tnp-subscription
   input.tnp-submit" (zwei Klassen + Element) -- unsere einfache
   .fasn8-btn-primary-Regel (eine Klasse) wuerde dagegen unabhaengig
   von der Ladereihenfolge verlieren. !important hier bewusst, analog
   .no-frame: zuverlaessige Ueberschreibung von Drittanbieter-CSS,
   automatisch ueberall wirksam, wo das Formular erscheint, ohne dass
   Ivo pro Instanz etwas einstellen muss. */
.tnp-submit {
	font-family: inherit !important;
	border-radius: var(--fasnacht-radius-button) !important;
	cursor: pointer !important;
	border: none !important;
	background: var(--fasnacht-color-accent) !important;
	color: #ffffff !important;
	padding: 0.7143em 1.4286em !important;
	font-size: 0.875rem !important;
}
.tnp-submit:hover { background: var(--fasnacht-color-accent-hover) !important; }
.tnp-submit:active { background: var(--fasnacht-color-accent-active) !important; }
.tnp-submit:disabled { background: #a8c5d4 !important; color: #ffffff !important; cursor: not-allowed !important; }
.tnp-submit:focus-visible { outline: 3px solid var(--fasnacht-color-accent); outline-offset: 3px; }

/* Newsletter-Archiv-Seite: Schrift/Zeilenabstand kleiner, Datum/Titel
   etwas auseinandergezogen (Ivo, 2026-10-19). Reale Zeilen-Struktur
   (per Inspector kopiert, Plugin-Quelle liegt nicht in diesem
   Workspace): <li><span class="tnp-archive-date">...</span>
   <span class="tnp-archive-separator">-</span><a href="...">Titel</a></li>
   -- der Titel-Link selbst hat keine eigene Klasse, daher ueber
   ".tnp-archive-separator + a" (direkt folgendes Geschwisterelement)
   angesprochen statt ueber eine (unbekannte) Container-Klasse. */
.tnp-archive-date,
.tnp-archive-separator,
.tnp-archive-separator + a {
	font-size: 0.875rem;
	line-height: 1.4;
}

.tnp-archive-date,
.tnp-archive-separator {
	margin-right: 8px;
}

/* Die Archiv-Liste steckt auf der Seite "Newsletter Archiv" in einem
   "Vorformatiert"-Block (<pre class="wp-block-preformatted">): Schrift mit
   fester Zeichenbreite und white-space:pre, lange Titel liefen darum
   ueber den Rand der Seite hinaus (Ivo, 2026-10-31, Live: "Update der
   Aktion von fasnacht.ch. Schon mehr als 2'500 Plaetze ..."). Umbruch und
   Seitenschrift erzwingen, nur wenn der Block die Archiv-Liste enthaelt --
   normale vorformatierte Bloecke (z.B. Code) bleiben unveraendert. Die
   Spalten (Datum/Strich/Titel) ordnet das Basis-Plugin per Grid
   (.tnp-archive li), die 1fr-Titelspalte schrumpft jetzt und bricht um. */
.wp-block-preformatted:has(.tnp-archive) {
	white-space: normal;
	font-family: inherit;
}

/* ==========================================================================
   Contact Form 7 (Plugin "Contact Form 7", Klassen wpcf7-*)
   ========================================================================== */

/* Globale Formular-Gestaltung fuer JEDES CF7-Formular, egal auf welcher
   Seite/in welchem Plugin eingebettet (z.B. "Weiteren Notreparaturdienst
   melden" bei fasnacht-ch-notrep) -- einmal hier gestylt, automatisch
   ueberall wirksam, ohne pro Formular etwas einzustellen (Ivo, 2026-10-20:
   "lässt sich das global regeln?"). Gleiches Prinzip wie .tnp-submit oben.
   Ueber Typ-Selektoren statt .wpcf7-form-control allein angesprochen --
   CF7 setzt diese Klasse bei Checkbox/Radio/Akzeptanz-Feldern auf einen
   umschliessenden <span>, nicht auf das <input> selbst, ein reiner
   Klassen-Selektor wuerde dort also ungewollt mittreffen. */
.wpcf7-form-control[type="text"],
.wpcf7-form-control[type="email"],
.wpcf7-form-control[type="tel"],
.wpcf7-form-control[type="url"],
.wpcf7-form-control[type="number"],
.wpcf7-form-control[type="date"],
.wpcf7-form-control[type="search"],
textarea.wpcf7-form-control,
select.wpcf7-form-control {
	box-sizing: border-box;
	width: 100%;
	max-width: 100%;
	border: 1px solid var(--fasnacht-color-border);
	border-radius: var(--fasnacht-radius);
	padding: 0.5em 0.8571em;
	font-family: inherit;
	font-size: inherit;
	color: var(--fasnacht-color-text);
	background: var(--fasnacht-color-surface);
}
.wpcf7-form-control[type="text"]:focus-visible,
.wpcf7-form-control[type="email"]:focus-visible,
.wpcf7-form-control[type="tel"]:focus-visible,
.wpcf7-form-control[type="url"]:focus-visible,
.wpcf7-form-control[type="number"]:focus-visible,
.wpcf7-form-control[type="date"]:focus-visible,
.wpcf7-form-control[type="search"]:focus-visible,
textarea.wpcf7-form-control:focus-visible,
select.wpcf7-form-control:focus-visible {
	border-color: var(--fasnacht-color-accent);
}
textarea.wpcf7-form-control {
	min-height: 8em;
	resize: vertical;
}

/* Senden-Button wie .fasn8-btn-primary.fasn8-btn-medium -- !important
   noetig, CF7s eigenes CSS stylt .wpcf7-submit selbst, eine einfache
   Ein-Klassen-Regel ohne !important wuerde dagegen unzuverlaessig
   gewinnen (gleiche Begruendung wie bei .tnp-submit oben). */
.wpcf7-submit {
	font-family: inherit !important;
	border-radius: var(--fasnacht-radius-button) !important;
	cursor: pointer !important;
	border: none !important;
	background: var(--fasnacht-color-accent) !important;
	color: #ffffff !important;
	padding: 0.7143em 1.4286em !important;
	font-size: 0.875rem !important;
}
.wpcf7-submit:hover { background: var(--fasnacht-color-accent-hover) !important; }
.wpcf7-submit:active { background: var(--fasnacht-color-accent-active) !important; }
.wpcf7-submit:disabled { background: #a8c5d4 !important; color: #ffffff !important; cursor: not-allowed !important; }

/* Abstand zwischen den <p>-Zeilen, die CF7-Formulare je Feld meist haben
   (Standard-Vorlage von CF7 beim Einfuegen eines neuen Tags) -- !important
   aus demselben Grund wie ueberall sonst in diesem Abschnitt: dieselbe
   generische Theme-Absatz-Regel (:is(.fasn8-reading-progress-target, ...)
   p) koennte sonst mit gleicher Spezifitaet gewinnen, je nach
   Ladereihenfolge. */
.wpcf7-form p {
	margin: 0 0 1em !important;
}

/* Checkbox/Radio/Akzeptanz-Listen: kein eigenes Rahmen-/Breiten-Styling
   (Browser-Standard passt, waere sonst wie ein Textfeld verzerrt), nur
   Abstand zwischen mehreren Optionen. */
.wpcf7-list-item {
	margin: 0 0.4em 0.4em 0;
}

/* Validierungs-Hinweis unter einem einzelnen Feld */
.wpcf7-not-valid-tip {
	display: block;
	color: #cc0000;
	font-size: 0.8125rem;
	margin-top: 0.3em;
}
.wpcf7-form-control.wpcf7-not-valid {
	border-color: #cc0000 !important;
}

/* Erfolgs-/Fehlermeldung nach dem Absenden (Rahmenfarbe je nach Status) */
.wpcf7-response-output {
	border-radius: var(--fasnacht-radius);
	padding: 0.7143em 1.1429em;
	font-size: 0.875rem;
	margin: 1em 0 0 !important;
}
.wpcf7-form.sent .wpcf7-response-output {
	border-color: #2e7d32 !important;
	color: #2e7d32;
}
.wpcf7-form.invalid .wpcf7-response-output,
.wpcf7-form.unaccepted .wpcf7-response-output,
.wpcf7-form.payment-required .wpcf7-response-output {
	border-color: #cc0000 !important;
	color: #cc0000;
}

/* "Last Modified Date"-Plugin-Shortcode ([last_modified_date ...]),
   z.B. auf Service-Seiten wie "TV/Radio-Programm" ("Stand: ..."-Zeile
   am Ende des Inhalts). War im alten Theme gestylt, im neuen Theme
   bisher nicht uebernommen -- Ausgangswerte vom alten Theme (Ivo,
   2026-10-17). font-size nachtraeglich von 0.9em auf 11px (Ivo per
   Inspector getestet: 0.7em bei 16px Elterngroesse = 11.2px) -- fixer
   px-Wert statt em, konsistent mit der sonstigen Schriftgrossen-
   Konvention des Themes (ausschliesslich px, einzige Ausnahme die
   h1-Artikelueberschrift mit 1.75rem). text-align nachtraeglich von
   right auf center (Ivo, 2026-10-18). */
.last_modified {
	text-align: center;
	font-size: 0.6875rem;
}

/* ==========================================================================
   Bildrahmen fuer Artikel-Anreisser (Top-Thema, Karten) -- Rahmen,
   Eckenradius und Clipping leben am Wrapper, nicht am <img>, damit der
   Hover-Zoom (siehe unten) innerhalb des Rahmens sauber abgeschnitten
   wird statt den Rahmen selbst mitzuskalieren. Betrifft bewusst nur
   Top-Thema/Karten -- Widget-Bilder bleiben unveraendert (eigene,
   direkte img-Rahmenregeln weiter unten).
   ========================================================================== */

.fasn8-media {
	display: block;
	position: relative;
	overflow: hidden;
	border: 1px solid var(--fasnacht-color-border);
	box-sizing: border-box;
	font-size: 0;
	line-height: 0;
}
.fasn8-media img {
	display: block;
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.35s ease;
}
.fasn8-card:hover .fasn8-media img,
.fasn8-top-thema:hover .fasn8-media img {
	transform: scale(1.06);
}

/* ==========================================================================
   Top-Thema
   ========================================================================== */

/* Row-Layout (Text links, Bild rechts) nach Vorbild der BZ -- spart
   deutlich vertikale Hoehe gegenueber einem vollbreiten Bild mit Text
   darunter. Bild steht im Markup vor dem Textblock (barrierefreie
   Lesereihenfolge), wird aber per order rechts platziert -- gleiches
   Muster wie .fasn8-card--row. */
.fasn8-top-thema {
	display: flex;
	align-items: flex-start;
	gap: 32px;
	color: inherit;
	text-decoration: none;
	margin-bottom: 8px;
}
.fasn8-top-thema .fasn8-media {
	order: 2;
	flex: 1 1 58%;
	min-width: 0;
	aspect-ratio: 1.91 / 1;
}
.fasn8-top-thema__body {
	order: 1;
	flex: 0 0 380px;
}
.fasn8-top-thema__title {
	font-size: 1.625rem;
	font-weight: 700;
	line-height: 1.25;
	margin: 0 0 8px;
}
.fasn8-top-thema:hover .fasn8-top-thema__title { color: var(--fasnacht-color-accent); }
.fasn8-top-thema__excerpt {
	font-size: 0.9375rem;
	line-height: 1.6;
	color: #333333;
	margin: 0;
}
.fasn8-top-thema:focus-visible { outline: 3px solid var(--fasnacht-color-accent); outline-offset: 3px; border-radius: 2px; }

.fasn8-divider {
	border: none;
	border-bottom: 1px solid var(--fasnacht-color-border);
	margin: 28px 0 8px;
}

/* ==========================================================================
   Strom: Karten, Duo/Trio, Widget-Zonen
   ========================================================================== */

.fasn8-card {
	display: block;
	color: inherit;
	text-decoration: none;
}
.fasn8-card:hover { opacity: 0.85; }
.fasn8-card:hover .fasn8-card__title { color: var(--fasnacht-color-accent); }
.fasn8-card:focus-visible { outline: 3px solid var(--fasnacht-color-accent); outline-offset: 3px; border-radius: 2px; }
.fasn8-card .fasn8-media {
	aspect-ratio: 2 / 1;
	margin-bottom: 10px;
}
.fasn8-card__title {
	font-size: 1rem;
	font-weight: 700;
	line-height: 1.3;
	margin: 0 0 6px;
	color: var(--fasnacht-color-text);
}
.fasn8-card__excerpt {
	font-size: 0.8125rem;
	line-height: 1.5;
	color: #555555;
	margin: 0;
}

.fasn8-card--row {
	display: flex;
	gap: 16px;
	align-items: flex-start;
	padding: 18px 0;
	border-bottom: 1px solid var(--fasnacht-color-border);
}
.fasn8-card--row .fasn8-media { width: 400px; order: 2; margin-bottom: 0; flex-shrink: 0; }
.fasn8-card--row .fasn8-card__body { order: 1; min-width: 0; flex: 1; }
.fasn8-card--row .fasn8-card__title { font-size: 1.0625rem; }
.fasn8-card--row .fasn8-card__excerpt { font-size: 0.875rem; line-height: 1.55; }

.fasn8-strom-duo,
.fasn8-strom-trio {
	display: flex;
	flex-wrap: wrap;
	padding: 20px 0;
	border-bottom: 1px solid var(--fasnacht-color-border);
}
.fasn8-strom-duo { gap: 24px; }
.fasn8-strom-trio { gap: 20px; }
.fasn8-strom-duo > .fasn8-card { flex: 1 1 280px; min-width: 0; }
.fasn8-strom-trio > .fasn8-card { flex: 1 1 220px; min-width: 0; }
/* .fasn8-strom-widget-slot (siehe unten) hat denselben Basis-Wert wie
   die Trio-Karte (220px) als generellen Default -- in einem Duo muss
   er aber den dortigen Karten-Wert (280px) treffen, sonst ergeben
   gleicher flex-grow + unterschiedliche flex-basis KEINE 50/50-Spalten
   (der Artikel waere immer um die Differenz breiter als das Widget). */
.fasn8-strom-duo > .fasn8-strom-widget-slot { flex-basis: 280px; }
.fasn8-strom-divider { width: 1px; align-self: stretch; background: #d8d5cc; }

/* Trennstrich unterdruecken, wenn als naechstes ein "Widget (volle
   Breite)" folgt -- dessen eigene Karten-Box uebernimmt die optische
   Abgrenzung bereits, ein zusaetzlicher Strich davor waere doppelt. */
.fasn8-no-divider { border-bottom: none; }

/* Duo/Trio stapeln (Ivo, 2026-10-21): die Karten umbrachen bisher von
   selbst per flex-wrap, aber an unterschiedlichen Stellen -- und die
   vertikalen Trenner (.fasn8-strom-divider, eigene Flex-Kinder zwischen
   den Karten) blieben dabei als verwaister Strich in der Umbruch-Zeile
   stehen. Ein fester Viewport-Breakpoint traefe den Umbruch nicht genau
   (haengt von Scrollbar und Innenabstand ab), darum Container Queries
   auf den Strom-Block: unter der Breite, die das Raster braucht
   (Duo: 280+24+1+24+280 = 609px, Trio: 3x220 + 2x1 + 4x20 = 742px),
   stapeln die Spalten explizit untereinander, und aus den vertikalen
   Trennern werden waagrechte Linien (Ivo, 2026-10-22: ohne sie klebte
   z.B. eine Newsletter-Anmeldung am Artikel darueber).
   container-type: inline-size auf dem Block (hat 40px Innenabstand --
   gemessen wird die Inhaltsbreite, also genau die Zeile). */
.wp-block-fasn8-strom {
	container-type: inline-size;
}
@container (max-width: 608px) {
	.fasn8-strom-duo {
		flex-direction: column;
		flex-wrap: nowrap;
	}
	.fasn8-strom-duo > .fasn8-strom-divider {
		flex: 0 0 1px;
		width: auto;
		height: 1px;
	}
	.fasn8-strom-duo > .fasn8-card,
	.fasn8-strom-duo > .fasn8-strom-widget-slot {
		flex: 0 0 auto;
		width: 100%;
	}
}
@container (max-width: 741px) {
	.fasn8-strom-trio {
		flex-direction: column;
		flex-wrap: nowrap;
	}
	.fasn8-strom-trio > .fasn8-strom-divider {
		flex: 0 0 1px;
		width: auto;
		height: 1px;
	}
	.fasn8-strom-trio > .fasn8-card,
	.fasn8-strom-trio > .fasn8-strom-widget-slot {
		flex: 0 0 auto;
		width: 100%;
	}
}

/* display:flow-root auf dem gemeinsamen before_widget-Wrapper --
   verhindert, dass der obere/untere Aussenabstand (margin) eines
   Kind-Blocks (z.B. eines Bildes innerhalb eines Gruppen-Blocks) nach
   aussen "durchrutscht" (CSS-Margin-Collapse) und faelschlich wie ein
   Rand der Widget-Flaeche selbst wirkt. Gilt fuer alle Widget-Flaechen
   gleichermassen (Einstieg, Ausklang, Duo/Trio-Slots, volle Breite). */
.fasn8-widget {
	display: flow-root;
}
/* Dasselbe zusaetzlich auf jedem Gruppen-Block site-weit (nicht auf
   .fasn8-widget beschraenkt): nur vertikale Margins (oben/unten)
   kollabieren in CSS, horizontale nie -- ein oberer/unterer
   Bild-Abstand rutscht sonst durch die Gruppe hindurch und erscheint
   dadurch nicht als Flaeche innerhalb der Gruppen-Hintergrundfarbe.
   Bewusst global statt auf .fasn8-widget beschraenkt: die
   Editor-Vorschau von Design -> Widgets rendert Bloecke ohne unseren
   before_widget-Wrapper (der existiert nur im echten Frontend-HTML
   via dynamic_sidebar()), eine auf .fasn8-widget beschraenkte Regel
   wuerde dort also nie greifen. flow-root veraendert das sichtbare
   Layout ansonsten nicht, darum unbedenklich global. */
.wp-block-group {
	display: flow-root;
}

/* WordPress-Core-Luecke: .wp-block-image.aligncenter bekommt von WP
   selbst zwar display:table + text-align:center, aber kein eigenes
   margin:auto -- zentriert sich darum nur, wenn ein Eltern-Block (z.B.
   Columns) per eigenem Flex-Layout zentriert, nicht stehend fuer sich
   allein (z.B. direkt in einer Widget-Flaeche). Global ergaenzt, nicht
   nur fuer Widget-Flaechen -- betrifft jedes zentrierte Bild gleich,
   ob im Content oder im Widget. */
.wp-block-image.aligncenter {
	margin-left: auto;
	margin-right: auto;
}

/* Klassische Bild-Ausrichtungsklassen (aligncenter/-left/-right/-none,
   ohne .wp-block-image-Wrapper): WordPress erwartet laut Theme-Handbook,
   dass jedes Theme diese selbst definiert -- gab es in diesem Theme
   bisher gar nicht. Ein im klassischen Editor per Ausrichtung-Regler
   zentriertes Bild zeigte sich darum im Editor zentriert (dort greifen
   WordPress' eigene Basis-Stile), im Frontend aber am linken Rand
   klebend. Pendant zur .wp-block-image.aligncenter-Regel oben, deckt
   zusaetzlich auch klassische Bildunterschriften ab (.wp-caption-Wrapper
   traegt dieselbe Klasse wie das Bild selbst). */
.aligncenter {
	display: block;
	margin: 8px auto;
}
.alignleft {
	float: left;
	margin: 8px 20px 20px 0;
}
.alignright {
	float: right;
	margin: 8px 0 20px 20px;
}
.alignnone {
	margin: 8px 20px 20px 0;
}
/* Reicht alleine oft nicht: WordPress setzt bei manueller
   Abstands-Anpassung im Editor (z.B. "Abstand" auf 0 gestellt) eine
   Inline-Margin direkt am Bild-Block, die jede aussen gesetzte
   margin:auto-Regel schlaegt. Darum zusaetzlich ueber Flex auf dem
   Eltern-Element zentriert -- greift unabhaengig von einer
   Inline-Margin am Bild selbst. */
.fasn8-widget:has(> .wp-block-image.aligncenter) {
	display: flex;
	flex-direction: column;
	align-items: center;
}
/* WordPress' eigener Standard-Abstand unter einem Bild-Block (ohne
   eigene manuelle Anpassung) ist nur unten gesetzt, oben nicht --
   diese Schieflage verschiebt den sichtbaren Bildmittelpunkt beim
   Vertikalzentrieren leicht nach oben. Fuer Bilder in Widget-Flaechen
   generell auf 0 gesetzt, sie sollen ohnehin ohne WordPress' Content-
   Abstaende auskommen. */
.fasn8-widget .wp-block-image {
	margin-top: 0;
	margin-bottom: 0;
}

/* Videos in Widget-Flaechen immer zentriert (Ivo, 2026-10-22): ein
   Custom-HTML-Widget mit <video> (z.B. Werbe-Loop mit fester Breite, in
   einem display:block-Link) sass sonst linksbuendig, weil <video> ein
   Inline-Element ist und das Widget-HTML keine Ausrichtung kennt. Als
   Block mit automatischen Seitenabstaenden zentriert es sich, sobald es
   schmaler ist als die Flaeche; max-width verhindert Ueberlaufen auf
   schmalen Bildschirmen (Breite/Hoehe aus dem Widget-HTML bleiben
   unberuehrt). */
.fasn8-widget video {
	display: block;
	max-width: 100%;
	margin-left: auto;
	margin-right: auto;
}

/* Gleiches Thema wie beim Bild-Abstand oben, hier fuer WordPress'
   Standard-Abstand unter einem Spalten-Block (.wp-block-columns,
   Core-Default margin-bottom: 1.75em = 28px): macht sich z.B. im
   Strom-Einstieg bemerkbar, wenn dort zwei Widgets (Countdown +
   Morgenstraich-Rechner) per Spalten-Block nebeneinander liegen -- die
   Flaeche wirkt dann 28px hoeher als ihr eigentlicher Inhalt, als
   "freier Platz" unterhalb der Widgets sichtbar (Rueckmeldung von Ivo,
   2026-10-17). Ebenfalls generell auf Widget-Flaechen begrenzt, nicht
   global -- im normalen Beitragsinhalt soll der Standard-Abstand
   zwischen Spalten-Bloecken erhalten bleiben. */
.fasn8-widget .wp-block-columns {
	margin-top: 0;
	margin-bottom: 0;
}

/* "Breakout" per negativem Aussenabstand: gleicht genau das Innenabstand-
   Mass des umgebenden .wp-block-fasn8-strom aus, damit die Flaeche
   wirklich die volle Breite der Lesespalte (1100px) einnimmt statt nur
   die davon abzueglich der 2x40px Innenabstand des Strom-Blocks. */
.fasn8-strom-widget-full {
	max-width: var(--fasnacht-container-width);
	margin: 20px calc(-1 * var(--fasnacht-gutter));
	box-sizing: border-box;
	background: var(--fasnacht-color-surface);
	border: 1px solid var(--fasnacht-color-border);
}
/* Bewusst kein eigenes Padding hier: ein Gruppen-Block mit eigener
   Hintergrundfarbe soll die Flaeche vollstaendig ausfuellen koennen.
   Wer Innenabstand will, stellt ihn direkt am Block ein (moeglich seit
   add_theme_support('appearance-tools')). */

/* .no-frame an einem Kind-Block (z.B. dem Bild) schaltet auch die
   Karten-Box des gesamten "Widget (volle Breite)" aus -- die Klasse
   kann als Nachfahre nicht direkt auf diesen Wrapper wirken, darum
   hier ueber :has() rueckwirkend auf den Elternteil angewendet. */
.fasn8-strom-widget-full:has(.no-frame) {
	background: none;
	border: none;
}
/* Duo/Trio-Widget-Flaeche (z.B. eine Werbe-Anzeige) ist meist kuerzer als
   die durch die Textkarten vorgegebene Zeilenhoehe (align-items:stretch
   der Eltern-Reihe) -- Inhalt darum vertikal zentriert statt am Kopf
   klebend. Keine Zusaetzliche-CSS-Klasse noetig, gilt fuer jede solche
   Flaeche automatisch. */
.fasn8-strom-widget-slot {
	flex: 1 1 220px;
	min-width: 0;
	display: flex;
	flex-direction: column;
	justify-content: center;
}
.fasn8-strom-widget-slot img,
.fasn8-strom-einstieg img,
.fasn8-strom-ausklang img {
	border: 1px solid var(--fasnacht-color-border);
	box-sizing: border-box;
	display: block;
}

/* Utility: Bildrahmen gezielt ausschalten -- "no-frame" als Zusaetzliche
   CSS-Klasse(n) am Bild-Block in Design -> Widgets setzen. */
.no-frame,
.no-frame img {
	border: none !important;
}

/* Utility: fuer Screenreader vorhanden, visuell ausgeblendet -- Standard-
   WordPress-Technik (z.B. fuer <label>, die nur Hilfsmitteln dienen). */
.screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

.fasn8-strom-einstieg {
	padding: 20px var(--fasnacht-gutter) 0;
	box-sizing: border-box;
}
/* Unterer Abstand (Strom-Einstieg -> Strom) auf die Hoehe des oberen
   Abstands (Top-Thema -> Strom-Einstieg, 8px + 20px) angleichen, ohne
   den Standard-Abstand zum Strom-Block ausserhalb dieses Falls
   (kein Strom-Einstieg-Widget aktiv) zu veraendern.
   margin-top:0 zusaetzlich noetig (2026-10-17): .wp-block-fasn8-strom
   bekommt offenbar automatisch einen zusaetzlichen ~32px-Aussenabstand
   (vermutlich WordPress' eigener Standard-Block-Abstand, genaue
   Quelle nicht abschliessend lokalisiert) -- der kam zum bewusst
   gesetzten 28px-Innenabstand oben noch hinzu, Ivo wollte diesen
   zusaetzlichen, unbeabsichtigten Zwischenraum weg, nicht den
   bewussten 28px-Rhythmus selbst. Nur in diesem konkreten Fall
   (Strom-Einstieg aktiv) ueberschrieben -- bleibt ausserhalb davon
   unveraendert. */
.fasn8-strom-einstieg + .wp-block-fasn8-strom {
	padding-top: 28px;
	margin-top: 0;
}
/* Folgt der Strom direkt auf das Top-Thema (kein Strom-Einstieg-Widget
   aktiv), summierten sich 8px Innenabstand des Top-Themas, 8px unter dem
   Trennstrich, 40px Strom-Innenabstand und 20px Zeilen-Innenabstand zu
   76px zwischen Strich und erster Karte (Ivo, 2026-10-31). Die Abstaende
   zwischen den Strom-Zeilen betragen 20px (Zeile 1px Strich + 20px
   Innenabstand der naechsten Zeile) -- hier auf dasselbe Mass gebracht.
   Der Fall mit Strom-Einstieg-Widget ist davon nicht betroffen (dort ist
   .fasn8-strom-einstieg das Geschwister-Element zwischen beiden). */
.wp-block-fasn8-top-thema:has(+ .wp-block-fasn8-strom) {
	padding-bottom: 0;
}
.wp-block-fasn8-top-thema:has(+ .wp-block-fasn8-strom) .fasn8-divider {
	margin-bottom: 0;
}
.wp-block-fasn8-top-thema + .wp-block-fasn8-strom {
	padding-top: 0;
}

.fasn8-strom-ausklang {
	padding: 0 var(--fasnacht-gutter) 20px;
	box-sizing: border-box;
}
/* Oberer Abstand (Strom -> Strom-Ausklang) auf die Hoehe der uebrigen
   Abstaende im Flow (28px) angleichen -- gleiches Prinzip wie beim
   Strom-Einstieg-Fix, hier spiegelverkehrt: :has() noetig, um die
   VORANGEHENDE .wp-block-fasn8-strom anzusprechen (ein reiner
   +-Nachbar-Selektor kann nur das nachfolgende Element veraendern). */
.wp-block-fasn8-strom:has(+ .fasn8-strom-ausklang) {
	padding-bottom: 28px;
}

/* ==========================================================================
   Archiv (Kategorie-Archiv, Redaktoren-Archivseite)

   Design-Entscheid von Ivo, 2026-10-18: Featured-Zeile (neuster Beitrag)
   + Rubrik-Pills (Schnellnavigation) + Kachel-Raster, siehe Mockup
   https://claude.ai/artifact/PUMdrdG5oVvjWYfmJ26uxr (Vorschlag 3) und
   CI-Manual. Markup/Datenlogik in functions.php
   (fasn8_2027_render_archiv_*()), gemeinsam genutzt von archive.php und
   taxonomy-fasn8_redaktor.php -- Letzteres tauscht lediglich Autor gegen
   Rubrik in der Meta-Zeile (.fasn8-archiv-rubrik-badge), kein separates
   CSS noetig. Karten bewusst OHNE Rahmen, dafuer Schlagschatten (Ivos
   Vorgabe) -- abweichend vom sonstigen Bildrahmen-Prinzip (Abschnitt
   "Bildrahmen fuer Artikel-Anreisser"), das gilt hier nur noch fuer das
   Featured-Bild (grossflaechig, einzeln). Rubrik-Pills nutzen das
   bestehende Untermenü "Rubriken" (theme_location 'secondary') --
   siehe Docblock von fasn8_2027_render_archiv_rubrik_pills().
   ========================================================================== */

.fasn8-archiv {
	padding: 48px var(--fasnacht-gutter) 64px;
	box-sizing: border-box;
}

.fasn8-archiv__header {
	margin-bottom: 32px;
}
.fasn8-archiv__header h1 {
	margin: 0;
	font-size: 1.75rem;
	line-height: 1.25;
	font-weight: 700;
}
.fasn8-archiv__kicker {
	margin: 0 0 6px;
	font-size: 0.8125rem;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var(--fasnacht-color-meta);
}

/* Redaktoren-Archivseite: Portraitbild + Name/Ressort als Kopfzeile statt
   nur Titel -- gleiches Flex-Umbruch-Prinzip wie .fasn8-byline. */
.fasn8-archiv__header--redaktor {
	display: flex;
	align-items: center;
	gap: 20px;
}
.fasn8-archiv__redaktor-foto {
	width: 72px;
	height: 72px;
	border-radius: 50%;
	object-fit: cover;
	border: 1px solid var(--fasnacht-color-border);
	box-sizing: border-box;
	flex: none;
}
.fasn8-archiv__redaktor-ressort {
	margin: 6px 0 0;
	font-size: 0.875rem;
	line-height: 1.6;
	color: var(--fasnacht-color-text-muted);
}
/* Webseite des Gastschreibers: eigene Zeile am Ende der Kurzbeschreibung,
   lange Adressen umbrechen statt die Kopfzeile zu sprengen. */
.fasn8-archiv__redaktor-web {
	margin: 4px 0 0;
	font-size: 0.875rem;
	line-height: 1.6;
	overflow-wrap: anywhere;
}

/* ==========================================================================
   Team-Block Impressum (Plugin fasnacht-ch, Shortcode [fasn8_team_impressum])
   ========================================================================== */

/* Alle Selektoren dieses Abschnitts mit dem Wrapper ".fasn8-team-
   impressum" als zweiter Klasse (statt alleinstehend): die generischen
   Inhalts-Regeln fuer p/h2/h3/ul/li weiter oben in dieser Datei
   (":is(.fasn8-reading-progress-target, ...) p" usw.) haben als
   Klasse+Tag-Kombination eine hoehere Spezifitaet als eine einzelne
   Klasse -- auf der Impressum-Seite (die in genau so einen Wrapper
   eingebettet ist) gewannen sie bisher gegen z.B.
   ".fasn8-team-impressum-ressort" und ueberschrieben Schriftgroesse/
   Zeilenhoehe/Aussenabstand unbemerkt (Ivo, 2026-10-21: Ressort-Text
   wirkte groesser als der Name -- genau dieser Bug). Zwei eigene
   Klassen schlagen Klasse+Tag zuverlaessig, unabhaengig von der
   Reihenfolge in der Datei. */

/* Titel der aktiven Gruppe -- bisher ein manuell im Seiteninhalt
   eingefuegter Heading-Block (gleiche Optik: Akzentfarbe, Grossbuch-
   staben, Buchstabenabstand), jetzt Teil der Shortcode-Ausgabe. */
.fasn8-team-impressum .fasn8-team-impressum-haupttitel {
	margin: 0 0 20px;
	font-size: 1rem;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var(--fasnacht-color-accent);
}
/* Jeder weitere Titel (z.B. "Gastschreiber" nach dem Fliesstext der
   Ehemaligen) braucht Luft nach oben: ca. 1.5 Zeilen (Ivo, 2026-10-30).
   Der Aussenabstand des Raster-Blocks davor (32px) faellt dabei
   zusammen, es gilt der groessere Wert. */
.fasn8-team-impressum .fasn8-team-impressum-haupttitel:not(:first-child) {
	margin-top: 2.5rem;
}

/* auto-fit statt fester Spaltenzahl (gleiches Prinzip wie bei den
   Kachel-Rastern von fasnacht-ch-schnitzelbaengg/archive.php, siehe
   BACKLOG.md Idee 21) -- bricht automatisch und stufenlos um. 260px
   Mindestbreite (Ivo, 2026-10-21: Variante "Horizontale Kontakt-
   Karte" aus 3 Design-Vorschlaegen gewaehlt) -- Foto + Text stehen
   nebeneinander statt uebereinander, braucht daher etwas mehr Breite
   als die vorherige, zentrierte Fassung. */
.fasn8-team-impressum .fasn8-team-impressum-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
	gap: 20px;
	margin: 0 0 32px;
	padding: 0;
	list-style: none;
}
/* Die generische Listenregel weiter oben (":is(...) li" mit 8px Abstand
   unten, beim letzten Element 0) wuerde auch die Kacheln treffen: nur
   die letzte Kachel fuellte dann die ganze Gitterzeile, alle anderen
   waeren 8px niedriger (Ivo, 2026-10-30: Kachel mit Foto niedriger als
   die ohne). Drei Klassen schlagen auch ":is(...) li:last-child". */
.fasn8-team-impressum .fasn8-team-impressum-grid .fasn8-team-impressum-card {
	margin: 0;
}
/* Karte als 2-Spalten-Grid statt zentriertem Block: Foto (Spalte 1,
   ueber beide Zeilen) neben Name/Ressort (Spalte 2) -- kein eigener
   Wrapper im Markup fuer Name+Ressort noetig, da beide explizit in
   Spalte 2 platziert werden. position:relative ist die Referenzflaeche
   fuer den Stretched-Link-Overlay bei anklickbaren Karten (siehe
   --klickbar unten). */
.fasn8-team-impressum .fasn8-team-impressum-card {
	display: grid;
	grid-template-columns: 48px 1fr;
	grid-template-rows: auto auto;
	column-gap: 12px;
	align-items: start;
	position: relative;
	background: var(--fasnacht-color-surface);
	border: 1px solid var(--fasnacht-color-border);
	border-radius: var(--fasnacht-radius);
	padding: 12px;
	box-sizing: border-box;
	text-align: left;
}
/* Nur Mitglieder mit eigenem Redaktoren-Archiv (mind. ein Beitrag)
   bekommen eine anklickbare Karte (Ivo, 2026-10-21) -- reine
   Impressum-Erwaehnung ohne Artikel (z.B. Webmaster-Rolle) verlinkt
   sonst ins Leere. Hover-Optik wie bei den Archiv-Kacheln
   (.fasn8-archiv-card), der eigentliche Klick-Layer ist die bereits
   bestehende .fasn8-archiv-stretched-link-Klasse auf dem Namens-Link. */
.fasn8-team-impressum .fasn8-team-impressum-card--klickbar {
	cursor: pointer;
	transition: box-shadow .15s ease, transform .15s ease, border-color .15s ease;
}
.fasn8-team-impressum .fasn8-team-impressum-card--klickbar:hover {
	box-shadow: 0 10px 24px rgba(0, 0, 0, 0.14);
	border-color: var(--fasnacht-color-accent);
	transform: translateY(-3px);
}
.fasn8-team-impressum .fasn8-team-impressum-foto {
	grid-column: 1;
	grid-row: 1 / 3;
	width: 48px;
	height: 48px;
	border-radius: 50%;
	object-fit: cover;
	border: 1px solid var(--fasnacht-color-border);
	box-sizing: border-box;
	display: block;
}
.fasn8-team-impressum .fasn8-team-impressum-foto--platzhalter {
	background: var(--fasnacht-color-bg);
}
.fasn8-team-impressum .fasn8-team-impressum-name {
	grid-column: 2;
	font-weight: 700;
	font-size: 0.9375rem;
}
.fasn8-team-impressum .fasn8-team-impressum-kuerzel {
	font-weight: 400;
	color: var(--fasnacht-color-text-muted);
}
.fasn8-team-impressum .fasn8-team-impressum-ressort {
	grid-column: 2;
	margin: 2px 0 0;
	font-size: 0.75rem;
	line-height: 1.4;
	color: var(--fasnacht-color-text-muted);
}
.fasn8-team-impressum .fasn8-team-impressum-subheading {
	margin: 0 0 20px;
	font-size: 0.875rem;
	font-weight: 700;
	color: var(--fasnacht-color-text-muted);
}
/* Ehemalige Team-Mitglieder als Fliesstext statt Kachel-Raster (Ivo,
   2026-10-21: "Name (Ressort, Kürzel)", kommagetrennt, ein
   durchlaufender Absatz) -- kein Foto, keine eigenstaendige
   Hervorhebung wie beim aktiven Team. Markup kommt bereits fertig
   kommagetrennt aus dem Plugin (fasn8_team_impressum_render_shortcode()),
   hier nur Typografie. */
.fasn8-team-impressum .fasn8-team-impressum-ehemalig-text {
	margin: 0;
	font-size: 0.875rem;
	line-height: 1.7;
	color: var(--fasnacht-color-text-muted);
}

/* Rubrik-Pills: horizontal scrollbar statt umbrechend, falls mehr Punkte
   im Untermenü liegen, als auf eine Zeile passen. */
.fasn8-archiv__pills {
	margin-bottom: 40px;
}
.fasn8-archiv__pills-list {
	display: flex;
	gap: 10px;
	margin: 0;
	padding: 0 0 6px;
	list-style: none;
	overflow-x: auto;
}
.fasn8-archiv__pills-list li {
	flex: none;
}
.fasn8-archiv__pills-list a {
	display: inline-flex;
	align-items: center;
	white-space: nowrap;
	text-decoration: none;
	font-size: 0.8125rem;
	font-weight: 600;
	padding: 0.5em 1.1em;
	border-radius: var(--fasnacht-radius-button);
	border: 2px solid var(--fasnacht-color-accent);
	color: var(--fasnacht-color-accent);
	background: transparent;
	box-sizing: border-box;
	transition: background .15s ease, color .15s ease;
}
.fasn8-archiv__pills-list a:hover {
	background: #e8f2f7;
}
/* current-menu-parent/-ancestor zusaetzlich, falls die aktuelle Rubrik im
   Menü als Unterpunkt eines anderen Eintrags liegt (gleiche drei Klassen
   wie bei der Hauptnavigation, siehe Abschnitt "Header"). */
.fasn8-archiv__pills-list .current-menu-item > a,
.fasn8-archiv__pills-list .current-menu-parent > a,
.fasn8-archiv__pills-list .current-menu-ancestor > a {
	background: var(--fasnacht-color-accent);
	color: #ffffff;
}
.fasn8-archiv__pills-list .current-menu-item > a:hover,
.fasn8-archiv__pills-list .current-menu-parent > a:hover,
.fasn8-archiv__pills-list .current-menu-ancestor > a:hover {
	background: var(--fasnacht-color-accent-hover);
}

/* Badge fuer Rubrik-Verweis in der Meta-Zeile (Redaktoren-Archivseite) --
   gemeinsame Klasse fuer Featured-Block und Kachel. position:relative +
   z-index:1 heben ihn ueber den Stretched-Link-Overlay (siehe unten),
   sonst waere er trotz eigenem href nicht mehr separat anklickbar. */
.fasn8-archiv-rubrik-badge {
	display: inline-block;
	position: relative;
	z-index: 1;
	font-size: 0.6875rem;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.03em;
	padding: 0.2em 0.7em;
	border-radius: var(--fasnacht-radius-button);
	background: rgba(0, 102, 153, 0.08);
	color: var(--fasnacht-color-accent);
	text-decoration: none;
}
.fasn8-archiv-rubrik-badge:hover {
	background: rgba(0, 102, 153, 0.16);
}

/* Stretched Link: macht die ganze Featured-Zeile/Kachel klickbar, nicht
   nur Titel/Bild (Ivo, 2026-10-18) -- der Titel-Link bekommt per ::after
   einen unsichtbaren Layer, der sich ueber den naechsten positionierten
   Vorfahren (.fasn8-archiv-featured/.fasn8-archiv-card, beide
   position:relative) ausdehnt. Sauberer als die ganze Zeile/Kachel in
   EIN <a> zu packen -- das waere ungueltiges HTML, da die Meta-Zeile bei
   show_author/show_rubrik selbst <a>-Elemente enthaelt (siehe deren
   eigenes position:relative; z-index:1 oben/unten, das sie ueber diesem
   Overlay haelt und so unabhaengig anklickbar laesst). */
.fasn8-archiv-stretched-link::after {
	content: "";
	position: absolute;
	inset: 0;
}

/* Featured: neuster Beitrag, nur auf der ersten Archiv-Seite. Bekommt
   seit 18.10.2026 denselben "Kachel-Vibe" wie die Raster-Kacheln
   (weisse Flaeche, Schlagschatten, Hover-Anhebung) statt einer blossen
   Zeile -- Ivo wollte Featured und Kacheln optisch als eine Familie.
   Bild liegt buendig an drei Kartenraendern an (wie das Kachel-Bild
   oben), darum kein eigener Rahmen mehr am Bild -- der gehoert jetzt
   der ganzen Karte. align-items:stretch (statt :center) laesst beide
   Spalten die volle, vom Bild-Seitenverhaeltnis vorgegebene Kartenhoehe
   einnehmen; justify-content:center in __body zentriert den Text
   darin vertikal, wie zuvor mit align-items:center auf der Zeile. */
.fasn8-archiv-featured {
	position: relative;
	cursor: pointer;
	background: var(--fasnacht-color-surface);
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
	display: flex;
	align-items: stretch;
	gap: 40px;
	margin-bottom: 56px;
	transition: box-shadow .15s ease, transform .15s ease;
}
.fasn8-archiv-featured:hover {
	box-shadow: 0 10px 24px rgba(0, 0, 0, 0.14);
	transform: translateY(-3px);
}
.fasn8-archiv-featured__body {
	flex: 1;
	min-width: 0;
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 12px;
	padding: 32px 0 32px 32px;
}
.fasn8-archiv-featured__kicker {
	font-size: 0.75rem;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var(--fasnacht-color-accent);
}
.fasn8-archiv-featured__title {
	margin: 0;
	font-size: 1.75rem;
	font-weight: 800;
	line-height: 1.25;
}
.fasn8-archiv-featured__title a {
	color: var(--fasnacht-color-text);
	text-decoration: none;
}
.fasn8-archiv-featured__title a:hover {
	color: var(--fasnacht-color-accent);
}
.fasn8-archiv-featured__excerpt {
	margin: 0;
	font-size: 1rem;
	line-height: 1.7;
	color: var(--fasnacht-color-text-muted);
}
.fasn8-archiv-featured__meta {
	margin: 0;
	font-size: 0.8125rem;
	color: var(--fasnacht-color-meta);
}
.fasn8-archiv-featured__meta a {
	position: relative;
	z-index: 1;
	color: var(--fasnacht-color-accent);
	font-weight: 600;
	text-decoration: none;
}
.fasn8-archiv-featured__meta a:hover {
	text-decoration: underline;
}
.fasn8-archiv-featured__media {
	display: block;
	flex: 1;
	aspect-ratio: 1200 / 628;
	overflow: hidden;
}
.fasn8-archiv-featured__media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* Kachel-Raster: 3 Spalten bei voller Breite, Karten ohne Rahmen/Radius,
   Schlagschatten statt -- siehe Sektions-Kommentar oben.
   auto-fit statt fester Spaltenzahl (Ivo, 2026-10-20, analog zum
   gleichen Fix bei fasnacht-ch-schnitzelbaengg): vorher
   repeat(3, minmax(0, 1fr)) liess die Spalten bei jeder Fensterbreite
   auf exakt 3 schrumpfen (kein 2-Spalten-Zwischenschritt, siehe
   BACKLOG.md Idee 21), nur ein harter Sprung auf 1 Spalte unter 640px.
   320px als Mindestbreite ergibt bei #main-content's voller Breite
   exakt 3 Spalten: 1100px minus 2x1px Rahmen (#main-content selbst,
   box-sizing:border-box) minus 2x40px Padding von .fasn8-archiv =
   1018px nutzbar, minus 2x28px Gap = 962px fuer 3 Spalten, also
   320.67px je Spalte -- abgerundet auf 320px (321px probiert, war
   aber genau 1px zu viel: 3x321+2x28=1019px > 1018px verfuegbar, liess
   auto-fit faelschlich auf 2 Spalten zurueckfallen, Ivo 2026-10-20).
   Der Browser bricht darunter von selbst auf 2 dann 1 Spalte um, kein
   .fasn8-article mit eigener 680px/1100px-Unterscheidung involviert
   (archive.php/search.php nutzen #main-content direkt, nicht die
   alignwide-Mechanik). Die vorherige harte 640px-Regel (siehe @media
   weiter unten) ist damit obsolet und entfernt. */
.fasn8-archiv__grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
	gap: 28px;
	margin-bottom: 48px;
}
.fasn8-archiv-card {
	position: relative;
	cursor: pointer;
	background: var(--fasnacht-color-surface);
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
	display: flex;
	flex-direction: column;
	transition: box-shadow .15s ease, transform .15s ease;
}
.fasn8-archiv-card:hover {
	box-shadow: 0 10px 24px rgba(0, 0, 0, 0.14);
	transform: translateY(-3px);
}
.fasn8-archiv-card__media {
	display: block;
	width: 100%;
	aspect-ratio: 2 / 1;
	overflow: hidden;
}
.fasn8-archiv-card__media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.fasn8-archiv-card__body {
	padding: 20px;
	display: flex;
	flex-direction: column;
	gap: 10px;
	flex: 1;
}
.fasn8-archiv-card__title {
	margin: 0;
	font-size: 1.0625rem;
	font-weight: 700;
	line-height: 1.35;
}
.fasn8-archiv-card__title a {
	color: var(--fasnacht-color-text);
	text-decoration: none;
}
.fasn8-archiv-card__title a:hover {
	color: var(--fasnacht-color-accent);
}
.fasn8-archiv-card__meta {
	margin: 0;
	font-size: 0.8125rem;
	color: var(--fasnacht-color-meta);
}
.fasn8-archiv-card__meta a {
	position: relative;
	z-index: 1;
	color: var(--fasnacht-color-accent);
	font-weight: 600;
	text-decoration: none;
}
.fasn8-archiv-card__meta a:hover {
	text-decoration: underline;
}
.fasn8-archiv-card__excerpt {
	margin: 0;
	font-size: 0.875rem;
	line-height: 1.6;
	color: var(--fasnacht-color-text-muted);
	display: -webkit-box;
	-webkit-line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.fasn8-archiv__pagination {
	display: flex;
	align-items: center;
	justify-content: center;
	flex-wrap: wrap;
	gap: 12px;
}
/* Seitenzahlen-Reihe zwischen den Neuere/Ältere-Pills -- Ausgabe von
   paginate_links(), Klassen page-numbers/current/dots kommen von
   WordPress selbst, nicht umbenennbar. */
.fasn8-archiv__pagination-numbers {
	display: flex;
	align-items: center;
	gap: 6px;
	margin: 0;
	padding: 0;
	list-style: none;
}
.fasn8-archiv__pagination-numbers .page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	min-width: 2.2em;
	height: 2.2em;
	padding: 0 0.4em;
	border-radius: var(--fasnacht-radius-button);
	font-size: 0.8125rem;
	font-weight: 600;
	color: var(--fasnacht-color-accent);
	text-decoration: none;
}
.fasn8-archiv__pagination-numbers a.page-numbers:hover {
	background: #e8f2f7;
}
.fasn8-archiv__pagination-numbers .page-numbers.current {
	background: var(--fasnacht-color-accent);
	color: #ffffff;
}
.fasn8-archiv__pagination-numbers .page-numbers.dots {
	color: var(--fasnacht-color-meta);
	font-weight: 400;
}

/* Sprung-Eingabefeld ersetzt die "…"-Punkte 1:1 an ihrer Stelle (Ivo,
   2026-10-18) -- gleiche Masse wie .page-numbers, Platzhalter "…" wie
   die ersetzten Punkte. Ivo testete die erste Fassung (Rahmen nur bei
   Hover/Fokus) live und fand sie zu unscheinbar -- Rahmen jetzt
   permanent sichtbar (dezentes Grau, kein Fliesstext-Look mehr), dazu
   ein Tooltip "Seitenzahl eingeben" (data-tooltip-Utility, gleiches
   Muster wie Teilen/Drucken in der By-Line).
   WICHTIG: data-tooltip sitzt auf dem <form>, NICHT auf dem <input> --
   ::before/::after rendern auf "replaced elements" wie <input> in
   keinem Browser (dokumentierte CSS-Einschraenkung), der Tooltip blieb
   darum unsichtbar, als das Attribut noch direkt am Eingabefeld hing
   (Ivo, 2026-10-18: "den tool tipp sehe ich nicht"). Die generische
   [data-tooltip]:focus-visible-Regel greift aber nur auf dem
   fokussierten Element selbst -- das <form> wird nie fokussiert, nur
   das <input> darin. Darum zusaetzlich :focus-within hier, als Ergaenzung
   zur generischen Hover/Focus-Visible-Regel. */
.fasn8-archiv__pagination-jump {
	display: inline-flex;
}
.fasn8-archiv__pagination-jump:focus-within::after {
	opacity: 1;
}
.fasn8-archiv__pagination-jump-input {
	box-sizing: border-box;
	width: 2.4em;
	height: 2.2em;
	padding: 0;
	border: 1px solid var(--fasnacht-color-border);
	border-radius: var(--fasnacht-radius-button);
	background: transparent;
	font-family: inherit;
	font-size: 0.8125rem;
	font-weight: 600;
	color: var(--fasnacht-color-meta);
	text-align: center;
	/* Schrittmarker-Pfeile weg -- bei einem Platzhalter, der wie "…"
	   aussieht, waeren sie erst recht fehl am Platz (gleiches Prinzip
	   wie beim Morgenstraich-Rechner-Jahrfeld). */
	-moz-appearance: textfield;
	appearance: textfield;
}
.fasn8-archiv__pagination-jump-input::-webkit-outer-spin-button,
.fasn8-archiv__pagination-jump-input::-webkit-inner-spin-button {
	-webkit-appearance: none;
	margin: 0;
}
.fasn8-archiv__pagination-jump-input::placeholder {
	color: var(--fasnacht-color-meta);
	opacity: 1;
}
.fasn8-archiv__pagination-jump-input:hover {
	border-color: var(--fasnacht-color-accent);
	background: var(--fasnacht-color-surface);
	color: var(--fasnacht-color-accent);
}
.fasn8-archiv__pagination-jump-input:focus {
	border-color: var(--fasnacht-color-accent);
	background: var(--fasnacht-color-surface);
	color: var(--fasnacht-color-text);
}

.fasn8-archiv__empty {
	margin: 0;
	font-size: 0.9375rem;
	color: var(--fasnacht-color-text-muted);
}

/* ==========================================================================
   Morgenstreich-Countdown-Widget (Plugin fasnacht-ch-morgenstreich-
   countdown): seit dessen Scoreboard-Redesign (Plugin-Version 1.4.0)
   bringt das Plugin sein Aussehen (Karte, Rahmen, Schatten, Farben)
   vollstaendig selbst mit -- der fruehere generische Karten-Look hier
   im Theme (aus der Zeit, als das Plugin nur unstrukturiertes Markup
   lieferte) ist darum entfernt. Stand bis Version 0.17.4 fuehrte die
   gleiche Spezifitaet wie die Plugin-eigene Regel, aber spaetere
   Ladereihenfolge, dazu, dass dieses Theme-CSS gewann: sichtbar als
   harter Rand mit Innenabstand statt der vorgesehenen weissen,
   abgerundeten Karte mit Schlagschatten. */

/* ==========================================================================
   By-Line (Single-Ansicht)
   ========================================================================== */

.fasn8-byline {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	margin: 16px 0;
	padding: 16px 20px;
	background: var(--fasnacht-color-surface);
	border-radius: var(--fasnacht-radius);
}

.fasn8-byline__meta {
	line-height: 1.3;
}

.fasn8-byline__redaktoren {
	display: flex;
	align-items: flex-start;
	gap: 12px;
}

.fasn8-byline__avatars {
	display: flex;
	flex: none;
}

.fasn8-byline__avatar {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 45px;
	height: 45px;
	border-radius: 50%;
	background: var(--fasnacht-color-bg);
	border: 2px solid var(--fasnacht-color-surface);
	color: var(--fasnacht-color-text-muted);
}

.fasn8-byline__avatar:not(:first-child) {
	margin-left: -10px;
}

.fasn8-byline__avatar-photo {
	display: block;
	width: 100%;
	height: 100%;
	border-radius: 50%;
	object-fit: cover;
}

.fasn8-byline__names {
	margin: 0;
	font-size: 0.875rem;
	font-weight: 700;
}

/* Redaktor-Name verlinkt auf dessen Archivseite (alle Beiträge, bei denen
   die Person als Redaktor gelistet ist, siehe Taxonomie fasn8_redaktor im
   Basis-Plugin). Bewusst in der aktuellen Textfarbe statt der Akzentfarbe
   wie bei der Kategorie -- reine Funktions-Ergänzung, keine gewollte
   Farbänderung der By-Line; Unterstrich signalisiert die Klickbarkeit. */
.fasn8-byline__redaktor-link {
	color: inherit;
	text-decoration: underline;
}

.fasn8-byline__date-category {
	margin: 6px 0 0;
	color: var(--fasnacht-color-meta);
	font-size: 0.8125rem;
}

/* Datum und Lesezeit als Einheit: ein Umbruch soll nur zwischen den
   Angaben (an den Mittelpunkten) stattfinden, nie mitten in "2 Min.
   Lesezeit" oder zwischen "22." und "Januar" (Ivo, 2026-10-23, Handy). */
.fasn8-byline__date-category time,
.fasn8-byline__lesezeit {
	white-space: nowrap;
}

.fasn8-byline__kategorie {
	color: var(--fasnacht-color-accent);
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.03em;
	text-decoration: none;
}

.fasn8-byline__kategorie:hover { text-decoration: underline; }

/* Nur sichtbar fuer angemeldete Benutzer:innen mit Bearbeitungsrechten
   (get_edit_post_link() liefert sonst leer) -- bewusst unauffaellig/grau
   statt in der Akzentfarbe wie die Kategorie, da es ein redaktionelles
   Werkzeug ist, kein Lese-Element fuer normale Besucher:innen. */
.fasn8-byline__edit {
	color: inherit;
	text-decoration: underline;
}

.fasn8-byline__actions {
	display: flex;
	align-items: center;
	gap: 4px;
	position: relative;
}

.fasn8-byline__share-status {
	position: absolute;
	top: 100%;
	right: 0;
	margin: 4px 0 0;
	font-size: 0.8125rem;
	color: var(--fasnacht-color-meta);
	white-space: nowrap;
}

.fasn8-byline__fotografen {
	margin: 1px 0 0;
	color: var(--fasnacht-color-meta);
	font-size: 0.8125rem;
}

/* ==========================================================================
   Lesefortschritt (Single-Ansicht)
   ========================================================================== */

.fasn8-reading-progress {
	position: absolute;
	bottom: 0;
	left: 50%;
	transform: translateX(-50%);
	width: var(--fasnacht-container-width);
	max-width: 100%;
	height: 3px;
	background: transparent;
	/* position:absolute statt fixed, Bezugsrahmen ist .site-header
	   (selbst position:sticky) -- sitzt dadurch am unteren Header-Rand
	   und bewegt sich automatisch mit, auch wenn dessen Navi-Balken
	   beim Scrollen einklappen. Kein eigener Admin-Leisten-Offset
	   noetig: .site-header kuemmert sich bereits selbst darum
	   (body.admin-bar .site-header weiter oben). */
}

.fasn8-reading-progress__bar {
	width: 100%;
	height: 100%;
	background: var(--fasnacht-color-accent);
	transform: scaleX(0);
	transform-origin: left;
}

.fasn8-print-branding {
	display: none;
}

/* ==========================================================================
   Druckansicht: eigene, reduzierte A4-Darstellung statt des rohen
   Browser-Ausdrucks der vollen Seite -- Navigation/Footer/Widgets und
   die By-Line-Aktionen selbst (machen im Ausdruck keinen Sinn) werden
   ausgeblendet, das sonst unsichtbare Logo erscheint stattdessen klein
   oben auf der Seite.
   ========================================================================== */

@media print {
	.site-header,
	.site-footer,
	.fasn8-byline__actions,
	.fasn8-reading-progress,
	aside {
		display: none !important;
	}

	.fasn8-print-branding {
		display: block;
		width: 90px;
		margin-bottom: 16px;
		color: var(--fasnacht-color-black);
	}

	body {
		background: #ffffff;
		color: #000000;
	}

	.fasn8-byline {
		border: none;
		padding: 0;
		background: transparent;
	}

	.fasn8-container img {
		max-width: 100%;
	}
}

/* ==========================================================================
   Schmale Bildschirme (schlankes Sicherheitsnetz, keine vollstaendige
   Mobile-Gestaltung -- folgt als eigene Etappe)
   ========================================================================== */

@media (max-width: 640px) {
	.fasn8-container,
	.site-header__brand,
	.site-nav > ul,
	.site-footer__inner,
	.fasn8-strom-einstieg,
	.fasn8-strom-ausklang,
	.fasn8-single-above-title,
	.fasn8-single-above-content,
	.fasn8-single-below-content,
	.wp-block-fasn8-top-thema,
	.wp-block-fasn8-strom,
	.fasn8-archiv {
		padding-left: 20px;
		padding-right: 20px;
	}
	.site-logo { width: 190px; }
	.site-nav > ul { gap: 14px; }
	.fasn8-card--row { flex-direction: column; }
	.fasn8-card--row .fasn8-media { width: 100%; order: -1; margin-bottom: 10px; }
	.fasn8-top-thema { flex-direction: column; }
	/* order: -1 -- auf dem Desktop steht das Bild per order: 2 rechts, die
	   Umstellung auf column liess die order stehen und schob das Bild
	   unter den Text (Ivo, 2026-10-21). Gleiches Muster wie bei
	   .fasn8-card--row und dem Archiv-Featured. */
	.fasn8-top-thema .fasn8-media { flex: none; width: 100%; order: -1; margin-bottom: 14px; }
	.fasn8-top-thema__body { flex: none; }
	/* Footer mobil: Social-Icons oben, Copyright darunter, beides zentriert
	   (Ivo, 2026-10-21). Reihenfolge per order, das Markup bleibt unveraendert. */
	.site-footer__inner {
		flex-direction: column;
		align-items: center;
		text-align: center;
		gap: 16px;
	}
	.site-footer__widgets {
		order: -1;
	}
	.site-footer__widgets .wp-block-social-links {
		justify-content: center;
	}
	.fasn8-byline { flex-direction: column; align-items: flex-start; }
	/* Teilen/Drucken auf dem Handy rechtsbuendig (wie auf dem Desktop und
	   wie die Rueckmeldung "Link kopiert", die ebenfalls rechts verankert
	   ist) statt linksbuendig (Ivo, 2026-10-23). Mittig waere align-self:
	   center. */
	.fasn8-byline__actions { align-self: flex-end; }
	.fasn8-archiv-featured { flex-direction: column; gap: 0; }
	.fasn8-archiv-featured__media { order: -1; }
	.fasn8-archiv-featured__body { padding: 24px; }
	.fasn8-archiv__header--redaktor { flex-direction: column; align-items: flex-start; }
	/* Breakout-Rand an das hier reduzierte Innenabstand-Mass (20px statt
	   40px) des Strom-Blocks angleichen, sonst ueberlaeuft die Flaeche
	   den Viewport-Rand. */
	.fasn8-strom-widget-full { margin-left: -20px; margin-right: -20px; }
	/* Utility: vertikale Trennlinie zwischen zwei Spalten eines
	   Zeilen-Blocks (ueber den nativen Rahmen-Regler + "Zusaetzliche
	   CSS-Klasse(n)" im Editor gesetzt) ausblenden, sobald die Spalten
	   hier umbrechen/stapeln -- der Rahmen kommt als Inline-Style vom
	   Editor, braucht darum !important, um ihn zu ueberschreiben. */
	.fasn8-vertical-divider { border: none !important; }
}

/* Breite der Top-Thema-/Strom-Bloecke: direkt ueber die von
   get_block_wrapper_attributes() automatisch erzeugten WP-Block-Klassen,
   kein zusaetzlicher Wrapper in home.php noetig. */
/* Breite kommt jetzt von #main-content (weisse Lesespalte, siehe
   Header-Sektion), hier nur noch der Innenabstand. */
.wp-block-fasn8-top-thema,
.wp-block-fasn8-strom {
	display: block;
	padding: var(--fasnacht-gutter);
	box-sizing: border-box;
}
.wp-block-fasn8-top-thema { padding-bottom: 8px; }

/* ==========================================================================
   Partner-Seitenrand (Plugin fasnacht-ch-bloecke, Widget-Bereich
   "fasn8-partner-seitenrand")
   ========================================================================== */

/* Zwei Zustaende (Ivo, 2026-10-21; Vorbild blick.ch):
   - ab 1464px Fensterbreite: fix im rechten Seitenrand, ausserhalb des
     Content-Rahmens (siehe --fasnacht-frame-left oben, der Rahmen rueckt
     dafuer nach links, sobald der Platz knapp wird)
   - darunter: normaler Block am Seitenende, zwischen Inhalt und
     Fusszeile (im Markup steht der Bereich deshalb VOR dem <footer>;
     auf breiten Fenstern ist die DOM-Stelle dank position:fixed egal).
   Auf dem Handy stehen mehrere Banner untereinander (flex-wrap). */
.fasn8-partner-seitenrand {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	align-items: flex-start;
	gap: 16px;
	max-width: var(--fasnacht-container-width);
	margin-left: var(--fasnacht-frame-left);
	margin-right: auto;
	padding: 24px var(--fasnacht-gutter);
	box-sizing: border-box;
}
.fasn8-partner-seitenrand > * {
	max-width: 100%;
}
.fasn8-partner-seitenrand img {
	height: auto;
}
@media screen and (min-width: 1464px) {
	.fasn8-partner-seitenrand {
		flex-direction: column;
		flex-wrap: nowrap;
		align-items: center;
		position: fixed;
		/* 240px naehert die Header-Hoehe im ausgeklappten Zustand an:
		   Logo/Tagline-Zeile (~87px Logo bei 300px Breite + 28px
		   Innenabstand) plus die fuer die Navi-Balken reservierte
		   --fasnacht-header-navs-max-height (100px), plus 24px Abstand.
		   Grobe Naeherung (der Header kollabiert beim Scrollen auf
		   einen Teil davon), deckt aber sicher den groessten Zustand ab
		   -- Flaeche beginnt dadurch nie mehr hinter dem Header, auch
		   nicht bei grossem Fuellinhalt. Bewusst kein "top: 50%" mehr
		   (vertikal zentriert auf dem ganzen Bildschirm): bei hohem
		   Fuellinhalt reichte das bis unter den Header hinauf. */
		top: 240px;
		left: calc(var(--fasnacht-frame-left) + var(--fasnacht-container-width) + var(--fasnacht-partner-gap));
		width: var(--fasnacht-partner-width);
		max-width: var(--fasnacht-partner-width);
		margin: 0;
		padding: 0;
		z-index: 10;
	}
	/* Nicht nur img: jeder Inhaltstyp im Widget-Bereich (Ivo befuellt
	   ihn frei) wird auf die Breite der Flaeche begrenzt -- ohne das
	   koennte z.B. ein zu breites Testbild die Flaeche sprengen und am
	   rechten Viewport-Rand ueberlaufen (siehe overflow-x:hidden-
	   Sicherheitsnetz bei html weiter oben). */
	.fasn8-partner-seitenrand > * {
		max-width: 100%;
	}
}
