cynarAI 5ae8f15931 feat(web): Ingo UX — Proaktivität, Oo-Gesicht, dezentes Audio (#76)
* feat(web): Ingo UX — proactivity signals, Oo face richness, soft audio

Priority S: Heute Brief buckets (Needs you ≤3 / Doing / Done), roster doing-verbs
and Braucht-dich chips, sidebar badge on Heute, need-you ping on waiting states.

Priority A/B: Web Audio cues (app-start shimmer, interact tick, success-resolve,
need-you ouh), reaction vocals with cooldown, optional eOo cold-open voice mark.
Oo eyes gain iris/specular detail and asymmetric blink; hands reduced to rest
except punctuation poses; speaking mouth animates.

Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>

* fix(web): biome format and unused import in HeuteBrief

Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>

* fix(web): a11y and import order for Heute badge

Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>

* docs+motion: Motion God craft — pose stagger, audio bus, ducking

Add MOTION-EVOO-CHARACTER.md (Brand Soul brief): eyes lead, mouth ~80%,
hands punctuation, 40–80 ms eye→mouth lag, 220–320 ms springs, SFX LUFS
and duck-under-TTS/PTT, nod mh/Mhh, reduced-motion rules.

Implement motion-tokens, staggered mouthPose in EvooMascot, shared
oo-audio-bus with voice-lane ducking, mint→gold success, hm nod vocal.

Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>

* fix(web): align conversation roster with bot-only sidebar groups after rebase

Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
2026-09-22 14:39:40 +02:00

150 lines
3.1 KiB
TypeScript

import type { EvooPose, EvooPoseDefinition } from "./types.js";
export const POSE_DEFINITIONS: Record<EvooPose, EvooPoseDefinition> = {
idle: {
mouth: "soft-smile",
handPreset: "rest",
bodyAnimation: "evoo-breathe-awake",
},
listening: {
mouth: "tiny-o",
gaze: { x: 0, y: -0.4 },
accessory: "headset",
handPreset: "rest",
bodyAnimation: "evoo-breathe-awake",
aura: "speak",
},
speaking: {
mouth: "speaking",
gaze: { x: 0.3, y: 0 },
handPreset: "rest",
bodyAnimation: "evoo-conductor-left",
aura: "speak",
},
thinking: {
mouth: "flat",
gaze: { x: 1.2, y: -1.1 },
accessory: "thought",
handPreset: "rest",
aura: "think",
},
working: {
mouth: "flat",
gaze: { x: 0.6, y: 0.8 },
handPreset: "rest",
bodyAnimation: "evoo-quantum-flicker",
},
reading: {
mouth: "tiny-o",
gaze: { x: 1.4, y: 1.2 },
accessory: "clipboard",
handPreset: "rest",
eyeOpen: 0.92,
},
analyzing: {
mouth: "flat",
gaze: { x: 0.8, y: 0.4 },
accessory: "magnifier",
browRaise: "left",
handPreset: "rest",
eyeOpen: 0.88,
},
skeptical: {
mouth: "flat",
browRaise: "right",
gaze: { x: -0.6, y: -0.2 },
handPreset: "rest",
eyeOpen: 0.9,
},
curious: {
mouth: "soft-smile",
gaze: { x: 1.6, y: -0.8 },
handPreset: "peek",
eyeOpen: 1.06,
},
delighted: {
mouth: "delighted",
accessory: "spark",
handPreset: "delighted",
eyeSparkle: true,
bodyAnimation: "evoo-breathe-awake",
aura: "success",
},
concerned: {
mouth: "concerned",
browRaise: "worried",
gaze: { x: 0, y: 0.6 },
handPreset: "rest",
eyeOpen: 0.94,
},
waiting: {
mouth: "tiny-o",
gaze: { x: -0.5, y: 0 },
handPreset: "rest",
eyeOpen: 0.72,
},
success: {
mouth: "grin",
eyeSparkle: true,
handPreset: "success",
bodyAnimation: "evoo-executive-nod",
aura: "success",
},
greeting: {
mouth: "grin",
handPreset: "wave",
bodyAnimation: "evoo-wave-harmonic",
},
asleep: {
mouth: "soft-smile",
accessory: "zzz",
handPreset: "rest",
bodyAnimation: "evoo-breathe-sleep",
eyeOpen: 0.38,
},
error: {
mouth: "concerned",
browRaise: "worried",
accessory: "spark",
handPreset: "error",
gaze: { x: 0, y: 0.8 },
},
collaborating: {
mouth: "soft-smile",
accessory: "tool",
handPreset: "rest",
gaze: { x: 0.9, y: -0.3 },
},
onboarding: {
mouth: "tiny-o",
gaze: { x: 1.4, y: 1.2 },
accessory: "clipboard",
handPreset: "reading",
eyeOpen: 0.92,
},
typing: {
mouth: "flat",
gaze: { x: 0.6, y: 0.8 },
handPreset: "rest",
bodyAnimation: "evoo-quantum-flicker",
},
peek: {
mouth: "soft-smile",
gaze: { x: 1.6, y: -0.8 },
handPreset: "peek",
eyeOpen: 1.06,
},
wave: {
mouth: "grin",
handPreset: "wave",
bodyAnimation: "evoo-wave-harmonic",
},
profit: {
mouth: "grin",
eyeSparkle: true,
handPreset: "success",
bodyAnimation: "evoo-executive-nod",
aura: "success",
},
};