{% comment %}
The single global toast surface. Included once by base.html, so it is on every
page — authenticated or not — and no view needs a per-page include.
DEVIATION 2 of the L1-B brief. Studio ships two independent, non-communicating
systems:
* an Alpine red error box in base.html, fed by htmx:responseError, that can
only ever show errors; and
* a vanilla-JS bottom-centre host in approvals/partials/_toasts.html which
renders the four tones but has to be included by hand on each page,
outside any htmx-swapped region, or a list refresh fired by the same
response tears the toast down before it is read.
They are merged here. This host listens for BOTH `showToast` (dispatched by
htmx from the HX-Trigger header that apps.common.htmx.toast_response sets) and
htmx:responseError, so toast_response(...) works from any view on any page and
a server error still surfaces instead of dying in the console.
Carried over unchanged, because each exists for a reason:
* server-supplied strings only ever reach the DOM through textContent; the
element skeleton is built from a hard-coded table in this file. Toast
bodies carry platform-supplied content (SECURITY-BASELINE §2).
* error responses are parsed with DOMParser, which builds an INERT document:
no script runs, no
/