mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-01 07:58:23 +00:00
Motion foundation + expressive entrance/interaction polish for the webapp, following a "balanced" direction (restrained chrome, expressive canvas). Foundation - Motion tokens: --ease-*/--dur-* CSS vars (styles.css) mirrored as JS constants/presets in lib/motion.ts; prefers-reduced-motion respected. - Shared Reveal/RevealGroup primitive (components/motion) — fade-up + stagger. Chrome & navigation - Global route fade (components/motion/page-transition) keyed by section. - Sidebar active-indicator slide via framer layoutId + icon hover. Pages - Home: hero/eyebrow reveal, staggered launcher cards, spring lift/press hover, double-bezel cards, nested arrow chip. - Auth: AuthHeader staggers in (login+signup); form blocks cascade after. - Pricing: wire the orphaned data-reveal hero through the real Reveal. - Library: sliding active indicator on tab/filter switchers (layoutId), shimmer-sweep loading skeleton. Pagescene entrance animations (user-drop only) - EntranceAnimator: meshes get a transform-based pop/rise/fall drop with a rubbery squash overshoot; splats get a per-gaussian radial settle (Spark dyno) with center-out fade + height drop. Dev-only speed slider. Gallery + asset drag-under UX - On drag-start the gallery/asset modal becomes pointer-transparent so the drag passes under onto the canvas; steps back to translucent (reopen on) or eases fully out (reopen off), all interpolated. Shared DragGhost (lift/tilt/follow) feeds both DnD systems. Media fades to placeholders so thumbnails don't block the canvas. Asset modal always reopens fully visible. PageDraw: entrance fade on add + workspace vignette. Dev-only (local testing): drop setDevelopment() API host pin; add /__cdn proxy + maybeProxyCdnUrl so CDN splat/GLB assets dodge CORS.