Telegram: https://t.me/+DOylgFv1jyJlNzM0
Why this matters
frontend/src/components/dashboard/StreamDetailsModal.tsx:
const progress = (stream.withdrawn / stream.deposited) * 100; — when deposited === 0, this is NaN/Infinity, producing an invalid progress-bar width.
- The close (X) button has no
aria-label, so screen readers announce it as an unlabeled button (other modals in the app label theirs aria-label="Close").
Acceptance criteria
Files to touch
frontend/src/components/dashboard/StreamDetailsModal.tsx
Out of scope
- Stream-detail page progress bar (separate issue).
Telegram: https://t.me/+DOylgFv1jyJlNzM0
Why this matters
frontend/src/components/dashboard/StreamDetailsModal.tsx:const progress = (stream.withdrawn / stream.deposited) * 100;— whendeposited === 0, this isNaN/Infinity, producing an invalid progress-bar width.aria-label, so screen readers announce it as an unlabeled button (other modals in the app label theirsaria-label="Close").Acceptance criteria
deposited > 0 ? (withdrawn / deposited) * 100 : 0, clamped to 0–100aria-label="Close"to the X buttonrole="dialog"/aria-modalconsistent with the modal-a11y issueFiles to touch
frontend/src/components/dashboard/StreamDetailsModal.tsxOut of scope