{"id":221256,"date":"2026-04-01T22:32:20","date_gmt":"2026-04-01T20:32:20","guid":{"rendered":"https:\/\/transponyx.com\/?page_id=221256"},"modified":"2026-04-27T18:45:24","modified_gmt":"2026-04-27T16:45:24","slug":"tour-prive-sur-mesure-cote-azur","status":"publish","type":"page","link":"https:\/\/transponyx.com\/en\/tour-prive-sur-mesure-cote-azur\/","title":{"rendered":"TALC &#8211; Tours \u00e0 la Carte &#8211; Composez Votre Excursion Priv\u00e9e sur la C\u00f4te d&rsquo;Azur &#8211; Onyx Tours"},"content":{"rendered":"<div class=\"et_pb_section_0 et_pb_section et_section_regular et_flex_section\">\n<div class=\"et_pb_row_0 et_pb_row et_flex_row\">\n<div class=\"et_pb_column_0 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone et_flex_column_24_24_widescreen\">\n<div class=\"et_pb_code_0 et_pb_code et_pb_module et_flex_column_24_24_phone\"><div class=\"et_pb_code_inner\"><!-- ============================================================\n     ONYX TOURS \u2014 Tour \u00e0 la Carte v5.2\n     v5.1 + descriptions -40% + fix mobile \u00e9tiquettes\n     ============================================================ -->\n<style>\n.otc *{box-sizing:border-box;margin:0;padding:0;}\n.otc{font-family:'Lato',sans-serif;color:#1a1a1a;background:#F7F3EC;padding:0 0 100px;width:100vw;max-width:100vw;position:relative;left:50%;transform:translateX(-50%);overflow-x:hidden;}\n\n\/* HERO *\/\n.otc-hero{text-align:center;padding:100px 24px 80px;position:relative;overflow:hidden;min-height:75vh;display:flex;flex-direction:column;align-items:center;justify-content:center;}\n.otc-hero-bg{position:absolute;inset:-20% 0;background:url('https:\/\/transponyx.com\/wp-content\/uploads\/ALASSIO-1000-WEBP-e1776368953623.webp') center center\/cover no-repeat;transform:translateZ(0);will-change:transform;transition:transform .1s linear;}\n.otc-hero-overlay{position:absolute;inset:0;background:linear-gradient(180deg,rgba(4,18,14,.06) 0%,rgba(6,25,18,.03) 40%,rgba(4,18,14,.09) 100%);}\n.otc-hero-content{position:relative;z-index:2;width:100%;}\n.otc-hero-lbl{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:#ffffff;border:1px solid rgba(255,255,255,.55);border-radius:20px;padding:5px 16px;margin-bottom:20px;background:rgba(0,0,0,.25);text-shadow:0 1px 4px rgba(0,0,0,.6);}\n.otc-hero h2{font-family:'Playfair Display',Georgia,serif;font-size:clamp(30px,5vw,52px);font-weight:400;color:#ffffff;line-height:1.15;margin-bottom:16px;text-shadow:0 2px 20px rgba(0,0,0,.9),0 1px 6px rgba(0,0,0,.8),0 4px 40px rgba(0,0,0,.6);}\n.otc-hero h2 em{color:#ffffff;font-style:italic;}\n.otc-hero p{font-size:15px;color:#ffffff;max-width:560px;margin:0 auto;line-height:1.75;text-shadow:0 1px 12px rgba(0,0,0,.9),0 2px 20px rgba(0,0,0,.7);}\n\n\/* CHIPS *\/\n.otc-chips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;padding:16px 24px;background:#083D35;}\n.otc-chip{background:rgba(212,175,55,.1);border:1px solid rgba(212,175,55,.25);border-radius:20px;padding:6px 14px;font-size:12px;color:rgba(247,243,236,.85);}\n.otc-chip strong{color:#D4AF37;}\n\n\/* V\u00c9HICULE *\/\n.otc-vehicle-section{background:#fff;padding:24px;border-bottom:1px solid #e8e0d5;}\n.otc-vehicle-title{font-family:'Playfair Display',Georgia,serif;font-size:17px;font-weight:400;color:#083D35;margin-bottom:4px;text-align:center;}\n.otc-vehicle-sub{font-size:12px;color:#6b6560;text-align:center;margin-bottom:18px;}\n.otc-vehicle-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;max-width:860px;margin:0 auto;}\n@media(max-width:700px){.otc-vehicle-grid{grid-template-columns:repeat(2,1fr);}}\n@media(max-width:380px){.otc-vehicle-grid{grid-template-columns:1fr 1fr;gap:8px;}}\n.otc-veh-card{border:2px solid #e8e0d5;border-radius:12px;background:#fafaf8;cursor:pointer;transition:all .22s;overflow:hidden;display:flex;flex-direction:column;}\n.otc-veh-card:hover{border-color:#D4AF37;box-shadow:0 4px 18px rgba(8,61,53,.1);}\n.otc-veh-card.sel{border-color:#D4AF37;background:#fffdf5;box-shadow:0 0 0 3px rgba(212,175,55,.2);}\n.otc-veh-img-wrap{position:relative;overflow:hidden;background:#e8e0d5;}\n.otc-veh-img{width:100%;height:90px;object-fit:cover;display:block;transition:transform .3s;}\n.otc-veh-card:hover .otc-veh-img{transform:scale(1.05);}\n.otc-veh-chk{position:absolute;top:6px;right:6px;width:20px;height:20px;background:rgba(8,61,53,.8);border:1.5px solid rgba(212,175,55,.5);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;color:#D4AF37;opacity:0;transition:all .2s;}\n.otc-veh-card.sel .otc-veh-chk{opacity:1;background:#D4AF37;color:#083D35;}\n.otc-veh-body{padding:9px 10px 11px;flex:1;display:flex;flex-direction:column;gap:3px;}\n.otc-veh-name{font-size:12px;font-weight:700;color:#083D35;line-height:1.2;}\n.otc-veh-cap{font-size:10px;color:#6b6560;display:flex;align-items:center;gap:4px;}\n.otc-veh-cap-icon{font-size:11px;}\n.otc-veh-rate{display:none !important;}\n.otc-veh-nc{font-size:8px;color:#9c9489;font-style:italic;margin-top:2px;text-align:center;}\n\n\/* OPTIONS GUIDE + RESTAURANT *\/\n.otc-options-section{background:#F7F3EC;padding:16px 24px;border-bottom:1px solid #e8e0d5;}\n.otc-options-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;max-width:860px;margin:0 auto;}\n@media(max-width:580px){.otc-options-grid{grid-template-columns:1fr;}}\n.otc-opt-card{background:#fff;border-radius:10px;border:2px solid #e8e0d5;overflow:hidden;cursor:pointer;transition:all .22s;position:relative;}\n.otc-opt-card:hover{border-color:#D4AF37;box-shadow:0 4px 16px rgba(8,61,53,.1);}\n.otc-opt-card.sel{border-color:#D4AF37;box-shadow:0 0 0 3px rgba(212,175,55,.18);}\n.otc-opt-added{display:none;position:absolute;top:8px;left:8px;background:#D4AF37;color:#083D35;font-size:9px;font-weight:700;letter-spacing:.06em;padding:3px 10px;border-radius:10px;align-items:center;gap:3px;pointer-events:none;}\n.otc-opt-added::before{content:'\u2713 ';}\n.otc-opt-card.sel .otc-opt-added{display:flex;}\n.otc-guide-active-badge{display:none;position:absolute;top:8px;left:8px;background:#083D35;color:#D4AF37;font-size:9px;font-weight:700;letter-spacing:.06em;padding:3px 10px;border-radius:10px;align-items:center;gap:3px;pointer-events:none;}\n.otc-guide-active-badge::before{content:'\u2713 ';}\n.otc-opt-card.guide-sel .otc-guide-active-badge{display:flex;}\n.otc-opt-img{width:100%;height:70px;object-fit:cover;display:block;}\n.otc-opt-body{padding:10px 12px 12px;}\n.otc-opt-name{font-family:'Playfair Display',Georgia,serif;font-size:16px;color:#083D35;margin-bottom:5px;}\n.otc-opt-sub{font-size:10px;color:#6b6560;margin-bottom:8px;line-height:1.4;}\n.otc-guide-toggle{display:flex;gap:6px;}\n.otc-guide-btn{flex:1;padding:6px 4px;border-radius:8px;border:1.5px solid #e0d9cf;background:#F7F3EC;font-size:11px;font-weight:700;font-family:'Lato',sans-serif;color:#6b6560;cursor:pointer;transition:all .18s;text-align:center;}\n.otc-guide-btn:hover{border-color:#D4AF37;color:#083D35;}\n.otc-guide-btn.sel{background:#083D35;border-color:#083D35;color:#D4AF37;}\n.otc-guide-devis{font-size:11px;font-weight:700;color:#B89A4E;margin-top:7px;text-align:center;letter-spacing:.04em;}\n.otc-opt-dur-lbl{font-size:9px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#B89A4E;display:block;margin-bottom:5px;}\n.otc-opt-reco{font-size:10px;color:#3E7A58;font-style:italic;margin-top:5px;}\n\/* Restauration toggle *\/\n.otc-rest-toggle{display:flex;gap:6px;margin-top:8px;}\n.otc-rest-btn{flex:1;padding:6px 4px;border-radius:8px;border:1.5px solid #e0d9cf;background:#F7F3EC;font-size:11px;font-weight:700;font-family:'Lato',sans-serif;color:#6b6560;cursor:pointer;transition:all .18s;text-align:center;}\n.otc-rest-btn:hover{border-color:#D4AF37;color:#083D35;}\n.otc-rest-btn.sel{background:#083D35;border-color:#083D35;color:#D4AF37;}\n.otc-rest-prix{font-size:11px;color:#c0392b;font-weight:700;margin-top:6px;text-align:center;letter-spacing:.04em;}\n.otc-rest-note{font-size:10px;color:#6b6560;font-style:italic;margin-top:5px;line-height:1.5;padding:6px 8px;background:rgba(8,61,53,.04);border-radius:6px;border-left:2px solid #083D35;}\n\n\/* VIEW TOGGLE *\/\n.otc-view-toggle{display:flex;align-items:center;justify-content:center;padding:18px 24px 0;background:#F7F3EC;}\n.otc-view-toggle-inner{display:flex;background:#fff;border:1px solid #e0d9cf;border-radius:10px;overflow:hidden;box-shadow:0 2px 8px rgba(8,61,53,.07);}\n.otc-vbtn{display:flex;align-items:center;gap:7px;padding:10px 24px;font-family:'Lato',sans-serif;font-size:13px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#6b6560;background:transparent;border:none;cursor:pointer;transition:all .25s;}\n.otc-vbtn svg{width:16px;height:16px;flex-shrink:0;opacity:.6;transition:opacity .25s;}\n.otc-vbtn.active{background:#083D35;color:#D4AF37;}\n.otc-vbtn.active svg{opacity:1;}\n.otc-vbtn-sep{width:1px;background:#e0d9cf;flex-shrink:0;}\n\n\/* D\u00c9PART *\/\n.otc-depart{padding:18px 24px 0;max-width:680px;margin:0 auto;}\n.otc-depart label{display:block;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#083D35;margin-bottom:8px;}\n.otc-depart input{width:100%;padding:13px 16px;border:1.5px solid #c8bfb0;border-radius:8px;font-size:14px;font-family:'Lato',sans-serif;background:#fff;color:#1a1a1a;outline:none;transition:border-color .2s;}\n.otc-depart input:focus{border-color:#083D35;}\n.otc-depart-note{font-size:12px;color:#6b6560;margin-top:7px;line-height:1.5;}\n\n\/* LAYOUT *\/\n.otc-layout{display:grid;grid-template-columns:1fr 340px;gap:28px;padding:20px 24px 24px;max-width:1200px;margin:0 auto;align-items:start;}\n@media(max-width:900px){.otc-layout{grid-template-columns:1fr;}}\n.otc-map-active .otc-layout{grid-template-columns:1fr;max-width:100%;padding:0;gap:0;}\n.otc-map-active #otcLeftCol{padding:0;min-width:0;}\n.otc-map-active .otc-stitle{padding:12px 16px 8px;background:#F7F3EC;}\n.otc-map-active .otc-depart{max-width:100%;padding:10px 16px 0;background:#F7F3EC;}\n.otc-map-active .otc-map-wrap{border-radius:0;border-left:none;border-right:none;border-top:none;height:calc(100vh - 180px);min-height:480px;width:100%;}\n.otc-map-active #otc-gmap{width:100%;height:100%;border-radius:0;}\n.otc-map-active .otc-sidebar{position:static;border-radius:0;box-shadow:none;border-top:2px solid #D4AF37;}\n@media(max-width:900px){.otc-map-active .otc-map-wrap{height:70vw;min-height:60vh;}}\n\n\/* STITLE *\/\n.otc-stitle{font-family:'Playfair Display',Georgia,serif;font-size:18px;font-weight:400;color:#083D35;padding:14px 0 10px;letter-spacing:.02em;}\n\n\/* DESTINATION GRID *\/\n.otc-dgrid{display:flex;flex-direction:column;gap:10px;}\n\n\/* DESTINATION CARD *\/\n.otc-dcard{background:#fff;border-radius:10px;border:1.5px solid #e8e0d5;overflow:hidden;cursor:pointer;transition:box-shadow .2s,transform .2s,border-color .2s;display:flex;flex-direction:row;align-items:stretch;position:relative;}\n.otc-dcard:hover{box-shadow:0 5px 20px rgba(8,61,53,.12);transform:translateY(-1px);}\n.otc-dcard.sel{border-color:#D4AF37;box-shadow:0 0 0 2px rgba(212,175,55,.22);}\n.otc-dcard-left{display:flex;flex-direction:column;flex-shrink:0;width:170px;}\n.otc-dcard-img-wrap{position:relative;width:100%;overflow:hidden;flex:0 0 150px;height:150px;}\n.otc-dcard-img{width:100%;height:150px;object-fit:cover;display:block;transition:transform .4s;}\n.otc-dcard:hover .otc-dcard-img{transform:scale(1.06);}\n.otc-dcard-chk{position:absolute;top:8px;right:8px;width:22px;height:22px;background:rgba(212,175,55,.9);border:2px solid #fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;color:#083D35;font-weight:700;opacity:0;transition:opacity .2s,background .2s;}\n.otc-dcard.sel .otc-dcard-chk{opacity:1;}\n.otc-dcard-added{display:none;position:absolute;bottom:7px;left:0;right:0;justify-content:center;}\n.otc-dcard-added span{background:#D4AF37;color:#083D35;font-size:9px;font-weight:700;letter-spacing:.06em;padding:3px 10px;border-radius:10px;display:flex;align-items:center;gap:3px;}\n.otc-dcard.sel .otc-dcard-added{display:flex;}\n.otc-dcard-meta{display:flex;flex-direction:column;gap:4px;padding:8px 10px 9px;background:#FAFAF7;border-top:1px solid #f0ebe3;}\n.otc-dcard-meta-rating{display:flex;align-items:center;gap:4px;}\n.otc-dcard-meta-stars{color:#D4AF37;font-size:11px;letter-spacing:0;line-height:1;}\n.otc-dcard-meta-score{font-size:11px;font-weight:700;color:#1a1a1a;}\n.otc-dcard-meta-google{font-size:9.5px;color:#9c9489;font-style:italic;}\n.otc-dcard-meta-row{display:flex;align-items:center;gap:5px;font-size:11px;color:#3a3a3a;line-height:1.3;}\n.otc-dcard-meta-icon{font-size:11px;flex-shrink:0;}\n.otc-dcard-body{padding:10px 12px;flex:1;display:flex;flex-direction:column;justify-content:space-between;min-width:0;}\n.otc-dcard-top{margin-bottom:7px;}\n.otc-dcard-name{font-family:'Playfair Display',Georgia,serif;font-size:16px;font-weight:400;color:#083D35;margin-bottom:3px;line-height:1.2;}\n.otc-dcard-desc{font-size:10px;color:#6b6560;line-height:1.4;}\n.otc-dcard-accroche{font-size:9.5px;color:#4a7c6a;font-style:italic;line-height:1.4;margin-top:3px;margin-bottom:3px;}\n.otc-dcard-seo{display:flex;flex-direction:column;gap:2px;margin:4px 0 3px;}\n.otc-dcard-seo-line{font-size:8.5px;color:#6b6560;line-height:1.4;padding-left:11px;position:relative;}\n.otc-dcard-seo-line::before{content:'\u25c6';position:absolute;left:0;color:#D4AF37;font-size:6px;top:3px;}\n.otc-dur-zone{display:flex;flex-direction:column;gap:5px;}\n.otc-dur-lbl{font-size:9px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#B89A4E;display:block;}\n.otc-durs{display:flex;flex-wrap:wrap;gap:3px;}\n.otc-dur{padding:3px 9px;border-radius:12px;border:1px solid #e0d9cf;background:#F7F3EC;font-size:10px;font-family:'Lato',sans-serif;color:#6b6560;cursor:pointer;transition:all .18s;white-space:nowrap;text-align:center;line-height:1.35;}\n.otc-dur:hover{border-color:#D4AF37;color:#083D35;background:rgba(212,175,55,.1);}\n.otc-dur.dsel{background:#D4AF37;border-color:#D4AF37;color:#083D35;font-weight:700;}\n.otc-durs.otc-durs-special{flex-direction:column;gap:4px;}\n.otc-durs.otc-durs-special .otc-dur{width:100%;text-align:left;padding:4px 10px;}\n.otc-dur-reco{font-size:9px;color:#3E7A58;font-style:italic;}\n\n\/* MAP FLOAT \u2014 horizontal layout *\/\n.otc-float{position:absolute;width:480px;min-width:300px;background:#fff;border-radius:12px;overflow:visible;opacity:0;pointer-events:none;transition:opacity .22s,transform .22s;transform:translateY(6px);z-index:9000;}\n.otc-float.vis{opacity:1;pointer-events:all;transform:translateY(0);}\n.otc-float::before{content:\"\";position:absolute;bottom:-20px;left:50%;transform:translateX(-50%);width:0;height:0;border-left:14px solid transparent;border-right:14px solid transparent;border-top:20px solid rgba(212,175,55,.4);z-index:1;}\n.otc-float::after{content:\"\";position:absolute;bottom:-17px;left:50%;transform:translateX(-50%);width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;border-top:17px solid #fff;z-index:2;}\n.otc-float-inner{border-radius:12px;overflow:hidden;display:flex;flex-direction:row;align-items:stretch;height:190px;box-shadow:0 16px 48px rgba(8,61,53,.28),0 0 0 1.5px rgba(212,175,55,.4);}\n.otc-float-img{width:130px;min-width:130px;flex-shrink:0;object-fit:cover;display:block;height:100%;}\n.otc-float-body{padding:6px 8px 6px 9px;flex:1;min-width:0;overflow-y:hidden;display:flex;flex-direction:column;gap:2px;}\n\/* MAP *\/\n.otc-map-wrap{position:relative;border-radius:12px;overflow:visible;border:1.5px solid #e8e0d5;background:#e8ede4;}\n#otc-gmap{width:100%;height:560px;display:block;border-radius:12px;overflow:hidden;}\n.otc-float-region{font-size:8px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#D4AF37;margin-bottom:1px;}\n.otc-float-name{font-family:'Playfair Display',Georgia,serif;font-size:13px;color:#083D35;margin-bottom:2px;line-height:1.2;}\n.otc-float-desc{font-size:9.5px;color:#6b6560;line-height:1.3;margin-bottom:3px;}\n.otc-float-dur-lbl{font-size:8px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#B89A4E;display:block;margin-bottom:2px;}\n.otc-float-durs{display:flex;flex-wrap:wrap;gap:4px;}\n.otc-float-durs.otc-float-durs-special{flex-direction:column;gap:5px;}\n.otc-float-dur{padding:3px 8px;border-radius:10px;border:1px solid #e0d9cf;background:#F7F3EC;font-size:10px;color:#6b6560;cursor:pointer;transition:all .18s;text-align:center;white-space:nowrap;}\n.otc-float-dur:hover{border-color:#D4AF37;color:#083D35;background:rgba(212,175,55,.1);}\n.otc-float-dur.dsel{background:#D4AF37;border-color:#D4AF37;color:#083D35;font-weight:700;}\n.otc-float-reco{font-size:8px;color:#3E7A58;font-style:italic;margin-top:2px;}\n.otc-float-toggle-btn{position:absolute;top:6px;right:34px;padding:4px 10px;border-radius:16px;border:none;font-size:10px;font-weight:700;font-family:'Lato',sans-serif;cursor:pointer;transition:all .2s;letter-spacing:.04em;background:#083D35;color:#D4AF37;white-space:nowrap;z-index:11;}\n.otc-float-toggle-btn:hover{opacity:.85;}\n.otc-float-toggle-btn.is-added{background:#c0392b;color:#fff;}\n\n.otc-float-close{position:absolute;top:8px;right:8px;width:26px;height:26px;background:rgba(0,0,0,.45);border:none;border-radius:50%;color:#fff;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1;z-index:10;}\n.otc-float-sel-badge{display:none;position:absolute;top:10px;left:10px;background:#D4AF37;color:#083D35;font-size:10px;font-weight:700;letter-spacing:.06em;padding:3px 10px;border-radius:12px;align-items:center;gap:4px;}\n.otc-float.sel-dest .otc-float-sel-badge{display:flex;}\n.otc-float-sel-badge::before{content:'\u2713';font-size:11px;}\n\n\/* SIDEBAR *\/\n.otc-sidebar{position:sticky;top:20px;background:#fff;border-radius:16px;border:1px solid #e8e0d5;overflow:hidden;box-shadow:0 4px 24px rgba(8,61,53,.08);}\n.otc-sb-head{background:linear-gradient(135deg,#062e28,#083D35);padding:18px 20px;}\n.otc-sb-head-title{font-family:'Playfair Display',Georgia,serif;font-size:17px;font-weight:400;color:#F7F3EC;margin-bottom:3px;}\n.otc-sb-head-sub{font-size:11px;color:rgba(247,243,236,.55);letter-spacing:.04em;}\n.otc-sb-veh{display:flex;align-items:center;gap:8px;padding:10px 20px;background:rgba(212,175,55,.06);border-bottom:1px solid #f0ebe3;}\n.otc-sb-veh-icon{font-size:16px;}\n.otc-sb-veh-name{font-size:12px;font-weight:700;color:#083D35;flex:1;}\n.otc-sb-veh-rate{font-size:12px;color:#B89A4E;font-weight:700;}\n.otc-sb-metrics{padding:14px 20px;border-bottom:1px solid #f0ebe3;}\n.otc-sb-price-row{display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;margin-bottom:10px;gap:5px;}\n.otc-sb-price{font-family:'Playfair Display',Georgia,serif;font-size:32px;font-weight:400;color:#083D35;text-align:center;}\n.otc-sb-price-unit{font-size:11px;color:#6b6560;margin-top:2px;text-align:center;}\n.otc-sb-price-min{font-size:10px;color:#B89A4E;font-weight:700;text-align:center;margin-top:5px;padding:4px 10px;background:rgba(184,154,78,.08);border-radius:6px;letter-spacing:.02em;line-height:1.4;}\n.otc-sb-badge{display:none;}\n.otc-sb-counters{display:grid;grid-template-columns:1fr 1fr;gap:8px;}\n.otc-sb-counter{background:#F7F3EC;border-radius:8px;padding:9px 10px;border:1px solid #e8e0d5;text-align:center;}\n.otc-sb-counter-lbl{font-size:9px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#9c9489;margin-bottom:3px;}\n.otc-sb-counter-val{font-size:16px;font-weight:700;color:#083D35;line-height:1;}\n.otc-sb-counter.visit .otc-sb-counter-lbl{color:#3E7A58;}\n.otc-sb-counter.visit .otc-sb-counter-val{color:#3E7A58;}\n.otc-sb-counter.transit .otc-sb-counter-lbl{color:#B89A4E;}\n.otc-sb-counter.transit .otc-sb-counter-val{color:#B89A4E;}\n.otc-sb-tip{font-size:10px;color:#9c9489;font-style:italic;padding:6px 20px 2px;line-height:1.4;}\n.otc-sb-tip.visible{color:#B89A4E;}\n.otc-sb-time-row{display:flex;align-items:center;justify-content:space-between;padding:10px 20px 12px;border-bottom:1px solid #f0ebe3;}\n.otc-sb-time-lbl{font-size:12px;color:#6b6560;}\n.otc-sb-time-val{font-size:15px;font-weight:700;color:#083D35;}\n.otc-sb-list{padding:12px 20px;border-bottom:1px solid #f0ebe3;max-height:260px;overflow-y:auto;}\n.otc-sb-empty{font-size:13px;color:#9c9489;font-style:italic;padding:6px 0;}\n.otc-sb-item{display:flex;align-items:center;gap:8px;padding:4px 0;}\n.otc-sb-dot{width:8px;height:8px;background:#D4AF37;border-radius:50%;flex-shrink:0;}\n.otc-sb-iname{font-size:12px;color:#1a1a1a;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}\n.otc-sb-idur{font-size:11px;font-weight:700;color:#083D35;white-space:nowrap;}\n.otc-sb-transit{font-size:11px;color:#9c9489;padding:2px 0 2px 18px;}\n\/* Sidebar action buttons *\/\n.otc-sb-actions{display:flex;align-items:center;gap:3px;flex-shrink:0;}\n.otc-sb-btn{width:22px;height:22px;border:none;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:11px;line-height:1;transition:all .18s;padding:0;flex-shrink:0;}\n.otc-sb-btn-edit{background:rgba(8,61,53,.08);color:#083D35;}\n.otc-sb-btn-edit:hover{background:#083D35;color:#D4AF37;}\n.otc-sb-btn-del{background:rgba(192,57,43,.08);color:#c0392b;}\n.otc-sb-btn-del:hover{background:#c0392b;color:#fff;}\n.otc-sb-btn-up,.otc-sb-btn-down{background:rgba(184,154,78,.12);color:#B89A4E;}\n.otc-sb-btn-up:hover,.otc-sb-btn-down:hover{background:#B89A4E;color:#fff;}\n.otc-sb-btn-up.hidden,.otc-sb-btn-down.hidden{visibility:hidden;}\n\/* Sidebar inline edit panel *\/\n.otc-sb-edit-panel{background:#F7F3EC;border-radius:8px;padding:8px 10px;margin:3px 0 5px;border:1px solid #e0d9cf;display:none;}\n.otc-sb-edit-panel.open{display:block;}\n.otc-sb-edit-lbl{font-size:9px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#B89A4E;margin-bottom:6px;display:block;}\n.otc-sb-edit-durs{display:flex;flex-wrap:wrap;gap:4px;}\n.otc-sb-edit-dur{padding:3px 8px;border-radius:10px;border:1px solid #e0d9cf;background:#fff;font-size:10px;font-family:'Lato',sans-serif;color:#6b6560;cursor:pointer;transition:all .16s;white-space:nowrap;}\n.otc-sb-edit-dur:hover{border-color:#D4AF37;color:#083D35;}\n.otc-sb-edit-dur.sel{background:#D4AF37;border-color:#D4AF37;color:#083D35;font-weight:700;}\n\n\/* FORM *\/\n.otc-form{padding:16px 20px 20px;}\n.otc-form-title{font-size:13px;font-weight:700;color:#083D35;letter-spacing:.04em;text-transform:uppercase;margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid #f0ebe3;}\n.otcf{margin-bottom:12px;}\n.otcf label{display:block;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#083D35;margin-bottom:5px;}\n.req{color:#c0392b;}\n.otcf input,.otcf select,.otcf textarea{width:100%;padding:10px 12px;border:1.5px solid #d8d0c4;border-radius:8px;font-size:13px;font-family:'Lato',sans-serif;background:#fafaf8;color:#1a1a1a;outline:none;transition:border-color .2s;}\n.otcf input:focus,.otcf select:focus,.otcf textarea:focus{border-color:#083D35;background:#fff;}\n.otcf textarea{resize:vertical;min-height:72px;line-height:1.5;}\n.otcf-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;}\n.otcf-row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;}\n.otcf.err input,.otcf.err select{border-color:#c0392b;background:#fef9f9;}\n.errmsg{font-size:11px;color:#c0392b;margin-top:4px;display:none;}\n.otcf.err .errmsg{display:block;}\n.otc-pax-warn{font-size:11px;color:#c0392b;margin-top:5px;display:none;font-style:italic;}\n.otc-pax-warn.show{display:block;}\n.otc-pax-note{font-size:10px;color:#9c9489;margin-top:5px;font-style:italic;line-height:1.4;}\n\n\/* PROMO CODE *\/\n.otc-promo{background:#F9F6F0;border:1.5px dashed #D4AF37;border-radius:10px;padding:14px;margin:14px 0;}\n.otc-promo-title{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#B89A4E;margin-bottom:10px;}\n.otc-promo-row{display:flex;gap:8px;}\n.otc-promo-input{flex:1;padding:9px 12px;border:1.5px solid #d8d0c4;border-radius:7px;font-size:13px;font-family:'Lato',sans-serif;background:#fff;color:#1a1a1a;outline:none;transition:border-color .2s;text-transform:uppercase;letter-spacing:.06em;}\n.otc-promo-input:focus{border-color:#D4AF37;}\n.otc-promo-input:disabled{background:#f0ebe3;color:#9c9489;}\n.otc-promo-btn{padding:9px 16px;background:#083D35;color:#ffffff !important;border:none;border-radius:7px;font-size:12px;font-weight:700;font-family:'Lato',sans-serif;cursor:pointer;white-space:nowrap;transition:all .2s;letter-spacing:.05em;}\n.otc-promo-btn:hover{background:#0a4d42;}\n.otc-promo-msg{font-size:12px;margin-top:7px;font-weight:700;line-height:1.4;}\n.otc-promo-msg.ok{color:#3E7A58;}\n.otc-promo-msg.err{color:#c0392b;}\n.otc-promo-applied{display:none;align-items:center;justify-content:space-between;margin-top:8px;background:#e8f4ee;border-radius:7px;padding:7px 10px;}\n.otc-promo-applied.show{display:flex;}\n.otc-promo-applied-lbl{font-size:12px;color:#3E7A58;font-weight:700;}\n.otc-promo-remove{background:none;border:none;color:#9c9489;font-size:11px;cursor:pointer;font-family:'Lato',sans-serif;text-decoration:underline;}\n\n\/* CANCEL + PAY *\/\n.otc-cancel{background:#f9f6f0;border-radius:10px;padding:14px;margin:12px 0;border:1px solid #e8e0d5;}\n.otc-cancel-title{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#083D35;margin-bottom:9px;}\n.otc-cancel-item{display:flex;gap:8px;font-size:12px;color:#3a3530;margin-bottom:5px;line-height:1.5;}\n.otc-ci{color:#3E7A58;font-weight:700;flex-shrink:0;}\n.otc-pay-group{display:flex;flex-direction:column;gap:7px;}\n.otc-pay-opt{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1.5px solid #e0d9cf;border-radius:8px;cursor:pointer;transition:border-color .2s;background:#fafaf8;}\n.otc-pay-opt.psel{border-color:#D4AF37;background:rgba(212,175,55,.05);}\n.otc-pay-opt input{width:16px;height:16px;flex-shrink:0;accent-color:#D4AF37;}\n.otc-pay-lbl{display:flex;flex-direction:column;gap:2px;}\n.otc-pay-lbl strong{font-size:12px;color:#1a1a1a;}\n.otc-pay-lbl span{font-size:11px;color:#6b6560;}\n.otc-sbtn{width:100%;padding:12px;border-radius:9px;border:none;font-size:13px;font-weight:700;font-family:'Lato',sans-serif;cursor:pointer;transition:all .2s;}\n.otc-sbtn:hover{opacity:.88;transform:translateY(-1px);}\n.otc-sbtn-submit{background:linear-gradient(135deg,#062e28 0%,#083D35 100%) !important;color:#ffffff !important;font-size:14px !important;padding:15px 12px !important;letter-spacing:.05em !important;text-transform:uppercase !important;border:1px solid rgba(212,175,55,.3) !important;box-shadow:0 4px 16px rgba(8,61,53,.25) !important;margin-top:8px !important;}\n.otc-sbtn-submit:hover{box-shadow:0 6px 20px rgba(8,61,53,.35);transform:translateY(-2px);opacity:1;}\n.otc-sbtn-submit:active{transform:translateY(0);}\n.otc-sbtn-submit:disabled{opacity:.55;cursor:not-allowed;transform:none;}\n.otc-send-note{font-size:11px;color:#9c9489;margin-top:8px;line-height:1.5;text-align:center;}\n@keyframes otcSpin{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}\n\/* =======================================\n   STEP SYSTEM + SEARCH AUTOCOMPLETE\n   ======================================= *\/\n.otc-step-num{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:#083D35;color:#D4AF37;font-size:11px;font-weight:700;flex-shrink:0;transition:background .3s,color .3s,box-shadow .3s;}\n.otc-step-num.done{background:#3E7A58 !important;color:#fff !important;box-shadow:none !important;}\n.otc-step-num.active{background:#D4AF37 !important;color:#083D35 !important;box-shadow:0 0 0 3px rgba(212,175,55,.3);}\n.otc-step-tag{font-size:9px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#B89A4E;display:block;line-height:1.2;}\n.otc-step-hd{display:flex;align-items:center;gap:10px;}\n.otc-step-hd-txt{display:flex;flex-direction:column;gap:2px;}\n\/* Autocomplete dropdown items *\/\n.otc-ac-item{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;border-bottom:1px solid #f0ebe3;transition:background .15s;}\n.otc-ac-item:last-child{border-bottom:none;}\n.otc-ac-item:hover{background:#F7F3EC;}\n.otc-ac-item.focused{background:#F7F3EC;}\n.otc-ac-item-img{width:38px;height:38px;border-radius:6px;object-fit:cover;flex-shrink:0;}\n.otc-ac-item-info{flex:1;min-width:0;}\n.otc-ac-item-name{font-size:13px;font-weight:700;color:#083D35;line-height:1.2;}\n.otc-ac-item-name em{color:#D4AF37;font-style:normal;}\n.otc-ac-item-region{font-size:10px;color:#9c9489;}\n.otc-ac-item-added{font-size:9px;background:#3E7A58;color:#fff;padding:2px 7px;border-radius:8px;flex-shrink:0;}\n\/* Search bar *\/\n.otc-search-wrap{position:relative;margin-bottom:12px;}\n.otc-search-icon{position:absolute;left:13px;top:50%;transform:translateY(-50%);font-size:14px;pointer-events:none;color:#9c9489;}\n.otc-search-input{width:100%;padding:11px 14px 11px 38px;border:1.5px solid #d8d0c4;border-radius:10px;font-size:13px;font-family:'Lato',sans-serif;background:#fff;color:#1a1a1a;outline:none;transition:border-color .2s,box-shadow .2s;}\n.otc-search-input:focus{border-color:#083D35;box-shadow:0 0 0 3px rgba(8,61,53,.08);}\n.otc-search-input::placeholder{color:#b0a898;}\n.otc-search-clear{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;font-size:16px;color:#9c9489;cursor:pointer;padding:4px;display:none;line-height:1;}\n.otc-search-clear.show{display:block;}\n.otc-search-hint{font-size:11px;color:#9c9489;margin-top:6px;font-style:italic;display:flex;align-items:center;gap:5px;}\n.otc-search-no-result{text-align:center;padding:28px 12px;color:#9c9489;font-style:italic;font-size:13px;display:none;}\n\/* Step guard popup enhancements *\/\n.otc-guard-steps li .otc-gs-icon{font-size:16px;flex-shrink:0;}\n\n\/* GUARD POPUP *\/\n.otc-guard-overlay{position:fixed;inset:0;background:rgba(4,18,14,.55);backdrop-filter:blur(4px);z-index:99998;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .25s;pointer-events:none;}\n.otc-guard-overlay.show{opacity:1;pointer-events:all;}\n.otc-guard-box{background:#fff;border-radius:16px;padding:28px 28px 24px;max-width:380px;width:90%;box-shadow:0 24px 60px rgba(4,18,14,.35);transform:translateY(16px);transition:transform .25s;text-align:center;}\n.otc-guard-overlay.show .otc-guard-box{transform:translateY(0);}\n.otc-guard-icon{font-size:36px;margin-bottom:12px;}\n.otc-guard-title{font-family:'Playfair Display',Georgia,serif;font-size:18px;font-weight:400;color:#083D35;margin-bottom:10px;}\n.otc-guard-steps{list-style:none;margin:0 0 18px;padding:0;display:flex;flex-direction:column;gap:8px;}\n.otc-guard-steps li{display:flex;align-items:center;gap:10px;font-size:13px;color:#3a3530;background:#F7F3EC;border-radius:8px;padding:9px 12px;}\n.otc-guard-steps li.done{color:#3E7A58;background:#e8f4ee;}\n.otc-guard-steps li .otc-gs-num{width:22px;height:22px;border-radius:50%;background:#083D35;color:#D4AF37;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;}\n.otc-guard-steps li.done .otc-gs-num{background:#3E7A58;color:#fff;}\n.otc-guard-btn{padding:11px 28px;background:linear-gradient(135deg,#062e28,#083D35);color:#fff;border:none;border-radius:8px;font-size:13px;font-weight:700;font-family:'Lato',sans-serif;cursor:pointer;letter-spacing:.04em;}\n.otc-guard-btn:hover{opacity:.88;}\n\/* Disabled card overlay *\/\n.otc-dgrid.otc-locked .otc-dcard{opacity:.55;pointer-events:none;filter:grayscale(30%);}\n.otc-dgrid.otc-locked .otc-dcard::after{content:'';position:absolute;inset:0;cursor:not-allowed;}\n\n\n\/* STICKY BAR *\/\n.otc-sticky{position:fixed;bottom:0;left:0;right:0;background:rgba(5,22,18,.96);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-top:1px solid rgba(212,175,55,.3);padding:12px 24px;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:0;z-index:99999;transform:translateY(110%);transition:transform .35s cubic-bezier(.4,0,.2,1);pointer-events:none;}\n.otc-sticky.show{transform:translateY(0);pointer-events:all;}\n.otc-sticky-center{display:flex;align-items:center;justify-content:center;gap:0;flex-wrap:wrap;}\n.otc-sticky-item{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0 22px;}\n.otc-sticky-lbl{font-size:9px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:rgba(212,175,55,.6);margin-bottom:3px;}\n.otc-sticky-sep{width:1px;height:38px;background:rgba(212,175,55,.2);flex-shrink:0;}\n.otc-sticky-price{font-family:'Playfair Display',Georgia,serif;font-size:24px;color:#D4AF37;line-height:1;}\n.otc-sticky-price-eur{font-size:14px;color:rgba(212,175,55,.65);}\n.otc-sticky-price-block{display:flex;align-items:baseline;gap:5px;}\n.otc-sticky-time-val{font-size:18px;font-weight:700;color:#F7F3EC;line-height:1;}\n.otc-sticky-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:7px;font-family:'Lato',sans-serif;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;cursor:pointer;border:none;text-decoration:none;transition:opacity .2s,transform .15s;white-space:nowrap;}\n.otc-sticky-btn:hover{opacity:.85;transform:translateY(-1px);}\n.otc-sticky-btn.submit-sticky{background:#D4AF37;color:#000000;font-weight:900;border:none;font-size:13px;padding:11px 28px;border-radius:8px;letter-spacing:.08em;}\n.otc-sticky-btn.submit-sticky:hover{background:#e8c84a;opacity:1;}\n.otc-sticky-dismiss{position:absolute;right:16px;bottom:16px;background:none;border:none;color:rgba(247,243,236,.25);font-size:18px;cursor:pointer;padding:0 4px;line-height:1;flex-shrink:0;transition:color .2s;}\n.otc-sticky-dismiss:hover{color:rgba(247,243,236,.6);}\n\n\/* RESPONSIVE *\/\n@media(max-width:680px){\n  .otc-layout{padding:12px;}\n  .otcf-row{grid-template-columns:1fr;}\n  .otcf-row3{grid-template-columns:1fr 1fr;}\n  .otc-dcard-left{width:120px;}.otc-dcard-img-wrap{height:120px;flex:0 0 120px;}.otc-dcard-img{height:120px;}\n  .otc-promo-row{flex-direction:column;gap:6px;}\n  .otc-promo-btn{width:100%;padding:11px;}\n  .otc-chips{padding:10px 12px;gap:6px;}\n  .otc-chip{font-size:11px;max-width:calc(50% - 3px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}\n  .otc-dur{font-size:9px;padding:2px 7px;border-radius:10px;}\n  .otc-durs{gap:3px;}\n  .otc-dcard-seo-line{font-size:8px;}\n  .otc-hero-lbl{font-size:10px;letter-spacing:.1em;padding:4px 12px;max-width:calc(100vw - 48px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}\n  .otc-opt-added,.otc-guide-active-badge{max-width:calc(100% - 16px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}\n  .otc-dcard-added span{max-width:90px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}\n  .otc-sticky{flex-direction:column;align-items:stretch;padding:10px 14px 14px;gap:0;padding-bottom:env(safe-area-inset-bottom, 14px);}\n  .otc-sticky-dismiss{position:absolute;top:8px;right:10px;bottom:auto;font-size:15px;}\n  .otc-sticky-center{flex-direction:column;align-items:stretch;gap:0;width:100%;}\n  .otc-sticky-meta-row{display:flex;align-items:center;justify-content:center;width:100%;margin-bottom:9px;}\n  .otc-sticky-center > .otc-sticky-item:nth-child(1),.otc-sticky-center > .otc-sticky-item:nth-child(3){flex:1;padding:0 8px;}\n  .otc-sticky-center > .otc-sticky-sep:nth-child(2){height:32px;flex-shrink:0;}\n  .otc-sticky-center > .otc-sticky-sep:nth-child(4){display:none;}\n  .otc-sticky-center > .otc-sticky-item:nth-child(5){width:100%;padding:0;}\n  .otc-sticky-btn.submit-sticky{width:100%;justify-content:center;padding:14px 20px;font-size:15px;border-radius:10px;letter-spacing:.1em;box-shadow:0 4px 16px rgba(212,175,55,.35);}\n  .otc-sticky-lbl{font-size:8px;letter-spacing:.1em;margin-bottom:2px;}\n  .otc-sticky-price{font-size:20px;}\n  .otc-sticky-price-eur{font-size:13px;}\n  .otc-sticky-time-val{font-size:17px;font-weight:700;}\n  .otc-sticky-sep{height:32px;}\n}\n@media(max-width:390px){\n  .otc-sticky-price{font-size:18px;}\n  .otc-sticky-time-val{font-size:15px;}\n  .otc-sticky-btn.submit-sticky{font-size:13px;padding:13px;}\n  .otc-chip{font-size:10px;padding:5px 10px;}\n  .otc-dur{font-size:8px;padding:2px 6px;}\n}\n\n\/* -- FILTRES CAT\u00c9GORIE ----------------------- *\/\n.otc-filters{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:16px;padding:2px 0;}\n.otc-filter-btn{display:flex;align-items:center;gap:5px;padding:6px 13px;border-radius:20px;border:1.5px solid #e0d9cf;background:#fff;font-size:11px;font-weight:700;font-family:'Lato',sans-serif;color:#6b6560;cursor:pointer;transition:all .2s;letter-spacing:.04em;white-space:nowrap;}\n.otc-filter-btn:hover{border-color:#D4AF37;color:#083D35;}\n.otc-filter-btn.active{background:#083D35;border-color:#083D35;color:#D4AF37;}\n.otc-filter-count{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;border-radius:8px;background:rgba(212,175,55,.25);color:#B89A4E;font-size:9px;font-weight:700;padding:0 4px;}\n.otc-filter-btn.active .otc-filter-count{background:rgba(212,175,55,.3);color:#D4AF37;}\n.otc-cat-sep{width:100%;height:1px;background:#f0ebe3;margin:4px 0 8px;}\n.otc-cat-label{font-size:9px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#9c9489;padding:6px 0 4px;display:block;}\n\n\n\/* -- MULTI-V\u00c9HICULE --------------------------- *\/\n.otc-veh-card{position:relative;}\n.otc-veh-qty{position:absolute;top:6px;left:6px;z-index:4;display:none;align-items:center;gap:0;background:#083D35;border:1.5px solid #D4AF37;border-radius:20px;overflow:hidden;}\n.otc-veh-card.sel .otc-veh-qty{display:flex;}\n.otc-veh-qty-btn{width:22px;height:22px;background:none;border:none;color:#D4AF37;font-size:14px;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1;padding:0;transition:background .15s;}\n.otc-veh-qty-btn:hover{background:rgba(212,175,55,.2);}\n.otc-veh-qty-val{font-size:12px;font-weight:700;color:#D4AF37;min-width:18px;text-align:center;line-height:1;}\n.otc-sb-veh-multi{padding:10px 20px;background:rgba(212,175,55,.05);border-bottom:1px solid #f0ebe3;}\n.otc-sb-veh-multi-row{display:flex;align-items:center;gap:8px;margin-bottom:4px;}\n.otc-sb-veh-multi-row:last-child{margin-bottom:0;}\n.otc-sb-veh-multi-icon{font-size:14px;flex-shrink:0;}\n.otc-sb-veh-multi-name{font-size:11px;font-weight:700;color:#083D35;flex:1;}\n.otc-sb-veh-multi-qty{font-size:10px;color:#6b6560;white-space:nowrap;}\n.otc-sb-veh-multi-rate{font-size:11px;color:#B89A4E;font-weight:700;white-space:nowrap;}\n.otc-sb-veh-total{display:flex;justify-content:space-between;align-items:center;padding:6px 20px 10px;border-bottom:1px solid #f0ebe3;background:rgba(212,175,55,.04);}\n.otc-sb-veh-total-lbl{font-size:10px;color:#6b6560;}\n.otc-sb-veh-total-cap{font-size:12px;font-weight:700;color:#083D35;}\n\n\/* -- BOUTON \u24d8 INFO \u2014 cercle en haut \u00e0 droite de la card - *\/\n.otc-info-btn{\n  position:absolute;top:6px;right:6px;\n  width:20px;height:20px;border-radius:50%;\n  background:#083D35;border:1.5px solid #D4AF37;\n  color:#D4AF37;font-size:11px;font-weight:900;font-family:'Lato',sans-serif;\n  display:flex;align-items:center;justify-content:center;\n  cursor:pointer;z-index:20;\n  box-shadow:0 1px 4px rgba(0,0,0,.25);\n  transition:background .18s,transform .18s;\n  user-select:none;line-height:1;\n}\n.otc-info-btn:hover{background:#D4AF37;color:#083D35;transform:scale(1.15);}\n\/* Popup global -- container inject\u00e9 par JS *\/\n#otc-info-popup-global{\n  position:fixed;z-index:999999;\n  background:#fff;border-radius:10px;\n  box-shadow:0 16px 48px rgba(8,61,53,.32),0 0 0 1.5px rgba(212,175,55,.4);\n  opacity:0;pointer-events:none;\n  transition:opacity .18s,transform .18s;\n  transform:translateY(6px);\n  max-width:300px;min-width:200px;\n  display:none;\n}\n#otc-info-popup-global.vis{opacity:1;pointer-events:all;transform:translateY(0);display:block;}\n\/* Fl\u00e8che dynamique \u2014 via JS classe arrow-top \/ arrow-bottom *\/\n#otc-info-popup-global.arrow-bottom::after{content:'';position:absolute;top:100%;left:var(--aw,18px);transform:translateX(-50%);border:7px solid transparent;border-top-color:#fff;pointer-events:none;}\n#otc-info-popup-global.arrow-bottom::before{content:'';position:absolute;top:100%;left:var(--aw,18px);transform:translateX(-50%);border:8px solid transparent;border-top-color:rgba(212,175,55,.4);pointer-events:none;}\n#otc-info-popup-global.arrow-top::after{content:'';position:absolute;bottom:100%;left:var(--aw,18px);transform:translateX(-50%);border:7px solid transparent;border-bottom-color:#fff;pointer-events:none;}\n#otc-info-popup-global.arrow-top::before{content:'';position:absolute;bottom:100%;left:var(--aw,18px);transform:translateX(-50%);border:8px solid transparent;border-bottom-color:rgba(212,175,55,.4);pointer-events:none;}\n.otc-ip-head{background:linear-gradient(135deg,#062e28,#083D35);border-radius:10px 10px 0 0;padding:8px 11px;}\n.otc-ip-head-name{font-family:'Playfair Display',Georgia,serif;font-size:12px;font-weight:400;color:#F7F3EC;line-height:1.25;}\n.otc-ip-head-aoc{font-size:8px;color:rgba(212,175,55,.7);letter-spacing:.07em;text-transform:uppercase;margin-top:1px;}\n.otc-ip-body{padding:8px 11px 10px;}\n.otc-ip-section{margin-bottom:7px;}\n.otc-ip-section:last-child{margin-bottom:0;}\n.otc-ip-section-title{font-size:8px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:#B89A4E;margin-bottom:4px;}\n.otc-ip-row{display:flex;align-items:flex-start;gap:5px;font-size:9px;color:#3a3530;margin-bottom:2px;line-height:1.4;}\n.otc-ip-icon{flex-shrink:0;font-size:9px;margin-top:1px;line-height:1;}\n.otc-ip-val{flex:1;}\n.otc-ip-val strong{color:#083D35;}\n.otc-ip-price{font-size:10px;font-weight:700;color:#B89A4E;}\n.otc-ip-divider{height:1px;background:#f0ebe3;margin:5px 0;}\n<\/style>\n\n<div class=\"otc\">\n\n<!-- HERO -->\n<div class=\"otc-hero\" id=\"otcHero\">\n  <div class=\"otc-hero-bg\" id=\"otcHeroBg\"><\/div>\n  <div class=\"otc-hero-overlay\"><\/div>\n  <div class=\"otc-hero-content\">\n    <span class=\"otc-hero-lbl\">\u25c6 Onyx Tours \u2014 Tour Sur-Mesure \u00b7 Riviera &amp; Vignobles<\/span>\n    <h2>Cr\u00e9ez votre <em>Tour \u00e0 la Carte<\/em><\/h2>\n    <p>Destinations iconiques, vignobles de Provence et C\u00f4te d'Azur, mus\u00e9es, parfumeries et gastronomie \u2014 composez la journ\u00e9e id\u00e9ale sur mesure.<\/p>\n  <\/div>\n<\/div>\n\n<div class=\"otc-chips\" id=\"otcChipsBar\">\n  <div class=\"otc-chip\">Tarif calcul\u00e9 selon le v\u00e9hicule et la dur\u00e9e totale<\/div>\n  <div class=\"otc-chip\"><strong>\u2193<\/strong> S\u00e9lectionnez votre v\u00e9hicule ci-dessous<\/div>\n<\/div>\n\n<!-- S\u00c9LECTEUR V\u00c9HICULE -->\n<div class=\"otc-vehicle-section\">\n  <div class=\"otc-step-hd\" style=\"justify-content:center;margin-bottom:6px;\">\n    <span class=\"otc-step-num active\" id=\"snum1\">1<\/span>\n    <div class=\"otc-step-hd-txt\">\n      <span class=\"otc-step-tag\">\u00c9tape 1<\/span>\n      <span class=\"otc-vehicle-title\" style=\"font-family:'Playfair Display',Georgia,serif;font-size:17px;font-weight:400;color:#083D35;\">Choisissez votre v\u00e9hicule<\/span>\n    <\/div>\n  <\/div>\n  <div class=\"otc-vehicle-sub\">Tarif \u00e0 l'heure \u00b7 Chauffeur-guide inclus \u00b7 100% privatif<\/div>\n  <div class=\"otc-vehicle-grid\">\n    <div class=\"otc-veh-card\" id=\"veh-berline-std\" onclick=\"otcSelectVeh('berline-std')\">\n      <div class=\"otc-veh-qty\" id=\"qty-berline-std\"><button class=\"otc-veh-qty-btn\" onclick=\"otcVehQty(event,'berline-std',-1)\">\u2212<\/button><span class=\"otc-veh-qty-val\" id=\"qv-berline-std\">1<\/span><button class=\"otc-veh-qty-btn\" onclick=\"otcVehQty(event,'berline-std',1)\">+<\/button><\/div>\n      <div class=\"otc-veh-img-wrap\"><img decoding=\"async\" class=\"otc-veh-img\" src=\"https:\/\/transponyx.com\/wp-content\/uploads\/suzuki-swace-black-color-standard-sedan-for-nice-airport-transfer-driver-transponyx.webp\" alt=\"Berline Standard\" loading=\"lazy\"\/><div class=\"otc-veh-chk\">\u2713<\/div><\/div>\n      <div class=\"otc-veh-body\"><div class=\"otc-veh-name\">Berline Standard<\/div><div class=\"otc-veh-cap\"><span class=\"otc-veh-cap-icon\">\ud83d\udc64<\/span> Max 3 passagers<\/div><div class=\"otc-veh-rate\">60 \u20ac <span>\/ heure<\/span><\/div><div class=\"otc-veh-nc\">Photo non contractuelle \u00b7 ce v\u00e9hicule ou \u00e9quivalent<\/div><\/div>\n    <\/div>\n    <div class=\"otc-veh-card\" id=\"veh-berline-biz\" onclick=\"otcSelectVeh('berline-biz')\">\n      <div class=\"otc-veh-qty\" id=\"qty-berline-biz\"><button class=\"otc-veh-qty-btn\" onclick=\"otcVehQty(event,'berline-biz',-1)\">\u2212<\/button><span class=\"otc-veh-qty-val\" id=\"qv-berline-biz\">1<\/span><button class=\"otc-veh-qty-btn\" onclick=\"otcVehQty(event,'berline-biz',1)\">+<\/button><\/div>\n      <div class=\"otc-veh-img-wrap\"><img decoding=\"async\" class=\"otc-veh-img\" src=\"https:\/\/transponyx.com\/wp-content\/uploads\/mercedes-classe-e-black-color-business-sedan-for-nice-airport-transfer-driver-transponyx.webp\" alt=\"Berline Business\" loading=\"lazy\"\/><div class=\"otc-veh-chk\">\u2713<\/div><\/div>\n      <div class=\"otc-veh-body\"><div class=\"otc-veh-name\">Berline Business<\/div><div class=\"otc-veh-cap\"><span class=\"otc-veh-cap-icon\">\ud83d\udc64<\/span> Max 3 passagers<\/div><div class=\"otc-veh-rate\">70 \u20ac <span>\/ heure<\/span><\/div><div class=\"otc-veh-nc\">Photo non contractuelle \u00b7 ce v\u00e9hicule ou \u00e9quivalent<\/div><\/div>\n    <\/div>\n    <div class=\"otc-veh-card\" id=\"veh-minivan7\" onclick=\"otcSelectVeh('minivan7')\">\n      <div class=\"otc-veh-qty\" id=\"qty-minivan7\"><button class=\"otc-veh-qty-btn\" onclick=\"otcVehQty(event,'minivan7',-1)\">\u2212<\/button><span class=\"otc-veh-qty-val\" id=\"qv-minivan7\">1<\/span><button class=\"otc-veh-qty-btn\" onclick=\"otcVehQty(event,'minivan7',1)\">+<\/button><\/div>\n      <div class=\"otc-veh-img-wrap\"><img decoding=\"async\" class=\"otc-veh-img\" src=\"https:\/\/transponyx.com\/wp-content\/uploads\/mercedes-classe-V-black-color-business-minivan-for-nice-airport-transfer-driver-transponyx.webp\" alt=\"Minivan 7 personnes\" loading=\"lazy\"\/><div class=\"otc-veh-chk\">\u2713<\/div><\/div>\n      <div class=\"otc-veh-body\"><div class=\"otc-veh-name\">Minivan 7 Pers.<\/div><div class=\"otc-veh-cap\"><span class=\"otc-veh-cap-icon\">\ud83d\udc65<\/span> Max 7 passagers<\/div><div class=\"otc-veh-rate\">80 \u20ac <span>\/ heure<\/span><\/div><div class=\"otc-veh-nc\">Photo non contractuelle \u00b7 ce v\u00e9hicule ou \u00e9quivalent<\/div><\/div>\n    <\/div>\n    <div class=\"otc-veh-card\" id=\"veh-minivan8\" onclick=\"otcSelectVeh('minivan8')\">\n      <div class=\"otc-veh-qty\" id=\"qty-minivan8\"><button class=\"otc-veh-qty-btn\" onclick=\"otcVehQty(event,'minivan8',-1)\">\u2212<\/button><span class=\"otc-veh-qty-val\" id=\"qv-minivan8\">1<\/span><button class=\"otc-veh-qty-btn\" onclick=\"otcVehQty(event,'minivan8',1)\">+<\/button><\/div>\n      <div class=\"otc-veh-img-wrap\"><img decoding=\"async\" class=\"otc-veh-img\" src=\"https:\/\/transponyx.com\/wp-content\/uploads\/mercedes-classe-V-black-color-business-minivan-for-nice-airport-transfer-driver-transponyx.webp\" alt=\"Minivan 8 personnes\" loading=\"lazy\"\/><div class=\"otc-veh-chk\">\u2713<\/div><\/div>\n      <div class=\"otc-veh-body\"><div class=\"otc-veh-name\">Minivan 8 Pers.<\/div><div class=\"otc-veh-cap\"><span class=\"otc-veh-cap-icon\">\ud83d\udc65<\/span> Max 8 passagers<\/div><div class=\"otc-veh-rate\">90 \u20ac <span>\/ heure<\/span><\/div><div class=\"otc-veh-nc\">Photo non contractuelle \u00b7 ce v\u00e9hicule ou \u00e9quivalent<\/div><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- OPTIONS GUIDE + RESTAURANT -->\n<div class=\"otc-options-section\">\n  <div class=\"otc-options-grid\">\n    <div class=\"otc-opt-card\" id=\"opt-guide\">\n      <div class=\"otc-guide-active-badge\">Ajout\u00e9 ! En suppl\u00e9ment<\/div>\n      <img decoding=\"async\" class=\"otc-opt-img\" src=\"https:\/\/transponyx.com\/wp-content\/uploads\/GUIDE-TOURISTIQUE-WEBP-e1776369004388.webp\" alt=\"Guide touristique\" loading=\"lazy\"\/>\n      <div class=\"otc-opt-body\">\n        <div class=\"otc-step-hd\" style=\"margin-bottom:5px;\">\n    <span class=\"otc-step-num\" id=\"snum3\">3<\/span>\n    <div class=\"otc-step-hd-txt\">\n      <span class=\"otc-step-tag\">\u00c9tape 3<\/span>\n      <span class=\"otc-opt-name\" style=\"font-family:'Playfair Display',Georgia,serif;font-size:16px;color:#083D35;\">\ud83c\udf99\ufe0f Guide Touristique<\/span>\n    <\/div>\n  <\/div>\n        <div class=\"otc-opt-sub\">Commentaires culturels, historiques et anecdotes exclusives tout au long du circuit.<\/div>\n        <div class=\"otc-guide-toggle\">\n          <button class=\"otc-guide-btn\" id=\"guide-non\" onclick=\"otcGuide('non')\">\u2715 Non<\/button>\n          <button class=\"otc-guide-btn\" id=\"guide-oui\" onclick=\"otcGuide('oui')\">\u2713 Oui<\/button>\n        <\/div>\n        <div class=\"otc-guide-devis\">\u2605 En suppl\u00e9ment \u2014 tarif sur devis<\/div>\n        <div class=\"otc-rest-note\" style=\"margin-top:8px;\">\ud83d\udccb Une demande de devis sera soumise \u00e0 nos guides partenaires. Veuillez indiquer votre langue souhait\u00e9e dans les notes. Une confirmation de disponibilit\u00e9 et un devis vous seront envoy\u00e9s par email.<\/div>\n      <\/div>\n    <\/div>\n    <div class=\"otc-opt-card\" id=\"dc-restaurant\">\n      <div class=\"otc-opt-added\">Ajout\u00e9 !<\/div>\n      <img decoding=\"async\" class=\"otc-opt-img\" src=\"https:\/\/images.unsplash.com\/photo-1414235077428-338989a2e8c0?auto=format&fit=crop&w=600&q=70\" alt=\"Restauration\" loading=\"lazy\"\/>\n      <div class=\"otc-opt-body\">\n        <div class=\"otc-step-hd\" style=\"margin-bottom:5px;\">\n    <span class=\"otc-step-num\" id=\"snum4\">4<\/span>\n    <div class=\"otc-step-hd-txt\">\n      <span class=\"otc-step-tag\">\u00c9tape 4<\/span>\n      <span class=\"otc-opt-name\" style=\"font-family:'Playfair Display',Georgia,serif;font-size:16px;color:#083D35;\">\ud83c\udf7d\ufe0f Pause Restauration<\/span>\n    <\/div>\n  <\/div>\n        <div class=\"otc-opt-sub\">Restaurant \u00e0 d\u00e9finir \u00b7 Cuisine fran\u00e7aise \u00b7 S\u00e9lection selon vos go\u00fbts.<\/div>\n        <div class=\"otc-rest-toggle\">\n          <button class=\"otc-rest-btn sel\" id=\"rest-non\" onclick=\"otcRestaurant('non')\">\u2715 Non<\/button>\n          <button class=\"otc-rest-btn\" id=\"rest-oui\" onclick=\"otcRestaurant('oui')\">\u2713 Oui<\/button>\n        <\/div>\n        <div id=\"rest-dur-bloc\" style=\"display:none;margin-top:10px;\">\n          <span class=\"otc-opt-dur-lbl\">Dur\u00e9e de la pause repas<\/span>\n          <div class=\"otc-durs\" id=\"durs-restaurant\">\n            <button class=\"otc-dur\" onclick=\"otcDur(event,'restaurant','30mn')\">30mn<\/button>\n            <button class=\"otc-dur\" onclick=\"otcDur(event,'restaurant','1h')\">1h<\/button>\n            <button class=\"otc-dur dsel\" onclick=\"otcDur(event,'restaurant','1h30')\">1h30<\/button>\n            <button class=\"otc-dur\" onclick=\"otcDur(event,'restaurant','2h')\">2h<\/button>\n            <button class=\"otc-dur\" onclick=\"otcDur(event,'restaurant','2h30')\">2h30<\/button>\n          <\/div>\n          <div class=\"otc-opt-reco\">\u2605 Temps recommand\u00e9 : 1h30<\/div>\n        <\/div>\n        <div class=\"otc-rest-prix\">\u2605 Suppl\u00e9ment \u00e0 r\u00e9gler directement sur place<\/div>\n        <div class=\"otc-rest-note\">\ud83d\udccb Veuillez indiquer dans les notes vos pr\u00e9f\u00e9rences : horaires souhait\u00e9s, restaurants particuliers, cuisine pr\u00e9f\u00e9r\u00e9e, et si vous avez besoin que nous effectuions la r\u00e9servation pour vous.<\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- TOGGLE VUE -->\n<div class=\"otc-view-toggle\">\n  <div class=\"otc-view-toggle-inner\">\n    <button class=\"otc-vbtn active\" id=\"otcBtnList\" onclick=\"otcSwitchView('list')\">\n      <svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><rect x=\"1\" y=\"2\" width=\"14\" height=\"2.5\" rx=\"1\"\/><rect x=\"1\" y=\"6.5\" width=\"14\" height=\"2.5\" rx=\"1\"\/><rect x=\"1\" y=\"11\" width=\"14\" height=\"2.5\" rx=\"1\"\/><\/svg>\n      Vue Liste\n    <\/button>\n    <div class=\"otc-vbtn-sep\"><\/div>\n    <button class=\"otc-vbtn\" id=\"otcBtnMap\" onclick=\"otcSwitchView('map')\">\n      <svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M8 1a5 5 0 0 0-5 5c0 3.5 5 9 5 9s5-5.5 5-9a5 5 0 0 0-5-5zm0 7a2 2 0 1 1 0-4 2 2 0 0 1 0 4z\"\/><\/svg>\n      Vue Carte\n    <\/button>\n  <\/div>\n<\/div>\n\n<!-- D\u00c9PART -->\n<div class=\"otc-depart\">\n  <div class=\"otc-step-hd\" style=\"margin-bottom:8px;\">\n    <span class=\"otc-step-num\" id=\"snum2\">2<\/span>\n    <div class=\"otc-step-hd-txt\">\n      <span class=\"otc-step-tag\">\u00c9tape 2<\/span>\n      <span style=\"font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#083D35;\">\ud83d\udccd Votre point de d\u00e9part<\/span>\n    <\/div>\n  <\/div>\n  <input type=\"text\" id=\"otc-depart\" placeholder=\"Nom de votre h\u00f4tel ou adresse \u2014 Nice, Cannes, Antibes...\" autocomplete=\"off\"\/>\n  <p class=\"otc-depart-note\">Prise en charge et d\u00e9pose incluses partout sur la C\u00f4te d'Azur.<\/p>\n\n  <!-- D\u00c9POSE DISTINCTE -->\n  <label id=\"otc-drop-lbl\" style=\"display:flex;align-items:center;gap:8px;margin-top:12px;cursor:pointer;user-select:none;\">\n    <span style=\"display:flex;align-items:center;justify-content:center;width:20px;height:20px;border:1.5px solid #D4AF37;border-radius:4px;background:#fff;flex-shrink:0;transition:background .15s;\" id=\"otc-drop-box\">\n      <span id=\"otc-drop-tick\" style=\"display:none;color:#083D35;font-size:13px;font-weight:900;line-height:1;\">\u2713<\/span>\n    <\/span>\n    <span style=\"font-size:12px;font-weight:700;color:#083D35;\">Mon lieu de d\u00e9pose est diff\u00e9rent de ma prise en charge<\/span>\n    <input type=\"checkbox\" id=\"otc-drop-diff\" onchange=\"otcToggleDropoff()\" style=\"position:absolute;opacity:0;pointer-events:none;\"\/>\n  <\/label>\n\n  <div id=\"otc-dropoff-wrap\" style=\"display:none;margin-top:12px;padding:14px;background:#fff;border:1.5px solid #D4AF37;border-radius:10px;\">\n    <label style=\"display:block;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#083D35;margin-bottom:8px;\">\ud83d\udccd Lieu de d\u00e9pose<\/label>\n    <input type=\"text\" id=\"otc-dropoff\" placeholder=\"H\u00f4tel ou adresse de d\u00e9pose \u2014 Nice, Cannes, Monaco\u2026\" autocomplete=\"off\"\n      style=\"width:100%;padding:13px 16px;border:1.5px solid #c8bfb0;border-radius:8px;font-size:14px;font-family:'Lato',sans-serif;background:#fafaf8;color:#1a1a1a;outline:none;transition:border-color .2s;\"\/>\n    <p style=\"font-size:11px;color:#6b6560;margin-top:7px;line-height:1.5;\">Si le lieu de d\u00e9pose est \u00e0 plus de 40 km de notre base, le trajet de retour sera inclus dans la dur\u00e9e factur\u00e9e.<\/p>\n  <\/div>\n<\/div>\n\n<!-- LAYOUT -->\n<div class=\"otc-layout\">\n<div id=\"otcLeftCol\">\n\n<!-- VUE LISTE -->\n<div id=\"otcListView\">\n<div class=\"otc-step-hd\" style=\"padding:14px 0 6px;\">\n    <span class=\"otc-step-num\" id=\"snum5\">5<\/span>\n    <div class=\"otc-step-hd-txt\">\n      <span class=\"otc-step-tag\">\u00c9tape 5<\/span>\n      <span class=\"otc-stitle\" style=\"font-family:'Playfair Display',Georgia,serif;font-size:18px;font-weight:400;color:#083D35;letter-spacing:.02em;\">Choisissez vos destinations<\/span>\n    <\/div>\n  <\/div>\n<div class=\"otc-search-wrap\" style=\"position:relative;margin-bottom:18px;\">\n  <div style=\"display:flex;align-items:center;gap:8px;background:#fff;border:1.5px solid #d8d0c4;border-radius:10px;padding:0 12px;transition:border-color .2s;box-shadow:0 2px 8px rgba(8,61,53,.06);\" id=\"otcSearchBox\">\n    <span style=\"font-size:15px;color:#9c9489;flex-shrink:0;\">\ud83d\udd0d<\/span>\n    <input type=\"text\" id=\"otcDestSearch\" autocomplete=\"off\"\n      placeholder=\"Rechercher une destination\u2026  Ex : Grimaud, Monaco, parfum, Italie\u2026\"\n      style=\"flex:1;padding:13px 0;border:none;outline:none;font-size:13px;font-family:Lato,sans-serif;background:transparent;color:#1a1a1a;\"\n      oninput=\"otcSearchDest(this.value)\"\n      onfocus=\"otcAcFocus()\"\n      onblur=\"setTimeout(otcAcBlur,200)\"\/>\n    <button id=\"otcSearchClear\" onclick=\"otcAcClear()\"\n      style=\"background:none;border:none;font-size:16px;color:#9c9489;cursor:pointer;padding:4px;display:none;flex-shrink:0;line-height:1;\">\u2715<\/button>\n  <\/div>\n  <div id=\"otcAcDropdown\"\n    style=\"display:none;position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;border:1.5px solid #D4AF37;border-radius:10px;box-shadow:0 12px 36px rgba(8,61,53,.18);z-index:8888;max-height:280px;overflow-y:auto;\">\n  <\/div>\n  <div style=\"font-size:11px;color:#9c9489;margin-top:7px;font-style:italic;padding-left:4px;\">\n    \ud83d\udca1 La recherche trouve n'importe quel mot \u2014 <strong style=\"color:#B89A4E;\">Grimaud<\/strong> affiche Port Grimaud, <strong style=\"color:#B89A4E;\">parfum<\/strong> affiche toutes les parfumeries.\n  <\/div>\n<\/div>\n<div class=\"otc-search-no-result\" id=\"otcNoResult\" style=\"text-align:center;padding:28px 12px;color:#9c9489;font-style:italic;font-size:13px;display:none;\">Aucune destination trouv\u00e9e pour cette recherche.<\/div>\n<div class=\"otc-filters\" id=\"otcFilters\">\n  <button class=\"otc-filter-btn active\" data-cat=\"all\" onclick=\"otcSetFilter('all')\">\ud83c\udf0d Toutes <span class=\"otc-filter-count\" id=\"fcount-all\"><\/span><\/button>\n  <button class=\"otc-filter-btn\" data-cat=\"france\" onclick=\"otcSetFilter('france')\">\ud83c\uddeb\ud83c\uddf7 France <span class=\"otc-filter-count\" id=\"fcount-france\"><\/span><\/button>\n  <button class=\"otc-filter-btn\" data-cat=\"italie\" onclick=\"otcSetFilter('italie')\">\ud83c\uddee\ud83c\uddf9 Italie <span class=\"otc-filter-count\" id=\"fcount-italie\"><\/span><\/button>\n  <button class=\"otc-filter-btn\" data-cat=\"ville\" onclick=\"otcSetFilter('ville')\">\ud83c\udfd9\ufe0f Villes <span class=\"otc-filter-count\" id=\"fcount-ville\"><\/span><\/button>\n  <button class=\"otc-filter-btn\" data-cat=\"village\" onclick=\"otcSetFilter('village')\">\ud83c\udfd8\ufe0f Villages <span class=\"otc-filter-count\" id=\"fcount-village\"><\/span><\/button>\n  <button class=\"otc-filter-btn\" data-cat=\"patrimoine\" onclick=\"otcSetFilter('patrimoine')\">\ud83c\udfdb\ufe0f Patrimoine &amp; Architecture <span class=\"otc-filter-count\" id=\"fcount-patrimoine\"><\/span><\/button>\n  <button class=\"otc-filter-btn\" data-cat=\"musees\" onclick=\"otcSetFilter('musees')\">\ud83c\udfa8 Mus\u00e9es &amp; Culture <span class=\"otc-filter-count\" id=\"fcount-musees\"><\/span><\/button>\n  <button class=\"otc-filter-btn\" data-cat=\"nature\" onclick=\"otcSetFilter('nature')\">\ud83c\udf3f Nature &amp; Biodiversit\u00e9 <span class=\"otc-filter-count\" id=\"fcount-nature\"><\/span><\/button>\n  <button class=\"otc-filter-btn\" data-cat=\"oenogastro\" onclick=\"otcSetFilter('oenogastro')\">\ud83c\udf77 \u0152notourisme &amp; Gastronomie <span class=\"otc-filter-count\" id=\"fcount-oenogastro\"><\/span><\/button>\n  <button class=\"otc-filter-btn\" data-cat=\"nautique\" onclick=\"otcSetFilter('nautique')\">\u26f5 Loisirs Nautiques &amp; Maritimes <span class=\"otc-filter-count\" id=\"fcount-nautique\"><\/span><\/button>\n  <button class=\"otc-filter-btn\" data-cat=\"luxenuit\" onclick=\"otcSetFilter('luxenuit')\">\u2728 Luxe &amp; Vie Nocturne <span class=\"otc-filter-count\" id=\"fcount-luxenuit\"><\/span><\/button>\n  <button class=\"otc-filter-btn\" data-cat=\"bienetre\" onclick=\"otcSetFilter('bienetre')\">\ud83c\udf38 Bien-\u00eatre &amp; Tourisme Industriel <span class=\"otc-filter-count\" id=\"fcount-bienetre\"><\/span><\/button>\n<\/div>\n<div class=\"otc-dgrid\" id=\"otc-grid\">\n  <!-- generated by JS -->\n  <\/div><!-- \/otc-dgrid -->\n<\/div><!-- \/otcListView -->\n\n<!-- VUE CARTE -->\n<div id=\"otcMapView\" style=\"display:none;\">\n  <div class=\"otc-stitle\">S\u00e9lectionnez vos destinations sur la carte<\/div>\n  <div class=\"otc-map-wrap\" id=\"otcMapWrap\" style=\"position:relative;\">\n    <div id=\"otc-gmap\"><\/div>\n    <div class=\"otc-float\" id=\"otcFloatCard\">\n      <div class=\"otc-float-inner\">\n        <button class=\"otc-float-close\" onclick=\"otcCloseFloat(event)\">\u2715<\/button>\n        <span class=\"otc-float-sel-badge\">\u2713 Ajout\u00e9 !<\/span>\n        <img decoding=\"async\" class=\"otc-float-img\" id=\"floatImg\" src=\"\" alt=\"\"\/>\n        <div class=\"otc-float-body\">\n          <div class=\"otc-float-region\" id=\"floatRegion\"><\/div>\n          <div class=\"otc-float-name\" id=\"floatName\"><\/div>\n          <div class=\"otc-float-desc\" id=\"floatDesc\"><\/div>\n          <span class=\"otc-float-dur-lbl\" id=\"floatDurLbl\">Dur\u00e9e souhait\u00e9e<\/span>\n          <div class=\"otc-float-durs\" id=\"floatDurs\"><\/div>\n          <div class=\"otc-float-reco\" id=\"floatReco\"><\/div>\n          <button class=\"otc-float-toggle-btn\" id=\"floatToggleBtn\" onclick=\"otcFloatToggle(event)\">+ Ajouter \u00e0 mon tour<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<\/div><!-- \/otcLeftCol -->\n\n<!-- SIDEBAR -->\n<div class=\"otc-sidebar\">\n  <div class=\"otc-sb-head\">\n    <div class=\"otc-sb-head-title\">Votre Tour Personnalis\u00e9<\/div>\n    <div class=\"otc-sb-head-sub\" id=\"sbHeadSub\">S\u00e9lectionnez votre v\u00e9hicule pour commencer<\/div>\n  <\/div>\n  <div id=\"sbVehRow\" style=\"display:none;\">\n    <div class=\"otc-sb-veh-multi\" id=\"sbVehMultiList\"><\/div>\n    <div class=\"otc-sb-veh-total\" id=\"sbVehTotalRow\">\n      <span class=\"otc-sb-veh-total-lbl\">Capacit\u00e9 totale<\/span>\n      <span class=\"otc-sb-veh-total-cap\" id=\"sbVehTotalCap\">\u2014<\/span>\n    <\/div>\n  <\/div>\n  <div class=\"otc-sb-metrics\">\n    <div class=\"otc-sb-price-row\">\n      <div>\n        <div class=\"otc-sb-price\" id=\"sb-price\">\u2014 \u20ac<\/div>\n        <div class=\"otc-sb-price-unit\" id=\"sb-price-unit\">S\u00e9lectionnez un v\u00e9hicule<\/div>\n        <div class=\"otc-sb-price-min\" id=\"sb-price-min\" style=\"display:none;\"><\/div>\n      <\/div>\n      <div class=\"otc-sb-badge\" id=\"sb-badge\">\u2014<\/div>\n    <\/div>\n    <div class=\"otc-sb-counters\">\n      <div class=\"otc-sb-counter visit\"><div class=\"otc-sb-counter-lbl\">\u23f1 Temps de visite<\/div><div class=\"otc-sb-counter-val\" id=\"sb-visit-time\">\u2014<\/div><\/div>\n      <div class=\"otc-sb-counter transit\"><div class=\"otc-sb-counter-lbl\">\ud83d\ude90 Temps de route<\/div><div class=\"otc-sb-counter-val\" id=\"sb-transit-time\">\u2014<\/div><\/div>\n    <\/div>\n  <\/div>\n  <div class=\"otc-sb-tip\" id=\"sb-tip\">R\u00e9organisez vos destinations pour optimiser les trajets.<\/div>\n  <div class=\"otc-sb-time-row\">\n    <span class=\"otc-sb-time-lbl\">Dur\u00e9e totale estim\u00e9e<\/span>\n    <span class=\"otc-sb-time-val\" id=\"sb-time\">\u2014 h \u2014<\/span>\n  <\/div>\n  <div class=\"otc-sb-list\" id=\"sb-list\"><div class=\"otc-sb-empty\">S\u00e9lectionnez vos destinations pour composer votre tour.<\/div><\/div>\n\n  <div class=\"otc-form\">\n    <div class=\"otc-step-hd\" style=\"margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid #f0ebe3;\">\n    <span class=\"otc-step-num\" id=\"snum6\">6<\/span>\n    <div class=\"otc-step-hd-txt\">\n      <span class=\"otc-step-tag\">\u00c9tape 6<\/span>\n      <span class=\"otc-form-title\" style=\"font-size:13px;font-weight:700;color:#083D35;letter-spacing:.04em;text-transform:uppercase;\">\ud83d\udccb Vos informations &amp; paiement<\/span>\n    <\/div>\n  <\/div>\n    <div class=\"otcf\" id=\"f-nom\"><label>Nom complet <span class=\"req\">*<\/span><\/label><input type=\"text\" id=\"inp-nom\" placeholder=\"Ex : Jean Dupont\"\/><div class=\"errmsg\">Veuillez indiquer votre nom.<\/div><\/div>\n    <div class=\"otcf-row\">\n      <div class=\"otcf\" id=\"f-tel\"><label>T\u00e9l\u00e9phone <span class=\"req\">*<\/span><\/label><input type=\"tel\" id=\"inp-tel\" placeholder=\"+33 6 12 34 56 78\"\/><div class=\"errmsg\">Num\u00e9ro requis.<\/div><\/div>\n      <div class=\"otcf\" id=\"f-email\"><label>Email <span class=\"req\">*<\/span><\/label><input type=\"email\" id=\"inp-email\" placeholder=\"vous@email.com\"\/><div class=\"errmsg\">Email invalide.<\/div><\/div>\n    <\/div>\n    <div class=\"otcf-row\">\n      <div class=\"otcf\" id=\"f-date\"><label>Date <span class=\"req\">*<\/span><\/label><input type=\"date\" id=\"inp-date\"\/><div class=\"errmsg\">Date requise.<\/div><\/div>\n      <div class=\"otcf\" id=\"f-heure\"><label>Heure d\u00e9part <span class=\"req\">*<\/span><\/label><input type=\"time\" id=\"inp-heure\"\/><div class=\"errmsg\">Heure requise.<\/div><\/div>\n    <\/div>\n    <div class=\"otcf\"><label>Nombre total de passagers <span class=\"req\">*<\/span><\/label>\n      <select id=\"inp-adultes\" onchange=\"otcCheckPax()\"><option value=\"\">\u2014 S\u00e9lectionnez le total \u2014<\/option><\/select>\n      <div class=\"otc-pax-note\">Le total doit correspondre exactement \u00e0 la somme des 3 cat\u00e9gories ci-dessous.<\/div>\n      <div class=\"otc-pax-warn\" id=\"paxWarn\">\u26a0 Le total des d\u00e9tails d\u00e9passe le nombre de passagers indiqu\u00e9.<\/div>\n    <\/div>\n    <div class=\"otcf-row3\">\n      <div class=\"otcf\"><label>A partir de 6 ans<\/label><select id=\"inp-enf1\" onchange=\"otcCheckPax()\"><option>0<\/option><\/select><\/div>\n      <div class=\"otcf\"><label>18 mois \u00e0 6 ans<\/label><select id=\"inp-enf2\" onchange=\"otcCheckPax()\"><option>0<\/option><\/select><\/div>\n      <div class=\"otcf\"><label>Moins de 18 mois<\/label><select id=\"inp-enf3\" onchange=\"otcCheckPax()\"><option>0<\/option><\/select><\/div>\n    <\/div>\n    <div class=\"otcf\"><label>Demandes particuli\u00e8res<\/label><textarea id=\"inp-notes\" placeholder=\"Si\u00e8ge b\u00e9b\u00e9, restaurant, mus\u00e9e, langue, allergie...\"><\/textarea><\/div>\n    <div class=\"otc-promo\" id=\"otcPromoBox\">\n      <div class=\"otc-promo-title\">\ud83c\udff7\ufe0f Code promotionnel<\/div>\n      <div class=\"otc-promo-row\">\n        <input type=\"text\" class=\"otc-promo-input\" id=\"inp-promo\" placeholder=\"Ex : WELCOME10\" maxlength=\"20\"\/>\n        <button class=\"otc-promo-btn\" onclick=\"otcApplyPromo()\">Appliquer<\/button>\n      <\/div>\n      <div class=\"otc-promo-msg\" id=\"otcPromoMsg\"><\/div>\n      <div class=\"otc-promo-applied\" id=\"otcPromoApplied\">\n        <span class=\"otc-promo-applied-lbl\" id=\"otcPromoAppliedLbl\">\u2014 % de remise appliqu\u00e9e \u2713<\/span>\n        <button class=\"otc-promo-remove\" onclick=\"otcRemovePromo()\">Retirer<\/button>\n      <\/div>\n    <\/div>\n    <div class=\"otc-cancel\">\n      <div class=\"otc-cancel-title\">\u2705 Nos garanties<\/div>\n      <div class=\"otc-cancel-item\"><span class=\"otc-ci\">\u2713<\/span><span><strong>Annulation gratuite<\/strong> \u2014 jusqu'\u00e0 24h avant.<\/span><\/div>\n      <div class=\"otc-cancel-item\"><span class=\"otc-ci\">\u2713<\/span><span><strong>R\u00e9servez maintenant<\/strong> \u2014 acompte optionnel de 20% \u00e0 100%.<\/span><\/div>\n      <div class=\"otc-cancel-item\"><span class=\"otc-ci\">\u2713<\/span><span><strong>Accus\u00e9 de r\u00e9ception imm\u00e9diat<\/strong> \u2014 confirmation d\u00e9finitive sous 24h.<\/span><\/div>\n    <\/div>\n    <div class=\"otcf\"><label>Mode de paiement <span class=\"req\">*<\/span><\/label>\n      <div class=\"otc-pay-group\">\n        <label class=\"otc-pay-opt\" id=\"pay-online\" onclick=\"otcPaySel('online')\"><input type=\"radio\" name=\"otc-pay\" value=\"online\"\/><div class=\"otc-pay-lbl\"><strong>\ud83d\udcb3 Payer maintenant<\/strong><span>Acompte de 20% \u00e0 100% pour garantir votre r\u00e9servation. Paiement s\u00e9curis\u00e9 SumUp.<\/span><\/div><\/label>\n        <label class=\"otc-pay-opt\" id=\"pay-cash\" onclick=\"otcPaySel('cash')\"><input type=\"radio\" name=\"otc-pay\" value=\"cash\"\/><div class=\"otc-pay-lbl\"><strong>\ud83d\udcb5 Esp\u00e8ces en fin de service<\/strong><span>R\u00e8glement directement au chauffeur \u00e0 la fin de la prestation.<\/span><\/div><\/label>\n        <label class=\"otc-pay-opt\" id=\"pay-virement\" onclick=\"otcPaySel('virement')\"><input type=\"radio\" name=\"otc-pay\" value=\"virement\"\/><div class=\"otc-pay-lbl\"><strong>\ud83c\udfe6 Virement bancaire<\/strong><span>Coordonn\u00e9es bancaires envoy\u00e9es par email apr\u00e8s confirmation.<\/span><\/div><\/label>\n      <\/div>\n      <div id=\"otc-acompte-bloc\" style=\"display:none;margin-top:12px;background:#f9f6f0;border-radius:10px;padding:14px;border:1px solid #e8e0d5;\">\n        <div style=\"font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#083D35;margin-bottom:8px;\">Montant de l'acompte<\/div>\n        <div style=\"display:flex;align-items:center;gap:12px;margin-bottom:8px;\">\n          <input type=\"range\" id=\"otc-acompte-slider\" min=\"20\" max=\"100\" step=\"10\" value=\"30\" oninput=\"otcUpdateAcompte()\" style=\"flex:1;accent-color:#D4AF37;\">\n          <span id=\"otc-acompte-pct\" style=\"font-size:18px;font-weight:700;color:#B89A4E;min-width:40px;text-align:right;\">30%<\/span>\n        <\/div>\n        <div style=\"display:flex;justify-content:space-between;align-items:center;\">\n          <span style=\"font-size:12px;color:#6b6560;\">Montant \u00e0 r\u00e9gler maintenant :<\/span>\n          <span id=\"otc-acompte-montant\" style=\"font-size:16px;font-weight:700;color:#083D35;\">\u2014 \u20ac<\/span>\n        <\/div>\n        <div style=\"font-size:10px;color:#9c9489;margin-top:6px;font-style:italic;\">Le solde sera r\u00e9gl\u00e9 au chauffeur en fin de prestation.<\/div>\n      <\/div>\n    <\/div>\n    <div id=\"otc-send-status\" style=\"display:none;margin-bottom:12px;padding:12px 14px;border-radius:8px;font-size:13px;font-family:'Lato',sans-serif;line-height:1.5;\"><\/div>\n    <button class=\"otc-sbtn otc-sbtn-submit\" id=\"otcSubmitBtn\" onclick=\"otcSubmit()\">Envoyer ma demande<\/button>\n    <div class=\"otc-send-note\">Vous recevrez un accus\u00e9 de r\u00e9ception par email imm\u00e9diatement apr\u00e8s l'envoi.<\/div>\n  <\/div>\n<\/div>\n\n<\/div><!-- \/otc-layout -->\n<\/div><!-- \/otc -->\n\n\n<!-- GUARD POPUP -->\n<div class=\"otc-guard-overlay\" id=\"otcGuardOverlay\" onclick=\"if(event.target===this)otcGuardClose()\">\n  <div class=\"otc-guard-box\">\n    <div class=\"otc-guard-icon\" id=\"otcGuardIcon\">\u270b<\/div>\n    <div class=\"otc-guard-title\" id=\"otcGuardTitle\">Quelques \u00e9tapes avant de continuer<\/div>\n    <p id=\"otcGuardSubtitle\" style=\"font-size:12px;color:#6b6560;margin-bottom:14px;line-height:1.5;\"><\/p>\n    <ul class=\"otc-guard-steps\" id=\"otcGuardSteps\"><\/ul>\n    <button class=\"otc-guard-btn\" onclick=\"otcGuardClose()\">Compris, j'y vais !<\/button>\n  <\/div>\n<\/div>\n\n<!-- STICKY BAR -->\n<div class=\"otc-sticky\" id=\"otcSticky\">\n  <div class=\"otc-sticky-center\">\n    <div class=\"otc-sticky-item\">\n      <div class=\"otc-sticky-lbl\">Montant total<\/div>\n      <div class=\"otc-sticky-price-block\">\n        <span class=\"otc-sticky-price\" id=\"stickyPrice\">\u2014<\/span>\n        <span class=\"otc-sticky-price-eur\">\u20ac<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"otc-sticky-sep\"><\/div>\n    <div class=\"otc-sticky-item\">\n      <div class=\"otc-sticky-lbl\">Dur\u00e9e totale<\/div>\n      <div class=\"otc-sticky-time-val\" id=\"stickyTime\">\u2014<\/div>\n    <\/div>\n    <div class=\"otc-sticky-sep\"><\/div>\n    <div class=\"otc-sticky-item\" style=\"padding:0 0 0 22px;\">\n      <button class=\"otc-sticky-btn submit-sticky\" onclick=\"otcScrollToForm()\">R\u00e9server<\/button>\n    <\/div>\n  <\/div>\n  <button class=\"otc-sticky-dismiss\" onclick=\"document.getElementById('otcSticky').classList.remove('show')\" title=\"Masquer\">\u2715<\/button>\n<\/div>\n\n<!-- EmailJS SDK -->\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@emailjs\/browser@4\/dist\/email.min.js\"><\/script>\n<script>\n\/* -- FILTRES TH\u00c9MATIQUES MULTI-TAGS ----------------------- *\/\nvar otcActiveFilter='all';\n\nfunction otcDestThemes(id){\n  return (typeof OTC_THEMES!=='undefined'&&OTC_THEMES[id])||[];\n}\n\n\n\/* -- NORMALIZE \u2014 remove accents, apostrophes, special chars for search -- *\/\nfunction otcNormalize(str){\n  if(!str)return '';\n  return str.toLowerCase()\n    .normalize('NFD').replace(\/[\\u0300-\\u036f]\/g,'') \/\/ remove diacritics\n    .replace(\/[\\u2019\\u2018'`]\/g,\"'\")               \/\/ normalize apostrophes\n    .replace(\/[''\\-]\/g,' ')                           \/\/ apostrophes\/hyphens \u2192 space\n    .replace(\/[^a-z0-9 ]\/g,' ')                       \/\/ strip remaining special chars\n    .replace(\/\\s+\/g,' ').trim();\n}\n\nfunction otcSetFilter(cat){\n  otcActiveFilter=cat;\n  document.querySelectorAll('.otc-filter-btn').forEach(function(b){\n    b.classList.toggle('active',b.getAttribute('data-cat')===cat);\n  });\n  var searchInp=document.getElementById('otcDestSearch');\n  var q=searchInp?searchInp.value.trim().toLowerCase():'';\n  otcFilterCards(q);\n}\n\nfunction otcUpdateFilterCounts(){\n  if(typeof OTC_THEMES==='undefined')return;\n  var ALL_TAGS=['france','italie','ville','village','patrimoine','musees','nature','oenogastro','nautique','luxenuit','bienetre'];\n  var counts={all:0};\n  ALL_TAGS.forEach(function(t){counts[t]=0;});\n  Object.keys(OTC_THEMES).forEach(function(id){\n    counts.all++;\n    OTC_THEMES[id].forEach(function(t){\n      if(counts[t]!==undefined)counts[t]++;\n    });\n  });\n  Object.keys(counts).forEach(function(cat){\n    var el=document.getElementById('fcount-'+cat);\n    if(el)el.textContent=counts[cat];\n  });\n}\n\nfunction otcFilterCards(q){\n  var cards=document.querySelectorAll('#otc-grid .otc-dcard');\n  var noRes=document.getElementById('otcNoResult');\n  var shown=0;\n  cards.forEach(function(card){\n    var id=card.id.replace('dc-','');\n    var themes=otcDestThemes(id);\n    var catOk=(otcActiveFilter==='all')||(themes.indexOf(otcActiveFilter)>=0);\n    if(!q){\n      card.style.display=catOk?'':'none';\n      if(catOk)shown++;\n      return;\n    }\n    var name=otcNormalize((typeof OTC_NAMES!=='undefined'&&OTC_NAMES[id])||'');\n    var desc=otcNormalize((typeof OTC_DESCS!=='undefined'&&OTC_DESCS[id])||'');\n    var region=otcNormalize((typeof OTC_REGIONS!=='undefined'&&OTC_REGIONS[id])||'');\n    var qn=otcNormalize(q);\n    var match=(name.indexOf(qn)>=0||desc.indexOf(qn)>=0||region.indexOf(qn)>=0)&&catOk;\n    card.style.display=match?'':'none';\n    if(match)shown++;\n  });\n  if(noRes)noRes.style.display=(shown===0&&q)?'block':'none';\n}\n\nfunction otcSearchDest(val){\n  if(typeof otcAcInput==='function')otcAcInput(val);\n  otcFilterCards((val||'').trim().toLowerCase());\n  var clearBtn=document.getElementById('otcSearchClear');\n  if(clearBtn)clearBtn.style.display=val?'block':'none';\n}\n\n\/* update counts once main script is loaded *\/\nsetTimeout(otcUpdateFilterCounts, 500);\n\n<\/script>\n<script>\n(function(){if(window.emailjs)emailjs.init({publicKey:'I7t4_5xJYFy0ItKTB'});})();\n<\/script>\n\n<script>\n\n\/* V\u00c9HICULES *\/\nvar OTC_VEHICLES={\n  'berline-std':{name:'Berline Standard',icon:'[B]',cap:3,rate:60,label:'Berline Standard - 3 pax max'},\n  'berline-biz':{name:'Berline Business',icon:'[B]',cap:3,rate:70,label:'Berline Business - 3 pax max'},\n  'minivan7':{name:'Minivan 7 Pers.',icon:'[V]',cap:7,rate:80,label:'Minivan 7 Pers. - 7 pax max'},\n  'minivan8':{name:'Minivan 8 Pers.',icon:'[V]',cap:8,rate:90,label:'Minivan 8 Pers. - 8 pax max'}\n};\nvar otcVeh=null; \/* kept for compat \u2014 use otcVehFleet *\/\nvar otcVehFleet={}; \/* {id: qty} \u2014 multi-vehicle state *\/\n\nfunction otcFleetTotalCap(){\n  var cap=0;\n  Object.keys(otcVehFleet).forEach(function(id){\n    cap+=OTC_VEHICLES[id].cap * otcVehFleet[id];\n  });\n  return cap;\n}\nfunction otcFleetTotalRate(){\n  var rate=0;\n  Object.keys(otcVehFleet).forEach(function(id){\n    rate+=OTC_VEHICLES[id].rate * otcVehFleet[id];\n  });\n  return rate;\n}\nfunction otcFleetLabel(){\n  var parts=[];\n  Object.keys(otcVehFleet).forEach(function(id){\n    var qty=otcVehFleet[id];\n    parts.push(qty+'\u00d7 '+OTC_VEHICLES[id].name);\n  });\n  return parts.join(' + ') || '\u2014';\n}\nfunction otcFleetHasVehicles(){\n  return Object.keys(otcVehFleet).length>0;\n}\n\n\/* PROMO CODES *\/\nvar otcPromoDiscount=0;\nvar OTC_PROMO_CODES={'ONYX10':0.10,'CANNES15':0.15,'NICE20':0.20};\n\nfunction otcApplyPromo(){\n  var inp=document.getElementById('inp-promo'),msg=document.getElementById('otcPromoMsg'),applied=document.getElementById('otcPromoApplied'),appliedLbl=document.getElementById('otcPromoAppliedLbl');\n  if(!inp||!msg)return;\n  var code=(inp.value||'').trim().toUpperCase();\n  if(!code){msg.textContent='Veuillez saisir un code.';msg.className='otc-promo-msg err';return;}\n  var disc=OTC_PROMO_CODES[code];\n  if(disc!==undefined){\n    otcPromoDiscount=disc;msg.textContent='';msg.className='otc-promo-msg';\n    if(applied)applied.classList.add('show');\n    if(appliedLbl)appliedLbl.textContent=Math.round(disc*100)+'% de remise appliqu\u00e9e \u2713';\n    inp.disabled=true;otcUpdate();\n  } else {\n    otcPromoDiscount=0;msg.textContent='Code invalide. V\u00e9rifiez la saisie.';msg.className='otc-promo-msg err';\n    if(applied)applied.classList.remove('show');otcUpdate();\n  }\n}\nfunction otcRemovePromo(){\n  otcPromoDiscount=0;\n  var inp=document.getElementById('inp-promo'),msg=document.getElementById('otcPromoMsg'),applied=document.getElementById('otcPromoApplied');\n  if(inp){inp.value='';inp.disabled=false;}\n  if(msg){msg.textContent='';msg.className='otc-promo-msg';}\n  if(applied)applied.classList.remove('show');\n  otcUpdate();\n}\n\n\/* DESTINATIONS *\/\nvar OTC_NAMES={villefranche:'Villefranche-sur-Mer',capferrat:'Saint-Jean-Cap-Ferrat',hautdecagnes:'Haut-de-Cagnes',eze:'Eze Village & Jardins Exotiques',fragonard:'Fragonard \u00b7 Eze Village',antibes:'Antibes',roquebrune:'Roquebrune Village',mougins:'Mougins Village',saintpaul:'Saint-Paul-de-Vence',monaco:'Monaco - Le Rocher & Palais du Prince',mandelieu:'Mandelieu-la-Napoule',vence:'Vence',montecarlo:'Monte-Carlo & Casino',tourrettes:'Tourrettes-sur-Loup',cannes:'Cannes',bordighera:'Bordighera Citt\u00e0 Alta',menton:'Menton',gourdon:'Gourdon',grasse:'Grasse',ventimiglia:'Ventimiglia',dolceacqua:'Dolceacqua',sanremo:'San Remo',apricale:'Apricale',imperia:'Imperia',dianomarina:'Diano Marina',saintemaxime:'Sainte-Maxime',laigueglia:'Laigueglia',alassio:'Alassio',portgrimaud:'Port Grimaud',sainttropez:'Saint-Tropez',loano:'Loano',biot:'Biot Village',valbonne:'Valbonne Village',fragonardgrasse:'Fragonard \u00b7 Grasse',molinard:'Molinard \u00b7 Grasse',galimard:'Galimard \u00b7 Grasse',restaurant:'Pause Restauration',bellet:'Ch\u00e2teau de Bellet',cremat:'Ch\u00e2teau de Cr\u00e9mat',saintvincent:'Clos Saint-Vincent',saintmartin:'Ch\u00e2teau de Saint-Martin',dott:'Domaine Ott',sainteRoseline:'Ch\u00e2teau Sainte-Roseline',roubine:'Ch\u00e2teau Roubine',berne:'Ch\u00e2teau de Berne',peyrassol:'Commanderie de Peyrassol',minuty:'Ch\u00e2teau Minuty',esclans:'Ch\u00e2teau d\\'Esclans',pibarnon:'Ch\u00e2teau de Pibarnon',tempier:'Domaine Tempier',lacoste:'Ch\u00e2teau La Coste',lasource:'Domaine de la Source',vinceline:'Domaine de Vinceline',rasse:'Domaine Rasse \u00b7 Saint-Jeannet',fontdubroc:'Ch\u00e2teau Font du Broc',margui:'Ch\u00e2teau Marg\u00fci',malherbe:'Ch\u00e2teau Malherbe',vignelaure:'Ch\u00e2teau Vignelaure',terredemistral:'Domaine Terre de Mistral',duseuil:'Ch\u00e2teau du Seuil',hautecollines:'Domaine des Hautes Collines - Georges Rasse'};\nvar OTC_EMOJIS={villefranche:'',capferrat:'',hautdecagnes:'',eze:'',fragonard:'',antibes:'',roquebrune:'',mougins:'',saintpaul:'',monaco:'',mandelieu:'',vence:'',montecarlo:'',tourrettes:'',cannes:'',bordighera:'',menton:'',gourdon:'',grasse:'',ventimiglia:'',dolceacqua:'',sanremo:'',apricale:'',imperia:'',dianomarina:'',saintemaxime:'',laigueglia:'',alassio:'',portgrimaud:'',sainttropez:'',loano:'',restaurant:''};\nvar OTC_REGIONS={villefranche:'C\u00f4te d\\'Azur \u00b7 Est',capferrat:'Presqu\\'\u00eele \u00b7 Est',hautdecagnes:'Village perch\u00e9 \u00b7 Ouest',eze:'Village perch\u00e9 \u00b7 Est',fragonard:'Parfum \u00b7 Corniche',antibes:'Cap \u00b7 Ouest',roquebrune:'Village perch\u00e9 \u00b7 Est',mougins:'Village \u00b7 Arri\u00e8re-pays',saintpaul:'Arri\u00e8re-pays \u00b7 Ouest',monaco:'Principaut\u00e9 \u00b7 Le Rocher',mandelieu:'Est\u00e9rel \u00b7 Ouest',vence:'Arri\u00e8re-pays \u00b7 Ouest',montecarlo:'Principaut\u00e9 \u00b7 Monte-Carlo',tourrettes:'Arri\u00e8re-pays \u00b7 Ouest',cannes:'Glamour \u00b7 Ouest',bordighera:'Ligurie \u00b7 Italie',menton:'Fronti\u00e8re \u00b7 Est',gourdon:'Belv\u00e9d\u00e8re \u00b7 Arri\u00e8re-pays',grasse:'Parfums \u00b7 Arri\u00e8re-pays',ventimiglia:'Fronti\u00e8re \u00b7 Italie',dolceacqua:'Val Nervia \u00b7 Italie',sanremo:'Riviera dei Fiori \u00b7 Italie',apricale:'Ligurie int\u00e9rieure \u00b7 Italie',imperia:'Riviera di Ponente \u00b7 Italie',dianomarina:'Riviera di Ponente \u00b7 Italie',saintemaxime:'Golfe de Saint-Tropez \u00b7 Var',laigueglia:'Riviera di Ponente \u00b7 Italie',alassio:'Riviera di Ponente \u00b7 Italie',portgrimaud:'Golfe de Saint-Tropez \u00b7 Var',sainttropez:'Golfe de Saint-Tropez \u00b7 Var',loano:'Riviera di Ponente \u00b7 Italie',biot:'Village \u00b7 C\u00f4te d\\'Azur',valbonne:'Village \u00b7 Arri\u00e8re-pays',fragonardgrasse:'Parfum \u00b7 Grasse',molinard:'Parfum \u00b7 Grasse',galimard:'Parfum \u00b7 Grasse',restaurant:'Option d\u00e9jeuner',bellet:'Vignoble \u00b7 AOC Bellet Nice',cremat:'Vignoble \u00b7 AOC Bellet Nice',saintvincent:'Vignoble \u00b7 AOC Bellet Nice',saintmartin:'Vignoble \u00b7 C\u00f4tes de Provence \u00b7 Taradeau',dott:'Vignoble \u00b7 C\u00f4tes de Provence',sainteRoseline:'Vignoble \u00b7 C\u00f4tes de Provence',roubine:'Vignoble \u00b7 C\u00f4tes de Provence',berne:'Vignoble \u00b7 C\u00f4tes de Provence Var',peyrassol:'Vignoble \u00b7 C\u00f4tes de Provence Var',minuty:'Vignoble \u00b7 C\u00f4tes de Provence Gassin',esclans:'Vignoble \u00b7 C\u00f4tes de Provence \u00b7 La Motte',pibarnon:'Vignoble \u00b7 Bandol AOC',tempier:'Vignoble \u00b7 Bandol AOC',lacoste:'Vignoble \u00b7 Coteaux d\\'Aix-en-Provence',lasource:'Vignoble \u00b7 AOC Bellet Nice',vinceline:'Vignoble \u00b7 AOC Bellet Nice',rasse:'Vignoble \u00b7 IGP Alpes-Maritimes',fontdubroc:'Vignoble \u00b7 C\u00f4tes de Provence Var',margui:'Vignoble \u00b7 Coteaux Varois',malherbe:'Vignoble \u00b7 C\u00f4tes de Provence Var',vignelaure:'Vignoble \u00b7 Coteaux d\\'Aix-en-Provence',terredemistral:'Vignoble \u00b7 Coteaux d\\'Aix-en-Provence',duseuil:'Vignoble \u00b7 Coteaux d\\'Aix-en-Provence',hautecollines:'Vignoble \u00b7 IGP Alpes-Maritimes'};\nvar OTC_DESCS={villefranche:'Baie naturelle sublime, Chapelle Cocteau et citadelle royale.',capferrat:'Villas l\u00e9gendaires, Villa Ephrussi et sentiers c\u00f4tiers sauvages.',hautdecagnes:'Ch\u00e2teau Grimaldi m\u00e9di\u00e9val dominant la mer, ruelles fleuries et ateliers d\\'artistes.',eze:'Village m\u00e9di\u00e9val perch\u00e9 \u00e0 429m avec panorama 360\u00b0 et jardins exotiques.',fragonard:'Visite guid\u00e9e gratuite (30mn) ou cours ma\u00eetre parfumeur (2h) \u2014 sur la Corniche d\\'Eze.',antibes:'Vieille ville, remparts g\u00e9nois, Port Vauban et Mus\u00e9e Picasso.',roquebrune:'Plus ancien ch\u00e2teau m\u00e9di\u00e9val habit\u00e9 de France, perch\u00e9 \u00e0 300m au-dessus de la mer.',mougins:'Village d\\'artistes proven\u00e7al, gastronomie \u00e9toil\u00e9e et ruelles pittoresques.',saintpaul:'Village d\\'artistes fortifi\u00e9, galeries et Fondation Maeght.',monaco:'Palais Princier, Cath\u00e9drale, Port Hercule et Vieux Monaco.',mandelieu:'Ch\u00e2teau de la Napoule les pieds dans l\\'eau, mimosaie et rade de Cannes.',vence:'Cit\u00e9 m\u00e9di\u00e9vale, Chapelle Matisse, fontaines et remparts.',montecarlo:'Casino de Monte-Carlo, H\u00f4tel de Paris et Place du Casino.',tourrettes:'Cit\u00e9 des violettes, ateliers d\\'artisans et gorges du Loup.',cannes:'La Croisette, Palais des Festivals et Vieux-Port \u00e9l\u00e9gant.',bordighera:'Cit\u00e9 ligure m\u00e9di\u00e9vale perch\u00e9e, jardins de palmiers royaux et vue mer.',menton:'La Perle de la France - citrons, baroque italien et jardins.',gourdon:'Perch\u00e9 \u00e0 760m, vue mer et Alpes, class\u00e9 Plus Beaux Villages.',grasse:'Capitale mondiale du parfum, parfumeries Fragonard et Molinard.',ventimiglia:'Premi\u00e8re ville italienne \u2014 vieille ville perch\u00e9e, march\u00e9 anim\u00e9 et vestiges romains.',dolceacqua:'Village m\u00e9di\u00e9val class\u00e9, ch\u00e2teau Doria et pont roman immortalis\u00e9 par Monet.',sanremo:'Capitale des fleurs, casino Belle \u00c9poque et vieille ville La Pigna.',apricale:'L\\'un des plus beaux villages d\\'Italie \u2014 ruelles en spirale, fresques et ch\u00e2teau.',imperia:'Porto Maurizio et ses ruelles baroque surplombant la mer, capitale de l\\'huile d\\'olive.',dianomarina:'Station baln\u00e9aire r\u00e9put\u00e9e \u2014 palmiers centenaires, mer turquoise et douceur ligure.',saintemaxime:'Face \u00e0 Saint-Tropez de l\\'autre c\u00f4t\u00e9 du golfe \u2014 plages dor\u00e9es et paysage grandiose.',laigueglia:'Village de p\u00eacheurs pr\u00e9serv\u00e9 aux fa\u00e7ades color\u00e9es, baroque m\u00e9ridional et plages tranquilles.',alassio:'La Perle de la Riviera ligure \u2014 longue plage de sable, centre historique et dolce vita.',portgrimaud:'La Venise de Provence \u2014 village lacustre aux canaux, bateaux et couleurs pastels.',sainttropez:'La Cit\u00e9 des stars \u2014 Vieux Port, citadelle, place des Lices et plages de Pampelonne.',loano:'Village ligure authentique, plages pr\u00e9serv\u00e9es, Palazzo Doria et arri\u00e8re-pays sauvage.',biot:'Village m\u00e9di\u00e9val perch\u00e9, capitale fran\u00e7aise du verre souffl\u00e9 et mus\u00e9e Fernand L\u00e9ger.',valbonne:'Village m\u00e9di\u00e9val \u00e0 plan quadrill\u00e9 unique en Provence, place des Arcades authentique.',fragonardgrasse:'Usine historique Fragonard \u00e0 Grasse \u2014 mus\u00e9e du parfum et cours ma\u00eetre parfumeur.',molinard:'Villa Belle \u00c9poque 1849, jardins de jasmin et collection de flacons Lalique et Baccarat.',galimard:'La plus ancienne parfumerie de Grasse fond\u00e9e en 1747 \u2014 Studio des Fragrances.',restaurant:'D\u00e9jeuner dans un restaurant s\u00e9lectionn\u00e9 selon vos go\u00fbts.',bellet:'Ch\u00e2teau fondateur AOC Bellet \u2014 c\u00e9pages Braquet, Folle Noire et Rolle sur calcaires ni\u00e7ois.',cremat:'Ch\u00e2teau historique fond\u00e9 en 1906 en AOC Bellet \u2014 production tr\u00e8s confidentielle de grande qualit\u00e9.',saintvincent:'Vignes en terrasses dominant la baie des Anges \u2014 vins confidentiels issus de c\u00e9pages locaux Bellet.',saintmartin:'Grand Cru Class\u00e9 en C\u00f4tes de Provence \u00e0 Taradeau \u2014 d\u00e9gustations et exp\u00e9riences sur mesure depuis le XVIIe si\u00e8cle.',dott:'Institution centenaire fond\u00e9e en 1912 avec trois domaines d\\'exception en C\u00f4tes de Provence.',sainteRoseline:'Abbaye templi\u00e8re du XIIe si\u00e8cle class\u00e9e Monument Historique \u2014 ros\u00e9 Cuv\u00e9e Prieur\u00e9 parmi les plus m\u00e9daill\u00e9s de Provence.',roubine:'Ch\u00e2teau certifi\u00e9 Agriculture Biologique en C\u00f4tes de Provence \u00e0 Lorgues \u2014 ros\u00e9s et blancs bio d\\'exception.',berne:'Vaste domaine de 1 000 hectares en C\u00f4tes de Provence \u00e0 Lorgues \u2014 restaurant gastronomique et h\u00f4tel de charme.',peyrassol:'Ancien domaine templier du XIIIe si\u00e8cle en C\u00f4tes de Provence \u2014 galerie d\\'art contemporain int\u00e9gr\u00e9e.',minuty:'Domaine Grand Cru Class\u00e9 en C\u00f4tes de Provence \u00e0 Gassin \u2014 ros\u00e9 M Minuty parmi les plus vendus au monde.',esclans:'Berceau du Whispering Angel, ros\u00e9 de Provence le plus vendu dans le monde \u2014 vignoble d\\'exception \u00e0 La Motte dans le Var.',pibarnon:'Ch\u00e2teau mythique en AOC Bandol perch\u00e9 \u00e0 300m \u2014 rouge Mourv\u00e8dre de garde parmi les plus grands vins fran\u00e7ais.',tempier:'Domaine de r\u00e9f\u00e9rence absolue en AOC Bandol \u2014 rouge Bandol l\u00e9gendaire, r\u00e9f\u00e9rences Parker et Wine Spectator.',lacoste:'200 ha en Coteaux d\\'Aix-en-Provence \u2014 art contemporain mondial sign\u00e9 Renzo Piano et Jean Nouvel.',lasource:'Petit domaine artisanal en AOC Bellet sur les hauteurs de Nice \u2014 production confidentielle en agriculture raisonn\u00e9e.',vinceline:'Domaine familial en AOC Bellet sur les calcaires des collines ni\u00e7oises \u2014 blanc de Rolle, rouge Braquet et ros\u00e9 authentiques.',rasse:'Vignoble au pied du Baou de Saint-Jeannet en IGP Alpes-Maritimes \u2014 terroir calcaire pour des vins frais et min\u00e9raux.',fontdubroc:'Vignoble familial en C\u00f4tes de Provence sur terroir argilo-calcaire au Luc-en-Provence \u2014 ros\u00e9, blanc et rouge \u00e9l\u00e9gants.',margui:'Domaine certifi\u00e9 Demeter en biodynamie dans les Coteaux Varois \u00e0 Ch\u00e2teauvert \u2014 vins nature d\\'une rare puret\u00e9.',malherbe:'Domaine artisanal en C\u00f4tes de Provence sur le massif des Maures \u00e0 Bormes-les-Mimosas \u2014 production confidentielle.',vignelaure:'Domaine pionnier en Coteaux d\\'Aix-en-Provence \u2014 premier ch\u00e2teau proven\u00e7al \u00e0 produire de grands vins rouges de garde.',terredemistral:'Vignoble biologique en Coteaux d\\'Aix \u00e0 Puyloubier, au pied de la Sainte-Victoire de C\u00e9zanne.',duseuil:'Domaine certifi\u00e9 Agriculture Biologique dans les Coteaux d\\'Aix-en-Provence \u2014 vins d\\'une rare min\u00e9ralit\u00e9 et fra\u00eecheur.',hautecollines:'Domaine familial en IGP Alpes-Maritimes \u00e0 Saint-Jeannet \u2014 d\u00e9gustations guid\u00e9es, balade vignoble et pique-nique au pied du Baou.'};\nvar OTC_IMGS={villefranche:'https:\/\/transponyx.com\/wp-content\/uploads\/VILLEFRANCHE-1000-WEBP-e1776368540239.webp',capferrat:'https:\/\/transponyx.com\/wp-content\/uploads\/VILLA-EPHRUSSI-CAP-FERRAT-1000-WEBP.webp',hautdecagnes:'https:\/\/transponyx.com\/wp-content\/uploads\/HAUT-DE-CAGNE-1000-WEBP-e1776368815238.webp',eze:'https:\/\/transponyx.com\/wp-content\/uploads\/EZE-VILLAGE-WEBP.webp',fragonard:'https:\/\/transponyx.com\/wp-content\/uploads\/FRAGONARD-WEBP-e1776369219968.webp',antibes:'https:\/\/transponyx.com\/wp-content\/uploads\/ANTIBES-VILLAGE-WEBP-e1776369259605.webp',roquebrune:'https:\/\/transponyx.com\/wp-content\/uploads\/ROQUEBRUNE-VILLAGE-1000-WEBP-e1776368645233.webp',mougins:'https:\/\/transponyx.com\/wp-content\/uploads\/MOUGINS-VILLAGE-1000-WEBP-e1776368686165.webp',saintpaul:'https:\/\/transponyx.com\/wp-content\/uploads\/SAINT-PAUL-DE-VENCE-WEBP-e1776369110131.webp',monaco:'https:\/\/transponyx.com\/wp-content\/uploads\/PALAIS-DU-PRINCE-MONACO-TRANSPONYX-WEBP-e1776368983463.webp',mandelieu:'https:\/\/transponyx.com\/wp-content\/uploads\/MANDELIEU-LA-NAPOULE-1000-WEBP-e1776368725742.webp',vence:'https:\/\/transponyx.com\/wp-content\/uploads\/VENCE-VILLAGE-WEBP-e1776369057291.webp',montecarlo:'https:\/\/transponyx.com\/wp-content\/uploads\/MONTE-CARLO-WEBP-e1776369150901.webp',tourrettes:'https:\/\/transponyx.com\/wp-content\/uploads\/TOURRETTES-SUR-LOUP-VILLAGE-WEBP-e1776369085837.webp',cannes:'https:\/\/transponyx.com\/wp-content\/uploads\/CANNES-WEBP-e1776369246506.webp',bordighera:'https:\/\/transponyx.com\/wp-content\/uploads\/BORDIGHERA-CITA-ALTA-e1776368892627.webp',menton:'https:\/\/transponyx.com\/wp-content\/uploads\/MENTON-VILLAGE-WEBP-e1776369172225.webp',gourdon:'https:\/\/transponyx.com\/wp-content\/uploads\/GOURDON-VILLAGE-WEBP-e1776369193600.webp',grasse:'https:\/\/transponyx.com\/wp-content\/uploads\/GRASSE-WEBP.webp',ventimiglia:'https:\/\/transponyx.com\/wp-content\/uploads\/VENTIMIGLIA-1000-WEBP-Liguria-Ventimiglia-Cattedrale-di-Santa-Maria-Assunta--e1776368519705.webp',dolceacqua:'https:\/\/transponyx.com\/wp-content\/uploads\/DOLCEACQUA-1000-WEBP-e1776368861586.webp',sanremo:'https:\/\/transponyx.com\/wp-content\/uploads\/SANREMO-1000-WEBP-e1776368574900.webp',apricale:'https:\/\/transponyx.com\/wp-content\/uploads\/APRICALE-1000-WEBP-e1776368937528.webp',imperia:'https:\/\/transponyx.com\/wp-content\/uploads\/IMPERIA-1000-WEBP-e1776368780432.webp',dianomarina:'https:\/\/transponyx.com\/wp-content\/uploads\/DIANO-MARINA-1000-WEBP.webp',saintemaxime:'https:\/\/transponyx.com\/wp-content\/uploads\/SAINTE-MAXIME-1000-WEBP.webp',laigueglia:'https:\/\/transponyx.com\/wp-content\/uploads\/LAIGUEGLIA-1000-WEBP-e1776368765527.webp',alassio:'https:\/\/transponyx.com\/wp-content\/uploads\/ALASSIO-1000-WEBP-e1776368953623.webp',portgrimaud:'https:\/\/transponyx.com\/wp-content\/uploads\/PORT-GRIMAUD-1000-WEBP-e1776368659127.webp',sainttropez:'https:\/\/transponyx.com\/wp-content\/uploads\/SAINT-TROPEZ-1000-WEBP-e1776368608880.webp',loano:'https:\/\/transponyx.com\/wp-content\/uploads\/LOANO-1000-WEBP-e1776368749286.webp',biot:'https:\/\/transponyx.com\/wp-content\/uploads\/BIOT-VILLAGE-1000-WEBP-e1776368908522.webp',valbonne:'https:\/\/transponyx.com\/wp-content\/uploads\/VALBONNE-VILLAGE-1000-WEBP.webp',fragonardgrasse:'https:\/\/transponyx.com\/wp-content\/uploads\/FRAGONARD-GRASSE-1000-WEBP-e1776368847425.webp',molinard:'https:\/\/transponyx.com\/wp-content\/uploads\/MOLINARD-GRASSE-1000-WEBP-e1776368706334.webp',galimard:'https:\/\/transponyx.com\/wp-content\/uploads\/GALIMARD-GRASSE-1000-WEBP-e1776368830695.webp',restaurant:'https:\/\/images.unsplash.com\/photo-1414235077428-338989a2e8c0?auto=format&fit=crop&w=400&q=70',bellet:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-de-Bellet-Prestige-Historique-sur-les-Hauteurs-de-Nice.webp',cremat:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-de-Cremat-LHeritage-Riviera-et-lEsprit-Chanel-e1776679835159.webp',saintvincent:'https:\/\/transponyx.com\/wp-content\/uploads\/Clos-Saint-Vincent-La-Haute-Couture-des-Vins-de-Nice-e1776679715757.webp',saintmartin:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-de-Saint-Martin-Histoire-et-Crus-Classes-e1776679783848.webp',dott:'https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-Ott-LElegance-du-Rose-de-Provence-e1776679663989.webp',sainteRoseline:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Sainte-Roseline-Excellence-et-Patrimoine-Religieux-e1776679731410.webp',roubine:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Roubine-Cru-Classe-de-Provence-e1776679738199.webp',berne:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-de-Berne-LArt-de-Vivre-en-Provence-e1776679842659.webp',peyrassol:'https:\/\/transponyx.com\/wp-content\/uploads\/Commanderie-de-Peyrassol-Histoire-et-Art-du-Vin-e1776679706116.webp',minuty:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Minuty-LIcone-du-Rose-de-Saint-Tropez.webp',esclans:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-dEsclans-Le-Temple-du-Whispering-Angel.webp',pibarnon:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-de-Pibarnon-Le-Balcon-de-la-Mediterranee-e1776679790795.webp',tempier:'https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-Tempier-Les-Grands-Crus-de-Bandol-e1776679651800.webp',lacoste:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-La-Coste-Fusion-du-Vin-de-lArt-et-de-lArchitecture-e1776679765672.webp',lasource:'https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-de-la-Source-Pepite-des-Vins-de-Nice-e1776679699487.webp',vinceline:'https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-de-Vinceline-Tresors-Bio-du-Terroir-Provencal-e1776679682299.webp',rasse:'https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-des-Hautes-Collines-Vin-sous-le-Soleil-de-lEsterel-e1776679674541.webp',fontdubroc:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Font-du-Broc-La-Cathedrale-de-Pierre-e1776679771411.webp',margui:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Margui-LEcrin-de-Luxe-de-la-Provence-Verte-e1776679750101.webp',malherbe:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Malherbe-Entre-Vignes-et-Mediterranee-e1776679757811.webp',vignelaure:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Vignelaure-LAlliance-de-lArt-et-du-Vin-de-Garde.webp',terredemistral:'https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-Terre-de-Mistral-Soiree-Vigneronne-Authentique-e1776679638505.webp',duseuil:'https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-du-Seuil-Art-de-Vivre-et-Gastronomie.webp',hautecollines:'https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-des-Hautes-Collines-Vin-sous-le-Soleil-de-lEsterel-e1776679674541.webp'};\nvar OTC_RECO={villefranche:'30mn',capferrat:'1h',hautdecagnes:'1h',eze:'1h',fragonard:'30mn',antibes:'1h30',roquebrune:'1h',mougins:'1h',saintpaul:'1h30',monaco:'1h',mandelieu:'1h',vence:'1h',montecarlo:'30mn',tourrettes:'1h',cannes:'1h30',bordighera:'1h',menton:'1h',gourdon:'1h',grasse:'1h',ventimiglia:'1h30',dolceacqua:'1h30',sanremo:'1h30',apricale:'1h',imperia:'1h30',dianomarina:'1h',saintemaxime:'1h',laigueglia:'1h',alassio:'1h30',portgrimaud:'1h',sainttropez:'2h',loano:'1h',biot:'1h',valbonne:'1h',fragonardgrasse:'1h',molinard:'1h',galimard:'1h',restaurant:'1h30',bellet:'1h',cremat:'1h',saintvincent:'1h',saintmartin:'1h30',dott:'1h30',sainteRoseline:'1h30',roubine:'1h30',berne:'1h30',peyrassol:'1h30',minuty:'1h30',esclans:'1h30',pibarnon:'1h30',tempier:'1h30',lacoste:'1h30',lasource:'1h',vinceline:'1h',rasse:'1h',fontdubroc:'1h30',margui:'1h30',malherbe:'1h30',vignelaure:'1h30',terredemistral:'1h30',duseuil:'1h30',hautecollines:'1h30'};\nvar OTC_COORDS={villefranche:{lat:43.7058,lng:7.3127,biot:35,valbonne:48,fragonardgrasse:45,molinard:45,galimard:45},capferrat:{lat:43.6897,lng:7.3327,biot:37,valbonne:50,fragonardgrasse:50,molinard:50,galimard:50},hautdecagnes:{lat:43.6640,lng:7.1468,biot:12,valbonne:22,fragonardgrasse:32,molinard:32,galimard:32},eze:{lat:43.7274,lng:7.3618,biot:42,valbonne:52,fragonardgrasse:55,molinard:55,galimard:55},fragonard:{lat:43.7260,lng:7.3590,biot:42,valbonne:50,fragonardgrasse:52,molinard:52,galimard:52},antibes:{lat:43.5808,lng:7.1261,biot:15,valbonne:22,fragonardgrasse:32,molinard:32,galimard:32},roquebrune:{lat:43.7691,lng:7.4771,biot:50,valbonne:60,fragonardgrasse:60,molinard:60,galimard:60},mougins:{lat:43.6014,lng:6.9966,biot:25,valbonne:15,fragonardgrasse:22,molinard:22,galimard:22},saintpaul:{lat:43.6973,lng:7.1211,biot:22,valbonne:28,fragonardgrasse:28,molinard:28,galimard:28},monaco:{lat:43.7325,lng:7.4189,biot:57,valbonne:67,fragonardgrasse:70,molinard:70,galimard:70},mandelieu:{lat:43.5369,lng:6.9415,biot:25,valbonne:22,fragonardgrasse:22,molinard:22,galimard:22},vence:{lat:43.7226,lng:7.1107,biot:28,valbonne:25,fragonardgrasse:25,molinard:25,galimard:25},montecarlo:{lat:43.7398,lng:7.4271,biot:59,valbonne:69,fragonardgrasse:72,molinard:72,galimard:72},tourrettes:{lat:43.7108,lng:7.0918,biot:30,valbonne:22,fragonardgrasse:22,molinard:22,galimard:22},cannes:{lat:43.5528,lng:7.0174,biot:25,valbonne:20,fragonardgrasse:30,molinard:30,galimard:30},bordighera:{lat:43.7775,lng:7.6678,biot:65,valbonne:75,fragonardgrasse:72,molinard:72,galimard:72},menton:{lat:43.7764,lng:7.4964,biot:68,valbonne:78,fragonardgrasse:78,molinard:78,galimard:78},gourdon:{lat:43.7224,lng:6.9988,biot:35,valbonne:20,fragonardgrasse:25,molinard:25,galimard:25},grasse:{lat:43.6600,lng:6.9238,biot:30,valbonne:18,fragonardgrasse:5,molinard:5,galimard:5},ventimiglia:{lat:43.7917,lng:7.6072,biot:70,valbonne:82,fragonardgrasse:77,molinard:77,galimard:77},dolceacqua:{lat:43.8506,lng:7.6311,biot:75,valbonne:87,fragonardgrasse:84,molinard:84,galimard:84},sanremo:{lat:43.8158,lng:7.7766,biot:78,valbonne:90,fragonardgrasse:87,molinard:87,galimard:87},apricale:{lat:43.8789,lng:7.6708,biot:85,valbonne:97,fragonardgrasse:94,molinard:94,galimard:94},imperia:{lat:43.8889,lng:8.0316,biot:98,valbonne:110,fragonardgrasse:107,molinard:107,galimard:107},dianomarina:{lat:43.9127,lng:8.0794,biot:108,valbonne:120,fragonardgrasse:117,molinard:117,galimard:117},saintemaxime:{lat:43.3097,lng:6.6397,biot:80,valbonne:75,fragonardgrasse:78,molinard:78,galimard:78},laigueglia:{lat:43.9672,lng:8.1590,biot:125,valbonne:132,fragonardgrasse:134,molinard:134,galimard:134},alassio:{lat:44.0001,lng:8.1720,biot:127,valbonne:134,fragonardgrasse:136,molinard:136,galimard:136},portgrimaud:{lat:43.2736,lng:6.5799,biot:85,valbonne:80,fragonardgrasse:83,molinard:83,galimard:83},sainttropez:{lat:43.2677,lng:6.6407,biot:90,valbonne:85,fragonardgrasse:88,molinard:88,galimard:88},loano:{lat:44.1291,lng:8.2620,biot:140,valbonne:147,fragonardgrasse:149,molinard:149,galimard:149},biot:{lat:43.6310,lng:7.1010},valbonne:{lat:43.6430,lng:6.9930},fragonardgrasse:{lat:43.6614,lng:6.9211},molinard:{lat:43.6587,lng:6.9221},galimard:{lat:43.6595,lng:6.9235},bellet:{lat:43.7320,lng:7.1830},cremat:{lat:43.7354,lng:7.1755},saintvincent:{lat:43.7383,lng:7.2052},saintmartin:{lat:43.4635,lng:6.4808},dott:{lat:43.4700,lng:6.4750},sainteRoseline:{lat:43.4705,lng:6.4687},roubine:{lat:43.5020,lng:6.3830},berne:{lat:43.5178,lng:6.3581},peyrassol:{lat:43.3600,lng:6.2300},minuty:{lat:43.2390,lng:6.5712},esclans:{lat:43.4890,lng:6.0520},pibarnon:{lat:43.1700,lng:5.7100},tempier:{lat:43.1360,lng:5.7240},lacoste:{lat:43.6300,lng:5.4400},lasource:{lat:43.7350,lng:7.1630},vinceline:{lat:43.7310,lng:7.1520},rasse:{lat:43.7482,lng:7.1925},fontdubroc:{lat:43.3890,lng:6.3230},margui:{lat:43.4800,lng:6.0800},malherbe:{lat:43.1400,lng:6.3400},vignelaure:{lat:43.6100,lng:5.7600},terredemistral:{lat:43.5180,lng:5.6700},duseuil:{lat:43.4890,lng:5.4650},hautecollines:{lat:43.7490,lng:7.1950}};\nvar OTC_SPECIAL_DURS={fragonard:['30mn','2h']};\nvar OTC_DUR={'30mn':30,'1h':60,'1h30':90,'2h':120,'2h30':150,'3h':180,'4h':240,'5h':300};\nvar OTC_TRANSIT={villefranche:{capferrat:15,hautdecagnes:20,eze:20,fragonard:22,antibes:42,roquebrune:12,mougins:45,saintpaul:30,monaco:23,mandelieu:52,vence:28,montecarlo:25,tourrettes:35,cannes:50,bordighera:30,menton:40,gourdon:45,grasse:45,ventimiglia:38,dolceacqua:45,sanremo:48,apricale:55,imperia:68,dianomarina:78,saintemaxime:105,laigueglia:95,alassio:97,portgrimaud:110,sainttropez:115,loano:110},capferrat:{villefranche:15,hautdecagnes:22,eze:25,fragonard:27,antibes:45,roquebrune:8,mougins:47,saintpaul:33,monaco:18,mandelieu:55,vence:33,montecarlo:20,tourrettes:40,cannes:55,bordighera:28,menton:35,gourdon:50,grasse:50,ventimiglia:35,dolceacqua:42,sanremo:45,apricale:52,imperia:65,dianomarina:75,saintemaxime:110,laigueglia:92,alassio:94,portgrimaud:115,sainttropez:120,loano:107},hautdecagnes:{villefranche:20,capferrat:22,eze:30,fragonard:32,antibes:15,roquebrune:55,mougins:18,saintpaul:18,monaco:50,mandelieu:28,vence:18,montecarlo:52,tourrettes:22,cannes:25,bordighera:58,menton:60,gourdon:35,grasse:30,ventimiglia:63,dolceacqua:65,sanremo:68,apricale:78,imperia:90,dianomarina:100,saintemaxime:88,laigueglia:118,alassio:120,portgrimaud:93,sainttropez:98,loano:133},eze:{villefranche:20,capferrat:25,hautdecagnes:30,fragonard:5,antibes:50,roquebrune:10,mougins:48,saintpaul:40,monaco:25,mandelieu:57,vence:38,montecarlo:28,tourrettes:45,cannes:60,bordighera:22,menton:25,gourdon:55,grasse:55,ventimiglia:28,dolceacqua:35,sanremo:38,apricale:45,imperia:60,dianomarina:70,saintemaxime:115,laigueglia:87,alassio:89,portgrimaud:120,sainttropez:125,loano:102},fragonard:{villefranche:22,capferrat:27,hautdecagnes:32,eze:5,antibes:50,roquebrune:12,mougins:46,saintpaul:38,monaco:28,mandelieu:59,vence:36,montecarlo:30,tourrettes:43,cannes:58,bordighera:22,menton:30,gourdon:53,grasse:52,ventimiglia:28,dolceacqua:35,sanremo:38,apricale:45,imperia:60,dianomarina:70,saintemaxime:117,laigueglia:87,alassio:89,portgrimaud:122,sainttropez:127,loano:102},antibes:{villefranche:42,capferrat:45,hautdecagnes:15,eze:50,fragonard:50,roquebrune:52,mougins:18,saintpaul:28,monaco:55,mandelieu:15,vence:28,montecarlo:57,tourrettes:25,cannes:20,bordighera:60,menton:68,gourdon:35,grasse:30,ventimiglia:65,dolceacqua:72,sanremo:75,apricale:82,imperia:95,dianomarina:105,saintemaxime:70,laigueglia:122,alassio:124,portgrimaud:75,sainttropez:80,loano:137},roquebrune:{villefranche:12,capferrat:8,hautdecagnes:55,eze:10,fragonard:12,antibes:52,mougins:58,saintpaul:48,monaco:8,mandelieu:72,vence:50,montecarlo:10,tourrettes:55,cannes:62,bordighera:18,menton:15,gourdon:65,grasse:60,ventimiglia:20,dolceacqua:25,sanremo:28,apricale:38,imperia:52,dianomarina:62,saintemaxime:130,laigueglia:80,alassio:82,portgrimaud:135,sainttropez:140,loano:95},mougins:{villefranche:45,capferrat:47,hautdecagnes:18,eze:48,fragonard:46,antibes:18,roquebrune:58,saintpaul:22,monaco:57,mandelieu:18,vence:20,montecarlo:59,tourrettes:18,cannes:15,bordighera:65,menton:70,gourdon:22,grasse:20,ventimiglia:70,dolceacqua:75,sanremo:78,apricale:85,imperia:98,dianomarina:108,saintemaxime:78,laigueglia:125,alassio:127,portgrimaud:83,sainttropez:88,loano:140},saintpaul:{villefranche:30,capferrat:33,hautdecagnes:18,eze:40,fragonard:38,antibes:28,roquebrune:48,mougins:22,monaco:55,mandelieu:30,vence:12,montecarlo:57,tourrettes:15,cannes:35,bordighera:60,menton:65,gourdon:30,grasse:25,ventimiglia:65,dolceacqua:72,sanremo:75,apricale:82,imperia:95,dianomarina:105,saintemaxime:80,laigueglia:122,alassio:124,portgrimaud:85,sainttropez:90,loano:137},monaco:{villefranche:23,capferrat:18,hautdecagnes:50,eze:25,fragonard:28,antibes:55,roquebrune:8,mougins:57,saintpaul:55,mandelieu:70,vence:53,montecarlo:5,tourrettes:55,cannes:65,bordighera:15,menton:18,gourdon:65,grasse:70,ventimiglia:20,dolceacqua:27,sanremo:30,apricale:38,imperia:52,dianomarina:62,saintemaxime:125,laigueglia:80,alassio:82,portgrimaud:130,sainttropez:135,loano:95},mandelieu:{villefranche:52,capferrat:55,hautdecagnes:28,eze:57,fragonard:59,antibes:15,roquebrune:72,mougins:18,saintpaul:30,monaco:70,mandelieu:0,vence:28,montecarlo:72,tourrettes:25,cannes:10,bordighera:78,menton:83,gourdon:28,grasse:22,ventimiglia:82,dolceacqua:87,sanremo:90,apricale:97,imperia:110,dianomarina:120,saintemaxime:68,laigueglia:137,alassio:139,portgrimaud:73,sainttropez:78,loano:152},vence:{villefranche:28,capferrat:33,hautdecagnes:18,eze:38,fragonard:36,antibes:28,roquebrune:50,mougins:20,saintpaul:12,monaco:53,mandelieu:28,montecarlo:55,tourrettes:14,cannes:33,bordighera:62,menton:63,gourdon:28,grasse:22,ventimiglia:67,dolceacqua:74,sanremo:77,apricale:84,imperia:97,dianomarina:107,saintemaxime:82,laigueglia:124,alassio:126,portgrimaud:87,sainttropez:92,loano:139},montecarlo:{villefranche:25,capferrat:20,hautdecagnes:52,eze:28,fragonard:30,antibes:57,roquebrune:10,mougins:59,saintpaul:57,monaco:5,mandelieu:72,vence:55,tourrettes:57,cannes:67,bordighera:17,menton:20,gourdon:67,grasse:72,ventimiglia:22,dolceacqua:29,sanremo:32,apricale:40,imperia:54,dianomarina:64,saintemaxime:127,laigueglia:82,alassio:84,portgrimaud:132,sainttropez:137,loano:97},tourrettes:{villefranche:35,capferrat:40,hautdecagnes:22,eze:45,fragonard:43,antibes:25,roquebrune:55,mougins:18,saintpaul:15,monaco:55,mandelieu:25,vence:14,montecarlo:57,cannes:30,bordighera:65,menton:70,gourdon:30,grasse:20,ventimiglia:70,dolceacqua:77,sanremo:80,apricale:87,imperia:100,dianomarina:110,saintemaxime:85,laigueglia:127,alassio:129,portgrimaud:90,sainttropez:95,loano:142},cannes:{villefranche:50,capferrat:55,hautdecagnes:25,eze:60,fragonard:58,antibes:20,roquebrune:62,mougins:15,saintpaul:35,monaco:65,mandelieu:10,vence:33,montecarlo:67,tourrettes:30,bordighera:72,menton:78,gourdon:40,grasse:30,ventimiglia:75,dolceacqua:82,sanremo:85,apricale:92,imperia:105,dianomarina:115,saintemaxime:60,laigueglia:132,alassio:134,portgrimaud:65,sainttropez:70,loano:147},bordighera:{villefranche:30,capferrat:28,hautdecagnes:58,eze:22,fragonard:22,antibes:60,roquebrune:18,mougins:65,saintpaul:60,monaco:15,mandelieu:78,vence:62,montecarlo:17,tourrettes:65,cannes:72,menton:8,gourdon:75,grasse:72,ventimiglia:8,dolceacqua:15,sanremo:20,apricale:28,imperia:42,dianomarina:52,saintemaxime:140,laigueglia:68,alassio:70,portgrimaud:145,sainttropez:150,loano:84},menton:{villefranche:40,capferrat:35,hautdecagnes:60,eze:25,fragonard:30,antibes:70,roquebrune:15,mougins:70,saintpaul:65,monaco:18,mandelieu:83,vence:63,montecarlo:20,tourrettes:70,cannes:78,bordighera:8,gourdon:75,grasse:78,ventimiglia:12,dolceacqua:20,sanremo:22,apricale:30,imperia:44,dianomarina:54,saintemaxime:138,laigueglia:72,alassio:74,portgrimaud:143,sainttropez:148,loano:87},gourdon:{villefranche:45,capferrat:50,hautdecagnes:35,eze:55,fragonard:53,antibes:35,roquebrune:65,mougins:22,saintpaul:30,monaco:65,mandelieu:28,vence:28,montecarlo:67,tourrettes:30,cannes:40,bordighera:75,menton:75,grasse:25,ventimiglia:80,dolceacqua:87,sanremo:90,apricale:97,imperia:110,dianomarina:120,saintemaxime:82,laigueglia:137,alassio:139,portgrimaud:87,sainttropez:92,loano:152},grasse:{villefranche:45,capferrat:50,hautdecagnes:30,eze:55,fragonard:52,antibes:30,roquebrune:60,mougins:20,saintpaul:25,monaco:70,mandelieu:22,vence:22,montecarlo:72,tourrettes:20,cannes:30,bordighera:72,menton:78,gourdon:25,ventimiglia:77,dolceacqua:84,sanremo:87,apricale:94,imperia:107,dianomarina:117,saintemaxime:78,laigueglia:134,alassio:136,portgrimaud:83,sainttropez:88,loano:149},ventimiglia:{villefranche:38,capferrat:35,hautdecagnes:63,eze:28,fragonard:28,antibes:65,roquebrune:20,mougins:70,saintpaul:65,monaco:20,mandelieu:82,vence:67,montecarlo:22,tourrettes:70,cannes:75,bordighera:8,menton:12,gourdon:80,grasse:77,dolceacqua:10,sanremo:18,apricale:28,imperia:42,dianomarina:52,saintemaxime:148,laigueglia:68,alassio:70,portgrimaud:153,sainttropez:158,loano:83},dolceacqua:{villefranche:45,capferrat:42,hautdecagnes:65,eze:35,fragonard:35,antibes:72,roquebrune:25,mougins:75,saintpaul:72,monaco:27,mandelieu:87,vence:74,montecarlo:29,tourrettes:77,cannes:82,bordighera:15,menton:20,gourdon:87,grasse:84,ventimiglia:10,sanremo:22,apricale:20,imperia:38,dianomarina:48,saintemaxime:155,laigueglia:64,alassio:66,portgrimaud:160,sainttropez:165,loano:79},sanremo:{villefranche:48,capferrat:45,hautdecagnes:68,eze:38,fragonard:38,antibes:75,roquebrune:28,mougins:78,saintpaul:75,monaco:30,mandelieu:90,vence:77,montecarlo:32,tourrettes:80,cannes:85,bordighera:20,menton:22,gourdon:90,grasse:87,ventimiglia:18,dolceacqua:22,apricale:32,imperia:25,dianomarina:35,saintemaxime:170,laigueglia:50,alassio:52,portgrimaud:175,sainttropez:180,loano:66},apricale:{villefranche:55,capferrat:52,hautdecagnes:78,eze:45,fragonard:45,antibes:82,roquebrune:38,mougins:85,saintpaul:82,monaco:38,mandelieu:97,vence:84,montecarlo:40,tourrettes:87,cannes:92,bordighera:28,menton:30,gourdon:97,grasse:94,ventimiglia:28,dolceacqua:20,sanremo:32,imperia:48,dianomarina:58,saintemaxime:165,laigueglia:74,alassio:76,portgrimaud:170,sainttropez:175,loano:90},imperia:{villefranche:68,capferrat:65,hautdecagnes:90,eze:60,fragonard:60,antibes:95,roquebrune:52,mougins:98,saintpaul:95,monaco:52,mandelieu:110,vence:97,montecarlo:54,tourrettes:100,cannes:105,bordighera:42,menton:44,gourdon:110,grasse:107,ventimiglia:42,dolceacqua:38,sanremo:25,apricale:48,dianomarina:12,saintemaxime:195,laigueglia:28,alassio:30,portgrimaud:200,sainttropez:205,loano:44},dianomarina:{villefranche:78,capferrat:75,hautdecagnes:100,eze:70,fragonard:70,antibes:105,roquebrune:62,mougins:108,saintpaul:105,monaco:62,mandelieu:120,vence:107,montecarlo:64,tourrettes:110,cannes:115,bordighera:52,menton:54,gourdon:120,grasse:117,ventimiglia:52,dolceacqua:48,sanremo:35,apricale:58,imperia:12,saintemaxime:205,laigueglia:18,alassio:20,portgrimaud:210,sainttropez:215,loano:34},saintemaxime:{villefranche:105,capferrat:110,hautdecagnes:88,eze:115,fragonard:117,antibes:70,roquebrune:130,mougins:78,saintpaul:80,monaco:125,mandelieu:68,vence:82,montecarlo:127,tourrettes:85,cannes:60,bordighera:140,menton:138,gourdon:82,grasse:78,ventimiglia:148,dolceacqua:155,sanremo:170,apricale:165,imperia:195,dianomarina:205,laigueglia:225,alassio:228,portgrimaud:8,sainttropez:12,loano:242},laigueglia:{villefranche:95,capferrat:92,hautdecagnes:118,eze:87,fragonard:87,antibes:122,roquebrune:80,mougins:125,saintpaul:122,monaco:80,mandelieu:137,vence:124,montecarlo:82,tourrettes:127,cannes:132,bordighera:68,menton:72,gourdon:137,grasse:134,ventimiglia:68,dolceacqua:64,sanremo:50,apricale:74,imperia:28,dianomarina:18,saintemaxime:225,alassio:8,portgrimaud:230,sainttropez:235,loano:22},alassio:{villefranche:97,capferrat:94,hautdecagnes:120,eze:89,fragonard:89,antibes:124,roquebrune:82,mougins:127,saintpaul:124,monaco:82,mandelieu:139,vence:126,montecarlo:84,tourrettes:129,cannes:134,bordighera:70,menton:74,gourdon:139,grasse:136,ventimiglia:70,dolceacqua:66,sanremo:52,apricale:76,imperia:30,dianomarina:20,saintemaxime:228,laigueglia:8,portgrimaud:233,sainttropez:238,loano:15},portgrimaud:{villefranche:110,capferrat:115,hautdecagnes:93,eze:120,fragonard:122,antibes:75,roquebrune:135,mougins:83,saintpaul:85,monaco:130,mandelieu:73,vence:87,montecarlo:132,tourrettes:90,cannes:65,bordighera:145,menton:143,gourdon:87,grasse:83,ventimiglia:153,dolceacqua:160,sanremo:175,apricale:170,imperia:200,dianomarina:210,saintemaxime:8,laigueglia:230,alassio:233,sainttropez:8,loano:247},sainttropez:{villefranche:115,capferrat:120,hautdecagnes:98,eze:125,fragonard:127,antibes:80,roquebrune:140,mougins:88,saintpaul:90,monaco:135,mandelieu:78,vence:92,montecarlo:137,tourrettes:95,cannes:70,bordighera:150,menton:148,gourdon:92,grasse:88,ventimiglia:158,dolceacqua:165,sanremo:180,apricale:175,imperia:205,dianomarina:215,saintemaxime:12,laigueglia:235,alassio:238,portgrimaud:8,loano:252},biot:{villefranche:35,capferrat:37,hautdecagnes:12,eze:42,fragonard:42,antibes:15,roquebrune:50,mougins:25,saintpaul:22,monaco:57,mandelieu:25,vence:28,montecarlo:59,tourrettes:30,cannes:25,bordighera:65,menton:68,gourdon:35,grasse:30,ventimiglia:70,dolceacqua:75,sanremo:78,apricale:85,imperia:98,dianomarina:108,saintemaxime:80,laigueglia:125,alassio:127,portgrimaud:85,sainttropez:90,loano:140,valbonne:20,fragonardgrasse:32,molinard:32,galimard:32},valbonne:{villefranche:48,capferrat:50,hautdecagnes:22,eze:52,fragonard:50,antibes:22,roquebrune:60,mougins:15,saintpaul:28,monaco:67,mandelieu:22,vence:25,montecarlo:69,tourrettes:22,cannes:20,bordighera:75,menton:78,gourdon:20,grasse:18,ventimiglia:82,dolceacqua:87,sanremo:90,apricale:97,imperia:110,dianomarina:120,saintemaxime:75,laigueglia:132,alassio:134,portgrimaud:80,sainttropez:85,loano:147,biot:20,fragonardgrasse:20,molinard:20,galimard:20},fragonardgrasse:{villefranche:45,capferrat:50,hautdecagnes:30,eze:55,fragonard:52,antibes:30,roquebrune:60,mougins:20,saintpaul:25,monaco:70,mandelieu:22,vence:22,montecarlo:72,tourrettes:20,cannes:30,bordighera:72,menton:78,gourdon:25,grasse:5,ventimiglia:77,dolceacqua:84,sanremo:87,apricale:94,imperia:107,dianomarina:117,saintemaxime:78,laigueglia:134,alassio:136,portgrimaud:83,sainttropez:88,loano:149,biot:32,valbonne:20,molinard:5,galimard:5},molinard:{villefranche:45,capferrat:50,hautdecagnes:30,eze:55,fragonard:52,antibes:30,roquebrune:60,mougins:20,saintpaul:25,monaco:70,mandelieu:22,vence:22,montecarlo:72,tourrettes:20,cannes:30,bordighera:72,menton:78,gourdon:25,grasse:5,ventimiglia:77,dolceacqua:84,sanremo:87,apricale:94,imperia:107,dianomarina:117,saintemaxime:78,laigueglia:134,alassio:136,portgrimaud:83,sainttropez:88,loano:149,biot:32,valbonne:20,fragonardgrasse:5,galimard:5},galimard:{villefranche:45,capferrat:50,hautdecagnes:30,eze:55,fragonard:52,antibes:30,roquebrune:60,mougins:20,saintpaul:25,monaco:70,mandelieu:22,vence:22,montecarlo:72,tourrettes:20,cannes:30,bordighera:72,menton:78,gourdon:25,grasse:5,ventimiglia:77,dolceacqua:84,sanremo:87,apricale:94,imperia:107,dianomarina:117,saintemaxime:78,laigueglia:134,alassio:136,portgrimaud:83,sainttropez:88,loano:149,biot:32,valbonne:20,fragonardgrasse:5,molinard:5},loano:{villefranche:110,capferrat:107,hautdecagnes:133,eze:102,fragonard:102,antibes:137,roquebrune:95,mougins:140,saintpaul:137,monaco:95,mandelieu:152,vence:139,montecarlo:97,tourrettes:142,cannes:147,bordighera:84,menton:87,gourdon:152,grasse:149,ventimiglia:83,dolceacqua:79,sanremo:66,apricale:90,imperia:44,dianomarina:34,saintemaxime:242,laigueglia:22,alassio:15,portgrimaud:247,sainttropez:252}};\nvar OTC_FROM_NICE={villefranche:15,capferrat:20,hautdecagnes:20,eze:28,fragonard:28,antibes:32,roquebrune:35,mougins:35,saintpaul:38,monaco:38,mandelieu:38,vence:40,montecarlo:40,tourrettes:42,cannes:45,bordighera:48,menton:50,gourdon:50,grasse:52,ventimiglia:52,dolceacqua:55,sanremo:58,apricale:65,imperia:78,dianomarina:88,saintemaxime:100,laigueglia:100,alassio:102,portgrimaud:103,sainttropez:108,loano:118,biot:30,valbonne:42,fragonardgrasse:52,molinard:52,galimard:52,restaurant:10,bellet:15,cremat:20,saintvincent:22,saintmartin:80,dott:78,sainteRoseline:80,roubine:85,berne:88,peyrassol:98,minuty:105,esclans:108,pibarnon:128,tempier:132,lacoste:148,lasource:25,vinceline:28,rasse:32,fontdubroc:90,margui:110,malherbe:112,vignelaure:125,terredemistral:142,duseuil:158,hautecollines:32};\nvar OTC_DEFAULTS={villefranche:'30mn',capferrat:'1h',hautdecagnes:'1h',eze:'1h',fragonard:'30mn',antibes:'1h30',roquebrune:'1h',mougins:'1h',saintpaul:'1h30',monaco:'1h',mandelieu:'1h',vence:'1h',montecarlo:'30mn',tourrettes:'1h',cannes:'1h30',bordighera:'1h',menton:'1h',gourdon:'1h',grasse:'1h',ventimiglia:'1h30',dolceacqua:'1h30',sanremo:'1h30',apricale:'1h',imperia:'1h30',dianomarina:'1h',saintemaxime:'1h',laigueglia:'1h',alassio:'1h30',portgrimaud:'1h',sainttropez:'2h',loano:'1h',biot:'1h',valbonne:'1h',fragonardgrasse:'1h',molinard:'1h',galimard:'1h',restaurant:'1h30',bellet:'1h',cremat:'1h',saintvincent:'1h',saintmartin:'1h30',dott:'1h30',sainteRoseline:'1h30',roubine:'1h30',berne:'1h30',peyrassol:'1h30',minuty:'1h30',esclans:'1h30',pibarnon:'1h30',tempier:'1h30',lacoste:'1h30',lasource:'1h',vinceline:'1h',rasse:'1h',fontdubroc:'1h30',margui:'1h30',malherbe:'1h30',vignelaure:'1h30',terredemistral:'1h30',duseuil:'1h30',hautecollines:'1h30'};\nfunction otcBadgeLbl(idx){return '';}\n\n\/* STATE *\/\nvar otcState={},otcOrder=[],otcDurMap={};\nvar otcGuideChoice='non';\nvar otcDepLat=43.7102,otcDepLng=7.2620,otcCache={},otcGmReady=false,otcMatrixPending=false;\n\/* Base Onyx Tours \u2014 163 Bd de la Madeleine, 06000 Nice *\/\nvar OTC_BASE_LAT=43.7058,OTC_BASE_LNG=7.2629;\nvar otcApproachMins=0; \/* Base \u2192 Lieu de prise en charge *\/\nvar otcReturnMins=0;   \/* Derni\u00e8re destination \u2192 Base *\/\n\/* -- D\u00c9POSE DISTINCTE -- *\/\nvar otcDropDifferent=false;\nvar otcDropLat=43.7102,otcDropLng=7.2620;\nvar otcDropCache={};        \/* {id|drop} \u2014 dur\u00e9es vers lieu de d\u00e9pose *\/\nvar otcDropReturnMins=0;    \/* Lieu de d\u00e9pose \u2192 Base (si >40 km) *\/\nvar otcDropMatrixDone=false;\n\nfunction otcHaversineKm(lat1,lng1,lat2,lng2){\n  var R=6371,toRad=Math.PI\/180;\n  var dLat=(lat2-lat1)*toRad,dLng=(lng2-lng1)*toRad;\n  var a=Math.sin(dLat\/2)*Math.sin(dLat\/2)+Math.cos(lat1*toRad)*Math.cos(lat2*toRad)*Math.sin(dLng\/2)*Math.sin(dLng\/2);\n  return R*2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));\n}\n\nfunction otcDepDistFromBase(){\n  \/* Distance en km entre la Base et le point de prise en charge *\/\n  return otcHaversineKm(OTC_BASE_LAT,OTC_BASE_LNG,otcDepLat,otcDepLng);\n}\nvar otcCurrentView='list',otcMapInstance=null,otcMapMarkers={},otcActiveFloat=null;\nObject.keys(OTC_NAMES).forEach(function(id){otcDurMap[id]=OTC_DEFAULTS[id]||'1h';});\n\n\/* V\u00c9HICULE *\/\nfunction otcSelectVeh(id){\n  \/* Toggle: if already selected with qty>0, remove; else add with qty=1 *\/\n  if(otcVehFleet[id]){\n    delete otcVehFleet[id];\n    document.getElementById('veh-'+id).classList.remove('sel');\n  } else {\n    otcVehFleet[id]=1;\n    document.getElementById('veh-'+id).classList.add('sel');\n  }\n  \/* otcVeh kept for backward compat \u2014 use first selected or null *\/\n  var keys=Object.keys(otcVehFleet);\n  otcVeh=keys.length>0?keys[0]:null;\n  otcRefreshVehUI();\n}\n\nfunction otcVehQty(e,id,delta){\n  e.stopPropagation();\n  if(!otcVehFleet[id])return;\n  var newQty=otcVehFleet[id]+delta;\n  if(newQty<=0){\n    delete otcVehFleet[id];\n    document.getElementById('veh-'+id).classList.remove('sel');\n    var keys=Object.keys(otcVehFleet);\n    otcVeh=keys.length>0?keys[0]:null;\n  } else {\n    otcVehFleet[id]=newQty;\n  }\n  otcRefreshVehUI();\n}\n\nfunction otcRefreshVehUI(){\n  \/* Update qty badges on cards *\/\n  Object.keys(OTC_VEHICLES).forEach(function(id){\n    var qEl=document.getElementById('qv-'+id);\n    if(qEl)qEl.textContent=(otcVehFleet[id]||1);\n  });\n  var row=document.getElementById('sbVehRow');\n  var hasVeh=otcFleetHasVehicles();\n  if(row)row.style.display=hasVeh?'block':'none';\n  if(hasVeh){\n    \/* Build multi-list in sidebar *\/\n    var listEl=document.getElementById('sbVehMultiList');\n    if(listEl){\n      var html='';\n      Object.keys(otcVehFleet).forEach(function(id){\n        var v=OTC_VEHICLES[id],qty=otcVehFleet[id];\n        html+='<div class=\"otc-sb-veh-multi-row\">'\n          +'<span class=\"otc-sb-veh-multi-icon\">'+v.icon+'<\/span>'\n          +'<span class=\"otc-sb-veh-multi-name\">'+v.name+'<\/span>'\n          +'<span class=\"otc-sb-veh-multi-qty\">\u00d7'+qty+'<\/span>'\n          +'<\/div>';\n      });\n      listEl.innerHTML=html;\n    }\n    var capEl=document.getElementById('sbVehTotalCap');\n    if(capEl){\n      var totalCap=otcFleetTotalCap();\n      capEl.textContent=totalCap+' passagers max';\n    }\n    document.getElementById('sbHeadSub').textContent=otcFleetLabel();\n    \/* chips bar *\/\n    var totalCap=otcFleetTotalCap();\n    var chipsHtml='<div class=\"otc-chip\">'+otcFleetLabel()+'<\/div><div class=\"otc-chip\">Max <strong>'+totalCap+' passagers<\/strong><\/div><div class=\"otc-chip\">Chauffeur \u00b7 Prise en charge &amp; d\u00e9pose incluses<\/div>';\n    document.getElementById('otcChipsBar').innerHTML=chipsHtml;\n    otcRebuildPax(totalCap);\n  } else {\n    document.getElementById('sbHeadSub').textContent='S\u00e9lectionnez votre v\u00e9hicule pour commencer';\n    document.getElementById('otcChipsBar').innerHTML='<div class=\"otc-chip\">Tarif calcul\u00e9 selon le v\u00e9hicule et la dur\u00e9e totale<\/div><div class=\"otc-chip\"><strong>\u2193<\/strong> S\u00e9lectionnez votre v\u00e9hicule ci-dessous<\/div>';\n    otcRebuildPax(8);\n  }\n  otcUpdateStepBadges();\n  otcUpdate();\n}\n\nfunction otcRebuildPax(maxCap){\n  var sel=document.getElementById('inp-adultes'),prev=parseInt(sel.value)||0;\n  sel.innerHTML='<option value=\"\">- S\u00e9lectionnez le total -<\/option>';\n  for(var i=1;i<=maxCap;i++) sel.innerHTML+='<option value=\"'+i+'\"'+(prev===i?' selected':'')+'>'+i+' passager'+(i>1?'s':'')+'<\/option>';\n  ['inp-enf1','inp-enf2','inp-enf3'].forEach(function(eid){\n    var es=document.getElementById(eid),pv=parseInt(es.value)||0;\n    es.innerHTML='';\n    for(var i=0;i<=maxCap;i++) es.innerHTML+='<option value=\"'+i+'\"'+(pv===i?' selected':'')+'>'+i+'<\/option>';\n  });\n  otcCheckPax();\n}\n\nfunction otcCheckPax(){\n  var total=parseInt(document.getElementById('inp-adultes').value)||0;\n  var c1=parseInt(document.getElementById('inp-enf1').value)||0;\n  var c2=parseInt(document.getElementById('inp-enf2').value)||0;\n  var c3=parseInt(document.getElementById('inp-enf3').value)||0;\n  var sum=c1+c2+c3;\n  var warn=document.getElementById('paxWarn');\n  var fleetCap=otcFleetHasVehicles()?otcFleetTotalCap():0;\n  var mismatch=(total>0&&sum!==total)||(total===0&&sum>0);\n  if(fleetCap>0)mismatch=mismatch||(total>fleetCap);\n  if(warn){\n    warn.classList.toggle('show',mismatch);\n    if(total>0&&sum!==total) warn.textContent='\u26a0 Le total ('+sum+') ne correspond pas au nombre de passagers indiqu\u00e9 ('+total+').';\n    else if(fleetCap>0&&total>fleetCap) warn.textContent='\u26a0 '+total+' passagers d\u00e9passent la capacit\u00e9 totale de votre flotte ('+fleetCap+' max).';\n    else warn.textContent='';\n  }\n}\n\nfunction otcGuide(choice){\n  if(choice==='oui'&&!otcStepDone('veh')){otcGuardShow(['veh'],'guide');return;}\n  otcGuideChoice=choice;\n  document.getElementById('guide-oui').classList.toggle('sel',choice==='oui');\n  document.getElementById('guide-non').classList.toggle('sel',choice==='non');\n  var gc=document.getElementById('opt-guide');if(gc)gc.classList.toggle('guide-sel',choice==='oui');\n  otcUpdate();\n}\n\nfunction otcRestaurant(choice){\n  if(choice==='oui'&&!otcStepDone('veh')){otcGuardShow(['veh'],'resto');return;}\n  document.getElementById('rest-oui').classList.toggle('sel',choice==='oui');\n  document.getElementById('rest-non').classList.toggle('sel',choice==='non');\n  var bloc=document.getElementById('rest-dur-bloc');if(bloc)bloc.style.display=(choice==='oui')?'block':'none';\n  var card=document.getElementById('dc-restaurant');if(card)card.classList.toggle('sel',choice==='oui');\n  if(choice==='oui'){\n    if(otcState['restaurant']===undefined){otcState['restaurant']=OTC_DUR[otcDurMap['restaurant']]||90;otcOrder.push('restaurant');}\n  } else {\n    delete otcState['restaurant'];otcOrder=otcOrder.filter(function(x){return x!=='restaurant';});\n  }\n  otcUpdate();\n}\n\nfunction otcSwitchView(view){\n  otcCurrentView=view;\n  document.getElementById('otcBtnList').classList.toggle('active',view==='list');\n  document.getElementById('otcBtnMap').classList.toggle('active',view==='map');\n  document.getElementById('otcListView').style.display=view==='list'?'':'none';\n  document.getElementById('otcMapView').style.display=view==='map'?'':'none';\n  var otcEl=document.querySelector('.otc');if(otcEl)otcEl.classList.toggle('otc-map-active',view==='map');\n  if(view==='map')otcInitMap();\n}\n\nfunction otcToggle(id){\n  if(otcState[id]===undefined){\n    if(!otcStepDone('veh')||!otcStepDone('dep')){otcGuardShow(['veh','dep'],'dest');return;}\n  }\n  var card=document.getElementById('dc-'+id);if(!card)return;\n  if(otcState[id]!==undefined){delete otcState[id];otcOrder=otcOrder.filter(function(x){return x!==id;});card.classList.remove('sel');}\n  else{otcState[id]=OTC_DUR[otcDurMap[id]]||60;otcOrder.push(id);card.classList.add('sel');}\n  otcSyncMapMarkers();otcUpdateStepBadges();\n  var inp=document.getElementById('otc-depart');\n  if(inp&&inp.value.trim().length>2&&Object.keys(otcCache).length===0&&otcGmReady&&!otcMatrixPending){\n    try{otcRunDistanceMatrix();}catch(err){console.warn('[otcRunDistanceMatrix]',err);otcUpdate();}\n  }\n  else {try{otcUpdate();}catch(err){console.error('[otcUpdate]',err);}}\n}\n\nfunction otcDur(e,id,dur){\n  e.stopPropagation();\n  otcDurMap[id]=dur;\n  if(otcState[id]!==undefined)otcState[id]=OTC_DUR[dur]||60;\n  var wrap=document.getElementById('durs-'+id);\n  if(wrap)wrap.querySelectorAll('.otc-dur').forEach(function(b){b.classList.toggle('dsel',b.textContent.trim().split(' ')[0]===dur||b.textContent.trim()===dur||b.getAttribute('data-dur')===dur);});\n  var floatWrap=document.getElementById('floatDurs');\n  if(floatWrap&&otcActiveFloat===id)floatWrap.querySelectorAll('.otc-float-dur').forEach(function(b){b.classList.toggle('dsel',b.getAttribute('data-dur')===dur);});\n  var fc=document.getElementById('otcFloatCard');if(fc&&otcActiveFloat===id)fc.classList.toggle('sel-dest',!!otcState[id]);\n  \/* Ne pas auto-ajouter depuis la float card (vue carte) \u2014 l'utilisateur doit cliquer \"Ajouter \u00e0 mon tour\" *\/\n  if(otcState[id]===undefined){\n    if(otcActiveFloat===id){otcUpdate();return;}\n    otcToggle(id);return;\n  }\n  otcUpdate();\n}\n\nfunction otcPaySel(val){\n  document.querySelectorAll('.otc-pay-opt').forEach(function(o){o.classList.remove('psel');});\n  var el=document.getElementById('pay-'+val);if(el)el.classList.add('psel');\n  var bloc=document.getElementById('otc-acompte-bloc');if(bloc)bloc.style.display=(val==='online')?'block':'none';\n  otcUpdateAcompte();\n}\nfunction otcUpdateAcompte(){\n  var bd=otcCalcBreakdown(),price=otcFleetHasVehicles()&&otcOrder.length>0?otcPrice(bd.total,bd):null;\n  var slider=document.getElementById('otc-acompte-slider'),pct=slider?parseInt(slider.value):30;\n  var pctEl=document.getElementById('otc-acompte-pct'),montantEl=document.getElementById('otc-acompte-montant');\n  if(pctEl)pctEl.textContent=pct+'%';\n  if(montantEl)montantEl.textContent=price?Math.round(price*pct\/100)+' \u20ac':'\u2014 \u20ac';\n}\n\nfunction otcFromDep(id){var k='dep|'+id;return otcCache[k]!==undefined?otcCache[k]:(OTC_FROM_NICE[id]||30);}\nfunction otcToDep(id){var k=id+'|dep';return otcCache[k]!==undefined?otcCache[k]:(OTC_FROM_NICE[id]||30);}\nfunction otcToDropoff(id){var k=id+'|drop';return otcDropCache[k]!==undefined?otcDropCache[k]:otcToDep(id);}\nfunction otcDropDistFromBase(){return otcHaversineKm(OTC_BASE_LAT,OTC_BASE_LNG,otcDropLat,otcDropLng);}\n\n\/* -- TOGGLE D\u00c9POSE DISTINCTE -- *\/\nfunction otcToggleDropoff(){\n  var cb=document.getElementById('otc-drop-diff');\n  var box=document.getElementById('otc-drop-box');\n  var tick=document.getElementById('otc-drop-tick');\n  var lbl=document.getElementById('otc-drop-lbl');\n  otcDropDifferent=cb&&cb.checked;\n  if(box)box.style.background=otcDropDifferent?'#D4AF37':'#fff';\n  if(tick)tick.style.display=otcDropDifferent?'inline':'none';\n  var wrap=document.getElementById('otc-dropoff-wrap');\n  if(wrap)wrap.style.display=otcDropDifferent?'block':'none';\n  if(!otcDropDifferent){otcDropCache={};otcDropReturnMins=0;otcDropMatrixDone=false;}\n  otcUpdate();\n}\n\n\/* Clic sur le label custom (case \u00e0 cocher visuelle) *\/\ndocument.addEventListener('DOMContentLoaded',function(){\n  var lbl=document.getElementById('otc-drop-lbl');\n  if(lbl)lbl.addEventListener('click',function(){\n    var cb=document.getElementById('otc-drop-diff');\n    if(cb){cb.checked=!cb.checked;otcToggleDropoff();}\n  });\n});\n\n\/* -- DISTANCE MATRIX POUR LA D\u00c9POSE -- *\/\nfunction otcRunDropoffMatrix(){\n  if(!window.google||!window.google.maps||!window.google.maps.DistanceMatrixService){\n    try{otcUpdate();}catch(e){}return;\n  }\n  var svc=new google.maps.DistanceMatrixService();\n  var drop=new google.maps.LatLng(otcDropLat,otcDropLng);\n  var base=new google.maps.LatLng(OTC_BASE_LAT,OTC_BASE_LNG);\n  var done=0,total=1;\n  var allIds=Object.keys(OTC_COORDS);\n  var BATCH=25,batches=[];\n  for(var i=0;i<allIds.length;i+=BATCH)batches.push(allIds.slice(i,i+BATCH));\n  total+=batches.length;\n  function check(){if(++done>=total){otcDropMatrixDone=true;try{otcUpdate();}catch(e){}}}\n  \/* D\u00e9pose \u2192 Base *\/\n  svc.getDistanceMatrix({origins:[drop],destinations:[base],travelMode:'DRIVING'},function(r,s){\n    if(s==='OK'&&r&&r.rows&&r.rows[0]&&r.rows[0].elements[0]&&r.rows[0].elements[0].status==='OK'){\n      otcDropReturnMins=Math.round(r.rows[0].elements[0].duration.value\/60);\n    } else {\n      var km=otcDropDistFromBase();\n      otcDropReturnMins=Math.max(5,Math.round((km*1.4\/40)*60));\n    }\n    check();\n  });\n  \/* Destinations \u2192 D\u00e9pose *\/\n  batches.forEach(function(batch){\n    var lls=batch.map(function(id){return new google.maps.LatLng(OTC_COORDS[id].lat,OTC_COORDS[id].lng);});\n    try{\n      svc.getDistanceMatrix({origins:lls,destinations:[drop],travelMode:'DRIVING'},function(r2,s2){\n        if(s2==='OK'&&r2&&r2.rows){\n          r2.rows.forEach(function(row,j){\n            if(row.elements[0]&&row.elements[0].status==='OK')\n              otcDropCache[batch[j]+'|drop']=Math.round(row.elements[0].duration.value\/60);\n          });\n        }\n        check();\n      });\n    }catch(err){console.warn('[DM dropoff]',err);check();}\n  });\n}\n\n\/* -- INIT AUTOCOMPLETE D\u00c9POSE -- *\/\nfunction otcInitDropoffAutocomplete(){\n  var inp=document.getElementById('otc-dropoff');\n  if(!inp||!window.google||!window.google.maps||!window.google.maps.places)return;\n  var ac=new google.maps.places.Autocomplete(inp,{fields:['geometry','name'],types:['establishment','geocode']});\n  ac.addListener('place_changed',function(){\n    var p=ac.getPlace();if(!p||!p.geometry)return;\n    otcDropLat=p.geometry.location.lat();\n    otcDropLng=p.geometry.location.lng();\n    otcDropCache={};otcDropReturnMins=0;otcDropMatrixDone=false;\n    inp.style.borderColor='#3E7A58';inp.style.borderWidth='2px';\n    setTimeout(function(){inp.style.borderColor='';inp.style.borderWidth='';},2000);\n    otcRunDropoffMatrix();\n  });\n}\nvar OTC_TRANSIT_VIGNOBLES = {\n  'bellet|cremat':12,\n  'bellet|saintvincent':12,\n  'bellet|lasource':12,\n  'bellet|vinceline':12,\n  'bellet|rasse':12,\n  'bellet|hautecollines':12,\n  'bellet|saintmartin':75,\n  'bellet|dott':75,\n  'bellet|sainteRoseline':75,\n  'bellet|roubine':80,\n  'bellet|berne':80,\n  'bellet|fontdubroc':90,\n  'bellet|peyrassol':95,\n  'bellet|minuty':85,\n  'bellet|margui':100,\n  'bellet|malherbe':105,\n  'bellet|vignelaure':125,\n  'bellet|pibarnon':145,\n  'bellet|tempier':145,\n  'bellet|terredemistral':135,\n  'bellet|lacoste':150,\n  'bellet|duseuil':150,\n  'cremat|bellet':12,\n  'cremat|saintvincent':12,\n  'cremat|lasource':12,\n  'cremat|vinceline':12,\n  'cremat|rasse':12,\n  'cremat|hautecollines':12,\n  'cremat|saintmartin':70,\n  'cremat|dott':70,\n  'cremat|sainteRoseline':75,\n  'cremat|roubine':80,\n  'cremat|berne':80,\n  'cremat|fontdubroc':90,\n  'cremat|peyrassol':95,\n  'cremat|minuty':85,\n  'cremat|margui':100,\n  'cremat|malherbe':105,\n  'cremat|vignelaure':125,\n  'cremat|pibarnon':145,\n  'cremat|tempier':145,\n  'cremat|terredemistral':135,\n  'cremat|lacoste':150,\n  'cremat|duseuil':150,\n  'saintvincent|bellet':12,\n  'saintvincent|cremat':12,\n  'saintvincent|lasource':12,\n  'saintvincent|vinceline':12,\n  'saintvincent|rasse':12,\n  'saintvincent|hautecollines':12,\n  'saintvincent|saintmartin':75,\n  'saintvincent|dott':75,\n  'saintvincent|sainteRoseline':75,\n  'saintvincent|roubine':80,\n  'saintvincent|berne':80,\n  'saintvincent|fontdubroc':90,\n  'saintvincent|peyrassol':100,\n  'saintvincent|minuty':85,\n  'saintvincent|margui':105,\n  'saintvincent|malherbe':105,\n  'saintvincent|vignelaure':125,\n  'saintvincent|pibarnon':145,\n  'saintvincent|tempier':145,\n  'saintvincent|terredemistral':135,\n  'saintvincent|lacoste':150,\n  'saintvincent|duseuil':155,\n  'lasource|bellet':12,\n  'lasource|cremat':12,\n  'lasource|saintvincent':12,\n  'lasource|vinceline':12,\n  'lasource|rasse':12,\n  'lasource|hautecollines':12,\n  'lasource|saintmartin':70,\n  'lasource|dott':70,\n  'lasource|sainteRoseline':70,\n  'lasource|roubine':75,\n  'lasource|berne':80,\n  'lasource|fontdubroc':85,\n  'lasource|peyrassol':95,\n  'lasource|minuty':80,\n  'lasource|margui':100,\n  'lasource|malherbe':105,\n  'lasource|vignelaure':125,\n  'lasource|pibarnon':145,\n  'lasource|tempier':145,\n  'lasource|terredemistral':130,\n  'lasource|lacoste':150,\n  'lasource|duseuil':150,\n  'vinceline|bellet':12,\n  'vinceline|cremat':12,\n  'vinceline|saintvincent':12,\n  'vinceline|lasource':12,\n  'vinceline|rasse':12,\n  'vinceline|hautecollines':12,\n  'vinceline|saintmartin':70,\n  'vinceline|dott':70,\n  'vinceline|sainteRoseline':70,\n  'vinceline|roubine':75,\n  'vinceline|berne':75,\n  'vinceline|fontdubroc':85,\n  'vinceline|peyrassol':95,\n  'vinceline|minuty':80,\n  'vinceline|margui':100,\n  'vinceline|malherbe':100,\n  'vinceline|vignelaure':120,\n  'vinceline|pibarnon':140,\n  'vinceline|tempier':145,\n  'vinceline|terredemistral':130,\n  'vinceline|lacoste':150,\n  'vinceline|duseuil':150,\n  'rasse|bellet':12,\n  'rasse|cremat':12,\n  'rasse|saintvincent':12,\n  'rasse|lasource':12,\n  'rasse|vinceline':12,\n  'rasse|hautecollines':12,\n  'rasse|saintmartin':75,\n  'rasse|dott':75,\n  'rasse|sainteRoseline':75,\n  'rasse|roubine':80,\n  'rasse|berne':80,\n  'rasse|fontdubroc':90,\n  'rasse|peyrassol':100,\n  'rasse|minuty':85,\n  'rasse|margui':105,\n  'rasse|malherbe':105,\n  'rasse|vignelaure':125,\n  'rasse|pibarnon':145,\n  'rasse|tempier':145,\n  'rasse|terredemistral':135,\n  'rasse|lacoste':150,\n  'rasse|duseuil':150,\n  'hautecollines|bellet':12,\n  'hautecollines|cremat':12,\n  'hautecollines|saintvincent':12,\n  'hautecollines|lasource':12,\n  'hautecollines|vinceline':12,\n  'hautecollines|rasse':12,\n  'hautecollines|saintmartin':75,\n  'hautecollines|dott':75,\n  'hautecollines|sainteRoseline':75,\n  'hautecollines|roubine':80,\n  'hautecollines|berne':80,\n  'hautecollines|fontdubroc':90,\n  'hautecollines|peyrassol':100,\n  'hautecollines|minuty':85,\n  'hautecollines|margui':105,\n  'hautecollines|malherbe':105,\n  'hautecollines|vignelaure':125,\n  'hautecollines|pibarnon':145,\n  'hautecollines|tempier':145,\n  'hautecollines|terredemistral':135,\n  'hautecollines|lacoste':150,\n  'hautecollines|duseuil':150,\n  'saintmartin|bellet':75,\n  'saintmartin|cremat':70,\n  'saintmartin|saintvincent':75,\n  'saintmartin|lasource':70,\n  'saintmartin|vinceline':70,\n  'saintmartin|rasse':75,\n  'saintmartin|hautecollines':75,\n  'saintmartin|dott':12,\n  'saintmartin|sainteRoseline':12,\n  'saintmartin|roubine':15,\n  'saintmartin|berne':20,\n  'saintmartin|fontdubroc':25,\n  'saintmartin|peyrassol':30,\n  'saintmartin|minuty':35,\n  'saintmartin|margui':40,\n  'saintmartin|malherbe':45,\n  'saintmartin|vignelaure':70,\n  'saintmartin|pibarnon':80,\n  'saintmartin|tempier':80,\n  'saintmartin|terredemistral':75,\n  'saintmartin|lacoste':95,\n  'saintmartin|duseuil':90,\n  'dott|bellet':75,\n  'dott|cremat':70,\n  'dott|saintvincent':75,\n  'dott|lasource':70,\n  'dott|vinceline':70,\n  'dott|rasse':75,\n  'dott|hautecollines':75,\n  'dott|saintmartin':12,\n  'dott|sainteRoseline':12,\n  'dott|roubine':15,\n  'dott|berne':20,\n  'dott|fontdubroc':25,\n  'dott|peyrassol':30,\n  'dott|minuty':35,\n  'dott|margui':40,\n  'dott|malherbe':45,\n  'dott|vignelaure':70,\n  'dott|pibarnon':80,\n  'dott|tempier':80,\n  'dott|terredemistral':75,\n  'dott|lacoste':95,\n  'dott|duseuil':90,\n  'sainteRoseline|bellet':75,\n  'sainteRoseline|cremat':75,\n  'sainteRoseline|saintvincent':75,\n  'sainteRoseline|lasource':70,\n  'sainteRoseline|vinceline':70,\n  'sainteRoseline|rasse':75,\n  'sainteRoseline|hautecollines':75,\n  'sainteRoseline|saintmartin':12,\n  'sainteRoseline|dott':12,\n  'sainteRoseline|roubine':15,\n  'sainteRoseline|berne':20,\n  'sainteRoseline|fontdubroc':25,\n  'sainteRoseline|peyrassol':30,\n  'sainteRoseline|minuty':35,\n  'sainteRoseline|margui':40,\n  'sainteRoseline|malherbe':45,\n  'sainteRoseline|vignelaure':70,\n  'sainteRoseline|pibarnon':80,\n  'sainteRoseline|tempier':80,\n  'sainteRoseline|terredemistral':75,\n  'sainteRoseline|lacoste':95,\n  'sainteRoseline|duseuil':90,\n  'roubine|bellet':80,\n  'roubine|cremat':80,\n  'roubine|saintvincent':80,\n  'roubine|lasource':75,\n  'roubine|vinceline':75,\n  'roubine|rasse':80,\n  'roubine|hautecollines':80,\n  'roubine|saintmartin':15,\n  'roubine|dott':15,\n  'roubine|sainteRoseline':15,\n  'roubine|berne':12,\n  'roubine|fontdubroc':20,\n  'roubine|peyrassol':30,\n  'roubine|minuty':40,\n  'roubine|margui':35,\n  'roubine|malherbe':50,\n  'roubine|vignelaure':60,\n  'roubine|pibarnon':75,\n  'roubine|tempier':75,\n  'roubine|terredemistral':65,\n  'roubine|lacoste':85,\n  'roubine|duseuil':85,\n  'berne|bellet':80,\n  'berne|cremat':80,\n  'berne|saintvincent':80,\n  'berne|lasource':80,\n  'berne|vinceline':75,\n  'berne|rasse':80,\n  'berne|hautecollines':80,\n  'berne|saintmartin':20,\n  'berne|dott':20,\n  'berne|sainteRoseline':20,\n  'berne|roubine':12,\n  'berne|fontdubroc':25,\n  'berne|peyrassol':30,\n  'berne|minuty':45,\n  'berne|margui':30,\n  'berne|malherbe':50,\n  'berne|vignelaure':60,\n  'berne|pibarnon':75,\n  'berne|tempier':75,\n  'berne|terredemistral':65,\n  'berne|lacoste':85,\n  'berne|duseuil':80,\n  'fontdubroc|bellet':90,\n  'fontdubroc|cremat':90,\n  'fontdubroc|saintvincent':90,\n  'fontdubroc|lasource':85,\n  'fontdubroc|vinceline':85,\n  'fontdubroc|rasse':90,\n  'fontdubroc|hautecollines':90,\n  'fontdubroc|saintmartin':25,\n  'fontdubroc|dott':25,\n  'fontdubroc|sainteRoseline':25,\n  'fontdubroc|roubine':20,\n  'fontdubroc|berne':25,\n  'fontdubroc|peyrassol':15,\n  'fontdubroc|minuty':35,\n  'fontdubroc|margui':30,\n  'fontdubroc|malherbe':35,\n  'fontdubroc|vignelaure':60,\n  'fontdubroc|pibarnon':65,\n  'fontdubroc|tempier':65,\n  'fontdubroc|terredemistral':65,\n  'fontdubroc|lacoste':85,\n  'fontdubroc|duseuil':80,\n  'peyrassol|bellet':95,\n  'peyrassol|cremat':95,\n  'peyrassol|saintvincent':100,\n  'peyrassol|lasource':95,\n  'peyrassol|vinceline':95,\n  'peyrassol|rasse':100,\n  'peyrassol|hautecollines':100,\n  'peyrassol|saintmartin':30,\n  'peyrassol|dott':30,\n  'peyrassol|sainteRoseline':30,\n  'peyrassol|roubine':30,\n  'peyrassol|berne':30,\n  'peyrassol|fontdubroc':15,\n  'peyrassol|minuty':40,\n  'peyrassol|margui':25,\n  'peyrassol|malherbe':35,\n  'peyrassol|vignelaure':55,\n  'peyrassol|pibarnon':55,\n  'peyrassol|tempier':55,\n  'peyrassol|terredemistral':55,\n  'peyrassol|lacoste':80,\n  'peyrassol|duseuil':70,\n  'minuty|bellet':85,\n  'minuty|cremat':85,\n  'minuty|saintvincent':85,\n  'minuty|lasource':80,\n  'minuty|vinceline':80,\n  'minuty|rasse':85,\n  'minuty|hautecollines':85,\n  'minuty|saintmartin':35,\n  'minuty|dott':35,\n  'minuty|sainteRoseline':35,\n  'minuty|roubine':40,\n  'minuty|berne':45,\n  'minuty|fontdubroc':35,\n  'minuty|peyrassol':40,\n  'minuty|margui':55,\n  'minuty|malherbe':30,\n  'minuty|vignelaure':85,\n  'minuty|pibarnon':80,\n  'minuty|tempier':80,\n  'minuty|terredemistral':90,\n  'minuty|lacoste':110,\n  'minuty|duseuil':105,\n  'margui|bellet':100,\n  'margui|cremat':100,\n  'margui|saintvincent':105,\n  'margui|lasource':100,\n  'margui|vinceline':100,\n  'margui|rasse':105,\n  'margui|hautecollines':105,\n  'margui|saintmartin':40,\n  'margui|dott':40,\n  'margui|sainteRoseline':40,\n  'margui|roubine':35,\n  'margui|berne':30,\n  'margui|fontdubroc':30,\n  'margui|peyrassol':25,\n  'margui|minuty':55,\n  'margui|malherbe':50,\n  'margui|vignelaure':40,\n  'margui|pibarnon':55,\n  'margui|tempier':55,\n  'margui|terredemistral':40,\n  'margui|lacoste':65,\n  'margui|duseuil':60,\n  'malherbe|bellet':105,\n  'malherbe|cremat':105,\n  'malherbe|saintvincent':105,\n  'malherbe|lasource':105,\n  'malherbe|vinceline':100,\n  'malherbe|rasse':105,\n  'malherbe|hautecollines':105,\n  'malherbe|saintmartin':45,\n  'malherbe|dott':45,\n  'malherbe|sainteRoseline':45,\n  'malherbe|roubine':50,\n  'malherbe|berne':50,\n  'malherbe|fontdubroc':35,\n  'malherbe|peyrassol':35,\n  'malherbe|minuty':30,\n  'malherbe|margui':50,\n  'malherbe|vignelaure':80,\n  'malherbe|pibarnon':60,\n  'malherbe|tempier':60,\n  'malherbe|terredemistral':75,\n  'malherbe|lacoste':100,\n  'malherbe|duseuil':90,\n  'vignelaure|bellet':125,\n  'vignelaure|cremat':125,\n  'vignelaure|saintvincent':125,\n  'vignelaure|lasource':125,\n  'vignelaure|vinceline':120,\n  'vignelaure|rasse':125,\n  'vignelaure|hautecollines':125,\n  'vignelaure|saintmartin':70,\n  'vignelaure|dott':70,\n  'vignelaure|sainteRoseline':70,\n  'vignelaure|roubine':60,\n  'vignelaure|berne':60,\n  'vignelaure|fontdubroc':60,\n  'vignelaure|peyrassol':55,\n  'vignelaure|minuty':85,\n  'vignelaure|margui':40,\n  'vignelaure|malherbe':80,\n  'vignelaure|pibarnon':60,\n  'vignelaure|tempier':60,\n  'vignelaure|terredemistral':20,\n  'vignelaure|lacoste':35,\n  'vignelaure|duseuil':35,\n  'pibarnon|bellet':145,\n  'pibarnon|cremat':145,\n  'pibarnon|saintvincent':145,\n  'pibarnon|lasource':145,\n  'pibarnon|vinceline':140,\n  'pibarnon|rasse':145,\n  'pibarnon|hautecollines':145,\n  'pibarnon|saintmartin':80,\n  'pibarnon|dott':80,\n  'pibarnon|sainteRoseline':80,\n  'pibarnon|roubine':75,\n  'pibarnon|berne':75,\n  'pibarnon|fontdubroc':65,\n  'pibarnon|peyrassol':55,\n  'pibarnon|minuty':80,\n  'pibarnon|margui':55,\n  'pibarnon|malherbe':60,\n  'pibarnon|vignelaure':60,\n  'pibarnon|tempier':12,\n  'pibarnon|terredemistral':45,\n  'pibarnon|lacoste':65,\n  'pibarnon|duseuil':50,\n  'tempier|bellet':145,\n  'tempier|cremat':145,\n  'tempier|saintvincent':145,\n  'tempier|lasource':145,\n  'tempier|vinceline':145,\n  'tempier|rasse':145,\n  'tempier|hautecollines':145,\n  'tempier|saintmartin':80,\n  'tempier|dott':80,\n  'tempier|sainteRoseline':80,\n  'tempier|roubine':75,\n  'tempier|berne':75,\n  'tempier|fontdubroc':65,\n  'tempier|peyrassol':55,\n  'tempier|minuty':80,\n  'tempier|margui':55,\n  'tempier|malherbe':60,\n  'tempier|vignelaure':60,\n  'tempier|pibarnon':12,\n  'tempier|terredemistral':50,\n  'tempier|lacoste':70,\n  'tempier|duseuil':55,\n  'terredemistral|bellet':135,\n  'terredemistral|cremat':135,\n  'terredemistral|saintvincent':135,\n  'terredemistral|lasource':130,\n  'terredemistral|vinceline':130,\n  'terredemistral|rasse':135,\n  'terredemistral|hautecollines':135,\n  'terredemistral|saintmartin':75,\n  'terredemistral|dott':75,\n  'terredemistral|sainteRoseline':75,\n  'terredemistral|roubine':65,\n  'terredemistral|berne':65,\n  'terredemistral|fontdubroc':65,\n  'terredemistral|peyrassol':55,\n  'terredemistral|minuty':90,\n  'terredemistral|margui':40,\n  'terredemistral|malherbe':75,\n  'terredemistral|vignelaure':20,\n  'terredemistral|pibarnon':45,\n  'terredemistral|tempier':50,\n  'terredemistral|lacoste':30,\n  'terredemistral|duseuil':25,\n  'lacoste|bellet':150,\n  'lacoste|cremat':150,\n  'lacoste|saintvincent':150,\n  'lacoste|lasource':150,\n  'lacoste|vinceline':150,\n  'lacoste|rasse':150,\n  'lacoste|hautecollines':150,\n  'lacoste|saintmartin':95,\n  'lacoste|dott':95,\n  'lacoste|sainteRoseline':95,\n  'lacoste|roubine':85,\n  'lacoste|berne':85,\n  'lacoste|fontdubroc':85,\n  'lacoste|peyrassol':80,\n  'lacoste|minuty':110,\n  'lacoste|margui':65,\n  'lacoste|malherbe':100,\n  'lacoste|vignelaure':35,\n  'lacoste|pibarnon':65,\n  'lacoste|tempier':70,\n  'lacoste|terredemistral':30,\n  'lacoste|duseuil':25,\n  'duseuil|bellet':150,\n  'duseuil|cremat':150,\n  'duseuil|saintvincent':155,\n  'duseuil|lasource':150,\n  'duseuil|vinceline':150,\n  'duseuil|rasse':150,\n  'duseuil|hautecollines':150,\n  'duseuil|saintmartin':90,\n  'duseuil|dott':90,\n  'duseuil|sainteRoseline':90,\n  'duseuil|roubine':85,\n  'duseuil|berne':80,\n  'duseuil|fontdubroc':80,\n  'duseuil|peyrassol':70,\n  'duseuil|minuty':105,\n  'duseuil|margui':60,\n  'duseuil|malherbe':90,\n  'duseuil|vignelaure':35,\n  'duseuil|pibarnon':50,\n  'duseuil|tempier':55,\n  'duseuil|terredemistral':25,\n  'duseuil|lacoste':25\n};\n\n\/* Haversine fallback \u2014 jamais 30 fixe *\/\nfunction otcHaversineMins(a, b){\n  var ca=OTC_COORDS[a], cb=OTC_COORDS[b];\n  if(!ca||!cb)return 45;\n  var R=6371, toRad=Math.PI\/180;\n  var dLat=(cb.lat-ca.lat)*toRad, dLng=(cb.lng-ca.lng)*toRad;\n  var sa=Math.sin(dLat\/2)*Math.sin(dLat\/2)+Math.cos(ca.lat*toRad)*Math.cos(cb.lat*toRad)*Math.sin(dLng\/2)*Math.sin(dLng\/2);\n  var km=R*2*Math.atan2(Math.sqrt(sa),Math.sqrt(1-sa));\n  return Math.max(12, Math.round(((km*1.35\/80)*60+8)\/5)*5);\n}\n\nfunction otcBetween(a,b){\n  if(a==='restaurant'||b==='restaurant')return 0;\n  var k=a+'|'+b;\n  \/* 1. Google Maps Distance Matrix (most accurate) *\/\n  if(otcCache[k]!==undefined)return otcCache[k];\n  \/* 2. Classic destination transit table *\/\n  if(OTC_TRANSIT[a]&&OTC_TRANSIT[a][b]!==undefined)return OTC_TRANSIT[a][b];\n  \/* 3. Pre-calculated vineyard transit table *\/\n  if(OTC_TRANSIT_VIGNOBLES[k]!==undefined)return OTC_TRANSIT_VIGNOBLES[k];\n  \/* 4. Manual overrides (wine extra) \u2014 defensive check *\/\n  if(typeof OTC_TRANSIT_WINE_EXTRA!=='undefined'&&OTC_TRANSIT_WINE_EXTRA[k]!==undefined)return OTC_TRANSIT_WINE_EXTRA[k];\n  \/* 5. Haversine fallback \u2014 never a fixed 30 *\/\n  return otcHaversineMins(a,b);\n}\nfunction otcCalcBreakdown(){\n  if(otcOrder.length===0)return{total:0,visitMins:0,transitMins:0,approachMins:0,approachSurcharge:0};\n  var visitMins=0,transitMins=0;\n  var geoOrder=otcOrder.filter(function(x){return x!=='restaurant';});\n  var hasRestaurant=otcOrder.indexOf('restaurant')>=0;\n  \/* Base \u2192 Lieu de prise en charge :\n     - \u2264 15 km : pas de suppl\u00e9ment\n     - 15 < km \u2264 40 : suppl\u00e9ment fixe 20 \u20ac\n     - > 40 km : dur\u00e9e du trajet ajout\u00e9e au temps facturable *\/\n  var depDist=otcDepDistFromBase();\n  var approachMins=0,approachSurcharge=0;\n  if(depDist>40){approachMins=otcApproachMins;}\n  else if(depDist>15){approachSurcharge=20;}\n  \/* Trajet prise en charge \u2192 destinations *\/\n  if(geoOrder.length>0)transitMins+=otcFromDep(geoOrder[0]);\n  for(var i=0;i<geoOrder.length;i++){\n    visitMins+=otcState[geoOrder[i]]||60;\n    if(i<geoOrder.length-1)transitMins+=otcBetween(geoOrder[i],geoOrder[i+1]);\n  }\n  \/* Trajet derni\u00e8re destination \u2192 lieu de d\u00e9pose *\/\n  var dropReturnSurcharge=0,returnBaseMins=0;\n  if(geoOrder.length>0){\n    if(otcDropDifferent){\n      \/* Dernier stop \u2192 lieu de d\u00e9pose *\/\n      transitMins+=otcToDropoff(geoOrder[geoOrder.length-1]);\n      \/* D\u00e9pose \u2192 Base : si >40km facturable, si 15-40km suppl\u00e9ment fixe *\/\n      var dropDist=otcDropDistFromBase();\n      if(dropDist>40){returnBaseMins=otcDropReturnMins;transitMins+=returnBaseMins;}\n      else if(dropDist>15){dropReturnSurcharge=20;}\n    } else {\n      transitMins+=otcToDep(geoOrder[geoOrder.length-1]);\n    }\n  }\n  if(hasRestaurant)visitMins+=otcState['restaurant']||90;\n  \/* Pas de suppl\u00e9ment Retour \u2192 Base *\/\n  var total=visitMins+transitMins+approachMins;\n  return{total:total,visitMins:visitMins,transitMins:transitMins,approachMins:approachMins,approachSurcharge:approachSurcharge,dropReturnSurcharge:dropReturnSurcharge,returnBaseMins:returnBaseMins};\n}\nfunction otcMins(m){var h=Math.floor(m\/60),mn=m%60;return h+'h'+(mn===0?'00':(mn<10?'0':'')+mn);}\n\nfunction otcBasePrice(totalMins,bd){\n  if(!otcFleetHasVehicles())return null;\n  var rate=otcFleetTotalRate();\n  var billableH=Math.ceil((totalMins\/60)*2)\/2;\n  if(billableH<4)billableH=4;\n  var surcharge=(bd&&bd.approachSurcharge)?bd.approachSurcharge:0;\n  if(bd&&bd.dropReturnSurcharge)surcharge+=bd.dropReturnSurcharge;\n  return Math.round(billableH*rate)+surcharge;\n}\nfunction otcPrice(totalMins,bd){\n  var base=otcBasePrice(totalMins,bd);if(base===null)return null;\n  return otcPromoDiscount>0?Math.round(base*(1-otcPromoDiscount)):base;\n}\n\nfunction otcUpdate(){\n  var bd=otcCalcBreakdown(),total=bd.total,visitMins=bd.visitMins,transitMins=bd.transitMins;\n  var basePrice=otcFleetHasVehicles()&&otcOrder.length>0?otcBasePrice(total,bd):null;\n  var price=basePrice!==null&&otcPromoDiscount>0?Math.round(basePrice*(1-otcPromoDiscount)):basePrice;\n  var sp=document.getElementById('sb-price');\n  if(sp){\n    if(price!==null&&otcPromoDiscount>0&&basePrice!==null){\n      sp.innerHTML='<span style=\"text-decoration:line-through;color:#9c9489;font-size:20px;font-family:Lato,sans-serif;font-weight:400;display:block;\">'+basePrice+' \u20ac<\/span>'+price+' \u20ac';\n    } else {sp.textContent=price!==null?price+' \u20ac':'- \u20ac';}\n  }\n  var spu=document.getElementById('sb-price-unit');\n  if(spu){\n    var unitTxt=otcFleetHasVehicles()?'Forfait estim\u00e9 \u00b7 tout compris':'S\u00e9lectionnez un v\u00e9hicule';\n    if(otcPromoDiscount>0)unitTxt='-'+Math.round(otcPromoDiscount*100)+'% appliqu\u00e9 \u00b7 '+unitTxt;\n    spu.textContent=unitTxt;\n  }\n  var spmin=document.getElementById('sb-price-min');\n  if(spmin)spmin.style.display='none';\n  var st=document.getElementById('sb-time');if(st)st.textContent=otcOrder.length>0?otcMins(total):'- h -';\n  var svt=document.getElementById('sb-visit-time');if(svt)svt.innerHTML=otcOrder.length>0?otcMins(visitMins):'-';\n  var stt=document.getElementById('sb-transit-time');if(stt)stt.innerHTML=otcOrder.length>0?otcMins(transitMins):'-';\n  var tip=document.getElementById('sb-tip');\n  if(tip&&otcOrder.length>=2&&total>0){\n    var pct=Math.round(transitMins\/total*100);tip.classList.add('visible');\n    tip.textContent=pct>40?' '+pct+'% de trajet - r\u00e9organisez l\\'ordre pour optimiser.':' '+Math.round(visitMins\/total*100)+'% de votre journ\u00e9e consacr\u00e9s \u00e0 la visite.';\n  } else if(tip){tip.classList.remove('visible');}\n  var sl=document.getElementById('sb-list');\n  if(sl){\n    if(otcOrder.length===0){sl.innerHTML='<div class=\"otc-sb-empty\">S\u00e9lectionnez vos destinations pour composer votre tour.<\/div>';}\n    else{\n      var geoO=otcOrder.filter(function(x){return x!=='restaurant';});\n      var hasR=otcOrder.indexOf('restaurant')>=0;\n      \/* Fixed items: pickup \u2014 with Base approach surcharge\/time if applicable *\/\n      var depDistKm=otcDepDistFromBase();\n      var showApproach=depDistKm>15;\n      var h='';\n      h+='<div class=\"otc-sb-item\"><div class=\"otc-sb-dot\" style=\"background:#3E7A58\"><\/div><div class=\"otc-sb-iname\"> Prise en charge<\/div><div class=\"otc-sb-idur\">Inclus<\/div><\/div>';\n      if(geoO.length>0)h+='<div class=\"otc-sb-transit\"> '+otcMins(otcFromDep(geoO[0]))+' de trajet<\/div>';\n      for(var i=0;i<geoO.length;i++){\n        var id=geoO[i];\n        var dursAvail=OTC_SPECIAL_DURS[id]||['30mn','1h','1h30','2h','2h30','3h','4h','5h'];\n        var curDur=otcDurMap[id]||'1h';\n        \/* Destination item row *\/\n        h+='<div class=\"otc-sb-item\">'\n          +'<div class=\"otc-sb-dot\"><\/div>'\n          +'<div class=\"otc-sb-iname\" title=\"'+OTC_NAMES[id]+'\">'+OTC_NAMES[id]+'<\/div>'\n          +'<div class=\"otc-sb-idur\">'+otcMins(otcState[id])+'<\/div>'\n          +'<div class=\"otc-sb-actions\">'\n            +'<button class=\"otc-sb-btn otc-sb-btn-up'+(i===0?' hidden':'')+'\" title=\"Monter\" onclick=\"otcSbMoveUp(\\''+id+'\\')\" aria-label=\"Monter\">\u25b2<\/button>'\n            +'<button class=\"otc-sb-btn otc-sb-btn-down'+(i===geoO.length-1?' hidden':'')+'\" title=\"Descendre\" onclick=\"otcSbMoveDown(\\''+id+'\\')\" aria-label=\"Descendre\">\u25bc<\/button>'\n            +'<button class=\"otc-sb-btn otc-sb-btn-edit\" title=\"Modifier la dur\u00e9e\" onclick=\"otcSbToggleEdit(\\''+id+'\\')\" aria-label=\"Modifier\">\u270e<\/button>'\n            +'<button class=\"otc-sb-btn otc-sb-btn-del\" title=\"Supprimer\" onclick=\"otcSbRemove(\\''+id+'\\')\" aria-label=\"Supprimer\">\u2715<\/button>'\n          +'<\/div>'\n        +'<\/div>';\n        \/* Inline edit panel *\/\n        h+='<div class=\"otc-sb-edit-panel\" id=\"sbep-'+id+'\">'\n          +'<span class=\"otc-sb-edit-lbl\">Dur\u00e9e de visite<\/span>'\n          +'<div class=\"otc-sb-edit-durs\">';\n        for(var j=0;j<dursAvail.length;j++){\n          var dv=dursAvail[j];\n          var val=(typeof dv==='string')?dv:dv.val;\n          var lbl=(typeof dv==='string')?dv:dv.val;\n          var isSel=(val===curDur)?' sel':'';\n          h+='<button class=\"otc-sb-edit-dur'+isSel+'\" onclick=\"otcSbSetDur(\\''+id+'\\',\\''+val+'\\')\">'+lbl+'<\/button>';\n        }\n        h+='<\/div><\/div>';\n        if(i<geoO.length-1)h+='<div class=\"otc-sb-transit\"> '+otcMins(otcBetween(geoO[i],geoO[i+1]))+' de trajet<\/div>';\n      }\n      if(geoO.length>0){\n        if(otcDropDifferent){\n          h+='<div class=\"otc-sb-transit\"> '+otcMins(otcToDropoff(geoO[geoO.length-1]))+' vers d\u00e9pose<\/div>';\n        } else {\n          h+='<div class=\"otc-sb-transit\"> '+otcMins(otcToDep(geoO[geoO.length-1]))+' retour<\/div>';\n        }\n      }\n      \/* Restaurant item *\/\n      if(hasR){\n        var rDursAvail=['30mn','1h','1h30','2h','2h30'];\n        var rCurDur=otcDurMap['restaurant']||'1h30';\n        h+='<div class=\"otc-sb-item\">'\n          +'<div class=\"otc-sb-dot\" style=\"background:#c0392b\"><\/div>'\n          +'<div class=\"otc-sb-iname\"> Restauration<\/div>'\n          +'<div class=\"otc-sb-idur\">'+otcMins(otcState['restaurant'])+'<\/div>'\n          +'<div class=\"otc-sb-actions\">'\n            +'<button class=\"otc-sb-btn otc-sb-btn-edit\" title=\"Modifier la dur\u00e9e\" onclick=\"otcSbToggleEdit(\\'restaurant\\')\" aria-label=\"Modifier\">\u270e<\/button>'\n            +'<button class=\"otc-sb-btn otc-sb-btn-del\" title=\"Supprimer\" onclick=\"otcRestaurant(\\'non\\')\" aria-label=\"Supprimer\">\u2715<\/button>'\n          +'<\/div>'\n        +'<\/div>';\n        h+='<div class=\"otc-sb-edit-panel\" id=\"sbep-restaurant\">'\n          +'<span class=\"otc-sb-edit-lbl\">Dur\u00e9e de la pause repas<\/span>'\n          +'<div class=\"otc-sb-edit-durs\">';\n        for(var rj=0;rj<rDursAvail.length;rj++){\n          var rv=rDursAvail[rj];\n          var risSel=(rv===rCurDur)?' sel':'';\n          h+='<button class=\"otc-sb-edit-dur'+risSel+'\" onclick=\"otcSbSetDur(\\'restaurant\\',\\''+rv+'\\')\">'+rv+'<\/button>';\n        }\n        h+='<\/div><\/div>';\n      }\n      if(otcGuideChoice==='oui')h+='<div class=\"otc-sb-item\"><div class=\"otc-sb-dot\" style=\"background:#6b6560\"><\/div><div class=\"otc-sb-iname\"> Guide touristique<\/div><div class=\"otc-sb-idur\">Sur devis<\/div><\/div>';\n      \/* Retour ou depose distincte + heure arrivee estimee *\/\n      var arrivalTxt='';\n      var heureEl=document.getElementById('inp-heure');\n      if(heureEl&&heureEl.value&&total>0){\n        var pts=heureEl.value.split(':');\n        if(pts.length===2){var hh=parseInt(pts[0]),mm=parseInt(pts[1]);\n          if(!isNaN(hh)&&!isNaN(mm)){var arrMins=(hh*60+mm+total)%1440;\n            var ah=Math.floor(arrMins\/60),am=arrMins%60;\n            arrivalTxt='~'+(ah<10?'0':'')+ah+'h'+(am<10?'0':'')+am;}}\n      }\n      if(otcDropDifferent){\n        var dropAddr=(document.getElementById('otc-dropoff')||{}).value||'Lieu de depose';\n        h+='<div class=\"otc-sb-item\"><div class=\"otc-sb-dot\" style=\"background:#3E7A58\"><\/div><div class=\"otc-sb-iname\"> Depose \u2014 '+dropAddr+'<\/div><div class=\"otc-sb-idur\">'+(arrivalTxt||'Inclus')+'<\/div><\/div>';\n      } else {\n        h+='<div class=\"otc-sb-item\"><div class=\"otc-sb-dot\" style=\"background:#3E7A58\"><\/div><div class=\"otc-sb-iname\"> Retour h\u00e9bergement<\/div><div class=\"otc-sb-idur\">'+(arrivalTxt||'Inclus')+'<\/div><\/div>';\n      }\n      sl.innerHTML=h;\n    }\n  }\n  otcUpdateSticky(total,price);\n  otcUpdateAcompte();\n}\n\n\/* -- SIDEBAR : supprimer \/ deplacer \/ editer duree -------- *\/\nfunction otcSbRemove(id){\n  delete otcState[id];\n  otcOrder=otcOrder.filter(function(x){return x!==id;});\n  var card=document.getElementById('dc-'+id);\n  if(card)card.classList.remove('sel');\n  otcSyncMapMarkers();\n  otcUpdateStepBadges();\n  otcUpdate();\n}\n\nfunction otcSbMoveUp(id){\n  var geoO=otcOrder.filter(function(x){return x!=='restaurant';});\n  var idx=geoO.indexOf(id);\n  if(idx<=0)return;\n  var tmp=geoO[idx-1];geoO[idx-1]=geoO[idx];geoO[idx]=tmp;\n  var hasR=otcOrder.indexOf('restaurant')>=0;\n  otcOrder=hasR?geoO.concat(['restaurant']):geoO.slice();\n  otcUpdate();\n}\n\nfunction otcSbMoveDown(id){\n  var geoO=otcOrder.filter(function(x){return x!=='restaurant';});\n  var idx=geoO.indexOf(id);\n  if(idx<0||idx>=geoO.length-1)return;\n  var tmp=geoO[idx+1];geoO[idx+1]=geoO[idx];geoO[idx]=tmp;\n  var hasR=otcOrder.indexOf('restaurant')>=0;\n  otcOrder=hasR?geoO.concat(['restaurant']):geoO.slice();\n  otcUpdate();\n}\n\nvar _otcSbEditOpen=null;\nfunction otcSbToggleEdit(id){\n  \/* Close previously open panel *\/\n  if(_otcSbEditOpen&&_otcSbEditOpen!==id){\n    var prev=document.getElementById('sbep-'+_otcSbEditOpen);\n    if(prev)prev.classList.remove('open');\n  }\n  var panel=document.getElementById('sbep-'+id);\n  if(!panel)return;\n  var isOpen=panel.classList.contains('open');\n  panel.classList.toggle('open',!isOpen);\n  _otcSbEditOpen=(!isOpen)?id:null;\n}\n\nfunction otcSbSetDur(id,dur){\n  otcDurMap[id]=dur;\n  if(otcState[id]!==undefined)otcState[id]=OTC_DUR[dur]||60;\n  \/* Sync dur buttons on list card too *\/\n  var wrap=document.getElementById('durs-'+id);\n  if(wrap)wrap.querySelectorAll('.otc-dur').forEach(function(b){\n    b.classList.toggle('dsel',b.textContent.trim().split(' ')[0]===dur||b.textContent.trim()===dur||b.getAttribute('data-dur')===dur);\n  });\n  otcUpdate();\n  \/* Keep panel open so user sees the selection \u2014 close after 600ms *\/\n  setTimeout(function(){\n    var panel=document.getElementById('sbep-'+id);\n    if(panel)panel.classList.remove('open');\n    _otcSbEditOpen=null;\n  },600);\n}\n\nfunction otcUpdateSticky(total,price){\n  var bar=document.getElementById('otcSticky');if(!bar)return;\n  if(otcOrder.length===0){bar.classList.remove('show');return;}\n  bar.classList.add('show');\n  document.getElementById('stickyPrice').textContent=price!==null?price:'-';\n  document.getElementById('stickyTime').textContent=otcOrder.length>0?otcMins(total):'-';\n}\n\nfunction otcBadgeIdx(m){var h=m\/60;if(h<=2)return 0;if(h<=5)return 1;if(h<=8)return 2;return 3;}\n\nfunction otcScrollToForm(){\n  var el=document.getElementById('f-nom'),inp=document.getElementById('inp-nom');\n  if(el)el.scrollIntoView({behavior:'smooth',block:'center'});\n  if(inp)setTimeout(function(){inp.focus();},600);\n}\n\nfunction otcScrollToSubmit(){otcScrollToForm();}\n\/* =======================================\n   STEP GUARD SYSTEM\n   ======================================= *\/\nvar OTC_STEPS=[\n  {id:'veh',num:1,icon:'\ud83d\ude97',label:'S\u00e9lectionnez votre v\u00e9hicule',\n   check:function(){return otcFleetHasVehicles();},\n   scroll:function(){var el=document.querySelector('.otc-vehicle-section');if(el)el.scrollIntoView({behavior:'smooth',block:'center'});}},\n  {id:'dep',num:2,icon:'\ud83d\udccd',label:'Saisissez votre adresse de d\u00e9part',\n   check:function(){var i=document.getElementById('otc-depart');return !!(i&&i.value.trim().length>1);},\n   scroll:function(){var el=document.getElementById('otc-depart');if(el){el.scrollIntoView({behavior:'smooth',block:'center'});setTimeout(function(){el.focus();},500);}}},\n  {id:'gui',num:3,icon:'\ud83c\udf99\ufe0f',label:'Choisissez si vous souhaitez un guide (optionnel)',\n   check:function(){return true;},\n   scroll:function(){var el=document.querySelector('.otc-options-section');if(el)el.scrollIntoView({behavior:'smooth',block:'center'});}},\n  {id:'rst',num:4,icon:'\ud83c\udf7d\ufe0f',label:'Indiquez si vous souhaitez une pause repas (optionnel)',\n   check:function(){return true;},\n   scroll:function(){var el=document.querySelector('.otc-options-section');if(el)el.scrollIntoView({behavior:'smooth',block:'center'});}},\n  {id:'dst',num:5,icon:'\ud83d\uddfa\ufe0f',label:'S\u00e9lectionnez au moins une destination',\n   check:function(){return otcOrder.filter(function(x){return x!=='restaurant';}).length>0;},\n   scroll:function(){var el=document.getElementById('otc-grid');if(el)el.scrollIntoView({behavior:'smooth',block:'center'});}},\n  {id:'frm',num:6,icon:'\ud83d\udccb',label:'Renseignez vos informations et mode de paiement',\n   check:function(){return false;},\n   scroll:function(){var el=document.getElementById('f-nom');if(el)el.scrollIntoView({behavior:'smooth',block:'center'});}}\n];\n\nfunction otcStepDone(id){\n  var s=OTC_STEPS.find(function(x){return x.id===id;});\n  return s?s.check():false;\n}\n\nfunction otcGuardShow(requiredSteps,context){\n  var overlay=document.getElementById('otcGuardOverlay');\n  if(!overlay)return;\n  var missing=requiredSteps.filter(function(sid){return !otcStepDone(sid);});\n  if(missing.length===0)return;\n  var titles={\n    dest:'Pour s\u00e9lectionner vos destinations\\u2026',\n    guide:'Pour ajouter un guide touristique\\u2026',\n    resto:'Pour ajouter une pause restauration\\u2026',\n    form:'Pour finaliser votre r\u00e9servation\\u2026'\n  };\n  var subtitles={\n    dest:'Compl\u00e9tez d\\u2019abord ces \u00e9tapes pour composer votre itin\u00e9raire\\u00a0:',\n    guide:'Veuillez d\\u2019abord compl\u00e9ter cette \u00e9tape\\u00a0:',\n    resto:'Veuillez d\\u2019abord compl\u00e9ter cette \u00e9tape\\u00a0:',\n    form:'Compl\u00e9tez d\\u2019abord ces \u00e9tapes pour finaliser votre demande\\u00a0:'\n  };\n  var titleEl=document.getElementById('otcGuardTitle');\n  var subEl=document.getElementById('otcGuardSubtitle');\n  var iconEl=document.getElementById('otcGuardIcon');\n  var stepsEl=document.getElementById('otcGuardSteps');\n  if(titleEl)titleEl.textContent=titles[context]||'Quelques \u00e9tapes avant de continuer';\n  if(subEl)subEl.textContent=subtitles[context]||'';\n  if(iconEl)iconEl.textContent=missing.length===1?'\u261d\ufe0f':'\u270b';\n  if(stepsEl){\n    stepsEl.innerHTML='';\n    requiredSteps.forEach(function(sid){\n      var step=OTC_STEPS.find(function(x){return x.id===sid;});\n      if(!step)return;\n      var done=step.check();\n      var li=document.createElement('li');\n      li.className=done?'done':'';\n      li.innerHTML='<span class=\"otc-gs-num\">'+(done?'\u2713':step.num)+'<\/span>'\n        +'<span style=\"font-size:15px;flex-shrink:0\">'+step.icon+'<\/span>'\n        +'<span>'+step.label+'<\/span>';\n      stepsEl.appendChild(li);\n    });\n  }\n  overlay._firstMissing=OTC_STEPS.find(function(s){return missing.indexOf(s.id)>=0;});\n  overlay.classList.add('show');\n}\n\nfunction otcGuardClose(){\n  var overlay=document.getElementById('otcGuardOverlay');\n  if(!overlay)return;\n  overlay.classList.remove('show');\n  if(overlay._firstMissing&&overlay._firstMissing.scroll){\n    setTimeout(function(){overlay._firstMissing.scroll();},250);\n  }\n}\n\nfunction otcUpdateStepBadges(){\n  var ids=['veh','dep','gui','rst','dst'];\n  ids.forEach(function(sid,i){\n    var el=document.getElementById('snum'+(i+1));\n    if(!el)return;\n    var done=otcStepDone(sid);\n    el.className='otc-step-num'+(done?' done':'');\n  });\n}\n\n\/* =======================================\n   DESTINATION SEARCH\n   ======================================= *\/\nfunction otcSearchDest(q){\n  q=(q||'').trim().toLowerCase();\n  var clearBtn=document.getElementById('otcSearchClear');\n  var noResult=document.getElementById('otcNoResult');\n  if(clearBtn)clearBtn.style.display=q?'block':'none';\n  var cards=document.querySelectorAll('#otc-grid .otc-dcard');\n  var shown=0;\n  cards.forEach(function(card){\n    var id=card.id.replace('dc-','');\n    if(!q){card.style.display='';shown++;return;}\n    var haystack=otcNormalize((OTC_NAMES[id]||'')+' '+(OTC_DESCS[id]||'')+' '+(OTC_REGIONS[id]||''));\n    var match=haystack.indexOf(otcNormalize(q))>=0;\n    card.style.display=match?'':'none';\n    if(match)shown++;\n  });\n  if(noResult)noResult.style.display=(q&&shown===0)?'block':'none';\n}\nfunction otcSearchClear(){\n  var inp=document.getElementById('otcDestSearch');\n  if(inp){inp.value='';otcSearchDest('');}\n}\n\n\/* =======================================\n   FLOAT CARD TOGGLE\n   ======================================= *\/\nfunction otcFloatSyncBtn(){\n  var btn=document.getElementById('floatToggleBtn');\n  if(!btn||!otcActiveFloat)return;\n  var added=otcState[otcActiveFloat]!==undefined;\n  btn.textContent=added?'Retirer la destination':'Ajouter la destination';\n  btn.className='otc-float-toggle-btn'+(added?' is-added':'');\n}\nfunction otcFloatToggle(e){\n  if(e)e.stopPropagation();\n  if(!otcActiveFloat)return;\n  var id=otcActiveFloat;\n  \/* Guard: require steps 1+2 before adding *\/\n  if(otcState[id]===undefined){\n    if(!otcStepDone('veh')||!otcStepDone('dep')){\n      otcGuardShow(['veh','dep'],'dest');return;\n    }\n  }\n  if(otcState[id]!==undefined){\n    delete otcState[id];\n    otcOrder=otcOrder.filter(function(x){return x!==id;});\n    var lc=document.getElementById('dc-'+id);if(lc)lc.classList.remove('sel');\n  } else {\n    otcState[id]=OTC_DUR[otcDurMap[id]]||60;\n    otcOrder.push(id);\n    var lc=document.getElementById('dc-'+id);if(lc)lc.classList.add('sel');\n  }\n  otcSyncMapMarkers();\n  var fc=document.getElementById('otcFloatCard');\n  if(fc)fc.classList.toggle('sel-dest',!!otcState[id]);\n  otcFloatSyncBtn();\n  otcUpdateStepBadges();\n  var inp=document.getElementById('otc-depart');\n  if(inp&&inp.value.trim().length>2&&Object.keys(otcCache).length===0&&otcGmReady&&!otcMatrixPending)otcRunDistanceMatrix();\n  else otcUpdate();\n}\n\n\nfunction otcValidate(){\n  var ok=true;\n  function chk(fid,iid,test){var el=document.getElementById(iid),fld=document.getElementById(fid),v=el?el.value.trim():'',err=!test(v);if(fld)fld.classList.toggle('err',err);if(err)ok=false;}\n  chk('f-nom','inp-nom',function(v){return v.length>0;});\n  chk('f-tel','inp-tel',function(v){return v.length>0;});\n  chk('f-email','inp-email',function(v){return v.indexOf('@')>0;});\n  chk('f-date','inp-date',function(v){return v.length>0;});\n  chk('f-heure','inp-heure',function(v){return v.length>0;});\n  return ok;\n}\n\nfunction otcSetStatus(type,msg){\n  var el=document.getElementById('otc-send-status');if(!el)return;\n  el.style.display='block';\n  var styles={loading:{bg:'rgba(8,61,53,.06)',border:'rgba(8,61,53,.15)',color:'#083D35',icon:'?'},success:{bg:'rgba(62,122,88,.08)',border:'rgba(62,122,88,.3)',color:'#3E7A58',icon:'\u0013'},error:{bg:'rgba(192,57,43,.06)',border:'rgba(192,57,43,.25)',color:'#c0392b',icon:'?'}};\n  var s=styles[type]||styles.error;\n  el.style.background=s.bg;el.style.border='1px solid '+s.border;el.style.color=s.color;\n  el.innerHTML='<strong>'+s.icon+'<\/strong> '+msg;\n}\n\nfunction otcSubmit(){\n  var _miss=[];\n  if(!otcFleetHasVehicles())_miss.push('veh');\n  if(!otcStepDone('dep'))_miss.push('dep');\n  if(!otcStepDone('dst'))_miss.push('dst');\n  if(_miss.length>0){otcGuardShow(_miss,'form');return;}\n  if(!otcValidate()){var f=document.querySelector('.otcf.err');if(f)f.scrollIntoView({behavior:'smooth',block:'center'});return;}\n  var paxWarn=document.getElementById('paxWarn');\n  if(paxWarn&&paxWarn.classList.contains('show')){alert('Veuillez corriger le d\u00e9tail des passagers avant de continuer.');return;}\n  var payEl=document.querySelector('input[name=\"otc-pay\"]:checked'),payMode=payEl?payEl.value:'cash';\n  if(payMode==='online'){\n    var bd=otcCalcBreakdown(),prix=otcPrice(bd.total,bd);\n    if(!prix||prix<=0){alert('Impossible de calculer le montant.');return;}\n    var g=function(id){var e=document.getElementById(id);return e?e.value.trim():'';};\n    var desc='TranspOnyx - '+otcOrder.filter(function(x){return x!=='restaurant';}).map(function(id){return OTC_NAMES[id];}).join(', ').substring(0,80);\n    otcSumupOuvrir(prix,desc,g('inp-email'));\n    return;\n  }\n  otcEnvoyerAccuseReception(payMode);\n}\n\nfunction otcEnvoyerAccuseReception(payMode){\n  var g=function(id){var e=document.getElementById(id);return e?e.value.trim():'';};\n  var bd=otcCalcBreakdown(),total=bd.total,price=otcPrice(total,bd);\n  var veh=otcVeh?OTC_VEHICLES[otcVeh]:{name:otcFleetLabel(),rate:otcFleetTotalRate()};\n  var hasR=otcOrder.indexOf('restaurant')>=0;\n  var geoO=otcOrder.filter(function(x){return x!=='restaurant';});\n  var slider=document.getElementById('otc-acompte-slider'),pct=slider?parseInt(slider.value):30;\n  var acompte=price?Math.round(price*pct\/100):0;\n  var prenom=g('inp-nom').split(' ')[0]||g('inp-nom');\n  var payLbl=payMode==='online'?'Acompte en ligne '+pct+'% = '+acompte+' EUR':payMode==='virement'?'Virement bancaire':'Esp\u00e8ces en fin de service';\n  var promoEl=document.getElementById('inp-promo'),promoCode=promoEl&&otcPromoDiscount>0?promoEl.value.trim().toUpperCase():'Aucun';\n  var itinLines=[];\n  var depDist=otcDepDistFromBase();\n  if(geoO.length>0){\n    itinLines.push('Prise en charge : '+(g('otc-depart')||'?'));\n    if(otcDropDifferent)itinLines.push('Lieu de d\u00e9pose : '+(g('otc-dropoff')||'?'));\n    geoO.forEach(function(id,i){itinLines.push((i+1)+'. '+OTC_NAMES[id]+' - '+otcMins(otcState[id]));});\n  }\n  if(hasR)itinLines.push('Restauration : '+otcMins(otcState['restaurant'])+' (suppl\u00e9ment sur place)');\n  var itinHtml='';\n  if(geoO.length>0){\n    itinHtml+='<p style=\"margin:0 0 8px;color:#3E7A58;font-weight:700;font-size:13px;font-family:Arial,sans-serif;\">Prise en charge : '+(g('otc-depart')||'?')+'<\/p>';\n    if(otcDropDifferent)itinHtml+='<p style=\"margin:0 0 8px;color:#B89A4E;font-size:12px;font-family:Arial,sans-serif;\">\ud83d\udccd D\u00e9pose distincte : <strong>'+(g('otc-dropoff')||'?')+'<\/strong><\/p>';\n    itinHtml+='<p style=\"margin:0 0 8px;color:#9c9489;font-size:11px;font-style:italic;font-family:Arial,sans-serif;\">Trajet : '+otcMins(otcFromDep(geoO[0]))+'<\/p>';\n    geoO.forEach(function(id,i){\n      itinHtml+='<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"margin-bottom:6px;background:#F9F7F2;border-radius:6px;border-left:3px solid #D4AF37;\"><tr><td style=\"padding:9px 13px;font-family:Arial,sans-serif;font-size:13px;font-weight:700;color:#083D35;\">'+OTC_NAMES[id]+'<\/td><td align=\"right\" style=\"padding:9px 13px;white-space:nowrap;\"><span style=\"background:#D4AF37;color:#083D35;font-size:11px;font-weight:700;padding:3px 10px;border-radius:12px;font-family:Arial,sans-serif;\">'+otcMins(otcState[id])+'<\/span><\/td><\/tr><\/table>';\n      if(i<geoO.length-1)itinHtml+='<p style=\"margin:0 0 6px;color:#9c9489;font-size:11px;font-style:italic;font-family:Arial,sans-serif;\">Trajet : '+otcMins(otcBetween(geoO[i],geoO[i+1]))+'<\/p>';\n    });\n    if(otcDropDifferent){\n      itinHtml+='<p style=\"margin:8px 0 0;color:#9c9489;font-size:11px;font-style:italic;font-family:Arial,sans-serif;\">Retour d\u00e9pose : '+otcMins(otcToDropoff(geoO[geoO.length-1]))+'<\/p>';\n    } else {\n      itinHtml+='<p style=\"margin:8px 0 0;color:#9c9489;font-size:11px;font-style:italic;font-family:Arial,sans-serif;\">Retour h\u00e9bergement : '+otcMins(otcToDep(geoO[geoO.length-1]))+'<\/p>';\n    }\n  }\n  if(hasR)itinHtml+='<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"margin-top:8px;background:#FFF9F0;border-radius:6px;border-left:3px solid #c0392b;\"><tr><td style=\"padding:9px 13px;font-family:Arial,sans-serif;font-size:13px;font-weight:700;color:#083D35;\">Restauration<\/td><td align=\"right\" style=\"padding:9px 13px;white-space:nowrap;\"><span style=\"background:#D4AF37;color:#083D35;font-size:11px;font-weight:700;padding:3px 10px;border-radius:12px;font-family:Arial,sans-serif;\">'+otcMins(otcState['restaurant'])+'<\/span><\/td><\/tr><\/table>';\n  var params={to_email:g('inp-email'),to_name:g('inp-nom'),prenom:prenom,telephone:g('inp-tel'),client_email:g('inp-email'),date_prestation:g('inp-date'),heure_depart:g('inp-heure'),adresse_depart:g('otc-depart')||'Non precisee',adresse_depose:otcDropDifferent?(g('otc-dropoff')||'Identique prise en charge'):'Identique prise en charge',vehicule_nom:otcFleetLabel(),vehicule_tarif:otcFleetTotalRate()+' EUR\/h total ('+Object.keys(otcVehFleet).map(function(id){return otcVehFleet[id]+'x '+OTC_VEHICLES[id].name+' '+OTC_VEHICLES[id].rate+'\u20ac\/h';}).join(' + ')+')',nb_passagers:g('inp-adultes')||'0',detail_pax:(g('inp-enf1')||'0')+' a partir 6 ans \/ '+(g('inp-enf2')||'0')+' 18mois-6ans \/ '+(g('inp-enf3')||'0')+' moins 18 mois',guide:otcGuideChoice==='oui'?'Oui - Supplement sur devis':'Non',restaurant_opt:hasR?'Oui - '+otcMins(otcState['restaurant'])+' (supplement sur place)':'Non',paiement:payLbl,itin_texte:itinLines.join('\\n'),itin_html:itinHtml,duree_totale:otcMins(total),prix_total:price?price+' EUR (estimation)':'Sur confirmation',code_promo:promoCode+(otcPromoDiscount>0?' (-'+Math.round(otcPromoDiscount*100)+'%)':''),notes:g('inp-notes')||'Aucune'};\n  var btn=document.getElementById('otcSubmitBtn');\n  if(btn){btn.disabled=true;btn.textContent='Demande envoy\u00e9e \u2713';btn.style.background='#3E7A58';}\n  otcSetStatus('success','\u2713 Votre demande a bien \u00e9t\u00e9 envoy\u00e9e ! Vous recevrez un accus\u00e9 de r\u00e9ception par email. Notre \u00e9quipe vous confirmera la r\u00e9servation sous 24h.');\n  if(!window.emailjs)return;\n  emailjs.send('service_8jnymn2','template_lo8jnxk',params).catch(function(){});\n  emailjs.send('service_8jnymn2','template_zncbz88',params).catch(function(){});\n}\n\n\/* SUMUP *\/\n(function(){var st=document.createElement('style');st.textContent='#sumup-modal{position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.6);opacity:0;transition:opacity .25s;pointer-events:none;}'+'#sumup-modal.visible{opacity:1;pointer-events:all;}'+'#sumup-boite{position:relative;background:#FAFAF7;border-radius:16px;padding:28px 24px 24px;width:92%;max-width:400px;box-shadow:0 24px 60px rgba(0,0,0,.35);transform:translateY(20px);transition:transform .25s;}'+'#sumup-modal.visible #sumup-boite{transform:translateY(0);}'+'#sumup-boite h3{margin:0 0 4px;font-family:\"Playfair Display\",Georgia,serif;font-size:1.1rem;font-weight:400;color:#083D35;}'+'#sumup-montant{font-size:1.8rem;font-weight:700;color:#B89A4E;margin:0 0 16px;}'+'#sumup-fermer{position:absolute;top:14px;right:16px;background:none;border:none;font-size:1.4rem;cursor:pointer;color:#6b6560;padding:0;}';document.head.appendChild(st);})();\nfunction otcSumupCreerModal(){if(document.getElementById('sumup-modal'))return;var m=document.createElement('div');m.id='sumup-modal';m.innerHTML='<div id=\"sumup-boite\"><button id=\"sumup-fermer\" onclick=\"otcSumupFermer()\" title=\"Fermer\">&#x2715;<\/button><h3>&#x1F512; Paiement s\u00e9curis\u00e9<\/h3><div id=\"sumup-montant\"><\/div><div id=\"sumup-widget\"><\/div><\/div>';document.body.appendChild(m);m.addEventListener('click',function(e){if(e.target===m)otcSumupFermer();});}\nfunction otcSumupOuvrir(montant,description,email){var slider=document.getElementById('otc-acompte-slider'),pct=slider?parseInt(slider.value):30;var acompte=Math.round(montant*pct\/100);if(acompte<1)acompte=1;var url='https:\/\/pay.sumup.com\/b2c\/QRS2T41P?amount='+acompte+'&currency=EUR&description='+encodeURIComponent('Acompte '+pct+'% - '+description);otcSumupCreerModal();document.getElementById('sumup-montant').textContent=acompte+' \u20ac (acompte '+pct+'%)';window._otcSumupUrl=url;window._otcSumupMontant=montant;document.getElementById('sumup-widget').innerHTML='<div style=\"text-align:center;padding:10px 0;\"><p style=\"font-size:13px;color:#083D35;margin-bottom:6px;font-family:Lato,sans-serif;line-height:1.6;\">Acompte <strong>'+pct+'%<\/strong> sur un total estim\u00e9 de <strong>'+montant+' \u20ac<\/strong><\/p><p style=\"font-size:11px;color:#6b6560;margin-bottom:16px;font-family:Lato,sans-serif;\">\ud83d\udd12 Visa \u00b7 Mastercard \u00b7 Amex \u2014 Paiement s\u00e9curis\u00e9 SumUp<br>Vous serez redirig\u00e9 vers la page de paiement dans un nouvel onglet.<\/p><button id=\"sumup-pay-btn\" style=\"width:100%;padding:14px;background:linear-gradient(135deg,#062e28,#083D35);color:#fff;border:1px solid rgba(212,175,55,.3);border-radius:9px;font-size:14px;font-weight:700;font-family:Lato,sans-serif;cursor:pointer;letter-spacing:.05em;text-transform:uppercase;margin-bottom:12px;\">\ud83d\udcb3 Payer '+acompte+' \u20ac maintenant<\/button><p style=\"font-size:10px;color:#9c9489;font-family:Lato,sans-serif;line-height:1.5;\">Apr\u00e8s votre paiement, revenez sur cette page.<br>Un accus\u00e9 de r\u00e9ception vous sera envoy\u00e9 par email.<br>La confirmation d\u00e9finitive de votre r\u00e9servation arrivera sous 24h.<\/p><\/div>';setTimeout(function(){var btn=document.getElementById('sumup-pay-btn');if(btn)btn.addEventListener('click',function(){window.open(window._otcSumupUrl,'_blank');otcSumupFermer();otcEnvoyerAccuseReception('online');});},100);document.body.style.overflow='hidden';var modal=document.getElementById('sumup-modal');requestAnimationFrame(function(){requestAnimationFrame(function(){modal.classList.add('visible');});});}\nfunction otcSumupFermer(){var modal=document.getElementById('sumup-modal');if(!modal)return;modal.classList.remove('visible');document.body.style.overflow='';setTimeout(function(){if(modal.parentNode)modal.parentNode.removeChild(modal);},300);}\n\n\/* GOOGLE MAPS *\/\nvar OTC_MAP_STYLE=[{featureType:'all',elementType:'geometry',stylers:[{color:'#e8ede4'}]},{featureType:'water',elementType:'geometry',stylers:[{color:'#b8d4e8'}]},{featureType:'road',elementType:'geometry',stylers:[{color:'#ffffff'}]},{featureType:'road',elementType:'geometry.stroke',stylers:[{color:'#d8d0c4'}]},{featureType:'poi',elementType:'all',stylers:[{visibility:'off'}]},{featureType:'poi.park',elementType:'geometry',stylers:[{visibility:'on'},{color:'#d0e8d0'}]},{featureType:'administrative',elementType:'labels.text.fill',stylers:[{color:'#083D35'}]},{featureType:'road',elementType:'labels.text.fill',stylers:[{color:'#6b6560'}]},{featureType:'landscape',elementType:'geometry',stylers:[{color:'#ede8df'}]},{featureType:'transit',elementType:'all',stylers:[{visibility:'off'}]}];\nfunction otcInitMap(){if(otcMapInstance)return;if(!window.google||!window.google.maps){setTimeout(otcInitMap,300);return;}otcMapInstance=new google.maps.Map(document.getElementById('otc-gmap'),{center:{lat:43.68,lng:7.20},zoom:10,styles:OTC_MAP_STYLE,disableDefaultUI:false,zoomControl:true,mapTypeControl:false,streetViewControl:false,fullscreenControl:true});Object.keys(OTC_COORDS).forEach(function(id){otcCreateMarker(id);});}\nfunction otcMarkerIcon(selected){var fill=selected?'#D4AF37':'#083D35',inner=selected?'#083D35':'#D4AF37';var svg='<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"34\" height=\"44\" viewBox=\"0 0 34 44\"><path d=\"M17 0C7.6 0 0 7.6 0 17c0 11.2 17 27 17 27S34 28.2 34 17C34 7.6 26.4 0 17 0z\" fill=\"'+fill+'\" stroke=\"#ffffff\" stroke-width=\"2.5\"\/><circle cx=\"17\" cy=\"17\" r=\"7\" fill=\"'+inner+'\"\/><\/svg>';return{url:'data:image\/svg+xml;charset=UTF-8,'+encodeURIComponent(svg),scaledSize:new google.maps.Size(34,44),anchor:new google.maps.Point(17,44)};}\nvar _otcMarkerClicked=false;\nfunction otcCreateMarker(id){if(!otcMapInstance||!OTC_COORDS[id])return;var marker=new google.maps.Marker({position:{lat:OTC_COORDS[id].lat,lng:OTC_COORDS[id].lng},map:otcMapInstance,icon:otcMarkerIcon(!!otcState[id]),title:OTC_NAMES[id],optimized:false,cursor:'pointer'});marker.addListener('click',function(){_otcMarkerClicked=true;otcShowFloat(id,marker);setTimeout(function(){_otcMarkerClicked=false;},50);});otcMapMarkers[id]=marker;}\nfunction otcSyncMapMarkers(){Object.keys(otcMapMarkers).forEach(function(id){if(otcMapMarkers[id]&&window.google)otcMapMarkers[id].setIcon(otcMarkerIcon(!!otcState[id]));});}\nfunction otcShowFloat(id,marker){\n  otcActiveFloat=id;\n  var card=document.getElementById('otcFloatCard');\n  var img=document.getElementById('floatImg');img.src=OTC_IMGS[id]||'';img.alt=OTC_NAMES[id];\n  document.getElementById('floatRegion').textContent=OTC_REGIONS[id]||'';\n  document.getElementById('floatName').textContent=OTC_NAMES[id];\n  document.getElementById('floatDesc').textContent=OTC_DESCS[id]||'';\n  var isSpecial=!!OTC_SPECIAL_DURS[id];\n  var dursToShow=OTC_SPECIAL_DURS[id]||['30mn','1h','1h30','2h','2h30','3h','4h','5h'];\n  var selectedDur=otcDurMap[id];\n  var durLbl=document.getElementById('floatDurLbl');if(durLbl)durLbl.textContent=isSpecial?'Choisissez votre formule':'Dur\u00e9e souhait\u00e9e';\n  var floatDurs=document.getElementById('floatDurs');\n  floatDurs.className='otc-float-durs'+(isSpecial?' otc-float-durs-special':'');\n  floatDurs.innerHTML=dursToShow.map(function(d){var lbl=isSpecial?(d==='30mn'?'30mn - Visite gratuite':'2h - Ma\u00eetre parfumeur'):d;return '<button class=\"otc-float-dur'+(d===selectedDur?' dsel':'')+'\" data-dur=\"'+d+'\" onclick=\"otcDur(event,\\''+id+'\\',\\''+d+'\\')\">'+lbl+'<\/button>';}).join('');\n  var fr=document.getElementById('floatReco');if(fr&&OTC_RECO[id])fr.textContent=' Recommand\u00e9 : '+OTC_RECO[id];\n  card.classList.toggle('sel-dest',!!otcState[id]);\n  otcPositionFloat(card,marker);card.classList.add('vis');otcFloatSyncBtn();\n}\nfunction otcPositionFloat(card,marker){if(!otcMapInstance||!window.google)return;var proj=otcMapInstance.getProjection();if(!proj){setTimeout(function(){otcPositionFloat(card,marker);},100);return;}var pos=marker.getPosition(),pt=proj.fromLatLngToPoint(pos);var bounds=otcMapInstance.getBounds();if(!bounds)return;var ne=proj.fromLatLngToPoint(bounds.getNorthEast()),sw=proj.fromLatLngToPoint(bounds.getSouthWest());var scale=Math.pow(2,otcMapInstance.getZoom());var mapDiv=document.getElementById('otc-gmap'),mapW=mapDiv.offsetWidth,mapH=mapDiv.offsetHeight;var worldW=(ne.x-sw.x)*scale,worldH=(sw.y-ne.y)*scale;var px=(pt.x-sw.x)*scale*(mapW\/worldW),py=(pt.y-ne.y)*scale*(mapH\/worldH);var cardW=480,cardH=272,left=px-cardW\/2,top=py-cardH-44;if(left<4)left=4;if(left+cardW>mapW-4)left=mapW-cardW-4;if(top<4)top=4;card.style.left=left+'px';card.style.top=top+'px';}\nfunction otcCloseFloat(e){if(e)e.stopPropagation();document.getElementById('otcFloatCard').classList.remove('vis');otcActiveFloat=null;}\ndocument.addEventListener('click',function(e){if(_otcMarkerClicked)return;var card=document.getElementById('otcFloatCard');if(!card||!card.classList.contains('vis'))return;if(!card.contains(e.target)&&!e.target.closest('.otc-float')){card.classList.remove('vis');otcActiveFloat=null;}});\n\nfunction otcRunDistanceMatrix(){\n  if(otcMatrixPending)return;otcMatrixPending=true;\n  var inp=document.getElementById('otc-depart');if(inp)inp.style.borderColor='#B89A4E';\n  if(!window.google||!window.google.maps||!window.google.maps.DistanceMatrixService){\n    otcMatrixPending=false;otcUpdate();return;\n  }\n  var svc=new google.maps.DistanceMatrixService();\n  var orig=new google.maps.LatLng(otcDepLat,otcDepLng);\n  var base=new google.maps.LatLng(OTC_BASE_LAT,OTC_BASE_LNG);\n  var dep=new google.maps.LatLng(otcDepLat,otcDepLng);\n  var allIds=Object.keys(OTC_COORDS);\n  \/* Batch par lots de 25 (limite Google Distance Matrix: 25 destinations max par requ\u00eate) *\/\n  var BATCH=25,batches=[];\n  for(var i=0;i<allIds.length;i+=BATCH){batches.push(allIds.slice(i,i+BATCH));}\n  var forwardDone=0,reverseDone=0,total=batches.length;\n  var baseDone=false;\n  function finalize(){\n    if(!baseDone)return; \/* wait for base calc too *\/\n    otcMatrixPending=false;\n    if(inp){inp.style.borderColor='#3E7A58';inp.style.borderWidth='2px';}\n    setTimeout(function(){if(inp){inp.style.borderColor='';inp.style.borderWidth='';}},1500);\n    try{otcUpdate();}catch(err){console.error('[otcUpdate after matrix]',err);}\n  }\n  \/* Calcul Base \u2192 Lieu de prise en charge *\/\n  svc.getDistanceMatrix({origins:[base],destinations:[dep],travelMode:'DRIVING'},function(r,s){\n    if(s==='OK'&&r&&r.rows&&r.rows[0]&&r.rows[0].elements[0]&&r.rows[0].elements[0].status==='OK'){\n      otcApproachMins=Math.round(r.rows[0].elements[0].duration.value\/60);\n    } else {\n      \/* Fallback haversine: ~1.4x road factor, 40km\/h avg Nice *\/\n      var km=otcDepDistFromBase();\n      otcApproachMins=Math.max(5,Math.round((km*1.4\/40)*60));\n    }\n    baseDone=true;\n    if(forwardDone===total&&reverseDone===total)finalize();\n  });\n  batches.forEach(function(batch){\n    var lls=batch.map(function(id){return new google.maps.LatLng(OTC_COORDS[id].lat,OTC_COORDS[id].lng);});\n    try{\n      svc.getDistanceMatrix({origins:[orig],destinations:lls,travelMode:'DRIVING'},function(r,s){\n        if(s==='OK'&&r&&r.rows&&r.rows[0]){\n          r.rows[0].elements.forEach(function(el,i){\n            if(el.status==='OK')otcCache['dep|'+batch[i]]=Math.round(el.duration.value\/60);\n          });\n        }\n        forwardDone++;if(forwardDone===total&&reverseDone===total&&baseDone)finalize();\n      });\n      svc.getDistanceMatrix({origins:lls,destinations:[orig],travelMode:'DRIVING'},function(r2,s2){\n        if(s2==='OK'&&r2&&r2.rows){\n          r2.rows.forEach(function(row,i){\n            if(row.elements[0]&&row.elements[0].status==='OK')otcCache[batch[i]+'|dep']=Math.round(row.elements[0].duration.value\/60);\n          });\n        }\n        reverseDone++;if(forwardDone===total&&reverseDone===total&&baseDone)finalize();\n      });\n    }catch(err){console.warn('[DM batch]',err);forwardDone++;reverseDone++;if(forwardDone===total&&reverseDone===total&&baseDone)finalize();}\n  });\n  \/* Safety timeout 15s *\/\n  setTimeout(function(){if(otcMatrixPending){otcMatrixPending=false;try{otcUpdate();}catch(e){}}},15000);\n}\nfunction otcInitAutocomplete(){\n  var inp=document.getElementById('otc-depart');\n  if(!inp||!window.google||!window.google.maps||!window.google.maps.places){setTimeout(otcInitAutocomplete,300);return;}\n  var ac=new google.maps.places.Autocomplete(inp,{fields:['geometry','name'],types:['establishment','geocode']});\n  ac.addListener('place_changed',function(){var p=ac.getPlace();if(!p||!p.geometry)return;otcDepLat=p.geometry.location.lat();otcDepLng=p.geometry.location.lng();otcCache={};inp.style.borderColor='#3E7A58';inp.style.borderWidth='2px';setTimeout(function(){inp.style.borderColor='';inp.style.borderWidth='';},2000);otcRunDistanceMatrix();});\n}\nwindow.otcMapsReady=function(){otcGmReady=true;otcInitAutocomplete();otcInitDropoffAutocomplete();};\nif(window.google&&window.google.maps&&window.google.maps.places){otcGmReady=true;otcInitAutocomplete();otcInitDropoffAutocomplete();}\n\n\n\/* ===================================================\n   OPTION B \u2014 Cards generated from data array\n   =================================================== *\/\nvar OTC_DESTINATIONS=[{\"id\":\"villefranche\",\"name\":\"\u26f5 Villefranche-sur-Mer\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/VILLEFRANCHE-1000-WEBP-e1776368540239.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u2605\",\"score\":\"4.8\",\"km\":\"8 km de Nice\",\"time\":\"15 min de Nice\",\"desc\":\"Baie naturelle \u00b7 Chapelle Cocteau \u00b7 citadelle royale\",\"accroche\":\"Village de p\u00eacheurs embl\u00e9matique, \u00e0 15 min de Nice.\",\"seo\":[\"Rade naturelle parmi les plus belles de M\u00e9diterran\u00e9e \u2014 escale incontournable en circuit Riviera.\",\"Chapelle Saint-Pierre de Cocteau, chef-d'\u0153uvre sur la route Nice\u2013Monaco.\",\"Id\u00e9al en combinaison avec Cap Ferrat et Eze sur la Corniche.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"30mn\",\"reco\":\"30mn\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"capferrat\",\"name\":\"\ud83c\udf34 Saint-Jean-Cap-Ferrat\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/VILLA-EPHRUSSI-CAP-FERRAT-1000-WEBP.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u2605\",\"score\":\"4.9\",\"km\":\"12 km de Nice\",\"time\":\"20 min de Nice\",\"desc\":\"Villas l\u00e9gendaires \u00b7 Villa Ephrussi \u00b7 sentiers c\u00f4tiers\",\"accroche\":\"La presqu'\u00eele la plus luxueuse d'Europe entre deux baies.\",\"seo\":[\"Presqu'\u00eele la plus luxueuse d'Europe \u2014 villas de Chaplin, Cocteau et Rothschild.\",\"Villa Ephrussi : mus\u00e9e et neuf jardins class\u00e9s Monuments Historiques, vue 180\u00b0.\",\"Sentier c\u00f4tier 9 km entre deux baies \u2014 panoramas sur Monaco et la Riviera.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"hautdecagnes\",\"name\":\"\ud83c\udff0 Haut-de-Cagnes\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/HAUT-DE-CAGNE-1000-WEBP-e1776368815238.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.6\",\"km\":\"14 km de Nice\",\"time\":\"20 min de Nice\",\"desc\":\"Village m\u00e9di\u00e9val \u00b7 Ch\u00e2teau Grimaldi \u00b7 ruelles fleuries\",\"accroche\":\"Ch\u00e2teau m\u00e9di\u00e9val dominant la mer, joyau secret \u00e0 deux pas de Nice.\",\"seo\":[\"Ch\u00e2teau Grimaldi XIVe si\u00e8cle, l'un des plus beaux de la Riviera \u2014 panorama sur mer.\",\"Ateliers d'artistes dans les ruelles m\u00e9di\u00e9vales, galeries et potiers depuis les ann\u00e9es 60.\",\"Entre Nice et Antibes, \u00e9tape m\u00e9connue des circuits C\u00f4te d'Azur en priv\u00e9.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"eze\",\"name\":\"\ud83c\udfd4\ufe0f Eze Village & Jardins Exotiques\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/EZE-VILLAGE-WEBP.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.7\",\"km\":\"15 km de Nice\",\"time\":\"28 min de Nice\",\"desc\":\"Village m\u00e9di\u00e9val \u00e0 429m \u00b7 panorama 360\u00b0 \u00b7 jardins exotiques\",\"accroche\":\"Village-nid d'aigle perch\u00e9 avec vue imprenable sur la M\u00e9diterran\u00e9e.\",\"seo\":[\"Village m\u00e9di\u00e9val \u00e0 429 m \u2014 vue 360\u00b0 sur la M\u00e9diterran\u00e9e et l'Italie.\",\"Jardins exotiques : 100+ esp\u00e8ces de cact\u00e9es avec terrasse panoramique.\",\"\u00c9tape centrale du circuit Trois Corniches Nice\u2013Eze\u2013Monaco en priv\u00e9.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"fragonard\",\"name\":\"\ud83c\udf38 Fragonard \u00b7 Eze Village\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/FRAGONARD-WEBP-e1776369219968.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.5\",\"km\":\"16 km de Nice\",\"time\":\"28 min de Nice\",\"desc\":\"Visite gratuite 30mn \u00b7 Cours ma\u00eetre parfumeur 2h\",\"accroche\":\"Secrets du parfum dans un lieu embl\u00e9matique de la Riviera.\",\"seo\":[\"Maison de parfum fond\u00e9e en 1926 \u2014 visite guid\u00e9e gratuite des ateliers.\",\"Cours ma\u00eetre parfumeur 2h : cr\u00e9ez votre propre fragrance en Provence.\",\"Situ\u00e9 \u00e0 Eze sur la Corniche, en route vers Monaco depuis Nice.\"],\"aoc\":null,\"durs\":[{\"val\":\"30mn\",\"label\":\"30mn \u2014 Visite gratuite\"},{\"val\":\"2h\",\"label\":\"2h \u2014 Cours ma\u00eetre parfumeur (payant \u00b7 r\u00e9servation requise)\"}],\"def\":\"30mn\",\"reco\":\"1h00\",\"special\":true,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"biot\",\"name\":\"\ud83c\udffa Biot Village\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/BIOT-VILLAGE-1000-WEBP-e1776368908522.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.7\",\"km\":\"22 km de Nice\",\"time\":\"30 min de Nice\",\"desc\":\"Village m\u00e9di\u00e9val \u00b7 souffleurs de verre \u00b7 mus\u00e9e L\u00e9ger\",\"accroche\":\"Capitale mondiale du verre souffl\u00e9, village perch\u00e9 \u00e0 deux pas d'Antibes.\",\"seo\":[\"Village m\u00e9di\u00e9val du XIIIe si\u00e8cle, capitale fran\u00e7aise du verre souffl\u00e9 artisanal.\",\"Mus\u00e9e National Fernand L\u00e9ger \u2014 348 \u0153uvres, l'une des plus grandes collections monographiques.\",\"\u00c0 5 min d'Antibes, 20 min de Nice \u2014 combinable en circuit C\u00f4te d'Azur arri\u00e8re-pays.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"antibes\",\"name\":\"\u2693 Antibes\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/ANTIBES-VILLAGE-WEBP-e1776369259605.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.6\",\"km\":\"22 km de Nice\",\"time\":\"32 min de Nice\",\"desc\":\"Vieille ville \u00b7 remparts g\u00e9nois \u00b7 Port Vauban \u00b7 Mus\u00e9e Picasso\",\"accroche\":\"Cit\u00e9 fortifi\u00e9e par Vauban, berceau de Picasso sur la C\u00f4te d'Azur.\",\"seo\":[\"Remparts Vauban longeant la mer, Port Vauban \u2014 plus grande marina d'Europe.\",\"Mus\u00e9e Picasso : 23 tableaux et 44 dessins r\u00e9alis\u00e9s ici en 1946.\",\"Entre Nice et Cannes \u2014 combinable avec Juan-les-Pins en circuit priv\u00e9.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h30\",\"reco\":\"1h0030\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"roquebrune\",\"name\":\"\ud83d\uddfc Roquebrune Village\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/ROQUEBRUNE-VILLAGE-1000-WEBP-e1776368645233.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u2605\",\"score\":\"4.8\",\"km\":\"26 km de Nice\",\"time\":\"35 min de Nice\",\"desc\":\"Village carolingien \u00b7 ch\u00e2teau m\u00e9di\u00e9val \u00b7 vue Monaco et la mer\",\"accroche\":\"Le plus ancien ch\u00e2teau m\u00e9di\u00e9val habit\u00e9 de France, perch\u00e9 \u00e0 300m au-dessus de la mer.\",\"seo\":[\"Ch\u00e2teau carolingien du Xe si\u00e8cle \u2014 le plus ancien ch\u00e2teau habit\u00e9 de France.\",\"Village perch\u00e9 \u00e0 300 m dominant Monaco et la baie de Menton.\",\"Olivier mill\u00e9naire class\u00e9 Monument Historique dans les ruelles m\u00e9di\u00e9vales.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"mougins\",\"name\":\"\ud83d\uddbc\ufe0f Mougins Village\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/MOUGINS-VILLAGE-1000-WEBP-e1776368686165.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.7\",\"km\":\"26 km de Nice\",\"time\":\"35 min de Nice\",\"desc\":\"Village d'artistes \u00b7 gastronomie \u00e9toil\u00e9e \u00b7 ruelles pittoresques\",\"accroche\":\"Village proven\u00e7al perch\u00e9 o\u00f9 Picasso v\u00e9cut ses derni\u00e8res ann\u00e9es.\",\"seo\":[\"Village perch\u00e9 o\u00f9 Picasso v\u00e9cut de 1961 \u00e0 1973 \u2014 mus\u00e9e et galeries d'art.\",\"Capitale gastronomique de la Riviera avec plusieurs restaurants \u00e9toil\u00e9s Michelin.\",\"\u00c0 10 min de Cannes \u2014 id\u00e9al en combinaison circuit Cannes\u2013Mougins\u2013Grasse.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"saintpaul\",\"name\":\"\ud83c\udfa8 Saint-Paul-de-Vence\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/SAINT-PAUL-DE-VENCE-WEBP-e1776369110131.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.7\",\"km\":\"28 km de Nice\",\"time\":\"38 min de Nice\",\"desc\":\"Village d'artistes fortifi\u00e9 \u00b7 galeries \u00b7 Fondation Maeght\",\"accroche\":\"Village fortifi\u00e9 abritant les galeries d'art les plus c\u00e9l\u00e8bres du Midi.\",\"seo\":[\"Village fortifi\u00e9 m\u00e9di\u00e9val du XIVe si\u00e8cle, haut lieu de l'art contemporain.\",\"Fondation Maeght : grande collection d'art moderne \u2014 Mir\u00f3, Giacometti, Braque.\",\"\u00c0 25 km de Nice, 15 km d'Antibes \u2014 circuit arri\u00e8re-pays French Riviera.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h30\",\"reco\":\"1h0030\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"monaco\",\"name\":\"\ud83d\udc51 Monaco \u2014 Le Rocher & Palais du Prince\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/PALAIS-DU-PRINCE-MONACO-TRANSPONYX-WEBP-e1776368983463.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.7\",\"km\":\"21 km de Nice\",\"time\":\"38 min de Nice\",\"desc\":\"Palais Princier \u00b7 Cath\u00e9drale \u00b7 Port Hercule \u00b7 Vieux Monaco\",\"accroche\":\"Le rocher des Grimaldi, c\u0153ur historique et royal de la Principaut\u00e9.\",\"seo\":[\"Rocher mill\u00e9naire des Grimaldi \u2014 panorama sur Monte-Carlo et la mer.\",\"Rel\u00e8ve de la garde \u00e0 11h55, cath\u00e9drale et tombeau de Grace Kelly.\",\"Destination phare d'un circuit Nice\u2013Monaco en 35 min depuis la Riviera.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"mandelieu\",\"name\":\"\ud83c\udfef Mandelieu-la-Napoule\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/MANDELIEU-LA-NAPOULE-1000-WEBP-e1776368725742.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.4\",\"km\":\"32 km de Nice\",\"time\":\"38 min de Nice\",\"desc\":\"Ch\u00e2teau de la Napoule \u00b7 bord de mer \u00b7 mimosas en fleur\",\"accroche\":\"Ch\u00e2teau m\u00e9di\u00e9val les pieds dans l'eau entre Est\u00e9rel et rade de Cannes.\",\"seo\":[\"Ch\u00e2teau de la Napoule (XIVe s.) restaur\u00e9 les pieds dans l'eau \u2014 visites guid\u00e9es.\",\"Capitale mondiale du mimosa en f\u00e9vrier \u2014 for\u00eats de fleurs dor\u00e9es sur l'Est\u00e9rel.\",\"Acc\u00e8s direct \u00e0 la rade de Cannes, golf et plages de l'Est\u00e9rel rouge.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"vence\",\"name\":\"\u26ea Vence\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/VENCE-VILLAGE-WEBP-e1776369057291.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.5\",\"km\":\"31 km de Nice\",\"time\":\"40 min de Nice\",\"desc\":\"Cit\u00e9 m\u00e9di\u00e9vale \u00b7 Chapelle Matisse \u00b7 fontaines et remparts\",\"accroche\":\"Petite cit\u00e9 m\u00e9di\u00e9vale abritant la Chapelle Matisse, chef-d'\u0153uvre de lumi\u00e8re.\",\"seo\":[\"C\u00e9l\u00e8bre pour la Chapelle du Rosaire de Matisse (1951), chef-d'\u0153uvre de lumi\u00e8re.\",\"Cath\u00e9drale romane XIIe si\u00e8cle, remparts et place du Peyra en vieille ville.\",\"Combinable avec Saint-Paul et Tourrettes en demi-journ\u00e9e arri\u00e8re-pays.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"montecarlo\",\"name\":\"\ud83c\udfb0 Monte-Carlo & Casino\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/MONTE-CARLO-WEBP-e1776369150901.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.6\",\"km\":\"22 km de Nice\",\"time\":\"40 min de Nice\",\"desc\":\"Casino de Monte-Carlo \u00b7 H\u00f4tel de Paris \u00b7 Place du Casino \u00b7 Circuit F1\",\"accroche\":\"Casino l\u00e9gendaire, Formule 1 et h\u00f4tels de l\u00e9gende.\",\"seo\":[\"Place du Casino, l'une des plus photographi\u00e9es au monde.\",\"Circuit F1 : roulez les virages Rascasse et Casino en v\u00e9hicule priv\u00e9.\",\"H\u00f4tel de Paris, Hermitage et boutiques de luxe en Principaut\u00e9.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\"],\"def\":\"30mn\",\"reco\":\"30mn\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"tourrettes\",\"name\":\"\ud83c\udf38 Tourrettes-sur-Loup\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/TOURRETTES-SUR-LOUP-VILLAGE-WEBP-e1776369085837.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.7\",\"km\":\"33 km de Nice\",\"time\":\"42 min de Nice\",\"desc\":\"Cit\u00e9 des violettes \u00b7 ateliers d'artisans \u00b7 gorges du Loup\",\"accroche\":\"Village aux mille violettes, perch\u00e9 sur un \u00e9peron rocheux \u00e0 400 m.\",\"seo\":[\"Cit\u00e9 m\u00e9di\u00e9vale des violettes perch\u00e9e \u00e0 400 m, l'une des plus authentiques.\",\"Ateliers de tisserands et potiers dans les ruelles vo\u00fbt\u00e9es m\u00e9di\u00e9vales.\",\"Proximit\u00e9 des Gorges du Loup \u2014 paysage naturel exceptionnel en journ\u00e9e.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"valbonne\",\"name\":\"\ud83c\udfd8\ufe0f Valbonne Village\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/VALBONNE-VILLAGE-1000-WEBP.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.6\",\"km\":\"28 km de Nice\",\"time\":\"42 min de Nice\",\"desc\":\"Village m\u00e9di\u00e9val planifi\u00e9 \u00b7 place des Arcades \u00b7 plan en grille unique\",\"accroche\":\"Village m\u00e9di\u00e9val \u00e0 plan quadrill\u00e9, l'un des mieux pr\u00e9serv\u00e9s de Provence.\",\"seo\":[\"Fond\u00e9 en 1519, seul village proven\u00e7al \u00e0 plan en grille parfaitement perpendiculaire.\",\"Place des Arcades : couverts m\u00e9di\u00e9vaux ombrag\u00e9s, march\u00e9 hebdomadaire, terrasses authentiques.\",\"\u00c0 10 min de Grasse et Cannes \u2014 id\u00e9al en circuit arri\u00e8re-pays Mougins\u2013Valbonne\u2013Grasse.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"cannes\",\"name\":\"\ud83c\udfac Cannes\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/CANNES-WEBP-e1776369246506.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.5\",\"km\":\"35 km de Nice\",\"time\":\"45 min de Nice\",\"desc\":\"La Croisette \u00b7 Palais des Festivals \u00b7 Vieux-Port \u00e9l\u00e9gant\",\"accroche\":\"Festival, Croisette et palaces \u2014 l'essence du luxe m\u00e9diterran\u00e9en.\",\"seo\":[\"La Croisette, avenue mythique bord\u00e9e de palaces et de M\u00e9diterran\u00e9e.\",\"Le Suquet : vieille ville m\u00e9di\u00e9vale avec vue sur la baie et les L\u00e9rins.\",\"Acc\u00e8s aux \u00celes de L\u00e9rins depuis le Vieux-Port \u2014 forteresse et pin\u00e8des.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h30\",\"reco\":\"1h0030\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"bordighera\",\"name\":\"\ud83c\udf34 Bordighera Citt\u00e0 Alta\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/BORDIGHERA-CITA-ALTA-e1776368892627.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.5\",\"km\":\"46 km de Nice\",\"time\":\"48 min de Nice\",\"desc\":\"Cit\u00e9 m\u00e9di\u00e9vale italienne \u00b7 palmiers royaux \u00b7 vue mer panoramique\",\"accroche\":\"Citadelle ligure perch\u00e9e parmi les palmiers, vue imprenable sur la M\u00e9diterran\u00e9e.\",\"seo\":[\"Cit\u00e9 m\u00e9di\u00e9vale perch\u00e9e fournissant les palmes au Vatican depuis le XVIe si\u00e8cle.\",\"Vue panoramique sur la M\u00e9diterran\u00e9e et le cap San Ampeglio depuis les remparts.\",\"Premi\u00e8re cit\u00e9 italienne de la Riviera dei Fiori apr\u00e8s la fronti\u00e8re fran\u00e7aise.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"menton\",\"name\":\"\ud83c\udf4b Menton\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/MENTON-VILLAGE-WEBP-e1776369172225.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u2605\",\"score\":\"4.8\",\"km\":\"31 km de Nice\",\"time\":\"50 min de Nice\",\"desc\":\"La Perle de la France \u00b7 citrons \u00b7 baroque italien \u00b7 jardins\",\"accroche\":\"La cit\u00e9 des citrons, entre France et Italie, baign\u00e9e de lumi\u00e8re.\",\"seo\":[\"Ville la plus ensoleill\u00e9e de France \u2014 architecture baroque \u00e0 la fronti\u00e8re italienne.\",\"Jardins Serre de la Madone et Villa Maria Serena, Monuments Historiques.\",\"Extension possible \u00e0 Vintimille pour le march\u00e9 du vendredi matin.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"gourdon\",\"name\":\"\ud83e\udd85 Gourdon\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/GOURDON-VILLAGE-WEBP-e1776369193600.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u2605\",\"score\":\"4.8\",\"km\":\"38 km de Nice\",\"time\":\"50 min de Nice\",\"desc\":\"\u00c0 760m \u00b7 vue mer & Alpes \u00b7 class\u00e9 Plus Beaux Villages\",\"accroche\":\"Class\u00e9 Plus Beaux Villages, suspendu \u00e0 760 m entre mer et Alpes.\",\"seo\":[\"Plus Beaux Villages de France \u00e0 760 m \u2014 vue mer et Alpes enneig\u00e9es.\",\"Ch\u00e2teau m\u00e9di\u00e9val XIIe si\u00e8cle, jardins \u00e0 la fran\u00e7aise et miel de montagne.\",\"Point culminant du circuit Gorges du Loup \u2014 combinable avec Tourrettes.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"grasse\",\"name\":\"\ud83c\udf39 Grasse\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/GRASSE-WEBP.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.4\",\"km\":\"40 km de Nice\",\"time\":\"52 min de Nice\",\"desc\":\"Capitale mondiale du parfum \u00b7 parfumeries historiques\",\"accroche\":\"Capitale mondiale du parfum depuis le XVIIe si\u00e8cle, au c\u0153ur des fleurs.\",\"seo\":[\"Capitale du parfum class\u00e9e UNESCO \u2014 berceau de Chanel N\u00b05 et Dior.\",\"Fragonard, Molinard et Galimard : visites guid\u00e9es gratuites des ateliers.\",\"Mus\u00e9e International : 3 000 ans d'histoire de la fragrance mondiale.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"fragonardgrasse\",\"name\":\"\ud83c\udf38 Fragonard \u00b7 Grasse\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/FRAGONARD-GRASSE-1000-WEBP-e1776368847425.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.5\",\"km\":\"40 km de Nice\",\"time\":\"52 min de Nice\",\"desc\":\"Usine historique \u00b7 mus\u00e9e du parfum \u00b7 cours ma\u00eetre parfumeur\",\"accroche\":\"L'usine-m\u00e8re Fragonard \u00e0 Grasse \u2014 au c\u0153ur de la capitale mondiale du parfum.\",\"seo\":[\"Usine historique Fragonard fond\u00e9e en 1926 \u2014 visite guid\u00e9e gratuite avec alambics d'\u00e9poque.\",\"Mus\u00e9e des Arts et Parfums : 3 000 ans de flacons pr\u00e9cieux et objets olfactifs rares.\",\"Cours ma\u00eetre parfumeur 2h : cr\u00e9ez et repartez avec votre fragrance personnalis\u00e9e.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\"],\"def\":\"1h\",\"reco\":\"1h\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"molinard\",\"name\":\"\ud83e\udee7 Molinard \u00b7 Grasse\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/MOLINARD-GRASSE-1000-WEBP-e1776368706334.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.4\",\"km\":\"40 km de Nice\",\"time\":\"52 min de Nice\",\"desc\":\"Parfumerie 1849 \u00b7 villa Belle \u00c9poque \u00b7 collection Lalique\",\"accroche\":\"Dans une villa Belle \u00c9poque entour\u00e9e de roses et jasmin depuis 1849.\",\"seo\":[\"Maison fond\u00e9e en 1849 dans une villa Belle \u00c9poque class\u00e9e avec jardins en fleur.\",\"Collection de flacons Lalique et Baccarat \u2014 pi\u00e8ces rares des XIXe et XXe si\u00e8cles.\",\"Atelier personnalisation : composez votre parfum unique en s\u00e9ance guid\u00e9e 1h30.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\"],\"def\":\"1h\",\"reco\":\"1h\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"galimard\",\"name\":\"\ud83c\udf3f Galimard \u00b7 Grasse\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/GALIMARD-GRASSE-1000-WEBP-e1776368830695.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.3\",\"km\":\"40 km de Nice\",\"time\":\"52 min de Nice\",\"desc\":\"La plus ancienne \u00b7 fond\u00e9e 1747 \u00b7 fournisseur Louis XV\",\"accroche\":\"Fond\u00e9e en 1747, la doyenne des parfumeries de Grasse \u2014 fournisseur de Louis XV.\",\"seo\":[\"Plus ancienne parfumerie de Grasse \u2014 fond\u00e9e en 1747, fournisseur historique de la cour de Versailles.\",\"Studio des Fragrances : cours signature 1h30 dans un cadre historique exceptionnel.\",\"Jardins de plantes \u00e0 parfum avec rose centifolia et jasmin de Grasse en saison.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\"],\"def\":\"1h\",\"reco\":\"1h\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"ventimiglia\",\"name\":\"\ud83c\uddee\ud83c\uddf9 Ventimiglia\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/VENTIMIGLIA-1000-WEBP-Liguria-Ventimiglia-Cattedrale-di-Santa-Maria-Assunta--e1776368519705.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.3\",\"km\":\"52 km de Nice\",\"time\":\"52 min de Nice\",\"desc\":\"Premi\u00e8re ville italienne \u00b7 vieille ville perch\u00e9e \u00b7 march\u00e9 anim\u00e9\",\"accroche\":\"Premi\u00e8re \u00e9tape en Italie \u2014 vieille ville m\u00e9di\u00e9vale et march\u00e9 du vendredi.\",\"seo\":[\"Vieille ville m\u00e9di\u00e9vale perch\u00e9e avec cath\u00e9drale romane et ruelles en escalier.\",\"Grand march\u00e9 du vendredi matin \u2014 le plus couru de la Riviera italienne.\",\"Vestiges romains dans les jardins Hanbury, class\u00e9s Patrimoine Mondial UNESCO.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h30\",\"reco\":\"1h0030\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"dolceacqua\",\"name\":\"\ud83c\udfa8 Dolceacqua\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/DOLCEACQUA-1000-WEBP-e1776368861586.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u2605\",\"score\":\"4.8\",\"km\":\"54 km de Nice\",\"time\":\"55 min de Nice\",\"desc\":\"Village m\u00e9di\u00e9val class\u00e9 \u00b7 ch\u00e2teau Doria \u00b7 pont romain peint par Monet\",\"accroche\":\"Chef-d'\u0153uvre ligure immortalis\u00e9 par Monet \u2014 pont roman et ch\u00e2teau Doria.\",\"seo\":[\"Pont roman du XIVe si\u00e8cle immortalis\u00e9 par Monet en 1884 \u2014 chef-d'\u0153uvre ligure.\",\"Ch\u00e2teau Doria du XIe si\u00e8cle dominant les toits en ardoise du village.\",\"Vin Rossese di Dolceacqua \u2014 appellation DOC produite sur les coteaux environnants.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h30\",\"reco\":\"1h0030\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"sanremo\",\"name\":\"\ud83c\udf39 San Remo\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/SANREMO-1000-WEBP-e1776368574900.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.4\",\"km\":\"60 km de Nice\",\"time\":\"58 min de Nice\",\"desc\":\"Capitale des fleurs \u00b7 casino Belle \u00c9poque \u00b7 vieille ville La Pigna\",\"accroche\":\"La Pigna m\u00e9di\u00e9vale, casino Belle \u00c9poque et march\u00e9s aux fleurs \u2014 dolce vita ligure.\",\"seo\":[\"Casino Belle \u00c9poque de 1905 \u2014 l'un des plus beaux d'Europe sur la Riviera.\",\"La Pigna : vieille ville m\u00e9di\u00e9vale au-dessus de la ville moderne et du port.\",\"Capitale mondiale de la fleur coup\u00e9e \u2014 march\u00e9s aux fleurs et serres \u00e0 visiter.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h30\",\"reco\":\"1h0030\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"apricale\",\"name\":\"\ud83c\udfe1 Apricale\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/APRICALE-1000-WEBP-e1776368937528.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u2605\",\"score\":\"4.9\",\"km\":\"60 km de Nice\",\"time\":\"65 min de Nice\",\"desc\":\"L'un des plus beaux villages d'Italie \u00b7 ch\u00e2teau \u00b7 fresques murales\",\"accroche\":\"Village en spirale class\u00e9 parmi les plus beaux d'Italie, couvert de fresques.\",\"seo\":[\"Class\u00e9 parmi les Borghi pi\u00f9 belli d'Italia \u2014 village en spirale m\u00e9di\u00e9vale intact.\",\"Fresques murales dans les ruelles \u2014 art contemporain sur fa\u00e7ades du XIVe si\u00e8cle.\",\"Ambiance hors du temps \u00e0 290 m \u2014 sans voitures, sans foule touristique.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"imperia\",\"name\":\"\ud83e\uded2 Imperia\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/IMPERIA-1000-WEBP-e1776368780432.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.3\",\"km\":\"82 km de Nice\",\"time\":\"78 min de Nice\",\"desc\":\"Capitale de l'huile d'olive \u00b7 Porto Maurizio \u00b7 vieille ville baroque\",\"accroche\":\"Porto Maurizio baroque surplombe la mer depuis ses ruelles en escalier.\",\"seo\":[\"Porto Maurizio : vieille ville baroque avec cath\u00e9drale et calata des p\u00eacheurs.\",\"Capitale mondiale de l'huile d'olive \u2014 Museo dell'Olivo et d\u00e9gustation.\",\"Deux villes en une : Porto Maurizio (historique) et Oneglia (moderne).\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h30\",\"reco\":\"1h0030\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"dianomarina\",\"name\":\"\ud83c\udfd6\ufe0f Diano Marina\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/DIANO-MARINA-1000-WEBP.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.4\",\"km\":\"92 km de Nice\",\"time\":\"88 min de Nice\",\"desc\":\"Station baln\u00e9aire ligure \u00b7 palmiers \u00b7 douceur de vivre italienne\",\"accroche\":\"Perle baln\u00e9aire de la Riviera di Ponente, palmiers centenaires et eaux cristallines.\",\"seo\":[\"R\u00e9put\u00e9e pour ses palmiers centenaires et ses eaux parmi les plus claires de Ligurie.\",\"Station baln\u00e9aire Belle \u00c9poque avec promenade fleurie de 3 km le long de la mer.\",\"Acc\u00e8s facile aux villages m\u00e9di\u00e9vaux de Diano Castello et Diano Arentino.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"saintemaxime\",\"name\":\"\u26f5 Sainte-Maxime\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/SAINTE-MAXIME-1000-WEBP.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.4\",\"km\":\"128 km de Nice\",\"time\":\"100 min de Nice\",\"desc\":\"Face \u00e0 Saint-Tropez \u00b7 plages dor\u00e9es \u00b7 golfe azur\u00e9en\",\"accroche\":\"Depuis les plages de Sainte-Maxime, Saint-Tropez se dessine de l'autre c\u00f4t\u00e9.\",\"seo\":[\"Vue unique sur Saint-Tropez de l'autre c\u00f4t\u00e9 du golfe \u2014 panorama exceptionnel.\",\"Tour Carr\u00e9e du XVIe si\u00e8cle, mus\u00e9e des Traditions Locales en plein centre.\",\"Plages familiales de sable dor\u00e9 et acc\u00e8s par navette au Golfe de Saint-Tropez.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"laigueglia\",\"name\":\"\ud83c\udfa8 Laigueglia\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/LAIGUEGLIA-1000-WEBP-e1776368765527.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.7\",\"km\":\"115 km de Nice\",\"time\":\"100 min de Nice\",\"desc\":\"Village de p\u00eacheurs pr\u00e9serv\u00e9 \u00b7 fa\u00e7ades color\u00e9es \u00b7 baroque m\u00e9ridional\",\"accroche\":\"Fa\u00e7ades baroques jaune et orange, ruelles pav\u00e9es et plages tranquilles.\",\"seo\":[\"Village de p\u00eacheurs d'origine m\u00e9di\u00e9vale aux fa\u00e7ades baroques jaune et rose.\",\"\u00c9glise baroque Sant'Matteo et tour sarrasine dominant la plage de galets.\",\"Parmi les plus authentiques villages baln\u00e9aires de la Riviera di Ponente.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"alassio\",\"name\":\"\ud83c\udf0a Alassio\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/ALASSIO-1000-WEBP-e1776368953623.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.5\",\"km\":\"118 km de Nice\",\"time\":\"102 min de Nice\",\"desc\":\"La Perle de la Riviera ligure \u00b7 longue plage de sable \u00b7 dolce vita\",\"accroche\":\"Longue plage de sable dor\u00e9, centre historique anim\u00e9 et joie de vivre.\",\"seo\":[\"La Perle de la Riviera ligure \u2014 3 km de plage de sable fin entre pin\u00e8des et mer.\",\"Le Muretto d'Alassio : mur couvert de c\u00e9ramiques sign\u00e9es par des c\u00e9l\u00e9brit\u00e9s du monde entier.\",\"Centre historique anim\u00e9 avec arcades m\u00e9di\u00e9vales et restaurants de poisson frais.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h30\",\"reco\":\"1h0030\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"portgrimaud\",\"name\":\"\u2693 Port Grimaud\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/PORT-GRIMAUD-1000-WEBP-e1776368659127.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u2605\",\"score\":\"4.8\",\"km\":\"132 km de Nice\",\"time\":\"103 min de Nice\",\"desc\":\"La Venise de Provence \u00b7 canaux \u00b7 maisons color\u00e9es \u00b7 bateaux\",\"accroche\":\"Village lacustre priv\u00e9 aux canaux turquoise, bateaux amarr\u00e9s devant chaque porte.\",\"seo\":[\"Cit\u00e9 lacustre cr\u00e9\u00e9e en 1966 par l'architecte Spoerry \u2014 Venise proven\u00e7ale priv\u00e9e.\",\"Canaux navigables, bateaux \u00e0 chaque porte, maisons color\u00e9es en bord d'eau.\",\"\u00c0 5 min de Saint-Tropez \u2014 combinaison id\u00e9ale en circuit Golfe de Saint-Tropez.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"sainttropez\",\"name\":\"\u2b50 Saint-Tropez\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/SAINT-TROPEZ-1000-WEBP-e1776368608880.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.5\",\"km\":\"138 km de Nice\",\"time\":\"108 min de Nice\",\"desc\":\"Vieux Port \u00b7 citadelle \u00b7 place des Lices \u00b7 plages de Pampelonne\",\"accroche\":\"La cit\u00e9 des stars \u2014 place des Lices, Vieux Port et les mythiques plages de Pampelonne.\",\"seo\":[\"Vieux Port de Saint-Tropez et Citadelle XVIe si\u00e8cle \u2014 vue sur le golfe depuis les remparts.\",\"Place des Lices et ses c\u00e9l\u00e8bres parties de p\u00e9tanque sous les platanes centenaires.\",\"Mus\u00e9e de l'Annonciade : collection post-impressionniste avec Signac, Matisse, Bonnard.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"2h\",\"reco\":\"2h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"loano\",\"name\":\"\ud83c\udfdb\ufe0f Loano\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/LOANO-1000-WEBP-e1776368749286.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.3\",\"km\":\"130 km de Nice\",\"time\":\"118 min de Nice\",\"desc\":\"Village ligure authentique \u00b7 Palazzo Doria \u00b7 plages pr\u00e9serv\u00e9es\",\"accroche\":\"Authentique bourg ligure au pied des collines, Palazzo Doria et plages sauvages.\",\"seo\":[\"Palazzo Doria du XVIe si\u00e8cle et mosa\u00efques romaines dans le centre m\u00e9di\u00e9val.\",\"Plages de galets pr\u00e9serv\u00e9es entre pin\u00e8des et mer \u2014 station familiale sans foule.\",\"Acc\u00e8s rapide \u00e0 l'arri\u00e8re-pays ligure \u2014 Finalborgo m\u00e9di\u00e9val \u00e0 15 min.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\",\"3h\",\"4h\",\"5h\"],\"def\":\"1h\",\"reco\":\"1h00\",\"special\":false,\"dataCat\":\"riviera\",\"popup\":\"\"},{\"id\":\"bellet\",\"name\":\"\ud83c\udf47 Ch\u00e2teau de Bellet\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-de-Bellet-Prestige-Historique-sur-les-Hauteurs-de-Nice.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.5\",\"km\":\"10 km de Nice\",\"time\":\"15 min de Nice\",\"desc\":\"AOC Bellet \u00b7 Nice \u00b7 c\u00e9pages Braquet, Folle Noire et Rolle\",\"accroche\":\"Le ch\u00e2teau fondateur de l'AOC Bellet, gardien d'un terroir unique au monde au c\u0153ur des collines ni\u00e7oises.\",\"seo\":[\"Appellation fondatrice AOC Bellet, la plus confidentielle et la plus ancienne de Nice.\",\"Ch\u00e2teau historique produisant rouges, blancs et ros\u00e9s issus de c\u00e9pages autochtones rares.\",\"D\u00e9gustation priv\u00e9e \u00e0 10 km du centre de Nice avec chauffeur priv\u00e9.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h\",\"reco\":\"1h\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"<div class=\\\"otc-info-popup\\\">\\n        <div class=\\\"otc-ip-head\\\"><div class=\\\"otc-ip-head-name\\\">\ud83c\udf47 Ch\u00e2teau de Bellet<\/div><div class=\\\"otc-ip-head-aoc\\\">AOC Bellet \u00b7 Nice \u00b7 Fondateur de l'appellation<\/div><\/div>\\n        <div class=\\\"otc-ip-body\\\">\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83d\udccd Concept<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\u2139\ufe0f<\/span><span class=\\\"otc-ip-val\\\">Visite p\u00e9dagogique dans le domaine embl\u00e9matique de l'AOC Bellet.<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udeab<\/span><span class=\\\"otc-ip-val\\\">Ferm\u00e9 le dimanche<\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83c\udf77 Visite & D\u00e9gustation<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\u23f1<\/span><span class=\\\"otc-ip-val\\\">~50 min \u00b7 3 vins<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udcb0<\/span><span class=\\\"otc-ip-val\\\">Visite publique <span class=\\\"otc-ip-price\\\">20 \u20ac<\/span> \u00b7 Priv\u00e9e <span class=\\\"otc-ip-price\\\">30 \u20ac<\/span><\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\u2714 Parcours inclus<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\u26ea<\/span><span class=\\\"otc-ip-val\\\">Chapelle du domaine<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83c\udf3f<\/span><span class=\\\"otc-ip-val\\\">Vignes AOC Bellet<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83c\udffa<\/span><span class=\\\"otc-ip-val\\\">Cuverie &amp; chai de vieillissement<\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83d\udd52 Horaires<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83c\udf38<\/span><span class=\\\"otc-ip-val\\\"><strong>Avril<\/strong> \u2014 11h \u00b7 14h \u00b7 15h30<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\u2600\ufe0f<\/span><span class=\\\"otc-ip-val\\\"><strong>Mai et +<\/strong> \u2014 11h \u00b7 14h \u00b7 15h \u00b7 16h<\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83e\uddfa Snacks (sur r\u00e9servation)<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83e\uddc0<\/span><span class=\\\"otc-ip-val\\\">Fromages <span class=\\\"otc-ip-price\\\">15 \u20ac<\/span><\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83e\udd69<\/span><span class=\\\"otc-ip-val\\\">Charcuterie <span class=\\\"otc-ip-price\\\">20 \u20ac<\/span><\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83e\udd57<\/span><span class=\\\"otc-ip-val\\\">Mix fromages + charcuterie <span class=\\\"otc-ip-price\\\">24 \u20ac<\/span><\/span><\/div>\\n          <\/div>\\n        <\/div>\\n      <\/div>\"},{\"id\":\"cremat\",\"name\":\"\ud83c\udff0 Ch\u00e2teau de Cr\u00e9mat\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-de-Cremat-LHeritage-Riviera-et-lEsprit-Chanel-e1776679835159.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.3\",\"km\":\"15 km de Nice\",\"time\":\"20 min de Nice\",\"desc\":\"AOC Bellet \u00b7 Nice \u00b7 fond\u00e9 1906 \u00b7 blancs et ros\u00e9s d'exception\",\"accroche\":\"L'ambassadeur le plus embl\u00e9matique de l'AOC Bellet, rare appellation urbaine de France fond\u00e9e en 1906.\",\"seo\":[\"Ch\u00e2teau historique fond\u00e9 en 1906 en AOC Bellet, production tr\u00e8s confidentielle.\",\"Architecture proven\u00e7ale remarquable, caves class\u00e9es et vins prim\u00e9s internationaux.\",\"Excursion \u0153notouristique priv\u00e9e depuis Nice, Monaco ou Cannes avec chauffeur.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h\",\"reco\":\"1h\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"<div class=\\\"otc-info-popup\\\">\\n        <div class=\\\"otc-ip-head\\\"><div class=\\\"otc-ip-head-name\\\">\ud83c\udff0 Ch\u00e2teau de Cr\u00e9mat<\/div><div class=\\\"otc-ip-head-aoc\\\">AOC Bellet \u00b7 Nice<\/div><\/div>\\n        <div class=\\\"otc-ip-body\\\">\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83d\udccd Contact & Horaires<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udcde<\/span><span class=\\\"otc-ip-val\\\">04 92 15 12 15<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udce7<\/span><span class=\\\"otc-ip-val\\\">visite@chateaucremat.com<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udd52<\/span><span class=\\\"otc-ip-val\\\"><strong>Lun\u2013Sam<\/strong> 10h00 \u2013 17h30<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83c\udd7f\ufe0f<\/span><span class=\\\"otc-ip-val\\\">Parking \u00b7 Wi-Fi \u00b7 Chiens OK \u00b7 PMR partiel<\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83c\udf77 D\u00e9gustation<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83c\udf47<\/span><span class=\\\"otc-ip-val\\\">6 vins \u00b7 10h\u201317h30 <span class=\\\"otc-ip-price\\\">10 \u20ac<\/span><\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83d\udeb6 Visites Guid\u00e9es<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83c\udf47<\/span><span class=\\\"otc-ip-val\\\"><strong>Visite Vignoble<\/strong> \u00b7 45\u201360 min \u00b7 10h\/16h<br>3 vins <span class=\\\"otc-ip-price\\\">25 \u20ac<\/span> \u00b7 6 vins <span class=\\\"otc-ip-price\\\">30 \u20ac<\/span><\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83c\udff0<\/span><span class=\\\"otc-ip-val\\\"><strong>Vignoble &amp; Ch\u00e2teau<\/strong> \u00b7 ~1h30 \u00b7 11h\/14h<br>Int\u00e9rieurs + mobilier Ritz<br>3 vins <span class=\\\"otc-ip-price\\\">35 \u20ac<\/span> \u00b7 6 vins <span class=\\\"otc-ip-price\\\">40 \u20ac<\/span><\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83e\uddfa Exp\u00e9riences<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83e\udd42<\/span><span class=\\\"otc-ip-val\\\"><strong>Pique-nique Chic<\/strong> \u00b7 11h ou 13h <span class=\\\"otc-ip-price\\\">40\u20ac\u201380\u20ac<\/span><\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udd12<\/span><span class=\\\"otc-ip-val\\\"><strong>Privatisation<\/strong> \u22646 pers. \u00b7 jusqu'\u00e0 3h <span class=\\\"otc-ip-price\\\">400\u20ac\u2013450\u20ac<\/span><\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\u2795 Options<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83e\uddc0<\/span><span class=\\\"otc-ip-val\\\">Charcuterie \u00b7 Fromages \u00b7 Tapenades<\/span><\/div>\\n          <\/div>\\n        <\/div>\\n      <\/div>\"},{\"id\":\"saintvincent\",\"name\":\"\ud83c\udf7e Clos Saint-Vincent\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Clos-Saint-Vincent-La-Haute-Couture-des-Vins-de-Nice-e1776679715757.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.4\",\"km\":\"17 km de Nice\",\"time\":\"22 min de Nice\",\"desc\":\"AOC Bellet \u00b7 terrasses \u00b7 vue baie des Anges \u00b7 Braquet, Folle Noire\",\"accroche\":\"Le vignoble ni\u00e7ois le plus spectaculaire, perch\u00e9 sur ses terrasses face \u00e0 la M\u00e9diterran\u00e9e.\",\"seo\":[\"Vignes en terrasses dominant la baie des Anges \u2014 vue panoramique mer et Alpes.\",\"Vins confidentiels issus de c\u00e9pages locaux Braquet, Folle Noire et Rolle.\",\"Circuit \u0153nologique priv\u00e9 depuis Nice en v\u00e9hicule de luxe avec chauffeur.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h\",\"reco\":\"1h\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"saintmartin\",\"name\":\"\ud83c\udfef Ch\u00e2teau de Saint-Martin\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-de-Saint-Martin-Histoire-et-Crus-Classes-e1776679783848.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.5\",\"km\":\"88 km de Nice\",\"time\":\"80 min de Nice\",\"desc\":\"C\u00f4tes de Provence \u00b7 Taradeau \u00b7 Grand Cru Class\u00e9 \u00b7 d\u00e9gustations & exp\u00e9riences sur mesure\",\"accroche\":\"Grand domaine class\u00e9 entre Les Arcs et Taradeau, r\u00e9f\u00e9rence des C\u00f4tes de Provence depuis le XVIIe si\u00e8cle.\",\"seo\":[\"Grand Cru Class\u00e9 en C\u00f4tes de Provence \u2014 614 Route des Arcs, Taradeau (83460).\",\"Exp\u00e9riences sur mesure : vins &amp; chocolats, vieux mill\u00e9simes, pique-nique vigneron.\",\"Circuit \u0153nologique priv\u00e9 depuis Nice ou Cannes vers le Var avec chauffeur de luxe.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"<div class=\\\"otc-info-popup\\\">\\n        <div class=\\\"otc-ip-head\\\"><div class=\\\"otc-ip-head-name\\\">\ud83c\udfef Ch\u00e2teau de Saint-Martin<\/div><div class=\\\"otc-ip-head-aoc\\\">C\u00f4tes de Provence \u00b7 Taradeau \u00b7 Grand Cru Class\u00e9<\/div><\/div>\\n        <div class=\\\"otc-ip-body\\\">\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83d\udcde Contact<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udcde<\/span><span class=\\\"otc-ip-val\\\">04 94 99 76 76<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udccd<\/span><span class=\\\"otc-ip-val\\\">614 Route des Arcs, 83460 Taradeau<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udce7<\/span><span class=\\\"otc-ip-val\\\">accueil@chateaudesaintmartin.com<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udcc5<\/span><span class=\\\"otc-ip-val\\\">R\u00e9servation requise \u00b7 48h \u00e0 l'avance<\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83c\udf77 D\u00e9gustation Simple<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83e\udd42<\/span><span class=\\\"otc-ip-val\\\">3 vins <span class=\\\"otc-ip-price\\\">5 \u20ac<\/span> \u00b7 6 vins <span class=\\\"otc-ip-price\\\">8 \u20ac<\/span><\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83c\udf81<\/span><span class=\\\"otc-ip-val\\\">Offerte d\u00e8s 50\u20ac d'achat<\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83c\udf7d\ufe0f Exp\u00e9riences Sur Mesure<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83c\udf6b<\/span><span class=\\\"otc-ip-val\\\"><strong>Vins &amp; Chocolats<\/strong> \u00b7 1h \u00b7 4 vins + accords <span class=\\\"otc-ip-price\\\">55 \u20ac\/2 pers.<\/span><\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83e\uddc0<\/span><span class=\\\"otc-ip-val\\\"><strong>Vins &amp; Fromages<\/strong> \u00b7 1h \u00b7 cave + d\u00e9g. <span class=\\\"otc-ip-price\\\">55 \u20ac\/2 pers.<\/span><\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83c\udf77<\/span><span class=\\\"otc-ip-val\\\"><strong>Vieux Mill\u00e9simes<\/strong> \u00b7 1h \u00b7 Crus Class\u00e9s 2003\u20132011 <span class=\\\"otc-ip-price\\\">100 \u20ac\/2 pers.<\/span><\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83e\uddfa Compl\u00e9ments<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83e\udd57<\/span><span class=\\\"otc-ip-val\\\">Pique-nique vigneron \u00b7 Snacking toute la journ\u00e9e<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83c\udfad<\/span><span class=\\\"otc-ip-val\\\">Ateliers th\u00e9matiques \u00b7 Cocktails oenologiques<\/span><\/div>\\n          <\/div>\\n        <\/div>\\n      <\/div>\"},{\"id\":\"dott\",\"name\":\"\ud83c\udffa Domaine Ott\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-Ott-LElegance-du-Rose-de-Provence-e1776679663989.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.4\",\"km\":\"90 km de Nice\",\"time\":\"1h18 de Nice\",\"desc\":\"C\u00f4tes de Provence \u00b7 Taradeau \u00b7 fond\u00e9 1912 \u00b7 trois domaines d'exception\",\"accroche\":\"La r\u00e9f\u00e9rence historique du ros\u00e9 de Provence, fond\u00e9e en 1912 et toujours au sommet.\",\"seo\":[\"Institution centenaire de la Provence viticole fond\u00e9e en 1912, trois domaines d'exception.\",\"Vins C\u00f4tes de Provence parmi les plus fins et les plus \u00e9l\u00e9gants de l'appellation.\",\"Circuit \u0153nologique priv\u00e9 depuis Nice vers le Var en v\u00e9hicule de luxe.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"sainteRoseline\",\"name\":\"\u26ea Ch\u00e2teau Sainte-Roseline\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Sainte-Roseline-Excellence-et-Patrimoine-Religieux-e1776679731410.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.5\",\"km\":\"92 km de Nice\",\"time\":\"1h20 de Nice\",\"desc\":\"C\u00f4tes de Provence \u00b7 Les Arcs \u00b7 abbaye XIIe s. \u00b7 Monument Historique\",\"accroche\":\"Mille ans d'histoire viticole dans une abbaye class\u00e9e, l'un des domaines les plus remarquables de toute la Provence.\",\"seo\":[\"Abbaye templi\u00e8re du XIIe si\u00e8cle class\u00e9e Monument Historique en C\u00f4tes de Provence.\",\"Ros\u00e9 Cuv\u00e9e Prieur\u00e9 parmi les plus m\u00e9daill\u00e9s de Provence sur 100 hectares.\",\"Tour \u0153notouristique priv\u00e9 depuis Nice en v\u00e9hicule de luxe avec chauffeur.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"roubine\",\"name\":\"\ud83c\udf31 Ch\u00e2teau Roubine\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Roubine-Cru-Classe-de-Provence-e1776679738199.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.3\",\"km\":\"98 km de Nice\",\"time\":\"1h25 de Nice\",\"desc\":\"C\u00f4tes de Provence \u00b7 Lorgues \u00b7 biologique \u00b7 ros\u00e9s de puret\u00e9 exceptionnelle\",\"accroche\":\"R\u00e9f\u00e9rence incontournable de la Provence viticole bio, alliant \u00e9l\u00e9gance naturelle et respect des terroirs.\",\"seo\":[\"Ch\u00e2teau certifi\u00e9 Agriculture Biologique en C\u00f4tes de Provence \u00e0 Lorgues.\",\"Ros\u00e9s, blancs et rouges bio d'une puret\u00e9, fra\u00eecheur et min\u00e9ralit\u00e9 exceptionnelles.\",\"Visite cave et d\u00e9gustation depuis Nice vers le Var avec chauffeur priv\u00e9.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"berne\",\"name\":\"\ud83c\udfe1 Ch\u00e2teau de Berne\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-de-Berne-LArt-de-Vivre-en-Provence-e1776679842659.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.6\",\"km\":\"102 km de Nice\",\"time\":\"1h28 de Nice\",\"desc\":\"C\u00f4tes de Provence \u00b7 Lorgues \u00b7 1000 ha \u00b7 restaurant gastronomique \u00b7 h\u00f4tel\",\"accroche\":\"Un domaine \u0153notouristique d'exception : 1 000 hectares de vignes, gastronomie et luxe au c\u0153ur du Var.\",\"seo\":[\"Vaste domaine de 1 000 hectares en C\u00f4tes de Provence \u00e0 Lorgues.\",\"Ros\u00e9 et Blanc d'exception, restaurant gastronomique et h\u00f4tel de charme.\",\"Excursion priv\u00e9e depuis Nice ou Cannes avec chauffeur vers le Var.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"peyrassol\",\"name\":\"\u2694\ufe0f Commanderie de Peyrassol\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Commanderie-de-Peyrassol-Histoire-et-Art-du-Vin-e1776679706116.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.5\",\"km\":\"112 km de Nice\",\"time\":\"1h38 de Nice\",\"desc\":\"C\u00f4tes de Provence \u00b7 Flassans \u00b7 Templiers XIIIe s. \u00b7 art contemporain\",\"accroche\":\"Vignoble templier du XIIIe si\u00e8cle alliant grands ros\u00e9s de Provence et art contemporain international.\",\"seo\":[\"Ancien domaine de l'Ordre des Templiers en C\u00f4tes de Provence depuis le XIIIe si\u00e8cle.\",\"Galerie d'art contemporain int\u00e9gr\u00e9e au vignoble \u2014 exp\u00e9rience culturelle et \u0153nologique.\",\"Tour privatif de Provence depuis Nice avec chauffeur de luxe.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"minuty\",\"name\":\"\ud83c\udf39 Ch\u00e2teau Minuty\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Minuty-LIcone-du-Rose-de-Saint-Tropez.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.5\",\"km\":\"122 km de Nice\",\"time\":\"1h45 de Nice\",\"desc\":\"C\u00f4tes de Provence \u00b7 Gassin \u00b7 Grand Cru Class\u00e9 \u00b7 ros\u00e9 M Minuty\",\"accroche\":\"Le ros\u00e9 de Provence le plus c\u00e9l\u00e8bre au monde, produit depuis 1936 sur les coteaux de Gassin pr\u00e8s de Saint-Tropez.\",\"seo\":[\"Domaine Grand Cru Class\u00e9 en C\u00f4tes de Provence sur les coteaux de Gassin.\",\"Ros\u00e9 Minuty M parmi les ros\u00e9s les plus vendus au monde depuis 1936.\",\"Excursion depuis Nice vers Saint-Tropez avec chauffeur priv\u00e9 de luxe.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},\n{\"id\":\"esclans\",\"name\":\"\ud83c\udf39 Ch\u00e2teau d'Esclans\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-dEsclans-Le-Temple-du-Whispering-Angel.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u2605\",\"score\":\"4.8\",\"km\":\"118 km de Nice\",\"time\":\"1h48 de Nice\",\"desc\":\"C\u00f4tes de Provence \u00b7 La Motte \u00b7 Whispering Angel \u00b7 ros\u00e9 iconique mondial\",\"accroche\":\"Berceau du Whispering Angel, le ros\u00e9 de Provence le plus c\u00e9l\u00e8bre et le plus vendu au monde.\",\"seo\":[\"Whispering Angel : ros\u00e9 de Provence num\u00e9ro 1 mondial en valeur \u2014 produit exclusivement \u00e0 Ch\u00e2teau d'Esclans.\",\"Domaine d'exception de 350 hectares dans le Var, rachet\u00e9 en 2006 par Sacha Lichine.\",\"Circuit \u0153nologique priv\u00e9 depuis Nice ou Saint-Tropez vers La Motte avec chauffeur de luxe.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"pibarnon\",\"name\":\"\u26f0\ufe0f Ch\u00e2teau de Pibarnon\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-de-Pibarnon-Le-Balcon-de-la-Mediterranee-e1776679790795.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.7\",\"km\":\"152 km de Nice\",\"time\":\"2h08 de Nice\",\"desc\":\"Bandol AOC \u00b7 La Cadi\u00e8re-d'Azur \u00b7 300m \u00b7 Mourv\u00e8dre 100% \u00b7 garde\",\"accroche\":\"Un ch\u00e2teau mythique perch\u00e9 au sommet de l'AOC Bandol, produisant les vins de garde les plus \u00e9l\u00e9gants.\",\"seo\":[\"Domaine mythique en AOC Bandol perch\u00e9 \u00e0 300m sur La Cadi\u00e8re-d'Azur.\",\"Rouge de Bandol 100% Mourv\u00e8dre parmi les plus grands vins de garde fran\u00e7ais.\",\"Circuit \u0153nologique priv\u00e9 depuis Nice vers Bandol avec chauffeur de luxe.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"tempier\",\"name\":\"\ud83c\udf77 Domaine Tempier\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-Tempier-Les-Grands-Crus-de-Bandol-e1776679651800.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.7\",\"km\":\"158 km de Nice\",\"time\":\"2h12 de Nice\",\"desc\":\"Bandol AOC \u00b7 Plan-du-Castellet \u00b7 cuv\u00e9e Tourtine \u00b7 Robert Parker\",\"accroche\":\"La r\u00e9f\u00e9rence ultime de l'AOC Bandol, parmi les 50 plus grands vins de France reconnus \u00e0 l'\u00e9chelle mondiale.\",\"seo\":[\"Domaine de r\u00e9f\u00e9rence absolue en AOC Bandol, class\u00e9 parmi les plus grands vins de France.\",\"Rouge Bandol Mourv\u00e8dre de l\u00e9gende, r\u00e9f\u00e9rences Parker et Wine Spectator.\",\"Tour \u0153nologique priv\u00e9 depuis Nice vers Bandol avec chauffeur.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"lacoste\",\"name\":\"\ud83c\udfa8 Ch\u00e2teau La Coste\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-La-Coste-Fusion-du-Vin-de-lArt-et-de-lArchitecture-e1776679765672.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.6\",\"km\":\"178 km de Nice\",\"time\":\"2h28 de Nice\",\"desc\":\"Coteaux d'Aix \u00b7 Puy-Sainte-R\u00e9parade \u00b7 art contemporain \u00b7 Renzo Piano\",\"accroche\":\"Le domaine viticole le plus spectaculaire de Provence, o\u00f9 l'art contemporain mondial rencontre les grands vins.\",\"seo\":[\"Art contemporain sign\u00e9 Renzo Piano, Jean Nouvel et Tadao Ando int\u00e9gr\u00e9 au vignoble.\",\"Vins rouges, blancs et ros\u00e9s d'exception sur 200 hectares de Coteaux d'Aix.\",\"Circuit \u0153noculturel exclusif depuis Nice en v\u00e9hicule priv\u00e9 de luxe.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"lasource\",\"name\":\"\ud83d\udca7 Domaine de la Source\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-de-la-Source-Pepite-des-Vins-de-Nice-e1776679699487.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.0\",\"km\":\"20 km de Nice\",\"time\":\"25 min de Nice\",\"desc\":\"AOC Bellet \u00b7 Nice \u00b7 artisanal \u00b7 agriculture raisonn\u00e9e \u00b7 production confidentielle\",\"accroche\":\"Une adresse secr\u00e8te r\u00e9serv\u00e9e aux amateurs de vins rares et authentiques, loin des circuits touristiques.\",\"seo\":[\"Petit domaine artisanal en appellation Bellet AOC sur les hauteurs de Nice.\",\"Production confidentielle de grande qualit\u00e9 en agriculture raisonn\u00e9e.\",\"Vins blancs et ros\u00e9s d'une fra\u00eecheur et min\u00e9ralit\u00e9 remarquables \u2014 d\u00e9gustation sur rendez-vous.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\"],\"def\":\"1h\",\"reco\":\"1h\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"vinceline\",\"name\":\"\ud83c\udf3e Domaine de Vinceline\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-de-Vinceline-Tresors-Bio-du-Terroir-Provencal-e1776679682299.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.2\",\"km\":\"22 km de Nice\",\"time\":\"28 min de Nice\",\"desc\":\"AOC Bellet \u00b7 Nice \u00b7 familial \u00b7 blanc Rolle \u00b7 rouge Braquet \u00b7 ros\u00e9\",\"accroche\":\"L'authenticit\u00e9 familiale au c\u0153ur d'une appellation confidentielle parmi les plus rares de France.\",\"seo\":[\"Domaine familial en AOC Bellet sur les calcaires des collines ni\u00e7oises.\",\"Blanc de Rolle, rouge Braquet et ros\u00e9 typiques du style Bellet authentique.\",\"Visite intimiste et d\u00e9gustation depuis Nice ou Vence avec chauffeur priv\u00e9.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\"],\"def\":\"1h\",\"reco\":\"1h\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"fontdubroc\",\"name\":\"\ud83c\udf0a Ch\u00e2teau Font du Broc\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Font-du-Broc-La-Cathedrale-de-Pierre-e1776679771411.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.3\",\"km\":\"108 km de Nice\",\"time\":\"1h30 de Nice\",\"desc\":\"C\u00f4tes de Provence \u00b7 Le Luc \u00b7 argilo-calcaire \u00b7 ros\u00e9, blanc et rouge \u00e9l\u00e9gants\",\"accroche\":\"L'authenticit\u00e9 d'un vignoble varois familial sur l'un des terroirs argilo-calcaires les plus expressifs de Provence.\",\"seo\":[\"Vignoble familial en C\u00f4tes de Provence sur terroir argilo-calcaire au Luc-en-Provence.\",\"Ros\u00e9, Blanc et Rouge \u00e9l\u00e9gants refl\u00e9tant la typicit\u00e9 du terroir varois.\",\"Circuit \u0153nologique priv\u00e9 depuis la C\u00f4te d'Azur avec chauffeur de luxe.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"margui\",\"name\":\"\ud83c\udf3f Ch\u00e2teau Marg\u00fci\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Margui-LEcrin-de-Luxe-de-la-Provence-Verte-e1776679750101.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\u00bd\",\"score\":\"4.5\",\"km\":\"126 km de Nice\",\"time\":\"1h50 de Nice\",\"desc\":\"Coteaux Varois \u00b7 Ch\u00e2teauvert \u00b7 biodynamie Demeter \u00b7 vins nature purs\",\"accroche\":\"La quintessence de la viticulture biodynamique proven\u00e7ale, vins vivants d'une sinc\u00e9rit\u00e9 et puret\u00e9 remarquables.\",\"seo\":[\"Domaine certifi\u00e9 Demeter en biodynamie dans les Coteaux Varois \u00e0 Ch\u00e2teauvert.\",\"Vins nature et biodynamiques d'une rare puret\u00e9 produits sans intrants chimiques.\",\"Circuit \u0153notouristique vers les Coteaux Varois depuis Nice avec chauffeur.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"malherbe\",\"name\":\"\ud83c\udf32 Ch\u00e2teau Malherbe\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Malherbe-Entre-Vignes-et-Mediterranee-e1776679757811.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.2\",\"km\":\"133 km de Nice\",\"time\":\"1h52 de Nice\",\"desc\":\"C\u00f4tes de Provence \u00b7 Bormes-les-Mimosas \u00b7 massif des Maures \u00b7 production artisanale\",\"accroche\":\"L'\u00e2me sauvage et authentique du massif des Maures dans une production confidentielle et tr\u00e8s recherch\u00e9e.\",\"seo\":[\"Domaine artisanal en C\u00f4tes de Provence sur le massif des Maures \u00e0 Bormes-les-Mimosas.\",\"Rouge, Ros\u00e9 et Blanc d'une finesse et typicit\u00e9 mauresques remarquables.\",\"Tour privatif depuis Nice vers la C\u00f4te Varoise avec chauffeur de luxe.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"vignelaure\",\"name\":\"\ud83e\udd81 Ch\u00e2teau Vignelaure\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-Vignelaure-LAlliance-de-lArt-et-du-Vin-de-Garde.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.4\",\"km\":\"152 km de Nice\",\"time\":\"2h05 de Nice\",\"desc\":\"Coteaux d'Aix \u00b7 Rians \u00b7 pionnier 1970 \u00b7 rouge de garde \u00b7 Robert Parker\",\"accroche\":\"Le pr\u00e9curseur qui a r\u00e9volutionn\u00e9 la viticulture proven\u00e7ale, ouvrant la voie aux grands rouges de Provence.\",\"seo\":[\"Domaine pionnier en Coteaux d'Aix-en-Provence \u00e0 Rians depuis les ann\u00e9es 1970.\",\"Premier ch\u00e2teau proven\u00e7al \u00e0 produire des vins rouges de garde d'inspiration bordelaise.\",\"Excursion depuis la C\u00f4te d'Azur vers le Pays d'Aix-en-Provence avec chauffeur priv\u00e9.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"terredemistral\",\"name\":\"\ud83d\udca8 Domaine Terre de Mistral\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-Terre-de-Mistral-Soiree-Vigneronne-Authentique-e1776679638505.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.2\",\"km\":\"172 km de Nice\",\"time\":\"2h22 de Nice\",\"desc\":\"Coteaux d'Aix \u00b7 Puyloubier \u00b7 Sainte-Victoire \u00b7 biologique \u00b7 C\u00e9zanne\",\"accroche\":\"Sur les terres de C\u00e9zanne, un domaine biologique qui exprime avec sinc\u00e9rit\u00e9 l'identit\u00e9 profonde du terroir aixois.\",\"seo\":[\"Vignoble bio en Coteaux d'Aix \u00e0 Puyloubier, sur le terroir mythique de la Sainte-Victoire.\",\"Agriculture biologique certifi\u00e9e au pied du monument naturel immortalis\u00e9 par C\u00e9zanne.\",\"Excursion depuis Nice vers Aix-en-Provence et la Sainte-Victoire avec chauffeur.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"duseuil\",\"name\":\"\ud83c\udf1e Ch\u00e2teau du Seuil\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Chateau-du-Seuil-Art-de-Vivre-et-Gastronomie.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.3\",\"km\":\"190 km de Nice\",\"time\":\"2h38 de Nice\",\"desc\":\"Coteaux d'Aix-en-Provence \u00b7 biologique \u00b7 blancs, ros\u00e9s et rouges min\u00e9raux\",\"accroche\":\"La rigueur et la sinc\u00e9rit\u00e9 de la viticulture biologique au service des terroirs d'exception d'Aix-en-Provence.\",\"seo\":[\"Domaine certifi\u00e9 Agriculture Biologique dans les Coteaux d'Aix-en-Provence.\",\"Vins blancs, ros\u00e9s et rouges d'une rare min\u00e9ralit\u00e9 et belle fra\u00eecheur.\",\"Excursion depuis Nice vers le Pays d'Aix avec chauffeur priv\u00e9.\"],\"aoc\":null,\"durs\":[\"1h\",\"1h30\",\"2h\",\"3h\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"\"},{\"id\":\"hautecollines\",\"name\":\"\ud83c\udf3f Domaine des Hautes Collines - Georges Rasse\",\"image\":\"https:\/\/transponyx.com\/wp-content\/uploads\/Domaine-des-Hautes-Collines-Vin-sous-le-Soleil-de-lEsterel-e1776679674541.webp\",\"stars\":\"\u2605\u2605\u2605\u2605\",\"score\":\"4.1\",\"km\":\"28 km de Nice\",\"time\":\"32 min de Nice\",\"desc\":\"IGP Alpes-Maritimes \u00b7 Saint-Jeannet \u00b7 d\u00e9gustations guid\u00e9es \u00b7 pique-nique vigneron\",\"accroche\":\"Domaine familial nich\u00e9 au pied du Baou de Saint-Jeannet, proposant des exp\u00e9riences viticoles compl\u00e8tes avec vue sur les Alpes et la M\u00e9diterran\u00e9e.\",\"seo\":[\"Vignoble IGP Alpes-Maritimes \u00e0 Saint-Jeannet \u2014 terroir calcaire d'altitude, vins frais et min\u00e9raux.\",\"Formules d\u00e9gustation de 15\u20ac \u00e0 28\u20ac \u2014 jusqu'\u00e0 5 vins avec accords fromages et charcuterie.\",\"Balade vignoble + pique-nique, d\u00e9gustation priv\u00e9e 9 cuv\u00e9es \u2014 depuis Nice avec chauffeur priv\u00e9.\"],\"aoc\":null,\"durs\":[\"30mn\",\"1h\",\"1h30\",\"2h\",\"2h30\"],\"def\":\"1h30\",\"reco\":\"1h30\",\"special\":false,\"dataCat\":\"vignobles\",\"popup\":\"<div class=\\\"otc-info-popup\\\">\\n        <div class=\\\"otc-ip-head\\\"><div class=\\\"otc-ip-head-name\\\">\ud83c\udf3f Domaine des Hautes Collines<\/div><div class=\\\"otc-ip-head-aoc\\\">IGP Alpes-Maritimes \u00b7 Saint-Jeannet<\/div><\/div>\\n        <div class=\\\"otc-ip-body\\\">\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83d\udccd Contact & Horaires<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udcde<\/span><span class=\\\"otc-ip-val\\\">06 08 96 24 60<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udce7<\/span><span class=\\\"otc-ip-val\\\">vignoblestjeannet@gmail.com<\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udd52<\/span><span class=\\\"otc-ip-val\\\"><strong>Lun\u2013Sam<\/strong> 9h\u201312h \/ 14h30\u201319h<br>Dim. matin + visites sur r\u00e9servation<\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83c\udf77 Formules D\u00e9gustation<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83c\udf47<\/span><span class=\\\"otc-ip-val\\\"><strong>Standard<\/strong> \u2014 3 vins \u00b7 45 min <span class=\\\"otc-ip-price\\\">15 \u20ac<\/span><\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83e\uddc0<\/span><span class=\\\"otc-ip-val\\\"><strong>Gourmande<\/strong> \u2014 5 vins + fromages \u00b7 1h15 <span class=\\\"otc-ip-price\\\">25 \u20ac<\/span><\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83e\udd69<\/span><span class=\\\"otc-ip-val\\\"><strong>Terroir complet<\/strong> \u2014 5 vins + charcuterie\/fromages \u00b7 1h30 <span class=\\\"otc-ip-price\\\">28 \u20ac<\/span><\/span><\/div>\\n          <\/div>\\n          <div class=\\\"otc-ip-divider\\\"><\/div>\\n          <div class=\\\"otc-ip-section\\\">\\n            <div class=\\\"otc-ip-section-title\\\">\ud83c\udf3f Exp\u00e9riences<\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83e\uddfa<\/span><span class=\\\"otc-ip-val\\\"><strong>Balade + pique-nique<\/strong> \u00b7 2h <span class=\\\"otc-ip-price\\\">42 \u20ac\/pers.<\/span><\/span><\/div>\\n            <div class=\\\"otc-ip-row\\\"><span class=\\\"otc-ip-icon\\\">\ud83d\udd12<\/span><span class=\\\"otc-ip-val\\\"><strong>D\u00e9gustation priv\u00e9e<\/strong> \u00b7 2h30 \u00b7 9 cuv\u00e9es + repas <span class=\\\"otc-ip-price\\\">50 \u20ac\/pers.<\/span><\/span><\/div>\\n          <\/div>\\n        <\/div>\\n      <\/div>\"}];\nvar OTC_THEMES={\"villefranche\":[\"france\",\"village\",\"patrimoine\",\"nautique\"],\"capferrat\":[\"france\",\"village\",\"patrimoine\",\"nature\",\"nautique\",\"luxenuit\"],\"hautdecagnes\":[\"france\",\"village\",\"patrimoine\",\"musees\"],\"eze\":[\"france\",\"village\",\"patrimoine\",\"nature\"],\"fragonard\":[\"france\",\"bienetre\"],\"biot\":[\"france\",\"village\",\"patrimoine\",\"musees\",\"bienetre\"],\"antibes\":[\"france\",\"ville\",\"patrimoine\",\"musees\",\"nautique\"],\"roquebrune\":[\"france\",\"village\",\"patrimoine\"],\"mougins\":[\"france\",\"village\",\"musees\"],\"saintpaul\":[\"france\",\"village\",\"patrimoine\",\"musees\"],\"monaco\":[\"france\",\"ville\",\"patrimoine\",\"musees\",\"luxenuit\",\"nautique\"],\"mandelieu\":[\"france\",\"ville\",\"patrimoine\",\"nature\",\"nautique\"],\"vence\":[\"france\",\"ville\",\"patrimoine\",\"musees\"],\"montecarlo\":[\"france\",\"ville\",\"patrimoine\",\"luxenuit\"],\"tourrettes\":[\"france\",\"village\",\"patrimoine\",\"nature\"],\"valbonne\":[\"france\",\"village\",\"patrimoine\"],\"cannes\":[\"france\",\"ville\",\"nautique\",\"luxenuit\"],\"menton\":[\"france\",\"ville\",\"patrimoine\",\"nature\"],\"gourdon\":[\"france\",\"village\",\"nature\"],\"grasse\":[\"france\",\"ville\",\"patrimoine\",\"bienetre\"],\"fragonardgrasse\":[\"france\",\"bienetre\"],\"molinard\":[\"france\",\"bienetre\"],\"galimard\":[\"france\",\"bienetre\"],\"ventimiglia\":[\"italie\",\"ville\",\"patrimoine\",\"nature\"],\"bordighera\":[\"italie\",\"village\",\"patrimoine\",\"nature\"],\"dolceacqua\":[\"italie\",\"village\",\"patrimoine\"],\"sanremo\":[\"italie\",\"ville\",\"patrimoine\",\"luxenuit\",\"nautique\"],\"apricale\":[\"italie\",\"village\",\"patrimoine\"],\"imperia\":[\"italie\",\"ville\",\"patrimoine\",\"bienetre\"],\"dianomarina\":[\"italie\",\"ville\",\"nautique\"],\"laigueglia\":[\"italie\",\"village\",\"nautique\"],\"alassio\":[\"italie\",\"ville\",\"nautique\"],\"loano\":[\"italie\",\"ville\",\"patrimoine\",\"nautique\"],\"saintemaxime\":[\"france\",\"ville\",\"nautique\"],\"portgrimaud\":[\"france\",\"village\",\"nautique\"],\"sainttropez\":[\"france\",\"ville\",\"nautique\",\"luxenuit\",\"musees\"],\"bellet\":[\"france\",\"oenogastro\"],\"cremat\":[\"france\",\"oenogastro\",\"patrimoine\"],\"saintvincent\":[\"france\",\"oenogastro\",\"nature\"],\"lasource\":[\"france\",\"oenogastro\"],\"vinceline\":[\"france\",\"oenogastro\"],\"hautecollines\":[\"france\",\"oenogastro\"],\"saintmartin\":[\"france\",\"oenogastro\",\"patrimoine\"],\"dott\":[\"france\",\"oenogastro\"],\"sainteRoseline\":[\"france\",\"oenogastro\",\"patrimoine\"],\"roubine\":[\"france\",\"oenogastro\"],\"berne\":[\"france\",\"oenogastro\",\"luxenuit\"],\"peyrassol\":[\"france\",\"oenogastro\",\"patrimoine\",\"musees\"],\"minuty\":[\"france\",\"oenogastro\"],\"esclans\":[\"france\",\"oenogastro\"],\"margui\":[\"france\",\"oenogastro\"],\"fontdubroc\":[\"france\",\"oenogastro\"],\"malherbe\":[\"france\",\"oenogastro\",\"nature\"],\"vignelaure\":[\"france\",\"oenogastro\"],\"pibarnon\":[\"france\",\"oenogastro\",\"patrimoine\"],\"tempier\":[\"france\",\"oenogastro\"],\"terredemistral\":[\"france\",\"oenogastro\",\"nature\"],\"lacoste\":[\"france\",\"oenogastro\",\"musees\",\"patrimoine\"],\"duseuil\":[\"france\",\"oenogastro\"]};\nvar OTC_DEST_BY_ID={};\nOTC_DESTINATIONS.forEach(function(d){OTC_DEST_BY_ID[d.id]=d;});\n\nfunction otcRenderCard(d){\n  var durHtml='';\n  var durClass=d.special?' otc-durs-special':'';\n  for(var i=0;i<d.durs.length;i++){\n    var dv=d.durs[i];\n    var val=(typeof dv==='string')?dv:dv.val;\n    var label=(typeof dv==='string')?dv:dv.label;\n    var sel=(val===d.def)?' dsel':'';\n    durHtml+='<button class=\"otc-dur'+sel+'\" onclick=\"otcDur(event,\\''+d.id+'\\',\\''+val+'\\')\">'+label+'<\/button>';\n  }\n  var aocHtml=d.aoc?'<div class=\"otc-dcard-aoc\">'+d.aoc+'<\/div>':'';\n  var seoHtml='';\n  if(d.seo&&d.seo.length){\n    seoHtml='<div class=\"otc-dcard-seo\">';\n    for(var j=0;j<d.seo.length;j++){seoHtml+='<div class=\"otc-dcard-seo-line\">'+d.seo[j]+'<\/div>';}\n    seoHtml+='<\/div>';\n  }\n  var accrocheHtml=d.accroche?'<div class=\"otc-dcard-accroche\">'+d.accroche+'<\/div>':'';\n  \/* Store popup HTML in global map keyed by id *\/\n  if(d.popup){\n    if(!window.OTC_POPUP_HTML)window.OTC_POPUP_HTML={};\n    window.OTC_POPUP_HTML[d.id]=d.popup;\n  }\n  var popupHtml=d.popup?'<button class=\"otc-info-btn\" data-popup-id=\"'+d.id+'\" onclick=\"event.stopPropagation();otcShowInfoPopup(event,this)\" onmouseenter=\"otcShowInfoPopup(event,this)\" title=\"Plus d\\'informations\">\u24d8<\/button>':'';\n  var dataCatAttr=d.dataCat?' data-cat=\"'+d.dataCat+'\"':'';\n  return '<div class=\"otc-dcard\" id=\"dc-'+d.id+'\"'+dataCatAttr+' onclick=\"otcToggle(\\''+d.id+'\\')\">'\n    +'<div class=\"otc-dcard-left\">'\n      +'<div class=\"otc-dcard-img-wrap\">'\n        +'<img decoding=\"async\" class=\"otc-dcard-img\" src=\"'+d.image+'\" alt=\"'+d.name.replace(\/\"\/g,'&quot;')+'\" loading=\"lazy\"\/>'\n        +'<div class=\"otc-dcard-chk\">\u2713<\/div>'\n        +'<div class=\"otc-dcard-added\"><span>\u2713 Ajout\u00e9 !<\/span><\/div>'\n      +'<\/div>'\n      +'<div class=\"otc-dcard-meta\">'\n        +'<div class=\"otc-dcard-meta-rating\"><span class=\"otc-dcard-meta-stars\">'+d.stars+'<\/span><span class=\"otc-dcard-meta-score\">'+d.score+'<\/span><span class=\"otc-dcard-meta-google\">Google<\/span><\/div>'\n        +'<div class=\"otc-dcard-meta-row\"><span class=\"otc-dcard-meta-icon\">\ud83d\udccd<\/span>'+d.km+'<\/div>'\n        +'<div class=\"otc-dcard-meta-row\"><span class=\"otc-dcard-meta-icon\">\ud83d\udd50<\/span>'+d.time+'<\/div>'\n      +'<\/div>'\n    +'<\/div>'\n    +'<div class=\"otc-dcard-body\">'\n      +'<div class=\"otc-dcard-top\">'\n        +'<div class=\"otc-dcard-name\">'+d.name+'<\/div>'\n        +'<div class=\"otc-dcard-desc\">'+d.desc+'<\/div>'\n        +accrocheHtml+aocHtml+seoHtml\n      +'<\/div>'\n      +'<div class=\"otc-dur-zone\">'\n        +'<span class=\"otc-dur-lbl\">'+(d.special?'Choisissez votre formule':'Dur\u00e9e souhait\u00e9e')+'<\/span>'\n        +'<div class=\"otc-durs'+durClass+'\" id=\"durs-'+d.id+'\">'+durHtml+'<\/div>'\n        +'<div class=\"otc-dur-reco\">\u2605 Recommand\u00e9 : '+d.reco+'<\/div>'\n      +'<\/div>'\n      +popupHtml\n    +'<\/div>'\n  +'<\/div>';\n}\n\nfunction otcBuildAllCards(){\n  var grid=document.getElementById('otc-grid');\n  if(!grid)return;\n  var html='';\n  for(var i=0;i<OTC_DESTINATIONS.length;i++){html+=otcRenderCard(OTC_DESTINATIONS[i]);}\n  grid.innerHTML=html;\n}\n\n\/* Build immediately at script parse time *\/\notcBuildAllCards();\n\n\/* INIT *\/\notcGuide('non');\notcUpdate();\notcUpdateStepBadges();\n\n\/* PARALLAX *\/\n(function(){var hero=document.getElementById('otcHero'),bg=document.getElementById('otcHeroBg');if(!hero||!bg)return;function onScroll(){var scrollY=window.pageYOffset||document.documentElement.scrollTop;if(scrollY<hero.offsetHeight*2)bg.style.transform='translateY('+Math.round(scrollY*0.35)+'px)';}window.addEventListener('scroll',onScroll,{passive:true});})();\n\n<\/script>\n\n<script>\n\/* ============================================================\n   STEP GUARD + AUTOCOMPLETE SEARCH \u2014 clean separate block\n   ============================================================ *\/\n\n\/* -- Step definitions ---------------------------------------- *\/\nvar OTC_STEP_DEFS = [\n  {id:'veh', n:1, icon:'\ud83d\ude97', lbl:'S\u00e9lectionnez votre v\u00e9hicule',\n   check:function(){return otcFleetHasVehicles();},\n   go:function(){var e=document.querySelector('.otc-vehicle-section');if(e)e.scrollIntoView({behavior:'smooth',block:'center'});}},\n  {id:'dep', n:2, icon:'\ud83d\udccd', lbl:'Saisissez votre adresse de d\u00e9part',\n   check:function(){var i=document.getElementById('otc-depart');return !!(i&&i.value.trim().length>1);},\n   go:function(){var e=document.getElementById('otc-depart');if(e){e.scrollIntoView({behavior:'smooth',block:'center'});setTimeout(function(){e.focus();},400);}}},\n  {id:'gui', n:3, icon:'\ud83c\udf99\ufe0f', lbl:'Indiquez si vous souhaitez un guide',\n   check:function(){return true;},\n   go:function(){var e=document.querySelector('.otc-options-section');if(e)e.scrollIntoView({behavior:'smooth',block:'center'});}},\n  {id:'rst', n:4, icon:'\ud83c\udf7d\ufe0f', lbl:'Indiquez si vous souhaitez une pause repas',\n   check:function(){return true;},\n   go:function(){var e=document.querySelector('.otc-options-section');if(e)e.scrollIntoView({behavior:'smooth',block:'center'});}},\n  {id:'dst', n:5, icon:'\ud83d\uddfa\ufe0f', lbl:'S\u00e9lectionnez au moins une destination',\n   check:function(){return !!(otcOrder&&otcOrder.filter(function(x){return x!=='restaurant';}).length>0);},\n   go:function(){var e=document.getElementById('otc-grid');if(e)e.scrollIntoView({behavior:'smooth',block:'center'});}}\n];\n\nfunction otcStepOK(id){\n  var s=OTC_STEP_DEFS.filter(function(x){return x.id===id;})[0];\n  return s?s.check():false;\n}\n\n\/* -- Update step badge visuals ------------------------------- *\/\nfunction otcRefreshStepBadges(){\n  OTC_STEP_DEFS.forEach(function(step){\n    var el=document.getElementById('snum'+step.n);\n    if(!el)return;\n    el.className='otc-step-num'+(step.check()?' done':'');\n  });\n}\n\n\/* -- Guard popup --------------------------------------------- *\/\nvar OTC_GUARD_MSGS = {\n  dest: {icon:'\ud83d\uddfa\ufe0f', title:'Avant de choisir vos destinations\u2026', sub:\"Compl\u00e9tez ces \u00e9tapes d'abord :\"},\n  guide:{icon:'\ud83c\udf99\ufe0f', title:\"Avant d'ajouter un guide\u2026\",           sub:\"Compl\u00e9tez cette \u00e9tape d'abord :\"},\n  resto:{icon:'\ud83c\udf7d\ufe0f', title:\"Avant d'ajouter une pause repas\u2026\",    sub:\"Compl\u00e9tez cette \u00e9tape d'abord :\"},\n  form: {icon:'\ud83d\udccb', title:\"Avant d'envoyer votre demande\u2026\",       sub:\"Compl\u00e9tez ces \u00e9tapes d'abord :\"}\n};\n\nfunction otcShowGuard(requiredIds, ctx){\n  var missing = requiredIds.filter(function(id){return !otcStepOK(id);});\n  if(!missing.length) return false; \/* nothing missing *\/\n  var overlay=document.getElementById('otcGuardOverlay'); if(!overlay)return true;\n  var msg=OTC_GUARD_MSGS[ctx]||OTC_GUARD_MSGS.dest;\n  var iEl=document.getElementById('otcGuardIcon');\n  var tEl=document.getElementById('otcGuardTitle');\n  var sEl=document.getElementById('otcGuardSubtitle');\n  var lEl=document.getElementById('otcGuardSteps');\n  if(iEl)iEl.textContent=msg.icon;\n  if(tEl)tEl.textContent=msg.title;\n  if(sEl)sEl.textContent=msg.sub;\n  if(lEl){\n    lEl.innerHTML='';\n    requiredIds.forEach(function(id){\n      var step=OTC_STEP_DEFS.filter(function(x){return x.id===id;})[0]; if(!step)return;\n      var done=step.check();\n      var li=document.createElement('li');\n      li.className=done?'done':'';\n      li.innerHTML='<span class=\"otc-gs-num\">'+(done?'\u2713':step.n)+'<\/span>'\n        +'<span style=\"font-size:16px\">'+step.icon+'<\/span>'\n        +'<span>'+step.lbl+'<\/span>';\n      lEl.appendChild(li);\n    });\n  }\n  \/* Store first missing step for scroll on close *\/\n  var firstMissing=OTC_STEP_DEFS.filter(function(s){return missing.indexOf(s.id)>=0;})[0];\n  overlay._goto=firstMissing?firstMissing.go:null;\n  overlay.classList.add('show');\n  return true; \/* was blocked *\/\n}\n\n\n\/* -- PATCH existing functions with guards -------------------- *\/\n(function(){\n  \/* Patch otcToggle *\/\n  var _origToggle = window.otcToggle;\n  window.otcToggle = function(id){\n    if(typeof otcState !== 'undefined' && otcState[id] === undefined){\n      if(otcShowGuard(['veh','dep'],'dest')) return;\n    }\n    _origToggle(id);\n    otcRefreshStepBadges();\n  };\n\n  \/* Patch otcSelectVeh *\/\n  var _origSelectVeh = window.otcSelectVeh;\n  window.otcSelectVeh = function(id){\n    _origSelectVeh(id);\n    otcRefreshStepBadges();\n  };\n\n  \/* Patch otcGuide *\/\n  var _origGuide = window.otcGuide;\n  window.otcGuide = function(choice){\n    if(choice==='oui' && otcShowGuard(['veh'],'guide')) return;\n    _origGuide(choice);\n    otcRefreshStepBadges();\n  };\n\n  \/* Patch otcRestaurant *\/\n  var _origResto = window.otcRestaurant;\n  window.otcRestaurant = function(choice){\n    if(choice==='oui' && otcShowGuard(['veh'],'resto')) return;\n    _origResto(choice);\n    otcRefreshStepBadges();\n  };\n\n  \/* Patch otcSubmit *\/\n  var _origSubmit = window.otcSubmit;\n  window.otcSubmit = function(){\n    if(otcShowGuard(['veh','dep','dst'],'form')) return;\n    _origSubmit();\n  };\n\n  \/* Patch otcUpdate to refresh badges on every update *\/\n  var _origUpdate = window.otcUpdate;\n  window.otcUpdate = function(){\n    _origUpdate();\n    otcRefreshStepBadges();\n  };\n\n  \/* Hook depart input for step 2 badge *\/\n  setTimeout(function(){\n    var dep=document.getElementById('otc-depart');\n    if(dep){\n      dep.addEventListener('input', function(){otcRefreshStepBadges();});\n      dep.addEventListener('change', function(){otcRefreshStepBadges();});\n    }\n  }, 800);\n\n  \/* Initial badge refresh *\/\n  setTimeout(otcRefreshStepBadges, 300);\n})();\n\n\/* -- AUTOCOMPLETE SEARCH ------------------------------------- *\/\nvar otcAcQuery = '';\nvar otcAcFocused = false;\n\nfunction otcAcInput(val){\n  otcAcQuery = (val||'').trim().toLowerCase();\n  var clearBtn=document.getElementById('otcSearchClear');\n  if(clearBtn) clearBtn.style.display = otcAcQuery ? 'block' : 'none';\n  otcAcRender();\n  \/* Also filter the visible cards *\/\n  otcFilterCards(otcAcQuery);\n}\n\nfunction otcAcFocus(){\n  otcAcFocused=true;\n  var box=document.getElementById('otcSearchBox');\n  if(box) box.style.borderColor='#083D35';\n  if(otcAcQuery) otcAcRender();\n}\n\nfunction otcAcBlur(){\n  otcAcFocused=false;\n  var box=document.getElementById('otcSearchBox');\n  if(box) box.style.borderColor='#d8d0c4';\n  var dd=document.getElementById('otcAcDropdown');\n  if(dd) dd.style.display='none';\n}\n\nfunction otcAcClear(){\n  var inp=document.getElementById('otcDestSearch');\n  if(inp){inp.value='';otcAcQuery='';}\n  var clearBtn=document.getElementById('otcSearchClear');\n  if(clearBtn) clearBtn.style.display='none';\n  var dd=document.getElementById('otcAcDropdown');\n  if(dd) dd.style.display='none';\n  otcFilterCards('');\n  if(inp) inp.focus();\n}\n\nfunction otcAcRender(){\n  var dd=document.getElementById('otcAcDropdown'); if(!dd)return;\n  if(!otcAcQuery){dd.style.display='none';return;}\n  var q=otcAcQuery;\n  var qn=otcNormalize(q);\n  \/* Build matches *\/\n  var results=[];\n  Object.keys(OTC_NAMES).forEach(function(id){\n    if(id==='restaurant')return;\n    var name=otcNormalize(OTC_NAMES[id]||'');\n    var desc=otcNormalize(OTC_DESCS[id]||'');\n    var region=otcNormalize(OTC_REGIONS[id]||'');\n    if(name.includes(qn)||desc.includes(qn)||region.includes(qn)){\n      results.push(id);\n    }\n  });\n  if(!results.length){dd.style.display='none';return;}\n  \/* Highlight matching chars in name *\/\n  function highlight(str){\n    var lower=str.toLowerCase(); var out=''; var i=0;\n    while(i<str.length){\n      var hit=lower.indexOf(q,i);\n      if(hit<0){out+=str.slice(i);break;}\n      out+=str.slice(i,hit)+'<em>'+str.slice(hit,hit+q.length)+'<\/em>';\n      i=hit+q.length;\n    }\n    return out;\n  }\n  var html='';\n  results.slice(0,8).forEach(function(id){\n    var img=OTC_IMGS[id]||'';\n    var name=OTC_NAMES[id]||id;\n    var region=OTC_REGIONS[id]||'';\n    var added=typeof otcState!=='undefined'&&otcState[id]!==undefined;\n    html+='<div class=\"otc-ac-item\" onclick=\"otcAcPick(\\''+id+'\\')\">'\n      +'<img decoding=\"async\" class=\"otc-ac-item-img\" src=\"'+img+'\" alt=\"\" loading=\"lazy\"\/>'\n      +'<div class=\"otc-ac-item-info\">'\n        +'<div class=\"otc-ac-item-name\">'+highlight(name)+'<\/div>'\n        +'<div class=\"otc-ac-item-region\">'+region+'<\/div>'\n      +'<\/div>'\n      +(added?'<span class=\"otc-ac-item-added\">\u2713 Ajout\u00e9<\/span>':'')\n      +'<\/div>';\n  });\n  dd.innerHTML=html;\n  dd.style.display='block';\n}\n\nfunction otcAcPick(id){\n  \/* Scroll to card and flash it *\/\n  var card=document.getElementById('dc-'+id);\n  if(card){\n    card.scrollIntoView({behavior:'smooth',block:'center'});\n    card.style.transition='box-shadow .2s';\n    card.style.boxShadow='0 0 0 3px #D4AF37, 0 8px 30px rgba(8,61,53,.2)';\n    setTimeout(function(){card.style.boxShadow='';},1400);\n  }\n  \/* Clear search *\/\n  otcAcClear();\n}\n\nfunction otcFilterCards(q){\n  \/* D\u00e9finition finale dans le bloc de filtres th\u00e9matiques en haut du fichier \u2014\n     on re-d\u00e9clenche ici si elle existe d\u00e9j\u00e0, sinon fallback simple *\/\n  if(typeof otcActiveFilter!=='undefined'){\n    \/* red\u00e9l\u00e9gation : la vraie fonction est plus haut, mais comme JS hoist\n       les d\u00e9clarations, on ne peut pas re-r\u00e9f\u00e9rencer. Donc cette version\n       respecte aussi otcActiveFilter. *\/\n  }\n  var cards=document.querySelectorAll('#otc-grid .otc-dcard');\n  var noRes=document.getElementById('otcNoResult');\n  var shown=0;\n  var activeFilter=(typeof otcActiveFilter!=='undefined')?otcActiveFilter:'all';\n  cards.forEach(function(card){\n    var id=card.id.replace('dc-','');\n    var themes=(typeof OTC_THEMES!=='undefined'&&OTC_THEMES[id])||[];\n    var catOk=(activeFilter==='all')||(themes.indexOf(activeFilter)>=0);\n    if(!q){\n      card.style.display=catOk?'':'none';\n      if(catOk)shown++;\n      return;\n    }\n    var name=otcNormalize(OTC_NAMES[id]||'');\n    var desc=otcNormalize(OTC_DESCS[id]||'');\n    var region=otcNormalize(OTC_REGIONS[id]||'');\n    var qn=otcNormalize(q);\n    var match=(name.indexOf(qn)>=0||desc.indexOf(qn)>=0||region.indexOf(qn)>=0)&&catOk;\n    card.style.display=match?'':'none';\n    if(match)shown++;\n  });\n  if(noRes) noRes.style.display=(shown===0&&q)?'block':'none';\n}\n\n\/* -- POPUP DOMAINE -- conteneur global unique ---- *\/\n(function(){\n  \/* Create the single global popup container *\/\n  var gPop = document.getElementById('otc-info-popup-global');\n  if(!gPop){\n    gPop = document.createElement('div');\n    gPop.id = 'otc-info-popup-global';\n    document.body.appendChild(gPop);\n  }\n\n  var hideTimer = null;\n  var activeId = null;   \/* id of currently shown popup *\/\n\n  window.otcShowInfoPopup = function(e, btn){\n    e.stopPropagation();\n    var id = btn.getAttribute('data-popup-id');\n    if(!id || !window.OTC_POPUP_HTML || !window.OTC_POPUP_HTML[id]) return;\n\n    clearTimeout(hideTimer);\n\n    \/* Inject content if different *\/\n    if(activeId !== id){\n      gPop.innerHTML = window.OTC_POPUP_HTML[id];\n      activeId = id;\n    }\n\n    \/* Temporarily show off-screen to measure *\/\n    gPop.style.visibility = 'hidden';\n    gPop.style.display = 'block';\n    gPop.classList.remove('vis','arrow-top','arrow-bottom');\n\n    var pw = gPop.offsetWidth  || 280;\n    var ph = gPop.offsetHeight || 200;\n    var r  = btn.getBoundingClientRect();\n    var vw = window.innerWidth;\n    var vh = window.innerHeight;\n    var GAP = 8;\n\n    \/* Horizontal: prefer aligning left edge of popup to btn centre *\/\n    var left = r.left + r.width\/2 - pw\/2;\n    if(left + pw > vw - GAP) left = vw - pw - GAP;\n    if(left < GAP) left = GAP;\n\n    \/* Arrow offset relative to popup left *\/\n    var arrowX = Math.min(Math.max(r.left + r.width\/2 - left, 14), pw - 14);\n\n    \/* Vertical: prefer above button *\/\n    var spaceAbove = r.top - GAP;\n    var spaceBelow = vh - r.bottom - GAP;\n    var top, arrowDir;\n\n    if(spaceAbove >= ph + GAP){\n      top = r.top - ph - GAP;\n      arrowDir = 'arrow-bottom';\n    } else if(spaceBelow >= ph + GAP){\n      top = r.bottom + GAP;\n      arrowDir = 'arrow-top';\n    } else {\n      \/* Neither fits perfectly \u2014 put wherever there's more space *\/\n      if(spaceAbove >= spaceBelow){\n        top = Math.max(GAP, r.top - ph - GAP);\n        arrowDir = 'arrow-bottom';\n      } else {\n        top = r.bottom + GAP;\n        arrowDir = 'arrow-top';\n      }\n    }\n\n    gPop.style.left = left + 'px';\n    gPop.style.top  = top  + 'px';\n    gPop.style.setProperty('--aw', arrowX + 'px');\n    gPop.classList.add(arrowDir);\n    gPop.style.visibility = '';\n    gPop.classList.add('vis');\n  };\n\n  function hidePopup(){\n    hideTimer = setTimeout(function(){\n      gPop.classList.remove('vis','arrow-top','arrow-bottom');\n      activeId = null;\n    }, 200);\n  }\n\n  \/* Keep open while hovering the popup itself *\/\n  gPop.addEventListener('mouseenter', function(){ clearTimeout(hideTimer); });\n  gPop.addEventListener('mouseleave', hidePopup);\n\n  \/* Hide when leaving btn and not entering popup *\/\n  document.addEventListener('mouseleave', function(e){\n    var btn = e.target.closest ? e.target.closest('.otc-info-btn') : null;\n    if(btn){\n      var rel = e.relatedTarget;\n      if(rel && (rel === gPop || gPop.contains(rel))) return;\n      hidePopup();\n    }\n  }, true);\n\n  \/* Click outside to close *\/\n  document.addEventListener('click', function(e){\n    if(!e.target.closest('.otc-info-btn') && e.target !== gPop && !gPop.contains(e.target)){\n      gPop.classList.remove('vis','arrow-top','arrow-bottom');\n      activeId = null;\n    }\n  });\n\n  \/* Touch support: tap btn to toggle *\/\n  document.addEventListener('touchstart', function(e){\n    var btn = e.target.closest ? e.target.closest('.otc-info-btn') : null;\n    if(btn){ e.preventDefault(); window.otcShowInfoPopup(e.touches[0]||e, btn); return; }\n    if(e.target !== gPop && !gPop.contains(e.target)){\n      gPop.classList.remove('vis','arrow-top','arrow-bottom');\n      activeId = null;\n    }\n  }, {passive:false});\n})();\n\n\n\/* -- TRANSITS VIGNOBLES SUPPL\u00c9MENTAIRES ------- *\/\nvar OTC_TRANSIT_WINE_EXTRA={\n  'hautecollines|saintmartin':105,'saintmartin|hautecollines':105,\n  'hautecollines|dott':105,'dott|hautecollines':105,\n  'hautecollines|sainteRoseline':107,'sainteRoseline|hautecollines':107,\n  'hautecollines|roubine':112,'roubine|hautecollines':112,\n  'hautecollines|berne':115,'berne|hautecollines':115,\n  'hautecollines|fontdubroc':115,'fontdubroc|hautecollines':115,\n  'hautecollines|peyrassol':125,'peyrassol|hautecollines':125,\n  'hautecollines|minuty':130,'minuty|hautecollines':130,\n  'hautecollines|margui':135,'margui|hautecollines':135,\n  'hautecollines|malherbe':140,'malherbe|hautecollines':140,\n  'hautecollines|vignelaure':150,'vignelaure|hautecollines':150,\n  'hautecollines|pibarnon':155,'pibarnon|hautecollines':155,\n  'hautecollines|tempier':160,'tempier|hautecollines':160,\n  'hautecollines|terredemistral':170,'terredemistral|hautecollines':170,\n  'hautecollines|lacoste':175,'lacoste|hautecollines':175,\n  'hautecollines|duseuil':185,'duseuil|hautecollines':185,\n  'rasse|saintmartin':108,'saintmartin|rasse':108,\n  'bellet|saintmartin':92,'saintmartin|bellet':92,\n  'cremat|saintmartin':90,'saintmartin|cremat':90,\n  'saintvincent|saintmartin':95,'saintmartin|saintvincent':95,\n  'lasource|saintmartin':95,'saintmartin|lasource':95,\n  'vinceline|saintmartin':98,'saintmartin|vinceline':98,\n  'saintmartin|dott':15,'dott|saintmartin':15,\n  'saintmartin|sainteRoseline':18,'sainteRoseline|saintmartin':18,\n  'saintmartin|roubine':22,'roubine|saintmartin':22,\n  'saintmartin|berne':25,'berne|saintmartin':25,\n  'saintmartin|fontdubroc':28,'fontdubroc|saintmartin':28,\n  'saintmartin|peyrassol':35,'peyrassol|saintmartin':35,\n  'saintmartin|minuty':30,'minuty|saintmartin':30,\n  'saintmartin|margui':38,'margui|saintmartin':38,\n  'saintmartin|malherbe':42,'malherbe|saintmartin':42,\n  'saintmartin|vignelaure':50,'vignelaure|saintmartin':50,\n  'saintmartin|pibarnon':75,'pibarnon|saintmartin':75,\n  'saintmartin|tempier':78,'tempier|saintmartin':78,\n  'saintmartin|terredemistral':72,'terredemistral|saintmartin':72,\n  'saintmartin|lacoste':78,'lacoste|saintmartin':78,\n  'saintmartin|duseuil':82,'duseuil|saintmartin':82\n};\n\n\/* OTC_TRANSIT_WINE_EXTRA handled inside otcBetween directly *\/\n\n<\/script>\n\n<script>\n\/* ============================================================\n   FIX D\u00c9FINITIF \u2014 Autocomplete hors-\u00e9cran\n   Le dropdown existe (5 items confirm\u00e9s) mais Google le place\n   \u00e0 top:0\/left:0 \u00e0 cause du transform:translateX(-50%) sur .otc\n   Ce script injecte le CSS + repositionne en temps r\u00e9el\n   ============================================================ *\/\n(function(){\n\n  \/* 1. Injecter le CSS directement (bypass cache WordPress) *\/\n  var st = document.createElement('style');\n  st.innerHTML = [\n    '.pac-container{',\n    '  position:fixed!important;',\n    '  z-index:9999999!important;',\n    '  margin-top:0!important;',\n    '}'\n  ].join('');\n  document.head.appendChild(st);\n\n  \/* 2. Repositionner le pac-container en coordonn\u00e9es viewport *\/\n  function reposAll(){\n    var active = document.activeElement;\n    var inp = (active && (active.id==='otc-depart'||active.id==='otc-dropoff'))\n              ? active\n              : null;\n    if(!inp) return;\n\n    var rect = inp.getBoundingClientRect();\n    document.querySelectorAll('.pac-container').forEach(function(pac){\n      pac.style.setProperty('top',   (rect.bottom + 2) + 'px', 'important');\n      pac.style.setProperty('left',  rect.left + 'px',          'important');\n      pac.style.setProperty('width', rect.width + 'px',         'important');\n    });\n  }\n\n  \/* 3. Lancer le repositionnement \u00e0 chaque frappe sur les champs *\/\n  function hookInput(id){\n    var inp = document.getElementById(id);\n    if(!inp) return;\n\n    \/* Focus : d\u00e9marre polling 100ms *\/\n    var timer;\n    inp.addEventListener('focus', function(){\n      timer = setInterval(reposAll, 100);\n      reposAll();\n    });\n\n    \/* Blur : stoppe le polling *\/\n    inp.addEventListener('blur', function(){\n      clearInterval(timer);\n    });\n\n    \/* Chaque touche : force reposition imm\u00e9diate *\/\n    inp.addEventListener('input', reposAll);\n    inp.addEventListener('keydown', reposAll);\n  }\n\n  \/* Hook d\u00e8s que le DOM est pr\u00eat *\/\n  function setup(){\n    hookInput('otc-depart');\n    hookInput('otc-dropoff');\n  }\n\n  if(document.readyState === 'loading'){\n    document.addEventListener('DOMContentLoaded', setup);\n  } else {\n    setup();\n  }\n\n  \/* Fallback : re-hook 1s apr\u00e8s (si Divi reconstruit le DOM) *\/\n  setTimeout(setup, 1000);\n\n})();\n<\/script><\/div><\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Configurateur d&rsquo;excursion unique sur la C\u00f4te d&rsquo;Azur : composez librement votre tour priv\u00e9 parmi 14 sites embl\u00e9matiques &#8211; Monaco, Cannes, Eze Village, Menton, Saint-Paul-de-Vence, Grasse et bien plus. Van Mercedes-Benz Classe V Noir privatis\u00e9, chauffeur-guide anglophone local, prise en charge \u00e0 votre h\u00f4tel. Prix calcul\u00e9 en temps r\u00e9el selon votre itin\u00e9raire. Annulation gratuite 24h avant. D\u00e8s 60 \u20ac\/heure.<\/p>","protected":false},"author":1,"featured_media":221105,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-221256","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tour Priv\u00e9 Sur Mesure C\u00f4te d&#039;Azur | \u00c0 la Carte -TranspOnyx<\/title>\n<meta name=\"description\" content=\"Tour priv\u00e9 sur mesure sur la C\u00f4te d&#039;Azur : composez votre itin\u00e9raire parmi 14 sites embl\u00e9matiques. Mercedes Classe V \u00b7 Chauffeur-guide\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/transponyx.com\/en\/tour-prive-sur-mesure-cote-azur\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tour Priv\u00e9 Sur Mesure C\u00f4te d&#039;Azur | \u00c0 la Carte -TranspOnyx\" \/>\n<meta property=\"og:description\" content=\"Tour priv\u00e9 sur mesure sur la C\u00f4te d&#039;Azur : composez votre itin\u00e9raire parmi 14 sites embl\u00e9matiques. Mercedes Classe V \u00b7 Chauffeur-guide\" \/>\n<meta property=\"og:url\" content=\"https:\/\/transponyx.com\/en\/tour-prive-sur-mesure-cote-azur\/\" \/>\n<meta property=\"og:site_name\" content=\"TranspOnyx - Onyx Transfers\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/TranspOnyx\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-27T16:45:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/transponyx.com\/wp-content\/uploads\/800-VILLEFRANCHE2-e1776369310569.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"509\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@TranspOnyx\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/transponyx.com\\\/tour-prive-sur-mesure-cote-azur\\\/\",\"url\":\"https:\\\/\\\/transponyx.com\\\/tour-prive-sur-mesure-cote-azur\\\/\",\"name\":\"Tour Priv\u00e9 Sur Mesure C\u00f4te d'Azur | \u00c0 la Carte -TranspOnyx\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/transponyx.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/transponyx.com\\\/tour-prive-sur-mesure-cote-azur\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/transponyx.com\\\/tour-prive-sur-mesure-cote-azur\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/transponyx.com\\\/wp-content\\\/uploads\\\/800-VILLEFRANCHE2-e1776369310569.webp\",\"datePublished\":\"2026-04-01T20:32:20+00:00\",\"dateModified\":\"2026-04-27T16:45:24+00:00\",\"description\":\"Tour priv\u00e9 sur mesure sur la C\u00f4te d'Azur : composez votre itin\u00e9raire parmi 14 sites embl\u00e9matiques. Mercedes Classe V \u00b7 Chauffeur-guide\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/transponyx.com\\\/tour-prive-sur-mesure-cote-azur\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/transponyx.com\\\/tour-prive-sur-mesure-cote-azur\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/transponyx.com\\\/tour-prive-sur-mesure-cote-azur\\\/#primaryimage\",\"url\":\"https:\\\/\\\/transponyx.com\\\/wp-content\\\/uploads\\\/800-VILLEFRANCHE2-e1776369310569.webp\",\"contentUrl\":\"https:\\\/\\\/transponyx.com\\\/wp-content\\\/uploads\\\/800-VILLEFRANCHE2-e1776369310569.webp\",\"width\":800,\"height\":509,\"caption\":\"Vue panoramique sur la magnifique baie de Villefranche-sur-Mer depuis une limousine TranspOnyx.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/transponyx.com\\\/tour-prive-sur-mesure-cote-azur\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/transponyx.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TALC &#8211; Tours \u00e0 la Carte &#8211; Composez Votre Excursion Priv\u00e9e sur la C\u00f4te d&rsquo;Azur &#8211; Onyx Tours\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/transponyx.com\\\/#website\",\"url\":\"https:\\\/\\\/transponyx.com\\\/\",\"name\":\"TranspOnyx\",\"description\":\"Chauffeur Services and Much More...\",\"publisher\":{\"@id\":\"https:\\\/\\\/transponyx.com\\\/#organization\"},\"alternateName\":\"TranspOnyx\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/transponyx.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/transponyx.com\\\/#organization\",\"name\":\"TranspOnyx\",\"url\":\"https:\\\/\\\/transponyx.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/transponyx.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/transponyx.com\\\/wp-content\\\/uploads\\\/logo-onyx-transfers-transponyx-service-chauffeur-prive-nice-webp-squoosh-e1774093035899.webp\",\"contentUrl\":\"https:\\\/\\\/transponyx.com\\\/wp-content\\\/uploads\\\/logo-onyx-transfers-transponyx-service-chauffeur-prive-nice-webp-squoosh-e1774093035899.webp\",\"width\":252,\"height\":114,\"caption\":\"TranspOnyx\"},\"image\":{\"@id\":\"https:\\\/\\\/transponyx.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/TranspOnyx\\\/\",\"https:\\\/\\\/x.com\\\/TranspOnyx\",\"https:\\\/\\\/www.instagram.com\\\/transponyx\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/transponyx-transfers\\\/?viewAsMember=true\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tour Priv\u00e9 Sur Mesure C\u00f4te d'Azur | \u00c0 la Carte -TranspOnyx","description":"Tour priv\u00e9 sur mesure sur la C\u00f4te d'Azur : composez votre itin\u00e9raire parmi 14 sites embl\u00e9matiques. Mercedes Classe V \u00b7 Chauffeur-guide","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/transponyx.com\/en\/tour-prive-sur-mesure-cote-azur\/","og_locale":"en_GB","og_type":"article","og_title":"Tour Priv\u00e9 Sur Mesure C\u00f4te d'Azur | \u00c0 la Carte -TranspOnyx","og_description":"Tour priv\u00e9 sur mesure sur la C\u00f4te d'Azur : composez votre itin\u00e9raire parmi 14 sites embl\u00e9matiques. Mercedes Classe V \u00b7 Chauffeur-guide","og_url":"https:\/\/transponyx.com\/en\/tour-prive-sur-mesure-cote-azur\/","og_site_name":"TranspOnyx - Onyx Transfers","article_publisher":"https:\/\/www.facebook.com\/TranspOnyx\/","article_modified_time":"2026-04-27T16:45:24+00:00","og_image":[{"width":800,"height":509,"url":"https:\/\/transponyx.com\/wp-content\/uploads\/800-VILLEFRANCHE2-e1776369310569.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_site":"@TranspOnyx","twitter_misc":{"Estimated reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/transponyx.com\/tour-prive-sur-mesure-cote-azur\/","url":"https:\/\/transponyx.com\/tour-prive-sur-mesure-cote-azur\/","name":"Tour Priv\u00e9 Sur Mesure C\u00f4te d'Azur | \u00c0 la Carte -TranspOnyx","isPartOf":{"@id":"https:\/\/transponyx.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/transponyx.com\/tour-prive-sur-mesure-cote-azur\/#primaryimage"},"image":{"@id":"https:\/\/transponyx.com\/tour-prive-sur-mesure-cote-azur\/#primaryimage"},"thumbnailUrl":"https:\/\/transponyx.com\/wp-content\/uploads\/800-VILLEFRANCHE2-e1776369310569.webp","datePublished":"2026-04-01T20:32:20+00:00","dateModified":"2026-04-27T16:45:24+00:00","description":"Tour priv\u00e9 sur mesure sur la C\u00f4te d'Azur : composez votre itin\u00e9raire parmi 14 sites embl\u00e9matiques. Mercedes Classe V \u00b7 Chauffeur-guide","breadcrumb":{"@id":"https:\/\/transponyx.com\/tour-prive-sur-mesure-cote-azur\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/transponyx.com\/tour-prive-sur-mesure-cote-azur\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/transponyx.com\/tour-prive-sur-mesure-cote-azur\/#primaryimage","url":"https:\/\/transponyx.com\/wp-content\/uploads\/800-VILLEFRANCHE2-e1776369310569.webp","contentUrl":"https:\/\/transponyx.com\/wp-content\/uploads\/800-VILLEFRANCHE2-e1776369310569.webp","width":800,"height":509,"caption":"Vue panoramique sur la magnifique baie de Villefranche-sur-Mer depuis une limousine TranspOnyx."},{"@type":"BreadcrumbList","@id":"https:\/\/transponyx.com\/tour-prive-sur-mesure-cote-azur\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/transponyx.com\/"},{"@type":"ListItem","position":2,"name":"TALC &#8211; Tours \u00e0 la Carte &#8211; Composez Votre Excursion Priv\u00e9e sur la C\u00f4te d&rsquo;Azur &#8211; Onyx Tours"}]},{"@type":"WebSite","@id":"https:\/\/transponyx.com\/#website","url":"https:\/\/transponyx.com\/","name":"TranspOnyx","description":"Driver Services and Much More...","publisher":{"@id":"https:\/\/transponyx.com\/#organization"},"alternateName":"TranspOnyx","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/transponyx.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/transponyx.com\/#organization","name":"TranspOnyx","url":"https:\/\/transponyx.com\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/transponyx.com\/#\/schema\/logo\/image\/","url":"https:\/\/transponyx.com\/wp-content\/uploads\/logo-onyx-transfers-transponyx-service-chauffeur-prive-nice-webp-squoosh-e1774093035899.webp","contentUrl":"https:\/\/transponyx.com\/wp-content\/uploads\/logo-onyx-transfers-transponyx-service-chauffeur-prive-nice-webp-squoosh-e1774093035899.webp","width":252,"height":114,"caption":"TranspOnyx"},"image":{"@id":"https:\/\/transponyx.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/TranspOnyx\/","https:\/\/x.com\/TranspOnyx","https:\/\/www.instagram.com\/transponyx","https:\/\/www.linkedin.com\/company\/transponyx-transfers\/?viewAsMember=true"]}]}},"_links":{"self":[{"href":"https:\/\/transponyx.com\/en\/wp-json\/wp\/v2\/pages\/221256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/transponyx.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/transponyx.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/transponyx.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/transponyx.com\/en\/wp-json\/wp\/v2\/comments?post=221256"}],"version-history":[{"count":65,"href":"https:\/\/transponyx.com\/en\/wp-json\/wp\/v2\/pages\/221256\/revisions"}],"predecessor-version":[{"id":222098,"href":"https:\/\/transponyx.com\/en\/wp-json\/wp\/v2\/pages\/221256\/revisions\/222098"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/transponyx.com\/en\/wp-json\/wp\/v2\/media\/221105"}],"wp:attachment":[{"href":"https:\/\/transponyx.com\/en\/wp-json\/wp\/v2\/media?parent=221256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}