// KLEO Device — mockup de teléfono compartido entre index.html y kleo.html. // Misma pieza en los dos lugares: si se ajusta aquí, cambia en ambos. (function () { const { useState, useEffect } = React; const NAVY = (window.BX && window.BX.navy) || '#0D1B2A'; const H = '"Poppins", system-ui, sans-serif'; const B = '"Inter", system-ui, sans-serif'; const IPhone = ({ children, bg = '#F5F3FA', w = 210 }) => (
{children}
); const KleoDevice = () => { const P = '#6B52A8', G = '#1F8A5B', A = '#E07B39'; const [tick, setTick] = useState(0); const [tab, setTab] = useState(0); const [, rerender] = useState(0); useEffect(() => { const t1 = setInterval(() => setTick(n => (n + 1) % 4), 3200); const t2 = setInterval(() => setTab(n => (n + 1) % 3), 4800); const h = () => rerender(n => n + 1); window.addEventListener('langchange', h); return () => { clearInterval(t1); clearInterval(t2); window.removeEventListener('langchange', h); }; }, []); const mk = window.getMk ? window.getMk().kleo : null; const resolveC = cl => cl === 'P' ? P : cl; const tasks = mk ? mk.tasks.slice(0, 4).map(t => ({ ...t, c: resolveC(t.cl) })) : []; const habits = mk ? mk.habits.map(([t, v, pct]) => ({ t, v, pct, c: P })) : []; const tabs = mk ? mk.tabs.slice(0, 3) : ['Hoy', 'Hábitos', 'Pagos']; const statsRow = mk ? mk.stats_row.map(([v, l, c]) => ([v, resolveC(c), l])) : []; return (
KLEO {mk ? mk.date : 'Hoy · Lunes'}
{tabs.map((t, i) => (
{t}
))}
{mk ? mk.pending : 'Pendientes'}
{tasks.map((task, i) => (
{task.done ? '✓' : '○'}
{task.t}
{task.s}
))}
{mk ? mk.habits_label : 'Hábitos'}
{habits.map(h => (
{h.t}{h.v}
))}
{statsRow.map(([v, c, l]) => (
{v}
{l}
))}
); }; window.KleoDevice = KleoDevice; })();