Set the host UI theme — the ELEVATED theme:set action (§8.5). The host applies it and re-pushes the new value to every theme:read iframe, so your own useHostTheme confirms the change (the loop closes with no special case). Only a grant holding theme:set (e.g. the theme-toggle system app) may call this; any other app is rejected host-side with a forbidden Error (carrying .code), regardless of what the app claims. Update optimistically and let the re-push confirm.