// Landing.jsx — CLASIA institutional landing page // Design tokens const C = { navy: '#0A1E3A', terracotta: '#B25C3A', bone: '#F7F4EE', white: '#FFFFFF', body: '#2A2622', muted: '#5A5247', rule: '#D9D2C3', warmGray: '#CFC8B8', sage: '#5A9173', amber: '#CF9420', oxidized: '#9A3526', }; const FONT_SERIF = '"Newsreader", "Tiempos Text", "Cormorant Garamond", Georgia, serif'; const FONT_SANS = '"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif'; const FONT_MONO = '"JetBrains Mono", ui-monospace, monospace'; // ─── Stellated asterisk mark ─── function AsteriskMark({ size = 28, color = C.terracotta }) { // 8-pointed stellated asterisk const pts = []; const outer = size / 2; const inner = outer * 0.32; for (let i = 0; i < 16; i++) { const a = (i * Math.PI) / 8 - Math.PI / 2; const r = i % 2 === 0 ? outer : inner; pts.push(`${(r * Math.cos(a) + size / 2).toFixed(2)},${(r * Math.sin(a) + size / 2).toFixed(2)}`); } return ( ); } // ─── Logo (mark + wordmark) ─── function Logo({ small = false, color = C.navy, markColor = C.terracotta, showTagline = false }) { const ms = small ? 20 : 28; return (
CLASIA
{showTagline && (
Centro Latinoamericano de Adaptación
a la Super Inteligencia Artificial
)}
); } // ─── Header ─── function Header({ compact = false }) { const navItems = [ { label: 'Inicio', href: '#inicio' }, { label: 'Programa', href: '#programa' }, { label: 'Manifiesto', href: '/manifiesto/' }, { label: 'Fundadores', href: '#fundadores' }, { label: 'El Vigía', href: '#vigia' }, { label: 'Publicaciones', href: '/publicaciones/' }, { label: 'Contacto', href: '#contacto' }, ]; if (compact) { return (
); } return (
); } // ─── HERO ─── function Hero({ compact = false }) { return (
{/* Big wordmark */}
CLASIA
{/* Tagline italic */}
Aprender sin parar.
{/* Subhead sans */}
Centro Latinoamericano de Adaptación a la Super Inteligencia Artificial
{/* Lead paragraph */}
Si el siglo XX fue el siglo de la alfabetización manuscrita —la conquista de la lectoescritura como derecho universal—, el siglo XXI es el siglo de la alfabetización digital en inteligencia artificial. América Latina está llegando tarde.
{/* CTA */}
Leer el programa
{/* Thin rule + monospace date */}
ABRIL 2026 · CIUDAD DE MÉXICO
); } // ─── Category label ─── function CatLabel({ children, color = C.terracotta }) { return (
{children}
); } // ─── Diagnóstico ─── function Diagnostico({ compact = false }) { const stats = [ { n: '26–38 %', c: 'de los empleos formales de América Latina enfrentarán transformación o desplazamiento por IA generativa' }, { n: '1.12 %', c: 'de la inversión mundial en IA es lo que recibe una región que genera el 6.6 % del PIB global' }, { n: '20×', c: 'menos que EE. UU. y China invierte LATAM en investigación y desarrollo de IA' }, ]; return (
Diagnóstico

Lo que está en juego en los próximos 36 meses

{/* Stat blocks */}
{stats.map((s, i) => (
0 && !compact ? `1px solid ${C.rule}` : 'none', paddingLeft: i > 0 && !compact ? 40 : 0, borderTop: compact && i > 0 ? `1px solid ${C.rule}` : 'none', paddingTop: compact && i > 0 ? 32 : 0, }}>
{s.n}
{s.c}
))}
{/* Dot grid heading */}
Adopción global
La conversación sobre IA no la tienen los 2 500 millones.
{/* The 2500-dot grid */}
Cada punto ≈ 3.2 millones de personas · Distribución global de adopción de IA · Febrero 2026
{/* Legend */}
{[ { c: C.oxidized, lbl: 'Usuarios intensivos', sub: '≈ 0.04 %' }, { c: C.amber, lbl: 'Usuarios de pago', sub: '≈ 0.3 %' }, { c: C.sage, lbl: 'Usuarios gratuitos', sub: '≈ 16 %' }, { c: C.warmGray, lbl: 'Sin acceso o sin uso', sub: '≈ 84 %' }, ].map((l, i) => (
{l.lbl}
{l.sub}
))}
); } // The functional 50×50 = 2500 dot grid function DotGrid({ compact = false }) { // Correct orientation (matches original "AI adoption" visualization): // - Gray mass (~84%, never used AI) occupies the TOP rows // - Sage green (~16%, free chatbot users) occupies the BOTTOM 8 rows // - Amber (~0.3%, paid users) = 8 dots in the bottom-right of last row // - Oxidized red (~0.04%, uses coding scaffold) = 1 single dot at bottom-right corner // The single red dot is the visual "we are here" for CLASIA's thesis. const cols = 50, rows = 50; const total = cols * rows; const colors = new Array(total); // Fill top-down, left-to-right with categories in order: gray → sage → amber → oxidized // Counts chosen so rows align: 42 rows of gray (2100) + 8 rows of sage/amber/oxidized (400) // In bottom row: 41 sage + 8 amber + 1 oxidized = 50 // Total sage across 8 bottom rows: 7*50 + 41 = 391. Then 8 amber + 1 oxidized = 400 non-gray. for (let r = 0; r < rows; r++) { for (let c = 0; c < cols; c++) { let color; if (r < rows - 8) { color = C.warmGray; } else if (r < rows - 1) { color = C.sage; } else { // Last row: sage in first 41 cells, amber in next 8, oxidized in last if (c < cols - 9) color = C.sage; else if (c < cols - 1) color = C.amber; else color = C.oxidized; } colors[r * cols + c] = color; } } const gridMax = compact ? 320 : 560; const dotSize = compact ? 4 : 8; const gap = compact ? 1.5 : 3; return (
{colors.map((col, i) => (
))}
); } Object.assign(window, { Logo, AsteriskMark, Header, Hero, Diagnostico, CatLabel, DotGrid, C, FONT_SERIF, FONT_SANS, FONT_MONO, });