/*
 * EMEU Cursor-Follow — Worker-Klassen (Lumina-GO 2026-08-23)
 *
 * w-follow__zone    auf der Flex-Box (Eltern-Container, Klick-Traeger)
 * w-follow__target  auf dem absolut positionierten DIV (Popup-Ausloeser)
 * w-follow__pulse   Zusatz aufs Target: EIN weicher Ring im Andock-Moment
 * w-follow__direkt  Zusatz auf die Zone: hartes Kleben statt weichem Nachziehen
 *
 * ARBEITSTEILUNG: Das Skript (emeu-cursor-follow.js) schreibt AUSSCHLIESSLICH
 * die Koordinaten-Variablen --emeu-follow-x/-y auf das Target plus das
 * Andock-Attribut data-emeu-follow auf die Zone. Jede Optik lebt hier.
 *
 * ADDITIONS-BAUART: Die Folge-Verschiebung laeuft ueber die INDIVIDUELLE
 * translate-Property. Sie wird VOR transform angewandt und addiert sich
 * damit mit den Zentrier-Klassen (w-abs-center: transform translate -50%),
 * statt sie zu ueberschreiben — kein Spezifitaets-Kampf, funktioniert mit
 * jeder Ruhe-Positionierung.
 *
 * Manager-Anker bleiben wert-LEER (Wohnort-Regel) — Werte leben hier.
 */

/* ZONE: Zeigefinger-Hand. Der Klick auf die freie Flaeche wird vom
 * Skript ans Target durchgereicht — die ganze Zone ist klickbar. */
.w-follow__zone {
	cursor: pointer;
	/* BEZUGSPUNKT (Lumina-Nachjustierung 2026-08-23): Target-MITTE exakt
	 * auf dem Mauszeiger. Optionaler Fein-Versatz relativ zur Mitte
	 * (negativ-y = Target hoeher als der Zeiger) — Default 0 = stimmig
	 * zentriert. Ersetzt die fruehere Unterkanten-gap-Mechanik. */
	--w-follow-versatz-x: 0px;
	--w-follow-versatz-y: 0px;
}

/* TARGET: Folge-Verschiebung aus den Skript-Variablen. */
.w-follow__target {
	translate: var(--emeu-follow-x, 0px) var(--emeu-follow-y, 0px);
	will-change: translate;
}

/* ANTI-VERSCHLEPPUNGS-KERN (Lumina-Befund 2026-08-23: langsames
 * Fahren ueberm Target schleppte es ueber die Zone hinaus): Das
 * Target ist DOM-Kind der Zone und klebt unterm Zeiger — der Browser
 * wertet das Zone-Verlassen nach dem Element unterm Zeiger, also
 * feuerte pointerleave nie. Heilung: Im geruesteten Follow-Betrieb
 * (das JS setzt data-emeu-follow beim Ruesten) ist das Target fuer
 * den Zeiger DURCHSICHTIG — Hit-Testing sieht immer die Zone, die
 * Grenz-Erkennung wird rein geometrisch korrekt. Klicks traegt die
 * Klick-Weiterleitung der Zone. Ohne Ruestung (Touch, reduced-motion)
 * fehlt das Attribut und das Target bleibt direkt tappbar. */
.w-follow__zone[data-emeu-follow] .w-follow__target {
	pointer-events: none;
}

/* PULS — lebendiger Modus (Lumina-GO 2026-08-23, ersetzt die
 * Einmal-Schatten-Welle der Erst-Fassung): weiche Ring-Welle in
 * ruhiger Kadenz (2s-Zyklus, Welle in den ersten 45 Prozent, dann
 * unsichtbare Ruhe), WIEDERKEHREND solange angedockt. Stoppt
 * strukturell beim Verlassen — der Ring existiert nur im
 * aktiv-Zustand. GPU-PFAD fuer den Dauerbetrieb: animiert werden
 * ausschliesslich transform (scale) plus opacity, die Ring-Kontur
 * ist eine statische Border — kein Repaint pro Frame. Der Ring
 * erbt die Button-Form (border-radius inherit, kompatibel mit
 * w-link__button-radius__*). Braucht ein positioniertes Target
 * (im Anwendungsfall immer absolute). Farbe folgt der Text-Farbe
 * des Targets; per --w-follow-ring setzbar. */
.w-follow__zone[data-emeu-follow="aktiv"] .w-follow__target.w-follow__pulse::after {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: inherit;
	border: 2px solid var(--w-follow-ring, currentColor);
	pointer-events: none;
	opacity: 0;
	animation: emeu-follow-puls 2000ms ease-out infinite;
}

@keyframes emeu-follow-puls {
	0% {
		transform: scale(1);
		opacity: 0.5;
	}
	45% {
		transform: scale(1.35);
		opacity: 0;
	}
	100% {
		transform: scale(1.35);
		opacity: 0;
	}
}

/* BEWEGUNGS-RUHE: doppelter Boden zur Skript-Wache (das JS initialisiert
 * bei reduced-motion oder ohne feinen Zeiger gar nicht erst). */
@media (prefers-reduced-motion: reduce) {
	.w-follow__target {
		translate: 0px 0px;
		will-change: auto;
	}
	.w-follow__zone .w-follow__target.w-follow__pulse::after {
		animation: none;
	}
}
