Se agregaron cambios en datastage y landingpage
This commit is contained in:
4
.env
4
.env
@@ -1,4 +1,4 @@
|
|||||||
VITE_DEBUG_MODE=false
|
VITE_DEBUG_MODE=false
|
||||||
|
|
||||||
VITE_EFC_API_URL=https://api.efc-aduanasoft.com/api/v1
|
VITE_EFC_API_URL=http://192.168.1.195:8000/api/v1
|
||||||
VITE_EFC_MICROSERVICE_URL=https://api.efc-aduanasoft.com/microservice/api/v1
|
VITE_EFC_MICROSERVICE_URL=http://192.168.1.195:8001/api/v1
|
||||||
|
|||||||
@@ -315,12 +315,14 @@ export default function Datastage() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Lista */}
|
{/* Lista */}
|
||||||
|
{/* Responsive: tabla en desktop, tarjetas en móvil/tablet */}
|
||||||
<div className="bg-white shadow-lg rounded-xl border border-gray-200">
|
<div className="bg-white shadow-lg rounded-xl border border-gray-200">
|
||||||
<div className="px-4 sm:px-6 lg:px-8 pt-6 sm:pt-8 pb-2 border-b border-gray-200">
|
<div className="px-4 sm:px-6 lg:px-8 pt-6 sm:pt-8 pb-2 border-b border-gray-200">
|
||||||
<h2 className="text-xl sm:text-2xl font-extrabold text-blue-800 tracking-tight mb-1">Lista de Datastages</h2>
|
<h2 className="text-xl sm:text-2xl font-extrabold text-blue-800 tracking-tight mb-1">Lista de Datastages</h2>
|
||||||
<div className="h-1 w-10 bg-blue-400 rounded mb-2"></div>
|
<div className="h-1 w-10 bg-blue-400 rounded mb-2"></div>
|
||||||
</div>
|
</div>
|
||||||
<div className="overflow-x-auto">
|
{/* Tabla para pantallas grandes */}
|
||||||
|
<div className="hidden lg:block overflow-x-auto">
|
||||||
<table className="min-w-full divide-y divide-gray-200 rounded-lg overflow-hidden text-xs bg-white">
|
<table className="min-w-full divide-y divide-gray-200 rounded-lg overflow-hidden text-xs bg-white">
|
||||||
<thead className="bg-slate-100">
|
<thead className="bg-slate-100">
|
||||||
<tr>
|
<tr>
|
||||||
@@ -339,8 +341,7 @@ export default function Datastage() {
|
|||||||
<td className="border px-2 py-2 text-center">{item.id}</td>
|
<td className="border px-2 py-2 text-center">{item.id}</td>
|
||||||
<td className="border px-2 py-2 max-w-xs truncate">
|
<td className="border px-2 py-2 max-w-xs truncate">
|
||||||
{item.archivo ? (
|
{item.archivo ? (
|
||||||
<>
|
<span className="flex items-center gap-1 text-xs text-gray-700 truncate font-mono">
|
||||||
<span className="block text-xs text-gray-700 truncate font-mono">
|
|
||||||
{(() => {
|
{(() => {
|
||||||
try {
|
try {
|
||||||
const url = new URL(item.archivo);
|
const url = new URL(item.archivo);
|
||||||
@@ -349,10 +350,10 @@ export default function Datastage() {
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
})()}
|
})()}
|
||||||
</span>
|
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
className="text-blue-600 underline break-all hover:text-blue-800"
|
className="inline-flex items-center justify-center w-6 h-6 rounded bg-blue-100 border border-blue-200 text-blue-700 hover:bg-blue-200 hover:border-blue-300 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-blue-400 ml-1"
|
||||||
|
title="Descargar archivo"
|
||||||
onClick={() => downloadDatastageFile(
|
onClick={() => downloadDatastageFile(
|
||||||
item.id,
|
item.id,
|
||||||
(() => {
|
(() => {
|
||||||
@@ -365,9 +366,11 @@ export default function Datastage() {
|
|||||||
})()
|
})()
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
Descargar
|
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M4 16v2a2 2 0 002 2h12a2 2 0 002-2v-2M7 10l5 5 5-5M12 15V3" />
|
||||||
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
</>
|
</span>
|
||||||
) : (
|
) : (
|
||||||
<span className="text-gray-400">Sin archivo</span>
|
<span className="text-gray-400">Sin archivo</span>
|
||||||
)}
|
)}
|
||||||
@@ -381,22 +384,33 @@ export default function Datastage() {
|
|||||||
<td className="border px-2 py-2 whitespace-nowrap">{item.created_at ? new Date(item.created_at).toLocaleString() : ''}</td>
|
<td className="border px-2 py-2 whitespace-nowrap">{item.created_at ? new Date(item.created_at).toLocaleString() : ''}</td>
|
||||||
<td className="border px-2 py-2 whitespace-nowrap">{item.updated_at ? new Date(item.updated_at).toLocaleString() : ''}</td>
|
<td className="border px-2 py-2 whitespace-nowrap">{item.updated_at ? new Date(item.updated_at).toLocaleString() : ''}</td>
|
||||||
<td className="border px-2 py-2 space-x-2 text-center">
|
<td className="border px-2 py-2 space-x-2 text-center">
|
||||||
<button onClick={() => handleSelect(item.id)} className="inline-flex items-center gap-1 text-blue-600 underline hover:text-blue-800">
|
<button onClick={() => handleSelect(item.id)}
|
||||||
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" /><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.477 0 8.268 2.943 9.542 7-1.274 4.057-5.065 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" /></svg>
|
className="inline-flex items-center justify-center w-9 h-9 rounded-lg bg-blue-50 border border-blue-200 text-blue-700 hover:bg-blue-100 hover:border-blue-300 transition-all duration-200 shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-400"
|
||||||
|
title="Ver detalle"
|
||||||
|
>
|
||||||
|
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" /><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.477 0 8.268 2.943 9.542 7-1.274 4.057-5.065 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" /></svg>
|
||||||
</button>
|
</button>
|
||||||
<button onClick={() => openEditModal(item)} className="inline-flex items-center gap-1 text-yellow-600 underline hover:text-yellow-800">
|
<button onClick={() => openEditModal(item)}
|
||||||
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M15.232 5.232l3.536 3.536M9 13l6-6 3.536 3.536a2 2 0 010 2.828l-7.072 7.072a2 2 0 01-2.828 0l-3.536-3.536a2 2 0 010-2.828l7.072-7.072z" /></svg>
|
className="inline-flex items-center justify-center w-9 h-9 rounded-lg bg-yellow-50 border border-yellow-200 text-yellow-700 hover:bg-yellow-100 hover:border-yellow-300 transition-all duration-200 shadow-sm focus:outline-none focus:ring-2 focus:ring-yellow-400"
|
||||||
|
title="Editar"
|
||||||
|
>
|
||||||
|
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M15.232 5.232l3.536 3.536M9 13l6-6 3.536 3.536a2 2 0 010 2.828l-7.072 7.072a2 2 0 01-2.828 0l-3.536-3.536a2 2 0 010-2.828l7.072-7.072z" /></svg>
|
||||||
</button>
|
</button>
|
||||||
<button onClick={() => openDeleteModal(item.id)} className="inline-flex items-center gap-1 text-red-600 underline hover:text-red-800">
|
<button onClick={() => openDeleteModal(item.id)}
|
||||||
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M6 18L18 6M6 6l12 12" /></svg>
|
className="inline-flex items-center justify-center w-9 h-9 rounded-lg bg-red-50 border border-red-200 text-red-700 hover:bg-red-100 hover:border-red-300 transition-all duration-200 shadow-sm focus:outline-none focus:ring-2 focus:ring-red-400"
|
||||||
|
title="Eliminar"
|
||||||
|
>
|
||||||
|
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M6 18L18 6M6 6l12 12" /></svg>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
onClick={() => procesarDatastage(item, setDatastages, setSuccess, setError, setRegistrosCargados, setShowRegistrosModal)}
|
onClick={() => procesarDatastage(item, setDatastages, setSuccess, setError, setRegistrosCargados, setShowRegistrosModal)}
|
||||||
className="inline-flex items-center gap-1 text-green-700 underline hover:text-green-900"
|
className={`inline-flex items-center justify-center w-9 h-9 rounded-lg border transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-1 ${item.procesado ? 'bg-gray-100 border-gray-200 cursor-not-allowed opacity-50' : 'bg-green-50 border-green-200 hover:bg-green-100 hover:border-green-300 focus:ring-green-500 cursor-pointer'}`}
|
||||||
title="Procesar"
|
title={item.procesado ? 'Ya procesado' : 'Procesar'}
|
||||||
|
disabled={item.procesado}
|
||||||
>
|
>
|
||||||
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M5 13l4 4L19 7" /></svg>
|
<svg className="w-5 h-5 text-green-600" fill="currentColor" viewBox="0 0 24 24">
|
||||||
Procesar
|
<path d="M8 5v14l11-7z"/>
|
||||||
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -404,6 +418,82 @@ export default function Datastage() {
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
{/* Tarjetas para móvil/tablet */}
|
||||||
|
<div className="lg:hidden space-y-4 p-2">
|
||||||
|
{datastages.length === 0 ? (
|
||||||
|
<div className="text-center text-gray-400 py-8">No hay datastages disponibles</div>
|
||||||
|
) : (
|
||||||
|
datastages.map(item => (
|
||||||
|
<div key={item.id} className="bg-white rounded-xl shadow border border-gray-200 p-4 flex flex-col gap-2">
|
||||||
|
<div className="flex items-center justify-between mb-2">
|
||||||
|
<span className="font-bold text-blue-800">#{item.id}</span>
|
||||||
|
<span className={item.procesado ? 'bg-green-100 text-green-700 px-2 py-0.5 rounded-full text-xs' : 'bg-yellow-100 text-yellow-700 px-2 py-0.5 rounded-full text-xs'}>
|
||||||
|
{item.procesado ? 'Procesado' : 'Pendiente'}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center gap-1 text-xs text-gray-700 break-all font-mono mb-1">
|
||||||
|
{item.archivo ? (
|
||||||
|
<span className="flex items-center gap-1">
|
||||||
|
{(() => { try { const url = new URL(item.archivo); return decodeURIComponent(url.pathname.split('/').pop() || ''); } catch { return ''; } })()}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className="inline-flex items-center justify-center w-6 h-6 rounded bg-blue-100 border border-blue-200 text-blue-700 hover:bg-blue-200 hover:border-blue-300 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-blue-400 ml-1"
|
||||||
|
title="Descargar archivo"
|
||||||
|
onClick={() => downloadDatastageFile(
|
||||||
|
item.id,
|
||||||
|
(() => { try { const url = new URL(item.archivo); return decodeURIComponent(url.pathname.split('/').pop() || ''); } catch { return ''; } })()
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M4 16v2a2 2 0 002 2h12a2 2 0 002-2v-2M7 10l5 5 5-5M12 15V3" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</span>
|
||||||
|
) : <span className="text-gray-400">Sin archivo</span>}
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-wrap gap-2 text-xs">
|
||||||
|
<span className="font-semibold">Contribuyente:</span> {item.contribuyente}
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-wrap gap-2 text-xs">
|
||||||
|
<span className="font-semibold">Creado:</span> {item.created_at ? new Date(item.created_at).toLocaleString() : ''}
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-wrap gap-2 text-xs">
|
||||||
|
<span className="font-semibold">Actualizado:</span> {item.updated_at ? new Date(item.updated_at).toLocaleString() : ''}
|
||||||
|
</div>
|
||||||
|
<div className="flex gap-2 mt-2">
|
||||||
|
<button onClick={() => handleSelect(item.id)}
|
||||||
|
className="inline-flex items-center justify-center w-9 h-9 rounded-lg bg-blue-50 border border-blue-200 text-blue-700 hover:bg-blue-100 hover:border-blue-300 transition-all duration-200 shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-400"
|
||||||
|
title="Ver detalle"
|
||||||
|
>
|
||||||
|
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" /><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.477 0 8.268 2.943 9.542 7-1.274 4.057-5.065 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" /></svg>
|
||||||
|
</button>
|
||||||
|
<button onClick={() => openEditModal(item)}
|
||||||
|
className="inline-flex items-center justify-center w-9 h-9 rounded-lg bg-yellow-50 border border-yellow-200 text-yellow-700 hover:bg-yellow-100 hover:border-yellow-300 transition-all duration-200 shadow-sm focus:outline-none focus:ring-2 focus:ring-yellow-400"
|
||||||
|
title="Editar"
|
||||||
|
>
|
||||||
|
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M15.232 5.232l3.536 3.536M9 13l6-6 3.536 3.536a2 2 0 010 2.828l-7.072 7.072a2 2 0 01-2.828 0l-3.536-3.536a2 2 0 010-2.828l7.072-7.072z" /></svg>
|
||||||
|
</button>
|
||||||
|
<button onClick={() => openDeleteModal(item.id)}
|
||||||
|
className="inline-flex items-center justify-center w-9 h-9 rounded-lg bg-red-50 border border-red-200 text-red-700 hover:bg-red-100 hover:border-red-300 transition-all duration-200 shadow-sm focus:outline-none focus:ring-2 focus:ring-red-400"
|
||||||
|
title="Eliminar"
|
||||||
|
>
|
||||||
|
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M6 18L18 6M6 6l12 12" /></svg>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
onClick={() => procesarDatastage(item, setDatastages, setSuccess, setError, setRegistrosCargados, setShowRegistrosModal)}
|
||||||
|
className={`inline-flex items-center justify-center w-9 h-9 rounded-lg border transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-1 ${item.procesado ? 'bg-gray-100 border-gray-200 cursor-not-allowed opacity-50' : 'bg-green-50 border-green-200 hover:bg-green-100 hover:border-green-300 focus:ring-green-500 cursor-pointer'}`}
|
||||||
|
title={item.procesado ? 'Ya procesado' : 'Procesar'}
|
||||||
|
disabled={item.procesado}
|
||||||
|
>
|
||||||
|
<svg className="w-5 h-5 text-green-600" fill="currentColor" viewBox="0 0 24 24">
|
||||||
|
<path d="M8 5v14l11-7z"/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Modales */}
|
{/* Modales */}
|
||||||
|
|||||||
@@ -526,80 +526,6 @@ export default function LandingAnimated() {
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Testimonios */}
|
|
||||||
<section id="testimonios" className="py-20" style={{ background: 'linear-gradient(135deg, #F2F4F7, #FFFFFF)' }}>
|
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
||||||
<div
|
|
||||||
data-animate="testimonials-header"
|
|
||||||
className={`text-center mb-16 transition-all duration-1000 ${
|
|
||||||
visibleElements.has('testimonials-header')
|
|
||||||
? 'opacity-100 translate-y-0'
|
|
||||||
: 'opacity-0 translate-y-10'
|
|
||||||
}`}
|
|
||||||
>
|
|
||||||
<h2 className="text-4xl font-extrabold mb-4" style={{ color: '#333333' }}>
|
|
||||||
Lo que dicen nuestros clientes
|
|
||||||
</h2>
|
|
||||||
<p className="text-xl" style={{ color: '#7A7A7A' }}>
|
|
||||||
Testimonios reales de agentes aduanales que han transformado su operación
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
|
||||||
{[
|
|
||||||
{
|
|
||||||
name: 'Carlos Mendoza',
|
|
||||||
company: 'Agente Aduanal 1234',
|
|
||||||
image: '👨💼',
|
|
||||||
testimonial: 'EFC revolucionó nuestra operación. Reducimos 70% el tiempo en procesar pedimentos y eliminamos errores manuales.',
|
|
||||||
rating: 5
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'María González',
|
|
||||||
company: 'Importadora Global SA',
|
|
||||||
image: '👩💼',
|
|
||||||
testimonial: 'La plataforma más completa del mercado. El soporte de AduanaSoft es excepcional, entienden perfectamente nuestras necesidades.',
|
|
||||||
rating: 5
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Roberto Silva',
|
|
||||||
company: 'Comercio Exterior RSC',
|
|
||||||
image: '👨💻',
|
|
||||||
testimonial: 'Migramos de sistemas obsoletos a EFC y fue la mejor decisión. Ahora somos más eficientes y competitivos.',
|
|
||||||
rating: 5
|
|
||||||
}
|
|
||||||
].map((testimonial, index) => (
|
|
||||||
<div
|
|
||||||
key={index}
|
|
||||||
data-animate={`testimonial-${index}`}
|
|
||||||
className={`bg-white rounded-2xl shadow-lg hover:shadow-xl transition-all duration-700 p-8 border border-gray-100 hover:scale-105 ${
|
|
||||||
visibleElements.has(`testimonial-${index}`)
|
|
||||||
? 'opacity-100 translate-y-0'
|
|
||||||
: 'opacity-0 translate-y-10'
|
|
||||||
}`}
|
|
||||||
style={{ transitionDelay: `${index * 200}ms` }}
|
|
||||||
>
|
|
||||||
<div className="flex items-center mb-6">
|
|
||||||
<div className="text-4xl mr-4">{testimonial.image}</div>
|
|
||||||
<div>
|
|
||||||
<h4 className="font-bold" style={{ color: '#333333' }}>{testimonial.name}</h4>
|
|
||||||
<p className="text-sm" style={{ color: '#7A7A7A' }}>{testimonial.company}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<p className="mb-4 italic" style={{ color: '#333333' }}>"{testimonial.testimonial}"</p>
|
|
||||||
<div className="flex" style={{ color: '#F57C00' }}>
|
|
||||||
{[...Array(testimonial.rating)].map((_, i) => (
|
|
||||||
<svg key={i} className="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
|
||||||
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
|
|
||||||
</svg>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
{/* Precios */}
|
{/* Precios */}
|
||||||
<section id="precios" className="py-20 bg-white">
|
<section id="precios" className="py-20 bg-white">
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
@@ -786,19 +712,19 @@ export default function LandingAnimated() {
|
|||||||
{
|
{
|
||||||
icon: 'M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z',
|
icon: 'M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z',
|
||||||
title: 'Teléfono',
|
title: 'Teléfono',
|
||||||
info: '+52 (55) 1234-5678',
|
info: '656 616 2527',
|
||||||
subtitle: 'Lun - Vie, 9:00 AM - 7:00 PM'
|
subtitle: 'Lun - Vie, 9:00 AM - 7:00 PM'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z',
|
icon: 'M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z',
|
||||||
title: 'Email',
|
title: 'Email',
|
||||||
info: 'contacto@aduanasoft.com',
|
info: 'info@aduanasoft.com.mx',
|
||||||
subtitle: 'Respuesta en menos de 2 horas'
|
subtitle: 'Respuesta en menos de 2 horas'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z M15 11a3 3 0 11-6 0 3 3 0 016 0z',
|
icon: 'M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z M15 11a3 3 0 11-6 0 3 3 0 016 0z',
|
||||||
title: 'Oficinas',
|
title: 'Oficinas',
|
||||||
info: 'Ciudad de México, México',
|
info: 'Ciudad Juárez, Chihuahua',
|
||||||
subtitle: 'Visitas con cita previa'
|
subtitle: 'Visitas con cita previa'
|
||||||
}
|
}
|
||||||
].map((contact, idx) => (
|
].map((contact, idx) => (
|
||||||
@@ -947,22 +873,32 @@ export default function LandingAnimated() {
|
|||||||
EFC
|
EFC
|
||||||
</span>
|
</span>
|
||||||
</h3>
|
</h3>
|
||||||
<p className="mb-4 max-w-md" style={{ color: '#7A7A7A' }}>
|
<p className="mb-2 max-w-md" style={{ color: '#7A7A7A' }}>
|
||||||
La plataforma líder para agentes aduanales e importadores, desarrollada por
|
Uso correcto <span className="font-semibold" style={{ color: '#4DA6FF' }}>Aduanasoft®</span>
|
||||||
<span className="font-semibold" style={{ color: '#4DA6FF' }}> @AduanaSoft</span> con más de 10 años de experiencia.
|
|
||||||
</p>
|
</p>
|
||||||
|
<ul className="mb-4 text-sm text-gray-300 space-y-1">
|
||||||
|
<li><span className="font-bold text-white">+350</span> clientes en todo el país</li>
|
||||||
|
<li><span className="font-bold text-white">29 años</span> de experiencia</li>
|
||||||
|
</ul>
|
||||||
<div className="flex space-x-4">
|
<div className="flex space-x-4">
|
||||||
{['M24 4.557c-.883.392-1.832.656-2.828.775 1.017-.609 1.798-1.574 2.165-2.724-.951.564-2.005.974-3.127 1.195-.897-.957-2.178-1.555-3.594-1.555-3.179 0-5.515 2.966-4.797 6.045-4.091-.205-7.719-2.165-10.148-5.144-1.29 2.213-.669 5.108 1.523 6.574-.806-.026-1.566-.247-2.229-.616-.054 2.281 1.581 4.415 3.949 4.89-.693.188-1.452.232-2.224.084.626 1.956 2.444 3.379 4.6 3.419-2.07 1.623-4.678 2.348-7.29 2.04 2.179 1.397 4.768 2.212 7.548 2.212 9.142 0 14.307-7.721 13.995-14.646.962-.695 1.797-1.562 2.457-2.549z',
|
<a href="https://www.facebook.com/AduanaSoftMX" target="_blank" rel="noopener noreferrer" className="transition-colors duration-200" style={{ color: '#7A7A7A' }} onMouseEnter={e => e.target.style.color = 'white'} onMouseLeave={e => e.target.style.color = '#7A7A7A'} title="Facebook">
|
||||||
'M22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 0 1-1.93.07 4.28 4.28 0 0 0 4 2.98 8.521 8.521 0 0 1-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.44 20.29 5.7 21 8.12 21 16 21 20.33 14.46 20.33 8.79c0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z',
|
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24"><path d="M22.675 0h-21.35C.595 0 0 .592 0 1.326v21.348C0 23.408.595 24 1.325 24h11.495v-9.294H9.692v-3.622h3.128V8.413c0-3.1 1.893-4.788 4.659-4.788 1.325 0 2.463.099 2.797.143v3.24l-1.918.001c-1.504 0-1.797.715-1.797 1.763v2.313h3.587l-.467 3.622h-3.12V24h6.116C23.406 24 24 23.408 24 22.674V1.326C24 .592 23.406 0 22.675 0"/></svg>
|
||||||
'M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'].map((path, idx) => (
|
|
||||||
<a key={idx} href="#" className="transition-colors duration-200" style={{ color: '#7A7A7A' }}
|
|
||||||
onMouseEnter={(e) => e.target.style.color = 'white'}
|
|
||||||
onMouseLeave={(e) => e.target.style.color = '#7A7A7A'}>
|
|
||||||
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
|
|
||||||
<path d={path}/>
|
|
||||||
</svg>
|
|
||||||
</a>
|
</a>
|
||||||
))}
|
<a href="https://www.instagram.com/aduanasoftjrz" target="_blank" rel="noopener noreferrer" className="transition-colors duration-200" style={{ color: '#7A7A7A' }} onMouseEnter={e => e.target.style.color = 'white'} onMouseLeave={e => e.target.style.color = '#7A7A7A'} title="Instagram">
|
||||||
|
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24"><path d="M12 2.163c3.204 0 3.584.012 4.85.07 1.366.062 2.633.334 3.608 1.308.974.974 1.246 2.241 1.308 3.608.058 1.266.069 1.646.069 4.85s-.012 3.584-.07 4.85c-.062 1.366-.334 2.633-1.308 3.608-.974.974-2.241 1.246-3.608 1.308-1.266.058-1.646.069-4.85.069s-3.584-.012-4.85-.07c-1.366-.062-2.633-.334-3.608-1.308-.974-.974-1.246-2.241-1.308-3.608C2.175 15.647 2.163 15.267 2.163 12s.012-3.584.07-4.85c.062-1.366.334-2.633 1.308-3.608C4.515 2.497 5.782 2.225 7.148 2.163 8.414 2.105 8.794 2.163 12 2.163zm0-2.163C8.741 0 8.332.013 7.052.072 5.771.131 4.659.363 3.678 1.344 2.697 2.325 2.465 3.437 2.406 4.718 2.347 5.998 2.334 6.407 2.334 12c0 5.593.013 6.002.072 7.282.059 1.281.291 2.393 1.272 3.374.981.981 2.093 1.213 3.374 1.272 1.28.059 1.689.072 7.282.072s6.002-.013 7.282-.072c1.281-.059 2.393-.291 3.374-1.272.981-.981 1.213-2.093 1.272-3.374.059-1.28.072-1.689.072-7.282s-.013-6.002-.072-7.282c-.059-1.281-.291-2.393-1.272-3.374C21.393.363 20.281.131 19 .072 17.719.013 17.31 0 12 0zm0 5.838a6.162 6.162 0 1 0 0 12.324 6.162 6.162 0 0 0 0-12.324zm0 10.162a3.999 3.999 0 1 1 0-7.998 3.999 3.999 0 0 1 0 7.998zm6.406-11.845a1.44 1.44 0 1 0 0 2.88 1.44 1.44 0 0 0 0-2.88z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://www.linkedin.com/in/aduanasoft" target="_blank" rel="noopener noreferrer" className="transition-colors duration-200" style={{ color: '#7A7A7A' }} onMouseEnter={e => e.target.style.color = 'white'} onMouseLeave={e => e.target.style.color = '#7A7A7A'} title="LinkedIn">
|
||||||
|
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div className="mt-6 text-sm text-gray-300">
|
||||||
|
<div className="mb-1"><b>Correo informes:</b> <a href="mailto:info@aduanasoft.com.mx" className="underline hover:text-white">info@aduanasoft.com.mx</a></div>
|
||||||
|
<div className="mb-1"><b>Teléfonos:</b></div>
|
||||||
|
<ul className="ml-4">
|
||||||
|
<li>Cd Juárez: <a href="tel:6566162527" className="underline hover:text-white">656 616 2527</a></li>
|
||||||
|
<li>CDMX: <a href="tel:5563585502" className="underline hover:text-white">55 63 58 5502</a></li>
|
||||||
|
<li>USA: <a href="tel:9157744393" className="underline hover:text-white">915 774 43 93</a></li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user