template: yellow_white_rose_floral_01 · All answers from actual code paths and live DB record
is_active=true and mask_bands exists in the database.hooks/useTemplateGeometry.jslib/maskGeometry.js → maskBandsToLayout()lib/compositionEngine.js → paginateItems()lib/templateGeometry.js → getCanvasGeometry()yellow_white_rose_floral_01 falls through topdfH: STD_H — STD_H = 1120// Line 239–243:
const pdfH = layout.pdfH; // ← comes from whichever path wins above
const bottomY = pdfH - layout.marginBottom; // top-down hard stop
const bottomPdfY = pdfH - bottomY; // pdf-lib bottom-up equivalent
// Line 401: the actual page-break fire condition:
if (curPdfY - lineHeight < bottomPdfY) {
flushPage(); // ← page break fires HERE
}
// If Path B is active (no mask): pdfH=1120, bottomY=989, bottomPdfY=131
// If Path A is active (mask): pdfH=1080, bottomY=mask-derived, bottomPdfY accordinglypaginateItems(). The only difference is what layout.pdfH is.// PATH B (no mask, STD_H=1120): // layout.pdfH = 1120, layout.marginBottom = 131 // bottomY (top-down) = 1120 - 131 = 989 // bottomPdfY (pdf-lib) = 1120 - 989 = 131 // Page break: curPdfY - 25 < 131 → fires when curPdfY < 156 // Top-down equivalent: pdfH - 156 = 964 → text written until ~y=964 top-down // → PHANTOM ZONE y=949–989 IS reachable // PATH A (mask active, pdfH=1080): // layout.pdfH = 1080 (from record.pdf_h = 1080) // layout.marginBottom = pdfH - maskBands.last.yEndPct * pdfH // bottomY derived from mask — matches PDF runtime exactly // → PHANTOM ZONE is outside writable region — not reachable