Two fixes for the black-shell / no-blur symptoms (seen first in a VM,
but the renderer one bites real hardware too):
1. `GSK_RENDERER=cairo` in the session env. GTK4's default renderer
(ngl/vulkan on 4.14+) draws transparent layer-shell surfaces as
opaque black on wlroots — the whole bread shell (breadbox launcher,
breadclip popup, breadbar, breadhelp, bos-settings) goes black-on-
black, and it's guaranteed under a VM's virtio-gpu where there's no
real GL/Vulkan context. cairo (software) always composites
transparency correctly; the shell is flat colour/text/icons so
there's no visible cost, and idle memory drops (~40%, no Mesa
driver resident). Override with GSK_RENDERER=gl in the session for a
GPU-heavy GTK4 app.
2. `scripts/ui/rules.lua` (new) + a `pcall(dofile ...)` for it in
hyprland.lua + `bread-theme layerrules` in the bootstrap. The
shell-theme work added layer-rule *generation* (bread-theme writes
~/.config/hypr/layerrules.json from the theme's [compositor] table)
but BOS never shipped the read side, so no blur / ignore-alpha /
per-namespace motion was ever applied to breadbar / breadbox /
breadclip. rules.lua reads the JSON and emits `hl.layer_rule`,
with the pre-theme hardcoded rule set as a pcall-guarded fallback
(matches the live reference config). Layer rules only — window /
workspace / focus rules stay in hyprland.lua.