{# r2b: per-browser state applied BEFORE FIRST PAINT, so a revealed booth does not flash blurred on the next page of the reel. Every change of page is a full load (the in-place client re-fetches the current URL and never navigates), so this runs on every page and decides afresh from THIS page's `data-booth` — booth A's reveal cannot follow you into booth B. Storage that throws reads as the default and never raises. #} {% block title %}The Booth{% endblock %} {# The two SVOS voices. display=swap and the system stacks in --font-sans / --font-mono are the failure mode booth-dev named: a dead or slow link must degrade to instantly-readable text, never to invisible text. The request carries the origin only (strict-origin-when-cross-origin), so booth names do not reach Google. #}
The Booth ephemeral media · auto-wipes {{ ttl_hours }}h · kept boards don't {# r2b D3 — System · Light · Dark. JS-only (with scripts off the page follows the OS), so it is markup with `hidden` and the script shows it. The top bar is outside every data-region: no in-place swap replaces it. #}
{# R2 C3: where the in-place script says it could not save in place. Server rendered and empty, so the script only ever sets its text — it builds no markup (INV-6). #} {% block content %}{% endblock %}