Assinatura
[et_pb_section fb_built="1" fullwidth="on" admin_label="Hero" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" global_colors_info="{}"] 02 · HERO — só HTML ═══════════════════════════════════════════════════════════════ -->
Quem notifica todo mês merece o melhor preço por envio. Receba créditos automaticamente todo mês, com preço unitário a partir de R$ 4,00. O que não usar acumula com validade de 24 meses. Assinar agora Simular minha mensalidade
[/et_pb_fullwidth_code][/et_pb_section][et_pb_section fb_built="1" fullwidth="on" admin_label="PREÇO POR VOLUME MENSAL + CALCULADORA" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" global_colors_info="{}"] 03 · PREÇO POR VOLUME MENSAL + CALCULADORA — HTML + JS próprio Módulo AUTOCONTIDO: traz o próprio no fim do arquivo.<!-- [et_pb_line_break_holder] --> A calculadora, o slider dourado e o botão de checkout funcionam<!-- [et_pb_line_break_holder] --> só com este módulo colado — não dependem do arquivo 09.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> ⚠ Por isso o 09-JS-GLOBAL.txt NÃO tem mais a calculadora. Se um<!-- [et_pb_line_break_holder] --> dia ela voltar para lá, remova o <script> daqui — as duas<!-- [et_pb_line_break_holder] --> versões rodando juntas duplicam eventos no GTM.<!-- [et_pb_line_break_holder] --> ═══════════════════════════════════════════════════════════════ --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><section id="precos"><!-- [et_pb_line_break_holder] -->
Cinco faixas. Quanto maior a recorrência, menor o unitário. Escolha quantos créditos receber por mês — a renovação é automática no cartão e a faixa se ajusta ao seu volume.
25–49 /mês R$ 4,00 /créd.
validade 24 meses
50–99 /mês R$ 3,80 /créd.
validade 24 meses
100–149 /mês R$ 3,70 /créd.
validade 24 meses
150–249 /mês R$ 3,60 /créd.
validade 24 meses
Melhor preço 250–500 /mês R$ 3,00 /créd.
validade 24 meses
Quantos envios por mês?
Sua mensalidade R$ 370,00 /mês
R$ 3,70 por crédito
Economia de 12% vs. avulso
ar_bulk_mode=subscription faz o plugin sobrescrever o preço do item no carrinho (woocommerce_before_calculate_totals) pela tabela de faixas mensais, usando só a quantidade. Produto-âncora único (37761 "Assinatura AR Online") cobre as 5 faixas inteiras (25 a 500/mês) — depois do pagamento, o WC Asaas Subscriptions cria a assinatura MONTHLY no Asaas com o valor total do item. --> Assinar 100 créditos/mês Pagamento por cartão de crédito com renovação automática mensal. A assinatura é finalizada sozinha no carrinho, separada de outras compras.
💡 Uso esporádico? Os créditos pré-pagos não têm mensalidade. Acima de 500/mês ou precisando de AR-Voz e Cartas? O plano personalizado tem condições especiais.
<!-- [et_pb_line_break_holder] -->(function(){<!-- [et_pb_line_break_holder] --> "use strict";<!-- [et_pb_line_break_holder] --> function init(){<!-- [et_pb_line_break_holder] --> var TIERS = [<!-- [et_pb_line_break_holder] --> {min:25, max:49, price:4.00},<!-- [et_pb_line_break_holder] --> {min:50, max:99, price:3.80},<!-- [et_pb_line_break_holder] --> {min:100,max:149, price:3.70},<!-- [et_pb_line_break_holder] --> {min:150,max:249, price:3.60},<!-- [et_pb_line_break_holder] --> {min:250,max:500, price:3.00}<!-- [et_pb_line_break_holder] --> ];<!-- [et_pb_line_break_holder] --> function preUnit(n){ /* preço avulso (pré-pago) equivalente, só para exibir a economia */<!-- [et_pb_line_break_holder] --> if(n < 15) return 4.97;<!-- [et_pb_line_break_holder] --> if(n < 50) return 4.70;<!-- [et_pb_line_break_holder] --> if(n < 100) return 4.19;<!-- [et_pb_line_break_holder] --> return 3.89;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> var qty = document.getElementById("qty");<!-- [et_pb_line_break_holder] --> var range = document.getElementById("qtyRange");<!-- [et_pb_line_break_holder] --> var totalEl = document.getElementById("total");<!-- [et_pb_line_break_holder] --> var unitEl = document.getElementById("unitPrice");<!-- [et_pb_line_break_holder] --> var saveEl = document.getElementById("save");<!-- [et_pb_line_break_holder] --> var tierEls = document.querySelectorAll(".tier");<!-- [et_pb_line_break_holder] --> var checkoutBtn = document.getElementById("checkoutBtn");<!-- [et_pb_line_break_holder] --> var checkoutQty = document.getElementById("checkoutQty");<!-- [et_pb_line_break_holder] --> var cartQty = document.getElementById("cartQty");<!-- [et_pb_line_break_holder] --> var brl = new Intl.NumberFormat("pt-BR",{style:"currency",currency:"BRL"});<!-- [et_pb_line_break_holder] --> if(!qty || !range) return;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> function tierFor(n){<!-- [et_pb_line_break_holder] --> for(var i=0;i<TIERS.length;i++) if(n>=TIERS[i].min && n<=TIERS[i].max) return TIERS[i];<!-- [et_pb_line_break_holder] --> return TIERS[TIERS.length-1];<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> /* preenchimento dourado do slider: o WebKit não tem pseudo-elemento<!-- [et_pb_line_break_holder] --> de progresso, então a porcentagem vai por custom property no CSS */<!-- [et_pb_line_break_holder] --> function updateFill(){<!-- [et_pb_line_break_holder] --> var min = parseFloat(range.min) || 0, max = parseFloat(range.max) || 100;<!-- [et_pb_line_break_holder] --> var pct = ((parseFloat(range.value) - min) / (max - min)) * 100;<!-- [et_pb_line_break_holder] --> range.style.setProperty("--fill-pct", pct + "%");<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> function update(n){<!-- [et_pb_line_break_holder] --> n = Math.max(25, Math.min(500, Math.round(n) || 25));<!-- [et_pb_line_break_holder] --> qty.value = n; range.value = n;<!-- [et_pb_line_break_holder] --> var t = tierFor(n);<!-- [et_pb_line_break_holder] --> totalEl.textContent = brl.format(n * t.price);<!-- [et_pb_line_break_holder] --> unitEl.textContent = brl.format(t.price);<!-- [et_pb_line_break_holder] --> var pct = Math.round((1 - t.price / preUnit(n)) * 100);<!-- [et_pb_line_break_holder] --> saveEl.textContent = pct > 0<!-- [et_pb_line_break_holder] --> ? "Economia de " + pct + "% vs. avulso"<!-- [et_pb_line_break_holder] --> : "Mesmo preço do avulso — e os créditos acumulam";<!-- [et_pb_line_break_holder] --> tierEls.forEach(function(el){<!-- [et_pb_line_break_holder] --> el.classList.toggle("active",<!-- [et_pb_line_break_holder] --> n >= +el.getAttribute("data-min") && n <= +el.getAttribute("data-max"));<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> if(checkoutQty) checkoutQty.textContent = n;<!-- [et_pb_line_break_holder] --> if(cartQty) cartQty.value = n; /* quantidade enviada ao carrinho = créditos/mês */<!-- [et_pb_line_break_holder] --> updateFill();<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* o range ajusta ao vivo; o campo numérico só ao concluir a digitação<!-- [et_pb_line_break_holder] --> ("change"). Com "input", o mínimo é aplicado a cada tecla e impede<!-- [et_pb_line_break_holder] --> digitar 3 dígitos: ao teclar "2" o campo já saltaria para 25. */<!-- [et_pb_line_break_holder] --> qty.addEventListener("change", function(){ update(qty.value); });<!-- [et_pb_line_break_holder] --> range.addEventListener("input", function(){ update(range.value); });<!-- [et_pb_line_break_holder] --> update(100);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* trava de segurança: a quantidade enviada é sempre a da tela.<!-- [et_pb_line_break_holder] --> Se o usuário digitar e clicar direto no botão, o "change" pode não<!-- [et_pb_line_break_holder] --> ter disparado e o campo oculto iria com o valor anterior. */<!-- [et_pb_line_break_holder] --> var checkoutForm = checkoutBtn ? checkoutBtn.closest("form") : null;<!-- [et_pb_line_break_holder] --> if(checkoutForm){<!-- [et_pb_line_break_holder] --> checkoutForm.addEventListener("submit", function(){<!-- [et_pb_line_break_holder] --> var n = Math.max(25, Math.min(500, Math.round(+qty.value) || 25));<!-- [et_pb_line_break_holder] --> if(cartQty) cartQty.value = n;<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> if(checkoutBtn){<!-- [et_pb_line_break_holder] --> checkoutBtn.addEventListener("click", function(){<!-- [et_pb_line_break_holder] --> var n = +qty.value, t = tierFor(n);<!-- [et_pb_line_break_holder] --> window.dataLayer = window.dataLayer || [];<!-- [et_pb_line_break_holder] --> window.dataLayer.push({<!-- [et_pb_line_break_holder] --> event: "begin_checkout_assinatura",<!-- [et_pb_line_break_holder] --> creditos_mes: n,<!-- [et_pb_line_break_holder] --> preco_unitario: t.price,<!-- [et_pb_line_break_holder] --> valor_mensal: +(n * t.price).toFixed(2),<!-- [et_pb_line_break_holder] --> faixa: t.min + "-" + t.max<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> if(document.readyState === "loading"){<!-- [et_pb_line_break_holder] --> document.addEventListener("DOMContentLoaded", init);<!-- [et_pb_line_break_holder] --> } else {<!-- [et_pb_line_break_holder] --> init();<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] -->[/et_pb_fullwidth_code][/et_pb_section][et_pb_section fb_built="1" fullwidth="on" admin_label="POR QUE ASSINAR" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" global_colors_info="{}"] 04 · POR QUE ASSINAR (6 cards) — só HTML ═══════════════════════════════════════════════════════════════ -->
Feita para a demanda que se repete.
[ acúmulo ] Crédito não usado, crédito guardado Sobrou envio este mês? Ele acumula com validade de 24 meses. Sua mensalidade nunca vira desperdício.
[ economia ] Até 40% menor que o avulso Na faixa máxima, o crédito sai por R$ 3,00 — contra R$ 4,97 do avulso inicial. A recorrência paga a diferença.
[ previsibilidade ] Renovação automática no cartão Sem pedido de compra todo mês, sem interrupção de operação: os créditos chegam sozinhos, na data certa.
[ liberdade ] Cancele quando quiser Sem fidelidade, sem multa. Ajuste a faixa para cima ou para baixo conforme sua demanda muda.
[ fé pública ] Validade jurídica completa Carimbo do Tempo ICP-Brasil no envio, entrega e abertura — em todos os canais: e-mail, SMS e WhatsApp.
[ guarda ] Dossiê guardado por 3 anos Todas as provas legíveis e localizáveis em segundos, sem custo de guarda adicional.
[/et_pb_fullwidth_code][/et_pb_section][et_pb_section fb_built="1" fullwidth="on" admin_label="FAQ" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" global_colors_info="{}"] 05 · PERGUNTAS RÁPIDAS (FAQ) — só HTML ═══════════════════════════════════════════════════════════════ -->
Perguntas frequentes.
Os créditos que não uso no mês se perdem? Não. Créditos não utilizados acumulam automaticamente e têm validade de 24 meses. Como funciona o pagamento? Por cartão de crédito, com renovação automática mensal. Você pode alterar a faixa de créditos ou cancelar a qualquer momento, sem multa. Posso mudar de faixa depois? Sim — a assinatura acompanha sua operação. Cresceu a demanda? Suba de faixa e pague menos por crédito. Diminuiu? Desça de faixa ou volte ao pré-pago. E se eu precisar de mais de 500 envios por mês? Acima de 500/mês, o plano personalizado pós-pago oferece condições comerciais sob medida, API/SFTP, múltiplos usuários e os canais AR-Voz e AR-Cartas. Fale com um especialista.
[/et_pb_fullwidth_code][/et_pb_section][et_pb_section fb_built="1" fullwidth="on" admin_label="CTA Final" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" global_colors_info="{}"] 06 · CHAMADA FINAL — só HTML ═══════════════════════════════════════════════════════════════ -->
Assine hoje e nunca mais fique sem créditos. Escolha sua faixa na loja e receba créditos automaticamente todo mês — com o melhor preço unitário do autoatendimento. Assinar na loja Tirar dúvida no WhatsApp
[/et_pb_fullwidth_code][/et_pb_section][et_pb_section fb_built="1" fullwidth="on" admin_label="CONHEÇA TAMBÉM" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" global_colors_info="{}"] 07 · CONHEÇA TAMBÉM (cross-sell) — só HTML ═══════════════════════════════════════════════════════════════ -->
Seu uso é outro? Há um plano para cada operação.
Uso pontual Créditos pré-pagos Compre créditos avulsos sem mensalidade e use quando precisar com validade de 12 meses. Contratar créditos pré-pagos Operação personalizada Plano pós-pago sob medida Alto volume, AR-Voz e AR-Cartas, integração API/SFTP, múltiplos usuários e atendimento VIP com condições comerciais especiais. Falar com especialista
[/et_pb_fullwidth_code][/et_pb_section][et_pb_section fb_built="1" fullwidth="on" admin_label="JS Global" _builder_version="4.27.4" _module_preset="default" da_disable_devices="off|off|off" global_colors_info="{}" da_is_popup="off" da_exit_intent="off" da_has_close="on" da_alt_close="off" da_dark_close="off" da_not_modal="on" da_is_singular="off" da_with_loader="off" da_has_shadow="on"][et_pb_fullwidth_code _builder_version="4.27.4" _module_preset="default" global_colors_info="{}"] 09 · JAVASCRIPT GLOBAL — PÁGINA ASSINATURA Colar no ÚLTIMO módulo Código da página. Faz funcionar: · tracking de cliques (GTM/GA4) · menu hambúrguer mobile ⚠ A CALCULADORA NÃO ESTÁ MAIS AQUI. Ela vive dentro do próprio módulo 03 (03-precos-calculadora.txt), que é autocontido: HTML + JS no mesmo arquivo. Antes o código estava duplicado nos dois lugares, e as duas cópias brigavam — a daqui usava "input" no campo numérico e reaplicava o mínimo a cada tecla, impedindo digitar valores como 250. Se for reunir tudo aqui de novo, remova o do módulo 03.<!-- [et_pb_line_break_holder] --> ═══════════════════════════════════════════════════════════════ --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function(){<!-- [et_pb_line_break_holder] --> "use strict";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* ═══ repasse de UTMs ═══════════════════════════════════════════<!-- [et_pb_line_break_holder] --> Mantém a campanha de origem viva ao navegar entre as páginas e no<!-- [et_pb_line_break_holder] --> POST do botão de compra (o carrinho chegava sem nenhuma UTM). */<!-- [et_pb_line_break_holder] --> var UTM_KEYS = ["utm_source","utm_medium","utm_campaign","utm_id",<!-- [et_pb_line_break_holder] --> "utm_term","utm_content","gclid","fbclid"];<!-- [et_pb_line_break_holder] --> /* As UTMs vivem na URL só na primeira página da visita. A partir da<!-- [et_pb_line_break_holder] --> segunda (e no POST do formulário/carrinho) elas sumiam — por isso o<!-- [et_pb_line_break_holder] --> lead chegava no CRM sem origem. Agora a primeira ocorrência é<!-- [et_pb_line_break_holder] --> gravada em sessionStorage e reaproveitada em toda a navegação. */<!-- [et_pb_line_break_holder] --> var UTM_STORE = "arOnlineUtms";<!-- [et_pb_line_break_holder] --> var UTMS = (function(){<!-- [et_pb_line_break_holder] --> var src = new URLSearchParams(window.location.search), out = {}, has = false;<!-- [et_pb_line_break_holder] --> UTM_KEYS.forEach(function(k){<!-- [et_pb_line_break_holder] --> var v = src.get(k);<!-- [et_pb_line_break_holder] --> if(v){ out[k] = v; has = true; }<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> try{<!-- [et_pb_line_break_holder] --> if(has){<!-- [et_pb_line_break_holder] --> sessionStorage.setItem(UTM_STORE, JSON.stringify(out));<!-- [et_pb_line_break_holder] --> }else{<!-- [et_pb_line_break_holder] --> var saved = JSON.parse(sessionStorage.getItem(UTM_STORE) || "null");<!-- [et_pb_line_break_holder] --> if(saved && Object.keys(saved).length){ out = saved; has = true; }<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> }catch(e){ /* modo privado / storage bloqueado: segue só com a URL */ }<!-- [et_pb_line_break_holder] --> return has ? out : null;<!-- [et_pb_line_break_holder] --> })();<!-- [et_pb_line_break_holder] --> /* exposto para os outros módulos da página (ex.: formulário comercial) */<!-- [et_pb_line_break_holder] --> window.arOnlineUtms = UTMS || {};<!-- [et_pb_line_break_holder] --> function withUtms(raw){<!-- [et_pb_line_break_holder] --> try{<!-- [et_pb_line_break_holder] --> var u = new URL(raw, window.location.origin);<!-- [et_pb_line_break_holder] --> if(u.origin !== window.location.origin) return raw;<!-- [et_pb_line_break_holder] --> Object.keys(UTMS).forEach(function(k){<!-- [et_pb_line_break_holder] --> if(!u.searchParams.has(k)) u.searchParams.set(k, UTMS[k]);<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> return u.href;<!-- [et_pb_line_break_holder] --> }catch(e){ return raw; }<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> function forwardUtms(){<!-- [et_pb_line_break_holder] --> if(!UTMS) return;<!-- [et_pb_line_break_holder] --> document.querySelectorAll('a[href]').forEach(function(a){<!-- [et_pb_line_break_holder] --> var h = a.getAttribute("href");<!-- [et_pb_line_break_holder] --> if(!h || h.charAt(0) === "#") return;<!-- [et_pb_line_break_holder] --> a.setAttribute("href", withUtms(h));<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> document.querySelectorAll('form[action]').forEach(function(f){<!-- [et_pb_line_break_holder] --> f.setAttribute("action", withUtms(f.getAttribute("action")));<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> function init(){<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> forwardUtms();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* O forwardUtms() acima só alcança o que já existe no DOM. O Divi e<!-- [et_pb_line_break_holder] --> alguns widgets injetam links depois — este ouvinte, em captura,<!-- [et_pb_line_break_holder] --> completa o href no instante do clique, antes da navegação. */<!-- [et_pb_line_break_holder] --> document.addEventListener("click", function(e){<!-- [et_pb_line_break_holder] --> if(!UTMS || !e.target || !e.target.closest) return;<!-- [et_pb_line_break_holder] --> var a = e.target.closest("a[href]");<!-- [et_pb_line_break_holder] --> if(!a) return;<!-- [et_pb_line_break_holder] --> var h = a.getAttribute("href");<!-- [et_pb_line_break_holder] --> if(!h || h.charAt(0) === "#") return;<!-- [et_pb_line_break_holder] --> var nh = withUtms(h);<!-- [et_pb_line_break_holder] --> if(nh !== h) a.setAttribute("href", nh);<!-- [et_pb_line_break_holder] --> }, true);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* ── CTAs que abrem o popup de WhatsApp (.js-open-wa) ──────────────<!-- [et_pb_line_break_holder] --> O widget flutuante é injetado pelo WordPress, fora do Divi. Testamos<!-- [et_pb_line_break_holder] --> em ordem os seletores conhecidos do botão principal; se nenhum<!-- [et_pb_line_break_holder] --> existir (widget desativado, bloqueado por adblock, script ainda não<!-- [et_pb_line_break_holder] --> carregado), o próprio href do link — um wa.me completo — segue como<!-- [et_pb_line_break_holder] --> fallback e o clique não se perde. */<!-- [et_pb_line_break_holder] --> var WA_SELECTORS = [<!-- [et_pb_line_break_holder] --> "#wppMainBtn",<!-- [et_pb_line_break_holder] --> ".wpp-main-btn", ".wpp-btn-main", "#wpp-main-btn",<!-- [et_pb_line_break_holder] --> ".joinchat__button", ".joinchat .joinchat__button",<!-- [et_pb_line_break_holder] --> ".chaty-main-btn", "#chaty-widget-0 .chaty-btn-wrap",<!-- [et_pb_line_break_holder] --> ".ht-ctc-chat", ".wa__button", ".wa-chat-box-toggle"<!-- [et_pb_line_break_holder] --> ];<!-- [et_pb_line_break_holder] --> function findWaWidget(){<!-- [et_pb_line_break_holder] --> for(var i = 0; i < WA_SELECTORS.length; i++){<!-- [et_pb_line_break_holder] --> var el = document.querySelector(WA_SELECTORS[i]);<!-- [et_pb_line_break_holder] --> /* offsetParent é null em elementos position:fixed — usamos<!-- [et_pb_line_break_holder] --> getClientRects() para saber se o botão está de fato na tela */<!-- [et_pb_line_break_holder] --> if(el && el.getClientRects().length) return el;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> return null;<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> document.querySelectorAll(".js-open-wa").forEach(function(a){<!-- [et_pb_line_break_holder] --> a.addEventListener("click", function(e){<!-- [et_pb_line_break_holder] --> window.dataLayer = window.dataLayer || [];<!-- [et_pb_line_break_holder] --> window.dataLayer.push({<!-- [et_pb_line_break_holder] --> event: "abrir_whatsapp",<!-- [et_pb_line_break_holder] --> origem: a.getAttribute("data-qual") || "",<!-- [et_pb_line_break_holder] --> rotulo: (a.textContent || "").trim().slice(0, 60)<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> var w = findWaWidget();<!-- [et_pb_line_break_holder] --> if(!w) return; /* sem widget: usa o href wa.me */<!-- [et_pb_line_break_holder] --> e.preventDefault();<!-- [et_pb_line_break_holder] --> /* stopPropagation e obrigatorio: o widget fecha o popup quando um<!-- [et_pb_line_break_holder] --> clique chega ao document vindo de fora dele. Sem esta linha, o<!-- [et_pb_line_break_holder] --> proprio clique que abre o popup continua subindo, o widget<!-- [et_pb_line_break_holder] --> entende como "clicou fora" e fecha na mesma hora - parecia que<!-- [et_pb_line_break_holder] --> o botao nao fazia nada. */<!-- [et_pb_line_break_holder] --> e.stopPropagation();<!-- [et_pb_line_break_holder] --> var target = w.matches("a,button") ? w : (w.querySelector("a,button") || w);<!-- [et_pb_line_break_holder] --> target.click();<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* ── tracking GTM/GA4 ── */<!-- [et_pb_line_break_holder] --> window.dataLayer = window.dataLayer || [];<!-- [et_pb_line_break_holder] --> document.querySelectorAll("a[href]").forEach(function(a){<!-- [et_pb_line_break_holder] --> a.addEventListener("click", function(){<!-- [et_pb_line_break_holder] --> window.dataLayer.push({event:"assinatura_click", destino:a.href, rotulo:(a.textContent||"").trim().slice(0,60)});<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> /* ── menu mobile (hambúrguer) ── */<!-- [et_pb_line_break_holder] --> var t = document.getElementById('navToggle'), n = document.getElementById('navLinks');<!-- [et_pb_line_break_holder] --> if(t && n){<!-- [et_pb_line_break_holder] --> function closeNav(){<!-- [et_pb_line_break_holder] --> n.classList.remove('open');<!-- [et_pb_line_break_holder] --> t.setAttribute('aria-expanded','false');<!-- [et_pb_line_break_holder] --> t.setAttribute('aria-label','Abrir menu');<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> t.addEventListener('click', function(){<!-- [et_pb_line_break_holder] --> var open = n.classList.toggle('open');<!-- [et_pb_line_break_holder] --> t.setAttribute('aria-expanded', open ? 'true' : 'false');<!-- [et_pb_line_break_holder] --> t.setAttribute('aria-label', open ? 'Fechar menu' : 'Abrir menu');<!-- [et_pb_line_break_holder] --> });<!-- [et_pb_line_break_holder] --> n.addEventListener('click', function(e){ if(e.target.closest('a')) closeNav(); });<!-- [et_pb_line_break_holder] --> document.addEventListener('keydown', function(e){ if(e.key === 'Escape') closeNav(); });<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --> if(document.readyState === "loading"){<!-- [et_pb_line_break_holder] --> document.addEventListener("DOMContentLoaded", init);<!-- [et_pb_line_break_holder] --> } else {<!-- [et_pb_line_break_holder] --> init();<!-- [et_pb_line_break_holder] --> }<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] -->[/et_pb_fullwidth_code][/et_pb_section]
