Landing hero built as a plain, fully editable Etch tree: section > container > an Arc wrapper holding six "Arc Photo Card" component instances positioned along a symmetric arc (three each side, CSS-only via nth-of-type, no gap in the middle) > a centred header (eyebrow, H1, subtext, primary + secondary CTA) sitting in the gap the arc leaves open. Only the card is a component, with typed props: image, alt, tone (neutral|sand|sage|sky|accent tints the card's edge highlight). Every option is a data attribute on the Arc element (edit it in Etch's attributes panel): data-theme (light|dark) re-themes the whole hero; data-arc (tight|normal|wide) how far the cards spread from the centre, default normal; data-parallax (true|false, default true) cards wobble toward the pointer as it moves over the hero (no-op on touch); data-reveal (true|false, default true) cards assemble into place, staggered, the first time the hero scrolls into view; data-radius (none|s|m|l|xl) card corner radius from the ACSS radius tokens. Card position, rotation and stacking are fixed by CSS custom properties written per nth-of-type card (no JS needed for layout), scaled in container-query units so the whole arc grows and shrinks with the hero's own width. Inline JS (skipped entirely under prefers-reduced-motion) does two small, independent things: when data-parallax="true" a pointermove listener over the arc sets two CSS custom properties (–mx/–my, normalised -1..1, eased with requestAnimationFrame) that every card's transform reads with its own depth multiplier, so outer cards drift further than inner ones; and when data-reveal="true" a one-shot IntersectionObserver adds a ready attribute the first time the hero enters the viewport, which the CSS transition (staggered per card by nth-of-type) uses to assemble the cards from a scattered, faded starting position into their resting arc. Without JS every card already sits in its resting arc position (progressive enhancement); parallax and the assemble transition are pure enhancement. :focus-visible rings on the CTAs, AA contrast in both themes, forced-colors support, pointer effects no-op on touch (`@media (hover: none)`).