// 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 ── */}
WSI Viewer {/* Bottom fade to blend with screens below */}
{/* IA badge overlay */}
IA procesando análisis
{/* ── 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) => (
{s.label} {/* 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 });