{#- The sections, written once. Two layouts show them differently — the rail as icons (plus labels once the burger expands it), the top bar as plain links — so this renders whichever `nav_style` asks for. Both are emitted into the page and CSS hides the one the current layout does not use; `display: none` also takes it out of the accessibility tree, so nothing is announced twice. Which layout the body attribute carries is the viewer's own choice (ADR-0029), so both copies have to be right. The entry list is the single source: adding a section here reaches both layouts at once. -#} {%- set entries = [ ('/status', 'Status', 'grid'), ('/events', 'Events', 'rows'), ('/maintenance', 'Maintenance', 'pause'), ('/links', 'Links', 'link'), ('/copy', 'Copy', 'copy'), ] -%} {%- set entries = entries + [('/system', 'System', 'dial')] if session.get('admin') else entries -%} {%- macro nav_icon(name) -%} {%- endmacro -%} {% for href, label, icon in entries %} {%- set is_on = request.path == href or request.path.startswith(href ~ '/') -%} {%- if nav_style | default('bar') == 'rail' %} {#- collapsed, the label is hidden and `title` carries it as a tooltip -#} {{ nav_icon(icon) }}{{ label }} {%- else %}