- check_license() liefert jetzt unlimited_budget, credits_total, credits_used,
read_only_reason. Bei nicht-unlimited UND credits_used >= credits_total wird
status=budget_exceeded, read_only=True gesetzt.
- require_writable_license blockiert mit 403 + X-License-Status-Header je nach Reason.
- /api/auth/me liefert read_only_reason und unlimited_budget; credits_percent_used
wird nicht mehr auf 100 gekappt (echte Prozente).
- Frontend: Banner-Text dynamisch je nach reason (budget_exceeded/expired/...).
Refresh-Button bei read_only deaktiviert + Tooltip. Globaler 403-Handler in
api.js: bei X-License-Status -> Banner + Toast aktualisieren.