Skip to content

Preserve authored media presentation and slideshow behavior - #1505

Open
chubes4 wants to merge 7 commits into
trunkfrom
fix/media-cascade-parity
Open

Preserve authored media presentation and slideshow behavior#1505
chubes4 wants to merge 7 commits into
trunkfrom
fix/media-cascade-parity

Conversation

@chubes4

@chubes4 chubes4 commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Summary

  • resolve native button border neutralization against the full effective cascade and preserve authored side borders
  • bake cascaded SVG paint into deterministic standalone assets and retain authored image focal positioning
  • preserve stretch-derived and self-establishing grid geometry so absolutely positioned image slides keep their resolved height
  • recognize explicit authored slideshows as editable image carousels with bounded autoplay, crossfade timing, wrapping, interaction pauses, and reduced-motion behavior

Verification

  • composer test
  • PHP lint on changed PHP files
  • git diff --check
  • exact full captured homepage transform: two responsive slideshow blocks, each with four core/image children, 4-second autoplay, 1-second transition, and valid block serialization
  • immutable package: SSI 4bb3bb726e51, Blocks Engine a316e0085b92, ZIP SHA-256 4c5c6dd42e98964c11e4bb6818d112dd0d4a143321782041dfaf21e2650b3dc7
  • fresh nine-page import: 4,530 native blocks and zero fallback, core/html, freeform, invalid, content-loss, unsafe-SVG, SVG-materialization, or interaction-parity failures
  • browser runtime at http://localhost:8913: distinct slide advancement at 4.2s and 8.4s, hover pause/resume passed, reduced-motion pause passed, and zero console errors
  • Gutenberg homepage: both responsive slideshow blocks valid and editable with four image children; zero invalid or missing blocks
  • current-trunk control vs branch media evidence:
    • native button: 0px none to 1px solid
    • hero slides: 538x0 to 538x402
    • one shared unpainted SVG asset to three deterministic paint-baked assets matching authored colors
  • Contact and Piano editor checks: zero invalid/missing blocks or warnings, frontend 200, and zero frontend console errors

Scope

This restores captured static media presentation and explicit authored slideshow behavior through generic transformer and companion-block contracts. The unrelated homepage card hover behavior remains outside this PR because it is absent from the captured CSS/runtime evidence.

AI assistance

OpenCode with Claude Sonnet 5, GPT-5.6 Terra, and GPT-5.6 Sol was used to investigate cascade, geometry, and slideshow behavior; implement and review regression-tested fixes; run package/import verification; and compare browser behavior against the source. Chris Huber directed the scope and reviewed the rendered evidence.

The generated button border neutralizer decided whether a control had no
border by inspecting only the `border` shorthand from the resolved source
cascade. When a CSS reset zeroed the shorthand (e.g. `a { border: 0 }`) but
a later, higher-specificity rule declared the real border through longhands
(`border-top`/`-right`/`-bottom`/`-left`, or `border-width`/`-style` and
their per-side variants), the neutralizer still fired and force-killed the
authored border with `border-style:none!important`/`border-width:0!important`,
even though the engine had already transposed that border correctly
elsewhere. This is most visible with `var(...)`-driven custom-property
borders, which cannot be proven zero by the shorthand check at all.

Only suppress the neutralizer when none of the shorthand or longhands
contribute a visible border; treat any longhand referencing `var(...)`/
`calc(...)` as potentially visible since it cannot be resolved statically.
…h sizing

receivesDefiniteBlockSize() disqualified a stretch-derived-size candidate
whenever its min-height was a literal zero, treating it the same as a
genuine intrinsic-sizing keyword (min-content). A zero minimum imposes no
floor and never itself prevents grid/flex stretch from resolving an
item's height -- page builders commonly pair it with height:auto
specifically to opt out of the browser's default min-height:auto.

Separately, the heuristic only modeled top-down stretch propagation from
an ancestor's definite size. A CSS Grid container with height:auto sizes
itself, bottom-up, to its own row tracks; when a track's minimum sizing
function is itself definite (a length, or minmax(<length>, ...)), the
container's auto height is definite too, independent of any ancestor.
Neither gap was reachable by the previous synthetic fixture, which put a
literal pixel height at the top of its chain and never declared a zero
min-height anywhere in it -- which is why the prior fix passed its own
test while remaining broken on the real captured document.

Reproduced against the real rmamusiclessons.com capture (both the full
document and a minimized excerpt of it): #comp-motpujyc3,
#comp-motpujyc3 .comp-motpujyc3-container, and [id^="comp-motpujyg1__"]
all collapsed their fractional row track to min-content before this fix
and keep it after, with zero fallback blocks and the authored
object-position focal point intact throughout.
@chubes4 chubes4 changed the title Preserve cascaded media and native button presentation Preserve authored media presentation and slideshow behavior Sep 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant