// marketing-components.jsx
// Nav, Footer, shared UI mock, icons
// ────────────────────────────────────────────────────────────
// NAV
// ────────────────────────────────────────────────────────────
const NAV_LINKS = {
es: [
{ id: 'home', label: 'Inicio' },
{ id: 'product', label: 'Producto' },
{ id: 'ai', label: 'IA en Patología' },
{ id: 'solutions', label: 'Soluciones' },
{ id: 'resources', label: 'Recursos' },
{ id: 'blog', label: 'Blog' },
{ id: 'about', label: 'Nosotros' },
],
en: [
{ id: 'home', label: 'Home' },
{ id: 'product', label: 'Product' },
{ id: 'ai', label: 'AI in Pathology' },
{ id: 'solutions', label: 'Solutions' },
{ id: 'resources', label: 'Resources' },
{ id: 'blog', label: 'Blog' },
{ id: 'about', label: 'About' },
],
};
const Nav = ({ page, setPage, lang, setLang }) => {
const [scrolled, setScrolled] = React.useState(false);
React.useEffect(() => {
const fn = () => setScrolled(window.scrollY > 20);
window.addEventListener('scroll', fn);
return () => window.removeEventListener('scroll', fn);
}, []);
const links = NAV_LINKS[lang] || NAV_LINKS.es;
return (
);
};
// ────────────────────────────────────────────────────────────
// FOOTER
// ────────────────────────────────────────────────────────────
const Footer = ({ setPage }) => (
);
// ────────────────────────────────────────────────────────────
// HERO SCREENS COMPOSITION — real app screenshots stacked
// WSI viewer dominant on top, other screens peeking below
// ────────────────────────────────────────────────────────────
const DashboardMockup = () => {
const base = '../assets/screens/';
return (
{/* Outer chrome */}
{/* Browser chrome bar */}
{['#F87171','#FBBF24','#4ADE80'].map(c => (
))}
app.aiscopia.io/viewer
{/* ── WSI VIEWER — top, full width, most prominent ── */}

{/* Bottom fade to blend with screens below */}
{/* IA badge overlay */}
{/* ── LOWER ROW — three screens side by side, cropped ── */}
{[
{ src: `${base}dashboard.png`, label: 'Dashboard', pos: 'top' },
{ src: `${base}worklist.png`, label: 'Todos los Casos', pos: 'top' },
{ src: `${base}diagnostico.png`, label: 'Diagnóstico', pos: 'top' },
].map((s, i) => (

{/* Top fade */}
{/* Side divider */}
{i > 0 &&
}
{/* Label chip */}
{s.label}
))}
{/* Bottom URL bar */}
WSI · 40× · OpenSeadragon
X: 6068 · Y: 17442
);
};
// ────────────────────────────────────────────────────────────
// SECTION HEADING
// ────────────────────────────────────────────────────────────
const SectionHeading = ({ pill, pillVariant = 'pill-cyan', title, subtitle, center = true, light = false }) => (
{pill && (
{pill}
)}
{title}
{subtitle && (
{subtitle}
)}
);
// ────────────────────────────────────────────────────────────
// ICON WRAPPER
// ────────────────────────────────────────────────────────────
const IconBox = ({ icon, color = 'var(--cyan)', bg, size = 44 }) => (
);
Object.assign(window, { Nav, Footer, DashboardMockup, SectionHeading, IconBox });