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.
Set the host UI theme — the ELEVATED
theme:setaction (§8.5). The host applies it and re-pushes the new value to everytheme:readiframe, so your own useHostTheme confirms the change (the loop closes with no special case). Only a grant holdingtheme:set(e.g. the theme-toggle system app) may call this; any other app is rejected host-side with aforbiddenError (carrying.code), regardless of what the app claims. Update optimistically and let the re-push confirm.