/* atoms.jsx — small reusable atoms */
const { useState: useStateA, useEffect: useEffectA, useRef: useRefA } = React;
const Logo = ({ size = 26 }) => (
laburo
);
const Arrow = ({ size = 14 }) => (
);
const ArrowDown = ({ size = 14 }) => (
);
const Eyebrow = ({ children }) => {children};
const SectionHead = ({ num, eyebrow, title, sub }) => (
{num}
{eyebrow &&
{eyebrow}}
{title}
{sub &&
{sub}
}
);
/* ============================================================
LaburoMatrix — 3×3 logo-pattern grid, animated.
Refined: smaller, with laburo wordmark above.
============================================================ */
function LaburoMatrix() {
// Base pattern (1 = lime, 0 = dark) following the laburo mark
const base = [
[0, 1, 1],
[0, 1, 1],
[0, 0, 0],
];
const labels = [
{ t: 'Estrategia', s: 'Business → marketing' },
{ t: 'Datos', s: 'Reporting centralizado' },
{ t: 'Medios', s: 'Multi-plataforma' },
{ t: 'Analytics', s: 'Reporting en vivo' },
{ t: 'Creatividad',s: 'Producción nativa' },
{ t: 'Performance',s: 'Optimización continua' },
{ t: 'CRM', s: 'Pipeline conectado' },
{ t: 'AI', s: 'Agentes + automation' },
{ t: 'Crédito', s: 'Pauta sin fricciones' },
];
const [active, setActive] = useStateA(null);
const [pulse, setPulse] = useStateA(null);
useEffectA(() => {
let alive = true;
const tick = () => {
if (!alive) return;
const idx = Math.floor(Math.random() * 9);
setPulse(idx);
setTimeout(() => alive && setPulse(null), 700);
};
const id = setInterval(tick, 1600);
tick();
return () => { alive = false; clearInterval(id); };
}, []);
return (
laburo
/ sistema operativo
09 módulos activos
{Array.from({ length: 9 }, (_, i) => {
const r = Math.floor(i / 3);
const c = i % 3;
const isLime = base[r][c] === 1;
const isPulse = pulse === i;
const isActive = active === i;
return (
);
})}
MOD · {active !== null ? String(active + 1).padStart(2, '0') : '—'}
{active !== null ? labels[active].t : 'pasá el mouse'}
);
}
/* Legacy export name kept for the Hero import */
function ConnectionTriad() { return ; }
/* ============================================================
Mini connection — small inline motif for use elsewhere
============================================================ */
function MiniTriad() {
return (
);
}
/* ============================================================
Platform "logo chips" — stylized monogram marks for the stack
============================================================ */
function PlatformMark({ name, color = 'var(--lime)' }) {
const colorMap = {
Meta: '#1877F2',
Google: '#4285F4',
TikTok: '#25F4EE',
MELI: '#FFE600',
Pinterest: '#E60023',
GA4: '#E37400',
Looker: '#4285F4',
DV360: '#F9AB00',
Claude: '#D97757',
Detrics: '#C4FB2B',
WhatsApp: '#25D366',
Pixel: '#1877F2',
};
const bg = colorMap[name] || color;
const letter = name[0];
// contrast pick
const dark = ['#FFE600', '#25F4EE', '#C4FB2B', '#F9AB00'].includes(bg);
return (
{letter}
{name}
);
}
Object.assign(window, {
Logo, Arrow, ArrowDown, Eyebrow, SectionHead,
ConnectionTriad, LaburoMatrix, MiniTriad, PlatformMark,
});