/* FAQ + Contacto + Footer */ const { useState: useStateC } = React; function FAQ({ tweaks }) { const [open, setOpen] = useStateC(0); const items = [ { q: '¿Sustituís a mi gestoría o asesoría fiscal?', a: 'En la mayoría de casos, sí. Llevamos directamente tu contabilidad, fiscalidad y administración: para nosotras tener los datos en casa es la única forma de garantizar información fiel y siempre actualizada — esa es la base para entender y decidir. Solo en consultas muy especializadas o asesoramientos puntuales trabajamos con la información que tú nos facilites o nos coordinamos con un especialista existente.', }, { q: '¿Necesito tener mi contabilidad ordenada antes de empezar?', a: 'No. Una de las primeras cosas que hacemos en el onboarding es revisar el año en curso, ajustar el plan contable y dejar la información lista para que tenga sentido. Si la base no está, la construimos contigo — sin reproches.', }, { q: '¿Cuánto tiempo voy a tener que dedicarle?', a: 'Lo justo. Una reunión periódica de 60 minutos, alguna pregunta puntual por email durante el cierre, y revisión del panel cuando tú quieras. La idea es liberarte tiempo, no añadirte deberes.', }, { q: '¿En qué momento de mi negocio tiene sentido contrataros?', a: 'Cuando facturar más ya no se traduce automáticamente en dormir mejor. Solemos encajar bien con empresas que facturan entre 60.000 € y 1 M € al año, aunque hay excepciones. En el diagnóstico gratuito te decimos honestamente si es tu momento.', }, { q: '¿Qué herramientas usáis? ¿Tengo que cambiar mi software?', a: 'Trabajamos sobre Holded — somos Partner oficial. Si ya lo usas, encajamos directo y nos coordinamos contigo. Si no, lo configuramos para tu sector y te enseñamos a usarlo: facturación, contabilidad, banca y reporting integrados, todo en el mismo sitio.', }, { q: '¿Hay permanencia?', a: 'No. Trabajamos por trimestres y se cancela con 30 días de aviso. Si no aporta valor, no queremos que sigas pagando — es así de simple.', }, { q: '¿Mi información financiera está segura?', a: 'Sí. Datos cifrados en tránsito y en reposo, servidores en la UE, accesos por usuario y bitácora de actividad. Firmamos NDA si lo necesitas, y nuestro equipo está sujeto a confidencialidad por contrato.', }, ]; return (
Preguntas frecuentes

Las dudas que se plantea casi todo el mundo.

Si la tuya no está aquí, escríbenos. Respondemos en menos de 24 horas hábiles.

Hacer una pregunta →
{items.map((it, i) => (
{it.a}
))}
); } const FORMSPREE_ENDPOINT = 'https://formspree.io/f/mqengvvr'; function Contacto({ tweaks }) { const [form, setForm] = useStateC({ name: '', email: '', empresa: '', mensaje: '', momento: 'creciendo', consent: false }); const [errors, setErrors] = useStateC({}); const [submitted, setSubmitted] = useStateC(false); const [submitting, setSubmitting] = useStateC(false); const [serverError, setServerError] = useStateC(null); const update = (k, v) => { setForm(f => ({ ...f, [k]: v })); if (errors[k]) setErrors(e => ({ ...e, [k]: null })); }; const validate = () => { const e = {}; if (!form.name.trim()) e.name = 'Cuéntanos cómo te llamas'; if (!form.email.trim()) e.email = 'Necesitamos un email para responder'; else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(form.email)) e.email = 'Ese email no parece válido'; if (!form.mensaje.trim() || form.mensaje.trim().length < 10) e.mensaje = 'Cuéntanos un poco más (mínimo 10 caracteres)'; if (!form.consent) e.consent = 'Necesitamos tu permiso para contactarte'; setErrors(e); return Object.keys(e).length === 0; }; const submit = async (ev) => { ev.preventDefault(); if (!validate()) return; setSubmitting(true); setServerError(null); try { const momentoLabel = { empezando: 'Empezando', creciendo: 'Creciendo', decidiendo: 'Decisión grande', otra: 'Otra' }[form.momento] || form.momento; const res = await fetch(FORMSPREE_ENDPOINT, { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ name: form.name, email: form.email, empresa: form.empresa || '—', momento: momentoLabel, mensaje: form.mensaje, _subject: `Nuevo diagnóstico — ${form.name}${form.empresa ? ' (' + form.empresa + ')' : ''}`, _replyto: form.email, }), }); if (res.ok) { setSubmitted(true); } else { const data = await res.json().catch(() => ({})); setServerError((data && data.errors && data.errors[0] && data.errors[0].message) || 'No se ha podido enviar. Inténtalo de nuevo en un momento.'); } } catch (err) { setServerError('No hay conexión. Revisa tu red e inténtalo de nuevo.'); } finally { setSubmitting(false); } }; if (submitted) { return (

Mensaje recibido.

Gracias, {form.name.split(' ')[0]}. Te respondemos en menos de 24 horas hábiles con disponibilidad para tu diagnóstico.

); } const inputStyle = (err) => ({ background: 'var(--navy-700)', border: `1px solid ${err ? 'var(--orange-500)' : 'var(--navy-600)'}`, color: 'var(--paper)', padding: '14px 16px', borderRadius: 'var(--radius-sm)', fontFamily: 'inherit', fontSize: 15, outline: 'none', width: '100%', transition: 'border-color 200ms var(--ease-out)', }); const labelStyle = { fontSize: 13, fontWeight: 600, color: 'var(--navy-200)', marginBottom: 8, display: 'block' }; return (
Diagnóstico gratuito

Empecemos por conocer tu negocio.

30 minutos por videollamada. Sin compromiso. Te decimos por dónde empezar y, si encajamos, cómo seguimos juntas.

{[ { i: 'M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z', t: '+34 600 41 39 50', s: 'Lunes a viernes, 9:00 — 18:00' }, { i: 'M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z M22 6l-10 7L2 6', t: 'hola@inncertia.com', s: 'Respondemos en < 24h hábiles' }, { i: 'M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z M12 7a3 3 0 1 0 0 6 3 3 0 0 0 0-6z', t: 'Sevilla', s: 'En remoto en todo el país' }, ].map(c => (
{c.t}
{c.s}
))}
update('name', e.target.value)} style={inputStyle(errors.name)} placeholder="Marta Lozano"/> {errors.name &&
{errors.name}
}
update('email', e.target.value)} style={inputStyle(errors.email)} placeholder="marta@miempresa.com"/> {errors.email &&
{errors.email}
}
update('empresa', e.target.value)} style={inputStyle(false)} placeholder="Panadería Marta S.L."/>
{[ { v: 'empezando', l: 'Empezando' }, { v: 'creciendo', l: 'Creciendo' }, { v: 'decidiendo', l: 'Decisión grande' }, { v: 'otra', l: 'Otra' }, ].map(opt => ( ))}