// Unicampo: peças comuns a todas as páginas (menu, capa interna, números,
// linhas de produto, chamada final, rodapé) e os elementos gráficos do manual
// de marca desenhados em SVG. Carregado antes do script de cada página.
// ── Elementos do manual (p. 21) ───────────────────────────────────────────────
function Chevron({ className }) {
return (
);
}
function Seta({ className }) {
return (
);
}
function IconeWhats({ className }) {
return (
);
}
function IconeMenu({ aberto }) {
return (
{aberto ? : }
);
}
function IconeAbaixo({ className }) {
return (
);
}
// ── Botões ────────────────────────────────────────────────────────────────────
function BtnWhats({ children = 'Falar no WhatsApp', href = WA_GENERAL, variante = 'limao' }) {
return (
{children}
);
}
// ── Menu ──────────────────────────────────────────────────────────────────────
const PAGINAS = [
{ href: '/', label: 'Início', key: 'home' },
{ href: '/produtos/', label: 'Produtos', key: 'produtos' },
{ href: '/comercial/', label: 'Loja', key: 'comercial' },
{ href: '/sobre/', label: 'Sobre', key: 'sobre' },
{ href: '/contato/', label: 'Contato', key: 'contato' },
];
// `clara`: o menu começa transparente sobre uma capa escura (texto branco).
function Nav({ atual, clara }) {
const [rolou, setRolou] = React.useState(false);
const [aberto, setAberto] = React.useState(false);
React.useEffect(() => {
const h = () => setRolou(window.scrollY > 40);
h();
window.addEventListener('scroll', h, { passive: true });
return () => window.removeEventListener('scroll', h);
}, []);
const solida = rolou || aberto;
const logoBranca = clara && !solida;
return (
<>
setAberto(a => !a)} aria-label={aberto ? 'Fechar menu' : 'Abrir menu'} aria-expanded={aberto}>
{aberto && (
{PAGINAS.map(p => (
{p.label}
))}
Falar no WhatsApp
)}
>
);
}
// ── Capa das páginas internas ─────────────────────────────────────────────────
function CapaInterna({ titulo, trilha = [], children }) {
return (
Unicampo
{trilha.map(([href, label]) => (
{href ? {label} : {label} }
))}
{titulo}
{children &&
{children}
}
);
}
// ── Faixa de números ──────────────────────────────────────────────────────────
const NUMEROS = [
['28', 'anos', 'acompanhando o produtor desde 1998'],
['48 mil', 'm²', 'de sede própria em Piracanjuba-GO'],
['10+', '', 'cultivares de gramíneas para pastagem'],
['100%', '', 'dos lotes analisados no laboratório próprio'],
];
function Numeros() {
return (
{NUMEROS.map(([n, unidade, texto]) => (
{n}{unidade && {unidade} }
{texto}
))}
);
}
// ── Linhas de produto ─────────────────────────────────────────────────────────
function LinhasProduto() {
return (
{PRODUCTS.length} cultivares
Sementes
Gramíneas forrageiras para formar e recuperar pastagens, com cultivares da EMBRAPA.
Brachiaria: Piatã, Xaraés, Decumbens, Humidicola
Panicum: Mombaça, Tanzânia, Massai
Lotes com germinação e pureza testadas
Ver catálogo de sementes
{NUTRICAO.length} produtos
Nutrição animal
Rações, minerais, proteinados e grãos para bovinos, aves, suínos e peixes.
Minerais e proteinados para cria, recria e engorda
Rações para corte, leite, aves e suínos
Milho em grão e moído, ingredientes
Ver catálogo de nutrição
);
}
// ── Chamada final ─────────────────────────────────────────────────────────────
function Chamada({ titulo = 'Fale com quem entende de pastagem', texto = 'Nossa equipe indica a cultivar e o manejo certos para o seu solo e o seu rebanho. Atendemos todo o Brasil.' }) {
return (
);
}
// ── Rodapé ────────────────────────────────────────────────────────────────────
function Rodape() {
return (
);
}
// ── Página ────────────────────────────────────────────────────────────────────
function Pagina({ atual, navClara = true, chamada = true, children }) {
return (
<>
{children}
{chamada && (chamada === true ? : chamada)}
>
);
}
function montar(conteudo) {
ReactDOM.createRoot(document.getElementById('root')).render(conteudo);
}