arena: BUY CHARM button keeps priority-bounce animation playing while disabled, masking disabled state #184
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:open_issues
agents
agent:security_audit
agent:verify
area
timecurve
arena
arena-v2
audit
block:feature_review
block:security
bug
contracts
design
devops
docs
documentation
enhancement
epic
feature
frontend
indexer
low priority
megaeth
operations
ops
performance
QA
qa checklist
referrals
removal
security
smart-contracts
tech-debt
testing
time-arena
timecurve
visual-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/yieldomega#184
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
tldr
primary CTA buttons with class
btn-primary--priority(most prominently the BUY CHARM button on /timecurve/arena) keep playing thepriority-bouncekeyframe animation even when the button is in:disabledstate. the bounce reads as "interactable" stronger than the existing opacity/grayscale dim reads as "not interactable", so users mistake the disabled button for clickable, click it, and only THEN learn it was disabled (via a submit-time error).found while dogfooding wrong-chain detection on local QA stack — header chip flipped to "Wrong Network" correctly, but BUY CHARM kept bouncing rhythmically, looking inviting. clicked it, got submit-time "Wallet or network changed during purchase" error.
repro
functional protection works (no rogue tx broadcast — the chainMismatch in the disabled cascade at TimeCurveArenaView.tsx:866 catches it). UX is reactive instead of preventative.
source
current CSS state in
frontend/src/index.css:.btn-primary:disabledaddsopacity: 0.65+cursor: not-allowed.btn-primary--priorityaddsanimation: priority-bounce 3.1s var(--motion-bounce) infinite.timecurve-simple__cta--arcade:disabledaddsfilter: grayscale(0.45) brightness(0.96)so the button DOES get dimmed + grayscaled when disabled. but the bounce animation from the priority class keeps running because there's no
:disabledrule cancelling it. the bounce reads stronger than the dim does.fix shape
add a
.btn-primary--priority:disabledrule (or extend an existing disabled rule) that cancels the bounce animation. one-line CSS addition:placed adjacent to the existing
.btn-primary--priorityrule at line 2886, or grouped with the other disabled-state rules.optional second pass: tighten the
:disabledopacity from 0.65 to ~0.5 to make the dim more decisive, AND add an additional grayscale on the base.btn-primary:disabledso it's not just the arcade variant that fully grayscales. but the bounce-cancel alone would close 90% of the gap.scope
affects every button using
.btn-primary--priorityclass, not just BUY CHARM. that's the canonical "this is the main action" CTA across the app — Buy CHARM, possibly some other prize-claim or finalize buttons. fix is uniform across all of them.severity
P3 polish. functional protection is solid (#1 priority defense — no rogue tx). pure UX issue that adds friction to an unhappy path.
cc @PlasticDigits — found during arena dogfood. happy to ship the fix MR for this in same session as filing.
mentioned in commit
d4a6b04544mentioned in merge request !382
mentioned in commit
1163a7ffc1mentioned in issue #164
mentioned in commit
ec252b68b6