{{define "layout"}} {{/* layout — every page's document: the head, the estilo bar and
. The bar is estilo's (chrome.Bar, built once per request in chrome.go), in place of rastrillo's topbar shell: that was 81px, with a raw address, a blue "Settings" link and a Sign out button wrapping under it. 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": 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} · Calls", so no handler can drift from the suite's separator (spec §10). <meta charset> comes first. The stylesheets are in the suite's fixed order: tokens, theme, brand, then estilo's base, menu and chrome, then the app's own; a page adds its own in "head", last. */}} <html lang="{{block "lang" .}}en{{end}}" dir="{{block "dir" .}}ltr{{end}}"{{with .Frame.Theme}} data-theme="{{.}}"{{end}}> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>{{range .Frame.TitleParts}}{{.}} · {{end}}{{.Frame.Chrome.App.Name}} {{iconAssets}} {{block "head" .}}{{end}} {{/* The page shell. The call room replaces it (room.html's "body"): a call is one rounded window in the viewport, and its navigation moves into the title's menu, in the account menu's words and order. */}} {{block "body" .}}
{{.Frame.Chrome.Labels.Skip}} {{template "estilo-bar" .Frame.Chrome}}
{{template "content" .}}
{{end}} {{end}}