Compare commits

...

8 Commits

Author SHA1 Message Date
f71d1b327e Merge pull request 'fix(nav): Service Commande dans le menu mobile (6 pages)' (#21) from fix/mobile-nav-service-commande into main
Some checks failed
Deploy site to GitHub Pages / deploy (push) Failing after 2m2s
2026-06-22 10:48:15 +03:00
Serge RAKOTO HARRY-NAIVO
616f9d75a1 fix(nav): ajouter « Service Commande » au menu mobile (6 pages)
Le menu mobile (<nav class="mobile-nav">) omettait le lien « Service Commande »
sur about, application, cgv, contact, guide-envoi et tarifs — incoherent avec le
menu desktop et le footer (qui l'ont) et avec accueil (mobile complet). Insertion
du lien apres « Tarifs », identique aux autres entrees.

Constat issu de l'audit du site (revue qualite 2026-06-21).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 09:09:18 +02:00
499109f8a9 Merge pull request 'chore(site): cache-bust translations.js' (#20) from chore/cache-bust-translations into main
Some checks failed
Deploy site to GitHub Pages / deploy (push) Has been cancelled
2026-06-03 12:32:21 +03:00
Serge RAKOTO HARRY-NAIVO
43e576249c chore(site): cache-bust translations.js (?v=20260603)
translations.js a Cache-Control max-age=7j sans versioning -> les visiteurs
gardaient l'ancien menu en cache. Cache-buster pour rendre le renommage
Contact->Inscription visible immédiatement par tous.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:32:13 +02:00
5399fc1a40 Merge pull request 'feat(site): Contact -> Inscription (menu + page)' (#19) from fix/contact-to-inscription into main
Some checks are pending
Deploy site to GitHub Pages / deploy (push) Waiting to run
2026-06-03 12:21:47 +03:00
Serge RAKOTO HARRY-NAIVO
61a2a67b00 feat(site): renomme "Contact" en "Inscription" (menu + page contact)
- Menu : "Contact" -> "Inscription" (FR) / "Sign Up" (EN) / "Fisoratana anarana" (MG)
- Page : titre "Contactez-Nous" -> "Inscrivez-vous"
- Sous-titre : retire "Inscrivez-vous et" -> "Commencez à envoyer vos colis dès aujourd'hui"
- i18n (translations.js, 3 langues) + fallback HTML en dur sur toutes les pages
- footer "Contact" (coordonnées) laissé inchangé

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:21:15 +02:00
2a2ea2f5e4 Merge pull request 'fix: relayer token_hash vers le deep link reset password' (#18) from fix/reset-password-token-hash into main
Some checks failed
Deploy site to GitHub Pages / deploy (push) Has been cancelled
2026-05-30 06:04:51 +03:00
Serge RAKOTO HARRY-NAIVO
df8bf01759 fix: relayer token_hash vers le deep link reset password
Le nouveau flux reset (Edge Function mva-password-reset, deploye 2026-05-30)
envoie un lien ?token_hash=HASH&type=recovery au lieu de ?token=. La page-relais
lit desormais token_hash + type et construit le deep link
mvaglobalfret://reset-password?token_hash=...&type=... que l'app consomme via
verifyOtp({ token_hash, type }). Si token_hash est absent, on affiche un message
d'erreur (lien invalide) au lieu de tenter le redirect.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 04:49:51 +02:00
14 changed files with 92 additions and 62 deletions

View File

@ -27,7 +27,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="header-right">
@ -47,8 +47,9 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="overlay" id="overlay"></div>
@ -208,7 +209,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a></li>
</ul>
</div>
<div>
@ -234,7 +235,7 @@
</div>
</footer>
<script src="js/translations.js"></script>
<script src="js/translations.js?v=20260603"></script>
<script src="js/main.js"></script>
</body>
</html>

View File

@ -31,7 +31,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="header-right">
@ -54,7 +54,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="overlay" id="overlay"></div>
@ -230,7 +230,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a></li>
<li><a href="application.html" data-i18n="nav.app">Prochainement</a></li>
</ul>
</div>
@ -269,7 +269,7 @@
</div>
</footer>
<script src="js/translations.js"></script>
<script src="js/translations.js?v=20260603"></script>
<script src="js/main.js"></script>
</body>
</html>

View File

@ -25,7 +25,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Application</a>
</nav>
<div class="header-right">
@ -43,8 +43,9 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Application</a>
</nav>
<div class="overlay" id="overlay"></div>
@ -278,7 +279,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a></li>
</ul>
</div>
<div>
@ -304,7 +305,7 @@
</div>
</footer>
<script src="js/translations.js"></script>
<script src="js/translations.js?v=20260603"></script>
<script src="js/main.js"></script>
<script>
document.getElementById('notifyForm')?.addEventListener('submit', function(e) {

View File

@ -65,7 +65,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="header-right">
@ -83,8 +83,9 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="overlay" id="overlay"></div>
@ -319,7 +320,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</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>
@ -346,7 +347,7 @@
</div>
</footer>
<script src="js/translations.js"></script>
<script src="js/translations.js?v=20260603"></script>
<script src="js/main.js"></script>
</body>
</html>

View File

@ -172,7 +172,7 @@
© 2026 MVA Global Fret. Tous droits réservés.
</footer>
<script src="js/translations.js"></script>
<script src="js/translations.js?v=20260603"></script>
<script src="js/main.js"></script>
<script src="js/confirmation.js"></script>
</body>

View File

@ -25,7 +25,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="header-right">
@ -43,8 +43,9 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="overlay" id="overlay"></div>
@ -54,8 +55,8 @@
<!-- HERO -->
<section class="hero hero-sub" style="background-image: url('images/hero/contact-hero.jpg');">
<div class="hero-content animate-on-scroll">
<h1 data-i18n="contact.heroTitle">Contactez-Nous</h1>
<p data-i18n="contact.heroSubtitle">Inscrivez-vous et commencez à envoyer vos colis dès aujourd'hui</p>
<h1 data-i18n="contact.heroTitle">Inscrivez-vous</h1>
<p data-i18n="contact.heroSubtitle">Commencez à envoyer vos colis dès aujourd'hui</p>
</div>
</section>
@ -279,7 +280,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a></li>
</ul>
</div>
<div>
@ -305,7 +306,7 @@
</div>
</footer>
<script src="js/translations.js"></script>
<script src="js/translations.js?v=20260603"></script>
<script src="js/main.js"></script>
<script src="js/form-handler.js"></script>

View File

@ -25,7 +25,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="header-right">
@ -43,8 +43,9 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="overlay" id="overlay"></div>
@ -260,7 +261,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a></li>
</ul>
</div>
<div>
@ -286,7 +287,7 @@
</div>
</footer>
<script src="js/translations.js"></script>
<script src="js/translations.js?v=20260603"></script>
<script src="js/main.js"></script>
</body>
</html>

View File

@ -62,7 +62,7 @@
</main>
<script src="js/translations.js"></script>
<script src="js/translations.js?v=20260603"></script>
<script>
/* i18n minimal ------------------------------------------------------- */
(function () {

View File

@ -21,7 +21,7 @@ const translations = {
pricing: "Tarifs",
serviceCommande: "Service Commande",
guide: "Guide d'envoi",
contact: "Contact",
contact: "Inscription",
app: "Prochainement"
},
home: {
@ -134,8 +134,8 @@ const translations = {
delivery2Note: "Retrait au bureau Cotisse de votre ville"
},
contact: {
heroTitle: "Contactez-Nous",
heroSubtitle: "Inscrivez-vous et commencez à envoyer vos colis dès aujourd'hui",
heroTitle: "Inscrivez-vous",
heroSubtitle: "Commencez à envoyer vos colis dès aujourd'hui",
formTitle: "Formulaire d'inscription",
formSubtitle: "Remplissez ce formulaire pour recevoir votre numéro de référence client et l'adresse de dépôt à Paris.",
labelNom: "Nom",
@ -383,7 +383,7 @@ const translations = {
pricing: "Pricing",
serviceCommande: "Order Service",
guide: "Shipping Guide",
contact: "Contact",
contact: "Sign Up",
app: "Coming Soon"
},
home: {
@ -496,8 +496,8 @@ const translations = {
ctaBtn: "Contact Us"
},
contact: {
heroTitle: "Contact Us",
heroSubtitle: "Register and start sending your parcels today",
heroTitle: "Sign Up",
heroSubtitle: "Start sending your parcels today",
formTitle: "Registration Form",
formSubtitle: "Fill out this form to receive your client reference number and the Paris drop-off address.",
labelNom: "Last Name",
@ -745,7 +745,7 @@ const translations = {
pricing: "Sarany",
serviceCommande: "Tolotra Fividianana",
guide: "Toromarika fandefasana",
contact: "Fifandraisana",
contact: "Fisoratana anarana",
app: "Avy tsy ho ela"
},
home: {
@ -858,8 +858,8 @@ const translations = {
ctaBtn: "Mifandraisa aminay"
},
contact: {
heroTitle: "Mifandraisa Aminay",
heroSubtitle: "Misoratra anarana ary manomboha mandefa ny entanareo anio",
heroTitle: "Misoratra anarana",
heroSubtitle: "Manomboha mandefa ny entanareo anio",
formTitle: "Taratasy fisoratana anarana",
formSubtitle: "Fenoy ity taratasy ity mba handraisana ny laharan'ny mpanjifa sy ny adiresy fametrahana any Paris.",
labelNom: "Anarana",

View File

@ -47,7 +47,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="header-right">
@ -67,7 +67,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="overlay" id="overlay"></div>
@ -273,7 +273,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</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>
@ -300,7 +300,7 @@
</div>
</footer>
<script src="js/translations.js"></script>
<script src="js/translations.js?v=20260603"></script>
<script src="js/main.js"></script>
</body>
</html>

View File

@ -56,7 +56,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="header-right">
@ -76,7 +76,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="overlay" id="overlay"></div>
@ -444,7 +444,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</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>
@ -471,7 +471,7 @@
</div>
</footer>
<script src="js/translations.js"></script>
<script src="js/translations.js?v=20260603"></script>
<script src="js/main.js"></script>
</body>
</html>

View File

@ -9,11 +9,16 @@
<script>
// Bridge mobile deep link MVA : redirect vers le custom scheme natif
// mvaglobalfret://reset-password pour ouvrir le flow in-app de l'app Expo.
// Le token est un UUID custom émis par mva-api (Fastify), validé côté app.
// Le lien email porte token_hash + type (recovery) ; l'app fait verifyOtp.
(function() {
var token = new URLSearchParams(window.location.search).get('token');
if (token) {
window.location.replace('mvaglobalfret://reset-password?token=' + encodeURIComponent(token));
var params = new URLSearchParams(window.location.search);
var tokenHash = params.get('token_hash');
var type = params.get('type') || 'recovery';
if (tokenHash) {
window.location.replace(
'mvaglobalfret://reset-password?token_hash=' +
encodeURIComponent(tokenHash) + '&type=' + encodeURIComponent(type)
);
}
})();
</script>
@ -40,18 +45,37 @@
}
a.cta:hover { background: #b3954a; }
.hint { color: #666; font-size: 0.9rem; margin-top: 2rem; }
.error { color: #b91c1c; font-size: 0.95rem; line-height: 1.6; margin-top: 1rem; }
</style>
</head>
<body>
<h1>Ouvrir l'app MVA Global Fret</h1>
<p>Pour réinitialiser votre mot de passe, ouvrez le lien ci-dessous dans l'application MVA Global Fret installée sur votre téléphone.</p>
<p>
<p id="intro">Pour réinitialiser votre mot de passe, ouvrez le lien ci-dessous dans l'application MVA Global Fret installée sur votre téléphone.</p>
<p id="link-wrap">
<a id="manual-link" class="cta" href="#">Réinitialiser mon mot de passe</a>
</p>
<p class="hint">Si rien ne se passe, vérifiez que l'application MVA Global Fret est bien installée sur votre appareil.</p>
<p id="hint" class="hint">Si rien ne se passe, vérifiez que l'application MVA Global Fret est bien installée sur votre appareil.</p>
<p id="error" class="error" style="display:none;">Ce lien de réinitialisation est invalide ou incomplet. Veuillez relancer la procédure « Mot de passe oublié » depuis l'application MVA Global Fret.</p>
<script>
var token = new URLSearchParams(window.location.search).get('token') || '';
document.getElementById('manual-link').href = 'mvaglobalfret://reset-password?token=' + encodeURIComponent(token);
(function() {
var params = new URLSearchParams(window.location.search);
var tokenHash = params.get('token_hash');
var type = params.get('type') || 'recovery';
if (!tokenHash) {
// Lien invalide : pas de token_hash → on masque le bouton et on prévient.
document.getElementById('intro').style.display = 'none';
document.getElementById('link-wrap').style.display = 'none';
document.getElementById('hint').style.display = 'none';
document.getElementById('error').style.display = 'block';
return;
}
// Deep link vers l'app : l'app lit token_hash + type et fait verifyOtp.
document.getElementById('manual-link').href =
'mvaglobalfret://reset-password?token_hash=' +
encodeURIComponent(tokenHash) + '&type=' + encodeURIComponent(type);
})();
</script>
</body>
</html>

View File

@ -25,7 +25,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="header-right">
@ -45,7 +45,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="overlay" id="overlay"></div>
@ -242,7 +242,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a></li>
</ul>
</div>
<div>
@ -268,7 +268,7 @@
</div>
</footer>
<script src="js/translations.js"></script>
<script src="js/translations.js?v=20260603"></script>
<script src="js/main.js"></script>
</body>
</html>

View File

@ -25,7 +25,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="header-right">
@ -43,8 +43,9 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a>
<a href="application.html" data-i18n="nav.app">Prochainement</a>
</nav>
<div class="overlay" id="overlay"></div>
@ -257,7 +258,7 @@
<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="contact.html" data-i18n="nav.contact">Inscription</a></li>
</ul>
</div>
<div>
@ -283,7 +284,7 @@
</div>
</footer>
<script src="js/translations.js"></script>
<script src="js/translations.js?v=20260603"></script>
<script src="js/main.js"></script>
</body>
</html>