{% load static i18n %} {% comment %} brickwork shell base. Every shell (app/auth/centred) extends this. It owns the document skeleton, the token/CSS asset links via plain {% static %} (stable filenames, no django-vite), and the theme/density/direction attributes on . No-JS floor (BR-BW-HTMX-001): nothing here requires Alpine or htmx. The {% block head_js %} / {% block body_js %} blocks are where a JS-enabled consumer loads the host-owned Alpine + htmx singletons; a consumer that loads neither still gets a fully working document. The theme attributes come from a consuming project's context (typically via brickwork.services.tokens.resolve_theme_attributes in a context processor); they default to the documented BRICKWORK_DEFAULT_* here so the shell renders unbranded out of the box. Brand hook (0.10.0, 03-services amendment): a non-empty bw_brand renders data-bw-brand on , NEVER on body or a link tag, because the derived color-mix tokens compute at :root and a lower hook cannot recolour them. The slug is validated at resolve time (resolve_theme_attributes). With bw_brand unset the output is byte-identical to 0.9.0. This is the first-class version of the site-level base.html override icvlocal carried from 0.6.0 (BR-BW-TPL-002 demand evidence, resolved here). {% endcomment %}