{"id":44227248,"date":"2026-09-14T11:20:17","date_gmt":"2026-09-14T09:20:17","guid":{"rendered":"https:\/\/speechi.com\/showrooms\/"},"modified":"2026-10-13T09:40:35","modified_gmt":"2026-10-13T07:40:35","slug":"showrooms","status":"publish","type":"page","link":"https:\/\/speechi.com\/fr\/showrooms\/","title":{"rendered":"showrooms"},"content":{"rendered":"<p>[et_pb_section fb_built=\u00a0\u00bb1&Prime; _builder_version=\u00a0\u00bb4.27.4&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb][et_pb_row _builder_version=\u00a0\u00bb4.27.4&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb width=\u00a0\u00bb100%\u00a0\u00bb max_width=\u00a0\u00bb1539px\u00a0\u00bb module_alignment=\u00a0\u00bbcenter\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb][et_pb_column type=\u00a0\u00bb4_4&Prime; _builder_version=\u00a0\u00bb4.27.4&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb][et_pb_code _builder_version=\u00a0\u00bb4.27.4&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb hover_enabled=\u00a0\u00bb0&Prime; global_colors_info=\u00a0\u00bb{}\u00a0\u00bb sticky_enabled=\u00a0\u00bb0&Prime;]<!-- DIVI : coller TOUT ce fichier dans un module Code, dans une ligne \u00e0 une colonne.<!-- [et_pb_line_break_holder] -->     Personnalisation : voir CONFIGURATION en bas. CSS \/ HTML \/ JavaScript s\u00e9par\u00e9s.<!-- [et_pb_line_break_holder] -->     Le Shadow DOM isole les styles de Divi dans les deux sens.<!-- [et_pb_line_break_holder] -->     Connexion Internet requise pour Leaflet et le fond de carte CARTO (cl\u00e9 requise). &#8211;><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"spe-showrooms-host\"><!-- [et_pb_line_break_holder] -->  <\/p>\n<h1>D\u00e9couvrez les \u00e9crans interactifs Speechi pr\u00e8s de chez vous<\/h1>\n<p><!-- [et_pb_line_break_holder] -->  <template><!-- [et_pb_line_break_holder] -->    <link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" integrity=\"sha256-p4NxAoJBhIIN+hmNHrzRCf9tD\/miZyoHS5obTRR9BMY=\" crossorigin=\"anonymous\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- ==================== CSS ISOL\u00c9 ==================== --><!-- [et_pb_line_break_holder] -->    <\/p>\n<style><!-- [et_pb_line_break_holder] -->      :host { display:block; width:100%; min-width:0; text-align:left; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms { --spe-ink:#151d30; --spe-muted:#65728a; --spe-cyan:#06b5cb; --spe-border:#e7eaf0; --spe-bg:#f7f9fb; all:initial; display:block; background:var(--spe-bg); color:var(--spe-ink); font-family:Montserrat,\"Avenir Next\",Arial,sans-serif; font-size:13px; line-height:1.5; padding:28px 40px 22px; -webkit-text-size-adjust:100%; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms *, .spe-showrooms *::before, .spe-showrooms *::after { box-sizing:border-box; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms h2,.spe-showrooms h3,.spe-showrooms p { margin:0; padding:0; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms button,.spe-showrooms input,.spe-showrooms a { font:inherit; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms button { cursor:pointer; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms button:focus-visible,.spe-showrooms a:focus-visible,.spe-showrooms input:focus-visible { outline:3px solid #087f92; outline-offset:3px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms button:disabled { cursor:default; opacity:.55; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-heading { font-size:30px; font-weight:750; line-height:1.2; letter-spacing:-.7px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-intro { margin-top:10px; color:var(--spe-muted); font-size:16px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-layout { display:grid; grid-template-columns:minmax(360px,40%) minmax(0,1fr); margin-top:40px; height:600px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-sidebar { position:relative; display:flex; flex-direction:column; min-height:0; background:white; padding:0 15px;  min-width:0; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-search { padding:20px 12px; border-bottom:1px solid var(--spe-border); }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-search-title { font-size:20px; font-weight:600; margin:0 0 10px; color:#25262a; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-form-row { display:flex; gap:6px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-input-wrap { flex:1; min-width:0; position:relative; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-search-icon { position:absolute; left:10px; top:50%; width:16px; height:16px; pointer-events:none; color:#9aa6bb;  transform:translateY(-50%); }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-input { width:100%; min-width:0; height:44px; border:1px solid #d9dfe9; padding:0 8px 0 34px; font-size:16px; background:white; color:var(--spe-ink); }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-input::placeholder { color:#9aa6bb; opacity:1; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-submit { border:0; background:#303743; color:white; padding:0 14px; font-size:14px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-chips { display:flex; flex-wrap:wrap; gap:8px; margin-top:9px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-chip { display:inline-flex; align-items:center; gap:8px; padding:4px 11px; background:white; border:1px solid var(--spe-border); color:#39465e; font-size:13px;  min-height:32px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-chip span { color:#ff5570; font-size:15px; line-height:1; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-count { padding:16px 12px 10px; color:var(--spe-muted); font-size:13px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-list { overflow:auto; overscroll-behavior:contain; flex:1; scrollbar-width:thin; scrollbar-color:#dce3e9 transparent; padding-bottom:25px;  min-height:0; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-card { padding:18px 12px; border:1px solid transparent; border-bottom-color:#f0f2f5; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-card.is-selected { border-color:var(--spe-cyan); }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-card-top { display:flex; align-items:baseline; gap:8px; justify-content:space-between; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-select { display:block; text-align:left; border:0; padding:0; background:none; color:var(--spe-ink); font-weight:700; font-size:17px; line-height:1.5;  min-width:0;  overflow-wrap:anywhere; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-distance { white-space:nowrap; color:var(--spe-muted); font-size:12px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-address { font-size:14px; color:#506079; margin-top:5px;  overflow-wrap:anywhere; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-badges { display:flex; flex-wrap:wrap; gap:6px; margin-top:8px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-badge { padding:3px 8px; font-size:12px; letter-spacing:.15px; background:#dcfbe8; color:#247044; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-badge-type { background:#d8f3f6; color:#078c9e; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-badge-closed { background:#ffebef; color:#d72f50; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-hours { margin-top:5px; color:#78859c; font-size:12px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-actions { display:flex; align-items:center; gap:12px; justify-content:flex-end; margin-top:12px;  flex-wrap:wrap; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-book { border:1px solid #556073; color:#303743; background:white; text-decoration:none; padding:9px 14px; font-size:14px;  min-height:44px;  font-weight:600; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-more { position:absolute; z-index:2; bottom:-12px; left:calc(50% - 15px); width:30px; height:30px; border:0; background:white; box-shadow:0 2px 7px #0003; color:#111827; font-size:22px; line-height:1; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-map-wrap { position:relative; min-width:0; height:100%; overflow:hidden; background:#e8edf0; isolation:isolate; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-map { height:100%; width:100%; font-family:inherit; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .leaflet-tile-pane { filter:saturate(.5); opacity:.87; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-map-status { position:absolute; z-index:800; left:12px; top:12px; max-width:calc(100% - 24px); padding:8px 12px; background:white; color:#506079; font-size:11px; box-shadow:0 2px 8px #0001; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-map-note { position:absolute; z-index:800; left:12px; right:52px; bottom:26px; padding:8px 10px; background:#fffffff2; font-size:11px; color:#506079; pointer-events:none; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms [hidden] { display:none !important; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-demo { margin-top:20px; color:#78859c; font-size:10px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-empty { padding:14px 12px; color:var(--spe-muted); }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-pin { background:white; border:2px solid #99a8bc; border-radius:50%; box-shadow:0 2px 5px #0002; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-pin::after { content:\"\"; position:absolute; inset:6px; background:#4b5e79; border-radius:50%; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-pin-active { background:#303743; border:3px solid white; border-radius:50%; box-shadow:0 2px 7px #0004; display:grid; place-items:center; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-pin-active svg { width:19px; height:19px; color:white; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .leaflet-popup-content-wrapper { border:1px solid var(--spe-cyan); box-shadow:0 3px 12px #25344522; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .leaflet-popup-content { margin:12px; min-width:220px; line-height:1.55; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .leaflet-popup-content strong { display:block; color:var(--spe-ink); font-size:17px; font-weight:600; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .leaflet-popup-content p { color:#506079; font-size:14px; margin:3px 0 6px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-route { color:#029bb3; font-size:13px; font-weight:600; text-decoration:none; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .leaflet-popup-tip { background:white; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .leaflet-control-zoom { border:1px solid #e2e7ee; box-shadow:0 2px 8px #0001; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .leaflet-control-zoom a { color:#506079; font-family:Arial,sans-serif; font-size:22px; font-weight:400; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .leaflet-control-attribution { font-size:9px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-visually-hidden { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }<!-- [et_pb_line_break_holder] -->      @media (max-width:850px) { .spe-showrooms { padding:24px; } .spe-showrooms .spe-layout { grid-template-columns:minmax(340px,44%) minmax(0,1fr); } .spe-showrooms .spe-sidebar { padding:0 10px; } .spe-showrooms .spe-search { padding:15px 8px; } }<!-- [et_pb_line_break_holder] -->      @media (max-width:760px) { .spe-showrooms { padding:24px 16px; } .spe-showrooms .spe-heading { font-size:26px; } .spe-showrooms .spe-layout { display:flex; flex-direction:column; height:auto; margin-top:26px; gap:20px; } .spe-showrooms .spe-sidebar { height:540px; } .spe-showrooms .spe-map-wrap { height:350px; flex:none; } .spe-showrooms .spe-select { min-height:28px; } .spe-showrooms .spe-chip { min-height:30px; } .spe-showrooms .spe-book { padding:7px 16px; } }<!-- [et_pb_line_break_holder] -->      @media (max-width:380px) { .spe-showrooms .spe-form-row { flex-direction:column; } .spe-showrooms .spe-submit { min-height:44px; } }<!-- [et_pb_line_break_holder] -->      \/* Popup native : reste au-dessus de Divi, sans toucher au CSS global. *\/<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-reservation { position:fixed; inset:0; margin:auto; width:min(900px,calc(100vw - 32px)); max-width:none; max-height:calc(100dvh - 32px); padding:32px 36px; overflow:auto; border:1px solid #e4eaf2; background:radial-gradient(ellipse at 78% 55%,#edf7f480,transparent 50%),#f9fafc; color:var(--spe-ink); box-shadow:0 24px 80px #17223140; font:inherit; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-reservation::backdrop { background:#17223166; backdrop-filter:blur(5px); }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-dialog-title { font-size:25px; font-weight:750; line-height:1.25; padding-right:30px; letter-spacing:-.4px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-dialog-intro { color:var(--spe-muted); font-size:11px; margin-top:5px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-close { position:absolute; right:14px; top:12px; width:36px; height:36px; border:0; background:transparent; color:#506079; font-size:26px; line-height:1; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-close:hover { background:#eaf0f5; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-reservation-form { width:100%; max-width:416px; margin:28px auto 0; padding:28px 30px; background:white; border:1px solid #e3eaf3; box-shadow:0 8px 24px #1824330b; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-form-title { font-size:17px; font-weight:700; line-height:1.4; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-booked-showroom { color:#078b9e; font-size:11px; margin:4px 0 17px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-fields { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:14px 10px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-field { display:flex; flex-direction:column; gap:5px; font-size:10px; font-weight:500; min-width:0; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-full { grid-column:1\/-1; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-required { color:#ed5470; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-field input,.spe-showrooms .spe-field textarea { width:100%; min-width:0; border:1px solid #d8deea; background:#fff; color:var(--spe-ink); padding:8px; font:inherit; font-size:11px; line-height:1.4; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-field input::placeholder,.spe-showrooms .spe-field textarea::placeholder { color:#8da0bb; opacity:1; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-field textarea { min-height:80px; resize:vertical; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-organization { margin:0; border:0; padding:0; min-width:0; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-organization legend { font-size:10px; font-weight:500; margin-bottom:5px; padding:0; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-radio-row { display:grid; grid-template-columns:1fr 1fr; gap:10px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-radio { display:flex; align-items:center; gap:7px; padding:5px 9px; background:#f7f9fc; border:1px solid #e3eaf3; font-size:10px; cursor:pointer; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-radio:has(input:checked) { background:#e3f6f8; border-color:#22bfd0; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-radio input { accent-color:#19b9c9; margin:0; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-send { width:100%; margin-top:16px; padding:10px; border:0; background:#303844; color:white; font-weight:600; font-size:11px; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-feedback { font-size:12px; margin-top:12px; line-height:1.5; color:#b02d47; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-feedback.is-success { color:#247044; }<!-- [et_pb_line_break_holder] -->      .spe-showrooms .spe-honeypot { display:none; }<!-- [et_pb_line_break_holder] -->      @media (max-width:640px) { .spe-showrooms .spe-reservation { padding:25px 16px; width:calc(100vw - 20px); max-height:calc(100dvh - 20px); } .spe-showrooms .spe-dialog-title { font-size:22px; } .spe-showrooms .spe-reservation-form { padding:22px 18px; margin-top:22px; } .spe-showrooms .spe-field input,.spe-showrooms .spe-field textarea { font-size:16px; } .spe-showrooms .spe-radio { min-height:38px; } .spe-showrooms .spe-send { min-height:44px; } }<!-- [et_pb_line_break_holder] -->      @media (max-width:380px) { .spe-showrooms .spe-fields { grid-template-columns:1fr; } }<!-- [et_pb_line_break_holder] -->    <\/style>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- ==================== HTML ==================== --><!-- [et_pb_line_break_holder] -->    <\/p>\n<section class=\"spe-showrooms\" aria-label=\"Nos showrooms\" lang=\"fr\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<h2 class=\"spe-heading\">D\u00e9couvrez les \u00e9crans interactifs Speechi pr\u00e8s de chez vous<\/h2>\n<p><!-- [et_pb_line_break_holder] -->      <pee class=\"spe-intro\">Rendez-vous dans l\u2019un de nos showrooms partenaires pour voir et tester nos solutions.<\/pee><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"spe-layout\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<aside class=\"spe-sidebar\" aria-label=\"Recherche et r\u00e9sultats\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<form class=\"spe-search\" role=\"search\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<h3 class=\"spe-search-title\">Localiser un showroom<\/h3>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"spe-form-row\"><!-- [et_pb_line_break_holder] -->              <label class=\"spe-input-wrap\"><!-- [et_pb_line_break_holder] -->                <span class=\"spe-visually-hidden\">Ville, pays, code postal ou nom du showroom<\/span><!-- [et_pb_line_break_holder] -->                <svg class=\"spe-search-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"><circle cx=\"10\" cy=\"10\" r=\"6.5\"\/><path d=\"m15 15 5 5\"\/><\/svg><!-- [et_pb_line_break_holder] -->                <input class=\"spe-input\" type=\"search\" placeholder=\"Ville, pays, code postal\" autocomplete=\"off\"><!-- [et_pb_line_break_holder] -->              <\/label><!-- [et_pb_line_break_holder] -->              <button class=\"spe-submit\" type=\"submit\">Rechercher<\/button><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"spe-chips\" aria-label=\"Filtres actifs\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/form>\n<p><!-- [et_pb_line_break_holder] -->          <pee class=\"spe-count\" role=\"status\" aria-live=\"polite\"><\/pee><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"spe-list\" aria-label=\"Showrooms disponibles\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->          <button class=\"spe-more\" type=\"button\" aria-label=\"Faire d\u00e9filer la liste vers le bas\">\u2304<\/button><!-- [et_pb_line_break_holder] -->        <\/aside>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"spe-map-wrap\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"spe-map\" role=\"region\" aria-label=\"Carte interactive des showrooms\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->          <pee class=\"spe-map-note\" role=\"status\" hidden><\/pee><!-- [et_pb_line_break_holder] -->          <pee class=\"spe-map-status\" role=\"status\">Chargement de la carte\u2026<\/pee><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <pee class=\"spe-demo\">Donn\u00e9es de d\u00e9monstration \u00b7 Adresses, positions et disponibilit\u00e9s \u00e0 confirmer.<\/pee><!-- [et_pb_line_break_holder] -->      <dialog class=\"spe-reservation\" aria-labelledby=\"spe-reservation-title\" aria-describedby=\"spe-reservation-intro\"><!-- [et_pb_line_break_holder] -->        <button class=\"spe-close\" type=\"button\" aria-label=\"Fermer la demande de d\u00e9mo\">\u00d7<\/button><!-- [et_pb_line_break_holder] -->        <\/p>\n<h2 class=\"spe-dialog-title\" id=\"spe-reservation-title\">Demander une d\u00e9mo<\/h2>\n<p><!-- [et_pb_line_break_holder] -->        <pee class=\"spe-dialog-intro\" id=\"spe-reservation-intro\">Remplissez le formulaire ci-dessous pour organiser votre d\u00e9mo dans l\u2019un de nos showrooms partenaires.<\/pee><!-- [et_pb_line_break_holder] -->        <\/p>\n<form class=\"spe-reservation-form\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<h3 class=\"spe-form-title\">Votre demande de d\u00e9mo<\/h3>\n<p><!-- [et_pb_line_break_holder] -->          <pee class=\"spe-booked-showroom\"><\/pee><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"spe-fields\"><!-- [et_pb_line_break_holder] -->            <label class=\"spe-field\"><span>Nom <span class=\"spe-required\">*<\/span><\/span><input name=\"lastName\" placeholder=\"Dupont\" autocomplete=\"family-name\" maxlength=\"100\" required><\/label><!-- [et_pb_line_break_holder] -->            <label class=\"spe-field\"><span>Pr\u00e9nom <span class=\"spe-required\">*<\/span><\/span><input name=\"firstName\" placeholder=\"Jean\" autocomplete=\"given-name\" maxlength=\"100\" required><\/label><!-- [et_pb_line_break_holder] -->            <\/p>\n<fieldset class=\"spe-organization spe-full\">\n<legend>Type d\u2019organisation <span class=\"spe-required\">*<\/span><\/legend>\n<div class=\"spe-radio-row\"><!-- [et_pb_line_break_holder] -->              <label class=\"spe-radio\"><input type=\"radio\" name=\"organizationType\" value=\"Entreprise\" checked required>Entreprise<\/label><!-- [et_pb_line_break_holder] -->              <label class=\"spe-radio\"><input type=\"radio\" name=\"organizationType\" value=\"\u00c9cole\" required>\u00c9cole<\/label><!-- [et_pb_line_break_holder] -->            <\/div>\n<\/fieldset>\n<p><!-- [et_pb_line_break_holder] -->            <label class=\"spe-field spe-full\"><span>Nom de l\u2019entreprise \/ \u00e9cole <span class=\"spe-required\">*<\/span><\/span><input name=\"organization\" placeholder=\"Ex : Speechi SA\" autocomplete=\"organization\" maxlength=\"200\" required><\/label><!-- [et_pb_line_break_holder] -->            <label class=\"spe-field\"><span>Adresse e-mail <span class=\"spe-required\">*<\/span><\/span><input type=\"email\" name=\"email\" placeholder=\"jean.dupont@exemple.com\" autocomplete=\"email\" maxlength=\"254\" required><\/label><!-- [et_pb_line_break_holder] -->            <label class=\"spe-field\"><span>Num\u00e9ro de t\u00e9l\u00e9phone <span class=\"spe-required\">*<\/span><\/span><input type=\"tel\" name=\"phone\" placeholder=\"06 12 34 56 78\" autocomplete=\"tel\" maxlength=\"40\" required><\/label><!-- [et_pb_line_break_holder] -->            <label class=\"spe-field\"><span>Code postal <span class=\"spe-required\">*<\/span><\/span><input name=\"postcode\" placeholder=\"75010\" autocomplete=\"postal-code\" maxlength=\"20\" required><\/label><!-- [et_pb_line_break_holder] -->            <label class=\"spe-field\"><span>Pays <span class=\"spe-required\">*<\/span><\/span><input name=\"country\" placeholder=\"France\" autocomplete=\"country-name\" maxlength=\"100\" required><\/label><!-- [et_pb_line_break_holder] -->            <label class=\"spe-field spe-full\"><span>Message <span class=\"spe-required\">*<\/span><\/span><textarea name=\"message\" placeholder=\"Pr\u00e9cisez votre projet ou vos besoins particuliers\u2026\" maxlength=\"5000\" required><\/textarea><\/label><!-- [et_pb_line_break_holder] -->          <\/div>\n<p><!-- [et_pb_line_break_holder] -->          <label class=\"spe-honeypot\" aria-hidden=\"true\">Laisser vide<input name=\"website\" tabindex=\"-1\" autocomplete=\"off\"><\/label><!-- [et_pb_line_break_holder] -->          <button class=\"spe-send\" type=\"submit\">Envoyer la demande<\/button><!-- [et_pb_line_break_holder] -->          <pee class=\"spe-feedback\" role=\"status\" aria-live=\"polite\" hidden><\/pee><!-- [et_pb_line_break_holder] -->        <\/form>\n<p><!-- [et_pb_line_break_holder] -->      <\/dialog><!-- [et_pb_line_break_holder] -->    <\/section>\n<p><!-- [et_pb_line_break_holder] -->  <\/template><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- ==================== JAVASCRIPT ==================== --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(() => {<!-- [et_pb_line_break_holder] -->  'use strict';<!-- [et_pb_line_break_holder] -->  const host = document.currentScript.previousElementSibling;<!-- [et_pb_line_break_holder] -->  if (!host || host.shadowRoot) return;<!-- [et_pb_line_break_holder] -->  const template = host.querySelector('template');<!-- [et_pb_line_break_holder] -->  const root = host.attachShadow({mode:'open'});<!-- [et_pb_line_break_holder] -->  root.appendChild(template.content.cloneNode(true));<!-- [et_pb_line_break_holder] -->  host.replaceChildren();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ==================== CONFIGURATION \u00c0 MODIFIER ====================<!-- [et_pb_line_break_holder] -->  \/\/ Donn\u00e9es fournies par le client : 21 showrooms, dont 12 avec coordonn\u00e9es.<!-- [et_pb_line_break_holder] -->  \/\/ lat\/lng null : aucun rep\u00e8re invent\u00e9 ; itin\u00e9raire propos\u00e9 par adresse.<!-- [et_pb_line_break_holder] -->  \/\/ open null et hours vide : disponibilit\u00e9 et horaires non communiqu\u00e9s.<!-- [et_pb_line_break_holder] -->  \/\/ Envoi direct depuis le navigateur en multipart\/form-data (FormData) :<!-- [et_pb_line_break_holder] -->  \/\/ ce type de contenu est \"simple\" au sens CORS, donc aucune requ\u00eate<!-- [et_pb_line_break_holder] -->  \/\/ preflight OPTIONS n'est envoy\u00e9e (contrairement \u00e0 application\/json, que<!-- [et_pb_line_break_holder] -->  \/\/ Zoho Flow bloque puisqu'il ne r\u00e9pond pas correctement au preflight).<!-- [et_pb_line_break_holder] -->  \/\/ Si Zoho ne retrouve pas les champs sous cette forme, utiliser plut\u00f4t le<!-- [et_pb_line_break_holder] -->  \/\/ relais WordPress same-origin fourni dans zoho-reservation-proxy.php.<!-- [et_pb_line_break_holder] -->  \/\/ La cl\u00e9 du webhook est visible dans le code source de cette page.<!-- [et_pb_line_break_holder] -->  const CONFIG = {<!-- [et_pb_line_break_holder] -->    demo: false,<!-- [et_pb_line_break_holder] -->    reservationWebhook: 'https:\/\/flow.zoho.com\/730635344\/flow\/webhook\/incoming?zapikey=1001.49ab6cee9de40d65a5d8548617cec991.d426b8f03868fde89555d6864a50fcc1&isdebug=false',<!-- [et_pb_line_break_holder] -->    center: [46.6, 2.5],<!-- [et_pb_line_break_holder] -->    zoom: 6,<!-- [et_pb_line_break_holder] -->    cartoApiKey: 'cb1_3k2b_1_2759699d38fb5f3cd0940676', \/\/ Cl\u00e9 du site \u00e0 obtenir sur https:\/\/carto.com\/basemaps\/apikey\/<!-- [et_pb_line_break_holder] -->    tileUrl: 'https:\/\/basemaps.cartocdn.com\/rastertiles\/voyager\/{z}\/{x}\/{y}.png',<!-- [et_pb_line_break_holder] -->    attribution: '\u00a9 <a href=\"https:\/\/www.openstreetmap.org\/copyright\" target=\"_blank\" rel=\"noopener noreferrer\">OpenStreetMap<\/a> \u00a9 <a href=\"https:\/\/carto.com\/attributions\" target=\"_blank\" rel=\"noopener noreferrer\">CARTO<\/a>',<!-- [et_pb_line_break_holder] -->    filters: [], \/\/ Tous les pays sont accessibles d\u00e8s le chargement.<!-- [et_pb_line_break_holder] -->    showrooms: [<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"speechi-lille\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Speechi Lille\",<!-- [et_pb_line_break_holder] -->    \"address\": \"12 Rue de Weppes, 59800 Lille\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Lille\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"59800\",<!-- [et_pb_line_break_holder] -->    \"country\": \"France\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 50.6396682,<!-- [et_pb_line_break_holder] -->    \"lng\": 3.0607703,<!-- [et_pb_line_break_holder] -->    \"type\": \"Showroom Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"speechi-paris-10\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Speechi Paris 10\",<!-- [et_pb_line_break_holder] -->    \"address\": \"13 Rue des Petits H\u00f4tels, 75010 Paris\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Paris\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"75010\",<!-- [et_pb_line_break_holder] -->    \"country\": \"France\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 48.8773746,<!-- [et_pb_line_break_holder] -->    \"lng\": 2.3536812,<!-- [et_pb_line_break_holder] -->    \"type\": \"Showroom Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"defilor\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Defilor\",<!-- [et_pb_line_break_holder] -->    \"address\": \"2 Rue des Fondeurs, 57535 Marange-Silvange\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Marange-Silvange\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"57535\",<!-- [et_pb_line_break_holder] -->    \"country\": \"France\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 49.2115653,<!-- [et_pb_line_break_holder] -->    \"lng\": 6.1207791,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"numeritice\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Numeritice\",<!-- [et_pb_line_break_holder] -->    \"address\": \"7 Rue des Entrepreneurs, 86000 Poitiers\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Poitiers\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"86000\",<!-- [et_pb_line_break_holder] -->    \"country\": \"France\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 46.6150884,<!-- [et_pb_line_break_holder] -->    \"lng\": 0.3439189,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"enteis\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Enteis\",<!-- [et_pb_line_break_holder] -->    \"address\": \"8 Avenue Ariane B\u00e2timent A, 33700 M\u00e9rignac\",<!-- [et_pb_line_break_holder] -->    \"city\": \"M\u00e9rignac\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"33700\",<!-- [et_pb_line_break_holder] -->    \"country\": \"France\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 44.834792,<!-- [et_pb_line_break_holder] -->    \"lng\": -0.67871,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"visualtys\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Visualtys\",<!-- [et_pb_line_break_holder] -->    \"address\": \"1632 Chemin de la Tourelle, 83110 Sanary-sur-Mer\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Sanary-sur-Mer\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"83110\",<!-- [et_pb_line_break_holder] -->    \"country\": \"France\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 43.1364626,<!-- [et_pb_line_break_holder] -->    \"lng\": 5.8197003,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"avls-ntsi\",<!-- [et_pb_line_break_holder] -->    \"name\": \"AVLS \/ NTSI LTD\",<!-- [et_pb_line_break_holder] -->    \"address\": \"95 Rue Alexandre Fourny, 94500 Champigny-sur-Marne\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Champigny-sur-Marne\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"94500\",<!-- [et_pb_line_break_holder] -->    \"country\": \"France\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 48.8188282,<!-- [et_pb_line_break_holder] -->    \"lng\": 2.5238064,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"ananas-bio\",<!-- [et_pb_line_break_holder] -->    \"name\": \"ANANAS BIO\",<!-- [et_pb_line_break_holder] -->    \"address\": \"Route de Fontenay ZAC, 91610 Ballancourt-sur-Essonne\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Ballancourt-sur-Essonne\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"91610\",<!-- [et_pb_line_break_holder] -->    \"country\": \"France\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 48.5362669,<!-- [et_pb_line_break_holder] -->    \"lng\": 2.3769945,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"aratice\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Aratice\",<!-- [et_pb_line_break_holder] -->    \"address\": \"7 Rue du Limousin, 95310 Saint-Ouen-l\u2019Aum\u00f4ne\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Saint-Ouen-l\u2019Aum\u00f4ne\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"95310\",<!-- [et_pb_line_break_holder] -->    \"country\": \"France\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 49.04627227783203,<!-- [et_pb_line_break_holder] -->    \"lng\": 2.1374778747558594,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"pjd\",<!-- [et_pb_line_break_holder] -->    \"name\": \"PJD Audiovisuel\",<!-- [et_pb_line_break_holder] -->    \"address\": \"22 Rue Andr\u00e9 Durouchez, 80080 Amiens\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Amiens\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"80080\",<!-- [et_pb_line_break_holder] -->    \"country\": \"France\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 49.9281734,<!-- [et_pb_line_break_holder] -->    \"lng\": 2.2843363,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"tedelec\",<!-- [et_pb_line_break_holder] -->    \"name\": \"TEDELEC AUDIOVISUEL\",<!-- [et_pb_line_break_holder] -->    \"address\": \"2A Avenue Normandie Niemen, 79000 Niort\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Niort\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"79000\",<!-- [et_pb_line_break_holder] -->    \"country\": \"France\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 46.32327651977539,<!-- [et_pb_line_break_holder] -->    \"lng\": -0.43849676847457886,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"edgeminds\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Edgeminds\",<!-- [et_pb_line_break_holder] -->    \"address\": \"5 Boulevard Amp\u00e8re, 44470 Carquefou\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Carquefou\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"44470\",<!-- [et_pb_line_break_holder] -->    \"country\": \"France\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 47.303446,<!-- [et_pb_line_break_holder] -->    \"lng\": -1.5070051,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"troya\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Troya\",<!-- [et_pb_line_break_holder] -->    \"address\": \"Saryarqa St 6, Astana 020000, Kazakhstan\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Astana\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"020000\",<!-- [et_pb_line_break_holder] -->    \"country\": \"Kazakhstan\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 51.1282804,<!-- [et_pb_line_break_holder] -->    \"lng\": 71.4304708,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"Khazakhstan\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"threecomp\",<!-- [et_pb_line_break_holder] -->    \"name\": \"ThreeComp\",<!-- [et_pb_line_break_holder] -->    \"address\": \"17 Avenue Zerktouni magasin N\u00b01 \u2013 Qbibat, Rabat\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Rabat\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"\",<!-- [et_pb_line_break_holder] -->    \"country\": \"Maroc\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 34.0122529,<!-- [et_pb_line_break_holder] -->    \"lng\": -6.8548089,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"hard-hat-media\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Hard Hat Media\",<!-- [et_pb_line_break_holder] -->    \"address\": \"5 Pipers Court, Berkshire Dr, Thatcham RG19 4ER, Royaume-Uni\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Thatcham\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"RG19 4ER\",<!-- [et_pb_line_break_holder] -->    \"country\": \"Royaume-Uni\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 51.4024177,<!-- [et_pb_line_break_holder] -->    \"lng\": -1.2574120,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"UK United Kingdom\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"electro-waves\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Electro Waves\",<!-- [et_pb_line_break_holder] -->    \"address\": \"Ruukintie 2, 02330 Espoo, Finlande\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Espoo\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"02330\",<!-- [et_pb_line_break_holder] -->    \"country\": \"Finlande\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 60.1569650,<!-- [et_pb_line_break_holder] -->    \"lng\": 24.6424478,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"klick-ee\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Klick EE\",<!-- [et_pb_line_break_holder] -->    \"address\": \"Mustam\u00e4e tee 44, 10621 Tallinn, Estonie\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Tallinn\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"10621\",<!-- [et_pb_line_break_holder] -->    \"country\": \"Estonie\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 59.4181284,<!-- [et_pb_line_break_holder] -->    \"lng\": 24.6883789,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"nexos-lighting\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Nexos Lighting\",<!-- [et_pb_line_break_holder] -->    \"address\": \"MRA062, Marsa Industrial Estate, Triq L-Ingiered, Marsa MRS 3000, Malte\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Marsa\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"MRS 3000\",<!-- [et_pb_line_break_holder] -->    \"country\": \"Malte\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 35.8695760,<!-- [et_pb_line_break_holder] -->    \"lng\": 14.4908194,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"Malta\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"openreality\",<!-- [et_pb_line_break_holder] -->    \"name\": \"OpenReality\",<!-- [et_pb_line_break_holder] -->    \"address\": \"Bee House, 140 Eastern Ave, Park Dr, Milton, Abingdon OX14 4SB, Royaume-Uni\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Abingdon\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"OX14 4SB\",<!-- [et_pb_line_break_holder] -->    \"country\": \"Royaume-Uni\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 51.6714842,<!-- [et_pb_line_break_holder] -->    \"lng\": -1.2779715,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"UK United Kingdom\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"pgs-africa\",<!-- [et_pb_line_break_holder] -->    \"name\": \"PGS Africa\",<!-- [et_pb_line_break_holder] -->    \"address\": \"R73, Cit\u00e9 Keur Gorgui\",<!-- [et_pb_line_break_holder] -->    \"city\": \"\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"\",<!-- [et_pb_line_break_holder] -->    \"country\": \"S\u00e9n\u00e9gal\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 14.7116889,<!-- [et_pb_line_break_holder] -->    \"lng\": -17.4687165,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  {<!-- [et_pb_line_break_holder] -->    \"id\": \"vision-technologies\",<!-- [et_pb_line_break_holder] -->    \"name\": \"Vision Technologies\",<!-- [et_pb_line_break_holder] -->    \"address\": \"06, 06 BP 2223 Abidjan, Abidjan, C\u00f4te d\u2019Ivoire\",<!-- [et_pb_line_break_holder] -->    \"city\": \"Abidjan\",<!-- [et_pb_line_break_holder] -->    \"postcode\": \"\",<!-- [et_pb_line_break_holder] -->    \"country\": \"C\u00f4te d\u2019Ivoire\",<!-- [et_pb_line_break_holder] -->    \"region\": \"\",<!-- [et_pb_line_break_holder] -->    \"lat\": 5.3203570,<!-- [et_pb_line_break_holder] -->    \"lng\": -4.0161070,<!-- [et_pb_line_break_holder] -->    \"type\": \"Partenaire Speechi\",<!-- [et_pb_line_break_holder] -->    \"open\": null,<!-- [et_pb_line_break_holder] -->    \"hours\": \"\",<!-- [et_pb_line_break_holder] -->    \"aliases\": \"\"<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->]<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] -->  \/\/ ==================== FIN DE LA CONFIGURATION ====================<!-- [et_pb_line_break_holder] -->  const $ = selector => root.querySelector(selector);<!-- [et_pb_line_break_holder] -->  const normalize = value => String(value).normalize('NFD').replace(\/[\u0300-\u036f]\/g,'').toLowerCase().replace(\/[-\u2019']\/g,' ').replace(\/\\s+\/g,' ').trim();<!-- [et_pb_line_break_holder] -->  const escape = value => String(value).replace(\/[&<>\"']\/g, c => ({'&':'&','<':'<','>':'>','\"':'\"',\"'\":'&#39;'}[c]));<!-- [et_pb_line_break_holder] -->  const validUrl = value => { try { const u = new URL(value); return ['http:','https:'].includes(u.protocol) ? u.href : ''; } catch { return ''; } };<!-- [et_pb_line_break_holder] -->  const hasCoordinates = s => Number.isFinite(s.lat) && Number.isFinite(s.lng) && Math.abs(s.lat) <= 90 &#038;&#038; Math.abs(s.lng) <= 180;<!-- [et_pb_line_break_holder] -->  const NEARBY_LIMIT = 6;<!-- [et_pb_line_break_holder] -->  const toRad = d => d * Math.PI \/ 180;<!-- [et_pb_line_break_holder] -->  const distanceKm = (lat1,lng1,lat2,lng2) => { const R = 6371, dLat = toRad(lat2-lat1), dLng = toRad(lng2-lng1); const a = Math.sin(dLat\/2)**2 + Math.cos(toRad(lat1))*Math.cos(toRad(lat2))*Math.sin(dLng\/2)**2; return R*2*Math.asin(Math.sqrt(a)); };<!-- [et_pb_line_break_holder] -->  \/\/ G\u00e9olocalisation c\u00f4t\u00e9 navigateur via Nominatim (OpenStreetMap), utilis\u00e9e<!-- [et_pb_line_break_holder] -->  \/\/ uniquement quand une recherche ne donne aucune correspondance directe,<!-- [et_pb_line_break_holder] -->  \/\/ pour proposer les showrooms les plus proches.<!-- [et_pb_line_break_holder] -->  \/\/ Gratuit et compatible CORS, mais limit\u00e9 par leur politique d'usage :<!-- [et_pb_line_break_holder] -->  \/\/ adapt\u00e9 \u00e0 des recherches ponctuelles de visiteurs, pas \u00e0 un site \u00e0 fort<!-- [et_pb_line_break_holder] -->  \/\/ trafic (dans ce cas, utiliser un service payant comme CARTO ou Google).<!-- [et_pb_line_break_holder] -->  async function geocodeCity(q) {<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      const res = await fetch('https:\/\/nominatim.openstreetmap.org\/search?format=json&limit=1&q='+encodeURIComponent(q));<!-- [et_pb_line_break_holder] -->      if (!res.ok) return null;<!-- [et_pb_line_break_holder] -->      const results = await res.json();<!-- [et_pb_line_break_holder] -->      const hit = results[0];<!-- [et_pb_line_break_holder] -->      return hit ? {lat:parseFloat(hit.lat), lng:parseFloat(hit.lon)} : null;<!-- [et_pb_line_break_holder] -->    } catch { return null; }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  const routeUrl = s => 'https:\/\/www.google.com\/maps\/dir\/?api=1&destination='+encodeURIComponent(hasCoordinates(s) ? s.lat+','+s.lng : s.address+(normalize(s.address).includes(normalize(s.country)) ? '' : ', '+s.country));<!-- [et_pb_line_break_holder] -->  function fitResults() {<!-- [et_pb_line_break_holder] -->    if (!map) return;<!-- [et_pb_line_break_holder] -->    const located = visible.filter(hasCoordinates);<!-- [et_pb_line_break_holder] -->    if (located.length) map.fitBounds(located.map(s => [s.lat,s.lng]), {padding:[45,45],maxZoom:16});<!-- [et_pb_line_break_holder] -->    else map.setView(CONFIG.center,CONFIG.zoom);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function updateMapNote() {<!-- [et_pb_line_break_holder] -->    const current = visible.find(s => s.id === selected);<!-- [et_pb_line_break_holder] -->    const missing = visible.filter(s => !hasCoordinates(s)).length;<!-- [et_pb_line_break_holder] -->    const note = $('.spe-map-note');<!-- [et_pb_line_break_holder] -->    note.hidden = !missing;<!-- [et_pb_line_break_holder] -->    note.textContent = current && !hasCoordinates(current) ? current.name+' : position non renseign\u00e9e. Utilisez \u00ab Y aller \u00bb dans la liste.' : missing+' showroom'+(missing > 1 ? 's' : '')+' sans position sur la carte. Itin\u00e9raires disponibles dans la liste.';<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  const pinSvg = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" aria-hidden=\"true\"><path d=\"M19 10c0 5-7 11-7 11S5 15 5 10a7 7 0 1 1 14 0Z\"\/><circle cx=\"12\" cy=\"10\" r=\"2.5\"\/><\/svg>';<!-- [et_pb_line_break_holder] -->  let filters = CONFIG.filters.slice(), query = '', visible = [], selected;<!-- [et_pb_line_break_holder] -->  let originPoint = null, originLabel = '';<!-- [et_pb_line_break_holder] -->  let map, L, markers = new Map();<!-- [et_pb_line_break_holder] -->  $('.spe-demo').hidden = !CONFIG.demo;<!-- [et_pb_line_break_holder] -->  function render() {<!-- [et_pb_line_break_holder] -->    const countryAliases = {uk:'royaume uni', malta:'malte', khazakhstan:'kazakhstan'};<!-- [et_pb_line_break_holder] -->    const normalizedQuery = normalize(query);<!-- [et_pb_line_break_holder] -->    const terms = (countryAliases[normalizedQuery] || normalizedQuery).split(' ').filter(Boolean);<!-- [et_pb_line_break_holder] -->    const matchesFilters = s => filters.every(f => normalize(s[f.field]) === normalize(f.label));<!-- [et_pb_line_break_holder] -->    if (originPoint) {<!-- [et_pb_line_break_holder] -->      visible = CONFIG.showrooms.filter(s => matchesFilters(s) && hasCoordinates(s)).map(s => ({...s, distanceKm: distanceKm(originPoint.lat,originPoint.lng,s.lat,s.lng)})).sort((a,b) => a.distanceKm - b.distanceKm).slice(0,NEARBY_LIMIT);<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      visible = CONFIG.showrooms.filter(s => matchesFilters(s) && terms.every(t => normalize([s.name,s.address,s.city,s.postcode,s.country,s.region,s.aliases].join(' ')).includes(t)));<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    if (!visible.some(s => s.id === selected)) selected = undefined;<!-- [et_pb_line_break_holder] -->    $('.spe-chips').innerHTML = filters.map((f,i) => '<button type=\"button\" class=\"spe-chip\" data-filter=\"'+i+'\" aria-label=\"Retirer le filtre '+escape(f.label)+'\">'+escape(f.label)+'<span aria-hidden=\"true\">\u00d7<\/span><\/button>').join('') + (query ? '<button type=\"button\" class=\"spe-chip\" data-clear aria-label=\"Effacer la recherche\">'+escape(query)+'<span aria-hidden=\"true\">\u00d7<\/span><\/button>' : '');<!-- [et_pb_line_break_holder] -->    const city = filters.find(f => f.field === 'city');<!-- [et_pb_line_break_holder] -->    $('.spe-count').textContent = originPoint ? (visible.length ? 'Autour de \u00ab '+originLabel+' \u00bb' : 'Aucun showroom trouv\u00e9 pr\u00e8s de \u00ab '+originLabel+' \u00bb.') : visible.length+' showroom'+(visible.length === 1 ? '' : 's')+(city ? ' \u00e0 '+city.label : '')+(CONFIG.demo ? ' \u00b7 exemples' : '');<!-- [et_pb_line_break_holder] -->    $('.spe-list').innerHTML = visible.length ? visible.map(s => {<!-- [et_pb_line_break_holder] -->      const active = s.id === selected;<!-- [et_pb_line_break_holder] -->      const status = typeof s.open === 'boolean' ? '<span class=\"spe-badge'+(s.open ? '' : ' spe-badge-closed')+'\">'+(s.open ? 'Ouvert sur rendez-vous' : 'Ferm\u00e9')+'<\/span>' : '';<!-- [et_pb_line_break_holder] -->      const distance = Number.isFinite(s.distanceKm) ? '<span class=\"spe-distance\">'+Math.round(s.distanceKm)+' km<\/span>' : '';<!-- [et_pb_line_break_holder] -->      return '<\/p>\n<article class=\"spe-card'+(active ? ' is-selected' : '')+'\" data-card=\"'+escape(s.id)+'\">\n<div class=\"spe-card-top\"><button type=\"button\" class=\"spe-select\" data-select=\"'+escape(s.id)+'\" aria-pressed=\"'+active+'\">'+escape(s.name)+'<\/button>'+distance+'<\/div>\n<pee class=\"spe-address\">'+escape(s.address)+'<\/pee>\n<div class=\"spe-badges\">'+status+'<span class=\"spe-badge spe-badge-type\">'+escape(s.type)+'<\/span><\/div>\n<p>'+(s.hours ? '<pee class=\"spe-hours\">'+escape(s.hours)+'<\/pee>' : '')+(!hasCoordinates(s) ? '<pee class=\"spe-hours\">Itin\u00e9raire disponible par adresse<\/pee>' : '')+'<\/p>\n<div class=\"spe-actions\"><a class=\"spe-route\" href=\"'+escape(routeUrl(s))+'\" target=\"_blank\" rel=\"noopener noreferrer\">\u27a4 Y aller<\/a>'+'<button class=\"spe-book\" type=\"button\" data-book=\"'+escape(s.id)+'\">Demander une d\u00e9mo<\/button>'+'<\/div>\n<\/article>\n<p>';<!-- [et_pb_line_break_holder] -->    }).join('') : (originPoint ? '<pee class=\"spe-empty\">Aucun showroom trouv\u00e9 pr\u00e8s de \u00ab '+escape(originLabel)+' \u00bb.<\/pee>' : '<pee class=\"spe-empty\">Aucun showroom trouv\u00e9. Essayez une autre ville ou retirez un filtre.<\/pee>');<!-- [et_pb_line_break_holder] -->    updateMapNote();<!-- [et_pb_line_break_holder] -->    if (map) renderMarkers();<!-- [et_pb_line_break_holder] -->    requestAnimationFrame(updateMore);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function updateMore() {<!-- [et_pb_line_break_holder] -->    const list = $('.spe-list');<!-- [et_pb_line_break_holder] -->    $('.spe-more').hidden = list.scrollHeight <= list.clientHeight + list.scrollTop + 3;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function select(id, focusCard) {<!-- [et_pb_line_break_holder] -->    const scroll = $('.spe-list').scrollTop;<!-- [et_pb_line_break_holder] -->    selected = id;<!-- [et_pb_line_break_holder] -->    render();<!-- [et_pb_line_break_holder] -->    $('.spe-list').scrollTop = scroll;<!-- [et_pb_line_break_holder] -->    if (focusCard) {<!-- [et_pb_line_break_holder] -->      const card = Array.from(root.querySelectorAll('[data-card]')).find(el => el.dataset.card === id);<!-- [et_pb_line_break_holder] -->      if (card) $('.spe-list').scrollTop = card.offsetTop - $('.spe-list').offsetTop;<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      Array.from(root.querySelectorAll('[data-select]')).find(el => el.dataset.select === id)?.focus({preventScroll:true});<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    const s = visible.find(s => s.id === id);<!-- [et_pb_line_break_holder] -->    if (map && s && hasCoordinates(s)) map.setView([s.lat,s.lng],16);<!-- [et_pb_line_break_holder] -->    else if (map) fitResults();<!-- [et_pb_line_break_holder] -->    updateMore();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function renderMarkers() {<!-- [et_pb_line_break_holder] -->    map.closePopup();<!-- [et_pb_line_break_holder] -->    markers.forEach(marker => marker.remove());<!-- [et_pb_line_break_holder] -->    markers.clear();<!-- [et_pb_line_break_holder] -->    visible.filter(hasCoordinates).forEach(s => {<!-- [et_pb_line_break_holder] -->      const active = s.id === selected;<!-- [et_pb_line_break_holder] -->      const marker = L.marker([s.lat,s.lng], {title:s.name, alt:s.name, keyboard:true, zIndexOffset:active ? 1000 : 0, icon:L.divIcon({className:active ? 'spe-pin-active' : 'spe-pin', html:active ? pinSvg : '', iconSize:active ? [38,38] : [24,24], iconAnchor:active ? [19,19] : [12,12]})}).addTo(map);<!-- [et_pb_line_break_holder] -->      const url = routeUrl(s);<!-- [et_pb_line_break_holder] -->      marker.bindPopup('<strong>'+escape(s.name)+'<\/strong><pee>'+escape(s.address)+'<\/pee>\n<div class=\"spe-actions\"><a class=\"spe-route\" href=\"'+escape(url)+'\" target=\"_blank\" rel=\"noopener noreferrer\">\u27a4 Y aller<\/a><button class=\"spe-book\" type=\"button\" data-book=\"'+escape(s.id)+'\">Demander une d\u00e9mo<\/button><\/div>\n<p>', {closeButton:false, offset:[0,-16], autoPan:true});<!-- [et_pb_line_break_holder] -->      marker.on('click', () => select(s.id,true));<!-- [et_pb_line_break_holder] -->      markers.set(s.id,marker);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    markers.get(selected)?.openPopup();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  let searchToken = 0;<!-- [et_pb_line_break_holder] -->  $('.spe-search').addEventListener('submit', async e => {<!-- [et_pb_line_break_holder] -->    e.preventDefault();<!-- [et_pb_line_break_holder] -->    query = $('.spe-input').value.trim();<!-- [et_pb_line_break_holder] -->    originPoint = null;<!-- [et_pb_line_break_holder] -->    originLabel = '';<!-- [et_pb_line_break_holder] -->    render();<!-- [et_pb_line_break_holder] -->    $('.spe-list').scrollTop = 0;<!-- [et_pb_line_break_holder] -->    fitResults();<!-- [et_pb_line_break_holder] -->    if (!query || visible.length) return;<!-- [et_pb_line_break_holder] -->    const token = ++searchToken;<!-- [et_pb_line_break_holder] -->    $('.spe-count').textContent = 'Recherche des showrooms les plus proches\u2026';<!-- [et_pb_line_break_holder] -->    const point = await geocodeCity(query);<!-- [et_pb_line_break_holder] -->    if (token !== searchToken) return;<!-- [et_pb_line_break_holder] -->    if (point) { originPoint = point; originLabel = query; render(); fitResults(); }<!-- [et_pb_line_break_holder] -->    else render();<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  $('.spe-input').addEventListener('search', () => { if (!$('.spe-input').value) { query = ''; originPoint = null; originLabel = ''; render(); fitResults(); } });<!-- [et_pb_line_break_holder] -->  $('.spe-chips').addEventListener('click', e => { const button = e.target.closest('button'); if (!button) return; if (button.hasAttribute('data-clear')) { query = ''; originPoint = null; originLabel = ''; $('.spe-input').value = ''; } else filters.splice(Number(button.dataset.filter),1); render(); fitResults(); $('.spe-input').focus(); });<!-- [et_pb_line_break_holder] -->  const dialog = $('.spe-reservation');<!-- [et_pb_line_break_holder] -->  const reservationForm = $('.spe-reservation-form');<!-- [et_pb_line_break_holder] -->  let reservationShowroom, reservationTrigger, sending = false;<!-- [et_pb_line_break_holder] -->  function openReservation(id, trigger) {<!-- [et_pb_line_break_holder] -->    reservationShowroom = CONFIG.showrooms.find(s => s.id === id);<!-- [et_pb_line_break_holder] -->    if (!reservationShowroom) return;<!-- [et_pb_line_break_holder] -->    reservationTrigger = trigger;<!-- [et_pb_line_break_holder] -->    reservationForm.reset();<!-- [et_pb_line_break_holder] -->    $('.spe-send').disabled = false;<!-- [et_pb_line_break_holder] -->    $('.spe-send').textContent = 'Envoyer la demande';<!-- [et_pb_line_break_holder] -->    $('.spe-feedback').hidden = true;<!-- [et_pb_line_break_holder] -->    $('.spe-feedback').classList.remove('is-success');<!-- [et_pb_line_break_holder] -->    $('.spe-booked-showroom').textContent = reservationShowroom.name;<!-- [et_pb_line_break_holder] -->    dialog.showModal();<!-- [et_pb_line_break_holder] -->    reservationForm.elements.lastName.focus();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  $('.spe-close').addEventListener('click', () => { if (!sending) dialog.close(); });<!-- [et_pb_line_break_holder] -->  dialog.addEventListener('cancel', e => { if (sending) e.preventDefault(); });<!-- [et_pb_line_break_holder] -->  dialog.addEventListener('close', () => { if (reservationTrigger?.isConnected) reservationTrigger.focus({preventScroll:true}); });<!-- [et_pb_line_break_holder] -->  dialog.addEventListener('click', e => {<!-- [et_pb_line_break_holder] -->    if (e.target !== dialog || sending) return;<!-- [et_pb_line_break_holder] -->    const rect = dialog.getBoundingClientRect();<!-- [et_pb_line_break_holder] -->    if (e.clientX < rect.left || e.clientX > rect.right || e.clientY < rect.top || e.clientY > rect.bottom) dialog.close();<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  reservationForm.addEventListener('submit', async e => {<!-- [et_pb_line_break_holder] -->    e.preventDefault();<!-- [et_pb_line_break_holder] -->    if (sending || !reservationShowroom || !reservationForm.reportValidity()) return;<!-- [et_pb_line_break_holder] -->    const data = Object.fromEntries(new FormData(reservationForm));<!-- [et_pb_line_break_holder] -->    for (const key of ['lastName','firstName','organization','email','phone','postcode','country','message']) {<!-- [et_pb_line_break_holder] -->      if (!String(data[key] || '').trim()) { reservationForm.elements[key].focus(); return; }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    if (data.website) return;<!-- [et_pb_line_break_holder] -->    \/\/ FormData (multipart\/form-data implicite, sans Content-Type manuel) :<!-- [et_pb_line_break_holder] -->    \/\/ requ\u00eate \"simple\" au sens CORS, envoy\u00e9e sans preflight OPTIONS.<!-- [et_pb_line_break_holder] -->    const payload = new FormData();<!-- [et_pb_line_break_holder] -->    payload.set('secteur', data.organizationType === '\u00c9cole' ? 'Education' : 'Entreprise');<!-- [et_pb_line_break_holder] -->    payload.set('code_postal', data.postcode.trim());<!-- [et_pb_line_break_holder] -->    payload.set('nombre_salles', '');<!-- [et_pb_line_break_holder] -->    payload.set('timing', '');<!-- [et_pb_line_break_holder] -->    payload.set('description', 'Showroom demand\u00e9 : '+reservationShowroom.name+'\\n\\n'+data.message.trim());<!-- [et_pb_line_break_holder] -->    payload.set('etablissement', data.organization.trim());<!-- [et_pb_line_break_holder] -->    payload.set('telephone', data.phone.trim());<!-- [et_pb_line_break_holder] -->    payload.set('nom', data.lastName.trim());<!-- [et_pb_line_break_holder] -->    payload.set('prenom', data.firstName.trim());<!-- [et_pb_line_break_holder] -->    payload.set('email', data.email.trim());<!-- [et_pb_line_break_holder] -->    payload.set('pays', data.country.trim());<!-- [et_pb_line_break_holder] -->    payload.set('utm_source', new URL(location.href).searchParams.get('utm_source') || '');<!-- [et_pb_line_break_holder] -->    const feedback = $('.spe-feedback');<!-- [et_pb_line_break_holder] -->    feedback.hidden = true;<!-- [et_pb_line_break_holder] -->    feedback.classList.remove('is-success');<!-- [et_pb_line_break_holder] -->    sending = true;<!-- [et_pb_line_break_holder] -->    $('.spe-send').disabled = true;<!-- [et_pb_line_break_holder] -->    $('.spe-send').textContent = 'Envoi en cours\u2026';<!-- [et_pb_line_break_holder] -->    $('.spe-close').disabled = true;<!-- [et_pb_line_break_holder] -->    const controller = new AbortController();<!-- [et_pb_line_break_holder] -->    const timeout = setTimeout(() => controller.abort(), 20000);<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      const response = await fetch(CONFIG.reservationWebhook, {method:'POST',mode:'cors',body:payload,credentials:'omit',signal:controller.signal});<!-- [et_pb_line_break_holder] -->      if (!response.ok) throw new Error(response.status === 429 ? 'Veuillez patienter quelques minutes avant de r\u00e9essayer.' : 'La demande n\u2019a pas pu \u00eatre envoy\u00e9e. Veuillez r\u00e9essayer plus tard.');<!-- [et_pb_line_break_holder] -->      feedback.textContent = 'Votre demande a \u00e9t\u00e9 envoy\u00e9e. L\u2019\u00e9quipe vous recontactera pour organiser votre visite.';<!-- [et_pb_line_break_holder] -->      feedback.classList.add('is-success');<!-- [et_pb_line_break_holder] -->      reservationForm.reset();<!-- [et_pb_line_break_holder] -->      $('.spe-send').textContent = 'Demande envoy\u00e9e';<!-- [et_pb_line_break_holder] -->    } catch (error) {<!-- [et_pb_line_break_holder] -->      \/\/ Zoho ne renvoie pas d'en-t\u00eate Access-Control-Allow-Origin sur la<!-- [et_pb_line_break_holder] -->      \/\/ r\u00e9ponse de ce webhook : le navigateur emp\u00eache donc de lire le<!-- [et_pb_line_break_holder] -->      \/\/ r\u00e9sultat (TypeError \"Failed to fetch\") m\u00eame quand la demande a bien<!-- [et_pb_line_break_holder] -->      \/\/ \u00e9t\u00e9 re\u00e7ue et trait\u00e9e par Zoho. On l'affiche donc comme un succ\u00e8s :<!-- [et_pb_line_break_holder] -->      \/\/ seule une vraie absence de r\u00e9seau ou un d\u00e9passement de d\u00e9lai (AbortError)<!-- [et_pb_line_break_holder] -->      \/\/ reste signal\u00e9 comme incertain.<!-- [et_pb_line_break_holder] -->      if (error.name === 'AbortError') {<!-- [et_pb_line_break_holder] -->        feedback.textContent = 'L\u2019envoi prend trop de temps. La r\u00e9ception n\u2019a pas pu \u00eatre confirm\u00e9e.';<!-- [et_pb_line_break_holder] -->      } else if (error instanceof TypeError) {<!-- [et_pb_line_break_holder] -->        feedback.textContent = 'Votre demande a \u00e9t\u00e9 envoy\u00e9e. L\u2019\u00e9quipe vous recontactera pour organiser votre visite.';<!-- [et_pb_line_break_holder] -->        feedback.classList.add('is-success');<!-- [et_pb_line_break_holder] -->        reservationForm.reset();<!-- [et_pb_line_break_holder] -->        $('.spe-send').textContent = 'Demande envoy\u00e9e';<!-- [et_pb_line_break_holder] -->      } else {<!-- [et_pb_line_break_holder] -->        feedback.textContent = error.message === 'Veuillez patienter quelques minutes avant de r\u00e9essayer.' ? error.message : 'La demande n\u2019a pas pu \u00eatre envoy\u00e9e. Veuillez r\u00e9essayer plus tard.';<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      if (!feedback.classList.contains('is-success')) {<!-- [et_pb_line_break_holder] -->        $('.spe-send').disabled = false;<!-- [et_pb_line_break_holder] -->        $('.spe-send').textContent = 'Envoyer la demande';<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    } finally {<!-- [et_pb_line_break_holder] -->      clearTimeout(timeout);<!-- [et_pb_line_break_holder] -->      sending = false;<!-- [et_pb_line_break_holder] -->      $('.spe-close').disabled = false;<!-- [et_pb_line_break_holder] -->      feedback.hidden = false;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  root.addEventListener('click', e => { const book = e.target.closest('[data-book]'); if (book) openReservation(book.dataset.book,book); });<!-- [et_pb_line_break_holder] -->  $('.spe-list').addEventListener('click', e => { const button = e.target.closest('[data-select]'); if (button) select(button.dataset.select,false); });<!-- [et_pb_line_break_holder] -->  $('.spe-list').addEventListener('scroll', updateMore, {passive:true});<!-- [et_pb_line_break_holder] -->  $('.spe-more').addEventListener('click', () => $('.spe-list').scrollBy({top:180,behavior:window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth'}));<!-- [et_pb_line_break_holder] -->  render();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Chargement partag\u00e9 si le module est utilis\u00e9 plusieurs fois sur une page.<!-- [et_pb_line_break_holder] -->  \/\/ noConflict() restaure l'\u00e9ventuelle variable L utilis\u00e9e par un autre plugin.<!-- [et_pb_line_break_holder] -->  const key = Symbol.for('spe-showrooms.leaflet-1.9.4');<!-- [et_pb_line_break_holder] -->  if (!window[key]) window[key] = new Promise((resolve,reject) => {<!-- [et_pb_line_break_holder] -->    const script = document.createElement('script');<!-- [et_pb_line_break_holder] -->    script.src = 'https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js';<!-- [et_pb_line_break_holder] -->    script.integrity = 'sha256-20nQCchB9co0qIjJZRGuk2\/Z9VM+kNiyxNV1lvTlZBo=';<!-- [et_pb_line_break_holder] -->    script.crossOrigin = 'anonymous';<!-- [et_pb_line_break_holder] -->    script.onload = () => resolve(window.L.noConflict());<!-- [et_pb_line_break_holder] -->    script.onerror = () => { delete window[key]; reject(new Error('Carte indisponible')); };<!-- [et_pb_line_break_holder] -->    document.head.appendChild(script);<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  window[key].then(library => {<!-- [et_pb_line_break_holder] -->    if (!host.isConnected) return;<!-- [et_pb_line_break_holder] -->    L = library;<!-- [et_pb_line_break_holder] -->    map = L.map($('.spe-map'), {zoomControl:false,scrollWheelZoom:false}).setView(CONFIG.center,CONFIG.zoom);<!-- [et_pb_line_break_holder] -->    L.control.zoom({position:'bottomright',zoomInTitle:'Zoom avant',zoomOutTitle:'Zoom arri\u00e8re'}).addTo(map);<!-- [et_pb_line_break_holder] -->    const apiKey = CONFIG.cartoApiKey.trim();<!-- [et_pb_line_break_holder] -->    if (apiKey) {<!-- [et_pb_line_break_holder] -->      let tileFailed = false;<!-- [et_pb_line_break_holder] -->      const tiles = L.tileLayer(CONFIG.tileUrl+'?key='+encodeURIComponent(apiKey), {<!-- [et_pb_line_break_holder] -->        maxZoom:19, attribution:CONFIG.attribution,<!-- [et_pb_line_break_holder] -->        referrerPolicy:'strict-origin-when-cross-origin'<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->      tiles.on('loading', () => { tileFailed = false; });<!-- [et_pb_line_break_holder] -->      tiles.on('tileerror', () => {<!-- [et_pb_line_break_holder] -->        tileFailed = true;<!-- [et_pb_line_break_holder] -->        $('.spe-map-status').hidden = false;<!-- [et_pb_line_break_holder] -->        $('.spe-map-status').textContent = 'Le fond de carte est indisponible. Utilisez les liens \u00ab Y aller \u00bb dans la liste.';<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->      tiles.on('load', () => { if (!tileFailed) $('.spe-map-status').hidden = true; });<!-- [et_pb_line_break_holder] -->      tiles.addTo(map);<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      $('.spe-map-status').textContent = 'Le fond de carte est momentan\u00e9ment indisponible. Utilisez les liens \u00ab Y aller \u00bb dans la liste.';<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    renderMarkers();<!-- [et_pb_line_break_holder] -->    fitResults();<!-- [et_pb_line_break_holder] -->    const observer = new ResizeObserver(() => { if (!host.isConnected) { observer.disconnect(); map.remove(); return; } map.invalidateSize({pan:false}); const current = visible.find(s => s.id === selected); if (current && hasCoordinates(current)) { map.setView([current.lat,current.lng],map.getZoom(),{animate:false}); markers.get(selected)?.openPopup(); } updateMore(); });<!-- [et_pb_line_break_holder] -->    observer.observe(host);<!-- [et_pb_line_break_holder] -->    root.querySelector('link').addEventListener('load', () => map.invalidateSize());<!-- [et_pb_line_break_holder] -->  }).catch(() => { $('.spe-map-status').textContent = 'La carte n\u2019a pas pu \u00eatre charg\u00e9e. Les showrooms restent consultables dans la liste.'; });<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><\/script><!-- [et_pb_line_break_holder] -->[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":13,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"Envie de tester nos \u00e9crans en conditions r\u00e9elles ? Trouvez le showroom Speechi proche de chez vous. R\u00e9servez une d\u00e9mo et essayez nos solutions !","_seopress_robots_index":"","_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"difl_page_category":[],"class_list":["post-44227248","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/speechi.com\/fr\/wp-json\/wp\/v2\/pages\/44227248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speechi.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/speechi.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/speechi.com\/fr\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/speechi.com\/fr\/wp-json\/wp\/v2\/comments?post=44227248"}],"version-history":[{"count":10,"href":"https:\/\/speechi.com\/fr\/wp-json\/wp\/v2\/pages\/44227248\/revisions"}],"predecessor-version":[{"id":44228951,"href":"https:\/\/speechi.com\/fr\/wp-json\/wp\/v2\/pages\/44227248\/revisions\/44228951"}],"wp:attachment":[{"href":"https:\/\/speechi.com\/fr\/wp-json\/wp\/v2\/media?parent=44227248"}],"wp:term":[{"taxonomy":"difl_page_category","embeddable":true,"href":"https:\/\/speechi.com\/fr\/wp-json\/wp\/v2\/difl_page_category?post=44227248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}