);
}
// ── Hero mobile (com intro animations) ───────────────────────
function MobileHero() {
return (
Hotmart, Kiwify, Asaas e mais 8
Menos planilha. Mais{' '}
comissão.
Venda por link, Pix na mão ou contrato assinado: a comissão sai pronta,
com meta e follow-up no mesmo painel. Pra quem vende carro, curso,
relógio qualquer coisa em que fechar é o que importa.
{/* Microcopy de risco — no mobile isso não existia, e é justamente onde o
polegar para antes de tocar. Mesmas garantias do desktop. */}
14 dias grátis · sem cartão · cancela em um clique
);
}
// ── Marquee de frases "vida de vendedor" ─────────────────────
function MobileTicker() {
const frases = [
'Bateu a meta? Bebe uma.',
'Vendi! E agora? Já caiu na conta.',
'Cliente sumiu há 3 dias. Vai um WhatsApp?',
'Tua comissão tá ali.',
'Quanto eu ganhei hoje?',
'Hoje é dia de fechar.',
'O time bateu. Gerente paga o churrasco.',
'Sem planilha. Sem confusão.',
];
return (
{stage === 'login'
? 'Toca em "Entrar" pra logar. Depois é livre pra navegar.'
: 'Tá dentro. Toca onde quiser, sem roteiro, sem restrição.'}
{/* login */}
{/* app */}
{busy && }
{/* dica sutil */}
{stage === 'app' ? 'INTERATIVO · TOCA AONDE QUISER' : 'TOQUE EM ENTRAR PRA COMEÇAR'}
{/* bullets */}
{[
{ i: IconCheck, t: 'Login com Face ID & senha forte', s: 'Criptografia de banco. Senha zero salva em texto puro.' },
{ i: IconBolt, t: 'Notificação na lock screen', s: 'Cliente fechou? Cai no Apple Watch ou Android antes do WhatsApp.' },
{ i: IconScreen, t: 'Funciona offline', s: 'Lança a venda no carro do cliente. Sincroniza depois.' },
].map((b) => (
{b.t}
{b.s}
))}
);
}
// ── Features compactas ───────────────────────────────────────
function MobileFeatures() {
const items = [
// Estava tudo em "tu/teu", a três telas de distância das seções que dizem
// "você" — e a mesma frase existe em "você" no desktop. Não é sotaque, é a
// página falando com duas pessoas diferentes.
{ i: IconBolt, t: 'Comissão calculada na hora', s: 'Cliente pagou? O seu valor já aparece. Sem planilha, sem dúvida, sem o gerente "esquecer".' },
{ i: IconBolt, t: 'Notificação na lock screen', s: 'A venda fechou? Cai no seu celular antes do WhatsApp tocar.' },
{ i: IconTarget, t: 'Meta ao vivo', s: 'Veja quanto falta pro bônus em tempo real, sem precisar conferir no fim do mês.' },
{ i: IconClock, t: 'Follow-up automático', s: 'Cliente sumiu? O Comissa te lembra de mandar mensagem antes que ele esqueça de você.' },
{ i: IconUsers, t: 'Time vendendo junto', s: 'Ranking ao vivo, meta da equipe, churrasco do gerente quando bate.' },
];
return (
O que ele faz
O que você fazia na planilha, agora acontece sozinho.
{items.map((b, idx) => (
{b.t}
{b.s}
))}
);
}
// ── Pra quem é — os três perfis (mobile) ─────────────────────────
function MobilePerfis() {
const perfis = [
{
// `perfil` decide pra qual app o CTA manda (ver app-urls.js).
perfil: 'autonomo', cta: 'Testar como autônomo',
i: IconBolt, t: 'Vendedor autônomo',
s: 'MEI, afiliado, infoprodutor. Hotmart, Kiwify, Eduzz, Braip, Guru. Registra manual ou por link rastreável e a venda confirmada cai no painel. Vende um a um ou roda tráfego pago com ROI por produto.',
},
{
perfil: 'comissionado', cta: 'Entrar com código da empresa',
i: IconUsers, t: 'Vendedor de empresa',
s: 'Entra pelo link único que a empresa manda, já vinculado. Vê comissão a receber, pagas e o histórico do que é seu, em tempo real com o painel da empresa.',
},
{
perfil: 'empresa', cta: 'Abrir painel da empresa',
i: IconLayers, t: 'Empresa',
s: 'Top vendedores, produtos atribuídos, pagar comissão na ordem que quiser, prazo de cada uma, faturamento por produto e um link de acesso pra cada vendedor.',
},
];
return (
Pra quem é
Três jeitos de usar o Comissa.
{perfis.map((b, idx) => (
{b.t}
{b.s}
))}
);
}
// CTA do card de perfil no mobile: manda direto pro cadastro do app daquele
// perfil, sem passar pelo modal de escolha.
function MobilePerfilCTA({ perfil, label }) {
const [indo, setIndo] = _mss(false);
return (
);
}
// ── Novo no Comissa (mobile) ─────────────────────────────────────
function MobileNovidades() {
const items = [
{ i: IconClock, t: 'Previsão de recebimento', s: 'Hotmart D+30, Kiwify D+14… O Comissa calcula quando cada valor cai na conta e mostra no calendário.' },
{ i: IconTarget, t: 'Score de produto', s: 'Volume, ticket médio, conversão do link e tendência de 2 semanas viram um score automático por produto.' },
{ i: IconGrid, t: 'Vagas por produto', s: 'Limite de vagas com barra de progresso, aviso nas últimas 5 e link que fecha sozinho quando esgota.' },
{ i: IconRoute, t: 'Link rastreável', s: 'Sem acesso ao gateway? Gera o seu link por oferta e acompanha clique e conversão.' },
{ i: IconCircle, t: 'Cidade pelo DDD', s: 'O telefone do cliente vira cidade no mapa. Brasil por DDD, LATAM e Espanha por código de país.' },
{ i: IconSearch, t: 'Diagnóstico do dia', s: 'Quanto entrou ontem, o que vem essa semana e qual produto precisa de atenção, logo na entrada.' },
];
return (
Ranking ao vivo, comissão de cada um, progresso pra meta da equipe.
{[
{ i: , l: 'Metas individuais e da equipe' },
{ i: , l: 'Comissão de cada vendedor, transparente' },
{ i: , l: 'Bônus por meta batida, calculado automágico' },
{ i: , l: 'Visão do gerente: pipeline do time' },
].map((x) => (
{x.i}{x.l}
))}
);
}
// ── Depoimentos (stacked) ────────────────────────────────────
function MobileQuotes() {
const quotes = [
{ q: 'Larguei a planilha no primeiro dia. Minha comissão tava sempre uns R$ 500 errada. Agora bate certinho.', n: 'Patrícia Almeida', r: 'Vendedora de imóveis · Habita+', hue: 8 },
{ q: 'Os atalhos são obscenamente bons. Lanço uma venda mais rápido do que respondo no WhatsApp.', n: 'João Vitor Souza', r: 'Vendedor de carros · Velocittà', hue: 30 },
{ q: 'A gente vende curso, e o Comissa puxa do Hotmart direto. Comissão dos meus afiliados sai no mesmo dia.', n: 'Eliana Ferreira', r: 'Infoprodutora · Mestria', hue: 30 },
];
return (
Quem vende com a gente
Carro, curso, relógio, imóvel. Tudo num só painel.
{quotes.map((q, i) => (
{[0,1,2,3,4].map((s) => ())}
“{q.q}”
x[0]).join('')} hue={q.hue} size={28} />
{q.n}
{q.r}
))}
);
}
// ── Antes vs Agora ───────────────────────────────────────────
function MobileBeforeAfter() {
const [side, setSide] = _mss('antes');
_mse(() => {
const t = setInterval(() => setSide((s) => (s === 'antes' ? 'agora' : 'antes')), 3600);
return () => clearInterval(t);
}, []);
const blocks = {
antes: {
title: 'Domingo de noite',
sub: 'fechando a planilha',
bg: 'linear-gradient(160deg, #FFF4E2 0%, #FFE9C9 100%)',
accent: '#F59E0B',
lines: [
{ i: IconGrid, t: '"Quanto eu vendi mesmo?"', s: 'rolando o Excel pra cima e pra baixo' },
{ i: IconCmd, t: 'Calculadora aberta', s: '7% de 12.480 vezes 3... 4... ' },
{ i: IconCircle, t: '"O gerente errou de novo"', s: '"essa venda da Marina foi minha"' },
{ i: IconClock, t: '23h47', s: 'amanhã tem reunião 8h' },
],
},
agora: {
title: 'Domingo de noite',
sub: 'com o Comissa',
bg: 'linear-gradient(160deg, #EFF6FF 0%, #DCE9FB 100%)',
accent: '#A5C9FF',
lines: [
{ i: IconBolt, t: 'Push: "+R$ 599 caiu agora"', s: 'cliente fechou via Pix, comissão na conta' },
{ i: IconTarget, t: 'Meta do mês: 87%', s: 'falta R$ 2.080 pro bônus' },
{ i: IconUsers, t: 'Ranking ao vivo do time', s: 'Marina lidera com R$ 32k' },
{ i: IconLayers, t: '23h47', s: 'tô no sofá. tudo certo.' },
],
},
};
const b = blocks[side];
return (
Antes vs Agora
O fim de semana que volta a ser seu.
Toque pra trocar entre os dois, ou deixa rodar.
{/* toggle */}
{['antes', 'agora'].map((k) => (
))}
{/* card animado */}
{b.sub}
{b.title}
{b.lines.map((l, i) => (
{l.t}
{l.s}
))}
);
}
// ── Pricing stack ────────────────────────────────────────────
function MobilePricing() {
// Espelha os planos do app (i18n.js → plan_*), igual ao desktop.
const plans = [
{
n: 'Comissa Base', p: 'Grátis', s: 'por 14 dias', d: 'Pra começar sem custo',
f: ['Até 3 links rastreáveis', 'Até 50 compradores', 'Até 4 produtos', 'Dashboard do mês atual'],
cta: 'Começar grátis', onClick: () => window.openModal('signup'),
},
{
n: 'Comissa Pro', p: 'R$ 47,90', s: '/mês', d: 'Pra quem vende todo dia',
f: ['Até 25 links rastreáveis', 'Compradores ilimitados', 'Até 15 produtos', 'Previsão de recebimento', 'Histórico completo'],
cta: 'Testar 14 dias grátis', highlight: true, onClick: () => window.openModal('signup'),
},
{
n: 'Comissa Max', p: 'R$ 97,90', s: '/mês', d: 'Times e operações maiores',
f: ['Links e produtos ilimitados', 'Alerta de produto parado', 'Exportação CSV/PDF', 'Suporte via WhatsApp'],
cta: 'Falar com a gente', onClick: () => window.openModal('contact'),
},
];
return (
Dois minutos pra configurar. Importe vendas de planilha, Hotmart, Kiwify ou Mercado Pago em um clique.
);
}
// ── Footer compacto ──────────────────────────────────────────
function MobileFooter() {
return (
);
}
// ── Composição final ─────────────────────────────────────────
// ── As duas pontas (mobile) ──────────────────────────────────
// O desktop conta isso com dois painéis lado a lado e uma linha atravessando
// o vão. No celular não existe "lado a lado", e encolher as duas capturas pra
// 355px de largura entrega texto de 5px — a tela viraria enfeite ilegível.
// Então aqui a cena é o ARGUMENTO, não o screenshot: o formulário que se
// preenche sozinho em cima, a linha descendo, e a empresa avisada embaixo.
// Mesmo relógio do desktop (`useRelayVenda`), então é literalmente a mesma
// venda atravessando.
function MobDuasPontas() {
const { venda, fase } = useRelayVenda();
const registrado = fase >= 4;
const chegou = fase >= 5;
const cartao = {
background: '#fff', borderRadius: 16, padding: 16,
border: '0.5px solid var(--line)',
};
return (
As duas pontas
Um número só. Ninguém tem a própria versão.
Você registra a venda. No segundo seguinte ela já está no total que a empresa
vai pagar, com o mesmo valor e a mesma conta por trás.
{venda ? `${venda.bruto} · a pagar ${venda.com}` : ''}
Já entrou no total do ciclo. Ninguém digitou de novo, e nenhum dos dois lados
precisa conferir a planilha do outro.
);
}
// ── Depois do fechamento: parcelas de boleto (mobile) ────────
// Não existia no celular. O visitante que vende parcelado — corretor, carro,
// imóvel, curso em 6x — chegava no preço sem nunca ter lido a resposta da
// única pergunta dele: "quando essa comissão fica minha?".
function MobParcelas() {
const PARCELAS = [
{ n: '1/6', quando: '10/06', st: 'paga', com: '+R$ 75' },
{ n: '2/6', quando: '10/07', st: 'paga', com: '+R$ 75' },
{ n: '3/6', quando: '10/08', st: 'atrasada', com: 'retida' },
{ n: '4/6', quando: '10/09', st: 'aberta', com: 'a receber' },
{ n: '5/6', quando: '10/10', st: 'aberta', com: 'a receber' },
{ n: '6/6', quando: '10/11', st: 'aberta', com: 'a receber' },
];
const COMO = [
['O plano nasce da venda', 'Você marca 6x no boleto e o Comissa cria as seis parcelas com data e valor. Você não digita nenhuma.'],
['A comissão segue o dinheiro', 'Cada parcela paga libera a sua fatia dela. Nada de comissão cheia na assinatura pra ser estornada se o cliente parar no meio.'],
['A baixa não duplica', 'Quem avisa o pagamento é a plataforma de cobrança, e cada parcela é única por venda e número.'],
['Atrasou? Fica visível', 'A parcela vencida entra em vermelho, a cobrança é reenviada e a comissão fica retida até o boleto ser pago.'],
];
const cor = (st) => st === 'paga' ? 'var(--green-text)' : st === 'atrasada' ? 'var(--rose-text)' : 'var(--indigo-text)';
return (
Depois do fechamento
A venda fecha. O resto anda sozinho.
Venda parcelada é comissão parcelada — e você vê cada pedaço chegando.
Venda de R$ 4.500 em 6x no
boleto, comissão de 10% — R$ 450 no total, R$ 75 por parcela paga.
Vale pra boleto e Pix parcelado. Cartão parcelado cai inteiro pela plataforma,
então ali a comissão sai de uma vez.
{COMO.map(([t, d], i) => (
{String(i + 1).padStart(2, '0')}
{t}
{d}
))}
);
}
function MobileSite() {
return (
{/* A faixa de plataformas saiu a pedido, junto com a do desktop.
`MobPlataformas` segue definida em narrative.jsx. */}
{/* Narrativa (narrative.jsx) — a mesma do desktop, em coluna:
dor → diagnóstico → virada → jornada → plataformas. */}
{/* As duas pontas entram aqui, mesma posição do desktop: depois das
plataformas e da prova social, antes do tour do app. */}
{/* Pós-venda / parcelas: não existia no celular. */}