{% set pane_open = pane_state(request) %}{% set pane = pane_now(request) %}{% set sized = sizes(request) %}{% from "resize.html" import handle %}{% from "tip.html" import tip %} {# Without an icon the browser asks for /favicon.ico on every page, which answers 404 and is logged as an error in the console. #} {% block title %}kennis{% endblock %} {# **No client-side history snapshot.** htmx's snapshot does not carry the search form, so Back-then-Forward left a control disagreeing with the results under it. Back and Forward are navigations the server answers. Concern #383. #} {# The first tab stop, so a keyboard reaches the page's content without passing the bar's two dozen controls first. #}
{# In the bar, not in the pane it hides: a collapsed pane that took its own toggle with it could not be reopened. Both labels come from the server and `pane.js` picks one. #} kennis {# **`action="/"`, and the live search only where `#hits` is.** The form is on every page now, so with no action a scriptless search from `/corpus` would go to `/corpus?q=`; and never `/hits`, which answers a bare fragment (#366). Elsewhere Enter is a plain navigation to the search page. #} {% set asked_scope = scope | default(everywhere) %}
{# An action is a link to its own route. htmx fetches it into the dialog; without htmx it is followed and the form arrives as a page. One route per action, however many entrances. #} {% for href, label, icon_name in actions %} {{ icon(icon_name) }}{{ label }} {% endfor %} {# The palette is reached from the bar but is not one of its actions: it is every action and place again, under one key. #} {{ icon("command") }} {{ icon("settings") }} {# A plain form, not htmx: it works without a script, and what it answers with is a whole page, because nothing will be left to swap a fragment into. #}
{# Over the pane's right edge, in the grid rather than in the pane, so it does not scroll away with the pane's contents. #} {{ handle("pane-width", "pane", ".pane", "right") }}
{# A page that lays the centre out itself - the document, with its bar and inspector - replaces this block rather than the column. #} {% block centre %}
{% block main %}{% endblock %}
{% endblock %}
{# Something other than this window wrote to the corpus (#311). Drawn closed with every word; `revision.js` fills in what changed, from the server's own sentence, and opens it on focus (Brian, 2026-10-17). #}

{{ corpus_changed_heading }}

{{ corpus_changed }}