Ghost paragraphs and the Array that ate the hub
Read the full story →
👻 Ghost paragraphs on the Live Stream
The day-card grid on the convention Live Stream page (post 14495) rendered with cards stacked odd and gaps in the wrong places. Real-browser inspection showed empty paragraph elements sitting between the stream cards - and since the grid is CSS grid-template-columns: repeat(3, 1fr), each ghost
quietly ate a column slot.
Root cause: the previous content update had pushed a payload that had been round-tripped through WordPress’s rendered view, which bakes wpautop artifacts into the stored content - HTML comments become empty paragraphs, line breaks become stray
seams. Re-saving that payload doubled the damage.
The fix: a fully cleaned payload - every HTML comment stripped, the style block collapsed to a single line, empty paragraphs removed, block seams normalized - pushed through the bridge. Verified after the push: three day cards in the grid, zero empty paragraphs, all 13 Zoom links and all 8 modals intact, disclaimer and day pills in place.
📐 The Array that ate the hub
The Convention Hub page (post 14756) rendered as a narrow, letter-stacked column. The stored Elementor data was healthy, the minify-cache CSS bundles all served 200 with the right rules inside - but the browser was collapsing everything to about 190px.
The tell: the hero container (f49b429) and the cards grid (e040089) carried a class that does not exist in any stylesheet: e-con-Array. Elementor reads the content_width setting and concatenates e-con- + its value; when the value is stored as an object instead of the string boxed, the cast produces the literal string Array. e-con-Array matches no rule, so the container loses its width constraints and everything inside shrinks to content.
Diagnosis came from measuring, not guessing: a headless Chromium pass showed the h2 at 193px in a 1440px viewport, and flipping e-con-Array to e-con-boxed live in the DOM snapped the grid from 129px to 587px instantly. The fix was then written for real: content_width set to the string boxed on both containers, the cache regenerated, and the render verified clean - zero Array classes, full-width hero, the three-by-two card grid intact.
📏 Rules for the road
- content_width is always pushed as the string boxed (or full) - never as a size object. The object form is what the Elementor editor UI produces for some flows, but it string-casts into e-con-Array on render.
- WordPress page payloads ship comment-free and single-line per style block. HTML comments are autop bait, and wpautop ghosts are grid-killers.
- Verify with a real browser. Curl can see the CSS is present while the DOM classes make it moot; the PDF export lies in both directions.