Off Register — mechanics

The fork in this look

The fork is the route line under the hero trim: "Read the print ↓" is the standard route, "Or make your own impression." with the registration cross is the mind. Tab and Enter work the three groups, / opens the mind with the composer focused, and a printable key pressed outside any field opens it with that character in #mind-input. "Read the full print ↗" and Escape return to the section the last answer was about; a remembered door lands a returning visitor in mind-only with the first impression printed.

The standard route

The sheet is the indexable site, each section read from the snapshot: the roster from the featured speakers, the day tabs from agenda.days and the rows from agenda.sessions, the place section from the Event record, "Get tickets ↗" from the Eventbrite URL. Sub-pages reuse the section skins, cream for people and place, indigo for the programme; /agenda/#day-2 selects the Tuesday tab on arrival. The press rail stays on the home sheet; sample lines follow the placeholder flags.

Asking the mind

Questions are asked on the mind spread, from the composer, the hero door, the edge tab or the data-question buttons under the lineup and agenda. It opens with an impression already printed from precomputed {say, ui, sources} documents, so the first model call is the visitor's own words.

Thinking is registration. On submit the spread's impressions lift to the resting 0.018 em offset; the phase: thinking event pulls --register toward 0; the first say character completes the settle and starts the stepped print pass (.printing, five steps, 0.5 s); each ui event prints its component with a short pass. After 8 s without words the inks hold a hair off register and the help line says so; a retry prints at 25 s. Reduced motion jumps to register at submit and skips the pass.

The catalogue as print matter, every value by id:

The assistant in the chrome

On the standard route the mind is the vertical "Ask the mind ↗" tab shown past the hero, plus the section buttons; both send mode: "standard" with the page and the ids on screen, open the spread and print. The merge rules run on the return: the answer link and Escape bring the full print back at the relevant section, the day tab selected for an agenda answer, the roster filtered to the grid's ids under a "Showing 4 speakers · [ clear ]" caption. The server keeps the append-only thread; the spread shows one impression at a time, so the previous question stays as a 14 px provenance line.

Data, performance and accessibility

Whova photos are cross-origin, so the two-plate halftone is pre-rendered server-side per photo hash rather than in a tainted canvas. The #ink-edge filter and the multiply blend repaint on every --register change, so it stays on the hero words and the answer display line and drops during the settle. The ::before plate duplicates its text, so every .print-type without aria-hidden needs an aria-label; the answer region swaps aria-atomic for aria-busy while streaming and announces the finished sentence with a component summary. Vermilion type on cream and cream copy on the vermilion broadside both sit near 2.9:1, so that reading copy prints as the dark overprint (indigo multiplied over vermilion, about 4.9:1).

Build plan

Carries over unchanged: prototype/server.py (SSE contract, cached prefix, sanitizer, budget guards), data/ets.sample.json and its builder, the catalogue, and from mind.html the fixture index, streamAnswer(), reconcile(), summarize(), the ERR map and escLink(), plus mergeIntoPage() and selectDay() from standard.html. New: the Off Register renderers, the registration choreography bound to the SSE phases, the halftone pre-render job, the precomputed first impressions, the contextual-return map, the woff2 font subset and the snapshot-driven sheet. Effort: about three weeks of one front-end engineer after the data groundwork; the route handler is shared by every concept.

Risks