Clearer error messages for file uploads

Upload errors now show helpful guidance instead of cryptic JSON parse messages.

Bug Fixes

When uploads fail, you now see a clear message telling you what went wrong — whether the file is too large, the wrong type, or something on our end. No more cryptic JSON parse errors.

We also added client-side validation to catch unsupported file types immediately, so you don't wait for the upload to fail.