diff --git a/client/lucy-desktop/src/renderer/src/components/Avatar3D.tsx b/client/lucy-desktop/src/renderer/src/components/Avatar3D.tsx
index 91f5245..e1893fb 100644
--- a/client/lucy-desktop/src/renderer/src/components/Avatar3D.tsx
+++ b/client/lucy-desktop/src/renderer/src/components/Avatar3D.tsx
@@ -193,8 +193,8 @@ function VrmModel({ url, audioLevel, emotion, status, cursor, pat, dance, onErro
const cur = cursor?.current
if (cur) {
const hx = Math.max(-1, Math.min(1, cur.x)), hy = Math.max(-1, Math.min(1, cur.y))
- addBone(vrm, "neck", hy * 0.06, hx * 0.10, 0)
- addBone(vrm, "head", hy * 0.08, hx * 0.14, 0)
+ addBone(vrm, "neck", -hy * 0.06, hx * 0.10, 0)
+ addBone(vrm, "head", -hy * 0.08, hx * 0.14, 0)
}
// Antippen/Streicheln: kurze freudige Reaktion (Kopf-Wackeln; Laecheln in der Mimik unten)
if (pat && pat.current !== lastPat.current) { lastPat.current = pat.current; patReact.current = 1 }
@@ -229,7 +229,7 @@ function VrmModel({ url, audioLevel, emotion, status, cursor, pat, dance, onErro
camUp.current.set(e[4], e[5], e[6]).normalize()
const cx = Math.max(-1.5, Math.min(1.5, cur.x)), cy = Math.max(-1.5, Math.min(1.5, cur.y))
gaze.current.position.addScaledVector(camRight.current, cx * 1.8)
- gaze.current.position.addScaledVector(camUp.current, -cy * 1.8)
+ gaze.current.position.addScaledVector(camUp.current, cy * 1.8)
}
// dezente Blick-Mikrobewegung (Sakkaden) -> das Gesicht wirkt nicht eingefroren
const s = sac.current
@@ -289,7 +289,8 @@ export function Avatar3D({ url, audioLevel, emotion, status = "idle", cursor, pa
const statusRef = useRef(status); statusRef.current = status
return (
-