{# The shell every full page extends. A page template overrides `title`, optionally `head` (extra scripts) and `body_class`, and always `content`. Every page struct must carry a `nav: crate::ui::Nav` field, because the navbar component below reads it. #} {% block title %}Komp Accounting{% endblock %} · Komp Accounting {# Cascade order, declared before anything ships CSS so that it is this line that decides it. `app` is static/app.css, which is wrapped in that layer: it sits above Tailwind's preflight — so the reset cannot touch the site's own look — and below Tailwind's utilities, so a utility class put on an element still wins. That is what makes Tailwind usable here one element at a time, without converting the stylesheet. #} {# Penguin UI (https://www.penguinui.com) is Tailwind + Alpine, and every component on this site is one of its components: the navbar, the failure alert and modal, and the toast, which is included straight out of penguinui-components. The focus plugin is what x-trap in the modal needs, and it has to load before Alpine itself. #} {% block head %}{% endblock %} {% include "ui/navbar.html" %} {% block content %}{% endblock %} {# Penguin UI's stacking toast notification, straight out of the library and unmodified — askama.toml puts penguinui-components on the template path, so this is the library's file, not a copy of it. Mounted once per page and deliberately outside the block every fragment swaps into: a success is announced by a fragment dispatching `notify` (see ui/toast.html), and the toast showing it has to outlive the swap that follows. The component file also ships the demo buttons that trigger it in the library's own preview; `.penguin-toast > button` in static/app.css is what keeps those off the page. #}
{% include "toast-notification/stacking-toast-notification.html" %}