fix
This commit is contained in:
1 parent
4f0020bc10
commit
4606f06a7c
7 files changed
+210
-8
No files matched your search
@@ -0,0 +1 @@
|
|||||||
|
/* /index.html 200
|
||||||
@@ -7,6 +7,7 @@ import { Home } from './pages/Home';
|
|||||||
import { SobreNosotros } from './pages/SobreNosotros';
|
import { SobreNosotros } from './pages/SobreNosotros';
|
||||||
import { Productos } from './pages/Productos';
|
import { Productos } from './pages/Productos';
|
||||||
import { Blog } from './pages/Blog';
|
import { Blog } from './pages/Blog';
|
||||||
|
import { Privacidad } from './pages/Privacidad';
|
||||||
|
|
||||||
const CONTACT_EMAIL = '[email protected]';
|
const CONTACT_EMAIL = '[email protected]';
|
||||||
const openContact = () => {
|
const openContact = () => {
|
||||||
@@ -29,6 +30,7 @@ export default function App() {
|
|||||||
<Route path="/sobre-nosotros" element={<SobreNosotros />} />
|
<Route path="/sobre-nosotros" element={<SobreNosotros />} />
|
||||||
<Route path="/productos" element={<Productos />} />
|
<Route path="/productos" element={<Productos />} />
|
||||||
<Route path="/blog" element={<Blog />} />
|
<Route path="/blog" element={<Blog />} />
|
||||||
|
<Route path="/privacidad" element={<Privacidad />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
|
|
||||||
<Footer isNavyBg={isNavyBg} />
|
<Footer isNavyBg={isNavyBg} />
|
||||||
|
|||||||
@@ -53,9 +53,6 @@ export const CtaBanner = ({ onOpenContact, isNavyBg }: CtaBannerProps) => {
|
|||||||
>
|
>
|
||||||
Hablemos de tu proyecto <ArrowRight size={16} />
|
Hablemos de tu proyecto <ArrowRight size={16} />
|
||||||
</Button>
|
</Button>
|
||||||
<Button variant="secondary" href="mailto:[email protected]" isNavyBg={isNavyBg}>
|
|
||||||
contacto@rynext.com.mx
|
|
||||||
</Button>
|
|
||||||
</div>
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import { motion, AnimatePresence } from 'framer-motion';
|
|||||||
import type { ThemeProps } from '../types';
|
import type { ThemeProps } from '../types';
|
||||||
import { type Dispatch, type SetStateAction, useState, useEffect } from 'react';
|
import { type Dispatch, type SetStateAction, useState, useEffect } from 'react';
|
||||||
|
|
||||||
const WHATSAPP_NUMBER = '521XXXXXXXXXX'; // ← reemplaza con el número real
|
const WHATSAPP_NUMBER = '529984814889';
|
||||||
const WHATSAPP_MSG = encodeURIComponent('¿En qué podemos ayudarte?');
|
const WHATSAPP_MSG = encodeURIComponent('¡Hola!');
|
||||||
|
|
||||||
interface FloatingButtonsProps extends ThemeProps {
|
interface FloatingButtonsProps extends ThemeProps {
|
||||||
setIsNavyBg: Dispatch<SetStateAction<boolean>>;
|
setIsNavyBg: Dispatch<SetStateAction<boolean>>;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { Mail, MapPin, MessageCircle } from 'lucide-react';
|
import { Mail, MapPin, MessageCircle } from 'lucide-react';
|
||||||
|
import { Link } from 'react-router';
|
||||||
import type { ThemeProps } from '../types';
|
import type { ThemeProps } from '../types';
|
||||||
|
|
||||||
const navLinks = [
|
const navLinks = [
|
||||||
@@ -56,6 +57,26 @@ export const Footer = ({ isNavyBg }: ThemeProps) => {
|
|||||||
</p>
|
</p>
|
||||||
{/* Social */}
|
{/* Social */}
|
||||||
<div className="flex items-center gap-3">
|
<div className="flex items-center gap-3">
|
||||||
|
<a
|
||||||
|
href="https://www.facebook.com/RynextTechnologies/"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
aria-label="Rynext en Facebook"
|
||||||
|
className="flex h-9 w-9 items-center justify-center rounded transition-colors"
|
||||||
|
style={{ background: "rgba(255,255,255,0.07)", color: sub }}
|
||||||
|
onMouseEnter={(e) => {
|
||||||
|
(e.currentTarget as HTMLAnchorElement).style.background = "rgba(255,255,255,0.14)";
|
||||||
|
(e.currentTarget as HTMLAnchorElement).style.color = "#fff";
|
||||||
|
}}
|
||||||
|
onMouseLeave={(e) => {
|
||||||
|
(e.currentTarget as HTMLAnchorElement).style.background = "rgba(255,255,255,0.07)";
|
||||||
|
(e.currentTarget as HTMLAnchorElement).style.color = sub;
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor">
|
||||||
|
<path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
<a
|
<a
|
||||||
href="https://linkedin.com/company/rynext"
|
href="https://linkedin.com/company/rynext"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
@@ -87,7 +108,7 @@ export const Footer = ({ isNavyBg }: ThemeProps) => {
|
|||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a
|
||||||
href={`https://wa.me/529981234567?text=${encodeURIComponent('¿En qué podemos ayudarte?')}`}
|
href={`https://wa.me/529984814889?text=${encodeURIComponent('¿En qué podemos ayudarte?')}`}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
aria-label="Rynext en WhatsApp"
|
aria-label="Rynext en WhatsApp"
|
||||||
@@ -196,10 +217,20 @@ export const Footer = ({ isNavyBg }: ThemeProps) => {
|
|||||||
className="mt-16 border-t pt-8 text-center"
|
className="mt-16 border-t pt-8 text-center"
|
||||||
style={{ borderColor: border }}
|
style={{ borderColor: border }}
|
||||||
>
|
>
|
||||||
|
<div className="flex flex-col items-center gap-2 sm:flex-row sm:justify-center sm:gap-4">
|
||||||
<p className="text-xs" style={{ color: "rgba(255,255,255,0.25)" }}>
|
<p className="text-xs" style={{ color: "rgba(255,255,255,0.25)" }}>
|
||||||
© {new Date().getFullYear()} Rynext Technologies S.A.S. | Todos los
|
© {new Date().getFullYear()} Rynext Technologies S.A.S. | Todos los derechos reservados.
|
||||||
derechos reservados.
|
|
||||||
</p>
|
</p>
|
||||||
|
<Link
|
||||||
|
to="/privacidad"
|
||||||
|
className="text-xs transition-colors"
|
||||||
|
style={{ color: "rgba(255,255,255,0.25)", textDecoration: "none" }}
|
||||||
|
onMouseEnter={(e) => (e.currentTarget.style.color = "rgba(255,255,255,0.6)")}
|
||||||
|
onMouseLeave={(e) => (e.currentTarget.style.color = "rgba(255,255,255,0.25)")}
|
||||||
|
>
|
||||||
|
Aviso de Privacidad
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -151,6 +151,40 @@
|
|||||||
animation: fadeIn 200ms ease;
|
animation: fadeIn 200ms ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Aviso de privacidad — contenido editorial */
|
||||||
|
.prose-rynext h2 {
|
||||||
|
font-family: var(--font-display);
|
||||||
|
font-size: 1.15rem;
|
||||||
|
font-weight: 800;
|
||||||
|
letter-spacing: -0.02em;
|
||||||
|
color: #0a0a0a;
|
||||||
|
margin-top: 2.5rem;
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
}
|
||||||
|
.prose-rynext p,
|
||||||
|
.prose-rynext ul {
|
||||||
|
font-size: 0.95rem;
|
||||||
|
line-height: 1.75;
|
||||||
|
color: #4a4846;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
.prose-rynext ul {
|
||||||
|
padding-left: 1.25rem;
|
||||||
|
list-style: disc;
|
||||||
|
}
|
||||||
|
.prose-rynext li {
|
||||||
|
margin-bottom: 0.35rem;
|
||||||
|
}
|
||||||
|
.prose-rynext a {
|
||||||
|
color: #e50914;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-underline-offset: 3px;
|
||||||
|
}
|
||||||
|
.prose-rynext strong {
|
||||||
|
color: #0a0a0a;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
/* Reduced motion */
|
/* Reduced motion */
|
||||||
@media (prefers-reduced-motion: reduce) {
|
@media (prefers-reduced-motion: reduce) {
|
||||||
*, *::before, *::after {
|
*, *::before, *::after {
|
||||||
|
|||||||
@@ -0,0 +1,137 @@
|
|||||||
|
import { useEffect } from 'react';
|
||||||
|
|
||||||
|
export const Privacidad = () => {
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = 'Aviso de Privacidad | Rynext Technologies';
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<main id="main-content" style={{ background: '#ffffff', minHeight: '100vh' }}>
|
||||||
|
<section
|
||||||
|
style={{
|
||||||
|
paddingTop: '140px',
|
||||||
|
paddingBottom: '100px',
|
||||||
|
borderBottom: '1px solid #dddbd5',
|
||||||
|
}}
|
||||||
|
className="px-8 md:px-14"
|
||||||
|
>
|
||||||
|
<div className="mx-auto max-w-3xl">
|
||||||
|
<h1 className="text-headline mb-4" style={{ color: '#0a0a0a' }}>
|
||||||
|
Aviso de Privacidad Integral
|
||||||
|
</h1>
|
||||||
|
<p className="text-sm mb-16" style={{ color: '#aaa8a4' }}>
|
||||||
|
Última actualización: agosto de 2026
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div className="prose-rynext">
|
||||||
|
|
||||||
|
<h2>1. Responsable del tratamiento de datos personales</h2>
|
||||||
|
<p>
|
||||||
|
<strong>Rynext Technologies S.A.S. de C.V.</strong> (en adelante "Rynext"),
|
||||||
|
con domicilio en Cancún, Quintana Roo, México, es responsable del
|
||||||
|
tratamiento de sus datos personales conforme a lo establecido en la
|
||||||
|
Ley Federal de Protección de Datos Personales en Posesión de los
|
||||||
|
Particulares (LFPDPPP) y su Reglamento.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Para cualquier asunto relacionado con el presente Aviso de Privacidad
|
||||||
|
puede contactarnos en:{' '}
|
||||||
|
<a href="mailto:[email protected]">contacto@rynext.com.mx</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>2. Datos personales que recabamos</h2>
|
||||||
|
<p>Rynext puede recabar las siguientes categorías de datos personales:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Datos de identificación:</strong> nombre completo, empresa o razón social.</li>
|
||||||
|
<li><strong>Datos de contacto:</strong> correo electrónico, número de teléfono.</li>
|
||||||
|
<li><strong>Datos de navegación:</strong> dirección IP, tipo de navegador, páginas visitadas y duración de la sesión (mediante cookies técnicas).</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Rynext <strong>no recaba datos personales sensibles</strong> tales como origen racial,
|
||||||
|
estado de salud, creencias religiosas, datos biométricos ni información financiera
|
||||||
|
a través de este sitio web.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>3. Finalidades del tratamiento</h2>
|
||||||
|
<p>Sus datos personales son utilizados para las siguientes <strong>finalidades primarias</strong>:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Atender solicitudes de contacto, cotizaciones y propuestas comerciales.</li>
|
||||||
|
<li>Dar seguimiento a proyectos de desarrollo de software y consultoría.</li>
|
||||||
|
<li>Cumplir con obligaciones legales y contractuales.</li>
|
||||||
|
</ul>
|
||||||
|
<p>De manera secundaria, y solo con su consentimiento expreso, podemos utilizar sus datos para:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Envío de comunicaciones sobre nuevos servicios, actualizaciones o contenido de interés.</li>
|
||||||
|
<li>Estadísticas internas y mejora de la experiencia en el sitio.</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Si no desea que sus datos sean tratados para las finalidades secundarias, puede
|
||||||
|
manifestarlo en cualquier momento escribiéndonos a{' '}
|
||||||
|
<a href="mailto:[email protected]">contacto@rynext.com.mx</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>4. Transferencia de datos personales</h2>
|
||||||
|
<p>
|
||||||
|
Rynext no vende, renta ni comercializa sus datos personales a terceros.
|
||||||
|
Únicamente podremos transferirlos en los siguientes casos:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>A proveedores de servicios tecnológicos que actúen como encargados bajo instrucción de Rynext y con las mismas obligaciones de confidencialidad.</li>
|
||||||
|
<li>Cuando sea requerido por autoridades competentes en cumplimiento de disposiciones legales.</li>
|
||||||
|
</ul>
|
||||||
|
<p>En ningún caso sus datos serán transferidos a terceros con fines distintos a los aquí establecidos sin su consentimiento previo.</p>
|
||||||
|
|
||||||
|
<h2>5. Derechos ARCO</h2>
|
||||||
|
<p>
|
||||||
|
Usted tiene derecho a <strong>Acceder, Rectificar, Cancelar u Oponerse</strong> (derechos ARCO)
|
||||||
|
al tratamiento de sus datos personales, así como a revocar el consentimiento
|
||||||
|
que haya otorgado para dicho tratamiento.
|
||||||
|
</p>
|
||||||
|
<p>Para ejercer sus derechos ARCO debe enviar una solicitud a:</p>
|
||||||
|
<p>
|
||||||
|
<strong>Correo:</strong>{' '}
|
||||||
|
<a href="mailto:[email protected]">contacto@rynext.com.mx</a><br />
|
||||||
|
<strong>Asunto:</strong> Ejercicio de Derechos ARCO
|
||||||
|
</p>
|
||||||
|
<p>Su solicitud deberá contener:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Nombre completo y correo electrónico con el que se registró o contactó.</li>
|
||||||
|
<li>Descripción clara del derecho que desea ejercer y los datos a los que se refiere.</li>
|
||||||
|
<li>Cualquier documento que facilite la localización de sus datos.</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Rynext responderá a su solicitud en un plazo máximo de <strong>20 días hábiles</strong>
|
||||||
|
a partir de su recepción.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>6. Uso de cookies</h2>
|
||||||
|
<p>
|
||||||
|
Este sitio utiliza cookies técnicas estrictamente necesarias para su funcionamiento.
|
||||||
|
No utilizamos cookies de rastreo ni publicidad comportamental sin su consentimiento.
|
||||||
|
Puede configurar su navegador para bloquear o eliminar las cookies; sin embargo,
|
||||||
|
algunas funcionalidades del sitio podrían verse afectadas.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>7. Cambios al aviso de privacidad</h2>
|
||||||
|
<p>
|
||||||
|
Rynext se reserva el derecho de modificar este Aviso de Privacidad en cualquier
|
||||||
|
momento para reflejar cambios legislativos, jurisprudenciales o en nuestras
|
||||||
|
prácticas de privacidad. Las modificaciones serán publicadas en esta página
|
||||||
|
con la fecha de actualización correspondiente. Se recomienda revisar periódicamente
|
||||||
|
este aviso.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>8. Autoridad competente</h2>
|
||||||
|
<p>
|
||||||
|
Si considera que sus derechos han sido vulnerados, tiene derecho a acudir ante
|
||||||
|
el Instituto Nacional de Transparencia, Acceso a la Información y Protección
|
||||||
|
de Datos Personales (INAI) en{' '}
|
||||||
|
<a href="https://www.inai.org.mx" target="_blank" rel="noopener noreferrer">www.inai.org.mx</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
);
|
||||||
|
};
|
||||||
Reference in new issue
Block a user