ride2alps
Votre transfert privé haut de gamme vers les Alpes: confort et excellence assurés!

Nos Services
Découvrez notre gamme de services de transport privé haut de gamme, spécialement conçus pour répondre à tous vos besoins. Que vous voyagiez seul, en famille ou en groupe, nous avons la solution idéale pour chaque situation. Avec des véhicules premium et des chauffeurs experts, chaque trajet devient une expérience inoubliable. Faites confiance à ride2alps pour vous emmener vers les plus belles stations de ski!

Un service exceptionnel! Mon transfert de lʼaéroport à la station de ski était fluide et sans stress. Le chauffeur était ponctuel, courtois et connaissait parfaitement la route. Je me suis senti en sécurité et à lʼaise tout au long du trajet. Je recommande vivement ride2alps à tous!
Sophie Martin

Une expérience fantastique! Nous avons réservé un transfert pour notre famille et tout sʼest parfaitement déroulé. Le véhicule était spacieux et confortable, idéal pour nos équipements de ski. Le chauffeur était très professionnel et accueillant. Merci, ride2alps, pour ce voyage inoubliable!
David Thompson

Un service de première classe! Jʼai utilisé ride2alps pour un voyage dʼaffaires en montagne. Le chauffeur était à lʼheure et très professionnel. Le trajet était confortable et agréable, ce qui mʼa permis de me concentrer sur mes réunions. Je ne peux que recommander cette société pour vos transferts!
Isabelle Dupuis
Contactez-Nous Aujourdʼhui
Prêt à vivre une expérience de transport inoubliable? Notre équipe est là pour répondre à toutes vos questions et vous aider à réserver. Contactez-nous dès maintenant pour un service dʼexcellence!
ride2alps
<!-- ===== Simulateur AVM / Your Best Transite ===== -->
<div id="avm-simulateur" class="avm-card">
<h3>Simulation de prix — AVM Excellence</h3>
<label>Départ</label>
<input id="avm-depart" type="text" placeholder="Saisir l'adresse de départ" autocomplete="off"/>
<label>Arrivée</label>
<input id="avm-arrivee" type="text" placeholder="Saisir l'adresse d'arrivée" autocomplete="off"/>
<div class="avm-row">
<div>
<label>Catégorie</label>
<select id="avm-categorie">
<option value="berline" selected>Berline</option>
<option value="van">Van</option>
</select>
</div>
<div>
<label>Heure de prise en charge</label>
<input id="avm-heure" type="time"/>
</div>
</div>
<div class="avm-row">
<label class="avm-check">
<input id="avm-retour" type="checkbox"/> Option retour (−10% sur l’aller/retour)
</label>
<label class="avm-check">
<input id="avm-ferie" type="checkbox"/> Jour férié
</label>
</div>
<button id="avm-calculer" type="button">Calculer</button>
<div id="avm-resultat" class="avm-result" style="display:none;">
<div class="avm-kpis">
<div><strong>Distance :</strong> <span id="avm-km">—</span></div>
<div><strong>Durée :</strong> <span id="avm-duree">—</span></div>
</div>
<div class="avm-prix">
<div>Total estimé : <span id="avm-total">— €</span></div>
<small class="avm-note">Estimation indicative selon trafic & conditions.</small>
</div>
<a id="avm-whatsapp" class="avm-wa" target="_blank" rel="noopener">WhatsApp express</a>
</div>
</div>
<style>
.avm-card{max-width:760px;margin:24px auto;padding:24px;border-radius:14px;background:#0e0e10;color:#f5f5f7;box-shadow:0 10px 30px rgba(0,0,0,.25);font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu}
.avm-card h3{margin:0 0 14px;font-weight:700;letter-spacing:.2px;text-align:center}
.avm-card label{display:block;margin:14px 0 6px;font-size:14px;opacity:.9}
.avm-card input[type="text"], .avm-card input[type="time"], .avm-card select{
width:100%;padding:12px 14px;border-radius:10px;border:1px solid #2a2a2e;background:#151518;color:#fff;outline:none
}
.avm-row{display:flex;gap:14px;align-items:center;flex-wrap:wrap}
.avm-row>div{flex:1 1 240px}
.avm-check{display:flex;gap:10px;align-items:center;margin:6px 12px 0 0}
#avm-calculer{margin-top:14px;width:100%;padding:14px 16px;border:0;border-radius:12px;background:#0052ff;color:#fff;font-weight:700;cursor:pointer}
#avm-calculer:hover{filter:brightness(1.05)}
.avm-result{margin-top:18px;padding:16px;border:1px solid #1f1f23;border-radius:12px;background:#121215}
.avm-kpis{display:flex;gap:24px;flex-wrap:wrap;margin-bottom:8px}
.avm-prix{font-size:20px;font-weight:800;margin:8px 0 12px}
.avm-note{opacity:.7}
.avm-wa{display:inline-block;padding:12px 16px;border-radius:10px;background:#25D366;color:#0b1;text-decoration:none;font-weight:700}
.avm-wa:hover{filter:brightness(1.05)}
</style>
<!-- Google Maps JS API (Places + Distance Matrix) -->
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBRsLWZmenIzAj6ndQOpvzxmncelmKWS7M&libraries=places"></script>
<script>
(function(){
// ====== CONFIG TARIFS ======
const PRIX = {
berline: { km: 2.60, minute: 0.40, minimum: 25 },
van: { km: 3.20, minute: 0.50, minimum: 40 }
};
const COEFFS = {
nuit: 1.20, // 22:00–06:00
ferie: 1.15, // si coché
retourRemise: 0.90 // -10% si aller/retour
};
const FORFAITS_MIN = {
"cannes|nice aéroport": 90,
"grenoble|aéroport lyon": 120,
"grenoble|geneve aéroport": 180,
"alpe dhuez|aéroport grenoble": 110
};
function keyForfait(a,b){
const norm = s => s.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"")
.replace(/\b(aeroport|airport)\b/g,"aéroport")
.replace(/[^a-z0-9 ]+/g," ").trim().replace(/\s+/g," ");
return `${norm(a)}|${norm(b)}`;
}
// ====== AUTOCOMPLETE ======
const departInput = document.getElementById('avm-depart');
const arriveeInput = document.getElementById('avm-arrivee');
const acDepart = new google.maps.places.Autocomplete(departInput, { types: ['geocode'] });
const acArrivee = new google.maps.places.Autocomplete(arriveeInput, { types: ['geocode'] });
// ====== UI ======
const btn = document.getElementById('avm-calculer');
const out = document.getElementById('avm-resultat');
const kmEl = document.getElementById('avm-km');
const duEl = document.getElementById('avm-duree');
const totEl= document.getElementById('avm-total');
const wa = document.getElementById('avm-whatsapp');
btn.addEventListener('click', async function(){
const depart = departInput.value.trim();
const arrivee = arriveeInput.value.trim();
const cat = document.getElementById('avm-categorie').value;
const heure = document.getElementById('avm-heure').value || new Date().toTimeString().slice(0,5);
const retour = document.getElementById('avm-retour').checked;
const ferie = document.getElementById('avm-ferie').checked;
if(!depart || !arrivee){ alert("Entre un départ et une arrivée 😉"); return; }
// Distance Matrix
const svc = new google.maps.DistanceMatrixService();
svc.getDistanceMatrix({
origins: [depart],
destinations: [arrivee],
travelMode: google.maps.TravelMode.DRIVING
}, (res, status) => {
if(status !== "OK"){ alert("Erreur Google Maps. Réessaie."); return; }
const elem = res.rows[0].elements[0];
if(!elem || elem.status!=="OK"){ alert("Itinéraire introuvable."); return; }
const meters = elem.distance.value;
const secs = elem.duration.value;
const km = meters/1000;
const mins = secs/60;
// Prix de base
const p = PRIX[cat];
let total = (km * p.km) + (mins * p.minute);
// Coeff nuit
const [hh,mm] = heure.split(':').map(Number);
const nuit = (hh >= 22 || hh < 6);
if(nuit) total *= COEFFS.nuit;
// Férié
if(ferie) total *= COEFFS.ferie;
// Forfait mini (si défini pour ce couple de villes)
const k1 = keyForfait(depart, arrivee);
const k2 = keyForfait(arrivee, depart);
const minForfait = FORFAITS_MIN[k1] ?? FORFAITS_MIN[k2] ?? p.minimum;
if(total < minForfait) total = minForfait;
// Option retour (remise sur l'ensemble a/r)
if(retour) total = total * 2 * COEFFS.retourRemise; // aller + retour avec remise
// Affichage (arrondi propre)
const totalAff = Math.round(total);
kmEl.textContent = `${km.toFixed(1)} km`;
duEl.textContent = `${Math.round(mins)} min`;
totEl.textContent = `${totalAff} €`;
out.style.display = 'block';
// Lien WhatsApp express
const phone = "33776158404"; // ton numéro sans le + (ex: 33776158404)
const txt = `Bonjour, je souhaite réserver un transfert AVM.\\nDépart: ${depart}\\nArrivée: ${arrivee}\\nCatégorie: ${cat}\\nHeure: ${heure}\\nEstimation: ${totalAff} €${retour?' (aller/retour)':''}.`;
const url = `https://wa.me/${phone}?text=${encodeURIComponent(txt)}`;
wa.href = url;
});
});
})();
</script>



