The stylesheet
Compile to a path inside the theme root, and commit the output:
The compiled stylesheet is a committed artifact. The published bundle is the
theme root, so a stylesheet produced only by a local build step is absent from
the bundle.
Publishing rejects a bundle whose templates link a root-relative stylesheet it
does not contain:
Without the check, the theme publishes and every store using it renders
unstyled HTML.
Only literal root-relative href values ending in .css are verified. A CDN
link or an href containing ${ } is not checked.
slurp gitignore writes a .gitignore for a theme, including the files that
must not be ignored.
Accent colours
An accent is a color setting applied as CSS custom properties.
Store RGB channels, not hex:
A hex value satisfies the first rule and produces invalid CSS in the second.
Every opacity modifier breaks, with no error reported.
Define window.__bsApplyAccent(name) to let the builder recolour the preview
live. Without it, a merchant’s colour change is not visible until reload. See
The builder.
Fonts
Request fonts through the platform, which serves them from the store’s own
origin:
Do not link a font CDN. Doing so sends the buyer’s IP address to a third
party, which the merchant cannot consent to on the buyer’s behalf.
Families are restricted to an allowlist. Unlisted families and weights are
ignored rather than approximated. See
Platform assets.
Dark mode
Dark mode is entirely the theme’s responsibility. A theme can be dark-only,
light-only, or provide a toggle backed by its own Alpine store.
Static assets
Any non-template file in the bundle is served as a static file. Assets
referenced from a marketplace listing resolve to content-addressed URLs with a
one-year immutable cache, so a changed file produces a changed URL.
Merchant-uploaded images are not theme assets. They come through the media
pipeline and arrive in settings as URLs.