Carrinho de compras
Seu carrinho está vazio

Atendimento

Frete Grátis

Compras Acima de 1200

Pague com Pix e Ganhe

10% de Desconto

Pague com cartão

em até 12x s/ juros

Tire suas dúvidas

por Whatsapp

Tutoriais e Manuais

Precisando de uma ajudinha?

Preparamos um guia completo para você tirar suas dúvidas e conseguir tirar o melhor proveito da sua Chopeira About Beer.

Clique aqui para baixar
 

 

 

';anchor.parentNode.insertBefore(bar,anchor);} var pct=Math.min(100,Math.round(val/FREE_SHIP*100)),rem=Math.max(0,FREE_SHIP-val); var html=(rem<=0)?(String.fromCodePoint(0x1F389)+' Você ganhou frete grátis!'):('Faltam '+brl(rem)+' para o frete grátis '+String.fromCodePoint(0x1F69A)); var key=html+'|'+pct+'|on'; if(bar.getAttribute('data-st')===key)return; /* nada mudou: não reescreve (evita re-disparar o observer) */ bar.setAttribute('data-st',key); bar.style.display=''; bar.classList.toggle('is-free',rem<=0); bar.querySelector('.ab-freeship__msg').innerHTML=html; bar.querySelector('.ab-freeship__fill').style.width=pct+'%'; } if(window.__abCart)return; window.__abCart=true; /* Frete grátis: acha a linha grátis na tabela de estimativa, realça, vira badge e move pro TOPO (a mais barata é grátis mas some no meio -> pessoa não vê). */ /* IMPORTANTE: regex 100% ASCII. O inline script e servido em iso-8859-1 e acentos viram mojibake (o [aa] com acento quebrava). "gr.tis" casa "gratis"/"gratis-com-acento" pois o "." casa o caractere do meio. */ function highlightFreeShipping(){ var tables=document.querySelectorAll('.shipping-rates-table'); var reFree=/gr.tis/i; for(var i=0;i✓ $1'); } } } } if(free && firstData && free!==firstData){ tbody.insertBefore(free, firstData); } /* Clarity: captura CEP (prefixo 5) + prazo do frete gratis, 1x por calculo, pra entender se prazo longo e distancia (CEP) ou transportadora lenta. */ if(window.clarity && free && !tables[i].__abTracked){ tables[i].__abTracked=true; try{ var cepEl=document.querySelector('#zip'); var cepv=cepEl?String(cepEl.value||'').replace(/\D/g,''):''; if(cepv.length>=8) window.clarity('set','frete_cep', cepv.slice(0,5)+'-'+cepv.slice(5,8)); var dm=(free.textContent||'').match(/(\d{2})\/(\d{2})\/(\d{4})/g); if(dm && dm.length){ var pp=dm[dm.length-1].split('/'); var days=Math.round((new Date(+pp[2],+pp[1]-1,+pp[0]) - new Date())/86400000); window.clarity('set','frete_prazo_dias', String(days)); window.clarity('set','frete_prazo', days<=3?'1-3 dias':days<=7?'4-7 dias':days<=14?'8-14 dias':'15+ dias'); } }catch(_){} } } } /* Caixa "Escolha a cor" do kit: a Tray escreve "Cores disponiveis( Preto )" (sem dois-pontos, com espaco dentro do parenteses) via JS nativo assim que uma cor e selecionada. Reformata pra "Cores disponiveis: (Preto)". Historico (3 bugs ate chegar nessa versao): 1) rodava so dentro do run() geral, que so dispara em mutacao de childList em document.body -- numa PDP parada isso podia nunca acontecer, entao nunca rodava. 2) 1o fix regex nao contava um ":" ja existente -- rodando de novo em cima do proprio resultado ("...: (Preto)") ia empilhando outro ":" a cada ciclo, virando "::::::" rapidinho. 3) trocar de cor DEPOIS da 1a vez parou de atualizar o nome -- a REGEX fazia find/replace em cima do texto JA REFORMATADO por nos, e o JS nativo da Tray (que espera o formato ORIGINAL dele, sem os dois-pontos que a gente injetou) nao reconhecia mais o padrao pra trocar o nome da cor -- ficava travado na 1a cor pra sempre. Por isso agora reconstroi do ZERO a cada vez, a partir da FONTE DA VERDADE (o swatch com a classe cor_selecionada, nao o texto que a gente mesmo escreveu por cima antes) -- nunca depende do proprio resultado. */ function abWatchKitColorText(){ function fixOne(cor){ var t=cor.querySelector('.texto_variacao'); if(!t) return; var sel=cor.querySelector('img.cor_selecionada, .cor_selecionada'); var nome=sel?(sel.getAttribute('title')||sel.getAttribute('alt')||'').trim():''; var desired=(nome?('Cores dispon'+String.fromCharCode(237)+'veis: ('+nome+')'):'Cores dispon'+String.fromCharCode(237)+'veis'); if(t.textContent!==desired) t.textContent=desired; } [].forEach.call(document.querySelectorAll('.is-kit .cor_variacao'), function(cor){ if(cor.__abColorTextObserved) return; cor.__abColorTextObserved=true; var obs=new MutationObserver(function(){ obs.disconnect(); fixOne(cor); obs.observe(cor, {characterData:true, childList:true, subtree:true, attributes:true, attributeFilter:['class']}); }); fixOne(cor); obs.observe(cor, {characterData:true, childList:true, subtree:true, attributes:true, attributeFilter:['class']}); }); } /* Sem isso o abWatchKitColorText() so roda dentro do run(), que so dispara quando ALGO muda o childList de document.body -- numa PDP de kit parada (cliente so troca de cor, sem abrir carrinho nem nada) as vezes isso nunca acontece, entao a funcao nunca chegava a rodar nem uma vez (confirmado ao vivo: __abColorTextObserved nunca ficava true). Poll proprio, independente do run(), garante que sempre roda cedo ou tarde -- a guarda interna (__abColorTextObserved) ja deixa chamadas repetidas praticamente de graca pros elementos que ja foram vistos. */ setInterval(function(){ try{ abWatchKitColorText(); }catch(e){} }, 700); function run(){ /* realce do frete grátis na tabela de estimativa (produto) */ try{ highlightFreeShipping(); }catch(e){} /* nome do produto abreviado + "ler mais" no modal do carrinho */ try{ abTruncateNames(); }catch(e){} /* precos do order bump com centavos (BRL) */ try{ abFixRecPrices(); }catch(e){} /* "Finalizar compra" + "Limpar carrinho" no modal */ try{ abEnhanceCartModal(); }catch(e){} /* Pix (a vista) no item e no total do carrinho */ try{ abCartPix(); }catch(e){} /* mesmo Pix no carrinho lateral (sidebar) */ try{ abSidebarPix(); }catch(e){} /* +/- de quantidade em cada item do carrinho (modal e sidebar) */ try{ abAddCartQtyStepper(); }catch(e){} /* Caixa "Escolha a cor" do kit: reformata "Cores disponiveis( Preto )" nativo pra "Cores disponiveis: (Preto)" -- ver abWatchKitColorText() mais abaixo (funcao dedicada, precisa de observer proprio, o MutationObserver geral daqui so pega childList e nao reage quando o cliente troca de cor de novo). */ try{ abWatchKitColorText(); }catch(e){} /* carrinho vazio: renomeia "Fechar carrinho" -> "Continuar comprando" (o texto vem do JS nativo do tema; so trocamos o texto, o handler de fechar continua o mesmo) */ try{ var rc=document.querySelector('.plugoo-cart-preview-sidebar .pg-return-nocart'); if(rc && /fechar/i.test(rc.textContent||'')) rc.textContent='Continuar comprando'; }catch(e){} /* acessibilidade: cards de noticia (blog) sao injetados por JS e o link da imagem (#noticia_imagem a) fica sem texto/alt -> leitor de tela nao entende. Aplicamos o titulo da noticia como aria-label do link + alt da imagem. Puramente aditivo. */ try{ abFixNewsA11y(); }catch(e){} /* "no Pix com X% de desconto" + linha do parcelado (preco da PDP) -- confirmado ao vivo que mudar a quantidade faz a Tray reescrever o miolo do preco e apagar esses spans (sem esse script rodando de novo, nunca mais voltavam). Definido no OUTRO