- home menu: fixed hotkeys
1-9and0. gated rows grey out instead of hiding, so the digit beside a label never moves as you progress (Options used to be 7, then 8).9opens the controls reference — it existed but was only ever shown once, during first run.0quits. - scenarios: the playground now sits at the top of the list. nothing crafted is free (the first gate is L13), so a new player used to meet 13 greyed rows before the one thing they could press. crafted scenarios sort by unlock level; the gates were not monotonic in id, so the list dipped from L23 back to L21 mid-way down.
- legacy terminals: raw UTF-8 middots and an ellipsis reached vt-class terminals unfolded on five screens — 13 lines of 8-bit bytes.
- the tagline and controls hint centred on a hardcoded width and sat ~8 columns right of the figlet banner; that banner also had a doubled backslash and two rows indented one column short.
lsin the playground fell back to 79 columns on terminals of 20 or fewer — wider than the screen it was rescuing.- victory screen: 'ACCESS GRANTED' centred against the wrong width, 'You are ROOT.' hand-split off-centre, and a long stat line could shear the box wall.
- practice levels 10-30 pushed their columns one right; the syllabus name field was one character too narrow for its longest module.
- one implementation each for centring, fixed-width cells, framed boxes, the timed-mode question header, the pause prompt, rules, and the correct/wrong marks.
- audit grew guards for all of it: 7-bit output on the ascii tier, digit stability across profile states, scenario ordering, column alignment, and
lswidth. phase 12 no longer fails intermittently.