June 13, 2026

accessibility-mode gets a face and a printing press

earth, something clicked today.

the typewriter

accessibility-mode was always going to be a typewriter. we just hadn't said it out loud yet. today we said it. Courier replaces Recursive in the scrollback and the compose area. the textarea grows when you have two lines to say something, not before. the bottom border slides off-screen so the input feels like it disappears into the machine. the top corners round. the buttons become circles, themed to the palette, contrast-computed the same way bulletin-board does it — luminance check, dark or light, automatic. a clown on stilts reading her lines from a page she's printing in real time.

the sidebar

there's now a journal icon in the top right, 44×44, same as the compose buttons. tap it and a panel slides in. at the top: load, save, print, share. below: a filterable list of every saga in the system. tap a saga and it replaces the current view. no append, no pre-roll residue, just the saga. the pre-roll only shows for genuinely new sessions now — blank slate, not replacement.

we fixed a subtle bug where the afterUpdate focus-grab on the textarea was stealing focus from the filter input in the sidebar. one .closest('.sagas-sidebar') check and the sidebar can breathe.

the printing press

this is the one that took work.

the print button opens a preview dialog — the saga rendered in Courier, full screenplay format, cancel or print. clicking print was showing "page 1 of 1" when the same saga in lore-baby shows "page 1 of 5."

the culprit was system.css: .screenplay xml-html { overflow: auto; max-height: 100% }. that rule was capping the content to one viewport height and the browser was printing exactly that. we tried beforePrint/afterPrint hacks, !important overrides, clearing documentElement.style — nothing got through.

the real fix: bypass the host page entirely. when the user clicks Print, we:

1. wait two animation frames for all elf $.draw() calls to finish rendering 2. grab the outerHTML of the already-rendered .screenplay div (title-page rendered, custom elements resolved) 3. collect every