/* =========================================================================
PARALLAX INTRO PAGE — MVA Global Fret
Scroll-driven storytelling: tarmac → décollage → arrivée à Madagascar
========================================================================= */
:root {
--navy: #1a1a3e;
--navy-deep: #0d0d24;
--navy-light: #2a2a5e;
--gold: #c5a55a;
--gold-light: #e0c98a;
--white: #ffffff;
--scroll: 0;
--mx: 0;
--my: 0;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body {
scroll-behavior: smooth;
overflow-x: hidden;
}
.parallax-body {
font-family: 'Inter', sans-serif;
color: var(--white);
background: var(--navy-deep);
}
/* ── HEADER MINIMAL ─────────────────────────────────────────────────────── */
.parallax-header {
position: fixed;
top: 0; left: 0; right: 0;
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px 36px;
z-index: 100;
background: linear-gradient(to bottom, rgba(13,13,36,0.55), transparent);
backdrop-filter: blur(6px);
-webkit-backdrop-filter: blur(6px);
}
.parallax-logo {
display: inline-flex;
align-items: center;
gap: 12px;
text-decoration: none;
color: var(--white);
font-family: 'Poppins', sans-serif;
font-weight: 700;
letter-spacing: 1px;
font-size: 0.95rem;
text-transform: uppercase;
}
.parallax-logo img {
height: 44px;
width: auto;
filter: drop-shadow(0 4px 8px rgba(0,0,0,0.35));
}
.parallax-header-right {
display: flex;
align-items: center;
gap: 18px;
}
.lang-switcher {
display: inline-flex;
background: rgba(255,255,255,0.08);
border: 1px solid rgba(255,255,255,0.15);
border-radius: 50px;
padding: 4px;
backdrop-filter: blur(8px);
}
.lang-switcher button {
background: transparent;
border: none;
color: rgba(255,255,255,0.6);
padding: 5px 12px;
cursor: pointer;
border-radius: 50px;
font-weight: 600;
font-size: 0.78rem;
font-family: inherit;
transition: all 0.2s;
}
.lang-switcher button.active {
background: var(--gold);
color: var(--navy);
}
.lang-switcher button:hover:not(.active) { color: var(--white); }
.parallax-skip {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 9px 18px;
border: 1px solid rgba(255,255,255,0.25);
border-radius: 50px;
color: var(--white);
text-decoration: none;
font-size: 0.85rem;
font-weight: 500;
transition: all 0.25s ease;
backdrop-filter: blur(8px);
background: rgba(255,255,255,0.05);
}
.parallax-skip:hover {
background: var(--gold);
color: var(--navy);
border-color: var(--gold);
transform: translateX(2px);
}
.parallax-skip i { transition: transform 0.25s; font-size: 0.75rem; }
.parallax-skip:hover i { transform: translateX(3px); }
/* ── SCÈNES PARALLAX ─────────────────────────────────────────────────────── */
.parallax-scene {
position: relative;
width: 100%;
height: 100vh;
overflow: hidden;
}
.layer {
position: absolute;
inset: 0;
pointer-events: none;
will-change: transform;
}
/* ──────────────────────────────────────────────────────────────────────────
SCÈNE 1 — TARMAC (avion qui se charge au coucher de soleil)
────────────────────────────────────────────────────────────────────────── */
.scene-tarmac {
background: linear-gradient(to bottom,
#1a1a3e 0%,
#2d2350 25%,
#6b3050 50%,
#c47a3f 75%,
#f4b669 95%,
#f9d28a 100%);
}
.scene-tarmac .sky {
background: radial-gradient(ellipse at 50% 90%, rgba(255, 200, 120, 0.4), transparent 60%);
transform: translateY(calc(var(--scroll) * -50vh));
}
.scene-tarmac .sun {
position: absolute;
bottom: 18%;
left: 50%;
transform: translateX(-50%) translateY(calc(var(--scroll) * -120vh));
width: 240px;
height: 240px;
background: radial-gradient(circle, #ffe9b6 0%, #ffb874 35%, transparent 70%);
border-radius: 50%;
filter: blur(10px);
}
.scene-tarmac .stars { display: none; }
.scene-tarmac .mountains {
bottom: 18%;
height: 30%;
background:
linear-gradient(to right,
transparent 0%, transparent 5%,
#2d2350 5%, #2d2350 14%,
transparent 14%, transparent 18%,
#1f1839 18%, #1f1839 32%,
transparent 32%, transparent 38%,
#2d2350 38%, #2d2350 55%,
transparent 55%, transparent 60%,
#1f1839 60%, #1f1839 78%,
transparent 78%, transparent 82%,
#2d2350 82%, #2d2350 100%);
-webkit-mask: linear-gradient(135deg, transparent 30%, black 30%, black 70%, transparent 70%);
mask: linear-gradient(135deg, transparent 30%, black 30%, black 70%, transparent 70%);
/* simpler approach with SVG mountain silhouette */
background-image: url("data:image/svg+xml;utf8,");
background-size: cover;
background-repeat: no-repeat;
background-position: bottom;
transform: translate(calc(var(--mx) * -8px), calc(var(--scroll) * -25vh));
}
.scene-tarmac .hangar {
bottom: 17%;
left: -5%;
width: 30%;
height: 18%;
background: linear-gradient(180deg, #14102a 0%, #0a081c 100%);
-webkit-mask: url("data:image/svg+xml;utf8,") no-repeat;
-webkit-mask-size: 100% 100%;
mask: url("data:image/svg+xml;utf8,") no-repeat;
mask-size: 100% 100%;
transform: translate(calc(var(--mx) * -15px), calc(var(--scroll) * -40vh));
}
.scene-tarmac .tarmac {
bottom: 0;
height: 18%;
background: linear-gradient(to bottom,
rgba(40, 30, 60, 0.4) 0%,
rgba(20, 15, 30, 0.85) 50%,
rgba(10, 8, 18, 1) 100%);
border-top: 1px solid rgba(197, 165, 90, 0.2);
transform: translateY(calc(var(--scroll) * 20vh));
}
.scene-tarmac .tarmac::before {
content: '';
position: absolute;
top: 30%;
left: 0; right: 0;
height: 2px;
background: repeating-linear-gradient(to right,
transparent 0, transparent 30px,
rgba(255, 220, 150, 0.5) 30px, rgba(255, 220, 150, 0.5) 60px);
}
/* ── PLANE STAGES (3 versions, une par scène) ───────────────────────────── */
.plane-stage {
position: absolute;
pointer-events: none;
will-change: transform;
}
.plane {
width: 100%;
height: auto;
display: block;
filter: drop-shadow(0 12px 24px rgba(0, 0, 0, 0.45));
}
/* Avion scène 1 : au sol, immobile */
.plane-loading {
bottom: 14%;
left: 50%;
transform: translateX(-50%) translateY(calc(var(--scroll) * 30vh));
width: min(640px, 75vw);
z-index: 5;
}
/* Rampe de chargement */
.ramp {
position: absolute;
bottom: 8%;
left: calc(50% - 280px);
width: 90px;
height: 8px;
background: linear-gradient(90deg, #5a4520, #8a6a30);
transform: rotate(-18deg);
transform-origin: right;
border-radius: 4px;
box-shadow: 0 4px 12px rgba(0,0,0,0.4);
z-index: 4;
transform: translateY(calc(var(--scroll) * 30vh)) rotate(-18deg);
}
/* Boîtes qui montent dans l'avion (animation) */
.box {
position: absolute;
bottom: 6%;
font-size: 28px;
z-index: 6;
animation: loadBox 4s ease-in-out infinite;
filter: drop-shadow(0 4px 8px rgba(0,0,0,0.5));
transform: translateY(calc(var(--scroll) * 30vh));
}
.box-1 { left: calc(50% - 320px); animation-delay: 0s; }
.box-2 { left: calc(50% - 320px); animation-delay: 1.3s; }
.box-3 { left: calc(50% - 320px); animation-delay: 2.6s; }
@keyframes loadBox {
0% { transform: translate(0, calc(var(--scroll, 0) * 30vh)) scale(1); opacity: 0; }
10% { opacity: 1; }
60% { transform: translate(140px, calc(-30px + var(--scroll, 0) * 30vh)) scale(0.95); opacity: 1; }
90% { transform: translate(170px, calc(-20px + var(--scroll, 0) * 30vh)) scale(0.7); opacity: 0; }
100% { transform: translate(170px, calc(-20px + var(--scroll, 0) * 30vh)) scale(0.7); opacity: 0; }
}
.ground-boxes {
position: absolute;
bottom: 2%;
left: calc(50% - 350px);
display: flex;
gap: 6px;
z-index: 4;
transform: translateY(calc(var(--scroll) * 30vh));
}
.ground-box {
width: 28px; height: 28px;
background: linear-gradient(135deg, #c5a55a, #8a6a30);
border: 1px solid #5a4520;
border-radius: 3px;
box-shadow: 0 4px 8px rgba(0,0,0,0.5);
}
.gb-1 { transform: translateY(0); }
.gb-2 { transform: translateY(-2px); }
.gb-3 { transform: translateY(-1px); }
/* ── TEXTE HERO (scène 1) ────────────────────────────────────────────────── */
.scene-text {
position: absolute;
z-index: 10;
text-align: center;
width: 100%;
padding: 0 20px;
}
.scene-text--hero {
top: 22%;
left: 0;
right: 0;
opacity: calc(1 - var(--scroll) * 3);
transform: translateY(calc(var(--scroll) * -30vh));
}
.hero-pretitle {
font-family: 'Poppins', sans-serif;
font-weight: 500;
letter-spacing: 6px;
text-transform: uppercase;
color: var(--gold);
font-size: 0.85rem;
margin-bottom: 14px;
opacity: 0.9;
}
.hero-title {
font-family: 'Poppins', sans-serif;
font-size: clamp(2.2rem, 6vw, 4.5rem);
font-weight: 800;
letter-spacing: -1px;
line-height: 1;
background: linear-gradient(135deg, #fff 0%, #c5a55a 50%, #fff 100%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
color: transparent;
text-shadow: 0 6px 30px rgba(0,0,0,0.5);
}
.hero-line {
width: 80px;
height: 3px;
background: var(--gold);
margin: 22px auto;
border-radius: 2px;
}
.hero-subtitle {
font-size: clamp(1rem, 2vw, 1.3rem);
font-weight: 300;
color: rgba(255, 255, 255, 0.88);
letter-spacing: 0.5px;
text-shadow: 0 2px 12px rgba(0,0,0,0.5);
}
.scroll-indicator {
position: absolute;
bottom: 30px;
left: 50%;
transform: translateX(-50%);
z-index: 10;
text-align: center;
color: rgba(255, 255, 255, 0.7);
font-size: 0.75rem;
letter-spacing: 2px;
text-transform: uppercase;
opacity: calc(1 - var(--scroll) * 4);
}
.scroll-mouse {
width: 22px;
height: 36px;
border: 2px solid rgba(255, 255, 255, 0.6);
border-radius: 12px;
margin: 10px auto 0;
position: relative;
}
.scroll-mouse span {
display: block;
width: 4px;
height: 8px;
background: var(--gold);
border-radius: 2px;
position: absolute;
top: 6px;
left: 50%;
transform: translateX(-50%);
animation: scrollDown 1.8s ease-in-out infinite;
}
@keyframes scrollDown {
0%, 20% { opacity: 0; transform: translate(-50%, 0); }
50% { opacity: 1; transform: translate(-50%, 6px); }
100% { opacity: 0; transform: translate(-50%, 14px); }
}
/* ──────────────────────────────────────────────────────────────────────────
SCÈNE 2 — DÉCOLLAGE
────────────────────────────────────────────────────────────────────────── */
.scene-takeoff {
background: linear-gradient(to bottom,
#2a2058 0%,
#5a3470 35%,
#b06850 70%,
#f0a060 100%);
}
.scene-takeoff .sky-2 {
background: radial-gradient(ellipse at 50% 60%, rgba(240, 160, 100, 0.5), transparent 70%);
}
.scene-takeoff .clouds-far,
.scene-takeoff .clouds-mid {
background-repeat: no-repeat;
background-size: cover;
}
.scene-takeoff .clouds-far {
background-image: url("data:image/svg+xml;utf8,");
transform: translate(calc(var(--scroll) * -20vw), calc(var(--mx) * 5px));
}
.scene-takeoff .clouds-mid {
background-image: url("data:image/svg+xml;utf8,");
transform: translate(calc(var(--scroll) * -40vw + 100vw), calc(var(--mx) * 12px));
}
.scene-takeoff .mountains-2 {
bottom: 0;
height: 25%;
background-image: url("data:image/svg+xml;utf8,");
background-size: cover;
background-position: bottom;
background-repeat: no-repeat;
transform: translate(calc(var(--mx) * -10px), calc(var(--scroll) * 15vh));
}
/* Avion scène 2 : monte en diagonale et grandit/avance */
.plane-takeoff {
bottom: 30%;
left: 50%;
width: min(580px, 70vw);
z-index: 5;
/* progress in scene = (scroll - 0.33) / 0.34 */
transform: translateX(calc(-50% + (var(--scroll) - 0.5) * 60vw))
translateY(calc((var(--scroll) - 0.5) * -40vh))
rotate(calc((var(--scroll) - 0.33) * -10deg));
}
.contrail {
position: absolute;
top: 50%;
right: 90%;
width: 200px;
height: 6px;
background: linear-gradient(to left, rgba(255,255,255,0.85), transparent);
border-radius: 3px;
filter: blur(2px);
transform: translateY(-3px);
}
.scene-text--takeoff {
top: 18%;
left: 50%;
transform: translate(-50%, calc(-20vh + var(--scroll) * 40vh));
text-align: center;
max-width: 600px;
padding: 0 20px;
}
.step-marker {
font-family: 'Poppins', sans-serif;
font-weight: 800;
font-size: 4.5rem;
background: linear-gradient(135deg, var(--gold), var(--gold-light));
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
line-height: 1;
opacity: 0.85;
}
.scene-text--takeoff h2 {
font-family: 'Poppins', sans-serif;
font-size: clamp(2rem, 5vw, 3.2rem);
font-weight: 700;
margin-top: 8px;
letter-spacing: -0.5px;
text-shadow: 0 4px 20px rgba(0,0,0,0.4);
}
.scene-text--takeoff p {
margin-top: 14px;
font-size: 1.15rem;
color: rgba(255, 255, 255, 0.85);
font-weight: 300;
}
/* ──────────────────────────────────────────────────────────────────────────
SCÈNE 3 — ARRIVÉE (nuit étoilée + Madagascar)
────────────────────────────────────────────────────────────────────────── */
.scene-arrival {
background: linear-gradient(to bottom,
#050518 0%,
#0d0d2a 40%,
#1a1a3e 80%,
#1f2050 100%);
height: 110vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.scene-arrival .night-sky {
background: radial-gradient(ellipse at 70% 30%, rgba(60, 60, 120, 0.3), transparent 70%);
}
.scene-arrival .night-stars {
background-image:
radial-gradient(2px 2px at 20% 18%, #fff 50%, transparent 100%),
radial-gradient(1px 1px at 35% 42%, #fff 50%, transparent 100%),
radial-gradient(2px 2px at 60% 22%, #fff 50%, transparent 100%),
radial-gradient(1.5px 1.5px at 80% 35%, #fff 50%, transparent 100%),
radial-gradient(1px 1px at 50% 65%, #fff 50%, transparent 100%),
radial-gradient(1.5px 1.5px at 12% 70%, #fff 50%, transparent 100%),
radial-gradient(1px 1px at 90% 80%, #fff 50%, transparent 100%),
radial-gradient(2px 2px at 25% 85%, #c5a55a 50%, transparent 100%),
radial-gradient(1px 1px at 78% 12%, #fff 50%, transparent 100%);
animation: twinkle 4s ease-in-out infinite alternate;
transform: translate(calc(var(--mx) * -6px), calc(var(--my) * -4px));
}
@keyframes twinkle {
0% { opacity: 0.7; }
100% { opacity: 1; }
}
.scene-arrival .moon {
position: absolute;
top: 12%;
right: 12%;
width: 110px;
height: 110px;
background: radial-gradient(circle at 35% 35%, #fff 0%, #f4e4b4 40%, #c5a55a 100%);
border-radius: 50%;
box-shadow: 0 0 60px rgba(244, 228, 180, 0.6), 0 0 120px rgba(197, 165, 90, 0.3);
transform: translate(calc(var(--mx) * -10px), calc(var(--my) * -6px));
}
.scene-arrival .madagascar-silhouette {
bottom: 0;
left: 0;
height: 35%;
background-image: url("data:image/svg+xml;utf8,");
background-size: cover;
background-position: bottom;
background-repeat: no-repeat;
transform: translateY(calc((1 - var(--scroll)) * 20vh));
}
/* Petit avion en approche */
.plane-arrival {
position: absolute;
top: 22%;
left: 30%;
width: min(280px, 32vw);
z-index: 5;
transform: translate(calc((var(--scroll) - 0.66) * 100vw), calc((1 - var(--scroll)) * -10vh))
rotate(8deg);
opacity: calc((var(--scroll) - 0.55) * 3);
}
.plane-small { opacity: 0.95; }
/* CTA bloc final */
.parallax-cta-block {
position: relative;
z-index: 10;
text-align: center;
max-width: 720px;
padding: 0 30px;
opacity: calc((var(--scroll) - 0.7) * 4);
transform: translateY(calc((1 - var(--scroll)) * 50px));
transition: opacity 0.5s, transform 0.5s;
}
.cta-pretitle {
font-family: 'Poppins', sans-serif;
font-weight: 500;
letter-spacing: 8px;
text-transform: uppercase;
color: var(--gold);
font-size: 0.9rem;
margin-bottom: 16px;
}
.cta-title {
font-family: 'Poppins', sans-serif;
font-size: clamp(2.4rem, 6vw, 4rem);
font-weight: 800;
letter-spacing: -1px;
background: linear-gradient(135deg, #fff 0%, #c5a55a 60%, #fff 100%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
line-height: 1.1;
}
.cta-subtitle {
margin-top: 18px;
font-size: 1.1rem;
color: rgba(255, 255, 255, 0.85);
font-weight: 300;
line-height: 1.6;
}
.parallax-cta-btn {
display: inline-flex;
align-items: center;
gap: 14px;
margin-top: 36px;
padding: 18px 42px;
background: linear-gradient(135deg, var(--gold), var(--gold-light));
color: var(--navy);
text-decoration: none;
border-radius: 50px;
font-family: 'Poppins', sans-serif;
font-weight: 700;
font-size: 1.05rem;
letter-spacing: 0.5px;
box-shadow: 0 12px 35px rgba(197, 165, 90, 0.45),
0 0 0 0 rgba(197, 165, 90, 0.5);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.parallax-cta-btn::before {
content: '';
position: absolute;
top: 0; left: -100%;
width: 100%; height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent);
transition: left 0.6s;
}
.parallax-cta-btn:hover {
transform: translateY(-4px);
box-shadow: 0 18px 45px rgba(197, 165, 90, 0.6),
0 0 0 8px rgba(197, 165, 90, 0.15);
}
.parallax-cta-btn:hover::before { left: 100%; }
.parallax-cta-btn i {
transition: transform 0.3s;
font-size: 0.95rem;
}
.parallax-cta-btn:hover i { transform: translateX(6px); }
.cta-meta {
display: flex;
justify-content: center;
gap: 32px;
margin-top: 36px;
flex-wrap: wrap;
color: rgba(255, 255, 255, 0.65);
font-size: 0.85rem;
}
.cta-meta span {
display: inline-flex;
align-items: center;
gap: 8px;
}
.cta-meta i {
color: var(--gold);
}
/* ── RESPONSIVE ─────────────────────────────────────────────────────────── */
@media (max-width: 768px) {
.parallax-header { padding: 14px 18px; }
.parallax-logo span { display: none; }
.parallax-logo img { height: 38px; }
.parallax-skip { padding: 7px 14px; font-size: 0.78rem; }
.lang-switcher button { padding: 4px 8px; font-size: 0.72rem; }
.parallax-header-right { gap: 10px; }
.plane-loading,
.plane-takeoff { width: 100vw; }
.ramp,
.box,
.ground-boxes { display: none; }
.scroll-indicator span { font-size: 0.7rem; }
.cta-meta { gap: 18px; font-size: 0.78rem; }
.parallax-cta-btn { padding: 14px 28px; font-size: 0.95rem; }
}
@media (prefers-reduced-motion: reduce) {
.box,
.scroll-mouse span,
.night-stars { animation: none; }
html { scroll-behavior: auto; }
}