Skip to content

feat: shaded mascot with a burning flame; ready and working icons move - #34

Merged
httpsphl merged 2 commits into
mainfrom
feat/mascot-motion
Sep 29, 2026
Merged

httpsphl merged 2 commits into
mainfrom
feat/mascot-motion

Conversation

@httpsphl

Copy link
Copy Markdown
Owner

What

Brings into the app the mascot and state badge reworked in the Botloft design system on Claude Design.

Mascot (BotAvatar)

  • The avatar is now shaded artwork (mascotArt.ts): a flat body with 13 soft light and shadow layers clipped to the outline, glossy eyes with glints. Everything is re-tinted to the bot's color by hue, saturation and lightness (retint.ts), so every bot keeps the same light and shadow. Pale colors keep the thin avatar-edge.
  • With a mood the flame really burns: the outline morphs frame by frame per mood (mascot-flame.css, CSS d: path()), and the clipped shading follows it. Idle sways gently; working burns hard and throws embers off the top; waiting leans and hops; tired burns low with heavy lids that droop now and then; sleeping is a small ember with its eyes shut in two arcs. Eyes blink by closing from top and bottom, each bot on its own rhythm.
  • Same props as before (color, size, framed, mood). Botloft's own mascot stays white on the black square, like the app icon.
  • The mascot's rules moved out of motion.css into mascot.css (the old blink, flicker and hop are gone or moved there).

State badge

  • "Ready": a dot with two rings spreading from it, one after the other.
  • "Working": lucide's pulse line, faint, with a bright stretch running along it. Under reduced motion the whole line lights up, since a still stretch read as a broken icon.
  • Both live in StateIcons.tsx; StateView.icon accepts them or any lucide icon.

Spec 15.3 (motion and identity) describes the new behavior. No new interface text.

Tests

  • pnpm check (137, after merging the current main).
  • New: hex/HSL round trip; the artwork keeps its colors when re-tinted to the color it was drawn in; white stays neutral; each avatar clips to its own outline (unique ids); only a working mascot throws embers; framed has no edge; ready shows two rings and working its trace.
  • Checked in the dev preview (pnpm dev), dark and light: all eight colors, every mood and every state, next to the design system card; the flame's outline changes over time and every animation runs.

Still to try by hand

  • The mascots inside the Tauri window (pnpm tauri dev): the flame morph relies on CSS d: path(), which Chromium supports, so WebView2 should too.

…s move

Brings over the mascot and state badge reworked in the Claude Design
system. The avatar is now shaded artwork (a flat body with soft layers
clipped to the outline) re-tinted to the bot's color, so every bot keeps
the same light and shadow. With a mood its flame really burns: the outline
morphs per mood, embers float off while working, eyes blink from top and
bottom, heavy lids when tired, closed arcs when asleep.

The state badge gets two moving icons: rings spread from the "Ready" dot,
and a bright stretch runs along the "Working" line (whole under reduced
motion). Spec 15.3 follows.
@httpsphl
httpsphl merged commit ea4917f into main Sep 29, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant