Skip to content

refactor(phoenix-tour): bound ripple + observer-based tracking#2929

Merged
abose merged 2 commits into
mainfrom
ai
May 20, 2026
Merged

refactor(phoenix-tour): bound ripple + observer-based tracking#2929
abose merged 2 commits into
mainfrom
ai

Conversation

@abose
Copy link
Copy Markdown
Member

@abose abose commented May 20, 2026

The overlay previously ran box-shadowed pulse rings on an infinite
animation and a per-frame requestAnimationFrame loop for position
tracking — both kept the compositor busy for the entire tour step and
caused noticeable slowdown on weak GPUs (older Windows hardware, 8GB
RAM and underpowered CPUs).

  • Pulse phase is now bounded: three staggered rings (~3.2s ripple)
    instead of an infinite loop.
  • Settled state is a deliberate focus halo (two soft radial-gradient
    annuli with transparent centers + crisp 2px ring around the icon)
    rather than three thin outline rings that read as a stalled ripple.
  • Position tracking switches to ResizeObserver + scroll/resize
    listeners once the target is laid out; rAF is only a short poll
    for not-yet-rendered targets.
  • Step transitions replay the ripple to settle sequence at the new
    target via a class-toggle + reflow, so steps 2-4 get a fresh ripple
    instead of inheriting the previous step's settled rings.

abose added 2 commits May 20, 2026 08:38
The overlay previously ran box-shadowed pulse rings on an infinite
animation and a per-frame requestAnimationFrame loop for position
tracking — both kept the compositor busy for the entire tour step and
caused noticeable slowdown on weak GPUs (older Windows hardware, 8GB
RAM and underpowered CPUs).

- Pulse phase is now bounded: three staggered rings (~3.2s ripple)
  instead of an infinite loop.
- Settled state is a deliberate focus halo (two soft radial-gradient
  annuli with transparent centers + crisp 2px ring around the icon)
  rather than three thin outline rings that read as a stalled ripple.
- Position tracking switches to ResizeObserver + scroll/resize
  listeners once the target is laid out; rAF is only a short poll
  for not-yet-rendered targets.
- Step transitions replay the ripple to settle sequence at the new
  target via a class-toggle + reflow, so steps 2-4 get a fresh ripple
  instead of inheriting the previous step's settled rings.
@sonarqubecloud
Copy link
Copy Markdown

@abose abose merged commit 2659f5c into main May 20, 2026
12 of 21 checks passed
@abose abose deleted the ai branch May 20, 2026 06:22
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