/**
 * GDA Smart-Header – Styles zum Scroll-Verhalten.
 *
 * Prinzip: Der Header ist dauerhaft fixiert und liegt über allem. Den Platz
 * im Fluss ersetzt ein "margin-top" am Body, dessen Wert aus der gemessenen
 * Header-Höhe kommt (CSS-Variable "--gda-header-height", gesetzt vom
 * Inline-Snippet in inc/header-scroll.php bzw. von header-scroll.js).
 *
 * Darüber hinaus setzt das JS nur Zustands-Klassen (--hidden / --compact /
 * --instant), die eigentliche Animation macht komplett CSS. Alle
 * Stellschrauben liegen als Custom Properties auf dem Header-Root.
 */

.gda-header {
	--gda-header-z: 999999;
	--gda-header-transition: 350ms;
	--gda-header-easing: cubic-bezier(0.4, 0, 0.2, 1);
	--gda-header-shadow: 0 2px 16px rgba(0, 0, 0, 0.1);

	position: fixed;
	top: 0;
	right: 0;
	left: 0;
	z-index: var(--gda-header-z);

	transform: translateY(0);
	transition: transform var(--gda-header-transition) var(--gda-header-easing),
		box-shadow var(--gda-header-transition) var(--gda-header-easing);
	will-change: transform;
	backface-visibility: hidden;
}

/**
 * Der Header liegt nicht mehr im Fluss – der Body hält den Platz frei.
 * Eigene Klasse statt nacktem "body", damit die Regel unabhängig von der
 * Ladereihenfolge das "body { margin: 0 }" des Parent-Themes schlägt.
 */
body.gda-has-fixed-header {
	margin-top: var(--gda-header-height, 0px);
}

/* Ankerlinks sollen nicht hinter dem Header landen. */
html {
	scroll-padding-top: var(--gda-header-height, 0px);
}

/* Ausgefahren (nach oben raus). */
.gda-header.gda-header--hidden {
	transform: translateY(-100%);
}

/**
 * Transitions aus. Gilt für den ersten Frame nach dem Laden – dort darf
 * nichts animieren.
 *
 * Bewusst nur auf den Header selbst beschränkt. Ein pauschales "*" würde
 * auch die Hover-Effekte von Menü und Button im Header abschalten.
 */
.gda-header.gda-header--instant {
	transition: none !important;
}

/**
 * Sobald gescrollt wird, wandert Inhalt unter den Header – dann setzt ihn
 * ein Schatten ab.
 *
 * Bewusst KEINE Größenänderung: Der Header bleibt immer exakt gleich hoch,
 * sonst würde der Body-Abstand nicht mehr passen. (Paddings hier zu
 * überschreiben ging schief, weil Elementor sie nur auf ".e-con" setzt und
 * ".e-con-inner" auf 0 steht – ein Wert auf beiden Ebenen addiert sich,
 * statt zu verkleinern.)
 */
.gda-header.gda-header--compact {
	box-shadow: var(--gda-header-shadow);
}

/**
 * WordPress-Adminbar nicht überdecken. Der z-index bleibt hoch, der Header
 * startet eingeloggt aber unterhalb der Leiste.
 */
body.admin-bar .gda-header {
	top: 32px;
}

@media (max-width: 782px) {
	body.admin-bar .gda-header {
		top: 46px;
	}
}

/* Unter 601px scrollt die Adminbar mit, der Header darf wieder nach ganz oben. */
@media (max-width: 600px) {
	body.admin-bar .gda-header {
		top: 0;
	}
}

/**
 * Reduzierte Bewegung: Die Funktion bleibt erhalten (der Header blendet
 * weiterhin ein und aus), nur ohne Animation.
 */
@media (prefers-reduced-motion: reduce) {
	.gda-header {
		transition: none;
	}
}
