Escopo CSS — tema vs editor
No editor, a loja fica num iframe. Um:root dentro desse iframe não pinta os botões Salvar e Publicar da barra, que estão no documento de fora.
Ainda assim, não grave tokens do tema em :root, html ou body:
- No
/preview, o tema e a página compartilham o documento principal. - A plataforma aplica as cores do painel Tema em
.cx-theme-scope(--brand-primary,--color-primarye as outras listadas em Settings globais), não no:root. - Dentro do iframe, o CSS do tema alcança o que a plataforma injeta nesse documento.
O problema (vazamento de CSS)
O que acontecia
O tema guardava cores (primária, secundária, botões, etc.) em variáveis CSS globais no:root — ou seja, no document.documentElement, que vale para a página inteira.
Exemplos de variáveis gravadas no lugar errado:
Fluxo típico:
- O lojista define a cor primária no painel Tema.
- A plataforma grava
--brand-primarye--color-primaryno elemento.cx-theme-scope. - Se o tema também grava a cor em
:rootou emdocument.documentElement, o documento que contém o tema herda esse valor.
Outros pontos que pioram o vazamento
Como a plataforma isola o tema
No editor, a Corvex aplica settings globais no canvas, na classe.cx-theme-scope (ThemePreviewScope):
- Variáveis de cor, fonte e esquema de cores vão no elemento escopo, não no
:root - O chrome do editor (barra, laterais, inspetor) fica fora do iframe e não recebe essas variáveis.
- Portais do tema usam
data-corvex-theme-portal-rootancorado ao preview.
ThemeSettingsScope no preview do editor e .cx-theme-scope na loja publicada. Não dependa de um :root escrito pelo tema.
Correção correta (autores de tema)
Regra de ouro
Todas as variáveis e resets do tema ficam dentro do container da loja, nunca emUse classes raiz estáveis por área::root,htmloubodysem escopo.
A plataforma já envolve o preview em
.cx-theme-scope. O tema deve repetir o escopo nas próprias folhas de estilo.
❌ Errado — variáveis globais
✅ Correto — escopo por raiz do tema
Settings globais do painel Tema
Ids comocolor_primary são mapeados para variáveis (--brand-primary, --color-primary, …) no escopo .cx-theme-scope pela plataforma. No CSS do tema, consuma com var(--brand-primary) dentro das suas classes raiz — não redeclare no :root.
Ver Settings globais.
Sections isoladas
Cada section deve prefixar estilos com a classe da section:Sintomas e diagnóstico
Como verificar: DevTools →
:root / html → procure custom properties do tema (--color_, --brand-, --btn_). Se existirem, o tema está vazando.
Checklist (agência / LLM)
Antes decorvex sync / publicar:
- Nenhum
:root { … }emassets/theme.cssou CSS de section/header/footer - Nenhum
document.documentElement.style.setPropertypara tokens do tema - Layout, header e footer com classe raiz própria (
.my-theme-root,.header-*-root,.footer-*-root) - Variáveis CSS definidas só nessas raízes (ou descendentes), não em
html/body - Seletores universais (
*,button,input,a) sempre prefixados com a raiz do tema - Classes utilitárias (
.container,.btn) com prefixo do tema ou BEM da section - Testar no builder: topbar e sidebars não mudam ao alterar cor primária no painel Tema
- Testar na vitrine: cores do tema continuam corretas no preview e na loja