From 56278cabfe7ce45e33e41b01d936356bdea66758 Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Fri, 2 Oct 2026 22:08:08 +0000 Subject: [PATCH] Packet print readability (rega's read of landing 1): Full detail's tally heads at 15px over wider cells, the prayer themes at 19px MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Full detail: tally columns 96 → 116px, the once-per-page question heads 12 → 15px in a 62px head row (three short lines), so they read on paper; the first page holds 11 rows. Points page: the themes and scenes 15 → 19px (~7.7pt on letter), the twelve points 19 → 18.5px to make room. Measured in all 11 languages: every first list page, Full detail's reserved block (612 of 640px) and the points page (the tightest, fr, keeps 43px) still fit. --- library/packet/packet-render.js | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/library/packet/packet-render.js b/library/packet/packet-render.js index 8209ed48f..29095f444 100644 --- a/library/packet/packet-render.js +++ b/library/packet/packet-render.js @@ -126,14 +126,15 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de // The three checkbox cells. Each holds a box plus its short label; sized so all three fit beside // the description without the labels wrapping in the longest locale we ship. // The tally cells no longer carry their question under each box: the three questions head the table ONCE - // per page (.pray-head), so a cell is all tally room. 84 -> 96 gives every box a little more of it. - const PRAY_CELL = 96; + // per page (.pray-head), so a cell is all tally room. 84 -> 116 gives every box more of it and the heads a + // readable 15px (three short lines; at 96px they were three tiny ones). + const PRAY_CELL = 116; // The question heads above the first row of every page, and the first page's explanation (the intro, // the blessing, the band) in a reserved block, so the first page holds FD_FIRST rows and the rest 20. // FD_TOP_H is MEASURED: with a 100-group list the tallest locales' block uses 612px (es fr pt de it ro ru hi; - // en 591, ar 507, zh 513), so 640 keeps 28px and the first page 12 rows. check:packet-render fails a block + // en 591, ar 507, zh 513), so 640 keeps 28px; with the 62px head row the first page holds 11 rows. check:packet-render fails a block // whose content outgrows it (the block clips rather than overlap the rows, so only a measurement sees it). - const PRAY_HEAD_H = 46, FD_TOP_H = 640; + const PRAY_HEAD_H = 62, FD_TOP_H = 640; const FD_ROWS_TOP = M + HEAD + FD_TOP_H + PRAY_HEAD_H; const SET_PANEL = 660; // one square sets panel: two + a 40px gap fit 1380px const SET_SOLO = 960; // one chart per page: a large square, centred @@ -283,12 +284,12 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de .xb-ex-note{margin-top:4px;font-size:14px;color:#6f6a5c} /* The prayer themes and scenes above the twelve points: a thin numbered list, ruled off below. */ .pt-themes{margin:0 0 10px;padding:0 0 6px;border-bottom:1.5px solid #c9bfa4} - .pt-th-h{font:400 15px/1.3 Georgia,serif;color:#413d35} - .pt-th-h b,.pt-sc-h b{font:700 16px Georgia,serif;color:#1b1a17;letter-spacing:.02em} + .pt-th-h{font:400 19px/1.3 Georgia,serif;color:#413d35} + .pt-th-h b,.pt-sc-h b{font:700 20px Georgia,serif;color:#1b1a17;letter-spacing:.02em} .pt-th-i{font-style:italic;color:#6d766e} - .pt-th-list{display:flex;flex-wrap:wrap;gap:1px 20px;margin:2px 0 0;padding:0;list-style:none;font:400 15px/1.3 Georgia,serif;color:#3b3226} + .pt-th-list{display:flex;flex-wrap:wrap;gap:1px 20px;margin:2px 0 0;padding:0;list-style:none;font:400 19px/1.3 Georgia,serif;color:#3b3226} .pt-n{display:inline-block;min-width:1.3em;font-weight:700;color:#7a3b2e} - .pt-sc-r{font:600 14px Georgia,serif;color:#7a3b2e} + .pt-sc-r{font:600 18px Georgia,serif;color:#7a3b2e} .ws-cols{margin:0;padding:0;list-style:none} .ws-cols li{margin:0 0 6px;font:400 19px/1.45 Georgia,serif;color:#413d35} .ws-cols li b{color:#1b1a17} @@ -369,7 +370,7 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de .pray-box{display:inline-block;width:${PRAY_CELL - 12}px;height:${Math.round(CH - 22)}px;box-sizing:border-box;border:1.5px solid #b0a993;border-radius:5px;background:#fff;flex:0 0 auto} /* The three questions, ONCE per page, over the tally cells' own columns. */ .pray-head{position:absolute;inset-inline-end:${M}px;display:grid;grid-template-columns:repeat(${PRAY_COLS.length},${PRAY_CELL}px); - height:${PRAY_HEAD_H - 6}px;align-items:end;font:700 12px/1.2 Georgia,serif;color:#6f6a5c;text-align:center} + height:${PRAY_HEAD_H - 6}px;align-items:end;font:700 15px/1.2 Georgia,serif;color:#6f6a5c;text-align:center} .pray-head span{text-wrap:balance;padding:0 3px 5px;border-bottom:2px solid #3b463d} .fd-top{position:absolute;left:${M}px;top:${M + HEAD}px;width:${CW.toFixed(0)}px;height:${FD_TOP_H}px;overflow:hidden} .hd-r{position:absolute;right:${M}px;top:54px;font:400 19px Georgia,serif;color:#8c8170} @@ -1346,9 +1347,10 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de // Mark 5:18-20 and the Father's-heart list share this ONE sheet, in every locale: the sizes below are the // largest that fit the longest locale. class="points-body" is a TEST HOOK: the page must fit ONE sheet in // every locale (its scrollHeight within its clientHeight). - // ★ 2026-10-02: the prayer themes now head the page, so the points give back a little: 20 → 19px text and - // 10 → 6px between points (the heading stays 22). Measured in all 11 locales, the longest first. - const PT = { head: 22, sub: 19, text: 19, refs: 16, gap: 6, passage: 17 }; + // ★ 2026-10-02: the prayer themes now head the page at a size that reads on paper (19px, ~7.7pt), so the + // points give back a little: 20 → 18.5px text and 10 → 6px between points (the heading stays 22). Measured in + // all 11 locales: the tightest (fr) keeps 43px under the last point. + const PT = { head: 22, sub: 19, text: 18.5, refs: 16, gap: 6, passage: 17 }; // ⚠ ISOLATE EACH REFERENCE FOR BIDI. Scripture references stay in English // (a reader looks them up in their own Bible), so on an RTL page they are // LTR runs inside an RTL paragraph. Without isolation the Unicode bidi