Editorial "journal" carousel built as a plain, fully editable Etch tree: section > container > header (eyebrow, h2, intro) > carousel wrapper > Swiper track > seven "Swell Frame" component instances > a control dock (arrows, pagination, scrollbar, autoplay toggle). Only the frame is a component, with typed props: image, imageAlt, category, title (duplicate, reorder or delete in Layers). Unlike a coverflow or arc carousel, cards stay flat and simply grow taller the closer they sit to the active slide — a continuous "skyline" silhouette driven by Swiper's own per-slide progress value on every frame (drag, autoplay or programmatic), not just on slideChange, so the swell tracks the drag in real time. Every option is a data attribute on the carousel wrapper (edit it in Etch's attributes panel): data-theme (light|dark); data-amplitude (s|m|l) how much taller the active card swells above its neighbours; data-per-view-mobile / data-per-view-tablet / data-per-view-desktop (decimals give a peek, defaults 1.3 / 2.6 / 4.2); data-gap (px between cards, default 20); data-autoplay (true|false), data-delay (ms), data-speed (ms); data-loop (true|false); data-drag (true|false); data-arrows (true|false) · data-arrows-position (sides|sides-outside|top-start|top-end|bottom-start|bottom-center|bottom-end|overlay-bottom-end) · data-arrows-style (circle|square|pill|minimal); data-pagination (dots|lines|progress|fraction|numbers|none) · data-pagination-position (bottom-center|bottom-start|bottom-end|top-start|top-end|overlay-bottom|side-start|side-end); data-controls-layout (split|grouped); data-scrollbar (true|false); data-autoplay-button (true|false); data-arrows-mobile (true|false). Inline JS waits for a global Swiper 11 (injecting the jsDelivr build once if nothing else provides it), is init-guarded, keeps loop/autoplay off inside the Etch builder, and wires keyboard arrows, the a11y module, a native draggable scrollbar, a visible pause/play toggle and no autoplay/animated swell under prefers-reduced-motion. Every arrows/pagination position combination stays reachable, non-overlapping and contrast-safe at 390 and 1440 (overlay positions get a scrim). Without JS the track is a native scroll-snap row at a flat height and the controls stay hidden.