evOo-local/packages/ui-web/MOTION-EVOO-CHARACTER.md
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

2.6 KiB
Raw Permalink Blame History

evOo Character Motion — Brand Soul & Motion God

Product priority: Proaktivität first (Oos work or clearly wait on you). Motion and SFX serve that — never decorative idle.

Cross-ref: geometry lock in CHARACTER.md, voice encounter in ../../VOICE.md.


Expressor hierarchy

Layer Role Share of read
Eyes Asymmetric Kulleraugen lead every beat ~lead
Mouth Primary expressor ~80%
Hands Punctuation only — then rest ~20% spikes

Never symmetrize eyes. Never let floating hands steal focus from face.


Pose thesis (character only)

Rule Value
Eyes before mouth 40–80 ms lead on pose change
Pose transition 220–320 ms
Spring Cute / soft / snap — cubic-bezier(0.34, 1.25, 0.64, 1)
Scope Character SVG + mascot only — not app chrome

Tokens: evoo-character/motion-tokens.ts (EVOO_MOUTH_LAG_MS, EVOO_POSE_TRANSITION_MS, EVOO_CHARACTER_SPRING).


SFX & vocals (Web Audio)

Toggle: Settings → Voice → Sound feedback. No vendor branding in UI.

Cue Spec
eOo cold-open ≤450 ms, max 1×/session
App start 180–320 ms mint→violet shimmer (before optional eOo mark)
Interact 40–80 ms soft tick
Success Mint→gold resolve or soft hm! vocal — not both loud
Need-you Short ouh?! + UI chip together
Reactions mhMhh / aaah / ouh?! / mm — state-change only
Cooldown ≥8–12 s between reaction vocals
Level −18…−12 LUFS perceived (procedural peaks via shared bus gain)
Duck Under TTS playback and PTT/listening wash

Implementation: apps/web/src/lib/oo-sound.ts, oo-vocals.ts, oo-voice-mark.ts, oo-audio-bus.ts.

Nod

Phase Vocal
Down mh (short, low)
Up Mhh (slightly longer, rising)

Dual-Mind bloom

Reaction vocals may ride the voice-stage cyan/violet bloom — stay under the PTT/TTS wash; duck, never compete.


Reduced motion

When prefers-reduced-motion: reduce:

  • No vocal loops and no reaction stems
  • Visual state only — pose snaps without stagger; no mouth-speak pulse
  • Procedural UI ticks may still be omitted (same gate as SFX)

Proactivity (Priority S)

Motion never replaces working/waiting signals. Roster doing-verbs, Heute buckets, and need-you pings are authoritative; face/audio amplify them.

See apps/web/src/lib/agent-activity.ts and Heute Brief buckets.