Scope
- Add
carousel (from the canonical const) to feature's layout matches — trivial now that the axis + data-layout emission exist (WORK-467). - Map
feature's item container/items onto the shared contract ([data-name="items"] / [data-name="item"]) so the generalised behavior binds with no per-rune behavior code. - Add CSS for the carousel track on
feature; wire the collapse-to="carousel" option (WORK-473) so layout="grid" collapse-to="carousel" gives grid-desktop / swipe-row-mobile. layout="carousel" is an all-viewport carousel (graceful degradation); an explicit desktop carousel shows the JS nav affordances (via the shared behavior).
Acceptance Criteria
feature accepts layout="carousel", emits the shared contract, and styles the track.- An explicit desktop carousel shows the JS nav affordances; no new behavior code was added for
feature. - CSS-coverage passes for the new
feature [data-layout="carousel"] selectors.
Dependencies
- WORK-467 —
feature's layout axis + emission. - WORK-472 — the block-agnostic behavior
feature binds to. - WORK-473 — the collapse-to-carousel option being wired.
References
- Spec: SPEC-100 Phase B.5.
plugins/marketing/src/tags/feature.ts, plugins/marketing/src/config.ts (Feature).
Resolution
Completed: 2026-06-25
Branch: claude/spec-100-carousel-layout-mode
What was done
plugins/marketing/src/tags/feature.ts — layout matches now include LAYOUT.carousel.plugins/marketing/src/config.ts — autoLabel marks the feature-items dl as data-name="items" (the shared carousel track token; renamed from definitions).packages/skeleton/styles/runes/feature.css + packages/lumina/styles/runes/feature.css — .rf-feature__definitions → .rf-feature__items throughout.- Shared carousel CSS/behavior (WORK-472) drive feature's carousel with zero feature-specific behavior code; slides are the dl's children; default slide width via
--rf-carousel-slide. plugins/marketing/test/feature.test.ts — carousel acceptance + collapse-to + slides-as-dl-children. Contracts regenerated.
Notes
- Track marker reuses
data-name="items" per the maintainer's decision (feature renamed its container rather than introducing a dedicated attribute). - The dispatch (WORK-471) mounts the shared
carouselBehavior on feature's [data-layout="carousel"] host, so the desktop JS nav appears with no per-rune code. Follow-on (noted in WORK-471): the adapter behavior-bundle heuristic should also count [data-layout] layout-mode behaviors so a carousel-only page ships the bundle.