/* global React, PROGRAMS, LEVELS, eur, Card, Badge, Button, Icon, LevelChip, Eyebrow */ const { useState: useStateLP } = React; /* ======================================== "Why" — problem statement ======================================== */ function WhySection() { return (
// Por qué nace Escuela de Protones

El sector crece a velocidad de electrolizador. La formación, no tanto.

El hidrógeno renovable se acelera, pero existe una carencia crítica: formación técnica rigurosa basada en experiencia real de campo, no en presentaciones de proveedor.

Los profesionales necesitan comprender no solo la teoría, sino la viabilidad técnica y económica de proyectos reales — desde el diseño conceptual hasta la operación diaria de la planta.

{[ { eyebrow:'01 · Diseño', title:'Ingeniería de detalle', body:'Datasheets reales, dimensionado conceptual y selección tecnológica defendible.', icon: 'factory', }, { eyebrow:'02 · Comisionado', title:'Puesta en marcha', body:'Lecciones aprendidas en plantas auditadas: lo que falla, y por qué.', icon: 'bolt', }, { eyebrow:'03 · Económico', title:'LCOH y sensibilidades', body:'El coste nivelado como brújula: qué palancas mueven la viabilidad.', icon: 'chart', }, { eyebrow:'04 · Operación', title:'Día a día de planta', body:'Curvas de polarización, mantenimiento predictivo, respuesta a desviaciones.', icon: 'wrench', }, ].map((c)=>(
{c.eyebrow}
{c.title}
{c.body}
))}
); } /* ======================================== Levels framework ======================================== */ function LevelsSection() { return (
// Estructura de niveles formativos

Tres niveles, una progresión escalonada.

De los fundamentos del ecosistema hasta el diseño y la operación de electrolizadores en planta. Cada nivel se identifica con un código tipográfico — (i), (a), (e) — presente en todo el catálogo.

{LEVELS.map((l, idx)=>(
{/* Accent rule */}
{/* Level number large in BG */}
{l.code}
nivel · 0{idx+1}

{l.name}

{l.tag}

{l.description}

Para quién
{l.forWhom}
{PROGRAMS.filter(p=>p.level===l.code).length} programa{PROGRAMS.filter(p=>p.level===l.code).length>1?'s':''}
Ver programas
))}
); } /* ======================================== Program catalog ======================================== */ function ProgramsSection({ cardStyle = 'level-bar', layout = 'grid' }) { const [filter, setFilter] = useStateLP('all'); const filtered = filter === 'all' ? PROGRAMS : PROGRAMS.filter(p => p.level === filter); return (
// Catálogo de programas

Seis programas. Toda la cadena de valor del H₂ verde.

Cada programa se imparte en formato intensivo de 3 días consecutivos × 4 h/día — de 16:00 a 20:00 h, con un máximo de 30 alumnos por edición. Teoría aplicada y casos reales auditados.

{/* Filter pills */}
{[ ['all','Todos', null], ['i','Intro', 'i'], ['a','Avanzado', 'a'], ['e','Experto', 'e'], ].map(([k,label,lvl])=>( ))}
{layout === 'grid' ? (
{filtered.map(p => )}
) : (
{filtered.map(p => )}
)}
); } /* Program card — grid view */ function ProgramCard({ p, variant = 'level-bar' }) { const [hover, setHover] = useStateLP(false); const levelColor = p.level === 'i' ? 'var(--lh-cyan)' : p.level === 'a' ? 'var(--lh-blue)' : '#9A9F00'; return ( setHover(true)} onMouseLeave={()=>setHover(false)} style={{ display:'block', textDecoration:'none', color:'inherit', background:'#fff', border:'1px solid var(--border)', borderRadius:16, padding:0, overflow:'hidden', position:'relative', boxShadow: hover ? '0 12px 32px rgba(0,26,112,.08), 0 4px 12px rgba(0,26,112,.05)' : '0 1px 2px rgba(0,26,112,.04)', transform: hover ? 'translateY(-2px)' : 'none', transition:'all 200ms cubic-bezier(.2,.8,.2,1)', }}> {variant === 'level-bar' && (
)}
{p.code}

{p.title}

{p.subtitle}

{p.summary}

Precio
{eur(p.price)}
Formato
{p.duration}
Máx. {p.capacity} alumnos
Ver programa
); } /* Program row — list view */ function ProgramRow({ p }) { const [hover, setHover] = useStateLP(false); const levelColor = p.level === 'i' ? 'var(--lh-cyan)' : p.level === 'a' ? 'var(--lh-blue)' : '#9A9F00'; return ( setHover(true)} onMouseLeave={()=>setHover(false)} style={{ display:'grid', gridTemplateColumns:'56px 80px 1fr 200px 120px 140px 40px', alignItems:'center', gap:20, padding:'18px 24px', background: hover ? 'var(--bg-subtle)' : '#fff', border:'1px solid var(--border)', borderRadius:12, textDecoration:'none', color:'inherit', transition:'all 160ms cubic-bezier(.2,.8,.2,1)', }}>
{p.code}
{p.title}
{p.subtitle}
{p.duration}
{eur(p.price)}
); } Object.assign(window, { WhySection, LevelsSection, ProgramsSection });