# Readability floor candidate

The predecessor silently caps plain/list text at 25 reference pixels, tags at 16 and table cells at 15 even when the selected composition minimum is 32. The same outcome is reproduced on Node 20 and 24. Direct width-only plain, rich and list fitting can also exceed 65 distinct size trials for a large nominal request. These observations are layout-policy failures, independent of raster or native font equivalence.

This unpublished candidate enforces the selected floor on painted scalar text and rich fragments, including list descriptions and superscript/subscript sizes. It keeps authored run metadata and relative size/script ratios. A small explicit run can therefore require a larger shared base size. The preexisting relative shrink limit remains in force: larger explicit runs do not acquire permission to shrink further. Text that cannot fit with these constraints reports overflow; strict composition rejects it. A tag receives enough vertical allocation for at least one line at its floor. Table allocation measures natural and floor sizes separately, consumes spare row space before shrinking, and preserves merged rows and cell content.

Plain, rich and list fitting now evaluates at most 65 candidate sizes and includes the floor as the final trial. This is a bound on candidate layouts, not total shaping calls or input length. For extreme requested sizes the final jump to the floor is conservative; this search does not promise the largest fitting size or globally optimal layout. The shared explanation is versioned `grid-score-v7`, and expansion above nominal size cannot produce a negative shrink penalty.

Source JSON, rich styles, point-size requests, metadata, reading order, explicit composition/weights and source ranges are retained. Existing requested point sizes remain unchanged in the source even when accepted output must scale them to honor a conflicting readability floor. The smallest actual rich fragment determines the extra lower bound; the base `fit.fontSize` is a layout scale and may differ from any painted run size.

Core passes its full suite on Node 20 and 24; renderer corpus review covers all 33 paired sheets for 262 changed slides plus six full-size before/after pairs. The 805-slide source-whitespace checkpoint remains the predecessor, with a separate readability baseline. The source browser harness passes 48 cases per runtime and independently verifies SVG computed sizes and editable PPTX run sizes; its four complete screenshots were inspected. Candidate installation and CI/review evidence are recorded in the companion evidence checkpoint. No release has been promoted. Native Office acceptance remains separate. Shared quote/code/metric parts retain their existing floor behavior. Template footers/page numbers, chart and timeline internals, font coverage, Auto arrange and broader repair remain part of the active goal.
