"A uniform font-size declaration still triggers glyph corruption"
▸ > **⚠️ SUPERSEDED (OWNER-SETTLED, ENGINE 26.07.22).** THE THEORY BELOW WAS ROOT-CAUSED ENTIRELY
from
camera_screenshotevidence. The owner subsequently confirmed that panels with these exactfont-sizedeclarations render pin-sharp on the physical screen, so the glyph-block corruption is a capture-path artifact only, produced somewhere in the MCPcamera_screenshotpipeline, not by the UI, the font, or any stylesheet property. Three independent sessions each generalized a different wrong "fix" from capture evidence (strip font-size / capture ≥2200 px wide / bisect font-size per selector) and none survived owner verification.Operative rules that replace the recipe below:
- Never strip
font-size(orletter-spacing) from a shipping stylesheet to "fix" captures: the live render is already correct; there is nothing to fix.- Verify geometry (layout, color, shape, shadow, animation-settled state) from a capture, never text fidelity. Text-block corruption in a capture is not evidence of anything about the panel.
- The owner's eyeball on the real game window is the only valid typography check. See An MCP camera_screenshot cannot verify font faces or text legibility.
Mechanism found (engine 26.07.22, 2026-07-31, controlled single-variable A/B in one live scene), and it agrees with the settled verdict: the trigger is the root panel's scale, not any stylesheet property. A
ScreenPanelleft on its defaultAutoScreenScalerenders at a fractional scale, and at a fractional scale the capture path rasterizes glyph runs as solid grey blocks. SetAutoScreenScale = falseandScale = 1on that same ScreenPanel, capture again, and every glyph is pin sharp. Never ship a panel pinned to scale 1 to work around this; the artifact is in the capture path, the live render was always correct.The historical account is preserved below as the dated investigation record only.
▸ SYMPTOM
Every text run in a ScreenPanel renders as solid filled blocks instead of readable glyphs. The corruption affects the entire panel, not just specific elements. The panel uses a single shared font-size value (e.g. 14px) declared uniformly on every text element, with no letter-spacing declarations.
A sibling panel in the same project with no font-size declarations renders all text crisp.
▸ CAUSE
The glyph-corruption bug is triggered by the presence of a font-size declaration itself, not by variety or count of distinct values. A single uniform font-size value applied to every element is not safer than mixing multiple sizes. The declaration is what pushes the font atlas into its corrupted state.
This extends the known cumulative-text-count trigger: even a stylesheet that looks "safe" (one shared size, no letter-spacing) crosses the corruption threshold.
▸ FIX
The recipe recorded here was "remove every font-size and letter-spacing declaration from the stylesheet". Do not follow it; see the banner at the top. The current rule is the opposite: never strip those declarations from a shipping stylesheet to fix captures, because the live render is already correct.
To make text legible in a capture at all, pin the panel under test to AutoScreenScale = false, Scale = 1 at runtime (an MCP set_component on the ScreenPanel, no code change, gone at play-stop), then capture. That also makes geometry measurable with a ruler instead of a scale factor. The owner's eyeball on the real game window remains the acceptance route for typography.
▸ WHY IT WORKS
The "font atlas enters a corrupted path" explanation was inferred from capture evidence alone, and capture-evidence conclusions about font and glyph rendering are unreliable by demonstrated history: three sessions produced three different wrong generalizations. The controlled A/B that finally settled it changed one variable, the root panel's scale, and reproduced both outcomes on the same stylesheet. Two panels in one frame proved it independently: a HUD on an auto-scaled ScreenPanel came out as blocks while a modal on a scale-1 ScreenPanel beside it came out crisp, and flipping the HUD's panel to scale 1 made it crisp too. That is why the artifact appeared to vary by element and by capture size; both were proxies for which panel's scale happened to be fractional.
- Owner-settled (26.07.22): the font-size-declaration causation is a capture-path artifact. Added a superseded banner and neutralized the strip-font-size recipe, which the newest source explicitly says never to do. Added the root-panel-scale mechanism.
- Published