{{- /* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Commercial */ -}} {{- /* SPDX-FileCopyrightText: 2025-2026 Christian Galo */ -}} {{/* Application shell: the top bar, shared by the member surface (index.html, products.html, billing.html) and the operator surface (operator.html). Pipeline: server.Shell. Convention: docs/design-system.md "Application shell"; contract: chrome-conventions "One shell for both surfaces", "The top bar holds the brand and one control" and "Session controls live in the account menu on both surfaces". The bar holds the brand at its left edge and exactly one control at its right, and nothing else, ever: no section links (the rail carries those) and no surface label (the trail's root crumb states the surface instead, design D18). Which control depends on the width, and the DOM order does not: the account menu renders at lg and up (d-none d-lg-flex), the menu toggler below lg (d-lg-none), each with ms-auto, so whichever renders lands at the right end and the brand stays first (mobile-shell-menu D2). Below lg the toggler opens the rail (#app-rail), which is the shell's one menu at that width and carries the account items itself (partials/shell_rail_account.html); at lg and up the rail is always visible and the account menu is here. The account menu's trigger is a