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}
VTC Strasbourg Francfort : notre service de transfert aéroport
Après un vol éprouvant, plus besoin de chercher un taxi ou une navette. Notre service de VTC assure votre transfert entre Strasbourg et l’aéroport international de Francfort (FRA) sans attente. Départ de Strasbourg, retour en Alsace ou prise en charge dans l’Eurométropole (Bas-Rhin) : votre chauffeur vous attend à l’heure convenue. À l’arrivée à Francfort, il vous accueille dans le hall des arrivées, à la sortie de la zone bagages, avec une pancarte nominative.
Berlines haut de gamme, minibus et vans VIP : nos chauffeurs professionnels vous conduisent dans des véhicules récents, propres et climatisés. De quoi vous détendre après un vol long-courrier, ou travailler en toute confidentialité pendant un déplacement professionnel.
02 — Tarification
Nos tarifs Strasbourg Francfort
Nous appliquons la politique du prix fixe et garanti. Le tarif est verrouillé dès le devis, sans frais cachés liés aux embouteillages ou au temps de trajet.
Transfert rapide, aller-retour dans la journée, course vers Obernai, Colmar ou Mulhouse, connexions vers Baden-Baden, Stuttgart, Munich, Bâle, Zurich, Genève ou Paris : nos chauffeurs privés s’adaptent à votre programme. Découvrez également nos autres transferts aéroports.
Mercedes Classe E, Classe S et Classe V · pour les trajets longue distance
Des formules adaptées à vos besoins
Chaque voyageur ou groupe a ses contraintes. Choix du véhicule (berline ou van spacieux), nombre de passagers, volume de bagages, arrêts intermédiaires : nous construisons le trajet avec vous.
Des chauffeurs professionnels expérimentés
Nos chauffeurs sont certifiés, ponctuels, courtois et multilingues. Ils connaissent la région du Rhin et les autoroutes allemandes, gèrent votre prise en charge, portent vos bagages et vous conseillent volontiers sur l’Alsace.
Une disponibilité 24h/24 et 7j/7
Votre vol atterrit en pleine nuit ou un jour férié ? Notre service fonctionne 24h/24 et 7j/7. En renseignant votre numéro de vol lors de la réservation (site internet, mail ou téléphone), nous suivons votre arrivée en temps réel et adaptons l’heure de prise en charge. En cas de retard indépendant de votre volonté, aucun frais supplémentaire ne vous sera demandé.
Le confort à bord
Van VIP ou berline business : véhicules récents, régulièrement entretenus, avec Wi-Fi gratuit, prises de recharge, bouteilles d’eau et climatisation réglable.
Une flotte de véhicules haut de gamme
Notre parc automobile (Mercedes Classe E, Classe S, Classe V) convient aux trajets en solo, en couple, en famille comme aux déplacements d’affaires. Il s’adapte aussi aux destinations loisirs de la région, comme Europa Park. Contactez-nous pour toute mise à disposition spécifique.
04 — Sur la route
Découvrez Strasbourg, l'Alsace et Francfort avec votre chauffeur
Le trajet est aussi l’occasion de découvrir la région. Nos chauffeurs locaux vous conseillent sur les incontournables du Bas-Rhin et de la Hesse, et peuvent assurer vos circuits touristiques en Alsace. Réservez à l’avance pour garantir votre véhicule.
Vallée du Rhin · le trajet devient une partie du voyage05 — Questions fréquentes
Le tarif est forfaitaire : à partir de 390 € TTC en berline et 460 € TTC en van, en journée. Le prix est fixé au moment du devis et n’évolue plus, quelle que soit la circulation.
Votre chauffeur vous attend dans le hall des arrivées, à la sortie de la zone bagages, avec une pancarte à votre nom. Il vous accompagne ensuite jusqu’au véhicule et se charge de vos bagages.
Nous suivons votre vol grâce au numéro que vous nous communiquez et adaptons l’heure de prise en charge. En cas de retard indépendant de votre volonté, aucun supplément n’est appliqué.
Comptez environ 2h40 pour les 217 km entre Strasbourg et l’aéroport de Francfort, selon les conditions de circulation.
Des berlines Mercedes Classe E et Classe S pour 1 à 3 passagers, et des vans Classe V pour les groupes et les bagages volumineux. Tous nos véhicules disposent du Wi-Fi, de prises de recharge, de bouteilles d’eau et de la climatisation.
Oui, nos chauffeurs assurent les transferts 24h/24 et 7j/7, y compris les week-ends et jours fériés.
Oui. Arrêts intermédiaires, aller-retour dans la journée ou mise à disposition sur plusieurs heures : indiquez-le lors de votre demande de devis, nous intégrons ces éléments au forfait.
Cela dépend du véhicule et du nombre de passagers. Précisez le volume de vos bagages à la réservation pour que nous vous orientions vers la berline ou le van.
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