npm ci fails on alpine when lock file was generated on a different npm
version. --legacy-peer-deps handles the styled-components peer dep too.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Builds studio/ separately during Docker build and copies output to
public/studio/ so it is served as static files by the Astro Node adapter.
Catch-all route redirects deep studio links back to /studio for SPA routing.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>