A card shows its state in text as well as color: the progress percent while uploading, and the response message in red when it fails. Nothing is announced when that state changes.
- Keep a polite live region of your own, a <div role="status">, and write a short line into it from onChange when a file finishes or fails: “chapter-one.pdf failed: too large”.
- Set response to a reason a person can act on. A card with no message only says “error”.
- Image thumbnails take the file name as their alt text, so a meaningful name serves both the card and the screen reader.