site-mva-global-fret/index.html
MVA Global Fret 90e5ff7116 Drop the parachute, scale cloud up to 520x360, fit text inside
The Lottie parachute was floating above the cloud as an extra layer,
which felt busy. Strip it out — the dotlottie player script tag, the
.cta-stack wrapper, the .cta-parachute rule, and assets/parachute.json
all go.

The cloud is now the only landing element. Bumped width 360→520 and
height 200→360 so the Fluent cloud renders much larger; bumped font
size 1.15→1.4rem; added a small negative margin-top to seat the text
on the cloud's "body" (Fluent's base is heavy, the body sits a bit
above the geometric center).

Drop animation moved off the wrapper onto the button itself, with the
:hover rule overriding animation:none + applying the centered scale
transform so hover doesn't fight the keyframe.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-05 01:55:19 +02:00

106 lines
4.0 KiB
HTML

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MVA Global Fret — Bienvenue</title>
<meta name="description" content="MVA Global Fret — Le pont aérien entre Paris et 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;800&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/parallax.css">
</head>
<body class="parallax-body">
<header class="parallax-header">
<div class="parallax-logo" aria-label="MVA Global Fret">
<img src="PNG MVA GLOBAL FRET.png" alt="MVA Global Fret">
<span>MVA Global Fret</span>
</div>
<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>
</header>
<main class="stage">
<video class="layer layer-video" id="introVideo"
autoplay loop muted playsinline preload="auto"
poster="videos/parachute-poster.jpg">
<source src="videos/parachute-drop.mp4" type="video/mp4">
</video>
<div class="layer layer-tint"></div>
<a href="accueil.html" class="cta-btn cloud-btn">
<img class="cloud-bg" src="assets/cloud.png" alt="">
<span class="cloud-content">
<span data-i18n="intro.ctaBtn">Accéder au site</span>
<i class="fa-solid fa-arrow-right"></i>
</span>
</a>
</main>
<script src="js/translations.js"></script>
<script>
/* i18n minimal ------------------------------------------------------- */
(function () {
const lang = localStorage.getItem('mva-lang') || 'fr';
applyLang(lang);
document.querySelectorAll('.lang-switcher button').forEach(btn => {
btn.addEventListener('click', () => applyLang(btn.dataset.lang));
});
function applyLang(l) {
document.documentElement.lang = l;
localStorage.setItem('mva-lang', l);
document.querySelectorAll('.lang-switcher button').forEach(b =>
b.classList.toggle('active', b.dataset.lang === l)
);
const t = window.translations?.[l];
if (!t) return;
document.querySelectorAll('[data-i18n]').forEach(el => {
const keys = el.dataset.i18n.split('.');
let v = t;
for (const k of keys) v = v?.[k];
if (v != null) el.textContent = v;
});
}
})();
/* Parallaxe souris : la vidéo et le bouton se décalent légèrement.
--mx, --my sont des floats dans [-1, +1] mappés sur la position
souris, avec easing. Sur mobile, on utilise l'orientation du device. */
(function () {
const root = document.documentElement;
let targetX = 0, targetY = 0, currentX = 0, currentY = 0;
const ease = 0.08;
function loop() {
currentX += (targetX - currentX) * ease;
currentY += (targetY - currentY) * ease;
root.style.setProperty('--mx', currentX.toFixed(4));
root.style.setProperty('--my', currentY.toFixed(4));
requestAnimationFrame(loop);
}
loop();
window.addEventListener('mousemove', (e) => {
targetX = (e.clientX / window.innerWidth - 0.5) * 2;
targetY = (e.clientY / window.innerHeight - 0.5) * 2;
}, { passive: true });
window.addEventListener('deviceorientation', (e) => {
if (e.gamma == null || e.beta == null) return;
targetX = Math.max(-1, Math.min(1, e.gamma / 30));
targetY = Math.max(-1, Math.min(1, (e.beta - 45) / 30));
}, { passive: true });
})();
</script>
</body>
</html>