// Pyrovolt — VoltCore App page + HomeSection

function AppPhoneCPO() {
  const stations = [
    { id: 'MAD-01', name: 'Madrid Cuatro Torres', status: 'active', sessions: 8, kwh: 247 },
    { id: 'VLC-03', name: 'Valencia · Ronda Norte', status: 'active', sessions: 5, kwh: 182 },
    { id: 'BCN-07', name: 'Barcelona Zona Franca', status: 'warn', sessions: 2, kwh: 89 },
    { id: 'SEV-02', name: 'Sevilla Triana', status: 'active', sessions: 4, kwh: 156 },
  ];
  return (
    <div className="phone-screen" style={{ padding: '48px 18px 18px', overflow: 'auto' }}>
      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 16 }}>
        <div>
          <div style={{ fontFamily: 'var(--font-mono)', fontSize: 9, color: '#6B6963', letterSpacing: '0.1em' }}>VOLTCORE · CPO</div>
          <div style={{ fontFamily: 'var(--font-display)', fontSize: 18, fontWeight: 600 }}>Buenos días, Laura</div>
        </div>
        <div style={{ width: 32, height: 32, borderRadius: '50%', background: '#2A2A2A' }}/>
      </div>
      {/* Hero metric */}
      <div style={{ background: 'linear-gradient(140deg, #1A1A1E, #0F0F10)', borderRadius: 16, padding: 16, marginBottom: 12, border: '1px solid #242428' }}>
        <div style={{ fontFamily: 'var(--font-mono)', fontSize: 9, color: '#A78BFA', letterSpacing: '0.1em', marginBottom: 4 }}>● RED · EN DIRECTO</div>
        <div style={{ fontFamily: 'var(--font-display)', fontSize: 40, fontWeight: 700, letterSpacing: '-0.03em', lineHeight: 1, marginBottom: 2 }}>Operación</div>
        <div style={{ display: 'flex', gap: 10, marginTop: 8 }}>
          <div style={{ flex: 1 }}>
            <div style={{ fontFamily: 'var(--font-display)', fontSize: 16, fontWeight: 600 }}>kWh</div>
            <div style={{ fontSize: 9, color: '#6B6963' }}>energía</div>
          </div>
          <div style={{ flex: 1 }}>
            <div style={{ fontFamily: 'var(--font-display)', fontSize: 16, fontWeight: 600 }}>En vivo</div>
            <div style={{ fontSize: 9, color: '#6B6963' }}>sesiones</div>
          </div>
          <div style={{ flex: 1 }}>
            <div style={{ fontFamily: 'var(--font-display)', fontSize: 16, fontWeight: 600 }}>OCPP</div>
            <div style={{ fontSize: 9, color: '#6B6963' }}>control</div>
          </div>
        </div>
      </div>
      <div style={{ fontSize: 10, fontFamily: 'var(--font-mono)', color: '#6B6963', letterSpacing: '0.1em', marginBottom: 8 }}>ESTACIONES</div>
      {stations.map(s => (
        <div key={s.id} style={{ padding: 12, background: '#17171A', borderRadius: 12, marginBottom: 6, display: 'flex', alignItems: 'center', gap: 10 }}>
          <div style={{ width: 8, height: 8, borderRadius: '50%', background: s.status === 'active' ? '#A78BFA' : '#F59E0B' }}/>
          <div style={{ flex: 1 }}>
            <div style={{ fontSize: 12, fontWeight: 500 }}>{s.name}</div>
            <div style={{ fontSize: 9, color: '#6B6963', fontFamily: 'var(--font-mono)' }}>{s.id}</div>
          </div>
          <div style={{ textAlign: 'right' }}>
            <div style={{ fontFamily: 'var(--font-display)', fontSize: 14, fontWeight: 600 }}>{s.sessions}</div>
            <div style={{ fontSize: 9, color: '#6B6963' }}>{s.kwh} kWh</div>
          </div>
        </div>
      ))}
    </div>
  );
}

function AppPhoneMap() {
  const pins = [
    { x: 30, y: 40, on: true }, { x: 62, y: 35, on: true }, { x: 45, y: 60, on: true },
    { x: 75, y: 55, on: false }, { x: 22, y: 70, on: true }, { x: 55, y: 75, on: true },
    { x: 80, y: 30, on: true }, { x: 35, y: 25, on: false },
  ];
  return (
    <div className="phone-screen" style={{ padding: 0, position: 'relative' }}>
      {/* "Map" */}
      <div style={{ position: 'absolute', inset: 0, background: 'linear-gradient(180deg, #1a1f24 0%, #0f1215 100%)' }}>
        {/* grid lines */}
        {Array.from({length: 12}).map((_, i) => (
          <div key={'h'+i} style={{ position: 'absolute', top: `${i * 10}%`, left: 0, right: 0, height: 1, background: 'rgba(255,255,255,0.03)' }}/>
        ))}
        {Array.from({length: 8}).map((_, i) => (
          <div key={'v'+i} style={{ position: 'absolute', left: `${i * 14}%`, top: 0, bottom: 0, width: 1, background: 'rgba(255,255,255,0.03)' }}/>
        ))}
        {/* roads */}
        <div style={{ position: 'absolute', top: '52%', left: 0, right: 0, height: 2, background: 'rgba(255,255,255,0.08)' }}/>
        <div style={{ position: 'absolute', left: '48%', top: 0, bottom: 0, width: 2, background: 'rgba(255,255,255,0.08)' }}/>
        {/* pins */}
        {pins.map((p, i) => (
          <div key={i} style={{ position: 'absolute', left: `${p.x}%`, top: `${p.y}%` }}>
            <div style={{ width: 14, height: 14, borderRadius: '50%', background: p.on ? '#A78BFA' : '#6B6963', boxShadow: p.on ? '0 0 12px rgba(167,139,250,0.6)' : 'none', border: '2px solid #0F0F10' }}/>
          </div>
        ))}
      </div>
      {/* Search bar */}
      <div style={{ position: 'absolute', top: 46, left: 14, right: 14, background: 'rgba(20,20,24,0.85)', backdropFilter: 'blur(10px)', borderRadius: 14, padding: '12px 14px', display: 'flex', alignItems: 'center', gap: 10, border: '1px solid rgba(255,255,255,0.08)' }}>
        <div style={{ width: 14, height: 14, borderRadius: '50%', border: '1.5px solid #A6A39C' }}/>
        <div style={{ fontSize: 13, color: '#A6A39C' }}>Buscar puntos cerca de ti</div>
      </div>
      {/* Bottom sheet */}
      <div style={{ position: 'absolute', bottom: 0, left: 0, right: 0, background: '#141418', borderRadius: '20px 20px 0 0', padding: '16px 16px 24px', border: '1px solid rgba(255,255,255,0.06)' }}>
        <div style={{ width: 36, height: 4, borderRadius: 2, background: '#2A2A2A', margin: '0 auto 14px' }}/>
        <div style={{ display: 'flex', alignItems: 'center', gap: 10, marginBottom: 12 }}>
          <div style={{ width: 40, height: 40, borderRadius: 10, background: 'rgba(167,139,250,0.12)', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#A78BFA', fontFamily: 'var(--font-display)', fontWeight: 700, fontSize: 13 }}>350</div>
          <div style={{ flex: 1 }}>
            <div style={{ fontSize: 13, fontWeight: 600 }}>Madrid · Cuatro Torres</div>
            <div style={{ fontSize: 10, color: '#6B6963', fontFamily: 'var(--font-mono)' }}>● disponible · alta potencia · CCS2</div>
          </div>
        </div>
        <button style={{ width: '100%', padding: 13, background: '#F4F2ED', color: '#0A0A0A', borderRadius: 999, fontSize: 13, fontWeight: 600 }}>
          Ver ruta
        </button>
      </div>
    </div>
  );
}

function AppPhoneCharging() {
  return (
    <div className="phone-screen" style={{ padding: '48px 18px 18px', display: 'flex', flexDirection: 'column' }}>
      <div style={{ fontFamily: 'var(--font-mono)', fontSize: 9, color: '#A78BFA', letterSpacing: '0.1em', marginBottom: 6 }}>● CARGANDO</div>
      <div style={{ fontFamily: 'var(--font-display)', fontSize: 16, fontWeight: 600, marginBottom: 24 }}>Madrid · Cuatro Torres</div>

      {/* Big ring */}
      <div style={{ position: 'relative', width: 200, height: 200, margin: '0 auto 24px' }}>
        <svg viewBox="0 0 200 200" style={{ width: '100%', height: '100%', transform: 'rotate(-90deg)' }}>
          <circle cx="100" cy="100" r="88" fill="none" stroke="#1F1F22" strokeWidth="10"/>
          <circle cx="100" cy="100" r="88" fill="none" stroke="#A78BFA" strokeWidth="10" strokeLinecap="round"
            strokeDasharray={`${2 * Math.PI * 88}`}
            strokeDashoffset={`${2 * Math.PI * 88 * (1 - 0.62)}`}
            style={{ filter: 'drop-shadow(0 0 12px rgba(167,139,250,0.5))' }}/>
        </svg>
        <div style={{ position: 'absolute', inset: 0, display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center' }}>
          <div style={{ fontFamily: 'var(--font-display)', fontSize: 56, fontWeight: 700, letterSpacing: '-0.03em', lineHeight: 1 }}>62<span style={{ fontSize: 20, color: '#6B6963' }}>%</span></div>
          <div style={{ fontSize: 10, color: '#6B6963', fontFamily: 'var(--font-mono)', letterSpacing: '0.08em', marginTop: 4 }}>SoC</div>
        </div>
      </div>

      {/* Stats */}
      <div style={{ display: 'flex', gap: 8, marginBottom: 16 }}>
        <div style={{ flex: 1, padding: 12, background: '#17171A', borderRadius: 12 }}>
          <div style={{ fontSize: 9, color: '#6B6963', fontFamily: 'var(--font-mono)', letterSpacing: '0.08em', marginBottom: 4 }}>POTENCIA</div>
          <div style={{ fontFamily: 'var(--font-display)', fontSize: 20, fontWeight: 600, color: '#A78BFA' }}>247 <span style={{ fontSize: 11, color: '#6B6963', fontWeight: 400 }}>kW</span></div>
        </div>
        <div style={{ flex: 1, padding: 12, background: '#17171A', borderRadius: 12 }}>
          <div style={{ fontSize: 9, color: '#6B6963', fontFamily: 'var(--font-mono)', letterSpacing: '0.08em', marginBottom: 4 }}>RESTANTE</div>
          <div style={{ fontFamily: 'var(--font-display)', fontSize: 20, fontWeight: 600 }}>14 <span style={{ fontSize: 11, color: '#6B6963', fontWeight: 400 }}>min</span></div>
        </div>
      </div>
      <div style={{ padding: 12, background: '#17171A', borderRadius: 12, marginBottom: 12 }}>
        <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 6 }}>
          <span style={{ fontSize: 10, color: '#6B6963', fontFamily: 'var(--font-mono)' }}>COSTE ACTUAL</span>
          <span style={{ fontSize: 13, fontFamily: 'var(--font-display)', fontWeight: 600 }}>visible</span>
        </div>
        <div style={{ display: 'flex', justifyContent: 'space-between' }}>
          <span style={{ fontSize: 10, color: '#6B6963', fontFamily: 'var(--font-mono)' }}>TARIFA</span>
          <span style={{ fontSize: 11, color: '#A6A39C' }}>0,39 €/kWh</span>
        </div>
      </div>
      <button style={{ padding: 13, background: 'transparent', border: '1px solid #EF4444', color: '#EF4444', borderRadius: 999, fontSize: 13, fontWeight: 500 }}>
        Detener carga
      </button>
    </div>
  );
}

function VoltCoreSection({ navigate }) {
  return (
    <section className="dark section" style={{ borderTop: '1px solid var(--dark-line)', position: 'relative', overflow: 'hidden' }}>
      <div className="container">
        <div style={{ display: 'grid', gridTemplateColumns: 'repeat(12, 1fr)', gap: 40, alignItems: 'center' }}>
          <div style={{ gridColumn: 'span 5' }}>
            <Reveal>
              <div className="h-eyebrow" style={{ marginBottom: 20, color: 'var(--dark-fg-dim)' }}>
                <span style={{ display: 'inline-block', width: 8, height: 8, borderRadius: '50%', background: '#A78BFA', marginRight: 10, verticalAlign: 'middle' }}/>
                VoltCore App
              </div>
              <h2 className="h-title" style={{ marginBottom: 24, color: 'var(--dark-fg)' }}>
                Tu red en el bolsillo.
              </h2>
              <p className="t-lead" style={{ color: 'var(--dark-fg-dim)', marginBottom: 32 }}>
                Una sola app. Dos modos. Los operadores controlan estaciones, disponibilidad,
                tarifas e incidencias. Los conductores encuentran puntos, inician carga y pagan.
              </p>
              <div style={{ display: 'flex', flexDirection: 'column', gap: 16, marginBottom: 32 }}>
                <VCItem n="01" title="Dashboard CPO" desc="Estado de red, sesiones activas, alarmas y disponibilidad. OCPP 2.0.1 nativo."/>
                <VCItem n="02" title="Mapa en tiempo real" desc="Disponibilidad, tarifas y ruta al punto más cercano."/>
                <VCItem n="03" title="Iniciar · parar · pagar" desc="Sesión completa desde el móvil con pago integrado y recibo."/>
              </div>
              <div style={{ display: 'flex', gap: 12 }}>
                <a className="btn btn-primary btn-lg" href="#app" onClick={e => { e.preventDefault(); navigate('app'); }}>
                  Conocer VoltCore
                </a>
                <a className="btn btn-ghost btn-lg" href="#app" onClick={e => { e.preventDefault(); navigate('app'); }} style={{ borderColor: 'var(--dark-line-strong)', color: 'var(--dark-fg)' }}>
                  Ver app
                </a>
              </div>
            </Reveal>
          </div>
          <div style={{ gridColumn: 'span 7', display: 'flex', justifyContent: 'center', alignItems: 'center', gap: 20, position: 'relative' }}>
            <div style={{ position: 'absolute', inset: '-20%', background: 'radial-gradient(ellipse at center, rgba(167,139,250,0.08), transparent 60%)', pointerEvents: 'none' }}/>
            <Reveal style={{ transform: 'translateY(30px) rotate(-3deg)' }}>
              <div className="phone" style={{ transform: 'rotate(-4deg)' }}>
                <AppPhoneCPO/>
              </div>
            </Reveal>
            <Reveal style={{ zIndex: 2 }}>
              <div className="phone" style={{ transform: 'translateY(-20px)' }}>
                <AppPhoneCharging/>
              </div>
            </Reveal>
            <Reveal style={{ transform: 'translateY(30px) rotate(3deg)' }}>
              <div className="phone" style={{ transform: 'rotate(4deg)' }}>
                <AppPhoneMap/>
              </div>
            </Reveal>
          </div>
        </div>
      </div>
    </section>
  );
}

const VCItem = ({ n, title, desc }) => (
  <div style={{ display: 'grid', gridTemplateColumns: '40px 1fr', gap: 16, paddingTop: 16, borderTop: '1px solid var(--dark-line)' }}>
    <div className="t-mono" style={{ color: 'var(--dark-fg-mute)' }}>{n}</div>
    <div>
      <div style={{ fontFamily: 'var(--font-display)', fontSize: 20, fontWeight: 500, letterSpacing: '-0.02em', color: 'var(--dark-fg)', marginBottom: 4 }}>{title}</div>
      <div style={{ color: 'var(--dark-fg-dim)', fontSize: 14 }}>{desc}</div>
    </div>
  </div>
);

function LegacyAppPage({ navigate }) {
  const [view, setView] = React.useState('cpo');
  const views = {
    cpo: { title: 'Para operadores', desc: 'Panel CPMS para estaciones, sesiones, tarifas, incidencias y operación remota. OCPP 2.0.1 y APIs abiertas.', features: ['Dashboard en tiempo real', 'Control remoto OCPP', 'Gestión de tarifas', 'Roaming y APIs', 'Perfiles y permisos', 'Alertas operativas'] },
    user:  { title: 'Para conductores', desc: 'Buscar punto, iniciar carga, seguir la sesión y pagar desde una experiencia directa.', features: ['Mapa con disponibilidad', 'Plug & Charge ISO 15118', 'Pago integrado', 'Histórico y facturas', 'Ruta con paradas', 'Tarifas transparentes'] },
  };
  const v = views[view];
  return (
    <>
      {/* Header */}
      <section style={{ paddingTop: 140, paddingBottom: 60, position: 'relative', overflow: 'hidden' }}>
        <div style={{ position: 'absolute', inset: 0, background: 'radial-gradient(ellipse 60% 50% at 50% 100%, var(--accent-glow), transparent 70%)', pointerEvents: 'none' }}/>
        <div className="container" style={{ position: 'relative' }}>
        <div className="h-eyebrow" style={{ marginBottom: 24, color: 'var(--accent-soft)' }}>VoltCore App</div>
        <h1 className="h-display" style={{ marginBottom: 24, maxWidth: '14ch', fontSize: 'clamp(56px, 9vw, 140px)' }}>
          Una app.<br/><It>Dos modos.</It>
        </h1>
        <p className="t-lead" style={{ marginBottom: 40, maxWidth: 720 }}>
          VoltCore es el sistema operativo de Pyrovolt. Gestión profesional para operadores y experiencia simple para conductores.
          Cambia de un modo a otro según tu rol.
        </p>
        <div style={{ display: 'flex', gap: 8 }}>
          {['cpo', 'user'].map(k => (
            <button key={k} onClick={() => setView(k)} className="btn"
              style={{
                background: view === k ? 'var(--accent)' : 'transparent',
                color: view === k ? 'var(--accent-fg)' : 'var(--fg)',
                border: '1px solid ' + (view === k ? 'var(--accent)' : 'var(--line-strong)'),
                padding: '12px 24px',
              }}>
              {k === 'cpo' ? 'Modo CPO' : 'Modo Usuario'}
            </button>
          ))}
        </div>
        </div>
      </section>

      {/* Detail */}
      <section className="container" style={{ paddingTop: 40, paddingBottom: 60 }}>
        <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 0, alignItems: 'stretch', background: 'var(--bg-elev)', borderRadius: 24, overflow: 'hidden', border: '1px solid var(--line)' }}>
          <div style={{ padding: 48 }}>
            <div className="h-eyebrow" style={{ marginBottom: 16 }}>{v.title}</div>
            <h2 className="h-section" style={{ marginBottom: 20 }}>
              {view === 'cpo' ? 'Toda tu red, en una sola pantalla.' : 'Encuentra, enchufa, paga.'}
            </h2>
            <p className="t-lead" style={{ marginBottom: 32 }}>{v.desc}</p>
            <div>
              {v.features.map((f, i) => (
                <div key={i} style={{ padding: '14px 0', borderTop: '1px solid var(--line)', display: 'flex', gap: 16, alignItems: 'center' }}>
                  <span className="t-mono" style={{ color: 'var(--fg-mute)' }}>{String(i+1).padStart(2, '0')}</span>
                  <span style={{ fontSize: 15, color: 'var(--fg)' }}>{f}</span>
                </div>
              ))}
            </div>
          </div>
          <div style={{ borderLeft: '1px solid var(--line)', minHeight: 620, display: 'flex', justifyContent: 'center', alignItems: 'center', position: 'relative', background: 'var(--bg)' }}>
            <div style={{ position: 'absolute', inset: 0, background: 'radial-gradient(ellipse at center, color-mix(in oklab, var(--accent) 14%, transparent), transparent 70%)' }}/>
            <div className="phone" style={{ position: 'relative', zIndex: 2 }}>
              {view === 'cpo' ? <AppPhoneCPO/> : <AppPhoneMap/>}
            </div>
          </div>
        </div>
      </section>

      {/* Integraciones */}
      <section className="container" style={{ paddingBottom: 60 }}>
        <div style={{ padding: '40px 32px', background: 'var(--bg-soft)', border: '1px solid var(--line)', borderRadius: 24, display: 'flex', justifyContent: 'space-between', alignItems: 'center', flexWrap: 'wrap', gap: 20 }}>
          <div>
            <div className="h-eyebrow" style={{ marginBottom: 8, color: 'var(--accent-soft)' }}>Integraciones</div>
            <h3 style={{ fontFamily: 'var(--font-display)', fontSize: 28, fontWeight: 500, letterSpacing: '-0.02em' }}>
              OCPP 2.0.1 · ISO 15118 · Hubject · Modbus · API REST
            </h3>
          </div>
          <a className="btn btn-primary btn-lg" href="#contact" onClick={e => { e.preventDefault(); navigate('contact'); }}>
            Solicitar acceso
          </a>
        </div>
      </section>

      <CTAStrip navigate={navigate}/>
    </>
  );
}

function AppPage({ navigate }) {
  const [view, setView] = React.useState('cpo');
  const views = {
    cpo: {
      label: 'Modo CPO',
      heroTitle: 'Control operativo de estaciones y sesiones.',
      heroDesc: 'VoltCore da visibilidad a la red completa: disponibilidad, alertas, tarifas, incidencias y operación remota desde una sola capa software.',
      phone: <AppPhoneCPO/>,
      metrics: [['OCPP', 'operación remota'], ['En vivo', 'sesiones'], ['kWh', 'energía'], ['Alertas', 'soporte']],
      featureCards: [
        ['Dashboard operativo', 'Estado de red, incidencias, sesiones activas y disponibilidad en tiempo real.'],
        ['Control remoto', 'Arranque, parada, desbloqueo, reinicio y acciones OCPP sin salir del panel.'],
        ['Tarifas y pagos', 'Precios dinámicos, métodos de pago y conciliación centralizada.'],
        ['Alertas y soporte', 'Incidencias por estación, trazas y contexto para equipos técnicos y SAT.'],
      ],
      story: {
        title: 'Toda la operación en una vista.',
        desc: 'Pensado para operadores, integradores y equipos técnicos que necesitan ver la red, actuar rápido y tomar decisiones con datos claros.',
        bullets: [
          ['Lectura rápida', 'Interfaz limpia para revisar estaciones, sesiones y alertas sin fricción.'],
          ['Soporte técnico', 'Panel listo para operación diaria, soporte técnico y mantenimiento coordinado.'],
          ['Acceso seguro', 'Permisos, trazabilidad y acceso seguro para usuarios internos y colaboradores.'],
        ],
      },
    },
    user: {
      label: 'Modo conductor',
      heroTitle: 'Buscar, cargar y pagar sin pasos de sobra.',
      heroDesc: 'El usuario encuentra puntos disponibles, inicia sesión, sigue la carga y paga desde el móvil con una experiencia directa y clara.',
      phone: <AppPhoneMap/>,
      metrics: [['Mapa', 'disponibilidad'], ['Tomas', 'libres'], ['HPC', 'potencia'], ['Pago', 'integrado']],
      featureCards: [
        ['Mapa en vivo', 'Disponibilidad, potencia, conectores y tarifas antes de llegar al punto.'],
        ['Iniciar · parar · pagar', 'Inicio de sesión, seguimiento y pago móvil en una sola pantalla.'],
        ['Ruta y favoritos', 'Planificación sencilla con puntos frecuentes y navegación al destino.'],
        ['Historial y facturas', 'Recibos, sesiones anteriores y control del gasto del usuario final.'],
      ],
      story: {
        title: 'Carga sencilla para el conductor.',
        desc: 'Diseño centrado en reducir fricción: menos pasos, mejor lectura de la sesión y una relación más clara entre precio, potencia y tiempo.',
        bullets: [
          ['Menos pasos', 'Buscar, llegar y cargar sin cambiar de app ni perder contexto.'],
          ['Precio claro', 'Precio, potencia y estado de carga visibles desde el inicio de la sesión.'],
          ['Pago trazable', 'Pago móvil, recibos y confirmación inmediata tras finalizar la carga.'],
        ],
      },
    },
  };

  const active = views[view];
  const secondaryPhone = view === 'cpo' ? <AppPhoneCharging/> : <AppPhoneCPO/>;
  const tertiaryPhone = view === 'cpo' ? <AppPhoneMap/> : <AppPhoneCharging/>;

  return (
    <>
      <section className="pv-app-sky">
        <div className="container">
          <div className="pv-app-sky-frame">
            <div className="pv-app-sky-top">
              <Reveal className="pv-app-sky-copy">
                <div className="pv-app-sky-badge">VoltCore App</div>
                <h1>La capa software para operar puntos de recarga.</h1>
                <p>
                  Reúne estaciones, sesiones, pagos, telemetría, disponibilidad y control remoto en una sola plataforma.
                </p>
                <div className="pv-app-sky-switch">
                  {Object.entries(views).map(([key, item]) => (
                    <button key={key} className={view === key ? 'is-active' : ''} onClick={() => setView(key)}>
                      {item.label}
                    </button>
                  ))}
                </div>
                <div className="pv-app-sky-actions">
                  <a className="btn btn-primary btn-lg" href="#contact" onClick={e => { e.preventDefault(); navigate('contact'); }}>
                    Solicitar acceso
                  </a>
                  <a className="btn btn-ghost btn-lg" href="#app-functions" onClick={e => { e.preventDefault(); window.scrollTo({ top: window.scrollY + window.innerHeight * 0.82, behavior: 'smooth' }); }}>
                    Ver funciones
                  </a>
                </div>
              </Reveal>

              <Reveal className="pv-app-sky-visual">
                <div className="pv-app-sky-glow" />
                <div className="phone pv-app-sky-phone">
                  {active.phone}
                </div>
                <div className="pv-app-sky-metrics">
                  {active.metrics.map(([value, label]) => (
                    <article key={label}>
                      <strong>{value}</strong>
                      <span>{label}</span>
                    </article>
                  ))}
                </div>
              </Reveal>
            </div>
          </div>

          <div className="pv-app-sky-features" id="app-functions">
            <Reveal className="pv-app-sky-heading">
              <h2>Funciones para operar con contexto técnico.</h2>
              <p>{active.heroTitle} {active.heroDesc}</p>
            </Reveal>
            <div className="pv-app-sky-grid">
              {active.featureCards.map(([title, desc], i) => (
                <Reveal key={title} className="pv-app-soft-card" style={{ transitionDelay: `${i * 70}ms` }}>
                  <div className="pv-app-soft-visual">
                    <span>{String(i + 1).padStart(2, '0')}</span>
                    <i />
                  </div>
                  <h3>{title}</h3>
                  <p>{desc}</p>
                </Reveal>
              ))}
            </div>
          </div>
        </div>
      </section>

      <section className="pv-app-midnight">
        <div className="container pv-app-midnight-inner">
          <div className="pv-app-story-row">
            <Reveal className="pv-app-story-visual main">
              <div className="pv-app-orb" />
              <div className="phone pv-app-story-phone">{secondaryPhone}</div>
              <div className="pv-app-floating-chip chip-a">Analítica en vivo</div>
              <div className="pv-app-floating-chip chip-b">OCPP listo</div>
            </Reveal>
            <Reveal className="pv-app-story-copy">
              <div className="pv-section-kicker">{active.label}</div>
              <h2>{active.story.title}</h2>
              <p>{active.story.desc}</p>
              <div className="pv-app-story-points">
                {active.story.bullets.map(([title, desc]) => (
                  <article key={title}>
                    <div>
                      <h3>{title}</h3>
                      <p>{desc}</p>
                    </div>
                  </article>
                ))}
              </div>
            </Reveal>
          </div>

          <div className="pv-app-story-row reverse">
            <Reveal className="pv-app-story-copy">
              <div className="pv-section-kicker">Ecosistema</div>
              <h2>Una misma lógica para operador y conductor.</h2>
              <p>
                La experiencia de uso y la capa de operación comparten datos fiables,
                cobro integrado, disponibilidad en vivo y trazabilidad de cada sesión.
              </p>
              <div className="pv-app-story-badges">
                {['OCPP 2.0.1', 'ISO 15118', 'Hubject', 'API REST', 'Pagos', 'Roaming'].map(item => (
                  <span key={item}>{item}</span>
                ))}
              </div>
            </Reveal>
            <Reveal className="pv-app-story-visual secondary">
              <div className="pv-app-orb is-secondary" />
              <div className="phone pv-app-story-phone alt">{tertiaryPhone}</div>
              <div className="pv-app-floating-panel">
                <strong>Operación visible</strong>
                <p>Sesiones, alertas, potencia y pagos conectados en la misma vista.</p>
              </div>
            </Reveal>
          </div>

          <div className="pv-app-integrations-dark">
            <div>
              <div className="pv-section-kicker">Integraciones</div>
              <h2>OCPP 2.0.1 / ISO 15118 / Hubject / Modbus / API REST</h2>
            </div>
            <a className="btn btn-primary btn-lg" href="#contact" onClick={e => { e.preventDefault(); navigate('contact'); }}>
              Solicitar acceso
            </a>
          </div>
        </div>
      </section>

      <CTAStrip navigate={navigate}/>
    </>
  );
}

Object.assign(window, { VoltCoreSection, AppPage, AppPhoneCPO, AppPhoneMap, AppPhoneCharging });
