générés par Elementor.
-------------------------------------------------------------------------- */
.dmd-filet,.dmd-liste,.dmd-puces{display:block}.dmd-filet .elementor-icon-list-items{display:flex;gap:26px;flex-wrap:wrap;margin:0;padding:0;list-style:none}
.dmd-filet .elementor-icon-list-item{display:flex;align-items:center;gap:9px;font-size:14px;
color:var(--dmd-texte-sombre);margin:0}
.dmd-filet .elementor-icon-list-item::before{content:"";width:7px;height:7px;border-radius:50%;
background:var(--dmd-or-clair);flex:0 0 auto}
.dmd-filet .elementor-icon-list-icon{display:none}.dmd-liste .elementor-icon-list-items{display:grid;gap:13px;margin:0;padding:0;list-style:none}
.dmd-liste .elementor-icon-list-item{display:flex;gap:12px;align-items:flex-start;font-size:15px;
color:#DCE3E9;margin:0}
.dmd-liste .elementor-icon-list-item::before{content:"";width:8px;height:8px;border-radius:50%;
background:var(--dmd-or-clair);margin-top:8px;flex:0 0 auto}
.dmd-liste .elementor-icon-list-icon{display:none}.dmd-puces .elementor-icon-list-items{display:flex;flex-wrap:wrap;gap:9px;margin:0;padding:0;list-style:none}
.dmd-puces .elementor-icon-list-item{font-size:13.5px;font-weight:500;border:1px solid var(--dmd-gris-2);
background:var(--dmd-gris);border-radius:var(--dmd-r-pill);padding:7px 16px;margin:0}
.dmd-puces .elementor-icon-list-icon{display:none}/* Sur fond sombre, la liste de conversion reprend la même grammaire */
.dmd-conv .dmd-liste .elementor-icon-list-item{color:#DCE3E9}/* --------------------------------------------------------------------------
20. Compatibilité avec les styles globaux Elementor et Astra
Le kit Elementor impose une typographie aux titres. Les règles ci-dessous
sont volontairement plus spécifiques pour que la maquette reste fidèle,
sans toucher au reste du site.
-------------------------------------------------------------------------- */
.dmd .elementor-widget-heading .elementor-heading-title{
font-family:var(--dmd-police);margin:0;color:inherit}
.dmd .elementor-widget-heading h1.elementor-heading-title{
font-size:clamp(30px,4.2vw,40px);line-height:1.1;font-weight:600}
.dmd .elementor-widget-heading h2.elementor-heading-title{
font-size:clamp(23px,2.6vw,25px);line-height:1.25;font-weight:600;color:var(--dmd-surface)}
.dmd .elementor-widget-heading h3.elementor-heading-title{
font-size:18px;line-height:1.32;font-weight:600}.dmd-hero .elementor-widget-heading h1.elementor-heading-title{color:var(--dmd-blanc)}
.dmd-signature .elementor-widget-heading h2.elementor-heading-title{color:var(--dmd-or-clair)}
.dmd-preuve .elementor-widget-heading h2.elementor-heading-title{color:var(--dmd-or-clair)}
.dmd-preuve .elementor-widget-heading h3.elementor-heading-title{color:var(--dmd-blanc)}
.dmd-conv .elementor-widget-heading h2.elementor-heading-title{color:var(--dmd-blanc)}/* Surtitre : trait or + libellé */
.dmd .dmd-surtitre{display:inline-flex;align-items:center;gap:10px;width:auto;margin-bottom:16px}
.dmd .dmd-surtitre .elementor-heading-title{font-size:12px;font-weight:500;letter-spacing:.14em;
text-transform:uppercase;color:inherit;line-height:1.4}/* Pastille numérotée du process */
.dmd .dmd-maillon .dmd-maillon__pt{width:60px;height:60px;margin:0 auto 16px;flex:0 0 auto}
.dmd .dmd-maillon .dmd-maillon__pt .elementor-heading-title{font-size:16px;font-weight:600;
color:inherit;line-height:1}/* Pictogramme des équipements */
.dmd .dmd-equip .dmd-equip__ic{width:46px;height:46px;margin:0 auto 14px;flex:0 0 auto}
.dmd .dmd-equip .dmd-equip__ic .elementor-heading-title{font-size:20px;color:inherit;line-height:1}/* Chiffres de la preuve */
.dmd .dmd-carte-p .dmd-carte-p__gros .elementor-heading-title{font-size:30px;font-weight:600;
color:inherit;line-height:1}
.dmd .dmd-lien-carte .dmd-lien-carte__cat .elementor-heading-title{font-size:11px;font-weight:600;
letter-spacing:.1em;text-transform:uppercase;color:inherit}
.dmd .dmd-sep .elementor-heading-title{font-size:12px;font-weight:600;letter-spacing:.1em;
text-transform:uppercase;color:#66717B}/* Corps de texte */
.dmd .elementor-widget-text-editor{color:inherit}
.dmd .dmd-chapo p{font-size:17px;margin-bottom:0}
.dmd .dmd-entete .elementor-widget-text-editor p{font-size:17px;margin-bottom:0}
.dmd .dmd-citation p{font-size:17px;font-weight:400;margin-bottom:0}
.dmd .dmd-note p{font-size:12.5px;color:var(--dmd-texte-sombre);margin-bottom:0}
.dmd .dmd-cartouche p{margin-bottom:0;font-size:14.5px}
.dmd .dmd-mini p,.dmd .dmd-maillon p{font-size:13.5px;color:var(--dmd-texte-doux);margin-bottom:0}
.dmd .dmd-equip p{font-size:13px;color:var(--dmd-texte-doux);margin-bottom:0}
.dmd .dmd-carte-p p{font-size:13.5px;color:var(--dmd-texte-sombre);margin-bottom:0}
.dmd .dmd-signee p{font-size:14px;color:var(--dmd-texte-sombre);margin-bottom:0}
.dmd .dmd-signee .elementor-widget-image{width:auto;flex:0 0 auto}
.dmd .dmd-signee img{height:52px;width:auto}/* Boutons : la classe est posée sur l'enveloppe du widget */
.dmd .dmd-btn{width:auto}
.dmd .dmd-btn .elementor-button{display:inline-block;font-family:var(--dmd-police);font-size:20px;
font-weight:500;color:#1B1B1B;background:var(--dmd-or-plein);border:1px solid var(--dmd-or-plein);
border-radius:var(--dmd-r);padding:15px 30px;line-height:1.2;
transition:background .18s ease,transform .18s ease,color .18s ease,border-color .18s ease}
.dmd .dmd-btn .elementor-button:hover,.dmd .dmd-btn .elementor-button:focus-visible{
background:var(--dmd-or-clair);border-color:var(--dmd-or-clair);color:#1B1B1B;transform:translateY(-2px)}
.dmd .dmd-btn--clair .elementor-button{background:transparent;color:var(--dmd-blanc);
border-color:rgba(255,255,255,.45)}
.dmd .dmd-btn--clair .elementor-button:hover,.dmd .dmd-btn--clair .elementor-button:focus-visible{
background:var(--dmd-blanc);color:var(--dmd-noir);border-color:var(--dmd-blanc)}
.dmd .dmd-btn .elementor-button::after{content:none}@media(max-width:767px){
.dmd .dmd-btn,.dmd .dmd-btn .elementor-button{width:100%}
.dmd .dmd-btn .elementor-button{font-size:17px;padding:14px 22px}
}/* Mise en page propre au modele section/colonne d'Elementor */
/* Un widget occupe la largeur de sa colonne. Regle d'Elementor, reprise ici
parce que l'optimisation CSS de LiteSpeed peut la retirer : un widget dont
le contenu n'a pas de largeur propre se reduisait alors a rien. Les regles
qui suivent peuvent la contredire au cas par cas, les boutons par exemple. */
.dmd :where(.elementor-widget-wrap)>:where(.elementor-element){width:100%}
.dmd .elementor-widget-wrap{align-content:flex-start}
.dmd-rangee>.elementor-container{align-items:inherit}
.dmd-gap-60>.elementor-container{gap:60px}
.dmd-gap-56>.elementor-container{gap:56px}
.dmd-gap-52>.elementor-container{gap:52px}
.dmd-gap-48>.elementor-container{gap:48px}
.dmd-gap-18>.elementor-container{gap:18px}
.dmd-gap-16>.elementor-container{gap:16px}
.dmd-gap-0>.elementor-container{gap:0}
.dmd-grille{margin-bottom:18px}
.dmd-grille:last-child{margin-bottom:0}
/* Les grilles de cartes passent en grille CSS : les cartes d'une meme rangee
gardent ainsi la meme hauteur, quelle que soit la longueur du texte. */
.dmd .dmd-rangee+.dmd-grille{margin-top:26px}
.dmd .dmd-grille>.elementor-container{display:grid;align-items:stretch}
.dmd .dmd-grille>.elementor-container>.elementor-column{width:auto}
.dmd .dmd-grille-2>.elementor-container{grid-template-columns:repeat(2,1fr)}
.dmd .dmd-grille-3>.elementor-container{grid-template-columns:repeat(3,1fr)}
.dmd .dmd-grille-4>.elementor-container{grid-template-columns:repeat(4,1fr)}
@media(max-width:1060px){
.dmd .dmd-grille-3>.elementor-container,
.dmd .dmd-grille-4>.elementor-container{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:767px){
.dmd .dmd-grille>.elementor-container{grid-template-columns:1fr}
}.dmd-signee .elementor-widget-image,
.dmd-signee .elementor-widget-text-editor{width:auto}
.dmd-signee .elementor-widget-image{margin-right:16px}/* Les cartes sont des colonnes : on leur rend leur boite */
.dmd-lien-carte>.elementor-widget-wrap,
.dmd-mini>.elementor-widget-wrap,
.dmd-equip>.elementor-widget-wrap,
.dmd-carte-p>.elementor-widget-wrap{height:100%}
.dmd-visuel>.elementor-widget-wrap{padding:0}
.dmd-visuel .elementor-widget-image{width:100%}
/* La chaine des quatre etapes : ce sont les colonnes Elementor qui portent
la repartition, la classe ne sert plus qu'au filet dore decoratif. */
.dmd .elementor-section.dmd-chaine{display:block}
.dmd .elementor-section.dmd-chaine>.elementor-container{position:relative;z-index:1}
.dmd-maillon{text-align:center}
.dmd-maillon .elementor-widget-button{margin:10px auto 0}
.dmd-equip{text-align:center}/* --------------------------------------------------------------------
Priorite sur les styles globaux d'Astra et du kit Elementor.
Limite aux couleurs que la maquette impose : ailleurs, les reglages
du site continuent de s'appliquer normalement.
-------------------------------------------------------------------- */
.dmd .dmd-chapo,.dmd .dmd-chapo p{color:#E7EBEF!important}
/* Le cartouche pose sur la photo : texte clair, et la colonne visuel ne doit
garder aucune marge interne sinon l'image ne remplit plus la carte. */
.dmd .dmd-cartouche,.dmd .dmd-cartouche p{color:#fff!important}
/* La photo occupe toute la carte : sans cela le fond de la colonne
apparait en bandes au-dessus et au-dessous de l'image. */
.dmd .dmd-visuel>.elementor-widget-wrap{padding:0!important;height:100%}
.dmd .dmd-visuel .elementor-widget-image{height:100%;display:flex}
.dmd .dmd-visuel .elementor-widget-image>.elementor-widget-container{width:100%;height:100%}
.dmd .dmd-visuel img{width:100%;height:100%;object-fit:cover;aspect-ratio:auto;display:block}
/* Le widget « liste d'icones » pose la couleur sur le libelle lui-meme :
il faut donc viser ce libelle, sinon l'heritage ne passe pas. */
.dmd-hero .dmd-filet .elementor-icon-list-item,
.dmd-hero .dmd-filet .elementor-icon-list-text,
.dmd-signature .dmd-liste .elementor-icon-list-item,
.dmd-signature .dmd-liste .elementor-icon-list-text,
.dmd-conv .dmd-liste .elementor-icon-list-item,
.dmd-conv .dmd-liste .elementor-icon-list-text{color:#E7EBEF!important}
.dmd-signature .dmd-note p{color:#C3CDD6!important}.dmd .dmd-btn .elementor-button,.dmd a.dmd-btn,.dmd .dmd-btn>a{
color:#1B1B1B!important;background:var(--dmd-or-plein)!important;
border-color:var(--dmd-or-plein)!important;text-decoration:none!important}
.dmd .dmd-btn .elementor-button:hover,.dmd a.dmd-btn:hover{
background:var(--dmd-or-clair)!important;color:#1B1B1B!important}
.dmd .dmd-btn--clair .elementor-button{
color:#fff!important;background:transparent!important;
border-color:rgba(255,255,255,.45)!important}
.dmd .dmd-btn--clair .elementor-button:hover{
background:#fff!important;color:var(--dmd-noir)!important}/* Le widget bouton d'Elementor porte la classe utilitaire : seul le lien
interne doit recevoir le fond, la bordure et le rayon du bouton. */
.dmd .elementor-widget-button.dmd-btn{background:none!important;border:0!important;
padding:0!important;box-shadow:none!important;border-radius:0!important}
/* Boutons cote a cote comme sur la maquette, avec retour a la ligne aligne
a gauche quand la colonne devient trop etroite (gap de 14px). */
.dmd .elementor-widget-wrap>.elementor-widget-button.dmd-btn{width:auto;flex:0 0 auto;
margin:0 14px 12px 0}
.dmd .dmd-btn .elementor-button{display:inline-flex;align-items:center;
justify-content:center;white-space:nowrap}/* Une section imbriquee est un element de flex : sans largeur explicite elle
se retrecit sur son contenu. Une colonne dont le contenu n'a pas de largeur
propre, un iframe en 100 % par exemple, faisait alors s'effondrer la rangee. */
.dmd.elementor-section,.dmd .elementor-section{width:100%!important}
.dmd.elementor-section>.elementor-container,
.dmd .elementor-section>.elementor-container{width:100%}/* La colonne du module de reservation garde sa largeur : son contenu est un
iframe, qui n'a pas de largeur propre pour resister au retrecissement du
flex. C'est la colonne de texte qui absorbe la gouttiere. */
.dmd .dmd-col-resa{flex-shrink:0}/* Cadre du module de reservation : meme carte que la maquette, l'iframe
occupe toute la surface. */
.dmd-resa{width:100%;background:#fff;border-radius:var(--dmd-r);overflow:hidden;
border-top:3px solid var(--dmd-or-plein);
box-shadow:0 24px 60px rgba(6,27,43,.28)}
.dmd-resa iframe{display:block;width:100%;border:0;min-height:640px}
@media(max-width:767px){.dmd-resa iframe{min-height:560px}}/* L'accordeon ne depend plus d'une police d'icones : le signe est dessine
en CSS, il reste visible meme si Font Awesome n'est pas servi. */
.dmd .elementor-toggle-icon i{font-family:inherit!important;font-style:normal;
font-weight:400;display:inline-block;width:1em;text-align:center}
.dmd .elementor-toggle-icon i::before{content:"+";font-size:22px;line-height:1;
color:var(--dmd-or)}
.dmd .elementor-toggle-icon-opened i::before{content:"2"}/* Les liens « aller » des cartes restent discrets */
.dmd .dmd-lien-carte .elementor-button,.dmd .dmd-maillon .elementor-button{
color:var(--dmd-or)!important;background:none!important;border:0!important}/* Mega-menu : le theme ne doit pas recolorer les liens */
.dmd-mm .dmd-mm__lien,.dmd-mm .dmd-mm__liens a,.dmd-mm .dmd-mm__carte a,
.dmd-mm .dmd-mm__tel,.dmd-mm .dmd-mm__langue{color:var(--mm-nuit)!important;text-decoration:none!important}
.dmd-mm .dmd-mm__lien:hover,.dmd-mm .dmd-mm__liens a:hover,
.dmd-mm .dmd-mm__carte a:hover,.dmd-mm .dmd-mm__tel:hover,
.dmd-mm .dmd-mm__langue:hover{color:var(--mm-or)!important}
.dmd-mm .dmd-mm__item[data-ouvert="1"]>.dmd-mm__lien{color:var(--mm-or)!important}
.dmd-mm .dmd-mm__cta{color:#1B1B1B!important;background:var(--mm-or)!important;
text-decoration:none!important}
.dmd-mm .dmd-mm__cta:hover{background:#D9B84C!important;color:#1B1B1B!important}
.dmd-mm .dmd-mm__lien{white-space:nowrap}
.dmd-mm .dmd-mm__logo-nom{color:var(--mm-nuit)!important}
.dmd-mm .dmd-mm__logo-sous{color:var(--mm-doux)!important}
.dmd-mm a{box-shadow:none!important}
/* Le theme remet les SVG a une largeur automatique : sans intrinseque, ils
disparaissent. On rend donc leur taille explicite. */
.dmd-mm svg{flex:0 0 auto}
.dmd-mm .dmd-mm__burger{width:46px!important;height:46px!important;padding:0!important;
min-width:0!important;background:none!important;color:var(--mm-nuit)!important;
border:1px solid var(--mm-bord)!important;border-radius:10px!important}
.dmd-mm .dmd-mm__burger svg{width:22px!important;height:22px!important}
.dmd-mm .dmd-mm__langue svg{width:14px!important;height:14px!important}
.dmd-mm .dmd-mm__tel svg{width:15px!important;height:15px!important}
.dmd-mm .dmd-mm__lien svg{width:14px!important;height:14px!important}/* Dans le panneau mobile, le numero reprend sa place a cote de l'icone */
@media(max-width:1023px){
.dmd-mm .dmd-mm__tel span{display:inline}
}/* Marges laterales sur mobile : la maquette ne colle jamais au bord */
@media(max-width:767px){
.dmd.elementor-top-section>.elementor-container{padding-left:20px;padding-right:20px}
.dmd .elementor-widget-wrap>.elementor-widget-button.dmd-btn{width:100%;margin-right:0}
}/* Le voile laisse voir la photo */
.dmd-fond-sombre::before{
background:linear-gradient(102deg,rgba(6,27,43,.74) 0%,rgba(6,27,43,.48) 42%,rgba(6,27,43,.20) 100%)}
/* La bande de conversion porte du texte sur toute sa largeur : le voile y
reste soutenu des deux cotes, sinon la liste de droite devient illisible. */
.dmd-fond-sombre--conv::before{
background:linear-gradient(95deg,rgba(6,27,43,.90),rgba(6,27,43,.80))}/* Le mega-menu est desormais l'en-tete du site : rien a masquer, mais la
zone d'en-tete ne doit imposer ni marge, ni fond, ni largeur au menu.
C'est la barre elle-meme qui centre son contenu, sur 1280 px. */
.elementor-location-header{margin:0;padding:0;background:none}
.elementor-location-header>.elementor-section,
.elementor-location-header .dmd-entete{width:100%!important;max-width:none!important;margin:0}
.elementor-location-header>.elementor-section>.elementor-container,
.elementor-location-header .dmd-entete>.elementor-container{
width:100%!important;max-width:none!important;margin:0;padding:0}
.dmd-entete .elementor-column,
.dmd-entete .elementor-widget-wrap,
.dmd-entete .elementor-widget-wrap>.elementor-element{width:100%}
.dmd-entete .elementor-widget-wrap{padding:0}
/* Les widgets qui ne portent qu'une feuille de style ou un script ne doivent
occuper aucune place : sinon Elementor leur laisse sa marge habituelle. */
.dmd-ressources{display:none!important}.dmd-rv{opacity:1;transform:none}
html.dmd-js .dmd-rv{opacity:0;transform:translateY(20px)}
html.dmd-js .dmd-rv.dmd-vu{opacity:1;transform:none}
/*!
* Drive me Driver — Interactions de la page d'accueil
* 1. Calcul de l'heure de prise en charge (suivi de vol)
* 2. Révélation des blocs au défilement
*/
(function () {
'use strict';/* ---------------------------------------------------------------------
1. Heure de prise en charge
--------------------------------------------------------------------- */
function initCalc(bloc) {
if (!bloc || bloc.dataset.dmdInit === '1') { return; }
bloc.dataset.dmdInit = '1';var att = bloc.querySelector('[data-dmd="atterrissage"]');
var ret = bloc.querySelector('[data-dmd="retard"]');
var sor = bloc.querySelector('[data-dmd="sortie"]');
var vol = bloc.querySelector('[data-dmd="vol"]');
var res = bloc.querySelector('[data-dmd="resultat"]');
var valRetard = bloc.querySelector('[data-dmd="retard-val"]');
var rappelVol = bloc.querySelector('[data-dmd="rappel-vol"]');if (!att || !res) { return; }function calculer() {
var parts = (att.value || '14:00').split(':');
var heures = parseInt(parts[0], 10);
var minutes = parseInt(parts[1], 10);
if (isNaN(heures) || isNaN(minutes)) { return; }var retard = ret ? parseInt(ret.value, 10) || 0 : 0;
var sortie = sor ? parseInt(sor.value, 10) || 0 : 0;
var total = heures * 60 + minutes + retard + sortie;
total = ((total % 1440) + 1440) % 1440;var hh = String(Math.floor(total / 60)).padStart(2, '0');
var mm = String(total % 60).padStart(2, '0');
res.textContent = hh + ':' + mm;if (valRetard) { valRetard.textContent = retard + ' min'; }
if (rappelVol) {
var v = vol && vol.value ? vol.value.trim().toUpperCase() : '';
rappelVol.textContent = v || 'indiqué';
}
}[att, ret, sor, vol].forEach(function (champ) {
if (champ) { champ.addEventListener('input', calculer); }
});
calculer();
}/* ---------------------------------------------------------------------
2. Révélation au défilement
--------------------------------------------------------------------- */
function initReveal() {
// Signale au garde-fou que l'animation est bien prise en charge.
document.documentElement.setAttribute('data-dmd-anim', '1');var blocs = document.querySelectorAll('.dmd-rv:not(.dmd-vu)');
if (!blocs.length) { return; }var doux = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (doux || !('IntersectionObserver' in window)) {
blocs.forEach(function (el) { el.classList.add('dmd-vu'); });
return;
}var io = new IntersectionObserver(function (entrees) {
entrees.forEach(function (en) {
if (!en.isIntersecting) { return; }
en.target.classList.add('dmd-vu');
io.unobserve(en.target);
});
}, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' });blocs.forEach(function (el) { io.observe(el); });
}function demarrer() {
document.querySelectorAll('[data-dmd-calc]').forEach(initCalc);
initReveal();
}if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', demarrer);
} else {
demarrer();
}window.addEventListener('elementor/frontend/init', function () {
if (!window.elementorFrontend || !elementorFrontend.hooks) { return; }
elementorFrontend.hooks.addAction('frontend/element_ready/dmd_prise_en_charge.default', function ($scope) {
var el = $scope && $scope[0] ? $scope[0].querySelector('[data-dmd-calc]') : null;
if (el) { el.dataset.dmdInit = '0'; initCalc(el); }
});
elementorFrontend.hooks.addAction('frontend/element_ready/global', function () { initReveal(); });
});
})();(function(){
var r=document.querySelector('.dmd-mm'); if(!r) return;
var b=r.querySelector('.dmd-mm__burger');
if(b) b.addEventListener('click',function(){
var o=r.dataset.mobile==='1'; r.dataset.mobile=o?'0':'1';
b.setAttribute('aria-expanded',o?'false':'true');
});
var mq=window.matchMedia('(min-width:1024px)'), t=null;
r.querySelectorAll('.dmd-mm__item').forEach(function(it){
var d=it.querySelector('.dmd-mm__lien'), p=it.querySelector('.dmd-mm__panneau');
if(!d||!p) return;
function set(o){ it.dataset.ouvert=o?'1':'0';
if(d.hasAttribute('aria-expanded')) d.setAttribute('aria-expanded',o?'true':'false'); }
it.addEventListener('mouseenter',function(){ if(!mq.matches) return;
clearTimeout(t); t=setTimeout(function(){
r.querySelectorAll('.dmd-mm__item').forEach(function(x){ if(x!==it) x.dataset.ouvert='0'; });
set(true); },90); });
it.addEventListener('mouseleave',function(){ if(!mq.matches) return;
clearTimeout(t); t=setTimeout(function(){ set(false); },180); });
if(d.tagName==='BUTTON') d.addEventListener('click',function(e){ e.preventDefault();
var o=it.dataset.ouvert==='1';
r.querySelectorAll('.dmd-mm__item').forEach(function(x){ x.dataset.ouvert='0'; });
set(!o); });
});
document.addEventListener('click',function(e){ if(r.contains(e.target)) return;
r.querySelectorAll('.dmd-mm__item').forEach(function(x){ x.dataset.ouvert='0'; }); });
r.addEventListener('keydown',function(e){ if(e.key!=='Escape') return;
r.querySelectorAll('.dmd-mm__item').forEach(function(x){ x.dataset.ouvert='0'; }); });
})();(function(){
function init(){
var c=document.getElementById('dmd-reservation'); if(!c) return;
window.addEventListener('message',function(e){
if(e.source!==c.contentWindow) return;
var d=e.data; if(!d||d.type!=='dmd:height') return;
var h=parseInt(d.height,10);
if(h>200&&h<6000) c.style.height=h+'px';
});
}
if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',init);
else init();
})();document.body.classList.add('dmd-page');
/* ==========================================================================
Maquette SXO — gabarit de page service, mise en page éditoriale à colonne
latérale. Reprise fidèle de la maquette fournie, moins le ruban, l'en-tête,
le méga-menu, le pied de page et la barre mobile : ceux du site restent en
place et ne sont pas touchés.TOUT est porté par « .mq ». Aucune règle ne sort de ce conteneur, donc rien
ne peut déborder sur l'en-tête, le menu, le pied de page ou WooCommerce.
========================================================================== */.mq{
--or-fonce:#8A6A16;
--or-plein:#C9A227;
--or-clair-v:#D9B84C;
--or:var(--or-fonce); --or-2:var(--or-plein); --or-clair:var(--or-clair-v);
--encre:#1B1B1B; --blanc:#FFFFFF;
--noir:#071A2B;
--surface:#102D46;
--bord:#2C4A66;
--gris:#F7F7F5; --gris-2:#E3E5E6; --gris-3:#66717B;
--r:15px; --r-pill:50px; --shell:1240px;
--police:'Roboto','Helvetica Neue',Helvetica,Arial,system-ui,sans-serif;font-family:var(--police);font-weight:300;font-size:16px;line-height:1.62;
color:var(--encre);background:var(--blanc);-webkit-font-smoothing:antialiased;
}
.mq *,.mq *::before,.mq *::after{box-sizing:border-box}
.mq img{max-width:100%;display:block}
.mq a{color:inherit}
.mq .shell{max-width:var(--shell);margin:0 auto;padding:0 24px}
.mq h1,.mq h2,.mq h3,.mq h4{font-weight:600;margin:0}
.mq h1{font-size:clamp(29px,3.9vw,40px);line-height:1.1}
.mq h2{font-size:clamp(23px,2.6vw,25px);line-height:1.28;color:var(--surface)}
.mq h3{font-size:20px;line-height:1.32}
.mq p{margin:0 0 18px}
.mq strong,.mq b{font-weight:600}
.mq ul,.mq ol{margin:0;padding:0}/* boutons */
.mq .btn{display:inline-block;font-size:20px;font-weight:500;color:#1B1B1B;background:var(--or-2);
border:1px solid var(--or-2);border-radius:var(--r);padding:15px 30px;text-decoration:none;
cursor:pointer;font-family:var(--police);transition:background .18s,transform .18s,color .18s}
.mq .btn:hover{background:var(--or-clair-v);border-color:var(--or-clair-v);transform:translateY(-2px);color:#1B1B1B}
.mq .btn.sm{font-size:15px;padding:11px 22px}
.mq .btn.ligne{background:transparent;color:var(--encre);border-color:var(--gris-3)}
.mq .btn.ligne:hover{background:var(--surface);color:var(--blanc);border-color:var(--surface)}
.mq .btn.noir{background:var(--surface);border-color:var(--surface);color:var(--blanc)}
.mq .btn.noir:hover{background:var(--noir);border-color:var(--noir)}/* ---------- hero clair asymétrique ---------- */
.mq .hero{background:var(--gris);border-bottom:1px solid var(--gris-2);overflow:hidden}
.mq .hero .in{max-width:var(--shell);margin:0 auto;display:grid;grid-template-columns:1fr 42%;
gap:56px;align-items:center;padding-left:24px}
.mq .hero .txt{padding:72px 0}
.mq .hero .fil{list-style:none;margin:0 0 22px;padding:0;display:flex;flex-wrap:wrap;gap:8px;
align-items:center;font-size:13px;color:#66717B}
.mq .hero .fil a{text-decoration:none}
.mq .hero .fil a:hover{color:var(--or);text-decoration:underline}
.mq .hero h1{margin-bottom:20px}
.mq .hero h1 em{font-style:normal;color:var(--or)}
.mq .hero .chapo{font-size:17px;color:#4A5560;max-width:36em;margin-bottom:26px}
.mq .hero .chapo strong{color:var(--encre)}
.mq .hero .actions{display:flex;gap:14px;flex-wrap:wrap;align-items:center}
.mq .hero .tel{font-size:15px;font-weight:500;text-decoration:none;border-bottom:1px solid var(--or-2);
padding-bottom:2px}
.mq .hero .photo{position:relative;align-self:stretch;min-height:420px}
.mq .hero .photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
border-radius:var(--r) 0 0 var(--r)}
.mq .hero .cachet{position:absolute;left:-38px;bottom:38px;background:var(--surface);color:var(--blanc);
border-radius:var(--r);padding:18px 22px;max-width:250px;box-shadow:0 22px 44px rgba(0,0,0,.28)}
.mq .hero .cachet b{display:block;color:var(--or-clair);font-size:26px;line-height:1;font-weight:600;
margin-bottom:6px}
.mq .hero .cachet span{font-size:13.5px;color:#C3CDD6}/* ---------- bande de réservation ---------- */
.mq .moteur{background:var(--surface);color:var(--blanc)}
.mq .moteur .in{display:grid;grid-template-columns:300px 1fr;gap:34px;align-items:start;padding:34px 0}
.mq .moteur .titre{font-size:20px;font-weight:600;color:var(--or-clair);line-height:1.3;margin:0 0 10px}
.mq .moteur p{font-size:14.5px;color:#C3CDD6;margin:0 0 14px}
.mq .moteur .note{font-size:12.5px;color:#8E9CA9;margin:0}
.mq .moteur .cadre{background:var(--blanc);border-radius:var(--r);overflow:hidden;
box-shadow:0 26px 60px rgba(0,0,0,.34)}
.mq .moteur iframe{display:block;width:100%;border:0;height:720px}/* ---------- corps éditorial ---------- */
.mq .corps{padding:72px 0 88px}
.mq .corps .in{display:grid;grid-template-columns:250px 1fr;gap:64px;align-items:start}
.mq .aside{position:sticky;top:110px}
.mq .aside .lab{font-size:11px;font-weight:600;letter-spacing:.11em;text-transform:uppercase;
color:var(--gris-3);margin-bottom:14px}
.mq .aside ol{list-style:none;margin:0 0 30px;padding:0;counter-reset:s}
.mq .aside li{counter-increment:s}
.mq .aside ol a{display:flex;gap:12px;padding:9px 12px;border-radius:8px;text-decoration:none;
font-size:14.5px;color:#5A646E;border-left:2px solid transparent}
.mq .aside ol a::before{content:counter(s,decimal-leading-zero);font-size:11.5px;font-weight:600;
color:var(--gris-3);padding-top:3px}
.mq .aside ol a:hover{background:var(--gris);color:var(--encre)}
.mq .aside ol a.actif{color:var(--encre);font-weight:500;border-left-color:var(--or-2);background:var(--gris)}
.mq .aside ol a.actif::before{color:var(--or)}
.mq .aide{border:1px solid var(--gris-2);border-radius:var(--r);padding:20px;background:var(--gris)}
.mq .aide h3{font-size:15.5px;margin-bottom:8px}
.mq .aide p{font-size:13.5px;color:#5A646E;margin-bottom:14px}
.mq .aide a{display:block;text-decoration:none;font-weight:500;font-size:15px;color:var(--encre);
border-top:1px solid var(--gris-2);padding-top:11px;margin-top:11px}
.mq .aide a:first-of-type{border-top:0;padding-top:0;margin-top:0}
.mq .aide a:hover{color:var(--or)}.mq article>section{padding:0 0 64px;scroll-margin-top:130px}
.mq article>section:last-child{padding-bottom:0}
.mq .num{display:block;font-size:12px;font-weight:600;letter-spacing:.13em;color:var(--or);
margin-bottom:10px}
.mq article h2{margin-bottom:18px}
.mq article h3{margin:34px 0 12px;font-size:19px}
.mq article .lead{font-size:17.5px;color:#4A5560}
.mq .regle{height:1px;background:var(--gris-2);margin:0 0 58px}/* faits clés */
.mq .faits{display:grid;grid-template-columns:repeat(2,1fr);gap:0;border:1px solid var(--gris-2);
border-radius:var(--r);overflow:hidden;margin:28px 0 0}
.mq .faits div{padding:20px 22px;border-bottom:1px solid var(--gris-2)}
.mq .faits div:nth-child(odd){border-right:1px solid var(--gris-2)}
.mq .faits div:nth-last-child(-n+2){border-bottom:0}
.mq .faits dt{font-size:11.5px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;
color:var(--gris-3);margin-bottom:5px}
.mq .faits dd{margin:0;font-size:16px;font-weight:500}/* photo pleine largeur */
.mq .bande{position:relative;margin:8px 0 44px;border-radius:var(--r);overflow:hidden}
.mq .bande img{width:100%;height:100%;object-fit:cover;aspect-ratio:21/9}
.mq .bande figcaption{position:absolute;left:0;right:0;bottom:0;padding:52px 24px 18px;
background:linear-gradient(0deg,rgba(7,26,43,.72),rgba(0,0,0,0));color:var(--blanc);font-size:14px}
.mq .bande figcaption b{color:var(--or-clair);font-weight:600}/* module d'orientation */
.mq .calc{border:1px solid var(--or-2);border-radius:var(--r);
background:linear-gradient(180deg,rgba(201,162,39,.08),transparent);padding:26px;margin:30px 0}
.mq .calc h3{margin:0 0 4px;font-size:18px}
.mq .calc .st{font-size:14px;color:#5A646E;margin-bottom:20px}
.mq .calc-ligne{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;align-items:end}
.mq .champ label{display:block;font-size:11px;font-weight:600;letter-spacing:.09em;
text-transform:uppercase;color:#66717B;margin-bottom:7px}
.mq .champ select{width:100%;font-family:var(--police);font-size:15px;color:var(--encre);
background:var(--blanc);border:1px solid var(--gris-2);border-radius:8px;padding:12px 13px}
.mq .champ select:focus{border-color:var(--or-2);outline:none}
.mq .sortie{margin-top:22px;padding:20px 22px;border-radius:var(--r);background:var(--blanc);
border:1px dashed var(--or-2)}
.mq .sortie small{display:block;font-size:11.5px;font-weight:600;letter-spacing:.09em;
text-transform:uppercase;color:#66717B;margin-bottom:6px}
.mq .sortie .reco{font-size:20px;font-weight:600;color:var(--or);line-height:1.3;display:block}
.mq .sortie p{font-size:14px;color:#4A5560;margin:10px 0 0}/* listes de contexte */
.mq .communes{display:flex;flex-wrap:wrap;gap:9px;margin:22px 0 0;padding:0;list-style:none}
.mq .communes li{background:var(--gris);border:1px solid var(--gris-2);border-radius:var(--r-pill);
padding:8px 17px;font-size:14.5px}
.mq .communes li.fort{border-color:var(--or-2);font-weight:500}
.mq .avantages{list-style:none;margin:24px 0 0;padding:0;display:grid;gap:14px}
.mq .avantages li{display:flex;gap:13px;font-size:15.5px;align-items:flex-start}
.mq .avantages li::before{content:"";width:9px;height:9px;border-radius:50%;background:var(--or-2);
margin-top:8px;flex:0 0 auto}/* preuve en bandeau */
.mq .preuve{border-top:1px solid var(--gris-2);border-bottom:1px solid var(--gris-2);
background:var(--gris);padding:34px 0;margin:0 0 58px}
.mq .preuve .in{display:grid;grid-template-columns:repeat(4,1fr);gap:24px}
.mq .preuve b{display:block;font-size:24px;font-weight:600;color:var(--or-fonce);line-height:1;
margin-bottom:6px}
.mq .preuve span{font-size:13.5px;color:#5A646E}/* FAQ */
.mq .q{border-bottom:1px solid var(--gris-2)}
.mq .q:first-of-type{border-top:1px solid var(--gris-2)}
.mq .q button{width:100%;text-align:left;background:none;border:0;padding:19px 44px 19px 0;
font-family:var(--police);font-size:17px;font-weight:500;color:var(--encre);cursor:pointer;
position:relative}
.mq .q button::after{content:"+";position:absolute;right:6px;top:50%;transform:translateY(-50%);
font-size:22px;color:var(--or);transition:transform .22s}
.mq .q[data-open="1"] button::after{transform:translateY(-50%) rotate(45deg)}
.mq .q .rep{max-height:0;overflow:hidden;transition:max-height .3s ease}
.mq .q[data-open="1"] .rep{max-height:620px}
.mq .q .rep p{padding:0 0 20px;margin:0;font-size:15.5px;color:#4A5560}
.mq .q .rep a{color:var(--or)}/* maillage en listes */
.mq .liens{display:grid;grid-template-columns:1fr 1fr;gap:0 40px;margin-top:22px}
.mq .liens a{display:flex;align-items:baseline;gap:12px;padding:13px 0;
border-bottom:1px solid var(--gris-2);text-decoration:none;font-size:15.5px}
.mq .liens a::before{content:"\2192";color:var(--or-2);font-size:14px}
.mq .liens a:hover{color:var(--or)}
.mq .sstitre{font-size:11.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
color:var(--gris-3);margin:34px 0 4px}/* conversion claire */
.mq .conv{background:linear-gradient(120deg,#102D46,#163A58);color:var(--blanc)}
.mq .conv .in{display:grid;grid-template-columns:1.2fr .8fr;gap:44px;align-items:center;padding:60px 0}
.mq .conv h2{font-size:clamp(24px,2.8vw,29px);margin-bottom:12px;color:var(--blanc)}
.mq .conv p{color:#C3CDD6;margin-bottom:0;max-width:34em}
.mq .conv .actions{display:flex;gap:12px;flex-wrap:wrap;justify-content:flex-end}
.mq .conv .btn.noir{background:var(--or-2);border-color:var(--or-2);color:#1B1B1B}
.mq .conv .btn.ligne{border-color:rgba(255,255,255,.45);color:var(--blanc)}
.mq .conv .btn.ligne:hover{background:var(--blanc);color:var(--noir);border-color:var(--blanc)}.mq .rv{opacity:0;transform:translateY(18px);
transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1)}
.mq .rv.vu{opacity:1;transform:none}
.mq :focus-visible{outline:3px solid var(--or-2);outline-offset:3px;border-radius:4px}
@media (prefers-reduced-motion:reduce){
.mq *{animation:none!important;transition:none!important}
.mq .rv{opacity:1;transform:none}
}@media(max-width:1080px){
.mq .hero .in{grid-template-columns:1fr;gap:0;padding:0 24px}
.mq .hero .txt{padding:56px 0 32px}
.mq .hero .photo{min-height:0;aspect-ratio:16/9;margin:0 -24px}
.mq .hero .photo img{position:relative;border-radius:0}
.mq .hero .cachet{left:24px;bottom:24px}
.mq .moteur .in{grid-template-columns:1fr;gap:20px}
.mq .corps .in{grid-template-columns:1fr;gap:34px}
.mq .aside{position:static}
.mq .aside ol{display:flex;gap:6px;overflow-x:auto;margin-bottom:20px;
border-bottom:1px solid var(--gris-2)}
.mq .aside ol a{white-space:nowrap;border-left:0;border-bottom:2px solid transparent;
border-radius:8px 8px 0 0}
.mq .aside ol a.actif{border-left:0;border-bottom-color:var(--or-2)}
.mq .calc-ligne{grid-template-columns:1fr 1fr}
.mq .conv .in{grid-template-columns:1fr;gap:26px;padding:48px 0}
.mq .conv .actions{justify-content:flex-start}
}
@media(max-width:620px){
.mq .moteur .in,.mq .calc-ligne,.mq .faits,.mq .liens,.mq .preuve .in{grid-template-columns:1fr}
.mq .faits div{border-right:0!important;border-bottom:1px solid var(--gris-2)!important}
.mq .faits div:last-child{border-bottom:0!important}
.mq .btn{width:100%;text-align:center;font-size:17px;padding:14px 22px}
.mq .hero .actions{flex-direction:column;align-items:stretch}
.mq .bande img{aspect-ratio:4/3}
.mq .corps{padding:48px 0 64px}
.mq .moteur iframe{height:780px}
}
@media(max-width:360px){.mq .shell{padding:0 16px}}
/* ==========================================================================
Maquette SXO — composants complémentaires
Ajouts nécessaires aux pages services : tableaux de tarifs, étapes
numérotées, cartes d'articles, itinéraires, bandeau de preuve à trois
colonnes, bande de devis. Même portée que le gabarit : tout est sous « .mq ».
========================================================================== *//* ---------- bande de devis (pages sans module de réservation) ------------- */
.mq .moteur.devis .in{grid-template-columns:1.25fr .75fr;align-items:center;padding:30px 0}
.mq .moteur.devis .actions{display:flex;gap:12px;flex-wrap:wrap;justify-content:flex-end}
.mq .moteur.devis .btn.noir{background:var(--or-2);border-color:var(--or-2);color:#1B1B1B}
.mq .moteur.devis .btn.ligne{border-color:rgba(255,255,255,.45);color:var(--blanc)}
.mq .moteur.devis .btn.ligne:hover{background:var(--blanc);color:var(--noir);border-color:var(--blanc)}/* ---------- tableau de tarifs -------------------------------------------- */
.mq .tableau{margin:26px 0 0;border:1px solid var(--gris-2);border-radius:var(--r);overflow:auto}
.mq .tableau table{width:100%;border-collapse:collapse;font-size:15.5px;min-width:520px}
.mq .tableau th{background:var(--surface);color:var(--blanc);font-weight:600;font-size:12px;
letter-spacing:.08em;text-transform:uppercase;text-align:left;padding:14px 18px}
.mq .tableau td{padding:15px 18px;border-top:1px solid var(--gris-2);vertical-align:top}
.mq .tableau tbody tr:nth-child(even){background:var(--gris)}
.mq .tableau td:last-child{font-weight:600;color:var(--or);white-space:nowrap}
.mq .tableau a{color:var(--or);text-decoration:underline;text-underline-offset:2px}
.mq .note-tableau{font-size:13px;color:#5A646E;margin:12px 0 0}/* ---------- étapes numérotées -------------------------------------------- */
.mq .etapes{list-style:none;counter-reset:e;margin:26px 0 0;padding:0;display:grid;gap:14px}
.mq .etapes li{counter-increment:e;display:flex;gap:16px;align-items:flex-start;
border:1px solid var(--gris-2);border-radius:var(--r);padding:18px 20px;background:var(--blanc)}
.mq .etapes li::before{content:counter(e,decimal-leading-zero);font-size:13px;font-weight:600;
letter-spacing:.06em;color:var(--or);background:var(--gris);border-radius:8px;
padding:7px 10px;flex:0 0 auto}
.mq .etapes li strong{display:block;margin-bottom:2px}/* ---------- cartes (articles, prestations) -------------------------------- */
.mq .cartes{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:26px}
.mq .cartes a{display:flex;flex-direction:column;gap:8px;text-decoration:none;
border:1px solid var(--gris-2);border-radius:var(--r);padding:20px;background:var(--blanc);
transition:border-color .18s,transform .18s,box-shadow .18s}
.mq .cartes a:hover{border-color:var(--or-2);transform:translateY(-3px);
box-shadow:0 18px 38px rgba(7,26,43,.09)}
.mq .cartes .eti{font-size:11px;font-weight:600;letter-spacing:.11em;text-transform:uppercase;
color:var(--or)}
.mq .cartes .tit{font-size:16.5px;font-weight:500;line-height:1.38;color:var(--encre)}/* ---------- itinéraire (circuits) ---------------------------------------- */
.mq .itineraire{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:22px 0 16px;
padding:18px 20px;border-radius:var(--r);background:var(--gris);border:1px solid var(--gris-2);
font-size:15px;font-weight:500}
.mq .itineraire span{background:var(--blanc);border:1px solid var(--gris-2);border-radius:var(--r-pill);
padding:6px 14px}
.mq .itineraire i{font-style:normal;color:var(--or-2);font-weight:600}/* ---------- encart avis (widget conservé) --------------------------------- */
.mq .avis{border:1px dashed var(--gris-2);border-radius:var(--r);padding:26px;background:var(--gris)}
.mq .avis .lab{font-size:11.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
color:var(--gris-3);margin-bottom:8px}/* ---------- bandeau de preuve à trois colonnes ---------------------------- */
.mq .preuve.trois .in{grid-template-columns:repeat(3,1fr)}/* ---------- variantes utilitaires ---------------------------------------- */
.mq .duo{display:grid;grid-template-columns:1fr 1fr;gap:26px;margin-top:26px}
.mq .duo .bloc{border:1px solid var(--gris-2);border-radius:var(--r);padding:22px}
.mq .duo .bloc h3{margin:0 0 10px;font-size:18px}
.mq .duo .bloc p:last-child{margin-bottom:0}@media(max-width:1080px){
.mq .cartes{grid-template-columns:1fr 1fr}
.mq .moteur.devis .in{grid-template-columns:1fr}
.mq .moteur.devis .actions{justify-content:flex-start}
}
@media(max-width:620px){
.mq .cartes,.mq .duo,.mq .preuve.trois .in{grid-template-columns:1fr}
.mq .etapes li{flex-direction:column;gap:10px}
}/* ---------- garde-fou anti-débordement horizontal ------------------------- */
/* Sans min-width:0, une colonne de grille prend la largeur de son contenu :
le sommaire qui défile et les tableaux larges élargissaient alors la page
entière sur mobile. */
.mq .corps .in > *{min-width:0}
.mq .aside,.mq article{min-width:0}
.mq .aside ol{-webkit-overflow-scrolling:touch}
/* Les grilles à une colonne doivent pouvoir descendre sous la largeur
minimale de leur contenu, sinon une puce contenant des espaces insécables
élargit toute la section. */
.mq .avantages,.mq .etapes{grid-template-columns:minmax(0,1fr)}
.mq .avantages li,.mq .communes li,.mq .etapes li,.mq .liens a,.mq .faits div,
.mq .itineraire,.mq .cartes a{min-width:0;overflow-wrap:break-word}
.mq .tableau{max-width:100%}
.mq .itineraire span{min-width:0;overflow-wrap:break-word}/* ---------- puces : passage en flux normal -------------------------------- */
/* En display:flex, chaque lien d'une puce devenait un élément flexible posé
sur la même ligne : le texte débordait dès qu'une puce contenait plusieurs
liens. La puce redevient un bloc, la pastille passe en absolu. */
.mq .avantages li{display:block;position:relative;padding-left:22px}
.mq .avantages li::before{position:absolute;left:0;top:10px;margin-top:0}
.mq .etapes li{display:block;position:relative;padding-left:62px}
.mq .etapes li::before{position:absolute;left:20px;top:18px}/* ---------- bande de titre précédant un widget WordPress ------------------ */
.mq .bande-titre{padding:56px 0 26px;background:var(--gris);border-top:1px solid var(--gris-2)}
.mq .bande-titre h2{margin:0}
.mq .bande-titre p{margin:12px 0 0;max-width:46em;color:#4A5560}
.mq .bande-titre + .bande-titre{border-top:0}/* ---------- module de réservation ---------------------------------------- */
/* L'en-tête du site est collant : sans marge de défilement, le bouton
« Estimer mon trajet » amenait le module sous le menu. */
.mq .moteur{scroll-margin-top:110px;position:relative}
.mq .moteur .ancre{position:absolute;top:-110px;left:0;width:1px;height:1px}
/* Hauteur portée aussi par l'attribut de l'iframe, au cas où la feuille de
style serait différée. */
.mq .moteur iframe{min-height:600px}
Profitez de notre service VTC de l'aéroport de Zurich
Cette contrainte n’épargne aucun voyageur : le transport depuis ou vers l’aéroport. Entre les prix coûteux des parkings longue durée et les difficultés pour trouver un taxi en descendant de l’avion, il y a de quoi se faire des nœuds au cerveau. Avec des services personnalisés qui s’adaptent à tous vos besoins et exigences, Drive me Driver vous propose d’en finir avec ces problématiques qui vous causent tant de stress.
2h à 2h30De route entre Strasbourg et Zurich, selon le trafic
Estimez votre trajet en quelques secondes
Indiquez votre adresse de départ, votre destination et votre horaire : le tarif s’affiche avant validation.
Prix fixe, connu à la réservation. Bagages compris, sans supplément.
01 — Notre service
Drive me Driver : un service professionnel haut de gamme
Pour vous rendre à l’aéroport de Zurich (ZRH) ou pour rejoindre votre hôtel, vous pouvez compter sur la grande disponibilité de nos chauffeurs professionnels. Plus qu’un simple transfert, Drive me Driver vous propose une expérience de luxe lors de chacun de vos trajets entre la France et la Suisse.
Berlines premium et vans · wifi et climatisation dans toutes les classes
Désireux de combler toutes vos attentes, nous vous invitons à voyager dans des véhicules modernes, confortables et parfaitement entretenus. Profitez de conditions optimales pour travailler sur vos dossiers en toute tranquillité pendant le trajet, ou tout simplement pour vous reposer. Votre chauffeur privé vous déposera directement à l’adresse de votre choix, en porte à porte.
02 — Nos engagements
VTC aéroport de Zurich : pourquoi choisir Drive me Driver ?
Notre entreprise de VTC s’engage à vous offrir un service irréprochable. Depuis ou vers l’aéroport de Zurich, pour un trajet rapide ou un itinéraire prolongé, nous mettons tout en œuvre pour vous offrir une expérience agréable et efficace, quelle que soit la distance à parcourir entre l’Alsace et la Suisse.
Un niveau de confort optimal
Nos chauffeurs professionnels vous accueillent dans des berlines premium ou des vans modernes et spacieux. Dans ces véhicules soigneusement équipés et entretenus, vous profiterez du wifi et de la climatisation, quelle que soit la classe de véhicule choisie.
Naturellement, le coffre de notre berline sera mis à votre disposition pour installer tous vos bagages. À votre arrivée à l’adresse indiquée, votre chauffeur privé se fera un plaisir de vous remettre vos effets personnels avant de vous souhaiter un agréable séjour.
Une ponctualité garantie
Votre avion décolle ou atterrit très tôt le matin ou en plein milieu de la nuit ? À votre service, les chauffeurs de Drive me Driver sont disponibles 7 jours sur 7 et 24 heures sur 24.
Bien décidés à rendre votre voyage agréable, ils vous accueillent avec le sourire de jour comme de nuit. Ils suivent le trafic sur l’autoroute en temps réel pour calculer le meilleur itinéraire et vous conduire à destination à l’heure indiquée, avec un temps d’attente minimal.
Une communication transparente
Avec Drive me Driver, aucun risque de mauvaise surprise. Dès votre prise de contact avec notre équipe, vous obtenez des informations claires et précises sur les offres et tarifs pratiqués. Vous pouvez réserver en ligne et connaître à l’avance le prix exact de votre transfert depuis ou vers l’aéroport de Zurich, avec un tarif fixe et sans surprise en cas d’annulation.
Avec des solutions personnalisées et des tarifs abordables, Drive me Driver facilite vos déplacements sans faire exploser votre budget.
Des chauffeurs professionnels
Drive me Driver, c’est aussi l’assurance de bénéficier de l’expertise de chauffeurs professionnels. Courtois, fiables, multilingues et expérimentés, ils assurent la sécurité des voyageurs tout au long du trajet, y compris lors du passage de la frontière franco-suisse, tout en offrant un service de conseilde qualité.
N’hésitez pas à les solliciter pour obtenir des informations locales.
Un service de VTC personnalisé et adapté
Chez Drive me Driver, nous nous appliquons à répondre aux besoins et attentes de tous nos clients. Pour ce faire, nous proposons différentes options, parmi lesquelles le choix du type de véhicule ou la mise à disposition d’un espace supplémentaire pour vos bagages.
Vous pouvez aussi prévoir des étapes sur votre trajet, ou même envisager de commencer votre séjour par une escapade à Europa Park avant de rejoindre la Suisse. Que vous partiez en famille avec la navette VTC Strasbourg – Europa-Park avec sièges bébé et auto, en groupe avec notre van VTC 7 places Strasbourg ↔ Europa-Park, ou pour un simple transfert Strasbourg vers Europa-Park à prix fixe, nous adaptons le véhicule à votre besoin. Prenez le temps de formuler vos souhaits lors de votre réservation : nos chauffeurs se feront un plaisir de suivre votre itinéraire à la lettre, à l’image d’un chauffeur privé sur-mesure.
03 — Flotte
Choisissez votre véhicule selon vos besoins
Bien consciente que la notion de confort est primordiale, l’équipe de Drive me Driver a constitué une flotte de véhicules en mesure d’offrir les meilleures conditions de transport.
Seul, à deux ou en groupe · un service direct et sans correspondance
Après un long vol parfois épuisant, nos chauffeurs vous invitent à vous installer confortablement dans d’élégantes berlines. Tout comme les vans, elles sont sélectionnées avec le plus grand soin. Notre objectif : vous offrir les équipements les plus modernes pour assurer votre confort, quel que soit le nombre de passagers.
Avec Drive me Driver, vous pouvez voyager seul, à deux ou en groupe, pour le plaisir ou pour les affaires. Dans tous les cas, vous accédez facilement à un service de VTC irréprochable, direct et sans correspondance.
04 — Tourisme
Découvrez Zurich avec Drive me Driver
Bienvenue chez Drive me Driver, où votre trajet en voiture ne ressemble pas à un simple déplacement. Si vous le souhaitez, notre chauffeur enrichira votre expérience en ajoutant une dimension touristique à cette course.
Fin connaisseur de Zurich et de ses environs, cet expert de la route vous fera découvrir la ville la plus peuplée de Suisse. Laissez-vous guider à travers ses rues pittoresques et découvrez ses plus beaux sites touristiques.
Zurich est réputée pour son centre historique débordant de charme, ses musées et sa gastronomie. Les chauffeurs de Drive me Driver vous offriront de précieuses informations pour organiser votre séjour dans la première ville de Suisse.
C’est une chance unique qui vous est offerte par notre service de VTC: transformer vos déplacements pratiques en de véritables opportunités touristiques. Nous appliquons la même exigence de service sur nos trajets à Strasbourg, notamment pour notre VTC Parlement Européen Strasbourg, pensé pour les déplacements professionnels et institutionnels.
À destination ou au départ de l’aéroport de Zurich, comptez sur Drive me Driver pour profiter d’une expérience de transport exceptionnelle en termes de sécurité, de ponctualité et de confort. En choisissant nos services personnalisés, vous révolutionnerez vos déplacements et profiterez de chaque minute de vos voyages à l’international !
05 — Questions fréquentes
Questions fréquentes
Le tarif est fixe et communiqué à l’avance lors de votre réservation, sans surprise à l’arrivée. Il dépend du type de véhicule choisi et du point de prise en charge.
Vous pouvez réserver en ligne en quelques clics, en indiquant votre lieu de prise en charge, votre destination et l’horaire souhaité. Notre équipe confirme rapidement votre réservation.
Comptez en moyenne entre deux heures et deux heures trente de route, selon le trafic et le point de dépose exact à Zurich ou à l’aéroport de Zurich Kloten.
Outre le VTC, il existe le train et le covoiturage. Le VTC reste l’option la plus directe et la plus confortable pour un transfert porte à porte, sans correspondance ni temps d’attente.
Le plus simple est de réserver un VTC qui vous prend en charge directement à votre domicile ou à votre hôtel, pour un transfert direct jusqu’au terminal de l’aéroport de Zurich.
06 — Autour de Strasbourg
Quelles sont les autres destinations que nous desservons ?
Drive me Driver propose ses services vers les différents aéroports du Grand Est, d’Allemagne et de Suisse
/*!
* Maquette SXO — interactions du gabarit de page service.
* Tout est cherché sous « .mq » : rien n'est touché en dehors de la page.
* 1. FAQ en accordéon
* 2. Révélation des blocs au défilement
* 3. Sommaire latéral qui suit la lecture
*/
(function () {
'use strict';var doux = window.matchMedia('(prefers-reduced-motion: reduce)').matches;// Une page peut contenir plusieurs blocs « .mq » : les widgets Elementor
// intercalés (avis Google, articles de blog) coupent le bloc en morceaux.
document.querySelectorAll('.mq').forEach(function (racine) {
if (racine.dataset.mqInit === '1') { return; }
racine.dataset.mqInit = '1';/* 1. FAQ ---------------------------------------------------------------- */
racine.querySelectorAll('.q button').forEach(function (b) {
b.addEventListener('click', function () {
var q = b.parentElement;
var ouvert = q.dataset.open === '1';
q.dataset.open = ouvert ? '0' : '1';
b.setAttribute('aria-expanded', String(!ouvert));
});
});/* 2. Révélation --------------------------------------------------------- */
var blocs = racine.querySelectorAll('.rv');
if (doux || !('IntersectionObserver' in window)) {
blocs.forEach(function (e) { e.classList.add('vu'); });
} else {
var io = new IntersectionObserver(function (es) {
es.forEach(function (en) {
if (!en.isIntersecting) { return; }
en.target.classList.add('vu');
io.unobserve(en.target);
});
}, { threshold: 0.08, rootMargin: '0px 0px -40px 0px' });
blocs.forEach(function (e) { io.observe(e); });
}/* 3. Sommaire ----------------------------------------------------------- */
var liens = [].slice.call(racine.querySelectorAll('.aside a[href^="#"]'));
var cibles = liens
.map(function (a) { return document.querySelector(a.getAttribute('href')); })
.filter(Boolean);if ('IntersectionObserver' in window && cibles.length) {
var io2 = new IntersectionObserver(function (es) {
es.forEach(function (en) {
if (!en.isIntersecting) { return; }
liens.forEach(function (a) {
a.classList.toggle('actif', a.getAttribute('href') === '#' + en.target.id);
});
});
}, { rootMargin: '-40% 0px -55% 0px' });
cibles.forEach(function (c) { io2.observe(c); });
}
});
})();
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Quel est le prix d’un VTC Strasbourg Zurich ?", "acceptedAnswer": {"@type": "Answer", "text": "Le tarif est fixe et communiqué à l’avance lors de votre réservation, sans surprise à l’arrivée. Il dépend du type de véhicule choisi et du point de prise en charge."}}, {"@type": "Question", "name": "Comment réserver un VTC pour Zurich ?", "acceptedAnswer": {"@type": "Answer", "text": "Vous pouvez réserver en ligne en quelques clics, en indiquant votre lieu de prise en charge, votre destination et l’horaire souhaité. Notre équipe confirme rapidement votre réservation."}}, {"@type": "Question", "name": "Quelle est la durée du trajet Strasbourg - Zurich ?", "acceptedAnswer": {"@type": "Answer", "text": "Comptez en moyenne entre deux heures et deux heures trente de route, selon le trafic et le point de dépose exact à Zurich ou à l’aéroport de Zurich Kloten."}}, {"@type": "Question", "name": "Quels sont les moyens de transport pour aller de Strasbourg à Zurich ?", "acceptedAnswer": {"@type": "Answer", "text": "Outre le VTC, il existe le train et le covoiturage. Le VTC reste l’option la plus directe et la plus confortable pour un transfert porte à porte, sans correspondance ni temps d’attente."}}, {"@type": "Question", "name": "Comment se rendre à l’aéroport de Zurich depuis Strasbourg ?", "acceptedAnswer": {"@type": "Answer", "text": "Le plus simple est de réserver un VTC qui vous prend en charge directement à votre domicile ou à votre hôtel, pour un transfert direct jusqu’au terminal de l’aéroport de Zurich."}}]}