* Align Oo avatar eye spacing with evoo-logo overlap ratio
Derive small-eye placement from evoo-logo.svg center spacing (~0.94 of
r_big + r_small) for the shared rig, EvooMascot brand lock, and face crops.
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* Format brand-lock spacing test for Biome
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* Align mobile Expo packages for install --check in CI
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* ci: retrigger after flaky chart-links E2E
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>
update_bot takes a look (oo1: value), validated and normalized in core.
A suggested look renders as a "New look" card with the avatar preview on
web and mobile; accepting applies it to the bot.
Claude-Session: https://claude.ai/code/session_01EKuME5CgL1ddGGN7LGvtBj
Co-authored-by: Claude <noreply@anthropic.com>
A bot's look is stored in its `color` string, which today only holds a
colour, an optional classic shape index or an uploaded picture. The
customizable avatars (species, eye styling, accessories, temperament)
need a richer value that still travels everywhere `color` already goes:
bot rows, group members, mentions and the inbox.
- `@rakazo/core` gains `oo-avatar`: an `oo1:` key=value codec that writes
only non-default fields, reads every legacy value unchanged, rejects
malformed values, and exposes `ooAvatarColor` for plain CSS consumers.
- The rig's eye anchors keep the Oo trademark (big eye = small eye × φ),
and lenses scale with their eye so glasses stay asymmetric; the shared
asymmetry ratio now comes from core.
- The API rejects malformed `oo1:` values on bot create and update.
- `parseBotAvatar` reads through the codec, so an `oo1:` value already
renders with its colour and shape before the new renderer lands.
- The agent cursor and the mobile avatar used the raw value as a CSS
colour and broke on `#hex::shape_N`; they now use the decoded colour.
Claude-Session: https://claude.ai/code/session_01EKuME5CgL1ddGGN7LGvtBj
Co-authored-by: Claude <noreply@anthropic.com>