Full-bleed editorial photo row built as a plain, fully editable Etch tree: section > container (eyebrow, h2, intro) > a panel row breaking out to the full section width, holding six "Duotone Panel" component instances (photo, photoAlt, eyebrow, caption), plus a shared native <dialog> lightbox. Only the panel is a component; duplicate, reorder or delete panels in Layers. Every other option is a data attribute on the panel row (edit it in Etch's attributes panel): data-theme (light|dark, default dark); data-tone (ember|frost|mono, default ember) duotone accent family used on hover and in the lightbox chrome; data-hover (duotone|zoom|caption|none, default duotone) hover/focus treatment on a panel; data-columns-desktop / data-columns-tablet / data-columns-mobile (default 6 / 3 / 2); data-gap (px, default 0 for edge-to-edge panels); data-lightbox (true|false, default true) click a panel to open the full-size viewer. Panels sit grayscale and edge-to-edge by default; on hover, focus or touch each panel washes into the chosen duotone tone (a colour-mix overlay fading in on mix-blend-mode: color) while its eyebrow/caption rise from a bottom scrim — or, with data-hover=zoom, the photo scales instead; data-hover=caption skips the colour wash and data-hover=none disables the panel treatment entirely (the panel still opens the lightbox). Clicking a panel (when data-lightbox is on) opens a shared dialog with the full photo, its caption, a live "n / total" counter, previous/next buttons, Escape and backdrop close, Left/Right arrow keys, and a touch swipe; focus moves to the dialog's close button on open and returns to the panel that opened it on close. Below 30em the row collapses to two columns. Reduced motion drops the wash/scale transitions to an instant swap. :focus-visible rings throughout, AA contrast in both themes, forced-colors borders.