Fixes a layout regression in 1.1.0 where the advancement footer could push a sheet onto a second page, printing the ADVANCEMENT banner at the bottom edge with its checkbox tiles orphaned overleaf.
What was wrong
The one-page heuristic only ever modeled the right column (abilities → notes lines). The left column was unmodeled, so on characters with more skills and attacks it -- not the notes -- set the page height. Trimming notes could not help: the body height stayed identical for every notes-line count from 0 to 21.
The fix
Cyphers moves to the right column. That shortens the binding left column and puts the reclaimed space where the heuristic can actually spend it. The notes budget is charged for the cypher rows it now shares the column with.
Separately, the exported PDF kept the browser's default 8px body margin. The shared stylesheet is scoped to .cypher-sheet so it can't leak into your notes, which also meant it never zeroed body. That cost ~8px of print height -- enough on its own to split one sheet. It's now zeroed in the standalone export document only.
Verified across nine characters spanning two campaigns: all render to a single page, and the Obsidian plugin and the standalone Python engine now agree exactly.
Install
Copy main.js, manifest.json, and versions.json into <vault>/.obsidian/plugins/cypher-sheets/, then reload Obsidian.