Fixed
- Haven Desktop stuck on "Loading Haven…" / CSP-blocked i18n init.
app.htmlhad a single inline<script>i18n.init();</script>tag that the page CSP (no'unsafe-inline'inscript-src) was refusing to execute on strict clients, leaving the locale layer uninitialized and the desktop preload hanging on the splash. Moved the bootstrap call intoi18n.jsitself (I18n.init()at the bottom of the module) and removed the inline tag fromapp.html.init()is idempotent so theauth.jsawait window.i18n.init()call still resolves against the same shared promise.