// blackpool.jsx — BLACK POOL (Black Friday) mode // Janela oficial (horário de Brasília, UTC-3): // início 01/11 às 12h · fim 30/11 às 20h const BP_START = Date.UTC(2026, 10, 1, 15, 0, 0); const BP_END = Date.UTC(2026, 10, 30, 23, 0, 0); const BP_WHATS_NUMBER = "5512982340551"; function getBlackPoolMode(override) { const q = new URLSearchParams(location.search).get("blackpool"); const forced = q || (override && override !== "auto" ? override : null); if (forced === "pre" || forced === "on" || forced === "off") return forced; const now = Date.now(); if (now < BP_START) return "pre"; if (now <= BP_END) return "on"; return "off"; } function useCountdown(target) { const [now, setNow] = React.useState(Date.now()); React.useEffect(() => { const id = setInterval(() => setNow(Date.now()), 1000); return () => clearInterval(id); }, []); const ms = Math.max(0, target - now); const pad = (n) => String(n).padStart(2, "0"); return { d: pad(Math.floor(ms / 864e5)), h: pad(Math.floor(ms / 36e5) % 24), m: pad(Math.floor(ms / 6e4) % 60), s: pad(Math.floor(ms / 1e3) % 60), }; } function BPCountdown({ target, size = "md" }) { const c = useCountdown(target); const cells = [[c.d, "dias"], [c.h, "horas"], [c.m, "min"], [c.s, "seg"]]; return (
{cells.map(([v, l], i) => (
{v} {l}
))}
); } /* ───────────── Pré-Black: tela de entrada (pop-up) ───────────── */ function BPIntroModal({ onClose, onJoin, joined }) { React.useEffect(() => { const onKey = (e) => { if (e.key === "Escape") onClose(); }; document.addEventListener("keydown", onKey); document.body.style.overflow = "hidden"; return () => { document.removeEventListener("keydown", onKey); document.body.style.overflow = ""; }; }, []); return (
e.stopPropagation()} role="dialog" aria-label="Black Pool">

Vem aí · Método DDP

BLACKPOOL

Começa01/11 · 12h
Termina30/11 · 20h

Quem entrar no Método DDP durante a Black Pool ganha uma aula individual comigo, no Meet, sobre pool de liquidez.

Faltam

{joined ? ( Você já está na lista VIP ✓ ) : ( )}
); } /* ───────────── Pré-Black: barra de aquecimento + lista VIP ───────────── */ function BlackPoolTeaser() { const [open, setOpen] = React.useState(false); const [joined, setJoined] = React.useState(() => localStorage.getItem("bp-waitlist") === "1"); const [intro, setIntro] = React.useState(() => sessionStorage.getItem("bp-intro-seen") !== "1"); const closeIntro = () => { sessionStorage.setItem("bp-intro-seen", "1"); setIntro(false); }; const c = useCountdown(BP_START); return ( <> {intro && { closeIntro(); setOpen(true); }} />}
BLACK POOL começa 01/11 às 12h {c.d}d {c.h}h {c.m}m {c.s}s
{open && ( setOpen(false)} onJoined={() => { localStorage.setItem("bp-waitlist", "1"); setJoined(true); }} /> )} ); } function BPWaitlistModal({ onClose, onJoined }) { const [name, setName] = React.useState(""); const [phone, setPhone] = React.useState(""); const [sent, setSent] = React.useState(false); const valid = name.trim().length > 1 && phone.replace(/\D/g, "").length >= 10; const submit = (e) => { e.preventDefault(); if (!valid) return; const msg = `Quero entrar na lista VIP da BLACK POOL.\nNome: ${name.trim()}\nWhatsApp: ${phone.trim()}`; window.open(`https://api.whatsapp.com/send?phone=${BP_WHATS_NUMBER}&text=${encodeURIComponent(msg)}`, "_blank", "noopener"); onJoined(); setSent(true); }; return (
e.stopPropagation()}>
BLACK
POOL
{sent ? ( <>

Pronto, {name.split(" ")[0]}. Você está na lista.

Dia 01/11 às 12h você recebe o aviso no WhatsApp antes de todo mundo.

) : (

Entre na lista VIP e seja avisado assim que a Black Pool abrir.

)}
); } /* ───────────── Checkout Pix em modal (sem sair da página) ───────────── */ const BP_PIX = { API: "https://criptonahora.com", SLUG: "s3vp7a4nr7", PRICE_CENTS: 39999 }; const bpCpfOk = (d) => { if (!/^\d{11}$/.test(d) || /^(\d)\1+$/.test(d)) return false; const dv = (n) => { let s = 0; for (let i = 0; i < n; i++) s += +d[i] * (n + 1 - i); const r = s % 11; return r < 2 ? 0 : 11 - r; }; return dv(9) === +d[9] && dv(10) === +d[10]; }; const bpFmtCPF = (v) => v.replace(/\D/g, "").slice(0, 11).replace(/(\d{3})(\d{0,3})(\d{0,3})(\d{0,2})/, (m, a, b, c, e) => a + (b ? "." + b : "") + (c ? "." + c : "") + (e ? "-" + e : "")); const bpBRL = (c) => "R$ " + (c / 100).toLocaleString("pt-BR", { minimumFractionDigits: 2 }); async function bpApi(path, opts) { const r = await fetch(BP_PIX.API + path, opts); let d = {}; try { d = await r.json(); } catch (e) {} if (!r.ok) { const e = new Error(d.detail || "Algo deu errado. Tente de novo."); e.data = d; e.status = r.status; throw e; } return d; } function BPPixModal({ onClose }) { const demo = React.useMemo(() => new URLSearchParams(location.search).has("demo") || /claude|localhost|127\.0\.0\.1/.test(location.hostname) || location.protocol === "file:", []); const [step, setStep] = React.useState("form"); const [f, setF] = React.useState({ name: "", email: "", doc: "" }); const [errs, setErrs] = React.useState({}); const [formErr, setFormErr] = React.useState(""); const [busy, setBusy] = React.useState(false); const [charge, setCharge] = React.useState(null); const [left, setLeft] = React.useState(0); const [status, setStatus] = React.useState("Aguardando pagamento…"); const [review, setReview] = React.useState(false); const [copied, setCopied] = React.useState(false); const [price, setPrice] = React.useState(BP_PIX.PRICE_CENTS); const touch = React.useMemo(() => window.matchMedia && matchMedia("(pointer: coarse)").matches, []); const close = () => { try { sessionStorage.removeItem("bp-pix-live"); } catch (e) {} onClose(); }; React.useEffect(() => { try { const s = JSON.parse(sessionStorage.getItem("bp-pix-live") || "null"); if (s && s.charge && new Date(s.charge.expires_at).getTime() > Date.now()) { setF(s.f); setCharge(s.charge); setStep("qr"); } } catch (e) {} }, []); React.useEffect(() => { try { if (step === "qr" && charge) sessionStorage.setItem("bp-pix-live", JSON.stringify({ f, charge })); else if (step !== "qr") sessionStorage.removeItem("bp-pix-live"); } catch (e) {} }, [step, charge]); React.useEffect(() => { const k = (e) => e.key === "Escape" && close(); document.addEventListener("keydown", k); const o = document.body.style.overflow; document.body.style.overflow = "hidden"; if (!demo) bpApi("/api/pagar/" + BP_PIX.SLUG).then((i) => { if (i.amount_cents) setPrice(i.amount_cents); if (i.active === false) setStep("off"); }).catch(() => {}); return () => { document.removeEventListener("keydown", k); document.body.style.overflow = o; }; }, []); React.useEffect(() => { if (step !== "qr" || !charge) return; const end = new Date(charge.expires_at).getTime(); const tick = () => setLeft(Math.max(0, Math.round((end - Date.now()) / 1000))); tick(); const cd = setInterval(tick, 1000); let poll = null; if (charge.demo) { poll = setTimeout(() => setStep("paid"), 7000); return () => { clearInterval(cd); clearTimeout(poll); }; } const check = async () => { try { const d = await bpApi("/api/pagar/status/" + encodeURIComponent(charge.cashin_id)); if (d.paid) return setStep("paid"); if (d.status === "under_review") { setReview(true); setStatus("Pagamento recebido, em análise. Não pague de novo."); return; } if (d.refund_reason === "PAYER_MISMATCH") { setStatus("O Pix saiu de outro CPF e foi devolvido."); setStep("again"); } else if (["expired", "failed", "refunded"].includes(d.status)) { setStatus(d.status === "expired" ? "O QR expirou." : "Pagamento não concluído."); setStep("again"); } } catch (e) {} }; const vis = () => { if (document.visibilityState === "visible") { tick(); check(); } }; document.addEventListener("visibilitychange", vis); window.addEventListener("pageshow", vis); check(); poll = setInterval(check, 3000); return () => { clearInterval(cd); clearInterval(poll); document.removeEventListener("visibilitychange", vis); window.removeEventListener("pageshow", vis); }; }, [step, charge]); React.useEffect(() => { if (step === "qr" && charge && !review && left === 0 && new Date(charge.expires_at).getTime() < Date.now()) { setStatus("O QR expirou."); setStep("again"); } }, [left]); React.useEffect(() => { if (step === "paid") { try { navigator.vibrate && navigator.vibrate([120, 60, 120]); } catch (e) {} } }, [step]); const set = (k) => (e) => { const v = k === "doc" ? bpFmtCPF(e.target.value) : e.target.value; setF((s) => ({ ...s, [k]: v })); setErrs((s) => ({ ...s, [k]: "" })); }; const submit = async (e) => { e.preventDefault(); setFormErr(""); const name = f.name.trim().replace(/\s+/g, " "), email = f.email.trim(), doc = f.doc.replace(/\D/g, ""); const er = {}; if (name.split(" ").length < 2 || name.length < 5) er.name = "Digite seu nome completo."; if (!/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(email)) er.email = "Digite um e-mail válido."; if (!bpCpfOk(doc)) er.doc = doc.length !== 11 ? "Digite os 11 números do CPF." : "CPF inválido. Confira os números."; setErrs(er); if (Object.keys(er).length) return; setBusy(true); try { let c; if (demo) { await new Promise((r) => setTimeout(r, 900)); c = { cashin_id: "demo-" + Date.now(), qr_copypaste: "00020126580014br.gov.bcb.pix0136demo-black-pool-metodo-ddp5204000053039865406399.995802BR", expires_at: new Date(Date.now() + 15 * 60000).toISOString(), demo: true }; } else c = await bpApi("/api/pagar/" + BP_PIX.SLUG + "/cobrar", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ payer_name: name, payer_email: email, payer_tax_number: doc }) }); setCharge(c); setReview(false); setStatus("Aguardando pagamento…"); setStep("qr"); } catch (e) { const map = { name: "name", email: "email", doc: "doc" }; if (e.data && map[e.data.field]) setErrs({ [map[e.data.field]]: e.message }); else if (e instanceof TypeError) setStep("error"); else setFormErr(e.message); } finally { setBusy(false); } }; const copy = async () => { const t = charge.qr_copypaste; let ok = false; try { await navigator.clipboard.writeText(t); ok = true; } catch (e) {} if (!ok) { try { const a = document.createElement("textarea"); a.value = t; a.setAttribute("readonly", ""); a.style.cssText = "position:fixed;top:0;left:0;opacity:0;font-size:16px"; document.body.appendChild(a); a.select(); a.setSelectionRange(0, t.length); ok = document.execCommand("copy"); a.remove(); } catch (e) {} } if (ok) { setCopied(true); setTimeout(() => setCopied(false), 2500); } }; const ref = charge ? String(charge.cashin_id).slice(-8).toUpperCase() : ""; const wpp = "https://api.whatsapp.com/send?phone=" + BP_WHATS_NUMBER + "&text=" + encodeURIComponent("Olá Zulu! Acabei de pagar a Black Pool no Pix.\nNome: " + f.name.trim() + "\nPedido: " + ref + "\nQuero meu acesso e o código da aula individual."); const mm = String(Math.floor(left / 60)).padStart(2, "0"), ss = String(left % 60).padStart(2, "0"); const dots = ["form", "qr", "paid"].indexOf(step === "again" ? "qr" : step); return (
e.stopPropagation()} role="dialog" aria-label="Pagar no Pix"> {demo &&
Demonstração · nenhum Pix real é gerado
} {dots >= 0 &&
= 1 ? "on" : ""}>= 2 ? "on" : ""}>
} {step === "form" && (

PAGAR NO PIX

Black Pool · Método DDP{bpBRL(price)}

O Pix precisa sair de uma conta no seu CPF. Se outra pessoa pagar, o valor volta para ela.

{formErr &&

{formErr}

}
)} {(step === "qr" || step === "again") && charge && (

{touch ? <>COPIE E PAGUE : <>ESCANEIE E PAGUE}

{step === "qr" && touch && ( <>

Pagando pelo celular? Copie o código e cole no app do banco em Pix Copia e Cola.

)}
{charge.qr_image_url ? QR Code do Pix : QR CODE
(demonstração)
}
{step === "qr" && !review && }{status}
{step === "qr" && !review &&
{left ? "Expira em " + mm + ":" + ss : ""}
} {step === "qr" ? ( <>
{charge.qr_copypaste}
{!touch && }

{touch ? "Depois de pagar, volte para esta tela: ela confirma sozinha." : <>Abra o app do banco → Pix → Copia e Cola. Esta tela confirma sozinha quando o pagamento cair.}

) : ( )}
)} {step === "paid" && (

PAGAMENTO CONFIRMADO

Bem-vindo à Black Pool! Chame no WhatsApp para receber seu acesso e o código da aula individual.

Pedido {ref}

Receber acesso no WhatsApp
)} {step === "error" && (

NÃO DEU PARA GERAR O PIX

O sistema de pagamento não respondeu. Tente de novo ou fale comigo no WhatsApp.

Falar no WhatsApp
)} {step === "off" && (

PIX PAUSADO

O pagamento está pausado no momento. Fale comigo no WhatsApp.

Falar no WhatsApp
)}
); } /* ───────────── Black ativa: página BLACK POOL ───────────── */ function BlackPoolPage({ phase = "on" }) { const pre = phase === "pre"; const target = pre ? BP_START : BP_END; const [waitOpen, setWaitOpen] = React.useState(false); const [pixOpen, setPixOpen] = React.useState(false); const [joined, setJoined] = React.useState(() => localStorage.getItem("bp-waitlist") === "1"); const [intro, setIntro] = React.useState(() => pre && sessionStorage.getItem("bp-intro-seen") !== "1"); const closeIntro = () => { sessionStorage.setItem("bp-intro-seen", "1"); setIntro(false); }; const openWait = () => setWaitOpen(true); const WaitBtn = ({ cls = "bp-btn bp-btn--violet", label = "Entrar na lista VIP" }) => ( joined ? Você está na lista VIP ✓ : ); const included = [ "Método DDP completo — 7 módulos, do zero ao avançado", "Acesso vitalício ao conteúdo gravado", "Grupo VIP no WhatsApp", "Reunião ao vivo sobre pool de liquidez todo sábado, 9h", ]; const ticker = pre ? ["BLACK POOL", "COMEÇA 01/11 ÀS 12H", "AULA INDIVIDUAL", "LISTA VIP ABERTA"] : ["BLACK POOL", "AULA INDIVIDUAL", "R$ 399,99 NO PIX OU USDT", "ATÉ 30/11 ÀS 20H"]; const tickerRow = [...ticker, ...ticker, ...ticker, ...ticker]; return (
{intro && { closeIntro(); openWait(); }} />} {waitOpen && ( setWaitOpen(false)} onJoined={() => { localStorage.setItem("bp-waitlist", "1"); setJoined(true); }} /> )}
BLACK POOL {pre ? "começa 01/11 às 12h" : "termina 30/11 às 20h"}

{pre ? "Vem aí · Método DDP · 01/11 — 30/11" : "Método DDP · 01/11 — 30/11"}

BLACK POOL

{pre ? "De 01/11 a 30/11, quem" : "Quem"} entrar no Método DDP durante a Black Pool recebe uma aula individual comigo, no Meet, sobre pool de liquidez.

a partir de R$ 399,99 no Pix
{pre && (
Abre em
)}
Zulu Martimiano Zulu Martimiano

Só na Black Pool

1aluno
1hora
1Meet comigo

Todo aluno que comprar na Black Pool ganha uma aula individual sobre pool de liquidez. Só você e eu, no Google Meet, olhando para a sua pool.

A oferta

Tudo do Método DDP
+ aula individual

    {included.map((t, i) => (
  • {t}
  • ))}
  • ★ Aula individual comigo no Meet — exclusivo Black Pool

Cartão

De R$ 597,99

R$ 539

ou 12x de R$ 53,00

Melhor preço

Pix ou USDT

De R$ 597,99

R$ 399,99

à vista

{pre ? : }

{pre ? "Compra liberada dia 01/11 às 12h. Quem está na lista VIP recebe o aviso primeiro." : "Garantia de 7 dias — 100% do dinheiro de volta."}

A BLACK POOL{pre ? "COMEÇA EM" : "ACABA EM"}

{pre ? "01/11 às 12h · até 30/11 às 20h" : "30/11 às 20h a aula individual sai da oferta."}

); }