Replace the home hero with a spring carousel and default theme to light.

Adds Carousel under keep-alive-safe autoplay, peeks side cards past the container, and stops following the OS dark preference on first run.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
s.esmaeili
2026-10-16 10:24:59 +03:30
co-authored by Cursor
parent 5c7bb6672a
commit 284ced1c89
5 changed files with 553 additions and 8 deletions
@@ -0,0 +1,37 @@
# Home Carousel — spring physics cards
**Status:** approved
**Date:** 2026-10-16
**Scope:** `apps/user-app` home (`Carousel.vue` below `ShowcaseSlider`)
## Intent
A Framer-style spring carousel under the existing crossfade hero: center card large, side cards scaled down, infinite wrap, drag/flick with spring settle. Same admin slide images as `ShowcaseSlider`.
## Decisions
| Choice | Decision |
|--------|----------|
| Stack | Pure Vue SFC (no Swiper / Motion) |
| Name / path | `components/home/Carousel.vue` |
| Placement | Immediately below `ShowcaseSlider`, above `CategoryRail` |
| Data | Same `slides` computed from admin home slider |
| Props | `slides` (+ optional spring/layout knobs with defaults) |
| Dots | Yes, pill style aligned with showcase |
| Out of scope | Demo inspector panel, Prev/Next chrome, new admin API |
## Motion defaults
- `sideScale`: 0.60
- `gap`: 14px
- `borderRadius`: 22px (match ShowcaseSlider)
- Frame `aspect-ratio`: `320 / 208` (match ShowcaseSlider); center card full-bleed
- `stiffness`: 180
- `damping`: 22
- Internal layout `direction: ltr` (gesture still screen-space)
- Autoplay off by default; respect reduced-motion when enabled later
## Non-goals
Replacing `ShowcaseSlider`, inventing slide destinations, or adding external animation libraries.