Root cause of the missing home hero: the hero built-in's styled-text
fields (eyebrow/headline/subheadline, schema type=object x-editor=
styled-text) were seeded as BARE STRINGS. The override reads
`headline.text|default:headline`; ninjatpl hard-errors on `.text` field
access against a string ("can't access a field by name on type string")
BEFORE the |default filter runs, aborting the whole hero render → the
section rendered nothing, leaving a large void at the top of the page.
Fixed by seeding the object form `{ "text": "..." }` (matches the
built-in schema + sample). Same latent bug affects any theme that seeds
bare strings into hero styled-text fields.
Whitespace / layout:
- cm-section padding 4rem -> 3rem (3.5rem >=768px); cm-section-tight
2.5rem -> 2rem. Kills the stacked ~8rem inter-section dead bands so the
Swiss grid reads precise, not empty.
- hero padding 5rem -> 3.5rem.
Empty-media hardening:
- hero split variant only renders its media frame when backgroundImage
is present (was an unconditional 4/3 muted box -> balloon).
Mobile:
- cm-form-grid now single-column base, 2-col >=640px (was fixed 2-col ->
cramped half-fields at 375px); mirrored in the contact-form scoped
style which wins on specificity.
- mobile nav toggle min 44x44 tap target.
No version bump. make + check-safety both exit 0.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>