<%# App shell: sidebar (brand + nav slot + footer) · topbar · content slot. Slots are pre-rendered HTML locals — `nav` (sidebar tree, see nav-tree partial), `actions` (topbar buttons), `body` (page content). Text locals: `title`, `brand` ({ name, logo?, sub? } — logo image else the default mark), `theme` (default for the theme-switch), `user`, `breadcrumbs`, `csrfToken` (the Sign-out POST form's hidden field). Branding comes from config/menu.ts; `user`/`csrfToken` from §4 auth. %><% const title = locals.title || "Plainpages"; const brand = locals.brand || { name: "Plainpages" }; const user = locals.user || { name: "Guest", initials: "G", email: "" }; const breadcrumbs = locals.breadcrumbs || []; const nav = locals.nav || ""; const actions = locals.actions || ""; const body = locals.body || ""; %> <%= title %> <%- include("icons") %>

<%= title %>

<% if (breadcrumbs.length) { %> <% } %>
<%- actions %>
<%- body %>