"A uniform font-size declaration still triggers glyph corruption"
▸ 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
Remove every font-size and letter-spacing declaration from the stylesheet entirely. Let all text elements inherit the engine's default font size.
For a shipping or library panel, the verified-safe form is zero font-size declarations and zero letter-spacing declarations anywhere in the panel's CSS.
To diagnose, use a play-mode camera_screenshot(includeUi: true) zoomed to native pixel resolution. Do not rely on headless rendering, which may not reproduce the atlas state.
▸ WHY IT WORKS
Omitting font-size prevents the engine's font atlas from entering the corrupted rendering path. The engine default size is applied internally without triggering the per-element atlas allocation that leads to the filled-block rendering. Verified live: removing the declarations in the same session (same panel, same fonts) immediately restored crisp text with no editor restart needed.
- Published