Fix JSON parsing errors when server returns non-JSON responses:
- Check response.ok before calling response.json()
- Add fallback error messages using status text
- Apply fix to all fetch calls across 12 components
This prevents 'JSON.parse: unexpected character' errors when
server returns HTML error pages or other non-JSON responses.