feat(v2): interactive 3D box art on game detail hero

Adds an RBox3D primitive that builds a rotatable, fake-3D game box from
three flat ScreenScraper scans (front, back, spine) using CSS 3D
transforms. Box proportions derive from the images themselves; it rotates
via pointer drag, arrow keys / gamepad D-pad, and the right analog stick,
drifts gently when idle, and honours prefers-reduced-motion.

The game detail hero (CoverColumn) upgrades to the spinning box when the
"3D box" boxart style is selected and the rom has the full set of faces,
falling back to the flat cover otherwise.

Backend: persist the box-2D-side (spine) scan locally, mirroring the
existing box-2D-back handling — new BOX2D_SIDE media type + box2d_side_path
on ss_metadata, opt-in via scan.media.

- RBox3D primitive + Storybook story (controls + keyboard-rotation play())
- useBoxFaces composable resolving the three faces + a `complete` gate
- box3d-alt i18n key across all locales
- backend BOX2D_SIDE persistence + tests

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019itLXRfJXGGbhPY3JyqnuN
This commit is contained in:
Claude
2026-06-22 21:45:39 +00:00
parent 5dfe72b1e8
commit 77980a79ec
29 changed files with 830 additions and 1 deletions

View File

@@ -133,6 +133,7 @@
# - video_normalized # Normalized video (smaller file size than video)
# # Media used for batocera gamelist.xml export
# - box2d_back # Back cover art
# - box2d_side # Box spine (enables the interactive 3D box on detail pages)
# - logo # Transparent logo
# # Other media assets (might be used in the future)
# - marquee # Custom marquee