Do I need separate routes per theme?
No. One route tree; skins viatemplateEntry / StorefrontThemeProvider / getStorefrontSkin. Homes use per-theme *Template.tsx; browse/detail share skins.
Why does preview still look like my applied theme?
Preview must also setdata-storefront-theme chrome. Use /?__theme_preview=<themeId> while signed into admin — not as an anonymous visitor.
Why did my SEO change after Apply?
It should not. Apply restores look presets only; SEO/product/content keys are global (seo_*, page_about_seo_*, articles SEO). Re-check Brand & Experience SEO fields.
Can I upload a custom theme zip in the gallery?
APIs exist, but gallery upload/export/uninstall UI is currently hidden (SHOW_THEME_PACKAGE_IO_UI = false). Treat as roadmap in the UI.
Uploaded zips are theme.json + config.json only — they cannot add new React templates; they must target a built-in templateEntry. Built-in ids (streamly, streamlix, streamtube) cannot be overwritten. Install never auto-Applies.
Streamlix looks square but Streamly should be rounded — is that a bug?
No — intentional isolation. Streamlix usessharp: true + buttonChrome: "flat" and CSS scoped to html[data-storefront-theme="streamlix"]. Streamly keeps soft radius + bevel CTAs.
Does StreamTube support light mode?
Yes as a capability (supportsLightMode: true in theme.json). Streamly and Streamlix set it false. Drive admin UI from capabilities, not hardcoded ids.