{{define "layout"}}
{{/* layout — every page's document: the head, the estilo bar,
and the footer.
The bar is estilo's (chrome.Bar, built once per request in
chrome.go), in place of the hand-made rst-page-header nav, which
wrapped onto two rows at 1440px (97px) with its open Help panel over
the Sources and Sign out buttons. estilo's is 52px at every width,
signed in or out, with the account always last in the same corner.
data-theme is written into the first bytes of the response, from the
Appearance cookie read server-side (chrome.Appearance), so there is
no flash. It is ABSENT for "system", and that is the mechanism:
theme.css's toggle is :root[data-theme="light"|"dark"], and with no
attribute the browser follows the operating system.
The is built here and only here, "{part} · {part} · Memoria",
so no handler can drift from the suite's separator (spec §10). It
used to be written per page, and they said "—" and "·" by turns.
comes first, before anything that could be read as
text. The stylesheets are in the suite's fixed order: tokens, theme,
brand, then estilo's base, menu and chrome (and the door's sky), then
memoria.css, then the page's own (head). */}}
{{range .Frame.TitleParts}}{{.}} · {{end}}{{.Frame.Chrome.App.Name}}
{{/* theme.css carries the palette. tokens.css only USES --rst-bg and
friends — it defines eleven tokens, none of them colours — so
without this link every colour resolves to initial and whole
shorthand declarations become invalid at computed-value time. The
rastrillo scaffold's layout omits it, which is a scaffold bug, not
a choice: the page does not go grey, individual rules vanish. */}}
{{/* chrome.js closes an open bar panel on Escape or an outside click.
Nothing depends on it. */}}
{{/* drop.js is inert on every page but the one carrying [rst-dropzone]:
it looks for the zone first and returns if there is none. It is
linked here rather than in index.html because the layout is where
scripts are linked, and it costs a querySelector to load it twice. */}}
{{/* search.js is the same bargain, keyed on [rst-search]. It shares the
results region with drop.js and does not assume it owns it. */}}
{{iconAssets}}
{{block "head" .}}{{end}}
{{/* [estilo-shell] has no styling of its own; it is the wrapper a
full-height page would key its layout on. */}}
{{.Frame.Chrome.Labels.Skip}}
{{template "estilo-bar" .Frame.Chrome}}
{{template "content" .}}
{{/* The footer is said only to somebody signed in: its count and its
egress claim are statements about searching (spec §9.2 retires the
claim from the sign-in page), and a visitor who cannot search has
nothing they are true or false about. */}}
{{if .Frame.Signed}}{{block "footer" .}}{{end}}{{end}}