368-736
document.documentElement.style.setProperty("--primary-color",d.cores?.primary||"#111");
document.documentElement.style.setProperty("--bg-card",d.cores?.card||"#fff");
document.documentElement.style.setProperty("--bg-body",d.cores?.body||"#f2f2f2");
document.documentElement.style.setProperty("--text-color",d.cores?.text||"#000");
/* ===== SINCRONIZA INPUTS + PREVIEWS ===== */
if(d.cores){
corPrimaria.value=d.cores.primary||"";
corCard.value=d.cores.card||"";
corBody.value=d.cores.body||"";
corTexto.value=d.cores.text||"";
atualizarPreview(corPrimaria);
atualizarPreview(corCard);
atualizarPreview(corBody);
atualizarPreview(corTexto);
}
});
window.salvarNome=()=>set(ref(db,"loja/nome"),nomeLojaInput.value);
window.salvarStatus=()=>set(ref(db,"loja/status"),statusSelect.value);
window.salvarWhats=()=>set(ref(db,"loja/whatsapp"),whatsInput.value);
window.salvarCores=()=>set(ref(db,"loja/cores"),{
primary:corPrimaria.value,
card:corCard.value,
body:corBody.value,
text:corTexto.value
});
window.lerBanner=i=>{
const r=new FileReader();
r.onload=()=>bannerImagem=r.result;
r.readAsDataURL(i.files[0]);
};
window.salvarBanner=()=>set(ref(db,"loja/banner"),bannerImagem);
onValue(ref(db,"produtos"),s=>{
produtosLista=[];
s.forEach(i=>{
produtosLista.push({...i.val(),id:i.key});
});
renderProdutos();
});
window.renderProdutos=()=>{
produtos.innerHTML="";
produtosLista
.filter(p=>p.titulo.toLowerCase().includes(buscaInput.value.toLowerCase()))
.forEach(p=>{
produtos.innerHTML+=`
`:""}
`;
});
};
window.lerImagemProduto=i=>{
const r=new FileReader();
r.onload=()=>imagemProduto=r.result;
r.readAsDataURL(i.files[0]);
};
window.salvarProduto=()=>{
const p={
titulo:titulo.value,
descricao:descricao.value,
preco:Number(preco.value)||0,
estoque:Number(estoque.value)||0,
imagem:imagemProduto||""
};
editando?set(ref(db,"produtos/"+editando),p):push(ref(db,"produtos"),p);
cancelarEdicao();
};
window.editarProduto=id=>{
get(ref(db,"produtos/"+id)).then(s=>{
const p=s.val();
titulo.value=p.titulo;
descricao.value=p.descricao;
preco.value=p.preco;
estoque.value=p.estoque;
imagemProduto=p.imagem;
editando=id;
});
};
window.removerProduto=id=>{
if(confirm("Excluir produto?")) remove(ref(db,"produtos/"+id));
};
window.cancelarEdicao=()=>{
titulo.value=descricao.value=preco.value=estoque.value="";
imagemProduto="";
editando=null;
};
window.addCarrinho = id => {
const produto = produtosLista.find(p => p.id === id);
if(!produto) return;
const itemCarrinho = carrinho.find(i => i.id === id);
const qtdNoCarrinho = itemCarrinho ? itemCarrinho.qtd : 0;
// 🚫 trava se ultrapassar estoque
if(qtdNoCarrinho >= produto.estoque){
alert("❌ Quantidade indisponível em estoque");
return;
}
if(itemCarrinho){
itemCarrinho.qtd++;
}else{
carrinho.push({...produto, qtd:1});
}
renderCarrinho();
};
function renderCarrinho(){
itens.innerHTML = "";
let total = 0;
carrinho.forEach(p => {
total += p.preco * p.qtd;
const div = document.createElement("div");
div.className = "item";
div.textContent = `${p.titulo} x${p.qtd}`;
itens.appendChild(div);
});
totalDiv.innerText = `Total: R$ ${(total + frete).toFixed(2)}`;
}
window.calcularFrete=()=>{
const cepLimpo = cep.value.replace(/D/g, "");
frete = cepLimpo.length === 8 ? 18 : 25;
freteInfo.innerText = `Frete: R$ ${frete.toFixed(2)}`;
renderCarrinho();
};
window.toggleCarrinho=()=>carrinhoDiv.classList.toggle("aberto");
${p.titulo}
${p.descricao}
R$ ${Number(p.preco).toFixed(2)}
${p.estoque > 0 ? `📦 Estoque: ${p.estoque}` : "❌ Esgotado"}
${modoAdmin?`
Carregando...