Compare commits

..

No commits in common. "713168ecbeab1c0d821d2d7f877959847117ba3d" and "a3a36df811f93eaea96a06a446941f02436d2d1a" have entirely different histories.

15 changed files with 151 additions and 1302 deletions

View File

@ -228,13 +228,7 @@
<div class="footer-bottom"> <div class="footer-bottom">
<div class="container"> <div class="container">
<p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p> <p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p>
<p style="margin-top:4px;"> <p style="margin-top:4px;"><a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a></p>
<a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="mentions-legales.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.mentionsLegales">Mentions Légales</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="politique-confidentialite.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.privacy">Politique de Confidentialité</a>
</p>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -263,13 +263,7 @@
<div class="footer-bottom"> <div class="footer-bottom">
<div class="container"> <div class="container">
<p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p> <p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p>
<p style="margin-top:4px;"> <p style="margin-top:4px;"><a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a></p>
<a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="mentions-legales.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.mentionsLegales">Mentions Légales</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="politique-confidentialite.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.privacy">Politique de Confidentialité</a>
</p>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -298,13 +298,7 @@
<div class="footer-bottom"> <div class="footer-bottom">
<div class="container"> <div class="container">
<p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p> <p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p>
<p style="margin-top:4px;"> <p style="margin-top:4px;"><a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a></p>
<a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="mentions-legales.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.mentionsLegales">Mentions Légales</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="politique-confidentialite.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.privacy">Politique de Confidentialité</a>
</p>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -340,13 +340,7 @@
<div class="footer-bottom"> <div class="footer-bottom">
<div class="container"> <div class="container">
<p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p> <p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p>
<p style="margin-top:4px;"> <p style="margin-top:4px;"><a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a></p>
<a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="mentions-legales.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.mentionsLegales">Mentions Légales</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="politique-confidentialite.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.privacy">Politique de Confidentialité</a>
</p>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -61,8 +61,6 @@ const FALLBACK_EMAILJS_SERVICE_ID = 'service_aeamo3x';
const FALLBACK_EMAILJS_TEMPLATE_ID= 'template_s1kr2et'; const FALLBACK_EMAILJS_TEMPLATE_ID= 'template_s1kr2et';
const HUBSPOT_API = 'https://api.hubapi.com'; const HUBSPOT_API = 'https://api.hubapi.com';
const HUBSPOT_PORTAL_ID = '148163754';
const HUBSPOT_FORM_GUID = '1d9b75c9-8b60-4966-aa18-4bf503452e9a';
const EMAILJS_API = 'https://api.emailjs.com/api/v1.0/email/send'; const EMAILJS_API = 'https://api.emailjs.com/api/v1.0/email/send';
const corsHeaders = { const corsHeaders = {
@ -131,141 +129,6 @@ export default {
} }
} }
// ── action: requestVerification ──────────────────────────
// Génère un token unique, stocke TOUTES les données du formulaire en KV,
// et envoie un email de validation via Brevo. Le contact n'est créé
// dans HubSpot QU'APRÈS clic sur le lien de confirmation (anti-spam :
// les inscriptions non vérifiées ne polluent pas le CRM).
// Anti-bot : Turnstile vérifié d'abord.
if (action === 'requestVerification') {
if (!body.email) return jsonResponse({ error: 'email requis' }, 400);
const turnstileOk = await verifyTurnstile(env, body.turnstile_token, request);
if (!turnstileOk) {
return jsonResponse({ ok: false, error: 'Turnstile validation failed' }, 403);
}
try {
const verToken = crypto.randomUUID().replace(/-/g, '');
const tokenData = {
firstname : body.firstname || '',
lastname : body.lastname || '',
phone : body.phone || '',
email : body.email.toLowerCase().trim(),
address : body.address || '',
createdAt : new Date().toISOString(),
};
if (!env.WELCOME_KV) {
return jsonResponse({ ok: false, error: 'KV not bound' }, 500);
}
// Token valide 24h
await env.WELCOME_KV.put(`verify:${verToken}`, JSON.stringify(tokenData), {
expirationTtl: 60 * 60 * 24,
});
await sendVerificationEmail(env, tokenData, verToken);
return jsonResponse({ ok: true });
} catch (err) {
return jsonResponse({ ok: false, error: err.message }, 500);
}
}
// ── action: verifyToken ──────────────────────────────────
// Appelé par confirmation.html quand l'utilisateur clique sur
// le lien dans l'email de validation. C'est ICI que le contact
// est CRÉÉ dans HubSpot (avec une référence générée à la volée),
// puis le welcome email est envoyé (ref + adresse Paris).
// Idempotent : un 2ème clic ne re-crée pas de contact.
if (action === 'verifyToken') {
if (!body.token) return jsonResponse({ error: 'token requis' }, 400);
if (!env.WELCOME_KV) return jsonResponse({ ok: false, error: 'KV not bound' }, 500);
const key = `verify:${body.token}`;
const raw = await env.WELCOME_KV.get(key);
if (!raw) {
return jsonResponse({ ok: false, error: 'Token invalide ou expiré' }, 404);
}
const tokenData = JSON.parse(raw);
// Idempotence : si déjà consommé, retourne le résultat précédent
// sans recréer le contact ni renvoyer d'email.
if (tokenData.used) {
return jsonResponse({
ok: true,
firstname : tokenData.firstname,
reference_client : tokenData.reference_client || '',
});
}
try {
// 1) Récupère la ref existante si le contact est déjà dans HubSpot
// (réinscription après suppression d'un test, ou création via
// l'ancien flow Forms API). Sinon génère la prochaine ref.
let refNumber;
try {
const existing = await searchContactByEmail(token, tokenData.email);
const existingResult = (existing.results || [])[0];
const existingRef = existingResult?.properties?.reference_client;
refNumber = existingRef || await getNextRef(token);
} catch (_) {
// Si la search échoue (scope manquant, etc.), fallback : génère
// une nouvelle ref. Le Forms API gérera la dédup côté HubSpot.
refNumber = await getNextRef(token);
}
// 2) Soumet via Forms API HubSpot (sans auth, pas besoin de scope
// write). Forms API crée le contact OU met à jour s'il existe.
const formRes = await fetch(
`https://api.hsforms.com/submissions/v3/integration/submit/${HUBSPOT_PORTAL_ID}/${HUBSPOT_FORM_GUID}`,
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
fields: [
{ name: 'firstname', value: tokenData.firstname || '' },
{ name: 'lastname', value: tokenData.lastname || '' },
{ name: 'phone', value: tokenData.phone || '' },
{ name: 'email', value: tokenData.email },
{ name: 'address', value: tokenData.address || '' },
{ name: 'reference_client', value: refNumber },
],
context: {
pageUri : 'https://mva-global-fret.github.io/site-mva-global-fret/contact.html',
pageName: 'Verified signup (MVA Global Fret)',
},
}),
}
);
if (!formRes.ok) {
const errTxt = await formRes.text();
throw new Error(`HubSpot Forms API failed ${formRes.status}: ${errTxt}`);
}
// 3) Envoie le welcome email avec ref + adresse Paris
const welcomeContact = { ...tokenData, reference_client: refNumber };
await sendWelcomeViaBrevo(env, welcomeContact);
// 4) Marque le token consommé (gardé 7j pour idempotence)
await env.WELCOME_KV.put(key, JSON.stringify({
...tokenData,
used : true,
usedAt : new Date().toISOString(),
reference_client : refNumber,
}), {
expirationTtl: 60 * 60 * 24 * 7,
});
return jsonResponse({
ok: true,
firstname : tokenData.firstname,
reference_client : refNumber,
});
} catch (err) {
return jsonResponse({ ok: false, error: err.message }, 500);
}
}
// ── action: listSubscriptions (debug : trouver les IDs) ── // ── action: listSubscriptions (debug : trouver les IDs) ──
if (action === 'listSubscriptions') { if (action === 'listSubscriptions') {
// Endpoint legacy email/public/v1 nécessite scope content au lieu de // Endpoint legacy email/public/v1 nécessite scope content au lieu de
@ -491,200 +354,6 @@ async function sendWelcomeEmail(env, params) {
} }
} }
// =============================================================
// Brevo (ex-Sendinblue) : envoi d'emails (verification + welcome)
// =============================================================
// Brevo est utilisé pour l'envoi car il accepte la "single-sender
// verification" : on valide juste une adresse email (mvaglobalfret@gmail.com)
// au lieu de devoir vérifier tout un domaine. Free tier : 300 emails/jour.
//
// Setup requis :
// - env.BREVO_API_KEY = clé API Brevo (xkeysib-...)
// - env.BREVO_SENDER_EMAIL = adresse expéditrice validée chez Brevo
// (ex: "mvaglobalfret@gmail.com")
// - env.BREVO_SENDER_NAME = nom affiché à l'expéditeur (ex: "MVA Global Fret")
// - env.SITE_URL = base URL du site (ex: "https://mva-global-fret.github.io/site-mva-global-fret")
//
// API doc : https://developers.brevo.com/reference/sendtransacemail
const BREVO_API = 'https://api.brevo.com/v3/smtp/email';
async function brevoSend(env, { to, subject, html }) {
if (!env.BREVO_API_KEY) {
throw new Error('BREVO_API_KEY env var not set');
}
const senderEmail = env.BREVO_SENDER_EMAIL || 'mvaglobalfret@gmail.com';
const senderName = env.BREVO_SENDER_NAME || 'MVA Global Fret';
const res = await fetch(BREVO_API, {
method: 'POST',
headers: {
'api-key' : env.BREVO_API_KEY,
'accept' : 'application/json',
'content-type': 'application/json',
},
body: JSON.stringify({
sender : { name: senderName, email: senderEmail },
to : [{ email: to }],
subject : subject,
htmlContent: html,
}),
});
if (!res.ok) {
const text = await res.text();
throw new Error(`Brevo ${res.status}: ${text}`);
}
return res.json();
}
async function sendVerificationEmail(env, contact, verToken) {
const siteUrl = env.SITE_URL || 'https://mva-global-fret.github.io/site-mva-global-fret';
const verifyUrl = `${siteUrl}/confirmation.html?token=${verToken}`;
const logoUrl = `${siteUrl}/PNG%20MVA%20GLOBAL%20FRET.png`;
const firstname = escapeHtml(contact.firstname || '');
const html = `<!DOCTYPE html>
<html lang="fr">
<body style="margin:0;padding:0;font-family:Arial,sans-serif;background:#f5f5f5;">
<div style="max-width:600px;margin:0 auto;background:#fff;">
<div style="background:#1a1a3e;padding:24px 30px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" style="width:100%;border-collapse:collapse;">
<tr>
<td style="width:80px;vertical-align:middle;">
<img src="${logoUrl}" alt="MVA Global Fret" style="display:block;width:70px;height:auto;border:0;">
</td>
<td style="vertical-align:middle;text-align:center;padding-right:80px;">
<div style="color:#c5a55a;font-size:24px;font-weight:700;letter-spacing:2px;">MVA GLOBAL FRET</div>
<div style="color:#fff;font-size:13px;margin-top:6px;">Fret Aérien Paris Antananarivo</div>
</td>
</tr>
</table>
</div>
<div style="padding:40px;">
<p style="font-size:18px;color:#1a1a3e;font-weight:bold;">Bonjour ${firstname},</p>
<p style="color:#333;line-height:1.6;">
Merci pour votre inscription chez <strong>MVA Global Fret</strong> !
</p>
<p style="color:#333;line-height:1.6;">
Pour finaliser votre inscription et recevoir votre <strong>numéro de référence client</strong>
ainsi que <strong>l'adresse de notre dépôt à Paris</strong>, cliquez sur le bouton ci-dessous :
</p>
<div style="text-align:center;margin:32px 0;">
<a href="${verifyUrl}" style="display:inline-block;background:#c5a55a;color:#1a1a3e;padding:16px 40px;border-radius:50px;text-decoration:none;font-weight:700;font-size:16px;letter-spacing:0.5px;">
Confirmer mon email
</a>
</div>
<p style="color:#666;font-size:13px;line-height:1.6;">
Ce lien est valable <strong>24 heures</strong>. Si vous n'êtes pas à l'origine de cette inscription, ignorez simplement cet email.
</p>
<p style="color:#666;font-size:12px;line-height:1.6;border-top:1px solid #eee;padding-top:18px;margin-top:30px;">
Si le bouton ne fonctionne pas, copiez ce lien dans votre navigateur :<br>
<span style="color:#c5a55a;word-break:break-all;">${verifyUrl}</span>
</p>
</div>
<div style="background:#1a1a3e;padding:18px;text-align:center;color:#c5a55a;font-size:12px;">
© 2026 MVA Global Fret Tous droits réservés
</div>
</div>
</body>
</html>`;
return brevoSend(env, {
to: contact.email,
subject: 'Confirmez votre inscription chez MVA Global Fret',
html,
});
}
async function sendWelcomeViaBrevo(env, contact) {
const siteUrl = env.SITE_URL || 'https://mva-global-fret.github.io/site-mva-global-fret';
const logoUrl = `${siteUrl}/PNG%20MVA%20GLOBAL%20FRET.png`;
const firstname = escapeHtml(contact.firstname || '');
const ref = escapeHtml(contact.reference_client || '');
const refRaw = contact.reference_client || '';
// Format adresse Paris : la 1ère ligne (nom du destinataire) reçoit
// automatiquement la référence client entre parenthèses, comme ça
// le client a directement la bonne forme à recopier sur son colis.
// Support aussi un placeholder {{ref}} si présent dans l'env var.
let parisAddrRaw = env.PARIS_DEPOT_ADDRESS || '';
if (parisAddrRaw.includes('{{ref}}')) {
parisAddrRaw = parisAddrRaw.replace(/\{\{ref\}\}/g, refRaw);
} else if (refRaw && parisAddrRaw) {
const lines = parisAddrRaw.split('\n');
lines[0] = `${lines[0]} (${refRaw})`;
parisAddrRaw = lines.join('\n');
}
const parisAddr = escapeHtml(parisAddrRaw).replace(/\n/g, '<br>');
const html = `<!DOCTYPE html>
<html lang="fr">
<body style="margin:0;padding:0;font-family:Arial,sans-serif;background:#f5f5f5;">
<div style="max-width:600px;margin:0 auto;background:#fff;">
<div style="background:#1a1a3e;padding:24px 30px;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" style="width:100%;border-collapse:collapse;">
<tr>
<td style="width:80px;vertical-align:middle;">
<img src="${logoUrl}" alt="MVA Global Fret" style="display:block;width:70px;height:auto;border:0;">
</td>
<td style="vertical-align:middle;text-align:center;padding-right:80px;">
<div style="color:#c5a55a;font-size:24px;font-weight:700;letter-spacing:2px;">MVA GLOBAL FRET</div>
<div style="color:#fff;font-size:13px;margin-top:6px;">Fret Aérien Paris Antananarivo</div>
</td>
</tr>
</table>
</div>
<div style="padding:40px;">
<p style="font-size:18px;color:#1a1a3e;font-weight:bold;">Bonjour ${firstname},</p>
<p style="color:#333;line-height:1.6;">
Bienvenu(e) chez <strong>MVA Global Fret</strong> ! Votre email est confirmé,
votre inscription est désormais active.
</p>
<div style="background:#f0ead8;border-left:4px solid #c5a55a;padding:16px 20px;margin:24px 0;border-radius:4px;">
<p style="margin:0;color:#1a1a3e;font-size:14px;">Votre numéro de référence client :</p>
<p style="margin:8px 0 0;color:#1a1a3e;font-size:22px;font-weight:bold;letter-spacing:2px;">${ref}</p>
<p style="margin:6px 0 0;color:#666;font-size:12px;">Conservez ce numéro précieusement.</p>
</div>
<p style="color:#333;margin-top:28px;"><strong>L'adresse à Paris pour l'envoi de vos colis :</strong></p>
<div style="background:#f9f9f9;border:1px solid #ddd;padding:20px 24px;border-radius:6px;margin:12px 0;font-family:monospace;font-size:15px;line-height:1.8;color:#1a1a3e;">
${parisAddr}
</div>
<div style="background:#fff3cd;border:1px solid #ffc107;padding:14px 18px;border-radius:6px;margin:16px 0;">
<p style="margin:0 0 8px;color:#856404;font-size:14px;font-weight:bold;">
Important : ne modifiez rien à ces informations.
</p>
<p style="margin:0;color:#856404;font-size:14px;line-height:1.5;">
Recopiez l'adresse <strong>exactement telle qu'elle est indiquée ci-dessus</strong>,
sans rien retirer ni ajouter. Votre numéro de référence <strong>${ref}</strong>
fait partie intégrante de l'adresse — c'est ce qui garantit que votre colis nous arrive bien.
</p>
</div>
<p style="color:#333;line-height:1.6;">
Pour toute question, contactez-nous :<br>
📧 mvaglobalfret@gmail.com<br>
📞 +33 7 80 97 08 25 (France) +261 38 49 737 51 (Madagascar)
</p>
</div>
<div style="background:#1a1a3e;padding:18px;text-align:center;color:#c5a55a;font-size:12px;">
© 2026 MVA Global Fret Tous droits réservés
</div>
</div>
</body>
</html>`;
return brevoSend(env, {
to: contact.email,
subject: `Bienvenue chez MVA Global Fret — Votre référence ${ref}`,
html,
});
}
function escapeHtml(s) {
return String(s)
.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
.replace(/"/g, '&quot;').replace(/'/g, '&#39;');
}
// ============================================================= // =============================================================
// Cloudflare Turnstile : validation anti-bot // Cloudflare Turnstile : validation anti-bot
// ============================================================= // =============================================================

View File

@ -96,8 +96,6 @@
} }
.confirmation-card .actions .btn { .confirmation-card .actions .btn {
flex: 1 1 200px; flex: 1 1 200px;
justify-content: center;
text-align: center;
} }
.confirmation-card .loader { .confirmation-card .loader {
display: inline-block; display: inline-block;

View File

@ -76,10 +76,10 @@
<p style="color: var(--text-light); margin-bottom: 32px;" data-i18n="contact.formSubtitle">Remplissez ce formulaire pour recevoir votre numéro de référence client et l'adresse de dépôt à Paris.</p> <p style="color: var(--text-light); margin-bottom: 32px;" data-i18n="contact.formSubtitle">Remplissez ce formulaire pour recevoir votre numéro de référence client et l'adresse de dépôt à Paris.</p>
<div class="form-success" id="formSuccess" role="alert"> <div class="form-success" id="formSuccess" role="alert">
<i class="fa-solid fa-envelope-circle-check" style="font-size: 2rem; color: var(--gold); display: block; margin-bottom: 12px;"></i> <i class="fa-solid fa-circle-check" style="font-size: 2rem; color: var(--green); display: block; margin-bottom: 12px;"></i>
<strong data-i18n="contact.successTitle">Vérifiez votre boîte mail !</strong><br> <strong data-i18n="contact.successTitle">Inscription réussie !</strong><br>
<span data-i18n="contact.successMsg">Pour finaliser votre inscription, cliquez sur le lien de confirmation que nous venons de vous envoyer par email. Vous recevrez ensuite votre numéro de référence client et l'adresse de dépôt à Paris.</span> <span data-i18n="contact.successMsg">Merci ! Votre inscription a bien été enregistrée. Un email de bienvenue avec votre numéro de référence client et l'adresse de dépôt à Paris vient de vous être envoyé.</span>
<p style="margin-top:12px; font-size:0.85rem; color: var(--text-light);" data-i18n="contact.emailSent">📧 Email envoyé — pensez à vérifier vos spams. Le lien expire dans 24h.</p> <p style="margin-top:12px; font-size:0.85rem; color: var(--text-light);" data-i18n="contact.emailSent">📧 Vérifiez votre boîte mail (et vos spams).</p>
</div> </div>
<!-- DÉJÀ INSCRIT --> <!-- DÉJÀ INSCRIT -->
@ -299,13 +299,7 @@
<div class="footer-bottom"> <div class="footer-bottom">
<div class="container"> <div class="container">
<p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p> <p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p>
<p style="margin-top:4px;"> <p style="margin-top:4px;"><a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a></p>
<a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="mentions-legales.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.mentionsLegales">Mentions Légales</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="politique-confidentialite.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.privacy">Politique de Confidentialité</a>
</p>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -280,13 +280,7 @@
<div class="footer-bottom"> <div class="footer-bottom">
<div class="container"> <div class="container">
<p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p> <p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p>
<p style="margin-top:4px;"> <p style="margin-top:4px;"><a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a></p>
<a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="mentions-legales.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.mentionsLegales">Mentions Légales</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="politique-confidentialite.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.privacy">Politique de Confidentialité</a>
</p>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -1,76 +1,110 @@
// ============================================================ // ============================================================
// MVA Global Fret — Page de confirmation post-validation email // MVA Global Fret — Page de confirmation post-double-opt-in
// ============================================================ // ============================================================
// Cette page est la cible du lien dans l'email de validation // Cette page est la cible de redirection après que l'utilisateur
// (envoyé par Brevo après soumission du formulaire). // a cliqué sur "Confirmer" dans l'email de validation HubSpot.
// //
// URL : https://mva-global-fret.github.io/site-mva-global-fret/confirmation.html?token=XXX // HubSpot redirige vers :
// https://mva-global-fret.github.io/site-mva-global-fret/confirmation.html?email={contact.email}
// //
// Étapes : // Étapes :
// 1. Lire le token depuis l'URL // 1. Lire l'email depuis l'URL
// 2. POST au Worker avec action 'verifyToken' // 2. Demander au Cloudflare Worker la fiche du contact (incluant reference_client)
// 3. Worker valide le token, envoie le welcome email (avec ref + // 3. Envoyer un email de bienvenue via EmailJS contenant la référence
// adresse Paris) via Brevo, puis renvoie OK // 4. Afficher la référence à l'écran
// 4. Page affiche "Inscription confirmée !"
// //
// Si le token est invalide / expiré : affichage d'un message d'erreur // Si une étape échoue, on affiche un fallback poli (l'inscription
// avec invitation à contacter le support. // reste valide côté HubSpot, c'est juste l'email qui ne part pas).
// ============================================================ // ============================================================
const WORKER_PROXY_URL = 'https://mva-hubspot-proxy.mvaglobalfret.workers.dev'; const WORKER_PROXY_URL = 'https://mva-hubspot-proxy.mvaglobalfret.workers.dev';
const EMAILJS_PUBLIC_KEY = '8KUlaQ7BDVIbkZRyP';
const EMAILJS_SERVICE_ID = 'service_aeamo3x';
const EMAILJS_TEMPLATE_ID = 'template_s1kr2et';
// Marqueur localStorage : empêche de relancer l'envoi si l'utilisateur
// recharge la page après confirmation (par sécurité ET pour ne pas
// renvoyer 3 fois le même email).
const STORAGE_KEY_PREFIX = 'mva-confirm-sent-';
document.addEventListener('DOMContentLoaded', async () => { document.addEventListener('DOMContentLoaded', async () => {
const token = new URLSearchParams(window.location.search).get('token'); if (typeof emailjs !== 'undefined') {
emailjs.init({ publicKey: EMAILJS_PUBLIC_KEY });
}
if (!token) { const email = getEmailFromUrl();
showError('Lien de confirmation invalide. Veuillez vérifier votre email ou nous contacter.');
if (!email) {
// Pas d'email dans l'URL : on affiche quand même un succès générique
// (l'utilisateur a bien confirmé puisqu'il atterrit ici depuis HubSpot)
showSuccess(null);
return; return;
} }
try { try {
const res = await fetch(WORKER_PROXY_URL, { const contact = await fetchContact(email);
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ action: 'verifyToken', token }),
});
const data = await res.json();
if (data.ok) { if (!contact) {
showSuccess(data.reference_client || null); // Contact non trouvé via Worker — on affiche succès quand même
} else { showSuccess(null);
// Token expiré, déjà utilisé, ou inconnu return;
showError(data.error === 'Token invalide ou expiré'
? 'Ce lien de confirmation a expiré ou a déjà été utilisé.'
: 'Une erreur est survenue lors de la confirmation.');
} }
const ref = contact.reference_client || null;
// Idempotence : un seul email par confirmation
const storageKey = STORAGE_KEY_PREFIX + email.toLowerCase();
if (!localStorage.getItem(storageKey)) {
await sendWelcomeEmail({
firstname: contact.firstname || '',
email: email,
reference_client: ref || '',
});
localStorage.setItem(storageKey, String(Date.now()));
}
showSuccess(ref);
} catch (err) { } catch (err) {
console.warn('[confirmation]', err); console.warn('[confirmation] flow failed:', err);
showError('Impossible de joindre le serveur. Vérifiez votre connexion et réessayez.'); showError();
} }
}); });
function getEmailFromUrl() {
const params = new URLSearchParams(window.location.search);
const raw = params.get('email');
if (!raw) return null;
const email = raw.trim().toLowerCase();
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email) ? email : null;
}
async function fetchContact(email) {
const res = await fetch(WORKER_PROXY_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email }),
});
if (!res.ok) throw new Error('Worker error: ' + res.status);
const data = await res.json();
if (!data.results || data.results.length === 0) return null;
return data.results[0].properties;
}
async function sendWelcomeEmail(payload) {
if (typeof emailjs === 'undefined') return;
await emailjs.send(EMAILJS_SERVICE_ID, EMAILJS_TEMPLATE_ID, payload);
}
function showSuccess(ref) { function showSuccess(ref) {
const loading = document.getElementById('cardLoading'); document.getElementById('cardLoading').style.display = 'none';
const success = document.getElementById('cardSuccess'); document.getElementById('cardSuccess').style.display = '';
if (loading) loading.style.display = 'none'; if (ref) {
if (success) { document.getElementById('refDisplay').textContent = ref;
success.style.display = ''; document.getElementById('refBlock').style.display = '';
if (ref) {
const refDisplay = document.getElementById('refDisplay');
const refBlock = document.getElementById('refBlock');
if (refDisplay) refDisplay.textContent = ref;
if (refBlock) refBlock.style.display = '';
}
} }
} }
function showError(msg) { function showError() {
const loading = document.getElementById('cardLoading'); document.getElementById('cardLoading').style.display = 'none';
const error = document.getElementById('cardError'); document.getElementById('cardError').style.display = '';
if (loading) loading.style.display = 'none';
if (error) {
error.style.display = '';
const desc = error.querySelector('p');
if (desc && msg) desc.textContent = msg;
}
} }

View File

@ -98,50 +98,40 @@ function setupContactForm(form) {
const email = form.email.value.trim(); const email = form.email.value.trim();
// ── VÉRIFICATION DOUBLON ────────────────────────────────────────────────── // ── VÉRIFICATION DOUBLON ──────────────────────────────────────────────────
// Vérifie HubSpot. Comme les contacts ne sont créés QU'APRÈS confirmation // Si le client existe déjà, on affiche uniquement un message informatif.
// email, ce check ne retourne que les vrais clients déjà inscrits (pas // On ne soumet RIEN à HubSpot — la référence existante n'est JAMAIS modifiée.
// les inscriptions en attente de confirmation).
const existing = await checkExistingContact(email); const existing = await checkExistingContact(email);
if (existing) { if (existing) {
setLoading(false); setLoading(false);
showAlreadyRegistered(existing); showAlreadyRegistered(existing);
return; return; // ← arrêt complet, aucune soumission
} }
// ───────────────────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────────────────
// Nouveau client : génération du numéro de référence unique
const refNumber = await generateRefNumber();
const data = { const data = {
firstname: form.firstname.value.trim(), firstname: form.firstname.value.trim(),
lastname: form.lastname.value.trim(), lastname: form.lastname.value.trim(),
phone: form.phone.value.trim(), phone: form.phone.value.trim(),
email: email, email: email,
address: form.address.value.trim(), address: form.address.value.trim(),
reference_client: refNumber,
}; };
// ── ENVOI VERS LE WORKER ────────────────────────────────────────────────── const results = await Promise.allSettled([
// Le Worker stocke les données en KV (24h), envoie un email de validation submitToHubSpot(data),
// via Brevo. Le contact n'est créé dans HubSpot QUE quand l'utilisateur submitToFormspree(data),
// clique sur le lien de confirmation (anti-pollution du CRM). ]);
let ok = false;
try { const hubspotOk = results[0].status === 'fulfilled';
const res = await fetch(WORKER_PROXY_URL, { const formspreeOk = results[1].status === 'fulfilled';
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
action: 'requestVerification',
...data,
turnstile_token: window.turnstileToken || '',
}),
});
const result = await res.json().catch(() => ({}));
ok = res.ok && result.ok === true;
} catch (err) {
console.warn('[requestVerification]', err);
}
setLoading(false); setLoading(false);
if (ok) { if (hubspotOk || formspreeOk) {
showSuccess(null, data); showSuccess(refNumber, data);
} else { } else {
showError(); showError();
} }
@ -295,10 +285,7 @@ function setLoading(isLoading) {
form?.classList.toggle('form-loading', isLoading); form?.classList.toggle('form-loading', isLoading);
} }
function showSuccess(_refNumber, _clientData) { function showSuccess(refNumber, clientData) {
// L'envoi de l'email de validation est déjà fait dans setupContactForm
// via l'appel Worker requestVerification — on n'a plus rien à faire ici
// sauf afficher la confirmation à l'écran.
const successEl = document.getElementById('formSuccess'); const successEl = document.getElementById('formSuccess');
const form = document.getElementById('contactForm'); const form = document.getElementById('contactForm');
if (successEl) { if (successEl) {
@ -306,6 +293,38 @@ function showSuccess(_refNumber, _clientData) {
successEl.scrollIntoView({ behavior: 'smooth', block: 'center' }); successEl.scrollIntoView({ behavior: 'smooth', block: 'center' });
} }
if (form) form.style.display = 'none'; if (form) form.style.display = 'none';
// Envoi de l'email de bienvenue (avec la référence + l'adresse Paris)
// directement après inscription. Les bots qui soumettent avec un faux
// email ne reçoivent rien (boîte inexistante = bounce). Pour bloquer
// les bots qui utilisent de vrais emails, voir la protection honeypot
// dans validateForm() + le rate limit côté worker.
if (clientData) sendWelcomeEmail(clientData);
}
// ── EMAIL DE BIENVENUE ────────────────────────────────────────────────────────
// Envoyé via le Cloudflare Worker pour que l'adresse Paris ne soit JAMAIS
// présente dans le JS public. Le Worker valide d'abord le token Turnstile
// (anti-bot) puis fait le call EmailJS REST avec le PARIS_DEPOT_ADDRESS
// depuis ses variables d'environnement.
async function sendWelcomeEmail(data) {
if (!WORKER_PROXY_URL) return;
try {
await fetch(WORKER_PROXY_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
action: 'sendWelcomeNow',
firstname: data.firstname,
email: data.email,
reference_client: data.reference_client,
turnstile_token: window.turnstileToken || '',
}),
});
} catch (err) {
// L'email de bienvenue est un bonus — on ne bloque pas l'inscription si ça échoue
console.warn('Welcome email failed:', err);
}
} }
// ── EMAIL "RAVIS DE TE REVOIR" (client déjà inscrit) ────────────────────────── // ── EMAIL "RAVIS DE TE REVOIR" (client déjà inscrit) ──────────────────────────

View File

@ -150,11 +150,11 @@ const translations = {
placeholderAdresse: "Adresse complète...", placeholderAdresse: "Adresse complète...",
submitBtn: "S'inscrire", submitBtn: "S'inscrire",
submitLoading: "Envoi en cours...", submitLoading: "Envoi en cours...",
successTitle: "Vérifiez votre boîte mail !", successTitle: "Inscription réussie !",
successMsg: "Pour finaliser votre inscription, cliquez sur le lien de confirmation que nous venons de vous envoyer par email. Vous recevrez ensuite votre numéro de référence client et l'adresse de dépôt à Paris.", successMsg: "Merci ! Votre inscription a bien été enregistrée. Un email de bienvenue avec votre numéro de référence client et l'adresse de dépôt à Paris vient de vous être envoyé.",
refLabel: "VOTRE NUMÉRO DE RÉFÉRENCE CLIENT", refLabel: "VOTRE NUMÉRO DE RÉFÉRENCE CLIENT",
successNote: "Conservez ce numéro précieusement — il vous sera utile pour suivre vos colis.", successNote: "Conservez ce numéro précieusement — il vous sera utile pour suivre vos colis.",
emailSent: "📧 Email envoyé — pensez à vérifier vos spams. Le lien expire dans 24h.", emailSent: "📧 Vérifiez votre boîte mail (et vos spams).",
alreadyTitle: "Vous êtes déjà client !", alreadyTitle: "Vous êtes déjà client !",
alreadyMsg: "Votre adresse email est déjà enregistrée dans notre système.", alreadyMsg: "Votre adresse email est déjà enregistrée dans notre système.",
alreadyRefLabel: "VOTRE NUMÉRO DE RÉFÉRENCE EXISTANT", alreadyRefLabel: "VOTRE NUMÉRO DE RÉFÉRENCE EXISTANT",
@ -284,22 +284,12 @@ const translations = {
linksTitle: "Liens Rapides", linksTitle: "Liens Rapides",
contactTitle: "Contact", contactTitle: "Contact",
copyright: "© 2026 MVA Global Fret. Tous droits réservés.", copyright: "© 2026 MVA Global Fret. Tous droits réservés.",
cgv: "Conditions Générales de Vente", cgv: "Conditions Générales de Vente"
mentionsLegales: "Mentions Légales",
privacy: "Politique de Confidentialité"
}, },
cgv: { cgv: {
heroTitle: "Conditions Générales de Vente", heroTitle: "Conditions Générales de Vente",
heroSubtitle: "Lire et accepter avant toute inscription" heroSubtitle: "Lire et accepter avant toute inscription"
}, },
mentionsLegales: {
heroTitle: "Mentions Légales",
heroSubtitle: "Informations légales relatives au site MVA Global Fret"
},
privacy: {
heroTitle: "Politique de Confidentialité",
heroSubtitle: "Comment nous protégeons vos données personnelles"
},
serviceCommande: { serviceCommande: {
heroTitle: "Service Commande pour Vous", heroTitle: "Service Commande pour Vous",
heroSubtitle: "Nous commandons pour vous sur les sites européens, vous récupérez à Madagascar", heroSubtitle: "Nous commandons pour vous sur les sites européens, vous récupérez à Madagascar",
@ -646,22 +636,12 @@ const translations = {
linksTitle: "Quick Links", linksTitle: "Quick Links",
contactTitle: "Contact", contactTitle: "Contact",
copyright: "© 2026 MVA Global Fret. All rights reserved.", copyright: "© 2026 MVA Global Fret. All rights reserved.",
cgv: "Terms and Conditions", cgv: "Terms and Conditions"
mentionsLegales: "Legal Notice",
privacy: "Privacy Policy"
}, },
cgv: { cgv: {
heroTitle: "Terms and Conditions of Sale", heroTitle: "Terms and Conditions of Sale",
heroSubtitle: "Please read and accept before registering" heroSubtitle: "Please read and accept before registering"
}, },
mentionsLegales: {
heroTitle: "Legal Notice",
heroSubtitle: "Legal information about the MVA Global Fret website"
},
privacy: {
heroTitle: "Privacy Policy",
heroSubtitle: "How we protect your personal data"
},
serviceCommande: { serviceCommande: {
heroTitle: "Order Service for You", heroTitle: "Order Service for You",
heroSubtitle: "We order for you on European websites, you pick up in Madagascar", heroSubtitle: "We order for you on European websites, you pick up in Madagascar",
@ -1008,22 +988,12 @@ const translations = {
linksTitle: "Rohy Haingana", linksTitle: "Rohy Haingana",
contactTitle: "Fifandraisana", contactTitle: "Fifandraisana",
copyright: "© 2026 MVA Global Fret. Zo rehetra voatahiry.", copyright: "© 2026 MVA Global Fret. Zo rehetra voatahiry.",
cgv: "Fepetra Ankapoben'ny Varotra", cgv: "Fepetra Ankapoben'ny Varotra"
mentionsLegales: "Filazana Ara-dalàna",
privacy: "Politikan'ny Tsiambaratelo"
}, },
cgv: { cgv: {
heroTitle: "Fepetra Ankapoben'ny Varotra", heroTitle: "Fepetra Ankapoben'ny Varotra",
heroSubtitle: "Vakio sy ekeo alohan'ny fisoratana anarana" heroSubtitle: "Vakio sy ekeo alohan'ny fisoratana anarana"
}, },
mentionsLegales: {
heroTitle: "Filazana Ara-dalàna",
heroSubtitle: "Fampahalalana ara-dalàna momba ny tranonkala MVA Global Fret"
},
privacy: {
heroTitle: "Politikan'ny Tsiambaratelo",
heroSubtitle: "Ahoana no iarovanay ny angon-drakitrareo manokana"
},
serviceCommande: { serviceCommande: {
heroTitle: "Tolotra Fividianana ho Anareo", heroTitle: "Tolotra Fividianana ho Anareo",
heroSubtitle: "Mividy ho anareo amin'ny tranonkala eoropeana izahay, alainareo any Madagasikara", heroSubtitle: "Mividy ho anareo amin'ny tranonkala eoropeana izahay, alainareo any Madagasikara",

View File

@ -1,311 +0,0 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mentions Légales — MVA Global Fret</title>
<meta name="description" content="Mentions légales du site MVA Global Fret, service de fret aérien Paris Antananarivo.">
<link rel="icon" type="image/png" href="PNG MVA GLOBAL FRET.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Poppins:wght@600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">
<link rel="stylesheet" href="css/style.css">
<style>
.legal-body { max-width: 860px; margin: 0 auto; }
.legal-body h2 { color: var(--navy); font-size: 1.25rem; margin: 2.5rem 0 0.75rem; display: flex; align-items: center; gap: 10px; }
.legal-body h2 i { color: var(--gold); font-size: 1rem; }
.legal-body p, .legal-body li { color: var(--text-light); line-height: 1.85; font-size: 0.97rem; }
.legal-body ul { padding-left: 1.5rem; margin: 0.5rem 0 1rem; }
.legal-body li { margin-bottom: 0.4rem; }
.legal-info {
background: var(--light-gray);
border-radius: 12px;
padding: 20px 24px;
margin-bottom: 2.5rem;
font-size: 0.9rem;
color: var(--text-light);
display: flex;
flex-wrap: wrap;
gap: 16px;
}
.legal-info span { display: flex; align-items: center; gap: 6px; }
.legal-info i { color: var(--gold); }
.legal-divider { border: none; border-top: 1px solid var(--mid-gray); margin: 2rem 0; }
</style>
</head>
<body>
<a href="#main" class="skip-link">Aller au contenu principal</a>
<header class="header" id="header">
<div class="container header-inner">
<a href="accueil.html" class="logo"><img src="PNG MVA GLOBAL FRET.png" alt="MVA Global Fret"></a>
<nav class="nav" aria-label="Navigation principale">
<a href="accueil.html" data-i18n="nav.home">Accueil</a>
<a href="about.html" data-i18n="nav.about">Qui sommes-nous</a>
<a href="tarifs.html" data-i18n="nav.pricing">Tarifs</a>
<a href="service-commande.html" data-i18n="nav.serviceCommande">Service Commande</a>
<a href="guide-envoi.html" data-i18n="nav.guide">Guide d'envoi</a>
<a href="contact.html" data-i18n="nav.contact">Contact</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="header-right">
<div class="lang-switcher" role="group" aria-label="Choisir la langue">
<button data-lang="fr" class="active">FR</button>
<button data-lang="en">EN</button>
<button data-lang="mg">MG</button>
</div>
<button class="menu-toggle" id="menuToggle" aria-label="Ouvrir le menu"><span></span><span></span><span></span></button>
</div>
</div>
</header>
<nav class="mobile-nav" id="mobileNav">
<a href="accueil.html" data-i18n="nav.home">Accueil</a>
<a href="about.html" data-i18n="nav.about">Qui sommes-nous</a>
<a href="tarifs.html" data-i18n="nav.pricing">Tarifs</a>
<a href="service-commande.html" data-i18n="nav.serviceCommande">Service Commande</a>
<a href="guide-envoi.html" data-i18n="nav.guide">Guide d'envoi</a>
<a href="contact.html" data-i18n="nav.contact">Contact</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
<div class="lang-switcher" style="margin-top:16px">
<button data-lang="fr" class="active">FR</button>
<button data-lang="en">EN</button>
<button data-lang="mg">MG</button>
</div>
</nav>
<div class="overlay" id="overlay"></div>
<main id="main">
<section class="hero hero-sub" style="background-image: url('https://images.unsplash.com/photo-1569154941061-e231b4725ef1?w=1600&q=80');">
<div class="hero-content animate-on-scroll">
<h1 data-i18n="mentionsLegales.heroTitle">Mentions Légales</h1>
<p data-i18n="mentionsLegales.heroSubtitle">Informations légales relatives au site MVA Global Fret</p>
</div>
</section>
<section class="section">
<div class="container">
<!-- ══ FRANÇAIS ══ -->
<div class="legal-body animate-on-scroll" data-lang-block="fr">
<div class="legal-info">
<span><i class="fa-solid fa-building"></i> MVA Global Fret</span>
<span><i class="fa-solid fa-location-dot"></i> Antananarivo 101, Madagascar</span>
<span><i class="fa-solid fa-envelope"></i> mvaglobalfret@gmail.com</span>
</div>
<h2><i class="fa-solid fa-building"></i> Éditeur du site</h2>
<p>Le présent site est édité par <strong>LAATEL Corporation</strong>, exerçant sous le nom commercial <strong>MVA Global Fret</strong>, entreprise de fret aérien entre la France et Madagascar.</p>
<ul>
<li><strong>Raison sociale :</strong> LAATEL Corporation</li>
<li><strong>Nom commercial :</strong> MVA Global Fret</li>
<li><strong>Siège social :</strong> 132B Belanitra Ilafy, 101 Antananarivo, Madagascar</li>
<li><strong>STAT :</strong> 93297112025010751</li>
<li><strong>RCS :</strong> Antananarivo 2025 B 00735</li>
<li><strong>NIF :</strong> 3 019 279 109</li>
<li><strong>Email :</strong> <a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></li>
<li><strong>Tél. Madagascar :</strong> <a href="tel:+261384973751">+261 38 49 737 51</a></li>
<li><strong>Tél. France :</strong> <a href="tel:+33780970825">+33 7 80 97 08 25</a></li>
</ul>
<hr class="legal-divider">
<h2><i class="fa-solid fa-user-tie"></i> Directeur de la publication</h2>
<p>Le directeur de la publication est le représentant légal de LAATEL Corporation (MVA Global Fret).</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-server"></i> Hébergement</h2>
<p>Le site est auto-hébergé sur un VPS fourni par :</p>
<ul>
<li><strong>Hostinger International Ltd.</strong></li>
<li>61 Lordou Vironos Street, Larnaca 6023, Chypre</li>
<li>Datacenter : Falkenstein, Allemagne</li>
<li>Site web : <a href="https://www.hostinger.fr" target="_blank" rel="noopener noreferrer">hostinger.fr</a></li>
</ul>
<hr class="legal-divider">
<h2><i class="fa-solid fa-copyright"></i> Propriété intellectuelle</h2>
<p>L'ensemble du contenu de ce site (textes, images, logo, charte graphique) est la propriété exclusive de MVA Global Fret ou de ses partenaires. Toute reproduction, représentation ou diffusion, en tout ou partie, du contenu de ce site, par quelque moyen que ce soit, sans l'autorisation préalable et écrite de MVA Global Fret est interdite et constitue une contrefaçon.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-link"></i> Liens hypertextes</h2>
<p>Le site peut contenir des liens vers d'autres sites. MVA Global Fret ne saurait être tenu responsable du contenu de ces sites tiers et décline toute responsabilité quant aux informations qui y sont diffusées.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-shield-halved"></i> Données personnelles</h2>
<p>Pour toute information relative à la collecte et au traitement de vos données personnelles, veuillez consulter notre <a href="politique-confidentialite.html">Politique de Confidentialité</a>.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-gavel"></i> Droit applicable</h2>
<p>Les présentes mentions légales sont soumises au <strong>droit malgache</strong>. Tout litige sera soumis aux tribunaux compétents d'Antananarivo, Madagascar.</p>
<hr class="legal-divider">
<p style="font-size:0.85rem; color:var(--text-light); text-align:center; margin-top:2rem;"><i class="fa-solid fa-calendar-check" style="color:var(--gold);"></i> Dernière mise à jour : 06 Mai 2026</p>
</div>
<!-- ══ ENGLISH ══ -->
<div class="legal-body animate-on-scroll" data-lang-block="en" style="display:none;">
<div class="legal-info">
<span><i class="fa-solid fa-building"></i> MVA Global Fret</span>
<span><i class="fa-solid fa-location-dot"></i> Antananarivo 101, Madagascar</span>
<span><i class="fa-solid fa-envelope"></i> mvaglobalfret@gmail.com</span>
</div>
<h2><i class="fa-solid fa-building"></i> Site Publisher</h2>
<p>This website is published by <strong>LAATEL Corporation</strong>, operating under the trade name <strong>MVA Global Fret</strong>, an air freight company between France and Madagascar.</p>
<ul>
<li><strong>Legal name:</strong> LAATEL Corporation</li>
<li><strong>Trade name:</strong> MVA Global Fret</li>
<li><strong>Registered office:</strong> 132B Belanitra Ilafy, 101 Antananarivo, Madagascar</li>
<li><strong>STAT:</strong> 93297112025010751</li>
<li><strong>RCS:</strong> Antananarivo 2025 B 00735</li>
<li><strong>NIF:</strong> 3 019 279 109</li>
<li><strong>Email:</strong> <a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></li>
<li><strong>Phone Madagascar:</strong> <a href="tel:+261384973751">+261 38 49 737 51</a></li>
<li><strong>Phone France:</strong> <a href="tel:+33780970825">+33 7 80 97 08 25</a></li>
</ul>
<hr class="legal-divider">
<h2><i class="fa-solid fa-user-tie"></i> Publication Director</h2>
<p>The publication director is the legal representative of LAATEL Corporation (MVA Global Fret).</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-server"></i> Hosting</h2>
<p>This website is self-hosted on a VPS provided by:</p>
<ul>
<li><strong>Hostinger International Ltd.</strong></li>
<li>61 Lordou Vironos Street, Larnaca 6023, Cyprus</li>
<li>Datacenter: Falkenstein, Germany</li>
<li>Website: <a href="https://www.hostinger.com" target="_blank" rel="noopener noreferrer">hostinger.com</a></li>
</ul>
<hr class="legal-divider">
<h2><i class="fa-solid fa-copyright"></i> Intellectual Property</h2>
<p>All content on this website (text, images, logo, graphic design) is the exclusive property of MVA Global Fret or its partners. Any reproduction, representation or distribution, in whole or in part, of the content of this website, by any means whatsoever, without the prior written authorization of MVA Global Fret is prohibited and constitutes infringement.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-link"></i> External Links</h2>
<p>This website may contain links to other websites. MVA Global Fret cannot be held responsible for the content of these third-party sites and disclaims all liability for the information published therein.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-shield-halved"></i> Personal Data</h2>
<p>For information regarding the collection and processing of your personal data, please refer to our <a href="politique-confidentialite.html">Privacy Policy</a>.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-gavel"></i> Applicable Law</h2>
<p>These legal notices are governed by <strong>Malagasy law</strong>. Any dispute shall be submitted to the competent courts of Antananarivo, Madagascar.</p>
<hr class="legal-divider">
<p style="font-size:0.85rem; color:var(--text-light); text-align:center; margin-top:2rem;"><i class="fa-solid fa-calendar-check" style="color:var(--gold);"></i> Last updated: May 6, 2026</p>
</div>
<!-- ══ MALAGASY ══ -->
<div class="legal-body animate-on-scroll" data-lang-block="mg" style="display:none;">
<div class="legal-info">
<span><i class="fa-solid fa-building"></i> MVA Global Fret</span>
<span><i class="fa-solid fa-location-dot"></i> Antananarivo 101, Madagasikara</span>
<span><i class="fa-solid fa-envelope"></i> mvaglobalfret@gmail.com</span>
</div>
<h2><i class="fa-solid fa-building"></i> Mpanonta ny tranonkala</h2>
<p>Ity tranonkala ity dia navoakan'ny <strong>LAATEL Corporation</strong>, miasa amin'ny anarana ara-barotra <strong>MVA Global Fret</strong>, orinasa fandefasana entana an'habakabaka eo anelanelan'i Frantsa sy Madagasikara.</p>
<ul>
<li><strong>Anarana ara-dalàna :</strong> LAATEL Corporation</li>
<li><strong>Anarana ara-barotra :</strong> MVA Global Fret</li>
<li><strong>Foiben-toerana :</strong> 132B Belanitra Ilafy, 101 Antananarivo, Madagasikara</li>
<li><strong>STAT :</strong> 93297112025010751</li>
<li><strong>RCS :</strong> Antananarivo 2025 B 00735</li>
<li><strong>NIF :</strong> 3 019 279 109</li>
<li><strong>Mailaka :</strong> <a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></li>
<li><strong>Telefaonina Madagasikara :</strong> <a href="tel:+261384973751">+261 38 49 737 51</a></li>
<li><strong>Telefaonina Frantsa :</strong> <a href="tel:+33780970825">+33 7 80 97 08 25</a></li>
</ul>
<hr class="legal-divider">
<h2><i class="fa-solid fa-user-tie"></i> Talen'ny famoahana</h2>
<p>Ny talen'ny famoahana dia ny solontena ara-dalàna an'ny LAATEL Corporation (MVA Global Fret).</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-server"></i> Fampiantranoana</h2>
<p>Ny tranonkala dia ampiantranoin-tena amin'ny VPS omen'ny :</p>
<ul>
<li><strong>Hostinger International Ltd.</strong></li>
<li>61 Lordou Vironos Street, Larnaca 6023, Sipra</li>
<li>Datacenter : Falkenstein, Alemaina</li>
<li>Tranonkala : <a href="https://www.hostinger.com" target="_blank" rel="noopener noreferrer">hostinger.com</a></li>
</ul>
<hr class="legal-divider">
<h2><i class="fa-solid fa-copyright"></i> Zon'ny saina mpamorona</h2>
<p>Ny votoatin'ity tranonkala ity (lahatsoratra, sary, logo, endrika) dia fananan'ny MVA Global Fret na ny mpiara-miasa aminy manokana. Voarara ny famerenana na ny fizarana ny votoatiny, na amin'ny endriny manontolo na amin'ny ampahany, amin'ny fomba rehetra, raha tsy mahazo alalana an-tsoratra mialoha avy amin'ny MVA Global Fret.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-link"></i> Rohy ivelany</h2>
<p>Mety misy rohy mankany amin'ny tranonkala hafa ity tranokala ity. Tsy hiandraikitra ny votoatin'ireo tranonkala hafa ireo ny MVA Global Fret.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-shield-halved"></i> Angon-drakitra manokana</h2>
<p>Raha mila fampahalalana momba ny fanangonana sy ny fanodinana ny angon-drakitra manokana, jereo ny <a href="politique-confidentialite.html">Politikan'ny Tsiambaratelo</a>.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-gavel"></i> Lalàna mihatra</h2>
<p>Ireto filazana ara-dalàna ireto dia manaiky ny <strong>lalàna malagasy</strong>. Ny ady hevitra rehetra dia ho atolotra amin'ny tribonaly mahefa any Antananarivo, Madagasikara.</p>
<hr class="legal-divider">
<p style="font-size:0.85rem; color:var(--text-light); text-align:center; margin-top:2rem;"><i class="fa-solid fa-calendar-check" style="color:var(--gold);"></i> Farany nohavaozina: 06 Mey 2026</p>
</div>
</div>
</section>
</main>
<footer class="footer" role="contentinfo">
<div class="container">
<div class="footer-grid">
<div class="footer-brand">
<a href="accueil.html" class="logo"><img src="PNG MVA GLOBAL FRET.png" alt="MVA Global Fret"></a>
<p data-i18n="footer.desc">Votre partenaire de confiance pour le fret aérien entre l'Europe et Madagascar.</p>
<div class="social-links">
<a href="https://www.facebook.com/profile.php?id=61573448820736" target="_blank" rel="noopener noreferrer" aria-label="Facebook"><i class="fa-brands fa-facebook-f"></i></a>
<a href="https://m.me/61573448820736" target="_blank" rel="noopener noreferrer" aria-label="Messenger"><i class="fa-brands fa-facebook-messenger"></i></a>
</div>
</div>
<div>
<h4 data-i18n="footer.linksTitle">Liens Rapides</h4>
<ul class="footer-links">
<li><a href="accueil.html" data-i18n="nav.home">Accueil</a></li>
<li><a href="about.html" data-i18n="nav.about">Qui sommes-nous</a></li>
<li><a href="tarifs.html" data-i18n="nav.pricing">Tarifs</a></li>
<li><a href="service-commande.html" data-i18n="nav.serviceCommande">Service Commande</a></li>
<li><a href="guide-envoi.html" data-i18n="nav.guide">Guide d'envoi</a></li>
<li><a href="contact.html" data-i18n="nav.contact">Contact</a></li>
<li><a href="cgv.html" style="color:rgba(255,255,255,0.7);" data-i18n="footer.cgv">Conditions Générales de Vente</a></li>
</ul>
</div>
<div>
<h4 data-i18n="footer.contactTitle">Contact</h4>
<div class="footer-contact-item"><i class="fa-solid fa-phone"></i><a href="tel:+261384973751">+261 38 49 737 51</a></div>
<div class="footer-contact-item"><i class="fa-solid fa-phone"></i><a href="tel:+33780970825">+33 7 80 97 08 25</a></div>
<div class="footer-contact-item"><i class="fa-solid fa-envelope"></i><a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></div>
<div class="footer-contact-item"><i class="fa-solid fa-location-dot"></i><span>Antananarivo 101, Madagascar</span></div>
</div>
</div>
</div>
<div class="footer-bottom">
<div class="container">
<p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p>
<p style="margin-top:4px;">
<a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="mentions-legales.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.mentionsLegales">Mentions Légales</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="politique-confidentialite.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.privacy">Politique de Confidentialité</a>
</p>
</div>
</div>
</footer>
<script src="js/translations.js"></script>
<script src="js/main.js"></script>
</body>
</html>

View File

@ -1,482 +0,0 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Politique de Confidentialité — MVA Global Fret</title>
<meta name="description" content="Politique de confidentialité de MVA Global Fret — traitement des données personnelles et respect du RGPD.">
<link rel="icon" type="image/png" href="PNG MVA GLOBAL FRET.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Poppins:wght@600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">
<link rel="stylesheet" href="css/style.css">
<style>
.legal-body { max-width: 860px; margin: 0 auto; }
.legal-body h2 { color: var(--navy); font-size: 1.25rem; margin: 2.5rem 0 0.75rem; display: flex; align-items: center; gap: 10px; }
.legal-body h2 i { color: var(--gold); font-size: 1rem; }
.legal-body p, .legal-body li { color: var(--text-light); line-height: 1.85; font-size: 0.97rem; }
.legal-body ul { padding-left: 1.5rem; margin: 0.5rem 0 1rem; }
.legal-body li { margin-bottom: 0.4rem; }
.legal-info {
background: var(--light-gray);
border-radius: 12px;
padding: 20px 24px;
margin-bottom: 2.5rem;
font-size: 0.9rem;
color: var(--text-light);
display: flex;
flex-wrap: wrap;
gap: 16px;
}
.legal-info span { display: flex; align-items: center; gap: 6px; }
.legal-info i { color: var(--gold); }
.legal-divider { border: none; border-top: 1px solid var(--mid-gray); margin: 2rem 0; }
.legal-highlight {
background: #fff8ec;
border-left: 4px solid var(--gold);
border-radius: 0 10px 10px 0;
padding: 16px 20px;
margin: 1rem 0;
font-size: 0.95rem;
color: var(--text-dark);
}
</style>
</head>
<body>
<a href="#main" class="skip-link">Aller au contenu principal</a>
<header class="header" id="header">
<div class="container header-inner">
<a href="accueil.html" class="logo"><img src="PNG MVA GLOBAL FRET.png" alt="MVA Global Fret"></a>
<nav class="nav" aria-label="Navigation principale">
<a href="accueil.html" data-i18n="nav.home">Accueil</a>
<a href="about.html" data-i18n="nav.about">Qui sommes-nous</a>
<a href="tarifs.html" data-i18n="nav.pricing">Tarifs</a>
<a href="service-commande.html" data-i18n="nav.serviceCommande">Service Commande</a>
<a href="guide-envoi.html" data-i18n="nav.guide">Guide d'envoi</a>
<a href="contact.html" data-i18n="nav.contact">Contact</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="header-right">
<div class="lang-switcher" role="group" aria-label="Choisir la langue">
<button data-lang="fr" class="active">FR</button>
<button data-lang="en">EN</button>
<button data-lang="mg">MG</button>
</div>
<button class="menu-toggle" id="menuToggle" aria-label="Ouvrir le menu"><span></span><span></span><span></span></button>
</div>
</div>
</header>
<nav class="mobile-nav" id="mobileNav">
<a href="accueil.html" data-i18n="nav.home">Accueil</a>
<a href="about.html" data-i18n="nav.about">Qui sommes-nous</a>
<a href="tarifs.html" data-i18n="nav.pricing">Tarifs</a>
<a href="service-commande.html" data-i18n="nav.serviceCommande">Service Commande</a>
<a href="guide-envoi.html" data-i18n="nav.guide">Guide d'envoi</a>
<a href="contact.html" data-i18n="nav.contact">Contact</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
<div class="lang-switcher" style="margin-top:16px">
<button data-lang="fr" class="active">FR</button>
<button data-lang="en">EN</button>
<button data-lang="mg">MG</button>
</div>
</nav>
<div class="overlay" id="overlay"></div>
<main id="main">
<section class="hero hero-sub" style="background-image: url('https://images.unsplash.com/photo-1569154941061-e231b4725ef1?w=1600&q=80');">
<div class="hero-content animate-on-scroll">
<h1 data-i18n="privacy.heroTitle">Politique de Confidentialité</h1>
<p data-i18n="privacy.heroSubtitle">Comment nous protégeons vos données personnelles</p>
</div>
</section>
<section class="section">
<div class="container">
<!-- ══ FRANÇAIS ══ -->
<div class="legal-body animate-on-scroll" data-lang-block="fr">
<div class="legal-info">
<span><i class="fa-solid fa-shield-halved"></i> Conforme au RGPD</span>
<span><i class="fa-solid fa-building"></i> MVA Global Fret</span>
<span><i class="fa-solid fa-calendar"></i> En vigueur depuis le 06 Mai 2026</span>
</div>
<h2><i class="fa-solid fa-building"></i> Article 1 — Responsable du traitement</h2>
<p>Le responsable du traitement des données personnelles collectées sur ce site est :</p>
<ul>
<li><strong>LAATEL Corporation</strong> (nom commercial : MVA Global Fret)</li>
<li>Siège social : 132B Belanitra Ilafy, 101 Antananarivo, Madagascar</li>
<li>STAT : 93297112025010751</li>
<li>RCS : Antananarivo 2025 B 00735</li>
<li>NIF : 3 019 279 109</li>
<li>Email : <a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></li>
<li>Tél. Madagascar : <a href="tel:+261384973751">+261 38 49 737 51</a></li>
<li>Tél. France : <a href="tel:+33780970825">+33 7 80 97 08 25</a></li>
</ul>
<hr class="legal-divider">
<h2><i class="fa-solid fa-database"></i> Article 2 — Données collectées</h2>
<p>Lors de votre inscription via le formulaire de contact, nous collectons les données suivantes :</p>
<ul>
<li>Nom et prénom</li>
<li>Adresse email</li>
<li>Numéro de téléphone</li>
<li>Adresse de livraison à Antananarivo</li>
</ul>
<p>Ces données sont fournies volontairement par l'utilisateur lors de son inscription.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-bullseye"></i> Article 3 — Finalité du traitement</h2>
<p>Les données collectées sont utilisées exclusivement pour :</p>
<ul>
<li>La gestion de votre inscription en tant que client</li>
<li>L'attribution de votre numéro de référence client</li>
<li>La communication relative à vos envois de colis</li>
<li>L'envoi d'informations liées au service (tarifs, délais, mises à jour)</li>
</ul>
<div class="legal-highlight"><strong><i class="fa-solid fa-check-circle" style="color:var(--gold); margin-right:6px;"></i></strong> Vos données ne sont jamais vendues, louées ni partagées à des fins commerciales avec des tiers.</div>
<hr class="legal-divider">
<h2><i class="fa-solid fa-scale-balanced"></i> Article 4 — Base légale</h2>
<p>Le traitement de vos données repose sur :</p>
<ul>
<li><strong>Votre consentement</strong> — donné lors de la soumission du formulaire d'inscription et de l'acceptation des CGV</li>
<li><strong>L'exécution du contrat</strong> — nécessaire pour assurer le service de fret aérien</li>
</ul>
<hr class="legal-divider">
<h2><i class="fa-solid fa-cloud"></i> Article 5 — Sous-traitants et destinataires</h2>
<p>Vos données peuvent être traitées par les sous-traitants suivants, uniquement dans le cadre du service :</p>
<ul>
<li><strong>HubSpot, Inc.</strong> (États-Unis) — Gestion des contacts et du formulaire d'inscription</li>
<li><strong>Brevo (ex-Sendinblue)</strong> (France) — Envoi des emails transactionnels (confirmation d'inscription)</li>
<li><strong>Hostinger International Ltd.</strong> (Chypre / datacenter Allemagne) — Hébergement du site web</li>
</ul>
<p>Ces prestataires sont soumis à des obligations de confidentialité et de sécurité conformes au RGPD.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-globe"></i> Article 6 — Transferts hors Union européenne</h2>
<p>Certaines données peuvent être transférées vers les États-Unis (HubSpot). Ces transferts sont encadrés par des garanties appropriées (clauses contractuelles types de la Commission européenne ou EU-US Data Privacy Framework). L'hébergement du site (Hostinger) est assuré dans l'Union européenne (datacenter en Allemagne).</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-clock"></i> Article 7 — Durée de conservation</h2>
<p>Vos données personnelles sont conservées pendant toute la durée de la relation commerciale, puis pendant une durée de <strong>3 ans</strong> après le dernier contact, conformément aux obligations légales applicables.</p>
<p>Vous pouvez demander la suppression de vos données à tout moment (voir Article 8).</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-user-shield"></i> Article 8 — Vos droits</h2>
<p>Conformément au Règlement Général sur la Protection des Données (RGPD), vous disposez des droits suivants :</p>
<ul>
<li><strong>Droit d'accès :</strong> obtenir une copie de vos données personnelles</li>
<li><strong>Droit de rectification :</strong> corriger des données inexactes ou incomplètes</li>
<li><strong>Droit de suppression :</strong> demander l'effacement de vos données</li>
<li><strong>Droit d'opposition :</strong> vous opposer au traitement de vos données</li>
<li><strong>Droit à la portabilité :</strong> recevoir vos données dans un format structuré</li>
<li><strong>Droit de retrait du consentement :</strong> retirer votre consentement à tout moment</li>
</ul>
<p>Pour exercer ces droits, contactez-nous à : <a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></p>
<p>Nous nous engageons à répondre dans un délai de <strong>30 jours</strong>.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-cookie-bite"></i> Article 9 — Cookies</h2>
<p>Ce site utilise uniquement des cookies techniques strictement nécessaires au fonctionnement du site :</p>
<ul>
<li><strong>Préférence de langue</strong> (localStorage) — mémorisation du choix de langue FR/EN/MG</li>
</ul>
<p>Aucun cookie publicitaire, de suivi ni d'analyse n'est utilisé. Aucun consentement supplémentaire n'est donc requis pour ces cookies techniques.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-lock"></i> Article 10 — Sécurité</h2>
<p>MVA Global Fret met en œuvre des mesures techniques et organisationnelles appropriées pour protéger vos données personnelles contre tout accès non autorisé, toute modification, divulgation ou destruction.</p>
<p>Le site est servi en HTTPS, garantissant le chiffrement des données échangées entre votre navigateur et notre serveur.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-envelope"></i> Article 11 — Contact</h2>
<p>Pour toute question relative à cette politique de confidentialité ou à vos données personnelles :</p>
<ul>
<li><strong>Email :</strong> <a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></li>
<li><strong>Tél. Madagascar :</strong> <a href="tel:+261384973751">+261 38 49 737 51</a></li>
<li><strong>Tél. France :</strong> <a href="tel:+33780970825">+33 7 80 97 08 25</a></li>
</ul>
<hr class="legal-divider">
<p style="font-size:0.85rem; color:var(--text-light); text-align:center; margin-top:2rem;"><i class="fa-solid fa-calendar-check" style="color:var(--gold);"></i> Dernière mise à jour : 06 Mai 2026</p>
</div>
<!-- ══ ENGLISH ══ -->
<div class="legal-body animate-on-scroll" data-lang-block="en" style="display:none;">
<div class="legal-info">
<span><i class="fa-solid fa-shield-halved"></i> GDPR Compliant</span>
<span><i class="fa-solid fa-building"></i> MVA Global Fret</span>
<span><i class="fa-solid fa-calendar"></i> In force since May 6, 2026</span>
</div>
<h2><i class="fa-solid fa-building"></i> Article 1 — Data Controller</h2>
<p>The data controller for personal data collected on this website is:</p>
<ul>
<li><strong>LAATEL Corporation</strong> (trade name: MVA Global Fret)</li>
<li>Registered office: 132B Belanitra Ilafy, 101 Antananarivo, Madagascar</li>
<li>STAT: 93297112025010751</li>
<li>RCS: Antananarivo 2025 B 00735</li>
<li>NIF: 3 019 279 109</li>
<li>Email: <a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></li>
<li>Phone Madagascar: <a href="tel:+261384973751">+261 38 49 737 51</a></li>
<li>Phone France: <a href="tel:+33780970825">+33 7 80 97 08 25</a></li>
</ul>
<hr class="legal-divider">
<h2><i class="fa-solid fa-database"></i> Article 2 — Data Collected</h2>
<p>When registering via the contact form, we collect the following data:</p>
<ul>
<li>First and last name</li>
<li>Email address</li>
<li>Phone number</li>
<li>Delivery address in Antananarivo</li>
</ul>
<p>This data is voluntarily provided by the user during registration.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-bullseye"></i> Article 3 — Purpose of Processing</h2>
<p>The data collected is used exclusively for:</p>
<ul>
<li>Managing your registration as a client</li>
<li>Assigning your client reference number</li>
<li>Communication regarding your parcel shipments</li>
<li>Sending service-related information (rates, deadlines, updates)</li>
</ul>
<div class="legal-highlight"><strong><i class="fa-solid fa-check-circle" style="color:var(--gold); margin-right:6px;"></i></strong> Your data is never sold, rented or shared for commercial purposes with third parties.</div>
<hr class="legal-divider">
<h2><i class="fa-solid fa-scale-balanced"></i> Article 4 — Legal Basis</h2>
<p>The processing of your data is based on:</p>
<ul>
<li><strong>Your consent</strong> — given when submitting the registration form and accepting the Terms and Conditions</li>
<li><strong>Contract performance</strong> — necessary to provide the air freight service</li>
</ul>
<hr class="legal-divider">
<h2><i class="fa-solid fa-cloud"></i> Article 5 — Sub-processors and Recipients</h2>
<p>Your data may be processed by the following sub-processors, solely for the purpose of providing the service:</p>
<ul>
<li><strong>HubSpot, Inc.</strong> (United States) — Contact management and registration form</li>
<li><strong>Brevo (formerly Sendinblue)</strong> (France) — Transactional email delivery (registration confirmation)</li>
<li><strong>Hostinger International Ltd.</strong> (Cyprus / datacenter Germany) — Website hosting</li>
</ul>
<p>These providers are bound by confidentiality and security obligations in accordance with the GDPR.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-globe"></i> Article 6 — Transfers Outside the European Union</h2>
<p>Some data may be transferred to the United States (HubSpot). These transfers are governed by appropriate safeguards (EU Standard Contractual Clauses or the EU-US Data Privacy Framework). Website hosting (Hostinger) is located within the European Union (datacenter in Germany).</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-clock"></i> Article 7 — Data Retention Period</h2>
<p>Your personal data is retained for the duration of the commercial relationship, then for a period of <strong>3 years</strong> after the last contact, in accordance with applicable legal obligations.</p>
<p>You may request deletion of your data at any time (see Article 8).</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-user-shield"></i> Article 8 — Your Rights</h2>
<p>In accordance with the General Data Protection Regulation (GDPR), you have the following rights:</p>
<ul>
<li><strong>Right of access:</strong> obtain a copy of your personal data</li>
<li><strong>Right of rectification:</strong> correct inaccurate or incomplete data</li>
<li><strong>Right of erasure:</strong> request the deletion of your data</li>
<li><strong>Right to object:</strong> object to the processing of your data</li>
<li><strong>Right to data portability:</strong> receive your data in a structured format</li>
<li><strong>Right to withdraw consent:</strong> withdraw your consent at any time</li>
</ul>
<p>To exercise these rights, contact us at: <a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></p>
<p>We commit to responding within <strong>30 days</strong>.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-cookie-bite"></i> Article 9 — Cookies</h2>
<p>This website only uses strictly necessary technical cookies:</p>
<ul>
<li><strong>Language preference</strong> (localStorage) — remembering the FR/EN/MG language choice</li>
</ul>
<p>No advertising, tracking or analytics cookies are used. Therefore, no additional consent is required for these technical cookies.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-lock"></i> Article 10 — Security</h2>
<p>MVA Global Fret implements appropriate technical and organizational measures to protect your personal data against unauthorized access, modification, disclosure or destruction.</p>
<p>The website is served over HTTPS, ensuring encryption of data exchanged between your browser and our server.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-envelope"></i> Article 11 — Contact</h2>
<p>For any questions regarding this privacy policy or your personal data:</p>
<ul>
<li><strong>Email:</strong> <a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></li>
<li><strong>Phone Madagascar:</strong> <a href="tel:+261384973751">+261 38 49 737 51</a></li>
<li><strong>Phone France:</strong> <a href="tel:+33780970825">+33 7 80 97 08 25</a></li>
</ul>
<hr class="legal-divider">
<p style="font-size:0.85rem; color:var(--text-light); text-align:center; margin-top:2rem;"><i class="fa-solid fa-calendar-check" style="color:var(--gold);"></i> Last updated: May 6, 2026</p>
</div>
<!-- ══ MALAGASY ══ -->
<div class="legal-body animate-on-scroll" data-lang-block="mg" style="display:none;">
<div class="legal-info">
<span><i class="fa-solid fa-shield-halved"></i> Mifanaraka amin'ny RGPD</span>
<span><i class="fa-solid fa-building"></i> MVA Global Fret</span>
<span><i class="fa-solid fa-calendar"></i> Mihatra hatramin'ny 06 Mey 2026</span>
</div>
<h2><i class="fa-solid fa-building"></i> Andininy 1 — Tompon'andraikitry ny fanodinana</h2>
<p>Ny tompon'andraikitry ny fanodinana ny angon-drakitra manokana angonina amin'ity tranonkala ity dia :</p>
<ul>
<li><strong>LAATEL Corporation</strong> (anarana ara-barotra : MVA Global Fret)</li>
<li>Foiben-toerana : 132B Belanitra Ilafy, 101 Antananarivo, Madagasikara</li>
<li>STAT : 93297112025010751</li>
<li>RCS : Antananarivo 2025 B 00735</li>
<li>NIF : 3 019 279 109</li>
<li>Mailaka : <a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></li>
<li>Telefaonina Madagasikara : <a href="tel:+261384973751">+261 38 49 737 51</a></li>
<li>Telefaonina Frantsa : <a href="tel:+33780970825">+33 7 80 97 08 25</a></li>
</ul>
<hr class="legal-divider">
<h2><i class="fa-solid fa-database"></i> Andininy 2 — Angon-drakitra angonina</h2>
<p>Rehefa misoratra anarana amin'ny alalan'ny taratasy fifandraisana, dia angonina ireto angon-drakitra ireto :</p>
<ul>
<li>Anarana sy fanampiny</li>
<li>Adiresy mailaka</li>
<li>Laharan-telefaonina</li>
<li>Adiresy fanaterana any Antananarivo</li>
</ul>
<p>Ireo angon-drakitra ireo dia omen'ny mpampiasa an-tsitrapo rehefa misoratra anarana.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-bullseye"></i> Andininy 3 — Tanjon'ny fanodinana</h2>
<p>Ny angon-drakitra angonina dia ampiasaina ho an'ireto ihany :</p>
<ul>
<li>Ny fitantanana ny fisoratana anarana ho mpanjifa</li>
<li>Ny fanomezana ny laharanao mpanjifa</li>
<li>Ny fifandraisana momba ny fandefasana entana</li>
<li>Ny fandefasana vaovao momba ny serivisy (sarany, fe-potoana, fanavaozana)</li>
</ul>
<div class="legal-highlight"><strong><i class="fa-solid fa-check-circle" style="color:var(--gold); margin-right:6px;"></i></strong> Ny angon-drakitrareo dia tsy amidy, tsy ampindramina ary tsy zaraina ho an'ny varotra amin'ny olon-kafa.</div>
<hr class="legal-divider">
<h2><i class="fa-solid fa-scale-balanced"></i> Andininy 4 — Fototra ara-dalàna</h2>
<p>Ny fanodinana ny angon-drakitrareo dia miorina amin'ny :</p>
<ul>
<li><strong>Ny fanekenareo</strong> — nomena tamin'ny fandefasana ny taratasy fisoratana anarana sy ny faneken'ny FAV</li>
<li><strong>Ny fanatanterahana ny fifanarahana</strong> — ilaina mba hiantohana ny serivisy fandefasana entana an'habakabaka</li>
</ul>
<hr class="legal-divider">
<h2><i class="fa-solid fa-cloud"></i> Andininy 5 — Mpandray sy mpiara-miasa</h2>
<p>Ny angon-drakitrareo dia mety hodinina amin'ireto mpiara-miasa ireto, ao anatin'ny serivisy fotsiny :</p>
<ul>
<li><strong>HubSpot, Inc.</strong> (Etazonia) — Fitantanana ny mpifandray sy ny taratasy fisoratana anarana</li>
<li><strong>Brevo (taloha Sendinblue)</strong> (Frantsa) — Fandefasana mailaka (fanamafisana fisoratana anarana)</li>
<li><strong>Hostinger International Ltd.</strong> (Sipra / datacenter Alemaina) — Fampiantranoana ny tranonkala</li>
</ul>
<p>Ireo mpamatsy ireo dia voafehin'ny adidy momba ny tsiambaratelo sy ny fiarovana mifanaraka amin'ny RGPD.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-globe"></i> Andininy 6 — Famindrana ivelan'ny Vondrona Eoropeana</h2>
<p>Mety hafindra any Etazonia (HubSpot) ny angon-drakitra sasany. Ireo famindrana ireo dia voaaro amin'ny antoka sahaza (SCC Eoropeana na EU-US Data Privacy Framework). Ny fampiantranoana ny tranonkala (Hostinger) dia ao anatin'ny Vondrona Eoropeana (datacenter any Alemaina).</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-clock"></i> Andininy 7 — Faharetan'ny fitahirizana</h2>
<p>Ny angon-drakitra manokanareo dia tehirizina mandritra ny fifandraisana ara-barotra, ary mandritra ny <strong>3 taona</strong> aorian'ny fifandraisana farany, mifanaraka amin'ny lalàna mihatra.</p>
<p>Afaka mangataka ny fafana ny angon-drakitrareo ianao amin'ny fotoana rehetra (jereo Andininy 8).</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-user-shield"></i> Andininy 8 — Ny zonareo</h2>
<p>Araka ny Fitsipika Ankapobe Momba ny Fiarovana ny Angon-drakitra (RGPD), manana ireto zo ireto ianareo :</p>
<ul>
<li><strong>Zo hahazo :</strong> mahazo kopia ny angon-drakitrareo manokana</li>
<li><strong>Zo hanitsy :</strong> manitsy angon-drakitra diso na tsy feno</li>
<li><strong>Zo hamafa :</strong> mangataka ny fafana ny angon-drakitrareo</li>
<li><strong>Zo hanohitra :</strong> manohitra ny fanodinana ny angon-drakitrareo</li>
<li><strong>Zo ny fitondrana :</strong> mandray ny angon-drakitrareo amin'ny endrika voarindra</li>
<li><strong>Zo hanaisotra ny fanekena :</strong> manaisotra ny fanekenao amin'ny fotoana rehetra</li>
</ul>
<p>Mba hampiharana ireo zo ireo, mifandraisa aminay amin'ny : <a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></p>
<p>Miantoka hamaly ao anatin'ny <strong>30 andro</strong> izahay.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-cookie-bite"></i> Andininy 9 — Cookies</h2>
<p>Ity tranonkala ity dia mampiasa cookies teknika ilaina fotsiny :</p>
<ul>
<li><strong>Safidin'ny fiteny</strong> (localStorage) — fitadidiana ny safidy fiteny FR/EN/MG</li>
</ul>
<p>Tsy misy cookie dokam-barotra, fanaraha-maso na famakafakana ampiasaina. Noho izany, tsy mila fanekena fanampiny ho an'ireo cookies teknika ireo.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-lock"></i> Andininy 10 — Fiarovana</h2>
<p>MVA Global Fret dia mametraka fepetra teknika sy fitantanana mety mba hiarovana ny angon-drakitrareo manokana amin'ny fidirana tsy nahazoana alalana, ny fanovana, ny fanambarana na ny fandravana.</p>
<p>Ny tranonkala dia ampiasaina amin'ny HTTPS, manome antoka ny fanafenana ny angon-drakitra ifanakalozana eo amin'ny navigateur sy ny mpizara.</p>
<hr class="legal-divider">
<h2><i class="fa-solid fa-envelope"></i> Andininy 11 — Fifandraisana</h2>
<p>Ho an'ny fanontaniana rehetra momba ity politikan'ny tsiambaratelo ity na ny angon-drakitrareo manokana :</p>
<ul>
<li><strong>Mailaka :</strong> <a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></li>
<li><strong>Telefaonina Madagasikara :</strong> <a href="tel:+261384973751">+261 38 49 737 51</a></li>
<li><strong>Telefaonina Frantsa :</strong> <a href="tel:+33780970825">+33 7 80 97 08 25</a></li>
</ul>
<hr class="legal-divider">
<p style="font-size:0.85rem; color:var(--text-light); text-align:center; margin-top:2rem;"><i class="fa-solid fa-calendar-check" style="color:var(--gold);"></i> Farany nohavaozina: 06 Mey 2026</p>
</div>
</div>
</section>
</main>
<footer class="footer" role="contentinfo">
<div class="container">
<div class="footer-grid">
<div class="footer-brand">
<a href="accueil.html" class="logo"><img src="PNG MVA GLOBAL FRET.png" alt="MVA Global Fret"></a>
<p data-i18n="footer.desc">Votre partenaire de confiance pour le fret aérien entre l'Europe et Madagascar.</p>
<div class="social-links">
<a href="https://www.facebook.com/profile.php?id=61573448820736" target="_blank" rel="noopener noreferrer" aria-label="Facebook"><i class="fa-brands fa-facebook-f"></i></a>
<a href="https://m.me/61573448820736" target="_blank" rel="noopener noreferrer" aria-label="Messenger"><i class="fa-brands fa-facebook-messenger"></i></a>
</div>
</div>
<div>
<h4 data-i18n="footer.linksTitle">Liens Rapides</h4>
<ul class="footer-links">
<li><a href="accueil.html" data-i18n="nav.home">Accueil</a></li>
<li><a href="about.html" data-i18n="nav.about">Qui sommes-nous</a></li>
<li><a href="tarifs.html" data-i18n="nav.pricing">Tarifs</a></li>
<li><a href="service-commande.html" data-i18n="nav.serviceCommande">Service Commande</a></li>
<li><a href="guide-envoi.html" data-i18n="nav.guide">Guide d'envoi</a></li>
<li><a href="contact.html" data-i18n="nav.contact">Contact</a></li>
<li><a href="cgv.html" style="color:rgba(255,255,255,0.7);" data-i18n="footer.cgv">Conditions Générales de Vente</a></li>
</ul>
</div>
<div>
<h4 data-i18n="footer.contactTitle">Contact</h4>
<div class="footer-contact-item"><i class="fa-solid fa-phone"></i><a href="tel:+261384973751">+261 38 49 737 51</a></div>
<div class="footer-contact-item"><i class="fa-solid fa-phone"></i><a href="tel:+33780970825">+33 7 80 97 08 25</a></div>
<div class="footer-contact-item"><i class="fa-solid fa-envelope"></i><a href="mailto:mvaglobalfret@gmail.com">mvaglobalfret@gmail.com</a></div>
<div class="footer-contact-item"><i class="fa-solid fa-location-dot"></i><span>Antananarivo 101, Madagascar</span></div>
</div>
</div>
</div>
<div class="footer-bottom">
<div class="container">
<p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p>
<p style="margin-top:4px;">
<a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="mentions-legales.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.mentionsLegales">Mentions Légales</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="politique-confidentialite.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.privacy">Politique de Confidentialité</a>
</p>
</div>
</div>
</footer>
<script src="js/translations.js"></script>
<script src="js/main.js"></script>
</body>
</html>

View File

@ -262,13 +262,7 @@
<div class="footer-bottom"> <div class="footer-bottom">
<div class="container"> <div class="container">
<p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p> <p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p>
<p style="margin-top:4px;"> <p style="margin-top:4px;"><a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a></p>
<a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="mentions-legales.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.mentionsLegales">Mentions Légales</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="politique-confidentialite.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.privacy">Politique de Confidentialité</a>
</p>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -277,13 +277,7 @@
<div class="footer-bottom"> <div class="footer-bottom">
<div class="container"> <div class="container">
<p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p> <p data-i18n="footer.copyright">© 2026 MVA Global Fret. Tous droits réservés.</p>
<p style="margin-top:4px;"> <p style="margin-top:4px;"><a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a></p>
<a href="cgv.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.cgv">Conditions Générales de Vente</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="mentions-legales.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.mentionsLegales">Mentions Légales</a>
<span style="color:rgba(255,255,255,0.3); margin:0 6px;">|</span>
<a href="politique-confidentialite.html" style="color:rgba(255,255,255,0.45); font-size:0.8rem;" data-i18n="footer.privacy">Politique de Confidentialité</a>
</p>
</div> </div>
</div> </div>
</footer> </footer>