{"id":23621,"date":"2026-08-16T06:38:34","date_gmt":"2026-08-16T06:38:34","guid":{"rendered":"https:\/\/www.transports-express-caraibes.fr\/blog\/navette-aeroport-martinique\/"},"modified":"2026-08-16T06:38:34","modified_gmt":"2026-08-16T06:38:34","slug":"navette-aeroport-martinique","status":"publish","type":"post","link":"https:\/\/www.transports-express-caraibes.fr\/blog\/navette-aeroport-martinique\/","title":{"rendered":"Navette a\u00e9roport martinique le lamentin : comment choisir le meilleur service en 2026"},"content":{"rendered":"<p class=\"wp-block-paragraph\">L&rsquo;a\u00e9roport Aim\u00e9 C\u00e9saire au Lamentin est souvent la premi\u00e8re et la derni\u00e8re image de la Martinique pour de nombreux voyageurs. Choisir la bonne <strong>navette a\u00e9roport<\/strong> change tout : temps d&rsquo;attente, co\u00fbt final, confort avec les bagages et arriv\u00e9e sans stress. Cet article compare les options disponibles en 2026, d\u00e9crit les \u00e9tapes concr\u00e8tes pour r\u00e9server un transfert fiable, liste les erreurs courantes et donne des conseils pratiques selon votre profil (voyageur solo, famille, groupe, s\u00e9jour court ou long). \u00c0 la cl\u00e9 : trajets chronom\u00e9tr\u00e9s, fourchettes de tarifs r\u00e9alistes, services d&rsquo;accueil, et alternatives comme la location de voiture ou la navette partag\u00e9e. Les informations int\u00e8grent les particularit\u00e9s locales (routes sinueuses, majoration nocturne, disponibilit\u00e9 24h\/24) pour vous permettre de d\u00e9cider vite et bien d\u00e8s votre r\u00e9servation.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>En bref :<\/strong><\/p>\n\n<ul class=\"wp-block-list\"><li><strong>Dur\u00e9e<\/strong> : les trajets se mesurent en minutes, pas seulement en kilom\u00e8tres (FDF \u2192 Fort-de-France : 15\u201320 min).<\/li><li><strong>Prix<\/strong> : taxi jour 25\u201330\u20ac vers Fort-de-France, majoration nuit +50% (\u224840\u201345\u20ac).<\/li><li><strong>R\u00e9servation<\/strong> : 24\u201348h \u00e0 l\u2019avance en haute saison ou pour les vols de nuit pour verrouiller le prix.<\/li><li><strong>V\u00e9hicules<\/strong> : berline, XL Van pour familles, Premium pour transfert VIP.<\/li><li><strong>Suivi de vol<\/strong> : privil\u00e9giez les services qui suivent votre vol en temps r\u00e9el pour \u00e9viter les frais en cas de retard.<\/li><\/ul>\n\n<h2 class=\"wp-block-heading\">Navette a\u00e9roport Le Lamentin : ce qu&rsquo;il faut savoir avant de choisir<\/h2>\n\n<p class=\"wp-block-paragraph\">L&rsquo;a\u00e9roport international Martinique Aim\u00e9 C\u00e9saire (code IATA : <strong>FDF<\/strong>) est situ\u00e9 au <strong>Le Lamentin<\/strong>, \u00e0 environ 10 km du centre de Fort-de-France. Plus de 2 millions de passagers transitent chaque ann\u00e9e, avec des liaisons r\u00e9guli\u00e8res vers la France m\u00e9tropolitaine, le Canada, les \u00c9tats-Unis et les Cara\u00efbes. Les horaires peuvent varier selon les saisons et la m\u00e9t\u00e9o, ce qui rend essentiel le recours \u00e0 un service de transfert r\u00e9actif.<\/p>\n\n<p class=\"wp-block-paragraph\">Sur place, trois grandes familles de solutions existent : les taxis traditionnels, les transferts VTC\/navette priv\u00e9e r\u00e9serv\u00e9s \u00e0 l&rsquo;avance, et les navettes partag\u00e9es. Chacune a ses forces : simplicit\u00e9 pour le taxi, s\u00e9curit\u00e9 tarifaire pour le transfert pr\u00e9pay\u00e9, \u00e9conomie pour la navette partag\u00e9e. La bonne option d\u00e9pendra de votre horaire d&rsquo;arriv\u00e9e, du nombre de passagers, du volume de bagages et de votre tol\u00e9rance au risque (attente, correspondances).<\/p>\n\n<h2 class=\"wp-block-heading\">Comparer les formules : navette partag\u00e9e, taxi, VTC et navette priv\u00e9e<\/h2>\n\n<p class=\"wp-block-paragraph\">Comparer signifie regarder ensemble le prix, la dur\u00e9e, le confort et la flexibilit\u00e9. Voici des rep\u00e8res pratiques applicables en 2026 pour les trajets depuis FDF vers les destinations les plus demand\u00e9es.<\/p>\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Destination<\/th>\n<th>Dur\u00e9e estim\u00e9e<\/th>\n<th>Tarif jour (approx.)<\/th>\n<th>Option recommand\u00e9e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Fort-de-France centre<\/strong><\/td>\n<td>15\u201320 min<\/td>\n<td>25\u201330\u20ac (jour)<\/td>\n<td>Taxi ou transfert pr\u00e9-r\u00e9serv\u00e9<\/td>\n<\/tr>\n<tr>\n<td><strong>Les Trois-\u00celets \/ Pointe du Bout<\/strong><\/td>\n<td>35\u201345 min<\/td>\n<td>45\u201355\u20ac<\/td>\n<td>V\u00e9hicule XL pour famille<\/td>\n<\/tr>\n<tr>\n<td><strong>Sainte-Anne \/ Les Salines<\/strong><\/td>\n<td>50\u201360 min<\/td>\n<td>55\u201370\u20ac<\/td>\n<td>Navette priv\u00e9e ou location selon dur\u00e9e du s\u00e9jour<\/td>\n<\/tr>\n<tr>\n<td><strong>Le Marin \/ Marina<\/strong><\/td>\n<td>50\u201360 min<\/td>\n<td>60\u201375\u20ac<\/td>\n<td>Transfert sp\u00e9cialis\u00e9 pour marinas<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n<p class=\"wp-block-paragraph\">Ces chiffres tiennent compte des routes sinueuses et d&rsquo;une majoration nocturne r\u00e9glement\u00e9e (+50% entre 19h et 7h, dimanches et jours f\u00e9ri\u00e9s). Pour un vol arrivant \u00e0 22h, pr\u00e9voyez syst\u00e9matiquement la hausse tarifaire.<\/p>\n\n<p class=\"wp-block-paragraph\">Pour comparer rapidement les offres locales, consultez des services reconnus qui proposent accueil personnalis\u00e9 et suivi de vol en temps r\u00e9el, comme <a href=\"https:\/\/antillestaxi.fr\/taxi-aeroport-martinique\/\" rel=\"nofollow noopener\" target=\"_blank\">AntillesTaxi<\/a> ou des op\u00e9rateurs sp\u00e9cialis\u00e9s en transferts a\u00e9roport vers marinas et h\u00f4tels, par exemple <a href=\"https:\/\/www.presence-mq.com\/transfert-aeroport-lamentin.php\" rel=\"nofollow noopener\" target=\"_blank\">Pr\u00e9sence<\/a>. Ces prestataires affichent souvent un prix fixe \u00e0 la r\u00e9servation.<\/p>\n\n<h3 class=\"wp-block-heading\">Crit\u00e8res concrets pour choisir votre service navette<\/h3>\n\n<ul class=\"wp-block-list\"><li><strong>Prix fixe \u00e0 la r\u00e9servation<\/strong> : verrouillez le tarif pour \u00e9viter les surprises.<\/li><li><strong>Suivi du vol<\/strong> : utile en cas de retard, garantit l\u2019attente sans co\u00fbt suppl\u00e9mentaire.<\/li><li><strong>Type de v\u00e9hicule<\/strong> : berline vs XL Van vs premium selon bagages et nombre de passagers.<\/li><li><strong>Accueil<\/strong> : pancarte \u00e0 la sortie du terminal et assistance bagages pour un atterrissage serein.<\/li><li><strong>Disponibilit\u00e9 24h\/24<\/strong> : indispensable pour les arriv\u00e9es nocturnes ou tr\u00e8s matinales.<\/li><\/ul>\n\n<p class=\"wp-block-paragraph\">Insight : priorisez la clart\u00e9 tarifaire et le suivi de vol ; ce sont les deux param\u00e8tres qui r\u00e9duisent le plus le stress \u00e0 l\u2019arriv\u00e9e.<\/p>\n\n<h2 class=\"wp-block-heading\">Comment r\u00e9server et \u00e9viter les mauvaises surprises<\/h2>\n\n<p class=\"wp-block-paragraph\">R\u00e9server correctement vous fait gagner du temps et de l&rsquo;argent. Suivez ces \u00e9tapes op\u00e9rationnelles, test\u00e9es par des voyageurs r\u00e9guliers vers la Martinique.<\/p>\n\n<ol class=\"wp-block-list\"><li>R\u00e9servez <strong>24\u201348 heures<\/strong> avant l&rsquo;arriv\u00e9e en haute saison ; pour des vols de nuit, r\u00e9servez imp\u00e9rativement.<\/li><li>Indiquez le <strong>num\u00e9ro de vol<\/strong>, l&rsquo;horaire, le nombre de passagers et le volume de bagages.<\/li><li>S\u00e9lectionnez le type de v\u00e9hicule (Standard, XL, Premium) et demandez l\u2019accueil personnalis\u00e9 si n\u00e9cessaire.<\/li><li>V\u00e9rifiez les conditions d&rsquo;annulation et la pr\u00e9sence d&rsquo;une majoration nocturne sur le r\u00e9capitulatif.<\/li><li>Conservez la confirmation avec le num\u00e9ro du chauffeur et le suivi de vol activ\u00e9.<\/li><\/ol>\n\n<p class=\"wp-block-paragraph\">Service pratique : plusieurs op\u00e9rateurs locaux offrent une application ou une confirmation par SMS avec suivi automatique du vol. Pour des r\u00e9servations rapides, comparez aussi la proposition de transferts priv\u00e9s propos\u00e9e par <a href=\"https:\/\/www.transfeero.com\/fr\/martinique-airport-transfers-fdf\/\" rel=\"nofollow noopener\" target=\"_blank\">Transfeero<\/a>.<\/p>\n\n<!-- D\u00e9but du bloc \u00e0 coller dans votre page (HTML + JS). Taille maximale de l'outil : hauteur limit\u00e9e via style (max-height:2000px). -->\n<!-- Chargement l\u00e9ger de Tailwind en mode navigateur pour styles utilitaires -->\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@tailwindcss\/browser@4\"><\/script>\n\n<style>\n  \/* Styles compl\u00e9mentaires pour un rendu plus \"outil\" et accessible *\/\n  .comparator-container { max-height:2000px; }\n  .table-scroll { overflow:auto; max-height:650px; }\n  .pill { display:inline-block; padding:.15rem .5rem; border-radius:999px; font-size:.75rem; }\n  .kbd { background:#f3f4f6; border:1px solid #e5e7eb; padding:.08rem .3rem; border-radius:.35rem; font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, \"Roboto Mono\", \"Courier New\", monospace; font-size:.75rem; }\n  \/* accessible focus ring *\/\n  .focus-ring:focus { outline: 3px solid rgba(59,130,246,.35); outline-offset: 2px; }\n<\/style>\n\n<div id=\"comparator\" class=\"comparator-container mx-auto mt-6 p-5 rounded-lg shadow-lg bg-white text-gray-800 max-w-5xl\" role=\"region\" aria-labelledby=\"comp-title\">\n  <div class=\"flex items-start justify-between gap-4\">\n    <div>\n      <h2 id=\"comp-title\" class=\"text-2xl font-semibold\">Comparateur : navette a\u00e9roport Martinique \u2014 Le Lamentin \u2192 Trois-\u00celets (2026)<\/h2>\n      <p class=\"text-sm text-gray-600 mt-1\">Filtrez, triez et comparez rapidement taxi, VTC, navette partag\u00e9e et navette priv\u00e9e.<\/p>\n    <\/div>\n    <div class=\"text-sm text-right\">\n      <div class=\"text-xs text-gray-500\">Outil interactif<\/div>\n      <div class=\"text-xs text-gray-500\">Accessible \u00b7 Sans image<\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Contr\u00f4les interactifs -->\n  <div class=\"mt-4 grid grid-cols-1 sm:grid-cols-2 gap-3\">\n    <div class=\"flex gap-2 items-center\">\n      <label for=\"search\" class=\"sr-only\">Rechercher<\/label>\n      <input id=\"search\" class=\"focus-ring px-3 py-2 border rounded w-full\" placeholder=\"Rechercher par nom ou crit\u00e8re (ex: \u00e9conomiques, porte-\u00e0-porte)\" aria-label=\"Recherche dans le tableau\">\n    <\/div>\n\n    <div class=\"flex gap-2 items-center\">\n      <label for=\"sort\" class=\"sr-only\">Trier<\/label>\n      <select id=\"sort\" class=\"focus-ring px-3 py-2 border rounded\" aria-label=\"Trier le tableau\">\n        <option value=\"recommandation\">Trier : recommand\u00e9<\/option>\n        <option value=\"prix-asc\">Prix : croissant<\/option>\n        <option value=\"prix-desc\">Prix : d\u00e9croissant<\/option>\n        <option value=\"duree-asc\">Dur\u00e9e : courte \u2192 longue<\/option>\n        <option value=\"duree-desc\">Dur\u00e9e : longue \u2192 courte<\/option>\n        <option value=\"flexibilite\">Flexibilit\u00e9<\/option>\n      <\/select>\n    <\/div>\n\n    <div class=\"flex items-center gap-2\">\n      <label class=\"text-sm\">Filtrer par \u00ab\u00a0Id\u00e9al pour\u00a0\u00bb :<\/label>\n      <select id=\"filterIdeal\" class=\"focus-ring px-3 py-2 border rounded\" aria-label='Filtrer par \"Id\u00e9al pour\"'>\n        <option value=\"tous\">Tous<\/option>\n        <option value=\"voyageurs seuls\">Voyageurs seuls<\/option>\n        <option value=\"voyageurs exigeants\">Voyageurs exigeants<\/option>\n        <option value=\"petits budgets\">Petits budgets<\/option>\n        <option value=\"groupes\/familles ou VIP\">Groupes\/familles ou VIP<\/option>\n      <\/select>\n    <\/div>\n\n    <div class=\"flex gap-2 items-center justify-end\">\n      <button id=\"toggleWeather\" class=\"focus-ring px-3 py-2 bg-blue-600 text-white rounded hover:bg-blue-700\" aria-pressed=\"false\">Actualiser m\u00e9t\u00e9o (optionnel)<\/button>\n      <button id=\"resetFilters\" class=\"focus-ring px-3 py-2 border rounded\" title=\"R\u00e9initialiser filtres\">R\u00e9initialiser<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- R\u00e9sum\u00e9 d'aide \/ recommandations rapides -->\n  <div class=\"mt-4 grid grid-cols-1 md:grid-cols-3 gap-3 text-sm\">\n    <div class=\"p-3 rounded border bg-gray-50\">\n      <div class=\"font-medium\">Budget<\/div>\n      <div id=\"summary-budget\" class=\"text-gray-600\">Choix selon fourchette : \u00e9conomique \u2192 premium<\/div>\n    <\/div>\n    <div class=\"p-3 rounded border bg-gray-50\">\n      <div class=\"font-medium\">Temps moyen<\/div>\n      <div id=\"summary-time\" class=\"text-gray-600\">35\u201370 min selon service<\/div>\n    <\/div>\n    <div class=\"p-3 rounded border bg-gray-50\">\n      <div class=\"font-medium\">Astuce<\/div>\n      <div id=\"summary-tip\" class=\"text-gray-600\">R\u00e9server en avance pour VTC\/navette priv\u00e9e; navette partag\u00e9e = meilleur tarif si vous avez du temps.<\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Tableau interactif -->\n  <div class=\"mt-4 table-scroll\" role=\"table\" aria-label=\"Tableau comparatif des options de transfert\">\n    <table id=\"comp-table\" class=\"min-w-full border-collapse\" role=\"presentation\">\n      <caption class=\"sr-only\">Tableau comparateur des moyens de transfert entre A\u00e9roport Le Lamentin (FDF) et Trois-\u00celets<\/caption>\n      <thead class=\"bg-gray-100 sticky top-0\">\n        <tr>\n          <th class=\"text-left px-4 py-3\">Service<\/th>\n          <th class=\"text-left px-4 py-3\">Prix indicatif jour<\/th>\n          <th class=\"text-left px-4 py-3\">Dur\u00e9e moyenne FDF\u2192Trois-\u00celets<\/th>\n          <th class=\"text-left px-4 py-3\">Flexibilit\u00e9<\/th>\n          <th class=\"text-left px-4 py-3\">Id\u00e9al pour<\/th>\n          <th class=\"text-left px-4 py-3\">Comparer<\/th>\n        <\/tr>\n      <\/thead>\n      <tbody id=\"comp-body\" role=\"rowgroup\" class=\"divide-y\"><\/tbody>\n    <\/table>\n  <\/div>\n\n  <!-- Panneau de comparaison s\u00e9lectionn\u00e9e -->\n  <div id=\"compare-panel\" class=\"mt-4 hidden p-4 border rounded bg-gray-50\" role=\"region\" aria-live=\"polite\" aria-label=\"Comparaison s\u00e9lectionn\u00e9e\">\n    <div class=\"flex items-center justify-between\">\n      <div class=\"font-medium\">Comparaison s\u00e9lectionn\u00e9e<\/div>\n      <div class=\"text-sm text-gray-600\"><span id=\"selected-count\">0<\/span> s\u00e9lection(s)<\/div>\n    <\/div>\n    <div id=\"compare-content\" class=\"mt-3 grid grid-cols-1 md:grid-cols-3 gap-3\"><\/div>\n    <div class=\"mt-3 flex gap-2\">\n      <button id=\"clearCompare\" class=\"focus-ring px-3 py-2 border rounded\">Effacer s\u00e9lection<\/button>\n      <button id=\"recommendBtn\" class=\"focus-ring px-3 py-2 bg-green-600 text-white rounded\">Obtenir recommandation<\/button>\n    <\/div>\n    <div id=\"recommendation\" class=\"mt-3 text-sm text-gray-700\"><\/div>\n  <\/div>\n\n  <div class=\"mt-4 text-xs text-gray-500\">\n    Toutes les informations sont indicatives. Les prix peuvent varier selon l&rsquo;heure, la disponibilit\u00e9 et les promotions.\n  <\/div>\n<\/div>\n\n<script>\n\/*\n  DATA SOURCE (int\u00e9gr\u00e9e)\n  ----------------------\n  Les donn\u00e9es ci-dessous proviennent de la liste fournie :\n  - Taxi (30\u20ac, 35-45min, imm\u00e9diat mais variable, voyageurs seuls)\n  - VTC\/transfert pr\u00e9-r\u00e9serv\u00e9 (45\u20ac, 35-45min, prix fixe & suivi, voyageurs exigeants)\n  - Navette partag\u00e9e (15-25\u20ac, 45-70min, \u00e9conomique mais arr\u00eats multiples, petits budgets)\n  - Navette priv\u00e9e (60-90\u20ac, 35-45min, porte-\u00e0-porte premium, groupes\/familles ou VIP)\n\n  API optionnelle (m\u00e9t\u00e9o)\n  ------------------------\n  Si l'utilisateur clique sur \"Actualiser m\u00e9t\u00e9o\", on interroge Open-Meteo (gratuit, pas de cl\u00e9).\n  URL utilis\u00e9e (exemple) :\n    https:\/\/api.open-meteo.com\/v1\/forecast?latitude=14.6&longitude=-61.0&current_weather=true&timezone=auto\n\n  Exemple de r\u00e9ponse JSON (abr\u00e9g\u00e9) :\n  {\n    \"latitude\":14.6,\n    \"longitude\":-61.0,\n    \"generationtime_ms\":0.123,\n    \"utc_offset_seconds\":0,\n    \"timezone\":\"Atlantic\/Guadeloupe\",\n    \"current_weather\":{\n      \"temperature\":28.3,\n      \"windspeed\":12.5,\n      \"winddirection\":180,\n      \"weathercode\":0,\n      \"time\":\"2026-08-16T10:00\"\n    }\n  }\n  (Source : https:\/\/open-meteo.com\/)\n*\/\n\n(function(){\n  'use strict';\n\n  \/\/ Cha\u00eenes (fran\u00e7ais), faciles \u00e0 modifier\n  const STR = {\n    compareSelected: 'Comparaison s\u00e9lectionn\u00e9e',\n    selectedCount: (n)=> `${n} s\u00e9lection(s)`,\n    recTitle: 'Recommandation',\n    recDefault: 'S\u00e9lectionnez jusqu'\u00e0 3 options et cliquez sur \"Obtenir recommandation\".',\n    recBasedOn: (criteria)=> `Recommandation bas\u00e9e sur : ${criteria}`,\n    weatherButtonOn: 'M\u00e9t\u00e9o mise \u00e0 jour',\n    weatherButtonOff: 'Actualiser m\u00e9t\u00e9o (optionnel)'\n  };\n\n  \/\/ Donn\u00e9es initiales (issue du fragment fourni)\n  const DATA = [\n    {\n      id: 'taxi',\n      service: 'Taxi',\n      prix: {min:30, max:30, label:'30\u20ac'},\n      duree: {min:35, max:45, label:'35\u201345 min'},\n      flexibilite: 'Imm\u00e9diat mais variable',\n      ideal: 'Voyageurs seuls',\n      note: 3.8\n    },\n    {\n      id: 'vtc',\n      service: 'VTC \/ transfert pr\u00e9-r\u00e9serv\u00e9',\n      prix: {min:45, max:45, label:'45\u20ac'},\n      duree: {min:35, max:45, label:'35\u201345 min'},\n      flexibilite: 'Prix fixe & suivi',\n      ideal: 'Voyageurs exigeants',\n      note: 4.4\n    },\n    {\n      id: 'navette-partagee',\n      service: 'Navette partag\u00e9e',\n      prix: {min:15, max:25, label:'15\u201325\u20ac'},\n      duree: {min:45, max:70, label:'45\u201370 min'},\n      flexibilite: '\u00c9conomique mais arr\u00eats multiples',\n      ideal: 'Petits budgets',\n      note: 3.5\n    },\n    {\n      id: 'navette-privee',\n      service: 'Navette priv\u00e9e',\n      prix: {min:60, max:90, label:'60\u201390\u20ac'},\n      duree: {min:35, max:45, label:'35\u201345 min'},\n      flexibilite: 'Porte-\u00e0-porte premium',\n      ideal: 'Groupes\/familles ou VIP',\n      note: 4.7\n    }\n  ];\n\n  \/\/ \u00c9tat interne\n  let state = {\n    items: [...DATA],\n    query: '',\n    sort: 'recommandation',\n    filterIdeal: 'tous',\n    selected: new Set(),\n    weather: null\n  };\n\n  \/\/ R\u00e9f\u00e9rences DOM\n  const el = {\n    tableBody: document.getElementById('comp-body'),\n    search: document.getElementById('search'),\n    sort: document.getElementById('sort'),\n    filterIdeal: document.getElementById('filterIdeal'),\n    toggleWeather: document.getElementById('toggleWeather'),\n    resetFilters: document.getElementById('resetFilters'),\n    comparePanel: document.getElementById('compare-panel'),\n    compareContent: document.getElementById('compare-content'),\n    selectedCount: document.getElementById('selected-count'),\n    clearCompare: document.getElementById('clearCompare'),\n    recommendBtn: document.getElementById('recommendBtn'),\n    recommendation: document.getElementById('recommendation'),\n    summaryBudget: document.getElementById('summary-budget'),\n    summaryTime: document.getElementById('summary-time'),\n    summaryTip: document.getElementById('summary-tip'),\n    toggleWeatherBtn: document.getElementById('toggleWeather')\n  };\n\n  \/\/ Rend le tableau selon l'\u00e9tat (filtres, recherche, tri)\n  function renderTable() {\n    const q = state.query.trim().toLowerCase();\n    const filtered = state.items.filter(item => {\n      if (state.filterIdeal !== 'tous' && item.ideal !== state.filterIdeal) return false;\n      if (!q) return true;\n      const hay = [item.service, item.prix.label, item.duree.label, item.flexibilite, item.ideal].join(' ').toLowerCase();\n      return hay.includes(q);\n    });\n\n    const sorted = sortItems(filtered, state.sort);\n\n    el.tableBody.innerHTML = '';\n    sorted.forEach(item => {\n      const tr = document.createElement('tr');\n      tr.setAttribute('role', 'row');\n      tr.className = 'hover:bg-gray-50';\n\n      const checked = state.selected.has(item.id) ? 'checked' : '';\n\n      tr.innerHTML = `\n        <td class=\"px-4 py-3\" role=\"cell\"><div class=\"font-medium\">${escapeHtml(item.service)}<\/div><\/td>\n        <td class=\"px-4 py-3\" role=\"cell\">${escapeHtml(item.prix.label)}<\/td>\n        <td class=\"px-4 py-3\" role=\"cell\">${escapeHtml(item.duree.label)}<\/td>\n        <td class=\"px-4 py-3\" role=\"cell\">${escapeHtml(item.flexibilite)}<\/td>\n        <td class=\"px-4 py-3\" role=\"cell\"><span class=\"pill bg-gray-100 text-sm\">${escapeHtml(item.ideal)}<\/span><\/td>\n        <td class=\"px-4 py-3\" role=\"cell\">\n          <label class=\"inline-flex items-center gap-2\">\n            <input type=\"checkbox\" data-id=\"${item.id}\" class=\"compare-checkbox focus-ring\" aria-label=\"S\u00e9lectionner ${escapeHtml(item.service)} pour comparaison\" ${checked}>\n            <span class=\"text-sm text-gray-600\">Comparer<\/span>\n          <\/label>\n        <\/td>\n      `;\n      el.tableBody.appendChild(tr);\n    });\n\n    \/\/ Attache \u00e9couteurs aux checkboxes (apr\u00e8s rendu)\n    document.querySelectorAll('.compare-checkbox').forEach(cb => {\n      cb.addEventListener('change', onCompareToggle);\n    });\n\n    updateSummary();\n  }\n\n  \/\/ Fonction d'\u00e9chappement simple pour \u00e9viter injection (texte uniquement)\n  function escapeHtml(s){\n    return String(s)\n      .replace(\/&\/g,'&amp;')\n      .replace(\/<\/g,'&lt;')\n      .replace(\/>\/g,'&gt;');\n  }\n\n  \/\/ Tri logique\n  function sortItems(items, mode) {\n    const arr = [...items];\n    if (mode === 'prix-asc') {\n      arr.sort((a,b) => a.prix.min - b.prix.min);\n    } else if (mode === 'prix-desc') {\n      arr.sort((a,b) => b.prix.max - a.prix.max);\n    } else if (mode === 'duree-asc') {\n      arr.sort((a,b) => a.duree.min - b.duree.min);\n    } else if (mode === 'duree-desc') {\n      arr.sort((a,b) => b.duree.max - a.duree.max);\n    } else if (mode === 'flexibilite') {\n      \/\/ tri sommaire par longueur de texte (plus court = consid\u00e9r\u00e9 plus flexible visuellement)\n      arr.sort((a,b) => a.flexibilite.length - b.flexibilite.length);\n    } else {\n      \/\/ recommandation : heuristique combin\u00e9e prix\/dur\u00e9e\/notes\n      arr.sort((a,b) => {\n        const score = (x) => (100 - (x.prix.min || 0)) + (50 - (x.duree.min || 0)) + ((x.note||4)*10);\n        return score(b)-score(a);\n      });\n    }\n    return arr;\n  }\n\n  \/\/ Gestion du toggle compare\n  function onCompareToggle(e) {\n    const id = e.target.dataset.id;\n    if (e.target.checked) {\n      state.selected.add(id);\n    } else {\n      state.selected.delete(id);\n    }\n    \/\/ Limite : maximum 3 s\u00e9lections pour comparaison c\u00f4te-\u00e0-c\u00f4te\n    if (state.selected.size > 3) {\n      \/\/ retirer le plus ancien s\u00e9lectionn\u00e9 (pour simplicit\u00e9)\n      const it = state.selected.values();\n      const first = it.next().value;\n      state.selected.delete(first);\n      \/\/ mettre \u00e0 jour visuel : d\u00e9cocher l'ancienne\n      const oldBox = document.querySelector(`.compare-checkbox[data-id=\"${first}\"]`);\n      if (oldBox) oldBox.checked = false;\n    }\n    renderComparePanel();\n  }\n\n  \/\/ Affiche panneau de comparaison\n  function renderComparePanel() {\n    const selectedIds = Array.from(state.selected);\n    el.selectedCount.textContent = selectedIds.length;\n    if (selectedIds.length === 0) {\n      el.comparePanel.classList.add('hidden');\n      el.compareContent.innerHTML = '';\n      el.recommendation.textContent = STR.recDefault;\n      return;\n    }\n    el.comparePanel.classList.remove('hidden');\n    el.compareContent.innerHTML = '';\n    \/\/ Affiche cartes comparatives\n    selectedIds.forEach(id => {\n      const item = DATA.find(d=>d.id===id);\n      if (!item) return;\n      const div = document.createElement('div');\n      div.className = 'p-3 border rounded bg-white';\n      div.innerHTML = `\n        <div class=\"font-semibold\">${escapeHtml(item.service)}<\/div>\n        <div class=\"text-sm text-gray-600 mt-1\">Prix : <strong>${escapeHtml(item.prix.label)}<\/strong><\/div>\n        <div class=\"text-sm text-gray-600\">Dur\u00e9e : <strong>${escapeHtml(item.duree.label)}<\/strong><\/div>\n        <div class=\"text-sm text-gray-600\">Flexibilit\u00e9 : ${escapeHtml(item.flexibilite)}<\/div>\n        <div class=\"text-sm text-gray-600\">Id\u00e9al pour : ${escapeHtml(item.ideal)}<\/div>\n        <div class=\"text-sm text-yellow-700 mt-2\">Note estim\u00e9e : ${escapeHtml(String(item.note || '\u2014'))} \/ 5<\/div>\n      `;\n      el.compareContent.appendChild(div);\n    });\n\n    \/\/ reset recommendation area\n    el.recommendation.textContent = STR.recDefault;\n  }\n\n  \/\/ Effacer s\u00e9lection\n  function clearCompare() {\n    state.selected.clear();\n    document.querySelectorAll('.compare-checkbox').forEach(cb => cb.checked = false);\n    renderComparePanel();\n  }\n\n  \/\/ Obtenir recommandation simple bas\u00e9e sur pr\u00e9f\u00e9rences et s\u00e9lection\n  function getRecommendation() {\n    const selectedIds = Array.from(state.selected);\n    if (selectedIds.length === 0) {\n      el.recommendation.textContent = 'Aucune s\u00e9lection. Cochez des options puis cliquez ici.';\n      return;\n    }\n    \/\/ Heuristique : si budget petit => favorise prix min ; si temps critique => favorise dur\u00e9e min\n    \/\/ On regarde r\u00e9sum\u00e9 contexte (simple)\n    const preferBudget = document.getElementById('filterIdeal').value === 'petits budgets';\n    const preferRapid = state.sort === 'duree-asc';\n\n    let best = null, bestScore = -Infinity;\n    selectedIds.forEach(id => {\n      const item = DATA.find(d=>d.id===id);\n      if (!item) return;\n      let score = 0;\n      score += (100 - item.prix.min); \/\/ moins cher => plus score\n      score += (50 - item.duree.min);\n      score += (item.note || 4) * 12;\n      \/\/ ajustement selon pr\u00e9f\u00e9rences\n      if (preferBudget) score += 100 - item.prix.min;\n      if (preferRapid) score += 50 - item.duree.min;\n      if (item.ideal.toLowerCase().includes('vip') || item.ideal.toLowerCase().includes('familles')) score += 5;\n      if (score > bestScore) { bestScore = score; best = item; }\n    });\n\n    if (best) {\n      const rationale = [];\n      if (preferBudget) rationale.push('priorit\u00e9 budget');\n      if (preferRapid) rationale.push('priorit\u00e9 rapidit\u00e9');\n      rationale.push('score combin\u00e9 prix\/dur\u00e9e\/qualit\u00e9');\n      el.recommendation.innerHTML = `<strong>${STR.recTitle} :<\/strong> Nous recommandons <strong>${escapeHtml(best.service)}<\/strong> \u2014 ${escapeHtml(best.prix.label)}, ${escapeHtml(best.duree.label)}. <div class=\"text-sm text-gray-600 mt-1\">${STR.recBasedOn(rationale.join(', '))}.<\/div>`;\n    } else {\n      el.recommendation.textContent = 'Impossible de d\u00e9terminer une recommandation.';\n    }\n  }\n\n  \/\/ Met \u00e0 jour r\u00e9sum\u00e9 dynamique (budget\/time)\n  function updateSummary() {\n    \/\/ Budget min\/max global\n    const mins = state.items.map(i=>i.prix.min);\n    const maxs = state.items.map(i=>i.prix.max);\n    const min = Math.min(...mins);\n    const max = Math.max(...maxs);\n    el.summaryBudget.textContent = `De ${min}\u20ac (\u00e9conomique) \u00e0 ${max}\u20ac (option premium)`;\n\n    \/\/ Dur\u00e9e\n    const dureeMin = Math.min(...state.items.map(i=>i.duree.min));\n    const dureeMax = Math.max(...state.items.map(i=>i.duree.max));\n    el.summaryTime.textContent = `${dureeMin}\u2013${dureeMax} min (approximatif)`;\n\n    \/\/ Tip contextualis\u00e9 par m\u00e9t\u00e9o si dispo\n    if (state.weather && state.weather.current_weather) {\n      const temp = state.weather.current_weather.temperature;\n      const wind = state.weather.current_weather.windspeed;\n      el.summaryTip.textContent = `M\u00e9t\u00e9o actuelle : ${temp}\u00b0C, vent ${wind} km\/h. V\u00e9rifiez trafic et horaires si fort vent\/pluie.`;\n      el.toggleWeatherBtn.textContent = STR.weatherButtonOn;\n      el.toggleWeatherBtn.setAttribute('aria-pressed','true');\n    } else {\n      el.summaryTip.textContent = 'R\u00e9server en avance pour VTC\/navette priv\u00e9e; navette partag\u00e9e = meilleur tarif si vous avez du temps.';\n      el.toggleWeatherBtn.textContent = STR.weatherButtonOff;\n      el.toggleWeatherBtn.setAttribute('aria-pressed','false');\n    }\n  }\n\n  \/\/ Event handlers\n  el.search.addEventListener('input', (ev) => {\n    state.query = ev.target.value;\n    renderTable();\n  });\n  el.sort.addEventListener('change', (ev) => {\n    state.sort = ev.target.value;\n    renderTable();\n  });\n  el.filterIdeal.addEventListener('change', (ev) => {\n    state.filterIdeal = ev.target.value;\n    renderTable();\n  });\n  el.resetFilters.addEventListener('click', () => {\n    state.query = '';\n    state.sort = 'recommandation';\n    state.filterIdeal = 'tous';\n    el.search.value = '';\n    el.sort.value = 'recommandation';\n    el.filterIdeal.value = 'tous';\n    renderTable();\n  });\n  el.clearCompare.addEventListener('click', clearCompare);\n  el.recommendBtn.addEventListener('click', getRecommendation);\n\n  \/\/ Option m\u00e9t\u00e9o (utilise l'API Open-Meteo ; gratuit, pas de cl\u00e9)\n  el.toggleWeatherBtn.addEventListener('click', async () => {\n    \/\/ Si d\u00e9j\u00e0 charg\u00e9, on bascule off en supprimant m\u00e9t\u00e9o\n    if (state.weather) {\n      state.weather = null;\n      updateSummary();\n      return;\n    }\n    try {\n      el.toggleWeatherBtn.textContent = 'Chargement...';\n      el.toggleWeatherBtn.disabled = true;\n      const lat = 14.6, lon = -61.0;\n      const url = `https:\/\/api.open-meteo.com\/v1\/forecast?latitude=${lat}&longitude=${lon}&current_weather=true&timezone=auto`;\n      const resp = await fetch(url);\n      if (!resp.ok) throw new Error('\u00c9chec requ\u00eate m\u00e9t\u00e9o');\n      const json = await resp.json();\n      state.weather = json;\n      updateSummary();\n    } catch (err) {\n      console.error(err);\n      alert('Impossible de charger la m\u00e9t\u00e9o (service externe indisponible).');\n    } finally {\n      el.toggleWeatherBtn.disabled = false;\n    }\n  });\n\n  \/\/ Initial render\n  renderTable();\n  renderComparePanel();\n\n  \/\/ Accessibilit\u00e9 : keyboard tips (petite aide)\n  document.getElementById('comparator').addEventListener('keydown', (e) => {\n    \/\/ CTRL+F pour focus recherche (utile)\n    if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'f') {\n      e.preventDefault();\n      el.search.focus();\n    }\n  });\n\n})();\n<\/script>\n<!-- Fin du bloc -->\n\n<h2 class=\"wp-block-heading\">Erreurs fr\u00e9quentes \u00e0 \u00e9viter lors du choix d&rsquo;une navette Martinique<\/h2>\n\n<p class=\"wp-block-paragraph\">Parcourir les avis et les prix sans v\u00e9rifier les conditions m\u00e8ne souvent \u00e0 des d\u00e9convenues. Voici les pi\u00e8ges r\u00e9currents et comment les contourner.<\/p>\n\n<ul class=\"wp-block-list\"><li><strong>Ne pas v\u00e9rifier la majoration nocturne<\/strong> : elle peut augmenter le prix de moiti\u00e9.<\/li><li><strong>R\u00e9server sans indiquer le nombre exact de bagages<\/strong> : risque d&rsquo;un v\u00e9hicule inadapt\u00e9 \u00e0 l\u2019arriv\u00e9e.<\/li><li><strong>Confondre navette partag\u00e9e et transfert priv\u00e9<\/strong> : la navette partag\u00e9e \u00e9conomise de l&rsquo;argent mais rallonge le temps de trajet.<\/li><li><strong>Compter uniquement sur les taxis stationn\u00e9s<\/strong> en haute saison : la file peut \u00eatre longue et les chauffeurs limit\u00e9s.<\/li><li><strong>Oublier l\u2019accueil personnalis\u00e9<\/strong> si c\u2019est la premi\u00e8re visite : une pancarte \u00e9vite la confusion au terminal.<\/li><\/ul>\n\n<p class=\"wp-block-paragraph\">Insight : une r\u00e9servation claire r\u00e9duit les impr\u00e9vus et s&rsquo;av\u00e8re souvent moins co\u00fbteuse que l\u2019attente sur place.<\/p>\n\n<h2 class=\"wp-block-heading\">Services sp\u00e9cialis\u00e9s et options pour profils sp\u00e9cifiques<\/h2>\n\n<p class=\"wp-block-paragraph\">Familles, plaisanciers, personnes \u00e0 mobilit\u00e9 r\u00e9duite et voyageurs d\u2019affaires n\u2019ont pas les m\u00eames besoins. Voici des recommandations cibl\u00e9es.<\/p>\n\n<ul class=\"wp-block-list\"><li><strong>Familles<\/strong> : choisissez un <strong>XL Van<\/strong> (5\u20137 passagers) avec grand coffre pour poussette et valises. Tarif indicatif XL : 45\u201365\u20ac selon la destination.<\/li><li><strong>Voyageurs nautiques<\/strong> : optez pour un transfert qui conna\u00eet les marinas (Marina du Marin, Pointe du Bout). Des services comme <a href=\"https:\/\/www.presence-mq.com\/aeroportportmarina.php\" rel=\"nofollow noopener\" target=\"_blank\">Pr\u00e9sence &#8211; transferts marinas<\/a> proposent ce type de liaison d\u00e9di\u00e9e.<\/li><li><strong>Personnes TPMR<\/strong> : demandez un v\u00e9hicule adapt\u00e9 et assistance bagages au moment de la r\u00e9servation.<\/li><li><strong>Courts s\u00e9jours tout compris<\/strong> : pour un s\u00e9jour de moins de 5 jours, le taxi peut \u00eatre plus \u00e9conomique qu&rsquo;une location de voiture.<\/li><li><strong>S\u00e9jours longs<\/strong> : au-del\u00e0 de 7 jours, la location devient rentable si vous pr\u00e9voyez des excursions quotidiennes.<\/li><\/ul>\n\n<p class=\"wp-block-paragraph\">Insight : adaptez le v\u00e9hicule \u00e0 votre contenu de voyage plut\u00f4t qu\u2019au seul prix.<\/p>\n\n<h2 class=\"wp-block-heading\">Exemples concrets et fil conducteur : le trajet de Marine<\/h2>\n\n<p class=\"wp-block-paragraph\">Marine arrive un samedi soir \u00e0 21h30 apr\u00e8s un vol depuis Paris. Elle a r\u00e9serv\u00e9 48 heures avant un v\u00e9hicule XL pour rejoindre Les Trois-\u00celets. Gr\u00e2ce au suivi du vol, le chauffeur ajuste son heure d\u2019arriv\u00e9e pour compenser un retard d\u2019une heure. Le trajet dure finalement 50 minutes \u00e0 cause du trafic saisonnier, le prix \u00e9tait verrouill\u00e9 \u00e0 la r\u00e9servation et l\u2019accueil avec pancarte a \u00e9vit\u00e9 toute recherche au terminal. Cette trajectoire simple illustre l&rsquo;int\u00e9r\u00eat d&rsquo;une r\u00e9servation anticip\u00e9e et d&rsquo;un service qui suit les vols.<\/p>\n\n<p class=\"wp-block-paragraph\">Insight : planifier en tenant compte de la saison et du type de v\u00e9hicule \u00e9vite la majorit\u00e9 des mauvaises surprises.<\/p>\n\n<p class=\"wp-block-paragraph\">Pour une vision comparative des offres sur le march\u00e9, les blogs sp\u00e9cialis\u00e9s publient souvent des classements annuels des meilleurs services de navette.<\/p>\n\n<h2 class=\"wp-block-heading\">Ressources utiles et liens recommand\u00e9s<\/h2>\n\n<p class=\"wp-block-paragraph\">Pour compl\u00e9ter votre choix en quelques clics : consultez des pages op\u00e9rateurs fiables qui d\u00e9taillent les services, gammes de v\u00e9hicules et options d\u2019accueil. Par exemple, <a href=\"https:\/\/www.cab-ly.fr\/nos-services\/navettes-aeroport-hotel-evenementiel\/le-lamentin\/97232\" rel=\"nofollow noopener\" target=\"_blank\">Cab-Ly &#8211; navettes Le Lamentin<\/a> propose des navettes a\u00e9roport &amp; h\u00f4tel, tandis que <a href=\"https:\/\/www.transfeero.com\/fr\/martinique-airport-transfers-fdf\/\" rel=\"nofollow noopener\" target=\"_blank\">Transfeero<\/a> propose des transferts priv\u00e9s pour FDF. Pour un panorama des tarifs locaux, un guide pratique traite des tarifs taxi et des r\u00e8gles applicables en Martinique : <a href=\"https:\/\/www.transports-express-caraibes.fr\/blog\/prix-taxi-aeroport-martinique\/\" rel=\"nofollow\">prix taxi a\u00e9roport Martinique<\/a>.<\/p>\n\n<p class=\"wp-block-paragraph\">Insight : privil\u00e9giez toujours un op\u00e9rateur local licenci\u00e9 qui garantit l\u2019application des r\u00e8gles tarifaires et conna\u00eet l\u2019\u00eele.<\/p>\n\n<h2 class=\"wp-block-heading\">R\u00e9capitulatif rapide et prochaine \u00e9tape<\/h2>\n\n<p class=\"wp-block-paragraph\"><strong>Choisissez<\/strong> : taxi si vous voulez partir imm\u00e9diatement et voyager l\u00e9ger ; transfert pr\u00e9-r\u00e9serv\u00e9 si vous voulez prix fix\u00e9 et suivi du vol ; navette partag\u00e9e si vous cherchez le moins cher et que le temps n\u2019est pas critique. <strong>R\u00e9servez<\/strong> 24\u201348h \u00e0 l\u2019avance en haute saison et pour les vols nocturnes. <strong>V\u00e9rifiez<\/strong> le type de v\u00e9hicule, la politique bagages et la majoration nocturne avant de valider.<\/p>\n\n<p class=\"wp-block-paragraph\">Action concr\u00e8te : bloquez votre transfert d\u00e8s l\u2019achat du billet et notez le num\u00e9ro du chauffeur. Un choix inform\u00e9 \u00e9conomise temps, argent et \u00e9nergie \u00e0 l\u2019arriv\u00e9e.<\/p>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Faut-il ru00e9server un transfert pour une arrivu00e9e tardive (apru00e8s 22h) ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Oui. En haute saison, la ru00e9servation 24u201348h avant garantit la disponibilitu00e9 et verrouille le prix. Les services qui suivent le vol en temps ru00e9el prennent en charge les retards sans frais supplu00e9mentaires.\"}},{\"@type\":\"Question\",\"name\":\"Quelle option choisir pour une famille de 5 personnes avec beaucoup de bagages ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Privilu00e9giez un vu00e9hicule XL Van (5u20137 passagers) avec grand coffre. Ce type de vu00e9hicule u00e9vite plusieurs trajets et assure le confort pour tous.\"}},{\"@type\":\"Question\",\"name\":\"Les taxis u00e0 l'au00e9roport appliquent-ils des majorations ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Oui. La majoration ru00e9glementu00e9e de 50% su2019applique entre 19h et 7h, ainsi que les dimanches et jours fu00e9riu00e9s. Anticipez cette hausse lors de la ru00e9servation.\"}},{\"@type\":\"Question\",\"name\":\"La navette partagu00e9e est-elle rentable pour un court su00e9jour ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Pour un court su00e9jour (moins de 5 jours) et si vous logez dans un resort tout-compris, la navette partagu00e9e peut u00eatre la solution la plus u00e9conomique. Pour plus d'autonomie, la location devient intu00e9ressante si vous restez plus longtemps.\"}}]}\n<\/script>\n<h3>Faut-il r\u00e9server un transfert pour une arriv\u00e9e tardive (apr\u00e8s 22h) ?<\/h3>\n<p>Oui. En haute saison, la r\u00e9servation 24\u201348h avant garantit la disponibilit\u00e9 et verrouille le prix. Les services qui suivent le vol en temps r\u00e9el prennent en charge les retards sans frais suppl\u00e9mentaires.<\/p>\n<h3>Quelle option choisir pour une famille de 5 personnes avec beaucoup de bagages ?<\/h3>\n<p>Privil\u00e9giez un v\u00e9hicule XL Van (5\u20137 passagers) avec grand coffre. Ce type de v\u00e9hicule \u00e9vite plusieurs trajets et assure le confort pour tous.<\/p>\n<h3>Les taxis \u00e0 l&rsquo;a\u00e9roport appliquent-ils des majorations ?<\/h3>\n<p>Oui. La majoration r\u00e9glement\u00e9e de 50% s\u2019applique entre 19h et 7h, ainsi que les dimanches et jours f\u00e9ri\u00e9s. Anticipez cette hausse lors de la r\u00e9servation.<\/p>\n<h3>La navette partag\u00e9e est-elle rentable pour un court s\u00e9jour ?<\/h3>\n<p>Pour un court s\u00e9jour (moins de 5 jours) et si vous logez dans un resort tout-compris, la navette partag\u00e9e peut \u00eatre la solution la plus \u00e9conomique. Pour plus d&rsquo;autonomie, la location devient int\u00e9ressante si vous restez plus longtemps.<\/p>\n\n<!-- Quizz \"Navette a\u00e9roport Martinique Le Lamentin \u2014 Comment choisir le meilleur service en 2026\"\n     Bloc pr\u00eat \u00e0 copier\/coller (pas de <head> ni <body> complets).\n     Hauteur maximale de l'outil limit\u00e9e \u00e0 2000px. Accessible et en fran\u00e7ais.\n-->\n\n<!-- Chargement l\u00e9ger de styles utilitaires (Tailwind en mode navigateur) -->\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@tailwindcss\/browser@4\"><\/script>\n\n<style>\n  \/* Contrainte hauteur max et overflow pour l'int\u00e9grer facilement dans votre page *\/\n  #quiz-navette { max-height: 2000px; overflow:auto; }\n  \/* Card focus visible pour accessibilit\u00e9 clavier *\/\n  .option:focus { outline: 3px solid rgba(59,130,246,0.5); outline-offset: 2px; }\n  \/* Petite animation d'apparition *\/\n  .fade-in { animation: fadeIn 280ms ease-in; }\n  @keyframes fadeIn { from { opacity: 0; transform: translateY(6px);} to { opacity:1; transform: translateY(0);} }\n<\/style>\n\n<div id=\"quiz-navette\" class=\"mx-auto p-4 max-w-xl text-gray-800\">\n  <section aria-labelledby=\"titre-quiz\" class=\"bg-white shadow-md rounded-lg p-5 fade-in\">\n    <h2 id=\"titre-quiz\" class=\"text-xl font-semibold mb-2\">Quiz \u2014 Navette a\u00e9roport Martinique Le Lamentin<\/h2>\n    <p id=\"desc-quiz\" class=\"text-sm text-gray-600 mb-4\">\n      R\u00e9pondez aux quelques questions pour obtenir une recommandation personnalis\u00e9e (taxi, XL Van, navette partag\u00e9e ou voiture de location).\n    <\/p>\n\n    <!-- Zone d'information temps local (optionnelle via API gratuite) -->\n    <div id=\"local-time\" class=\"text-xs text-gray-500 mb-4\" aria-live=\"polite\">\n      Chargement de l&rsquo;heure locale&#8230;\n    <\/div>\n\n    <!-- Questions -->\n    <form id=\"quiz-form\" class=\"space-y-4\" novalidate>\n      <!-- Question 1 -->\n      <fieldset class=\"border rounded p-3\" aria-labelledby=\"q1-legend\">\n        <legend id=\"q1-legend\" class=\"font-medium\">1) Quelle est votre situation principale ?<\/legend>\n        <div class=\"mt-2 grid gap-2 grid-cols-1 sm:grid-cols-2\">\n          <button type=\"button\" class=\"option text-left p-3 bg-slate-50 rounded hover:bg-slate-100 option-btn\" data-q=\"situation\" data-value=\"solo\" aria-pressed=\"false\">Voyageur solo<\/button>\n          <button type=\"button\" class=\"option text-left p-3 bg-slate-50 rounded hover:bg-slate-100 option-btn\" data-q=\"situation\" data-value=\"famille\" aria-pressed=\"false\">Famille<\/button>\n          <button type=\"button\" class=\"option text-left p-3 bg-slate-50 rounded hover:bg-slate-100 option-btn\" data-q=\"situation\" data-value=\"court\" aria-pressed=\"false\">S\u00e9jour court<\/button>\n          <button type=\"button\" class=\"option text-left p-3 bg-slate-50 rounded hover:bg-slate-100 option-btn\" data-q=\"situation\" data-value=\"depart-tot\" aria-pressed=\"false\">D\u00e9part t\u00f4t le matin<\/button>\n        <\/div>\n      <\/fieldset>\n\n      <!-- Question 2 -->\n      <fieldset class=\"border rounded p-3\" aria-labelledby=\"q2-legend\">\n        <legend id=\"q2-legend\" class=\"font-medium\">2) Combien de personnes et de bagages ?<\/legend>\n        <div class=\"mt-2 grid gap-2 grid-cols-1 sm:grid-cols-2\">\n          <button type=\"button\" class=\"option text-left p-3 bg-slate-50 rounded hover:bg-slate-100 option-btn\" data-q=\"taille\" data-value=\"1-2\" aria-pressed=\"false\">1-2 pers, 1-2 bagages<\/button>\n          <button type=\"button\" class=\"option text-left p-3 bg-slate-50 rounded hover:bg-slate-100 option-btn\" data-q=\"taille\" data-value=\"3-4\" aria-pressed=\"false\">3-4 pers, 3-4 bagages<\/button>\n          <button type=\"button\" class=\"option text-left p-3 bg-slate-50 rounded hover:bg-slate-100 option-btn\" data-q=\"taille\" data-value=\"5-plus\" aria-pressed=\"false\">5+ pers ou gros volumes<\/button>\n          <button type=\"button\" class=\"option text-left p-3 bg-slate-50 rounded hover:bg-slate-100 option-btn\" data-q=\"taille\" data-value=\"leger\" aria-pressed=\"false\">Voyage l\u00e9ger (1 petit sac)<\/button>\n        <\/div>\n      <\/fieldset>\n\n      <!-- Question 3 -->\n      <fieldset class=\"border rounded p-3\" aria-labelledby=\"q3-legend\">\n        <legend id=\"q3-legend\" class=\"font-medium\">3) Quel est votre crit\u00e8re principal ?<\/legend>\n        <div class=\"mt-2 grid gap-2 grid-cols-1 sm:grid-cols-2\">\n          <button type=\"button\" class=\"option text-left p-3 bg-slate-50 rounded hover:bg-slate-100 option-btn\" data-q=\"critere\" data-value=\"confort\" aria-pressed=\"false\">Confort \/ rapidit\u00e9<\/button>\n          <button type=\"button\" class=\"option text-left p-3 bg-slate-50 rounded hover:bg-slate-100 option-btn\" data-q=\"critere\" data-value=\"prix\" aria-pressed=\"false\">Prix (\u00e9conomique)<\/button>\n          <button type=\"button\" class=\"option text-left p-3 bg-slate-50 rounded hover:bg-slate-100 option-btn\" data-q=\"critere\" data-value=\"partage\" aria-pressed=\"false\">Pas de souci \u00e0 partager<\/button>\n          <button type=\"button\" class=\"option text-left p-3 bg-slate-50 rounded hover:bg-slate-100 option-btn\" data-q=\"critere\" data-value=\"independance\" aria-pressed=\"false\">Ind\u00e9pendance (voiture)<\/button>\n        <\/div>\n      <\/fieldset>\n\n      <div class=\"flex items-center justify-between mt-2\">\n        <button id=\"btn-recommend\" type=\"button\" class=\"px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 focus:ring-2 focus:ring-blue-400\" aria-label=\"Obtenir la recommandation\">Obtenir la recommandation<\/button>\n        <button id=\"btn-reset\" type=\"button\" class=\"px-3 py-2 bg-gray-100 rounded hover:bg-gray-200\" aria-label=\"R\u00e9initialiser le quiz\">R\u00e9initialiser<\/button>\n      <\/div>\n    <\/form>\n\n    <!-- R\u00e9sultat -->\n    <div id=\"result\" class=\"mt-4 p-4 bg-emerald-50 border rounded hidden\" role=\"status\" aria-live=\"polite\"><\/div>\n\n    <!-- Explication d\u00e9taill\u00e9e pour accessibilit\u00e9 et SEO -->\n    <details class=\"mt-3 text-sm text-gray-600\">\n      <summary class=\"font-medium\">Comment la recommandation est calcul\u00e9e ?<\/summary>\n      <p class=\"mt-2\">Le quiz combine votre situation, la taille du groupe\/bagages et votre crit\u00e8re principal. Il prend aussi en compte si vous avez indiqu\u00e9 un d\u00e9part t\u00f4t le matin (priorit\u00e9 \u00e0 la disponibilit\u00e9). Les recommandations locales tiennent compte des services typiques : taxi pour rapidit\u00e9, XL Van pour groupe\/bagages, navette partag\u00e9e pour petit budget, voiture de location pour ind\u00e9pendance.<\/p>\n    <\/details>\n  <\/section>\n<\/div>\n\n<script>\n\/*\n  Quiz Navette \u2014 JavaScript\n  - Toutes les cha\u00eenes sont en fran\u00e7ais et facilement \u00e9ditables via l'objet `TEXTS`.\n  - API publique (optionnelle) utilis\u00e9e pour afficher l'heure locale :\n    URL utilis\u00e9e : https:\/\/worldtimeapi.org\/api\/timezone\/America\/Martinique\n    Exemple de r\u00e9ponse JSON (abr\u00e9g\u00e9) :\n    {\n      \"abbreviation\": \"AST\",\n      \"client_ip\": \"xxx.xxx.xxx.xxx\",\n      \"datetime\": \"2026-08-16T09:12:35.123456-04:00\",\n      \"day_of_week\": 0,\n      \"timezone\": \"America\/Martinique\",\n      \"utc_offset\": \"-04:00\"\n    }\n  - worldtimeapi.org est gratuit et ne n\u00e9cessite cl\u00e9.\n  - Le code est comment\u00e9 et accessible (roles, aria-live).\n*\/\n\n(function(){\n  \/\/ Textes fran\u00e7ais centralis\u00e9s pour i18n \/ facile modification\n  const TEXTS = {\n    loadingTime: \"Chargement de l'heure locale...\",\n    timeError: \"Impossible de r\u00e9cup\u00e9rer l'heure locale.\",\n    recommendationTitle: \"Recommandation\",\n    options: {\n      taxi: { label: \"Taxi\", explanation: \"Rapide et disponible, id\u00e9al pour voyageur solo ou d\u00e9part t\u00f4t le matin.\" },\n      xlvan: { label: \"XL Van\", explanation: \"Parfait pour groupes et beaucoup de bagages (famille, 5+ personnes).\" },\n      navette: { label: \"Navette partag\u00e9e\", explanation: \"Solution \u00e9conomique si vous \u00eates flexible et acceptez de partager.\" },\n      location: { label: \"Voiture de location\", explanation: \"Pour ind\u00e9pendance et d\u00e9placements sur place, bon pour s\u00e9jours plus longs.\" }\n    }\n  };\n\n  \/\/ R\u00e9cup\u00e9ration et affichage de l'heure locale via API publique (worldtimeapi)\n  const timeContainer = document.getElementById('local-time');\n  timeContainer.textContent = TEXTS.loadingTime;\n\n  \/\/ API gratuite \u2014 worldtimeapi.org (pas de cl\u00e9)\n  const TIME_API = \"https:\/\/worldtimeapi.org\/api\/timezone\/America\/Martinique\";\n  fetch(TIME_API, { cache: \"no-cache\" })\n    .then(resp => {\n      if (!resp.ok) throw new Error(\"Network response not ok\");\n      return resp.json();\n    })\n    .then(data => {\n      \/\/ Example: data.datetime = \"2026-08-16T09:12:35.123456-04:00\"\n      const dt = new Date(data.datetime);\n      \/\/ Format francophone simple (HH:MM, jour mois ann\u00e9e)\n      const options = { hour: '2-digit', minute: '2-digit', day: '2-digit', month: 'long', year: 'numeric' };\n      const formatted = dt.toLocaleString('fr-FR', options);\n      timeContainer.textContent = \"Heure locale (Martinique) : \" + formatted;\n    })\n    .catch(err => {\n      \/\/ \u00c9chec silencieux mais informatif\n      console.warn(\"Erreur API heure locale :\", err);\n      timeContainer.textContent = TEXTS.timeError;\n    });\n\n  \/\/ Gestion du quiz\n  const form = document.getElementById('quiz-form');\n  const optionButtons = Array.from(document.querySelectorAll('.option-btn'));\n  const resultBox = document.getElementById('result');\n  const btnRecommend = document.getElementById('btn-recommend');\n  const btnReset = document.getElementById('btn-reset');\n\n  \/\/ Etat des r\u00e9ponses\n  const answers = {\n    situation: null, \/\/ 'solo' | 'famille' | 'court' | 'depart-tot'\n    taille: null,    \/\/ '1-2' | '3-4' | '5-plus' | 'leger'\n    critere: null    \/\/ 'confort' | 'prix' | 'partage' | 'independance'\n  };\n\n  \/\/ Interaction clavier et s\u00e9lection accessible\n  optionButtons.forEach(btn => {\n    btn.setAttribute('tabindex', '0');\n    \/\/ Manage toggle-like selection per question (radio-like)\n    btn.addEventListener('click', () => selectOption(btn));\n    btn.addEventListener('keydown', (e) => {\n      if (e.key === 'Enter' || e.key === ' ') {\n        e.preventDefault();\n        selectOption(btn);\n      }\n    });\n  });\n\n  function selectOption(btn) {\n    const q = btn.dataset.q;\n    const val = btn.dataset.value;\n\n    \/\/ Deselect other options of same question\n    optionButtons.filter(b => b.dataset.q === q).forEach(b => {\n      b.classList.remove('ring-2','ring-blue-300','bg-blue-50');\n      b.setAttribute('aria-pressed', 'false');\n    });\n\n    \/\/ Select clicked\n    btn.classList.add('ring-2','ring-blue-300','bg-blue-50');\n    btn.setAttribute('aria-pressed', 'true');\n\n    \/\/ Save answer\n    answers[q] = val;\n  }\n\n  \/\/ Simple mapping logique pour recommander un service\n  function computeRecommendation(ans) {\n    \/\/ Priorit\u00e9 : d\u00e9part t\u00f4t le matin => taxi si solo\/s\u00e9jour court ; sinon Van si groupe\n    if (ans.situation === 'depart-tot') {\n      if (ans.taille === '5-plus' || ans.taille === '3-4') return 'xlvan';\n      if (ans.taille === 'leger' || ans.taille === '1-2') return 'taxi';\n      return 'taxi';\n    }\n\n    \/\/ Famille ou beaucoup de bagages => XL Van\n    if (ans.situation === 'famille' || ans.taille === '5-plus') return 'xlvan';\n\n    \/\/ Si crit\u00e8re principal est prix => navette partag\u00e9e (si accepte partage)\n    if (ans.critere === 'prix' || ans.critere === 'partage') {\n      \/\/ Mais si groupe tr\u00e8s grand ou besoin d'ind\u00e9pendance -> voiture ou XL Van\n      if (ans.taille === '5-plus') return 'xlvan';\n      if (ans.critere === 'partage') return 'navette';\n      return 'navette';\n    }\n\n    \/\/ Ind\u00e9pendance => voiture de location (surtout pour s\u00e9jour long)\n    if (ans.critere === 'independance' || ans.situation === 'court') {\n      \/\/ pour s\u00e9jour court on privil\u00e9gie taxi si solo et d\u00e9part rapide\n      if (ans.situation === 'court' && ans.taille === '1-2') return 'taxi';\n      return 'location';\n    }\n\n    \/\/ Confort ou d\u00e9faut de r\u00e9ponse => taxi pour petites tailles, XL Van pour plus\n    if (ans.critere === 'confort') {\n      if (ans.taille === '1-2' || ans.taille === 'leger') return 'taxi';\n      return 'xlvan';\n    }\n\n    \/\/ Cas par d\u00e9faut\n    return 'taxi';\n  }\n\n  function showResult(key) {\n    const rec = TEXTS.options[key];\n    resultBox.classList.remove('hidden');\n    resultBox.innerHTML = `\n      <strong class=\"block text-gray-800\">${TEXTS.recommendationTitle} : ${rec.label}<\/strong>\n      <p class=\"mt-2 text-sm text-gray-700\">${rec.explanation}<\/p>\n      <p class=\"mt-2 text-xs text-gray-600\">Bas\u00e9 sur vos r\u00e9ponses \u2014 situation : ${answers.situation || '\u2014'}, taille\/groupe : ${answers.taille || '\u2014'}, crit\u00e8re : ${answers.critere || '\u2014'}.<\/p>\n    `;\n    \/\/ Focus pour lecteurs d'\u00e9cran\n    resultBox.focus && resultBox.setAttribute('tabindex', '-1');\n    resultBox.focus && resultBox.focus();\n  }\n\n  btnRecommend.addEventListener('click', () => {\n    \/\/ Validation minimale : nous esp\u00e9rons au moins une r\u00e9ponse\n    if (!answers.situation && !answers.taille && !answers.critere) {\n      resultBox.classList.remove('hidden');\n      resultBox.innerHTML = '<strong class=\"block text-red-600\">Veuillez s\u00e9lectionner au moins une option pour obtenir une recommandation.<\/strong>';\n      return;\n    }\n\n    \/\/ Calcul de la recommandation\n    const key = computeRecommendation(answers);\n    showResult(key);\n  });\n\n  btnReset.addEventListener('click', () => {\n    \/\/ Reset styles et \u00e9tat\n    optionButtons.forEach(b => {\n      b.classList.remove('ring-2','ring-blue-300','bg-blue-50');\n      b.setAttribute('aria-pressed','false');\n    });\n    answers.situation = answers.taille = answers.critere = null;\n    resultBox.classList.add('hidden');\n    resultBox.innerHTML = '';\n  });\n\n  \/\/ Pour la lisibilit\u00e9 du code et tests : expose une fonction de recommandation (non globale)\n  \/\/ (utile si vous voulez re-utiliser le calcul c\u00f4t\u00e9 serveur ou tester)\n  window.__quizNavette = {\n    computeRecommendation\n  };\n\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>L&rsquo;a\u00e9roport Aim\u00e9 C\u00e9saire au Lamentin est souvent la premi\u00e8re et la derni\u00e8re image de la Martinique pour de nombreux voyageurs. Choisir la bonne navette a\u00e9roport change tout : temps d&rsquo;attente, co\u00fbt final, confort avec les bagages et arriv\u00e9e sans stress. Cet article compare les options disponibles en 2026, d\u00e9crit les \u00e9tapes concr\u00e8tes pour r\u00e9server un &#8230; <a title=\"Navette a\u00e9roport martinique le lamentin : comment choisir le meilleur service en 2026\" class=\"read-more\" href=\"https:\/\/www.transports-express-caraibes.fr\/blog\/navette-aeroport-martinique\/\" aria-label=\"En savoir plus sur Navette a\u00e9roport martinique le lamentin : comment choisir le meilleur service en 2026\">Lire plus<\/a><\/p>\n","protected":false},"author":3,"featured_media":23620,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[82],"tags":[],"class_list":["post-23621","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-transport"],"views":128,"_links":{"self":[{"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/posts\/23621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/comments?post=23621"}],"version-history":[{"count":0,"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/posts\/23621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/media\/23620"}],"wp:attachment":[{"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/media?parent=23621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/categories?post=23621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/tags?post=23621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}