// Hero section — 3D parallax stage + rotating tenant brand swap
const { useState, useEffect, useRef } = React;
const TENANTS = [
{ name: "Lumen", mark: "L", color: "#007fdc", tint: "#e6f4fd" },
{ name: "Kairo", mark: "K", color: "#10B87A", tint: "#E6F8F0" },
{ name: "Nexa", mark: "N", color: "#8B5CF6", tint: "#F0E9FD" },
{ name: "Orbit", mark: "O", color: "#F59E0B", tint: "#FEF3E0" },
{ name: "Helix", mark: "H", color: "#EF4444", tint: "#FEE9E9" },
{ name: "Zenith", mark: "Z", color: "#0EA5E9", tint: "#E0F2FE" },
];
function Hero() {
const stageRef = useRef(null);
const innerRef = useRef(null);
const [tenantIdx, setTenantIdx] = useState(0);
const tenant = TENANTS[tenantIdx];
// Cycle tenants
useEffect(() => {
const t = setInterval(() => setTenantIdx(i => (i + 1) % TENANTS.length), 2800);
return () => clearInterval(t);
}, []);
// Mouse parallax on the 3D stage
useEffect(() => {
const stage = stageRef.current;
const inner = innerRef.current;
if (!stage || !inner) return;
let raf;
let tx = 0, ty = 0;
const onMove = (e) => {
const rect = stage.getBoundingClientRect();
const cx = rect.left + rect.width / 2;
const cy = rect.top + rect.height / 2;
const dx = (e.clientX - cx) / rect.width;
const dy = (e.clientY - cy) / rect.height;
tx = dx * 12;
ty = dy * -8;
cancelAnimationFrame(raf);
raf = requestAnimationFrame(() => {
inner.style.transform = `rotateY(${tx}deg) rotateX(${ty}deg)`;
});
};
window.addEventListener('mousemove', onMove);
return () => { window.removeEventListener('mousemove', onMove); cancelAnimationFrame(raf); };
}, []);
return (
Offer your own branded AI CRM to clients - fully built, customized and ready to sell in days.
Your brand.
Our CRM engine.
{tenant.name}.crm