/* YALTA.CL — main app */ const { useState, useEffect, useRef, useMemo, Fragment } = React; const LEY_DATE = new Date('2026-12-01T00:00:00-03:00'); const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "theme": "paper", "logo": "serif", "cursor": "ring", "showCoords": true, "accentColor": "#8A3324", "antiCopy": true }/*EDITMODE-END*/; /* ========== LOGO ========== */ function Logo({ variant = 'serif', size = 26 }) { const cls = variant === 'sans' ? 'logo logo-sans' : variant === 'mono' ? 'logo logo-mono' : 'logo'; return ( YALTA LEX · TECH · ANTOFAGASTA ); } /* ========== COUNTDOWN ========== */ function useCountdown(target) { const [now, setNow] = useState(() => new Date()); useEffect(() => { const id = setInterval(() => setNow(new Date()), 1000); return () => clearInterval(id); }, []); const diff = Math.max(0, target - now); const days = Math.floor(diff / (1000 * 60 * 60 * 24)); const hours = Math.floor((diff / (1000 * 60 * 60)) % 24); const minutes = Math.floor((diff / (1000 * 60)) % 60); const seconds = Math.floor((diff / 1000) % 60); return { days, hours, minutes, seconds }; } function Countdown() { const { days, hours, minutes, seconds } = useCountdown(LEY_DATE); const totalHours = days * 24 + hours; return (
// CUENTA REGRESIVA Ley 21.719 entra en vigencia 1 dic 2026 · 00:00 CLT
); } function Cell({ num, unit }) { return (
{num}
{unit}
); } /* ========== HERO ========== */ function Hero() { return (
ANTOFAGASTA23°39′S 70°23′WEST. 2007 13+ años en TI/OTHabilitado de Derecho · Ley 18.120

Estrategia TI/OT &
Cumplimiento legal digital.

Soy Miguel Yalta. Ingeniero en Informática y Habilitado de Derecho (Art. 2°, Ley 18.120). Diseño, ejecuto y garantizo el cumplimiento legal de la tecnología crítica de empresas de minería, logística, transportes, telecomunicaciones, casino y restaurantes — preparándolas para la Ley 21.719 desde el día uno.

Agenda diagnóstico gratuito {e.preventDefault(); alert('CV: este enlace descargaría /assets/cv-miguel-yalta.pdf');}}> Descargar CV
); } /* ========== FIGURES ========== */ function Figures() { const items = [ ['13+', 'Años en TI / OT'], ['18', 'Proyectos IoT liderados'], ['6.000+', 'Dispositivos M2M integrados'], ['4', 'Sectores regulados atendidos'], ]; return (
{items.map(([n, l]) => (
{n}
{l}
))}
); } /* ========== SERVICES ========== */ const SERVICES = [ { title: 'Tecnología crítica e Infraestructura (IT/OT)', desc: 'Diseño infraestructura que opera 24/7 en ambientes mineros y logísticos, donde cada hora de inactividad cuesta millones.', bullets: [ 'Redes industriales (PROFINET, Ethernet/IP, SCADA)', 'Telemetría M2M y dispositivos GPS Teltonika / Jimi IoT', 'Integración IoT y AVL multiproveedor', 'Virtualización (VMware, Azure) y centros de datos', 'CCTV corporativo (Dahua, Hikvision) y CGM', ], }, { title: 'Compliance Digital y Ciberseguridad Legal', desc: 'Adecuación a la Ley 21.719, contratos tecnológicos blindados y respuesta a incidentes con criterio legal.', bullets: [ 'Adecuación Ley 21.719 / Ley 19.628 / Ley 21.663', 'Delegado de Protección de Datos (DPO) externo', 'Privacy by Design en proyectos IoT/OT', 'Contratos SaaS, IaaS, encargados de tratamiento', 'Peritaje informático y due diligence técnico-legal', ], }, { title: 'Estrategia y Transformación Digital', desc: 'Proyectos integrales con gestión ágil, BI y arquitectura de soluciones para PyME e industria.', bullets: [ 'Gestión de proyectos (Jira, Azure DevOps, ágil)', 'Dashboards BI (Power BI, Cognos)', 'Integración ERP (SAP, Odoo, Softland, Maximise)', 'Arquitectura cloud y de soluciones', 'Capacitación y alfabetización digital', ], }, ]; function Services() { return (
Servicios · 02

Una sola contraparte. Tres frentes resueltos.

La mayoría de las empresas duplica costos contratando por separado a consultoras TI y estudios jurídicos para proyectos que exigen una visión integrada. YALTA elimina esa brecha y centralizo la responsabilidad.

{SERVICES.map((s, i) => (
PILAR · 0{i+1}

{s.title}

{s.desc}

    {s.bullets.map((b) =>
  • {b}
  • )}
))}
); } /* ========== LEY 21.719 ALERT ========== */ function LeyAlert({ onMore }) { const stats = [ ['20.000 UTM', 'Multa máxima (~$1.400M CLP)'], ['4%', 'Ingresos en reincidencia'], ['72h', 'Notificación de brechas'], ['ARCO+', 'Derechos del titular'], ]; return (
Alerta regulatoria · 03

Ley 21.719 entra en vigencia
el 1 de diciembre de 2026.

La nueva Ley de Protección y Tratamiento de Datos Personales reemplaza el marco de la Ley 19.628 (vigente desde 1999) y eleva el estándar a nivel GDPR. Crea la Agencia de Protección de Datos Personales con potestades fiscalizadoras, sancionatorias y normativas reales.

{stats.map(([n, l]) => (
{n}
{l}
))}
); } /* ========== ABOUT ========== */ function About() { const creds = [ ['Título', 'Ingeniero en Informática', 'INACAP, 2013 · Folio SRCeI 500673365289'], ['Habilitación', 'Habilitado de Derecho', 'Universidad del Alba · Vigente Dic 2026 · Art. 2° Inc. 1° Ley 18.120'], ['Postgrado', 'Computer Science for Lawyers', 'HarvardX CS50L · 2026'], ['Diplomado', 'Cooperativismo y Economía Social', 'Min. Economía + DIBAM, 2017'], ]; const chips = ['Minería', 'Logística', 'Transportes', 'Telecomunicaciones', 'Casino', 'Restaurantes', 'Servicios jurídicos', 'Industrial']; return (
Perfil · 01

Porque el riesgo regulatorio
ya no se delega.

Llevo más de una década diseñando, integrando y operando tecnología en ambientes donde una falla paraliza la operación y detona contingencias legales: mineras, flotas, redes corporativas. Empecé en Proyecta S.A. y Fenner Dunlop — Conveyor Services, pasé por consultoría en redes para CRCMAQ, lideré 18 integraciones IoT en YAVANET con más de 6.000 dispositivos M2M desplegados, y dirigí innovación y transformación digital en AMAY GROUP.

En paralelo, estoy Habilitado de Derecho conforme al Art. 2° Inc. 1° de la Ley 18.120, con certificación vigente hasta diciembre 2026. Esta doble formación nació de una observación práctica: en cada proyecto serio aparecían preguntas legales que ninguna gerencia TI tenía cómo responder.

Hoy ofrezco esa integración como servicio: ingeniería que cumple, sin la fricción de coordinar entre tu consultora TI y tu estudio jurídico. Un enfoque especialmente crítico ante las exigencias normativas que entran en vigencia el 1 de diciembre de 2026.

{chips.map(c => {c})}
); } /* ========== REPOSITORY ========== */ const REPO_FOLDERS = [ { id: 'compliance', icon: '▸', label: 'compliance_21719', count: 7 }, { id: 'contracts', icon: '▸', label: 'contratos', count: 4 }, { id: 'dpia', icon: '▸', label: 'dpias', count: 3 }, { id: 'audits', icon: '▸', label: 'auditorías', count: 5 }, { id: 'reports', icon: '▸', label: 'informes_técnicos', count: 9 }, ]; const REPO_FILES = { compliance: [ ['inventario_tratamientos_v3.xlsx', 'XLSX · 142 KB', '12 may 2026', 'ready'], ['gap_analysis_21719.pdf', 'PDF · 1.2 MB', '08 may 2026', 'signed'], ['protocolo_brechas_72h.pdf', 'PDF · 480 KB', '02 may 2026', 'ready'], ['designacion_dpo_externo.pdf', 'PDF · 312 KB', '28 abr 2026', 'signed'], ['registro_consentimientos.csv', 'CSV · 88 KB', '25 abr 2026', 'ready'], ['plan_capacitacion_personal.pdf', 'PDF · 740 KB', '20 abr 2026', 'review'], ['mapa_proveedores_encargados.xlsx', 'XLSX · 96 KB', '15 abr 2026', 'ready'], ], contracts: [ ['encargo_tratamiento_modelo.docx', 'DOCX · 64 KB', '18 may 2026', 'ready'], ['nda_proyecto_minera.pdf', 'PDF · 220 KB', '14 may 2026', 'signed'], ['contrato_consultoría_2026.pdf', 'PDF · 312 KB', '10 may 2026', 'signed'], ['anexo_iot_telemetría.docx', 'DOCX · 48 KB', '05 may 2026', 'review'], ], dpia: [ ['dpia_geolocalización_avl.pdf', 'PDF · 2.1 MB', '22 may 2026', 'signed'], ['dpia_biometría_acceso.pdf', 'PDF · 1.8 MB', '15 may 2026', 'review'], ['dpia_salud_ocupacional.pdf', 'PDF · 1.4 MB', '08 may 2026', 'ready'], ], audits: [ ['audit_redes_OT_q2.pdf', 'PDF · 3.2 MB', '20 may 2026', 'ready'], ['penetration_test_externo.pdf', 'PDF · 4.8 MB', '12 may 2026', 'signed'], ['revisión_cctv_dahua.pdf', 'PDF · 980 KB', '04 may 2026', 'ready'], ['inventario_activos_TI.xlsx', 'XLSX · 124 KB', '28 abr 2026', 'ready'], ['matriz_riesgos_2026.xlsx', 'XLSX · 88 KB', '22 abr 2026', 'review'], ], reports: [ ['informe_mensual_may_2026.pdf', 'PDF · 1.6 MB', '24 may 2026', 'ready'], ['kpi_compliance_dashboard.pdf', 'PDF · 720 KB', '18 may 2026', 'ready'], ['hallazgos_auditoría_q1.pdf', 'PDF · 1.2 MB', '12 may 2026', 'signed'], ['propuesta_arquitectura_v2.pdf', 'PDF · 2.4 MB', '08 may 2026', 'review'], ['benchmark_dispositivos_iot.xlsx', 'XLSX · 168 KB', '02 may 2026', 'ready'], ['reporte_incidentes_abr.pdf', 'PDF · 540 KB', '28 abr 2026', 'ready'], ['plan_migración_cloud.pdf', 'PDF · 1.8 MB', '22 abr 2026', 'review'], ['evaluación_proveedores.xlsx', 'XLSX · 92 KB', '15 abr 2026', 'ready'], ['acta_reunión_kickoff.pdf', 'PDF · 320 KB', '10 abr 2026', 'signed'], ], }; function Repository() { const [authed, setAuthed] = useState(false); const [folder, setFolder] = useState('compliance'); const [user, setUser] = useState(''); const [pass, setPass] = useState(''); const [err, setErr] = useState(''); const handleLogin = (e) => { e.preventDefault(); if (user.trim() && pass.trim()) { setAuthed(true); setErr(''); } else { setErr('Credenciales requeridas.'); } }; return (
Portal cliente · 04

Tu información, siempre disponible.

Repositorio administrable para clientes activos: contratos firmados, inventarios de tratamiento, DPIAs, informes mensuales y artefactos de cumplimiento Ley 21.719. Acceso con doble factor, cifrado en tránsito (TLS 1.3) y registro de auditoría completo.

{!authed ? (

Acceso clientes

Si tu empresa ya es cliente activo, accede con las credenciales que recibiste por correo.
Demo: ingresa cualquier usuario y contraseña.

setUser(e.target.value)} placeholder="empresa@dominio.cl" />
setPass(e.target.value)} placeholder="••••••••" />
{err &&
{err}
}
TLS 1.3 · 2FA obligatorio · Logs auditables
) : (
yalta.cl/cliente/{REPO_FOLDERS.find(f=>f.id===folder).label}
Nombre Tipo / Tamaño Fecha Estado
{REPO_FILES[folder].map(([n, t, d, s]) => (
{n} {t} {d} {s === 'ready' ? 'Listo' : s === 'review' ? 'Revisión' : 'Firmado'}
))}
)}
); } /* ========== CONTACT ========== */ function ContactForm() { const [data, setData] = useState({ name: '', email: '', company: '', phone: '', service: 'compliance', message: '', consent: false, }); const [sent, setSent] = useState(false); const [errors, setErrors] = useState({}); const [sending, setSending] = useState(false); const upd = (k) => (e) => setData(d => ({ ...d, [k]: e.target.type === 'checkbox' ? e.target.checked : e.target.value })); // Endpoint del formulario. FormSubmit.co: zero-config, sin cuenta. // Cambia EMAIL_DESTINO por tu correo real. La primera vez que alguien envíe el formulario, // FormSubmit te enviará un correo de verificación que debes confirmar. const FORM_ENDPOINT = 'https://formsubmit.co/ajax/miguel@yalta.cl'; const submit = async (e) => { e.preventDefault(); const errs = {}; if (!data.name.trim()) errs.name = 'Requerido'; if (!/^\S+@\S+\.\S+$/.test(data.email)) errs.email = 'Email no válido'; if (!data.message.trim()) errs.message = 'Cuéntame brevemente tu consulta'; if (!data.consent) errs.consent = 'Debes aceptar la política de privacidad'; setErrors(errs); if (Object.keys(errs).length > 0) return; setSending(true); const payload = { _subject: `[yalta.cl] Nueva consulta de ${data.name}`, _template: 'table', _captcha: 'false', Nombre: data.name, Empresa: data.company || '—', Email: data.email, Telefono: data.phone || '—', Servicio: data.service, Mensaje: data.message, Origen: 'yalta.cl · formulario web', }; try { const r = await fetch(FORM_ENDPOINT, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify(payload), }); if (r.ok) { setSent(true); } else { throw new Error('http ' + r.status); } } catch (err) { // Fallback: abrir cliente de correo del usuario const body = encodeURIComponent( `Nombre: ${data.name}\nEmpresa: ${data.company}\nEmail: ${data.email}\nTeléfono: ${data.phone}\nServicio: ${data.service}\n\n${data.message}` ); const subject = encodeURIComponent(`[yalta.cl] Consulta de ${data.name}`); window.location.href = `mailto:miguel@yalta.cl?subject=${subject}&body=${body}`; setSent(true); } finally { setSending(false); } }; if (sent) { return (

Mensaje recibido.

Te responderé en menos de 24 horas hábiles al correo {data.email}.

Folio temporal #YLT-{Math.random().toString(36).slice(2,8).toUpperCase()}
); } return (

Diagnóstico gratuito · 30 min

// Respondo en menos de 24 hrs hábiles
{errors.name && {errors.name}}
{errors.email && {errors.email}}
{errors.message && {errors.message}}
{errors.consent && {errors.consent}}
); } function Contact() { return (
Contacto · 05

¿Tu próximo proyecto necesita una mirada técnica
con criterio legal?

Atiendo presencialmente en Antofagasta y remoto a todo Chile. La primera sesión de diagnóstico (30 minutos) es sin costo. Modalidad de trabajo según diagnóstico.

Dirección Calle Prat 548, Of. 501Antofagasta · Chile
Email miguel@yalta.clrespuesta < 24 hrs hábiles
Teléfono +56 9 8827 0039WhatsApp · L-V 09:00-19:00
LinkedIn /in/miguelyaltaPerfil profesional
Cobertura Antofagasta · Santiago · RemotoChile · LatAm
// 23°39′03″S 70°23′59″W · Calle Prat 548, Of. 501 · Antofagasta
Cómo llegar →
); } /* ========== FOOTER ========== */ function Footer({ openModal }) { return ( ); } /* ========== MODAL ========== */ function Modal({ open, title, mono, onClose, children }) { useEffect(() => { if (!open) return; const onKey = (e) => e.key === 'Escape' && onClose(); window.addEventListener('keydown', onKey); document.body.style.overflow = 'hidden'; return () => { window.removeEventListener('keydown', onKey); document.body.style.overflow = ''; }; }, [open, onClose]); if (!open) return null; return (
e.stopPropagation()}>

{title}

{mono &&
{mono}
} {children}
); } /* ========== CUSTOM CURSOR ========== */ function CustomCursor({ variant, showCoords }) { const ringRef = useRef(null); const dotRef = useRef(null); const hRef = useRef(null); const vRef = useRef(null); const readoutRef = useRef(null); const stateRef = useRef({ x: 0, y: 0, tx: 0, ty: 0, active: false, text: false }); useEffect(() => { let rafId; const onMove = (e) => { stateRef.current.tx = e.clientX; stateRef.current.ty = e.clientY; const t = e.target; const interactive = t.closest('a, button, input, textarea, select, [data-cursor="active"], .repo-folder, .repo-file, .service'); const text = t.matches('input, textarea'); stateRef.current.active = !!interactive && !text; stateRef.current.text = text; }; const onLeave = () => { if (ringRef.current) ringRef.current.style.opacity = 0; if (dotRef.current) dotRef.current.style.opacity = 0; }; const onEnter = () => { if (ringRef.current) ringRef.current.style.opacity = 1; if (dotRef.current) dotRef.current.style.opacity = 1; }; const tick = () => { const s = stateRef.current; s.x += (s.tx - s.x) * 0.18; s.y += (s.ty - s.y) * 0.18; if (dotRef.current) { dotRef.current.style.transform = `translate(${s.tx}px, ${s.ty}px) translate(-50%, -50%)`; } if (ringRef.current) { ringRef.current.style.transform = `translate(${s.x}px, ${s.y}px) translate(-50%, -50%)`; ringRef.current.className = 'cursor-ring' + (s.active ? ' cursor-active' : '') + (s.text ? ' cursor-text' : ''); } if (variant === 'crosshair') { if (hRef.current) hRef.current.style.transform = `translateY(${s.ty}px)`; if (vRef.current) vRef.current.style.transform = `translateX(${s.tx}px)`; } if (readoutRef.current && showCoords) { readoutRef.current.style.transform = `translate(${s.tx + 18}px, ${s.ty + 18}px)`; const xs = String(Math.round(s.tx)).padStart(4, '0'); const ys = String(Math.round(s.ty)).padStart(4, '0'); readoutRef.current.textContent = `x:${xs} · y:${ys}`; } rafId = requestAnimationFrame(tick); }; rafId = requestAnimationFrame(tick); window.addEventListener('mousemove', onMove); window.addEventListener('mouseleave', onLeave); window.addEventListener('mouseenter', onEnter); return () => { cancelAnimationFrame(rafId); window.removeEventListener('mousemove', onMove); window.removeEventListener('mouseleave', onLeave); window.removeEventListener('mouseenter', onEnter); }; }, [variant, showCoords]); if (variant === 'off') return null; return (
{variant === 'crosshair' && (
)}
{showCoords &&
x:0000 · y:0000
}
); } /* ========== SCROLL TO TOP ========== */ function ScrollTop() { const [show, setShow] = useState(false); const [progress, setProgress] = useState(0); useEffect(() => { const onScroll = () => { const doc = document.documentElement; const total = doc.scrollHeight - window.innerHeight; const scrolled = window.scrollY; const pct = total > 0 ? scrolled / total : 0; setProgress(pct); // show after scrolling 60% of one viewport setShow(scrolled > window.innerHeight * 0.6); }; window.addEventListener('scroll', onScroll, { passive: true }); onScroll(); return () => window.removeEventListener('scroll', onScroll); }, []); const circumference = 2 * Math.PI * 20; const offset = circumference * (1 - progress); return ( ); } /* ========== WHATSAPP ========== */ function WhatsApp() { const msg = encodeURIComponent('Hola Miguel, vi tu sitio yalta.cl y me gustaría agendar un diagnóstico.'); return ( WhatsApp directo ); } /* ========== IP TRACKER ========== */ function VisitorBadge({ inline = false }) { const [data, setData] = useState({ current: null, last: null, count: 0 }); const [expanded, setExpanded] = useState(false); useEffect(() => { let cancelled = false; const STORAGE_KEY = 'yalta_visitor_log'; const stored = (() => { try { return JSON.parse(localStorage.getItem(STORAGE_KEY) || '{}'); } catch { return {}; } })(); fetch('https://api.ipify.org?format=json') .then(r => r.ok ? r.json() : Promise.reject()) .then(j => { if (cancelled) return; const now = new Date().toISOString(); const last = stored.current && stored.current.ip !== j.ip ? stored.current : (stored.last || null); const count = (stored.count || 0) + 1; const current = { ip: j.ip, ts: now }; const next = { current, last, count }; try { localStorage.setItem(STORAGE_KEY, JSON.stringify(next)); } catch {} setData(next); }) .catch(() => { if (cancelled) return; setData({ current: { ip: '———.———.———.———', ts: new Date().toISOString() }, last: stored.last || stored.current || null, count: stored.count || 0 }); }); return () => { cancelled = true; }; }, []); const fmt = (iso) => { if (!iso) return '—'; const d = new Date(iso); return d.toLocaleString('es-CL', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }); }; return (
setExpanded(e => !e)} data-cursor="active" role="button" title="Bitácora de visitas">
IP actual {data.current ? data.current.ip : 'detectando…'}
{expanded && (
Última visita previa {data.last ? data.last.ip : 'primera visita'}
Fecha previa {data.last ? fmt(data.last.ts) : '—'}
Visitas registradas {String(data.count).padStart(4,'0')}
Bitácora local en este navegador. Cumple Art. 14 Ley 21.719 · registro de accesos.
)}
); } /* ========== ANTI-COPY ========== */ function useAntiCopy(enabled) { useEffect(() => { if (!enabled) return; const isField = (el) => el && (el.matches('input, textarea, [contenteditable="true"]')); const notify = (msg = 'Contenido protegido · Ley 17.336') => { const t = document.createElement('div'); t.className = 'copy-toast'; t.textContent = msg; document.body.appendChild(t); setTimeout(() => t.classList.add('show'), 10); setTimeout(() => { t.classList.remove('show'); setTimeout(() => t.remove(), 300); }, 1800); }; const onCopy = (e) => { if (isField(e.target)) return; e.preventDefault(); try { e.clipboardData && e.clipboardData.setData('text/plain', '© yalta.cl · contenido protegido por Ley 17.336.'); } catch {} notify('Copia bloqueada · contenido protegido'); }; const onContext = (e) => { if (isField(e.target)) return; // allow context menu inside mobile menu (so links work normally) if (e.target.closest('.mobile-menu')) return; e.preventDefault(); notify('Menú contextual deshabilitado'); }; const onDrag = (e) => { if (!isField(e.target)) e.preventDefault(); }; const onSelect = (e) => { if (isField(e.target)) return; if (e.target.closest && e.target.closest('.mobile-menu')) return; e.preventDefault(); }; const onKey = (e) => { if (isField(e.target)) return; const k = e.key.toLowerCase(); if ((e.ctrlKey || e.metaKey) && ['c','x','s','u','p','a'].includes(k)) { e.preventDefault(); notify('Acción bloqueada · Ctrl+' + k.toUpperCase()); } if (k === 'printscreen') notify('Captura detectada'); }; document.addEventListener('copy', onCopy); document.addEventListener('cut', onCopy); document.addEventListener('contextmenu', onContext); document.addEventListener('dragstart', onDrag); document.addEventListener('selectstart', onSelect); document.addEventListener('keydown', onKey); document.body.classList.add('no-copy'); return () => { document.removeEventListener('copy', onCopy); document.removeEventListener('cut', onCopy); document.removeEventListener('contextmenu', onContext); document.removeEventListener('dragstart', onDrag); document.removeEventListener('selectstart', onSelect); document.removeEventListener('keydown', onKey); document.body.classList.remove('no-copy'); }; }, [enabled]); } /* ========== NAV ========== */ function Nav({ logo, openModal }) { const [open, setOpen] = useState(false); useEffect(() => { const close = () => setOpen(false); window.addEventListener('hashchange', close); return () => window.removeEventListener('hashchange', close); }, []); useEffect(() => { document.body.style.overflow = open ? 'hidden' : ''; document.body.classList.toggle('menu-open', open); return () => { document.body.style.overflow = ''; document.body.classList.remove('menu-open'); }; }, [open]); const links = [ ['#perfil', 'Perfil'], ['#servicios', 'Servicios'], ['#ley', 'Ley 21.719'], ['#repositorio', 'Portal'], ['#contacto', 'Contacto'], ]; return ( ); } /* ========== APP ========== */ function App() { const [t, setTweak] = window.useTweaks(TWEAK_DEFAULTS); const [modal, setModal] = useState(null); useAntiCopy(t.antiCopy !== false); useEffect(() => { document.documentElement.setAttribute('data-theme', t.theme === 'paper' ? '' : t.theme); }, [t.theme]); useEffect(() => { document.documentElement.style.setProperty('--accent', t.accentColor); }, [t.accentColor]); const openModal = (k) => setModal(k); useEffect(() => { window.openModal = openModal; }, []); return (
); } /* ========== TWEAKS ========== */ function TweaksUI({ t, setTweak }) { const { TweaksPanel, TweakSection, TweakRadio, TweakColor, TweakToggle } = window; return ( setTweak('theme', v)} options={[{ value: 'paper', label: 'Papel' }, { value: 'sand', label: 'Arena' }, { value: 'dark', label: 'Oscuro' }]} /> setTweak('accentColor', v)} options={['#8A3324', '#1F3A5F', '#2F6E3E', '#B45309', '#7A2E1B']} /> setTweak('logo', v)} options={[{ value: 'serif', label: 'Serif' }, { value: 'sans', label: 'Sans' }, { value: 'mono', label: 'Mono' }]} /> setTweak('cursor', v)} options={[{ value: 'ring', label: 'Anillo' }, { value: 'crosshair', label: 'Cruceta' }, { value: 'off', label: 'Apagado' }]} /> setTweak('showCoords', v)} /> setTweak('antiCopy', v)} /> ); } /* ========== LEGAL CONTENT ========== */ function PrivacyContent() { return (

Resumen ejecutivo. Miguel Yalta (yalta.cl) recopila únicamente los datos personales necesarios para responder consultas profesionales, gestionar la relación contractual y cumplir obligaciones legales. Los datos se almacenan en Chile, no se comercializan, y usted conserva todos los derechos ARCO+ que le otorga la Ley 21.719.

1. Responsable del Tratamiento

Miguel Ángel Yalta · Calle Prat 548, Oficina 501, Antofagasta, Chile · miguel@yalta.cl · +56 9 8827 0039 · Habilitado de Derecho, Art. 2° Inc. 1° Ley 18.120 (vigente).

2. Datos que recopilamos

3. Finalidades

Atención de consultas, ejecución de servicios contratados, cumplimiento legal (Ley 21.719, 19.628, 21.663, SII), facturación, comunicaciones de proyecto y seguridad de la información. No se realiza perfilamiento automatizado ni decisiones automatizadas con efectos jurídicos.

4. Base legal

Consentimiento expreso, ejecución contractual, cumplimiento de obligación legal, o interés legítimo del Responsable, conforme Art. 12 Ley 21.719.

5. Conservación

6. Derechos ARCO+ (Ley 21.719)

Acceso, Rectificación, Cancelación/Supresión, Oposición, Portabilidad y Bloqueo. Solicite a miguel@yalta.cl con asunto "Derechos ARCO+ — Ley 21.719" adjuntando cédula. Respuesta en plazo máximo de 15 días hábiles.

7. Transferencias

No se comercializan datos. Sólo se comparten con encargados contractualmente vinculados (cloud, email, facturación), autoridades públicas frente a requerimientos legales, y asesores profesionales con deber de secreto. Datos preferentemente alojados en Chile.

8. Cookies

Sólo cookies técnicas necesarias y analítica anonimizada (Plausible/Umami). No se usan cookies publicitarias, retargeting ni terceros con fines de marketing.

9. Seguridad

Cifrado TLS 1.3 en tránsito, control de acceso por roles, 2FA, respaldos cifrados, registro de auditoría y monitoreo de integridad. En caso de brecha, notificación a la Agencia y a los titulares en plazo máximo de 72 horas (Art. 14 quinquies Ley 21.719).

10. Menores

Servicios dirigidos a mayores de edad y personas jurídicas. No se recopilan datos de menores de 14 años (Art. 16 Ley 21.719).

11. Modificaciones

Cambios sustanciales se comunicarán con al menos 30 días de anticipación.

12. Reclamos

Puede presentar reclamo ante la Agencia de Protección de Datos Personales si considera que el tratamiento no cumple con la Ley 21.719.

); } function TermsContent() { return (

Aceptación. Al contratar servicios profesionales, utilizar este sitio web, o intercambiar comunicaciones formales conmigo, usted declara haber leído, comprendido y aceptado íntegramente los presentes Términos y Condiciones.

1. Identificación del prestador

Miguel Ángel Yalta · Ingeniero en Informática (INACAP, 2013, Folio SRCeI 500673365289) · Habilitado de Derecho (Art. 2° Inc. 1° Ley 18.120, vigente) · Prat 548 Of. 501, Antofagasta · miguel@yalta.cl · +56 9 8827 0039.

2. Servicios prestados

3. Modalidades

Modalidad de trabajo definida según diagnóstico.

4. Honorarios

CLP + IVA cuando corresponda. Pago a 30 días corridos. Retraso >30 días autoriza suspensión previa notificación de 7 días.

5. Obligaciones del cliente

Información veraz y oportuna, contraparte técnica designada, accesos razonables, pago oportuno. Cuando se traten datos personales de terceros, el cliente actuará como Responsable y Miguel Yalta como Encargado, suscribiendo contrato de encargo conforme Art. 15 ter Ley 21.719.

6. Obligaciones del prestador

Diligencia profesional, confidencialidad estricta, notificación de riesgos, cumplimiento de Ley 21.719 cuando actúe como Encargado, notificación de brechas en plazo máximo de 48 horas al cliente.

7. Propiedad Intelectual (Ley 17.336)

Contenido del sitio yalta.cl es propiedad exclusiva de Miguel Ángel Yalta. Reproducción no autorizada está prohibida. Documentación y diseños de proyectos: cedidos al cliente para uso interno ilimitado. Código fuente: regulado caso a caso (por defecto, licencia perpetua de uso interno). Metodologías, plantillas y know-how permanecen en propiedad del prestador.

8. Confidencialidad

Obligación recíproca por 5 años después de terminada la relación contractual.

9. Limitación de responsabilidad

No se responde por fuerza mayor, uso indebido del cliente, decisiones operacionales basadas en informes, ni pérdidas indirectas. La responsabilidad total queda limitada al monto efectivamente facturado y pagado en los 12 meses anteriores al evento, salvo dolo o culpa grave.

10. Protección de datos

Regida por la Política de Privacidad de yalta.cl y la Ley 21.719.

11. Terminación

Cualquier parte puede terminar con 30 días de aviso escrito. Incumplimiento grave permite terminación inmediata. Cliente puede solicitar portabilidad de datos (Art. 12 bis Ley 21.719).

12. Ley aplicable

Leyes de la República de Chile. Controversias: conversación directa (30 días) → mediación voluntaria → Tribunales Ordinarios de Antofagasta.

); } function LeyContent() { return (

La Ley N° 21.719 regula la protección y tratamiento de datos personales en Chile y crea la Agencia de Protección de Datos Personales. Publicada el 13 de diciembre de 2024 y vigente plenamente desde el 1 de diciembre de 2026. Reemplaza la Ley 19.628 (1999) y alinea Chile con el estándar GDPR.

A quién aplica

Toda persona natural o jurídica, pública o privada, que trate datos personales en Chile —incluyendo empresas extranjeras con efecto extraterritorial sobre datos de personas en Chile.

La Agencia

Derechos del titular (ARCO+)

// Plazo de respuesta del Responsable: 15 días hábiles.

Obligaciones para empresas

Sanciones

Notificación de brechas

72 horas a la Agencia desde la detección · sin demora indebida a titulares afectados cuando el riesgo sea alto.

Impacto especial en minería y logística

Geolocalización continua (AVL/GPS), biometría de control de acceso, datos de salud ocupacional, productividad en faena y datos de contratistas suelen calificar como tratamientos de alto riesgo que requieren DPIA obligatoria.

Hoja de ruta 90 días

); } ReactDOM.createRoot(document.getElementById('root')).render();