/**
 * Elbe Clean — Basis-Styles
 *
 * Ausschließlich das, was theme.json nicht abbilden kann:
 * Fokus-Sichtbarkeit, ::selection, prefers-reduced-motion.
 *
 * Alle Design-Werte kommen aus den Presets bzw. settings.custom der theme.json.
 * Keine Hex-Werte, keine px-Abstände.
 *
 * Einzige Stelle mit !important ist der Reduced-Motion-Reset unten — die einzige
 * im Projekt zugelassene Ausnahme, weil Barrierefreiheits-Overrides Autoren-Styles
 * schlagen müssen. Sie gilt nicht darüber hinaus: In Block-CSS bleibt !important
 * ausgeschlossen.
 */

/* ---------------------------------------------------------------------------
 * Bänder ohne Zwischenraum
 *
 * WordPress setzt zwischen den obersten Blöcken einer Seite — Header, Inhalt,
 * Footer — den globalen Blockabstand. Hier stoßen die Bänder direkt
 * aneinander: Jede Sektion bringt ihren eigenen Innenabstand mit, ein Spalt
 * dazwischen würde den Hintergrund der Seite durchscheinen lassen.
 *
 * Die Klasse doppelt, weil die Core-Regel dieselbe Spezifität hat und später
 * im Dokument steht.
 * ------------------------------------------------------------------------- */

.wp-site-blocks.wp-site-blocks > * + * {
	margin-block-start: 0;
}

/*
 * Dasselbe innerhalb des Seiteninhalts: Zwei Sektionsbänder, die aufeinander
 * folgen, stoßen direkt aneinander. Ohne diese Regel liegt zwischen ihnen der
 * globale Blockabstand und der Seitenhintergrund blitzt als heller Streifen
 * durch — sichtbar überall dort, wo zwei Bänder dieselbe Fläche teilen.
 *
 * Bewusst nur zwischen Vollbreiten-Blöcken: Schreibt der Kunde auf einer
 * Unterseite normale Absätze, behalten die ihren Abstand.
 *
 * Drei Selektoren: Im Frontend steht der Inhalt einer Seite in
 * .wp-block-post-content, im Editor im Wurzelcontainer der Blockliste. Auf
 * Archiven und Einzelansichten kommen die Sektionen dagegen aus dem Template
 * und sind direkte Kinder von <main>.
 */

.wp-block-post-content > .alignfull + .alignfull,
.is-root-container > .alignfull + .alignfull,
main > .alignfull + .alignfull {
	margin-block-start: 0;
}

/* ---------------------------------------------------------------------------
 * Fokus
 *
 * :focus-visible statt :focus — Mausklicks lösen keinen Rahmen aus,
 * Tastaturnavigation dagegen immer.
 * ------------------------------------------------------------------------- */

:focus-visible {
	outline: var(--wp--custom--focus--width) solid var(--wp--preset--color--accent);
	outline-offset: var(--wp--custom--focus--offset);
}

/* ---------------------------------------------------------------------------
 * Textauswahl
 * ------------------------------------------------------------------------- */

::selection {
	background-color: var(--wp--custom--color--selection);
}

/* ---------------------------------------------------------------------------
 * Reduzierte Bewegung
 *
 * Zwei Ebenen:
 *
 * 1. Das Transitions-Token selbst wird neutralisiert. Damit greift Reduced
 *    Motion auch dort, wo Block-CSS ganz normal
 *    var(--wp--custom--transition--base) verwendet — keine parallele
 *    Namenskonvention, die man versehentlich umgehen kann.
 *
 * 2. Pauschaler Reset für alles, was nicht über das Token läuft
 *    (Keyframe-Animationen, Transitions aus Core-CSS, Smooth Scrolling).
 *
 * Zum !important: die einzige im Projekt zugelassene Ausnahme, für
 * Barrierefreiheits-Overrides. Ein Reduced-Motion-Reset muss jede spätere
 * Deklaration schlagen, sonst ist er wirkungslos.
 *
 * Zu den Selektoren: WordPress gibt die Custom Properties je nach Version auf
 * :root oder auf body aus. :root:root deckt den ersten Fall ab, html body den
 * zweiten — beide mit Spezifität 0,0,2, also über der jeweiligen WP-Regel.
 * Der doppelte Selektor ist kein Tippfehler.
 * ------------------------------------------------------------------------- */

@media (prefers-reduced-motion: reduce) {

	:root:root,
	html body {
		--wp--custom--transition--base: 0.01ms linear;
	}

	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}
}
