Portfolio carousel built as a plain, fully editable Etch tree: section > container > arc (Swiper track with seven "Arc Frame" component instances splayed above the fold) > heading row (previous arrow, eyebrow-free H2 + intro + CTA link, next arrow) > pagination. Only the frame is a component, with typed props: photo (image), photoAlt, caption (empty hides the overlay label), tone (neutral|warm|cool|mono tints the frame edge); duplicate, reorder or delete frames in Layers. Every arc option is a data attribute on the Arc element (edit it in Etch's attributes panel): data-theme (light|dark) re-themes the whole section; data-tilt (deg, default 11) max rotation applied to the outermost visible cards; data-rise (em, default 1.6) how far cards arc upward as they move from centre; data-scale-step (0-1, default 0.1) size reduction per step away from centre; data-radius (none|s|m|l|xl) card corner radius from the ACSS radius tokens; data-aspect (portrait|classic|square|tall) card photo ratio 4:5, 3:4, 1:1 or 2:3; data-per-view-mobile / data-per-view-tablet / data-per-view-desktop (cards width as a fraction of the arc, defaults 1.6 / 2.6 / 3.6; breakpoints are the arc's own width, tablet from 42em, desktop from 64em); data-gap (px between cards, default 20); data-autoplay (true|false), data-delay (ms, min 1500), data-speed (transition ms, default 650); data-loop (true|false); data-pause-on-hover (true|false); data-drag (true|false; mouse drag + touch swipe); data-click-focus (true|false; clicking any card brings it to the centre); data-arrows (true|false, arrows sit either side of the heading); data-pagination (dots|fraction|none). Inline JS waits for a global Swiper 11 (injects the jsDelivr build once if nothing provides it), reads each slide's live Swiper "progress" every frame to drive a CSS custom property pair (signed –fas-p for tilt direction, absolute –fas-ap for rise/scale/opacity) so the fan silhouette continuously reflows as the arc drags or autoplays, is init-guarded, keeps loop and autoplay off inside the Etch builder, and wires keyboard arrows, the a11y module, pause on keyboard focus, a visible pause/play toggle and no autoplay or animated transitions under prefers-reduced-motion. Without JS the arc is a native scroll-snap row with controls hidden. Labelled section landmark, carousel region with aria-roledescription, :focus-visible rings, AA contrast in both themes, forced-colors support.