Skip to content

fix(desktop): clean up animations — remove breathing lights, fix broken keyframes#2267

Merged
esengine merged 1 commit into
esengine:mainfrom
HUQIANTAO:fix/animation-cleanup
May 29, 2026
Merged

fix(desktop): clean up animations — remove breathing lights, fix broken keyframes#2267
esengine merged 1 commit into
esengine:mainfrom
HUQIANTAO:fix/animation-cleanup

Conversation

@HUQIANTAO

Copy link
Copy Markdown
Contributor

Summary

  • Fix 2 broken @keyframes references (caretstream-caret, fadefade-in)
  • Remove meaningless breathing/pulsing animations that don't convey state
  • Wire tab status dots to actual session busy/idle state
  • Unify duplicate keyframes

Changes

Bug fixes

  • @keyframes caret was never defined → shell running caret animation was silently broken
  • @keyframes fade was never defined → about modal mask animation was silently broken

Animation cleanup

  • Tab status dots: were hardcoded to data-state="running" — every tab pulsed forever regardless of state. Now wired to actual busy state via onBusyChange callback from TabRuntime
  • YOLO mode border: removed yolo-pulse breathing animation, kept static danger border
  • PendingUserMsg: removed pulse-soft breathing from the entire message bubble background
  • ThinkingPill label: removed shimmer gradient text effect — was doubling with bounce dots
  • MainHead "Running" label: removed shimmer — plain accent text is cleaner
  • Skeleton lines: unified @keyframes shimmer-bg (duplicate) into shim

Removed dead code

  • @keyframes pulse-soft — no longer referenced
  • @keyframes yolo-pulse — no longer referenced

…en keyframes

- Fix undefined @Keyframes 'caret' → 'stream-caret' (shell running caret was broken)
- Fix undefined @Keyframes 'fade' → 'fade-in' (about modal mask was broken)
- Remove shimmer animation from 'Running' label and ThinkingPill text (double animation with dots)
- Remove pulse-soft breathing from PendingUserMsg background
- Remove yolo-pulse breathing from YOLO mode border
- Unify duplicate @Keyframes shimmer-bg into shim
- Remove dead keyframes: pulse-soft, yolo-pulse
- Wire tab status dots to actual busy/idle state (was hardcoded to 'running')

@esengine esengine left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verified the core fix from the diff. The two broken animations are genuinely fixed: @keyframes caret and @keyframes fade were never defined (so the shell-running caret and the fade were silent no-ops), and this renames the references to stream-caret and fade-in which ARE defined post-change. I cross-checked every animation: declaration in the resulting styles.css (spin, stream-caret, status-pulse, fade-in) and all four resolve to a defined @keyframes — no dangling references, and the removed keyframes (caret/fade/breathe/glow/pulse) have no remaining users. The tab status-dot rewrite reads the real tab.busy field (already used before this PR), so it's wired to actual session state. Net -25 lines, CI green on build (ubuntu+windows) + CodeQL.

One honest caveat: this is a desktop visual change, so I can't pixel-verify the new status-dot rendering or confirm that removing the breathing animations looks the way you intend — but the change carries no correctness/data/security risk and is trivially reversible. If the dots or spacing look off in practice, a follow-up screenshot or revert is easy. Approving on the strength of the verified keyframe fix and the clean, real-field wiring.

Minor (non-blocking): @keyframes pulse-glow appears to remain defined but unused after this change — worth removing in a future pass if it's dead.

@esengine esengine merged commit 72e89ff into esengine:main May 29, 2026
4 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.

2 participants