Self-animating product filmstrip built as a plain, fully editable Etch tree: section > container > header (eyebrow, h2, intro) > a dotted-backdrop rail holding seven "Product Frame" component instances > a native <dialog> lightbox with prev/next, a counter and a caption. Only the frame is a component, with typed props: image, imageAlt, caption (empty hides the caption bar), badge (empty hides it). Every option is a data attribute on the rail (edit it in Etch's attributes panel): data-drift (true|false) the rail slowly auto-scrolls back and forth on its own; data-speed (px/sec drift speed, default 26); data-pause-on-hover (true|false, default true); data-drag (true|false) manual pointer drag / touch swipe scrolling; data-stagger (true|false) alternating cards sit slightly higher/lower for a kinetic rhythm; data-tilt (true|false) hover/focus lift + tilt on each card; data-dots (true|false) dotted backdrop; data-lightbox (true|false) click a card to open it full-size; data-theme (light|dark). Inline JS (no library) gently auto-scrolls the rail back and forth with requestAnimationFrame (pausing on hover, focus and touch, and never running at all under prefers-reduced-motion), supports pointer-drag/swipe scrolling, and lifts + tilts a card toward the pointer on hover/focus. Clicking or pressing Enter/Space on any card opens the shared lightbox: the dialog crossfades in, Prev/Next buttons and the ←/→ keys move between photos, Escape and the backdrop close it, a touch swipe on the image changes photos, and focus returns to the card that opened it. Without the lightbox enabled the cards are still fully keyboard-focusable, just not activatable; the rail itself always stays a native scroll-snap row so it works without JS.